From 9a152f8fe600698fe7d63e6f3835d0154d60c42c Mon Sep 17 00:00:00 2001 From: ultima-soul Date: Tue, 30 Jul 2019 17:21:17 -0700 Subject: [PATCH] Decompile data/use_pokeblock.s --- data/use_pokeblock.s | 113 ------------------ include/graphics.h | 3 + include/strings.h | 7 ++ ld_script.txt | 1 - src/use_pokeblock.c | 269 +++++++++++++++++++++++++++++++++++++++---- 5 files changed, 259 insertions(+), 134 deletions(-) delete mode 100644 data/use_pokeblock.s diff --git a/data/use_pokeblock.s b/data/use_pokeblock.s deleted file mode 100644 index dc2c7bd70c..0000000000 --- a/data/use_pokeblock.s +++ /dev/null @@ -1,113 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -.align 4 - -gUnknown_085DFA60:: @ 85DFA60 - .incbin "graphics/interface/85DFA60.bin" - -gUnknown_085DFA80:: @ 85DFA80 - .incbin "graphics/interface/85DFA80.4bpp" - -gUnknown_085DFB60:: @ 85DFB60 - .incbin "graphics/interface/85DFB60.bin" - -gUnknown_085DFC0C:: @ 85DFC0C - .incbin "graphics/interface/85DFC0C.bin" - -gUnknown_085DFCB0:: @ 85DFCB0 - .4byte 22, 47, 33, 24, 23 - -gUnknown_085DFCC4:: @ 85DFCC4 - .byte 0, 4, 3, 2, 1 - -gUnknown_085DFCC9:: @ 85DFCC9 - .byte 0, 8, 1 - -gUnknown_085DFCCC:: @ 85DFCCC - .4byte 0x1F8 - .4byte 0x31E1 - .4byte 0x4021DF - .4byte 0x1172 - -gUnknown_085DFCDC:: @ 85DFCDC - window_template 0, 0xD, 1, 0xD, 4, 0xF, 1 - window_template 0, 0, 0xE, 0xB, 2, 0xF, 0x35 - window_template 0, 1, 0x11, 0x1C, 2, 0xF, 0x4B - null_window_template - -sUsePokeblockYesNoWinTemplate:: @ 85DFCFC - window_template 0, 0x18, 0xB, 5, 4, 0xF, 0x83 - -sContestStatNames:: @ 85DFD04 - .4byte gText_Coolness - .4byte gText_Toughness - .4byte gText_Smartness - .4byte gText_Cuteness - .4byte gText_Beauty3 - -gSpriteSheet_ConditionUpDown:: @ 85DFD18 - obj_tiles gUsePokeblockUpDown_Gfx, 0x200, 0 - -gSpritePalette_ConditionUpDown:: @ 85DFD20 - obj_pal gUsePokeblockUpDown_Pal, 0 - -gUnknown_085DFD28:: @ 85DFD28 - .2byte 0x9c, 0x24 - .2byte 0x75, 0x3b - .2byte 0x75, 0x76 - .2byte 0xc5, 0x76 - .2byte 0xc5, 0x3b - -gUnknown_085DFD3C:: @ 85DFD3C - .2byte 0x4000 - .2byte 0x8000 - .2byte 0x400 - .2byte 0 - -gUnknown_085DFD44:: @ 85DFD44 - obj_image_anim_frame 0, 5 - obj_image_anim_end - -gUnknown_085DFD4C:: @ 85DFD4C - obj_image_anim_frame 8, 5 - obj_image_anim_end - -gUnknown_085DFD54:: @ 85DFD54 - .4byte gUnknown_085DFD44 - .4byte gUnknown_085DFD4C - -gSpriteTemplate_085DFD5C:: @ 85DFD5C - spr_template 0, 0, gUnknown_085DFD3C, gUnknown_085DFD54, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_085DFD74:: @ 85DFD74 - .2byte 0x4000 - .2byte 0xC000 - .2byte 0x400 - .2byte 0 - -gUnknown_085DFD7C:: @ 85DFD7C - obj_image_anim_frame 0, 5 - obj_image_anim_end - -gUnknown_085DFD84:: @ 85DFD84 - obj_image_anim_frame 32, 5 - obj_image_anim_end - -gUnknown_085DFD8C:: @ 85DFD8C - obj_image_anim_frame 64, 5 - obj_image_anim_end - -gUnknown_085DFD94:: @ 85DFD94 - .4byte gUnknown_085DFD7C - .4byte gUnknown_085DFD84 - .4byte gUnknown_085DFD8C - -gUnknown_085DFDA0:: @ 85DFDA0 - spr_template 1, 1, gUnknown_085DFD74, gUnknown_085DFD94, NULL, gDummySpriteAffineAnimTable, sub_8168374 - -gUnknown_085DFDB8:: @ 85DFDB8 - .4byte gUsePokeblockCondition_Pal - .4byte 1 diff --git a/include/graphics.h b/include/graphics.h index d77e8e4c70..bbb70590da 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4939,6 +4939,9 @@ extern const u32 gLinkMiscMenu_Tilemap[]; // Use Pokeblock extern const u8 gPokenavConditionCancel_Gfx[]; extern const u16 gPokenavConditionCancel_Pal[]; +extern const u8 gUsePokeblockUpDown_Gfx[]; +extern const u16 gUsePokeblockUpDown_Pal[]; +extern const u16 gUsePokeblockCondition_Pal[]; // Berry Crush extern const u32 gUnknown_08DE34B8[]; diff --git a/include/strings.h b/include/strings.h index 5d8d2eb79f..ffbdb42737 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2744,4 +2744,11 @@ extern const u8 gUnknown_085EC017[]; extern const u8 gUnknown_085EC01C[]; extern const u8 gUnknown_085EC022[]; +// use_pokeblock +extern const u8 gText_Coolness[]; +extern const u8 gText_Toughness[]; +extern const u8 gText_Smartness[]; +extern const u8 gText_Cuteness[]; +extern const u8 gText_Beauty3[]; + #endif // GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 0b416109de..d5231c59ba 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -600,7 +600,6 @@ SECTIONS { src/roamer.o(.rodata); src/battle_tower.o(.rodata); src/use_pokeblock.o(.rodata); - data/use_pokeblock.o(.rodata); src/battle_controller_wally.o(.rodata); src/player_pc.o(.rodata); src/intro.o(.rodata); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index f28b651ccf..a70a9cd003 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -85,6 +85,10 @@ struct UsePokeblockStruct /*0x7FD0*/ struct UsePokeblockSubStruct info; }; +#define TAG_TILE_CONDITION_UP_DOWN 0 +#define TAG_PAL_CONDITION_UP_DOWN 0 +#define TAG_PAL_POKEBLOCK_CONDITION 1 + extern void sub_81D21DC(u8); // this file's functions @@ -130,26 +134,12 @@ static u8 sub_8168048(void); void sub_8168180(struct Sprite *sprite); void sub_81681B4(struct Sprite *sprite); void sub_8168168(struct Sprite *sprite); +void sub_8168374(struct Sprite *sprite); -extern const struct BgTemplate gUnknown_085DFCCC[4]; -extern const struct WindowTemplate gUnknown_085DFCDC[]; -extern const struct WindowTemplate sUsePokeblockYesNoWinTemplate[]; -extern const u8* sContestStatNames[]; -extern const u32 gUnknown_085DFCB0[]; -extern const u8 gUnknown_085DFCC4[]; -extern const struct SpriteSheet gSpriteSheet_ConditionUpDown; -extern const struct SpritePalette gSpritePalette_ConditionUpDown; -extern const struct SpriteTemplate gSpriteTemplate_085DFD5C; -extern const s16 gUnknown_085DFD28[][2]; -extern const u32 gUnknown_085DFB60[]; -extern const u32 gUnknown_085DFA80[]; -extern const u32 gUnknown_085DFA60[]; -extern const u32 gUnknown_085DFC0C[]; extern const u16 gUnknown_086231E8[]; extern const u16 gUnknown_08623208[]; -extern const u8 gUnknown_085DFCC9[]; -extern const struct SpritePalette gUnknown_085DFDB8; -extern const struct SpriteTemplate gUnknown_085DFDA0; +extern const struct SpritePalette gSpritePalette_085DFDB8; +extern const struct SpriteTemplate gSpriteTemplate_085DFDA0; // ram variables EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL; @@ -165,6 +155,245 @@ EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; // const rom data // todo: make it static once the file is decompiled +const u32 gUnknown_085DFA60[] = INCBIN_U32("graphics/interface/85DFA60.bin"); +const u32 gUnknown_085DFA80[] = INCBIN_U32("graphics/interface/85DFA80.4bpp"); +const u32 gUnknown_085DFB60[] = INCBIN_U32("graphics/interface/85DFB60.bin"); +const u32 gUnknown_085DFC0C[] = INCBIN_U32("graphics/interface/85DFC0C.bin"); + +const u32 gUnknown_085DFCB0[] = +{ + MON_DATA_COOL, + MON_DATA_TOUGH, + MON_DATA_SMART, + MON_DATA_CUTE, + MON_DATA_BEAUTY +}; + +const u8 gUnknown_085DFCC4[] = +{ + 0, // Spicy/Cool + 4, // Dry/Beauty + 3, // Sweet/Cute + 2, // Bitter/Smart + 1 // Sour/Tough +}; + +const u8 gUnknown_085DFCC9[] = +{ + 0, + 8, + 1 +}; + +const struct BgTemplate gUnknown_085DFCCC[4] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x100 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } +}; + +const struct WindowTemplate gUnknown_085DFCDC[] = +{ + { + .bg = 0, + .tilemapLeft = 0xD, + .tilemapTop = 1, + .width = 0xD, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 1 + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0xE, + .width = 0xB, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x35 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x11, + .width = 0x1C, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x4B + }, + DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate sUsePokeblockYesNoWinTemplate = +{ + .bg = 0, + .tilemapLeft = 0x18, + .tilemapTop = 0xB, + .width = 5, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x83 +}; + +const u8 *const sContestStatNames[] = +{ + gText_Coolness, + gText_Toughness, + gText_Smartness, + gText_Cuteness, + gText_Beauty3 +}; + +const struct SpriteSheet gSpriteSheet_ConditionUpDown = +{ + gUsePokeblockUpDown_Gfx, 0x200, TAG_TILE_CONDITION_UP_DOWN +}; + +const struct SpritePalette gSpritePalette_ConditionUpDown = +{ + gUsePokeblockUpDown_Pal, TAG_PAL_CONDITION_UP_DOWN +}; + +const s16 gUnknown_085DFD28[][2] = +{ + {0x9C, 0x24}, + {0x75, 0x3B}, + {0x75, 0x76}, + {0xC5, 0x76}, + {0xC5, 0x3B} +}; + +const struct OamData gOamData_085DFD3C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const union AnimCmd gSpriteAnim_085DFD44[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD4C[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_085DFD54[] = +{ + gSpriteAnim_085DFD44, + gSpriteAnim_085DFD4C +}; + +const struct SpriteTemplate gSpriteTemplate_085DFD5C = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gOamData_085DFD3C, + .anims = gSpriteAnimTable_085DFD54, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct OamData gOamData_085DFD74 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const union AnimCmd gSpriteAnim_085DFD7C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD84[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD8C[] = +{ + ANIMCMD_FRAME(64, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_085DFD94[] = +{ + gSpriteAnim_085DFD7C, + gSpriteAnim_085DFD84, + gSpriteAnim_085DFD8C +}; + +const struct SpriteTemplate gSpriteTemplate_085DFDA0 = +{ + .tileTag = 1, + .paletteTag = 1, + .oam = &gOamData_085DFD74, + .anims = gSpriteAnimTable_085DFD94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8168374, +}; + +const struct SpritePalette gSpritePalette_085DFDB8 = +{ + gUsePokeblockCondition_Pal, TAG_PAL_POKEBLOCK_CONDITION +}; + // code void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { @@ -618,7 +847,7 @@ void sub_8166D44(void) AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); PutWindowTilemap(2); CopyWindowToVram(2, 3); - CreateYesNoMenu(sUsePokeblockYesNoWinTemplate, 151, 14, 0); + CreateYesNoMenu(&sUsePokeblockYesNoWinTemplate, 151, 14, 0); } s8 sub_8166DE4(void) @@ -1373,7 +1602,7 @@ static void sub_8168248(void) struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePalette; - spritePalette = gUnknown_085DFDB8; + spritePalette = gSpritePalette_085DFDB8; spriteSheet.data = gUsePokeblockCondition_Gfx; spriteSheet.size = 0x800; spriteSheet.tag = 1; @@ -1388,7 +1617,7 @@ static void sub_8168294(void) int yStart = 17; int var = 8; struct Sprite **sprites = gUnknown_0203BCAC->field_7B44; - const struct SpriteTemplate *template = &gUnknown_085DFDA0; + const struct SpriteTemplate *template = &gSpriteTemplate_085DFDA0; for (i = 0, xDiff = 64, xStart = -96; i < 2; i++) {