diff options
-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 | ||||
-rw-r--r-- | include/constants/accessories.h | 105 | ||||
-rw-r--r-- | include/scrcmd.h | 7 |
7 files changed, 318 insertions, 223 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; +} diff --git a/include/constants/accessories.h b/include/constants/accessories.h new file mode 100644 index 00000000..907e12cb --- /dev/null +++ b/include/constants/accessories.h @@ -0,0 +1,105 @@ +#ifndef POKEDIAMOND_CONSTANTS_ACCESSORIES_H +#define POKEDIAMOND_CONSTANTS_ACCESSORIES_H + +#define ACCESSORY_WHITE_FLUFF 0 +#define ACCESSORY_YELLOW_FLUFF 1 +#define ACCESSORY_PINK_FLUFF 2 +#define ACCESSORY_BROWN_FLUFF 3 +#define ACCESSORY_BLACK_FLUFF 4 +#define ACCESSORY_ORANGE_FLUFF 5 +#define ACCESSORY_ROUND_PEBBLE 6 +#define ACCESSORY_GLITTER_BOULDER 7 +#define ACCESSORY_SNAGGY_PEBBLE 8 +#define ACCESSORY_JAGGED_BOULDER 9 +#define ACCESSORY_BLACK_PEBBLE 10 +#define ACCESSORY_MINI_PEBBLE 11 +#define ACCESSORY_PINK_SCALE 12 +#define ACCESSORY_BLUE_SCALE 13 +#define ACCESSORY_GREEN_SCALE 14 +#define ACCESSORY_PURPLE_SCALE 15 +#define ACCESSORY_BIG_SCALE 16 +#define ACCESSORY_NARROW_SCALE 17 +#define ACCESSORY_BLUE_FEATHER 18 +#define ACCESSORY_RED_FEATHER 19 +#define ACCESSORY_YELLOW_FEATHER 20 +#define ACCESSORY_WHITE_FEATHER 21 +#define ACCESSORY_BLACK_MOUSTACHE 22 +#define ACCESSORY_WHITE_MOUSTACHE 23 +#define ACCESSORY_BLACK_BEARD 24 +#define ACCESSORY_WHITE_BEARD 25 +#define ACCESSORY_SMALL_LEAF 26 +#define ACCESSORY_BIG_LEAF 27 +#define ACCESSORY_NARROW_LEAF 28 +#define ACCESSORY_SHED_CLAW 29 +#define ACCESSORY_SHED_HORN 30 +#define ACCESSORY_THIN_MUSHROOM 31 +#define ACCESSORY_THICK_MUSHROOM 32 +#define ACCESSORY_STUMP 33 +#define ACCESSORY_PRETTY_DEWDROP 34 +#define ACCESSORY_SNOW_CRYSTAL 35 +#define ACCESSORY_SPARKS 36 +#define ACCESSORY_SHIMMERING_FIRE 37 +#define ACCESSORY_MYSTIC_FIRE 38 +#define ACCESSORY_DETERMINATION 39 +#define ACCESSORY_PECULIAR_SPOON 40 +#define ACCESSORY_PUFFY_SMOKE 41 +#define ACCESSORY_POISON_EXTRACT 42 +#define ACCESSORY_WEALTHY_COIN 43 +#define ACCESSORY_EERIE_THING 44 +#define ACCESSORY_SPRING 45 +#define ACCESSORY_SEASHELL 46 +#define ACCESSORY_HUMMING_NOTE 47 +#define ACCESSORY_SHINY_POWDER 48 +#define ACCESSORY_GLITTER_POWDER 49 +#define ACCESSORY_RED_FLOWER 50 +#define ACCESSORY_PINK_FLOWER 51 +#define ACCESSORY_WHITE_FLOWER 52 +#define ACCESSORY_BLUE_FLOWER 53 +#define ACCESSORY_ORANGE_FLOWER 54 +#define ACCESSORY_YELLOW_FLOWER 55 +#define ACCESSORY_GOOGLY_SPECS 56 +#define ACCESSORY_BLACK_SPECS 57 +#define ACCESSORY_GORGEOUS_SPECS 58 +#define ACCESSORY_SWEET_CANDY 59 +#define ACCESSORY_CONFETTI 60 +#define ACCESSORY_COLORED_PARASOL 61 +#define ACCESSORY_OLD_UMBRELLA 62 +#define ACCESSORY_SPOTLIGHT 63 +#define ACCESSORY_CAPE 64 +#define ACCESSORY_STANDING_MIKE 65 +#define ACCESSORY_SURFBOARD 66 +#define ACCESSORY_CARPET 67 +#define ACCESSORY_RETRO_PIPE 68 +#define ACCESSORY_FLUFFY_BED 69 +#define ACCESSORY_MIRROR_BALL 70 +#define ACCESSORY_PHOTO_BOARD 71 +#define ACCESSORY_PINK_BARRETTE 72 +#define ACCESSORY_RED_BARRETTE 73 +#define ACCESSORY_BLUE_BARRETTE 74 +#define ACCESSORY_YELLOW_BARRETTE 75 +#define ACCESSORY_GREEN_BARRETTE 76 +#define ACCESSORY_PINK_BALLOON 77 +#define ACCESSORY_RED_BALLOONS 78 +#define ACCESSORY_BLUE_BALLOONS 79 +#define ACCESSORY_YELLOW_BALLOON 80 +#define ACCESSORY_GREEN_BALLOONS 81 +#define ACCESSORY_LACE_HEADDRESS 82 +#define ACCESSORY_TOP_HAT 83 +#define ACCESSORY_SILK_VEIL 84 +#define ACCESSORY_HEROIC_HEADBAND 85 +#define ACCESSORY_PROFESSOR_HAT 86 +#define ACCESSORY_FLOWER_STAGE 87 +#define ACCESSORY_GOLD_PEDESTAL 88 +#define ACCESSORY_GLASS_STAGE 89 +#define ACCESSORY_AWARD_PODIUM 90 +#define ACCESSORY_CUBE_STAGE 91 +#define ACCESSORY_TURTWIG_MASK 92 +#define ACCESSORY_CHIMCHAR_MASK 93 +#define ACCESSORY_PIPLUP_MASK 94 +#define ACCESSORY_BIG_TREE 95 +#define ACCESSORY_FLAG 96 +#define ACCESSORY_CROWN 97 +#define ACCESSORY_TIARA 98 +#define ACCESSORY_COMET 99 + +#endif 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); |