Official Thimbleweed Park Forums

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

6 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:

1 Like

Oh I remember!
I’ve found this post:


Scroll down to remember where he was stuck.

2 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:

Official Thimbleweed Park Forums powered by Discourse.