Opened 2 weeks ago

Closed 11 days ago

Last modified 11 days ago

#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 bluegr)

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)

china.043 (14.6 KB ) - added by bluegr 2 weeks ago.

Download all attachments as: .zip

Change History (5)

by bluegr, 2 weeks ago

Attachment: china.043 added

comment:1 by bluegr, 2 weeks ago

Description: modified (diff)

comment:2 by mduggan, 12 days ago

This dialog is showing if the stored "opcode 12" scene (global 0x61) is *not* 57. The relevant item in the enterSceneOps of 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.

comment:3 by mduggan, 11 days ago

Owner: set to mduggan
Resolution: fixed
Status: newclosed

In b1d37b90:

DGDS: Return to train map when skipping train arcade

This avoids a debug box asking us what ending we want.

This fixes #15784.

comment:4 by mduggan, 11 days 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.

Note: See TracTickets for help on using tickets.