The offending code is at loc_740AA:
loc_740AA: move.l #MoveChkDel,(a0) bset #7,$2A(a0) move.w #-$5BDB,$A(a0) ...Argh, another one of those goofy numbers that aren't really negative. This one gives us some insight, though. Setting the sign bit on $A(a0) equals setting the priority flag on the object's sprites, which lines up with what we see in-game: the lid segments usually disappear behind the wall, but pop in front of it when we defeat the boss.
If we flip the signage, we get the value $A425. Unpacking this gives us base tile $425, no X/Y flip, and color palette 1. Let's compare this with the setup code for the object.
loc_73CD8: lea ObjDat3_74140(pc),a1 jsr (SetUp_ObjAttributes).l ... ObjDat3_74140: dc.l Map_LBZEndBoss dc.w $4425 dc.w $280 dc.b 8 dc.b 8 dc.b $E dc.b 0The second entry in ObjDat3_74140 holds the value $4425, which when unpacked gives us base tile $425, no X/Y flip, and color palette 2. And therein lies the problem: when the boss is defeated, the lid segments try to set their priority bit, but also accidentally change from palette 2 to palette 1 in the process.
A possible explanation is that the object did use palette 1 at one point, but when it changed, they neglected to update the value at loc_740AA. Either that, or it was just human error inputting the new value by hand. A more sane approach would be to just use a bset or ori instruction to set the sign bit without messing with the rest of the attribute.
I always thought it was the bridge being burnt by the explosion, lol
ReplyDelete