#15784 closed defect (fixed)
DGDS: HoC: It's possible to select all available endings
| Reported by: | bluegr | Owned by: | mduggan |
|---|---|---|---|
| Priority: | normal | Component: | Engine: DGDS |
| Version: | Keywords: | ||
| Cc: | Game: | Heart of China |
Description (last modified by )
At the end of the game, after the train sequence, you get a dialog (probably a debug dialog) to select which of the four possible endings you'd like to view.
Perhaps it's related to the changeScene() call in menu.cpp. It jumps to scene 106, but perhaps it should take you to another one?
Attaching a saved game for reference. Enter the train, and go through the dialogs to watch the end sequence.
Tested under Windows 11. ScummVM daily compiled with MSVC
Attachments (1)
Change History (5)
by , 14 months ago
comment:1 by , 14 months ago
| Description: | modified (diff) |
|---|
comment:2 by , 13 months ago
comment:4 by , 13 months ago
The solution was much simpler than I thought - we should just return to scene 57 if the user selects to skip the train arcade sequence. The rest of the game behaves as you expect.

This dialog is showing if the stored "opcode 12" scene (global 0x61) is *not* 57. The relevant item in the
enterSceneOpsof Scene 106 (Paris)SceneOp<op: showdlg args: [119 48] conditionList= SceneCondition<flg 0x0e(global|equal-not(abs)) num 97 val 57> >and then the dialog in dialog file 119:
Dialog<num 48 Rect<95,72 147,61> bgcol 0 fcol 15 selbgcol 0 selfontcol 14 fntsz 4 flags 0x03 frame 2 delay 210 next 119:2 talkdata 0:0 state=null actions= DialogueAction<span: 15-40 opList= SceneOp<op: global args: [2 346 10 1 367 10 1]> SceneOp<op: sceneOpSegmentStateOps args: [2 1 0 0]> > DialogueAction<span: 41-57 opList= SceneOp<op: global args: [2 346 10 1 367 10 0]> SceneOp<op: sceneOpSegmentStateOps args: [2 1 0 0]> > DialogueAction<span: 58-76 opList= SceneOp<op: global args: [2 346 10 0 367 10 1]> SceneOp<op: sceneOpSegmentStateOps args: [2 1 0 0]> > DialogueAction<span: 77-88 opList= SceneOp<op: global args: [2 346 10 0 367 10 0]> SceneOp<op: sceneOpSegmentStateOps args: [2 1 0 0]> > str='PARIS ENDINGS: 1. Romance and Negotiate 2. Romance only 3. Negotiate only 4. Neither'>Scene 57 is the travel map. I need to step further back and work out when it gets set as the stored scene and where/why it gets overwritten.