diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/battle_7.c | 51 | ||||
-rw-r--r-- | src/battle/battle_interface.c | 564 | ||||
-rw-r--r-- | src/engine/sprite.c | 14 | ||||
-rw-r--r-- | src/engine/text.c | 2 | ||||
-rw-r--r-- | src/pokemon/pokemon_icon.c | 3 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 3 |
6 files changed, 536 insertions, 101 deletions
diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 00216ce05..3d34a8ee9 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -20,6 +20,7 @@ #include "text.h" #include "gba/m4a_internal.h" #include "ewram.h" +#include "graphics.h" extern u8 gBattleBufferA[][0x200]; extern u8 gActiveBank; @@ -49,19 +50,47 @@ extern const u8 *const gBattleAnims_Special[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; -extern const u8 gSubstituteDollTilemap[]; -extern const u8 gSubstituteDollGfx[]; -extern const u8 gSubstituteDollPal[]; extern const struct CompressedSpriteSheet gUnknown_081FAF24; extern const struct SpriteTemplate gSpriteTemplate_81FAF34; -extern const struct CompressedSpriteSheet gUnknown_0820A47C; -extern const struct CompressedSpriteSheet gUnknown_0820A484; -extern const struct CompressedSpriteSheet gUnknown_0820A48C[]; -extern const struct CompressedSpriteSheet gUnknown_0820A49C[]; -extern const struct CompressedSpriteSheet gUnknown_0820A4AC; -extern const struct CompressedSpriteSheet gUnknown_0820A4B4[]; -extern const struct SpritePalette gUnknown_0820A4D4[]; -extern const u8 gUnknown_08D09C48[]; +extern const u8 gSubstituteDollTilemap[]; // graphics.s +extern const u8 gSubstituteDollGfx[]; // graphics.s +extern const u8 gSubstituteDollPal[]; // graphics.s +extern const u8 gUnknown_08D09C48[]; // graphics.s + +const struct CompressedSpriteSheet gUnknown_0820A47C = +{ gBattleWindowLargeGfx, 4096, 0xd6ff }; + +const struct CompressedSpriteSheet gUnknown_0820A484 = +{ gBattleWindowSmallGfx, 4096, 0xd701 }; + +const struct CompressedSpriteSheet gUnknown_0820A48C[] = +{ + { gBattleWindowSmall2Gfx, 2048, 0xd6ff }, + { gBattleWindowSmall2Gfx, 2048, 0xd700 }, +}; + +const struct CompressedSpriteSheet gUnknown_0820A49C[] = +{ + { gBattleWindowSmall3Gfx, 2048, 0xd701 }, + { gBattleWindowSmall3Gfx, 2048, 0xd702 }, +}; + +const struct CompressedSpriteSheet gUnknown_0820A4AC = +{ gBattleWindowLarge2Gfx, 4096, 0xd70b }; + +const struct CompressedSpriteSheet gUnknown_0820A4B4[] = +{ + { gBlankGfxCompressed, 256, 0xd704 }, + { gBlankGfxCompressed, 288, 0xd705 }, + { gBlankGfxCompressed, 256, 0xd706 }, + { gBlankGfxCompressed, 288, 0xd707 }, +}; + +const struct SpritePalette gUnknown_0820A4D4[] = +{ + { gUnknown_08D1212C, 0xD6FF }, + { gUnknown_08D1214C, 0xD704 }, +}; extern void c3_0802FDF4(u8); extern void sub_80440EC(); diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 97568d254..12d7f48b2 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -14,6 +14,7 @@ #include "task.h" #include "text.h" #include "ewram.h" +#include "graphics.h" struct UnknownStruct5 { @@ -29,6 +30,398 @@ struct UnknownStruct7 u8 filler0[0x180]; }; +static void sub_8043CEC(struct Sprite *sprite); +static void sub_8045030(struct Sprite *sprite); +static void sub_804507C(struct Sprite *sprite); + +const struct OamData gOamData_820A4E4 = +{ + .shape = 1, + .size = 3, + .priority = 1, +}; + +const struct SpriteTemplate gSpriteTemplates_820A4EC[] = +{ + { + .tileTag = 55039, + .paletteTag = 55039, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55040, + .paletteTag = 55039, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +const struct SpriteTemplate gSpriteTemplates_820A51C[] = +{ + { + .tileTag = 55041, + .paletteTag = 55039, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55042, + .paletteTag = 55039, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +const struct SpriteTemplate gSpriteTemplate_820A54C = +{ + .tileTag = 55051, + .paletteTag = 55039, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct OamData gOamData_820A564 = +{ + .shape = 1, + .size = 1, + .priority = 1, +}; + +const struct SpriteTemplate gSpriteTemplates_820A56C[] = +{ + { + .tileTag = 55044, + .paletteTag = 55044, + .oam = &gOamData_820A564, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8043CEC, + }, + { + .tileTag = 55045, + .paletteTag = 55044, + .oam = &gOamData_820A564, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8043CEC, + }, + { + .tileTag = 55046, + .paletteTag = 55044, + .oam = &gOamData_820A564, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8043CEC, + }, + { + .tileTag = 55047, + .paletteTag = 55044, + .oam = &gOamData_820A564, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8043CEC, + }, +}; + +const struct Subsprite gSubspriteTable_820A5CC[] = +{ + { .x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 3 }, // size := 64x32 + { .x = 48, .y = 0, .shape = ST_OAM_SQUARE, .priority = 1, .tileOffset = 32, .size = 2 }, // size := 32x32 + { .x = -16, .y = 32, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 48, .size = 1 }, // size := 32x8 + { .x = 16, .y = 32, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 52, .size = 1 }, // size := 32x8 + { .x = 48, .y = 32, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 56, .size = 1 }, // size := 32x8 +}; + +const struct Subsprite gSubspriteTable_820A5F4[] = +{ + { .x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 64, .size = 3 }, // size := 64x32 + { .x = 48, .y = 0, .shape = ST_OAM_SQUARE, .priority = 1, .tileOffset = 96, .size = 2 }, // size := 32x32 + { .x = -16, .y = 32, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset =112, .size = 1 }, // size := 32x8 + { .x = 16, .y = 32, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset =116, .size = 1 }, // size := 32x8 + { .x = 48, .y = 32, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset =120, .size = 1 }, // size := 32x8 +}; + +const struct Subsprite gSubspriteTable_820A61C[] = +{ + { .x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 3 }, // size := 64x32 + { .x = 48, .y = 0, .shape = ST_OAM_SQUARE, .priority = 1, .tileOffset = 32, .size = 2 }, // size := 32x32 +}; + +const struct Subsprite gSubspriteTable_820A62C[] = +{ + { .x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 3 }, // size := 64x32 + { .x = 48, .y = 0, .shape = ST_OAM_SQUARE, .priority = 1, .tileOffset = 32, .size = 2 }, // size := 32x32 +}; + +const struct Subsprite gSubspriteTable_820A63C[] = +{ + { .x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 1 }, // size := 32x8 + { .x = 16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 4, .size = 1 }, // size := 32x8 +}; + +const struct Subsprite gSubspriteTable_820A64C[] = +{ + { .x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 1 }, // size := 32x8 + { .x = 16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 4, .size = 1 }, // size := 32x8 + { .x = -32, .y = 0, .shape = ST_OAM_SQUARE, .priority = 1, .tileOffset = 8, .size = 0 }, // size := 8x8 +}; + +const struct SubspriteTable gSubspriteTables_unreferenced[] = +{ + { ARRAY_COUNT(gSubspriteTable_820A5CC), gSubspriteTable_820A5CC }, + { ARRAY_COUNT(gSubspriteTable_820A61C), gSubspriteTable_820A61C }, + { ARRAY_COUNT(gSubspriteTable_820A5F4), gSubspriteTable_820A5F4 }, + { ARRAY_COUNT(gSubspriteTable_820A62C), gSubspriteTable_820A62C }, +}; + +const struct SubspriteTable gSubspriteTables_820A684[] = +{ + { ARRAY_COUNT(gSubspriteTable_820A63C), gSubspriteTable_820A63C }, + { ARRAY_COUNT(gSubspriteTable_820A64C), gSubspriteTable_820A64C }, +}; + +const struct Subsprite gSubspriteTable_820A694[] = +{ + { .x = -96, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 1 }, // size := 32x8 + { .x = -64, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 4, .size = 1 }, // size := 32x8 + { .x = -32, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 8, .size = 1 }, // size := 32x8 + { .x = 0, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 12, .size = 1 }, // size := 32x8 +}; + +const struct Subsprite gSubspriteTable_820A6B4[] = +{ + { .x = -96, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 0, .size = 1 }, // size := 32x8 + { .x = -64, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 4, .size = 1 }, // size := 32x8 + { .x = -32, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 8, .size = 1 }, // size := 32x8 + { .x = 0, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 8, .size = 1 }, // size := 32x8 + { .x = 32, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 8, .size = 1 }, // size := 32x8 + { .x = 64, .y = 0, .shape = ST_OAM_H_RECTANGLE, .priority = 1, .tileOffset = 12, .size = 1 }, // size := 32x8 +}; + +const struct SubspriteTable gSubspriteTables_820A6E4[] = +{ + { ARRAY_COUNT(gSubspriteTable_820A694), gSubspriteTable_820A694 }, +}; + +const struct SubspriteTable gSubspriteTables_820A6EC[] = +{ + { ARRAY_COUNT(gSubspriteTable_820A6B4), gSubspriteTable_820A6B4 }, +}; + +// unused dakuten/handakuten tiles +const u8 gUnusedDakuten[] = INCBIN_U8("graphics/unused/dakuten.4bpp"); + +const struct CompressedSpriteSheet gUnknown_0820A754[] = +{ + { gBattleGfx_BallStatusBar, 512, 0xd70c }, + { gBattleGfx_BallStatusBar, 512, 0xd70d }, +}; + +const struct SpritePalette gUnknown_0820A764[] = +{ + { gUnknown_08D1212C, 0xd710 }, + { gUnknown_08D1212C, 0xd711 }, +}; + +const struct SpritePalette gUnknown_0820A774[] = +{ + { gUnknown_08D1214C, 0xd712 }, + { gUnknown_08D1214C, 0xd713 }, +}; + +const struct CompressedSpriteSheet gUnknown_0820A784[] = +{ + { Tiles_D129AC, 0x80, 0xd714 }, + { Tiles_D129AC, 0x80, 0xd715 }, +}; + +const struct OamData gOamData_820A794 = +{ + .shape = 1, + .size = 3, + .priority = 1, +}; + +const struct OamData gOamData_820A79C = +{ + .shape = 0, + .size = 0, + .priority = 1, +}; + +const struct SpriteTemplate gSpriteTemplate_820A7A4 = +{ + .tileTag = 55052, + .paletteTag = 55056, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8045030, +}; + +const struct SpriteTemplate gSpriteTemplate_820A7BC = +{ + .tileTag = 55053, + .paletteTag = 55057, + .oam = &gOamData_820A4E4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8045030, +}; + +const struct SpriteTemplate gSpriteTemplate_820A7D4 = +{ + .tileTag = 55060, + .paletteTag = 55058, + .oam = &gOamData_820A79C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_804507C, +}; + +const struct SpriteTemplate gSpriteTemplate_820A7EC = +{ + .tileTag = 55061, + .paletteTag = 55059, + .oam = &gOamData_820A79C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_804507C, +}; + +TileData4bpp *const gUnknown_0820A804[2] = +{ + &OBJ_VRAM0_TEMP[74], + &OBJ_VRAM0_TEMP[75], +}; + +TileData4bpp *const gUnknown_0820A80C[2] = +{ + &OBJ_VRAM0_TEMP[41], + &OBJ_VRAM0_TEMP[42], +}; + +TileData4bpp *const gUnknown_0820A814[2] = +{ + &OBJ_VRAM0_TEMP[42], + &OBJ_VRAM0_TEMP[43], +}; + +const u8 gUnknown_0820A81C[] = __("{COLOR DARK_GREY}{HIGHLIGHT RED} "); + +TileData4bpp *const gUnknown_0820A83C[3] = +{ + &OBJ_VRAM0_TEMP[31], + &OBJ_VRAM0_TEMP[88], + &OBJ_VRAM0_TEMP[89], +}; + +TileData4bpp *const gUnknown_0820A848[3] = +{ + &OBJ_VRAM0_TEMP[22], + &OBJ_VRAM0_TEMP[23], + &OBJ_VRAM0_TEMP[48], +}; + +TileData4bpp *const gUnknown_0820A854[2] = +{ + &OBJ_VRAM0_TEMP[90], + &OBJ_VRAM0_TEMP[91], +}; + +TileData4bpp *const gUnknown_0820A85C[2] = +{ + &OBJ_VRAM0_TEMP[49], + &OBJ_VRAM0_TEMP[50], +}; + +const u8 gUnknown_0820A864[] = _("{COLOR DARK_GREY}{HIGHLIGHT RED} /"); + +TileData4bpp *const gUnknown_0820A87C[6] = +{ + &OBJ_VRAM0_TEMP[0], + &OBJ_VRAM0_TEMP[1], + &OBJ_VRAM0_TEMP[2], + &OBJ_VRAM0_TEMP[3], + &OBJ_VRAM0_TEMP[4], + &OBJ_VRAM0_TEMP[5], +}; + +TileData4bpp *const gUnknown_0820A894[2] = +{ + &OBJ_VRAM0_TEMP[6], + &OBJ_VRAM0_TEMP[7], +}; + +const u8 gUnknown_0820A89C[] = __("{COLOR DARK_GREY}{HIGHLIGHT TRANSPARENT} "); +const u8 gUnknown_0820A8B0[] = _("{HIGHLIGHT RED}"); + +TileData4bpp *const gUnknown_0820A8B4[10] = +{ + &OBJ_VRAM0_TEMP[ 2], + &OBJ_VRAM0_TEMP[ 3], + &OBJ_VRAM0_TEMP[ 4], + &OBJ_VRAM0_TEMP[ 5], + &OBJ_VRAM0_TEMP[ 6], + &OBJ_VRAM0_TEMP[ 7], + &OBJ_VRAM0_TEMP[64], + &OBJ_VRAM0_TEMP[65], + &OBJ_VRAM0_TEMP[66], + &OBJ_VRAM0_TEMP[67], +}; + +TileData4bpp *const gUnknown_0820A8DC[10] = +{ + &OBJ_VRAM0_TEMP[ 1], + &OBJ_VRAM0_TEMP[ 2], + &OBJ_VRAM0_TEMP[ 3], + &OBJ_VRAM0_TEMP[ 4], + &OBJ_VRAM0_TEMP[ 5], + &OBJ_VRAM0_TEMP[ 6], + &OBJ_VRAM0_TEMP[ 7], + &OBJ_VRAM0_TEMP[32], + &OBJ_VRAM0_TEMP[33], + &OBJ_VRAM0_TEMP[34], +}; + +TileData4bpp *const gUnknown_0820A904[10] = +{ + &OBJ_VRAM0_TEMP[ 2], + &OBJ_VRAM0_TEMP[ 3], + &OBJ_VRAM0_TEMP[ 4], + &OBJ_VRAM0_TEMP[ 5], + &OBJ_VRAM0_TEMP[ 6], + &OBJ_VRAM0_TEMP[ 7], + &OBJ_VRAM0_TEMP[32], + &OBJ_VRAM0_TEMP[33], + &OBJ_VRAM0_TEMP[34], + &OBJ_VRAM0_TEMP[35], +}; + extern u8 gDisplayedStringBattle[]; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; @@ -37,39 +430,11 @@ extern u8 gHealthboxIDs[]; extern u16 gBattleTypeFlags; -extern const struct SpriteTemplate gSpriteTemplate_820A4EC[]; -extern const struct SpriteTemplate gSpriteTemplate_820A51C[]; -extern const struct SpriteTemplate gSpriteTemplate_820A54C; -extern const struct SpriteTemplate gSpriteTemplate_820A56C[]; -extern const struct SubspriteTable gSubspriteTables_820A684[]; -extern const struct SubspriteTable gSubspriteTables_820A6E4[]; -extern const struct SubspriteTable gSubspriteTables_820A6EC[]; -extern const struct SpriteSheet gUnknown_0820A754[]; -extern const struct SpritePalette gUnknown_0820A764[]; -extern const struct SpritePalette gUnknown_0820A774[]; -extern const struct SpriteSheet gUnknown_0820A784[]; -extern const struct SpriteTemplate gSpriteTemplate_820A7A4[]; -extern const struct SpriteTemplate gSpriteTemplate_820A7D4[]; -extern void *const gUnknown_0820A804[]; -extern void *const gUnknown_0820A80C[]; -extern void *const gUnknown_0820A814[]; -extern void *const gUnknown_0820A83C[]; -extern void *const gUnknown_0820A848[]; -extern void *const gUnknown_0820A854[]; -extern void *const gUnknown_0820A85C[]; -extern void *const gUnknown_0820A87C[]; -extern void *const gUnknown_0820A894[]; -extern void *const gUnknown_0820A8B4[]; -extern void *const gUnknown_0820A8DC[]; -extern void *const gUnknown_0820A904[]; -extern const u8 gUnknown_0820A81C[]; -extern const u8 gUnknown_0820A864[]; -extern const u8 gUnknown_0820A89C[]; -extern const u8 gUnknown_0820A8B0[]; extern const u8 BattleText_SafariBalls[]; extern const u8 BattleText_SafariBallsLeft[]; extern const u8 BattleText_HighlightRed[]; extern const u8 gUnknown_08D1216C[][32]; +// extern const TileData4bpp gUnknown_08D1216C[]; // graphics extern const u16 gBattleInterfaceStatusIcons_DynPal[]; @@ -79,6 +444,7 @@ extern const u16 gBattleInterfaceStatusIcons_DynPal[]; static void sub_8043D5C(struct Sprite *); static const void *sub_8043CDC(u8); +// static const TileData4bpp *sub_8043CDC(u8); static void sub_8044210(u8, s16, u8); static void draw_status_ailment_maybe(u8); extern void sub_8045180(struct Sprite *); @@ -421,8 +787,8 @@ u8 battle_make_oam_normal_battle(u8 a) { if (GetBankSide(a) == 0) { - spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[0], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[0], 240, 160, 1); + spriteId1 = CreateSprite(&gSpriteTemplates_820A4EC[0], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplates_820A4EC[0], 240, 160, 1); gSprites[spriteId1].oam.shape = 0; gSprites[spriteId2].oam.shape = 0; @@ -430,8 +796,8 @@ u8 battle_make_oam_normal_battle(u8 a) } else { - spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[0], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[0], 240, 160, 1); + spriteId1 = CreateSprite(&gSpriteTemplates_820A51C[0], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplates_820A51C[0], 240, 160, 1); gSprites[spriteId2].oam.tileNum += 32; sp0 = 2; @@ -447,8 +813,8 @@ u8 battle_make_oam_normal_battle(u8 a) { if (GetBankSide(a) == 0) { - spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); + spriteId1 = CreateSprite(&gSpriteTemplates_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplates_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); gSprites[spriteId1].oam.affineParam = spriteId2; gSprites[spriteId2].data[5] = spriteId1; @@ -459,8 +825,8 @@ u8 battle_make_oam_normal_battle(u8 a) //_08043ACC else { - spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); - spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); + spriteId1 = CreateSprite(&gSpriteTemplates_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); + spriteId2 = CreateSpriteAtEnd(&gSpriteTemplates_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); gSprites[spriteId1].oam.affineParam = spriteId2; gSprites[spriteId2].data[5] = spriteId1; @@ -472,12 +838,13 @@ u8 battle_make_oam_normal_battle(u8 a) } //_08043B50 - spriteId3 = CreateSpriteAtEnd(&gSpriteTemplate_820A56C[gBanksBySide[a]], 140, 60, 0); + spriteId3 = CreateSpriteAtEnd(&gSpriteTemplates_820A56C[gBanksBySide[a]], 140, 60, 0); sprite = &gSprites[spriteId3]; SetSubspriteTables(sprite, &gSubspriteTables_820A684[GetBankSide(a)]); sprite->subspriteMode = 2; sprite->oam.priority = 1; - CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); + // CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); + CpuCopy32(sub_8043CDC(1), &OBJ_VRAM0_TEMP[sprite->oam.tileNum], 64); gSprites[spriteId1].data[5] = spriteId3; gSprites[spriteId1].data[6] = a; @@ -505,11 +872,13 @@ u8 battle_make_oam_safari_battle(void) } static const void *sub_8043CDC(u8 a) +// static const TileData4bpp *sub_8043CDC(u8 a) { return gUnknown_08D1216C[a]; + // return &gUnknown_08D1216C[a]; } -void sub_8043CEC(struct Sprite *sprite) +static void sub_8043CEC(struct Sprite *sprite) { u8 r5 = sprite->data[5]; @@ -654,7 +1023,8 @@ void sub_8043F44(u8 a) static void sub_8043FC0(u8 a, u8 b) { u8 str[30]; - void *const *r7; + // void *const *r7; + TileData4bpp *const *r7; u8 *ptr; s32 i; s32 two; @@ -704,7 +1074,7 @@ static void sub_8043FC0(u8 a, u8 b) two = 2; for (i = 0; i < two; i++) - CpuCopy32((void *)(ewram0_9(1) + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32); + CpuCopy32((void *)(ewram0_9(1) + i * 64), r7[i] + gSprites[a].oam.tileNum, 32); } #ifdef NONMATCHING @@ -909,7 +1279,8 @@ static void sub_8044210(u8 a, s16 b, u8 c) { u8 str[0x14]; u8 *ptr; - void *const *r7; + // void *const *r7; + TileData4bpp *const *r7; int r10; int r4; int i; @@ -935,14 +1306,17 @@ static void sub_8044210(u8 a, s16 b, u8 c) sub_8003504(ptr, b, 0xF, 1); if (GetBankSide(r4) == 0) { - CpuCopy32(sub_8043CDC(0x74), OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32, 32); + int r2 = 52; + // CpuCopy32(sub_8043CDC(0x74), OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32, 32); + CpuCopy32(sub_8043CDC(0x74), &OBJ_VRAM0_TEMP[gSprites[a].oam.tileNum + r2], 32); } } r4 = gSprites[a].data[5]; sub_80034D4(ewram0_9(0), str); for (i = 0; i < r10; i++) { - CpuCopy32((void *)(ewram0_9(1) + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20); + // CpuCopy32((void *)(ewram0_9(1) + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 32); + CpuCopy32((void *)(ewram0_9(1) + i * 0x40), r7[i] + gSprites[r4].oam.tileNum, 32); } } @@ -1304,15 +1678,19 @@ void sub_804454C(void) { spriteId = gSprites[gHealthboxIDs[i]].data[5]; - CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); + // CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); + CpuFill32(0, &OBJ_VRAM0_TEMP[gSprites[spriteId].oam.tileNum], 256); sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_HP), 0); sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); } else { + int temp; draw_status_ailment_maybe(gHealthboxIDs[i]); sub_8045A5C(gHealthboxIDs[i], &gPlayerParty[gBattlePartyID[i]], 5); - CpuCopy32(sub_8043CDC(0x75), OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32, 32); + temp = 52; + // CpuCopy32(sub_8043CDC(0x75), OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32, 32); + CpuCopy32(sub_8043CDC(0x75), &OBJ_VRAM0_TEMP[gSprites[gHealthboxIDs[i]].oam.tileNum + temp], 32); } } else @@ -1327,7 +1705,8 @@ void sub_804454C(void) { spriteId = gSprites[gHealthboxIDs[i]].data[5]; - CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); + // CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); + CpuFill32(0, &OBJ_VRAM0_TEMP[gSprites[spriteId].oam.tileNum], 256); sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_HP), 0); sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); } @@ -2269,7 +2648,7 @@ static void sub_8044F70(u8 taskId) } } -void sub_8045030(struct Sprite *sprite) +static void sub_8045030(struct Sprite *sprite) { if (sprite->pos2.x != 0) sprite->pos2.x += sprite->data[0]; @@ -2285,7 +2664,7 @@ static void sub_8045048(struct Sprite *sprite) sprite->data[1] &= 0xF; } -void sub_804507C(struct Sprite *sprite) +static void sub_804507C(struct Sprite *sprite) { u8 r3; u16 r2; @@ -2368,7 +2747,8 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) u8 *ptr; s32 i; s32 _7; - u8 *const *r1; + TileData4bpp *const *r1; + TileData4bpp *tileDataSrc; StringCopy(gDisplayedStringBattle, gUnknown_0820A8B0); GetMonData(pkmn, MON_DATA_NICKNAME, nickname); @@ -2443,42 +2823,44 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) } } + tileDataSrc = (TileData4bpp *) ptr; + for (; i < _7; i++) - CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32); + CpuCopy32(sub_8043CDC(0x2B), tileDataSrc + 2 * i, 32); if (GetBankSide(gSprites[a].data[6]) == 0 && !IsDoubleBattle()) { - r1 = (u8 *const *)gUnknown_0820A8B4; + r1 = gUnknown_0820A8B4; for (i = 0; i < _7; i++) { - u8 *r4 = r1[i]; + TileData4bpp *tileDataDest = r1[i]; - r4 += gSprites[a].oam.tileNum * 32; - CpuCopy32(ptr, r4, 32); - ptr += 32; + tileDataDest += gSprites[a].oam.tileNum; + CpuCopy32(tileDataSrc, tileDataDest, 32); + tileDataSrc++; - r4 += 0x100; - CpuCopy32(ptr, r4, 32); - ptr += 32; + tileDataDest += 8; + CpuCopy32(tileDataSrc, tileDataDest, 32); + tileDataSrc++; } } else { if (GetBankSide(gSprites[a].data[6]) == 0) - r1 = (u8 *const *)gUnknown_0820A904; + r1 = gUnknown_0820A904; else - r1 = (u8 *const *)gUnknown_0820A8DC; + r1 = gUnknown_0820A8DC; for (i = 0; i < _7; i++) { - u8 *r4 = r1[i]; + TileData4bpp *tileDataDest = r1[i]; - r4 += gSprites[a].oam.tileNum * 32; - CpuCopy32(ptr, r4, 32); - ptr += 32; + tileDataDest += gSprites[a].oam.tileNum; + CpuCopy32(tileDataSrc, tileDataDest, 32); + tileDataSrc++; - r4 += 0x100; - CpuCopy32(ptr, r4, 32); - ptr += 32; + tileDataDest += 8; + CpuCopy32(tileDataSrc, tileDataDest, 32); + tileDataSrc++; } } } @@ -2498,11 +2880,14 @@ static void sub_8045458(u8 a, u8 b) u16 species = GetMonData(&gEnemyParty[gBattlePartyID[r4]], MON_DATA_SPECIES); if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0) { + int temp = 8; r4 = gSprites[a].data[5]; if (b != 0) - CpuCopy32(sub_8043CDC(0x46), OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); + // CpuCopy32(sub_8043CDC(0x46), OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); + CpuCopy32(sub_8043CDC(0x46), &OBJ_VRAM0_TEMP[gSprites[r4].oam.tileNum + temp], 32); else - CpuFill32(0, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); + // CpuFill32(0, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); + CpuFill32(0, &OBJ_VRAM0_TEMP[gSprites[r4].oam.tileNum + temp], 32); } } } @@ -2563,10 +2948,12 @@ static void draw_status_ailment_maybe(u8 a) r6 = sub_8043CDC(0x27); for (i = 0; i < 3; i++) - CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32, 32); + // CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32, 32); + CpuCopy32(r6, &OBJ_VRAM0_TEMP[gSprites[a].oam.tileNum + r8 + i], 32); if (!ewram17800[r7].unk0_4) - CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 64); + // CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 64); + CpuCopy32(sub_8043CDC(1), &OBJ_VRAM0_TEMP[gSprites[r10].oam.tileNum], 64); sub_8045458(a, 1); return; @@ -2577,13 +2964,17 @@ static void draw_status_ailment_maybe(u8 a) // I don't like writing the array index like this, but I can't get it to match otherwise. FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2); CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2); - CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32, 96); + // CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32, 96); + CpuCopy32(r6, OBJ_VRAM0_TEMP[gSprites[a].oam.tileNum + r8], 96); if (IsDoubleBattle() == TRUE || GetBankSide(r7) == TRUE) { if (!ewram17800[r7].unk0_4) { - CpuCopy32(sub_8043CDC(0), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 32); - CpuCopy32(sub_8043CDC(0x41), OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32, 32); + // CpuCopy32(sub_8043CDC(0), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 32); + // CpuCopy32(sub_8043CDC(0x41), OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32, 32); + int temp = 1; + CpuCopy32(sub_8043CDC(0), OBJ_VRAM0_TEMP[gSprites[r10].oam.tileNum], 32); + CpuCopy32(sub_8043CDC(0x41), OBJ_VRAM0_TEMP[gSprites[r10].oam.tileNum + temp], 32); } } sub_8045458(a, 0); @@ -2664,11 +3055,13 @@ static void sub_80458B0(u8 a) CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32); for (r7 = 3; r7 < 3 + r8; r7++) { - addr = OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32; + // addr = OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32; + addr = OBJ_VRAM0_TEMP[gSprites[a].oam.tileNum + MACRO1(r7)]; CpuCopy32(r6, addr, 32); r6 += 32; - addr = OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32; + // addr = OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32; + addr = OBJ_VRAM0_TEMP[8 + gSprites[a].oam.tileNum + MACRO1(r7)]; CpuCopy32(r6, addr, 32); r6 += 32; } @@ -2692,7 +3085,8 @@ static void sub_8045998(u8 a) r7 = ewram520_2 + status * 0x180 + 32; for (i = 6; i < 6 + r6; i++) { - CpuCopy32(r7, OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32, 32); + // CpuCopy32(r7, OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32, 32); + CpuCopy32(r7, OBJ_VRAM0_TEMP[gSprites[a].oam.tileNum + 24 + MACRO1(i)], 32); r7 += 64; } } @@ -2816,9 +3210,11 @@ static void sub_8045D58(u8 a, u8 b) { u8 r4 = gSprites[ewram17850[a].unk0].data[5]; if (i < 2) - CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32, 32); + // CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32, 32); + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0_TEMP[gSprites[r4].oam.tileNum + 2 + i], 32); else - CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32, 32); + // CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32, 32); + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0_TEMP[i + gSprites[r4].oam.tileNum + 2], 32); } break; case 1: @@ -2832,9 +3228,11 @@ static void sub_8045D58(u8 a, u8 b) for (i = 0; i < 8; i++) { if (i < 4) - CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32, 32); + // CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32, 32); + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0_TEMP[gSprites[ewram17850[a].unk0].oam.tileNum + 36 + i], 32); else - CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32, 32); + // CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32, 32); + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0_TEMP[i + gSprites[ewram17850[a].unk0].oam.tileNum + 92], 32); } break; } diff --git a/src/engine/sprite.c b/src/engine/sprite.c index cf35e12a3..d13253e19 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -29,7 +29,7 @@ struct SpriteCopyRequest { const u8 *src; - u8 *dest; + u8 *dest; // to TileData4bpp *? u16 size; }; @@ -818,7 +818,8 @@ static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct Spr if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data; - gSpriteCopyRequests[gSpriteCopyRequestCount].dest = OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; + // gSpriteCopyRequests[gSpriteCopyRequestCount].dest = OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; + gSpriteCopyRequests[gSpriteCopyRequestCount].dest = OBJ_VRAM0_TEMP[tileNum]; gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size; gSpriteCopyRequestCount++; } @@ -1465,7 +1466,8 @@ u16 LoadSpriteSheet(const struct SpriteSheet *sheet) else { AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - CpuCopy16(sheet->data, OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + // CpuCopy16(sheet->data, OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + CpuCopy16(sheet->data, &OBJ_VRAM0_TEMP[tileStart], sheet->size); return (u16)tileStart; } } @@ -1503,7 +1505,8 @@ void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet) { const u8 *data = sheet->data; u16 tileStart = GetSpriteTileStartByTag(sheet->tag); - CpuCopy16(data, OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + // CpuCopy16(data, OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + CpuCopy16(data, OBJ_VRAM0_TEMP[tileStart], sheet->size); } void LoadTilesForSpriteSheets(struct SpriteSheet *sheets) @@ -1589,7 +1592,8 @@ void RequestSpriteSheetCopy(const struct SpriteSheet *sheet) { const u8 *data = sheet->data; u16 tileStart = GetSpriteTileStartByTag(sheet->tag); - RequestSpriteCopy(data, OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size); + // RequestSpriteCopy(data, OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size); + RequestSpriteCopy(data, OBJ_VRAM0_TEMP[tileStart], sheet->size); } u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet) diff --git a/src/engine/text.c b/src/engine/text.c index fe18a6d79..5d2abe785 100644 --- a/src/engine/text.c +++ b/src/engine/text.c @@ -552,6 +552,7 @@ const struct WindowTemplate gWindowTemplate_81E6C74 = 30, // width 20, // height OBJ_VRAM0, // tile data + // OBJ_VRAM0_TEMP, // tile data NULL, // tilemap }; @@ -1686,6 +1687,7 @@ const struct WindowTemplate gWindowTemplate_81E725C = 30, // width 20, // height OBJ_VRAM0, // tile data + // OBJ_VRAM0_TEMP, // tile data NULL, // tilemap }; diff --git a/src/pokemon/pokemon_icon.c b/src/pokemon/pokemon_icon.c index b1b462761..9ff4d0dfa 100644 --- a/src/pokemon/pokemon_icon.c +++ b/src/pokemon/pokemon_icon.c @@ -1219,7 +1219,8 @@ u8 UpdateMonIconFrame(struct Sprite *sprite) // because sprite->images is a struct def, it has to be casted to (u8 *) before any // arithmetic can be performed. (u8 *)sprite->images + (sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame), - OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, + // OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, + OBJ_VRAM0_TEMP[sprite->oam.tileNum], sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); { register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 2b5a3c036..c1304cfb9 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -1949,7 +1949,8 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, ); } - DmaCopy32Defvars(3, (void *)0x2000000, (void *)(VRAM + 0x10000 + (sheet * 0x20)), 0x800); + // DmaCopy32Defvars(3, (void *)0x2000000, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800); + DmaCopy32Defvars(3, (void *)0x2000000, (void *) &OBJ_VRAM0_TEMP[sheet], 0x800); if (!isBackpic) sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6); |