Mario Kart Wii - (Possibly) Unused Big Penguin Reflection
This video shows what might be remnant code for an object in the game's code that would have acted as a reflection for the big penguin seen in N64 Sherbet Land. In prerelease screenshots, the big penguin could be seen with a reflection, albeit positioned higher up than expected, plus what appears to be it looking at the opposite direction ( https ://tcrf.net/images/a/ae/MKWii_Fall2007_N64SherbetLand.jpg )
In the game, there is some extra code not used by the rest of the penguin objects that appear to be pretty similar to the code used by the small penguin's reflection. Its associated code is (PAL):
80777288: constructor
808cfe58: vtable
807774e4: destructor
807772c8: load animations
80777390: update
I say "possibly" in the title because there's no direct evidence in the code that this was indeed meant to be the big penguin's reflection. However, comparing the small penguin reflection's code VS this code reveals that they're almost identical.
For example, both object's update function are empty, and both objects have an extra function in their vtables not present in any other penguin object (80777450 for small penguin reflection, and 80777388 for this object).
Not only that, but looking at the big penguin reflection closer reveals that it's using Cull Inside, instead of Cull None like with the small penguins. This makes the reflection look the way it does, making it seem like the reflection is looking back when the big penguin is looking to the front, and viceversa when looking to the back
(... just like in the prerelease screenshot!)
You can use the following code to see this in-game. The following code creates and initializes the reflection object during the big penguin's object creation:
(PAL)
04823250 386000EC
C2777138 00000015
9421FFF0 7C0802A6
90010014 7C7D1B78
386000B0 3D808022
618C9DCC 7D8903A6
4E800421 7F84E378
3D808077 618C7288
7D8903A6 4E800421
7C7B1B78 907D00E8
81830000 818C0044
7D8903A6 4E800421
7F63DB78 81830000
818C005C 7D8903A6
4E800421 7F63DB78
81830000 818C000C
7D8903A6 4E800421
7F63DB78 81830000
818C001C 7D8903A6
4E800421 7FA3EB78
7F84E378 80010014
7C0803A6 38210010
38A00000 00000000
048cfdb4 80776ecc
048cfd54 807760b0
=== Code Documentation ===
Assembly code
Inject at 0x80777138 (ObjPenguinL_ct) (PAL)
.set region, 'P'
.if (region == 'P')
.set new, 0x80229dcc
.set ObjPenguinLMirror_ct, 0x80777288
.else
.err
.endif
Assumes that a copy of r4 is on r28 at this point
stwu r1, -0x10(r1)
mflr r0
stw r0, 0x14(r1)
Store a copy of the current big penguin instance to restore it later
mr r29, r3
Allocate and construct the big penguin reflection
li r3, 0xB0
lis r12, new@h
ori r12, r12, new@l
mtctr r12
bctrl
mr r4, r28
lis r12, ObjPenguinLMirror_ct@h
ori r12, r12, ObjPenguinLMirror_ct@l
mtctr r12
bctrl
Big penguin reflection - Load graphics
mr r27, r3
stw r3, 0xE8(r29)
lwz r12, 0x00(r3)
lwz r12, 0x44(r12)
mtctr r12
bctrl
Big penguin reflection - Load animations
mr r3, r27
lwz r12, 0x00(r3)
lwz r12, 0x5C(r12)
mtctr r12
bctrl
Big penguin reflection - init
mr r3, r27
lwz r12, 0x00(r3)
lwz r12, 0x0C(r12)
mtctr r12
bctrl
Big penguin reflection - Update model
mr r3, r27
lwz r12, 0x00(r3)
lwz r12, 0x1C(r12)
mtctr r12
bctrl
Restore big penguin instance and its map obj data as they're used later
mr r3, r29
mr r4, r28
lwz r0, 0x14(r1)
mtlr r0
addi r1, r1, 0x10
Original instruction
li r5, 0
Replace big penguin's initialization and model update functions with
the ones used by small penguin, in order to properly animate the big penguin reflection
048cfdb4 80776ecc
048cfd54 807760b0
Other Videos By B_squo
Other Statistics
Mario Kart Wii Statistics For B_squo
There are 305,794 views in 173 videos for Mario Kart Wii. The game makes up 5 hours of published video on his channel, roughly 28.21% of Mario Kart Wii content that B_squo has uploaded to YouTube.