Finish rest of event_object_movement
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -9184,66 +9184,3 @@ sMovementActionFuncs_xA5:: @ 83A7018
|
||||
.4byte MovementActionFunc_xA5_0
|
||||
.4byte MovementActionFunc_xA5_1
|
||||
.4byte MovementActionFunc_xA4_2
|
||||
|
||||
.align 2
|
||||
gUnknown_83A7024:: @ 83A7024
|
||||
.4byte 0x00000020, 0x00000010
|
||||
|
||||
gUnknown_83A702C:: @ 83A702C
|
||||
.4byte MetatileBehavior_IsTallGrass_2
|
||||
.4byte MetatileBehavior_IsLongGrass
|
||||
.4byte MetatileBehavior_IsPuddle
|
||||
.4byte MetatileBehavior_IsSurfable
|
||||
.4byte MetatileBehavior_IsWaterfallBottom
|
||||
.4byte MetatileBehavior_UnusedReturnTrue
|
||||
|
||||
gUnknown_83A7044:: @ 83A7044
|
||||
.4byte 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00004000, 0x00010000
|
||||
|
||||
gUnknown_83A705C:: @ 83A705C
|
||||
.4byte MetatileBehavior_IsJumpSouth
|
||||
.4byte MetatileBehavior_IsJumpNorth
|
||||
.4byte MetatileBehavior_IsJumpWest
|
||||
.4byte MetatileBehavior_IsJumpEast
|
||||
|
||||
gUnknown_83A706C:: @ 83A706C
|
||||
.byte 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
|
||||
|
||||
gUnknown_83A707C:: @ 83A707C
|
||||
.byte 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x02
|
||||
|
||||
gUnknown_83A708C:: @ 83A708C
|
||||
.byte 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x01
|
||||
|
||||
gUnknown_83A709C:: @ 83A709C
|
||||
.4byte nullsub_26
|
||||
.4byte DoTracksGroundEffect_Footprints
|
||||
.4byte DoTracksGroundEffect_BikeTireTracks
|
||||
|
||||
gUnknown_83A70A8:: @ 83A70A8
|
||||
.byte 0x0d, 0x00, 0x18, 0x00
|
||||
|
||||
gUnknown_83A70AC:: @ 83A70AC
|
||||
.byte 0x01, 0x02, 0x07, 0x08, 0x01, 0x02, 0x06, 0x05, 0x05, 0x08, 0x03, 0x04, 0x06, 0x07, 0x03, 0x04
|
||||
|
||||
gUnknown_83A70BC:: @ 83A70BC
|
||||
.4byte GroundEffect_SpawnOnTallGrass
|
||||
.4byte GroundEffect_StepOnTallGrass
|
||||
.4byte GroundEffect_SpawnOnLongGrass
|
||||
.4byte GroundEffect_StepOnLongGrass
|
||||
.4byte GroundEffect_WaterReflection
|
||||
.4byte GroundEffect_IceReflection
|
||||
.4byte GroundEffect_FlowingWater
|
||||
.4byte GroundEffect_SandTracks
|
||||
.4byte GroundEffect_DeepSandTracks
|
||||
.4byte GroundEffect_Ripple
|
||||
.4byte GroundEffect_StepOnPuddle
|
||||
.4byte GroundEffect_SandHeap
|
||||
.4byte GroundEffect_JumpOnTallGrass
|
||||
.4byte GroundEffect_JumpOnLongGrass
|
||||
.4byte GroundEffect_JumpOnShallowWater
|
||||
.4byte GroundEffect_JumpOnWater
|
||||
.4byte GroundEffect_JumpLandingDust
|
||||
.4byte GroundEffect_ShortGrass
|
||||
.4byte GroundEffect_HotSprings
|
||||
.4byte GroundEffect_Seaweed
|
||||
|
||||
@@ -25,6 +25,27 @@ struct UnkStruct_083A3698
|
||||
u8 animPos[4];
|
||||
};
|
||||
|
||||
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
|
||||
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1)
|
||||
#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN (1 << 2)
|
||||
#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE (1 << 3)
|
||||
#define GROUND_EFFECT_FLAG_ICE_REFLECTION (1 << 4)
|
||||
#define GROUND_EFFECT_FLAG_REFLECTION (1 << 5)
|
||||
#define GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER (1 << 6)
|
||||
#define GROUND_EFFECT_FLAG_SAND (1 << 7)
|
||||
#define GROUND_EFFECT_FLAG_DEEP_SAND (1 << 8)
|
||||
#define GROUND_EFFECT_FLAG_RIPPLES (1 << 9)
|
||||
#define GROUND_EFFECT_FLAG_PUDDLE (1 << 10)
|
||||
#define GROUND_EFFECT_FLAG_SAND_PILE (1 << 11)
|
||||
#define GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS (1 << 12)
|
||||
#define GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS (1 << 13)
|
||||
#define GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER (1 << 14)
|
||||
#define GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER (1 << 15)
|
||||
#define GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND (1 << 16)
|
||||
#define GROUND_EFFECT_FLAG_SHORT_GRASS (1 << 17)
|
||||
#define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18)
|
||||
#define GROUND_EFFECT_FLAG_SEAWEED (1 << 19)
|
||||
|
||||
struct PairedPalettes
|
||||
{
|
||||
u16 tag;
|
||||
@@ -140,8 +161,11 @@ u8 CreateCopySpriteAt(struct Sprite * sprite, s16 x, s16 y, u8 subpriority);
|
||||
u16 GetObjectPaletteTag(u8 paletteIndex);
|
||||
void SetSpritePosToMapCoords(s16 x, s16 y, s16 *x2, s16 *y2);
|
||||
void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
|
||||
bool8 AreZCoordsCompatible(u8, u8);
|
||||
u8 ZCoordToPriority(u8 z);
|
||||
void ObjectEventUpdateZCoord(struct ObjectEvent *pObject);
|
||||
void SetObjectSubpriorityByZCoord(u8 z, struct Sprite * sprite, u8 offset);
|
||||
bool8 IsZCoordMismatchAt(u8, s16, s16);
|
||||
void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables);
|
||||
u8 AddCameraObject(u8 trackedSpriteId);
|
||||
void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
|
||||
|
||||
@@ -19,5 +19,8 @@ void sub_80DC478(u8, u8);
|
||||
void StartAshFieldEffect(s16, s16, u16, s16);
|
||||
void sub_80DCBB8(struct ObjectEvent *);
|
||||
bool8 sub_80DCBE0(struct ObjectEvent *);
|
||||
void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8);
|
||||
u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
|
||||
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
|
||||
|
||||
#endif //GUARD_FIELD_EFFECT_HELPERS_H
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
//
|
||||
// Created by scott on 9/6/2017.
|
||||
//
|
||||
|
||||
#ifndef GUARD_FIELD_GROUND_EFFECT_H
|
||||
#define GUARD_FIELD_GROUND_EFFECT_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
|
||||
void InitObjectPriorityByZCoord(struct Sprite *, u8);
|
||||
bool8 IsZCoordMismatchAt(u8, s16, s16);
|
||||
bool8 AreZCoordsCompatible(u8, u8);
|
||||
void ObjectEventUpdateSubpriority(struct ObjectEvent *, struct Sprite *);
|
||||
void DoGroundEffects_OnSpawn(struct ObjectEvent *, struct Sprite *);
|
||||
void DoGroundEffects_OnBeginStep(struct ObjectEvent *, struct Sprite *);
|
||||
void DoGroundEffects_OnFinishStep(struct ObjectEvent *, struct Sprite *);
|
||||
|
||||
#endif //GUARD_FIELD_GROUND_EFFECT_H
|
||||
@@ -3,15 +3,15 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsATile(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsJumpEast(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsJumpWest(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsJumpNorth(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsJumpSouth(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsPokeGrass(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsDeepSand(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsReflective(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsIce(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsWarpDoor(u8 metatileBehavior);
|
||||
@@ -50,12 +50,12 @@ bool8 MetatileBehavior_IsSlideEast(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsCounter(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8 tile, u8 playerDirection);
|
||||
bool8 MetatileBehavior_IsPC(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_HasRipples(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsPuddle(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsFootprints(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsBridge(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior);
|
||||
@@ -74,7 +74,7 @@ bool8 MetatileBehavior_IsEastBlocked(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsWestBlocked(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsNorthBlocked(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSouthBlocked(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_8(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsShortGrass(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsHotSprings(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsWaterfall(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_9(u8 metatileBehavior);
|
||||
@@ -82,7 +82,7 @@ bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_4(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_10(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsPacifidlogLog(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_11(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsRegionMap(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_5(u8 metatileBehavior);
|
||||
@@ -103,7 +103,7 @@ bool8 MetatileBehavior_ReturnFalse_15(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsMB22(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsMB0A(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_9(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsBookshelf(u8 metatileBehavior);
|
||||
|
||||
+1
-1
@@ -94,7 +94,6 @@ SECTIONS {
|
||||
src/field_door.o(.text);
|
||||
asm/field_player_avatar.o(.text);
|
||||
src/event_object_movement.o(.text);
|
||||
asm/event_object_movement.o(.text);
|
||||
src/event_object_80688E4.o(.text); /* event_object_movement */
|
||||
src/field_message_box.o(.text);
|
||||
src/event_object_lock.o(.text);
|
||||
@@ -427,6 +426,7 @@ SECTIONS {
|
||||
src/field_door.o(.rodata);
|
||||
data/field_player_avatar.o(.rodata);
|
||||
data/event_object_movement.o(.rodata);
|
||||
src/event_object_movement.o(.rodata);
|
||||
src/event_object_80688E4.o(.rodata); /* event_object_movement */
|
||||
src/scrcmd.o(.rodata);
|
||||
src/coord_event_weather.o(.rodata);
|
||||
|
||||
+1
-1
@@ -461,7 +461,7 @@ u8 BattleSetup_GetTerrainId(void)
|
||||
return BATTLE_TERRAIN_GRASS;
|
||||
if (MetatileBehavior_IsLongGrass(tileBehavior))
|
||||
return BATTLE_TERRAIN_LONG_GRASS;
|
||||
if (MetatileBehavior_IsSandOrDeepSand(tileBehavior))
|
||||
if (MetatileBehavior_IsMB21OrWaterfallBottom(tileBehavior))
|
||||
return BATTLE_TERRAIN_SAND;
|
||||
switch (gMapHeader.mapType)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_ground_effect.h"
|
||||
|
||||
// This is part of evobjmv.c (see assert statement in DoObjectUnionRoomWarpYDisplacement).
|
||||
|
||||
@@ -627,7 +626,7 @@ bool32 RfuUnionObjectIsWarping(u8 objectEventId)
|
||||
#undef tZCoord
|
||||
#undef tObjectEventId
|
||||
|
||||
u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct ObjectEvent * objectEvent)
|
||||
u32 StartFieldEffectForObjectEvent(u8 fieldEffectId, struct ObjectEvent * objectEvent)
|
||||
{
|
||||
ObjectEventGetLocalIdAndMap(objectEvent, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
return FieldEffectStart(fieldEffectId);
|
||||
@@ -638,7 +637,7 @@ void DoShadowFieldEffect(struct ObjectEvent *objectEvent)
|
||||
if (!objectEvent->hasShadow)
|
||||
{
|
||||
objectEvent->hasShadow = TRUE;
|
||||
oe_exec_and_other_stuff(FLDEFF_SHADOW, objectEvent);
|
||||
StartFieldEffectForObjectEvent(FLDEFF_SHADOW, objectEvent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+939
-3
@@ -6,7 +6,6 @@
|
||||
#include "field_control_avatar.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_effect_helpers.h"
|
||||
#include "field_ground_effect.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "fieldmap.h"
|
||||
#include "metatile_behavior.h"
|
||||
@@ -34,6 +33,32 @@ static bool8 IsMetatileDirectionallyImpassable(struct ObjectEvent *, s16, s16, u
|
||||
static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *, s16, s16);
|
||||
static void sub_8067A10(struct ObjectEvent *, struct Sprite *);
|
||||
static void UpdateObjEventSpriteVisibility(struct ObjectEvent *, struct Sprite *);
|
||||
static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent*);
|
||||
static void GetGroundEffectFlags_Reflection(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_SandHeap(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_HotSprings(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_Tracks(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_Puddle(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_Ripple(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_Seaweed(struct ObjectEvent*, u32*);
|
||||
static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent*, u32*);
|
||||
static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent*);
|
||||
static u8 GetReflectionTypeByMetatileBehavior(u32);
|
||||
static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z);
|
||||
static void ObjectEventUpdateSubpriority(struct ObjectEvent*, struct Sprite*);
|
||||
static void DoTracksGroundEffect_None(struct ObjectEvent*, struct Sprite*, u8);
|
||||
static void DoTracksGroundEffect_Footprints(struct ObjectEvent*, struct Sprite*, u8);
|
||||
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent*, struct Sprite*, u8);
|
||||
/*static*/ void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
|
||||
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
|
||||
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
|
||||
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
|
||||
static void CreateReflectionEffectSprites(void);
|
||||
static u8 GetObjectEventIdByLocalId(u8);
|
||||
static u8 GetObjectEventIdByLocalIdAndMapInternal(u8, u8, u8);
|
||||
@@ -64,7 +89,6 @@ static u8 sub_805E238(struct ObjectEventTemplate *, u8, s16, s16);
|
||||
static u8 sub_805E27C(struct ObjectEventTemplate *, s16, s16);
|
||||
static u8 sub_805E2E8(struct ObjectEventTemplate *, s16, s16);
|
||||
static void sub_805E384(struct ObjectEventTemplate *);
|
||||
/*static*/ void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z);
|
||||
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
|
||||
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
|
||||
static u8 sub_8063304(struct ObjectEvent *, struct Sprite *);
|
||||
@@ -7433,4 +7457,916 @@ static void UpdateObjEventSpriteVisibility(struct ObjectEvent *objectEvent, stru
|
||||
{
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*static*/ void GetAllGroundEffectFlags_OnSpawn(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
ObjectEventUpdateMetatileBehaviors(objEvent);
|
||||
GetGroundEffectFlags_Reflection(objEvent, flags);
|
||||
GetGroundEffectFlags_TallGrassOnSpawn(objEvent, flags);
|
||||
GetGroundEffectFlags_LongGrassOnSpawn(objEvent, flags);
|
||||
GetGroundEffectFlags_SandHeap(objEvent, flags);
|
||||
GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
|
||||
GetGroundEffectFlags_ShortGrass(objEvent, flags);
|
||||
GetGroundEffectFlags_HotSprings(objEvent, flags);
|
||||
}
|
||||
|
||||
/*static*/ void GetAllGroundEffectFlags_OnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
ObjectEventUpdateMetatileBehaviors(objEvent);
|
||||
GetGroundEffectFlags_Reflection(objEvent, flags);
|
||||
GetGroundEffectFlags_TallGrassOnBeginStep(objEvent, flags);
|
||||
GetGroundEffectFlags_LongGrassOnBeginStep(objEvent, flags);
|
||||
GetGroundEffectFlags_Tracks(objEvent, flags);
|
||||
GetGroundEffectFlags_SandHeap(objEvent, flags);
|
||||
GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
|
||||
GetGroundEffectFlags_Puddle(objEvent, flags);
|
||||
GetGroundEffectFlags_ShortGrass(objEvent, flags);
|
||||
GetGroundEffectFlags_HotSprings(objEvent, flags);
|
||||
}
|
||||
|
||||
/*static*/ void GetAllGroundEffectFlags_OnFinishStep(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
ObjectEventUpdateMetatileBehaviors(objEvent);
|
||||
GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
|
||||
GetGroundEffectFlags_SandHeap(objEvent, flags);
|
||||
GetGroundEffectFlags_Puddle(objEvent, flags);
|
||||
GetGroundEffectFlags_Ripple(objEvent, flags);
|
||||
GetGroundEffectFlags_ShortGrass(objEvent, flags);
|
||||
GetGroundEffectFlags_HotSprings(objEvent, flags);
|
||||
GetGroundEffectFlags_Seaweed(objEvent, flags);
|
||||
GetGroundEffectFlags_JumpLanding(objEvent, flags);
|
||||
}
|
||||
|
||||
static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent *objEvent)
|
||||
{
|
||||
objEvent->previousMetatileBehavior = MapGridGetMetatileBehaviorAt(objEvent->previousCoords.x, objEvent->previousCoords.y);
|
||||
objEvent->currentMetatileBehavior = MapGridGetMetatileBehaviorAt(objEvent->currentCoords.x, objEvent->currentCoords.y);
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_Reflection(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
u32 reflectionFlags[2] = { GROUND_EFFECT_FLAG_REFLECTION, GROUND_EFFECT_FLAG_ICE_REFLECTION };
|
||||
u8 type = ObjectEventCheckForReflectiveSurface(objEvent);
|
||||
|
||||
if (type)
|
||||
{
|
||||
if (!objEvent->hasReflection)
|
||||
{
|
||||
objEvent->hasReflection = 0;
|
||||
objEvent->hasReflection = 1;
|
||||
*flags |= reflectionFlags[type - 1];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
objEvent->hasReflection = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsTallGrass_2(objEvent->currentMetatileBehavior))
|
||||
*flags |= GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN;
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsTallGrass_2(objEvent->currentMetatileBehavior))
|
||||
*flags |= GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE;
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsLongGrass(objEvent->currentMetatileBehavior))
|
||||
*flags |= GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN;
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsLongGrass(objEvent->currentMetatileBehavior))
|
||||
*flags |= GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE;
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_Tracks(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsDeepSand(objEvent->previousMetatileBehavior))
|
||||
{
|
||||
*flags |= GROUND_EFFECT_FLAG_DEEP_SAND;
|
||||
}
|
||||
else if (MetatileBehavior_IsSandOrDeepSand(objEvent->previousMetatileBehavior)
|
||||
|| MetatileBehavior_IsFootprints(objEvent->previousMetatileBehavior))
|
||||
{
|
||||
*flags |= GROUND_EFFECT_FLAG_SAND;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsDeepSand(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsDeepSand(objEvent->previousMetatileBehavior))
|
||||
{
|
||||
if (!objEvent->inSandPile)
|
||||
{
|
||||
objEvent->inSandPile = 0;
|
||||
objEvent->inSandPile = 1;
|
||||
*flags |= GROUND_EFFECT_FLAG_SAND_PILE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
objEvent->inSandPile = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if ((MetatileBehavior_IsWaterfallBottom(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsWaterfallBottom(objEvent->previousMetatileBehavior))
|
||||
|| (MetatileBehavior_IsPacifidlogLog(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsPacifidlogLog(objEvent->previousMetatileBehavior)))
|
||||
{
|
||||
if (!objEvent->inShallowFlowingWater)
|
||||
{
|
||||
objEvent->inShallowFlowingWater = 0;
|
||||
objEvent->inShallowFlowingWater = 1;
|
||||
*flags |= GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
objEvent->inShallowFlowingWater = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_Puddle(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsPuddle(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsPuddle(objEvent->previousMetatileBehavior))
|
||||
{
|
||||
*flags |= GROUND_EFFECT_FLAG_PUDDLE;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_Ripple(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_HasRipples(objEvent->currentMetatileBehavior))
|
||||
*flags |= GROUND_EFFECT_FLAG_RIPPLES;
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsShortGrass(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsShortGrass(objEvent->previousMetatileBehavior))
|
||||
{
|
||||
if (!objEvent->inShortGrass)
|
||||
{
|
||||
objEvent->inShortGrass = 0;
|
||||
objEvent->inShortGrass = 1;
|
||||
*flags |= GROUND_EFFECT_FLAG_SHORT_GRASS;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
objEvent->inShortGrass = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_HotSprings(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsHotSprings(objEvent->currentMetatileBehavior)
|
||||
&& MetatileBehavior_IsHotSprings(objEvent->previousMetatileBehavior))
|
||||
{
|
||||
if (!objEvent->inHotSprings)
|
||||
{
|
||||
objEvent->inHotSprings = 0;
|
||||
objEvent->inHotSprings = 1;
|
||||
*flags |= GROUND_EFFECT_FLAG_HOT_SPRINGS;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
objEvent->inHotSprings = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_Seaweed(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (MetatileBehavior_IsSeaweed(objEvent->currentMetatileBehavior))
|
||||
*flags |= GROUND_EFFECT_FLAG_SEAWEED;
|
||||
}
|
||||
|
||||
static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
typedef bool8 (*MetatileFunc)(u8);
|
||||
|
||||
static const MetatileFunc metatileFuncs[] = {
|
||||
MetatileBehavior_IsTallGrass_2,
|
||||
MetatileBehavior_IsLongGrass,
|
||||
MetatileBehavior_IsPuddle,
|
||||
MetatileBehavior_IsSurfable,
|
||||
MetatileBehavior_IsWaterfallBottom,
|
||||
MetatileBehavior_IsATile,
|
||||
};
|
||||
|
||||
static const u32 jumpLandingFlags[] = {
|
||||
GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS,
|
||||
GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS,
|
||||
GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER,
|
||||
GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER,
|
||||
GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER,
|
||||
GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND,
|
||||
};
|
||||
|
||||
if (objEvent->landingJump && !objEvent->disableJumpLandingGroundEffect)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(metatileFuncs); i++)
|
||||
{
|
||||
if (metatileFuncs[i](objEvent->currentMetatileBehavior))
|
||||
{
|
||||
*flags |= jumpLandingFlags[i];
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
|
||||
|
||||
// ceil div by tile width?
|
||||
s16 width;
|
||||
s16 height;
|
||||
s16 i;
|
||||
s16 j;
|
||||
u8 result;
|
||||
u8 b;
|
||||
|
||||
#define RETURN_REFLECTION_TYPE_AT(x, y) \
|
||||
b = MapGridGetMetatileBehaviorAt(x, y); \
|
||||
result = GetReflectionTypeByMetatileBehavior(b); \
|
||||
if (result != 0) \
|
||||
return result;
|
||||
|
||||
for (i = 0, height = 1; i < height && height < 2;)
|
||||
{
|
||||
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x, (u16) (objEvent->currentCoords.y + 1 + i))
|
||||
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x, (u16) (objEvent->previousCoords.y + 1 + i))
|
||||
for (j = 1; j < width && width < 2; j++)
|
||||
{
|
||||
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x + j, objEvent->currentCoords.y + 1 + i)
|
||||
RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x - j, objEvent->currentCoords.y + 1 + i)
|
||||
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x + j, objEvent->previousCoords.y + 1 + i)
|
||||
RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x - j, objEvent->previousCoords.y + 1 + i)
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
#undef RETURN_REFLECTION_TYPE_AT
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
|
||||
{
|
||||
asm_unified("\n\
|
||||
push {r4-r7,lr} \n\
|
||||
mov r7, r10 \n\
|
||||
mov r6, r9 \n\
|
||||
mov r5, r8 \n\
|
||||
push {r5-r7} \n\
|
||||
adds r5, r0, 0 \n\
|
||||
ldrb r0, [r5, 0x5] \n\
|
||||
bl GetObjectEventGraphicsInfo \n\
|
||||
movs r4, 0 \n\
|
||||
movs r0, 0x1 \n\
|
||||
mov r10, r0 \n\
|
||||
_08067FA0: \n\
|
||||
movs r1, 0x10 \n\
|
||||
ldrsh r0, [r5, r1] \n\
|
||||
ldrh r1, [r5, 0x12] \n\
|
||||
add r1, r10 \n\
|
||||
lsls r4, 16 \n\
|
||||
asrs r6, r4, 16 \n\
|
||||
adds r1, r6, r1 \n\
|
||||
lsls r1, 16 \n\
|
||||
asrs r1, 16 \n\
|
||||
bl MapGridGetMetatileBehaviorAt \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
bl GetReflectionTypeByMetatileBehavior \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
mov r9, r4 \n\
|
||||
cmp r0, 0 \n\
|
||||
bne _080680BA \n\
|
||||
movs r3, 0x14 \n\
|
||||
ldrsh r0, [r5, r3] \n\
|
||||
ldrh r1, [r5, 0x16] \n\
|
||||
add r1, r10 \n\
|
||||
adds r1, r6, r1 \n\
|
||||
lsls r1, 16 \n\
|
||||
asrs r1, 16 \n\
|
||||
bl MapGridGetMetatileBehaviorAt \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
bl GetReflectionTypeByMetatileBehavior \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
cmp r0, 0 \n\
|
||||
bne _080680BA \n\
|
||||
movs r2, 0x1 \n\
|
||||
lsls r0, r2, 16 \n\
|
||||
asrs r1, r0, 16 \n\
|
||||
mov r8, r0 \n\
|
||||
cmp r2, r1 \n\
|
||||
bge _080680A8 \n\
|
||||
movs r0, 0x80 \n\
|
||||
lsls r0, 9 \n\
|
||||
asrs r7, r0, 16 \n\
|
||||
_08067FFC: \n\
|
||||
ldrh r0, [r5, 0x10] \n\
|
||||
lsls r1, r2, 16 \n\
|
||||
asrs r4, r1, 16 \n\
|
||||
adds r0, r4, r0 \n\
|
||||
lsls r0, 16 \n\
|
||||
asrs r0, 16 \n\
|
||||
ldrh r1, [r5, 0x12] \n\
|
||||
adds r1, r7, r1 \n\
|
||||
adds r1, r6, r1 \n\
|
||||
lsls r1, 16 \n\
|
||||
asrs r1, 16 \n\
|
||||
bl MapGridGetMetatileBehaviorAt \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
bl GetReflectionTypeByMetatileBehavior \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
cmp r0, 0 \n\
|
||||
bne _080680BA \n\
|
||||
ldrh r0, [r5, 0x10] \n\
|
||||
subs r0, r4 \n\
|
||||
lsls r0, 16 \n\
|
||||
asrs r0, 16 \n\
|
||||
ldrh r1, [r5, 0x12] \n\
|
||||
adds r1, r7, r1 \n\
|
||||
adds r1, r6, r1 \n\
|
||||
lsls r1, 16 \n\
|
||||
asrs r1, 16 \n\
|
||||
bl MapGridGetMetatileBehaviorAt \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
bl GetReflectionTypeByMetatileBehavior \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
cmp r0, 0 \n\
|
||||
bne _080680BA \n\
|
||||
ldrh r0, [r5, 0x14] \n\
|
||||
adds r0, r4, r0 \n\
|
||||
lsls r0, 16 \n\
|
||||
asrs r0, 16 \n\
|
||||
ldrh r1, [r5, 0x16] \n\
|
||||
adds r1, r7, r1 \n\
|
||||
adds r1, r6, r1 \n\
|
||||
lsls r1, 16 \n\
|
||||
asrs r1, 16 \n\
|
||||
bl MapGridGetMetatileBehaviorAt \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
bl GetReflectionTypeByMetatileBehavior \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
cmp r0, 0 \n\
|
||||
bne _080680BA \n\
|
||||
ldrh r0, [r5, 0x14] \n\
|
||||
subs r0, r4 \n\
|
||||
lsls r0, 16 \n\
|
||||
asrs r0, 16 \n\
|
||||
ldrh r1, [r5, 0x16] \n\
|
||||
adds r1, r7, r1 \n\
|
||||
adds r1, r6, r1 \n\
|
||||
lsls r1, 16 \n\
|
||||
asrs r1, 16 \n\
|
||||
bl MapGridGetMetatileBehaviorAt \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
bl GetReflectionTypeByMetatileBehavior \n\
|
||||
lsls r0, 24 \n\
|
||||
lsrs r0, 24 \n\
|
||||
cmp r0, 0 \n\
|
||||
bne _080680BA \n\
|
||||
adds r0, r4, 0x1 \n\
|
||||
lsls r0, 16 \n\
|
||||
lsrs r2, r0, 16 \n\
|
||||
asrs r0, 16 \n\
|
||||
mov r3, r8 \n\
|
||||
asrs r1, r3, 16 \n\
|
||||
cmp r0, r1 \n\
|
||||
blt _08067FFC \n\
|
||||
_080680A8: \n\
|
||||
movs r0, 0x80 \n\
|
||||
lsls r0, 9 \n\
|
||||
add r0, r9 \n\
|
||||
lsrs r4, r0, 16 \n\
|
||||
asrs r0, 16 \n\
|
||||
cmp r0, 0x2 \n\
|
||||
bge _080680B8 \n\
|
||||
b _08067FA0 \n\
|
||||
_080680B8: \n\
|
||||
movs r0, 0 \n\
|
||||
_080680BA: \n\
|
||||
pop {r3-r5} \n\
|
||||
mov r8, r3 \n\
|
||||
mov r9, r4 \n\
|
||||
mov r10, r5 \n\
|
||||
pop {r4-r7} \n\
|
||||
pop {r1} \n\
|
||||
bx r1 \n\
|
||||
");
|
||||
}
|
||||
#endif
|
||||
|
||||
static u8 GetReflectionTypeByMetatileBehavior(u32 behavior)
|
||||
{
|
||||
if (MetatileBehavior_IsIce(behavior))
|
||||
return 1;
|
||||
else if (MetatileBehavior_IsReflective(behavior))
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z)
|
||||
{
|
||||
static bool8 (*const gUnknown_83A705C[])(u8) = {
|
||||
MetatileBehavior_IsJumpSouth,
|
||||
MetatileBehavior_IsJumpNorth,
|
||||
MetatileBehavior_IsJumpWest,
|
||||
MetatileBehavior_IsJumpEast,
|
||||
};
|
||||
|
||||
u8 b;
|
||||
u8 index = z;
|
||||
|
||||
if (index == 0)
|
||||
return 0;
|
||||
else if (index > 4)
|
||||
index -= 4;
|
||||
|
||||
index--;
|
||||
b = MapGridGetMetatileBehaviorAt(x, y);
|
||||
|
||||
if (gUnknown_83A705C[index](b) == 1)
|
||||
return index + 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*static*/ void SetObjectEventSpriteOamTableForLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (objEvent->disableCoveringGroundEffects)
|
||||
return;
|
||||
|
||||
if (!MetatileBehavior_IsLongGrass(objEvent->currentMetatileBehavior))
|
||||
return;
|
||||
|
||||
if (!MetatileBehavior_IsLongGrass(objEvent->previousMetatileBehavior))
|
||||
return;
|
||||
|
||||
sprite->subspriteTableNum = 4;
|
||||
|
||||
if (ZCoordToPriority(objEvent->previousElevation) == 1)
|
||||
sprite->subspriteTableNum = 5;
|
||||
}
|
||||
|
||||
bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y)
|
||||
{
|
||||
u8 mapZ;
|
||||
|
||||
if (z == 0)
|
||||
return FALSE;
|
||||
|
||||
mapZ = MapGridGetZCoordAt(x, y);
|
||||
|
||||
if (mapZ == 0 || mapZ == 0xF)
|
||||
return FALSE;
|
||||
|
||||
if (mapZ != z)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const u8 sUnknown_083A706C[] = {
|
||||
0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
|
||||
};
|
||||
|
||||
// Each byte corresponds to a sprite priority for an object event.
|
||||
// This is directly the inverse of sObjectEventPriorities_083A708C.
|
||||
static const u8 sObjectEventPriorities_083A707C[] = {
|
||||
2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2
|
||||
};
|
||||
|
||||
// Each byte corresponds to a sprite priority for an object event.
|
||||
// This is the inverse of sObjectEventPriorities_083A707C.
|
||||
// 1 = Above player sprite
|
||||
// 2 = Below player sprite
|
||||
static const u8 sObjectEventPriorities_083A708C[] = {
|
||||
1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1,
|
||||
};
|
||||
|
||||
void UpdateObjectEventZCoordAndPriority(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (objEvent->fixedPriority)
|
||||
return;
|
||||
|
||||
ObjectEventUpdateZCoord(objEvent);
|
||||
|
||||
sprite->subspriteTableNum = sObjectEventPriorities_083A708C[objEvent->previousElevation];
|
||||
sprite->oam.priority = sObjectEventPriorities_083A707C[objEvent->previousElevation];
|
||||
}
|
||||
|
||||
static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z)
|
||||
{
|
||||
sprite->subspriteTableNum = sObjectEventPriorities_083A708C[z];
|
||||
sprite->oam.priority = sObjectEventPriorities_083A707C[z];
|
||||
}
|
||||
|
||||
u8 ZCoordToPriority(u8 z)
|
||||
{
|
||||
return sObjectEventPriorities_083A707C[z];
|
||||
}
|
||||
|
||||
void ObjectEventUpdateZCoord(struct ObjectEvent *objEvent)
|
||||
{
|
||||
u8 z = MapGridGetZCoordAt(objEvent->currentCoords.x, objEvent->currentCoords.y);
|
||||
u8 z2 = MapGridGetZCoordAt(objEvent->previousCoords.x, objEvent->previousCoords.y);
|
||||
|
||||
if (z == 0xF || z2 == 0xF)
|
||||
return;
|
||||
|
||||
objEvent->currentElevation = z;
|
||||
|
||||
if (z != 0 && z != 0xF)
|
||||
objEvent->previousElevation = z;
|
||||
}
|
||||
|
||||
void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b)
|
||||
{
|
||||
s32 tmp = sprite->centerToCornerVecY;
|
||||
u32 tmpa = *(u16 *)&sprite->pos1.y;
|
||||
u32 tmpb = *(u16 *)&gSpriteCoordOffsetY;
|
||||
s32 tmp2 = (tmpa - tmp) + tmpb;
|
||||
u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2;
|
||||
sprite->subpriority = tmp3 + sUnknown_083A706C[a] + b;
|
||||
}
|
||||
|
||||
static void ObjectEventUpdateSubpriority(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
if (objEvent->fixedPriority)
|
||||
return;
|
||||
|
||||
SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1);
|
||||
}
|
||||
|
||||
bool8 AreZCoordsCompatible(u8 a, u8 b)
|
||||
{
|
||||
if (a == 0 || b == 0)
|
||||
return TRUE;
|
||||
|
||||
if (a != b)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void GroundEffect_SpawnOnTallGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] = objEvent->localId << 8 | objEvent->mapNum;
|
||||
gFieldEffectArguments[5] = objEvent->mapGroup;
|
||||
gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
|
||||
gFieldEffectArguments[7] = 1;
|
||||
FieldEffectStart(FLDEFF_TALL_GRASS);
|
||||
}
|
||||
|
||||
void GroundEffect_StepOnTallGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] = objEvent->localId << 8 | objEvent->mapNum;
|
||||
gFieldEffectArguments[5] = objEvent->mapGroup;
|
||||
gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
|
||||
gFieldEffectArguments[7] = 0;
|
||||
FieldEffectStart(FLDEFF_TALL_GRASS);
|
||||
}
|
||||
|
||||
void GroundEffect_SpawnOnLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] = objEvent->localId << 8 | objEvent->mapNum;
|
||||
gFieldEffectArguments[5] = objEvent->mapGroup;
|
||||
gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
|
||||
gFieldEffectArguments[7] = 1;
|
||||
FieldEffectStart(FLDEFF_LONG_GRASS);
|
||||
}
|
||||
|
||||
void GroundEffect_StepOnLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] = (objEvent->localId << 8) | objEvent->mapNum;
|
||||
gFieldEffectArguments[5] = objEvent->mapGroup;
|
||||
gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
|
||||
gFieldEffectArguments[7] = 0;
|
||||
FieldEffectStart(FLDEFF_LONG_GRASS);
|
||||
}
|
||||
|
||||
void GroundEffect_WaterReflection(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
SetUpReflection(objEvent, sprite, 0);
|
||||
}
|
||||
|
||||
void GroundEffect_IceReflection(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
SetUpReflection(objEvent, sprite, 1);
|
||||
}
|
||||
|
||||
void GroundEffect_FlowingWater(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
StartFieldEffectForObjectEvent(FLDEFF_FEET_IN_FLOWING_WATER, objEvent);
|
||||
}
|
||||
|
||||
static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) = {
|
||||
DoTracksGroundEffect_None,
|
||||
DoTracksGroundEffect_Footprints,
|
||||
DoTracksGroundEffect_BikeTireTracks,
|
||||
};
|
||||
|
||||
void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
|
||||
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 0);
|
||||
}
|
||||
|
||||
void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
|
||||
sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 1);
|
||||
}
|
||||
|
||||
static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
|
||||
{
|
||||
}
|
||||
|
||||
static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
|
||||
{
|
||||
// First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
|
||||
u16 sandFootprints_FieldEffectData[2] = {
|
||||
FLDEFF_SAND_FOOTPRINTS,
|
||||
FLDEFF_DEEP_SAND_FOOTPRINTS
|
||||
};
|
||||
|
||||
gFieldEffectArguments[0] = objEvent->previousCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->previousCoords.y;
|
||||
gFieldEffectArguments[2] = 149;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] = objEvent->facingDirection;
|
||||
FieldEffectStart(sandFootprints_FieldEffectData[a]);
|
||||
}
|
||||
|
||||
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
|
||||
{
|
||||
// Specifies which bike track shape to show next.
|
||||
// For example, when the bike turns from up to right, it will show
|
||||
// a track that curves to the right.
|
||||
// Each 4-byte row corresponds to the initial direction of the bike, and
|
||||
// each byte in that row is for the next direction of the bike in the order
|
||||
// of down, up, left, right.
|
||||
static const u8 bikeTireTracks_Transitions[4][4] = {
|
||||
1, 2, 7, 8,
|
||||
1, 2, 6, 5,
|
||||
5, 8, 3, 4,
|
||||
6, 7, 3, 4,
|
||||
};
|
||||
|
||||
if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->previousCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->previousCoords.y;
|
||||
gFieldEffectArguments[2] = 149;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
gFieldEffectArguments[4] =
|
||||
bikeTireTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5];
|
||||
FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS);
|
||||
}
|
||||
}
|
||||
|
||||
void GroundEffect_Ripple(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
DoRippleFieldEffect(objEvent, sprite);
|
||||
}
|
||||
|
||||
void GroundEffect_StepOnPuddle(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
StartFieldEffectForObjectEvent(FLDEFF_SPLASH, objEvent);
|
||||
}
|
||||
|
||||
void GroundEffect_SandHeap(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
StartFieldEffectForObjectEvent(FLDEFF_SAND_PILE, objEvent);
|
||||
}
|
||||
|
||||
void GroundEffect_JumpOnTallGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
FieldEffectStart(FLDEFF_JUMP_TALL_GRASS);
|
||||
|
||||
spriteId = FindTallGrassFieldEffectSpriteId(
|
||||
objEvent->localId,
|
||||
objEvent->mapNum,
|
||||
objEvent->mapGroup,
|
||||
objEvent->currentCoords.x,
|
||||
objEvent->currentCoords.y);
|
||||
|
||||
if (spriteId == MAX_SPRITES)
|
||||
GroundEffect_SpawnOnTallGrass(objEvent, sprite);
|
||||
}
|
||||
|
||||
void GroundEffect_JumpOnLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = 2;
|
||||
FieldEffectStart(FLDEFF_JUMP_LONG_GRASS);
|
||||
}
|
||||
|
||||
void GroundEffect_JumpOnShallowWater(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = sprite->oam.priority;
|
||||
FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH);
|
||||
}
|
||||
|
||||
void GroundEffect_JumpOnWater(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = sprite->oam.priority;
|
||||
FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH);
|
||||
}
|
||||
|
||||
void GroundEffect_JumpLandingDust(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
gFieldEffectArguments[2] = objEvent->previousElevation;
|
||||
gFieldEffectArguments[3] = sprite->oam.priority;
|
||||
FieldEffectStart(FLDEFF_DUST);
|
||||
}
|
||||
|
||||
void GroundEffect_ShortGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
StartFieldEffectForObjectEvent(FLDEFF_SHORT_GRASS, objEvent);
|
||||
}
|
||||
|
||||
void GroundEffect_HotSprings(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
StartFieldEffectForObjectEvent(FLDEFF_HOT_SPRINGS_WATER, objEvent);
|
||||
}
|
||||
|
||||
void GroundEffect_Seaweed(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
gFieldEffectArguments[0] = objEvent->currentCoords.x;
|
||||
gFieldEffectArguments[1] = objEvent->currentCoords.y;
|
||||
FieldEffectStart(FLDEFF_BUBBLES);
|
||||
}
|
||||
|
||||
static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite) = {
|
||||
GroundEffect_SpawnOnTallGrass,
|
||||
GroundEffect_StepOnTallGrass,
|
||||
GroundEffect_SpawnOnLongGrass,
|
||||
GroundEffect_StepOnLongGrass,
|
||||
GroundEffect_WaterReflection,
|
||||
GroundEffect_IceReflection,
|
||||
GroundEffect_FlowingWater,
|
||||
GroundEffect_SandTracks,
|
||||
GroundEffect_DeepSandTracks,
|
||||
GroundEffect_Ripple,
|
||||
GroundEffect_StepOnPuddle,
|
||||
GroundEffect_SandHeap,
|
||||
GroundEffect_JumpOnTallGrass,
|
||||
GroundEffect_JumpOnLongGrass,
|
||||
GroundEffect_JumpOnShallowWater,
|
||||
GroundEffect_JumpOnWater,
|
||||
GroundEffect_JumpLandingDust,
|
||||
GroundEffect_ShortGrass,
|
||||
GroundEffect_HotSprings,
|
||||
GroundEffect_Seaweed
|
||||
};
|
||||
|
||||
/*static*/ void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
if (objEvent->localId == OBJ_EVENT_ID_CAMERA && objEvent->invisible)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1)
|
||||
if (flags & 1)
|
||||
sGroundEffectFuncs[i](objEvent, sprite);
|
||||
}
|
||||
|
||||
void filters_out_some_ground_effects(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (objEvent->disableCoveringGroundEffects)
|
||||
{
|
||||
objEvent->inShortGrass = 0;
|
||||
objEvent->inSandPile = 0;
|
||||
objEvent->inShallowFlowingWater = 0;
|
||||
objEvent->inHotSprings = 0;
|
||||
*flags &= ~(GROUND_EFFECT_FLAG_HOT_SPRINGS
|
||||
| GROUND_EFFECT_FLAG_SHORT_GRASS
|
||||
| GROUND_EFFECT_FLAG_SAND_PILE
|
||||
| GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER
|
||||
| GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE);
|
||||
}
|
||||
}
|
||||
|
||||
void FilterOutStepOnPuddleGroundEffectIfJumping(struct ObjectEvent *objEvent, u32 *flags)
|
||||
{
|
||||
if (objEvent->landingJump)
|
||||
*flags &= ~GROUND_EFFECT_FLAG_PUDDLE;
|
||||
}
|
||||
|
||||
static void DoGroundEffects_OnSpawn(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
u32 flags;
|
||||
|
||||
if (objEvent->triggerGroundEffectsOnMove)
|
||||
{
|
||||
flags = 0;
|
||||
UpdateObjectEventZCoordAndPriority(objEvent, sprite);
|
||||
GetAllGroundEffectFlags_OnSpawn(objEvent, &flags);
|
||||
SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
|
||||
DoFlaggedGroundEffects(objEvent, sprite, flags);
|
||||
objEvent->triggerGroundEffectsOnMove = 0;
|
||||
objEvent->disableCoveringGroundEffects = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void DoGroundEffects_OnBeginStep(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
u32 flags;
|
||||
|
||||
if (objEvent->triggerGroundEffectsOnMove)
|
||||
{
|
||||
flags = 0;
|
||||
UpdateObjectEventZCoordAndPriority(objEvent, sprite);
|
||||
GetAllGroundEffectFlags_OnBeginStep(objEvent, &flags);
|
||||
SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
|
||||
filters_out_some_ground_effects(objEvent, &flags);
|
||||
DoFlaggedGroundEffects(objEvent, sprite, flags);
|
||||
objEvent->triggerGroundEffectsOnMove = 0;
|
||||
objEvent->disableCoveringGroundEffects = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void DoGroundEffects_OnFinishStep(struct ObjectEvent *objEvent, struct Sprite *sprite)
|
||||
{
|
||||
u32 flags;
|
||||
|
||||
if (objEvent->triggerGroundEffectsOnStop)
|
||||
{
|
||||
flags = 0;
|
||||
UpdateObjectEventZCoordAndPriority(objEvent, sprite);
|
||||
GetAllGroundEffectFlags_OnFinishStep(objEvent, &flags);
|
||||
SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
|
||||
FilterOutStepOnPuddleGroundEffectIfJumping(objEvent, &flags);
|
||||
DoFlaggedGroundEffects(objEvent, sprite, flags);
|
||||
objEvent->triggerGroundEffectsOnStop = 0;
|
||||
objEvent->landingJump = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ static const u8 sTileBitAttributes[32] = {
|
||||
[4] = 0x08,
|
||||
};
|
||||
|
||||
bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsATile(u8 metatileBehavior)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -69,7 +69,7 @@ bool8 MetatileBehavior_IsPokeGrass(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_21 || metatileBehavior == MB_SAND)
|
||||
return TRUE;
|
||||
@@ -77,7 +77,7 @@ bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_21 || metatileBehavior == MB_WATERFALL_BOTTOM)
|
||||
return TRUE;
|
||||
@@ -85,7 +85,7 @@ bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_IsDeepSand(u8 metatileBehavior) { return FALSE; }
|
||||
|
||||
bool8 MetatileBehavior_IsReflective(u8 metatileBehavior)
|
||||
{
|
||||
@@ -412,7 +412,7 @@ bool8 MetatileBehavior_IsPC(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_HasRipples(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_POND_WATER || metatileBehavior == MB_PUDDLE)
|
||||
return TRUE;
|
||||
@@ -438,7 +438,7 @@ bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior)
|
||||
|
||||
bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_IsFootprints(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior) { return FALSE; }
|
||||
|
||||
@@ -580,7 +580,7 @@ bool8 MetatileBehavior_IsSouthBlocked(u8 metatileBehavior)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_ReturnFalse_8(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_IsShortGrass(u8 metatileBehavior) { return FALSE; }
|
||||
|
||||
bool8 MetatileBehavior_IsHotSprings(u8 metatileBehavior)
|
||||
{
|
||||
@@ -603,7 +603,7 @@ bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior){ return FALSE; }
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_UnusedReturnFalse_4(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_ReturnFalse_10(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_IsPacifidlogLog(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_ReturnFalse_11(u8 metatileBehavior) { return FALSE; }
|
||||
|
||||
bool8 MetatileBehavior_IsRegionMap(u8 metatileBehavior)
|
||||
@@ -683,7 +683,7 @@ bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior) { return FALSE; }
|
||||
bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior) { return FALSE; }
|
||||
|
||||
bool8 MetatileBehavior_IsMB22(u8 metatileBehavior)
|
||||
bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior)
|
||||
{
|
||||
if(metatileBehavior == MB_22)
|
||||
return TRUE;
|
||||
|
||||
+71
-71
@@ -14,42 +14,42 @@
|
||||
typedef u8 (*TrainerApproachFunc)(struct ObjectEvent *, s16, s16, s16);
|
||||
typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
|
||||
|
||||
/*static*/ bool8 CheckTrainer(u8 trainerObjId);
|
||||
/*static*/ u8 GetTrainerApproachDistance(struct ObjectEvent * trainerObj);
|
||||
/*static*/ u8 GetTrainerApproachDistanceSouth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
/*static*/ u8 GetTrainerApproachDistanceNorth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
/*static*/ u8 GetTrainerApproachDistanceWest(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
/*static*/ u8 GetTrainerApproachDistanceEast(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
/*static*/ u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent * trainerObj, u8 approachDistance, u8 facingDirection);
|
||||
/*static*/ void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance);
|
||||
/*static*/ void Task_RunTrainerSeeFuncList(u8 taskId);
|
||||
/*static*/ bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
/*static*/ void Task_DestroyTrainerApproachTask(u8 taskId);
|
||||
/*static*/ void SpriteCB_TrainerIcons(struct Sprite * sprite);
|
||||
/*static*/ void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum);
|
||||
static bool8 CheckTrainer(u8 trainerObjId);
|
||||
static u8 GetTrainerApproachDistance(struct ObjectEvent * trainerObj);
|
||||
static u8 GetTrainerApproachDistanceSouth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 GetTrainerApproachDistanceNorth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 GetTrainerApproachDistanceWest(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 GetTrainerApproachDistanceEast(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
|
||||
static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent * trainerObj, u8 approachDistance, u8 facingDirection);
|
||||
static void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance);
|
||||
static void Task_RunTrainerSeeFuncList(u8 taskId);
|
||||
static bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
|
||||
static void Task_DestroyTrainerApproachTask(u8 taskId);
|
||||
static void SpriteCB_TrainerIcons(struct Sprite * sprite);
|
||||
static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum);
|
||||
|
||||
/*static*/ const u16 sGfx_Emoticons[] = INCBIN_U16("graphics/object_events/emoticons.4bpp");
|
||||
static const u16 sGfx_Emoticons[] = INCBIN_U16("graphics/object_events/emoticons.4bpp");
|
||||
|
||||
// u8 func(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y)
|
||||
// range is the maximum distance the trainer can see
|
||||
// x and y are the player's coordinates
|
||||
// Returns distance to walk if trainer has unobstructed view of player
|
||||
// Returns 0 if trainer can't see player
|
||||
/*static*/ const TrainerApproachFunc sDirectionalApproachDistanceFuncs[] = {
|
||||
static const TrainerApproachFunc sDirectionalApproachDistanceFuncs[] = {
|
||||
GetTrainerApproachDistanceSouth,
|
||||
GetTrainerApproachDistanceNorth,
|
||||
GetTrainerApproachDistanceWest,
|
||||
@@ -59,7 +59,7 @@ typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
|
||||
// bool8 func(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
// Returns TRUE to run the next func immediately
|
||||
// Returns FALSE to delay the next func to the next frame
|
||||
/*static*/ const TrainerSeeFunc sTrainerSeeFuncList[] = {
|
||||
static const TrainerSeeFunc sTrainerSeeFuncList[] = {
|
||||
TrainerSeeFunc_Dummy,
|
||||
TrainerSeeFunc_StartExclMark,
|
||||
TrainerSeeFunc_WaitExclMark,
|
||||
@@ -77,7 +77,7 @@ typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
|
||||
TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown
|
||||
};
|
||||
|
||||
/*static*/ const TrainerSeeFunc sTrainerSeeFuncList2[] = {
|
||||
static const TrainerSeeFunc sTrainerSeeFuncList2[] = {
|
||||
TrainerSeeFunc_TrainerInAshFacesPlayer,
|
||||
TrainerSeeFunc_BeginJumpOutOfAsh,
|
||||
TrainerSeeFunc_WaitJumpOutOfAsh,
|
||||
@@ -104,7 +104,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 CheckTrainer(u8 trainerObjId)
|
||||
static bool8 CheckTrainer(u8 trainerObjId)
|
||||
{
|
||||
const u8 *script = GetObjectEventScriptPointerByObjectEventId(trainerObjId);
|
||||
u8 approachDistance;
|
||||
@@ -122,7 +122,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ u8 GetTrainerApproachDistance(struct ObjectEvent *trainerObj)
|
||||
static u8 GetTrainerApproachDistance(struct ObjectEvent *trainerObj)
|
||||
{
|
||||
s16 x, y;
|
||||
u8 i;
|
||||
@@ -148,7 +148,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// Returns how far south the player is from trainer. 0 if out of trainer's sight.
|
||||
/*static*/ u8 GetTrainerApproachDistanceSouth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
static u8 GetTrainerApproachDistanceSouth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->currentCoords.x == x
|
||||
&& y > trainerObj->currentCoords.y
|
||||
@@ -163,7 +163,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// Returns how far north the player is from trainer. 0 if out of trainer's sight.
|
||||
/*static*/ u8 GetTrainerApproachDistanceNorth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
static u8 GetTrainerApproachDistanceNorth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->currentCoords.x == x
|
||||
&& y < trainerObj->currentCoords.y
|
||||
@@ -174,7 +174,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// Returns how far west the player is from trainer. 0 if out of trainer's sight.
|
||||
/*static*/ u8 GetTrainerApproachDistanceWest(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
static u8 GetTrainerApproachDistanceWest(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->currentCoords.y == y
|
||||
&& x < trainerObj->currentCoords.x
|
||||
@@ -185,7 +185,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// Returns how far east the player is from trainer. 0 if out of trainer's sight.
|
||||
/*static*/ u8 GetTrainerApproachDistanceEast(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
static u8 GetTrainerApproachDistanceEast(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
|
||||
{
|
||||
if (trainerObj->currentCoords.y == y
|
||||
&& x > trainerObj->currentCoords.x
|
||||
@@ -197,7 +197,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
|
||||
#define COLLISION_MASK (~1)
|
||||
|
||||
/*static*/ u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 approachDistance, u8 direction)
|
||||
static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 approachDistance, u8 direction)
|
||||
{
|
||||
s16 x, y;
|
||||
u8 unk19_temp;
|
||||
@@ -245,7 +245,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
(dest) = (struct ObjectEvent *)(((task)->tTrainerObjHi << 16) | ((u16)(task)->tTrainerObjLo)); \
|
||||
} while (0)
|
||||
|
||||
/*static*/ void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance)
|
||||
static void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance)
|
||||
{
|
||||
u8 taskId = CreateTask(Task_RunTrainerSeeFuncList, 80);
|
||||
struct Task * task = &gTasks[taskId];
|
||||
@@ -254,7 +254,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
task->tTrainerRange = approachDistance;
|
||||
}
|
||||
|
||||
/*static*/ void StartTrainerApproachWithFollowupTask(TaskFunc taskFunc)
|
||||
static void StartTrainerApproachWithFollowupTask(TaskFunc taskFunc)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_RunTrainerSeeFuncList);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_RunTrainerSeeFuncList, taskFunc);
|
||||
@@ -262,7 +262,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
Task_RunTrainerSeeFuncList(taskId);
|
||||
}
|
||||
|
||||
/*static*/ void Task_RunTrainerSeeFuncList(u8 taskId)
|
||||
static void Task_RunTrainerSeeFuncList(u8 taskId)
|
||||
{
|
||||
struct Task * task = &gTasks[taskId];
|
||||
struct ObjectEvent * trainerObj;
|
||||
@@ -281,12 +281,12 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
|
||||
// TrainerSeeFuncs
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
u8 action;
|
||||
// FRLG introduces trainers who can see the player from offscreen above.
|
||||
@@ -306,7 +306,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
if (FieldEffectActiveListContains(FLDEFF_EXCLAMATION_MARK_ICON))
|
||||
{
|
||||
@@ -315,15 +315,15 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
else
|
||||
{
|
||||
task->tFuncId++;
|
||||
if (trainerObj->movementType == MOVEMENT_TYPE_TREE_DISGUISE || trainerObj->movementType == MOVEMENT_TYPE_MOUNTAIN_DISGUISE)
|
||||
if (trainerObj->movementType == MOVEMENT_TYPE_TREE_DISGUISE || trainerObj->movementType == MOVEMENT_TYPE_MOUNTAIN_DISGUISE)
|
||||
task->tFuncId = 6;
|
||||
if (trainerObj->movementType == MOVEMENT_TYPE_HIDDEN)
|
||||
if (trainerObj->movementType == MOVEMENT_TYPE_HIDDEN)
|
||||
task->tFuncId = 8;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
if (!ObjectEventIsMovementOverridden(trainerObj) || ObjectEventClearHeldMovementIfFinished(trainerObj))
|
||||
{
|
||||
@@ -341,7 +341,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
struct ObjectEvent *playerObj;
|
||||
|
||||
@@ -363,7 +363,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||
|
||||
@@ -374,7 +374,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// Jumps here if disguised. Not used in FRLG.
|
||||
/*static*/ bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
if (!ObjectEventIsMovementOverridden(trainerObj)
|
||||
|| ObjectEventClearHeldMovementIfFinished(trainerObj))
|
||||
@@ -385,7 +385,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
if (ObjectEventClearHeldMovementIfFinished(trainerObj))
|
||||
task->tFuncId = 3;
|
||||
@@ -394,7 +394,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// Jump here if hidden in ash. Not used in FRLG.
|
||||
/*static*/ bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
if (!ObjectEventIsMovementOverridden(trainerObj)
|
||||
|| ObjectEventClearHeldMovementIfFinished(trainerObj))
|
||||
@@ -405,7 +405,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
if (ObjectEventCheckHeldMovementStatus(trainerObj))
|
||||
{
|
||||
@@ -419,7 +419,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
struct Sprite *sprite;
|
||||
|
||||
@@ -438,7 +438,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
|
||||
static bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
|
||||
{
|
||||
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
|
||||
task->tFuncId = 3;
|
||||
@@ -447,7 +447,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
}
|
||||
|
||||
// FRLG exclusive: Scroll the camera up to reveal an offscreen above trainer
|
||||
/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
|
||||
static bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
|
||||
{
|
||||
int specialObjectId;
|
||||
task->tData5 = 0;
|
||||
@@ -458,7 +458,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
|
||||
static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
|
||||
{
|
||||
u8 specialObjectId;
|
||||
TryGetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &specialObjectId);
|
||||
@@ -481,7 +481,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
|
||||
{
|
||||
u8 specialObjectId;
|
||||
TryGetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &specialObjectId);
|
||||
@@ -514,7 +514,7 @@ bool8 CheckForTrainersWantingBattle(void)
|
||||
#undef tTrainerObjHi
|
||||
#undef tFuncId
|
||||
|
||||
/*static*/ void Task_RevealTrainer_RunTrainerSeeFuncList(u8 taskId)
|
||||
static void Task_RevealTrainer_RunTrainerSeeFuncList(u8 taskId)
|
||||
{
|
||||
struct Task * task = &gTasks[taskId];
|
||||
struct ObjectEvent * trainerObj;
|
||||
@@ -549,7 +549,7 @@ void EndTrainerApproach(void)
|
||||
StartTrainerApproachWithFollowupTask(Task_DestroyTrainerApproachTask);
|
||||
}
|
||||
|
||||
/*static*/ void Task_DestroyTrainerApproachTask(u8 taskId)
|
||||
static void Task_DestroyTrainerApproachTask(u8 taskId)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
@@ -564,7 +564,7 @@ void EndTrainerApproach(void)
|
||||
#define sData4 data[4]
|
||||
#define sFldEffId data[7]
|
||||
|
||||
/*static*/ const struct OamData sOamData_Emoticons = {
|
||||
static const struct OamData sOamData_Emoticons = {
|
||||
.y = 0,
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.objMode = ST_OAM_OBJ_NORMAL,
|
||||
@@ -580,7 +580,7 @@ void EndTrainerApproach(void)
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
/*static*/ const struct SpriteFrameImage sSpriteImages_Emoticons[] = {
|
||||
static const struct SpriteFrameImage sSpriteImages_Emoticons[] = {
|
||||
{sGfx_Emoticons + 0x000, 0x80},
|
||||
{sGfx_Emoticons + 0x040, 0x80},
|
||||
{sGfx_Emoticons + 0x080, 0x80},
|
||||
@@ -602,42 +602,42 @@ void EndTrainerApproach(void)
|
||||
{sGfx_Emoticons + 0x380, 0x80},
|
||||
};
|
||||
|
||||
/*static*/ const union AnimCmd sAnimCmd_ExclamationMark1[] = {
|
||||
static const union AnimCmd sAnimCmd_ExclamationMark1[] = {
|
||||
ANIMCMD_FRAME( 0, 4),
|
||||
ANIMCMD_FRAME( 1, 4),
|
||||
ANIMCMD_FRAME( 2, 52),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
/*static*/ const union AnimCmd sAnimCmd_DoubleExclMark[] = {
|
||||
static const union AnimCmd sAnimCmd_DoubleExclMark[] = {
|
||||
ANIMCMD_FRAME( 6, 4),
|
||||
ANIMCMD_FRAME( 7, 4),
|
||||
ANIMCMD_FRAME( 8, 52),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
/*static*/ const union AnimCmd sAnimCmd_X[] = {
|
||||
static const union AnimCmd sAnimCmd_X[] = {
|
||||
ANIMCMD_FRAME( 3, 4),
|
||||
ANIMCMD_FRAME( 4, 4),
|
||||
ANIMCMD_FRAME( 5, 52),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
/*static*/ const union AnimCmd sAnimCmd_SmileyFace[] = {
|
||||
static const union AnimCmd sAnimCmd_SmileyFace[] = {
|
||||
ANIMCMD_FRAME( 9, 4),
|
||||
ANIMCMD_FRAME(10, 4),
|
||||
ANIMCMD_FRAME(11, 52),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
/*static*/ const union AnimCmd sAnimCmd_QuestionMark[] = {
|
||||
static const union AnimCmd sAnimCmd_QuestionMark[] = {
|
||||
ANIMCMD_FRAME(12, 4),
|
||||
ANIMCMD_FRAME(13, 4),
|
||||
ANIMCMD_FRAME(14, 52),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
/*static*/ const union AnimCmd *const sSpriteAnimTable_Emoticons[] = {
|
||||
static const union AnimCmd *const sSpriteAnimTable_Emoticons[] = {
|
||||
sAnimCmd_ExclamationMark1,
|
||||
sAnimCmd_DoubleExclMark,
|
||||
sAnimCmd_X,
|
||||
@@ -645,7 +645,7 @@ void EndTrainerApproach(void)
|
||||
sAnimCmd_QuestionMark
|
||||
};
|
||||
|
||||
/*static*/ const struct SpriteTemplate sSpriteTemplate_Emoticons = {
|
||||
static const struct SpriteTemplate sSpriteTemplate_Emoticons = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0xFFFF,
|
||||
.oam = &sOamData_Emoticons,
|
||||
@@ -705,7 +705,7 @@ u8 FldEff_QuestionMarkIcon(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*static*/ void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum)
|
||||
static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum)
|
||||
{
|
||||
sprite->oam.priority = 1;
|
||||
sprite->coordOffsetEnabled = 1;
|
||||
@@ -719,7 +719,7 @@ u8 FldEff_QuestionMarkIcon(void)
|
||||
StartSpriteAnim(sprite, spriteAnimNum);
|
||||
}
|
||||
|
||||
/*static*/ void SpriteCB_TrainerIcons(struct Sprite *sprite)
|
||||
static void SpriteCB_TrainerIcons(struct Sprite *sprite)
|
||||
{
|
||||
u8 objEventId;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user