Decomp learn_move and start documentation

This commit is contained in:
PikalaxALT
2019-11-09 22:06:56 -05:00
parent 205a339526
commit 89b1087c37
11 changed files with 873 additions and 1981 deletions
-1954
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -67,4 +67,4 @@ gUnknown_83FF65C:: @ 83FF65C
.incbin "baserom.gba", 0x3FF65C, 0x14C
gUnknown_83FF7A8:: @ 83FF7A8
.incbin "baserom.gba", 0x3FF7A8, 0x24C
.incbin "baserom.gba", 0x3FF7A8, 0x30
-21
View File
@@ -5,24 +5,3 @@
.include "constants/constants.inc"
.section .rodata
.align 2
gUnknown_83FF9F4:: @ 83FF9F4
.incbin "baserom.gba", 0x3FF9F4, 0x8
gUnknown_83FF9FC:: @ 83FF9FC
.incbin "baserom.gba", 0x3FF9FC, 0x28
gUnknown_83FFA24:: @ 83FFA24
.incbin "baserom.gba", 0x3FFA24, 0x18
gUnknown_83FFA3C:: @ 83FFA3C
.incbin "baserom.gba", 0x3FFA3C, 0x8
gUnknown_83FFA44:: @ 83FFA44
.incbin "baserom.gba", 0x3FFA44, 0x48
gUnknown_83FFA8C:: @ 83FFA8C
.incbin "baserom.gba", 0x3FFA8C, 0x8
gUnknown_83FFA94:: @ 83FFA94
.incbin "baserom.gba", 0x3FFA94, 0x30
Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

+6
View File
@@ -4226,7 +4226,13 @@ extern const u16 gTradeMenuMonBox_Tilemap[];
extern const u16 gUnknown_8E9CBBC[];
extern const u16 gUnknown_8E9CB9C[];
// hall_of_fame
extern const u32 gFile_graphics_misc_confetti_sheet[];
extern const u32 gFile_graphics_misc_confetti_palette[];
// learn_move
extern const u16 gUnknown_8E97DDC[];
extern const u32 gUnknown_8E97DFC[];
extern const u32 gUnknown_8E97EC4[];
#endif //GUARD_GRAPHICS_H
+11
View File
@@ -724,4 +724,15 @@ extern const u8 gText_IDNumber[];
extern const u8 gText_Name[];
extern const u8 gText_MainMenuTime[];
// learn_move
extern const u8 gUnknown_841E3E3[];
extern const u8 gUnknown_841E405[];
extern const u8 gUnknown_841E414[];
extern const u8 gUnknown_841E481[];
extern const u8 gUnknown_841E493[];
extern const u8 gUnknown_841E4C0[];
extern const u8 gUnknown_841E50C[];
extern const u8 gUnknown_841E3FB[];
extern const u8 gUnknown_841E4E2[];
#endif //GUARD_STRINGS_H
+2 -2
View File
@@ -206,7 +206,7 @@ SECTIONS {
src/battle_controller_safari.o(.text);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_effects_3.o(.text);
asm/learn_move.o(.text);
src/learn_move.o(.text);
src/fldeff_softboiled.o(.text);
src/battle_tower.o(.text);
src/battle_controller_oak_old_man.o(.text);
@@ -478,7 +478,7 @@ SECTIONS {
data/field_effect_helpers.o(.rodata);
src/battle_controller_safari.o(.rodata);
data/battle_anim_effects_3.o(.rodata);
data/learn_move.o(.rodata);
src/learn_move.o(.rodata);
src/battle_tower.o(.rodata);
src/battle_controller_oak_old_man.o(.rodata);
src/player_pc.o(.rodata);
+8
View File
@@ -43,6 +43,14 @@ static u16 GetCurrentBattleTowerWinStreak(u8 levelType);
static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer);
static void PrintEReaderTrainerFarewellMessage(void);
const u8 unref_83FFAAC[] = {
0x05, 0x04, 0x01, 0x10, 0x04, 0x02, 0x05, 0x06,
0x03, 0x10, 0x06, 0x04, 0x00, 0x01, 0x02, 0x03,
0x00, 0x02, 0x03
};
const u8 unref_83FFABF[] = _("100");
#include "data/battle_tower/trainers.h"
static const u16 sBattleTowerHeldItems[] = {
+843
View File
@@ -0,0 +1,843 @@
#include "global.h"
#include "bg.h"
#include "malloc.h"
#include "gpu_regs.h"
#include "palette.h"
#include "script.h"
#include "task.h"
#include "data.h"
#include "trig.h"
#include "window.h"
#include "field_fadetransition.h"
#include "overworld.h"
#include "new_menu_helpers.h"
#include "menu.h"
#include "list_menu.h"
#include "event_data.h"
#include "text_window.h"
#include "string_util.h"
#include "pokemon_summary_screen.h"
#include "graphics.h"
#include "sound.h"
#include "strings.h"
#include "constants/songs.h"
#include "constants/moves.h"
struct LearnMoveGfxResources
{
u8 state;
u8 unk_01;
u8 unk_02;
u8 spriteIds[2];
u8 filler_05[0x13];
u8 unk_18;
u8 scrollPositionMaybe;
u8 numLearnableMoves;
u8 unk_1B;
u8 unk_1C;
u8 unk_1D;
u8 unk_1E;
struct ListMenuItem listMenuItems[25];
u16 learnableMoves[25];
u8 listMenuStrbufs[25][13];
bool8 scheduleMoveInfoUpdate;
u8 selectedPartyMember;
u8 selectedMoveSlot;
u8 unk_262;
u8 listMenuTaskId;
u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; // 264
u8 textColor[3]; // A64
u8 selectedIndex;
u16 listMenuScrollPos;
u16 listMenuScrollRow;
};
static EWRAM_DATA struct LearnMoveGfxResources * sMoveRelearner = NULL;
static void sub_80E4660(u8 taskId);
static void CB2_SelectMonToRelearnMove(void);
static void CB2_MoveRelearner(void);
static void MoveRelearnerStateMachine(void);
static void DrawTextBorderOnWindows6and7(void);
static void PrintTeachWhichMoveToStrVar1(bool8 onInit);
static void InitMoveRelearnerStateVariables(void);
static void sub_80E4FAC(struct Sprite * sprite);
static void sub_80E5004(void);
static void sub_80E50CC(void);
static void sub_80E5204(void);
static void sub_80E5300(void);
static void LoadMoveInfoUI(void);
static void PrintMoveInfoHandleCancel_CopyToVram(void);
static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list);
static s8 YesNoMenuProcessInput(void);
static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx);
static const u16 gUnknown_83FF7D8[] = INCBIN_U16("graphics/learn_move/interface_sprites.gbapal");
static const u16 gUnknown_83FF7F8[] = INCBIN_U16("graphics/learn_move/interface_sprites.4bpp");
static const u8 gMoveTutorMenuWindowFrameDimensions[][4] =
{
{ 0, 0, 19, 13},
{20, 0, 29, 13},
{ 2, 14, 27, 19}
};
static const u8 gUnknown_83FF984[] = _("たたかうわざ");
static const u8 gUnknown_83FF98B[] = _("タイプ/");
static const u8 gUnknown_83FF990[] = _("PP/");
static const u8 gUnknown_83FF994[] = _("いりょく/");
static const u8 gUnknown_83FF99A[] = _("めいちゅう/");
struct MoveTutorMoveInfoHeaders
{
const u8 *text;
u8 left;
u8 right;
u8 index; // unused
};
static const struct MoveTutorMoveInfoHeaders gMoveTutorMoveInfoHeaders[][5] =
{
{
{gUnknown_83FF984, 7, 1, 0},
{gUnknown_83FF98B, 1, 4, 1},
{gUnknown_83FF994, 11, 4, 2},
{gUnknown_83FF990, 2, 6, 3},
{gUnknown_83FF99A, 10, 6, 4},
},
{
{NULL, 0, 0, 0},
{NULL, 0, 0, 0},
{NULL, 0, 0, 0},
{NULL, 0, 0, 0},
{NULL, 0, 0, 0},
},
};
static const struct SpriteSheet gUnknown_83FF9F4 = {
gUnknown_83FF7F8, 0x180, 5525
};
static const struct SpritePalette gUnknown_83FF9FC = {
gUnknown_83FF7D8, 5526
};
static const struct OamData gOamData_83FFA04 = {
.shape = SPRITE_SHAPE(16x8),
.size = SPRITE_SIZE(16x8)
};
static const union AnimCmd gAnimCmd_83FFA0C[] = {
ANIMCMD_FRAME(4, 5),
ANIMCMD_END
};
static const union AnimCmd gAnimCmd_83FFA14[] = {
ANIMCMD_FRAME(6, 5),
ANIMCMD_END
};
static const union AnimCmd *const gSpriteAnimTable_83FFA1C[] = {
gAnimCmd_83FFA0C,
gAnimCmd_83FFA14
};
static const struct SpriteTemplate gUnknown_83FFA24 = {
5525, 5526, &gOamData_83FFA04, gSpriteAnimTable_83FFA1C, NULL, gDummySpriteAffineAnimTable, sub_80E4FAC
};
static const struct BgTemplate gUnknown_83FFA3C[2] = {
{
.bg = 0,
.charBaseIndex = 2,
.mapBaseIndex = 31,
.priority = 0
},
{
.bg = 1,
.charBaseIndex = 0,
.mapBaseIndex = 8,
.priority = 1
}
};
static const struct WindowTemplate gUnknown_83FFA44[9] = {
{
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
.width = 6,
.height = 7,
.paletteNum = 0x0d,
.baseBlock = 0x014
},
{
.bg = 0,
.tilemapLeft = 10,
.tilemapTop = 0,
.width = 5,
.height = 5,
.paletteNum = 0x0d,
.baseBlock = 0x03e
},
{
.bg = 0,
.tilemapLeft = 5,
.tilemapTop = 0,
.width = 5,
.height = 2,
.paletteNum = 0x0d,
.baseBlock = 0x057
},
{
.bg = 0,
.tilemapLeft = 15,
.tilemapTop = 0,
.width = 3,
.height = 5,
.paletteNum = 0x0f,
.baseBlock = 0x061
},
{
.bg = 0,
.tilemapLeft = 5,
.tilemapTop = 2,
.width = 3,
.height = 3,
.paletteNum = 0x0f,
.baseBlock = 0x070
},
{
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 6,
.width = 15,
.height = 8,
.paletteNum = 0x0f,
.baseBlock = 0x079
},
{
.bg = 0,
.tilemapLeft = 19,
.tilemapTop = 1,
.width = 10,
.height = 12,
.paletteNum = 0x0f,
.baseBlock = 0x0f1
},
{
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 15,
.width = 26,
.height = 4,
.paletteNum = 0x0f,
.baseBlock = 0x169
}, DUMMY_WIN_TEMPLATE
};
static const struct WindowTemplate gUnknown_83FFA8C = {
.bg = 0,
.tilemapLeft = 21,
.tilemapTop = 8,
.width = 6,
.height = 4,
.paletteNum = 0x0f,
.baseBlock = 0x1d1
};
static const struct ListMenuTemplate gUnknown_83FFA94 = {
.items = NULL,
.moveCursorFunc = MoveRelearnerMenu_MoveCursorFunc,
.itemPrintFunc = NULL,
.totalItems = 0,
.maxShowed = 7,
.windowId = 6,
.header_X = 0,
.item_X = 8,
.cursor_X = 0,
.upText_Y = 0,
.cursorPal = 2,
.fillValue = 1,
.cursorShadowPal = 3,
.lettersSpacing = 1,
.itemVerticalPadding = 0,
.scrollMultiple = 0,
.fontId = 2,
.cursorKind = 0,
};
static void sub_80E4620(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void DisplayMoveTutorMenu(void)
{
ScriptContext2_Enable();
CreateTask(sub_80E4660, 10);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
}
static void sub_80E4660(u8 taskId)
{
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_SelectMonToRelearnMove);
gFieldCallback = FieldCallback_ReturnToEventScript2;
DestroyTask(taskId);
}
}
static void sub_80E469C(void)
{
int i;
ResetBgsAndClearDma3BusyFlags(FALSE);
InitBgsFromTemplates(0, gUnknown_83FFA3C, NELEMS(gUnknown_83FFA3C));
ResetTempTileDataBuffers();
if (InitWindows(gUnknown_83FFA44))
{
DeactivateAllTextPrinters();
for (i = 0; i < NELEMS(gUnknown_83FFA44); i++)
{
ClearWindowTilemap(i);
FillWindowPixelBuffer(i, PIXEL_FILL(0));
}
FillWindowPixelBuffer(7, PIXEL_FILL(1));
FillBgTilemapBufferRect(0, 0x000, 0, 0, 30, 20, 0xF);
SetBgTilemapBuffer(1, sMoveRelearner->bg1TilemapBuffer);
TextWindow_SetUserSelectedFrame(0, 1, 0xE0);
sub_8107D38(0xD0, 1);
LoadPalette(gUnknown_8E97DDC, 0x00, 0x20);
DecompressAndLoadBgGfxUsingHeap(1, gUnknown_8E97DFC, 0, 0, 0);
CopyToBgTilemapBuffer(1, gUnknown_8E97EC4, 0, 0);
CopyBgTilemapBufferToVram(1);
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
}
}
static void CB2_SelectMonToRelearnMove(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
sMoveRelearner = AllocZeroed(sizeof(struct LearnMoveGfxResources));
InitMoveRelearnerStateVariables();
sMoveRelearner->selectedPartyMember = gSpecialVar_0x8004;
sub_80E50CC();
SetVBlankCallback(sub_80E4620);
sub_80E469C();
sub_80E5004();
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
SetMainCallback2(CB2_MoveRelearner);
}
static void CB2_SelectMoveToOverwrite(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
sub_80E50CC();
sMoveRelearner->selectedMoveSlot = gSpecialVar_0x8005;
SetVBlankCallback(sub_80E4620);
sub_80E469C();
sub_80E5004();
FillPalette(RGB_BLACK, 0, 2);
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
SetMainCallback2(CB2_MoveRelearner);
}
static void CB2_MoveRelearner(void)
{
if (!IsTextPrinterActive(7))
MoveRelearnerStateMachine();
if (sMoveRelearner->scheduleMoveInfoUpdate)
{
PrintMoveInfoHandleCancel_CopyToVram();
sMoveRelearner->scheduleMoveInfoUpdate = FALSE;
}
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
static void sub_80E48C0(const u8 *str)
{
StringExpandPlaceholders(gStringVar4, str);
PrintTextOnWindow(7, gStringVar4, 0, 2, GetTextSpeedSetting(), 2);
}
static void MoveRelearnerStateMachine(void)
{
u16 move;
switch (sMoveRelearner->state)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0);
ShowBg(1);
LoadMoveInfoUI();
sMoveRelearner->state++;
DrawTextBorderOnWindows6and7();
PrintTeachWhichMoveToStrVar1(FALSE);
sub_80E5300();
sMoveRelearner->scheduleMoveInfoUpdate = TRUE;
break;
case 1:
if (!gPaletteFade.active)
sMoveRelearner->state = 4;
break;
case 2:
sMoveRelearner->state++;
break;
case 3:
PrintTeachWhichMoveToStrVar1(FALSE);
sMoveRelearner->scheduleMoveInfoUpdate = TRUE;
sMoveRelearner->state++;
break;
case 4:
sub_80E5204();
break;
case 8:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state++;
break;
case 9:
switch (YesNoMenuProcessInput())
{
case 0:
if (GiveMoveToMon(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]) != 0xFFFF)
{
sub_80E48C0(gUnknown_841E405);
gSpecialVar_0x8004 = TRUE;
sMoveRelearner->state = 31;
}
else
{
sMoveRelearner->state = 16;
}
break;
case 1:
case -1:
sMoveRelearner->state = 3;
break;
}
break;
case 12:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state++;
break;
case 13:
switch (YesNoMenuProcessInput())
{
case 0:
gSpecialVar_0x8004 = FALSE;
sMoveRelearner->state = 14;
break;
case 1:
case -1:
sMoveRelearner->state = 3;
break;
}
break;
case 16:
sub_80E48C0(gUnknown_841E414);
sMoveRelearner->state++;
break;
case 17:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state = 18;
break;
case 18:
switch (YesNoMenuProcessInput())
{
case 0:
sub_80E48C0(gUnknown_841E50C);
sMoveRelearner->state = 19;
break;
case 1:
case -1:
sMoveRelearner->state = 24;
break;
}
break;
case 24:
sub_80E48C0(gUnknown_841E481);
sMoveRelearner->state++;
break;
case 25:
CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0);
sMoveRelearner->state = 26;
break;
case 26:
switch (YesNoMenuProcessInput())
{
case 0:
sMoveRelearner->state = 27;
break;
case 1:
case -1:
sMoveRelearner->state = 16;
break;
}
break;
case 27:
sMoveRelearner->state = 3;
break;
case 19:
sMoveRelearner->state = 20;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
break;
case 20:
if (!gPaletteFade.active)
{
ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow);
FreeAllWindowBuffers();
ShowSelectMovePokemonSummaryScreen(gPlayerParty, sMoveRelearner->selectedPartyMember, gPlayerPartyCount - 1, CB2_SelectMoveToOverwrite, sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]);
sMoveRelearner->state = 28;
}
break;
case 21:
sMoveRelearner->state = 14;
break;
case 22:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
break;
case 14:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
sMoveRelearner->state++;
break;
case 15:
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
Free(sMoveRelearner);
SetMainCallback2(CB2_ReturnToField);
}
break;
case 28:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0);
ShowBg(1);
sMoveRelearner->state++;
LoadMoveInfoUI();
DrawTextBorderOnWindows6and7();
sub_80E5300();
PrintTeachWhichMoveToStrVar1(TRUE);
PrintMoveInfoHandleCancel_CopyToVram();
break;
case 29:
if (!gPaletteFade.active)
{
if (sMoveRelearner->selectedMoveSlot == 4)
{
sMoveRelearner->state = 24;
}
else
{
move = GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_MOVE1 + sMoveRelearner->selectedMoveSlot);
StringCopy(gStringVar3, gMoveNames[move]);
RemoveMonPPBonus(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->selectedMoveSlot);
SetMonMoveSlot(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex], sMoveRelearner->selectedMoveSlot);
StringCopy(gStringVar2, gMoveNames[sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]]);
sub_80E48C0(gUnknown_841E493);
sMoveRelearner->state = 30;
gSpecialVar_0x8004 = TRUE;
}
}
break;
case 30:
sub_80E48C0(gUnknown_841E4C0);
sMoveRelearner->state = 31;
PlayFanfare(MUS_FANFA1);
break;
case 31:
PlayFanfare(MUS_FANFA1);
sMoveRelearner->state = 32;
break;
case 32:
if (IsFanfareTaskInactive())
sMoveRelearner->state = 33;
break;
case 33:
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
sMoveRelearner->state = 14;
}
break;
}
}
static void DrawTextBorderOnWindows6and7(void)
{
int i;
for (i = 6; i < 8; i++)
DrawTextBorderOuter(i, 0x001, 0xE);
}
static void PrintTeachWhichMoveToStrVar1(bool8 onInit)
{
if (!onInit)
{
StringExpandPlaceholders(gStringVar4, gUnknown_841E3E3);
PrintTextOnWindow(7, gStringVar4, 0, 2, 0, 2);
PutWindowTilemap(7);
CopyWindowToVram(7, 3);
}
}
static void InitMoveRelearnerStateVariables(void)
{
int i;
sMoveRelearner->state = 0;
sMoveRelearner->unk_02 = 0;
sMoveRelearner->scrollPositionMaybe = 0;
sMoveRelearner->unk_18 = 0;
sMoveRelearner->unk_1C = 0;
sMoveRelearner->numLearnableMoves = 0;
sMoveRelearner->unk_1B = 0;
sMoveRelearner->unk_1D = 0;
sMoveRelearner->unk_1E = 0;
sMoveRelearner->scheduleMoveInfoUpdate = FALSE;
for (i = 0; i < 20; i++)
sMoveRelearner->learnableMoves[i] = MOVE_NONE;
}
static void sub_80E4FAC(struct Sprite * sprite)
{
s16 abcissa = (sprite->data[1] * 10) & 0xFF;
switch (sprite->data[0])
{
case 0:
break;
case 1:
sprite->pos2.x = Sin(abcissa, 3) * sprite->data[2];
break;
case 2:
sprite->pos2.y = Sin(abcissa, 1) * sprite->data[2];
break;
}
sprite->data[1]++;
}
static void sub_80E5004(void)
{
int i;
LoadSpriteSheet(&gUnknown_83FF9F4);
LoadSpritePalette(&gUnknown_83FF9FC);
sMoveRelearner->spriteIds[0] = CreateSprite(&gUnknown_83FFA24, 200, 4, 0);
StartSpriteAnim(&gSprites[sMoveRelearner->spriteIds[0]], 1);
gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2;
gSprites[sMoveRelearner->spriteIds[0]].data[2] = -1;
// Bug: This should be using the second element of spriteIds.
sMoveRelearner->spriteIds[0] = CreateSprite(&gUnknown_83FFA24, 200, 108, 0);
gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2;
gSprites[sMoveRelearner->spriteIds[0]].data[2] = 1;
for (i = 0; i < 2; i++)
gSprites[sMoveRelearner->spriteIds[i]].invisible = TRUE;
}
static void sub_80E50CC(void)
{
int i;
s32 count;
u8 nickname[11];
sMoveRelearner->numLearnableMoves = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves);
count = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves);
for (i = 0; i < sMoveRelearner->numLearnableMoves; i++)
StringCopy(sMoveRelearner->listMenuStrbufs[i], gMoveNames[sMoveRelearner->learnableMoves[i]]);
GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_NICKNAME, nickname);
StringCopy10(gStringVar1, nickname);
StringCopy(sMoveRelearner->listMenuStrbufs[sMoveRelearner->numLearnableMoves], gFameCheckerText_Cancel);
sMoveRelearner->numLearnableMoves++;
for (i = 0; i < count; i++)
{
sMoveRelearner->listMenuItems[i].label = sMoveRelearner->listMenuStrbufs[i];
sMoveRelearner->listMenuItems[i].index = i;
}
sMoveRelearner->listMenuItems[i].label = gFameCheckerText_Cancel;
sMoveRelearner->listMenuItems[i].index = 0xFE;
gMultiuseListMenuTemplate = gUnknown_83FFA94;
gMultiuseListMenuTemplate.items = sMoveRelearner->listMenuItems;
gMultiuseListMenuTemplate.totalItems = count + 1;
}
static void sub_80E5204(void)
{
ListMenu_ProcessInput(sMoveRelearner->listMenuTaskId);
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
if (sMoveRelearner->selectedIndex != 0xFE)
{
sMoveRelearner->state = 8;
StringCopy(gStringVar2, sMoveRelearner->listMenuStrbufs[sMoveRelearner->selectedIndex]);
sub_80E48C0(gUnknown_841E3FB);
}
else
{
sub_80E48C0(gUnknown_841E4E2);
sMoveRelearner->state = 12;
}
}
else if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
sMoveRelearner->state = 12;
sub_80E48C0(gUnknown_841E4E2);
}
if (sMoveRelearner->numLearnableMoves > 6)
{
gSprites[0].invisible = FALSE;
gSprites[1].invisible = FALSE;
if (sMoveRelearner->scrollPositionMaybe == 0)
gSprites[0].invisible = TRUE;
else if (sMoveRelearner->scrollPositionMaybe == sMoveRelearner->numLearnableMoves - 6)
gSprites[1].invisible = TRUE;
}
}
static void sub_80E5300(void)
{
sMoveRelearner->listMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearner->listMenuScrollPos, sMoveRelearner->listMenuScrollRow);
CopyWindowToVram(6, 1);
}
static void PrintMoveInfo(u16 move)
{
u8 buffer[50];
BlitMoveInfoIcon(2, gBattleMoves[move].type + 1, 1, 4);
if (gBattleMoves[move].power < 2)
{
PrintTextOnWindow(3, gText_ThreeHyphens, 1, 4, 0, 0);
}
else
{
ConvertIntToDecimalStringN(buffer, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3);
PrintTextOnWindow(3, buffer, 1, 4, 0, 0);
}
if (gBattleMoves[move].accuracy == 0)
{
PrintTextOnWindow(3, gText_ThreeHyphens, 1, 18, 0, 1);
}
else
{
ConvertIntToDecimalStringN(buffer, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3);
PrintTextOnWindow(3, buffer, 1, 18, 0, 1);
}
ConvertIntToDecimalStringN(buffer, gBattleMoves[move].pp, STR_CONV_MODE_LEFT_ALIGN, 2);
PrintTextOnWindow(4, buffer, 2, 2, 0, 0);
PrintTextOnWindow(5, gMoveDescriptionPointers[move - 1], 1, 0, 0, 0);
}
static void LoadMoveInfoUI(void)
{
BlitMoveInfoIcon(0, 19, 1, 4);
BlitMoveInfoIcon(1, 20, 0, 4);
BlitMoveInfoIcon(1, 21, 0, 19);
BlitMoveInfoIcon(0, 22, 1, 19);
BlitMoveInfoIcon(0, 23, 1, 34);
PutWindowTilemap(0);
PutWindowTilemap(1);
PutWindowTilemap(4);
PutWindowTilemap(3);
PutWindowTilemap(5);
PutWindowTilemap(2);
PutWindowTilemap(7);
CopyWindowToVram(0, 2);
CopyWindowToVram(1, 2);
}
static void PrintMoveInfoHandleCancel_CopyToVram(void)
{
int i;
if (sMoveRelearner->selectedIndex != 0xFE)
{
PrintMoveInfo(sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]);
}
else
{
for (i = 2; i < 6; i++)
{
FillWindowPixelBuffer(i, PIXEL_FILL(0));
CopyWindowToVram(i, 2);
}
}
CopyWindowToVram(3, 2);
CopyWindowToVram(4, 2);
CopyWindowToVram(2, 2);
CopyWindowToVram(2, 2);
CopyWindowToVram(5, 2);
CopyWindowToVram(7, 3);
}
static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
if (!onInit)
{
PlaySE(SE_SELECT);
sMoveRelearner->scheduleMoveInfoUpdate = TRUE;
sMoveRelearner->selectedIndex = itemIndex;
}
}
static s8 YesNoMenuProcessInput(void)
{
s8 input = Menu_ProcessInputNoWrapClearOnChoose();
if (input != -2)
{
PutWindowTilemap(6);
CopyWindowToVram(6, 1);
}
return input;
}
static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx)
{
s32 letterSpacing = 1;
s32 lineSpacing = 1;
if (colorIdx == 0 || colorIdx == 1)
{
letterSpacing = 0;
lineSpacing = 0;
}
switch (colorIdx)
{
case 0:
case 1:
sMoveRelearner->textColor[0] = 0;
sMoveRelearner->textColor[1] = 2;
sMoveRelearner->textColor[2] = 3;
break;
case 2:
sMoveRelearner->textColor[0] = 1;
sMoveRelearner->textColor[1] = 2;
sMoveRelearner->textColor[2] = 3;
}
if (colorIdx != 1)
FillWindowPixelBuffer(windowId, PIXEL_FILL(sMoveRelearner->textColor[0]));
AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str);
}
+2 -3
View File
@@ -447,9 +447,8 @@ gUnknown_2039A34: @ 2039A34
gUnknown_203AAB0: @ 203AAB0
.space 0x4
gUnknown_203AAB4: @ 203AAB4
.space 0x4
.align 2
.include "src/learn_move.o"
.align 2
.include "src/battle_tower.o"
.align 2