Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions include/constants/menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,14 @@
#define STDSTRING_TM_CASE 27
#define STDSTRING_BERRY_POUCH 28

enum
{
PSA_MON_ATTR_TMHM_X_POS,
PSA_MON_ATTR_TMHM_Y_POS,
PSA_MON_ATTR_Y_OFFSET,
PSA_MON_ATTR_ITEM_X_POS,
PSA_MON_ATTR_ITEM_Y_POS,
PSA_MON_ATTR_COUNT
};

#endif //GUARD_CONSTANTS_MENU_H
27 changes: 27 additions & 0 deletions include/constants/pokemon_special_anim.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#ifndef GUARD_CONSTANTS_POKEMON_SPECIAL_ANIM_H
#define GUARD_CONSTANTS_POKEMON_SPECIAL_ANIM_H

enum
{
PSA_TEXT_ITEM_USED,
PSA_TEXT_LEVEL_ELEVATED,
PSA_TEXT_FORGET_1,
PSA_TEXT_FORGET_2_AND,
PSA_TEXT_FORGET_POOF,
PSA_TEXT_FORGET_FORGOT,
PSA_TEXT_FORGET_AND,
PSA_TEXT_MACHINE_SET,
PSA_TEXT_HUH,
PSA_TEXT_LEARNED_MOVE
};

enum
{
PSA_ITEM_ANIM_TYPE_DEFAULT,
PSA_ITEM_ANIM_TYPE_POTION,
PSA_ITEM_ANIM_TYPE_UNUSED1,
PSA_ITEM_ANIM_TYPE_UNUSED2,
PSA_ITEM_ANIM_TYPE_TMHM
};

#endif // GUARD_CONSTANTS_POKEMON_SPECIAL_ANIM_H
4 changes: 2 additions & 2 deletions include/menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 x, u
void Menu_PrintFormatIntlPlayerName(u8 windowId, const u8 * src, u16 x, u16 y);
void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_step, u8 priority);
bool8 IsBlendTaskActive(void);
u8 Menu2_GetMonSpriteAnchorCoord(u16 species, u32 personality, u8 a2);
s8 Menu2_GetMonSpriteAnchorCoordMinusx20(u16 species, u32 personality, u8 a2);
u8 Menu2_GetMonPosAttribute(u16 species, u32 personality, u8 attributeId);
s8 Menu2_GetStarSpritePosAttribute(u16 species, u32 personality, u8 attributeId);

// list_menu
void ListMenu_LoadMonIconPalette(u8 palOffset, u16 speciesId);
Expand Down
13 changes: 0 additions & 13 deletions include/pokemon_special_anim_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,6 @@

#include "pokemon_special_anim.h"

enum
{
PSA_TEXT_ITEM_USED,
PSA_TEXT_LEVEL_ELEVATED,
PSA_TEXT_FORGET_1,
PSA_TEXT_FORGET_2_AND,
PSA_TEXT_FORGET_POOF,
PSA_TEXT_FORGET_FORGOT,
PSA_TEXT_FORGET_AND,
PSA_TEXT_MACHINE_SET,
PSA_TEXT_HUH,
PSA_TEXT_LEARNED_MOVE
};

struct PokemonSpecialAnimScene
{
Expand Down
844 changes: 423 additions & 421 deletions src/menu2.c

Large diffs are not rendered by default.

19 changes: 10 additions & 9 deletions src/pokemon_special_anim.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "pokemon_special_anim_internal.h"
#include "item_use.h"
#include "task.h"
#include "constants/pokemon_special_anim.h"
#include "constants/songs.h"
#include "constants/items.h"

Expand Down Expand Up @@ -86,7 +87,7 @@ static struct PokemonSpecialAnim * AllocPSA(u8 slotId, u16 itemId, MainCallback
ptr->pokemon = *pokemon;
ptr->field_00a4 = 0;
GetMonData(pokemon, MON_DATA_NICKNAME, ptr->nickname);
if (ptr->animType == 4)
if (ptr->animType == PSA_ITEM_ANIM_TYPE_TMHM)
{
moveId = ItemIdToBattleMoveId(itemId);
StringCopy(ptr->nameOfMoveToTeach, gMoveNames[moveId]);
Expand Down Expand Up @@ -122,12 +123,12 @@ static void SetUpUseItemAnim_Normal(struct PokemonSpecialAnim * ptr)
u8 taskId;
switch (ptr->animType)
{
case 0:
case 1:
case 3:
case PSA_ITEM_ANIM_TYPE_DEFAULT:
case PSA_ITEM_ANIM_TYPE_POTION:
case PSA_ITEM_ANIM_TYPE_UNUSED2:
taskId = CreateTask(Task_UseItem_Normal, 0);
break;
case 4:
case PSA_ITEM_ANIM_TYPE_TMHM:
taskId = CreateTask(Task_UseTM_NoForget, 0);
break;
default:
Expand Down Expand Up @@ -602,8 +603,8 @@ static const struct {
u16 itemId;
u16 animType;
} sItemAnimMap[2] = {
{ITEM_RARE_CANDY, 0},
{ITEM_POTION, 1}
{ITEM_RARE_CANDY, PSA_ITEM_ANIM_TYPE_DEFAULT},
{ITEM_POTION, PSA_ITEM_ANIM_TYPE_POTION}
};

static u16 GetAnimTypeByItemId(u16 itemId)
Expand All @@ -618,10 +619,10 @@ static u16 GetAnimTypeByItemId(u16 itemId)

if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08)
{
return 4;
return PSA_ITEM_ANIM_TYPE_TMHM;
}

return 0;
return PSA_ITEM_ANIM_TYPE_DEFAULT;
}

static u8 GetClosenessFromFriendship(u16 friendship)
Expand Down
58 changes: 30 additions & 28 deletions src/pokemon_special_anim_scene.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#include "strings.h"
#include "text_window.h"
#include "trig.h"
#include "constants/menu.h"
#include "constants/pokemon_special_anim.h"
#include "constants/songs.h"

static void LoadBgGfxByAnimType(u16 animType);
Expand Down Expand Up @@ -635,7 +637,7 @@ static void LoadBgGfxByAnimType(u16 animType)
{
CopyToBgTilemapBuffer(3, sBg_Tilemap, 0, 0x000);
DecompressAndCopyTileDataToVram(3, sBg_Gfx, 0, 0x000, 0);
if (animType != 4)
if (animType != PSA_ITEM_ANIM_TYPE_TMHM)
LoadPalette(sBg_Pal, BG_PLTT_ID(0), sizeof(sBg_Pal));
else
LoadPalette(sBg_TmHm_Pal, BG_PLTT_ID(0), sizeof(sBg_TmHm_Pal));
Expand All @@ -647,31 +649,31 @@ void PSA_CreateMonSpriteAtCloseness(u8 closeness)
struct Pokemon * pokemon = PSA_GetPokemon();
u16 species = GetMonData(pokemon, MON_DATA_SPECIES);
u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY);
u8 r1 = Menu2_GetMonSpriteAnchorCoord(species, personality, 2);
void *r6;
void *r9;
void *r4;
u8 yOffset = Menu2_GetMonPosAttribute(species, personality, PSA_MON_ATTR_Y_OFFSET);
void *monPicBuffer;
void *unusedBuffer;
void *monPalBuffer;
u8 spriteId;

if (r1 != 0xFF)
if (yOffset != 0xFF)
{
scene->monSpriteY1 = 0x48;
scene->monSpriteY2 = r1 + 0x30;
scene->monSpriteY1 = 72;
scene->monSpriteY2 = yOffset + 48;
}
else
{
scene->monSpriteY1 = 0x48;
scene->monSpriteY2 = 0x60;
scene->monSpriteY1 = 72;
scene->monSpriteY2 = 96;
}

r6 = Alloc(0x2000);
r9 = Alloc(0x2000);
r4 = Alloc(0x100);
if (r6 != NULL && r9 != NULL && r4 != NULL)
monPicBuffer = Alloc(MON_PIC_SIZE * MAX_MON_PIC_FRAMES);
unusedBuffer = Alloc(0x2000);
monPalBuffer = Alloc(0x100);
if (monPicBuffer != NULL && unusedBuffer != NULL && monPalBuffer != NULL)
{
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], r6, species, personality);
LZ77UnCompWram(GetMonFrontSpritePal(pokemon), r4);
LoadMonSpriteGraphics(r6, r4);
HandleLoadSpecialPokePic(&gMonFrontPicTable[species], monPicBuffer, species, personality);
LZ77UnCompWram(GetMonFrontSpritePal(pokemon), monPalBuffer);
LoadMonSpriteGraphics(monPicBuffer, monPalBuffer);
spriteId = CreateSprite(&sSpriteTemplate_MonSprite, 120, scene->monSpriteY1, 4);
if (spriteId != MAX_SPRITES)
{
Expand All @@ -682,9 +684,9 @@ void PSA_CreateMonSpriteAtCloseness(u8 closeness)
scene->monSprite = NULL;
scene->lastCloseness = closeness;
}
if (r6 != NULL) Free(r6);
if (r9 != NULL) Free(r9);
if (r4 != NULL) Free(r4);
if (monPicBuffer != NULL) Free(monPicBuffer);
if (unusedBuffer != NULL) Free(unusedBuffer);
if (monPalBuffer != NULL) Free(monPalBuffer);
}

#define tState data[0]
Expand Down Expand Up @@ -842,7 +844,7 @@ static void LoadMonSpriteGraphics(u16 *tiles, u16 *palette)
struct SpritePalette spritePalette;

spriteSheet.data = tiles;
spriteSheet.size = 0x800;
spriteSheet.size = MON_PIC_SIZE;
spriteSheet.tag = 0;
spritePalette.data = palette;
spritePalette.tag = 0;
Expand Down Expand Up @@ -1062,10 +1064,10 @@ static void InitItemIconSpriteState(struct PokemonSpecialAnimScene * scene, stru
personality = PSA_GetMonPersonality();
switch (PSA_GetAnimType())
{
case 4:
case PSA_ITEM_ANIM_TYPE_TMHM:
{
x = Menu2_GetMonSpriteAnchorCoord(species, personality, 0);
y = Menu2_GetMonSpriteAnchorCoord(species, personality, 1);
x = Menu2_GetMonPosAttribute(species, personality, PSA_MON_ATTR_TMHM_X_POS);
y = Menu2_GetMonPosAttribute(species, personality, PSA_MON_ATTR_TMHM_Y_POS);
if (x == 0xFF)
x = 0;
if (y == 0xFF)
Expand All @@ -1076,8 +1078,8 @@ static void InitItemIconSpriteState(struct PokemonSpecialAnimScene * scene, stru
}
default:
{
x = Menu2_GetMonSpriteAnchorCoord(species, personality, 3);
y = Menu2_GetMonSpriteAnchorCoord(species, personality, 4);
x = Menu2_GetMonPosAttribute(species, personality, PSA_MON_ATTR_ITEM_X_POS);
y = Menu2_GetMonPosAttribute(species, personality, PSA_MON_ATTR_ITEM_Y_POS);
if (x == 0xFF)
x = 0;
if (y == 0xFF)
Expand Down Expand Up @@ -1200,8 +1202,8 @@ static void CreateStarSprites(struct PokemonSpecialAnimScene * scene)
personality = PSA_GetMonPersonality();
gSprites[spriteId].data[3] = sStarCoordOffsets[i][0] * 8;
gSprites[spriteId].data[4] = sStarCoordOffsets[i][1] * 8;
gSprites[spriteId].x += GetSpriteOffsetByScale(Menu2_GetMonSpriteAnchorCoordMinusx20(species, personality, 0), 3);
gSprites[spriteId].y += GetSpriteOffsetByScale(Menu2_GetMonSpriteAnchorCoordMinusx20(species, personality, 1), 3);
gSprites[spriteId].x += GetSpriteOffsetByScale(Menu2_GetStarSpritePosAttribute(species, personality, PSA_MON_ATTR_TMHM_X_POS), 3);
gSprites[spriteId].y += GetSpriteOffsetByScale(Menu2_GetStarSpritePosAttribute(species, personality, PSA_MON_ATTR_TMHM_Y_POS), 3);
scene->field_0002++;
}
}
Expand Down