Merge branch 'upcoming' into 111125

This commit is contained in:
Alex 2025-11-11 19:04:54 +01:00 committed by GitHub
commit bb11d96d86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 97 additions and 139 deletions

View File

@ -7,6 +7,7 @@
#include "constants/battle.h"
#include "constants/form_change_types.h"
#include "constants/hold_effects.h"
#include "constants/moves.h"
#include "battle_main.h"
#include "battle_message.h"
#include "battle_util.h"
@ -587,7 +588,8 @@ struct BattlerState
u32 ateBoost:1;
u32 wasAboveHalfHp:1; // For Berserk, Emergency Exit, Wimp Out and Anger Shell.
u32 commanderSpecies:11;
u32 padding:4;
u32 selectionScriptFinished:1;
u32 padding:3;
// End of Word
};
@ -628,7 +630,6 @@ struct BattleStruct
struct BattlerState battlerState[MAX_BATTLERS_COUNT];
struct PartyState partyState[NUM_BATTLE_SIDES][PARTY_SIZE];
struct EventStates eventState;
u16 wrappedMove[MAX_BATTLERS_COUNT];
u16 moveTarget[MAX_BATTLERS_COUNT];
u32 expShareExpValue;
u32 expValue;
@ -641,14 +642,12 @@ struct BattleStruct
u8 expSentInMons; // As bits for player party mons - not including exp share mons.
u8 wildVictorySong;
enum Type dynamicMoveType;
u8 wrappedBy[MAX_BATTLERS_COUNT];
u8 battlerPreventingSwitchout;
u8 moneyMultiplier:6;
u8 moneyMultiplierItem:1;
u8 moneyMultiplierMove:1;
u8 savedTurnActionNumber;
u8 scriptPartyIdx; // for printing the nickname
bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
u8 battlerPartyIndexes[MAX_BATTLERS_COUNT];
u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 battlerPartyOrders[MAX_BATTLERS_COUNT][PARTY_SIZE / 2];
@ -753,7 +752,6 @@ struct BattleStruct
s32 aiDelayTimer; // Counts number of frames AI takes to choose an action.
s32 aiDelayFrames; // Number of frames it took to choose an action.
s32 aiDelayCycles; // Number of cycles it took to choose an action.
u8 stickySyrupdBy[MAX_BATTLERS_COUNT];
u8 supremeOverlordCounter[MAX_BATTLERS_COUNT];
u8 shellSideArmCategory[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT];
u8 speedTieBreaks; // MAX_BATTLERS_COUNT! values.

View File

@ -1,6 +1,8 @@
#ifndef GUARD_CONSTANTS_BATTLE_H
#define GUARD_CONSTANTS_BATTLE_H
#include "constants/moves.h"
/*
* A battler may be in one of four positions on the field. The first bit determines
* what side the battler is on, either the player's side or the opponent's side.
@ -168,6 +170,8 @@ enum VolatileFlags
F(VOLATILE_LOCK_CONFUSE, lockConfusionTurns, (u32, 3)) \
F(VOLATILE_MULTIPLETURNS, multipleTurns, (u32, 1)) \
F(VOLATILE_WRAPPED, wrapped, (u32, 1)) \
F(VOLATILE_WRAPPED_BY, wrappedBy, (enum BattlerId, MAX_BITS(4))) \
F(VOLATILE_WRAPPED_MOVE, wrappedMove, (u32, MOVES_COUNT_ALL - 1)) \
F(VOLATILE_POWDER, powder, (u32, 1)) \
F(VOLATILE_UNUSED, padding, (u32, 1)) \
F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \
@ -189,6 +193,7 @@ enum VolatileFlags
F(VOLATILE_INFINITE_CONFUSION, infiniteConfusion, (u32, 1), V_BATON_PASSABLE) \
F(VOLATILE_SALT_CURE, saltCure, (u32, 1)) \
F(VOLATILE_SYRUP_BOMB, syrupBomb, (u32, 1)) \
F(VOLATILE_STICKY_SYRUPED_BY, stickySyrupedBy, (enum BattlerId, MAX_BITS(4))) \
F(VOLATILE_GLAIVE_RUSH, glaiveRush, (u32, 1)) \
F(VOLATILE_LEECH_SEED, leechSeed, (enum BattlerId, MAX_BITS(4)), V_BATON_PASSABLE) \
F(VOLATILE_LOCK_ON, lockOn, (u32, 2), V_BATON_PASSABLE) \

View File

@ -3105,17 +3105,16 @@ static u32 GetCurseDamage(u32 battlerId)
return damage;
}
static u32 GetTrapDamage(u32 battlerId)
static u32 GetTrapDamage(u32 battler)
{
// ai has no knowledge about turns remaining
u32 damage = 0;
enum HoldEffect holdEffect = gAiLogicData->holdEffects[gBattleStruct->wrappedBy[battlerId]];
if (gBattleMons[battlerId].volatiles.wrapped)
if (gBattleMons[battler].volatiles.wrapped)
{
if (holdEffect == HOLD_EFFECT_BINDING_BAND)
damage = GetNonDynamaxMaxHP(battlerId) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8);
if (gAiLogicData->holdEffects[gBattleMons[battler].volatiles.wrappedBy] == HOLD_EFFECT_BINDING_BAND)
damage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8);
else
damage = GetNonDynamaxMaxHP(battlerId) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16);
damage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16);
if (damage == 0)
damage = 1;

View File

@ -634,12 +634,12 @@ static bool32 HandleEndTurnWrap(u32 battler)
if (IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD))
return effect;
gBattleScripting.animArg1 = gBattleStruct->wrappedMove[battler];
gBattleScripting.animArg2 = gBattleStruct->wrappedMove[battler] >> 8;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[battler]);
gBattleScripting.animArg1 = gBattleMons[battler].volatiles.wrappedMove;
gBattleScripting.animArg2 = gBattleMons[battler].volatiles.wrappedMove >> 8;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[battler].volatiles.wrappedMove);
BattleScriptExecute(BattleScript_WrapTurnDmg);
s32 bindDamage = 0;
if (GetBattlerHoldEffect(gBattleStruct->wrappedBy[battler]) == HOLD_EFFECT_BINDING_BAND)
if (GetBattlerHoldEffect(gBattleMons[battler].volatiles.wrappedBy) == HOLD_EFFECT_BINDING_BAND)
bindDamage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8);
else
bindDamage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16);
@ -648,7 +648,7 @@ static bool32 HandleEndTurnWrap(u32 battler)
else // broke free
{
gBattleMons[battler].volatiles.wrapped = FALSE;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[battler]);
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[battler].volatiles.wrappedMove);
BattleScriptExecute(BattleScript_WrapEnds);
}
effect = TRUE;

View File

@ -3189,9 +3189,9 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy)
{
if (gBattleMons[i].volatiles.infatuation == INFATUATED_WITH(battler))
gBattleMons[i].volatiles.infatuation = 0;
if (gBattleMons[i].volatiles.wrapped && gBattleStruct->wrappedBy[i] == battler)
if (gBattleMons[i].volatiles.wrapped && gBattleMons[i].volatiles.wrappedBy == battler)
gBattleMons[i].volatiles.wrapped = FALSE;
if (gBattleMons[i].volatiles.syrupBomb && gBattleStruct->stickySyrupdBy[i] == battler)
if (gBattleMons[i].volatiles.syrupBomb && gBattleMons[i].volatiles.stickySyrupedBy == battler)
gBattleMons[i].volatiles.syrupBomb = FALSE;
if (gDisableStructs[i].octolock && gDisableStructs[i].octolockedBy == battler)
gDisableStructs[i].octolock = FALSE;
@ -3316,9 +3316,9 @@ const u8* FaintClearSetData(u32 battler)
gBattleMons[i].volatiles.escapePrevention = FALSE;
if (gBattleMons[i].volatiles.infatuation == INFATUATED_WITH(battler))
gBattleMons[i].volatiles.infatuation = 0;
if (gBattleMons[i].volatiles.wrapped && gBattleStruct->wrappedBy[i] == battler)
if (gBattleMons[i].volatiles.wrapped && gBattleMons[i].volatiles.wrappedBy == battler)
gBattleMons[i].volatiles.wrapped = FALSE;
if (gBattleMons[i].volatiles.syrupBomb && gBattleStruct->stickySyrupdBy[i] == battler)
if (gBattleMons[i].volatiles.syrupBomb && gBattleMons[i].volatiles.stickySyrupedBy == battler)
gBattleMons[i].volatiles.syrupBomb = FALSE;
if (gDisableStructs[i].octolock && gDisableStructs[i].octolockedBy == battler)
gDisableStructs[i].octolock = FALSE;
@ -4271,7 +4271,7 @@ static void HandleTurnActionSelectionState(void)
if (AreAllMovesUnusable(battler))
{
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY;
gBattleStruct->moveTarget[battler] = gBattleResources->bufferB[battler][3];
return;
@ -4313,7 +4313,7 @@ static void HandleTurnActionSelectionState(void)
RecordedBattle_ClearBattlerAction(battler, 1);
gSelectionBattleScripts[battler] = BattleScript_ActionSelectionItemsCantBeUsed;
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN;
return;
}
@ -4329,7 +4329,7 @@ static void HandleTurnActionSelectionState(void)
RecordedBattle_ClearBattlerAction(battler, 1);
gSelectionBattleScripts[battler] = BattleScript_ActionSelectionItemsCantBeUsed;
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN;
return;
}
@ -4367,7 +4367,7 @@ static void HandleTurnActionSelectionState(void)
{
gSelectionBattleScripts[battler] = BattleScript_PrintFullBox;
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN;
return;
}
@ -4428,7 +4428,7 @@ static void HandleTurnActionSelectionState(void)
{
gSelectionBattleScripts[battler] = BattleScript_AskIfWantsToForfeitMatch;
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT_MAY_RUN;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN;
return;
}
@ -4436,7 +4436,7 @@ static void HandleTurnActionSelectionState(void)
{
gSelectionBattleScripts[battler] = BattleScript_QuestionForfeitBattle;
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT_MAY_RUN;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN;
return;
}
@ -4453,7 +4453,7 @@ static void HandleTurnActionSelectionState(void)
{
gSelectionBattleScripts[battler] = BattleScript_PrintCantEscapeFromBattle;
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN;
return;
}
@ -4495,7 +4495,7 @@ static void HandleTurnActionSelectionState(void)
{
RecordedBattle_ClearBattlerAction(battler, 1);
gBattleCommunication[battler] = STATE_SELECTION_SCRIPT;
gBattleStruct->selectionScriptFinished[battler] = FALSE;
gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE;
gBattleResources->bufferB[battler][1] = B_ACTION_USE_MOVE;
gBattleStruct->stateIdAfterSelScript[battler] = STATE_WAIT_ACTION_CHOSEN;
return;
@ -4629,7 +4629,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case STATE_SELECTION_SCRIPT:
if (gBattleStruct->selectionScriptFinished[battler])
if (gBattleStruct->battlerState[battler].selectionScriptFinished)
{
gBattleCommunication[battler] = gBattleStruct->stateIdAfterSelScript[battler];
}
@ -4651,7 +4651,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case STATE_SELECTION_SCRIPT_MAY_RUN:
if (gBattleStruct->selectionScriptFinished[battler])
if (gBattleStruct->battlerState[battler].selectionScriptFinished)
{
if (gBattleResources->bufferB[battler][1] == B_ACTION_NOTHING_FAINTED)
{

View File

@ -3119,15 +3119,13 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c
}
else
{
gBattleMons[gEffectBattler].volatiles.wrapped = TRUE;
if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_GRIP_CLAW)
gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? 7 : 5;
else
gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? RandomUniform(RNG_WRAP, 4, 5) : RandomUniform(RNG_WRAP, 2, 5);
gBattleStruct->wrappedMove[gEffectBattler] = gCurrentMove;
gBattleStruct->wrappedBy[gEffectBattler] = gBattlerAttacker;
gBattleMons[gEffectBattler].volatiles.wrapped = TRUE;
gBattleMons[gEffectBattler].volatiles.wrappedMove = gCurrentMove;
gBattleMons[gEffectBattler].volatiles.wrappedBy = gBattlerAttacker;
BattleScriptPush(battleScript);
gBattlescriptCurrInstr = BattleScript_MoveEffectWrap;
}
@ -3476,9 +3474,9 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c
struct Pokemon *mon = GetBattlerMon(gBattlerAttacker);
gBattleMons[gEffectBattler].volatiles.syrupBomb = TRUE;
gBattleMons[gEffectBattler].volatiles.stickySyrupedBy = gBattlerAttacker;
gDisableStructs[gEffectBattler].syrupBombTimer = 3;
gDisableStructs[gEffectBattler].syrupBombIsShiny = IsMonShiny(mon);
gBattleStruct->stickySyrupdBy[gEffectBattler] = gBattlerAttacker;
BattleScriptPush(battleScript);
gBattlescriptCurrInstr = BattleScript_SyrupBombActivates;
}
@ -3888,11 +3886,11 @@ void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, c
else
gDisableStructs[battler].wrapTurns = (Random() % 2) + 4;
// The Wrap effect does not expire when the user switches, so here's some cheese.
gBattleStruct->wrappedBy[battler] = gBattlerTarget;
gBattleMons[battler].volatiles.wrappedBy = gBattlerTarget;
if (moveEffect == MOVE_EFFECT_SANDBLAST_SIDE)
gBattleStruct->wrappedMove[battler] = MOVE_SAND_TOMB;
gBattleMons[battler].volatiles.wrappedMove = MOVE_SAND_TOMB;
else
gBattleStruct->wrappedMove[battler] = MOVE_FIRE_SPIN;
gBattleMons[battler].volatiles.wrappedMove = MOVE_FIRE_SPIN;
}
}
break;
@ -5373,8 +5371,7 @@ static void Cmd_jumpifabilitypresent(void)
static void Cmd_endselectionscript(void)
{
CMD_ARGS();
*(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE;
gBattleStruct->battlerState[gBattlerAttacker].selectionScriptFinished = TRUE;
}
static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *nextInstr)
@ -12226,8 +12223,8 @@ static void Cmd_rapidspinfree(void)
{
gBattleScripting.battler = gBattlerTarget;
gBattleMons[gBattlerAttacker].volatiles.wrapped = FALSE;
gBattlerTarget = gBattleStruct->wrappedBy[gBattlerAttacker];
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gBattlerAttacker]);
gBattlerTarget = gBattleMons[gBattlerAttacker].volatiles.wrappedBy;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].volatiles.wrappedMove);
BattleScriptCall(BattleScript_WrapFree);
}
else if (gBattleMons[gBattlerAttacker].volatiles.leechSeed)

View File

@ -15,90 +15,49 @@ struct LandmarkList
const struct Landmark *const *landmarks;
};
static const u8 LandmarkName_FlowerShop[] = _("FLOWER SHOP");
static const u8 LandmarkName_PetalburgWoods[] = _("PETALBURG WOODS");
static const u8 LandmarkName_MrBrineysCottage[] = _("MR. BRINEY'S COTTAGE");
static const u8 LandmarkName_AbandonedShip[] = _("ABANDONED SHIP");
static const u8 LandmarkName_SeashoreHouse[] = _("SEASHORE HOUSE");
static const u8 LandmarkName_SlateportBeach[] = _("SLATEPORT BEACH");
static const u8 LandmarkName_CyclingRoad[] = _("CYCLING ROAD");
static const u8 LandmarkName_NewMauville[] = _("NEW MAUVILLE");
static const u8 LandmarkName_TrickHouse[] = _("TRICK HOUSE");
static const u8 LandmarkName_OldLadysRestShop[] = _("OLD LADY'S REST STOP");
static const u8 LandmarkName_Desert[] = _("DESERT");
static const u8 LandmarkName_WinstrateFamily[] = _("THE WINSTRATE FAMILY");
static const u8 LandmarkName_CableCar[] = _("CABLE CAR");
static const u8 LandmarkName_GlassWorkshop[] = _("GLASS WORKSHOP");
static const u8 LandmarkName_WeatherInstitute[] = _("WEATHER INSTITUTE");
static const u8 LandmarkName_MeteorFalls[] = _("METEOR FALLS");
static const u8 LandmarkName_TunnelersRestHouse[] = _("TUNNELER'S RESTHOUSE");
static const u8 LandmarkName_RusturfTunnel[] = _("RUSTURF TUNNEL");
static const u8 LandmarkName_PokemonDayCare[] = _("POKéMON DAY CARE");
static const u8 LandmarkName_SafariZoneEntrance[] = _("SAFARI ZONE ENTRANCE");
static const u8 LandmarkName_MtPyre[] = _("MT. PYRE");
static const u8 LandmarkName_ShoalCave[] = _("SHOAL CAVE");
static const u8 LandmarkName_SeafloorCavern[] = _("SEAFLOOR CAVERN");
static const u8 LandmarkName_GraniteCave[] = _("GRANITE CAVE");
static const u8 LandmarkName_OceanCurrent[] = _("OCEAN CURRENT");
static const u8 LandmarkName_LanettesHouse[] = _("LANETTE'S HOUSE");
static const u8 LandmarkName_FieryPath[] = _("FIERY PATH");
static const u8 LandmarkName_JaggedPass[] = _("JAGGED PASS");
static const u8 LandmarkName_SkyPillar[] = _("SKY PILLAR");
static const u8 LandmarkName_BerryMastersHouse[] = _("BERRY MASTER'S HOUSE");
static const u8 LandmarkName_IslandCave[] = _("ISLAND CAVE");
static const u8 LandmarkName_DesertRuins[] = _("DESERT RUINS");
static const u8 LandmarkName_ScorchedSlab[] = _("SCORCHED SLAB");
static const u8 LandmarkName_AncientTomb[] = _("ANCIENT TOMB");
static const u8 LandmarkName_SealedChamber[] = _("SEALED CHAMBER");
static const u8 LandmarkName_FossilManiacsHouse[] = _("FOSSIL MANIAC'S HOUSE");
static const u8 LandmarkName_HuntersHouse[] = _("HUNTER'S HOUSE");
static const u8 LandmarkName_MagmaHideout[] = _("MAGMA HIDEOUT");
static const u8 LandmarkName_MirageTower[] = _("MIRAGE TOWER");
static const u8 LandmarkName_AlteringCave[] = _("ALTERING CAVE");
static const u8 LandmarkName_DesertUnderpass[] = _("DESERT UNDERPASS");
static const u8 LandmarkName_TrainerHill[] = _("TRAINER HILL");
static const u8 LandmarkName_MagmaHideout[] = _("MAGMA HIDEOUT"); //Unused
static const struct Landmark Landmark_FlowerShop = {LandmarkName_FlowerShop, FLAG_LANDMARK_FLOWER_SHOP};
static const struct Landmark Landmark_PetalburgWoods = {LandmarkName_PetalburgWoods, -1};
static const struct Landmark Landmark_MrBrineysCottage = {LandmarkName_MrBrineysCottage, FLAG_LANDMARK_MR_BRINEY_HOUSE};
static const struct Landmark Landmark_AbandonedShip = {LandmarkName_AbandonedShip, FLAG_LANDMARK_ABANDONED_SHIP};
static const struct Landmark Landmark_SeashoreHouse = {LandmarkName_SeashoreHouse, FLAG_LANDMARK_SEASHORE_HOUSE};
static const struct Landmark Landmark_SlateportBeach = {LandmarkName_SlateportBeach, -1};
static const struct Landmark Landmark_CyclingRoad = {LandmarkName_CyclingRoad, -1};
static const struct Landmark Landmark_NewMauville = {LandmarkName_NewMauville, FLAG_LANDMARK_NEW_MAUVILLE};
static const struct Landmark Landmark_TrickHouse = {LandmarkName_TrickHouse, FLAG_LANDMARK_TRICK_HOUSE};
static const struct Landmark Landmark_OldLadysRestShop = {LandmarkName_OldLadysRestShop, FLAG_LANDMARK_OLD_LADY_REST_SHOP};
static const struct Landmark Landmark_Desert = {LandmarkName_Desert, -1};
static const struct Landmark Landmark_WinstrateFamily = {LandmarkName_WinstrateFamily, FLAG_LANDMARK_WINSTRATE_FAMILY};
static const struct Landmark Landmark_CableCar = {LandmarkName_CableCar, -1};
static const struct Landmark Landmark_GlassWorkshop = {LandmarkName_GlassWorkshop, FLAG_LANDMARK_GLASS_WORKSHOP};
static const struct Landmark Landmark_WeatherInstitute = {LandmarkName_WeatherInstitute, -1};
static const struct Landmark Landmark_MeteorFalls = {LandmarkName_MeteorFalls, -1};
static const struct Landmark Landmark_TunnelersRestHouse = {LandmarkName_TunnelersRestHouse, FLAG_LANDMARK_TUNNELERS_REST_HOUSE};
static const struct Landmark Landmark_RusturfTunnel = {LandmarkName_RusturfTunnel, -1};
static const struct Landmark Landmark_PokemonDayCare = {LandmarkName_PokemonDayCare, FLAG_LANDMARK_POKEMON_DAYCARE};
static const struct Landmark Landmark_SafariZoneEntrance = {LandmarkName_SafariZoneEntrance, -1};
static const struct Landmark Landmark_MtPyre = {LandmarkName_MtPyre, -1};
static const struct Landmark Landmark_ShoalCave = {LandmarkName_ShoalCave, -1};
static const struct Landmark Landmark_SeafloorCavern = {LandmarkName_SeafloorCavern, FLAG_LANDMARK_SEAFLOOR_CAVERN};
static const struct Landmark Landmark_GraniteCave = {LandmarkName_GraniteCave, -1};
static const struct Landmark Landmark_OceanCurrent = {LandmarkName_OceanCurrent, -1};
static const struct Landmark Landmark_LanettesHouse = {LandmarkName_LanettesHouse, FLAG_LANDMARK_LANETTES_HOUSE};
static const struct Landmark Landmark_FieryPath = {LandmarkName_FieryPath, FLAG_LANDMARK_FIERY_PATH};
static const struct Landmark Landmark_JaggedPass = {LandmarkName_JaggedPass, -1};
static const struct Landmark Landmark_BerryMastersHouse = {LandmarkName_BerryMastersHouse, FLAG_LANDMARK_BERRY_MASTERS_HOUSE};
static const struct Landmark Landmark_IslandCave = {LandmarkName_IslandCave, FLAG_LANDMARK_ISLAND_CAVE};
static const struct Landmark Landmark_DesertRuins = {LandmarkName_DesertRuins, FLAG_LANDMARK_DESERT_RUINS};
static const struct Landmark Landmark_ScorchedSlab = {LandmarkName_ScorchedSlab, FLAG_LANDMARK_SCORCHED_SLAB};
static const struct Landmark Landmark_AncientTomb = {LandmarkName_AncientTomb, FLAG_LANDMARK_ANCIENT_TOMB};
static const struct Landmark Landmark_SealedChamber = {LandmarkName_SealedChamber, FLAG_LANDMARK_SEALED_CHAMBER};
static const struct Landmark Landmark_FossilManiacsHouse = {LandmarkName_FossilManiacsHouse, FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE};
static const struct Landmark Landmark_HuntersHouse = {LandmarkName_HuntersHouse, FLAG_LANDMARK_HUNTERS_HOUSE};
static const struct Landmark Landmark_SkyPillar = {LandmarkName_SkyPillar, FLAG_LANDMARK_SKY_PILLAR};
static const struct Landmark Landmark_MirageTower = {LandmarkName_MirageTower, FLAG_LANDMARK_MIRAGE_TOWER};
static const struct Landmark Landmark_AlteringCave = {LandmarkName_AlteringCave, FLAG_LANDMARK_ALTERING_CAVE};
static const struct Landmark Landmark_DesertUnderpass = {LandmarkName_DesertUnderpass, FLAG_LANDMARK_DESERT_UNDERPASS};
static const struct Landmark Landmark_TrainerHill = {LandmarkName_TrainerHill, FLAG_LANDMARK_TRAINER_HILL};
static const struct Landmark Landmark_FlowerShop = {COMPOUND_STRING("FLOWER SHOP"), FLAG_LANDMARK_FLOWER_SHOP};
static const struct Landmark Landmark_PetalburgWoods = {COMPOUND_STRING("PETALBURG WOODS"), -1};
static const struct Landmark Landmark_MrBrineysCottage = {COMPOUND_STRING("MR. BRINEY'S COTTAGE"), FLAG_LANDMARK_MR_BRINEY_HOUSE};
static const struct Landmark Landmark_AbandonedShip = {COMPOUND_STRING("ABANDONED SHIP"), FLAG_LANDMARK_ABANDONED_SHIP};
static const struct Landmark Landmark_SeashoreHouse = {COMPOUND_STRING("SEASHORE HOUSE"), FLAG_LANDMARK_SEASHORE_HOUSE};
static const struct Landmark Landmark_SlateportBeach = {COMPOUND_STRING("SLATEPORT BEACH"), -1};
static const struct Landmark Landmark_CyclingRoad = {COMPOUND_STRING("CYCLING ROAD"), -1};
static const struct Landmark Landmark_NewMauville = {COMPOUND_STRING("NEW MAUVILLE"), FLAG_LANDMARK_NEW_MAUVILLE};
static const struct Landmark Landmark_TrickHouse = {COMPOUND_STRING("TRICK HOUSE"), FLAG_LANDMARK_TRICK_HOUSE};
static const struct Landmark Landmark_OldLadysRestShop = {COMPOUND_STRING("OLD LADY'S REST STOP"), FLAG_LANDMARK_OLD_LADY_REST_SHOP};
static const struct Landmark Landmark_Desert = {COMPOUND_STRING("DESERT"), -1};
static const struct Landmark Landmark_WinstrateFamily = {COMPOUND_STRING("THE WINSTRATE FAMILY"), FLAG_LANDMARK_WINSTRATE_FAMILY};
static const struct Landmark Landmark_CableCar = {COMPOUND_STRING("CABLE CAR"), -1};
static const struct Landmark Landmark_GlassWorkshop = {COMPOUND_STRING("GLASS WORKSHOP"), FLAG_LANDMARK_GLASS_WORKSHOP};
static const struct Landmark Landmark_WeatherInstitute = {COMPOUND_STRING("WEATHER INSTITUTE"), -1};
static const struct Landmark Landmark_MeteorFalls = {COMPOUND_STRING("METEOR FALLS"), -1};
static const struct Landmark Landmark_TunnelersRestHouse = {COMPOUND_STRING("TUNNELER'S RESTHOUSE"), FLAG_LANDMARK_TUNNELERS_REST_HOUSE};
static const struct Landmark Landmark_RusturfTunnel = {COMPOUND_STRING("RUSTURF TUNNEL"), -1};
static const struct Landmark Landmark_PokemonDayCare = {COMPOUND_STRING("POKéMON DAY CARE"), FLAG_LANDMARK_POKEMON_DAYCARE};
static const struct Landmark Landmark_SafariZoneEntrance = {COMPOUND_STRING("SAFARI ZONE ENTRANCE"), -1};
static const struct Landmark Landmark_MtPyre = {COMPOUND_STRING("MT. PYRE"), -1};
static const struct Landmark Landmark_ShoalCave = {COMPOUND_STRING("SHOAL CAVE"), -1};
static const struct Landmark Landmark_SeafloorCavern = {COMPOUND_STRING("SEAFLOOR CAVERN"), FLAG_LANDMARK_SEAFLOOR_CAVERN};
static const struct Landmark Landmark_GraniteCave = {COMPOUND_STRING("GRANITE CAVE"), -1};
static const struct Landmark Landmark_OceanCurrent = {COMPOUND_STRING("OCEAN CURRENT"), -1};
static const struct Landmark Landmark_LanettesHouse = {COMPOUND_STRING("LANETTE'S HOUSE"), FLAG_LANDMARK_LANETTES_HOUSE};
static const struct Landmark Landmark_FieryPath = {COMPOUND_STRING("FIERY PATH"), FLAG_LANDMARK_FIERY_PATH};
static const struct Landmark Landmark_JaggedPass = {COMPOUND_STRING("JAGGED PASS"), -1};
static const struct Landmark Landmark_BerryMastersHouse = {COMPOUND_STRING("BERRY MASTER'S HOUSE"), FLAG_LANDMARK_BERRY_MASTERS_HOUSE};
static const struct Landmark Landmark_IslandCave = {COMPOUND_STRING("ISLAND CAVE"), FLAG_LANDMARK_ISLAND_CAVE};
static const struct Landmark Landmark_DesertRuins = {COMPOUND_STRING("DESERT RUINS"), FLAG_LANDMARK_DESERT_RUINS};
static const struct Landmark Landmark_ScorchedSlab = {COMPOUND_STRING("SCORCHED SLAB"), FLAG_LANDMARK_SCORCHED_SLAB};
static const struct Landmark Landmark_AncientTomb = {COMPOUND_STRING("ANCIENT TOMB"), FLAG_LANDMARK_ANCIENT_TOMB};
static const struct Landmark Landmark_SealedChamber = {COMPOUND_STRING("SEALED CHAMBER"), FLAG_LANDMARK_SEALED_CHAMBER};
static const struct Landmark Landmark_FossilManiacsHouse = {COMPOUND_STRING("FOSSIL MANIAC'S HOUSE"), FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE};
static const struct Landmark Landmark_HuntersHouse = {COMPOUND_STRING("HUNTER'S HOUSE"), FLAG_LANDMARK_HUNTERS_HOUSE};
static const struct Landmark Landmark_SkyPillar = {COMPOUND_STRING("SKY PILLAR"), FLAG_LANDMARK_SKY_PILLAR};
static const struct Landmark Landmark_MirageTower = {COMPOUND_STRING("MIRAGE TOWER"), FLAG_LANDMARK_MIRAGE_TOWER};
static const struct Landmark Landmark_AlteringCave = {COMPOUND_STRING("ALTERING CAVE"), FLAG_LANDMARK_ALTERING_CAVE};
static const struct Landmark Landmark_DesertUnderpass = {COMPOUND_STRING("DESERT UNDERPASS"), FLAG_LANDMARK_DESERT_UNDERPASS};
static const struct Landmark Landmark_TrainerHill = {COMPOUND_STRING("TRAINER HILL"), FLAG_LANDMARK_TRAINER_HILL};
static const struct Landmark *const Landmarks_Route103_2[] =
{

View File

@ -61,9 +61,9 @@ enum {
};
enum {
MOVE_NONE,
MOVE_BACKWARD,
MOVE_FORWARD,
CLOCK_MOVE_NONE,
CLOCK_MOVE_BACKWARD,
CLOCK_MOVE_FORWARD,
};
enum {
@ -806,15 +806,15 @@ static void Task_SetClock_HandleInput(u8 taskId)
}
else
{
gTasks[taskId].tMoveDir = MOVE_NONE;
gTasks[taskId].tMoveDir = CLOCK_MOVE_NONE;
if (JOY_HELD(DPAD_LEFT))
gTasks[taskId].tMoveDir = MOVE_BACKWARD;
gTasks[taskId].tMoveDir = CLOCK_MOVE_BACKWARD;
if (JOY_HELD(DPAD_RIGHT))
gTasks[taskId].tMoveDir = MOVE_FORWARD;
gTasks[taskId].tMoveDir = CLOCK_MOVE_FORWARD;
if (gTasks[taskId].tMoveDir != MOVE_NONE)
if (gTasks[taskId].tMoveDir != CLOCK_MOVE_NONE)
{
if (gTasks[taskId].tMoveSpeed < 0xFF)
gTasks[taskId].tMoveSpeed++;
@ -916,13 +916,13 @@ static u16 CalcNewMinHandAngle(u16 angle, u8 direction, u8 speed)
u8 delta = CalcMinHandDelta(speed);
switch (direction)
{
case MOVE_BACKWARD:
case CLOCK_MOVE_BACKWARD:
if (angle)
angle -= delta;
else
angle = 360 - delta;
break;
case MOVE_FORWARD:
case CLOCK_MOVE_FORWARD:
if (angle < 360 - delta)
angle += delta;
else
@ -936,7 +936,7 @@ static bool32 AdvanceClock(u8 taskId, u8 direction)
{
switch (direction)
{
case MOVE_BACKWARD:
case CLOCK_MOVE_BACKWARD:
if (gTasks[taskId].tMinutes > 0)
{
gTasks[taskId].tMinutes--;
@ -953,7 +953,7 @@ static bool32 AdvanceClock(u8 taskId, u8 direction)
UpdateClockPeriod(taskId, direction);
}
break;
case MOVE_FORWARD:
case CLOCK_MOVE_FORWARD:
if (gTasks[taskId].tMinutes < 59)
{
gTasks[taskId].tMinutes++;
@ -979,7 +979,7 @@ static void UpdateClockPeriod(u8 taskId, u8 direction)
u8 hours = gTasks[taskId].tHours;
switch (direction)
{
case MOVE_BACKWARD:
case CLOCK_MOVE_BACKWARD:
switch (hours)
{
case 11:
@ -990,7 +990,7 @@ static void UpdateClockPeriod(u8 taskId, u8 direction)
break;
}
break;
case MOVE_FORWARD:
case CLOCK_MOVE_FORWARD:
switch (hours)
{
case 0: