summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortgsm <doodrabbit@hotmail.com>2021-07-25 22:35:52 -0500
committertgsm <doodrabbit@hotmail.com>2021-07-25 22:39:23 -0500
commita02d40d1410ad0b63f943600028348daccdebbe4 (patch)
tree3560775ee9dd9592fff34c1ceb22f5d19f16a507
parent0c2db8de60375ab8c450ea64320feb22431f43aa (diff)
Decompile scrcmd_17 -> scrcmd_amity_square
Command names courtesy of DSPRE.
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/scrcmd_17.s215
-rw-r--r--arm9/asm/unk_02038C78.s6
-rw-r--r--arm9/global.inc6
-rw-r--r--arm9/src/scrcmd_amity_square.c117
-rw-r--r--include/scrcmd.h7
6 files changed, 130 insertions, 223 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 25689701..48254159 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -171,7 +171,7 @@ Static arm9
Object scrcmd_coins.o
Object scrcmd_money.o
Object scrcmd_daycare.o
- Object scrcmd_17.o
+ Object scrcmd_amity_square.o
Object scrcmd_party.o
Object scrcmd_fossils.o
Object scrcmd_prizes.o
diff --git a/arm9/asm/scrcmd_17.s b/arm9/asm/scrcmd_17.s
deleted file mode 100644
index 794a16de..00000000
--- a/arm9/asm/scrcmd_17.s
+++ /dev/null
@@ -1,215 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .rodata
-
- .global UNK_020F4494
-UNK_020F4494: ; 0x020F4494
- .byte 0x00, 0x00, 0x05, 0x00, 0x15, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x0D, 0x00, 0x19, 0x00, 0x1F, 0x00
- .byte 0x10, 0x00, 0x21, 0x00, 0x02, 0x00, 0x13, 0x00, 0x14, 0x00, 0x18, 0x00, 0x11, 0x00, 0x00, 0x00
- .byte 0x17, 0x00, 0x1D, 0x00, 0x1C, 0x00, 0x0F, 0x00, 0x08, 0x00, 0x09, 0x00, 0x03, 0x00, 0x0B, 0x00
- .byte 0x16, 0x00, 0x1E, 0x00, 0x11, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x20, 0x00, 0x0C, 0x00, 0x12, 0x00
- .byte 0x15, 0x00, 0x0D, 0x00, 0x1F, 0x00, 0x09, 0x00, 0x19, 0x00, 0x18, 0x00, 0x1B, 0x00, 0x06, 0x00
- .byte 0x05, 0x00, 0x03, 0x00, 0x1A, 0x00, 0x13, 0x00, 0x14, 0x00, 0x01, 0x00, 0x07, 0x00, 0x10, 0x00
- .byte 0x16, 0x00, 0x0F, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x14, 0x00, 0x1D, 0x00, 0x04, 0x00
- .byte 0x08, 0x00, 0x1B, 0x00, 0x0E, 0x00, 0x0A, 0x00
-
- .text
-
- thumb_func_start ScrCmd_Unk0215
-ScrCmd_Unk0215: ; 0x02044158
- push {r3, lr}
- add r0, #0x80
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_Flags_get
- bl FUN_0205F54C
- mov r0, #0x0
- pop {r3, pc}
-
- thumb_func_start ScrCmd_Unk0216
-ScrCmd_Unk0216: ; 0x0204416C
- push {r3-r5, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r5, #0x80
- add r4, r0, #0x0
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0xc]
- bl SavArray_Flags_get
- bl FUN_0205F55C
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start ScrCmd_Unk0217
-ScrCmd_Unk0217: ; 0x02044198
- push {r3-r5, lr}
- add r5, r0, #0x0
- bl ScriptReadHalfword
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x80
- ldr r0, [r0, #0x0]
- bl GetVarPointer
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl ScriptReadHalfword
- add r5, #0x80
- add r1, r0, #0x0
- ldr r0, [r5, #0x0]
- bl VarGet
- add r5, r0, #0x0
- bl LCRandom
- mov r1, #0x64
- bl _s32_div_f
- lsl r0, r1, #0x10
- lsr r0, r0, #0x10
- cmp r0, #0xf
- bhs _020441D6
- mov r0, #0x0
- b _02044218
-_020441D6:
- cmp r0, #0x1e
- bhs _020441DE
- mov r0, #0x1
- b _02044218
-_020441DE:
- cmp r0, #0x2d
- bhs _020441E6
- mov r0, #0x2
- b _02044218
-_020441E6:
- cmp r0, #0x3c
- bhs _020441EE
- mov r0, #0x3
- b _02044218
-_020441EE:
- cmp r0, #0x46
- bhs _020441F6
- mov r0, #0x4
- b _02044218
-_020441F6:
- cmp r0, #0x50
- bhs _020441FE
- mov r0, #0x5
- b _02044218
-_020441FE:
- cmp r0, #0x58
- bhs _02044206
- mov r0, #0x6
- b _02044218
-_02044206:
- cmp r0, #0x5d
- bhs _0204420E
- mov r0, #0x7
- b _02044218
-_0204420E:
- cmp r0, #0x62
- bhs _02044216
- mov r0, #0x8
- b _02044218
-_02044216:
- mov r0, #0x9
-_02044218:
- ldr r2, _020442B4 ; =0x0000011D
- cmp r5, r2
- bgt _02044244
- bge _02044290
- cmp r5, #0x27
- bgt _02044236
- cmp r5, #0x23
- blt _02044230
- beq _02044284
- cmp r5, #0x27
- beq _02044290
- b _0204429C
-_02044230:
- cmp r5, #0x19
- beq _02044294
- b _0204429C
-_02044236:
- cmp r5, #0x36
- bgt _0204423E
- beq _0204428C
- b _0204429C
-_0204423E:
- cmp r5, #0xff
- beq _02044288
- b _0204429C
-_02044244:
- add r1, r2, #0x0
- add r1, #0x8c
- cmp r5, r1
- bgt _0204426C
- add r1, r2, #0x0
- add r1, #0x8c
- cmp r5, r1
- bge _02044288
- add r1, r2, #0x0
- add r1, #0xf
- cmp r5, r1
- bgt _02044264
- add r2, #0xf
- cmp r5, r2
- beq _02044284
- b _0204429C
-_02044264:
- add r2, #0x84
- cmp r5, r2
- beq _0204428C
- b _0204429C
-_0204426C:
- add r1, r2, #0x0
- add r1, #0x8e
- cmp r5, r1
- bgt _0204427C
- add r2, #0x8e
- cmp r5, r2
- beq _02044298
- b _0204429C
-_0204427C:
- add r2, #0x9b
- cmp r5, r2
- beq _02044298
- b _0204429C
-_02044284:
- mov r2, #0x0
- b _0204429E
-_02044288:
- mov r2, #0x1
- b _0204429E
-_0204428C:
- mov r2, #0x2
- b _0204429E
-_02044290:
- mov r2, #0x3
- b _0204429E
-_02044294:
- mov r2, #0x4
- b _0204429E
-_02044298:
- mov r2, #0x5
- b _0204429E
-_0204429C:
- mov r2, #0x0
-_0204429E:
- add r3, r2, #0x0
- mov r1, #0x14
- mul r3, r1
- ldr r2, _020442B8 ; =UNK_020F4494
- lsl r1, r0, #0x1
- add r0, r2, r3
- ldrh r0, [r1, r0]
- strh r0, [r4, #0x0]
- mov r0, #0x0
- pop {r3-r5, pc}
- nop
-_020442B4: .word 0x0000011D
-_020442B8: .word UNK_020F4494
diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s
index aea1dbf8..d33d8df2 100644
--- a/arm9/asm/unk_02038C78.s
+++ b/arm9/asm/unk_02038C78.s
@@ -682,9 +682,9 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_GetPartyMonNature
.word ScrCmd_FindPartyMonWithNature
.word ScrCmd_Unk0214
- .word ScrCmd_Unk0215
- .word ScrCmd_Unk0216
- .word ScrCmd_Unk0217
+ .word ScrCmd_ClearAmitySquareSteps
+ .word ScrCmd_CheckAmitySquareSteps
+ .word ScrCmd_GetAmitySquareAccessory
.word ScrCmd_Unk0218
.word ScrCmd_Unk0219
.word ScrCmd_Unk021A
diff --git a/arm9/global.inc b/arm9/global.inc
index db33a314..48e8a7c7 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -3315,9 +3315,9 @@
.extern ScrCmd_Unk01A6
.extern ScrCmd_Unk01A7
.extern ScrCmd_Unk01AD
-.extern ScrCmd_Unk0215
-.extern ScrCmd_Unk0216
-.extern ScrCmd_Unk0217
+.extern ScrCmd_ClearAmitySquareSteps
+.extern ScrCmd_CheckAmitySquareSteps
+.extern ScrCmd_GetAmitySquareAccessory
.extern ScrCmd_GiveMon
.extern ScrCmd_GetPartyMonSpecies
.extern ScrCmd_CheckPartyMonOTID
diff --git a/arm9/src/scrcmd_amity_square.c b/arm9/src/scrcmd_amity_square.c
new file mode 100644
index 00000000..aa38449f
--- /dev/null
+++ b/arm9/src/scrcmd_amity_square.c
@@ -0,0 +1,117 @@
+#include "scrcmd.h"
+#include "constants/pokemon.h"
+#include "event_data.h"
+
+extern void FUN_0205F54C(struct ScriptState* state);
+extern u16 FUN_0205F55C(struct ScriptState* state);
+
+static const u16 sAmitySquarePossibleAccessoriesByPokemon[6][10] = {
+ // TODO: accessory constants
+ { 0, 5, 21, 11, 26, 13, 25, 31, 16, 33 }, // Clefairy and Skitty
+ { 2, 19, 20, 24, 17, 0, 23, 29, 28, 15 }, // Torchic and Drifloon
+ { 8, 9, 3, 11, 22, 30, 17, 6, 14, 32 }, // Psyduck and Pachirisu
+ { 12, 18, 21, 13, 31, 9, 25, 24, 27, 6 }, // Jigglypuff and Shroomish
+ { 5, 3, 26, 19, 20, 1, 7, 16, 22, 15 }, // Pikachu
+ { 12, 30, 2, 20, 29, 4, 8, 27, 14, 10 }, // Buneary and Happiny
+};
+
+THUMB_FUNC BOOL ScrCmd_ClearAmitySquareSteps(struct ScriptContext* ctx)
+{
+ struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2);
+
+ FUN_0205F54C(state);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_CheckAmitySquareSteps(struct ScriptContext* ctx)
+{
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2);
+
+ *ret_ptr = FUN_0205F55C(state);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetAmitySquareAccessory(struct ScriptContext* ctx)
+{
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 rand = (u16)(LCRandom() % 100);
+
+ u32 j;
+ if (rand < 15)
+ {
+ j = 0;
+ }
+ else if (rand < 30)
+ {
+ j = 1;
+ }
+ else if (rand < 45)
+ {
+ j = 2;
+ }
+ else if (rand < 60)
+ {
+ j = 3;
+ }
+ else if (rand < 70)
+ {
+ j = 4;
+ }
+ else if (rand < 80)
+ {
+ j = 5;
+ }
+ else if (rand < 88)
+ {
+ j = 6;
+ }
+ else if (rand < 93)
+ {
+ j = 7;
+ }
+ else if (rand < 98)
+ {
+ j = 8;
+ }
+ else
+ {
+ j = 9;
+ }
+
+ u32 i;
+ switch (species)
+ {
+ case SPECIES_CLEFAIRY:
+ case SPECIES_SKITTY:
+ i = 0;
+ break;
+ case SPECIES_TORCHIC:
+ case SPECIES_DRIFLOON:
+ i = 1;
+ break;
+ case SPECIES_PSYDUCK:
+ case SPECIES_PACHIRISU:
+ i = 2;
+ break;
+ case SPECIES_JIGGLYPUFF:
+ case SPECIES_SHROOMISH:
+ i = 3;
+ break;
+ case SPECIES_PIKACHU:
+ i = 4;
+ break;
+ case SPECIES_BUNEARY:
+ case SPECIES_HAPPINY:
+ i = 5;
+ break;
+ default:
+ i = 0;
+ break;
+ }
+
+ *ret_ptr = sAmitySquarePossibleAccessoriesByPokemon[i][j];
+ return FALSE;
+}
diff --git a/include/scrcmd.h b/include/scrcmd.h
index 5e28a4d0..8c89e230 100644
--- a/include/scrcmd.h
+++ b/include/scrcmd.h
@@ -249,7 +249,12 @@ BOOL ScrCmd_Unk01A6(struct ScriptContext* ctx);
BOOL ScrCmd_Unk01A7(struct ScriptContext* ctx);
BOOL ScrCmd_Unk01AD(struct ScriptContext* ctx);
-//scrcmd_18.c
+//scrcmd_amity_square.c
+BOOL ScrCmd_ClearAmitySquareSteps(struct ScriptContext* ctx);
+BOOL ScrCmd_CheckAmitySquareSteps(struct ScriptContext* ctx);
+BOOL ScrCmd_GetAmitySquareAccessory(struct ScriptContext* ctx);
+
+//scrcmd_party.c
BOOL ScrCmd_GiveMon(struct ScriptContext* ctx);
BOOL ScrCmd_GetPartyMonSpecies(struct ScriptContext* ctx);
BOOL ScrCmd_CheckPartyMonOTID(struct ScriptContext* ctx);