Standardize Event Object to Object Event
This commit is contained in:
296
src/overworld.c
296
src/overworld.c
@@ -149,15 +149,15 @@ static u8 GetLinkPlayerElevation(u8 linkPlayerId);
|
||||
static s32 sub_80878E4(u8 linkPlayerId);
|
||||
static u8 GetLinkPlayerIdAt(s16 x, s16 y);
|
||||
static void SetPlayerFacingDirection(u8 linkPlayerId, u8 a2);
|
||||
static void ZeroEventObject(struct EventObject *eventObj);
|
||||
static void SpawnLinkPlayerEventObject(u8 linkPlayerId, s16 x, s16 y, u8 a4);
|
||||
static void InitLinkPlayerEventObjectPos(struct EventObject *eventObj, s16 x, s16 y);
|
||||
static void ZeroObjectEvent(struct ObjectEvent *objEvent);
|
||||
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4);
|
||||
static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s16 y);
|
||||
static void sub_80877DC(u8 linkPlayerId, u8 a2);
|
||||
static void sub_808780C(u8 linkPlayerId);
|
||||
static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId);
|
||||
static void sub_8087584(void);
|
||||
static u32 GetLinkSendQueueLength(void);
|
||||
static void ZeroLinkPlayerEventObject(struct LinkPlayerEventObject *linkPlayerEventObj);
|
||||
static void ZeroLinkPlayerObjectEvent(struct LinkPlayerObjectEvent *linkPlayerEventObj);
|
||||
static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *a1);
|
||||
static u16 GetDirectionForEventScript(const u8 *script);
|
||||
static void sub_8087510(void);
|
||||
@@ -217,7 +217,7 @@ EWRAM_DATA static u16 sLastMapSectionId = 0;
|
||||
EWRAM_DATA static struct InitialPlayerAvatarState gInitialPlayerAvatarState = {0};
|
||||
EWRAM_DATA static u16 sAmbientCrySpecies = 0;
|
||||
EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
|
||||
EWRAM_DATA struct LinkPlayerEventObject gLinkPlayerEventObjects[4] = {0};
|
||||
EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0};
|
||||
|
||||
// const rom data
|
||||
static const struct WarpData sDummyWarpData =
|
||||
@@ -338,23 +338,23 @@ static const struct ScanlineEffectParams sFlashEffectParams =
|
||||
0,
|
||||
};
|
||||
|
||||
static u8 MovementEventModeCB_Normal(struct LinkPlayerEventObject *, struct EventObject *, u8);
|
||||
static u8 MovementEventModeCB_Ignored(struct LinkPlayerEventObject *, struct EventObject *, u8);
|
||||
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerEventObject *, struct EventObject *, u8);
|
||||
static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
|
||||
static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
|
||||
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
|
||||
|
||||
static u8 (*const gLinkPlayerMovementModes[])(struct LinkPlayerEventObject *, struct EventObject *, u8) =
|
||||
static u8 (*const gLinkPlayerMovementModes[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) =
|
||||
{
|
||||
MovementEventModeCB_Normal, // MOVEMENT_MODE_FREE
|
||||
MovementEventModeCB_Ignored, // MOVEMENT_MODE_FROZEN
|
||||
MovementEventModeCB_Normal_2, // MOVEMENT_MODE_SCRIPTED
|
||||
};
|
||||
|
||||
static u8 FacingHandler_DoNothing(struct LinkPlayerEventObject *, struct EventObject *, u8);
|
||||
static u8 FacingHandler_DpadMovement(struct LinkPlayerEventObject *, struct EventObject *, u8);
|
||||
static u8 FacingHandler_ForcedFacingChange(struct LinkPlayerEventObject *, struct EventObject *, u8);
|
||||
static u8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
|
||||
static u8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
|
||||
static u8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8);
|
||||
|
||||
// These handlers return TRUE if the movement was scripted and successful, and FALSE otherwise.
|
||||
static bool8 (*const gLinkPlayerFacingHandlers[])(struct LinkPlayerEventObject *, struct EventObject *, u8) =
|
||||
static bool8 (*const gLinkPlayerFacingHandlers[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) =
|
||||
{
|
||||
FacingHandler_DoNothing,
|
||||
FacingHandler_DpadMovement,
|
||||
@@ -369,11 +369,11 @@ static bool8 (*const gLinkPlayerFacingHandlers[])(struct LinkPlayerEventObject *
|
||||
FacingHandler_ForcedFacingChange,
|
||||
};
|
||||
|
||||
static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerEventObject *, struct EventObject *);
|
||||
static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerEventObject *, struct EventObject *);
|
||||
static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerObjectEvent *, struct ObjectEvent *);
|
||||
static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent *, struct ObjectEvent *);
|
||||
|
||||
// These handlers are run after an attempted movement.
|
||||
static void (*const gMovementStatusHandler[])(struct LinkPlayerEventObject *, struct EventObject *) =
|
||||
static void (*const gMovementStatusHandler[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *) =
|
||||
{
|
||||
// FALSE:
|
||||
MovementStatusHandler_EnterFreeMode,
|
||||
@@ -496,18 +496,18 @@ void ApplyNewEncryptionKeyToGameStats(u32 newKey)
|
||||
void LoadEventObjTemplatesFromHeader(void)
|
||||
{
|
||||
// Clear map object templates
|
||||
CpuFill32(0, gSaveBlock1Ptr->eventObjectTemplates, sizeof(gSaveBlock1Ptr->eventObjectTemplates));
|
||||
CpuFill32(0, gSaveBlock1Ptr->objectEventTemplates, sizeof(gSaveBlock1Ptr->objectEventTemplates));
|
||||
|
||||
// Copy map header events to save block
|
||||
CpuCopy32(gMapHeader.events->eventObjects,
|
||||
gSaveBlock1Ptr->eventObjectTemplates,
|
||||
gMapHeader.events->eventObjectCount * sizeof(struct EventObjectTemplate));
|
||||
CpuCopy32(gMapHeader.events->objectEvents,
|
||||
gSaveBlock1Ptr->objectEventTemplates,
|
||||
gMapHeader.events->objectEventCount * sizeof(struct ObjectEventTemplate));
|
||||
}
|
||||
|
||||
void LoadSaveblockEventObjScripts(void)
|
||||
{
|
||||
struct EventObjectTemplate *mapHeaderObjTemplates = gMapHeader.events->eventObjects;
|
||||
struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
|
||||
struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents;
|
||||
struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
|
||||
@@ -517,15 +517,15 @@ void LoadSaveblockEventObjScripts(void)
|
||||
void Overworld_SetEventObjTemplateCoords(u8 localId, s16 x, s16 y)
|
||||
{
|
||||
s32 i;
|
||||
struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
|
||||
struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
|
||||
for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
|
||||
{
|
||||
struct EventObjectTemplate *eventObjectTemplate = &savObjTemplates[i];
|
||||
if (eventObjectTemplate->localId == localId)
|
||||
struct ObjectEventTemplate *objectEventTemplate = &savObjTemplates[i];
|
||||
if (objectEventTemplate->localId == localId)
|
||||
{
|
||||
eventObjectTemplate->x = x;
|
||||
eventObjectTemplate->y = y;
|
||||
objectEventTemplate->x = x;
|
||||
objectEventTemplate->y = y;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -535,13 +535,13 @@ void Overworld_SetEventObjTemplateMovementType(u8 localId, u8 movementType)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
|
||||
struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||
for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
|
||||
{
|
||||
struct EventObjectTemplate *eventObjectTemplate = &savObjTemplates[i];
|
||||
if (eventObjectTemplate->localId == localId)
|
||||
struct ObjectEventTemplate *objectEventTemplate = &savObjTemplates[i];
|
||||
if (objectEventTemplate->localId == localId)
|
||||
{
|
||||
eventObjectTemplate->movementType = movementType;
|
||||
objectEventTemplate->movementType = movementType;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -853,9 +853,9 @@ static void mli0_load_map(u32 a1)
|
||||
if (!(sUnknown_020322D8 & 1))
|
||||
{
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
|
||||
LoadBattlePyramidEventObjectTemplates();
|
||||
LoadBattlePyramidObjectEventTemplates();
|
||||
else if (InTrainerHill())
|
||||
LoadTrainerHillEventObjectTemplates();
|
||||
LoadTrainerHillObjectEventTemplates();
|
||||
else
|
||||
LoadEventObjTemplatesFromHeader();
|
||||
}
|
||||
@@ -1721,13 +1721,13 @@ void CB2_ContinueSavedGame(void)
|
||||
ClearDiveAndHoleWarps();
|
||||
trainerHillMapId = GetCurrentTrainerHillMapId();
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
|
||||
LoadBattlePyramidFloorEventObjectScripts();
|
||||
LoadBattlePyramidFloorObjectEventScripts();
|
||||
else if (trainerHillMapId != 0 && trainerHillMapId != TRAINER_HILL_ENTRANCE)
|
||||
LoadTrainerHillFloorEventObjectScripts();
|
||||
LoadTrainerHillFloorObjectEventScripts();
|
||||
else
|
||||
LoadSaveblockEventObjScripts();
|
||||
|
||||
UnfreezeEventObjects();
|
||||
UnfreezeObjectEvents();
|
||||
DoTimeBasedEvents();
|
||||
sub_8084788();
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
|
||||
@@ -2143,9 +2143,9 @@ static void sub_8086988(u32 a1)
|
||||
ResetCameraUpdateInfo();
|
||||
InstallCameraPanAheadCallback();
|
||||
if (!a1)
|
||||
InitEventObjectPalettes(0);
|
||||
InitObjectEventPalettes(0);
|
||||
else
|
||||
InitEventObjectPalettes(1);
|
||||
InitObjectEventPalettes(1);
|
||||
|
||||
FieldEffectActiveListClear();
|
||||
StartWeather();
|
||||
@@ -2160,8 +2160,8 @@ static void sub_80869DC(void)
|
||||
{
|
||||
gTotalCameraPixelOffsetX = 0;
|
||||
gTotalCameraPixelOffsetY = 0;
|
||||
ResetEventObjects();
|
||||
TrySpawnEventObjects(0, 0);
|
||||
ResetObjectEvents();
|
||||
TrySpawnObjectEvents(0, 0);
|
||||
TryRunOnWarpIntoMapScript();
|
||||
}
|
||||
|
||||
@@ -2172,13 +2172,13 @@ static void mli4_mapscripts_and_other(void)
|
||||
|
||||
gTotalCameraPixelOffsetX = 0;
|
||||
gTotalCameraPixelOffsetY = 0;
|
||||
ResetEventObjects();
|
||||
ResetObjectEvents();
|
||||
GetCameraFocusCoords(&x, &y);
|
||||
player = GetInitialPlayerAvatarState();
|
||||
InitPlayerAvatar(x, y, player->direction, gSaveBlock2Ptr->playerGender);
|
||||
SetPlayerAvatarTransitionFlags(player->transitionFlags);
|
||||
ResetInitialPlayerAvatarState();
|
||||
TrySpawnEventObjects(0, 0);
|
||||
TrySpawnObjectEvents(0, 0);
|
||||
TryRunOnWarpIntoMapScript();
|
||||
}
|
||||
|
||||
@@ -2191,7 +2191,7 @@ static void sub_8086A68(void)
|
||||
|
||||
static void sub_8086A80(void)
|
||||
{
|
||||
gEventObjects[gPlayerAvatar.eventObjectId].trackedByCamera = 1;
|
||||
gObjectEvents[gPlayerAvatar.objectEventId].trackedByCamera = 1;
|
||||
InitCameraUpdateCallback(gPlayerAvatar.spriteId);
|
||||
}
|
||||
|
||||
@@ -2226,7 +2226,7 @@ static void sub_8086B14(void)
|
||||
|
||||
for (i = 0; i < gFieldLinkPlayerCount; i++)
|
||||
{
|
||||
SpawnLinkPlayerEventObject(i, i + x, y, gLinkPlayers[i].gender);
|
||||
SpawnLinkPlayerObjectEvent(i, i + x, y, gLinkPlayers[i].gender);
|
||||
CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
|
||||
}
|
||||
|
||||
@@ -2702,7 +2702,7 @@ static void LoadTradeRoomPlayer(s32 linkPlayerId, s32 myPlayerId, struct TradeRo
|
||||
|
||||
trainer->playerId = linkPlayerId;
|
||||
trainer->isLocalPlayer = (linkPlayerId == myPlayerId) ? 1 : 0;
|
||||
trainer->c = gLinkPlayerEventObjects[linkPlayerId].movementMode;
|
||||
trainer->c = gLinkPlayerObjectEvents[linkPlayerId].movementMode;
|
||||
trainer->facing = GetLinkPlayerFacingDirection(linkPlayerId);
|
||||
GetLinkPlayerCoords(linkPlayerId, &x, &y);
|
||||
trainer->pos.x = x;
|
||||
@@ -2918,110 +2918,110 @@ static u32 GetLinkSendQueueLength(void)
|
||||
return gLink.sendQueue.count;
|
||||
}
|
||||
|
||||
static void ZeroLinkPlayerEventObject(struct LinkPlayerEventObject *linkPlayerEventObj)
|
||||
static void ZeroLinkPlayerObjectEvent(struct LinkPlayerObjectEvent *linkPlayerEventObj)
|
||||
{
|
||||
memset(linkPlayerEventObj, 0, sizeof(struct LinkPlayerEventObject));
|
||||
memset(linkPlayerEventObj, 0, sizeof(struct LinkPlayerObjectEvent));
|
||||
}
|
||||
|
||||
void ClearLinkPlayerEventObjects(void)
|
||||
void ClearLinkPlayerObjectEvents(void)
|
||||
{
|
||||
memset(gLinkPlayerEventObjects, 0, sizeof(gLinkPlayerEventObjects));
|
||||
memset(gLinkPlayerObjectEvents, 0, sizeof(gLinkPlayerObjectEvents));
|
||||
}
|
||||
|
||||
static void ZeroEventObject(struct EventObject *eventObj)
|
||||
static void ZeroObjectEvent(struct ObjectEvent *objEvent)
|
||||
{
|
||||
memset(eventObj, 0, sizeof(struct EventObject));
|
||||
memset(objEvent, 0, sizeof(struct ObjectEvent));
|
||||
}
|
||||
|
||||
static void SpawnLinkPlayerEventObject(u8 linkPlayerId, s16 x, s16 y, u8 a4)
|
||||
static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4)
|
||||
{
|
||||
u8 eventObjId = GetFirstInactiveEventObjectId();
|
||||
struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
u8 objEventId = GetFirstInactiveObjectEventId();
|
||||
struct LinkPlayerObjectEvent *linkPlayerEventObj = &gLinkPlayerObjectEvents[linkPlayerId];
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
|
||||
ZeroLinkPlayerEventObject(linkPlayerEventObj);
|
||||
ZeroEventObject(eventObj);
|
||||
ZeroLinkPlayerObjectEvent(linkPlayerEventObj);
|
||||
ZeroObjectEvent(objEvent);
|
||||
|
||||
linkPlayerEventObj->active = 1;
|
||||
linkPlayerEventObj->linkPlayerId = linkPlayerId;
|
||||
linkPlayerEventObj->eventObjId = eventObjId;
|
||||
linkPlayerEventObj->objEventId = objEventId;
|
||||
linkPlayerEventObj->movementMode = MOVEMENT_MODE_FREE;
|
||||
|
||||
eventObj->active = 1;
|
||||
eventObj->singleMovementActive = a4;
|
||||
eventObj->range.as_byte = 2;
|
||||
eventObj->spriteId = 64;
|
||||
objEvent->active = 1;
|
||||
objEvent->singleMovementActive = a4;
|
||||
objEvent->range.as_byte = 2;
|
||||
objEvent->spriteId = 64;
|
||||
|
||||
InitLinkPlayerEventObjectPos(eventObj, x, y);
|
||||
InitLinkPlayerObjectEventPos(objEvent, x, y);
|
||||
}
|
||||
|
||||
static void InitLinkPlayerEventObjectPos(struct EventObject *eventObj, s16 x, s16 y)
|
||||
static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s16 y)
|
||||
{
|
||||
eventObj->currentCoords.x = x;
|
||||
eventObj->currentCoords.y = y;
|
||||
eventObj->previousCoords.x = x;
|
||||
eventObj->previousCoords.y = y;
|
||||
SetSpritePosToMapCoords(x, y, &eventObj->initialCoords.x, &eventObj->initialCoords.y);
|
||||
eventObj->initialCoords.x += 8;
|
||||
EventObjectUpdateZCoord(eventObj);
|
||||
objEvent->currentCoords.x = x;
|
||||
objEvent->currentCoords.y = y;
|
||||
objEvent->previousCoords.x = x;
|
||||
objEvent->previousCoords.y = y;
|
||||
SetSpritePosToMapCoords(x, y, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
|
||||
objEvent->initialCoords.x += 8;
|
||||
ObjectEventUpdateZCoord(objEvent);
|
||||
}
|
||||
|
||||
static void sub_80877DC(u8 linkPlayerId, u8 a2)
|
||||
{
|
||||
if (gLinkPlayerEventObjects[linkPlayerId].active)
|
||||
if (gLinkPlayerObjectEvents[linkPlayerId].active)
|
||||
{
|
||||
u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
eventObj->range.as_byte = a2;
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
objEvent->range.as_byte = a2;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_808780C(u8 linkPlayerId)
|
||||
{
|
||||
struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
|
||||
u8 eventObjId = linkPlayerEventObj->eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
if (eventObj->spriteId != MAX_SPRITES)
|
||||
DestroySprite(&gSprites[eventObj->spriteId]);
|
||||
struct LinkPlayerObjectEvent *linkPlayerEventObj = &gLinkPlayerObjectEvents[linkPlayerId];
|
||||
u8 objEventId = linkPlayerEventObj->objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
if (objEvent->spriteId != MAX_SPRITES)
|
||||
DestroySprite(&gSprites[objEvent->spriteId]);
|
||||
linkPlayerEventObj->active = 0;
|
||||
eventObj->active = 0;
|
||||
objEvent->active = 0;
|
||||
}
|
||||
|
||||
// Returns the spriteId corresponding to this player.
|
||||
static u8 GetSpriteForLinkedPlayer(u8 linkPlayerId)
|
||||
{
|
||||
u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
return eventObj->spriteId;
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
return objEvent->spriteId;
|
||||
}
|
||||
|
||||
static void GetLinkPlayerCoords(u8 linkPlayerId, u16 *x, u16 *y)
|
||||
{
|
||||
u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
*x = eventObj->currentCoords.x;
|
||||
*y = eventObj->currentCoords.y;
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
*x = objEvent->currentCoords.x;
|
||||
*y = objEvent->currentCoords.y;
|
||||
}
|
||||
|
||||
static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId)
|
||||
{
|
||||
u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
return eventObj->range.as_byte;
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
return objEvent->range.as_byte;
|
||||
}
|
||||
|
||||
static u8 GetLinkPlayerElevation(u8 linkPlayerId)
|
||||
{
|
||||
u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
return eventObj->currentElevation;
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
return objEvent->currentElevation;
|
||||
}
|
||||
|
||||
static s32 sub_80878E4(u8 linkPlayerId)
|
||||
{
|
||||
u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
return 16 - (s8)eventObj->directionSequenceIndex;
|
||||
u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
return 16 - (s8)objEvent->directionSequenceIndex;
|
||||
}
|
||||
|
||||
static u8 GetLinkPlayerIdAt(s16 x, s16 y)
|
||||
@@ -3029,11 +3029,11 @@ static u8 GetLinkPlayerIdAt(s16 x, s16 y)
|
||||
u8 i;
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
if (gLinkPlayerEventObjects[i].active
|
||||
&& (gLinkPlayerEventObjects[i].movementMode == 0 || gLinkPlayerEventObjects[i].movementMode == 2))
|
||||
if (gLinkPlayerObjectEvents[i].active
|
||||
&& (gLinkPlayerObjectEvents[i].movementMode == 0 || gLinkPlayerObjectEvents[i].movementMode == 2))
|
||||
{
|
||||
struct EventObject *eventObj = &gEventObjects[gLinkPlayerEventObjects[i].eventObjId];
|
||||
if (eventObj->currentCoords.x == x && eventObj->currentCoords.y == y)
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[gLinkPlayerObjectEvents[i].objEventId];
|
||||
if (objEvent->currentCoords.x == x && objEvent->currentCoords.y == y)
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -3042,23 +3042,23 @@ static u8 GetLinkPlayerIdAt(s16 x, s16 y)
|
||||
|
||||
static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing)
|
||||
{
|
||||
struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
|
||||
u8 eventObjId = linkPlayerEventObj->eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
struct LinkPlayerObjectEvent *linkPlayerEventObj = &gLinkPlayerObjectEvents[linkPlayerId];
|
||||
u8 objEventId = linkPlayerEventObj->objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
|
||||
if (linkPlayerEventObj->active)
|
||||
{
|
||||
if (facing > FACING_FORCED_RIGHT)
|
||||
{
|
||||
eventObj->triggerGroundEffectsOnMove = 1;
|
||||
objEvent->triggerGroundEffectsOnMove = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// This is a hack to split this code onto two separate lines, without declaring a local variable.
|
||||
// C++ style inline variables would be nice here.
|
||||
#define TEMP gLinkPlayerMovementModes[linkPlayerEventObj->movementMode](linkPlayerEventObj, eventObj, facing)
|
||||
#define TEMP gLinkPlayerMovementModes[linkPlayerEventObj->movementMode](linkPlayerEventObj, objEvent, facing)
|
||||
|
||||
gMovementStatusHandler[TEMP](linkPlayerEventObj, eventObj);
|
||||
gMovementStatusHandler[TEMP](linkPlayerEventObj, objEvent);
|
||||
|
||||
// Clean up the hack.
|
||||
#undef TEMP
|
||||
@@ -3067,67 +3067,67 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing)
|
||||
}
|
||||
|
||||
|
||||
static u8 MovementEventModeCB_Normal(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
|
||||
static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent, u8 a3)
|
||||
{
|
||||
return gLinkPlayerFacingHandlers[a3](linkPlayerEventObj, eventObj, a3);
|
||||
return gLinkPlayerFacingHandlers[a3](linkPlayerEventObj, objEvent, a3);
|
||||
}
|
||||
|
||||
static u8 MovementEventModeCB_Ignored(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
|
||||
static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent, u8 a3)
|
||||
{
|
||||
return FACING_UP;
|
||||
}
|
||||
|
||||
// Duplicate Function
|
||||
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
|
||||
static u8 MovementEventModeCB_Normal_2(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent, u8 a3)
|
||||
{
|
||||
return gLinkPlayerFacingHandlers[a3](linkPlayerEventObj, eventObj, a3);
|
||||
return gLinkPlayerFacingHandlers[a3](linkPlayerEventObj, objEvent, a3);
|
||||
}
|
||||
|
||||
static bool8 FacingHandler_DoNothing(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
|
||||
static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent, u8 a3)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 FacingHandler_DpadMovement(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
|
||||
static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent, u8 a3)
|
||||
{
|
||||
s16 x, y;
|
||||
|
||||
eventObj->range.as_byte = FlipVerticalAndClearForced(a3, eventObj->range.as_byte);
|
||||
EventObjectMoveDestCoords(eventObj, eventObj->range.as_byte, &x, &y);
|
||||
objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
|
||||
ObjectEventMoveDestCoords(objEvent, objEvent->range.as_byte, &x, &y);
|
||||
|
||||
if (LinkPlayerDetectCollision(linkPlayerEventObj->eventObjId, eventObj->range.as_byte, x, y))
|
||||
if (LinkPlayerDetectCollision(linkPlayerEventObj->objEventId, objEvent->range.as_byte, x, y))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
eventObj->directionSequenceIndex = 16;
|
||||
ShiftEventObjectCoords(eventObj, x, y);
|
||||
EventObjectUpdateZCoord(eventObj);
|
||||
objEvent->directionSequenceIndex = 16;
|
||||
ShiftObjectEventCoords(objEvent, x, y);
|
||||
ObjectEventUpdateZCoord(objEvent);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3)
|
||||
static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent, u8 a3)
|
||||
{
|
||||
eventObj->range.as_byte = FlipVerticalAndClearForced(a3, eventObj->range.as_byte);
|
||||
objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// This is called every time a free movement happens. Most of the time it's a No-Op.
|
||||
static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj)
|
||||
static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent)
|
||||
{
|
||||
linkPlayerEventObj->movementMode = MOVEMENT_MODE_FREE;
|
||||
}
|
||||
|
||||
static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj)
|
||||
static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent *linkPlayerEventObj, struct ObjectEvent *objEvent)
|
||||
{
|
||||
eventObj->directionSequenceIndex--;
|
||||
objEvent->directionSequenceIndex--;
|
||||
linkPlayerEventObj->movementMode = MOVEMENT_MODE_FROZEN;
|
||||
MoveCoords(eventObj->range.as_byte, &eventObj->initialCoords.x, &eventObj->initialCoords.y);
|
||||
if (!eventObj->directionSequenceIndex)
|
||||
MoveCoords(objEvent->range.as_byte, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
|
||||
if (!objEvent->directionSequenceIndex)
|
||||
{
|
||||
ShiftStillEventObjectCoords(eventObj);
|
||||
ShiftStillObjectEventCoords(objEvent);
|
||||
linkPlayerEventObj->movementMode = MOVEMENT_MODE_SCRIPTED;
|
||||
}
|
||||
}
|
||||
@@ -3162,8 +3162,8 @@ static u8 LinkPlayerDetectCollision(u8 selfEventObjId, u8 a2, s16 x, s16 y)
|
||||
{
|
||||
if (i != selfEventObjId)
|
||||
{
|
||||
if ((gEventObjects[i].currentCoords.x == x && gEventObjects[i].currentCoords.y == y)
|
||||
|| (gEventObjects[i].previousCoords.x == x && gEventObjects[i].previousCoords.y == y))
|
||||
if ((gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y)
|
||||
|| (gObjectEvents[i].previousCoords.x == x && gObjectEvents[i].previousCoords.y == y))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@@ -3174,9 +3174,9 @@ static u8 LinkPlayerDetectCollision(u8 selfEventObjId, u8 a2, s16 x, s16 y)
|
||||
|
||||
static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
|
||||
{
|
||||
struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId];
|
||||
u8 eventObjId = linkPlayerEventObj->eventObjId;
|
||||
struct EventObject *eventObj = &gEventObjects[eventObjId];
|
||||
struct LinkPlayerObjectEvent *linkPlayerEventObj = &gLinkPlayerObjectEvents[linkPlayerId];
|
||||
u8 objEventId = linkPlayerEventObj->objEventId;
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[objEventId];
|
||||
struct Sprite *sprite;
|
||||
|
||||
if (linkPlayerEventObj->active)
|
||||
@@ -3185,40 +3185,40 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
|
||||
{
|
||||
case VERSION_FIRE_RED:
|
||||
case VERSION_LEAF_GREEN:
|
||||
eventObj->spriteId = AddPseudoEventObject(GetFRLGAvatarGraphicsIdByGender(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
break;
|
||||
case VERSION_RUBY:
|
||||
case VERSION_SAPPHIRE:
|
||||
eventObj->spriteId = AddPseudoEventObject(GetRSAvatarGraphicsIdByGender(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
break;
|
||||
case VERSION_EMERALD:
|
||||
eventObj->spriteId = AddPseudoEventObject(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
sprite = &gSprites[eventObj->spriteId];
|
||||
sprite = &gSprites[objEvent->spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->data[0] = linkPlayerId;
|
||||
eventObj->triggerGroundEffectsOnMove = 0;
|
||||
objEvent->triggerGroundEffectsOnMove = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void SpriteCB_LinkPlayer(struct Sprite *sprite)
|
||||
{
|
||||
struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[sprite->data[0]];
|
||||
struct EventObject *eventObj = &gEventObjects[linkPlayerEventObj->eventObjId];
|
||||
sprite->pos1.x = eventObj->initialCoords.x;
|
||||
sprite->pos1.y = eventObj->initialCoords.y;
|
||||
SetObjectSubpriorityByZCoord(eventObj->previousElevation, sprite, 1);
|
||||
sprite->oam.priority = ZCoordToPriority(eventObj->previousElevation);
|
||||
struct LinkPlayerObjectEvent *linkPlayerEventObj = &gLinkPlayerObjectEvents[sprite->data[0]];
|
||||
struct ObjectEvent *objEvent = &gObjectEvents[linkPlayerEventObj->objEventId];
|
||||
sprite->pos1.x = objEvent->initialCoords.x;
|
||||
sprite->pos1.y = objEvent->initialCoords.y;
|
||||
SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1);
|
||||
sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation);
|
||||
|
||||
if (!linkPlayerEventObj->movementMode != MOVEMENT_MODE_FREE)
|
||||
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObj->range.as_byte));
|
||||
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte));
|
||||
else
|
||||
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(eventObj->range.as_byte));
|
||||
StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte));
|
||||
|
||||
UpdateEventObjectSpriteVisibility(sprite, 0);
|
||||
if (eventObj->triggerGroundEffectsOnMove)
|
||||
UpdateObjectEventSpriteVisibility(sprite, 0);
|
||||
if (objEvent->triggerGroundEffectsOnMove)
|
||||
{
|
||||
sprite->invisible = ((sprite->data[7] & 4) >> 2);
|
||||
sprite->data[7]++;
|
||||
|
||||
Reference in New Issue
Block a user