From 488196754ea5225513dc900d23c53f2b157de409 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:34:08 +0200 Subject: Create new entity structs for NPCs --- src/script.c | 66 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 34 insertions(+), 32 deletions(-) (limited to 'src/script.c') diff --git a/src/script.c b/src/script.c index d5101f4a..2a116567 100644 --- a/src/script.c +++ b/src/script.c @@ -97,7 +97,7 @@ void ScriptCommand_0807E974(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_AddInteractableWhenBigObject(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_RemoveInteractableObject(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_AddInteractableWhenBigFuser(Entity* entity, ScriptExecutionContext* context); -void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context); +void ScriptCommand_UpdateFusion(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_0807EA4C(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_AddInteractableFuser(Entity* entity, ScriptExecutionContext* context); void ScriptCommand_WaitUntilTextboxCloses(Entity* entity, ScriptExecutionContext* context); @@ -313,9 +313,10 @@ void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context) { } } -void sub_0807DD50(Entity* entity) { +// Init some script related variables, execute the script and do something regarding the animation. +void InitScriptForNPC(Entity* entity) { sub_0807DD64(entity); - sub_0807DD94(entity, 0); + ExecuteScriptAndHandleAnimation(entity, NULL); } void sub_0807DD64(Entity* entity) { @@ -330,8 +331,8 @@ void sub_0807DD80(Entity* entity, Script* script) { sub_0807DD64(entity); } -void sub_0807DD94(Entity* entity, void (*function)(Entity*, ScriptExecutionContext*)) { - ExecuteScriptForEntity(entity, function); +void ExecuteScriptAndHandleAnimation(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*)) { + ExecuteScriptForEntity(entity, postScriptCallback); HandleEntity0x82Actions(entity); sub_0807DE80(entity); } @@ -390,6 +391,7 @@ void HandleEntity0x82Actions(Entity* entity) { } } +// Handles animation for NPCs? Uses u16 0x80 and 0x82 of the entity. void sub_0807DE80(Entity* entity) { u32 local1; u16 local2; @@ -546,7 +548,7 @@ void ExecuteScript(Entity* entity, ScriptExecutionContext* context) { ScriptCommand_AddInteractableWhenBigObject, ScriptCommand_RemoveInteractableObject, ScriptCommand_AddInteractableWhenBigFuser, - ScriptCommand_0807E9F0, + ScriptCommand_UpdateFusion, ScriptCommand_0807EA4C, ScriptCommand_AddInteractableFuser, ScriptCommand_WaitUntilTextboxCloses, @@ -801,13 +803,13 @@ void ScriptCommand_CheckEntityInteractType(Entity* entity, ScriptExecutionContex void ScriptCommand_FacePlayerAndCheckDist(Entity* entity, ScriptExecutionContext* context) { if ((context->unk_1A & 0xF) == 0 && (gPlayerState.flags & PL_MINISH) == 0 && EntityInRectRadius(entity, &gPlayerEntity, 40, 40)) { - entity->animationState = sub_0806F5B0(GetFacingDirection(entity, &gPlayerEntity)); + entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity)); } context->unk_1A++; if (entity->interactType) { entity->interactType = 0; context->condition = 1; - entity->animationState = sub_0806F5B0(GetFacingDirection(entity, &gPlayerEntity)); + entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity)); } else { context->condition = 0; } @@ -1148,25 +1150,25 @@ void ScriptCommand_AddInteractableWhenBigFuser(Entity* entity, ScriptExecutionCo AddInteractableWhenBigFuser(entity, context->scriptInstructionPointer[1]); } -void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context) { - bool32 tmp; - sub_0801E00C(); - tmp = TRUE; - switch (gFuseInfo._0) { +void ScriptCommand_UpdateFusion(Entity* entity, ScriptExecutionContext* context) { + bool32 isFusionSuccessful; + PerformFuseAction(); + isFusionSuccessful = TRUE; + switch (gFuseInfo.fusionState) { default: - tmp = FALSE; + isFusionSuccessful = FALSE; break; - case 2: + case FUSION_STATE_2: gPlayerState.controlMode = CONTROL_DISABLED; - gPauseMenuOptions.disabled = tmp; - context->condition = tmp; + gPauseMenuOptions.disabled = isFusionSuccessful; + context->condition = isFusionSuccessful; break; - case 1: + case FUSION_STATE_1: context->condition = 0; break; } - if (tmp) { + if (isFusionSuccessful) { PlayerResetStateFromFusion(); gPlayerState.controlMode = CONTROL_1; } else { @@ -1176,7 +1178,7 @@ void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context) { void ScriptCommand_0807EA4C(Entity* entity, ScriptExecutionContext* context) { if (entity->interactType == 2) { - sub_0801DFB4(entity, 0, 0, 0); + InitializeFuseInfo(entity, 0, 0, 0); entity->interactType = 0; gActiveScriptInfo.flags |= 1; } else { @@ -1234,17 +1236,17 @@ void ScriptCommand_SetAnimationState(Entity* entity, ScriptExecutionContext* con } void ScriptCommand_0807EB4C(Entity* entity, ScriptExecutionContext* context) { - entity->animationState = - sub_0806F5B0(sub_080045B4(entity, context->scriptInstructionPointer[1] + gRoomControls.origin_x, - context->scriptInstructionPointer[2] + gRoomControls.origin_y)); + entity->animationState = GetAnimationStateForDirection8( + sub_080045B4(entity, context->scriptInstructionPointer[1] + gRoomControls.origin_x, + context->scriptInstructionPointer[2] + gRoomControls.origin_y)); } void ScriptCommand_FacePlayer(Entity* entity, ScriptExecutionContext* context) { - entity->animationState = sub_0806F5B0(GetFacingDirection(entity, &gPlayerEntity)); + entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity)); } void ScriptCommand_FaceAwayFromPlayer(Entity* entity, ScriptExecutionContext* context) { - gPlayerEntity.animationState = sub_0806F5B0(GetFacingDirection(&gPlayerEntity, entity)) & ~1; + gPlayerEntity.animationState = GetAnimationStateForDirection8(GetFacingDirection(&gPlayerEntity, entity)) & ~1; } void ScriptCommand_SetEntityDirection(Entity* entity, ScriptExecutionContext* context) { @@ -1352,9 +1354,9 @@ void ScriptCommand_0807ED24(Entity* entity, ScriptExecutionContext* context) { tmp = context->scriptInstructionPointer[2]; tmp3 = entity->y.HALF.HI - gRoomControls.origin_y; context->y.WORD = ((tmp - tmp3) << 0x10) / context->unk_12; - entity->animationState = - sub_0806F5B0(sub_080045B4(entity, context->scriptInstructionPointer[1] + gRoomControls.origin_x, - context->scriptInstructionPointer[2] + gRoomControls.origin_y)); + entity->animationState = GetAnimationStateForDirection8( + sub_080045B4(entity, context->scriptInstructionPointer[1] + gRoomControls.origin_x, + context->scriptInstructionPointer[2] + gRoomControls.origin_y)); context->postScriptActions |= 2; } else { if (!--context->unk_12) { @@ -1817,14 +1819,14 @@ void WaitForCameraTouchRoomBorder(Entity* entity, ScriptExecutionContext* contex } void sub_0807F634(Entity* entity, ScriptExecutionContext* context) { - u16* p = (u16*)context->intVariable; - sub_0801DFB4(entity, p[0], p[1], p[2]); + u16* textIndices = (u16*)context->intVariable; + InitializeFuseInfo(entity, textIndices[0], textIndices[1], textIndices[2]); gPlayerState.controlMode = CONTROL_DISABLED; } void sub_0807F650(Entity* entity, ScriptExecutionContext* context) { - u32 p = GetFuserId(entity); - sub_0801DFB4(entity, gUnk_08001A7C[p][0], gUnk_08001A7C[p][1], gUnk_08001A7C[p][2]); + u32 fuserId = GetFuserId(entity); + InitializeFuseInfo(entity, gUnk_08001A7C[fuserId][0], gUnk_08001A7C[fuserId][1], gUnk_08001A7C[fuserId][2]); gPlayerState.controlMode = CONTROL_DISABLED; } -- cgit v1.2.3