• 2 Posts
  • 153 Comments
Joined 3 years ago
cake
Cake day: June 15th, 2023

help-circle


  • The actual writing of course isn’t pure. Loading isn’t either, but we only support loading on level transition, so we can supply the data already when constructing the game state. Saving is done by gathering all the data that should be saved in a struct, what is pure and happens at a well defined point in the frame, where the game state is known to be consistent (-> I think it’s after all systems have been updated), and then this struct is written out to a file.


  • As said, we try to. Not that we managed to reach this ideal in any existing project yet. We did manage to get Auto-Save implemented without affecting the “purity” of computations, but as you said, achievements and analytics are a PITA. I think those are possible with pure computations too, but we did not yet manage to build the game architecture in a way that makes that work. Yet.

    I’m currently on a research project to investigate how much of a game we can move into pure Embedded Domain Specific Languages. So, basically a set of gameplay scripting languages that enforce the “everything that happens during the frame is pure” constraint. Buuut, again, this project is still at its early stages, and under very strict budget constraints, so I cannot say yet if the outcome will be a feasible architecture or not…


  • Every function has side effects and variables will need to be modified in multiple places in the same frame

    We try to avoid exactly that, because it is what caused us man-years of bug-hunting and bug-fixing over our past projects. Our end-goal (that is still very far away…) would be to have the state from the previous frame and the user inputs, do only pure computations based on this data, and write out a new state before rendering the current frame.

    We do use C++ though (because Unreal, and console platforms), what makes this extra hard, because C++ is a language for writing bugs, not for writing software.







  • I’m willing to bet that it’s AI. It soft-contradicts itself quite often, emphasising that C++ is “Performance First”, but then also claiming stuff like “Rust achieves memory safety with zero runtime overhead”.

    Edit: What I am trying to say is that I have seen text like this in LLM output quite often, if the LLM is mixing text from different sources in its training data.

    Also, there is just wrong stuff in the text itself, not only in the conclusion. For instance the claim that Rust’s type system makes data races impossible. They are easier to avoid, but there is nothing stopping you from writing data races… Here, for instance, have a data race in safe Rust




  • There are several small differences between the Xbox 360 and the Xbox Series X gamepad. No single point by itself would be a very big difference, but overall it sums up. I have both gamepads in front of me, and will try to make a comparison:

    • The material of the Xbox 360 gamepad feels “better”. I can’t exactly say why, but I think it’s because of its smooth material on the bottom.
    • The Xbox 360 gamepad has bigger analogue sticks, with stronger springs.
    • Similarly, the triggers of the Xbox Series X gamepad are “weaker” than of the Xbox 360 gamepad.
    • I would have sworn that the Xbox Series X controller is a lot lighter too, but turns out, after weighing them both, that the Xbox 360 controller is slightly lighter. It does not feel this way though, with the Xbox 360 gamepad feeling way sturdier and heavier (but, as said, it’s actually lighter?!?).
    • The buttons on the Xbox 360 gamepad feel a lot smoother. They don’t make a “cheap, broken device” noise when being pressed.
      • This also applies to the D-Pad.

    I think the last point - the feeling when using the buttons and especially the D-Pad - is the most important one for me. On the Xbox 360 gamepad the buttons feel like actual buttons. On the Xbox Series X gamepad they sound and feel like a fidget toy. Using the D-Pad on the Xbox Series X gamepad is really annoying, because of the noise it makes.






  • Gamedev here: For non-indie projects it’s not up to the devs to decide which platforms get a native build. That decision is made by the publisher, and usually depends strongly on the estimated amount of extra work needed to make a native version. I agree with your statement, that if devs use ARM development PCs, they get a strong argument to convince publishers to pay for a native version, because porting costs will drop to near-zero.

    However (there always is a “however”): Many devs cannot switch away from Windows. If one develops for PC only, it’s possible. If one targets other platforms too (think: game consoles), one is stuck with whatever development environment the manufacturers of those platforms support - what is typically Windows and Visual Studio. It is kind of a chicken-and-egg problem. Platform SDKs will be made available for other operating systems or processor architectures once enough gamedevs are using those. Gamedevs cannot yet use those because platform SDKs aren’t available for them…

    It’s, to be honest, a frustrating experience… I personally would switch away from MSVC and Windows the moment I get an opportunity to. However, there never was an opportunity up to now… Our previous tech-director was pushing for Linux on dev machines - or rather: “let the devs use whatever they want, as long as it works” - but there never was an opportunity to switch, due to our games’ target platforms allowing only Windows for development…