I think I found an unused room in Monkey island 2

While messing around with the ScummVM Debugger I found an unused (?) room (room 93) in Monkey Island 2. I can’t find something about this room on Google, so could someone explain me the usage of this?
192_bot

3 Likes

It looks like part of the underground area at the end of the game where LeChuck keeps popping up.

I haven’t seen any of the game programming, but my theory is that it’s used as a background and the scumm script draws the doors on the left and/or right depending on which section of the maze Guybrush is in.

5 Likes

maybe @RonGilbert could shed some light to this topic?

1 Like

It’s the template room of the underground area. Doors, signs, pipes etc. are objects which are turned on and off depending on the actual room.

Example object from this room:
right%20door

7 Likes

I assume you have played TWP? The hotel rooms use the same principle.
Ron has written a blog post about this kind of rooms on the blog in the futuristic times of 2016: https://blog.thimbleweedpark.com/pseudorooms


Btw. when you type room in ScummVM it will show the template room number in square brackets, e.g.: room 160 [93]

You can see how the object states in the underground area are set depending on the current room number in this script:

Script# 200
[0000] (48) if (VAR_ROOM == 160) {
[0007] (30)   setBoxFlags(8,128);
[000B] (30)   setBoxFlags(2,128);
[000F] (07)   setState(873,3);
[0013] (5D)   setClass(873,[32]);
[001A] (07)   setState(875,1);
[001E] (5D)   setClass(875,[32]);
[0025] (07)   setState(876,1);
[0029] (5D)   setClass(876,[32]);
[0030] (07)   setState(891,1);
[0034] (5D)   setClass(891,[32]);
[003B] (10)   VAR_RESULT = getObjectOwner(892);
[0040] (48)   if (VAR_RESULT == 15) {
[0047] (07)     setState(892,0);
[004B] (5D)     setClass(892,[32]);
[0052] (18)   } else {
[0055] (07)     setState(892,1);
[0059] (5D)     setClass(892,[160]);
[0060] (**)   }
[0060] (07)   setState(879,1);
[0064] (07)   setState(882,1);
[0068] (07)   setState(883,1);
[006C] (30)   setBoxFlags(2,128);
[0070] (30)   setBoxFlags(7,128);
[0074] (48) } else if (VAR_ROOM == 161) {
[007E] (07)   setState(872,3);
[0082] (5D)   setClass(872,[32]);
[0089] (07)   setState(873,2);
[008D] (5D)   setClass(873,[32]);
[0094] (48)   if (Var[102] == 88) {
[009B] (07)     setState(877,3);
[009F] (18)   } else {
[00A2] (07)     setState(877,1);
[00A6] (**)   }
[00A6] (5D)   setClass(877,[32]);
[00AD] (07)   setState(878,1);
[00B1] (5D)   setClass(878,[32]);
[00B8] (07)   setState(889,1);
[00BC] (5D)   setClass(889,[32]);
[00C3] (07)   setState(890,1);
[00C7] (5D)   setClass(890,[32]);
[00CE] (07)   setState(880,1);
[00D2] (07)   setState(881,1);
[00D6] (07)   setState(883,1);
[00DA] (07)   setState(887,1);
[00DE] (48) } else if (VAR_ROOM == 162) {
[00E8] (07)   setState(872,2);
[00EC] (5D)   setClass(872,[32]);
[00F3] (07)   setState(873,1);
[00F7] (5D)   setClass(873,[32]);
[00FE] (05)   drawObject(874setXY(,13,6));
[0106] (5D)   setClass(874,[32]);
[010D] (07)   setState(893,1);
[0111] (5D)   setClass(893,[32]);
[0118] (07)   setState(882,1);
[011C] (07)   setState(883,1);
[0120] (07)   setState(884,1);
[0124] (07)   setState(885,1);
[0128] (48) } else if (VAR_ROOM == 163) {
[0132] (07)   setState(872,1);
[0136] (5D)   setClass(872,[32]);
[013D] (07)   setState(873,3);
[0141] (5D)   setClass(873,[32]);
[0148] (05)   drawObject(874setXY(,17,6));
[0150] (5D)   setClass(874,[32]);
[0157] (07)   setState(894,1);
[015B] (5D)   setClass(894,[32]);
[0162] (07)   setState(880,1);
[0166] (07)   setState(881,1);
[016A] (07)   setState(885,1);
[016E] (48) } else if (VAR_ROOM == 164) {
[0178] (30)   setBoxFlags(9,128);
[017C] (30)   setBoxFlags(3,128);
[0180] (07)   setState(872,3);
[0184] (5D)   setClass(872,[32]);
[018B] (05)   drawObject(874setXY(,22,6));
[0193] (5D)   setClass(874,[32]);
[019A] (07)   setState(880,1);
[019E] (07)   setState(881,1);
[01A2] (07)   setState(882,1);
[01A6] (07)   setState(883,1);
[01AA] (07)   setState(884,1);
[01AE] (07)   setState(886,1);
[01B2] (07)   setState(887,1);
[01B6] (30)   setBoxFlags(3,128);
[01BA] (48) } else if (VAR_ROOM == 165) {
[01C4] (07)   setState(872,1);
[01C8] (5D)   setClass(872,[32]);
[01CF] (07)   setState(873,3);
[01D3] (5D)   setClass(873,[32]);
[01DA] (07)   setState(879,1);
[01DE] (07)   setState(881,1);
[01E2] (07)   setState(883,1);
[01E6] (07)   setState(884,1);
[01EA] (07)   setState(885,1);
[01EE] (07)   setState(887,1);
[01F2] (07)   setState(888,1);
[01F6] (48) } else if (VAR_ROOM == 166) {
[0200] (07)   setState(872,3);
[0204] (5D)   setClass(872,[32]);
[020B] (07)   setState(873,2);
[020F] (5D)   setClass(873,[32]);
[0216] (07)   setState(879,1);
[021A] (07)   setState(880,1);
[021E] (07)   setState(881,1);
[0222] (07)   setState(884,1);
[0226] (07)   setState(886,1);
[022A] (07)   setState(887,1);
[022E] (48) } else if (VAR_ROOM == 167) {
[0238] (07)   setState(872,2);
[023C] (5D)   setClass(872,[32]);
[0243] (07)   setState(873,1);
[0247] (5D)   setClass(873,[32]);
[024E] (07)   setState(879,1);
[0252] (07)   setState(880,1);
[0256] (07)   setState(882,1);
[025A] (07)   setState(883,1);
[025E] (07)   setState(884,1);
[0262] (07)   setState(885,1);
[0266] (07)   setState(886,1);
[026A] (07)   setState(887,1);
[026E] (07)   setState(888,1);
[0272] (18)   /* goto 0275; */
[0275] (**) }
[0275] (A0) stopObjectCode();
END
5 Likes

image

Deja vu (quote)

2 Likes

Oh, is this the new game from Terrible Toybox, Thumbleweed Park™?

5 Likes

Yes, it looks like the underground is a pseudo room.

1 Like

I hope so, but consider that last year he replayed Monkey2 and had to use a walkthrough for a puzzle :grin::grin:

2 Likes

Oh I remember!
I’ve found this post:

Scroll down to remember where he was stuck.

3 Likes

That puzzle was just too good for mere mortals to solve…:sweat_smile:

So that only strengthens my theory, can’t you see it? :smirk_cat:

1 Like

I don’t like to revive old discussions, but this one matches quite well with a new topic that I would like to discuss: another example of unused game resources.

Somebody on the Monkey Island Discord server pointed out that in the MI2 sprite sheet there is a sprite of Guybrush flashing… :neutral_face:

Please notice that above his boots there is no trace of his usual pants.

Now, I have two questions:

  1. Do you remember this sprite being used in MI2? Maybe @LogicDeLuxe can shed some light on unused sprites in MI2?
  2. If it turns out that it was never used in the game, could someone please tell Ron to stop doing that game thing and come here to explain how they intended to use the flashing Guybrush?
3 Likes

Could it be an unused sprite that was made for the sequence in which Guybrush changes into his costume to enter Elaine’s party on Booty Island? Or maybe for the sequence in which he gives the Mad Monkey head to the shopkeeper?

That’s the first thing that I though, but that sprite doesn’t seem to match very well with that sequence of movements, which stops when the party bouncer tells him to change clothes elsewhere:

Well, the curious thing is that the strange sprite appears in the sprite sheet just beside the sequence of movements used when Guybrush gives the Mad Monkey head to the shopkeeper:

But that image doesn’t seem to belong to that sequence either. For example, Guybrush has pants in the frames of that sequence. The position of that image near this sequence might be just a coincidence.

I have not checked all the images of the sprite sheet, but at a quick glance I don’t see any other image that shows Guybrush with no pants.

2 Likes

So the secret of Monkey Island is that Guybrush is a sex offender.
Well, Ron did say he liked controversial endings.

4 Likes

Of course he’s a sex offender. Do you remember how he used obsessively the “Take” command on Kate Capsize, over and over again?

Uh oh… wait…

3 Likes

I guess now we know why he’s in court.
It all makes sense now…

5 Likes

To be honest, he did show previous signs of criminal behavior.

3 Likes

That’s true, it doesn’t fit with that sequence. Nevertheless I thought that the unused sprite could have been made as the first of an alternative sequence in which Guybrush changes his clothes in front of the Booty Island guard, or maybe as a part of a cancelled sequence in which Guybrush goes “in the bush or something” and he can be seen from the back while changing into the women’s clothes on the far left hand side of the screen.

I agree with you. However, if the sprite does belong to this sequence, it could be just a joke that was cancelled or that was never meant to go public.

1 Like

My money is definitely on joke left in by the artists.

1 Like