diff options
| author | octorock <79596758+octorock@users.noreply.github.com> | 2023-12-31 02:12:41 +0100 |
|---|---|---|
| committer | octorock <79596758+octorock@users.noreply.github.com> | 2023-12-31 02:12:41 +0100 |
| commit | 109b1020dcbfa17e80d28c522b5d792f7b3c6d46 (patch) | |
| tree | cf23c1134de2891d0eed3b55549e70b29eb1997f /src/script.c | |
| parent | 957da774e4c34100e0bd352b1570af02bb7f7521 (diff) | |
| parent | 9c87bcca8ea4b52199ed908c0ea28ab08b1d0747 (diff) | |
Merge branch 'master' into tilemap-docs
Diffstat (limited to 'src/script.c')
| -rw-r--r-- | src/script.c | 141 |
1 files changed, 71 insertions, 70 deletions
diff --git a/src/script.c b/src/script.c index 637f2181..bb2cfe75 100644 --- a/src/script.c +++ b/src/script.c @@ -1,13 +1,13 @@ -#include "script.h" -#include "main.h" -#include "screen.h" #include "area.h" -#include "game.h" -#include "object.h" -#include "npc.h" -#include "kinstone.h" #include "functions.h" +#include "game.h" #include "item.h" +#include "kinstone.h" +#include "main.h" +#include "npc.h" +#include "object.h" +#include "screen.h" +#include "script.h" #include "ui.h" void InitScriptExecutionContext(ScriptExecutionContext* context, Script* script); @@ -197,15 +197,15 @@ ScriptExecutionContext* StartCutscene(Entity* entity, Script* script) { void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, Script* script) { entity->flags |= ENT_SCRIPTED; - *(ScriptExecutionContext**)&entity->cutsceneBeh = context; + *(ScriptExecutionContext**)&((GenericEntity*)entity)->cutsceneBeh = context; InitScriptExecutionContext(context, script); } void UnloadCutsceneData(Entity* entity) { if (entity->flags & ENT_SCRIPTED) { entity->flags &= ~ENT_SCRIPTED; - DestroyScriptExecutionContext(*(ScriptExecutionContext**)&entity->cutsceneBeh); - *(ScriptExecutionContext**)&entity->cutsceneBeh = NULL; + DestroyScriptExecutionContext(*(ScriptExecutionContext**)&((GenericEntity*)entity)->cutsceneBeh); + *(ScriptExecutionContext**)&((GenericEntity*)entity)->cutsceneBeh = NULL; } } @@ -214,8 +214,8 @@ void StartPlayerScript(Script* script) { MemClear(&gPlayerScriptExecutionContext, sizeof(gPlayerScriptExecutionContext)); gPlayerScriptExecutionContext.scriptInstructionPointer = script; - player = &gPlayerEntity; - *(ScriptExecutionContext**)&player->cutsceneBeh = &gPlayerScriptExecutionContext; + player = &gPlayerEntity.base; + *(ScriptExecutionContext**)&((GenericEntity*)player)->cutsceneBeh = &gPlayerScriptExecutionContext; gPlayerState.queued_action = PLAYER_SLEEP; gPlayerState.field_0x3a = 0; gPlayerState.field_0x39 = 0; @@ -247,10 +247,10 @@ void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context) { context->postScriptActions ^= bit; switch (bit) { case 1 << 0x00: - entity->field_0x80.HWORD = 0; + ((GenericEntity*)entity)->field_0x80.HWORD = 0; break; case 1 << 0x01: - entity->field_0x80.HWORD = 4; + ((GenericEntity*)entity)->field_0x80.HWORD = 4; break; case 1 << 0x02: break; @@ -275,37 +275,37 @@ void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context) { case 1 << 0x09: entity->spriteOffsetY = 0; entity->spriteOffsetX = 0; - entity->field_0x82.HWORD = 0; + ((GenericEntity*)entity)->field_0x82.HWORD = 0; break; case 1 << 0x0a: - entity->field_0x82.HWORD |= 2; + ((GenericEntity*)entity)->field_0x82.HWORD |= 2; break; case 1 << 0x0b: - entity->field_0x82.HWORD &= ~2; + ((GenericEntity*)entity)->field_0x82.HWORD &= ~2; break; case 1 << 0x0c: - entity->field_0x82.HWORD &= ~1; + ((GenericEntity*)entity)->field_0x82.HWORD &= ~1; break; case 1 << 0x0d: - entity->field_0x82.HWORD |= 1; + ((GenericEntity*)entity)->field_0x82.HWORD |= 1; break; case 1 << 0x0e: - entity->field_0x82.HWORD |= 8; + ((GenericEntity*)entity)->field_0x82.HWORD |= 8; break; case 1 << 0x0f: - entity->field_0x82.HWORD ^= 4; + ((GenericEntity*)entity)->field_0x82.HWORD ^= 4; break; case 1 << 0x10: - entity->field_0x82.HWORD ^= 0x10; + ((GenericEntity*)entity)->field_0x82.HWORD ^= 0x10; break; case 1 << 0x11: entity->spriteSettings.flipX ^= 1; break; case 1 << 0x12: - entity->field_0x82.HWORD |= 0x20; + ((GenericEntity*)entity)->field_0x82.HWORD |= 0x20; break; case 1 << 0x13: - entity->field_0x82.HWORD &= ~0x20; + ((GenericEntity*)entity)->field_0x82.HWORD &= ~0x20; break; default: break; @@ -322,12 +322,12 @@ void InitScriptForNPC(Entity* entity) { void sub_0807DD64(Entity* entity) { entity->subtimer = entity->animationState; entity->animIndex = 0xff; - entity->field_0x80.HWORD = 0; - entity->field_0x82.HWORD = 0; + ((GenericEntity*)entity)->field_0x80.HWORD = 0; + ((GenericEntity*)entity)->field_0x82.HWORD = 0; } void sub_0807DD80(Entity* entity, Script* script) { - InitScriptExecutionContext(*(ScriptExecutionContext**)&entity->cutsceneBeh, script); + InitScriptExecutionContext(*(ScriptExecutionContext**)&((GenericEntity*)entity)->cutsceneBeh, script); sub_0807DD64(entity); } @@ -340,7 +340,7 @@ void ExecuteScriptAndHandleAnimation(Entity* entity, void (*postScriptCallback)( void ExecuteScriptForEntity(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*)) { ScriptExecutionContext** piVar1; - piVar1 = (ScriptExecutionContext**)&entity->cutsceneBeh; + piVar1 = (ScriptExecutionContext**)&((GenericEntity*)entity)->cutsceneBeh; if (*piVar1) { ExecuteScript(entity, *piVar1); if (postScriptCallback) { @@ -359,7 +359,7 @@ void HandleEntity0x82Actions(Entity* entity) { u32 bit; u32 loopVar; - loopVar = entity->field_0x82.HWORD; + loopVar = ((GenericEntity*)entity)->field_0x82.HWORD; while (loopVar) { bit = (~loopVar + 1) & loopVar; loopVar = loopVar ^ bit; @@ -398,9 +398,9 @@ void sub_0807DE80(Entity* entity) { u32 temp; - local2 = entity->field_0x80.HWORD; + local2 = ((GenericEntity*)entity)->field_0x80.HWORD; if (local2 < 8) { - if (entity->field_0x82.HWORD & 1) { + if (((GenericEntity*)entity)->field_0x82.HWORD & 1) { u32 t1, t2; t1 = local2 & 0xfc; t2 = entity->subtimer >> 1; @@ -416,7 +416,7 @@ void sub_0807DE80(Entity* entity) { if (local2 != entity->animIndex) { InitAnimationForceUpdate(entity, local2); } - temp = entity->field_0x82.HWORD & 4; + temp = ((GenericEntity*)entity)->field_0x82.HWORD & 4; local1 = 1; if (temp) { local1 = 2; @@ -802,14 +802,14 @@ 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 = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity)); + EntityInRectRadius(entity, &gPlayerEntity.base, 40, 40)) { + entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity.base)); } context->unk_1A++; if (entity->interactType) { entity->interactType = INTERACTION_NONE; context->condition = 1; - entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity)); + entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity.base)); } else { context->condition = 0; } @@ -900,12 +900,12 @@ void ScriptCommand_EntityHasHeight(Entity* entity, ScriptExecutionContext* conte } void ScriptCommand_ComparePlayerAction(Entity* entity, ScriptExecutionContext* context) { - context->condition = context->scriptInstructionPointer[1] == gPlayerEntity.action; + context->condition = context->scriptInstructionPointer[1] == gPlayerEntity.base.action; gActiveScriptInfo.flags |= 1; } void ScriptCommand_ComparePlayerAnimationState(Entity* entity, ScriptExecutionContext* context) { - context->condition = context->scriptInstructionPointer[1] == gPlayerEntity.animationState; + context->condition = context->scriptInstructionPointer[1] == gPlayerEntity.base.animationState; gActiveScriptInfo.flags |= 1; } @@ -967,7 +967,7 @@ void ScriptCommand_WaitForSyncFlagAndClear(Entity* entity, ScriptExecutionContex } void ScriptCommand_WaitPlayerGetItem(Entity* entity, ScriptExecutionContext* context) { - if (gPlayerEntity.action == PLAYER_ITEMGET) { + if (gPlayerEntity.base.action == PLAYER_ITEMGET) { gActiveScriptInfo.commandSize = 0; } else { context->wait = 45; @@ -975,7 +975,7 @@ void ScriptCommand_WaitPlayerGetItem(Entity* entity, ScriptExecutionContext* con } void ScriptCommand_WaitForPlayerEnterRoom(Entity* entity, ScriptExecutionContext* context) { - if (gPlayerEntity.action != PLAYER_ROOMTRANSITION) { + if (gPlayerEntity.base.action != PLAYER_ROOMTRANSITION) { gActiveScriptInfo.flags |= 1; } else { gActiveScriptInfo.commandSize = 0; @@ -1054,7 +1054,7 @@ void ScriptCommand_0807E858(Entity* entity, ScriptExecutionContext* context) { void ScriptCommand_SetPlayerIdle(Entity* entity, ScriptExecutionContext* context) { gPlayerState.controlMode = CONTROL_DISABLED; - sub_08078B48(); + PausePlayer(); } void ScriptCommand_EnablePlayerControl(Entity* entity, ScriptExecutionContext* context) { @@ -1084,7 +1084,7 @@ void ScriptCommand_SetPlayerAnimation(Entity* entity, ScriptExecutionContext* co void ScriptCommand_0807E8E4(Entity* entity, ScriptExecutionContext* context) { u32 tmp = (gUnk_08016984 & 0x3FF); u32 tmp2; - gPlayerEntity.animationState = tmp2 = (context->scriptInstructionPointer[0] - tmp) << 1; + gPlayerEntity.base.animationState = tmp2 = (context->scriptInstructionPointer[0] - tmp) << 1; } void ScriptCommand_SetAction(Entity* entity, ScriptExecutionContext* context) { @@ -1102,7 +1102,7 @@ void ScriptCommand_SetVariableToFrame(Entity* entity, ScriptExecutionContext* co } void ScriptCommand_SetAnimation(Entity* entity, ScriptExecutionContext* context) { - entity->field_0x80.HWORD = context->scriptInstructionPointer[1]; + ((GenericEntity*)entity)->field_0x80.HWORD = context->scriptInstructionPointer[1]; InitAnimationForceUpdate(entity, context->scriptInstructionPointer[1]); } @@ -1129,7 +1129,7 @@ void ScriptCommand_0807E974(Entity* entity, ScriptExecutionContext* context) { MessageFromTarget(context->scriptInstructionPointer[1]); break; case 1: - if (gMessage.doTextBox & 0x7F) + if (gMessage.state & MESSAGE_ACTIVE) break; context->unk_18 = 2; context->unk_19 = 0xF; @@ -1191,7 +1191,7 @@ void ScriptCommand_AddInteractableFuser(Entity* entity, ScriptExecutionContext* } void ScriptCommand_WaitUntilTextboxCloses(Entity* entity, ScriptExecutionContext* context) { - if (gMessage.doTextBox & 0x7F) { + if (gMessage.state & MESSAGE_ACTIVE) { gActiveScriptInfo.commandSize = 0; } } @@ -1242,11 +1242,12 @@ void ScriptCommand_0807EB4C(Entity* entity, ScriptExecutionContext* context) { } void ScriptCommand_FacePlayer(Entity* entity, ScriptExecutionContext* context) { - entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity)); + entity->animationState = GetAnimationStateForDirection8(GetFacingDirection(entity, &gPlayerEntity.base)); } void ScriptCommand_FaceAwayFromPlayer(Entity* entity, ScriptExecutionContext* context) { - gPlayerEntity.animationState = GetAnimationStateForDirection8(GetFacingDirection(&gPlayerEntity, entity)) & ~1; + gPlayerEntity.base.animationState = + GetAnimationStateForDirection8(GetFacingDirection(&gPlayerEntity.base, entity)) & ~1; } void ScriptCommand_SetEntityDirection(Entity* entity, ScriptExecutionContext* context) { @@ -1277,7 +1278,7 @@ void ScriptCommand_OffsetEntityPosition(Entity* entity, ScriptExecutionContext* } void ScriptCommand_MoveEntityToPlayer(Entity* entity, ScriptExecutionContext* context) { - CopyPosition(&gPlayerEntity, entity); + CopyPosition(&gPlayerEntity.base, entity); } void ScriptCommandNop3(Entity* entity, ScriptExecutionContext* context) { @@ -1413,7 +1414,7 @@ void ScriptCommand_MoveTowardsTarget(Entity* entity, ScriptExecutionContext* con void ScriptCommand_MoveToPlayer(Entity* entity, ScriptExecutionContext* context) { if (!context->unk_18) { context->unk_18 = 1; - LookAt(entity, context, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI); + LookAt(entity, context, gPlayerEntity.base.x.HALF.HI, gPlayerEntity.base.y.HALF.HI); } ScriptCommand_MoveTowardsTarget(entity, context); // Repeat this command until we are at the target. @@ -1519,7 +1520,7 @@ void ScriptCommand_CameraTargetEntity(Entity* entity, ScriptExecutionContext* co } void ScriptCommand_CameraTargetPlayer(Entity* entity, ScriptExecutionContext* context) { - gRoomControls.camera_target = &gPlayerEntity; + gRoomControls.camera_target = &gPlayerEntity.base; } void ScriptCommand_SetScrollSpeed(Entity* entity, ScriptExecutionContext* context) { @@ -1566,8 +1567,8 @@ void SetCollisionLayer1(Entity* entity, ScriptExecutionContext* context) { } void SetPlayerCollisionLayer1(Entity* entity, ScriptExecutionContext* context) { - gPlayerEntity.collisionLayer = 1; - UpdateSpriteForCollisionLayer(&gPlayerEntity); + gPlayerEntity.base.collisionLayer = 1; + UpdateSpriteForCollisionLayer(&gPlayerEntity.base); } void SetCollisionLayer2(Entity* entity, ScriptExecutionContext* context) { @@ -1580,7 +1581,7 @@ void sub_0807F190(Entity* entity, ScriptExecutionContext* context) { } void sub_0807F1A0(Entity* entity, ScriptExecutionContext* context) { - LookAt(entity, context, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI); + LookAt(entity, context, gPlayerEntity.base.x.HALF.HI, gPlayerEntity.base.y.HALF.HI); gActiveScriptInfo.flags |= 1; } @@ -1661,7 +1662,7 @@ void WaitForAnimDone(Entity* entity, ScriptExecutionContext* context) { } void WaitForPlayerAnim(Entity* entity, ScriptExecutionContext* context) { - if ((gPlayerEntity.frame & ANIM_DONE) != 0) { + if ((gPlayerEntity.base.frame & ANIM_DONE) != 0) { gActiveScriptInfo.flags |= 1; } else { gActiveScriptInfo.commandSize = 0; @@ -1674,15 +1675,15 @@ void DeleteHitbox(Entity* entity, ScriptExecutionContext* context) { } void SetPriorityMessage(Entity* entity, ScriptExecutionContext* context) { - SetDefaultPriority(entity, PRIO_MESSAGE); + SetEntityPriority(entity, PRIO_MESSAGE); } void SetPriorityPlayerEvent(Entity* entity, ScriptExecutionContext* context) { - SetDefaultPriority(entity, PRIO_PLAYER_EVENT); + SetEntityPriority(entity, PRIO_PLAYER_EVENT); } void SetPriorityHighest(Entity* entity, ScriptExecutionContext* context) { - SetDefaultPriority(entity, PRIO_NO_BLOCK); + SetEntityPriority(entity, PRIO_NO_BLOCK); } void sub_0807F36C(Entity* entity, ScriptExecutionContext* context) { @@ -1705,15 +1706,15 @@ void sub_0807F3C8(Entity* entity, ScriptExecutionContext* context) { void sub_0807F3D8(Entity* entity, ScriptExecutionContext* context) { InitAnimationForceUpdate(entity, context->intVariable + (entity->animationState >> 1)); - entity->field_0x80.HWORD = entity->animIndex; + ((GenericEntity*)entity)->field_0x80.HWORD = entity->animIndex; } void CreatePlayerExclamationMark(Entity* entity, ScriptExecutionContext* context) { - CreateSpeechBubbleExclamationMark(&gPlayerEntity, 8, -24); + CreateSpeechBubbleExclamationMark(&gPlayerEntity.base, 8, -24); } void CreatePlayerQuestionMark(Entity* entity, ScriptExecutionContext* context) { - CreateSpeechBubbleQuestionMark(&gPlayerEntity, 8, -24); + CreateSpeechBubbleQuestionMark(&gPlayerEntity.base, 8, -24); } void LoadMenu(Entity* entity, ScriptExecutionContext* context) { @@ -1786,7 +1787,7 @@ void sub_0807F4F8(Entity* entity, ScriptExecutionContext* context) { } void ReadPlayerAnimationState(Entity* entity, ScriptExecutionContext* context) { - context->intVariable = gPlayerEntity.animationState >> 1; + context->intVariable = gPlayerEntity.base.animationState >> 1; } void WaitForPlayerIdle(Entity* entity, ScriptExecutionContext* context) { @@ -1835,12 +1836,12 @@ void sub_0807F650(Entity* entity, ScriptExecutionContext* context) { } void sub_0807F680(Entity* entity, ScriptExecutionContext* context) { - context->condition = gPlayerEntity.x.HALF.HI - gRoomControls.origin_x > (s32)(context->intVariable & 0xffff); + context->condition = gPlayerEntity.base.x.HALF.HI - gRoomControls.origin_x > (s32)(context->intVariable & 0xffff); gActiveScriptInfo.flags |= 1; } void sub_0807F6B4(Entity* entity, ScriptExecutionContext* context) { - context->condition = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y > (s32)(context->intVariable & 0xffff); + context->condition = gPlayerEntity.base.y.HALF.HI - gRoomControls.origin_y > (s32)(context->intVariable & 0xffff); gActiveScriptInfo.flags |= 1; } @@ -1868,8 +1869,8 @@ void sub_0807F738(Entity* entity, ScriptExecutionContext* context) { void SetPlayerPos(Entity* entity, ScriptExecutionContext* context) { s32 s32Var = context->intVariable; - gPlayerEntity.x.HALF.HI = (s32Var >> 16) + gRoomControls.origin_x; - gPlayerEntity.y.HALF.HI = (s32Var & 0xffff) + gRoomControls.origin_y; + gPlayerEntity.base.x.HALF.HI = (s32Var >> 16) + gRoomControls.origin_x; + gPlayerEntity.base.y.HALF.HI = (s32Var & 0xffff) + gRoomControls.origin_y; } void GetConditionSet(Entity* entity, ScriptExecutionContext* context) { @@ -1962,10 +1963,10 @@ void DoGravity(Entity* entity, ScriptExecutionContext* context) { } void sub_0807F8E8(Entity* entity, ScriptExecutionContext* context) { - Entity* c = CreateObjectWithParent(entity, SANCTUARY_STONE_TABLET, 0, 0); - if (c != NULL) { - c->parent = entity; - c->field_0x86.HWORD = (context->intVariable & 0x3ff) | 0x8000; + Entity* stoneTablet = CreateObjectWithParent(entity, SANCTUARY_STONE_TABLET, 0, 0); + if (stoneTablet != NULL) { + stoneTablet->parent = entity; + ((GenericEntity*)stoneTablet)->field_0x86.HWORD = (context->intVariable & 0x3ff) | 0x8000; } } @@ -2096,12 +2097,12 @@ void sub_0807FB28(Entity* entity, ScriptExecutionContext* context) { } void SetPlayerIFrames(Entity* entity, ScriptExecutionContext* context) { - gPlayerEntity.iframes = context->intVariable; + gPlayerEntity.base.iframes = context->intVariable; } void DisablePlayerSwimState(Entity* entity, ScriptExecutionContext* context) { gPlayerState.swim_state = 0; - gPlayerEntity.collisionFlags &= ~4; + gPlayerEntity.base.collisionFlags &= ~4; } void sub_0807FB94(Entity* entity, ScriptExecutionContext* context) { |
