mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-09 12:35:23 -05:00
sync pokemon_icon.c
This commit is contained in:
parent
fa53e4f99e
commit
0132879bcd
6
include/constants/pokemon_icon.h
Normal file
6
include/constants/pokemon_icon.h
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef GUARD_CONSTANTS_POKEMON_ICON_H
|
||||
#define GUARD_CONSTANTS_POKEMON_ICON_H
|
||||
|
||||
#define POKE_ICON_BASE_PAL_TAG 56000
|
||||
|
||||
#endif // GUARD_CONSTANTS_POKEMON_ICON_H
|
||||
|
|
@ -64,6 +64,9 @@ extern const u32 gBallGfx_Cherish[];
|
|||
extern const u16 gBallPal_Cherish[];
|
||||
extern const u32 gOpenPokeballGfx[];
|
||||
|
||||
// Pokémon gfx
|
||||
extern const u16 gMonIconPalettes[][16];
|
||||
|
||||
// pokemon gfx
|
||||
extern const u32 gMonFrontPic_Bulbasaur[];
|
||||
extern const u16 gMonPalette_Bulbasaur[];
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ const u8 *GetMonIconTiles(u16 iconSpecies, bool32 extra);
|
|||
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
|
||||
void LoadMonIconPalettes(void);
|
||||
void FreeMonIconPalettes(void);
|
||||
u16 MailSpeciesToIconSpecies(u16);
|
||||
u16 GetIconSpeciesNoPersonality(u16);
|
||||
u8 CreateMonIconNoPersonality(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority);
|
||||
void DestroyMonIcon(struct Sprite *);
|
||||
void FreeAndDestroyMonIconSprite(struct Sprite *);
|
||||
u16 GetUnownLetterByPersonality(u32 personality);
|
||||
void SpriteCB_MonIcon(struct Sprite *);
|
||||
u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority, u32 personality);
|
||||
|
|
@ -26,7 +26,7 @@ void FreeMonIconPalette(u16 iconId);
|
|||
void SetPartyHPBarSprite(struct Sprite *sprite, u8 animNum);
|
||||
u8 GetMonIconPaletteIndexFromSpecies(u16 species);
|
||||
u16 GetIconSpecies(u16 species, u32 personality);
|
||||
void LoadMonIconPalettesAt(u16 offset);
|
||||
void TryLoadAllMonIconPalettesAtOffset(u16 offset);
|
||||
u8 GetValidMonIconPalIndex(u16 species);
|
||||
void SafeLoadMonIconPalette(u16 species);
|
||||
void SafeFreeMonIconPalette(u16 species);
|
||||
|
|
|
|||
|
|
@ -1001,7 +1001,7 @@ static void CleanUpAiInfoWindow(u8 taskId)
|
|||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
if (data->spriteIds.aiIconSpriteIds[i] != 0xFF)
|
||||
DestroyMonIcon(&gSprites[data->spriteIds.aiIconSpriteIds[i]]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[data->spriteIds.aiIconSpriteIds[i]]);
|
||||
}
|
||||
FreeAndDestroyMonPicSprite(data->aiMonSpriteId);
|
||||
ClearWindowTilemap(data->aiMovesWindowId);
|
||||
|
|
@ -1345,7 +1345,7 @@ static void SwitchToDebugViewFromAiParty(u8 taskId)
|
|||
if (data->spriteIds.aiPartyIcons[i] != 0xFF)
|
||||
{
|
||||
DestroySpriteAndFreeResources(&gSprites[gSprites[data->spriteIds.aiPartyIcons[i]].sConditionSpriteId]);
|
||||
DestroyMonIcon(&gSprites[data->spriteIds.aiPartyIcons[i]]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[data->spriteIds.aiPartyIcons[i]]);
|
||||
}
|
||||
}
|
||||
ClearWindowTilemap(data->aiMovesWindowId);
|
||||
|
|
|
|||
|
|
@ -3242,7 +3242,7 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId)
|
|||
StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID);
|
||||
AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL);
|
||||
|
||||
DestroyMonIcon(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
FreeMonIconPalettes();
|
||||
LoadMonIconPalette(gTasks[taskId].tInput);
|
||||
gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0);
|
||||
|
|
@ -3268,7 +3268,7 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId)
|
|||
PlaySE(SE_SELECT);
|
||||
Free(sDebugMonData);
|
||||
FreeMonIconPalettes();
|
||||
DestroyMonIcon(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
DebugAction_DestroyExtraWindow(taskId);
|
||||
}
|
||||
}
|
||||
|
|
@ -3312,7 +3312,7 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId)
|
|||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
FreeMonIconPalettes();
|
||||
DestroyMonIcon(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
if (gTasks[taskId].tIsComplex == FALSE)
|
||||
{
|
||||
PlaySE(MUS_LEVEL_UP);
|
||||
|
|
@ -3342,7 +3342,7 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId)
|
|||
PlaySE(SE_SELECT);
|
||||
Free(sDebugMonData);
|
||||
FreeMonIconPalettes();
|
||||
DestroyMonIcon(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]);
|
||||
DebugAction_DestroyExtraWindow(taskId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1950,3 +1950,12 @@ const u32 gBattleIcons_Gfx1[] = INCBIN_U32("graphics/types/battle_icons1.4bpp.lz
|
|||
const u32 gBattleIcons_Gfx2[] = INCBIN_U32("graphics/types/battle_icons2.4bpp.lz");
|
||||
const u16 gBattleIcons_Pal1[] = INCBIN_U16("graphics/types/battle_icons1.gbapal");
|
||||
const u16 gBattleIcons_Pal2[] = INCBIN_U16("graphics/types/battle_icons2.gbapal");
|
||||
|
||||
const u16 gMonIconPalettes[][16] = {
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal0.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal1.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal2.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal3.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal4.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal5.gbapal")
|
||||
};
|
||||
|
|
|
|||
|
|
@ -590,7 +590,7 @@ static bool8 DoInitMailView(void)
|
|||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
break;
|
||||
case 17:
|
||||
iconId = MailSpeciesToIconSpecies(sMailViewResources->mail->species);
|
||||
iconId = GetIconSpeciesNoPersonality(sMailViewResources->mail->species);
|
||||
switch (sMailViewResources->monIconType)
|
||||
{
|
||||
case MAIL_ICON_BEAD:
|
||||
|
|
@ -720,8 +720,8 @@ static void ShowMailCB_Teardown(void)
|
|||
{
|
||||
case MAIL_ICON_BEAD:
|
||||
case MAIL_ICON_DREAM:
|
||||
FreeMonIconPalette(MailSpeciesToIconSpecies(sMailViewResources->mail->species));
|
||||
DestroyMonIcon(&gSprites[sMailViewResources->monIconSpriteId]);
|
||||
FreeMonIconPalette(GetIconSpeciesNoPersonality(sMailViewResources->mail->species));
|
||||
FreeAndDestroyMonIconSprite(&gSprites[sMailViewResources->monIconSpriteId]);
|
||||
break;
|
||||
}
|
||||
*sMailViewResources = (struct MailViewResources){};
|
||||
|
|
|
|||
|
|
@ -80,19 +80,20 @@ u16 SpeciesToMailSpecies(u16 species, u32 personality)
|
|||
return species;
|
||||
}
|
||||
|
||||
u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *unownLetter)
|
||||
u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer)
|
||||
{
|
||||
u16 result;
|
||||
|
||||
if (mailSpecies >= UNOWN_OFFSET && mailSpecies < (UNOWN_OFFSET + NUM_UNOWN_FORMS))
|
||||
if (mailSpecies >= UNOWN_OFFSET && mailSpecies < UNOWN_OFFSET + NUM_UNOWN_FORMS)
|
||||
{
|
||||
result = SPECIES_UNOWN;
|
||||
*unownLetter = mailSpecies - UNOWN_OFFSET;
|
||||
*buffer = mailSpecies - UNOWN_OFFSET;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = mailSpecies;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -464,7 +464,7 @@ static void CreateCardSprites(void)
|
|||
// Create icon sprite
|
||||
if (sWonderCardData->cardMetadata.iconSpecies != SPECIES_NONE)
|
||||
{
|
||||
sWonderCardData->monIconSpriteId = CreateMonIconNoPersonality(MailSpeciesToIconSpecies(sWonderCardData->cardMetadata.iconSpecies), SpriteCallbackDummy, 220, 20, 0);
|
||||
sWonderCardData->monIconSpriteId = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->cardMetadata.iconSpecies), SpriteCallbackDummy, 220, 20, 0);
|
||||
gSprites[sWonderCardData->monIconSpriteId].oam.priority = 2;
|
||||
}
|
||||
|
||||
|
|
@ -480,7 +480,7 @@ static void CreateCardSprites(void)
|
|||
sWonderCardData->stampSpriteIds[i][0] = CreateSprite(&sSpriteTemplate_StampShadow, 216 - 32 * i, 0x90, 8);
|
||||
if (sWonderCardData->cardMetadata.stampData[0][i] != 0)
|
||||
{
|
||||
sWonderCardData->stampSpriteIds[i][1] = CreateMonIconNoPersonality(MailSpeciesToIconSpecies(sWonderCardData->cardMetadata.stampData[0][i]), SpriteCallbackDummy, 216 - 32 * i, 136, 0);
|
||||
sWonderCardData->stampSpriteIds[i][1] = CreateMonIconNoPersonality(GetIconSpeciesNoPersonality(sWonderCardData->cardMetadata.stampData[0][i]), SpriteCallbackDummy, 216 - 32 * i, 136, 0);
|
||||
gSprites[sWonderCardData->stampSpriteIds[i][1]].oam.priority = 2;
|
||||
}
|
||||
}
|
||||
|
|
@ -493,7 +493,7 @@ static void DestroyCardSprites(void)
|
|||
|
||||
// Destroy icon sprite
|
||||
if (sWonderCardData->monIconSpriteId != SPRITE_NONE)
|
||||
DestroyMonIcon(&gSprites[sWonderCardData->monIconSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->monIconSpriteId]);
|
||||
|
||||
// Destroy stamp sprites
|
||||
if (sWonderCardData->card.maxStamps != 0 && sWonderCardData->card.type == CARD_TYPE_STAMP)
|
||||
|
|
@ -508,7 +508,7 @@ static void DestroyCardSprites(void)
|
|||
#else
|
||||
if (sWonderCardData->stampSpriteIds[i][0] != SPRITE_NONE)
|
||||
#endif
|
||||
DestroyMonIcon(&gSprites[sWonderCardData->stampSpriteIds[i][1]]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->stampSpriteIds[i][1]]);
|
||||
}
|
||||
}
|
||||
FreeSpriteTilesByTag(TAG_STAMP_SHADOW);
|
||||
|
|
|
|||
|
|
@ -7494,7 +7494,7 @@ static void Task_TryItemUseFormChange(u8 taskId)
|
|||
|
||||
if (gTasks[taskId].tAnimWait == 0)
|
||||
{
|
||||
DestroyMonIcon(icon);
|
||||
FreeAndDestroyMonIconSprite(icon);
|
||||
CreatePartyMonIconSpriteParameterized(targetSpecies, GetMonData(mon, MON_DATA_PERSONALITY, NULL), &sPartyMenuBoxes[gPartyMenu.slotId], 1);
|
||||
icon->oam.mosaic = TRUE;
|
||||
icon->data[0] = 10;
|
||||
|
|
@ -7699,7 +7699,7 @@ static void TryItemHoldFormChange(struct Pokemon *mon)
|
|||
{
|
||||
PlayCry_NormalNoDucking(targetSpecies, 0, CRY_VOLUME_RS, CRY_VOLUME_RS);
|
||||
SetMonData(mon, MON_DATA_SPECIES, &targetSpecies);
|
||||
DestroyMonIcon(&gSprites[sPartyMenuBoxes[gPartyMenu.slotId].monSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[sPartyMenuBoxes[gPartyMenu.slotId].monSpriteId]);
|
||||
CreatePartyMonIconSpriteParameterized(targetSpecies, GetMonData(mon, MON_DATA_PERSONALITY, NULL), &sPartyMenuBoxes[gPartyMenu.slotId], 1);
|
||||
CalculateMonStats(mon);
|
||||
UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
|
||||
|
|
|
|||
|
|
@ -1,143 +1,152 @@
|
|||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "mail.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "graphics.h"
|
||||
|
||||
#define POKE_ICON_BASE_PAL_TAG 56000
|
||||
#include "mail.h"
|
||||
#include "palette.h"
|
||||
#include "pokemon_sprite_visualizer.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "sprite.h"
|
||||
#include "data.h"
|
||||
#include "constants/pokemon_icon.h"
|
||||
|
||||
struct MonIconSpriteTemplate
|
||||
{
|
||||
const struct OamData * oam;
|
||||
const struct OamData *oam;
|
||||
const u8 *image;
|
||||
const union AnimCmd *const * anims;
|
||||
const union AffineAnimCmd *const * affineAnims;
|
||||
SpriteCallback callback;
|
||||
const union AnimCmd *const *anims;
|
||||
const union AffineAnimCmd *const *affineAnims;
|
||||
void (*callback)(struct Sprite *);
|
||||
u16 paletteTag;
|
||||
};
|
||||
|
||||
static u8 CreateMonIconSprite(const struct MonIconSpriteTemplate * template, s16 x, s16 y, u8 subpriority);
|
||||
static void DestroyMonIconInternal(struct Sprite *sprite);
|
||||
static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8);
|
||||
static void FreeAndDestroyMonIconSprite_(struct Sprite *sprite);
|
||||
|
||||
const u16 gMonIconPalettes[][16] = {
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal0.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal1.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal2.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal3.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal4.gbapal"),
|
||||
INCBIN_U16("graphics/pokemon/icon_palettes/pal5.gbapal")
|
||||
};
|
||||
|
||||
const struct SpritePalette gMonIconPaletteTable[] = {
|
||||
const struct SpritePalette gMonIconPaletteTable[] =
|
||||
{
|
||||
{ gMonIconPalettes[0], POKE_ICON_BASE_PAL_TAG + 0 },
|
||||
{ gMonIconPalettes[1], POKE_ICON_BASE_PAL_TAG + 1 },
|
||||
{ gMonIconPalettes[2], POKE_ICON_BASE_PAL_TAG + 2 },
|
||||
// The following three point outside the gMonIconPalettes array
|
||||
// and are therefore invalid. Fortunately, they are never used.
|
||||
{ gMonIconPalettes[3], POKE_ICON_BASE_PAL_TAG + 3 },
|
||||
{ gMonIconPalettes[4], POKE_ICON_BASE_PAL_TAG + 4 },
|
||||
{ gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 }
|
||||
{ gMonIconPalettes[5], POKE_ICON_BASE_PAL_TAG + 5 },
|
||||
};
|
||||
|
||||
static const struct OamData sMonIconOamData = {
|
||||
static const struct OamData sMonIconOamData =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
.mosaic = FALSE,
|
||||
.bpp = ST_OAM_4BPP,
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.matrixNum = 0,
|
||||
.x = 0,
|
||||
.size = SPRITE_SIZE(32x32),
|
||||
.tileNum = 0x000,
|
||||
.tileNum = 0,
|
||||
.priority = 1,
|
||||
.paletteNum = 0
|
||||
.paletteNum = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd sMonIconAnim_Fast[] = {
|
||||
ANIMCMD_FRAME(0, 6),
|
||||
ANIMCMD_FRAME(1, 6),
|
||||
ANIMCMD_JUMP(0)
|
||||
// fastest to slowest
|
||||
|
||||
static const union AnimCmd sAnim_0[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 6),
|
||||
ANIMCMD_FRAME(1, 6),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd sMonIconAnim_MediumFast[] = {
|
||||
ANIMCMD_FRAME(0, 8),
|
||||
ANIMCMD_FRAME(1, 8),
|
||||
ANIMCMD_JUMP(0)
|
||||
static const union AnimCmd sAnim_1[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 8),
|
||||
ANIMCMD_FRAME(1, 8),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd sMonIconAnim_MediumSlow[] = {
|
||||
static const union AnimCmd sAnim_2[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 14),
|
||||
ANIMCMD_FRAME(1, 14),
|
||||
ANIMCMD_JUMP(0)
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd sMonIconAnim_Slow[] = {
|
||||
static const union AnimCmd sAnim_3[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 22),
|
||||
ANIMCMD_FRAME(1, 22),
|
||||
ANIMCMD_JUMP(0)
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd sMonIconAnim_Still[] = {
|
||||
static const union AnimCmd sAnim_4[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 29),
|
||||
ANIMCMD_FRAME(0, 29),
|
||||
ANIMCMD_JUMP(0)
|
||||
ANIMCMD_FRAME(0, 29), // frame 0 is repeated
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const sMonIconAnims[] = {
|
||||
sMonIconAnim_Fast,
|
||||
sMonIconAnim_MediumFast,
|
||||
sMonIconAnim_MediumSlow,
|
||||
sMonIconAnim_Slow,
|
||||
sMonIconAnim_Still
|
||||
static const union AnimCmd *const sMonIconAnims[] =
|
||||
{
|
||||
sAnim_0,
|
||||
sAnim_1,
|
||||
sAnim_2,
|
||||
sAnim_3,
|
||||
sAnim_4,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sMonIconAffineAnim_0[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_0[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(0, 0, 0, 10),
|
||||
AFFINEANIMCMD_END
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd sMonIconAffineAnim_1[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_1[] =
|
||||
{
|
||||
AFFINEANIMCMD_FRAME(-2, -2, 0, 122),
|
||||
AFFINEANIMCMD_END
|
||||
AFFINEANIMCMD_END,
|
||||
};
|
||||
|
||||
static const union AffineAnimCmd *const sMonIconAffineAnims[] = {
|
||||
sMonIconAffineAnim_0,
|
||||
sMonIconAffineAnim_1
|
||||
static const union AffineAnimCmd *const sMonIconAffineAnims[] =
|
||||
{
|
||||
sAffineAnim_0,
|
||||
sAffineAnim_1,
|
||||
};
|
||||
|
||||
static const u16 sSpriteImageSizes[][4] = {
|
||||
[ST_OAM_SQUARE] = {
|
||||
[ST_OAM_SIZE_0] = 0x020,
|
||||
[ST_OAM_SIZE_1] = 0x080,
|
||||
[ST_OAM_SIZE_2] = 0x200,
|
||||
[ST_OAM_SIZE_3] = 0x800,
|
||||
static const u16 sSpriteImageSizes[3][4] =
|
||||
{
|
||||
[ST_OAM_SQUARE] =
|
||||
{
|
||||
[SPRITE_SIZE(8x8)] = 8 * 8 / 2,
|
||||
[SPRITE_SIZE(16x16)] = 16 * 16 / 2,
|
||||
[SPRITE_SIZE(32x32)] = 32 * 32 / 2,
|
||||
[SPRITE_SIZE(64x64)] = 64 * 64 / 2,
|
||||
},
|
||||
[ST_OAM_H_RECTANGLE] = {
|
||||
[ST_OAM_SIZE_0] = 0x040,
|
||||
[ST_OAM_SIZE_1] = 0x080,
|
||||
[ST_OAM_SIZE_2] = 0x100,
|
||||
[ST_OAM_SIZE_3] = 0x400,
|
||||
[ST_OAM_H_RECTANGLE] =
|
||||
{
|
||||
[SPRITE_SIZE(16x8)] = 16 * 8 / 2,
|
||||
[SPRITE_SIZE(32x8)] = 32 * 8 / 2,
|
||||
[SPRITE_SIZE(32x16)] = 32 * 16 / 2,
|
||||
[SPRITE_SIZE(64x32)] = 64 * 32 / 2,
|
||||
},
|
||||
[ST_OAM_V_RECTANGLE] = {
|
||||
[ST_OAM_SIZE_0] = 0x040,
|
||||
[ST_OAM_SIZE_1] = 0x080,
|
||||
[ST_OAM_SIZE_2] = 0x100,
|
||||
[ST_OAM_SIZE_3] = 0x400,
|
||||
[ST_OAM_V_RECTANGLE] =
|
||||
{
|
||||
[SPRITE_SIZE(8x16)] = 8 * 16 / 2,
|
||||
[SPRITE_SIZE(8x32)] = 8 * 32 / 2,
|
||||
[SPRITE_SIZE(16x32)] = 16 * 32 / 2,
|
||||
[SPRITE_SIZE(32x64)] = 32 * 64 / 2,
|
||||
},
|
||||
};
|
||||
|
||||
u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority, u32 personality)
|
||||
u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct MonIconSpriteTemplate iconTemplate =
|
||||
{
|
||||
.oam = &sMonIconOamData,
|
||||
.image = GetMonIconPtr(species, personality),
|
||||
.anims = sMonIconAnims,
|
||||
.affineAnims = sMonIconAffineAnims,
|
||||
.callback = callback,
|
||||
.paletteTag = POKE_ICON_BASE_PAL_TAG + gSpeciesInfo[species].iconPalIndex,
|
||||
};
|
||||
{
|
||||
.oam = &sMonIconOamData,
|
||||
.image = GetMonIconPtr(species, personality),
|
||||
.anims = sMonIconAnims,
|
||||
.affineAnims = sMonIconAffineAnims,
|
||||
.callback = callback,
|
||||
.paletteTag = POKE_ICON_BASE_PAL_TAG + gSpeciesInfo[species].iconPalIndex,
|
||||
};
|
||||
species = SanitizeSpeciesId(species);
|
||||
|
||||
if (species > NUM_SPECIES)
|
||||
iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG;
|
||||
|
|
@ -153,7 +162,8 @@ u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subprior
|
|||
return spriteId;
|
||||
}
|
||||
|
||||
u8 CreateMonIconNoPersonality(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority)
|
||||
|
||||
u8 CreateMonIconNoPersonality(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct MonIconSpriteTemplate iconTemplate =
|
||||
|
|
@ -176,26 +186,10 @@ u8 CreateMonIconNoPersonality(u16 species, SpriteCallback callback, s16 x, s16 y
|
|||
|
||||
u16 GetIconSpecies(u16 species, u32 personality)
|
||||
{
|
||||
u16 result;
|
||||
|
||||
species = SanitizeSpeciesId(species);
|
||||
if (species == SPECIES_UNOWN)
|
||||
{
|
||||
u16 letter = GetUnownLetterByPersonality(personality);
|
||||
if (letter == 0)
|
||||
letter = SPECIES_UNOWN;
|
||||
else
|
||||
letter += (SPECIES_UNOWN_B - 1);
|
||||
result = letter;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (species > NUM_SPECIES)
|
||||
result = SPECIES_NONE;
|
||||
else
|
||||
result = species;
|
||||
}
|
||||
|
||||
return result;
|
||||
species = GetUnownSpeciesId(personality);
|
||||
return species;
|
||||
}
|
||||
|
||||
u16 GetUnownLetterByPersonality(u32 personality)
|
||||
|
|
@ -203,47 +197,16 @@ u16 GetUnownLetterByPersonality(u32 personality)
|
|||
if (!personality)
|
||||
return 0;
|
||||
else
|
||||
return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C;
|
||||
return GET_UNOWN_LETTER(personality);
|
||||
}
|
||||
|
||||
u16 MailSpeciesToIconSpecies(u16 species)
|
||||
u16 GetIconSpeciesNoPersonality(u16 species)
|
||||
{
|
||||
u16 value;
|
||||
species = SanitizeSpeciesId(species);
|
||||
|
||||
if (MailSpeciesToSpecies(species, &value) == SPECIES_UNOWN)
|
||||
{
|
||||
if (value == 0)
|
||||
value += SPECIES_UNOWN;
|
||||
else
|
||||
value += (SPECIES_UNOWN_B - 1);
|
||||
return value;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (species > (SPECIES_UNOWN_B - 1))
|
||||
species = SPECIES_NONE;
|
||||
return GetIconSpecies(species, 0);
|
||||
}
|
||||
}
|
||||
|
||||
const u8 *GetMonIconTiles(u16 species, u32 personality)
|
||||
{
|
||||
const u8 *iconSprite;
|
||||
|
||||
if (species > NUM_SPECIES)
|
||||
species = SPECIES_NONE;
|
||||
|
||||
#if P_GENDER_DIFFERENCES
|
||||
if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality))
|
||||
iconSprite = gSpeciesInfo[species].iconSpriteFemale;
|
||||
else
|
||||
#endif
|
||||
if (gSpeciesInfo[species].iconSprite != NULL)
|
||||
iconSprite = gSpeciesInfo[species].iconSprite;
|
||||
else
|
||||
iconSprite = gSpeciesInfo[SPECIES_NONE].iconSprite;
|
||||
|
||||
return iconSprite;
|
||||
if (MailSpeciesToSpecies(species, &species) == SPECIES_UNOWN)
|
||||
return species += SPECIES_UNOWN_B; // TODO
|
||||
return GetIconSpecies(species, 0);
|
||||
}
|
||||
|
||||
const u8 *GetMonIconPtr(u16 species, u32 personality)
|
||||
|
|
@ -251,9 +214,9 @@ const u8 *GetMonIconPtr(u16 species, u32 personality)
|
|||
return GetMonIconTiles(GetIconSpecies(species, personality), personality);
|
||||
}
|
||||
|
||||
void DestroyMonIcon(struct Sprite *sprite)
|
||||
void FreeAndDestroyMonIconSprite(struct Sprite *sprite)
|
||||
{
|
||||
DestroyMonIconInternal(sprite);
|
||||
FreeAndDestroyMonIconSprite_(sprite);
|
||||
}
|
||||
|
||||
void LoadMonIconPalettes(void)
|
||||
|
|
@ -263,20 +226,18 @@ void LoadMonIconPalettes(void)
|
|||
LoadSpritePalette(&gMonIconPaletteTable[i]);
|
||||
}
|
||||
|
||||
// unused
|
||||
void SafeLoadMonIconPalette(u16 species)
|
||||
{
|
||||
u8 palIndex;
|
||||
if (species > NUM_SPECIES)
|
||||
species = SPECIES_NONE;
|
||||
palIndex = gSpeciesInfo[species].iconPalIndex;
|
||||
palIndex = gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex;
|
||||
if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
|
||||
LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
|
||||
}
|
||||
|
||||
void LoadMonIconPalette(u16 species)
|
||||
{
|
||||
u8 palIndex;
|
||||
palIndex = gSpeciesInfo[species].iconPalIndex;
|
||||
u8 palIndex = gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex;
|
||||
if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
|
||||
LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
|
||||
}
|
||||
|
|
@ -302,19 +263,18 @@ void FreeMonIconPalettes(void)
|
|||
FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag);
|
||||
}
|
||||
|
||||
// unused
|
||||
void SafeFreeMonIconPalette(u16 species)
|
||||
{
|
||||
u8 palIndex;
|
||||
if (species > NUM_SPECIES)
|
||||
species = SPECIES_NONE;
|
||||
palIndex = gSpeciesInfo[species].iconPalIndex;
|
||||
palIndex = gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex;
|
||||
FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
|
||||
}
|
||||
|
||||
void FreeMonIconPalette(u16 species)
|
||||
{
|
||||
u8 palIndex;
|
||||
palIndex = gSpeciesInfo[species].iconPalIndex;
|
||||
palIndex = gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex;
|
||||
FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
|
||||
}
|
||||
|
||||
|
|
@ -323,9 +283,29 @@ void SpriteCB_MonIcon(struct Sprite *sprite)
|
|||
UpdateMonIconFrame(sprite);
|
||||
}
|
||||
|
||||
void LoadMonIconPalettesAt(u16 offset)
|
||||
const u8 *GetMonIconTiles(u16 species, u32 personality)
|
||||
{
|
||||
int i;
|
||||
const u8 *iconSprite;
|
||||
|
||||
if (species > NUM_SPECIES)
|
||||
species = SPECIES_NONE;
|
||||
|
||||
#if P_GENDER_DIFFERENCES
|
||||
if (gSpeciesInfo[species].iconSpriteFemale != NULL && IsPersonalityFemale(species, personality))
|
||||
iconSprite = gSpeciesInfo[species].iconSpriteFemale;
|
||||
else
|
||||
#endif
|
||||
if (gSpeciesInfo[species].iconSprite != NULL)
|
||||
iconSprite = gSpeciesInfo[species].iconSprite;
|
||||
else
|
||||
iconSprite = gSpeciesInfo[SPECIES_NONE].iconSprite;
|
||||
|
||||
return iconSprite;
|
||||
}
|
||||
|
||||
void TryLoadAllMonIconPalettesAtOffset(u16 offset)
|
||||
{
|
||||
s32 i;
|
||||
if (offset <= BG_PLTT_ID(16 - ARRAY_COUNT(gMonIconPaletteTable)))
|
||||
{
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gMonIconPaletteTable); i++)
|
||||
|
|
@ -336,23 +316,19 @@ void LoadMonIconPalettesAt(u16 offset)
|
|||
}
|
||||
}
|
||||
|
||||
const u16 *GetValidMonIconPalettePtr(u16 species)
|
||||
{
|
||||
if (species > NUM_SPECIES)
|
||||
species = SPECIES_NONE;
|
||||
return gMonIconPaletteTable[gSpeciesInfo[species].iconPalIndex].data;
|
||||
}
|
||||
|
||||
u8 GetValidMonIconPalIndex(u16 species)
|
||||
{
|
||||
if (species > NUM_SPECIES)
|
||||
species = SPECIES_NONE;
|
||||
return gSpeciesInfo[species].iconPalIndex;
|
||||
return gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex;
|
||||
}
|
||||
|
||||
u8 GetMonIconPaletteIndexFromSpecies(u16 species)
|
||||
{
|
||||
return gSpeciesInfo[species].iconPalIndex;
|
||||
return gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex;
|
||||
}
|
||||
|
||||
const u16 *GetValidMonIconPalettePtr(u16 species)
|
||||
{
|
||||
return gMonIconPaletteTable[gSpeciesInfo[SanitizeSpeciesId(species)].iconPalIndex].data;
|
||||
}
|
||||
|
||||
u8 UpdateMonIconFrame(struct Sprite *sprite)
|
||||
|
|
@ -391,7 +367,7 @@ u8 UpdateMonIconFrame(struct Sprite *sprite)
|
|||
return result;
|
||||
}
|
||||
|
||||
static u8 CreateMonIconSprite(const struct MonIconSpriteTemplate * iconTemplate, s16 x, s16 y, u8 subpriority)
|
||||
static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
|
|
@ -415,7 +391,7 @@ static u8 CreateMonIconSprite(const struct MonIconSpriteTemplate * iconTemplate,
|
|||
return spriteId;
|
||||
}
|
||||
|
||||
static void DestroyMonIconInternal(struct Sprite *sprite)
|
||||
static void FreeAndDestroyMonIconSprite_(struct Sprite *sprite)
|
||||
{
|
||||
struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] };
|
||||
sprite->images = ℑ
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "constants/help_system.h"
|
||||
#include "constants/item_menu.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/pokemon_icon.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
|
||||
|
|
@ -218,7 +219,7 @@ enum {
|
|||
|
||||
enum
|
||||
{
|
||||
PALTAG_MON_ICON_0 = 56000,
|
||||
PALTAG_MON_ICON_0 = POKE_ICON_BASE_PAL_TAG,
|
||||
PALTAG_MON_ICON_1, // Used implicitly in CreateMonIconSprite
|
||||
PALTAG_MON_ICON_2, // Used implicitly in CreateMonIconSprite
|
||||
PALTAG_3, // Unused
|
||||
|
|
@ -7741,7 +7742,7 @@ static bool8 MultiMove_Function_Start(void)
|
|||
{
|
||||
case 0:
|
||||
HideBg(0);
|
||||
LoadMonIconPalettesAt(BG_PLTT_ID(8));
|
||||
TryLoadAllMonIconPalettesAtOffset(BG_PLTT_ID(8));
|
||||
sMultiMove->state++;
|
||||
break;
|
||||
case 1:
|
||||
|
|
|
|||
|
|
@ -4611,7 +4611,7 @@ static void PokeSum_DestroyMonIconSprite(void)
|
|||
u16 species;
|
||||
species = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPECIES_OR_EGG);
|
||||
SafeFreeMonIconPalette(species);
|
||||
DestroyMonIcon(&gSprites[sMonSummaryScreen->monIconSpriteId]);
|
||||
FreeAndDestroyMonIconSprite(&gSprites[sMonSummaryScreen->monIconSpriteId]);
|
||||
}
|
||||
|
||||
static void CreateMoveSelectionCursorObjs(u16 tileTag, u16 palTag)
|
||||
|
|
|
|||
|
|
@ -901,12 +901,12 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard)
|
|||
|
||||
trainerCard->monIconTint = VarGet(VAR_TRAINER_CARD_MON_ICON_TINT_IDX);
|
||||
|
||||
trainerCard->monSpecies[0] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_1));
|
||||
trainerCard->monSpecies[1] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_2));
|
||||
trainerCard->monSpecies[2] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_3));
|
||||
trainerCard->monSpecies[3] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_4));
|
||||
trainerCard->monSpecies[4] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_5));
|
||||
trainerCard->monSpecies[5] = MailSpeciesToIconSpecies(VarGet(VAR_TRAINER_CARD_MON_ICON_6));
|
||||
trainerCard->monSpecies[0] = GetIconSpeciesNoPersonality(VarGet(VAR_TRAINER_CARD_MON_ICON_1));
|
||||
trainerCard->monSpecies[1] = GetIconSpeciesNoPersonality(VarGet(VAR_TRAINER_CARD_MON_ICON_2));
|
||||
trainerCard->monSpecies[2] = GetIconSpeciesNoPersonality(VarGet(VAR_TRAINER_CARD_MON_ICON_3));
|
||||
trainerCard->monSpecies[3] = GetIconSpeciesNoPersonality(VarGet(VAR_TRAINER_CARD_MON_ICON_4));
|
||||
trainerCard->monSpecies[4] = GetIconSpeciesNoPersonality(VarGet(VAR_TRAINER_CARD_MON_ICON_5));
|
||||
trainerCard->monSpecies[5] = GetIconSpeciesNoPersonality(VarGet(VAR_TRAINER_CARD_MON_ICON_6));
|
||||
}
|
||||
|
||||
static void SetDataFromTrainerCard(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user