summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/battle_interface.s120
-rw-r--r--include/graphics.h4
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_interface.c244
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]));