diff options
Diffstat (limited to 'src/fileselect.S')
-rw-r--r-- | src/fileselect.S | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/src/fileselect.S b/src/fileselect.S new file mode 100644 index 0000000..19710ef --- /dev/null +++ b/src/fileselect.S @@ -0,0 +1,264 @@ +.set sp,1 +.set rtoc,2 + +.text +.extern OSReport + +.extern enableNonLoopAnim__Q23m2d13EmbedLayout_cFib +.global FSShowCD, FSHideCD +FSShowCD: + addi r3, r3, 0x74 + li r4, 0x2A + b enableNonLoopAnim__Q23m2d13EmbedLayout_cFib + +FSHideCD: + addi r3, r3, 0x74 + li r4, 0x2B + b enableNonLoopAnim__Q23m2d13EmbedLayout_cFib + +.global FSShowCD_OpenWait +FSShowCD_OpenWait: + addi r3, r31, 0x74 + li r4, 0x2A + bl enableNonLoopAnim__Q23m2d13EmbedLayout_cFib + lwz r0, 0x14(r1) + lwz r31, 0xC(r1) + mtlr r0 + addi r1, r1, 0x10 + blr + +#.global FSHideCD_IWOSAEW +#FSHideCD_IWOSAEW: +# addi r3, r31, 0x74 +# li r4, 0x2B +# bl enableNonLoopAnim__Q23m2d13EmbedLayout_cFib +# lwz r0, 0x14(r1) +# lwz r31, 0xC(r1) +# mtlr r0 +# addi r1, r1, 0x10 +# blr + +.global DFNiceTitle +DFNiceTitle: + mr r3, r4 + lis r4, DFTitle@h + ori r4, r4, DFTitle@l + lwz r6, 0xE44(r30) + addi r6, r6, '1' + sth r6, 0xA(r4) + li r5, 0 + li r6, 6 + lwz r12, 0(r3) + lwz r12, 0x80(r12) + mtctr r12 + bctr + +.extern findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc +.extern NewerWorldNames +.extern NewerWorldCount +.extern InsertIntIntoTextBox1 +.global DFNiceWorldName +DFNiceWorldName: + stwu r1, -0x30(r1) + mflr r0 + stw r0, 0x34(r1) + stw r20, 0x2C(r1) + stw r21, 0x28(r1) + stw r22, 0x24(r1) + # r1+0x20 is reserved for the stupid ints in textboxes + stw r23, 0x1C(r1) + stw r24, 0x18(r1) + stw r25, 0x14(r1) + mr r20, r4 + + # get Newer map number + lbz r6, 0x6FC(r31) + lis r8, NewerWorldCount@h + ori r8, r8, NewerWorldCount@h + lwz r8, 0(r8) + cmpw r6, r8 + bge invalidThing + slwi r6, r6, 2 + lis r7, NewerWorldNames@h + ori r7, r7, NewerWorldNames@l + lwzx r4, r7, r6 + li r5, 0 + b gotName +invalidThing: + lis r4, InvalidWorld@h + ori r4, r4, InvalidWorld@l +gotName: + + mr r3, r20 + lwz r12, 0(r3) + lwz r12, 0x7C(r12) + mtctr r12 + bctrl + + # While we're at it, take care of some other things + # r21 shall hold our star coin count; r22 shall hold our exit count + # r23 shall hold the level pointer + # r24 shall hold the world number, and r25 the level number + + li r21, 0 + li r22, 0 + addi r23, r31, 0x6C + li r24, 0 + li r25, 0 + + # Loop through ALL levels + +levelLoop: + lwz r4, 0(r23) + + cmpwi r25, 38 + beq ignoreStartPoint + + clrlwi. r0, r4, 31 + beq noCoin1 + addi r21, r21, 1 +noCoin1: + extrwi. r0, r4, 1,30 + beq noCoin2 + addi r21, r21, 1 +noCoin2: + extrwi. r0, r4, 1,29 + beq noCoin3 + addi r21, r21, 1 +noCoin3: + + extrwi. r0, r4, 1,27 + beq noNormalExit + addi r22, r22, 1 + +# lis r3, NormalExitStr@h +# ori r3, r3, NormalExitStr@l +# addi r4, r24, 1 +# addi r5, r25, 1 +# crclr 4*cr1+eq +# bl OSReport +noNormalExit: + lwz r4, 0(r23) + extrwi. r0, r4, 1,26 + beq noSecretExit + addi r22, r22, 1 + +# lis r3, SecretExitStr@h +# ori r3, r3, SecretExitStr@l +# addi r4, r24, 1 +# addi r5, r25, 1 +# crclr 4*cr1+eq +# bl OSReport +noSecretExit: + +ignoreStartPoint: + + addi r23, r23, 4 + addi r25, r25, 1 + cmpwi r25, 42 + blt levelLoop + # next world + addi r24, r24, 1 + li r25, 0 + cmpwi r24, 10 + blt levelLoop + + # Now, subtract the paid star coins + lhz r3, 0x66(r31) + sub r21, r21, r3 + + # And write everything ... + addi r3, r30, 0x74 + lis r4, ExitCount@h + ori r4, r4, ExitCount@l + bl findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc + + stw r22, 0x20(r1) + mr r4, r3 + addi r3, r1, 0x20 + li r5, 1 + bl InsertIntIntoTextBox1 + + addi r3, r30, 0x74 + lis r4, StarCoinCount@h + ori r4, r4, StarCoinCount@l + bl findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc + + stw r21, 0x20(r1) + mr r4, r3 + addi r3, r1, 0x20 + li r5, 0 + bl InsertIntIntoTextBox1 + + lwz r25, 0x14(r1) + lwz r24, 0x18(r1) + lwz r23, 0x1C(r1) + lwz r22, 0x24(r1) + lwz r21, 0x28(r1) + lwz r20, 0x2C(r1) + lwz r0, 0x34(r1) + mtlr r0 + addi r1, r1, 0x30 + blr + +.global FSDebugStates +FSDebugStates: + stwu r1, -0x10(r1) + mflr r0 + stw r0, 0x14(r1) + stw r31, 0xC(r1) + stw r30, 0x8(r1) + mr r31, r3 + mr r30, r4 + + lis r3, FSStateDebugStr@h + ori r3, r3, FSStateDebugStr@l + crclr 4*cr1+eq + lwz r4, 4(r4) + bl OSReport + + mr r3, r31 + mr r4, r30 + lwzu r12, 0x18(r3) + lwz r12, 0x18(r12) + mtctr r12 + bctrl + + lwz r31, 0xC(r1) + lwz r30, 0x8(r1) + lwz r0, 0x14(r1) + mtlr r0 + addi r1, r1, 0x10 + blr + +.align 4 + +.data +FSStateDebugStr: .string "State: %s\n" + +.global FSDummyBrlanName, FSDummyGroup, FSDummyPane +FSDummyBrlanName: .string "fileSelectBase_18_DummyAnim.brlan" +FSDummyGroup: .string "DummyGroup" +FSDummyPane: .string "DummyPane" + +.global A00_window +A00_window: .string "A00_window" +.global ShowEraseCopy, HideEraseCopy +ShowEraseCopy: .string "fileSelectBase_18_ShowEraseCopy.brlan" +HideEraseCopy: .string "fileSelectBase_18_HideEraseCopy.brlan" +.global N_posFile1_00 +N_posFile1_00: .string "N_posFile1_00" +.global CDHolderGroup +CDHolderGroup: .string "CDHolderGroup" + +NormalExitStr: .string "<Normal> %d-%d\n" +SecretExitStr: .string "<Secret> %d-%d\n" +StarCoinCount: .string "StarCoinCount" +ExitCount: .string "ExitCount" + +.align 4 +DFTitle: +.short 'F','i','l','e',' ','X',0 +InvalidWorld: +.short '<','I','n','v','a','l','i','d',' ','W','o','r','l','d','>',0 + |