diff options
-rw-r--r-- | data/battle_interface.s | 120 | ||||
-rw-r--r-- | include/graphics.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_interface.c | 244 |
4 files changed, 238 insertions, 131 deletions
diff --git a/data/battle_interface.s b/data/battle_interface.s index 12b46279c..4dc0c1b99 100644 --- a/data/battle_interface.s +++ b/data/battle_interface.s @@ -11,126 +11,6 @@ .section .rodata .align 2, 0 -gUnknown_8260270:: @ 8260270 - .4byte 0xc0004000, 0x00000400 - -sHealthboxPlayerSpriteTemplates:: @ 8260278 - spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -sHealthboxOpponentSpriteTemplates:: @ 82602A8 - spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -sHealthboxSafariSpriteTemplate:: @ 82602D8 - spr_template 55051, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_82602F0:: - .4byte 0x40004000, 0x00000400 - -gUnknown_82602F8:: @ 82602F8 - spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_HealthBar - -gUnknown_8260358:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - subsprite 240, 32, 1, 0x0030, 32x8 - subsprite 16, 32, 1, 0x0034, 32x8 - subsprite 48, 32, 1, 0x0038, 32x8 - -gUnknown_826036C:: - subsprite 240, 0, 1, 0x0040, 64x32 - subsprite 48, 0, 1, 0x0060, 32x32 - subsprite 240, 32, 1, 0x0070, 32x8 - subsprite 16, 32, 1, 0x0074, 32x8 - subsprite 48, 32, 1, 0x0078, 32x8 - -gUnknown_8260380:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - -gUnknown_8260388:: - subsprite 240, 0, 1, 0x0000, 64x32 - subsprite 48, 0, 1, 0x0020, 32x32 - -gUnknown_8260390:: - subsprite 240, 0, 1, 0x0000, 32x8 - subsprite 16, 0, 1, 0x0004, 32x8 - -gUnknown_8260398:: - subsprite 240, 0, 1, 0x0000, 32x8 - subsprite 16, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 8x8 - -gUnknown_82603A4:: - .4byte 5, gUnknown_8260358 - .4byte 2, gUnknown_8260380 - .4byte 5, gUnknown_826036C - .4byte 2, gUnknown_8260388 - -gUnknown_82603C4:: @ 82603C4 - .4byte 2, gUnknown_8260390 - .4byte 3, gUnknown_8260398 - -gUnknown_82603D4:: - subsprite 160, 0, 1, 0x0000, 32x8 - subsprite 192, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 32x8 - subsprite 0, 0, 1, 0x000c, 32x8 - -gUnknown_82603E4:: - subsprite 160, 0, 1, 0x0000, 32x8 - subsprite 192, 0, 1, 0x0004, 32x8 - subsprite 224, 0, 1, 0x0008, 32x8 - subsprite 0, 0, 1, 0x0008, 32x8 - subsprite 32, 0, 1, 0x0008, 32x8 - subsprite 64, 0, 1, 0x000c, 32x8 - -gUnknown_82603FC:: @ 82603FC - .4byte 4, gUnknown_82603D4 - -gUnknown_8260404:: @ 8260404 - .4byte 6, gUnknown_82603E4 - -gUnknown_26040C:: - .incbin "graphics/battle_interface/unk_826404C.4bpp" - -gUnknown_826046C:: @ 826046C - obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052 - obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053 - -gUnknown_826047C:: @ 826047C - obj_pal gBattleInterface_BallStatusBarPal, 55056 - obj_pal gBattleInterface_BallStatusBarPal, 55057 - -gUnknown_826048C:: @ 826048C - obj_pal gBattleInterface_BallDisplayPal, 55058 - obj_pal gBattleInterface_BallDisplayPal, 55059 - -gUnknown_826049C:: @ 826049C - obj_tiles gUnknown_8D12404, 0x0080, 55060 - obj_tiles gUnknown_8D12404, 0x0080, 55061 - -gUnknown_82604AC:: - .4byte 0xc0004000, 0x00000400 - -gUnknown_82604B4:: - .4byte 0x00000000, 0x00000400 - -gUnknown_82604BC:: @ 82604BC - spr_template 55052, 55056, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar - spr_template 55053, 55057, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar - -gUnknown_82604EC:: @ 82604EC - spr_template 55060, 55058, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart - spr_template 55061, 55059, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart - -gUnknown_826051C:: @ 826051C - .string "{LV_2}$", 16 - gUnknown_826052C:: @ 826052C .string "{COLOR 01}{HIGHLIGHT 02}", 20 diff --git a/include/graphics.h b/include/graphics.h index 03c9e5de6..a668364bd 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4855,6 +4855,10 @@ extern const u16 gEmeraldTrainerCard_Pal[]; extern const u32 gEmeraldTrainerCard_Gfx[]; // battle_interface +extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[]; extern const u8 gHealthboxElementsGfxTable[][32]; +extern const u16 gBattleInterface_BallStatusBarPal[]; +extern const u16 gBattleInterface_BallDisplayPal[]; +extern const u16 gUnknown_8D12404[]; #endif //GUARD_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index d05f63e44..f837fb356 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -406,6 +406,7 @@ SECTIONS { src/util.o(.rodata); src/daycare.o(.rodata); src/battle_gfx_sfx_util.o(.rodata); + src/battle_interface.o(.rodata); data/battle_interface.o(.rodata); src/pokeball.o(.rodata); src/trade.o(.rodata); diff --git a/src/battle_interface.c b/src/battle_interface.c index fd4f9af3e..926324300 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -8,20 +8,244 @@ #include "text.h" void SpriteCB_HealthBoxOther(struct Sprite * sprite); +void SpriteCB_HealthBar(struct Sprite * sprite); +void SpriteCB_StatusSummaryBar(struct Sprite * sprite); +void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite * sprite); const u8 *GetHealthboxElementGfxPtr(u8 which); u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 *windowId); void RemoveWindowOnHealthbox(u32 windowId); void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); -extern const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[]; -extern const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[]; -extern const struct SpriteTemplate sHealthboxSafariSpriteTemplate; -extern const struct SpriteTemplate gUnknown_82602F8[]; -extern const struct SubspriteTable gUnknown_82603C4[]; -extern const u8 gUnknown_826051C[16]; -extern const u8 gUnknown_826052C[20]; -extern const u8 gUnknown_8260542[20]; +const struct OamData gOamData_8260270 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const struct SpriteTemplate sHealthboxPlayerSpriteTemplates[] = { + { + .tileTag = 55039, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, { + .tileTag = 55040, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +const struct SpriteTemplate sHealthboxOpponentSpriteTemplates[] = { + { + .tileTag = 55041, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }, { + .tileTag = 55042, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + } +}; + +const struct SpriteTemplate sHealthboxSafariSpriteTemplate = +{ + .tileTag = 55051, + .paletteTag = 55039, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gUnknown_82602F0 = { + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .priority = 1 +}; + +const struct SpriteTemplate gUnknown_82602F8[] = { + { + .tileTag = 55044, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55045, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55046, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + }, { + .tileTag = 55047, + .paletteTag = 55044, + .oam = &gUnknown_82602F0, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HealthBar + } +}; + +const struct Subsprite gUnknown_8260358[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 }, + { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0030, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0034, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0038, 1 } +}; + +const struct Subsprite gUnknown_826036C[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0040, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0060, 1 }, + { 240, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0070, 1 }, + { 16, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0074, 1 }, + { 48, 32, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0078, 1 } +}; + +const struct Subsprite gUnknown_8260380[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +}; + +const struct Subsprite gUnknown_8260388[] = { + { 240, 0, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), 0x0000, 1 }, + { 48, 0, SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), 0x0020, 1 } +}; + +const struct Subsprite gUnknown_8260390[] = { + { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 } +}; + +const struct Subsprite gUnknown_8260398[] = { + { 240, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 16, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(8x8), SPRITE_SIZE(8x8), 0x0008, 1 } +}; + +const struct SubspriteTable gUnknown_82603A4[] = { + {NELEMS(gUnknown_8260358), gUnknown_8260358}, + {NELEMS(gUnknown_8260380), gUnknown_8260380}, + {NELEMS(gUnknown_826036C), gUnknown_826036C}, + {NELEMS(gUnknown_8260388), gUnknown_8260388} +}; + +const struct SubspriteTable gUnknown_82603C4[] = { + {NELEMS(gUnknown_8260390), gUnknown_8260390}, + {NELEMS(gUnknown_8260398), gUnknown_8260398} +}; + +const struct Subsprite gUnknown_82603D4[] = { + { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +}; + +const struct Subsprite gUnknown_82603E4[] = { + { 160, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0000, 1 }, + { 192, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0004, 1 }, + { 224, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 0, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 32, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x0008, 1 }, + { 64, 0, SPRITE_SHAPE(32x8), SPRITE_SIZE(32x8), 0x000c, 1 } +}; + +const struct SubspriteTable gUnknown_82603FC = +{NELEMS(gUnknown_82603D4), gUnknown_82603D4}; +const struct SubspriteTable gUnknown_8260404 = +{NELEMS(gUnknown_82603E4), gUnknown_82603E4}; + +const u16 gUnknown_26040C[] = INCBIN_U16("graphics/battle_interface/unk_826404C.4bpp"); + +const struct CompressedSpriteSheet gUnknown_826046C[] = { + {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052}, + {gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053} +}; + +const struct SpritePalette gUnknown_826047C[] = { + {gBattleInterface_BallStatusBarPal, 55056}, + {gBattleInterface_BallStatusBarPal, 55057} +}; + +const struct SpritePalette gUnknown_826048C[] = { + {gBattleInterface_BallDisplayPal, 55058}, + {gBattleInterface_BallDisplayPal, 55059} +}; + +const struct SpriteSheet gUnknown_826049C[] = { + {gUnknown_8D12404, 0x0080, 55060}, + {gUnknown_8D12404, 0x0080, 55061} +}; + +const struct OamData gUnknown_82604AC = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const struct OamData gUnknown_82604B4 = { + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .priority = 1 +}; + +const struct SpriteTemplate gUnknown_82604BC[] = { + { + .tileTag = 55052, + .paletteTag = 55056, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBar + }, { + .tileTag = 55053, + .paletteTag = 55057, + .oam = &gOamData_8260270, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBar + } +}; + +const struct SpriteTemplate gUnknown_82604EC[] = { + { + .tileTag = 55060, + .paletteTag = 55058, + .oam = &gUnknown_82604B4, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBallsOnBattleStart + }, { + .tileTag = 55061, + .paletteTag = 55059, + .oam = &gUnknown_82604B4, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_StatusSummaryBallsOnBattleStart + } +}; void sub_8047B0C(s16 number, u16 *dest, bool8 unk) { @@ -346,12 +570,10 @@ void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) { u32 windowId, spriteTileNum; u8 *windowTileData; - u8 text[16]; + u8 text[16] = _("{LV_2}"); u32 xPos, var1; void *objVram; - memcpy(text, gUnknown_826051C, 16); - xPos = (u32) ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); // Alright, that part was unmatchable. It's basically doing: // xPos = 5 * (3 - (u32)(&text[2])); |