From 3d05961dd59faa9fbb6780d3077cb8f787bf0850 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 29 May 2024 15:52:21 -0400 Subject: [PATCH] getdirectiontoface macro --- asm/macros/event.inc | 8 ++++++++ data/scripts/field_move_scripts.inc | 5 +---- src/event_object_movement.c | 14 +++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 39376d489e..ecd0df1158 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2222,3 +2222,11 @@ callfunc ScrFunc_IsFollowerFieldMoveUser .2byte \var .endm + + @ Saves the direction from where source object event would need to turn to to face the target into the specified var. + .macro getdirectiontoface var:req, sourceId:req, targetId:req + callfunc ScrFunc_GetDirectionToFace + .2byte \var + .byte \sourceId + .byte \targetId + .endm diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index dbf8052fc4..6e2450822c 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -95,10 +95,7 @@ EventScript_SmashRock:: @ fallthrough end EventScript_FollowerFieldMove: - callfunc ScrFunc_GetDirectionToFace - .2byte VAR_0x8005 - .byte OBJ_EVENT_ID_FOLLOWER - .byte OBJ_EVENT_ID_PLAYER + getdirectiontoface VAR_0x8005, OBJ_EVENT_ID_FOLLOWER, OBJ_EVENT_ID_PLAYER specialvar VAR_0x8006, GetPlayerFacingDirection goto_if_eq VAR_0x8005, DIR_NONE, EventScript_FollowerFieldMoveEnd @ Swap follower and player diff --git a/src/event_object_movement.c b/src/event_object_movement.c index d8e48f7ad8..edc4c788f4 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -5868,17 +5868,17 @@ u8 GetDirectionToFace(s16 x, s16 y, s16 targetX, s16 targetY) bool8 ScrFunc_GetDirectionToFace(struct ScriptContext *ctx) { u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); - u8 id0 = GetObjectEventIdByLocalId(ScriptReadByte(ctx)); // source - u8 id1 = GetObjectEventIdByLocalId(ScriptReadByte(ctx)); // target + u8 sourceId = GetObjectEventIdByLocalId(ScriptReadByte(ctx)); + u8 targetId = GetObjectEventIdByLocalId(ScriptReadByte(ctx)); if (var == NULL) return FALSE; - if (id0 >= OBJECT_EVENTS_COUNT || id1 >= OBJECT_EVENTS_COUNT) + if (sourceId >= OBJECT_EVENTS_COUNT || targetId >= OBJECT_EVENTS_COUNT) *var = DIR_NONE; else - *var = GetDirectionToFace(gObjectEvents[id0].currentCoords.x, - gObjectEvents[id0].currentCoords.y, - gObjectEvents[id1].currentCoords.x, - gObjectEvents[id1].currentCoords.y); + *var = GetDirectionToFace(gObjectEvents[sourceId].currentCoords.x, + gObjectEvents[sourceId].currentCoords.y, + gObjectEvents[targetId].currentCoords.x, + gObjectEvents[targetId].currentCoords.y); return FALSE; }