Jump to content

Home

Secret of Monkey Island - CD Talkie Edition Project


Espiox

Recommended Posts

OK, I'll leave it as is then.

 

You have to modify the splitter's output if the print command has position parameters:

 

Here's the original:

(14) print(255,[Pos(240,8),Text("--LeChuck!^255^3GRRRRRRRRR!^255^3Arf, oo

f-oof, Monkey Island^15!^255^3*sniff* *sniff*")]);

(AE) WaitForMessage()

 

After split:

(14) print(255,[Pos(240,8),Text("--LeChuck!")]);

(AE) WaitForMessage()

(14) print(255,[Text("GRRRRRRRRR!")]);

(AE) WaitForMessage()

(14) print(255,[Text("Arf, oof-oof, Monkey Island^15!")]);

(AE) WaitForMessage()

(14) print(255,[Text("*sniff* *sniff*")]);

(AE) WaitForMessage()

 

EDIT: Regarding completely new music where there wasn't any before:

For additional music, the SE added background sounds to certain scenes. We could add this to the CD version by creating new SOUN starting at 099_LFLF_icons\009_SOUN_130.dmp. SOUN works as follows:

 

Values from offsets 0-23 (0x00-0x17) are all the same, so just copy data from an existing SOUN.

At offset 24 (0x18) track number in hex format (for new music not in original start with track decimal 24 or hex 18).

At offset 25 (0x19) seems to be loop, opening uses 01, scummbar uses ff.

The six remaining values 26-31 (0x1a-0x1f) are all 00 if you want the music to start at the beginning of the track.

 

An example of music not starting at the beginning:

The scene at the lookout following the intro uses the same music as the opening, but starts at position 1 min 36 sec. Hex values are 01 23 30 00 00 00. 01 23 30 is equivalent to 1 35 48 in decimal.

 

We would start the music by using startSound(130) or whatever number our SOUN is. To avoid problems we could use

VAR_RESULT = isSoundRunning(130)

if (!VAR_RESULT) {

startSound(130)

}

in the ENCD of the room.

 

Stopping the music is a bit more difficult, as you have to add a stopSound(130) for every script in the room that leaves the room. A possible problem I can see is on the dock with Guybrush and Elaine when their theme plays on the dock: it should be fine if we stop the dock ambient sound before the Guybrush and Elain theme plays.

Link to comment
Share on other sites

  • Replies 383
  • Created
  • Last Reply

Still, my linesplitter doesn't seem to give the expected results. When looking at the rubber chicken, Guybrush only says "Hmmm...". He should continue with "A rubber chicken with a pulley in the middle", but he doesn't. Any idea what causes the issue?

The original script looks like this:

Events:
  7 - 00CE
  8 - 0024
  9 - 009B
 5A - 0018
 5B - 001E
[0018] (1A) Var[182] = 8;
[001D] (00) stopObjectCode()
[001E] (1A) Var[376] = 961;
[0023] (00) stopObjectCode()
[0024] (D8) printEgo([Text("Hmmm...^255^3A rubber chicken with a pulley in the middle^^255^3What possible use could that have?")]);
[0081] (AE) WaitForMessage()
[0083] (54) setObjectName(377,"rubber chicken")
[0095] (14) print(255,[Text(" ")]);
[009A] (00) stopObjectCode()

And my tool changes it to:

Events:
  7 - 00CE
  8 - 0024
  9 - 009B
 5A - 0018
 5B - 001E
[0018] (1A) Var[182] = 8;
[001D] (00) stopObjectCode()
[001E] (1A) Var[376] = 961;
[0023] (00) stopObjectCode()
[0024] (D8) printEgo([Text("Hmmm...")]);
WaitForMessage()
printEgo([Text("A rubber chicken with a pulley in the middle^")]);
WaitForMessage()
printEgo([Text("What possible use could that have?")]);
[0081] (AE) WaitForMessage()
[0083] (54) setObjectName(377,"rubber chicken")
[0095] (14) print(255,[Text(" ")]);
[009A] (00) stopObjectCode()

Link to comment
Share on other sites

Strange... The first time you look at it, he says the whole message, but if you look at it again, he'll just say "Hmmm..."

 

EDIT: And if you look at it and then immediately click to start walking around, he says the whole message again... This could have something to do with it being in a VERB. Or it could have something to do with the Event specification. I would test it without any WaitForMessage() between the lines and see if that works.

Link to comment
Share on other sites

Here is a little tool that looks up strings from the speech.info and a mi1.txt (scummtr.exe -w -g monkeycdalt -of mi1.txt -H) in the same dir and outputs a "match.bat" with "ren sample.mp3 linennumber_sample.mp3". It splits up multiple lines (\0xff\0x03).

 

It's a *very* dirty hack but should do the job.

 

http://helicoid.de/scumm/mkspeech.zip

 

This can be used as a starting point for generating a monster.sou - even with multiple lines like LogicDeLuxe proposes.

 

Why did we not have this tool for MISP!

Link to comment
Share on other sites

EDIT3: It now works perfectly! Cutscene 2 (Guybrush reading the re-elect Governor Marley poster) is used to keep verb menu visible and keep the camera in the same position. CursorShow() is used to keep the cursor visible during the cutscene. UserputOn() is used to enable user input (clicking, keys, etc.) during cutscene. The earliest the cutscene can end without messing up Guybrush's lines is after the first WaitForMessage(). Now the behavior to the user is exactly the same as normal, you can click on other objects during Guybrush's lines, you can walk around, you can use other verbs, etc.

[0024] cutscene([2])
CursorShow()
UserputOn()
printEgo([Text("Hmmm...")]);
WaitForMessage()
endCutscene()
[0030] (D8) printEgo([Text("A rubber chicken with a pulley in the middle^")]);
WaitForMessage()
[0062] (D8) printEgo([Text("What possible use could that have?")]);
WaitForMessage()
[0089] (54) setObjectName(377,"rubber chicken")
[009B] (14) print(255,[Text(" ")]);
[00A0] (00) stopObjectCode()

The only problems with the dialog splitter are with verbs, right? If so, just use these modifications when splitting lines only in ???_VERB.dmp files.

Link to comment
Share on other sites

EDIT3: It now works perfectly!
Unfortunately not. Still "What possible use could that have?" is missing sometimes. Well, that can be solved by placing endCutscene() after that line, so not a big deal.

 

But worse, you can easily get errors like "Object 377 stopped with active cutscene/override!" when clicking around without letting Guybrush finish his text first.

I think, letting the controls disabled during his lines is a better idea. Just like with the election poster. Unless, you have a better idea.

Link to comment
Share on other sites

OK, I have a better idea:

[0024] cutscene([2])
CursorShow()
UserputOn()
beginOverride
goto end
printEgo([Text("Hmmm...")]);
WaitForMessage()
[0030] (D8) printEgo([Text("A rubber chicken with a pulley in the middle^")]);
WaitForMessage()
[0062] (D8) printEgo([Text("What possible use could that have?")]);
WaitForMessage()
[end] endCutscene()
[0089] (54) setObjectName(377,"rubber chicken")
[009B] (14) print(255,[Text(" ")]);
[00A0] (00) stopObjectCode()

Cutscene ends after the last line, and I've added options to handle override so that error won't occur anymore. User can still click around, but can't use any verbs until Guybrush finishes talking.

Link to comment
Share on other sites

Stopping the music is a bit more difficult, as you have to add a stopSound(130) for every script in the room that leaves the room.

 

Each room contains an ENCD (room entry) and EXCD (room exit) script. I believe you could modify the single EXCD script to stop the music whenever the room is exited.

Link to comment
Share on other sites

Hopefully that's the case. I was just looking at the scummbar as an example, and it didn't have a stopSound in the EXCD, just in scripts leaving the room for whatever reason.

 

I'm only guessing, but maybe because whenever you enter a conversation with one of the patrons, it zooms to a close-up, which is actually a new room, and the music is supposed to continue playing in those cases.

Link to comment
Share on other sites

Cutscene ends after the last line, and I've added options to handle override so that error won't occur anymore. User can still click around, but can't use any verbs until Guybrush finishes talking.
Nice theory, but unfortunately not accurate. Just look at the chicken while Guybrush is still saying the chicken text: error.

 

The way I implemented it now, you'll get controls back as soon as Guybrush starts the last line in a VERB script. I hope there are no tricky jumping, as my tool currently only detects cutscenes when they are in order. It does only set this cutscene stuff if the text isn't already in a cutscene, and if it is a VERB script. Let's hope, this works now as expected.

dialogsplitter.zip - 0.01MB

Link to comment
Share on other sites

The way I implemented it now, you'll get controls back as soon as Guybrush starts the last line in a VERB script. I hope there are no tricky jumping, as my tool currently only detects cutscenes when they are in order. It does only set this cutscene stuff if the text isn't already in a cutscene, and if it is a VERB script. Let's hope, this works now as expected.

dialogsplitter.zip - 0.01MB

Looks good, however, could you add in CursorShow() right after cutscene[2] and before beginOverride to make it less obvious that we're using a cutscene for this?

 

EDIT: Here's an updated version of dialog splitter with the CursorShow() change added back in:

dialogsplitter.zip - 0.01MB

Link to comment
Share on other sites

So, since it is running fine now, we need to release an official script patch in order to build a mapping.txt which is compatible for everyone.

Some bugfixes are still possible, as long as no text is changed.

 

So is the stump joke wanted in? Someone at mixnmojo apparently did have contact with Dominic Amarto and he did some lines for the 2002's April fools joke back then. I can't find the news page of it anymore, so I don't know who it was.

The stump joke lines are:

"Hey!"

"There's a hole at the base of this stump!"

"Wow! It's a tunnel that opens onto a system of catacombs!"

"I think I can squeeze through--"

(after requesting disks 22, 36 and 114)

"Oh, well. I guess I can't go down there."

"I'll just have to skip that part of the game."

Btw, the loading image of the SE has a floppy disk labeled "disk 23" which is probably a joke on this.

Link to comment
Share on other sites

First of all the modified SCUMM scripts have to be finished. There are still some minor things to do IMHO (removing some of the "Throopweed" variations, maybe add logic to the sword fighting scenes that the proper response sample is chosen, ...)

 

If that is done, there is still some more work to be done, as the sword fighting scenes (and some other places) need a proper speech file assignment.

 

Finally the installer has to be finished to reduce the need of technical skills. I'm not sure how Espiox is coming forward with that.

 

For my very rough estimate, I guess it's about 5-8 man hours of work with some polish, maybe more. Translate that to the spare time everyone involved has for the project....

 

Of course anyone who wants to help out is welcome to do so. Alpha & beta testing is essential too....

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...