diff options
-rw-r--r-- | asm/pokemon_storage_system.s | 119 | ||||
-rw-r--r-- | include/mon_markings.h | 26 | ||||
-rw-r--r-- | src/pokemon/mon_markings.c | 20 | ||||
-rw-r--r-- | src/pokemon/pokemon_storage_system.c | 74 |
4 files changed, 100 insertions, 139 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index da5d00899..071ac48e9 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,125 +5,6 @@ .text - thumb_func_start sub_8096884 -sub_8096884: @ 8096884 - push {lr} - ldr r0, _080968A0 @ =gMain - ldr r1, _080968A4 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x9 - bls _08096894 - b _08096986 -_08096894: - lsls r0, 2 - ldr r1, _080968A8 @ =_080968AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080968A0: .4byte gMain -_080968A4: .4byte 0x0000043c -_080968A8: .4byte _080968AC - .align 2, 0 -_080968AC: - .4byte _080968D4 - .4byte _080968E8 - .4byte _080968F4 - .4byte _08096904 - .4byte _0809690E - .4byte _08096918 - .4byte _0809691E - .4byte _08096924 - .4byte _0809692A - .4byte _08096964 -_080968D4: - movs r0, 0 - bl SetVBlankCallback - movs r1, 0x80 - lsls r1, 19 - movs r0, 0 - strh r0, [r1] - bl sub_8096804 - b _0809697A -_080968E8: - ldr r0, _080968F0 @ =gWindowConfig_81E6D00 - bl SetUpWindowConfig - b _0809697A - .align 2, 0 -_080968F0: .4byte gWindowConfig_81E6D00 -_080968F4: - ldr r0, _08096900 @ =gWindowConfig_81E6D00 - bl InitMenuWindow - bl MenuZeroFillScreen - b _0809697A - .align 2, 0 -_08096900: .4byte gWindowConfig_81E6D00 -_08096904: - bl sub_80967DC - bl sub_8096848 - b _0809697A -_0809690E: - bl sub_8098B48 - bl sub_809AA24 - b _0809697A -_08096918: - bl sub_8097DE0 - b _0809697A -_0809691E: - bl sub_8097E70 - b _0809697A -_08096924: - bl sub_8098400 - b _0809697A -_0809692A: - ldr r0, _08096950 @ =gPokemonStorage - ldrb r0, [r0] - bl sub_8099BF8 - ldr r2, _08096954 @ =gSharedMem - ldr r1, _08096958 @ =0x000012bc - adds r0, r2, r1 - movs r1, 0xA - strh r1, [r0] - ldr r1, _0809695C @ =0x000012be - adds r2, r1 - ldr r1, _08096960 @ =0x0000dacb - strh r1, [r2] - bl sub_80F727C - bl sub_80F7404 - b _0809697A - .align 2, 0 -_08096950: .4byte gPokemonStorage -_08096954: .4byte gSharedMem -_08096958: .4byte 0x000012bc -_0809695C: .4byte 0x000012be -_08096960: .4byte 0x0000dacb -_08096964: - bl sub_8096874 - ldr r0, _0809698C @ =sub_8096BF0 - bl sub_8096BE0 - ldr r0, _08096990 @ =sub_8096B38 - bl SetMainCallback2 - ldr r0, _08096994 @ =sub_8096AFC - bl SetVBlankCallback -_0809697A: - ldr r1, _08096998 @ =gMain - ldr r0, _0809699C @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08096986: - pop {r0} - bx r0 - .align 2, 0 -_0809698C: .4byte sub_8096BF0 -_08096990: .4byte sub_8096B38 -_08096994: .4byte sub_8096AFC -_08096998: .4byte gMain -_0809699C: .4byte 0x0000043c - thumb_func_end sub_8096884 - thumb_func_start sub_80969A0 sub_80969A0: @ 80969A0 push {r4,lr} diff --git a/include/mon_markings.h b/include/mon_markings.h new file mode 100644 index 000000000..a2b0ac821 --- /dev/null +++ b/include/mon_markings.h @@ -0,0 +1,26 @@ +#ifndef POKERUBY_MON_MARKINGS_H +#define POKERUBY_MON_MARKINGS_H + +struct PokemonMarkMenu +{ + /*0x0000*/ u16 baseTileTag; + /*0x0002*/ u16 basePaletteTag; + /*0x0004*/ u8 markings; // bit flags + /*0x0005*/ s8 cursorPos; + /*0x0006*/ bool8 markingsArray[4]; + /*0x000A*/ u8 cursorBaseY; + /*0x000B*/ bool8 spriteSheetLoadRequired; + /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window + /*0x0014*/ struct Sprite *menuMarkingSprites[4]; + /*0x0024*/ struct Sprite *menuTextSprite; + /*0x0028*/ const u8 *frameTiles; + /*0x002C*/ const u16 *framePalette; + /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; + /*0x1030*/ u8 filler1030[0x80]; + /*0x10B0*/ u8 tileLoadState; +}; + +void sub_80F7404(void); +void sub_80F727C(struct PokemonMarkMenu *ptr); + +#endif //POKERUBY_MON_MARKINGS_H diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index b4144ea34..d27719c4a 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -5,6 +5,7 @@ #include "constants/songs.h" #include "sound.h" #include "sprite.h" +#include "mon_markings.h" #ifdef GERMAN #define MENU_TEXT_SPRITE_X_OFFSET 24 @@ -12,25 +13,6 @@ #define MENU_TEXT_SPRITE_X_OFFSET 32 #endif -struct PokemonMarkMenu -{ - /*0x0000*/ u16 baseTileTag; - /*0x0002*/ u16 basePaletteTag; - /*0x0004*/ u8 markings; // bit flags - /*0x0005*/ s8 cursorPos; - /*0x0006*/ bool8 markingsArray[4]; - /*0x000A*/ u8 cursorBaseY; - /*0x000B*/ bool8 spriteSheetLoadRequired; - /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window - /*0x0014*/ struct Sprite *menuMarkingSprites[4]; - /*0x0024*/ struct Sprite *menuTextSprite; - /*0x0028*/ const u8 *frameTiles; - /*0x002C*/ const u16 *framePalette; - /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; - /*0x1030*/ u8 filler1030[0x80]; - /*0x10B0*/ u8 tileLoadState; -}; - extern u8 gPokenavConditionMenuMisc_Gfx[]; extern u16 gUnknown_08E966B8[]; diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 9e559354b..91d56a4b9 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -3,6 +3,7 @@ #include "constants/songs.h" #include "sound.h" #include "field_weather.h" +#include "mon_markings.h" #include "overworld.h" #include "field_fadetransition.h" #include "menu.h" @@ -34,7 +35,9 @@ struct PokemonStorageSystemData { u8 filler_0000[5]; u8 unk_0005; u8 filler_0006[26]; - struct UnkStruct_2000020 unk_0020[100]; // refine size later + struct UnkStruct_2000020 unk_0020[595]; // refine size later + u8 filler_12b8[4]; + struct PokemonMarkMenu unk_12bc; }; struct UnkPSSStruct_2002370 { @@ -60,6 +63,16 @@ void sub_80966F4(const u8 *sourceString, u16 x, u16 y); void sub_8096784(struct Sprite *sprite); void task_intro_29(u8 whichMenu); void sub_8096884(void); +void sub_8096AFC(void); +void sub_8096B38(void); +void sub_8096BE0(void (*func)(void)); +void sub_8096BF0(void); +void sub_8097DE0(void); +void sub_8097E70(void); +void sub_8098400(void); +void sub_8099BF8(u8 a0); +void sub_8098B48(void); +void sub_809AA24(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); void sub_809B0D4(void); void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 * a1, u8 a2); @@ -800,6 +813,65 @@ void sub_8096874(void) REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; } +void sub_8096884(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + sub_8096804(); + gMain.state++; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6D00); + gMain.state++; + break; + case 2: + InitMenuWindow(&gWindowConfig_81E6D00); + MenuZeroFillScreen(); + gMain.state++; + break; + case 3: + sub_80967DC(); + sub_8096848(); + gMain.state++; + break; + case 4: + sub_8098B48(); + sub_809AA24(); + gMain.state++; + break; + case 5: + sub_8097DE0(); + gMain.state++; + break; + case 6: + sub_8097E70(); + gMain.state++; + break; + case 7: + sub_8098400(); + gMain.state++; + break; + case 8: + sub_8099BF8(gPokemonStorage.currentBox); + ePokemonStorageSystem.unk_12bc.baseTileTag = 0x000a; + ePokemonStorageSystem.unk_12bc.basePaletteTag = 0xdacb; + sub_80F727C(&ePokemonStorageSystem.unk_12bc); + sub_80F7404(); + gMain.state++; + break; + case 9: + sub_8096874(); + sub_8096BE0(sub_8096BF0); + SetMainCallback2(sub_8096B38); + SetVBlankCallback(sub_8096AFC); + gMain.state++; + break; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { |