summaryrefslogtreecommitdiff
path: root/src/fileselect.S
diff options
context:
space:
mode:
authorColin Noga <Tempus@chronometry.ca>2012-09-21 20:43:21 -0500
committerColin Noga <Tempus@chronometry.ca>2012-09-21 20:43:21 -0500
commitd47a9ed57a826d60c37bfa8a4ae00ccaba0ed806 (patch)
treec3f6657118d71abcd1ce3b4584b3e0472841e53f /src/fileselect.S
parent8d0a306f0a526a76182c8d2b513d7a0441d6f466 (diff)
parent5654d5c0a056f9cfc99ac608d16aa0a601b997f5 (diff)
downloadkamek-d47a9ed57a826d60c37bfa8a4ae00ccaba0ed806.tar.gz
kamek-d47a9ed57a826d60c37bfa8a4ae00ccaba0ed806.zip
Merge branch 'level-select' of ssh://treeki.rustedlogic.net:30000/Kamek into level-select
Diffstat (limited to '')
-rw-r--r--src/fileselect.S264
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
+