mirror of
https://github.com/pret/pokefirered.git
synced 2026-04-18 15:37:19 -05:00
Merge branch 'master' of github.com:pret/pokefirered into misc_doc
This commit is contained in:
commit
6b64fbc522
|
|
@ -537,7 +537,7 @@ void GetIsDoomDesireHitTurn(u8 taskId);
|
|||
|
||||
// flying.c
|
||||
void AnimTask_AnimateGustTornadoPalette(u8 taskId);
|
||||
void sub_80B1D3C(struct Sprite *sprite);
|
||||
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite);
|
||||
void AnimTask_DrillPeckHitSplats(u8 taskId);
|
||||
|
||||
// poison.c
|
||||
|
|
|
|||
|
|
@ -1,212 +1,8 @@
|
|||
#ifndef GUARD_BERRY_CRUSH_H
|
||||
#define GUARD_BERRY_CRUSH_H
|
||||
|
||||
enum {
|
||||
BCTEXT_AREYOUREADY,
|
||||
BCTEXT_WAITFOROTHERS,
|
||||
BCTEXT_GAINEDPOWDER,
|
||||
BCTEXT_RECORDINGRESULTS,
|
||||
BCTEXT_ASKPLAYAGAIN,
|
||||
BCTEXT_CANCEL_NOBERRIES,
|
||||
BCTEXT_CANCEL_DROPPEDOUT,
|
||||
BCTEXT_TIMEUP,
|
||||
BCTEXT_COMMSTANDBY,
|
||||
};
|
||||
#include "main.h"
|
||||
|
||||
enum {
|
||||
BCCMD_BeginNormalPaletteFade = 1,
|
||||
BCCMD_WaitPaletteFade,
|
||||
BCCMD_PrintMessage,
|
||||
BCCMD_InitGfx,
|
||||
BCCMD_TeardownGfx,
|
||||
BCCMD_SignalReadyToBegin,
|
||||
BCCMD_AskPickBerry,
|
||||
BCCMD_GoToBerryPouch,
|
||||
BCCMD_WaitForOthersToPickBerries,
|
||||
BCCMD_DropBerriesIntoCrusher,
|
||||
BCCMD_DropLid,
|
||||
BCCMD_Countdown,
|
||||
BCCMD_PlayGame_Master,
|
||||
BCCMD_PlayGame_Slave,
|
||||
BCCMD_FinishGame,
|
||||
BCCMD_HandleTimeUp,
|
||||
BCCMD_TabulateResults,
|
||||
BCCMD_ShowResults,
|
||||
BCCMD_SaveTheGame,
|
||||
BCCMD_AskPlayAgain,
|
||||
BCCMD_CommunicatePlayAgainResponses,
|
||||
BCCMD_FadeOutToPlayAgain,
|
||||
BCCMD_PlayAgainFailureMessage,
|
||||
BCCMD_GracefulExit,
|
||||
BCCMD_Quit,
|
||||
};
|
||||
|
||||
struct BerryCrushGame_Player
|
||||
{
|
||||
u16 berryId;
|
||||
u16 unk2;
|
||||
union
|
||||
{
|
||||
u8 as_2d_bytes[2][8];
|
||||
u16 as_hwords[8];
|
||||
} unk4;
|
||||
u8 unk14[12];
|
||||
};
|
||||
|
||||
struct BerryCrushGame_5C
|
||||
{
|
||||
u16 unk00;
|
||||
u8 unk02_0:1;
|
||||
u8 unk02_1:1;
|
||||
u8 pushedAButton:1;
|
||||
u8 unk02_3:5;
|
||||
s8 unk03;
|
||||
u16 unk04;
|
||||
u16 unk06;
|
||||
u16 unk08;
|
||||
u16 unk0A;
|
||||
};
|
||||
|
||||
struct __attribute__((packed, aligned(2))) BerryCrushGame_4E
|
||||
{
|
||||
u16 unk0;
|
||||
struct BerryCrushGame_5C data;
|
||||
};
|
||||
|
||||
union BerryCrushGame_68
|
||||
{
|
||||
struct BerryCrushGame_68_x
|
||||
{
|
||||
struct BerryCrushGame_68_x_SubStruct
|
||||
{
|
||||
s32 unk00;
|
||||
u16 unk04;
|
||||
s16 unk06;
|
||||
u16 unk08;
|
||||
u16 unk0A;
|
||||
// 0: Number of A presses
|
||||
// 1: Neatness
|
||||
u16 stats[2][5];
|
||||
u8 filler20[16];
|
||||
} unk00;
|
||||
u8 unk30[12];
|
||||
struct BerryCrushGame_Player others[4];
|
||||
u8 fillerBC[20];
|
||||
} as_four_players;
|
||||
struct BerryCrushGame_68_y
|
||||
{
|
||||
u8 filler00[28];
|
||||
struct BerryCrushGame_Player players[5];
|
||||
u8 fillerBC[20];
|
||||
} as_five_players;
|
||||
};
|
||||
|
||||
struct BerryCrushPlayerSeatCoords
|
||||
{
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
s16 unk4;
|
||||
s16 unk6;
|
||||
s16 unk8;
|
||||
s16 unkA;
|
||||
};
|
||||
|
||||
struct BerryCrushGame_138
|
||||
{
|
||||
u8 animBerryIdx;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
s16 minutes;
|
||||
s16 secondsInt;
|
||||
s16 secondsFrac;
|
||||
const struct BerryCrushPlayerSeatCoords * seatCoords[5];
|
||||
struct Sprite *coreSprite;
|
||||
struct Sprite *impactSprites[5];
|
||||
struct Sprite *berrySprites[5];
|
||||
struct Sprite *sparkleSprites[11];
|
||||
struct Sprite *timerSprites[2];
|
||||
u8 unk80;
|
||||
u8 filler81;
|
||||
u8 unk82;
|
||||
u8 unk83[5];
|
||||
};
|
||||
|
||||
struct BerryCrushGame
|
||||
{
|
||||
MainCallback savedCallback;
|
||||
u32 (*cmdCallback)(struct BerryCrushGame *, u8 *);
|
||||
u8 localId;
|
||||
u8 playerCount;
|
||||
u8 taskId;
|
||||
u8 textSpeed;
|
||||
u8 cmdState;
|
||||
u8 unkD;
|
||||
u8 nextCmd;
|
||||
u8 afterPalFadeCmd;
|
||||
u16 unk10;
|
||||
u16 gameState;
|
||||
u16 unk14;
|
||||
u16 pressingSpeed;
|
||||
s16 unk18;
|
||||
s16 unk1A;
|
||||
int powder;
|
||||
s32 unk20;
|
||||
u8 unk24;
|
||||
u8 unk25_0:1;
|
||||
u8 unk25_1:1;
|
||||
u8 unk25_2:1;
|
||||
u8 unk25_3:1;
|
||||
u8 unk25_4:1;
|
||||
u8 unk25_5:3;
|
||||
u16 unk26;
|
||||
u16 timer;
|
||||
s16 depth;
|
||||
s16 vibration;
|
||||
s16 unk2E;
|
||||
s16 unk30;
|
||||
s16 unk32;
|
||||
s16 unk34;
|
||||
u8 commandParams[10];
|
||||
u16 sendCmd[7];
|
||||
u16 recvCmd[7];
|
||||
struct BerryCrushGame_5C localState;
|
||||
union BerryCrushGame_68 unk68;
|
||||
struct BerryCrushGame_138 spritesManager;
|
||||
u8 bg1Buffer[0x1000];
|
||||
u8 unk11C0[0x1000];
|
||||
u8 bg2Buffer[0x1000];
|
||||
u8 bg3Buffer[0x1000];
|
||||
};
|
||||
|
||||
#define BERRYCRUSH_PLAYER_NAME(game, i) \
|
||||
((u8 *)(game) \
|
||||
+ offsetof(struct BerryCrushGame, unk68) \
|
||||
+ offsetof(struct BerryCrushGame_68_x, unk30) \
|
||||
+ sizeof(struct BerryCrushGame_Player) * (i))
|
||||
|
||||
struct BerryCrushGame *GetBerryCrushGame(void);
|
||||
void StartBerryCrush(MainCallback callback);
|
||||
u32 ExitBerryCrushWithCallback(MainCallback callback);
|
||||
void CB2_BerryCrush_GoToBerryPouch(void);
|
||||
void BerryCrush_SetVBlankCallback(void);
|
||||
void BerryCrush_UnsetVBlankCallback(void);
|
||||
void BerryCrush_UpdateSav2Records(void);
|
||||
void BerryCrush_RunOrScheduleCommand(u16 command, u8 runMode, u8 *params);
|
||||
void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, u32 selectedPals, s8 delay, u8 startY, u8 targetY, u16 palette);
|
||||
int sub_814D9CC(struct BerryCrushGame *arg0);
|
||||
int BerryCrush_InitBgs(void);
|
||||
int BerryCrush_TeardownBgs(void);
|
||||
void BerryCrush_CreateBerrySprites(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
|
||||
void BerryCrushFreeBerrySpriteGfx(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
|
||||
void sub_814DC5C(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
|
||||
bool32 sub_814DE50(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
|
||||
bool32 sub_814E644(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
|
||||
void sub_814E80C(struct BerryCrushGame *arg0);
|
||||
void sub_814DA04(struct BerryCrushGame *arg0);
|
||||
void BerryCrush_HideTimerSprites(struct BerryCrushGame_138 *arg0);
|
||||
void SpriteCB_DropBerryIntoCrusher(struct Sprite * sprite);
|
||||
void ShowBerryCrushRankings(void);
|
||||
|
||||
#endif //GUARD_BERRY_CRUSH_H
|
||||
#endif // GUARD_BERRY_CRUSH_H
|
||||
|
|
|
|||
|
|
@ -82,14 +82,6 @@ struct BackupMapLayout
|
|||
u16 *map;
|
||||
};
|
||||
|
||||
union __attribute__((packed)) ObjectEventRange {
|
||||
u8 as_byte;
|
||||
struct __attribute__((packed)) {
|
||||
u8 x:4;
|
||||
u8 y:4;
|
||||
} __attribute__((aligned (1))) as_nybbles;
|
||||
} __attribute__((aligned (1)));
|
||||
|
||||
struct ObjectEventTemplate
|
||||
{
|
||||
/*0x00*/ u8 localId;
|
||||
|
|
@ -239,8 +231,9 @@ struct ObjectEvent
|
|||
/*0x10*/ struct Coords16 currentCoords;
|
||||
/*0x14*/ struct Coords16 previousCoords;
|
||||
/*0x18*/ u8 facingDirection:4;
|
||||
/*0x18*/ u8 movementDirection:4;
|
||||
/*0x19*/ union ObjectEventRange range;
|
||||
u8 movementDirection:4;
|
||||
u16 rangeX:4;
|
||||
u16 rangeY:4;
|
||||
/*0x1A*/ u8 fieldEffectSpriteId;
|
||||
/*0x1B*/ u8 warpArrowSpriteId;
|
||||
/*0x1C*/ u8 movementActionId;
|
||||
|
|
|
|||
|
|
@ -291,8 +291,6 @@ SECTIONS {
|
|||
src/pokemon_jump_5.o(.text);
|
||||
src/pokemon_jump_6.o(.text);
|
||||
src/berry_crush.o(.text);
|
||||
src/berry_crush_2.o(.text);
|
||||
src/berry_crush_3.o(.text);
|
||||
src/wireless_communication_status_screen.o(.text);
|
||||
src/braille_text.o(.text);
|
||||
src/text_window.o(.text);
|
||||
|
|
@ -594,8 +592,7 @@ SECTIONS {
|
|||
src/pokemon_jump_4.o(.rodata);
|
||||
src/pokemon_jump_5.o(.rodata);
|
||||
src/pokemon_jump_6.o(.rodata);
|
||||
src/berry_crush_2.o(.rodata);
|
||||
src/berry_crush_3.o(.rodata);
|
||||
src/berry_crush.o(.rodata);
|
||||
src/wireless_communication_status_screen.o(.rodata);
|
||||
src/braille_text.o(.rodata);
|
||||
src/text_window_graphics.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -3464,7 +3464,7 @@ void AnimSmokeBallEscapeCloud(struct Sprite *sprite)
|
|||
|
||||
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
|
||||
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
|
||||
sprite->callback = sub_80B1D3C;
|
||||
sprite->callback = DestroyAnimSpriteAfterTimer;
|
||||
}
|
||||
|
||||
static void sub_80E1990(u8 taskId)
|
||||
|
|
|
|||
2982
src/berry_crush.c
2982
src/berry_crush.c
File diff suppressed because it is too large
Load Diff
1441
src/berry_crush_2.c
1441
src/berry_crush_2.c
File diff suppressed because it is too large
Load Diff
1390
src/berry_crush_3.c
1390
src/berry_crush_3.c
File diff suppressed because it is too large
Load Diff
843
src/credits.c
843
src/credits.c
|
|
@ -17,14 +17,8 @@
|
|||
|
||||
#if defined(FIRERED)
|
||||
#define TITLE_TEXT gString_PokemonFireRed_Staff
|
||||
asm(".set TITLE_TEXT, gString_PokemonFireRed_Staff");
|
||||
#elif defined(LEAFGREEN)
|
||||
#define TITLE_TEXT gString_PokemonLeafGreen_Staff
|
||||
asm(".set TITLE_TEXT, gString_PokemonLeafGreen_Staff");
|
||||
#endif
|
||||
|
||||
#if !defined(NONMATCHING) && MODERN
|
||||
#define static
|
||||
#endif
|
||||
|
||||
enum CreditsSceneIdx
|
||||
|
|
@ -808,7 +802,6 @@ static bool32 DoOverworldMapScrollScene(UNUSED u8 unused)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static s32 RollCredits(void)
|
||||
{
|
||||
u16 win0v[8];
|
||||
|
|
@ -841,45 +834,40 @@ static s32 RollCredits(void)
|
|||
{
|
||||
win0v[0]--;
|
||||
win0v[1]++;
|
||||
SetGpuReg(REG_OFFSET_WIN0V, win0v[1] + (win0v[0] << 8));
|
||||
SetGpuReg(REG_OFFSET_WIN0V, (win0v[0] << 8) + win0v[1]);
|
||||
}
|
||||
return 0;
|
||||
case CREDITSSCENE_LOAD_PLAYER_SPRITE_AT_INDIGO:
|
||||
if (sCreditsMgr->timer == 0)
|
||||
{
|
||||
LoadPlayerOrRivalSprite(0);
|
||||
sCreditsMgr->timer = 100;
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_TITLE_STAFF;
|
||||
}
|
||||
else
|
||||
if (sCreditsMgr->timer)
|
||||
{
|
||||
sCreditsMgr->timer--;
|
||||
return 0;
|
||||
}
|
||||
LoadPlayerOrRivalSprite(0);
|
||||
sCreditsMgr->timer = 100;
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_TITLE_STAFF;
|
||||
return 0;
|
||||
case CREDITSSCENE_PRINT_TITLE_STAFF:
|
||||
if (sCreditsMgr->timer == 0)
|
||||
{
|
||||
sCreditsMgr->timer = 360;
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_WAIT_TITLE_STAFF;
|
||||
}
|
||||
else
|
||||
if (sCreditsMgr->timer)
|
||||
{
|
||||
sCreditsMgr->timer--;
|
||||
return 0;
|
||||
|
||||
}
|
||||
sCreditsMgr->timer = 360;
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 0x08, 0x29, 1, 2, sTextColor_Header, 0, TITLE_TEXT);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_WAIT_TITLE_STAFF;
|
||||
return 0;
|
||||
case CREDITSSCENE_WAIT_TITLE_STAFF:
|
||||
if (sCreditsMgr->timer != 0)
|
||||
if (sCreditsMgr->timer)
|
||||
{
|
||||
sCreditsMgr->timer--;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
DestroyCreditsWindow();
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
|
||||
sCreditsMgr->timer = 0;
|
||||
sCreditsMgr->scrcmdidx = 0;
|
||||
}
|
||||
DestroyCreditsWindow();
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_EXEC_CMD;
|
||||
sCreditsMgr->timer = 0;
|
||||
sCreditsMgr->scrcmdidx = 0;
|
||||
return 0;
|
||||
case CREDITSSCENE_EXEC_CMD:
|
||||
if (sCreditsMgr->timer != 0)
|
||||
|
|
@ -887,53 +875,49 @@ static s32 RollCredits(void)
|
|||
sCreditsMgr->timer--;
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
}
|
||||
else
|
||||
switch (sCreditsScript[sCreditsMgr->scrcmdidx].cmd)
|
||||
{
|
||||
switch (sCreditsScript[sCreditsMgr->scrcmdidx].cmd)
|
||||
{
|
||||
case CREDITSSCRCMD_PRINT:
|
||||
BeginNormalPaletteFade(0x00008000, 0, 0, 16, RGB_BLACK);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER1;
|
||||
FillWindowPixelBuffer(sCreditsMgr->windowId, PIXEL_FILL(0));
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
case CREDITSSCRCMD_MAPNEXT:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_MAPNEXT_DESTROYWINDOW;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
FadeSelectedPals(1, 0, 0x3FFFFFFF);
|
||||
break;
|
||||
case CREDITSSCRCMD_MAP:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_MAP_LOADMAP_CREATESPRITES;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
break;
|
||||
case CREDITSSCRCMD_MON:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_MON_DESTROY_ASSETS;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
break;
|
||||
case CREDITSSCRCMD_THEENDGFX:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_THEEND_DESTROY_ASSETS;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case CREDITSSCRCMD_WAITBUTTON:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_WAITBUTTON;
|
||||
break;
|
||||
}
|
||||
sCreditsMgr->timer = sCreditsScript[sCreditsMgr->scrcmdidx].duration;
|
||||
sCreditsMgr->scrcmdidx++;
|
||||
return 0;
|
||||
case CREDITSSCRCMD_PRINT:
|
||||
BeginNormalPaletteFade(0x00008000, 0, 0, 16, RGB_BLACK);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER1;
|
||||
FillWindowPixelBuffer(sCreditsMgr->windowId, PIXEL_FILL(0));
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
case CREDITSSCRCMD_MAPNEXT:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_MAPNEXT_DESTROYWINDOW;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
FadeSelectedPals(1, 0, 0x3FFFFFFF);
|
||||
break;
|
||||
case CREDITSSCRCMD_MAP:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_MAP_LOADMAP_CREATESPRITES;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
break;
|
||||
case CREDITSSCRCMD_MON:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_MON_DESTROY_ASSETS;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
break;
|
||||
case CREDITSSCRCMD_THEENDGFX:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_THEEND_DESTROY_ASSETS;
|
||||
sCreditsMgr->whichMon = sCreditsScript[sCreditsMgr->scrcmdidx].param;
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case CREDITSSCRCMD_WAITBUTTON:
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_WAITBUTTON;
|
||||
break;
|
||||
}
|
||||
sCreditsMgr->timer = sCreditsScript[sCreditsMgr->scrcmdidx].duration;
|
||||
sCreditsMgr->scrcmdidx++;
|
||||
return 0;
|
||||
case CREDITSSCENE_PRINT_ADDPRINTER1:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8; // unused
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_0);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER2;
|
||||
}
|
||||
if (gPaletteFade.active)
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8; // unused
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, 1, 2, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_0);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_ADDPRINTER2;
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
case CREDITSSCENE_PRINT_ADDPRINTER2:
|
||||
win0v[0] = sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_8;
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, 2, 8, 6, 0, 0, sTextColor_Header, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_4);
|
||||
AddTextPrinterParameterized4(sCreditsMgr->windowId, 2, 8, 6, 0, 0, sTextColor_Regular, -1, sCreditsTexts[sCreditsScript[sCreditsMgr->scrcmdidx].param].unk_4);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_PRINT_DELAY;
|
||||
return sCreditsMgr->canSpeedThrough;
|
||||
case CREDITSSCENE_PRINT_DELAY:
|
||||
|
|
@ -1022,14 +1006,17 @@ static s32 RollCredits(void)
|
|||
{
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE);
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_TERMINATE;
|
||||
return 0;
|
||||
}
|
||||
else if (sCreditsMgr->timer == 0)
|
||||
if (sCreditsMgr->timer)
|
||||
{
|
||||
sCreditsMgr->timer--;
|
||||
}
|
||||
else
|
||||
{
|
||||
sCreditsMgr->mainseqno = CREDITSSCENE_TERMINATE;
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE);
|
||||
}
|
||||
else
|
||||
sCreditsMgr->timer--;
|
||||
return 0;
|
||||
case CREDITSSCENE_TERMINATE:
|
||||
if (!gPaletteFade.active)
|
||||
|
|
@ -1038,714 +1025,6 @@ static s32 RollCredits(void)
|
|||
}
|
||||
return 2;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static s32 RollCredits(void)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tsub sp, 0x24\n"
|
||||
"\tldr r1, _080F3BEC @ =sCreditsMgr\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tadds r7, r1, 0\n"
|
||||
"\tcmp r0, 0x12\n"
|
||||
"\tbls _080F3BE2\n"
|
||||
"\tb _080F4180_default_return2\n"
|
||||
"_080F3BE2:\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tldr r1, _080F3BF0 @ =_080F3BF4\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tmov pc, r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3BEC: .4byte sCreditsMgr\n"
|
||||
"_080F3BF0: .4byte _080F3BF4\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3BF4:\n"
|
||||
"\t.4byte _080F3C40_case00\n"
|
||||
"\t.4byte _080F3C64_case01\n"
|
||||
"\t.4byte _080F3C98_case02\n"
|
||||
"\t.4byte _080F3CEE_case03\n"
|
||||
"\t.4byte _080F3D0A_case04\n"
|
||||
"\t.4byte _080F3D48_case05\n"
|
||||
"\t.4byte _080F3D6A_case06\n"
|
||||
"\t.4byte _080F3EB4_case07\n"
|
||||
"\t.4byte _080F3F24_case08\n"
|
||||
"\t.4byte _080F3F84_case09\n"
|
||||
"\t.4byte _080F3FC4_case0A\n"
|
||||
"\t.4byte _080F3FF0_case0B\n"
|
||||
"\t.4byte _080F400A_case0C\n"
|
||||
"\t.4byte _080F4084_case0D\n"
|
||||
"\t.4byte _080F40B8_case0E\n"
|
||||
"\t.4byte _080F40D0_case0F\n"
|
||||
"\t.4byte _080F4100_case10\n"
|
||||
"\t.4byte _080F4118_case11\n"
|
||||
"\t.4byte _080F4170_case12\n"
|
||||
"_080F3C40_case00:\n"
|
||||
"\tbl SwitchWin1OffWin0On\n"
|
||||
"\tmovs r0, 0x40\n"
|
||||
"\tmovs r1, 0xF0\n"
|
||||
"\tbl SetGpuReg\n"
|
||||
"\tldr r1, _080F3C5C @ =0x00004f51\n"
|
||||
"\tmovs r0, 0x44\n"
|
||||
"\tbl SetGpuReg\n"
|
||||
"\tldr r0, _080F3C60 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3C5C: .4byte 0x00004f51\n"
|
||||
"_080F3C60: .4byte sCreditsMgr\n"
|
||||
"_080F3C64_case01:\n"
|
||||
"\tbl InitBgDarkenEffect\n"
|
||||
"\tbl CreateCreditsWindow\n"
|
||||
"\tmovs r0, 0xF0\n"
|
||||
"\tbl Menu_LoadStdPalAt\n"
|
||||
"\tldr r0, _080F3C8C @ =gPlttBufferUnfaded\n"
|
||||
"\tmovs r2, 0xFF\n"
|
||||
"\tlsls r2, 1\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tstrh r1, [r0]\n"
|
||||
"\tldr r0, _080F3C90 @ =gPlttBufferFaded\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tstrh r1, [r0]\n"
|
||||
"\tldr r0, _080F3C94 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0x2\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3C8C: .4byte gPlttBufferUnfaded\n"
|
||||
"_080F3C90: .4byte gPlttBufferFaded\n"
|
||||
"_080F3C94: .4byte sCreditsMgr\n"
|
||||
"_080F3C98_case02:\n"
|
||||
"\tmovs r0, 0x44\n"
|
||||
"\tbl GetGpuReg\n"
|
||||
"\tadd r1, sp, 0x14\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tmovs r0, 0x44\n"
|
||||
"\tbl GetGpuReg\n"
|
||||
"\tadd r2, sp, 0x14\n"
|
||||
"\tmovs r1, 0xFF\n"
|
||||
"\tands r1, r0\n"
|
||||
"\tstrh r1, [r2, 0x2]\n"
|
||||
"\tadds r0, r2, 0\n"
|
||||
"\tldrh r0, [r0]\n"
|
||||
"\tcmp r0, 0x24\n"
|
||||
"\tbne _080F3CCC\n"
|
||||
"\tldr r0, _080F3CC8 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tstrh r0, [r1, 0x4]\n"
|
||||
"\tmovs r0, 0x3\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3CC8: .4byte sCreditsMgr\n"
|
||||
"_080F3CCC:\n"
|
||||
"\tadd r1, sp, 0x14\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tadds r2, r1, 0\n"
|
||||
"\tadds r0, r1, 0\n"
|
||||
"\tldrh r1, [r0, 0x2]\n"
|
||||
"\tadds r1, 0x1\n"
|
||||
"\tstrh r1, [r2, 0x2]\n"
|
||||
"\tldrh r0, [r0]\n"
|
||||
"\tlsls r0, 8\n"
|
||||
"\tadds r1, r0\n"
|
||||
"\tlsls r1, 16\n"
|
||||
"\tlsrs r1, 16\n"
|
||||
"\tmovs r0, 0x44\n"
|
||||
"\tbl SetGpuReg\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F3CEE_case03:\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tldrh r0, [r1, 0x4]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080F3D52_decfield4_return0\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tbl LoadPlayerOrRivalSprite\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tmovs r1, 0x64\n"
|
||||
"\tstrh r1, [r0, 0x4]\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"_080F3D06_return0:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tb _080F4182_return\n"
|
||||
"_080F3D0A_case04:\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tldrh r0, [r1, 0x4]\n"
|
||||
"\tadds r2, r0, 0\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbne _080F3D52_decfield4_return0\n"
|
||||
"\tmovs r0, 0xB4\n"
|
||||
"\tlsls r0, 1\n"
|
||||
"\tstrh r0, [r1, 0x4]\n"
|
||||
"\tldrb r0, [r1, 0xA]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tmovs r1, 0x2\n"
|
||||
"\tstr r1, [sp, 0x4]\n"
|
||||
"\tldr r1, _080F3D40 @ =sTextColor_Header\n"
|
||||
"\tstr r1, [sp, 0x8]\n"
|
||||
"\tstr r2, [sp, 0xC]\n"
|
||||
"\tldr r1, _080F3D44 @ =TITLE_TEXT\n"
|
||||
"\tstr r1, [sp, 0x10]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tmovs r2, 0x8\n"
|
||||
"\tmovs r3, 0x29\n"
|
||||
"\tbl AddTextPrinterParameterized4\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x5\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3D40: .4byte sTextColor_Header\n"
|
||||
"_080F3D44: .4byte TITLE_TEXT\n"
|
||||
"_080F3D48_case05:\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tldrh r0, [r1, 0x4]\n"
|
||||
"\tadds r4, r0, 0\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tbeq _080F3D58\n"
|
||||
"_080F3D52_decfield4_return0:\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tstrh r0, [r1, 0x4]\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F3D58:\n"
|
||||
"\tbl DestroyCreditsWindow\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tmovs r1, 0x6\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tstrh r4, [r0, 0x4]\n"
|
||||
"\tstrh r4, [r0, 0x6]\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F3D6A_case06:\n"
|
||||
"\tldr r2, [r7]\n"
|
||||
"\tldrh r0, [r2, 0x4]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080F3D7A\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tstrh r0, [r2, 0x4]\n"
|
||||
"\tldrb r0, [r2, 0x8]\n"
|
||||
"\tb _080F4182_return\n"
|
||||
"_080F3D7A:\n"
|
||||
"\tldr r1, _080F3D94 @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tcmp r0, 0x5\n"
|
||||
"\tbls _080F3D8A\n"
|
||||
"\tb _080F3E94\n"
|
||||
"_080F3D8A:\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tldr r1, _080F3D98 @ =_080F3D9C\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tmov pc, r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3D94: .4byte sCreditsScript\n"
|
||||
"_080F3D98: .4byte _080F3D9C\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3D9C:\n"
|
||||
"\t.4byte _080F3DB4\n"
|
||||
"\t.4byte _080F3DE0\n"
|
||||
"\t.4byte _080F3E10\n"
|
||||
"\t.4byte _080F3E30\n"
|
||||
"\t.4byte _080F3E58\n"
|
||||
"\t.4byte _080F3E8C\n"
|
||||
"_080F3DB4:\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tlsls r0, 8\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r3, 0x10\n"
|
||||
"\tbl BeginNormalPaletteFade\n"
|
||||
"\tldr r4, _080F3DDC @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r4]\n"
|
||||
"\tmovs r0, 0x7\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tldrb r0, [r0, 0xA]\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tbl FillWindowPixelBuffer\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tldrb r0, [r0, 0x8]\n"
|
||||
"\tb _080F4182_return\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3DDC: .4byte sCreditsMgr\n"
|
||||
"_080F3DE0:\n"
|
||||
"\tldr r2, _080F3E04 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r0, 0xA\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tldr r2, [r2]\n"
|
||||
"\tldr r1, _080F3E08 @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldrb r0, [r0, 0x1]\n"
|
||||
"\tstrb r0, [r2, 0x9]\n"
|
||||
"\tldr r2, _080F3E0C @ =0x3fffffff\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tbl FadeSelectedPals\n"
|
||||
"\tb _080F3E94\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3E04: .4byte sCreditsMgr\n"
|
||||
"_080F3E08: .4byte sCreditsScript\n"
|
||||
"_080F3E0C: .4byte 0x3fffffff\n"
|
||||
"_080F3E10:\n"
|
||||
"\tldr r2, _080F3E28 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r0, 0xC\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tldr r2, [r2]\n"
|
||||
"\tldr r1, _080F3E2C @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldrb r0, [r0, 0x1]\n"
|
||||
"\tstrb r0, [r2, 0x9]\n"
|
||||
"\tb _080F3E94\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3E28: .4byte sCreditsMgr\n"
|
||||
"_080F3E2C: .4byte sCreditsScript\n"
|
||||
"_080F3E30:\n"
|
||||
"\tldr r2, _080F3E50 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r0, 0xD\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tldr r2, [r2]\n"
|
||||
"\tldr r1, _080F3E54 @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldrb r0, [r0, 0x1]\n"
|
||||
"\tstrb r0, [r2, 0x9]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tbl FadeScreen\n"
|
||||
"\tb _080F3E94\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3E50: .4byte sCreditsMgr\n"
|
||||
"_080F3E54: .4byte sCreditsScript\n"
|
||||
"_080F3E58:\n"
|
||||
"\tldr r2, _080F3E84 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tmovs r0, 0xF\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tldr r2, [r2]\n"
|
||||
"\tldr r1, _080F3E88 @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldrb r0, [r0, 0x1]\n"
|
||||
"\tstrb r0, [r2, 0x9]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tstr r3, [sp]\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r3, 0x10\n"
|
||||
"\tbl BeginNormalPaletteFade\n"
|
||||
"\tb _080F3E94\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3E84: .4byte sCreditsMgr\n"
|
||||
"_080F3E88: .4byte sCreditsScript\n"
|
||||
"_080F3E8C:\n"
|
||||
"\tldr r0, _080F3EAC @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0x11\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"_080F3E94:\n"
|
||||
"\tldr r0, _080F3EAC @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tldr r2, _080F3EB0 @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r1, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tldrh r0, [r0, 0x2]\n"
|
||||
"\tstrh r0, [r1, 0x4]\n"
|
||||
"\tldrh r0, [r1, 0x6]\n"
|
||||
"\tadds r0, 0x1\n"
|
||||
"\tstrh r0, [r1, 0x6]\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3EAC: .4byte sCreditsMgr\n"
|
||||
"_080F3EB0: .4byte sCreditsScript\n"
|
||||
"_080F3EB4_case07:\n"
|
||||
"\tldr r0, _080F3F14 @ =gPaletteFade\n"
|
||||
"\tldrb r1, [r0, 0x7]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r6, r0, 24\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tbne _080F3FBA_returnfield8\n"
|
||||
"\tadd r3, sp, 0x14\n"
|
||||
"\tldr r5, _080F3F18 @ =sCreditsTexts\n"
|
||||
"\tldr r4, _080F3F1C @ =sCreditsScript\n"
|
||||
"\tldr r2, [r7]\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r4\n"
|
||||
"\tldrb r1, [r0, 0x1]\n"
|
||||
"\tlsls r0, r1, 1\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tldrb r0, [r0, 0x8]\n"
|
||||
"\tstrh r0, [r3]\n"
|
||||
"\tldrb r0, [r2, 0xA]\n"
|
||||
"\tstr r6, [sp]\n"
|
||||
"\tstr r6, [sp, 0x4]\n"
|
||||
"\tldr r1, _080F3F20 @ =sTextColor_Header\n"
|
||||
"\tstr r1, [sp, 0x8]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tnegs r1, r1\n"
|
||||
"\tstr r1, [sp, 0xC]\n"
|
||||
"\tldrh r1, [r2, 0x6]\n"
|
||||
"\tlsls r1, 2\n"
|
||||
"\tadds r1, r4\n"
|
||||
"\tldrb r2, [r1, 0x1]\n"
|
||||
"\tlsls r1, r2, 1\n"
|
||||
"\tadds r1, r2\n"
|
||||
"\tlsls r1, 2\n"
|
||||
"\tadds r1, r5\n"
|
||||
"\tldr r1, [r1]\n"
|
||||
"\tstr r1, [sp, 0x10]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tmovs r2, 0x2\n"
|
||||
"\tmovs r3, 0x6\n"
|
||||
"\tbl AddTextPrinterParameterized4\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x8\n"
|
||||
"\tb _080F3FB8_setfield0_returnfield8\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3F14: .4byte gPaletteFade\n"
|
||||
"_080F3F18: .4byte sCreditsTexts\n"
|
||||
"_080F3F1C: .4byte sCreditsScript\n"
|
||||
"_080F3F20: .4byte sTextColor_Header\n"
|
||||
"_080F3F24_case08:\n"
|
||||
"\tadd r4, sp, 0x14\n"
|
||||
"\tldr r3, _080F3F78 @ =sCreditsTexts\n"
|
||||
"\tldr r5, _080F3F7C @ =sCreditsScript\n"
|
||||
"\tldr r2, [r7]\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tldrb r1, [r0, 0x1]\n"
|
||||
"\tlsls r0, r1, 1\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r3\n"
|
||||
"\tldrb r0, [r0, 0x8]\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tstrh r0, [r4]\n"
|
||||
"\tldrb r0, [r2, 0xA]\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tstr r1, [sp, 0x4]\n"
|
||||
"\tldr r1, _080F3F80 @ =sTextColor_Regular\n"
|
||||
"\tstr r1, [sp, 0x8]\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tnegs r1, r1\n"
|
||||
"\tstr r1, [sp, 0xC]\n"
|
||||
"\tldrh r1, [r2, 0x6]\n"
|
||||
"\tlsls r1, 2\n"
|
||||
"\tadds r1, r5\n"
|
||||
"\tldrb r2, [r1, 0x1]\n"
|
||||
"\tlsls r1, r2, 1\n"
|
||||
"\tadds r1, r2\n"
|
||||
"\tlsls r1, 2\n"
|
||||
"\tadds r3, 0x4\n"
|
||||
"\tadds r1, r3\n"
|
||||
"\tldr r1, [r1]\n"
|
||||
"\tstr r1, [sp, 0x10]\n"
|
||||
"\tmovs r1, 0x2\n"
|
||||
"\tmovs r2, 0x8\n"
|
||||
"\tmovs r3, 0x6\n"
|
||||
"\tbl AddTextPrinterParameterized4\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x9\n"
|
||||
"\tb _080F3FB8_setfield0_returnfield8\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3F78: .4byte sCreditsTexts\n"
|
||||
"_080F3F7C: .4byte sCreditsScript\n"
|
||||
"_080F3F80: .4byte sTextColor_Regular\n"
|
||||
"_080F3F84_case09:\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tldrb r0, [r0, 0xA]\n"
|
||||
"\tmovs r1, 0x2\n"
|
||||
"\tbl CopyWindowToVram\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tldr r2, _080F3FC0 @ =sCreditsScript\n"
|
||||
"\tldrh r0, [r1, 0x6]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tldrh r0, [r0, 0x2]\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tstrh r0, [r1, 0x4]\n"
|
||||
"\tldrh r0, [r1, 0x6]\n"
|
||||
"\tadds r0, 0x1\n"
|
||||
"\tstrh r0, [r1, 0x6]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tlsls r0, 8\n"
|
||||
"\tstr r2, [sp]\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tmovs r2, 0x10\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tbl BeginNormalPaletteFade\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x6\n"
|
||||
"_080F3FB8_setfield0_returnfield8:\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"_080F3FBA_returnfield8:\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tldrb r0, [r0, 0x8]\n"
|
||||
"\tb _080F4182_return\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3FC0: .4byte sCreditsScript\n"
|
||||
"_080F3FC4_case0A:\n"
|
||||
"\tldr r0, _080F3FE8 @ =gPaletteFade\n"
|
||||
"\tldrb r1, [r0, 0x7]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tbeq _080F3FD6\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F3FD6:\n"
|
||||
"\tbl DestroyCreditsWindow\n"
|
||||
"\tldr r1, _080F3FEC @ =sCreditsMgr\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tstrb r4, [r0, 0x1]\n"
|
||||
"\tldr r1, [r1]\n"
|
||||
"\tmovs r0, 0xB\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F3FE8: .4byte gPaletteFade\n"
|
||||
"_080F3FEC: .4byte sCreditsMgr\n"
|
||||
"_080F3FF0_case0B:\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tldrb r0, [r0, 0x9]\n"
|
||||
"\tbl DoOverworldMapScrollScene\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080F3FFE\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F3FFE:\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tstrb r0, [r1, 0x8]\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x6\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"_080F400A_case0C:\n"
|
||||
"\tldr r0, _080F4050 @ =gPaletteFade\n"
|
||||
"\tldrb r1, [r0, 0x7]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tbeq _080F401C\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F401C:\n"
|
||||
"\tbl DestroyCreditsWindow\n"
|
||||
"\tldr r1, _080F4054 @ =sCreditsMgr\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tstrb r4, [r0, 0x1]\n"
|
||||
"\tadds r4, r1, 0\n"
|
||||
"_080F4028:\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tldrb r0, [r0, 0x9]\n"
|
||||
"\tbl DoOverworldMapScrollScene\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080F4028\n"
|
||||
"\tldr r0, _080F4054 @ =sCreditsMgr\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tldrb r0, [r0, 0x9]\n"
|
||||
"\tcmp r0, 0x6\n"
|
||||
"\tbeq _080F4058\n"
|
||||
"\tcmp r0, 0x6\n"
|
||||
"\tble _080F404A\n"
|
||||
"\tcmp r0, 0x9\n"
|
||||
"\tbeq _080F405E\n"
|
||||
"\tcmp r0, 0xC\n"
|
||||
"\tbeq _080F4064\n"
|
||||
"_080F404A:\n"
|
||||
"\tadd r1, sp, 0x14\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _080F4068\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F4050: .4byte gPaletteFade\n"
|
||||
"_080F4054: .4byte sCreditsMgr\n"
|
||||
"_080F4058:\n"
|
||||
"\tadd r1, sp, 0x14\n"
|
||||
"\tmovs r0, 0x2\n"
|
||||
"\tb _080F4068\n"
|
||||
"_080F405E:\n"
|
||||
"\tadd r1, sp, 0x14\n"
|
||||
"\tmovs r0, 0x3\n"
|
||||
"\tb _080F4068\n"
|
||||
"_080F4064:\n"
|
||||
"\tadd r1, sp, 0x14\n"
|
||||
"\tmovs r0, 0x4\n"
|
||||
"_080F4068:\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tadd r0, sp, 0x14\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tbl LoadPlayerOrRivalSprite\n"
|
||||
"\tldr r2, _080F4080 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tstrb r0, [r1, 0x8]\n"
|
||||
"\tldr r1, [r2]\n"
|
||||
"\tmovs r0, 0x6\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F4080: .4byte sCreditsMgr\n"
|
||||
"_080F4084_case0D:\n"
|
||||
"\tldr r0, _080F40B0 @ =gPaletteFade\n"
|
||||
"\tldrb r1, [r0, 0x7]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tbeq _080F4096\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F4096:\n"
|
||||
"\tbl DestroyPlayerOrRivalSprite\n"
|
||||
"\tbl DestroyCreditsWindow\n"
|
||||
"\tldr r1, _080F40B4 @ =sCreditsMgr\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tstrb r4, [r0, 0x1]\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tstrb r4, [r0, 0x8]\n"
|
||||
"\tldr r1, [r1]\n"
|
||||
"\tmovs r0, 0xE\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F40B0: .4byte gPaletteFade\n"
|
||||
"_080F40B4: .4byte sCreditsMgr\n"
|
||||
"_080F40B8_case0E:\n"
|
||||
"\tbl DoCreditsMonScene\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080F40C2\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F40C2:\n"
|
||||
"\tldr r0, _080F40CC @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0x6\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F40CC: .4byte sCreditsMgr\n"
|
||||
"_080F40D0_case0F:\n"
|
||||
"\tldr r0, _080F40F8 @ =gPaletteFade\n"
|
||||
"\tldrb r1, [r0, 0x7]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tbeq _080F40E2\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F40E2:\n"
|
||||
"\tbl DestroyCreditsWindow\n"
|
||||
"\tldr r1, _080F40FC @ =sCreditsMgr\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tstrb r4, [r0, 0x1]\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tstrb r4, [r0, 0x8]\n"
|
||||
"\tldr r1, [r1]\n"
|
||||
"\tmovs r0, 0x10\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F40F8: .4byte gPaletteFade\n"
|
||||
"_080F40FC: .4byte sCreditsMgr\n"
|
||||
"_080F4100_case10:\n"
|
||||
"\tbl DoCopyrightOrTheEndGfxScene\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080F410A\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"_080F410A:\n"
|
||||
"\tldr r0, _080F4114 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0x6\n"
|
||||
"\tb _080F413C_setfield0_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F4114: .4byte sCreditsMgr\n"
|
||||
"_080F4118_case11:\n"
|
||||
"\tldr r0, _080F4140 @ =gMain\n"
|
||||
"\tldrh r1, [r0, 0x2E]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080F414C\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tldr r1, _080F4144 @ =0x00007fff\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r3, 0x10\n"
|
||||
"\tbl BeginNormalPaletteFade\n"
|
||||
"\tldr r0, _080F4148 @ =sCreditsMgr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0x12\n"
|
||||
"_080F413C_setfield0_return0:\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F4140: .4byte gMain\n"
|
||||
"_080F4144: .4byte 0x00007fff\n"
|
||||
"_080F4148: .4byte sCreditsMgr\n"
|
||||
"_080F414C:\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tldrh r0, [r1, 0x4]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080F4156\n"
|
||||
"\tb _080F3D52_decfield4_return0\n"
|
||||
"_080F4156:\n"
|
||||
"\tmovs r0, 0x12\n"
|
||||
"\tstrb r0, [r1]\n"
|
||||
"\tsubs r0, 0x13\n"
|
||||
"\tldr r1, _080F416C @ =0x00007fff\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tmovs r3, 0x10\n"
|
||||
"\tbl BeginNormalPaletteFade\n"
|
||||
"\tb _080F3D06_return0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F416C: .4byte 0x00007fff\n"
|
||||
"_080F4170_case12:\n"
|
||||
"\tldr r0, _080F418C @ =gPaletteFade\n"
|
||||
"\tldrb r1, [r0, 0x7]\n"
|
||||
"\tmovs r0, 0x80\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080F4180_default_return2\n"
|
||||
"\tbl DestroyCreditsWindow\n"
|
||||
"_080F4180_default_return2:\n"
|
||||
"\tmovs r0, 0x2\n"
|
||||
"_080F4182_return:\n"
|
||||
"\tadd sp, 0x24\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080F418C: .4byte gPaletteFade");
|
||||
}
|
||||
#endif //NONMATCHING
|
||||
|
||||
static void VBlankCB(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -675,7 +675,7 @@ static void sub_81543C4(u8 spriteId)
|
|||
#define sKeepPosX data[1]
|
||||
#else
|
||||
#define sKeepPosX data[10]
|
||||
#endif // NONMATCHING
|
||||
#endif // BUGFIX
|
||||
|
||||
static void sub_81543E8(struct Sprite * sprite)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -552,7 +552,7 @@ static void sub_80ADD4C(struct Sprite *sprite)
|
|||
gOamMatrices[matrixNum].b = sineVal;
|
||||
gOamMatrices[matrixNum].c = -sineVal;
|
||||
sprite->data[0] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_80B1D3C;
|
||||
sprite->callback = DestroyAnimSpriteAfterTimer;
|
||||
}
|
||||
|
||||
static void AnimZapCannonSpark(struct Sprite *sprite)
|
||||
|
|
|
|||
|
|
@ -20,10 +20,6 @@
|
|||
|
||||
#define NUM_FIELD_MAP_OBJECT_TEMPLATES 0x51
|
||||
|
||||
#if !defined(NONMATCHING) && MODERN
|
||||
#define static
|
||||
#endif
|
||||
|
||||
static void MoveCoordsInDirection(u32, s16 *, s16 *, s16, s16);
|
||||
static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *, struct Sprite *);
|
||||
static u8 GetCollisionInDirection(struct ObjectEvent *, u8);
|
||||
|
|
@ -1326,53 +1322,61 @@ static u8 GetObjectEventIdByLocalId(u8 localId)
|
|||
return OBJECT_EVENTS_COUNT;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup)
|
||||
{
|
||||
struct ObjectEvent *objectEvent;
|
||||
struct ObjectEventTemplate *template2 = template;
|
||||
const struct MapHeader *mapHeader;
|
||||
u8 objectEventId;
|
||||
u8 var0;
|
||||
u8 elevation;
|
||||
s16 x;
|
||||
s16 y;
|
||||
s16 var;
|
||||
s16 x2;
|
||||
s16 y2;
|
||||
s16 elevation2;
|
||||
s16 x3;
|
||||
s16 y3;
|
||||
|
||||
if(template->inConnection == 0xFF)
|
||||
var0 = 0;
|
||||
elevation = 0;
|
||||
x2 = 0;
|
||||
y2 = 0;
|
||||
x3 = 0;
|
||||
y3 = 0;
|
||||
|
||||
if (template->inConnection == 0xFF)
|
||||
{
|
||||
var = 1;
|
||||
mapNum = template2->trainerType;
|
||||
mapGroup = template2->trainerRange_berryTreeId & 0xFF;
|
||||
elevation2 = template2->elevation;
|
||||
x = template2->x;
|
||||
y = template2->y;
|
||||
x2 = template2->x;
|
||||
y2 = template2->y;
|
||||
template = &Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->events->objectEvents[elevation2 - 1];
|
||||
var0 = 1;
|
||||
elevation = template->elevation;
|
||||
mapNum = template->trainerType;
|
||||
mapGroup = template->trainerRange_berryTreeId & 0xFF;
|
||||
x2 = template->x;
|
||||
y2 = template->y;
|
||||
x3 = template->x;
|
||||
y3 = template->y;
|
||||
mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
|
||||
template = &(mapHeader->events->objectEvents[elevation - 1]);
|
||||
}
|
||||
if (GetAvailableObjectEventId(template->localId, mapNum, mapGroup, &objectEventId)
|
||||
&& !sub_805E238(template, var, x2, y2))
|
||||
|| !sub_805E238(template, var0, x3, y3))
|
||||
return OBJECT_EVENTS_COUNT;
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
ClearObjectEvent(objectEvent);
|
||||
if (var)
|
||||
{
|
||||
x = x2 * 0x10000 + 0x7000;
|
||||
y = y2 * 0x10000 + 0x7000;
|
||||
}
|
||||
else
|
||||
if (var0)
|
||||
{
|
||||
x = x2 + 7;
|
||||
y = y2 + 7;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = template->x + 7;
|
||||
y = template->y + 7;
|
||||
}
|
||||
objectEvent->active = TRUE;
|
||||
objectEvent->triggerGroundEffectsOnMove = TRUE;
|
||||
objectEvent->graphicsId = template->graphicsId;
|
||||
objectEvent->movementType = template->movementType;
|
||||
objectEvent->localId = template->localId;
|
||||
objectEvent->mapNum = mapNum;
|
||||
// objectEvent++; objectEvent--; is a trick used in pokeruby and pokeemerald here
|
||||
objectEvent->mapGroup = mapGroup;
|
||||
objectEvent->initialCoords.x = x;
|
||||
objectEvent->initialCoords.y = y;
|
||||
|
|
@ -1382,258 +1386,27 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
|
|||
objectEvent->previousCoords.y = y;
|
||||
objectEvent->currentElevation = template->elevation;
|
||||
objectEvent->previousElevation = template->elevation;
|
||||
objectEvent->range.as_nybbles.x = template->movementRangeX;
|
||||
objectEvent->range.as_nybbles.y = template->movementRangeY;
|
||||
objectEvent->rangeX = template->movementRangeX;
|
||||
objectEvent->rangeY = template->movementRangeY;
|
||||
objectEvent->trainerType = template->trainerType;
|
||||
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
|
||||
objectEvent->mapNum = mapNum; // oops (yes this is required for matching)
|
||||
objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
|
||||
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
|
||||
SetObjectEventDynamicGraphicsId(objectEvent);
|
||||
/*#ifndef NONMATCHING
|
||||
asm("":::"r5", "r6"); is a trick used in pokeruby and pokeemerald here
|
||||
#endif*/
|
||||
if (gRangedMovementTypes[objectEvent->movementType])
|
||||
{
|
||||
if (objectEvent->range.as_nybbles.x == 0)
|
||||
if (objectEvent->rangeX == 0)
|
||||
{
|
||||
objectEvent->range.as_nybbles.x++;
|
||||
objectEvent->rangeX++;
|
||||
}
|
||||
if (objectEvent->range.as_nybbles.y == 0)
|
||||
if (objectEvent->rangeY == 0)
|
||||
{
|
||||
objectEvent->range.as_nybbles.y++;
|
||||
objectEvent->rangeY++;
|
||||
}
|
||||
}
|
||||
return objectEventId;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup)
|
||||
{
|
||||
asm_unified("\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0xC\n\
|
||||
adds r5, r0, 0\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r7, r1, 24\n\
|
||||
lsls r2, 24\n\
|
||||
lsrs r6, r2, 24\n\
|
||||
movs r0, 0\n\
|
||||
mov r10, r0\n\
|
||||
mov r8, r0\n\
|
||||
mov r9, r0\n\
|
||||
movs r1, 0\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
ldrb r0, [r5, 0x2]\n\
|
||||
cmp r0, 0xFF\n\
|
||||
bne _0805E0DA\n\
|
||||
movs r1, 0x1\n\
|
||||
mov r10, r1\n\
|
||||
ldrb r4, [r5, 0x8]\n\
|
||||
ldrb r7, [r5, 0xC]\n\
|
||||
ldrb r6, [r5, 0xE]\n\
|
||||
ldrh r0, [r5, 0x4]\n\
|
||||
mov r8, r0\n\
|
||||
ldrh r5, [r5, 0x6]\n\
|
||||
mov r9, r5\n\
|
||||
mov r1, r8\n\
|
||||
str r1, [sp, 0x4]\n\
|
||||
mov r0, r9\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
adds r0, r6, 0\n\
|
||||
adds r1, r7, 0\n\
|
||||
bl Overworld_GetMapHeaderByGroupAndId\n\
|
||||
ldr r1, [r0, 0x4]\n\
|
||||
lsls r0, r4, 1\n\
|
||||
adds r0, r4\n\
|
||||
lsls r0, 3\n\
|
||||
subs r0, 0x18\n\
|
||||
ldr r1, [r1, 0x4]\n\
|
||||
adds r5, r1, r0\n\
|
||||
_0805E0DA:\n\
|
||||
ldrb r0, [r5]\n\
|
||||
adds r1, r7, 0\n\
|
||||
adds r2, r6, 0\n\
|
||||
mov r3, sp\n\
|
||||
bl GetAvailableObjectEventId\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0805E106\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
lsls r2, r1, 16\n\
|
||||
asrs r2, 16\n\
|
||||
ldr r0, [sp, 0x8]\n\
|
||||
lsls r3, r0, 16\n\
|
||||
asrs r3, 16\n\
|
||||
adds r0, r5, 0\n\
|
||||
mov r1, r10\n\
|
||||
bl sub_805E238\n\
|
||||
lsls r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0805E10A\n\
|
||||
_0805E106:\n\
|
||||
movs r0, 0x10\n\
|
||||
b _0805E220\n\
|
||||
_0805E10A:\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r1, [r0]\n\
|
||||
lsls r0, r1, 3\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 2\n\
|
||||
ldr r1, _0805E13C @ =gObjectEvents\n\
|
||||
adds r4, r0, r1\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl ClearObjectEvent\n\
|
||||
mov r1, r10\n\
|
||||
cmp r1, 0\n\
|
||||
beq _0805E140\n\
|
||||
mov r1, r8\n\
|
||||
lsls r0, r1, 16\n\
|
||||
movs r1, 0xE0\n\
|
||||
lsls r1, 11\n\
|
||||
adds r0, r1\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
mov r1, r9\n\
|
||||
lsls r0, r1, 16\n\
|
||||
movs r1, 0xE0\n\
|
||||
lsls r1, 11\n\
|
||||
adds r0, r1\n\
|
||||
b _0805E14E\n\
|
||||
.align 2, 0\n\
|
||||
_0805E13C: .4byte gObjectEvents\n\
|
||||
_0805E140:\n\
|
||||
ldrh r0, [r5, 0x4]\n\
|
||||
adds r0, 0x7\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r3, r0, 16\n\
|
||||
ldrh r0, [r5, 0x6]\n\
|
||||
adds r0, 0x7\n\
|
||||
lsls r0, 16\n\
|
||||
_0805E14E:\n\
|
||||
lsrs r2, r0, 16\n\
|
||||
ldrb r0, [r4]\n\
|
||||
movs r1, 0x1\n\
|
||||
orrs r0, r1\n\
|
||||
movs r1, 0x4\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4]\n\
|
||||
ldrb r0, [r5, 0x1]\n\
|
||||
strb r0, [r4, 0x5]\n\
|
||||
ldrb r0, [r5, 0x9]\n\
|
||||
strb r0, [r4, 0x6]\n\
|
||||
ldrb r0, [r5]\n\
|
||||
strb r0, [r4, 0x8]\n\
|
||||
strb r7, [r4, 0x9]\n\
|
||||
strb r6, [r4, 0xA]\n\
|
||||
strh r3, [r4, 0xC]\n\
|
||||
strh r2, [r4, 0xE]\n\
|
||||
strh r3, [r4, 0x10]\n\
|
||||
strh r2, [r4, 0x12]\n\
|
||||
strh r3, [r4, 0x14]\n\
|
||||
strh r2, [r4, 0x16]\n\
|
||||
ldrb r0, [r5, 0x8]\n\
|
||||
movs r6, 0xF\n\
|
||||
adds r1, r6, 0\n\
|
||||
ands r1, r0\n\
|
||||
ldrb r2, [r4, 0xB]\n\
|
||||
movs r0, 0x10\n\
|
||||
negs r0, r0\n\
|
||||
mov r8, r0\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4, 0xB]\n\
|
||||
ldrb r1, [r5, 0x8]\n\
|
||||
lsls r1, 4\n\
|
||||
ands r0, r6\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4, 0xB]\n\
|
||||
ldrb r1, [r5, 0xA]\n\
|
||||
lsls r1, 28\n\
|
||||
movs r0, 0xF\n\
|
||||
mov r9, r0\n\
|
||||
lsrs r1, 28\n\
|
||||
ldrb r2, [r4, 0x19]\n\
|
||||
mov r0, r8\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4, 0x19]\n\
|
||||
ldrb r1, [r5, 0xA]\n\
|
||||
lsrs r1, 4\n\
|
||||
lsls r1, 4\n\
|
||||
ands r0, r6\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4, 0x19]\n\
|
||||
ldrh r0, [r5, 0xC]\n\
|
||||
strb r0, [r4, 0x7]\n\
|
||||
ldrh r0, [r5, 0xE]\n\
|
||||
strb r0, [r4, 0x1D]\n\
|
||||
ldr r1, _0805E230 @ =gInitialMovementTypeFacingDirections\n\
|
||||
ldrb r0, [r5, 0x9]\n\
|
||||
adds r0, r1\n\
|
||||
ldrb r1, [r0]\n\
|
||||
adds r0, r4, 0\n\
|
||||
adds r0, 0x20\n\
|
||||
strb r1, [r0]\n\
|
||||
ldrb r1, [r0]\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl SetObjectEventDirection\n\
|
||||
adds r0, r4, 0\n\
|
||||
bl SetObjectEventDynamicGraphicsId\n\
|
||||
ldr r1, _0805E234 @ =gRangedMovementTypes\n\
|
||||
ldrb r0, [r4, 0x6]\n\
|
||||
adds r0, r1\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0805E21C\n\
|
||||
ldrb r2, [r4, 0x19]\n\
|
||||
adds r0, r6, 0\n\
|
||||
ands r0, r2\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0805E204\n\
|
||||
lsls r0, r2, 28\n\
|
||||
lsrs r0, 28\n\
|
||||
adds r0, 0x1\n\
|
||||
mov r1, r9\n\
|
||||
ands r0, r1\n\
|
||||
mov r1, r8\n\
|
||||
ands r1, r2\n\
|
||||
orrs r1, r0\n\
|
||||
strb r1, [r4, 0x19]\n\
|
||||
_0805E204:\n\
|
||||
ldrb r2, [r4, 0x19]\n\
|
||||
movs r0, 0xF0\n\
|
||||
ands r0, r2\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0805E21C\n\
|
||||
lsrs r1, r2, 4\n\
|
||||
adds r1, 0x1\n\
|
||||
lsls r1, 4\n\
|
||||
adds r0, r6, 0\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r4, 0x19]\n\
|
||||
_0805E21C:\n\
|
||||
mov r0, sp\n\
|
||||
ldrb r0, [r0]\n\
|
||||
_0805E220:\n\
|
||||
add sp, 0xC\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r1}\n\
|
||||
bx r1\n\
|
||||
.align 2, 0\n\
|
||||
_0805E230: .4byte gInitialMovementTypeFacingDirections\n\
|
||||
_0805E234: .4byte gRangedMovementTypes\n\
|
||||
");
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool8 sub_805E238(struct ObjectEventTemplate *template, u8 var, s16 x, s16 y)
|
||||
{
|
||||
|
|
@ -2163,9 +1936,7 @@ static void sub_805EE3C(u8 objectEventId, s16 x, s16 y)
|
|||
#undef i
|
||||
|
||||
objectEvent = &gObjectEvents[objectEventId];
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"r5");
|
||||
#endif
|
||||
objectEvent++;objectEvent--; // fakematch
|
||||
subspriteTables = NULL;
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
|
||||
spriteFrameImage.size = graphicsInfo->size;
|
||||
|
|
@ -5140,19 +4911,19 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv
|
|||
s16 top;
|
||||
s16 bottom;
|
||||
|
||||
if (objectEvent->range.as_nybbles.x != 0)
|
||||
if (objectEvent->rangeX != 0)
|
||||
{
|
||||
left = objectEvent->initialCoords.x - objectEvent->range.as_nybbles.x;
|
||||
right = objectEvent->initialCoords.x + objectEvent->range.as_nybbles.x;
|
||||
left = objectEvent->initialCoords.x - objectEvent->rangeX;
|
||||
right = objectEvent->initialCoords.x + objectEvent->rangeX;
|
||||
if (left > x || right < x)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
if (objectEvent->range.as_nybbles.y != 0)
|
||||
if (objectEvent->rangeY != 0)
|
||||
{
|
||||
top = objectEvent->initialCoords.y - objectEvent->range.as_nybbles.y;
|
||||
bottom = objectEvent->initialCoords.y + objectEvent->range.as_nybbles.y;
|
||||
top = objectEvent->initialCoords.y - objectEvent->rangeY;
|
||||
bottom = objectEvent->initialCoords.y + objectEvent->rangeY;
|
||||
if (top > y || bottom < y)
|
||||
{
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include "constants/metatile_labels.h"
|
||||
|
||||
#define CUT_GRASS_SPRITE_COUNT 8
|
||||
#define CUT_SIDE 3
|
||||
|
||||
static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
|
||||
static EWRAM_DATA bool8 sScheduleOpenDottedHole = FALSE;
|
||||
|
|
@ -133,25 +134,18 @@ bool8 SetUpFieldMove_Cut(void)
|
|||
gPostMenuFieldCallback = FieldCallback_CutTree;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// FIXME: this fakematch
|
||||
#ifndef NONMATCHING
|
||||
register s32 neg1 asm("r8");
|
||||
#else
|
||||
s32 neg1;
|
||||
#endif
|
||||
struct MapPosition *pos;
|
||||
PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
|
||||
|
||||
for (i = 0, pos = &gPlayerFacingPosition, neg1 = 0xFFFF; i < 3; i++)
|
||||
|
||||
for (i = 0; i < CUT_SIDE; i++)
|
||||
{
|
||||
|
||||
y = i + neg1 + pos->y;
|
||||
for (j = 0; j < 3; j++)
|
||||
y = gPlayerFacingPosition.y - 1 + i;
|
||||
for (j = 0; j < CUT_SIDE; j++)
|
||||
{
|
||||
x = j + neg1 + pos->x;
|
||||
if (MapGridGetZCoordAt(x, y) == pos->height)
|
||||
x = gPlayerFacingPosition.x - 1 + j;
|
||||
if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
|
||||
{
|
||||
if (MetatileAtCoordsIsGrassTile(x, y) == TRUE)
|
||||
{
|
||||
|
|
@ -207,26 +201,20 @@ bool8 FldEff_CutGrass(void)
|
|||
{
|
||||
u8 i, j;
|
||||
s16 x, y;
|
||||
// FIXME: this fakematch
|
||||
#ifndef NONMATCHING
|
||||
register s32 neg1 asm("r9");
|
||||
#else
|
||||
s32 neg1;
|
||||
#endif
|
||||
struct MapPosition *pos;
|
||||
u8 pos;
|
||||
|
||||
i = 0;
|
||||
PlaySE(SE_M_CUT);
|
||||
pos = gFieldEffectArguments[1] - 1;
|
||||
PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
|
||||
|
||||
for (i = 0, pos = &gPlayerFacingPosition, neg1 = 0xFFFF; i < 3; i++)
|
||||
for (i = 0; i < CUT_SIDE; i++)
|
||||
{
|
||||
|
||||
y = i + neg1 + pos->y;
|
||||
for (j = 0; j < 3; j++)
|
||||
y = gPlayerFacingPosition.y - 1 + i;
|
||||
for (j = 0; j < CUT_SIDE; j++)
|
||||
{
|
||||
x = j + neg1 + pos->x;
|
||||
if (MapGridGetZCoordAt(x, y) == pos->height)
|
||||
x = gPlayerFacingPosition.x - 1 + j;
|
||||
if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
|
||||
{
|
||||
if (MetatileAtCoordsIsGrassTile(x, y) == TRUE)
|
||||
{
|
||||
|
|
|
|||
39
src/flying.c
39
src/flying.c
|
|
@ -26,7 +26,7 @@ static void sub_80B198C(u8 taskId);
|
|||
static void sub_80B1A9C(struct Sprite *sprite);
|
||||
static void sub_80B1BF8(struct Sprite *sprite);
|
||||
static void sub_80B1CC0(struct Sprite *sprite);
|
||||
static void sub_80B1F94(struct Sprite *sprite);
|
||||
static void AnimFallingFeather_Step(struct Sprite *sprite);
|
||||
static void sub_80B268C(struct Sprite *sprite);
|
||||
static void sub_80B2820(struct Sprite *sprite);
|
||||
static void sub_80B2A50(struct Sprite *sprite);
|
||||
|
|
@ -532,7 +532,7 @@ static void sub_80B1CC0(struct Sprite *sprite)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_80B1D3C(struct Sprite *sprite)
|
||||
void DestroyAnimSpriteAfterTimer(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0]-- <= 0)
|
||||
{
|
||||
|
|
@ -631,15 +631,14 @@ static void AnimFallingFeather(struct Sprite *sprite)
|
|||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
}
|
||||
sprite->callback = sub_80B1F94;
|
||||
sprite->callback = AnimFallingFeather_Step;
|
||||
}
|
||||
|
||||
static void sub_80B1F94(struct Sprite *sprite)
|
||||
static void AnimFallingFeather_Step(struct Sprite *sprite)
|
||||
{
|
||||
u8 matrixNum, sinIndex;
|
||||
s16 sinVal = 0;
|
||||
struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
|
||||
|
||||
if (data->unk0_0a)
|
||||
{
|
||||
if (data->unk1-- % 256 == 0)
|
||||
|
|
@ -653,13 +652,13 @@ static void sub_80B1F94(struct Sprite *sprite)
|
|||
switch (data->unk2 / 64)
|
||||
{
|
||||
case 0:
|
||||
if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here
|
||||
if ((u8)data->unk0_1 == 1) //casts to u8 here are necessary for matching
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 3)
|
||||
else if ((u8)data->unk0_1 == 3)
|
||||
{
|
||||
data->unk0_0b ^= 1;
|
||||
data->unk0_0a = 1;
|
||||
|
|
@ -706,13 +705,13 @@ static void sub_80B1F94(struct Sprite *sprite)
|
|||
data->unk0_1 = 0;
|
||||
break;
|
||||
case 1:
|
||||
if (data->unk0_1 << 24 >> 24 == 0)
|
||||
if ((u8)data->unk0_1 == 0)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 2)
|
||||
else if ((u8)data->unk0_1 == 2)
|
||||
{
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
|
|
@ -757,13 +756,13 @@ static void sub_80B1F94(struct Sprite *sprite)
|
|||
data->unk0_1 = 1;
|
||||
break;
|
||||
case 2:
|
||||
if (data->unk0_1 << 24 >> 24 == 3)
|
||||
if ((u8)data->unk0_1 == 3)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 1)
|
||||
else if ((u8)data->unk0_1 == 1)
|
||||
{
|
||||
data->unk0_0a = 1;
|
||||
data->unk1 = 0;
|
||||
|
|
@ -808,11 +807,11 @@ static void sub_80B1F94(struct Sprite *sprite)
|
|||
data->unk0_1 = 2;
|
||||
break;
|
||||
case 3:
|
||||
if (data->unk0_1 << 24 >> 24 == 2)
|
||||
if ((u8)data->unk0_1 == 2)
|
||||
{
|
||||
data->unk0_0d = 1;
|
||||
}
|
||||
else if (data->unk0_1 << 24 >> 24 == 0)
|
||||
else if ((u8)data->unk0_1 == 0)
|
||||
{
|
||||
data->unk0_0b ^= 1;
|
||||
data->unk0_0a = 1;
|
||||
|
|
@ -858,26 +857,28 @@ static void sub_80B1F94(struct Sprite *sprite)
|
|||
data->unk0_1 = 3;
|
||||
break;
|
||||
}
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"r8");
|
||||
#endif
|
||||
sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8;
|
||||
|
||||
sprite->pos2.x = ((s32)data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8;
|
||||
matrixNum = sprite->oam.matrixNum;
|
||||
|
||||
sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
|
||||
sinVal = gSineTable[sinIndex];
|
||||
|
||||
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
gOamMatrices[matrixNum].c = -sinVal;
|
||||
|
||||
data->unk8 += data->unk6;
|
||||
sprite->pos1.y = data->unk8 >> 8;
|
||||
if (data->unk4 & 0x8000)
|
||||
data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF;
|
||||
else
|
||||
data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
|
||||
|
||||
if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
|
||||
{
|
||||
sprite->data[0] = 0;
|
||||
sprite->callback = sub_80B1D3C;
|
||||
sprite->callback = DestroyAnimSpriteAfterTimer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -983,7 +984,7 @@ static void sub_80B268C(struct Sprite *sprite)
|
|||
x = (((u16 *)&fData)[7] << 1);
|
||||
y = (((u16 *)tData)[7] & 1);
|
||||
((u16 *)tData)[7] = y | x;
|
||||
sprite->callback = sub_80B1F94;
|
||||
sprite->callback = AnimFallingFeather_Step;
|
||||
}
|
||||
|
||||
static void AnimWhirlwindLine(struct Sprite *sprite)
|
||||
|
|
|
|||
40
src/menu2.c
40
src/menu2.c
|
|
@ -507,8 +507,8 @@ static void sub_812E768(const struct Bitmap *src, struct Bitmap *dst, u16 srcX,
|
|||
{
|
||||
s32 loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY;
|
||||
u16 toOrr;
|
||||
const u8 *pixelsSrc;
|
||||
u16 *pixelsDst;
|
||||
u8 *pixelsSrc;
|
||||
u8 *pixelsDst;
|
||||
|
||||
if (dst->width - dstX < width)
|
||||
xEnd = dst->width - dstX + srcX;
|
||||
|
|
@ -525,51 +525,49 @@ static void sub_812E768(const struct Bitmap *src, struct Bitmap *dst, u16 srcX,
|
|||
{
|
||||
for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
|
||||
{
|
||||
#ifndef NONMATCHING
|
||||
asm("":::"r4");
|
||||
#endif
|
||||
pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
|
||||
pixelsDst = (u16 *)(dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B));
|
||||
pixelsSrc = (u8 *)(src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B));
|
||||
pixelsDst = (u8 *)(dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B));
|
||||
|
||||
if ((uintptr_t)pixelsDst & 0x1)
|
||||
if ((u32)pixelsDst & 0x1)
|
||||
{
|
||||
pixelsDst = (void *)pixelsDst - 1;
|
||||
pixelsDst--;
|
||||
if (loopDstX & 0x1)
|
||||
{
|
||||
toOrr = *pixelsDst & 0x0fff;
|
||||
toOrr = *(vu16 *)pixelsDst & 0x0fff;
|
||||
if (loopSrcX & 0x1)
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 8);
|
||||
toOrr |= ((*pixelsSrc & 0xf0) << 8);
|
||||
else
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 12);
|
||||
toOrr |= ((*pixelsSrc & 0x0f) << 12);
|
||||
}
|
||||
else
|
||||
{
|
||||
toOrr = *pixelsDst & 0xf0ff;
|
||||
toOrr = *(vu16 *)pixelsDst & 0xf0ff;
|
||||
if (loopSrcX & 0x1)
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 4);
|
||||
toOrr |= ((*pixelsSrc & 0xf0) << 4);
|
||||
else
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 8);
|
||||
toOrr |= ((*pixelsSrc & 0x0f) << 8);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (loopDstX & 1)
|
||||
{
|
||||
toOrr = *pixelsDst & 0xff0f;
|
||||
toOrr = *(vu16 *)pixelsDst & 0xff0f;
|
||||
if (loopSrcX & 1)
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 0);
|
||||
toOrr |= ((*pixelsSrc & 0xf0) << 0);
|
||||
else
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 4);
|
||||
toOrr |= ((*pixelsSrc & 0x0f) << 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
toOrr = *pixelsDst & 0xfff0;
|
||||
toOrr = *(vu16 *)pixelsDst & 0xfff0;
|
||||
if (loopSrcX & 1)
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0xf0) >> 4);
|
||||
toOrr |= ((*pixelsSrc & 0xf0) >> 4);
|
||||
else
|
||||
*pixelsDst = toOrr | ((*pixelsSrc & 0x0f) >> 0);
|
||||
toOrr |= ((*pixelsSrc & 0x0f) >> 0);
|
||||
}
|
||||
}
|
||||
*(vu16 *)pixelsDst = toOrr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1123,7 +1123,7 @@ void task_add_00_mystery_gift(void)
|
|||
void task00_mystery_gift(u8 taskId)
|
||||
{
|
||||
struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data;
|
||||
u32 sp0;
|
||||
u32 sp0, flag;
|
||||
const u8 * r1;
|
||||
|
||||
switch (data->state)
|
||||
|
|
@ -1291,7 +1291,8 @@ void task00_mystery_gift(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 9:
|
||||
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()))
|
||||
flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer());
|
||||
switch (flag)
|
||||
{
|
||||
case 0:
|
||||
mevent_client_set_param(0);
|
||||
|
|
@ -1318,7 +1319,8 @@ void task00_mystery_gift(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 11:
|
||||
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard))
|
||||
flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard);
|
||||
switch (flag)
|
||||
{
|
||||
case 0:
|
||||
if (CheckReceivedGiftFromWonderCard() == TRUE)
|
||||
|
|
@ -1345,7 +1347,8 @@ void task00_mystery_gift(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 12:
|
||||
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift))
|
||||
flag = mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift);
|
||||
switch (flag)
|
||||
{
|
||||
case 0:
|
||||
mevent_client_set_param(0);
|
||||
|
|
@ -1382,12 +1385,6 @@ void task00_mystery_gift(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 15:
|
||||
{
|
||||
#ifndef NONMATCHING
|
||||
register bool32 flag asm("r1");
|
||||
#else
|
||||
bool32 flag;
|
||||
#endif
|
||||
r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId);
|
||||
if (r1 == NULL)
|
||||
{
|
||||
|
|
@ -1425,7 +1422,6 @@ void task00_mystery_gift(u8 taskId)
|
|||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 16:
|
||||
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -850,7 +850,7 @@ static void AnimHitSplatPersistent(struct Sprite *sprite)
|
|||
InitSpritePosToAnimTarget(sprite, TRUE);
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
||||
StoreSpriteCallbackInData6(sprite, sub_80B1D3C);
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSpriteAfterTimer);
|
||||
}
|
||||
|
||||
static void AnimHitSplatHandleInvert(struct Sprite *sprite)
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ static void CreateConfirmLeaveTradeRoomPrompt(void);
|
|||
static void InitLinkRoomStartMenuScript(void);
|
||||
static void InitMenuBasedScript(const u8 *script);
|
||||
static void sub_80581DC(const u8 *script);
|
||||
static void sub_8058230(void);
|
||||
static void RunTerminateLinkScript(void);
|
||||
static void SpawnLinkPlayerObjectEvent(u8 i, s16 x, s16 y, u8 gender);
|
||||
static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s16 y);
|
||||
static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
|
||||
|
|
@ -2673,7 +2673,7 @@ static void HandleLinkPlayerKeyInput(u32 playerId, u16 key, struct TradeRoomPlay
|
|||
if (trainer->isLocalPlayer)
|
||||
{
|
||||
SetKeyInterceptCallback(KeyInterCB_DeferToEventScript);
|
||||
sub_8058230();
|
||||
RunTerminateLinkScript();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -3170,7 +3170,7 @@ static void InitMenuBasedScript(const u8 *script)
|
|||
ScriptContext2_Enable();
|
||||
}
|
||||
|
||||
static void sub_8058230(void)
|
||||
static void RunTerminateLinkScript(void)
|
||||
{
|
||||
ScriptContext1_SetupScript(TradeCenter_TerminateLink);
|
||||
ScriptContext2_Enable();
|
||||
|
|
@ -3260,7 +3260,14 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent)
|
|||
memset(objEvent, 0, sizeof(struct ObjectEvent));
|
||||
}
|
||||
|
||||
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4)
|
||||
// Note: Emerald reuses the direction and range variables during Link mode
|
||||
// as special gender and direction values. The types and placement
|
||||
// conflict with the usual Event Object struct, thus the definitions.
|
||||
#define linkGender(obj) obj->singleMovementActive
|
||||
// not even one can reference *byte* aligned bitfield members...
|
||||
#define linkDirection(obj) ((u8*)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX
|
||||
|
||||
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender)
|
||||
{
|
||||
u8 objEventId = GetFirstInactiveObjectEventId();
|
||||
struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
|
||||
|
|
@ -3275,8 +3282,8 @@ static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4)
|
|||
linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FREE;
|
||||
|
||||
objEvent->active = TRUE;
|
||||
objEvent->singleMovementActive = a4;
|
||||
objEvent->range.as_byte = 2;
|
||||
linkGender(objEvent) = gender;
|
||||
linkDirection(objEvent) = DIR_NORTH;
|
||||
objEvent->spriteId = MAX_SPRITES;
|
||||
|
||||
InitLinkPlayerObjectEventPos(objEvent, x, y);
|
||||
|
|
@ -3293,17 +3300,17 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1
|
|||
ObjectEventUpdateZCoord(objEvent);
|
||||
}
|
||||
|
||||
static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 range)
|
||||
static void SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir)
|
||||
{
|
||||
if (gLinkPlayerObjectEvents[linkPlayerId].active)
|
||||
{
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
objEvent->range.as_byte = range;
|
||||
linkDirection(objEvent) = dir;
|
||||
}
|
||||
}
|
||||
|
||||
static void DestroyLinkPlayerOBject(u8 linkPlayerId)
|
||||
static void DestroyLinkPlayerObject(u8 linkPlayerId)
|
||||
{
|
||||
struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId];
|
||||
u8 objEventId = linkPlayerObjEvent->objEventId;
|
||||
|
|
@ -3334,7 +3341,7 @@ static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId)
|
|||
{
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
return objEvent->range.as_byte;
|
||||
return linkDirection(objEvent);
|
||||
}
|
||||
|
||||
static u8 GetLinkPlayerElevation(u8 linkPlayerId)
|
||||
|
|
@ -3393,35 +3400,35 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing)
|
|||
}
|
||||
}
|
||||
|
||||
static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
|
||||
static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
|
||||
{
|
||||
return sLinkPlayerFacingHandlers[a3](linkPlayerObjEvent, objEvent, a3);
|
||||
return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir);
|
||||
}
|
||||
|
||||
static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
|
||||
static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
|
||||
{
|
||||
return FACING_UP;
|
||||
}
|
||||
|
||||
// Duplicate Function
|
||||
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
|
||||
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
|
||||
{
|
||||
return sLinkPlayerFacingHandlers[a3](linkPlayerObjEvent, objEvent, a3);
|
||||
return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir);
|
||||
}
|
||||
|
||||
static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
|
||||
static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
|
||||
static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
|
||||
{
|
||||
s16 x, y;
|
||||
|
||||
objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
|
||||
ObjectEventMoveDestCoords(objEvent, objEvent->range.as_byte, &x, &y);
|
||||
linkDirection(objEvent) = FlipVerticalAndClearForced(dir, linkDirection(objEvent));
|
||||
ObjectEventMoveDestCoords(objEvent, linkDirection(objEvent), &x, &y);
|
||||
|
||||
if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, objEvent->range.as_byte, x, y))
|
||||
if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -3434,9 +3441,9 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer
|
|||
}
|
||||
}
|
||||
|
||||
static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3)
|
||||
static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir)
|
||||
{
|
||||
objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
|
||||
linkDirection(objEvent) = FlipVerticalAndClearForced(dir, linkDirection(objEvent));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -3450,7 +3457,7 @@ static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent
|
|||
{
|
||||
objEvent->directionSequenceIndex--;
|
||||
linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FROZEN;
|
||||
MoveCoords(objEvent->range.as_byte, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
|
||||
MoveCoords(linkDirection(objEvent), &objEvent->initialCoords.x, &objEvent->initialCoords.y);
|
||||
if (!objEvent->directionSequenceIndex)
|
||||
{
|
||||
ShiftStillObjectEventCoords(objEvent);
|
||||
|
|
@ -3510,12 +3517,12 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
|
|||
if (gameVersion == VERSION_FIRE_RED || gameVersion == VERSION_LEAF_GREEN)
|
||||
{
|
||||
objEvent->spriteId = AddPseudoObjectEvent(
|
||||
GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, objEvent->singleMovementActive),
|
||||
GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)),
|
||||
SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
}
|
||||
|
||||
sprite = &gSprites[objEvent->spriteId];
|
||||
|
|
@ -3535,9 +3542,9 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite)
|
|||
sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation);
|
||||
|
||||
if (!linkPlayerObjEvent->movementMode != MOVEMENT_MODE_FREE)
|
||||
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte));
|
||||
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(linkDirection(objEvent)));
|
||||
else
|
||||
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte));
|
||||
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(linkDirection(objEvent)));
|
||||
|
||||
UpdateObjectEventSpriteVisibility(sprite, 0);
|
||||
if (objEvent->triggerGroundEffectsOnMove)
|
||||
|
|
|
|||
|
|
@ -1038,14 +1038,8 @@ void PSA_UseItem_CleanUpForCancel(void)
|
|||
|
||||
static void InitItemIconSpriteState(struct PokemonSpecialAnimScene * scene, struct Sprite * sprite, u8 closeness)
|
||||
{
|
||||
u16 species;
|
||||
u16 species, x, y;
|
||||
u32 personality;
|
||||
#ifndef NONMATCHING
|
||||
register int x asm("r4"); // FIXME
|
||||
#else
|
||||
int x;
|
||||
#endif
|
||||
u8 y;
|
||||
if (closeness == 3)
|
||||
{
|
||||
sprite->pos1.x = 120;
|
||||
|
|
@ -1060,22 +1054,33 @@ static void InitItemIconSpriteState(struct PokemonSpecialAnimScene * scene, stru
|
|||
sprite->pos1.y += 4;
|
||||
species = PSA_GetMonSpecies();
|
||||
personality = PSA_GetMonPersonality();
|
||||
if (PSA_GetAnimType() == 4)
|
||||
switch (PSA_GetAnimType())
|
||||
{
|
||||
x = Menu2_GetMonSpriteAnchorCoord(species, personality, 0);
|
||||
y = Menu2_GetMonSpriteAnchorCoord(species, personality, 1);
|
||||
case 4:
|
||||
{
|
||||
x = Menu2_GetMonSpriteAnchorCoord(species, personality, 0);
|
||||
y = Menu2_GetMonSpriteAnchorCoord(species, personality, 1);
|
||||
if (x == 0xFF)
|
||||
x = 0;
|
||||
if (y == 0xFF)
|
||||
y = 0;
|
||||
sprite->data[6] = x;
|
||||
sprite->data[7] = y;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
x = Menu2_GetMonSpriteAnchorCoord(species, personality, 3);
|
||||
y = Menu2_GetMonSpriteAnchorCoord(species, personality, 4);
|
||||
if (x == 0xFF)
|
||||
x = 0;
|
||||
if (y == 0xFF)
|
||||
y = 0;
|
||||
sprite->data[6] = x;
|
||||
sprite->data[7] = y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x = Menu2_GetMonSpriteAnchorCoord(species, personality, 3);
|
||||
y = Menu2_GetMonSpriteAnchorCoord(species, personality, 4);
|
||||
}
|
||||
if (x == 0xFF)
|
||||
x = 0;
|
||||
if (y == 0xFF)
|
||||
y = 0;
|
||||
sprite->data[6] = x;
|
||||
sprite->data[7] = y;
|
||||
ItemSpriteZoom_UpdateYPos(sprite, closeness);
|
||||
}
|
||||
|
||||
|
|
@ -1254,23 +1259,14 @@ static void StopMakingOutwardSpiralDots(void)
|
|||
static void Task_UseItem_OutwardSpiralDots(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
struct Sprite * sprite;
|
||||
int x;
|
||||
#ifndef NONMATCHING
|
||||
register int y asm("r10"); // FIXME
|
||||
#else
|
||||
int y;
|
||||
#endif
|
||||
int x2;
|
||||
int y2;
|
||||
int ampl;
|
||||
u8 spriteId;
|
||||
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
if (tTimer == 0)
|
||||
{
|
||||
sprite = PSA_GetSceneWork()->itemIconSprite;
|
||||
u32 spriteId, x, y, x2, y2, ampl;
|
||||
struct Sprite * sprite = PSA_GetSceneWork()->itemIconSprite;
|
||||
x = sprite->pos1.x + sprite->pos2.x;
|
||||
y = sprite->pos1.y + sprite->pos2.y;
|
||||
ampl = (PSAScene_RandomFromTask(taskId) % 21) + 70;
|
||||
|
|
|
|||
|
|
@ -582,18 +582,16 @@ void sub_8113ABC(const u16 *a0)
|
|||
|
||||
bool8 sub_8113AE8(const u16 *a0)
|
||||
{
|
||||
#ifndef NONMATCHING
|
||||
register const u16 *r0 asm("r0") = a0;
|
||||
#else
|
||||
const u16 *r0 = a0;
|
||||
#endif
|
||||
|
||||
if (r0 == NULL || r0[1] > sQuestLogCursor)
|
||||
if (a0 == NULL) // checks must be separate to match
|
||||
return FALSE;
|
||||
if (r0[1] > sQuestLogCursor)
|
||||
return FALSE;
|
||||
|
||||
sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0);
|
||||
gUnknown_203B044.id = a0[0];
|
||||
gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12;
|
||||
sQuestLogEventTextBufferCBs[(r0[0] & 0xFFF)](a0);
|
||||
gUnknown_203B044.id = r0[0];
|
||||
gUnknown_203B044.unk_1 = (r0[0] & 0xF000) >> 12;
|
||||
if (gUnknown_203B044.unk_1 != 0)
|
||||
gUnknown_203B044.unk_2 = 1;
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -93,8 +93,8 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str
|
|||
{
|
||||
gObjectEvents[i].initialCoords.x = templates[j].x + 7;
|
||||
gObjectEvents[i].initialCoords.y = templates[j].y + 7;
|
||||
gObjectEvents[i].range.as_nybbles.x = templates[j].movementRangeX;
|
||||
gObjectEvents[i].range.as_nybbles.y = templates[j].movementRangeY;
|
||||
gObjectEvents[i].rangeX = templates[j].movementRangeX;
|
||||
gObjectEvents[i].rangeY = templates[j].movementRangeY;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -219,15 +219,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap
|
|||
}
|
||||
|
||||
// preserve mapobj_unk_19 before clearing.
|
||||
unk19_temp = trainerObj->range.as_nybbles.x;
|
||||
unk19b_temp = trainerObj->range.as_nybbles.y;
|
||||
trainerObj->range.as_nybbles.x = 0;
|
||||
trainerObj->range.as_nybbles.y = 0;
|
||||
unk19_temp = trainerObj->rangeX;
|
||||
unk19b_temp = trainerObj->rangeY;
|
||||
trainerObj->rangeX = 0;
|
||||
trainerObj->rangeY = 0;
|
||||
|
||||
collision = GetCollisionAtCoords(trainerObj, x, y, direction);
|
||||
|
||||
trainerObj->range.as_nybbles.x = unk19_temp;
|
||||
trainerObj->range.as_nybbles.y = unk19b_temp;
|
||||
trainerObj->rangeX = unk19_temp;
|
||||
trainerObj->rangeY = unk19b_temp;
|
||||
if (collision == 4)
|
||||
return approachDistance;
|
||||
|
||||
|
|
|
|||
|
|
@ -651,6 +651,9 @@ void VsSeekerResetObjectMovementAfterChargeComplete(void)
|
|||
|
||||
bool8 UpdateVsSeekerStepCounter(void)
|
||||
{
|
||||
u8 x;
|
||||
x = 0;
|
||||
|
||||
if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
|
||||
{
|
||||
if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100)
|
||||
|
|
@ -659,19 +662,12 @@ bool8 UpdateVsSeekerStepCounter(void)
|
|||
|
||||
if (FlagGet(FLAG_SYS_VS_SEEKER_CHARGING) == TRUE)
|
||||
{
|
||||
u8 x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
|
||||
u32 r4 = 0xFF;
|
||||
|
||||
if (x < 100)
|
||||
if (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) < 100)
|
||||
{
|
||||
x++;
|
||||
#ifndef NONMATCHING // fool the compiler that r4 has been changed
|
||||
asm("":"=r"(r4));
|
||||
#endif
|
||||
x = (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) + 1);
|
||||
gSaveBlock1Ptr->trainerRematchStepCounter = (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) | (x << 8);
|
||||
}
|
||||
x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & r4;
|
||||
if (x == 100)
|
||||
if (((gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF) == 100)
|
||||
{
|
||||
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
|
||||
VsSeekerResetChargingStepCounter();
|
||||
|
|
@ -860,16 +856,15 @@ static u8 CanUseVsSeeker(void)
|
|||
static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
|
||||
{
|
||||
u16 r8 = 0;
|
||||
u16 rval = 0;
|
||||
u8 r7;
|
||||
u8 sp0 = 0;
|
||||
u8 r0 = 0;
|
||||
s32 vsSeekerIdx;
|
||||
u8 *r2;
|
||||
#ifndef NONMATCHING
|
||||
register u32 r3 asm("r3");
|
||||
register s32 r0_ asm("r0");
|
||||
asm("":::"r10", "r8", "r6", "r4");
|
||||
#endif
|
||||
vsSeekerIdx = 0;
|
||||
|
||||
for (vsSeekerIdx = 0; sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF; vsSeekerIdx++)
|
||||
while (sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF)
|
||||
{
|
||||
if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[vsSeekerIdx]) == 1)
|
||||
{
|
||||
|
|
@ -877,59 +872,42 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
|
|||
if (!HasTrainerBeenFought(r8))
|
||||
{
|
||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerUnfought);
|
||||
sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx += 0;
|
||||
sVsSeeker->trainerHasNotYetBeenFought = 1;
|
||||
vsSeekerIdx++;
|
||||
continue;
|
||||
}
|
||||
r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
|
||||
if (r7 == 0)
|
||||
{
|
||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
||||
sVsSeeker->trainerDoesNotWantRematch = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 r7 = GetNextAvailableRematchTrainer(a0, r8, &sp0);
|
||||
if (r7 == 0)
|
||||
rval = Random() % 100;
|
||||
r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
|
||||
if (r0 == 2)
|
||||
rval = 100;
|
||||
else if (r0 == 1)
|
||||
rval = 0;
|
||||
if (rval < 30)
|
||||
{
|
||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
||||
#ifdef NONMATCHING
|
||||
sVsSeeker->trainerDoesNotWantRematch = 1;
|
||||
#else
|
||||
r2 = (u8 *)sVsSeeker;
|
||||
r3 = 0x431;
|
||||
asm("":::"r1");
|
||||
r2 = &r2[r3];
|
||||
*(r2) |= 2;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 rval = Random() % 100;
|
||||
u8 r0 = GetCurVsSeekerResponse(vsSeekerIdx, r8);
|
||||
if (r0 == 2)
|
||||
rval = 100;
|
||||
else if (r0 == 1)
|
||||
rval = 0;
|
||||
if (rval < 30)
|
||||
{
|
||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
|
||||
#ifdef NONMATCHING
|
||||
sVsSeeker->trainerDoesNotWantRematch = 1;
|
||||
#else
|
||||
r2 = (u8 *)sVsSeeker;
|
||||
r0_ = 0x431;
|
||||
asm("":::"r1");
|
||||
r2 = &r2[r0_];
|
||||
*(r2) |= 2;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[vsSeekerIdx].localId] = r7;
|
||||
ShiftStillObjectEventCoords(&gObjectEvents[sVsSeeker->trainerInfo[vsSeekerIdx].objectEventId]);
|
||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerRematch);
|
||||
sVsSeeker->trainerIdxArray[sVsSeeker->numRematchableTrainers] = r8;
|
||||
sVsSeeker->runningBehaviourEtcArray[sVsSeeker->numRematchableTrainers] = GetRunningBehaviorFromGraphicsId(sVsSeeker->trainerInfo[vsSeekerIdx].graphicsId);
|
||||
sVsSeeker->numRematchableTrainers++;
|
||||
sVsSeeker->trainerWantsRematch = 1;
|
||||
}
|
||||
gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[vsSeekerIdx].localId] = r7;
|
||||
ShiftStillObjectEventCoords(&gObjectEvents[sVsSeeker->trainerInfo[vsSeekerIdx].objectEventId]);
|
||||
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerRematch);
|
||||
sVsSeeker->trainerIdxArray[sVsSeeker->numRematchableTrainers] = r8;
|
||||
sVsSeeker->runningBehaviourEtcArray[sVsSeeker->numRematchableTrainers] = GetRunningBehaviorFromGraphicsId(sVsSeeker->trainerInfo[vsSeekerIdx].graphicsId);
|
||||
sVsSeeker->numRematchableTrainers++;
|
||||
sVsSeeker->trainerWantsRematch = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
vsSeekerIdx++;
|
||||
}
|
||||
|
||||
if (sVsSeeker->trainerWantsRematch)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user