summaryrefslogtreecommitdiff
path: root/src/script.c
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2023-07-05 21:34:08 +0200
committeroctorock <79596758+octorock@users.noreply.github.com>2023-08-01 11:36:11 +0200
commit488196754ea5225513dc900d23c53f2b157de409 (patch)
treec69039d9643265381dddb27cca929cbea6dfb936 /src/script.c
parent0d6b9052bacc3bbe079df0bcf25ac633ed4df073 (diff)
Create new entity structs for NPCs
Diffstat (limited to 'src/script.c')
-rw-r--r--src/script.c66
1 files changed, 34 insertions, 32 deletions
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;
}