the cutting room mirror

Unused Code

This is a sub-page of Luigi's Mansion (GameCube).

Please elaborate.
Having more detail is always a good thing.

Unused Multiplayer Mode#

Watch on YouTubeAn unused two-player splitscreen can be activated with a simple Action Replay code. When the code is activated, a second Luigi will spawn and it will bind the second controller port to it. When both Luigi are near each other, only the first player's camera is shown; moving further away causes the game to go into splitscreen mode. The second Luigi may act a little broken, since you can't properly stun ghosts as well as enter rooms that the first Luigi isn't in. Doors will take a while for the second Luigi to enter through, and captured ghosts by the second Luigi won't actually count.

Unused Multiplayer Mode:

Version

Encrypted

Decrypted

Europe (Revision 2)

B2Y9-GX8A-MRZZ0
0WMY-12C3-ZG2YC
975R-DH4Y-UZ21P
T51C-YTEZ-B5C5Y
178B-T03H-9E0EE
X54D-33F7-60HFD
E7Y8-UN0P-BGYQF
T12K-K3FF-DCP91
TZY3-U7UR-7K667
AY42-JJMM-RPJJT
F0UA-4NAK-XJ8Y4
AZB7-1X81-Z5KB4
U202-DDDR-J87KG
758N-H8XU-VQ1C0
KHE9-WEC6-93ZEC
UJDE-4A76-W4W0H
Y80K-NP48-VBE5X
FQ2E-VCHF-H4PTD

044C5770 00000001
040058FC 483739E4
043792E0 7C0802A6
043792E4 90010004
043792E8 9421FFF0
043792EC 38600098
043792F0 4BE589D5
043792F4 38800001
043792F8 906D011C
043792FC 4BE61695
04379300 38210010
04379304 80010004
04379308 7C0803A6
0437930C 4E800020
04075560 800D011C
0400CA40 60000000
0400CAA0 60000000
0403FE58 60000000

USA

NRP6-DBEB-UUCR5
DUNR-1FY6-U1Q35
2W9B-ANPE-7Z5VQ
84KV-ZC6P-9MW55
U8V6-M47X-HXB7A
UGC3-N4XX-K9Z4N
QZPX-E9E6-VNV83
A3KF-V4YF-BPJR9
CWZG-U5PK-ET3JF
9YBU-PH33-2UVJW
QVUT-7PZ3-WMENY
WEYJ-Y1AX-1A4QU
F753-Q4QC-AQE2J
8XZU-AYV6-HKWQE
6DX2-UABH-R7CQ1
X3N4-TJN7-H999U
AVQZ-8FJQ-Q3AX3
RDNM-ACC0-ZG9H6
726G-GGVR-G7MMZ
GRTM-3V95-Z847Y
T6KR-5JQE-FU6FM
HVM3-A3DW-J6RAX

044D80B0 00000001
04005894 483829CC
04388260 7C0802A6
04388264 90010004
04388268 9421FFF0
0438826C 38600098
04388270 4BE46495
04388274 38800001
04388278 906D011C
0438827C 4BE4F01D
04388280 38210010
04388284 80010004
04388288 7C0803A6
0438828C 4E800020
040726D8 800D011C
04079EB4 60000000
04079E6C 48000010
040B943C 3003FFFE
0400BBC4 60000000
0400BC24 60000000
0403E7D8 60000000
04079574 60000000

(Source: KIRBYMIMI/LMFinish)

Unused Poisoned State#

Watch on YouTube

Luigi has an unused "poisoned" state in which he moans, loses health (and coins), expels purple heart particles, plays a wobbling sound, and uses an unused animation called DOKU_LP (POISON_LOOP) in which he dances between each foot and holds himself while choking. In the animation he also uses the otherwise-unused sad eyes texture and puffs his cheeks out. At the end of the animations he slaps his face.

To activate it, enter one of the following Action Replay codes and then press B + D-Pad Up:

Version

Encrypted

Decrypted

USA

CYZJ-HD1Q-DVHH3
J3U2-9UWV-YBCPR
UE09-PJ70-E6U18
UTKZ-60UJ-4PAB0

00BA32FB 08000000
4A4CAFD0 00000208
323A2B84 00008050
423A2B84 09A44320

Europe

F5HC-5TPP-9FXCD
KHWK-6VN2-KMZ4J
ZU4Y-G8FC-CV1U8
RWW2-RV33-5BYXF

00725BE5 18000000
4A4B8590 00000208
3238FDE4 00008050
4238FDE4 09A44320

Europe Demo

4B7D-244B-9R563
420U-FF3R-QEQR9
V7WB-NKKZ-9TU68
W0T0-NJJU-CDNVX

00724C0A 18000000
CA4BA890 00000208
323920E4 00008050
423920E4 09A44320

(Source: Ralf@GC-Forever, Catley/SoapyLemons)

Unused Luigi Fear States#

Watch on YouTubeThe game holds three more unused modes for Luigi, which consist of a near-identical replica of the crawl sequence used when the unused purple ghosts scare him in the E3 2001 demo, the pink ghost scare attack from the Nintendo Difference build, and an otherwise-unseen "alert" mode.

The first has Luigi's health limit capped to its half, 50 HP, while he crawls uncontrollably across the room he's in, in a very similar fashion to E3 2001. It should be noted that, despite the similarity to the earlier build's crawl sequence, this routine seems to have been updated with a couple of features such as a sweat particle effect which is used in Toad's crying animation on the retail build, and the way he crawls automatically - control stick input only changing his direction - and much faster in comparison. There are unused ghost animations associated with this.

The second routine caps his health to 70 HP, as happens with the pink ghost's scare seen on Nintendo Difference. However, Luigi's movement speed is lowered and his head is locked to a looking-down position; although that's apparently the maximum extent of this state, the game is actually attempting to make him play an animation that is not defined properly, so it defaults to 00 (Wait/Standstill) instead.

The third, interestingly, only seems to trigger on lit rooms. When in this state, Luigi enters a frightened/scared state, which plays in place of his normal idle animation, and the engine plays one of his "uneasy" voice clips. He also tiptoes instead of walking during movement.

Start crawl routine upon damage:

Version

Encrypted

Decrypted

Japan

CW4N-ZM38-VR30T
A49B-7WVE-YUKKY

040B4990 38000064
040B7A88 38800000

USA

CXB3-W1KK-W6N3N
NHTV-WKGT-1BJA5

040B6220 38000064
040B9314 38800000

Europe

YG1T-EE88-MQE6Q
AMDT-V9QH-BKY8K

040B95AC 38000064
040BC72C 38800000

(Source: Laser Crusader)

Vacuum Overheat Shake & Skipped Meter Write#

Watch on YouTube

At 800B8660, there's code which sets up a shake effect for the Poltergust. Such effect appears to be very similar, or identical, to the shaking seen while the vacuum was overheating at E3 2001 and earlier builds of the game. The intensity of the effect always reads zero, so it's never seen, even when sucking up an explosive Spark ghost. The Action Replay code below sets its intensity to 1. When it's active, a boxing explosion-like sound is heard constantly. Additionally, on the same area at 800B8654, there's some never-accessed code which writes directly to the unseen Ghost Counter's number. It originally writes 10 (0x0A), but it can be changed to other values. This segment of code could have been from when the meter kept track of heat level and reached its maximum.

Version

Activate shake

Set Ghost Counter to 10

USA

040B8678 C0029C98

040B8650 60000000

Japan

040B6DF4 C0029C70

040B6DCC 60000000

Europe

040BBA78 C00DBA38

040BBA50 60000000

(Source: LMFinish)

Unused EnFrighten Appear Type#

Watch on YouTubeOn creation, ordinary ghosts have a pointer to EnFrighten, an unused behavior resembling the purple ghost's jumpscare attack seen in the E3 2001 demo. This pointer is unused due to ghosts using value 2 for the appear_type property in the enemy JMP listing, which runs the usual ghost appearance EnAppear. Changing a ghost's appear_type to 1 restores EnFrighten in place of their usual appearance, however it crashes during its range check due to an invalid pointer read/function call starting at 800D4C10. What this was meant to do is unclear.

The codes below fix the crash and force ghosts to use this behavior; however, the way it's set up makes the ghosts uncatchable due to the code which enables stunning never running.

Version

Gecko

Action Replay

USA

040c9284 38a3030c
040d4bd8 c00d53c0
040d4c14 60000000
040d4c18 60000000
040d4c1c 60000000
040d4c20 60000000

92MV-Q4XV-98KHX
17WZ-DY7T-RU2DH
VRRG-YG92-3TZ5W
77QH-PWW0-74EUZ
95D5-DH9P-0G3GK
W2EU-ZTZA-GMYMH
M641-CCNY-Y2AHX

Europe

040cc72c 38a3030c
040d8018 c00d54d8
040d8054 60000000
040d8058 60000000
040d805c 60000000
040d8060 60000000

29ZK-DVD4-KHVKX
1H0C-K125-YNPYC
HX98-WNW2-Z2QEJ
DCR2-XCGZ-CFUGQ
TQ7Y-WHE1-3JFR7
41JY-K210-E6HK1
1V35-DUDQ-PP6CF

Japan

040c798c 38a3030c
040d3338 c00d5310
040d3374 60000000
040d3378 60000000
040d337c 60000000
040d3380 60000000

BN9H-H412-Z904U
9VQK-PHG7-HVK1M
JYZZ-09JD-DQGMT
MWQ6-XGY6-KNR4T
4KCA-BR4T-46TC2
213A-NWPV-VT2YZ
PRA1-WVKE-2M03Q

Unused Screen Settings#

Normal Viewport

Fixed Viewport

Luigi's_Mansion_Normal_Viewport.png
Luigi's_Mansion_Fixed_Viewport.png

The function 80010F20 manages screen scale and positioning. The code used for the default screen and the GBH camera viewport is found here, but skipped code exists at 800110AC which changes the viewport's size to 560x430 and the XY offsets to 40 and 30 respectively. The resulting size and positioning look very similar to those of a zoom mechanic seen in pre-release footage. The graphic that would wrap around it was seemingly removed, but graphics with a border of the same style can be seen in the Pause and File Select screens. The Action Replay codes below force this setting in-game.

NA

JP

EU

04010FD4 48000010

04010C94 48000010

04011BB4 48000010

(Source: LMFinish)

Unused Speedy Spirits#

Luigi's Mansion used to have 25 Speedy Spirits, though only 15 Speedy Spirits are used. Speedy Spirits 16 - 20 still have their dependencies to appear in-game and function (if they're given properties like behavior, money count, etc.) However, Speedy Spirits 21 - 25 had most of their data deleted, aside from leftover parameter files hinting at their existence.

(Source: LMFinish)

Riding Poltergust in American and Japanese builds#

Exclusively in the European version of the Hidden Mansion, Luigi rides the Poltergust 3000 during the Boolossus battle. Despite this, the implementation for the riding state had already been complete for the North American and Japanese builds, but is never triggered.

The Gecko codes below make Luigi always start in the riding Poltergust state:

NA

JP

040ADF20 90DD134C 040ADF24 981D134C

040AC8A0 90DD134C 040AC8A4 981D134C

The European version of the game has the camera zoom in and out after the riding state is triggered that had not yet been implemented for North America and Japan. Additionally, the Luigi player object has a new float property (0x134c) just before the byte that sets the riding state in Europe but is missing from North America and Japan which is used to count frames before the riding state is activated.

Game Boy Horror Ghost Tracker#

Watch on YouTubeThe function 8004463C (US) handles alpha effects and coloring for the unused Game Boy Horror timer's colon. Within it, a comparison against general-purpose register 0 at 80044730 controls the execution of complex operations directly responsible for the timer's border's actor tracking functionality, which had been originally seen in the trailer promoting the game's presence at E3 2001 and became absent by the time of playable demo builds. Its code never runs due to developers intentionally setting the register to 0.

Two versions of this mechanic still exist: mode 1, featuring swaying and smoother motion, and mode 2, which trades animations for more accurate tracking (enabled at 0:16 in the video). Those two modes would automatically switch between each other when far from or near ghosts, respectively, but it is unknown whether code for this still exists. As is, it will only track objects detected by the Boo Radar and not any ordinary or portrait ghosts, presumably indicating they share the same target actor data and/or code.

The code below can force these states:

NA

JP

0404472C 3800000x

0404414C 3800000x

where x: 0 = default animation; 1 = far-distance mode; 2 = close-distance mode; 3 and above = also default animation.

(Source: LMFinish)

Unused/Leftover Script Tags#

Event script tags that no longer have any purpose or are just plain unused.

Tag Name

Description

Displays the rest of the text on the line in a dialogue window. New lines can be made by typing the \n escape sequence.

Sets Luigi's maximum HP value. It also changes the size and speed of the light pink heart (behind the main red heart) on the HUD. Luigi will be unable to gain any more health than this new value until the effects are reversed back to default with (100); the effects of the tag will be saved. If (0) is used, a game over will occur.

Works the same way as but only while a CMN camera file is currently playing.

Unlocks a door.

Changes all lighting in the current map to the alpha lighting seen in early screenshots and videos of Luigi's Mansion, mostly around 2000 to early 2001. This lighting could've been used to create the picture quality desired for magazines and websites at the time, or it could've simply been temporary lighting.

Tells the game to load a lighting animation file, which must be inside of the same event folder as the event itself. is used instead.

Enables visibility of the MDL model for the actor. If Luigi was previously made invisible, this tag will make him visible again, but his equipment (GBH, flashlight, and Poltergust) will stay invisible.

Runs no-op (NOP) code. Does nothing.

Runs no-op (NOP) code. Does nothing.

Disables the lighting effects that were loaded with or .

Seems to be a leftover tag for switching portraits out via event during the Portrificationizer Room cutscenes. If used during that event, the cutscene will desync and portraits will no longer come out correctly. At this point, if the tag is activated, the game will crash.

</td> <td><p>Warps to the title screen without saving any progress.</p></td> </tr> <tr class="odd"> <td><p><LUIGELTOFF></p></td> <td><p>Reverses the effects of <LUIGELTON>, which disables the lighting effect on Luigi.</p></td> </tr> <tr class="even"> <td><p><TIMESTOP></p></td> <td><p>Stops the GameBoy Horror timer. This tag is called in several event files, but it doesn't normally affect anything since the clock system was cut.</p></td> </tr> <tr class="odd"> <td><p><TIMEACTIVE></p></td> <td><p>Resumes the GameBoy Horror timer. This tag is called in several event files, but it doesn't normally affect anything since the clock system was cut.</p></td> </tr> <tr class="even"> <td></td> <td></td> </tr> </tbody> </table> <div style="clear: both;"> </div> <div style="text-align:right;font-size:smaller;"> <p><em>(Source: <a href="https://www.lmhack.net/index.php/Script_Tags">LMHack</a>)</em></p> </div> <h2 id="unused_ctp_parameter_fields"><span>Unused CTP Parameter Fields</span><a class="anchor" href="#unused_ctp_parameter_fields" aria-label="Link to this section">#</a></h2> <p>Unused or leftover fields that can be found within CTP parameter files.</p> <table> <thead> <tr class="header"> <th><p>Field Name</p></th> <th><p>Description</p></th> </tr> </thead> <tbody> <tr class="odd"> <td><p>mSpeed</p></td> <td><p>Effects the speed which ghosts pull when using TsuriType 5 (<strong>EnBasicTsuri</strong>). Since type 5 isn't used, neither is this field.</p></td> </tr> <tr class="even"> <td><p>mFrightenLevel</p></td> <td><p>Does nothing.<br /> Possibly related to EnFrighten?</p></td> </tr> <tr class="odd"> <td><p>mAttackPattern2</p></td> <td><p>Does nothing.</p></td> </tr> <tr class="even"> <td><p>mHasCoin</p></td> <td><p>Does nothing.<br /> Per E3 footage, regular ghosts originally dropped coins when vacuumed, which is likely what this field was for. Leftover in the parameters for elemental spirits, as well as the Foyer cutscene's Gold Ghost.</p></td> </tr> <tr class="odd"> <td><p>mKiryuCount</p></td> <td><p>Unknown.<br /> This and the two below are located in the parameters for Ghost Guy's mask, as well as the Clockwork Soldiers' wind up handle.</p></td> </tr> <tr class="even"> <td><p>mNumGround</p></td> <td><p>Unknown. Can be found in the parameters for Ghost Guy's mask.</p></td> </tr> <tr class="odd"> <td><p>mFlag</p></td> <td><p>Unknown. Can be found in the parameters for Ghost Guy's mask.</p></td> </tr> <tr class="even"> <td></td> <td></td> </tr> </tbody> </table> <div style="clear: both;"> </div> <div style="text-align:right;font-size:smaller;"> <p><em>(Source: <a href="https://www.lmhack.net/index.php/CTP_Parameters">LMHack</a>)</em></p> </div> <h2 id="unused_sheet_behaviors"><span>Unused Sheet Behaviors</span><a class="anchor" href="#unused_sheet_behaviors" aria-label="Link to this section">#</a></h2> <p>Sheets are 2D textures that get turned into furniture (tablecloths, posters, bedsheets, etc.). There are a few that aren't used anywhere.</p> <table> <thead> <tr class="header"> <th><p>No.</p></th> <th><p>Description</p></th> </tr> </thead> <tbody> <tr class="odd"> <td><p>7</p></td> <td><p>Cloth that hangs over the <strong>left</strong> side of the furniture's scanbox.</p></td> </tr> <tr class="even"> <td><p>8</p></td> <td><p>Cloth that hangs over the <strong>back</strong> side of the furniture's scanbox.<br /> </p></td> </tr> <tr class="odd"> <td><p>10</p></td> <td><p>Poster that hangs over the <strong>right</strong> side of the furniture's scanbox.</p></td> </tr> <tr class="even"> <td><p>11</p></td> <td><p>Poster that hangs over the <strong>left</strong> side of the furniture's scanbox.</p></td> </tr> <tr class="odd"> <td><p>12</p></td> <td><p>Poster that hangs over the <strong>back</strong> side of the furniture's scanbox.</p></td> </tr> <tr class="even"> <td><p>14</p></td> <td><p>Bed sheets with two layers. The bottom layer hangs off the left and right side, and the top layer is flat like a poster.</p></td> </tr> <tr class="odd"> <td><p>25</p></td> <td><p>Cloth that flutters with strange sound effects. It hangs off the left and right sides and flutters off the back side of the furniture's scanbox.</p></td> </tr> </tbody> </table> <div style="clear: both;"> </div> <div style="text-align:right;font-size:smaller;"> <p><em>(Source: <a href="https://www.lmhack.net/index.php/Furniture_Sheets">LMHack</a>)</em></p> </div> <h2 id="unused_conditions"><span>Unused Conditions</span><a class="anchor" href="#unused_conditions" aria-label="Link to this section">#</a></h2> <p>These unused conditions are meant for the <em>cond_type</em> field found in various JMP files.</p> <table> <thead> <tr class="header"> <th><p>No.</p></th> <th><p>Condition Name</p></th> <th><p>Description</p></th> </tr> </thead> <tbody> <tr class="odd"> <td><p>4</p></td> <td><p>SaEnCheckTime</p></td> <td><p>Checks the arg values in <em>observerinfo</em>, and compares them against the GameBoy Horror timer. arg1 is the lower bound of the hour value while arg3 is the upper bound. arg2 is the lower bound of the minute value while arg4 is the upper bound.</p></td> </tr> <tr class="even"> <td><p>5</p></td> <td><p>CondAlwaysTrue</p></td> <td><p>No condition. Duplicate of 0 and 2.</p></td> </tr> <tr class="odd"> <td><p>7</p></td> <td><p>EnFindPlayerNear</p></td> <td><p>Gives a ghost a small spawn range, meaning Luigi can only activate the ghost if he's close to it.</p></td> </tr> <tr class="even"> <td><p>12</p></td> <td><p>CondWaterAllOff</p></td> <td><p>Checks if all the water generators in the room have been turned OFF. Luigi can freeze a water generator by spraying it with ice element.</p></td> </tr> <tr class="odd"> <td><p>19</p></td> <td><p>CondEventFlagOff</p></td> <td><p>Checks if the flag listed in <em>cond_arg0</em> is off.</p></td> </tr> </tbody> </table> </article><nav class="cats" aria-label="Categories"><a href="/category/Category-3aSubpages">Subpages</a><a href="/category/Category-3aArticles_requiring_elaboration">Articles requiring elaboration</a></nav> <footer class="foot">This page is adapted from <a href="https://tcrf.net/Luigi's_Mansion_(GameCube)/Unused_Code">"Luigi's Mansion (GameCube)/Unused Code"</a> on <a href="https://tcrf.net/">The Cutting Room Floor</a>, written by <a href="https://tcrf.net/Luigi's_Mansion_(GameCube)/Unused_Code?action=history">its contributors</a> and licensed under <a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>. This copy is reformatted and shared under the same license. Not affiliated with tcrf.net.</footer> </main> <aside class="rail"><nav class="subpages" aria-label="Pages in this article"> <a class="root" href="/wiki/Luigi's_Mansion_(GameCube)">Luigi's Mansion (GameCube) <small title="1 translation">+1</small></a> <ul><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fDebug_Modes">Debug Modes</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fOddities_and_Oversights">Oddities and Oversights</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fRegional_Differences">Regional Differences</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_Areas">Unused Areas</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_Audio">Unused Audio</a></li><li aria-current="page"><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_Code">Unused Code</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_Graphics">Unused Graphics</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_Models">Unused Models</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_Text">Unused Text</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_and_Unseen_Animations">Unused and Unseen Animations</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fUnused_or_Unseen_Animations">Unused or Unseen Animations</a></li><li><a href="/wiki/Luigi's_Mansion_(GameCube)-2fVersion_Differences">Version Differences</a></li></ul></nav></aside> </div> <div class="qwrap" id="qwrap" hidden><div class="qpanel" role="dialog" aria-modal="true" aria-label="Search"> <form class="qform" role="search" onsubmit="return false;"><svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20 20l-3.5-3.5"/></svg><input id="q" type="search" placeholder="Search articles" aria-label="Search" autocomplete="off" spellcheck="false"><kbd>esc</kbd></form> <div id="qres" role="listbox" aria-label="Results"></div></div></div> <div class="lb" id="lb" role="dialog" aria-modal="true" aria-label="Image viewer" hidden><figure><img alt=""></figure> <button type="button" class="lbnav" data-lb="prev" aria-label="Previous image"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10 3 5 8l5 5"/></svg></button><button type="button" class="lbnav" data-lb="next" aria-label="Next image"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="m6 3 5 5-5 5"/></svg></button> <div class="lbbar"><span class="lbn" data-count></span><p class="lbcap"></p><span class="lbz" data-zoom></span><button type="button" data-lb="fit">fit</button><button type="button" data-lb="1">1×</button><button type="button" data-lb="2">2×</button><button type="button" data-lb="4">4×</button><button type="button" data-lb="8">8×</button><a class="lbopen" target="_blank" rel="noopener">open file</a><button type="button" data-lb="close" aria-label="Close">×</button></div></div> <script src="/assets/site.js?v=33" defer></script> </body></html>