diff options
Diffstat (limited to 'arm9')
-rw-r--r-- | arm9/arm9.lsf | 2 | ||||
-rw-r--r-- | arm9/asm/scrcmd_17.s | 215 | ||||
-rw-r--r-- | arm9/asm/unk_02038C78.s | 6 | ||||
-rw-r--r-- | arm9/global.inc | 6 | ||||
-rw-r--r-- | arm9/src/scrcmd_amity_square.c | 200 |
5 files changed, 207 insertions, 222 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 94bf6e35..eb02cf99 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 b46f57ad..9b994394 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..c957dec1 --- /dev/null +++ b/arm9/src/scrcmd_amity_square.c @@ -0,0 +1,200 @@ +#include "scrcmd.h" +#include "constants/accessories.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] = { + { // Clefairy and Skitty + ACCESSORY_WHITE_FLUFF, + ACCESSORY_ORANGE_FLUFF, + ACCESSORY_WHITE_FEATHER, + ACCESSORY_MINI_PEBBLE, + ACCESSORY_SMALL_LEAF, + ACCESSORY_BLUE_SCALE, + + ACCESSORY_WHITE_BEARD, + ACCESSORY_THIN_MUSHROOM, + ACCESSORY_BIG_SCALE, + + ACCESSORY_STUMP + }, + + { // Torchic and Drifloon + ACCESSORY_PINK_FLUFF, + ACCESSORY_RED_FEATHER, + ACCESSORY_YELLOW_FEATHER, + ACCESSORY_BLACK_BEARD, + ACCESSORY_NARROW_SCALE, + ACCESSORY_WHITE_FLUFF, + + ACCESSORY_WHITE_MOUSTACHE, + ACCESSORY_SHED_CLAW, + ACCESSORY_NARROW_LEAF, + + ACCESSORY_PURPLE_SCALE + }, + + { // Psyduck and Pachirisu + ACCESSORY_SNAGGY_PEBBLE, + ACCESSORY_JAGGED_BOULDER, + ACCESSORY_BROWN_FLUFF, + ACCESSORY_MINI_PEBBLE, + ACCESSORY_BLACK_MOUSTACHE, + ACCESSORY_SHED_HORN, + + ACCESSORY_NARROW_SCALE, + ACCESSORY_ROUND_PEBBLE, + ACCESSORY_GREEN_SCALE, + + ACCESSORY_THICK_MUSHROOM + }, + + { // Jigglypuff and Shroomish + ACCESSORY_PINK_SCALE, + ACCESSORY_BLUE_FEATHER, + ACCESSORY_WHITE_FEATHER, + ACCESSORY_BLUE_SCALE, + ACCESSORY_THIN_MUSHROOM, + ACCESSORY_JAGGED_BOULDER, + + ACCESSORY_WHITE_BEARD, + ACCESSORY_BLACK_BEARD, + ACCESSORY_BIG_LEAF, + + ACCESSORY_ROUND_PEBBLE + }, + + { // Pikachu + ACCESSORY_ORANGE_FLUFF, + ACCESSORY_BROWN_FLUFF, + ACCESSORY_SMALL_LEAF, + ACCESSORY_RED_FEATHER, + ACCESSORY_YELLOW_FEATHER, + ACCESSORY_YELLOW_FLUFF, + + ACCESSORY_GLITTER_BOULDER, + ACCESSORY_BIG_SCALE, + ACCESSORY_BLACK_MOUSTACHE, + + ACCESSORY_PURPLE_SCALE + }, + + { // Buneary and Happiny + ACCESSORY_PINK_SCALE, + ACCESSORY_SHED_HORN, + ACCESSORY_PINK_FLUFF, + ACCESSORY_YELLOW_FEATHER, + ACCESSORY_SHED_CLAW, + ACCESSORY_BLACK_FLUFF, + + ACCESSORY_SNAGGY_PEBBLE, + ACCESSORY_BIG_LEAF, + ACCESSORY_GREEN_SCALE, + + ACCESSORY_BLACK_PEBBLE + }, +}; + +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; +} |