mirror of
https://github.com/zeldaret/tmc
synced 2026-07-01 12:18:54 -04:00
Merge branch 'master' into asset-extraction
This commit is contained in:
+667
-38
@@ -11,6 +11,8 @@
|
||||
#include "random.h"
|
||||
#include "audio.h"
|
||||
#include "functions.h"
|
||||
#include "main.h"
|
||||
#include "effects.h"
|
||||
|
||||
void InitScriptForEntity(Entity*, ScriptExecutionContext*, u16*);
|
||||
void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script);
|
||||
@@ -73,7 +75,7 @@ void ScriptCommand_WaitForPlayerAction0x17(Entity* entity, ScriptExecutionContex
|
||||
void ScriptCommand_WaitFor_1(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_WaitFor_2(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807E778(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807E788(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_SetFadeMask(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807E79C(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommandNop2(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_DoFade4(Entity* entity, ScriptExecutionContext* context);
|
||||
@@ -104,11 +106,11 @@ void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807EA4C(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807EA88(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_WaitUntilTextboxCloses(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_TextboxNoOverlapFollow(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_TextboxNoOverlap(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_TextboxNoOverlapFollowPos(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_TextboxNoOverlapFollowTable(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_TextboxNoOverlapVar(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_MessageFromTarget(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_MessageNoOverlap(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_MessageFromTargetPos(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_MessageFromTargetTable(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_MessageNoOverlapVar(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807EB28(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807EB38(Entity* entity, ScriptExecutionContext* context);
|
||||
void ScriptCommand_0807EB44(Entity* entity, ScriptExecutionContext* context);
|
||||
@@ -157,7 +159,7 @@ void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context);
|
||||
|
||||
extern void CreateSpeechBubbleExclamationMark(Entity*, u32, u32);
|
||||
extern void CreateSpeechBubbleQuestionMark(Entity*, u32, u32);
|
||||
extern void sub_0801C4A0(u32);
|
||||
extern void RecoverUI(u32);
|
||||
|
||||
typedef void (*ScriptCommand)(Entity*, ScriptExecutionContext*);
|
||||
|
||||
@@ -218,7 +220,7 @@ const ScriptCommand gScriptCommands[] = { ScriptCommandNop,
|
||||
ScriptCommand_WaitFor_1,
|
||||
ScriptCommand_WaitFor_2,
|
||||
ScriptCommand_0807E778,
|
||||
ScriptCommand_0807E788,
|
||||
ScriptCommand_SetFadeMask,
|
||||
ScriptCommand_0807E79C,
|
||||
ScriptCommandNop2,
|
||||
ScriptCommand_DoFade4,
|
||||
@@ -251,11 +253,11 @@ const ScriptCommand gScriptCommands[] = { ScriptCommandNop,
|
||||
ScriptCommand_0807EA4C,
|
||||
ScriptCommand_0807EA88,
|
||||
ScriptCommand_WaitUntilTextboxCloses,
|
||||
ScriptCommand_TextboxNoOverlapFollow,
|
||||
ScriptCommand_TextboxNoOverlap,
|
||||
ScriptCommand_TextboxNoOverlapFollowPos,
|
||||
ScriptCommand_TextboxNoOverlapFollowTable,
|
||||
ScriptCommand_TextboxNoOverlapVar,
|
||||
ScriptCommand_MessageFromTarget,
|
||||
ScriptCommand_MessageNoOverlap,
|
||||
ScriptCommand_MessageFromTargetPos,
|
||||
ScriptCommand_MessageFromTargetTable,
|
||||
ScriptCommand_MessageNoOverlapVar,
|
||||
ScriptCommand_0807EB28,
|
||||
ScriptCommand_0807EB38,
|
||||
ScriptCommand_0807EB44,
|
||||
@@ -301,6 +303,9 @@ const ScriptCommand gScriptCommands[] = { ScriptCommandNop,
|
||||
ScriptCommand_0807F0B4,
|
||||
ScriptCommand_0807F0C8 };
|
||||
|
||||
extern u16* gUnk_08001A7C[];
|
||||
extern u8 gUnk_08114F30[];
|
||||
extern u8 gUnk_08114F34[];
|
||||
extern const u16 gUnk_08016984;
|
||||
extern u8 gUnk_0811E514[];
|
||||
extern u8 gUnk_0811E510[];
|
||||
@@ -401,7 +406,7 @@ void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context) {
|
||||
case 1 << 0x02:
|
||||
break;
|
||||
case 1 << 0x03:
|
||||
entity->field_0x20 = 0x18000;
|
||||
entity->hVelocity = 0x18000;
|
||||
break;
|
||||
case 1 << 0x04:
|
||||
CreateSpeechBubbleExclamationMark(entity, 8, -0x18);
|
||||
@@ -597,7 +602,7 @@ void sub_0807DF38(void) {
|
||||
void sub_0807DF50(void) {
|
||||
gUnk_02034490[0] = 0;
|
||||
gUnk_0200AF00.filler0[1] = 0;
|
||||
sub_0801C4A0(0);
|
||||
RecoverUI(0);
|
||||
sub_080791D0();
|
||||
sub_08079184();
|
||||
}
|
||||
@@ -801,7 +806,7 @@ void ScriptCommand_CheckEntityInteractType(Entity* entity, ScriptExecutionContex
|
||||
}
|
||||
|
||||
void ScriptCommand_0807E30C(Entity* entity, ScriptExecutionContext* context) {
|
||||
if ((context->unk_1A & 0xF) == 0 && (gPlayerState.flags.all & 0x80) == 0 &&
|
||||
if ((context->unk_1A & 0xF) == 0 && (gPlayerState.flags & 0x80) == 0 &&
|
||||
sub_080041A0(entity, &gPlayerEntity, 0x28, 0x28)) {
|
||||
entity->animationState = sub_0806F5B0(GetFacingDirection(entity, &gPlayerEntity));
|
||||
}
|
||||
@@ -885,12 +890,12 @@ void ScriptCommand_0807E514(Entity* entity, ScriptExecutionContext* context) {
|
||||
|
||||
void ScriptCommand_CheckPlayerFlags(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->condition =
|
||||
!!(GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer) & gPlayerState.flags.all);
|
||||
!!(GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer) & gPlayerState.flags);
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void ScriptCommand_0807E564(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->condition = (gPlayerState.flags.all >> 7) & 1;
|
||||
context->condition = (gPlayerState.flags >> 7) & 1;
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
@@ -1000,8 +1005,8 @@ void ScriptCommand_0807E778(Entity* entity, ScriptExecutionContext* context) {
|
||||
gActiveScriptInfo.unk_08 = context->scriptInstructionPointer[1];
|
||||
}
|
||||
|
||||
void ScriptCommand_0807E788(Entity* entity, ScriptExecutionContext* context) {
|
||||
gFadeControl.field_0x4 = GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer);
|
||||
void ScriptCommand_SetFadeMask(Entity* entity, ScriptExecutionContext* context) {
|
||||
gFadeControl.mask = GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer);
|
||||
}
|
||||
|
||||
void ScriptCommand_0807E79C(Entity* entity, ScriptExecutionContext* context) {
|
||||
@@ -1126,10 +1131,10 @@ void ScriptCommand_0807E974(Entity* entity, ScriptExecutionContext* context) {
|
||||
break;
|
||||
entity->interactType = 0;
|
||||
context->unk_18++;
|
||||
TextboxNoOverlapFollow(context->scriptInstructionPointer[1]);
|
||||
MessageFromTarget(context->scriptInstructionPointer[1]);
|
||||
break;
|
||||
case 1:
|
||||
if (gTextBox.doTextBox & 0x7F)
|
||||
if (gMessage.doTextBox & 0x7F)
|
||||
break;
|
||||
context->unk_18 = 2;
|
||||
context->unk_19 = 0xF;
|
||||
@@ -1190,36 +1195,36 @@ void ScriptCommand_0807EA88(Entity* entity, ScriptExecutionContext* context) {
|
||||
}
|
||||
|
||||
void ScriptCommand_WaitUntilTextboxCloses(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (gTextBox.doTextBox & 0x7F) {
|
||||
if (gMessage.doTextBox & 0x7F) {
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptCommand_TextboxNoOverlapFollow(Entity* entity, ScriptExecutionContext* context) {
|
||||
TextboxNoOverlapFollow(context->scriptInstructionPointer[1]);
|
||||
void ScriptCommand_MessageFromTarget(Entity* entity, ScriptExecutionContext* context) {
|
||||
MessageFromTarget(context->scriptInstructionPointer[1]);
|
||||
}
|
||||
|
||||
void ScriptCommand_TextboxNoOverlap(Entity* entity, ScriptExecutionContext* context) {
|
||||
TextboxNoOverlap(context->scriptInstructionPointer[1], entity);
|
||||
void ScriptCommand_MessageNoOverlap(Entity* entity, ScriptExecutionContext* context) {
|
||||
MessageNoOverlap(context->scriptInstructionPointer[1], entity);
|
||||
}
|
||||
|
||||
void ScriptCommand_TextboxNoOverlapFollowPos(Entity* entity, ScriptExecutionContext* context) {
|
||||
TextboxNoOverlapFollow(context->scriptInstructionPointer[1]);
|
||||
gTextBox.textWindowPosX = 1;
|
||||
gTextBox.textWindowPosY = context->scriptInstructionPointer[2];
|
||||
void ScriptCommand_MessageFromTargetPos(Entity* entity, ScriptExecutionContext* context) {
|
||||
MessageFromTarget(context->scriptInstructionPointer[1]);
|
||||
gMessage.textWindowPosX = 1;
|
||||
gMessage.textWindowPosY = context->scriptInstructionPointer[2];
|
||||
}
|
||||
|
||||
void ScriptCommand_TextboxNoOverlapFollowTable(Entity* entity, ScriptExecutionContext* context) {
|
||||
void ScriptCommand_MessageFromTargetTable(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (gActiveScriptInfo.commandSize > context->intVariable) {
|
||||
u16* tmp = context->scriptInstructionPointer + context->intVariable;
|
||||
TextboxNoOverlapFollow(tmp[1]);
|
||||
MessageFromTarget(tmp[1]);
|
||||
} else {
|
||||
TextboxNoOverlapFollow(0);
|
||||
MessageFromTarget(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptCommand_TextboxNoOverlapVar(Entity* entity, ScriptExecutionContext* context) {
|
||||
TextboxNoOverlap(context->intVariable, entity);
|
||||
void ScriptCommand_MessageNoOverlapVar(Entity* entity, ScriptExecutionContext* context) {
|
||||
MessageNoOverlap(context->intVariable, entity);
|
||||
}
|
||||
|
||||
void ScriptCommand_0807EB28(Entity* entity, ScriptExecutionContext* context) {
|
||||
@@ -1262,7 +1267,7 @@ void ScriptCommand_SetEntitySpeed(Entity* entity, ScriptExecutionContext* contex
|
||||
}
|
||||
|
||||
void ScriptCommand_SetEntity0x20(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->field_0x20 = GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer);
|
||||
entity->hVelocity = GetNextScriptCommandWordAfterCommandMetadata(context->scriptInstructionPointer);
|
||||
}
|
||||
|
||||
void ScriptCommand_SetEntityPositionRelative(Entity* entity, ScriptExecutionContext* context) {
|
||||
@@ -1433,7 +1438,7 @@ void ScriptCommand_0807EEF4(Entity* entity, ScriptExecutionContext* context) {
|
||||
void ScriptCommand_0807EF3C(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (!context->unk_18) {
|
||||
context->unk_18 = 1;
|
||||
entity->field_0x20 = ((s16)context->scriptInstructionPointer[1]) << 8;
|
||||
entity->hVelocity = ((s16)context->scriptInstructionPointer[1]) << 8;
|
||||
context->x.HALF.LO = context->scriptInstructionPointer[2] << 8;
|
||||
sub_08003FC4(entity, (u16)context->x.HALF.LO);
|
||||
} else {
|
||||
@@ -1524,3 +1529,627 @@ void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context) {
|
||||
void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_08080964(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]);
|
||||
}
|
||||
|
||||
extern u8 gUnk_0811E750[];
|
||||
extern u8 gUnk_0811E758[];
|
||||
extern u8 gUnk_0811E760[];
|
||||
|
||||
void sub_0807F0D8(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->condition = (-(u32)gInput.newKeys | ((u32)gInput.newKeys)) >> 0x1f;
|
||||
}
|
||||
|
||||
void sub_0807F0EC(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->intVariable = (s32)Random() % (s32)context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807F100(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 rand;
|
||||
|
||||
rand = Random();
|
||||
entity->animationState = rand & 6;
|
||||
context->unk_1A = gUnk_0811E750[(rand >> 8) & 7];
|
||||
}
|
||||
|
||||
void sub_0807F128(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 rand;
|
||||
|
||||
rand = Random();
|
||||
entity->animationState = gUnk_0811E758[rand & 7];
|
||||
context->unk_1A = gUnk_0811E760[(rand >> 8) & 7];
|
||||
}
|
||||
|
||||
void sub_0807F158(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(entity);
|
||||
}
|
||||
|
||||
void sub_0807F168(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerEntity.collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(&gPlayerEntity);
|
||||
}
|
||||
|
||||
void sub_0807F180(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->collisionLayer = 2;
|
||||
UpdateSpriteForCollisionLayer(entity);
|
||||
}
|
||||
|
||||
void sub_0807F190(Entity* entity, ScriptExecutionContext* context) {
|
||||
DoFade(4, 256);
|
||||
}
|
||||
|
||||
void sub_0807F1A0(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0807DEDC(entity, context, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI);
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F1C4(Entity* entity, ScriptExecutionContext* context) {
|
||||
if ((gPlayerState.flags & 8) != 0) {
|
||||
gPlayerState.field_0x8 = 0x459;
|
||||
} else {
|
||||
gPlayerState.field_0x8 = 0x1bc;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F1E8(Entity* entity, ScriptExecutionContext* context) {
|
||||
if ((gPlayerState.flags & 8) != 0) {
|
||||
gPlayerState.field_0x8 = 0x45a;
|
||||
} else {
|
||||
gPlayerState.field_0x8 = 0x2bd;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F210(Entity* entity, ScriptExecutionContext* context) {
|
||||
if ((gPlayerState.flags & 8) != 0) {
|
||||
gPlayerState.field_0x8 = 0x41c;
|
||||
} else {
|
||||
gPlayerState.field_0x8 = 0x80c;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F238(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerState.field_0x8 = context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807F244(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 slot;
|
||||
u32 item;
|
||||
|
||||
item = context->intVariable & 0xFFFF;
|
||||
slot = context->intVariable >> 0x10;
|
||||
item &= 0xFFFF;
|
||||
switch (item) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 6:
|
||||
// Pick greatest sword unlocked
|
||||
item = 1;
|
||||
if (GetInventoryValue(2))
|
||||
item = 2;
|
||||
if (GetInventoryValue(3))
|
||||
item = 3;
|
||||
if (GetInventoryValue(4))
|
||||
item = 4;
|
||||
if (GetInventoryValue(6))
|
||||
item = 6;
|
||||
break;
|
||||
}
|
||||
ForceEquipItem(item, slot);
|
||||
}
|
||||
|
||||
void sub_0807F29C(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0805ED14((void*)context->intVariable);
|
||||
}
|
||||
|
||||
void sub_0807F2A8(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (gPlayerState.field_0x9c == 0) {
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
} else {
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F2D4(Entity* entity, ScriptExecutionContext* context) {
|
||||
if ((entity->frames.all & 0x80) != 0) {
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
} else {
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F304(Entity* entity, ScriptExecutionContext* context) {
|
||||
if ((gPlayerEntity.frames.all & 0x80) != 0) {
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
} else {
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F338(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->hitbox = NULL;
|
||||
entity->field_0x17 &= ~1;
|
||||
}
|
||||
|
||||
void sub_0807F348(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0805E3A0(entity, 2);
|
||||
}
|
||||
|
||||
void sub_0807F354(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0805E3A0(entity, 6);
|
||||
}
|
||||
|
||||
void sub_0807F360(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0805E3A0(entity, 3);
|
||||
}
|
||||
|
||||
void sub_0807F36C(Entity* entity, ScriptExecutionContext* context) {
|
||||
Entity* fx;
|
||||
fx = CreateFx(entity, FX_REFLECT4, 0);
|
||||
if (fx != NULL) {
|
||||
fx->spritePriority.b0 = 1;
|
||||
PositionRelative(entity, fx, 0, -524288);
|
||||
if (Random() & 1)
|
||||
fx->spriteSettings.b.flipX = 1;
|
||||
if (Random() & 1)
|
||||
fx->spriteSettings.b.flipY = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F3C8(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0807F36C(entity, context);
|
||||
SoundReq(SFX_BUTTON_DEPRESS);
|
||||
}
|
||||
|
||||
void sub_0807F3D8(Entity* entity, ScriptExecutionContext* context) {
|
||||
InitAnimationForceUpdate(entity, context->intVariable + (entity->animationState >> 1));
|
||||
entity->field_0x80.HWORD = entity->animIndex;
|
||||
}
|
||||
|
||||
void sub_0807F3F8(Entity* entity, ScriptExecutionContext* context) {
|
||||
CreateSpeechBubbleExclamationMark(&gPlayerEntity, 8, -24);
|
||||
}
|
||||
|
||||
void sub_0807F40C(Entity* entity, ScriptExecutionContext* context) {
|
||||
CreateSpeechBubbleQuestionMark(&gPlayerEntity, 8, -24);
|
||||
}
|
||||
|
||||
void sub_0807F420(Entity* entity, ScriptExecutionContext* context) {
|
||||
MenuFadeIn(context->intVariable & 0xff, (u8)(context->intVariable >> 8));
|
||||
}
|
||||
|
||||
void sub_0807F434(Entity* entity, ScriptExecutionContext* context) {
|
||||
switch (entity->interactType) {
|
||||
case 1:
|
||||
entity->interactType = 0;
|
||||
context->intVariable = 1;
|
||||
break;
|
||||
case 2:
|
||||
entity->interactType = 0;
|
||||
context->intVariable = 2;
|
||||
break;
|
||||
default:
|
||||
context->intVariable = 0;
|
||||
break;
|
||||
}
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F464(Entity* entity, ScriptExecutionContext* context) {
|
||||
s32 s32Var;
|
||||
|
||||
if (!context->unk_18) {
|
||||
context->unk_18++;
|
||||
context->postScriptActions |= 2;
|
||||
s32Var = context->intVariable;
|
||||
context->x.HALF.HI = gRoomControls.roomOriginX + s32Var;
|
||||
context->y.HALF.HI = entity->y.HALF.HI;
|
||||
if (s32Var > entity->x.HALF.HI - gRoomControls.roomOriginX) {
|
||||
entity->direction = 64;
|
||||
entity->animationState = (entity->animationState & 0x80) | 2;
|
||||
} else {
|
||||
entity->direction = -64;
|
||||
entity->animationState = (entity->animationState & 0x80) | 6;
|
||||
}
|
||||
}
|
||||
sub_0806F62C(entity, entity->speed, entity->direction);
|
||||
if (((context->x.HALF.HI - entity->x.HALF.HI) ^ ((entity->direction & 0x80) << 24)) < 0)
|
||||
entity->x.HALF.HI = context->x.HALF.HI;
|
||||
else
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
|
||||
void sub_0807F4F8(Entity* entity, ScriptExecutionContext* context) {
|
||||
s32 s32Var;
|
||||
|
||||
if (!context->unk_18) {
|
||||
context->unk_18++;
|
||||
context->postScriptActions |= 2;
|
||||
s32Var = context->intVariable;
|
||||
context->x.HALF.HI = entity->x.HALF.HI;
|
||||
context->y.HALF.HI = gRoomControls.roomOriginY + s32Var;
|
||||
if (s32Var > entity->y.HALF.HI - gRoomControls.roomOriginY) {
|
||||
entity->direction = 128;
|
||||
entity->animationState = (entity->animationState & 0x80) | 4;
|
||||
} else {
|
||||
entity->direction = 0;
|
||||
entity->animationState = (entity->animationState & 0x80);
|
||||
}
|
||||
}
|
||||
sub_0806F62C(entity, entity->speed, entity->direction);
|
||||
if (((context->y.HALF.HI - entity->y.HALF.HI) ^ ((entity->direction & 0x80) << 24)) >= 0)
|
||||
entity->y.HALF.HI = context->y.HALF.HI;
|
||||
else
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
|
||||
void sub_0807F584(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->intVariable = gPlayerEntity.animationState >> 1;
|
||||
}
|
||||
|
||||
void sub_0807F594(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (gPlayerState.field_0xa8)
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
|
||||
void sub_0807F5B0(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerState.field_0x27[0] = context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807F5C0(Entity* entity, ScriptExecutionContext* context) {
|
||||
s32 left;
|
||||
s32 bottom;
|
||||
|
||||
if (gRoomControls.cameraTarget != NULL) {
|
||||
left = gRoomControls.cameraTarget->x.HALF.HI - DISPLAY_WIDTH / 2;
|
||||
bottom = gRoomControls.cameraTarget->y.HALF.HI - DISPLAY_HEIGHT / 2;
|
||||
|
||||
if (left < gRoomControls.roomOriginX)
|
||||
left = gRoomControls.roomOriginX;
|
||||
if (left > gRoomControls.roomOriginX + gRoomControls.width - DISPLAY_WIDTH)
|
||||
left = gRoomControls.roomOriginX + gRoomControls.width - DISPLAY_WIDTH;
|
||||
if (bottom < gRoomControls.roomOriginY)
|
||||
bottom = gRoomControls.roomOriginY;
|
||||
if (bottom > gRoomControls.roomOriginY + gRoomControls.height - DISPLAY_HEIGHT)
|
||||
bottom = gRoomControls.roomOriginY + gRoomControls.height - DISPLAY_HEIGHT;
|
||||
|
||||
if (left == gRoomControls.roomScrollX && bottom == gRoomControls.roomScrollY)
|
||||
gActiveScriptInfo.flags |= 1u;
|
||||
else
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F634(Entity* entity, ScriptExecutionContext* context) {
|
||||
u16* p = (u16*)context->intVariable;
|
||||
sub_0801DFB4(entity, p[0], p[1], p[2]);
|
||||
gPlayerState.field_0x8b = 3;
|
||||
}
|
||||
|
||||
void sub_0807F650(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 p = sub_08002632(entity);
|
||||
sub_0801DFB4(entity, gUnk_08001A7C[p][0], gUnk_08001A7C[p][1], gUnk_08001A7C[p][2]);
|
||||
gPlayerState.field_0x8b = 3;
|
||||
}
|
||||
|
||||
void sub_0807F680(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->condition = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX > (s32)(context->intVariable & 0xffff);
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F6B4(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->condition = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY > (s32)(context->intVariable & 0xffff);
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F6E8(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerState.flags |= context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807F6F8(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerState.flags &= ~context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807F708(Entity* entity, ScriptExecutionContext* context) {
|
||||
ShowNPCDialogue(entity, (Dialog*)context->intVariable);
|
||||
}
|
||||
|
||||
void sub_0807F714(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->spriteRendering.b3 = gUnk_08114F30[entity->spriteRendering.b3];
|
||||
ResolveEntityOnTop(entity, entity);
|
||||
}
|
||||
|
||||
void sub_0807F738(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->spriteRendering.b3 = gUnk_08114F34[entity->spriteRendering.b3];
|
||||
sub_0806FAD8(entity, entity);
|
||||
}
|
||||
|
||||
void sub_0807F75C(Entity* entity, ScriptExecutionContext* context) {
|
||||
s32 s32Var = context->intVariable;
|
||||
gPlayerEntity.x.HALF.HI = (s32Var >> 16) + gRoomControls.roomOriginX;
|
||||
gPlayerEntity.y.HALF.HI = (s32Var & 0xffff) + gRoomControls.roomOriginY;
|
||||
}
|
||||
|
||||
void sub_0807F77C(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (context->condition)
|
||||
context->intVariable = 1;
|
||||
else
|
||||
context->intVariable = 0;
|
||||
}
|
||||
|
||||
void sub_0807F78C(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 item = context->intVariable;
|
||||
u32 msg;
|
||||
u32 price;
|
||||
|
||||
if (context->intVariable == 0)
|
||||
item = gRoomVars.itemForSaleIndex;
|
||||
|
||||
msg = GetSaleItemConfirmMessageID(item);
|
||||
price = GetItemPrice(item);
|
||||
MessageNoOverlap(msg, entity);
|
||||
gMessage.field_0x10 = (u16)price;
|
||||
}
|
||||
|
||||
void sub_0807F7C4(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 item = context->intVariable;
|
||||
u32 msg;
|
||||
u32 price;
|
||||
|
||||
if (context->intVariable == 0)
|
||||
item = gRoomVars.itemForSaleIndex;
|
||||
|
||||
context->condition = GetItemPrice(item) <= gSave.stats.rupees;
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F800(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 item = context->intVariable;
|
||||
u32 msg;
|
||||
u32 price;
|
||||
|
||||
if (context->intVariable == 0)
|
||||
item = gRoomVars.itemForSaleIndex;
|
||||
|
||||
price = GetItemPrice(item);
|
||||
ModRupees(-price);
|
||||
sub_080A7C18(item, 0, 0);
|
||||
gRoomVars.itemForSaleIndex = 0;
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F83C(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_08079184();
|
||||
}
|
||||
|
||||
void sub_0807F844(Entity* entity, ScriptExecutionContext* context) {
|
||||
gRoomControls.cameraTarget = entity;
|
||||
sub_080809D4();
|
||||
}
|
||||
|
||||
void sub_0807F854(Entity* entity, ScriptExecutionContext* context) {
|
||||
u32 value;
|
||||
u32 idx;
|
||||
|
||||
idx = (context->intVariable >> 0x10) & 3;
|
||||
value = context->intVariable & 0xffff;
|
||||
switch (idx) {
|
||||
case 0:
|
||||
case 1:
|
||||
gMessage.field_0x10 = value;
|
||||
break;
|
||||
case 2:
|
||||
gMessage.field_0x14 = value;
|
||||
break;
|
||||
case 3:
|
||||
gMessage.field_0x18 = value;
|
||||
break;
|
||||
case 4:
|
||||
gMessage.field_0x1c = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F8BC(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (sub_080040A8(entity))
|
||||
context->condition = 1;
|
||||
else
|
||||
context->condition = 0;
|
||||
}
|
||||
|
||||
void sub_0807F8D0(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_08003FC4(entity, context->intVariable);
|
||||
gActiveScriptInfo.flags |= 1;
|
||||
}
|
||||
|
||||
void sub_0807F8E8(Entity* entity, ScriptExecutionContext* context) {
|
||||
Entity* c = CreateObjectWithParent(entity, 0xA6, 0, 0);
|
||||
if (c != NULL) {
|
||||
c->parent = entity;
|
||||
c->field_0x86.HWORD = (context->intVariable & 0x3ff) | 0x8000;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807F918(Entity* entity, ScriptExecutionContext* context) {
|
||||
PutItemOnSlot(context->intVariable);
|
||||
}
|
||||
|
||||
void sub_0807F924(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0807879C(entity);
|
||||
}
|
||||
|
||||
void sub_0807F92C(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_080787C0(entity);
|
||||
}
|
||||
|
||||
void sub_0807F934(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_080787B4(entity);
|
||||
}
|
||||
|
||||
void sub_0807F93C(Entity* entity, ScriptExecutionContext* context) {
|
||||
CreateSpeechBubbleSleep(entity, (context->intVariable >> 8) & 0xff, context->intVariable & 0xff);
|
||||
}
|
||||
|
||||
void sub_0807F950(Entity* entity, ScriptExecutionContext* context) {
|
||||
Entity* c = FindEntity(6, 0x56, 6, 0, 2);
|
||||
if (c != NULL)
|
||||
DeleteEntity(c);
|
||||
}
|
||||
|
||||
void sub_0807F970(Entity* entity, ScriptExecutionContext* context) {
|
||||
context->condition = context->intVariable == gTextRender.curToken.textIndex;
|
||||
}
|
||||
|
||||
void sub_0807F98C(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->height.WORD = context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807F994(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->spriteOffsetX = (s32)context->intVariable >> 0x10;
|
||||
entity->spriteOffsetY = context->intVariable & 0xffff;
|
||||
}
|
||||
|
||||
void sub_0807F9A4(Entity* entity, ScriptExecutionContext* context) {
|
||||
switch (gPlayerState.field_0xa8) {
|
||||
case 5:
|
||||
case 7:
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
case 20:
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
case 24:
|
||||
case 27:
|
||||
case 28:
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
break;
|
||||
default:
|
||||
gActiveScriptInfo.flags |= 1u;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807FA40(Entity* entity, ScriptExecutionContext* context) {
|
||||
switch (gPlayerState.field_0xa8) {
|
||||
case 5:
|
||||
case 7:
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 20:
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
case 24:
|
||||
case 27:
|
||||
case 28:
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
break;
|
||||
default:
|
||||
gActiveScriptInfo.flags |= 1u;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0807FADC(Entity* entity, ScriptExecutionContext* context) {
|
||||
switch (context->unk_18) {
|
||||
case 0:
|
||||
context->unk_18++;
|
||||
sub_0808C650(entity, context->intVariable);
|
||||
break;
|
||||
case 1:
|
||||
if (sub_0808C67C())
|
||||
context->unk_18++;
|
||||
break;
|
||||
case 2:
|
||||
sub_0808C688();
|
||||
return;
|
||||
}
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
|
||||
void sub_0807FB28(Entity* entity, ScriptExecutionContext* context) {
|
||||
if (!context->unk_18)
|
||||
sub_0801D7BC(0x7fff, 1);
|
||||
|
||||
context->unk_18++;
|
||||
if (context->unk_18 >= context->intVariable)
|
||||
sub_0801D7BC(0, 0);
|
||||
else
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
|
||||
void sub_0807FB64(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerEntity.iframes = context->intVariable;
|
||||
}
|
||||
|
||||
void sub_0807FB74(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerState.swimState = 0;
|
||||
gPlayerEntity.field_0x3c &= ~4;
|
||||
}
|
||||
|
||||
void sub_0807FB94(Entity* entity, ScriptExecutionContext* context) {
|
||||
InitScreen(SCREEN_CREDITS);
|
||||
}
|
||||
|
||||
void sub_0807FBA0(Entity* entity, ScriptExecutionContext* context) {
|
||||
entity->x.HALF.HI = gRoomControls.roomScrollX + 120;
|
||||
entity->y.HALF.HI = gRoomControls.roomScrollY + 80;
|
||||
}
|
||||
|
||||
void sub_0807FBB4(Entity* entity, ScriptExecutionContext* context) {
|
||||
gPlayerState.field_0x1a[0] |= 0x80;
|
||||
}
|
||||
|
||||
void sub_0807FBC4(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0805E4A0(entity);
|
||||
}
|
||||
|
||||
void sub_0807FBCC(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0805E4CC(entity);
|
||||
}
|
||||
|
||||
void sub_0807FBD4(Entity* entity, ScriptExecutionContext* context) {
|
||||
sub_0806F62C(entity, entity->speed, entity->direction);
|
||||
if (sub_080040A8(entity))
|
||||
gActiveScriptInfo.commandSize = 0;
|
||||
}
|
||||
|
||||
#ifndef EU
|
||||
void sub_0807FBFC(Entity* entity, ScriptExecutionContext* context) {
|
||||
gSave.stats.charm = 0;
|
||||
gSave.stats.charmTimer = 0;
|
||||
gSave.stats.unkB = 0;
|
||||
gSave.stats.unkTimer = 0;
|
||||
gSave.stats.effect = 0;
|
||||
gSave.stats.effectTimer = 0;
|
||||
}
|
||||
|
||||
#if defined(USA) || defined(DEMO_USA) || defined(DEMO_JP)
|
||||
void sub_0807FC24(Entity* entity, ScriptExecutionContext* context) {
|
||||
#if defined(DEMO_JP)
|
||||
u32 idx = gRoomControls.roomID == 1 ? 0xcf : 0xd0;
|
||||
#else
|
||||
u32 idx = gRoomControls.roomID == 1 ? 0xcf : 0xd1;
|
||||
#endif
|
||||
SetLocalFlag(idx);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user