Document mon markings

This commit is contained in:
GriffinR
2021-02-28 17:22:26 -05:00
committed by huderlem
parent 8bfd1370c9
commit 031da44cab
9 changed files with 240 additions and 227 deletions

Before

Width:  |  Height:  |  Size: 353 B

After

Width:  |  Height:  |  Size: 353 B

+3 -2
View File
@@ -4015,8 +4015,6 @@ extern const u32 gPokenavCondition_Tilemap[];
extern const u16 gPokenavOptions_Tilemap[]; extern const u16 gPokenavOptions_Tilemap[];
extern const u32 gPokenavOptions_Gfx[]; extern const u32 gPokenavOptions_Gfx[];
extern const u16 gPokenavOptions_Pal[]; extern const u16 gPokenavOptions_Pal[];
extern const u8 gPokenavConditionMarker_Gfx[];
extern const u16 gPokenavConditionMarker_Pal[];
extern const u16 gPokenavLeftHeader_Pal[]; extern const u16 gPokenavLeftHeader_Pal[];
extern const u16 gPokenavHeader_Pal[]; extern const u16 gPokenavHeader_Pal[];
extern const u32 gPokenavHeader_Gfx[]; extern const u32 gPokenavHeader_Gfx[];
@@ -5063,4 +5061,7 @@ extern const u8 gMailTilemap_Fab[];
extern const u8 gMailTiles_Retro[]; extern const u8 gMailTiles_Retro[];
extern const u8 gMailTilemap_Retro[]; extern const u8 gMailTilemap_Retro[];
extern const u8 gMonMarkingsMenu_Gfx[];
extern const u16 gMonMarkingsMenu_Pal[];
#endif //GUARD_GRAPHICS_H #endif //GUARD_GRAPHICS_H
+29 -30
View File
@@ -1,37 +1,36 @@
#ifndef POKEEMERALD_MON_MARKINGS_H #ifndef MON_MARKINGS_H
#define POKEEMERALD_MON_MARKINGS_H #define MON_MARKINGS_H
#define NUM_MON_MARKINGS 4 #define NUM_MON_MARKINGS 4
struct PokemonMarkMenu struct PokemonMarkMenu
{ {
/*0x0000*/ u16 baseTileTag; u16 baseTileTag;
/*0x0002*/ u16 basePaletteTag; u16 basePaletteTag;
/*0x0004*/ u8 markings; // bit flags u8 markings; // bit flags
/*0x0005*/ s8 cursorPos; s8 cursorPos;
/*0x0006*/ bool8 markingsArray[NUM_MON_MARKINGS]; bool8 markingsArray[NUM_MON_MARKINGS];
/*0x000A*/ u8 cursorBaseY; u8 cursorBaseY;
/*0x000B*/ bool8 spriteSheetLoadRequired; bool8 spriteSheetLoadRequired;
/*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window struct Sprite *windowSprites[2]; // upper and lower halves of menu window
/*0x0014*/ struct Sprite *menuMarkingSprites[NUM_MON_MARKINGS]; struct Sprite *markingSprites[NUM_MON_MARKINGS];
/*0x0024*/ struct Sprite *unkSprite; struct Sprite *cursorSprite;
/*0x0028*/ struct Sprite *menuTextSprite; struct Sprite *textSprite;
/*0x002C*/ const u8 *frameTiles; const u8 *frameTiles;
/*0x0030*/ const u16 *framePalette; const u16 *framePalette;
/*0x0034*/ u8 menuWindowSpriteTiles[0x1000]; u8 windowSpriteTiles[0x1000];
/*0x1034*/ u8 filler1030[0x80]; u8 unused[0x80];
/*0x10B4*/ u8 tileLoadState; u8 tileLoadState;
}; // 10b8 };
void sub_811F90C(struct PokemonMarkMenu *ptr); void InitMonMarkingsMenu(struct PokemonMarkMenu *ptr);
void sub_811F918(void); void BufferMonMarkingsMenuWindowTiles(void);
bool8 sub_811F960(void); void BufferMonMarkingsMenuTiles(void);
void sub_811FA90(void); void OpenMonMarkingsMenu(u8 markings, s16 x, s16 y);
void sub_811FAA4(u8 markings, s16 x, s16 y); void FreeMonMarkingsMenu(void);
void sub_811FAF8(void); bool8 HandleMonMarkingsMenuInput(void);
bool8 MonMarkingsMenuHandleInput(void); struct Sprite *CreateMonMarkingAllCombosSprite(u16 tileTag, u16 paletteTag, const u16 *palette);
struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette); struct Sprite *CreateMonMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette);
struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette); void UpdateMonMarkingTiles(u8 markings, void *dest);
void sub_8120084(u8 markings, void *dest);
#endif //POKEEMERALD_MON_MARKINGS_H #endif //MON_MARKINGS_H
+2 -2
View File
@@ -1346,8 +1346,8 @@ const u32 gRegionMapCityZoomText_Gfx[] = INCBIN_U32("graphics/pokenav/city_zoom_
const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/condition/cancel.gbapal"); const u16 gPokenavConditionCancel_Pal[] = INCBIN_U16("graphics/pokenav/condition/cancel.gbapal");
const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/condition/cancel.4bpp"); const u8 gPokenavConditionCancel_Gfx[] = INCBIN_U8("graphics/pokenav/condition/cancel.4bpp");
const u16 gPokenavConditionMarker_Pal[] = INCBIN_U16("graphics/pokenav/condition/marker.gbapal"); const u16 gMonMarkingsMenu_Pal[] = INCBIN_U16("graphics/misc/mon_markings_menu.gbapal");
const u8 gPokenavConditionMarker_Gfx[] = INCBIN_U8("graphics/pokenav/condition/marker.4bpp"); const u8 gMonMarkingsMenu_Gfx[] = INCBIN_U8("graphics/misc/mon_markings_menu.4bpp");
const u16 gBerryBlenderMiscPalette[] = INCBIN_U16("graphics/berry_blender/misc.gbapal"); const u16 gBerryBlenderMiscPalette[] = INCBIN_U16("graphics/berry_blender/misc.gbapal");
const u16 gBerryBlenderArrowPalette[] = INCBIN_U16("graphics/berry_blender/arrow.gbapal"); const u16 gBerryBlenderArrowPalette[] = INCBIN_U16("graphics/berry_blender/arrow.gbapal");
+192 -179
View File
@@ -10,20 +10,24 @@
#include "sprite.h" #include "sprite.h"
#include "text_window.h" #include "text_window.h"
#define ANIM_CURSOR (NUM_MON_MARKINGS * 2)
#define ANIM_TEXT (ANIM_CURSOR + 1)
#define SELECTION_OK NUM_MON_MARKINGS
#define SELECTION_CANCEL (SELECTION_OK + 1)
#define MENU_TEXT_SPRITE_X_OFFSET 32 #define MENU_TEXT_SPRITE_X_OFFSET 32
// static functions static void CreateMonMarkingsMenuSprites(s16, s16, u16, u16);
static void sub_811FC80(s16, s16, u16, u16); static void SpriteCB_Dummy(struct Sprite *);
static void TaskDummy7(struct Sprite *); static void SpriteCB_Marking(struct Sprite *);
static void sub_811FF40(struct Sprite *); static void SpriteCB_Cursor(struct Sprite *);
static void sub_811FF7C(struct Sprite *); static struct Sprite *CreateMarkingComboSprite(u16, u16, const u16 *, u16);
static struct Sprite *sub_811FFD4(u16, u16, const u16 *, u16);
// .rodata static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/misc/mon_markings.gbapal");
static const u16 gUnknown_0859E65C[] = INCBIN_U16("graphics/misc/mon_markings.gbapal"); static const u8 sMonMarkings_Gfx[] = INCBIN_U8("graphics/misc/mon_markings.4bpp");
static const u8 gUnknown_0859E67C[] = INCBIN_U8("graphics/misc/mon_markings.4bpp");
static const struct OamData gUnknown_0859EE7C = static const struct OamData sOamData_MenuWindow =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@@ -40,7 +44,8 @@ static const struct OamData gUnknown_0859EE7C =
.affineParam = 0, .affineParam = 0,
}; };
static const struct OamData gUnknown_0859EE84 = // Used for the markings, OK/Cancel text, and cursor sprites
static const struct OamData sOamData_8x8 =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@@ -57,99 +62,99 @@ static const struct OamData gUnknown_0859EE84 =
.affineParam = 0, .affineParam = 0,
}; };
static const union AnimCmd gUnknown_0859EE8C[] = static const union AnimCmd sAnim_Marking_CircleOff[] =
{ {
ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(0, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EE94[] = static const union AnimCmd sAnim_Marking_CircleOn[] =
{ {
ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(1, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EE9C[] = static const union AnimCmd sAnim_Marking_SquareOff[] =
{ {
ANIMCMD_FRAME(2, 5), ANIMCMD_FRAME(2, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EEA4[] = static const union AnimCmd sAnim_Marking_SquareOn[] =
{ {
ANIMCMD_FRAME(3, 5), ANIMCMD_FRAME(3, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EEAC[] = static const union AnimCmd sAnim_Marking_TriangleOff[] =
{ {
ANIMCMD_FRAME(4, 5), ANIMCMD_FRAME(4, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EEB4[] = static const union AnimCmd sAnim_Marking_TriangleOn[] =
{ {
ANIMCMD_FRAME(5, 5), ANIMCMD_FRAME(5, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EEBC[] = static const union AnimCmd sAnim_Marking_HeartOff[] =
{ {
ANIMCMD_FRAME(6, 5), ANIMCMD_FRAME(6, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EEC4[] = static const union AnimCmd sAnim_Marking_HeartOn[] =
{ {
ANIMCMD_FRAME(7, 5), ANIMCMD_FRAME(7, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EECC[] = static const union AnimCmd sAnim_Cursor[] =
{ {
ANIMCMD_FRAME(8, 5), ANIMCMD_FRAME(8, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EED4[] = static const union AnimCmd sAnim_OKCancelText[] =
{ {
ANIMCMD_FRAME(9, 5), ANIMCMD_FRAME(9, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd *const gUnknown_0859EEDC[] = static const union AnimCmd *const sAnims_MenuSprite[] =
{ {
gUnknown_0859EE8C, sAnim_Marking_CircleOff,
gUnknown_0859EE94, sAnim_Marking_CircleOn,
gUnknown_0859EE9C, sAnim_Marking_SquareOff,
gUnknown_0859EEA4, sAnim_Marking_SquareOn,
gUnknown_0859EEAC, sAnim_Marking_TriangleOff,
gUnknown_0859EEB4, sAnim_Marking_TriangleOn,
gUnknown_0859EEBC, sAnim_Marking_HeartOff,
gUnknown_0859EEC4, sAnim_Marking_HeartOn,
gUnknown_0859EECC, [ANIM_CURSOR] = sAnim_Cursor,
gUnknown_0859EED4, [ANIM_TEXT] = sAnim_OKCancelText,
}; };
static const union AnimCmd gUnknown_0859EF04[] = static const union AnimCmd sAnim_MenuWindow_UpperHalf[] =
{ {
ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(0, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF0C[] = static const union AnimCmd sAnim_MenuWindow_LowerHalf[] =
{ {
ANIMCMD_FRAME(64, 5), ANIMCMD_FRAME(64, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd *const gUnknown_0859EF14[] = static const union AnimCmd *const sAnims_MenuWindow[] =
{ {
gUnknown_0859EF04, sAnim_MenuWindow_UpperHalf,
gUnknown_0859EF0C, sAnim_MenuWindow_LowerHalf,
}; };
static const struct OamData gUnknown_0859EF1C = static const struct OamData sOamData_MarkingCombo =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@@ -166,169 +171,166 @@ static const struct OamData gUnknown_0859EF1C =
.affineParam = 0, .affineParam = 0,
}; };
static const union AnimCmd gUnknown_0859EF24[] = static const union AnimCmd sAnim_MarkingCombo_AllOff[] =
{ {
ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(0, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF2C[] = static const union AnimCmd sAnim_MarkingCombo_Circle[] =
{ {
ANIMCMD_FRAME(4, 5), ANIMCMD_FRAME(4, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF34[] = static const union AnimCmd sAnim_MarkingCombo_Square[] =
{ {
ANIMCMD_FRAME(8, 5), ANIMCMD_FRAME(8, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF3C[] = static const union AnimCmd sAnim_MarkingCombo_CircleSquare[] =
{ {
ANIMCMD_FRAME(12, 5), ANIMCMD_FRAME(12, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF44[] = static const union AnimCmd sAnim_MarkingCombo_Triangle[] =
{ {
ANIMCMD_FRAME(16, 5), ANIMCMD_FRAME(16, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF4C[] = static const union AnimCmd sAnim_MarkingCombo_CircleTriangle[] =
{ {
ANIMCMD_FRAME(20, 5), ANIMCMD_FRAME(20, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF54[] = static const union AnimCmd sAnim_MarkingCombo_SquareTriangle[] =
{ {
ANIMCMD_FRAME(24, 5), ANIMCMD_FRAME(24, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF5C[] = static const union AnimCmd sAnim_MarkingCombo_CircleSquareTriangle[] =
{ {
ANIMCMD_FRAME(28, 5), ANIMCMD_FRAME(28, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF64[] = static const union AnimCmd sAnim_MarkingCombo_Heart[] =
{ {
ANIMCMD_FRAME(32, 5), ANIMCMD_FRAME(32, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF6C[] = static const union AnimCmd sAnim_MarkingCombo_CircleHeart[] =
{ {
ANIMCMD_FRAME(36, 5), ANIMCMD_FRAME(36, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF74[] = static const union AnimCmd sAnim_MarkingCombo_SquareHeart[] =
{ {
ANIMCMD_FRAME(40, 5), ANIMCMD_FRAME(40, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF7C[] = static const union AnimCmd sAnim_MarkingCombo_CircleSquareHeart[] =
{ {
ANIMCMD_FRAME(44, 5), ANIMCMD_FRAME(44, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF84[] = static const union AnimCmd sAnim_MarkingCombo_TriangleHeart[] =
{ {
ANIMCMD_FRAME(48, 5), ANIMCMD_FRAME(48, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF8C[] = static const union AnimCmd sAnim_MarkingCombo_CircleTriangleHeart[] =
{ {
ANIMCMD_FRAME(52, 5), ANIMCMD_FRAME(52, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF94[] = static const union AnimCmd sAnim_MarkingCombo_SquareTriangleHeart[] =
{ {
ANIMCMD_FRAME(56, 5), ANIMCMD_FRAME(56, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd gUnknown_0859EF9C[] = static const union AnimCmd sAnim_MarkingCombo_AllOn[] =
{ {
ANIMCMD_FRAME(60, 5), ANIMCMD_FRAME(60, 5),
ANIMCMD_END, ANIMCMD_END,
}; };
static const union AnimCmd *const gUnknown_0859EFA4[] = static const union AnimCmd *const sAnims_MarkingCombo[] =
{ {
gUnknown_0859EF24, sAnim_MarkingCombo_AllOff,
gUnknown_0859EF2C, sAnim_MarkingCombo_Circle,
gUnknown_0859EF34, sAnim_MarkingCombo_Square,
gUnknown_0859EF3C, sAnim_MarkingCombo_CircleSquare,
gUnknown_0859EF44, sAnim_MarkingCombo_Triangle,
gUnknown_0859EF4C, sAnim_MarkingCombo_CircleTriangle,
gUnknown_0859EF54, sAnim_MarkingCombo_SquareTriangle,
gUnknown_0859EF5C, sAnim_MarkingCombo_CircleSquareTriangle,
gUnknown_0859EF64, sAnim_MarkingCombo_Heart,
gUnknown_0859EF6C, sAnim_MarkingCombo_CircleHeart,
gUnknown_0859EF74, sAnim_MarkingCombo_SquareHeart,
gUnknown_0859EF7C, sAnim_MarkingCombo_CircleSquareHeart,
gUnknown_0859EF84, sAnim_MarkingCombo_TriangleHeart,
gUnknown_0859EF8C, sAnim_MarkingCombo_CircleTriangleHeart,
gUnknown_0859EF94, sAnim_MarkingCombo_SquareTriangleHeart,
gUnknown_0859EF9C, sAnim_MarkingCombo_AllOn,
}; };
static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL; static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL;
void sub_811F90C(struct PokemonMarkMenu *ptr) void InitMonMarkingsMenu(struct PokemonMarkMenu *ptr)
{ {
sMenu = ptr; sMenu = ptr;
} }
void sub_811F918(void) static void BufferMenuWindowTiles(void)
{ {
const struct TilesPal *frame = GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType); const struct TilesPal *frame = GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType);
sMenu->frameTiles = frame->tiles; sMenu->frameTiles = frame->tiles;
sMenu->framePalette = frame->pal; sMenu->framePalette = frame->pal;
sMenu->tileLoadState = 0; sMenu->tileLoadState = 0;
CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles)); CpuFill16(0, sMenu->windowSpriteTiles, sizeof(sMenu->windowSpriteTiles));
} }
bool8 sub_811F960(void) static bool8 BufferMenuFrameTiles(void)
{ {
u16 i; u16 i;
u8 *dest = sMenu->menuWindowSpriteTiles + sMenu->tileLoadState * 0x100; u8 *dest = sMenu->windowSpriteTiles + sMenu->tileLoadState * 0x100;
switch (sMenu->tileLoadState) switch (sMenu->tileLoadState)
{ {
case 0: case 0:
CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
{
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
}
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
sMenu->tileLoadState++; sMenu->tileLoadState++;
break; break;
default: default:
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
{
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
}
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
sMenu->tileLoadState++; sMenu->tileLoadState++;
break; break;
case 13: case 13:
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP);
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
{
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
}
CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP); CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
sMenu->tileLoadState++; sMenu->tileLoadState++;
return FALSE; return FALSE;
@@ -339,23 +341,23 @@ bool8 sub_811F960(void)
return TRUE; return TRUE;
} }
void sub_811FA90(void) void BufferMonMarkingsMenuTiles(void)
{ {
sub_811F918(); BufferMenuWindowTiles();
while (sub_811F960()); while (BufferMenuFrameTiles());
} }
void sub_811FAA4(u8 markings, s16 x, s16 y) void OpenMonMarkingsMenu(u8 markings, s16 x, s16 y)
{ {
u16 i; u16 i;
sMenu->cursorPos = 0; sMenu->cursorPos = 0;
sMenu->markings = markings; sMenu->markings = markings;
for (i = 0; i < NUM_MON_MARKINGS; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markingsArray[i] = (sMenu->markings >> i) & 1; sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
sub_811FC80(x, y, sMenu->baseTileTag, sMenu->basePaletteTag); CreateMonMarkingsMenuSprites(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
} }
void sub_811FAF8(void) void FreeMonMarkingsMenu(void)
{ {
u16 i; u16 i;
@@ -364,33 +366,33 @@ void sub_811FAF8(void)
FreeSpriteTilesByTag(sMenu->baseTileTag + i); FreeSpriteTilesByTag(sMenu->baseTileTag + i);
FreeSpritePaletteByTag(sMenu->basePaletteTag + i); FreeSpritePaletteByTag(sMenu->basePaletteTag + i);
} }
for (i = 0; i < 2; i++) for (i = 0; i < ARRAY_COUNT(sMenu->windowSprites); i++)
{ {
if (!sMenu->menuWindowSprites[i]) if (!sMenu->windowSprites[i])
return; return;
DestroySprite(sMenu->menuWindowSprites[i]); DestroySprite(sMenu->windowSprites[i]);
sMenu->menuWindowSprites[i] = NULL; sMenu->windowSprites[i] = NULL;
} }
for (i = 0; i < NUM_MON_MARKINGS; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
{ {
if (!sMenu->menuMarkingSprites[i]) if (!sMenu->markingSprites[i])
return; return;
DestroySprite(sMenu->menuMarkingSprites[i]); DestroySprite(sMenu->markingSprites[i]);
sMenu->menuMarkingSprites[i] = NULL; sMenu->markingSprites[i] = NULL;
} }
if (sMenu->unkSprite) if (sMenu->cursorSprite)
{ {
DestroySprite(sMenu->unkSprite); DestroySprite(sMenu->cursorSprite);
sMenu->unkSprite = NULL; sMenu->cursorSprite = NULL;
} }
if (sMenu->menuTextSprite) if (sMenu->textSprite)
{ {
DestroySprite(sMenu->menuTextSprite); DestroySprite(sMenu->textSprite);
sMenu->menuTextSprite = NULL; sMenu->textSprite = NULL;
} }
} }
bool8 MonMarkingsMenuHandleInput(void) bool8 HandleMonMarkingsMenuInput(void)
{ {
u16 i; u16 i;
@@ -400,7 +402,7 @@ bool8 MonMarkingsMenuHandleInput(void)
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
pos = --sMenu->cursorPos; pos = --sMenu->cursorPos;
if (pos < 0) if (pos < 0)
sMenu->cursorPos = 5; sMenu->cursorPos = SELECTION_CANCEL;
return TRUE; return TRUE;
} }
@@ -409,7 +411,7 @@ bool8 MonMarkingsMenuHandleInput(void)
s8 pos; s8 pos;
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
pos = ++sMenu->cursorPos; pos = ++sMenu->cursorPos;
if (pos > 5) if (pos > SELECTION_CANCEL)
sMenu->cursorPos = 0; sMenu->cursorPos = 0;
return TRUE; return TRUE;
} }
@@ -420,12 +422,12 @@ bool8 MonMarkingsMenuHandleInput(void)
switch (sMenu->cursorPos) switch (sMenu->cursorPos)
{ {
case 4: case SELECTION_OK:
sMenu->markings = 0; sMenu->markings = 0;
for (i = 0; i < NUM_MON_MARKINGS; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markings |= sMenu->markingsArray[i] << i; sMenu->markings |= sMenu->markingsArray[i] << i;
return FALSE; return FALSE;
case 5: case SELECTION_CANCEL:
return FALSE; return FALSE;
} }
@@ -442,170 +444,181 @@ bool8 MonMarkingsMenuHandleInput(void)
return TRUE; return TRUE;
} }
static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag) #define sMarkingId data[0]
#define sCursorYOffset data[0]
static void CreateMonMarkingsMenuSprites(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
{ {
u16 i; u16 i;
u8 spriteId; u8 spriteId;
struct SpriteSheet sheets[] = struct SpriteSheet sheets[] =
{ {
{ sMenu->menuWindowSpriteTiles, 0x1000, baseTileTag }, { sMenu->windowSpriteTiles, 0x1000, baseTileTag },
{ gPokenavConditionMarker_Gfx, 0x320, baseTileTag + 1 }, { gMonMarkingsMenu_Gfx, 0x320, baseTileTag + 1 },
{ NULL, 0 } {}
}; };
struct SpritePalette palettes[] = struct SpritePalette palettes[] =
{ {
{ sMenu->framePalette, basePaletteTag }, { sMenu->framePalette, basePaletteTag },
{ gPokenavConditionMarker_Pal, basePaletteTag + 1}, { gMonMarkingsMenu_Pal, basePaletteTag + 1},
{ NULL, 0 } {}
}; };
struct SpriteTemplate sprTemplate = struct SpriteTemplate template =
{ {
baseTileTag, .tileTag = baseTileTag,
basePaletteTag, .paletteTag = basePaletteTag,
&gUnknown_0859EE7C, .oam = &sOamData_MenuWindow,
gUnknown_0859EF14, .anims = sAnims_MenuWindow,
NULL, .images = NULL,
gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
TaskDummy7, .callback = SpriteCB_Dummy,
}; };
LoadSpriteSheets(sheets); LoadSpriteSheets(sheets);
LoadSpritePalettes(palettes); LoadSpritePalettes(palettes);
for (i = 0; i < 2; i++) // Create window sprites
for (i = 0; i < ARRAY_COUNT(sMenu->windowSprites); i++)
{ {
spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 1); spriteId = CreateSprite(&template, x + 32, y + 32, 1);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->menuWindowSprites[i] = &gSprites[spriteId]; sMenu->windowSprites[i] = &gSprites[spriteId];
StartSpriteAnim(&gSprites[spriteId], i); StartSpriteAnim(&gSprites[spriteId], i);
} }
else else
{ {
sMenu->menuWindowSprites[i] = NULL; sMenu->windowSprites[i] = NULL;
return; return;
} }
} }
sMenu->windowSprites[1]->pos1.y = y + 96;
sMenu->menuWindowSprites[1]->pos1.y = y + 96;
sprTemplate.tileTag++;
sprTemplate.paletteTag++;
sprTemplate.anims = gUnknown_0859EEDC;
sprTemplate.callback = sub_811FF40;
sprTemplate.oam = &gUnknown_0859EE84;
// Create marking sprites
template.tileTag++;
template.paletteTag++;
template.anims = sAnims_MenuSprite;
template.callback = SpriteCB_Marking;
template.oam = &sOamData_8x8;
for (i = 0; i < NUM_MON_MARKINGS; i++) for (i = 0; i < NUM_MON_MARKINGS; i++)
{ {
spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0); spriteId = CreateSprite(&template, x + 32, y + 16 + 16 * i, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->menuMarkingSprites[i] = &gSprites[spriteId]; sMenu->markingSprites[i] = &gSprites[spriteId];
gSprites[spriteId].data[0] = i; gSprites[spriteId].sMarkingId = i;
} }
else else
{ {
sMenu->menuMarkingSprites[i] = NULL; sMenu->markingSprites[i] = NULL;
return; return;
} }
} }
sprTemplate.callback = SpriteCallbackDummy; // Create OK/Cancel text sprite
template.callback = SpriteCallbackDummy;
spriteId = CreateSprite(&sprTemplate, 0, 0, 0); spriteId = CreateSprite(&template, 0, 0, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->menuTextSprite = &gSprites[spriteId]; sMenu->textSprite = &gSprites[spriteId];
sMenu->menuTextSprite->oam.shape = SPRITE_SHAPE(32x32); sMenu->textSprite->oam.shape = SPRITE_SHAPE(32x32);
sMenu->menuTextSprite->oam.size = SPRITE_SIZE(32x32); sMenu->textSprite->oam.size = SPRITE_SIZE(32x32);
StartSpriteAnim(sMenu->menuTextSprite, 9); StartSpriteAnim(sMenu->textSprite, ANIM_TEXT);
sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET; sMenu->textSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET;
sMenu->menuTextSprite->pos1.y = y + 80; sMenu->textSprite->pos1.y = y + 80;
CalcCenterToCornerVec(sMenu->menuTextSprite, SPRITE_SHAPE(32x16), SPRITE_SIZE(32x16), ST_OAM_AFFINE_OFF); CalcCenterToCornerVec(sMenu->textSprite, SPRITE_SHAPE(32x16), SPRITE_SIZE(32x16), ST_OAM_AFFINE_OFF);
} }
else else
{ {
sMenu->menuTextSprite = NULL; sMenu->textSprite = NULL;
} }
sprTemplate.callback = sub_811FF7C; // Create cursor sprite
spriteId = CreateSprite(&sprTemplate, x + 12, 0, 0); template.callback = SpriteCB_Cursor;
spriteId = CreateSprite(&template, x + 12, 0, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
sMenu->unkSprite = &gSprites[spriteId]; sMenu->cursorSprite = &gSprites[spriteId];
sMenu->unkSprite->data[0] = y + 16; sMenu->cursorSprite->sCursorYOffset = y + 16;
StartSpriteAnim(sMenu->unkSprite, 8); StartSpriteAnim(sMenu->cursorSprite, ANIM_CURSOR);
} }
else else
{ {
sMenu->unkSprite = NULL; sMenu->cursorSprite = NULL;
} }
} }
static void TaskDummy7(struct Sprite *sprite) static void SpriteCB_Dummy(struct Sprite *sprite)
{ {
} }
static void sub_811FF40(struct Sprite *sprite) static void SpriteCB_Marking(struct Sprite *sprite)
{ {
if (sMenu->markingsArray[sprite->data[0]]) if (sMenu->markingsArray[sprite->sMarkingId])
StartSpriteAnim(sprite, 2 * sprite->data[0] + 1); StartSpriteAnim(sprite, 2 * sprite->sMarkingId + 1); // Set marking 'on'
else else
StartSpriteAnim(sprite, 2 * sprite->data[0]); StartSpriteAnim(sprite, 2 * sprite->sMarkingId); // Set marking 'off'
} }
static void sub_811FF7C(struct Sprite *sprite) #undef sMarkingId
static void SpriteCB_Cursor(struct Sprite *sprite)
{ {
sprite->pos1.y = (16 * sMenu->cursorPos) + sprite->data[0]; sprite->pos1.y = (16 * sMenu->cursorPos) + sprite->sCursorYOffset;
} }
struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette) #undef sCursorYOffset
// Creates a mon marking combination sprite with a spritesheet that holds every possible combination, used by the summary screen / Pokénav
struct Sprite *CreateMonMarkingAllCombosSprite(u16 tileTag, u16 paletteTag, const u16 *palette)
{ {
if (!palette) if (!palette)
palette = gUnknown_0859E65C; palette = sMonMarkings_Pal;
return sub_811FFD4(tileTag, paletteTag, palette, 16); return CreateMarkingComboSprite(tileTag, paletteTag, palette, 1 << NUM_MON_MARKINGS);
} }
struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette) // Creates a mon marking combination sprite with a spritesheet that holds only one combination, used for the currently selected PC mon
struct Sprite *CreateMonMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette)
{ {
if (!palette) if (!palette)
palette = gUnknown_0859E65C; palette = sMonMarkings_Pal;
return sub_811FFD4(tileTag, paletteTag, palette, 1); return CreateMarkingComboSprite(tileTag, paletteTag, palette, 1);
} }
static struct Sprite *sub_811FFD4(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size) static struct Sprite *CreateMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size)
{ {
u8 spriteId; u8 spriteId;
struct SpriteTemplate sprTemplate; struct SpriteTemplate template;
struct SpriteSheet sheet = { gUnknown_0859E67C, 0x80, tileTag }; struct SpriteSheet sheet = { sMonMarkings_Gfx, 0x80, tileTag };
struct SpritePalette sprPalette = { palette, paletteTag }; struct SpritePalette sprPalette = { palette, paletteTag };
sprTemplate.tileTag = tileTag; template.tileTag = tileTag;
sprTemplate.paletteTag = paletteTag; template.paletteTag = paletteTag;
sprTemplate.oam = &gUnknown_0859EF1C; template.oam = &sOamData_MarkingCombo;
sprTemplate.anims = gUnknown_0859EFA4; template.anims = sAnims_MarkingCombo;
sprTemplate.images = NULL; template.images = NULL;
sprTemplate.affineAnims = gDummySpriteAffineAnimTable; template.affineAnims = gDummySpriteAffineAnimTable;
sprTemplate.callback = TaskDummy7; template.callback = SpriteCB_Dummy;
sheet.size = size * 0x80; sheet.size = size * 0x80;
LoadSpriteSheet(&sheet); LoadSpriteSheet(&sheet);
LoadSpritePalette(&sprPalette); LoadSpritePalette(&sprPalette);
spriteId = CreateSprite(&sprTemplate, 0, 0, 0); spriteId = CreateSprite(&template, 0, 0, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
return &gSprites[spriteId]; return &gSprites[spriteId];
else else
return NULL; return NULL;
} }
void sub_8120084(u8 markings, void *dest) // Update what combination is shown, used for sprites created with CreateMonMarkingComboSprite
void UpdateMonMarkingTiles(u8 markings, void *dest)
{ {
RequestDma3Copy(gUnknown_0859E67C + markings * 0x80, dest, 0x80, 0x10); RequestDma3Copy(&sMonMarkings_Gfx[markings * 0x80], dest, 0x80, 0x10);
} }
+7 -7
View File
@@ -2323,8 +2323,8 @@ static void Cb_InitPSS(u8 taskId)
{ {
sPSSData->markMenu.baseTileTag = TAG_TILE_D; sPSSData->markMenu.baseTileTag = TAG_TILE_D;
sPSSData->markMenu.basePaletteTag = TAG_PAL_DACE; sPSSData->markMenu.basePaletteTag = TAG_PAL_DACE;
sub_811F90C(&sPSSData->markMenu); InitMonMarkingsMenu(&sPSSData->markMenu);
sub_811FA90(); BufferMonMarkingsMenuTiles();
} }
else else
{ {
@@ -3179,13 +3179,13 @@ static void Cb_ShowMarkMenu(u8 taskId)
case 0: case 0:
PrintStorageActionText(PC_TEXT_MARK_POKE); PrintStorageActionText(PC_TEXT_MARK_POKE);
sPSSData->markMenu.markings = sPSSData->cursorMonMarkings; sPSSData->markMenu.markings = sPSSData->cursorMonMarkings;
sub_811FAA4(sPSSData->cursorMonMarkings, 0xb0, 0x10); OpenMonMarkingsMenu(sPSSData->cursorMonMarkings, 0xb0, 0x10);
sPSSData->state++; sPSSData->state++;
break; break;
case 1: case 1:
if (!MonMarkingsMenuHandleInput()) if (!HandleMonMarkingsMenuInput())
{ {
sub_811FAF8(); FreeMonMarkingsMenu();
ClearBottomWindow(); ClearBottomWindow();
SetMonMarkings(sPSSData->markMenu.markings); SetMonMarkings(sPSSData->markMenu.markings);
RefreshCursorMonData(); RefreshCursorMonData();
@@ -3983,7 +3983,7 @@ static void sub_80CA0D8(void)
static void sub_80CA154(void) static void sub_80CA154(void)
{ {
sPSSData->field_D94 = sub_811FFB4(TAG_TILE_10, TAG_PAL_DAC8, NULL); sPSSData->field_D94 = CreateMonMarkingComboSprite(TAG_TILE_10, TAG_PAL_DAC8, NULL);
sPSSData->field_D94->oam.priority = 1; sPSSData->field_D94->oam.priority = 1;
sPSSData->field_D94->subpriority = 1; sPSSData->field_D94->subpriority = 1;
sPSSData->field_D94->pos1.x = 40; sPSSData->field_D94->pos1.x = 40;
@@ -4126,7 +4126,7 @@ static void PrintCursorMonInfo(void)
CopyWindowToVram(0, 2); CopyWindowToVram(0, 2);
if (sPSSData->cursorMonSpecies != SPECIES_NONE) if (sPSSData->cursorMonSpecies != SPECIES_NONE)
{ {
sub_8120084(sPSSData->cursorMonMarkings, sPSSData->field_DA0); UpdateMonMarkingTiles(sPSSData->cursorMonMarkings, sPSSData->field_DA0);
sPSSData->field_D94->invisible = FALSE; sPSSData->field_D94->invisible = FALSE;
} }
else else
+1 -1
View File
@@ -3976,7 +3976,7 @@ static void StopPokemonAnimations(void) // A subtle effect, this function stops
static void CreateMonMarkingsSprite(struct Pokemon *mon) static void CreateMonMarkingsSprite(struct Pokemon *mon)
{ {
struct Sprite *sprite = CreateMonMarkingsSpriteWithPal(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette); struct Sprite *sprite = CreateMonMarkingAllCombosSprite(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette);
sMonSummaryScreen->markingsSprite = sprite; sMonSummaryScreen->markingsSprite = sprite;
if (sprite != NULL) if (sprite != NULL)
+1 -1
View File
@@ -123,7 +123,7 @@ u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr)
u8 markings; u8 markings;
u32 ret = PARTY_CONDITION_FUNC_NONE, boxId, monId; u32 ret = PARTY_CONDITION_FUNC_NONE, boxId, monId;
if (!MonMarkingsMenuHandleInput()) if (!HandleMonMarkingsMenuInput())
{ {
structPtr->monMarks[structPtr->mark] = GetMonMarkingsData(); structPtr->monMarks[structPtr->mark] = GetMonMarkingsData();
monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST);
+5 -5
View File
@@ -514,7 +514,7 @@ u32 LoopedTask_OpenMonMarkingsWindow(s32 state)
switch (state) switch (state)
{ {
case 0: case 0:
sub_811FAA4(TryGetMonMarkId(), 176, 32); OpenMonMarkingsMenu(TryGetMonMarkId(), 176, 32);
return LT_INC_AND_CONTINUE; return LT_INC_AND_CONTINUE;
case 1: case 1:
PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); PrintHelpBarText(HELPBAR_CONDITION_MARKINGS);
@@ -533,7 +533,7 @@ u32 LoopedTask_CloseMonMarkingsWindow(s32 state)
switch (state) switch (state)
{ {
case 0: case 0:
sub_811FAF8(); FreeMonMarkingsMenu();
return LT_INC_AND_CONTINUE; return LT_INC_AND_CONTINUE;
case 1: case 1:
PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS);
@@ -668,9 +668,9 @@ void CreateMonMarkingsOrPokeballIndicators(void)
{ {
structPtr->monMarks.baseTileTag = 0x6A; structPtr->monMarks.baseTileTag = 0x6A;
structPtr->monMarks.basePaletteTag = 0x6A; structPtr->monMarks.basePaletteTag = 0x6A;
sub_811F90C(&structPtr->monMarks); InitMonMarkingsMenu(&structPtr->monMarks);
sub_811FA90(); BufferMonMarkingsMenuTiles();
sprite = CreateMonMarkingsSpriteWithPal(0x69, 0x69, sConditionGraphMonMarkingsPal); sprite = CreateMonMarkingAllCombosSprite(0x69, 0x69, sConditionGraphMonMarkingsPal);
sprite->oam.priority = 3; sprite->oam.priority = 3;
sprite->pos1.x = 192; sprite->pos1.x = 192;
sprite->pos1.y = 32; sprite->pos1.y = 32;