Merge branch 'master' into clone-union

This commit is contained in:
GriffinR
2022-02-22 18:42:20 -05:00
committed by GitHub
29 changed files with 851 additions and 813 deletions
+25 -13
View File
@@ -14,10 +14,10 @@
create_movement face_up_fast
create_movement face_left_fast
create_movement face_right_fast
create_movement walk_slowest_down
create_movement walk_slowest_up
create_movement walk_slowest_left
create_movement walk_slowest_right
create_movement walk_slower_down
create_movement walk_slower_up
create_movement walk_slower_left
create_movement walk_slower_right
create_movement walk_slow_down
create_movement walk_slow_up
create_movement walk_slow_left
@@ -55,10 +55,10 @@
create_movement walk_in_place_fastest_up
create_movement walk_in_place_fastest_left
create_movement walk_in_place_fastest_right
create_movement face_down_slow
create_movement face_up_slow
create_movement face_left_slow
create_movement face_right_slow
create_movement ride_water_current_down
create_movement ride_water_current_up
create_movement ride_water_current_lefft
create_movement ride_water_current_right
create_movement walk_fastest_down
create_movement walk_fastest_up
create_movement walk_fastest_left
@@ -113,12 +113,24 @@
create_movement rock_smash_break
create_movement cut_tree
enum_start 0x91
create_movement step_91
create_movement step_92
enum_start 0x94
create_movement spin_down
create_movement spin_up
create_movement spin_left
create_movement spin_right
enum_start 0x96
create_movement step_96
enum_start 0x9b
create_movement walk_slowest_down
create_movement walk_slowest_up
create_movement walk_slowest_left
create_movement walk_slowest_right
create_movement shake_head
enum_start 0xa6
create_movement jump_special_with_effect_down
create_movement jump_special_with_effect_up
create_movement jump_special_with_effect_left
create_movement jump_special_with_effect_right
enum_start 0xfe
create_movement step_end
+7 -7
View File
@@ -115,11 +115,11 @@ BirthIsland_Exterior_EventScript_RanFromDeoxys:: @ 8165348
end
Movement_DeoxysApproach: @ 8165353
walk_slowest_down
walk_slowest_down
walk_slowest_down
walk_slowest_down
walk_slowest_down
walk_slowest_down
walk_slowest_down
walk_slower_down
walk_slower_down
walk_slower_down
walk_slower_down
walk_slower_down
walk_slower_down
walk_slower_down
step_end
+2 -2
View File
@@ -251,8 +251,8 @@ CinnabarIsland_Movement_BoatArrive:: @ 8167195
walk_fast_left
walk_fast_left
walk_left
walk_slowest_left
walk_slowest_left
walk_slower_left
walk_slower_left
step_end
CinnabarIsland_Movement_BillBoardBoat:: @ 816719D
@@ -170,7 +170,7 @@ FourIsland_PokemonDayCare_Movement_RetrieveMon:: @ 8171B71
delay_16
delay_16
face_up
walk_slowest_up
walk_slower_up
set_invisible
delay_16
delay_16
@@ -179,7 +179,7 @@ FourIsland_PokemonDayCare_Movement_RetrieveMon:: @ 8171B71
delay_16
face_down
set_visible
walk_slowest_down
walk_slower_down
step_end
@ Unused. Possibly a commented script, or a typo end added to the above Movement script
+1 -1
View File
@@ -51,7 +51,7 @@
"x": 36,
"y": 15,
"elevation": 3,
"movement_type": "MOVEMENT_TYPE_WANDER_AROUND_SLOWEST",
"movement_type": "MOVEMENT_TYPE_WANDER_AROUND_SLOWER",
"movement_range_x": 4,
"movement_range_y": 1,
"trainer_type": "TRAINER_TYPE_NONE",
+2 -2
View File
@@ -24,7 +24,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "66",
"trainer_type": "FLAG_HIDE_SEAFOAM_B1F_BOULDER_1",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_1F_BOULDER_1"
@@ -38,7 +38,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "67",
"trainer_type": "FLAG_HIDE_SEAFOAM_B1F_BOULDER_2",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_1F_BOULDER_2"
+2 -2
View File
@@ -24,7 +24,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "68",
"trainer_type": "FLAG_HIDE_SEAFOAM_B2F_BOULDER_1",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_B1F_BOULDER_1"
@@ -38,7 +38,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "69",
"trainer_type": "FLAG_HIDE_SEAFOAM_B2F_BOULDER_2",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_B1F_BOULDER_2"
+2 -2
View File
@@ -24,7 +24,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "70",
"trainer_type": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_1",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_B2F_BOULDER_1"
@@ -38,7 +38,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "71",
"trainer_type": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_2",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_B2F_BOULDER_2"
+2 -2
View File
@@ -52,7 +52,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "77",
"trainer_type": "FLAG_HIDE_SEAFOAM_B4F_BOULDER_2",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_5"
@@ -94,7 +94,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "76",
"trainer_type": "FLAG_HIDE_SEAFOAM_B4F_BOULDER_1",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_SEAFOAM_B3F_BOULDER_3"
+1 -1
View File
@@ -122,7 +122,7 @@
"movement_type": "MOVEMENT_TYPE_FACE_DOWN",
"movement_range_x": 0,
"movement_range_y": 0,
"trainer_type": "88",
"trainer_type": "FLAG_HIDE_VICTORY_ROAD_2F_BOULDER",
"trainer_sight_or_berry_tree_id": "0",
"script": "EventScript_StrengthBoulder",
"flag": "FLAG_HIDE_VICTORY_ROAD_3F_BOULDER"
+29 -33
View File
@@ -82,7 +82,7 @@
#define MOVEMENT_TYPE_VS_SEEKER_4D 0x4D
#define MOVEMENT_TYPE_VS_SEEKER_4E 0x4E
#define MOVEMENT_TYPE_VS_SEEKER_4F 0x4F
#define MOVEMENT_TYPE_WANDER_AROUND_SLOWEST 0x50
#define MOVEMENT_TYPE_WANDER_AROUND_SLOWER 0x50
#define MOVEMENT_TYPES_COUNT 0x51
#define MOVEMENT_ACTION_FACE_DOWN 0x0
@@ -93,10 +93,10 @@
#define MOVEMENT_ACTION_FACE_UP_FAST 0x5
#define MOVEMENT_ACTION_FACE_LEFT_FAST 0x6
#define MOVEMENT_ACTION_FACE_RIGHT_FAST 0x7
#define MOVEMENT_ACTION_WALK_SLOWEST_DOWN 0x8
#define MOVEMENT_ACTION_WALK_SLOWEST_UP 0x9
#define MOVEMENT_ACTION_WALK_SLOWEST_LEFT 0xA
#define MOVEMENT_ACTION_WALK_SLOWEST_RIGHT 0xB
#define MOVEMENT_ACTION_WALK_SLOWER_DOWN 0x8
#define MOVEMENT_ACTION_WALK_SLOWER_UP 0x9
#define MOVEMENT_ACTION_WALK_SLOWER_LEFT 0xA
#define MOVEMENT_ACTION_WALK_SLOWER_RIGHT 0xB
#define MOVEMENT_ACTION_WALK_SLOW_DOWN 0xC
#define MOVEMENT_ACTION_WALK_SLOW_UP 0xD
#define MOVEMENT_ACTION_WALK_SLOW_LEFT 0xE
@@ -134,10 +134,10 @@
#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP 0x2E
#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT 0x2F
#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT 0x30
#define MOVEMENT_ACTION_FACE_DOWN_SLOW 0x31
#define MOVEMENT_ACTION_FACE_UP_SLOW 0x32
#define MOVEMENT_ACTION_FACE_LEFT_SLOW 0x33
#define MOVEMENT_ACTION_FACE_RIGHT_SLOW 0x34
#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN 0x31
#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP 0x32
#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT 0x33
#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT 0x34
#define MOVEMENT_ACTION_WALK_FASTEST_DOWN 0x35
#define MOVEMENT_ACTION_WALK_FASTEST_UP 0x36
#define MOVEMENT_ACTION_WALK_FASTEST_LEFT 0x37
@@ -235,33 +235,29 @@
#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP 0x91
#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT 0x92
#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT 0x93
#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN 0x94
#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP 0x95
#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT 0x96
#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT 0x97
// 98-A3 are unknown
#define MOVEMENT_ACTION_0x98 0x98
#define MOVEMENT_ACTION_0x99 0x99
#define MOVEMENT_ACTION_0x9A 0x9A
#define MOVEMENT_ACTION_0x9B 0x9B
#define MOVEMENT_ACTION_0x9C 0x9C
#define MOVEMENT_ACTION_0x9D 0x9D
#define MOVEMENT_ACTION_0x9E 0x9E
#define MOVEMENT_ACTION_0x9F 0x9F
#define MOVEMENT_ACTION_0xA0 0xA0
#define MOVEMENT_ACTION_0xA1 0xA1
#define MOVEMENT_ACTION_0xA2 0xA2
#define MOVEMENT_ACTION_0xA3 0xA3
#define MOVEMENT_ACTION_SPIN_DOWN 0x94
#define MOVEMENT_ACTION_SPIN_UP 0x95
#define MOVEMENT_ACTION_SPIN_LEFT 0x96
#define MOVEMENT_ACTION_SPIN_RIGHT 0x97
#define MOVEMENT_ACTION_0x98 0x98
#define MOVEMENT_ACTION_0x99 0x99
#define MOVEMENT_ACTION_0x9A 0x9A
#define MOVEMENT_ACTION_WALK_SLOWEST_DOWN 0x9B
#define MOVEMENT_ACTION_WALK_SLOWEST_UP 0x9C
#define MOVEMENT_ACTION_WALK_SLOWEST_LEFT 0x9D
#define MOVEMENT_ACTION_WALK_SLOWEST_RIGHT 0x9E
#define MOVEMENT_ACTION_SHAKE_HEAD 0x9F
#define MOVEMENT_ACTION_0xA0 0xA0
#define MOVEMENT_ACTION_0xA1 0xA1
#define MOVEMENT_ACTION_0xA2 0xA2
#define MOVEMENT_ACTION_0xA3 0xA3
#define MOVEMENT_ACTION_FLY_UP 0xA4
#define MOVEMENT_ACTION_FLY_DOWN 0xA5
// Duplicates of JUMP_SPECIAL?
#define MOVEMENT_ACTION_0xA6 0xA6
#define MOVEMENT_ACTION_0xA7 0xA7
#define MOVEMENT_ACTION_0xA8 0xA8
#define MOVEMENT_ACTION_0xA9 0xA9
#define MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_DOWN 0xA6
#define MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_UP 0xA7
#define MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_LEFT 0xA8
#define MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_RIGHT 0xA9
#define MOVEMENT_ACTION_STEP_END 0xFE
+7 -1
View File
@@ -209,8 +209,14 @@
#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 8
#define FRIENDSHIP_EVENT_FAINT_LARGE 9
#define PARTY_SIZE 6
#define MAX_PER_STAT_IVS 31
#define MAX_IV_MASK 31
#define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1)
#define MAX_PER_STAT_EVS 255
#define MAX_TOTAL_EVS 510
#define EV_ITEM_RAISE_LIMIT 100
#define PARTY_SIZE 6
#define UNOWN_FORM_COUNT 28
#define BOX_NAME_LENGTH 8
+12 -12
View File
@@ -64,7 +64,7 @@ bool8 TryGetObjectEventIdByLocalIdAndMap(u8, u8, u8, u8 *);
u8 GetObjectEventIdByXY(s16, s16);
void SetObjectEventDirection(struct ObjectEvent *, u8);
void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
u16 GetObjectEventFlagByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
u16 GetBoulderRevealFlagByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
void LoadPlayerObjectReflectionPalette(u16, u8);
void LoadSpecialObjectReflectionPalette(u16, u8);
void TryMoveObjectEventToMapCoords(u8, u8, u8, s16, s16);
@@ -124,7 +124,7 @@ u8 ObjectEventCheckHeldMovementStatus(struct ObjectEvent *objectEvent);
u8 GetWalkNormalMovementAction(u32);
u8 GetWalkFastMovementAction(u32);
u8 GetWalkFastestMovementAction(u32);
u8 GetWalkSlowestMovementAction(u32 direction);
u8 GetWalkSlowerMovementAction(u32 direction);
u8 GetTrainerFacingDirectionMovementType(u8 direction);
u8 GetFaceDirectionMovementAction(u32);
u8 GetFaceDirectionFastMovementAction(u32);
@@ -134,7 +134,7 @@ u8 GetSlideMovementAction(u32);
u8 GetJumpInPlaceMovementAction(u32);
u8 GetJumpMovementAction(u32);
u8 GetJump2MovementAction(u32);
bool8 NpcTakeStep(struct Sprite *sprite);
bool8 UpdateWalkSlowerAnim(struct Sprite *sprite);
void SetJumpSpriteData(struct Sprite *, u8, u8, u8);
u8 DoJumpSpriteMovement(struct Sprite *);
u8 DoJumpSpecialSpriteMovement(struct Sprite *);
@@ -171,16 +171,16 @@ void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *);
void SetMovementDelay(struct Sprite *, s16);
bool8 WaitForMovementDelay(struct Sprite *);
void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
bool8 obj_npc_ministep(struct Sprite *sprite);
void SetSpriteDataForNormalStep(struct Sprite *, u8);
void SetSpriteDataForNormalStep2(struct Sprite *, u8);
void SetSpriteDataForNormalStep(struct Sprite *, u8, u8);
bool8 NpcTakeStep(struct Sprite *sprite);
void SetWalkSlowerSpriteData(struct Sprite *, u8);
void SetWalkSlowestSpriteData(struct Sprite *, u8);
bool8 UpdateWalkSlowestAnim(struct Sprite *sprite);
void SetWalkSlowSpriteData(struct Sprite *, u8);
bool8 UpdateWalkSlowAnim(struct Sprite *sprite);
void SetSpriteDataForNormalStep3(struct Sprite *, u8);
bool8 sub_8068C18(struct Sprite *sprite);
void DoShadowFieldEffect(struct ObjectEvent *);
void SetSpriteDataForNormalStep4(struct Sprite *, u8);
bool8 sub_8068CB4(struct Sprite *sprite);
void SetRunSlowSpriteData(struct Sprite *, u8);
bool8 UpdateRunSlowAnim(struct Sprite *sprite);
void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
bool8 SpriteAnimEnded(struct Sprite *);
u8 ObjectEventGetHeldMovementActionId(struct ObjectEvent *objectEvent);
@@ -212,7 +212,7 @@ u8 GetJumpInPlaceTurnAroundMovementAction(u32 direction);
u8 GetAcroWheelieInPlaceDirectionMovementAction(u32 direction);
u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction);
u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction);
u8 sub_80641EC(u32 direction);
u8 GetJumpSpecialWithEffectMovementAction(u32 direction);
u8 GetFishingBiteDirectionAnimNum(u8 direction);
void TrySpawnObjectEvents(s16 cameraX, s16 cameraY);
void ResetObjectEvents(void);
+1 -1
View File
@@ -56,7 +56,7 @@ void PlayerFaceDirection(u8 direction);
void PlayerFaceDirectionFast(u8 direction);
void PlayerTurnInPlace(u8 direction);
void PlayerJumpLedge(u8 direction);
void sub_805C260(void);
void PlayerShakeHead(void);
void player_step(u8 direction, u16 newKeys, u16 heldKeys);
bool32 PlayerIsMovingOnRockStairs(u8 direction);
void UpdatePlayerAvatarTransitionState(void);
+7 -1
View File
@@ -211,7 +211,13 @@ static void CreateBattleStartTask(u8 transition, u16 song) // song == 0 means de
static bool8 CheckSilphScopeInPokemonTower(u16 mapGroup, u16 mapNum)
{
if (mapGroup == MAP_GROUP(POKEMON_TOWER_1F)
&& ((u16)(mapNum - MAP_NUM(POKEMON_TOWER_1F)) <= 6)
&& (mapNum == MAP_NUM(POKEMON_TOWER_1F)
|| mapNum == MAP_NUM(POKEMON_TOWER_2F)
|| mapNum == MAP_NUM(POKEMON_TOWER_3F)
|| mapNum == MAP_NUM(POKEMON_TOWER_4F)
|| mapNum == MAP_NUM(POKEMON_TOWER_5F)
|| mapNum == MAP_NUM(POKEMON_TOWER_6F)
|| mapNum == MAP_NUM(POKEMON_TOWER_7F))
&& !(CheckBagHasItem(ITEM_SILPH_SCOPE, 1)))
return TRUE;
else
@@ -471,10 +471,10 @@ bool8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite
[MOVEMENT_ACTION_FACE_UP_FAST] = sMovementActionFuncs_x05,
[MOVEMENT_ACTION_FACE_LEFT_FAST] = sMovementActionFuncs_x06,
[MOVEMENT_ACTION_FACE_RIGHT_FAST] = sMovementActionFuncs_x07,
[MOVEMENT_ACTION_WALK_SLOWEST_DOWN] = sMovementActionFuncs_x08,
[MOVEMENT_ACTION_WALK_SLOWEST_UP] = sMovementActionFuncs_x09,
[MOVEMENT_ACTION_WALK_SLOWEST_LEFT] = sMovementActionFuncs_x0A,
[MOVEMENT_ACTION_WALK_SLOWEST_RIGHT] = sMovementActionFuncs_x0B,
[MOVEMENT_ACTION_WALK_SLOWER_DOWN] = sMovementActionFuncs_x08,
[MOVEMENT_ACTION_WALK_SLOWER_UP] = sMovementActionFuncs_x09,
[MOVEMENT_ACTION_WALK_SLOWER_LEFT] = sMovementActionFuncs_x0A,
[MOVEMENT_ACTION_WALK_SLOWER_RIGHT] = sMovementActionFuncs_x0B,
[MOVEMENT_ACTION_WALK_SLOW_DOWN] = sMovementActionFuncs_x0C,
[MOVEMENT_ACTION_WALK_SLOW_UP] = sMovementActionFuncs_x0D,
[MOVEMENT_ACTION_WALK_SLOW_LEFT] = sMovementActionFuncs_x0E,
@@ -512,10 +512,10 @@ bool8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite
[MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP] = sMovementActionFuncs_x2E,
[MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT] = sMovementActionFuncs_x2F,
[MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT] = sMovementActionFuncs_x30,
[MOVEMENT_ACTION_FACE_DOWN_SLOW] = sMovementActionFuncs_x31,
[MOVEMENT_ACTION_FACE_UP_SLOW] = sMovementActionFuncs_x32,
[MOVEMENT_ACTION_FACE_LEFT_SLOW] = sMovementActionFuncs_x33,
[MOVEMENT_ACTION_FACE_RIGHT_SLOW] = sMovementActionFuncs_x34,
[MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN] = sMovementActionFuncs_x31,
[MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP] = sMovementActionFuncs_x32,
[MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT] = sMovementActionFuncs_x33,
[MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT] = sMovementActionFuncs_x34,
[MOVEMENT_ACTION_WALK_FASTEST_DOWN] = sMovementActionFuncs_x35,
[MOVEMENT_ACTION_WALK_FASTEST_UP] = sMovementActionFuncs_x36,
[MOVEMENT_ACTION_WALK_FASTEST_LEFT] = sMovementActionFuncs_x37,
@@ -611,28 +611,28 @@ bool8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite
[MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP] = sMovementActionFuncs_x91,
[MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT] = sMovementActionFuncs_x92,
[MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT] = sMovementActionFuncs_x93,
[MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN] = sMovementActionFuncs_x94,
[MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP] = sMovementActionFuncs_x95,
[MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT] = sMovementActionFuncs_x96,
[MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT] = sMovementActionFuncs_x97,
[MOVEMENT_ACTION_SPIN_DOWN] = sMovementActionFuncs_x94,
[MOVEMENT_ACTION_SPIN_UP] = sMovementActionFuncs_x95,
[MOVEMENT_ACTION_SPIN_LEFT] = sMovementActionFuncs_x96,
[MOVEMENT_ACTION_SPIN_RIGHT] = sMovementActionFuncs_x97,
[MOVEMENT_ACTION_0x98] = sMovementActionFuncs_x98,
[MOVEMENT_ACTION_0x99] = sMovementActionFuncs_x99,
[MOVEMENT_ACTION_0x9A] = sMovementActionFuncs_x9A,
[MOVEMENT_ACTION_0x9B] = sMovementActionFuncs_x9B,
[MOVEMENT_ACTION_0x9C] = sMovementActionFuncs_x9C,
[MOVEMENT_ACTION_0x9D] = sMovementActionFuncs_x9D,
[MOVEMENT_ACTION_0x9E] = sMovementActionFuncs_x9E,
[MOVEMENT_ACTION_0x9F] = sMovementActionFuncs_x9F,
[MOVEMENT_ACTION_WALK_SLOWEST_DOWN] = sMovementActionFuncs_x9B,
[MOVEMENT_ACTION_WALK_SLOWEST_UP] = sMovementActionFuncs_x9C,
[MOVEMENT_ACTION_WALK_SLOWEST_LEFT] = sMovementActionFuncs_x9D,
[MOVEMENT_ACTION_WALK_SLOWEST_RIGHT] = sMovementActionFuncs_x9E,
[MOVEMENT_ACTION_SHAKE_HEAD] = sMovementActionFuncs_x9F,
[MOVEMENT_ACTION_0xA0] = sMovementActionFuncs_xA0,
[MOVEMENT_ACTION_0xA1] = sMovementActionFuncs_xA1,
[MOVEMENT_ACTION_0xA2] = sMovementActionFuncs_xA2,
[MOVEMENT_ACTION_0xA3] = sMovementActionFuncs_xA3,
[MOVEMENT_ACTION_FLY_UP] = sMovementActionFuncs_xA4,
[MOVEMENT_ACTION_FLY_DOWN] = sMovementActionFuncs_xA5,
[MOVEMENT_ACTION_0xA6] = sMovementActionFuncs_xA6,
[MOVEMENT_ACTION_0xA7] = sMovementActionFuncs_xA7,
[MOVEMENT_ACTION_0xA8] = sMovementActionFuncs_xA8,
[MOVEMENT_ACTION_0xA9] = sMovementActionFuncs_xA9,
[MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_DOWN] = sMovementActionFuncs_xA6,
[MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_UP] = sMovementActionFuncs_xA7,
[MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_LEFT] = sMovementActionFuncs_xA8,
[MOVEMENT_ACTION_JUMP_SPECIAL_WITH_EFFECT_RIGHT] = sMovementActionFuncs_xA9,
};
static bool8 (*const sMovementActionFuncs_x00[])(struct ObjectEvent *, struct Sprite *) = {
@@ -4,7 +4,7 @@ static bool8 MovementType_WanderAround_Step2(struct ObjectEvent *objectEvent, st
static bool8 MovementType_WanderAround_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WanderAround_Step4(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WanderAround_Step5(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WanderAround_Step5Slowest(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WanderAround_Step5Slower(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_WanderAround_Step6(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_LookAround_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite);
static bool8 MovementType_LookAround_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite);
@@ -170,13 +170,13 @@ u8 (*const gMovementTypeFuncs_WanderAround[])(struct ObjectEvent *, struct Sprit
MovementType_WanderAround_Step6,
};
u8 (*const gMovementTypeFuncs_WanderAroundSlowest[])(struct ObjectEvent *, struct Sprite *) = {
u8 (*const gMovementTypeFuncs_WanderAroundSlower[])(struct ObjectEvent *, struct Sprite *) = {
MovementType_WanderAround_Step0,
MovementType_WanderAround_Step1,
MovementType_WanderAround_Step2,
MovementType_WanderAround_Step3,
MovementType_WanderAround_Step4,
MovementType_WanderAround_Step5Slowest,
MovementType_WanderAround_Step5Slower,
MovementType_WanderAround_Step6,
};
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1069,7 +1069,7 @@ void HandleBoulderFallThroughHole(struct ObjectEvent * object)
{
PlaySE(SE_FALL);
RemoveObjectEventByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
FlagClear(GetObjectEventFlagByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup));
FlagClear(GetBoulderRevealFlagByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup));
}
}
+1 -1
View File
@@ -1600,7 +1600,7 @@ static bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct Ob
static bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj)
{
ObjectEventSetHeldMovement(playerObj, GetWalkSlowestMovementAction(DIR_NORTH));
ObjectEventSetHeldMovement(playerObj, GetWalkSlowerMovementAction(DIR_NORTH));
task->data[0]++;
return FALSE;
}
+8 -7
View File
@@ -25,6 +25,7 @@
#include "constants/songs.h"
#include "constants/metatile_behaviors.h"
#include "constants/moves.h"
#include "constants/trainer_types.h"
static EWRAM_DATA struct ObjectEvent * sPlayerObjectPtr = NULL;
static EWRAM_DATA u8 sTeleportSavedFacingDirection = DIR_NONE;
@@ -831,7 +832,7 @@ static void QL_TryRecordNPCStepWithDuration32(struct ObjectEvent * objectEvent,
void PlayerGoSlowest(u8 direction)
{
PlayerSetAnimId(GetWalkSlowestMovementAction(direction), 2);
PlayerSetAnimId(GetWalkSlowerMovementAction(direction), 2);
}
void PlayerGoSlow(u8 direction)
@@ -908,9 +909,9 @@ void PlayerJumpLedge(u8 direction)
PlayerSetAnimId(GetJump2MovementAction(direction), 8);
}
void sub_805C260(void)
void PlayerShakeHead(void)
{
PlayerSetAnimId(MOVEMENT_ACTION_0x9F, 0);
PlayerSetAnimId(MOVEMENT_ACTION_SHAKE_HEAD, 0);
}
void HandleEnforcedLookDirectionOnPlayerStopMoving(void)
@@ -1295,7 +1296,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
playerObjEventTemplate.objUnion.normal.movementType = MOVEMENT_TYPE_PLAYER;
playerObjEventTemplate.objUnion.normal.movementRangeX = 0;
playerObjEventTemplate.objUnion.normal.movementRangeY = 0;
playerObjEventTemplate.objUnion.normal.trainerType = 0;
playerObjEventTemplate.objUnion.normal.trainerType = TRAINER_TYPE_NONE;
playerObjEventTemplate.objUnion.normal.trainerRange_berryTreeId = 0;
playerObjEventTemplate.script = NULL;
playerObjEventTemplate.flagId = 0;
@@ -1428,7 +1429,7 @@ static bool8 DoBoulderDust(struct Task *task, struct ObjectEvent *playerObject,
ObjectEventClearHeldMovementIfFinished(playerObject);
ObjectEventClearHeldMovementIfFinished(strengthObject);
QL_TryRecordPlayerStepWithDuration0(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2]));
QL_TryRecordNPCStepWithDuration32(strengthObject, GetWalkSlowestMovementAction((u8)task->data[2]));
QL_TryRecordNPCStepWithDuration32(strengthObject, GetWalkSlowerMovementAction((u8)task->data[2]));
gFieldEffectArguments[0] = strengthObject->currentCoords.x;
gFieldEffectArguments[1] = strengthObject->currentCoords.y;
gFieldEffectArguments[2] = strengthObject->previousElevation;
@@ -1560,7 +1561,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Objec
{
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
QL_TryRecordPlayerStepWithDuration0(objectEvent, GetWalkSlowestMovementAction(GetOppositeDirection(task->data[1])));
QL_TryRecordPlayerStepWithDuration0(objectEvent, GetWalkSlowerMovementAction(GetOppositeDirection(task->data[1])));
ScriptContext2_Disable();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(FindTaskIdByFunc(PlayerAvatar_DoSecretBaseMatSpin));
@@ -1617,7 +1618,7 @@ static void Task_StopSurfingInit(u8 taskId)
return;
}
SetSurfBlob_BobState(playerObjEvent->fieldEffectSpriteId, 2);
QL_TryRecordPlayerStepWithDuration0(playerObjEvent, sub_80641EC((u8)gTasks[taskId].data[0]));
QL_TryRecordPlayerStepWithDuration0(playerObjEvent, GetJumpSpecialWithEffectMovementAction((u8)gTasks[taskId].data[0]));
gTasks[taskId].func = Task_WaitStopSurfing;
}
+3 -1
View File
@@ -10,6 +10,7 @@
#include "field_specials.h"
#include "constants/songs.h"
#include "constants/items.h"
#include "constants/maps.h"
static EWRAM_DATA const struct YesNoFuncTable *gUnknown_20399C8 = NULL;
static EWRAM_DATA TaskFunc gUnknown_20399CC = NULL;
@@ -94,7 +95,8 @@ bool8 itemid_link_can_give_berry(u16 itemId)
{
if (itemId != ITEM_ENIGMA_BERRY)
return TRUE;
else if (!gSaveBlock1Ptr->location.mapGroup && gSaveBlock1Ptr->location.mapNum == 1)
else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
return FALSE;
else if (InUnionRoom() != TRUE)
return TRUE;
+6 -3
View File
@@ -521,9 +521,9 @@ static void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId
static bool32 IsDummyWarp(struct WarpData *warp)
{
if (warp->mapGroup != -1)
if (warp->mapGroup != (s8)MAP_GROUP(UNDEFINED))
return FALSE;
else if (warp->mapNum != -1)
else if (warp->mapNum != (s8)MAP_NUM(UNDEFINED))
return FALSE;
else if (warp->warpId != -1)
return FALSE;
@@ -896,7 +896,10 @@ bool8 sub_8055B38(u16 metatileBehavior)
{
if (MetatileBehavior_IsSurfable(metatileBehavior) != TRUE)
return FALSE;
if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B3F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B3F)) || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B4F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B4F)))
if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B3F)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B3F))
|| (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEAFOAM_ISLANDS_B4F)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEAFOAM_ISLANDS_B4F)))
return TRUE;
return FALSE;
}
+110 -84
View File
@@ -5,53 +5,74 @@
#include "constants/maps.h"
#include "constants/region_map_sections.h"
EWRAM_DATA u8 sLocationHistory[3][2] = {};
EWRAM_DATA u8 sRoamerLocation[2] = {};
#define saveRoamer (*(&gSaveBlock1Ptr->roamer))
// Despite having a variable to track it, the roamer is
// hard-coded to only ever be in map group 3
#define ROAMER_MAP_GROUP 3
enum
{
MAP_GRP = 0, // map group
MAP_NUM = 1, // map number
MAP_GRP, // map group
MAP_NUM, // map number
};
const u8 sRoamerLocations[][7] = {
{MAP_NUM(ROUTE1), MAP_NUM(ROUTE2), MAP_NUM(ROUTE21_NORTH), MAP_NUM(ROUTE22), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE2), MAP_NUM(ROUTE1), MAP_NUM(ROUTE3), MAP_NUM(ROUTE22), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE3), MAP_NUM(ROUTE2), MAP_NUM(ROUTE4), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE4), MAP_NUM(ROUTE3), MAP_NUM(ROUTE5), MAP_NUM(ROUTE9), MAP_NUM(ROUTE24), 0xff, 0xff},
#define ROAMER (&gSaveBlock1Ptr->roamer)
EWRAM_DATA u8 sLocationHistory[3][2] = {};
EWRAM_DATA u8 sRoamerLocation[2] = {};
#define ___ MAP_NUM(UNDEFINED) // For empty spots in the location table
// Note: There are two potential softlocks that can occur with this table if its maps are
// changed in particular ways. They can be avoided by ensuring the following:
// - There must be at least 2 location sets that start with a different map,
// i.e. every location set cannot start with the same map. This is because of
// the while loop in RoamerMoveToOtherLocationSet.
// - Each location set must have at least 3 unique maps. This is because of
// the while loop in RoamerMove. In this loop the first map in the set is
// ignored, and an additional map is ignored if the roamer was there recently.
// - Additionally, while not a softlock, it's worth noting that if for any
// map in the location table there is not a location set that starts with
// that map then the roamer will be significantly less likely to move away
// from that map when it lands there.
static const u8 sRoamerLocations[][7] = {
{MAP_NUM(ROUTE1), MAP_NUM(ROUTE2), MAP_NUM(ROUTE21_NORTH), MAP_NUM(ROUTE22), ___, ___, ___},
{MAP_NUM(ROUTE2), MAP_NUM(ROUTE1), MAP_NUM(ROUTE3), MAP_NUM(ROUTE22), ___, ___, ___},
{MAP_NUM(ROUTE3), MAP_NUM(ROUTE2), MAP_NUM(ROUTE4), ___, ___, ___, ___},
{MAP_NUM(ROUTE4), MAP_NUM(ROUTE3), MAP_NUM(ROUTE5), MAP_NUM(ROUTE9), MAP_NUM(ROUTE24), ___, ___},
{MAP_NUM(ROUTE5), MAP_NUM(ROUTE4), MAP_NUM(ROUTE6), MAP_NUM(ROUTE7), MAP_NUM(ROUTE8), MAP_NUM(ROUTE9), MAP_NUM(ROUTE24)},
{MAP_NUM(ROUTE6), MAP_NUM(ROUTE5), MAP_NUM(ROUTE7), MAP_NUM(ROUTE8), MAP_NUM(ROUTE11), 0xff, 0xff},
{MAP_NUM(ROUTE7), MAP_NUM(ROUTE5), MAP_NUM(ROUTE6), MAP_NUM(ROUTE8), MAP_NUM(ROUTE16), 0xff, 0xff},
{MAP_NUM(ROUTE8), MAP_NUM(ROUTE5), MAP_NUM(ROUTE6), MAP_NUM(ROUTE7), MAP_NUM(ROUTE10), MAP_NUM(ROUTE12), 0xff},
{MAP_NUM(ROUTE9), MAP_NUM(ROUTE4), MAP_NUM(ROUTE5), MAP_NUM(ROUTE10), MAP_NUM(ROUTE24), 0xff, 0xff},
{MAP_NUM(ROUTE10), MAP_NUM(ROUTE8), MAP_NUM(ROUTE9), MAP_NUM(ROUTE12), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE11), MAP_NUM(ROUTE6), MAP_NUM(ROUTE12), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE12), MAP_NUM(ROUTE10), MAP_NUM(ROUTE11), MAP_NUM(ROUTE13), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE13), MAP_NUM(ROUTE12), MAP_NUM(ROUTE14), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE14), MAP_NUM(ROUTE13), MAP_NUM(ROUTE15), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE15), MAP_NUM(ROUTE14), MAP_NUM(ROUTE18), MAP_NUM(ROUTE19), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE16), MAP_NUM(ROUTE7), MAP_NUM(ROUTE17), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE17), MAP_NUM(ROUTE16), MAP_NUM(ROUTE18), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE18), MAP_NUM(ROUTE15), MAP_NUM(ROUTE17), MAP_NUM(ROUTE19), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE19), MAP_NUM(ROUTE15), MAP_NUM(ROUTE18), MAP_NUM(ROUTE20), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE20), MAP_NUM(ROUTE19), MAP_NUM(ROUTE21_NORTH), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE21_NORTH), MAP_NUM(ROUTE1), MAP_NUM(ROUTE20), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE22), MAP_NUM(ROUTE1), MAP_NUM(ROUTE2), MAP_NUM(ROUTE23), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE23), MAP_NUM(ROUTE22), MAP_NUM(ROUTE2), 0xff, 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE24), MAP_NUM(ROUTE4), MAP_NUM(ROUTE5), MAP_NUM(ROUTE9), 0xff, 0xff, 0xff},
{MAP_NUM(ROUTE25), MAP_NUM(ROUTE24), MAP_NUM(ROUTE9), 0xff, 0xff, 0xff, 0xff},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
{MAP_NUM(ROUTE6), MAP_NUM(ROUTE5), MAP_NUM(ROUTE7), MAP_NUM(ROUTE8), MAP_NUM(ROUTE11), ___, ___},
{MAP_NUM(ROUTE7), MAP_NUM(ROUTE5), MAP_NUM(ROUTE6), MAP_NUM(ROUTE8), MAP_NUM(ROUTE16), ___, ___},
{MAP_NUM(ROUTE8), MAP_NUM(ROUTE5), MAP_NUM(ROUTE6), MAP_NUM(ROUTE7), MAP_NUM(ROUTE10), MAP_NUM(ROUTE12), ___},
{MAP_NUM(ROUTE9), MAP_NUM(ROUTE4), MAP_NUM(ROUTE5), MAP_NUM(ROUTE10), MAP_NUM(ROUTE24), ___, ___},
{MAP_NUM(ROUTE10), MAP_NUM(ROUTE8), MAP_NUM(ROUTE9), MAP_NUM(ROUTE12), ___, ___, ___},
{MAP_NUM(ROUTE11), MAP_NUM(ROUTE6), MAP_NUM(ROUTE12), ___, ___, ___, ___},
{MAP_NUM(ROUTE12), MAP_NUM(ROUTE10), MAP_NUM(ROUTE11), MAP_NUM(ROUTE13), ___, ___, ___},
{MAP_NUM(ROUTE13), MAP_NUM(ROUTE12), MAP_NUM(ROUTE14), ___, ___, ___, ___},
{MAP_NUM(ROUTE14), MAP_NUM(ROUTE13), MAP_NUM(ROUTE15), ___, ___, ___, ___},
{MAP_NUM(ROUTE15), MAP_NUM(ROUTE14), MAP_NUM(ROUTE18), MAP_NUM(ROUTE19), ___, ___, ___},
{MAP_NUM(ROUTE16), MAP_NUM(ROUTE7), MAP_NUM(ROUTE17), ___, ___, ___, ___},
{MAP_NUM(ROUTE17), MAP_NUM(ROUTE16), MAP_NUM(ROUTE18), ___, ___, ___, ___},
{MAP_NUM(ROUTE18), MAP_NUM(ROUTE15), MAP_NUM(ROUTE17), MAP_NUM(ROUTE19), ___, ___, ___},
{MAP_NUM(ROUTE19), MAP_NUM(ROUTE15), MAP_NUM(ROUTE18), MAP_NUM(ROUTE20), ___, ___, ___},
{MAP_NUM(ROUTE20), MAP_NUM(ROUTE19), MAP_NUM(ROUTE21_NORTH), ___, ___, ___, ___},
{MAP_NUM(ROUTE21_NORTH), MAP_NUM(ROUTE1), MAP_NUM(ROUTE20), ___, ___, ___, ___},
{MAP_NUM(ROUTE22), MAP_NUM(ROUTE1), MAP_NUM(ROUTE2), MAP_NUM(ROUTE23), ___, ___, ___},
{MAP_NUM(ROUTE23), MAP_NUM(ROUTE22), MAP_NUM(ROUTE2), ___, ___, ___, ___},
{MAP_NUM(ROUTE24), MAP_NUM(ROUTE4), MAP_NUM(ROUTE5), MAP_NUM(ROUTE9), ___, ___, ___},
{MAP_NUM(ROUTE25), MAP_NUM(ROUTE24), MAP_NUM(ROUTE9), ___, ___, ___, ___},
{___, ___, ___, ___, ___, ___, ___}
};
#undef ___
#define NUM_LOCATION_SETS (ARRAY_COUNT(sRoamerLocations) - 1)
#define NUM_LOCATIONS_PER_SET (ARRAY_COUNT(sRoamerLocations[0]))
void ClearRoamerData(void)
{
u32 i;
gSaveBlock1Ptr->roamer = (struct Roamer){};
*ROAMER = (struct Roamer){};
sRoamerLocation[MAP_GRP] = 0;
sRoamerLocation[MAP_NUM] = 0;
for (i = 0; i < 3; i++)
for (i = 0; i < ARRAY_COUNT(sLocationHistory); i++)
{
sLocationHistory[i][MAP_GRP] = 0;
sLocationHistory[i][MAP_NUM] = 0;
@@ -77,24 +98,23 @@ void ClearRoamerData(void)
void CreateInitialRoamerMon(void)
{
struct Pokemon * tmpMon = &gEnemyParty[0];
u16 roamerMon;
CreateMon(tmpMon, (roamerMon = GetRoamerSpecies()), 50, 0x20, 0, 0, 0, 0);
saveRoamer.species = roamerMon;
saveRoamer.level = 50;
saveRoamer.status = 0;
saveRoamer.active = TRUE;
saveRoamer.ivs = GetMonData(tmpMon, MON_DATA_IVS);
saveRoamer.personality = GetMonData(tmpMon, MON_DATA_PERSONALITY);
saveRoamer.hp = GetMonData(tmpMon, MON_DATA_MAX_HP);
saveRoamer.cool = GetMonData(tmpMon, MON_DATA_COOL);
saveRoamer.beauty = GetMonData(tmpMon, MON_DATA_BEAUTY);
saveRoamer.cute = GetMonData(tmpMon, MON_DATA_CUTE);
saveRoamer.smart = GetMonData(tmpMon, MON_DATA_SMART);
saveRoamer.tough = GetMonData(tmpMon, MON_DATA_TOUGH);
sRoamerLocation[MAP_GRP] = 3;
sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % (NELEMS(sRoamerLocations) - 1)][0];
struct Pokemon * mon = &gEnemyParty[0];
u16 species = GetRoamerSpecies();
CreateMon(mon, species, 50, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0);
ROAMER->species = species;
ROAMER->level = 50;
ROAMER->status = 0;
ROAMER->active = TRUE;
ROAMER->ivs = GetMonData(mon, MON_DATA_IVS);
ROAMER->personality = GetMonData(mon, MON_DATA_PERSONALITY);
ROAMER->hp = GetMonData(mon, MON_DATA_MAX_HP);
ROAMER->cool = GetMonData(mon, MON_DATA_COOL);
ROAMER->beauty = GetMonData(mon, MON_DATA_BEAUTY);
ROAMER->cute = GetMonData(mon, MON_DATA_CUTE);
ROAMER->smart = GetMonData(mon, MON_DATA_SMART);
ROAMER->tough = GetMonData(mon, MON_DATA_TOUGH);
sRoamerLocation[MAP_GRP] = ROAMER_MAP_GROUP;
sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % NUM_LOCATION_SETS][0];
}
void InitRoamer(void)
@@ -107,8 +127,10 @@ void UpdateLocationHistoryForRoamer(void)
{
sLocationHistory[2][MAP_GRP] = sLocationHistory[1][MAP_GRP];
sLocationHistory[2][MAP_NUM] = sLocationHistory[1][MAP_NUM];
sLocationHistory[1][MAP_GRP] = sLocationHistory[0][MAP_GRP];
sLocationHistory[1][MAP_NUM] = sLocationHistory[0][MAP_NUM];
sLocationHistory[0][MAP_GRP] = gSaveBlock1Ptr->location.mapGroup;
sLocationHistory[0][MAP_NUM] = gSaveBlock1Ptr->location.mapNum;
}
@@ -116,16 +138,17 @@ void UpdateLocationHistoryForRoamer(void)
void RoamerMoveToOtherLocationSet(void)
{
u8 mapNum = 0;
struct Roamer *roamer = &saveRoamer;
if (!roamer->active)
if (!ROAMER->active)
return;
sRoamerLocation[MAP_GRP] = 3;
sRoamerLocation[MAP_GRP] = ROAMER_MAP_GROUP;
// Choose a location set that starts with a map
// different from the roamer's current map
while (1)
{
mapNum = sRoamerLocations[Random() % (NELEMS(sRoamerLocations) - 1)][0];
mapNum = sRoamerLocations[Random() % NUM_LOCATION_SETS][0];
if (sRoamerLocation[MAP_NUM] != mapNum)
{
sRoamerLocation[MAP_NUM] = mapNum;
@@ -145,20 +168,23 @@ void RoamerMove(void)
}
else
{
struct Roamer *roamer = &saveRoamer;
if (!roamer->active)
if (!ROAMER->active)
return;
while (locSet < (NELEMS(sRoamerLocations) - 1))
while (locSet < NUM_LOCATION_SETS)
{
// Find the location set that starts with the roamer's current map
if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0])
{
u8 mapNum;
while (1)
{
mapNum = sRoamerLocations[locSet][(Random() % 6) + 1];
if (!(sLocationHistory[2][MAP_GRP] == 3 && sLocationHistory[2][MAP_NUM] == mapNum) && mapNum != 0xFF)
// Choose a new map (excluding the first) within this set
// Also exclude a map if the roamer was there 2 moves ago
mapNum = sRoamerLocations[locSet][(Random() % (NUM_LOCATIONS_PER_SET - 1)) + 1];
if (!(sLocationHistory[2][MAP_GRP] == ROAMER_MAP_GROUP
&& sLocationHistory[2][MAP_NUM] == mapNum)
&& mapNum != MAP_NUM(UNDEFINED))
break;
}
sRoamerLocation[MAP_NUM] = mapNum;
@@ -171,9 +197,7 @@ void RoamerMove(void)
bool8 IsRoamerAt(u8 mapGroup, u8 mapNum)
{
struct Roamer *roamer = &saveRoamer;
if (roamer->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM])
if (ROAMER->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM])
return TRUE;
else
return FALSE;
@@ -181,20 +205,24 @@ bool8 IsRoamerAt(u8 mapGroup, u8 mapNum)
void CreateRoamerMonInstance(void)
{
struct Pokemon *mon;
struct Roamer *roamer;
mon = &gEnemyParty[0];
u32 status;
struct Pokemon *mon = &gEnemyParty[0];
ZeroEnemyPartyMons();
roamer = &saveRoamer;
CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality);
SetMonData(mon, MON_DATA_STATUS, &gSaveBlock1Ptr->roamer.status);
SetMonData(mon, MON_DATA_HP, &gSaveBlock1Ptr->roamer.hp);
SetMonData(mon, MON_DATA_COOL, &gSaveBlock1Ptr->roamer.cool);
SetMonData(mon, MON_DATA_BEAUTY, &gSaveBlock1Ptr->roamer.beauty);
SetMonData(mon, MON_DATA_CUTE, &gSaveBlock1Ptr->roamer.cute);
SetMonData(mon, MON_DATA_SMART, &gSaveBlock1Ptr->roamer.smart);
SetMonData(mon, MON_DATA_TOUGH, &gSaveBlock1Ptr->roamer.tough);
CreateMonWithIVsPersonality(mon, ROAMER->species, ROAMER->level, ROAMER->ivs, ROAMER->personality);
// The roamer's status field is u8, but SetMonData expects status to be u32, so will set the roamer's status
// using the status field and the following 3 bytes (cool, beauty, and cute).
#ifdef BUGFIX
status = ROAMER->status;
SetMonData(mon, MON_DATA_STATUS, &status);
#else
SetMonData(mon, MON_DATA_STATUS, &ROAMER->status);
#endif
SetMonData(mon, MON_DATA_HP, &ROAMER->hp);
SetMonData(mon, MON_DATA_COOL, &ROAMER->cool);
SetMonData(mon, MON_DATA_BEAUTY, &ROAMER->beauty);
SetMonData(mon, MON_DATA_CUTE, &ROAMER->cute);
SetMonData(mon, MON_DATA_SMART, &ROAMER->smart);
SetMonData(mon, MON_DATA_TOUGH, &ROAMER->tough);
}
bool8 TryStartRoamerEncounter(void)
@@ -211,16 +239,15 @@ bool8 TryStartRoamerEncounter(void)
}
void UpdateRoamerHPStatus(struct Pokemon *mon)
{
saveRoamer.hp = GetMonData(mon, MON_DATA_HP);
saveRoamer.status = GetMonData(mon, MON_DATA_STATUS);
ROAMER->hp = GetMonData(mon, MON_DATA_HP);
ROAMER->status = GetMonData(mon, MON_DATA_STATUS);
RoamerMoveToOtherLocationSet();
}
void SetRoamerInactive(void)
{
struct Roamer *roamer = &saveRoamer;
roamer->active = FALSE;
ROAMER->active = FALSE;
}
void GetRoamerLocation(u8 *mapGroup, u8 *mapNum)
@@ -231,8 +258,7 @@ void GetRoamerLocation(u8 *mapGroup, u8 *mapNum)
u16 GetRoamerLocationMapSectionId(void)
{
struct Roamer *roamer = &saveRoamer;
if (!saveRoamer.active)
if (!ROAMER->active)
return MAPSEC_NONE;
return Overworld_GetMapHeaderByGroupAndId(sRoamerLocation[MAP_GRP], sRoamerLocation[MAP_NUM])->regionMapSectionId;
}
+5 -4
View File
@@ -2,6 +2,7 @@
#include "script.h"
#include "event_data.h"
#include "quest_log.h"
#include "constants/maps.h"
#define RAM_SCRIPT_MAGIC 51
#define SCRIPT_STACK_SIZE 20
@@ -511,9 +512,9 @@ bool32 ValidateRamScript(void)
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
if (scriptData->magic != RAM_SCRIPT_MAGIC)
return FALSE;
if (scriptData->mapGroup != 0xFF)
if (scriptData->mapGroup != MAP_GROUP(UNDEFINED))
return FALSE;
if (scriptData->mapNum != 0xFF)
if (scriptData->mapNum != MAP_NUM(UNDEFINED))
return FALSE;
if (scriptData->objectId != 0xFF)
return FALSE;
@@ -529,9 +530,9 @@ u8 *sub_8069E48(void)
return NULL;
if (scriptData->magic != RAM_SCRIPT_MAGIC)
return NULL;
if (scriptData->mapGroup != 0xFF)
if (scriptData->mapGroup != MAP_GROUP(UNDEFINED))
return NULL;
if (scriptData->mapNum != 0xFF)
if (scriptData->mapNum != MAP_NUM(UNDEFINED))
return NULL;
if (scriptData->objectId != 0xFF)
return NULL;
+6 -8
View File
@@ -10,6 +10,7 @@
#include "constants/battle_setup.h"
#include "constants/event_object_movement.h"
#include "constants/event_objects.h"
#include "constants/trainer_types.h"
typedef u8 (*TrainerApproachFunc)(struct ObjectEvent *, s16, s16, s16);
typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
@@ -93,12 +94,9 @@ bool8 CheckForTrainersWantingBattle(void)
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
if (gObjectEvents[i].active
&& (
gObjectEvents[i].trainerType == 1
|| gObjectEvents[i].trainerType == 3
)
&& CheckTrainer(i)
)
&& (gObjectEvents[i].trainerType == TRAINER_TYPE_NORMAL
|| gObjectEvents[i].trainerType == TRAINER_TYPE_BURIED)
&& CheckTrainer(i))
return TRUE;
}
return FALSE;
@@ -129,12 +127,12 @@ static u8 GetTrainerApproachDistance(struct ObjectEvent *trainerObj)
u8 approachDistance;
PlayerGetDestCoords(&x, &y);
if (trainerObj->trainerType == 1) // can only see in one direction
if (trainerObj->trainerType == TRAINER_TYPE_NORMAL) // can only see in one direction
{
approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->facingDirection - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
return CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, trainerObj->facingDirection);
}
else // can see in all directions
else // TRAINER_TYPE_SEE_ALL_DIRECTIONS, TRAINER_TYPE_BURIED
{
for (i = 0; i < 4; i++)
{
+6 -9
View File
@@ -638,14 +638,11 @@ void VsSeekerResetObjectMovementAfterChargeComplete(void)
for (i = 0; i < gMapHeader.events->objectEventCount; i++)
{
if ((
templates[i].objUnion.normal.trainerType == TRAINER_TYPE_NORMAL
|| templates[i].objUnion.normal.trainerType == TRAINER_TYPE_BURIED
) && (
templates[i].objUnion.normal.movementType == MOVEMENT_TYPE_VS_SEEKER_4D
|| templates[i].objUnion.normal.movementType == MOVEMENT_TYPE_VS_SEEKER_4E
|| templates[i].objUnion.normal.movementType == MOVEMENT_TYPE_VS_SEEKER_4F
))
if ((templates[i].objUnion.normal.trainerType == TRAINER_TYPE_NORMAL
|| templates[i].objUnion.normal.trainerType == TRAINER_TYPE_BURIED)
&& (templates[i].objUnion.normal.movementType == MOVEMENT_TYPE_VS_SEEKER_4D
|| templates[i].objUnion.normal.movementType == MOVEMENT_TYPE_VS_SEEKER_4E
|| templates[i].objUnion.normal.movementType == MOVEMENT_TYPE_VS_SEEKER_4F))
{
movementType = GetRandomFaceDirectionMovementType();
TryGetObjectEventIdByLocalIdAndMap(templates[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objEventId);
@@ -808,7 +805,7 @@ static void GatherNearbyTrainerInfo(void)
for (objectEventIdx = 0; objectEventIdx < gMapHeader.events->objectEventCount; objectEventIdx++)
{
if (templates[objectEventIdx].objUnion.normal.trainerType == 1 || templates[objectEventIdx].objUnion.normal.trainerType == 3)
if (templates[objectEventIdx].objUnion.normal.trainerType == TRAINER_TYPE_NORMAL || templates[objectEventIdx].objUnion.normal.trainerType == TRAINER_TYPE_BURIED)
{
sVsSeeker->trainerInfo[vsSeekerObjectIdx].script = templates[objectEventIdx].script;
sVsSeeker->trainerInfo[vsSeekerObjectIdx].trainerIdx = GetTrainerFlagFromScript(templates[objectEventIdx].script);
+1 -1
View File
@@ -182,7 +182,7 @@ static u16 GetCurrentMapWildMonHeaderId(void)
for (i = 0; ; i++)
{
const struct WildPokemonHeader * wildHeader = &gWildMonHeaders[i];
if (wildHeader->mapGroup == 0xFF)
if (wildHeader->mapGroup == MAP_GROUP(UNDEFINED))
break;
if (gWildMonHeaders[i].mapGroup == gSaveBlock1Ptr->location.mapGroup &&
+2 -1
View File
@@ -6,6 +6,7 @@
#include "overworld.h"
#include "pokedex_area_markers.h"
#include "constants/region_map_sections.h"
#include "constants/maps.h"
struct SeviiDexArea
{
@@ -181,7 +182,7 @@ s32 BuildPokedexAreaSubspriteBuffer(u16 species, struct Subsprite * subsprites)
alteringCaveNum = VarGet(VAR_ALTERING_CAVE_WILD_SET);
if (alteringCaveNum > 8)
alteringCaveNum = 0;
for (i = 0, areaCount = 0; gWildMonHeaders[i].mapGroup != 0xFF; i++)
for (i = 0, areaCount = 0; gWildMonHeaders[i].mapGroup != MAP_GROUP(UNDEFINED); i++)
{
mapSecId = GetMapSecIdFromWildMonHeader(&gWildMonHeaders[i]);
if (mapSecId == MAPSEC_ALTERING_CAVE)