Merge branch 'master' into multiplayer-stuff
This commit is contained in:
@@ -10,21 +10,20 @@
|
||||
#include "constants/maps.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/species.h"
|
||||
|
||||
extern void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId); // fieldmap
|
||||
extern u8 GetCursorSelectionMonId(void);
|
||||
extern u8 oei_task_add(void);
|
||||
#include "fieldmap.h"
|
||||
#include "party_menu.h"
|
||||
#include "fldeff.h"
|
||||
|
||||
// why do this, GF?
|
||||
enum
|
||||
{
|
||||
STRENGTH_PUZZLE,
|
||||
FLY_PUZZLE
|
||||
REGIROCK_PUZZLE,
|
||||
REGISTEEL_PUZZLE
|
||||
};
|
||||
|
||||
EWRAM_DATA static u8 sBraillePuzzleCallbackFlag = 0;
|
||||
|
||||
static const u8 gUnknown_085EFE74[][2] =
|
||||
static const u8 gRegicePathCoords[][2] =
|
||||
{
|
||||
{0x04, 0x15},
|
||||
{0x05, 0x15},
|
||||
@@ -65,14 +64,14 @@ static const u8 gUnknown_085EFE74[][2] =
|
||||
};
|
||||
|
||||
void SealedChamberShakingEffect(u8);
|
||||
void sub_8179860(void);
|
||||
void sub_8179944(void);
|
||||
void DoBrailleRegirockEffect(void);
|
||||
void DoBrailleRegisteelEffect(void);
|
||||
|
||||
bool8 ShouldDoBrailleDigEffect(void)
|
||||
{
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_DIG)
|
||||
&& (gSaveBlock1Ptr->location.mapGroup == 0x18
|
||||
&& gSaveBlock1Ptr->location.mapNum == 0x47))
|
||||
&& (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEALED_CHAMBER_OUTER_ROOM)
|
||||
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEALED_CHAMBER_OUTER_ROOM)))
|
||||
{
|
||||
if (gSaveBlock1Ptr->pos.x == 10 && gSaveBlock1Ptr->pos.y == 3)
|
||||
return TRUE;
|
||||
@@ -87,12 +86,12 @@ bool8 ShouldDoBrailleDigEffect(void)
|
||||
|
||||
void DoBrailleDigEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(16, 8, 554);
|
||||
MapGridSetMetatileIdAt(17, 8, 555);
|
||||
MapGridSetMetatileIdAt(18, 8, 556);
|
||||
MapGridSetMetatileIdAt(16, 9, 3634);
|
||||
MapGridSetMetatileIdAt(17, 9, 563);
|
||||
MapGridSetMetatileIdAt(18, 9, 3636);
|
||||
MapGridSetMetatileIdAt(16, 8, 0x22A);
|
||||
MapGridSetMetatileIdAt(17, 8, 0x22B);
|
||||
MapGridSetMetatileIdAt(18, 8, 0x22C);
|
||||
MapGridSetMetatileIdAt(16, 9, 0xE32);
|
||||
MapGridSetMetatileIdAt(17, 9, 0x233);
|
||||
MapGridSetMetatileIdAt(18, 9, 0xE34);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_BRAILLE_DIG);
|
||||
@@ -115,10 +114,10 @@ bool8 CheckRelicanthWailord(void)
|
||||
|
||||
// THEORY: this was caused by block commenting out all of the older R/S braille functions but leaving the call to it itself, which creates the nullsub.
|
||||
// the code is shown below to show what this might look like.
|
||||
void ShouldDoBrailleStrengthEffectOld(void)
|
||||
void ShouldDoBrailleRegirockEffectOld(void)
|
||||
{
|
||||
/*
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS))
|
||||
if (!FlagGet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS))
|
||||
{
|
||||
if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23)
|
||||
return TRUE;
|
||||
@@ -131,7 +130,7 @@ void ShouldDoBrailleStrengthEffectOld(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void DoBrailleStrengthEffect(void)
|
||||
void DoBrailleRegirockEffect(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
|
||||
MapGridSetMetatileIdAt(14, 26, 554);
|
||||
@@ -142,13 +141,13 @@ void DoBrailleStrengthEffect(void)
|
||||
MapGridSetMetatileIdAt(16, 27, 3636);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_BRAILLE_STRENGTH);
|
||||
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
|
||||
ScriptContext2_Disable();
|
||||
}
|
||||
|
||||
bool8 ShouldDoBrailleFlyEffect(void)
|
||||
bool8 ShouldDoBrailleRegisteelEffect(void)
|
||||
{
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB))
|
||||
if (!FlagGet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB))
|
||||
{
|
||||
if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25)
|
||||
return TRUE;
|
||||
@@ -157,24 +156,24 @@ bool8 ShouldDoBrailleFlyEffect(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void DoBrailleFlyEffect(void)
|
||||
void DoBrailleRegisteelEffect(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
|
||||
FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
FieldEffectStart(FLDEFF_USE_TOMB_PUZZLE_EFFECT);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseFlyAncientTomb(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback;
|
||||
gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void UseFlyAncientTomb_Callback(void)
|
||||
void UseRegisteelHm_Callback(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_TOMB_PUZZLE_EFFECT);
|
||||
UseFlyAncientTomb_Finish();
|
||||
}
|
||||
|
||||
@@ -188,7 +187,7 @@ void UseFlyAncientTomb_Finish(void)
|
||||
MapGridSetMetatileIdAt(16, 27, 3636);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_BRAILLE_FLY);
|
||||
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
|
||||
ScriptContext2_Disable();
|
||||
}
|
||||
*/
|
||||
@@ -240,25 +239,25 @@ void SealedChamberShakingEffect(u8 taskId)
|
||||
}
|
||||
|
||||
// moved later in the function because it was rewritten.
|
||||
bool8 ShouldDoBrailleStrengthEffect(void)
|
||||
bool8 ShouldDoBrailleRegirockEffect(void)
|
||||
{
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH)
|
||||
if (!FlagGet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED)
|
||||
&& gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(DESERT_RUINS)
|
||||
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(DESERT_RUINS))
|
||||
{
|
||||
if (gSaveBlock1Ptr->pos.x == 6 && gSaveBlock1Ptr->pos.y == 23)
|
||||
{
|
||||
sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
|
||||
sBraillePuzzleCallbackFlag = REGIROCK_PUZZLE;
|
||||
return TRUE;
|
||||
}
|
||||
else if (gSaveBlock1Ptr->pos.x == 5 && gSaveBlock1Ptr->pos.y == 23)
|
||||
{
|
||||
sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
|
||||
sBraillePuzzleCallbackFlag = REGIROCK_PUZZLE;
|
||||
return TRUE;
|
||||
}
|
||||
else if (gSaveBlock1Ptr->pos.x == 7 && gSaveBlock1Ptr->pos.y == 23)
|
||||
{
|
||||
sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
|
||||
sBraillePuzzleCallbackFlag = REGIROCK_PUZZLE;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -266,65 +265,68 @@ bool8 ShouldDoBrailleStrengthEffect(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8179834(void)
|
||||
void SetUpPuzzleEffectRegirock(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
FieldEffectStart(FLDEFF_USE_TOMB_PUZZLE_EFFECT);
|
||||
}
|
||||
|
||||
void UseStrengthDesertRuins_Callback(void)
|
||||
void UseRegirockHm_Callback(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
sub_8179860();
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_TOMB_PUZZLE_EFFECT);
|
||||
DoBrailleRegirockEffect();
|
||||
}
|
||||
|
||||
void sub_8179860(void)
|
||||
void DoBrailleRegirockEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(14, 26, 554);
|
||||
MapGridSetMetatileIdAt(15, 26, 555);
|
||||
MapGridSetMetatileIdAt(16, 26, 556);
|
||||
MapGridSetMetatileIdAt(14, 27, 3634);
|
||||
MapGridSetMetatileIdAt(15, 27, 563);
|
||||
MapGridSetMetatileIdAt(16, 27, 3636);
|
||||
MapGridSetMetatileIdAt(14, 26, 0x22A);
|
||||
MapGridSetMetatileIdAt(15, 26, 0x22B);
|
||||
MapGridSetMetatileIdAt(16, 26, 0x22C);
|
||||
MapGridSetMetatileIdAt(14, 27, 0xE32);
|
||||
MapGridSetMetatileIdAt(15, 27, 0x233);
|
||||
MapGridSetMetatileIdAt(16, 27, 0xE34);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_BRAILLE_STRENGTH);
|
||||
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
|
||||
ScriptContext2_Disable();
|
||||
}
|
||||
|
||||
bool8 ShouldDoBrailleFlyEffect(void)
|
||||
bool8 ShouldDoBrailleRegisteelEffect(void)
|
||||
{
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x44))
|
||||
if (!FlagGet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED) && (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ANCIENT_TOMB) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ANCIENT_TOMB)))
|
||||
{
|
||||
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 25)
|
||||
{ sBraillePuzzleCallbackFlag = FLY_PUZZLE; return TRUE; }
|
||||
{
|
||||
sBraillePuzzleCallbackFlag = REGISTEEL_PUZZLE;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8179918(void)
|
||||
void SetUpPuzzleEffectRegisteel(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
FieldEffectStart(FLDEFF_USE_TOMB_PUZZLE_EFFECT);
|
||||
}
|
||||
|
||||
void UseFlyAncientTomb_Callback(void)
|
||||
void UseRegisteelHm_Callback(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_FLY_ANCIENT_TOMB);
|
||||
sub_8179944();
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_TOMB_PUZZLE_EFFECT);
|
||||
DoBrailleRegisteelEffect();
|
||||
}
|
||||
|
||||
void sub_8179944(void)
|
||||
void DoBrailleRegisteelEffect(void)
|
||||
{
|
||||
MapGridSetMetatileIdAt(14, 26, 554);
|
||||
MapGridSetMetatileIdAt(15, 26, 555);
|
||||
MapGridSetMetatileIdAt(16, 26, 556);
|
||||
MapGridSetMetatileIdAt(14, 27, 3634);
|
||||
MapGridSetMetatileIdAt(15, 27, 563);
|
||||
MapGridSetMetatileIdAt(16, 27, 3636);
|
||||
MapGridSetMetatileIdAt(14, 26, 0x22A);
|
||||
MapGridSetMetatileIdAt(15, 26, 0x22B);
|
||||
MapGridSetMetatileIdAt(16, 26, 0x22C);
|
||||
MapGridSetMetatileIdAt(14, 27, 0xE32);
|
||||
MapGridSetMetatileIdAt(15, 27, 0x233);
|
||||
MapGridSetMetatileIdAt(16, 27, 0xE34);
|
||||
DrawWholeMapView();
|
||||
PlaySE(SE_BAN);
|
||||
FlagSet(FLAG_SYS_BRAILLE_FLY);
|
||||
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
|
||||
ScriptContext2_Disable();
|
||||
}
|
||||
|
||||
@@ -332,7 +334,7 @@ void sub_8179944(void)
|
||||
void DoBrailleWait(void)
|
||||
{
|
||||
/*
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_WAIT))
|
||||
if (!FlagGet(FLAG_SYS_BRAILLE_REGICE_COMPLETED))
|
||||
CreateTask(Task_BrailleWait, 0x50);
|
||||
}
|
||||
|
||||
@@ -410,15 +412,15 @@ bool8 FldEff_UsePuzzleEffect(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
|
||||
if (sBraillePuzzleCallbackFlag == FLY_PUZZLE)
|
||||
if (sBraillePuzzleCallbackFlag == REGISTEEL_PUZZLE)
|
||||
{
|
||||
gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback;
|
||||
gTasks[taskId].data[8] = (u32)UseRegisteelHm_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseRegisteelHm_Callback;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[8] = (u32)UseStrengthDesertRuins_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseStrengthDesertRuins_Callback;
|
||||
gTasks[taskId].data[8] = (u32)UseRegirockHm_Callback >> 16;
|
||||
gTasks[taskId].data[9] = (u32)UseRegirockHm_Callback;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -427,10 +429,10 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
if (gSaveBlock1Ptr->location.mapGroup == 0x18
|
||||
&& gSaveBlock1Ptr->location.mapNum == 0x43)
|
||||
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ISLAND_CAVE)
|
||||
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(ISLAND_CAVE))
|
||||
{
|
||||
if (FlagGet(FLAG_SYS_BRAILLE_WAIT) != FALSE)
|
||||
if (FlagGet(FLAG_SYS_BRAILLE_REGICE_COMPLETED))
|
||||
return FALSE;
|
||||
if (FlagGet(FLAG_TEMP_2) == FALSE)
|
||||
return FALSE;
|
||||
@@ -439,35 +441,36 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
|
||||
for (i = 0; i < 36; i++)
|
||||
{
|
||||
u8 xPos = gUnknown_085EFE74[i][0];
|
||||
u8 yPos = gUnknown_085EFE74[i][1];
|
||||
u8 xPos = gRegicePathCoords[i][0];
|
||||
u8 yPos = gRegicePathCoords[i][1];
|
||||
if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos)
|
||||
{
|
||||
u16 varValue;
|
||||
|
||||
if (i < 16)
|
||||
{
|
||||
u16 val = VarGet(VAR_0x403B);
|
||||
u16 val = VarGet(VAR_REGICE_STEPS_1);
|
||||
val |= 1 << i;
|
||||
VarSet(VAR_0x403B, val);
|
||||
VarSet(VAR_REGICE_STEPS_1, val);
|
||||
}
|
||||
else if (i < 32)
|
||||
{
|
||||
u16 val = VarGet(VAR_0x403C);
|
||||
u16 val = VarGet(VAR_REGICE_STEPS_2);
|
||||
val |= 1 << (i - 16);
|
||||
VarSet(VAR_0x403C, val);
|
||||
VarSet(VAR_REGICE_STEPS_2, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 val = VarGet(VAR_0x403D);
|
||||
u16 val = VarGet(VAR_REGICE_STEPS_3);
|
||||
val |= 1 << (i - 32);
|
||||
VarSet(VAR_0x403D, val);
|
||||
VarSet(VAR_REGICE_STEPS_3, val);
|
||||
}
|
||||
|
||||
varValue = VarGet(VAR_0x403B);
|
||||
if (varValue != 0xFFFF || VarGet(VAR_0x403C) != varValue || VarGet(VAR_0x403D) != 0xF)
|
||||
varValue = VarGet(VAR_REGICE_STEPS_1);
|
||||
if (varValue != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF)
|
||||
return FALSE;
|
||||
|
||||
// This final check is redundant.
|
||||
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21)
|
||||
return TRUE;
|
||||
else
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
2056
src/easy_chat.c
2056
src/easy_chat.c
File diff suppressed because it is too large
Load Diff
@@ -28,8 +28,6 @@ EWRAM_DATA static u8 gUnknown_020375FC[16] = {0};
|
||||
|
||||
extern u16 *const gSpecialVars[];
|
||||
|
||||
extern void sub_80BB358(void);
|
||||
|
||||
void InitEventData(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags, 0, sizeof(gSaveBlock1Ptr->flags));
|
||||
@@ -69,7 +67,7 @@ void EnableNationalPokedex(void)
|
||||
FlagSet(FLAG_SYS_NATIONAL_DEX);
|
||||
gSaveBlock2Ptr->pokedex.mode = DEX_MODE_NATIONAL;
|
||||
gSaveBlock2Ptr->pokedex.order = 0;
|
||||
sub_80BB358();
|
||||
ResetPokedexScrollPositions();
|
||||
}
|
||||
|
||||
bool32 IsNationalPokedexEnabled(void)
|
||||
|
||||
@@ -74,11 +74,13 @@ static const u32 gCaveTransitionTiles[] = INCBIN_U32("graphics/misc/cave_transit
|
||||
// text
|
||||
bool8 SetUpFieldMove_Flash(void)
|
||||
{
|
||||
if (ShouldDoBrailleFlyEffect())
|
||||
// In Ruby and Sapphire, Registeel's tomb is opened by using Fly. In Emerald,
|
||||
// Flash is used instead.
|
||||
if (ShouldDoBrailleRegisteelEffect())
|
||||
{
|
||||
gSpecialVar_Result = GetCursorSelectionMonId();
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = sub_8179918;
|
||||
gPostMenuFieldCallback = SetUpPuzzleEffectRegisteel;
|
||||
return TRUE;
|
||||
}
|
||||
else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
|
||||
|
||||
@@ -119,11 +119,13 @@ static void sub_813561C(u8 taskId)
|
||||
|
||||
bool8 SetUpFieldMove_RockSmash(void)
|
||||
{
|
||||
if (ShouldDoBrailleStrengthEffect())
|
||||
// In Ruby and Sapphire, Regirock's tomb is opened by using Strength. In Emerald,
|
||||
// it is opened by using Rock Smash.
|
||||
if (ShouldDoBrailleRegirockEffect())
|
||||
{
|
||||
gSpecialVar_Result = GetCursorSelectionMonId();
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = sub_8179834;
|
||||
gPostMenuFieldCallback = SetUpPuzzleEffectRegirock;
|
||||
return TRUE;
|
||||
}
|
||||
else if (CheckObjectGraphicsInFrontOfPlayer(EVENT_OBJ_GFX_BREAKABLE_ROCK) == TRUE)
|
||||
|
||||
312
src/flying.c
312
src/flying.c
@@ -1,13 +1,16 @@
|
||||
#include "global.h"
|
||||
#include "battle_anim.h"
|
||||
#include "palette.h"
|
||||
#include "trig.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
extern void sub_810DE70(struct Sprite *);
|
||||
extern void sub_810DFA8(struct Sprite *);
|
||||
extern void sub_810E044(struct Sprite *);
|
||||
extern void sub_810E13C(struct Sprite *);
|
||||
extern void sub_810E1C8(struct Sprite *);
|
||||
extern void sub_810E314(struct Sprite *);
|
||||
void sub_810DE70(struct Sprite *);
|
||||
void sub_810DFA8(struct Sprite *);
|
||||
void sub_810E044(struct Sprite *);
|
||||
void sub_810E13C(struct Sprite *);
|
||||
void sub_810E1C8(struct Sprite *);
|
||||
void sub_810E314(struct Sprite *);
|
||||
extern void sub_810EA4C(struct Sprite *);
|
||||
extern void sub_810EAA0(struct Sprite *);
|
||||
extern void sub_810EC34(struct Sprite *);
|
||||
@@ -18,6 +21,13 @@ extern void sub_810EEF8(struct Sprite *);
|
||||
extern void sub_810F004(struct Sprite *);
|
||||
extern void sub_810F084(struct Sprite *);
|
||||
|
||||
static void sub_810DE98(struct Sprite *);
|
||||
static void sub_810DF18(u8);
|
||||
static void sub_810E028(struct Sprite *);
|
||||
static void sub_810E184(struct Sprite *);
|
||||
static void sub_810E24C(struct Sprite *);
|
||||
void sub_810E520(struct Sprite *);
|
||||
|
||||
const struct SpriteTemplate gUnknown_08596270 =
|
||||
{
|
||||
.tileTag = ANIM_TAG_GUST,
|
||||
@@ -326,3 +336,293 @@ const struct SpriteTemplate gUnknown_08596514 =
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = sub_810F084,
|
||||
};
|
||||
|
||||
|
||||
void sub_810DE70(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
sprite->pos1.y += 20;
|
||||
sprite->data[1] = 191;
|
||||
sprite->callback = sub_810DE98;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
static void sub_810DE98(struct Sprite *sprite) {
|
||||
sprite->pos2.x = Sin(sprite->data[1], 32);
|
||||
sprite->pos2.y = Cos(sprite->data[1], 8);
|
||||
sprite->data[1] += 5;
|
||||
sprite->data[1] &= 0xFF;
|
||||
if (++sprite->data[0] == 71)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
void sub_810DED8(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].data[0] = gBattleAnimArgs[1];
|
||||
gTasks[taskId].data[1] = gBattleAnimArgs[0];
|
||||
gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_GUST);
|
||||
gTasks[taskId].func = sub_810DF18;
|
||||
}
|
||||
|
||||
static void sub_810DF18(u8 taskId)
|
||||
{
|
||||
u8 data2;
|
||||
u16 temp;
|
||||
int i, base;
|
||||
|
||||
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1])
|
||||
{
|
||||
gTasks[taskId].data[10] = 0;
|
||||
data2 = gTasks[taskId].data[2];
|
||||
temp = gPlttBufferFaded[16 * data2 + 0x108];
|
||||
i = 7;
|
||||
base = data2 * 16;
|
||||
|
||||
do
|
||||
{
|
||||
gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i];
|
||||
i--;
|
||||
}
|
||||
while (i > 0);
|
||||
|
||||
gPlttBufferFaded[base + 0x101] = temp;
|
||||
}
|
||||
|
||||
if (--gTasks[taskId].data[0] == 0)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
void sub_810DFA8(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
sprite->data[1] = sprite->pos1.x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
|
||||
sprite->data[3] = sprite->pos1.y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
InitAnimLinearTranslation(sprite);
|
||||
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
|
||||
StoreSpriteCallbackInData6(sprite, sub_810E028);
|
||||
}
|
||||
|
||||
static void sub_810E028(struct Sprite *sprite)
|
||||
{
|
||||
if (AnimTranslateLinear(sprite))
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
void sub_810E044(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
}
|
||||
|
||||
if (IsContest())
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
|
||||
}
|
||||
|
||||
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
|
||||
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
sprite->pos1.x += gBattleAnimArgs[0];
|
||||
sprite->pos1.y += gBattleAnimArgs[1];
|
||||
sprite->data[0] = gBattleAnimArgs[4];
|
||||
|
||||
if (gBattleAnimArgs[6] == 0)
|
||||
{
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
|
||||
}
|
||||
|
||||
sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2];
|
||||
sprite->data[4] = sprite->data[4] + gBattleAnimArgs[3];
|
||||
sprite->callback = StartAnimLinearTranslation;
|
||||
|
||||
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
|
||||
SeekSpriteAnim(sprite, gBattleAnimArgs[5]);
|
||||
}
|
||||
|
||||
void sub_810E13C(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimAttacker(sprite, TRUE);
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[1] = gBattleAnimArgs[3];
|
||||
sprite->callback = sub_810E184;
|
||||
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = 1;
|
||||
}
|
||||
|
||||
static void sub_810E184(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0] > 0)
|
||||
{
|
||||
sprite->data[0]--;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[2] += sprite->data[1];
|
||||
sprite->pos2.y -= (sprite->data[2] >> 8);
|
||||
}
|
||||
|
||||
if (sprite->pos1.y + sprite->pos2.y < -32)
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
|
||||
void sub_810E1C8(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||
{
|
||||
sprite->pos1.x = 272;
|
||||
sprite->pos1.y = -32;
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->pos1.x = -32;
|
||||
sprite->pos1.y = -32;
|
||||
}
|
||||
|
||||
sprite->data[0] = gBattleAnimArgs[0];
|
||||
sprite->data[1] = sprite->pos1.x;
|
||||
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
|
||||
sprite->data[3] = sprite->pos1.y;
|
||||
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
|
||||
InitAnimLinearTranslation(sprite);
|
||||
sprite->callback = sub_810E24C;
|
||||
}
|
||||
|
||||
static void sub_810E24C(struct Sprite *sprite)
|
||||
{
|
||||
sprite->data[0] = 1;
|
||||
AnimTranslateLinear(sprite);
|
||||
if (((u16)sprite->data[3] >> 8) > 200)
|
||||
{
|
||||
sprite->pos1.x += sprite->pos2.x;
|
||||
sprite->pos2.x = 0;
|
||||
sprite->data[3] &= 0xFF;
|
||||
}
|
||||
|
||||
if ((u32)(sprite->pos1.x + sprite->pos2.x + 32) > 304 || sprite->pos1.y + sprite->pos2.y > 160)
|
||||
{
|
||||
gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = 0;
|
||||
DestroyAnimSprite(sprite);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_810E2C8(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->data[0]-- <= 0)
|
||||
{
|
||||
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
|
||||
{
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
sprite->oam.affineMode = 0;
|
||||
}
|
||||
|
||||
DestroySprite(sprite);
|
||||
gAnimVisualTaskCount--;
|
||||
}
|
||||
}
|
||||
|
||||
// FAKEMATCHING
|
||||
void sub_810E314(struct Sprite *sprite)
|
||||
{
|
||||
s16 *data;
|
||||
u8 slot;
|
||||
s16 spriteCoord;
|
||||
int t1, t2;
|
||||
u32 arg2;
|
||||
u32 matrixNum;
|
||||
u8 sinIndex;
|
||||
register s16 sinVal asm ("r4");
|
||||
register int sinVal2 asm ("r0");
|
||||
|
||||
data = sprite->data;
|
||||
|
||||
if (gBattleAnimArgs[7] & 0x100)
|
||||
slot = gBattleAnimAttacker;
|
||||
else
|
||||
slot = gBattleAnimTarget;
|
||||
|
||||
if (GetBattlerSide(slot) == B_SIDE_PLAYER)
|
||||
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
|
||||
|
||||
sprite->pos1.x = GetBattlerSpriteCoord(slot, 0) + gBattleAnimArgs[0];
|
||||
spriteCoord = GetBattlerSpriteCoord(slot, 1);
|
||||
sprite->pos1.y = spriteCoord + gBattleAnimArgs[1];
|
||||
data[4] = sprite->pos1.y << 8;
|
||||
|
||||
t1 = (spriteCoord + (u16) gBattleAnimArgs[6]) << 1;
|
||||
data[7] = (data[7] & 1) | t1;
|
||||
((u8 *) data)[0] |= 4;
|
||||
|
||||
arg2 = (u16) gBattleAnimArgs[2];
|
||||
data[1] = (u8) gBattleAnimArgs[2];
|
||||
arg2 <<= 16;
|
||||
data[5] = arg2 >> 24;
|
||||
data[2] = gBattleAnimArgs[3];
|
||||
data[3] = gBattleAnimArgs[4];
|
||||
data[6] = gBattleAnimArgs[5];
|
||||
|
||||
if ((u16) (data[1] - 64) <= 0x7f)
|
||||
{
|
||||
if (!IsContest())
|
||||
sprite->oam.priority = GetBattlerSpriteBGPriority(slot) + 1;
|
||||
else
|
||||
sprite->oam.priority = GetBattlerSpriteBGPriority(slot);
|
||||
|
||||
((u8 *) data)[14] = data[7] & -2;
|
||||
|
||||
if (!(data[2] & 0x8000))
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
|
||||
sprite->animBeginning = 1;
|
||||
sprite->animEnded = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->oam.priority = GetBattlerSpriteBGPriority(slot);
|
||||
((u8 *) data)[14] |= 1;
|
||||
|
||||
if (data[2] & 0x8000)
|
||||
{
|
||||
sprite->hFlip ^= 1;
|
||||
sprite->animNum = sprite->hFlip;
|
||||
|
||||
sprite->animBeginning = 1;
|
||||
sprite->animEnded = 0;
|
||||
}
|
||||
}
|
||||
|
||||
t2 = (u16) data[1] >> 6 << 4;
|
||||
((u8 *) data)[0] = (15 & data[0]) | t2;
|
||||
|
||||
sprite->pos2.x = (gSineTable[(u16) data[1]] * (u8) data[6]) >> 8;
|
||||
|
||||
matrixNum = sprite->oam.matrixNum;
|
||||
|
||||
sinIndex = (-sprite->pos2.x >> 1) + data[5];
|
||||
sinVal = gSineTable[sinIndex];
|
||||
|
||||
gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64];
|
||||
gOamMatrices[matrixNum].b = sinVal;
|
||||
sinVal2 = -sinVal;
|
||||
gOamMatrices[matrixNum].c = sinVal2;
|
||||
|
||||
sprite->callback = sub_810E520;
|
||||
}
|
||||
|
||||
@@ -1528,7 +1528,7 @@ static void ShowLinkContestResultsWindow(void)
|
||||
|
||||
static void sub_81A31FC(void)
|
||||
{
|
||||
u8 text[32];
|
||||
u8 name[32];
|
||||
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
|
||||
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
@@ -1541,9 +1541,9 @@ static void sub_81A31FC(void)
|
||||
gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
|
||||
if (battleMode == FRONTIER_MODE_LINK_MULTIS)
|
||||
{
|
||||
StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name);
|
||||
StripExtCtrlCodes(text);
|
||||
StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text);
|
||||
StringCopy(name, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name);
|
||||
StripExtCtrlCodes(name);
|
||||
StringCopy(gSaveBlock2Ptr->frontier.opponentName[lvlMode], name);
|
||||
SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]);
|
||||
}
|
||||
if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1
|
||||
@@ -2336,8 +2336,8 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gLevelModeText[lvlMode], x, 1, TEXT_SPEED_FF, NULL);
|
||||
if (hallFacilityId == HALL_FACILITIES_COUNT)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.field_EE1[0][PLAYER_NAME_LENGTH] = EOS;
|
||||
gSaveBlock2Ptr->frontier.field_EE1[1][PLAYER_NAME_LENGTH] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentName[0][PLAYER_NAME_LENGTH] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentName[1][PLAYER_NAME_LENGTH] = EOS;
|
||||
Fill2PRecords(records2P, lvlMode);
|
||||
for (i = 0; i < 3; i++)
|
||||
Print2PRecord(i, 1, 4, &records2P[i]);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "constants/species.h"
|
||||
#include "save.h"
|
||||
|
||||
extern u16 gHeldKeyCodeToSend;
|
||||
extern void nullsub_89(u8 taskId);
|
||||
@@ -2347,17 +2348,17 @@ void sub_800E174(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800E378(struct UnkSaveSubstruct_3b98 *dest, u32 trainerId, const u8 *name)
|
||||
void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name)
|
||||
{
|
||||
dest->trainerId = trainerId;
|
||||
StringCopy(dest->trainerName, name);
|
||||
}
|
||||
|
||||
bool32 sub_800E388(const u8 *name)
|
||||
bool32 NameIsNotEmpty(const u8 *name)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
{
|
||||
if (name[i] != 0)
|
||||
{
|
||||
@@ -2367,52 +2368,64 @@ bool32 sub_800E388(const u8 *name)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800E3A8(void)
|
||||
// Save the currently connected players into the trainer records, shifting all previous records down.
|
||||
void RecordMixTrainerNames(void)
|
||||
{
|
||||
if (gWirelessCommType != 0)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
s32 cnt;
|
||||
s32 sp0[5];
|
||||
struct UnkSaveSubstruct_3b98 *sp14 = calloc(20, sizeof(struct UnkSaveSubstruct_3b98));
|
||||
s32 nextSpace;
|
||||
s32 connectedTrainerRecordIndices[5];
|
||||
struct TrainerNameRecord *newRecords = calloc(20, sizeof(struct TrainerNameRecord));
|
||||
|
||||
// Check if we already have a record saved for connected trainers.
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
sp0[i] = -1;
|
||||
connectedTrainerRecordIndices[i] = -1;
|
||||
for (j = 0; j < 20; j++)
|
||||
{
|
||||
if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->unk_3B98[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->unk_3B98[j].trainerName) == 0)
|
||||
if ((u16)gLinkPlayers[i].trainerId == gSaveBlock1Ptr->trainerNameRecords[j].trainerId && StringCompare(gLinkPlayers[i].name, gSaveBlock1Ptr->trainerNameRecords[j].trainerName) == 0)
|
||||
{
|
||||
sp0[i] = j;
|
||||
connectedTrainerRecordIndices[i] = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
cnt = 0;
|
||||
|
||||
// Save the connected trainers first, at the top of the list.
|
||||
nextSpace = 0;
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
if (i != GetMultiplayerId() && gLinkPlayers[i].language != LANGUAGE_JAPANESE)
|
||||
{
|
||||
sub_800E378(&sp14[cnt], (u16)gLinkPlayers[i].trainerId, gLinkPlayers[i].name);
|
||||
if (sp0[i] >= 0)
|
||||
CopyTrainerRecord(&newRecords[nextSpace], (u16)gLinkPlayers[i].trainerId, gLinkPlayers[i].name);
|
||||
|
||||
// If we already had a record for this trainer, wipe it so that the next step doesn't duplicate it.
|
||||
if (connectedTrainerRecordIndices[i] >= 0)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->unk_3B98[sp0[i]].trainerName, 0, 8);
|
||||
memset(gSaveBlock1Ptr->trainerNameRecords[connectedTrainerRecordIndices[i]].trainerName, 0, 8);
|
||||
}
|
||||
cnt++;
|
||||
nextSpace++;
|
||||
}
|
||||
}
|
||||
|
||||
// Copy all non-empty records to the new list, in the order they appear on the old list. If the list is full,
|
||||
// the last (oldest) records will be dropped.
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
if (sub_800E388(gSaveBlock1Ptr->unk_3B98[i].trainerName))
|
||||
if (NameIsNotEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName))
|
||||
{
|
||||
sub_800E378(&sp14[cnt], gSaveBlock1Ptr->unk_3B98[i].trainerId, gSaveBlock1Ptr->unk_3B98[i].trainerName);
|
||||
if (++cnt >= 20)
|
||||
CopyTrainerRecord(&newRecords[nextSpace], gSaveBlock1Ptr->trainerNameRecords[i].trainerId, gSaveBlock1Ptr->trainerNameRecords[i].trainerName);
|
||||
if (++nextSpace >= 20)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(gSaveBlock1Ptr->unk_3B98, sp14, 20 * sizeof(struct UnkSaveSubstruct_3b98));
|
||||
free(sp14);
|
||||
|
||||
// Finalize the new list, and clean up.
|
||||
memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, 20 * sizeof(struct TrainerNameRecord));
|
||||
free(newRecords);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2422,11 +2435,11 @@ bool32 sub_800E540(u16 id, u8 *name)
|
||||
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
if (StringCompare(gSaveBlock1Ptr->unk_3B98[i].trainerName, name) == 0 && gSaveBlock1Ptr->unk_3B98[i].trainerId == id)
|
||||
if (StringCompare(gSaveBlock1Ptr->trainerNameRecords[i].trainerName, name) == 0 && gSaveBlock1Ptr->trainerNameRecords[i].trainerId == id)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
if (!sub_800E388(gSaveBlock1Ptr->unk_3B98[i].trainerName))
|
||||
if (!NameIsNotEmpty(gSaveBlock1Ptr->trainerNameRecords[i].trainerName))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -2434,14 +2447,14 @@ bool32 sub_800E540(u16 id, u8 *name)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800E5AC(void)
|
||||
void WipeTrainerNameRecords(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
gSaveBlock1Ptr->unk_3B98[i].trainerId = 0;
|
||||
CpuFill16(0, gSaveBlock1Ptr->unk_3B98[i].trainerName, 8);
|
||||
gSaveBlock1Ptr->trainerNameRecords[i].trainerId = 0;
|
||||
CpuFill16(0, gSaveBlock1Ptr->trainerNameRecords[i].trainerName, 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,31 +30,25 @@
|
||||
#include "apprentice.h"
|
||||
#include "frontier_util.h"
|
||||
#include "constants/maps.h"
|
||||
#include "pokedex.h"
|
||||
#include "save.h"
|
||||
#include "link_rfu.h"
|
||||
#include "main.h"
|
||||
#include "contest.h"
|
||||
#include "item_menu.h"
|
||||
#include "pokemon_storage_system.h"
|
||||
#include "decoration_inventory.h"
|
||||
#include "secret_base.h"
|
||||
#include "player_pc.h"
|
||||
#include "field_specials.h"
|
||||
|
||||
extern u16 gSaveFileStatus;
|
||||
extern u8 gUnknown_030060B0;
|
||||
|
||||
// TODO: replace those declarations with file headers
|
||||
extern u16 GetGeneratedTrainerIdLower(void);
|
||||
extern void ClearContestWinnerPicsInContestHall(void);
|
||||
extern void sub_80BB358(void);
|
||||
extern void ResetBagScrollPositions(void);
|
||||
extern void ResetGabbyAndTy(void);
|
||||
extern void ResetSecretBases(void);
|
||||
extern void ResetLinkContestBoolean(void);
|
||||
extern void sub_8052DA8(void);
|
||||
extern void ResetPokemonStorageSystem(void);
|
||||
extern void NewGameInitPCItems(void);
|
||||
extern void ClearDecorationInventories(void);
|
||||
extern void ResetFanClub(void);
|
||||
extern void copy_strings_to_sav1(void);
|
||||
extern void sub_801AFD8(void);
|
||||
extern void sub_800E5AC(void);
|
||||
extern void ResetContestLinkResults(void);
|
||||
extern void ResetPokeJumpResults(void);
|
||||
extern void SetBerryPowder(u32* powder, u32 newValue);
|
||||
|
||||
extern const u8 EventScript_2715DE[];
|
||||
extern const u8 EventScript_ResetAllMapFlags[];
|
||||
|
||||
// this file's functions
|
||||
static void ClearFrontierRecord(void);
|
||||
@@ -112,7 +106,7 @@ static void SetDefaultOptions(void)
|
||||
|
||||
static void ClearPokedexFlags(void)
|
||||
{
|
||||
gUnknown_030060B0 = 0;
|
||||
gUnusedPokedexU8 = 0;
|
||||
memset(&gSaveBlock2Ptr->pokedex.owned, 0, sizeof(gSaveBlock2Ptr->pokedex.owned));
|
||||
memset(&gSaveBlock2Ptr->pokedex.seen, 0, sizeof(gSaveBlock2Ptr->pokedex.seen));
|
||||
}
|
||||
@@ -130,8 +124,8 @@ static void ClearFrontierRecord(void)
|
||||
{
|
||||
CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier));
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_EE1[0][0] = EOS;
|
||||
gSaveBlock2Ptr->frontier.field_EE1[1][0] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentName[0][0] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentName[1][0] = EOS;
|
||||
}
|
||||
|
||||
static void WarpToTruck(void)
|
||||
@@ -149,7 +143,7 @@ void Sav2_ClearSetDefault(void)
|
||||
void ResetMenuAndMonGlobals(void)
|
||||
{
|
||||
gDifferentSaveFile = 0;
|
||||
sub_80BB358();
|
||||
ResetPokedexScrollPositions();
|
||||
ZeroPlayerPartyMons();
|
||||
ZeroEnemyPartyMons();
|
||||
ResetBagScrollPositions();
|
||||
@@ -203,7 +197,7 @@ void NewGameInitData(void)
|
||||
ResetFanClub();
|
||||
ResetLotteryCorner();
|
||||
WarpToTruck();
|
||||
ScriptContext2_RunNewScript(EventScript_2715DE);
|
||||
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
|
||||
ResetMiniGamesResults();
|
||||
copy_strings_to_sav1();
|
||||
SetLilycoveLady();
|
||||
@@ -211,7 +205,7 @@ void NewGameInitData(void)
|
||||
ClearRankingHallRecords();
|
||||
InitMatchCallCounters();
|
||||
sub_801AFD8();
|
||||
sub_800E5AC();
|
||||
WipeTrainerNameRecords();
|
||||
ResetTrainerHillResults();
|
||||
ResetContestLinkResults();
|
||||
}
|
||||
|
||||
@@ -37,7 +37,8 @@ static EWRAM_DATA u8 gUnknown_02039B52 = 0;
|
||||
static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL;
|
||||
|
||||
// IWRAM common
|
||||
u8 gUnknown_030060B0;
|
||||
// This is written to, but never read.
|
||||
u8 gUnusedPokedexU8;
|
||||
void (*gUnknown_030060B4)(void);
|
||||
|
||||
struct PokedexOption
|
||||
@@ -1225,7 +1226,7 @@ void ResetPokedex(void)
|
||||
|
||||
gUnknown_02039B50 = 0;
|
||||
gUnknown_02039B52 = 64;
|
||||
gUnknown_030060B0 = 0;
|
||||
gUnusedPokedexU8 = 0;
|
||||
gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
|
||||
gSaveBlock2Ptr->pokedex.order = 0;
|
||||
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
|
||||
@@ -1243,7 +1244,7 @@ void ResetPokedex(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80BB358(void)
|
||||
void ResetPokedexScrollPositions(void)
|
||||
{
|
||||
gUnknown_02039B50 = 0;
|
||||
gUnknown_02039B52 = 64;
|
||||
@@ -4041,7 +4042,7 @@ void sub_80C0460(u16 weight, u8 left, u8 top)
|
||||
lsls r2, 24\n\
|
||||
lsrs r2, 24\n\
|
||||
str r2, [sp, 0x10]\n\
|
||||
ldr r5, =0x000186a0\n\
|
||||
ldr r5, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\
|
||||
muls r0, r5\n\
|
||||
ldr r1, =0x000011b8\n\
|
||||
bl __divsi3\n\
|
||||
@@ -4075,7 +4076,7 @@ _080C04C0:\n\
|
||||
mov r8, r1\n\
|
||||
movs r6, 0x1\n\
|
||||
_080C04C6:\n\
|
||||
ldr r1, =0x000186a0\n\
|
||||
ldr r1, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\
|
||||
adds r0, r7, 0\n\
|
||||
bl __umodsi3\n\
|
||||
adds r7, r0, 0\n\
|
||||
|
||||
1211
src/pokenav.c
Normal file
1211
src/pokenav.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1095,7 +1095,7 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
|
||||
CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId);
|
||||
CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]);
|
||||
StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName);
|
||||
StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.field_EE1[j]);
|
||||
StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentName[j]);
|
||||
}
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
|
||||
@@ -1687,7 +1687,7 @@ void sub_801440C(u8 taskId)
|
||||
case 9 ... 11:
|
||||
case 13:
|
||||
case 15:
|
||||
sub_800E3A8();
|
||||
RecordMixTrainerNames();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1800,12 +1800,12 @@ void sub_8014790(u8 taskId)
|
||||
sendBuff[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
|
||||
gMain.savedCallback = NULL;
|
||||
data[0] = 4;
|
||||
sub_800E3A8();
|
||||
RecordMixTrainerNames();
|
||||
ResetBlockReceivedFlags();
|
||||
break;
|
||||
case 16:
|
||||
case 23 ... 27:
|
||||
sub_800E3A8();
|
||||
RecordMixTrainerNames();
|
||||
DestroyTask(taskId);
|
||||
default:
|
||||
EnableBothScriptContexts();
|
||||
|
||||
@@ -965,18 +965,18 @@ const u8 gUnknown_085EBE8E[] = _("Can't call opponent here.");
|
||||
const u8 gUnknown_085EBEA8[] = _("STRATEGY");
|
||||
const u8 gUnknown_085EBEB1[] = _("TRAINER'S POKéMON");
|
||||
const u8 gUnknown_085EBEC3[] = _("SELF-INTRODUCTION");
|
||||
const u8 gUnknown_085EBED5[] = _("{CLEAR 0x80}");
|
||||
const u8 gUnknown_085EBED9[] = _("{A_BUTTON}ZOOM {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBEE9[] = _("{A_BUTTON}FULL {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBEF9[] = _("{A_BUTTON}CONDITION {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF0E[] = _("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF22[] = _("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF39[] = _("{A_BUTTON}MENU {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF49[] = _("{A_BUTTON}OK {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF57[] = _("{B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF60[] = _("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF73[] = _("{A_BUTTON}CHECK {B_BUTTON}CANCEL");
|
||||
const u8 gUnknown_085EBF84[] = _("{B_BUTTON}CANCEL");
|
||||
const u8 gText_Navgear_ClearButtonList[] = _("{CLEAR 0x80}");
|
||||
const u8 gText_NavgearMap_ZoomedOutButtons[] = _("{A_BUTTON}ZOOM {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearMap_ZoomedInButtons[] = _("{A_BUTTON}FULL {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearCondition_MonListButtons[] = _("{A_BUTTON}CONDITION {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearCondition_MonStatusButtons[] = _("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearCondition_MarkingButtons[] = _("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearMatchCall_TrainerListButtons[] = _("{A_BUTTON}MENU {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearMatchCall_CallMenuButtons[] = _("{A_BUTTON}OK {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearMatchCall_CheckTrainerButtons[] = _("{B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearRibbons_MonListButtons[] = _("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearRibbons_RibbonListButtons[] = _("{A_BUTTON}CHECK {B_BUTTON}CANCEL");
|
||||
const u8 gText_NavgearRibbons_RibbonCheckButtons[] = _("{B_BUTTON}CANCEL");
|
||||
const u8 gText_NatureSlash[] = _("NATURE/");
|
||||
const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!");
|
||||
const u8 gText_InParty[] = _("IN PARTY");
|
||||
|
||||
Reference in New Issue
Block a user