diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/scrcmd_amity_square.c | 200 |
1 files changed, 200 insertions, 0 deletions
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; +} |