Nostalgia Studio d2025.05.0

Nostalgia Studio d2025.05.0 was released on May 10, 2025. Release Notes Add app icon for both window and file Change application font to Roboto Medium Closing application will now confirm with user if any files have unsaved changes. UUID duplicates will now be reported when opening a project Deleting a directory now closes files in that directory Delete key now initiates deletion of selected directory Remove ability to re-order tabs. There were bugs associated with that. Mac: Menu bar shortcuts now say Cmd instead of Ctrl. TileSheetEditor: Fix selection clearing to work when clicking outside image. TileSheetEditor: Fix Delete Tile functionality, which was completely broken TileSheetEditor: Fix Inserrt Tile functionality, which was completely broken PaletteEditor: Fix color number key range. Previously, pressing A caused the editor to jump to the last color. PaletteEditor: Page rename will now take effect upon pressing enter if the text input has focus Novel Code Changes This section is completely useless for a user, but just highlights some fun internal changes made in this release. ...

May 14, 2025 · 3 min · Gary Talent

MaybeView

Note: this is based on the version of Ox in following revision in the Nostalgia repo : 1b629da8fc658a85f07b5209f2791a5ebdf79fa1 Problem In C++, hash maps are often used with strings as keys. This would typically look something like this. std::unordered_map<std::string, int> ages; ages["Jerry Smith"] = 54; And here is an example of a lookup: int age = ages["Jerry Smith"]; There is a hidden inefficiency here. The lookup operator does not take a std::string_view or a C string. The lookup operator takes a std::string. That means, even though we are passing in a C string that has all the necessary data, we are implicitly calling the std::string constructor, which will allocate space on the heap for the string data, then copy the existing C string into the buffer it allocated. Then, as soon as the lookup call is finished, the temporary std::string is destroyed. ...

April 24, 2024 · 2 min · Gary Talent

Ox Preloader

Note: While this was originally published on 2023-02-27, it was updated to reflect later changes to the codebase on 2025-05-18. Note: this is based on the following revision in the Nostalgia repo : d6e4ab7a24 This might be the most insane piece of software I have ever written. That’s probably mostly because I have never heard such a system as this, which should usually be a deterrent when you think you have come up with a brilliant new idea. But questions of whether or not I should proceed with this idea never stood a chance against my firm conviction that it could be done. Those questions were in fact mercilessly slaughtered by my unrelenting will to make this beautiful abomination a reality. ...

February 27, 2023 · 10 min · Gary Talent

Ox Model System

Note: While this was originally published on 2023-01-30, it was updated to reflect later changes to the codebase on 2025-05-18. Note: this is based on the version of Ox in this commit in the Nostalgia repo : d6e4ab7a24 Synopsis In languages like Go and Python, there is a feature called reflection. This essentially allows functions to iterate over arbitrary struct types to get or set its data, or simply get information about the type. Reflection is most commonly used for object serialization, and that is the main use for it in Nostalgia. ...

January 30, 2023 · 10 min · Gary Talent

MetalClaw

Synopsis In Nostalgia, stored representations of data tend to take the form of one to one mappings to serialized data structures. Nostalgia uses this approach for game saves, creature definitions, world layout, and a good deal more. Representing this data in JSON allows for easy debugging, as it is a human readable data serialization format, however that convenience comes at a cost to performance and size. This cost is negligible on modern PCs, but it is completely unsuitable for such limited hardware as the GBA. ...

June 25, 2022 · 7 min · Gary Talent