Hacker Newsnew | past | comments | ask | show | jobs | submit | dxuh's commentslogin

I feel like this whole problem is just made up. Back in the day, when I played lots of Counter Strike, we had community servers. If a cheater joined, some admin was already online and kicked them right away. I'm sure we hit some people that were not actually cheaters, but they would just go to another server. And since there was no rank, no league, no rewards (like skins, drops, etc.), there was no external reward for cheating. It annoys me that cheating in competitive video games seems like a bigger problem than it has been in the past for no good reason.


Manually managing one cheater in a 20 person server is obviously very different than managing games between multiple millions of concurrent players


Well its because we don't use community servers anymore. Lobbies are created in real time, particularly where SBMM is involved.

It's a bigger problem because in a lobby of 100 people, 1 person cheating ruins it for 99 players. Whereas in a 20 person lobby you can just boot that one person and it only ruins the game for 19 others.


Counter-Strike has been doing this for years. It's called "Overwatch" (even before Blizzards Overwatch came out). And believe it or not it failed to reliably catch actual cheaters AND got non-cheaters in trouble (both repeatedly). A very good player is indistinguishable from a cheater with a good cheat. Sometimes people just get super lucky for a few rounds and you might get judged based on that.


> A very good player is indistinguishable from a cheater with a good cheat.

I played COD4 a lot, though not competitively. I used to say that I had a bad day if I didn't get called a cheater once.

I didn't cheat, never have, but some people are just not aware of where the ceiling is.

The cheaters that annoyed us back then were laughably obvious. They'd just hold the button with a machine gun and get headshots after headshots, or something blatant like that.


> some people are just not aware of where the ceiling is

True of everything. Getting good just lets you see the skill gaps. I've sunk a serious chunk of time into both pool and chess. In both I'd be willing to take a bet that I can beat the median player with my eyes closed (in pool, closing them after walking the table but before getting down on the shot).

And in both of those activities, there are still like 10-20 levels of "person at skill level A should always win against person at skill level B" between me and someone who is ACTUALLY good at pool or chess. Being charitable, in the grand scheme of things I might be an intermediate player.


Overwatch is now non-public - when CS2 replaced CS:GO, it wasn't available, and when it was reintroduced, it was only for "trusted partners" [0].

[0]: https://steamdb.info/patchnotes/14178987/


I was imagining specific things that are impossible, not just things that would be unlikely.

For example, in NBA2k there are a lot of players running around who are like 12 feet tall. The client has to render that, and the client could have a “if another client tells us their player is more than 8 feet tall, it is a cheater”


I agree that use of trigonometry is almost always a smell, but e.g. in games there are so many cases where angles are just more useful and intuitive. I just grep-ed for "angle" in a game of mine and I find it for orienting billboard particles (esp. for particles a single angle is much better than a quat for example). Also for an FPS camera controller. It's much simpler to just store a pitch and a yaw and change that with mouse movement, than storing a quat. You can't really look at a quat and know what kind of rotation it represents without opening a calculator. And I also use it for angle "fudging" so if you want to interact with something if you are roughly looking at it, you need to configure an angle range that should be allowed. It just makes sense to configure this as an angle, because we have some intuition for angles. So I guess for computations angles are probably usually wrong, but they are great for intuition (they are low-dimensional and linear in amount of rotation). That makes them a better human interface for rotations. And as soon as you computations start with angles, of course they find their way into the rest of the code.


Now, don't get me wrong. Trigonometry is convenient and necessary for data input and for feeding the larger algorithm.


[flagged]


I'd pretty much always store pitch/yaw for a first/third person controller. This makes it trivial to modify the values in response to input - `pitch += mouse_delta.y` and to clamp the pitch to a sane range (-90 to 90 deg) afterwards.

You can then calculate a quaternion from the pitch/yaw and do whatever additional transforms you wish (e.g. temporary rotation for recoil, or roll when peeking around a corner).


Interesting. I do it in quaternion, but mostly work in unclamped 6DOF systems.


Quaternions break down for other situations. They cannot represent a rotation greater than 360 degrees. In an engine like Unity (which stores rotation as quats), you can use arbitrary Euler angles in the editor and it will work fine, but the scene file has to store 2 things. There is an additional m_LocalEulerAnglesHint property that covers this edge case.


You're right that quaternions don't work for those. Vec3 is the move IMO. Direction is axis; len is magnitude.


I quite like modern C++, so I really tried to make it work for gamedev, but I think you can't really do it. You can use all the modern C++ features that are not in the standard library though! I am working on a little game the last few months and after a while I just decided to not use any of the C++ standard library (I just use a few C headers) and make my own Vector, Array, Span, String, FlatMap. And using those the game compiles really fast. If I touch a header that is included almost everywhere (the big game state struct), I can compile and link (mold) in ~300ms. If I touch player.cpp I compile in 250ms. That is mostly good enough for me, but I am thinking about the "game code as dynamic library" thing myself.

I always thought CMake was good enough. I use FetchContent for all external dependencies and git submodules + add_directory for all internal dependencies. It took me a while to figure out that this was the simplest thing that works reliably though. I have used vcpkg and conan extensively and have completely given up on them.

I don't use C++ modules, because afaik they are still mostly broken. Without modules clangd works wonderfully and has been working wonderfully for a few years. I really, really like it. I think it can be done! I am missing reflection though, but if I would really want to use it, I'd probably just use clang -ast-dump instead of the new reflection functionality.


Thanks for the reply!

> I quite like modern C++, so I really tried to make it work for gamedev, but I think you can't really do it.

What exactly do you mean? What parts of modern C++ did not work for you?

> You can use all the modern C++ features that are not in the standard library though!

> I just decided to not use any of the C++ standard library (I just use a few C headers)

So what do you do with C++ that C alone couldn't do?


I think the standard library is good, but if you pull in ANY of it's headers you add a couple hundred milliseconds to every translation unit. So when making games (and only then), I avoid the standard library.

What I do like and use is overloading, references, templates, concepts, lambdas, enum classes, user defined literals, constexpr, operator overloading for math (!), little syntax stuff like structured binding declarations, "auto" and range based for. I also made my own little fmt (like https://riki.house/fmt). C++ is a much nicer language than C imo, even without the standard library.


Note that if you want to go a bit further, you should make your own minimal build system that replaces CMake. That alone will make your project compile much faster!

I've made my own in Python that generates Ninja files only - and it's surprisingly not that much work (especially if Claude Code can help you).


But CMake only reruns, when CMakeLists.txt has changed. That doesn't happen a lot after the core of the project has been set up for me. Especially not when I am tweaking a game mechanic or something.

Also if you want your project to compile with Ninja on Linux, but also with MSVC and you want cross-compilation (on Linux for Windows) and an Emscripten build (I do want all of those), then rebuilding CMake is quite a lot of work.


Sounds interesting! Have you published this somewhere? I wonder how well this works when you want to compile some complex dependencies. Have you compared compile times between your solution and when using CMake?


I loved the gym and it did help my psyche. That is very clear to me. But now I don't go to the gym anymore, because I have a very stubborn radial tunnel syndrome in my right arm and my knee osteoarthritis is worse than ever. Of course both of those things make me angry and anxious. While I am absolutely positive that exercise helps your psyche, I would not be surprised if the majority of this correlation is actually from a common cause (it might also be stress in general - i.e. no time for exercise), lack of financial resources or just a bad place of living, etc.


I feel like this is ultimately uninteresting. This doesn't change anyone's image of these companies. We know they are evil. They have done worse and they will do worse. They never got a meaningful punishment and I have no reason to believe they will. All they get is outrage on the internet, which is effectively meaningless to them.

The files being examined right now shows me that there is nothing bad enough to actually make anything happen, no matter how absurdly evil it is. Are we too easily distracted? Or are we too used to inhumanity now? Or are the powerful simply more powerful than most of the rest of the planet?


I am sort of questioning my use of LLMs again after, first reluctantly, starting to use them multiple times a day. This story seems like it was intended to be an allegory for LLM-use though I know it couldn't have been.


It's an allegory about trusting "best practices", standardized bodies of knowledge¹, and "that's the way it's always been done". Not that those things necessarily don't work, they do in the story as well as in real life, but they need to adapt to change and the story illustrates what happens when they harden from best practice into unquestioned dogma.

¹ There's even a BoK for software developers, the SWEBOK, but I've never met anybody who's read it.


I think it's more about social stratification than bodies of knowledge. The knowledge is treated as a class signifier, especially by the protanogist. In the bit with the friend, the new training he didn't have was practically useful, but, more than that, it sharpened the gap between the "haves" (went to a good school) and "have-nots".


It's also about hyperspecialization. A concept that was beginning to be noticed at the time.


Why could it not have been? LLM is just a reasoning machine something Asimov spent a lot of time thinking about.


I think using LLM or even vibe coding is fine for things you are not absolutely interested in but have to do it anyway.


I liked aider initially, but I keep running into problems, as the project seems largely unmaintained. I wanted to install OpenCode yesterday, but this somewhat turns me off. Are there any good model-agnostic alternatives? I am somewhat shocked there is not a lot of good open source CLI LLM code assistants going around.


I'm in the same boat.

Apparently a group of devs forked it: https://github.com/dwash96/cecli

Haven't tried yet


I've had serious trouble with my knee and elbow for years and ChatGPT helped me immensely after a good couple dozen of doctors just told me to take Ibuprofen and rest and never talked to me for longer than 3 minutes. I feel like as with most things LLM there are many opponents that say "if you do what an LLM says you will die", which is correct, while most people that look positively towards using LLMs for health advice report that they used ChatGPT to diagnose something. Having a conversation with ChatGPT based on reports and scans and figuring out what follow-up tests to recommend or questions to ask a doctor makes sense for many people. Just like asking an LLM to review your code is awesome and helpful and asking LLM to write your code is an invitation for trouble.


I have recently started re-implementing parts of the standard library myself just to improve compile times (and I did - massively!), but I purposely kept {fmt} around, because I think it's a great library and I thought it would be as fast to compile as you could possibly make it (it likely still is considering what it can do). Also because the dev put a lot of effort into optimizing compile times [1] and seems to be much smarter than me. So I made benchmark to prove you wrong and show you it's not that easy. But it turns out formatting a couple of numbers and strings is much faster with your basic formatting library [2] [3].

Comparing using `hyperfine --warmup 3 "g++ FILE.cpp"` (and some flags for fmt) I get 72ms vs 198ms. So I changed my mind and might take a crack at replacing {fmt} as well. Cool stuff! Thank you.

[1] https://vitaut.net/posts/2024/faster-cpp-compile-times/

[2] https://godbolt.org/z/3YaovhrjP bench-fmt.cpp

[3] https://godbolt.org/z/qMfM39P3q bench-rikifmt.cpp


rikifmt only supports the default formatting which is somewhat limited and in the current implementation cannot even format std::string or FP numbers without data loss. Once more functionality is added the variadic template approach will quickly become the limiting factor both for build speed and binary size. But for toy examples you can definitely do better.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: