Opened 10 years ago

Closed 4 years ago

Last modified 12 months ago

#9121 closed patch (fixed)

DOTT: support for Maniac Mansion on Ed's computer

Reported by: SF/tobigun Owned by: sev-
Priority: normal Component: Engine: SCUMM
Keywords: Cc:
Game: Day of the Tentacle

Description

This is a proposal for support of Maniac Mansion in DOTT. At the moment if Ed's computer is started only a pop-up will show up that informs the user that Maniac Maniac is unsupported so far.

The patch adds a new feature to the config-manager that allows to queue launcher entries.
This feature is used in DOTT's startManiac() method as follows:
1. Maniac Mansion is enqueued in the launcher queue
2. DOTT is enqueued in the launcher queue with the current savestate and all transient options that are currently set
3. DOTT quits itself
4. as there are entries in the launcher queue, ScummVM does not terminate but dequeues the next launcher entry from the queue and starts it (in this case MM)
5. When the user quits MM ScummVM still does not terminate as the DOTT entry is in the queue. The entry is dequeued and started (with the savestate passed in the "save_slot" transient option)

The patch does not auto-detect MM, instead the first launcher entry with gameid "maniac" is used. If no entry exists, a message box with a short instruction of how to add MM to the launcher (similar to the message before) is displayed.

Ticket imported from: #2911342. Ticket imported from: patches/1226.

Attachments (1)

dott_mm.patch (8.6 KB ) - added by SF/tobigun 10 years ago.

Download all attachments as: .zip

Change History (7)

by SF/tobigun, 10 years ago

Attachment: dott_mm.patch added

comment:1 by lordhoto, 10 years ago

That "DomainQueueEntry" entry in the config manager looks really like a gross HACK. Unlike the "active" domain, which specifies the inner most domain (i.e. the most specialized settings), the domain queue looks like to achieve a launch of multiple games in a row. While the idea of launching games in a row is not bad, but I do not think it belongs into ConfigManager to take care of that. We should rather change the way games are launched instead of hacking some possibility in the ConfigManager to achieve that. After all the "ConfigManager" (as you can guess from its name) purpose is to handle the configuration and not how games are launched.

Also resetQuit is also a HACK for systems, which want to force an RTL (think of the PlayStation 2 etc.), since else the user would need to boot up the whole system again. While this HACK works fine, I do not think it should be allowed to reset the quit flag in general. After all when some subsystems receive an EVENT_QUIT, that is intended to show that ScummVM should quit (or the user wants ScummVM to quit!). Instead you should rather not call "quitGame" in the SCUMM engine, which pumps a EVENT_QUIT through all subsystems subscribed to events, but allow the SCUMM engine to quit without EVENT_QUIT (i.e. have some internal flag, whether the engine should shut down).

Your forced RTL also does cause ScummVM to show an error message, when ask ScummVM to quit (via the close window/program functionality of your window manager btw. ("x" button)), after you launched MM from inside DOTT. It will first shut down MM and then fire up DOTT again which immediately triggers "(42:432:0x0): charset 0 not in room 42 at 6339665+0 in file tentacle.001!" for me.

I see you mentioned that the patch only launches the first MM target, I guess that is fine for most cases, but I guess power users (i.e. having more than one MM game) would rather want to have launched exactly the MM bundled with DOTT. I do not know whether that is achievable at all though, maybe someone experienced with SCUMM can comment on this.

comment:2 by sev-, 10 years ago

I believe the cleaner solution would be to create another subclass of SCUMM engine which will be able to spawn engine copies. Then switch DOTT to use this engine instead of default one, and instantiate another copy for MM when requested.

See ScummCUP engine for sample of minimalistic SCUMM engine. Since we properly cleanup after engine exit, this approach could work.

comment:3 by sev-, 9 years ago

Any plans to implement this soon(ish)?

comment:4 by sev-, 4 years ago

This has been already implemented

comment:5 by sev-, 4 years ago

Owner: set to sev-
Resolution: fixed
Status: newclosed

comment:6 by digitall, 12 months ago

Component: Engine: SCUMM
Game: Day of the Tentacle
Note: See TracTickets for help on using tickets.