It would not be too hard to wire up the Load screen to work with an identical view (I'd provide a "Load Mode" to the Window_SaveGame class so I can reuse all the same code, then just have the "load game" button point there. Using a seperate Window_LoadGame class is not a good idea to my mind, since you want a consistent UI between save/load and don't want to duplicate code). I don't know what you/Keith had in mind for the interface, but I think at least this is much nicer than how saves worked in AIWC.

There are a number of improvements I'd like to make, but some are reliant on improved UI elements to work with (mouseover of a save could show in game elapsed time/wall clock time, for example). I'd like to be able to modify the font size inside the buttons to allow me to fit more things on the screen at a time. Relatedly, it might be nice to have buttons whose size didn't scale with the size of the screen. When I fullscreen on my large monitor, I have truly enormous "Save Game" buttons, which seems excessive.

The AI Type/Difficulty would be good to include along with campaign name and map type, but I don't see a ToString() method for either of those.

Looks great I've been hoping to do a campaign-based approach, with each campaign getting a save folder inside Saves/ , with a metadata file in there for things like how many times you've loaded a save from that campaign, how many times you've loaded a save from before the "furthest point reached" in that campaign in terms of game-time, etc. It'd also be great to do some automated parseable logs of things like AIP increases, tech unlocks, planet captures, etc, so that AAR writers don't have to do all the grunt work of telling us what happened.

On save and load being different windows, it's fine to merge them, probably, but bear in mind that these aren't really filesystem clones. Load runs when you don't have a game loaded at all (a very different context than if you do), and deals with all possible save files. Save runs with a world present, and deals (ideally, with the campaign thing) only with files in the same campaign.

Logged

Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

Man, Keith, I'm really excited to by all those possibilities! That all sounds great.

I figure of all the things for Keith to be working on, improving the save game menu isn't particularly high on he list. So if you guys would like to use what I come up with as an interim solution then you are welcome to do so. Otherwise, I'll just hoard my nice save game menu until Keith makes a better one.

So I have successfully made a usable and more fun save game menu for myself. Here's how it works. When you click "Load Game" you get taken to the Campaign Screen. There you select which Campaign from which you want to load a game. Clicking on a given campaign will bring up the Load Screen, which shows saved games from that campaign that you can load.

The Save Game menu now correctly only shows games from the current campaign.

If other people would like to use this mod I am happy to share the code. Otherwise this is good enough for me for the moment!

Impressive. I hope this feature will be officially integrated into the vanilla game, at some point.

I used to use a very specific pattern for my saves in AIWC, something like "[map type] [difficulty] - [minor factions] - [where I was]". I imagined some user-defined patterns could be used, like "%T %D - %F - %u" for the example above. Something inspired by the format option of the unix "date" command. But that campaign folder approach is pretty awesome!

There is at least a game, I can't remember which one, that display a tiny panel with some interesting metadata when hovering over a save. Like the time played and current gold and level and stuff.

Just adding some ideas on that big pile of juicy features! I don't have time (and motivation) to dive into the code, right now. I'll be back for content creation! (At some time when the UI will be more... less... well, better. ;P)

Here are the files I modified. This should apply cleanly onto an install of .500.

The code is reasonably commented, but I'll explain quickly what I've done for your reference. As Chris suggested, I have encoded metadata about the game into the Save Game name. We use the ~ symbol to indicate the beginning of the metadata portion, with # as the field seperator. Those characters are currently not allowed in save or campaign names.

I created a SaveGameData struct that contains the metadata for each Save Game, and there's also an additional helper class in Window_SaveGameMenu.cs which is also used by LoadGameMenu.cs.

The Window_LoadGameMenu.cs runs in 2 modes, Campaign and Load. I originally tried to create a Window_CampaignGameMenu.cs, but I got errors about there being no reference to a "Campaign Window Class" in the Arcen Universal code.

Existing saved games will be placed into the campaign "Unknown", but should be otherwise adequately compatible with this code.

There is a known problem when you load games across different campaigns without closing the application; it causes the wrong Campaign Name to be auto-filled into the Save Game menu.

return ( -x.secondsSinceGameStart.CompareTo( y.secondsSinceGameStart ) );Because secondsSinceGameStart is an int field and can't be null. For that matter, x and y are both structs in this case, so you don't even need to null-check them.

I noticed these because it spits out warnings about that kind of thing. Didn't hurt anything, certainly.

Logged

Have ideas or bug reports for one of our games? Mantis for Suggestions and Bug Reports. Thanks for helping to make our games better!

It occurs to me that sometimes I'd like a "Save and Quit" button. There are definitely times when you want to save and then exit, so giving a button for this scenario just seems like a nice quality of life boost for the user. I put the button between "Save" and "Close" so it should be hard to click by accident (though since you just saved, it's hardly a problem).

This code to do it when added to Window_SaveGameMenu.cs. It's the same code from the ordinary Save button, but with the QuitRequested line added. There is an unfortunate gotcha here, which is that if there's not some sort of sleep between queueing the Save Command and the Quit instruction, you lose the save which is why I have included a very hacky 5 second sleep. I'm sure there's a better technique though....