If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Luigi's Mansion (GameCube)/Unused Code

From The Cutting Room Floor
Jump to navigation Jump to search

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

Acactussayswhat?
Please elaborate.
Having more detail is always a good thing.
Remember when YT had a little indifferent face when a video went down? TCRF remembers.
This page or section has one or more broken YouTube links.
Please find an archived version of the video(s) or a suitable replacement.
Specifically: Unused Screen Settings video has been set to Private

Unused Multiplayer Mode

An 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

Luigis-Mansion-Choke-Animation.png

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

The 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

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
Europe 040BBA78 C00DBA38 040BBA50 60000000


(Source: LMFinish)

Unused EnFrighten Appear Type

On 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

Remember when YT had a little indifferent face when a video went down? TCRF remembers.
This page or section has one or more broken YouTube links.
Please find an archived version of the video(s) or a suitable replacement.

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 EU
04010FD4 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

The 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
0404472C 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
<SAY> Displays the rest of the text on the line in a dialogue window. New lines can be made by typing the \n escape sequence.
<HPMAX> 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 <HPMAX>(100); the effects of the tag will be saved. If <HPMAX>(0) is used, a game over will occur.
<CAMERAWAIT> Works the same way as <WAIT> but only while a CMN camera file is currently playing.
<KEYUNLOCK> Unlocks a door.
<LIGHT> 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.
<PATHLIGHT> Tells the game to load a lighting animation file, which must be inside of the same event folder as the event itself. <GPATHLIGHT> is used instead.
<BODYON> 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.
<BEAMON> Runs no-op (NOP) code. Does nothing.
<BEAMOFF> Runs no-op (NOP) code. Does nothing.
<PATHLIGHTEND> Disables the lighting effects that were loaded with <GPATHLIGHT> or <PATHLIGHT>.
<REPLACE> 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 <ACCOUNT> tag is activated, the game will crash.
<TITLE> Warps to the title screen without saving any progress.
<LUIGELTOFF> Reverses the effects of <LUIGELTON>, which disables the lighting effect on Luigi.
<TIMESTOP> 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.
<TIMEACTIVE> 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.
(Source: LMHack)

Unused CTP Parameter Fields

Unused or leftover fields that can be found within CTP parameter files.

Field Name Description
mSpeed Effects the speed which ghosts pull when using TsuriType 5 (EnBasicTsuri). Since type 5 isn't used, neither is this field.
mFrightenLevel Does nothing.
Possibly related to EnFrighten?
mAttackPattern2 Does nothing.
mHasCoin Does nothing.
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.
mKiryuCount Unknown.
This and the two below are located in the parameters for Ghost Guy's mask, as well as the Clockwork Soldiers' wind up handle.
mNumGround Unknown. Can be found in the parameters for Ghost Guy's mask.
mFlag Unknown. Can be found in the parameters for Ghost Guy's mask.
(Source: LMHack)

Unused Sheet Behaviors

Sheets are 2D textures that get turned into furniture (tablecloths, posters, bedsheets, etc.). There are a few that aren't used anywhere.

No. Description
7 Cloth that hangs over the left side of the furniture's scanbox.
8 Cloth that hangs over the back side of the furniture's scanbox.
10 Poster that hangs over the right side of the furniture's scanbox.
11 Poster that hangs over the left side of the furniture's scanbox.
12 Poster that hangs over the back side of the furniture's scanbox.
14 Bed sheets with two layers. The bottom layer hangs off the left and right side, and the top layer is flat like a poster.
25 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.
(Source: LMHack)

Unused Conditions

These unused conditions are meant for the cond_type field found in various JMP files.

No. Condition Name Description
4 SaEnCheckTime Checks the arg values in observerinfo, 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.
5 CondAlwaysTrue No condition. Duplicate of 0 and 2.
7 EnFindPlayerNear Gives a ghost a small spawn range, meaning Luigi can only activate the ghost if he's close to it.
12 CondWaterAllOff 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.
19 CondEventFlagOff Checks if the flag listed in cond_arg0 is off.