Characters: one file per character with a world per difficulty

- CharacterNN.sacredK holds the shared hero and one world per difficulty,
  plus an autosave file; the game works in save\characters\_work
- Load window: one row per character, a difficulty dialog on Laden
  (worlds, newer autosaves, "(neu)" starts a new game with the shared
  hero), Umbenennen, delete moves the character to characters\deleted
- The world keeps its own portals and hero position when the shared hero
  is put on
- K and the Esc menu's "Speichern" save directly (quicksave path)
- One-time migration of the old save rows and exported heroes, after a
  backup
- Startup no longer hangs in the game's foreground loop (0x810af0)
- Text overrides apply to our own text ids too; shared cUI_Button2
  helpers in game/ui/button.h

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
khallaandClaude Opus 5.5 committed 2026-10-20 01:41:42 +02:00
1 parent 5df7efc198
commit 5bccb0734e
16 files changed
+2052 -64

No files matched your search

+30
View File
@@ -166,3 +166,33 @@ The hero sometimes plays a walking animation after a save game load while
standing still. Not reproduced yet: a load log (hero mode, action, animation
fields, orders) showed nothing unusual; right after a load the game itself
sends one walk order (0x4) while the hero is idle. Measure again when it shows.
## Multiplayer with characters (2026-10-19)
Characters became one file each with a world per difficulty
(`docs/characters.md`); vanilla multiplayer picks exported `Heronn.pax`
heroes, which no longer exist. Later: give multiplayer the shared hero of a
character file (the session's hero file +0x3a3c, as `SelectHeroSlot` does),
and decide what a multiplayer game does to the character's progress.
## Characters: open parts of the rework (2026-10-20)
From the characters rework (`docs/characters.md`, request of 2026-10-19):
- **Unlock difficulties by story completion.** Bronze and Silber stay open;
difficulty d >= 2 opens when the story on d - 1 is completed. The counters
are one byte per difficulty in cStatsManager +0x5704 (read 0x424be0) and
travel in the save header (+0x88..+0x98) and the hero file. Today every
difficulty up to the highest played one is offered (and Silber).
- **Reset a difficulty.** Remove one world from a character (the shared hero
stays); a button / dialog entry in the load window.
- **Remove the export / import UI.** The Esc menu's "Exportieren" and the
character screen's import (cUI_Character mode 5, `docs/char-export.md`):
characters replace exported heroes.
- **Silent autosave every 10 minutes** (a setting later) into the
autosave file, without the busy dialog, like the direct save
(`SaveOnTick`) but marked as an autosave.
- **Quickload (row 0) does not know characters.** Ctrl+Z saves into the
current character, but the quickload event (0x116, engine +0x68 = row,
flag 0x200) loads `GAME00.PAK`, which is not listed; make it reload the
current character's world (or its newer autosave).