* isk_01/2/3

* machi

* mac_05

* mac_04 matched

* mac_04

* mac_02 match

* mostly cookin

* mac_02 cleanup

* tayce t cleanup done

* most of isk

* almost done isk

* isk done

* mapconfig 1C

* jump to goal

Co-authored-by: HailSanta <Hail2Santa@gmail.com>
This commit is contained in:
HailSanta 2022-12-05 18:29:22 -05:00 committed by GitHub
parent 40c2b9be4d
commit 703896a7f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
524 changed files with 18261 additions and 6984 deletions

View File

@ -416,7 +416,7 @@ typedef union X32 {
} X32; } X32;
typedef struct Evt { typedef struct Evt {
/* 0x000 */ u8 state; /* 0x000 */ u8 stateFlags;
/* 0x001 */ u8 currentArgc; /* 0x001 */ u8 currentArgc;
/* 0x002 */ u8 currentOpcode; /* 0x002 */ u8 currentOpcode;
/* 0x003 */ u8 priority; /* 0x003 */ u8 priority;
@ -1514,7 +1514,7 @@ typedef struct SelectableTarget {
} SelectableTarget; // size = 0x14 } SelectableTarget; // size = 0x14
typedef struct ActorPartMovement { typedef struct ActorPartMovement {
/* 0x00 */ Vec3f unk_00; /* 0x00 */ Vec3f absolutePosition;
/* 0x0C */ Vec3f goalPos; /* 0x0C */ Vec3f goalPos;
/* 0x18 */ Vec3f unk_18; /* 0x18 */ Vec3f unk_18;
/* 0x24 */ f32 jumpScale; /* 0x24 */ f32 jumpScale;

View File

@ -3381,7 +3381,7 @@ enum PlayerStatusAnimFlags {
PA_FLAGS_SHIVERING = 0x00000400, PA_FLAGS_SHIVERING = 0x00000400,
PA_FLAGS_OPENED_HIDDEN_PANEL = 0x00000800, PA_FLAGS_OPENED_HIDDEN_PANEL = 0x00000800,
PA_FLAGS_USING_PEACH_PHYSICS = 0x00001000, PA_FLAGS_USING_PEACH_PHYSICS = 0x00001000,
PA_FLAGS_IN_DISGUISE = 0x00002000, PA_FLAGS_INVISIBLE = 0x00002000,
PA_FLAGS_8BIT_MARIO = 0x00004000, PA_FLAGS_8BIT_MARIO = 0x00004000,
PA_FLAGS_NPC_COLLIDED = 0x00008000, PA_FLAGS_NPC_COLLIDED = 0x00008000,
PA_FLAGS_SPINNING = 0x00010000, PA_FLAGS_SPINNING = 0x00010000,
@ -4437,37 +4437,11 @@ enum ProjectileHitboxAttackStates {
enum MusicSettingsFlags { enum MusicSettingsFlags {
MUSIC_SETTINGS_FLAGS_1 = 0x00000001, MUSIC_SETTINGS_FLAGS_1 = 0x00000001,
MUSIC_SETTINGS_FLAGS_2 = 0x00000002, MUSIC_SETTINGS_FLAGS_ENABLE_PROXIMITY_MIX = 0x00000002,
MUSIC_SETTINGS_FLAGS_4 = 0x00000004, MUSIC_SETTINGS_FLAGS_4 = 0x00000004,
MUSIC_SETTINGS_FLAGS_8 = 0x00000008, MUSIC_SETTINGS_FLAGS_8 = 0x00000008,
MUSIC_SETTINGS_FLAGS_10 = 0x00000010, MUSIC_SETTINGS_FLAGS_10 = 0x00000010,
MUSIC_SETTINGS_FLAGS_20 = 0x00000020, MUSIC_SETTINGS_FLAGS_20 = 0x00000020,
MUSIC_SETTINGS_FLAGS_40 = 0x00000040,
MUSIC_SETTINGS_FLAGS_80 = 0x00000080,
MUSIC_SETTINGS_FLAGS_100 = 0x00000100,
MUSIC_SETTINGS_FLAGS_200 = 0x00000200,
MUSIC_SETTINGS_FLAGS_400 = 0x00000400,
MUSIC_SETTINGS_FLAGS_800 = 0x00000800,
MUSIC_SETTINGS_FLAGS_1000 = 0x00001000,
MUSIC_SETTINGS_FLAGS_2000 = 0x00002000,
MUSIC_SETTINGS_FLAGS_4000 = 0x00004000,
MUSIC_SETTINGS_FLAGS_8000 = 0x00008000,
MUSIC_SETTINGS_FLAGS_10000 = 0x00010000,
MUSIC_SETTINGS_FLAGS_20000 = 0x00020000,
MUSIC_SETTINGS_FLAGS_40000 = 0x00040000,
MUSIC_SETTINGS_FLAGS_80000 = 0x00080000,
MUSIC_SETTINGS_FLAGS_100000 = 0x00100000,
MUSIC_SETTINGS_FLAGS_200000 = 0x00200000,
MUSIC_SETTINGS_FLAGS_400000 = 0x00400000,
MUSIC_SETTINGS_FLAGS_800000 = 0x00800000,
MUSIC_SETTINGS_FLAGS_1000000 = 0x01000000,
MUSIC_SETTINGS_FLAGS_2000000 = 0x02000000,
MUSIC_SETTINGS_FLAGS_4000000 = 0x04000000,
MUSIC_SETTINGS_FLAGS_8000000 = 0x08000000,
MUSIC_SETTINGS_FLAGS_10000000 = 0x10000000,
MUSIC_SETTINGS_FLAGS_20000000 = 0x20000000,
MUSIC_SETTINGS_FLAGS_40000000 = 0x40000000,
MUSIC_SETTINGS_FLAGS_80000000 = 0x80000000,
}; };
// the lower byte of Collider::flags // the lower byte of Collider::flags

View File

@ -939,7 +939,7 @@ void func_800E9810(void);
void func_800E983C(void); void func_800E983C(void);
void func_800E984C(void); void func_800E984C(void);
s32 func_800E9860(void); s32 func_800E9860(void);
void func_800E98C4(void); void status_menu_respond_to_changes(void);
void func_800E98EC(void); void func_800E98EC(void);
void func_800E9900(void); void func_800E9900(void);
void func_800F0C9C(void); void func_800F0C9C(void);
@ -981,7 +981,7 @@ void func_8025DA60(ActorPart*, s32);
void func_8025DBC8(ActorPart*, s32); void func_8025DBC8(ActorPart*, s32);
void func_8025DD40(ActorPart*, s32); void func_8025DD40(ActorPart*, s32);
void func_8025DE88(ActorPart*, s32); void func_8025DE88(ActorPart*, s32);
void func_800E9894(void); void status_menu_ignore_changes(void);
void func_8013A854(u32); void func_8013A854(u32);
void set_script_flags(Evt* script, s32 flags); void set_script_flags(Evt* script, s32 flags);

View File

@ -16,9 +16,10 @@
#define ALIGN16(val) (((val) + 0xF) & ~0xF) #define ALIGN16(val) (((val) + 0xF) & ~0xF)
#define ALIGN8(val) (((val) + 0x7) & ~0x7) #define ALIGN8(val) (((val) + 0x7) & ~0x7)
#define NAMESUFFIX #define NAME_SUFFIX
#define A(sym) NS(AREA, sym, NAMESUFFIX) #define NAME_PREFIX
#define N(sym) NS(NAMESPACE, sym, NAMESUFFIX) #define A(sym) NS(AREA, NAME_PREFIX, sym, NAME_SUFFIX)
#define N(sym) NS(NAMESPACE, NAME_PREFIX, sym, NAME_SUFFIX)
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
@ -76,6 +77,8 @@
#define MAX_TEX_PANNERS 16 #define MAX_TEX_PANNERS 16
#define MAX_ITEM_ENTITIES 256 #define MAX_ITEM_ENTITIES 256
#define MAX_STAR_PIECES 222
#define SCREEN_WIDTH 320 #define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240 #define SCREEN_HEIGHT 240
@ -132,8 +135,8 @@
/// X.10 fixed-point literal /// X.10 fixed-point literal
#define X10(f) (s32)(f * 1024.0f) #define X10(f) (s32)(f * 1024.0f)
#define _NS(x, y, z) x ## _ ## y ## z #define _NS(w, x, y, z) w ## _ ## x ## y ## z
#define NS(x, y, z) _NS(x, y, z) #define NS(w, x, y, z) _NS(w, x, y, z)
#define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0))) #define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0)))

View File

@ -53,14 +53,9 @@ typedef struct MapConfig {
/* 0x10 */ void* dmaDest; /* 0x10 */ void* dmaDest;
/* 0x14 */ char* bgName; /* 0x14 */ char* bgName;
/* 0x18 */ MapInit init; ///< Return TRUE to skip normal asset (shape/hit/bg/tex) loading. /* 0x18 */ MapInit init; ///< Return TRUE to skip normal asset (shape/hit/bg/tex) loading.
/* 0x1C */ union { /* 0x1C */ char unk_1C[0x2];
u32 word; /* 0x1E */ s8 songVariation; ///< 0 or 1. @see bgm_get_map_default_variation
struct { /* 0x1F */ s8 sfxReverb;
char unk_1C[0x2];
s8 songVariation; ///< 0 or 1. @see bgm_get_map_default_variation
s8 flags;
} bytes;
} unk_1C;
} MapConfig; // size = 0x20 } MapConfig; // size = 0x20
typedef struct AreaConfig { typedef struct AreaConfig {

View File

@ -22,10 +22,10 @@
} }
#define GENEROUS_HEART_DROPS(attempts) { \ #define GENEROUS_HEART_DROPS(attempts) { \
{ F16(20), F16(80), attempts, F16(50) } \ { F16(20), F16(80), attempts, F16(50) }, \
{ F16(30), F16(70), attempts, F16(50) } \ { F16(30), F16(70), attempts, F16(50) }, \
{ F16(50), F16(60), attempts, F16(40) } \ { F16(50), F16(60), attempts, F16(40) }, \
{ F16(80), F16(50), attempts, F16(40) } \ { F16(80), F16(50), attempts, F16(40) }, \
{ F16(100), F16(40), attempts, F16(30) }, \ { F16(100), F16(40), attempts, F16(30) }, \
} }

View File

@ -316,37 +316,37 @@ enum GameBytes {
GB_Unused_KPA_0F = GameByte(0x138), GB_Unused_KPA_0F = GameByte(0x138),
GB_Unused_KPA_10 = GameByte(0x139), GB_Unused_KPA_10 = GameByte(0x139),
GB_Unused_KPA_11 = GameByte(0x13A), GB_Unused_KPA_11 = GameByte(0x13A),
GB_Unused_END_00 = GameByte(0x13B), GB_Unused_OSR_00 = GameByte(0x13B),
GB_Unused_END_01 = GameByte(0x13C), GB_Unused_OSR_01 = GameByte(0x13C),
GB_Unused_END_02 = GameByte(0x13D), GB_Unused_OSR_02 = GameByte(0x13D),
GB_Unused_END_03 = GameByte(0x13E), GB_Unused_OSR_03 = GameByte(0x13E),
GB_Unused_END_04 = GameByte(0x13F), GB_Unused_OSR_04 = GameByte(0x13F),
GB_Unused_END_05 = GameByte(0x140), GB_Unused_OSR_05 = GameByte(0x140),
GB_Unused_END_06 = GameByte(0x141), GB_Unused_OSR_06 = GameByte(0x141),
GB_Unused_END_07 = GameByte(0x142), GB_Unused_OSR_07 = GameByte(0x142),
GB_Unused_END_08 = GameByte(0x143), GB_Unused_OSR_08 = GameByte(0x143),
GB_Unused_END_09 = GameByte(0x144), GB_Unused_OSR_09 = GameByte(0x144),
GB_Unused_END_0A = GameByte(0x145), GB_Unused_END_00 = GameByte(0x145),
GB_Unused_END_0B = GameByte(0x146), GB_Unused_END_01 = GameByte(0x146),
GB_Unused_END_0C = GameByte(0x147), GB_Unused_END_02 = GameByte(0x147),
GB_Unused_END_0D = GameByte(0x148), GB_Unused_END_03 = GameByte(0x148),
GB_Unused_END_0E = GameByte(0x149), GB_Unused_END_04 = GameByte(0x149),
GB_Unused_END_0F = GameByte(0x14A), GB_Unused_END_05 = GameByte(0x14A),
GB_Unused_END_10 = GameByte(0x14B), GB_Unused_END_06 = GameByte(0x14B),
GB_Unused_END_11 = GameByte(0x14C), GB_Unused_END_07 = GameByte(0x14C),
GB_Unused_END_12 = GameByte(0x14D), GB_Unused_END_08 = GameByte(0x14D),
GB_Unused_END_13 = GameByte(0x14E), GB_Unused_END_09 = GameByte(0x14E),
GB_Unused_END_14 = GameByte(0x14F), GB_Unused_END_0A = GameByte(0x14F),
GB_Unused_OSR_00 = GameByte(0x150), GB_Unused_BAT_00 = GameByte(0x150),
GB_Unused_BAT_00 = GameByte(0x151), GB_Unused_BAT_01 = GameByte(0x151),
GB_Unused_BAT_01 = GameByte(0x152), GB_Unused_BAT_02 = GameByte(0x152),
GB_Unused_BAT_02 = GameByte(0x153), GB_Unused_BAT_03 = GameByte(0x153),
GB_Unused_BAT_03 = GameByte(0x154), GB_Unused_BAT_04 = GameByte(0x154),
GB_Unused_BAT_04 = GameByte(0x155), GB_Unused_BAT_05 = GameByte(0x155),
GB_Unused_BAT_05 = GameByte(0x156), GB_Unused_BAT_06 = GameByte(0x156),
GB_Unused_BAT_06 = GameByte(0x157), GB_Unused_BAT_07 = GameByte(0x157),
GB_Unused_BAT_07 = GameByte(0x158), GB_Unused_BAT_08 = GameByte(0x158),
GB_Unused_BAT_08 = GameByte(0x159), GB_Unused_BAT_09 = GameByte(0x159),
GB_KootFavor_State = GameByte(0x15A), ///< 0 = none, 1 = rejected, 2 = accepted GB_KootFavor_State = GameByte(0x15A), ///< 0 = none, 1 = rejected, 2 = accepted
GB_KootFavor_Completed = GameByte(0x15B), GB_KootFavor_Completed = GameByte(0x15B),
GB_KootFavor_Current = GameByte(0x15C), ///< 0 if none active GB_KootFavor_Current = GameByte(0x15C), ///< 0 if none active

View File

@ -46,6 +46,7 @@ ApiStatus ClearDefeatedEnemies(Evt* script, s32 isInitialCall);
ApiStatus SetEnemyFlagBits(Evt* script, s32 isInitialCall); ApiStatus SetEnemyFlagBits(Evt* script, s32 isInitialCall);
ApiStatus GetSelfAnimationFromTable(Evt* script, s32 isInitialCall); ApiStatus GetSelfAnimationFromTable(Evt* script, s32 isInitialCall);
ApiStatus func_800457F8(Evt* script, s32 isInitialCall); ApiStatus func_800457F8(Evt* script, s32 isInitialCall);
ApiStatus func_800457C4(Evt* script, s32 isInitialCall);
ApiStatus ShowCoinCounter(Evt* script, s32 isInitialCall); ApiStatus ShowCoinCounter(Evt* script, s32 isInitialCall);
ApiStatus MakeEntity(Evt* script, s32 isInitialCall); ApiStatus MakeEntity(Evt* script, s32 isInitialCall);
ApiStatus SetEntityCullMode(Evt* script, s32 isInitialCall); ApiStatus SetEntityCullMode(Evt* script, s32 isInitialCall);
@ -154,6 +155,7 @@ ApiStatus EnablePartnerAI(Evt* script, s32 isInitialCall);
ApiStatus BringPartnerOut(Evt* script, s32 isInitialCall); ApiStatus BringPartnerOut(Evt* script, s32 isInitialCall);
ApiStatus PutPartnerAway(Evt* script, s32 isInitialCall); ApiStatus PutPartnerAway(Evt* script, s32 isInitialCall);
ApiStatus GetCurrentPartnerID(Evt* script, s32 isInitialCall); ApiStatus GetCurrentPartnerID(Evt* script, s32 isInitialCall);
ApiStatus PartnerCanUseAbility(Evt* script, s32 isInitialCall);
ApiStatus PartnerIsFlying(Evt* script, s32 isInitialCall); ApiStatus PartnerIsFlying(Evt* script, s32 isInitialCall);
ApiStatus SetNpcDecoration(Evt* script, s32 isInitialCall); ApiStatus SetNpcDecoration(Evt* script, s32 isInitialCall);
ApiStatus PlaySoundAtNpc(Evt* script, s32 isInitialCall); ApiStatus PlaySoundAtNpc(Evt* script, s32 isInitialCall);
@ -231,6 +233,7 @@ ApiStatus ClampAngleFloat(Evt* script, s32 isInitialCall);
ApiStatus FadeOutMusic(Evt* script, s32 isInitialCall); ApiStatus FadeOutMusic(Evt* script, s32 isInitialCall);
ApiStatus SetMusicTrack(Evt* script, s32 isInitialCall); ApiStatus SetMusicTrack(Evt* script, s32 isInitialCall);
ApiStatus FadeInMusic(Evt* script, s32 isInitialCall); ApiStatus FadeInMusic(Evt* script, s32 isInitialCall);
ApiStatus EnableMusicProximityMix(Evt* script, s32 isInitialCall);
ApiStatus SetMusicTrackVolumes(Evt* script, s32 isInitialCall); ApiStatus SetMusicTrackVolumes(Evt* script, s32 isInitialCall);
ApiStatus ClearAmbientSounds(Evt* script, s32 isInitialCall); ApiStatus ClearAmbientSounds(Evt* script, s32 isInitialCall);
ApiStatus PlayAmbientSounds(Evt* script, s32 isInitialCall); ApiStatus PlayAmbientSounds(Evt* script, s32 isInitialCall);
@ -319,6 +322,7 @@ ApiStatus PopSong(Evt* script, s32 isInitialCall);
ApiStatus func_802D62E4(Evt* script, s32 isInitialCall); ApiStatus func_802D62E4(Evt* script, s32 isInitialCall);
ApiStatus func_80044238(Evt* script, s32 isInitialCall); ApiStatus func_80044238(Evt* script, s32 isInitialCall);
ApiStatus MakeLocalVertexCopy(Evt* script, s32 isInitialCall); ApiStatus MakeLocalVertexCopy(Evt* script, s32 isInitialCall);
ApiStatus SetCustomGfx(Evt* script, s32 isInitialCall);
ApiStatus SetCustomGfxBuilders(Evt* script, s32 isInitialCall); ApiStatus SetCustomGfxBuilders(Evt* script, s32 isInitialCall);
ApiStatus SetModelCustomGfx(Evt* script, s32 isInitialCall); ApiStatus SetModelCustomGfx(Evt* script, s32 isInitialCall);
ApiStatus SetNpcPaletteSwapMode(Evt* script, s32 isInitialCall); ApiStatus SetNpcPaletteSwapMode(Evt* script, s32 isInitialCall);

View File

@ -122,12 +122,13 @@ extern s16 D_8009A6A4;
extern s16 D_8009A6A6; extern s16 D_8009A6A6;
extern s8 D_800A0920; extern s8 D_800A0920;
extern s32 D_800A0924; extern s32 SavedReverbMode;
extern s8 D_800A0921; extern s8 D_800A0921;
extern s16 D_800A0922; extern s16 D_800A0922;
extern char wMapTexName[]; extern char wMapTexName[];
extern char wMapHitName[]; extern char wMapHitName[];
extern char wMapShapeName[]; extern char wMapShapeName[];
extern char wMapBgName[];
extern struct ShapeFile* D_80210000; // shouldnt be a pointer extern struct ShapeFile* D_80210000; // shouldnt be a pointer
extern u8 D_802D9D70; // player alpha1 copy? extern u8 D_802D9D70; // player alpha1 copy?
extern u8 D_802D9D71; // player alpha2 copy? extern u8 D_802D9D71; // player alpha2 copy?

View File

@ -352,8 +352,8 @@ void btl_state_update_normal_start(void) {
actor->unk_208 = 0; actor->unk_208 = 0;
if (i == 0) { if (i == 0) {
actor->unk_208 = currentEncounter->unk_10; actor->unk_208 = currentEncounter->unk_10;
if (currentEncounter->dizzyAttackStatus == 4) { if (currentEncounter->dizzyAttackStatus == STATUS_DIZZY) {
inflict_status_set_duration(actor, 4, 0x24, currentEncounter->dizzyAttackDuration); inflict_status_set_duration(actor, STATUS_DIZZY, STATUS_DIZZY_TURN_MOD, currentEncounter->dizzyAttackDuration);
} }
} }
} }
@ -368,8 +368,8 @@ void btl_state_update_normal_start(void) {
actor->unk_208 = 0; actor->unk_208 = 0;
if (i == 0) { if (i == 0) {
actor->unk_208 = 0; actor->unk_208 = 0;
if (currentEncounter->dizzyAttackStatus == 4) { if (currentEncounter->dizzyAttackStatus == STATUS_DIZZY) {
inflict_status_set_duration(actor, 4, 0x24, currentEncounter->dizzyAttackDuration); inflict_status_set_duration(actor, STATUS_DIZZY, STATUS_DIZZY_TURN_MOD, currentEncounter->dizzyAttackDuration);
} }
} }
@ -379,9 +379,9 @@ void btl_state_update_normal_start(void) {
load_player_actor(); load_player_actor();
actor = battleStatus->playerActor; actor = battleStatus->playerActor;
if (gBattleStatus.flags2 & 0x40) { if (gBattleStatus.flags2 & 0x40) {
script = start_script(D_80284A30, 0xA, 0); script = start_script(D_80284A30, EVT_PRIORITY_A, 0);
} else { } else {
script = start_script(D_80284A20, 0xA, 0); script = start_script(D_80284A20, EVT_PRIORITY_A, 0);
} }
actor->takeTurnScript = script; actor->takeTurnScript = script;
actor->takeTurnID = script->id; actor->takeTurnID = script->id;

View File

@ -1001,14 +1001,121 @@ ApiStatus BindNextTurn(Evt* script, s32 isInitialCall) {
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }
INCLUDE_ASM(s32, "1A5830", JumpToGoal); ApiStatus JumpToGoal(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
Actor* actor;
ActorState* actorState;
s32 actorID;
f32 posX, posY, posZ;
f32 goalX, goalY, goalZ;
f32 moveDist;
if (isInitialCall) {
script->functionTemp[0] = 0;
}
if (script->functionTemp[0] == 0) {
actorID = evt_get_variable(script, *args++);
if (actorID == ACTOR_SELF) {
actorID = script->owner1.enemyID;
}
script->functionTempPtr[1] = actor = get_actor(actorID);
actorState = &actor->state;
actor->state.moveTime = evt_get_variable(script, *args++);
script->functionTemp[2] = evt_get_variable(script, *args++);
script->functionTemp[3] = 0;
if (evt_get_variable(script, *args++) != 0) {
script->functionTemp[3] |= 1;
}
if (evt_get_variable(script, *args++) != 0) {
script->functionTemp[3] |= 2;
}
actor->state.currentPos.x = actor->currentPos.x;
actor->state.currentPos.y = actor->currentPos.y;
actor->state.currentPos.z = actor->currentPos.z;
posX = actor->state.currentPos.x;
posY = actor->state.currentPos.y;
posZ = actor->state.currentPos.z;
goalX = actor->state.goalPos.x;
goalY = actor->state.goalPos.y;
goalZ = actor->state.goalPos.z;
actor->state.angle = atan2(posX, posZ, goalX, goalZ);
actor->state.distance = dist2D(posX, posZ, goalX, goalZ);
// make relative
posX = (goalX - posX);
posY = (goalY - posY);
posZ = (goalZ - posZ);
if (actor->state.moveTime == 0) {
actor->state.moveTime = actor->state.distance / actor->state.speed;
moveDist = actor->state.distance - (actor->state.moveTime * actor->state.speed);
} else {
actor->state.speed = actor->state.distance / actor->state.moveTime;
moveDist = actor->state.distance - (actor->state.moveTime * actor->state.speed);
}
if (actorState->moveTime == 0) {
return ApiStatus_DONE2;
}
actorState->velocity = (actorState->acceleration * actorState->moveTime * 0.5f) + (posY / actorState->moveTime);
actorState->speed += (moveDist / actorState->moveTime);
if (script->functionTemp[2] != 0) {
set_animation(actor->actorID, (s8) actor->state.jumpPartIndex, actor->state.animJumpRise);
}
if (!(script->functionTemp[3] & 2) && (actor->actorTypeData1[4] != 0)) {
sfx_play_sound_at_position(actor->actorTypeData1[4], 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z);
}
script->functionTemp[0] = 1;
}
actor = script->functionTempPtr[1];
actorState = &actor->state;
actor->state.currentPos.y += actor->state.velocity;
actor->state.velocity -= actor->state.acceleration;
if ((script->functionTemp[2] != 0) && (actor->state.velocity < 0.0f)) {
set_animation(actor->actorID, (s8) actor->state.jumpPartIndex, actor->state.animJumpFall);
}
if (actorState->velocity < 0.0f) {
if (actorState->currentPos.y < actorState->goalPos.y) {
actorState->currentPos.y = actorState->goalPos.y;
}
}
add_xz_vec3f(&actorState->currentPos, actorState->speed, actorState->angle);
actor->currentPos.x = actorState->currentPos.x;
actor->currentPos.y = actorState->currentPos.y;
actor->currentPos.z = actorState->currentPos.z;
actorState->moveTime--;
if (actorState->moveTime > 0) {
return ApiStatus_BLOCK;
}
if (script->functionTemp[3] & 1) {
play_movement_dust_effects(2, actorState->goalPos.x, actorState->goalPos.y, actorState->goalPos.z, actorState->angle);
}
actor->currentPos.x = actorState->goalPos.x;
actor->currentPos.y = actorState->goalPos.y;
actor->currentPos.z = actorState->goalPos.z;
if (script->functionTemp[2] != 0) {
set_animation(actor->actorID, (s8) actorState->jumpPartIndex, actorState->animJumpLand);
}
return ApiStatus_DONE1;
}
ApiStatus IdleJumpToGoal(Evt* script, s32 isInitialCall) { ApiStatus IdleJumpToGoal(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
ActorMovement* fly; ActorMovement* fly;
f32 x, y, z; f32 posX, posY, posZ;
f32 goalX, goalY, goalZ; f32 goalX, goalY, goalZ;
f32 var_f8; f32 moveDist;
Actor* actor; Actor* actor;
if (isInitialCall) { if (isInitialCall) {
@ -1033,30 +1140,34 @@ ApiStatus IdleJumpToGoal(Evt* script, s32 isInitialCall) {
fly->currentPos.y = actor->currentPos.y; fly->currentPos.y = actor->currentPos.y;
fly->currentPos.z = actor->currentPos.z; fly->currentPos.z = actor->currentPos.z;
x = fly->currentPos.x; posX = fly->currentPos.x;
y = fly->currentPos.y; posY = fly->currentPos.y;
z = fly->currentPos.z; posZ = fly->currentPos.z;
goalX = fly->goalPos.x; goalX = fly->goalPos.x;
goalY = fly->goalPos.y; goalY = fly->goalPos.y;
goalZ = fly->goalPos.z; goalZ = fly->goalPos.z;
fly->angle = atan2(x, z, goalX, goalZ); fly->angle = atan2(posX, posZ, goalX, goalZ);
fly->distance = dist2D(x, z, goalX, goalZ); fly->distance = dist2D(posX, posZ, goalX, goalZ);
y = goalY - y;
// make relative
posX = (goalX - posX);
posY = (goalY - posY);
posZ = (goalZ - posZ);
if (fly->flyTime == 0) { if (fly->flyTime == 0) {
fly->flyTime = fly->distance / fly->speed; fly->flyTime = fly->distance / fly->speed;
var_f8 = fly->distance - (fly->flyTime * fly->speed); moveDist = fly->distance - (fly->flyTime * fly->speed);
} else { } else {
fly->speed = fly->distance / fly->flyTime; fly->speed = fly->distance / fly->flyTime;
var_f8 = fly->distance - (fly->flyTime * fly->speed); moveDist = fly->distance - (fly->flyTime * fly->speed);
} }
if (fly->flyTime == 0) { if (fly->flyTime == 0) {
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }
fly->velocity = ((fly->acceleration * fly->flyTime) * 0.5f) + (y / fly->flyTime); fly->velocity = ((fly->acceleration * fly->flyTime) * 0.5f) + (posY / fly->flyTime);
fly->speed += var_f8 / fly->flyTime; fly->speed += moveDist / fly->flyTime;
script->functionTemp[0] = TRUE; script->functionTemp[0] = TRUE;
} }
@ -1090,9 +1201,9 @@ ApiStatus IdleJumpToGoal(Evt* script, s32 isInitialCall) {
ApiStatus JumpToGoalSimple2(Evt* script, s32 isInitialCall) { ApiStatus JumpToGoalSimple2(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
ActorState* state; ActorState* state;
f32 x, y, z; f32 posX, posY, posZ;
f32 goalX, goalY, goalZ; f32 goalX, goalY, goalZ;
f32 var_f8; f32 moveDist;
Actor* actor; Actor* actor;
if (isInitialCall) { if (isInitialCall) {
@ -1114,30 +1225,34 @@ ApiStatus JumpToGoalSimple2(Evt* script, s32 isInitialCall) {
state->currentPos.y = actor->currentPos.y; state->currentPos.y = actor->currentPos.y;
state->currentPos.z = actor->currentPos.z; state->currentPos.z = actor->currentPos.z;
x = state->currentPos.x; posX = state->currentPos.x;
y = state->currentPos.y; posY = state->currentPos.y;
z = state->currentPos.z; posZ = state->currentPos.z;
goalX = state->goalPos.x; goalX = state->goalPos.x;
goalY = state->goalPos.y; goalY = state->goalPos.y;
goalZ = state->goalPos.z; goalZ = state->goalPos.z;
state->angle = atan2(x, z, goalX, goalZ); state->angle = atan2(posX, posZ, goalX, goalZ);
state->distance = dist2D(x, z, goalX, goalZ); state->distance = dist2D(posX, posZ, goalX, goalZ);
y -= goalY;
// make relative (note: negated)
posX = (posX - goalX);
posY = (posY - goalY);
posZ = (posZ - goalZ);
if (state->moveTime == 0) { if (state->moveTime == 0) {
state->moveTime = state->distance / state->speed; state->moveTime = state->distance / state->speed;
var_f8 = state->distance - (state->moveTime * state->speed); moveDist = state->distance - (state->moveTime * state->speed);
} else { } else {
state->speed = state->distance / state->moveTime; state->speed = state->distance / state->moveTime;
var_f8 = state->distance - (state->moveTime * state->speed); moveDist = state->distance - (state->moveTime * state->speed);
} }
if (state->moveTime == 0) { if (state->moveTime == 0) {
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }
state->velocity = ((state->acceleration * state->moveTime) * 0.5f) + (y / state->moveTime); state->velocity = ((state->acceleration * state->moveTime) * 0.5f) + (posY / state->moveTime);
state->speed += var_f8 / state->moveTime; state->speed += moveDist / state->moveTime;
if (actor->actorTypeData1[4] != 0) { if (actor->actorTypeData1[4] != 0) {
sfx_play_sound_at_position(actor->actorTypeData1[4], 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z); sfx_play_sound_at_position(actor->actorTypeData1[4], 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z);
} }
@ -1176,10 +1291,10 @@ ApiStatus LandJump(Evt* script, s32 isInitialCall) {
Actor* actor; Actor* actor;
if (isInitialCall) { if (isInitialCall) {
script->functionTemp[0] = 0; script->functionTemp[0] = FALSE;
} }
if (script->functionTemp[0] == 0) { if (!script->functionTemp[0]) {
s32 actorID = evt_get_variable(script, *args++); s32 actorID = evt_get_variable(script, *args++);
if (actorID == ACTOR_SELF) { if (actorID == ACTOR_SELF) {
@ -1191,7 +1306,7 @@ ApiStatus LandJump(Evt* script, s32 isInitialCall) {
actor->state.currentPos.x = actor->currentPos.x; actor->state.currentPos.x = actor->currentPos.x;
actor->state.currentPos.y = actor->currentPos.y; actor->state.currentPos.y = actor->currentPos.y;
actor->state.currentPos.z = actor->currentPos.z; actor->state.currentPos.z = actor->currentPos.z;
script->functionTemp[0] = 1; script->functionTemp[0] = TRUE;
} }
actor = script->functionTempPtr[1]; actor = script->functionTempPtr[1];
@ -1216,7 +1331,7 @@ ApiStatus FallToGoal(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
Actor* actor; Actor* actor;
ActorState* state; ActorState* state;
f32 x, y, z; f32 posX, posY, posZ;
f32 goalX, goalY, goalZ; f32 goalX, goalY, goalZ;
if (isInitialCall) { if (isInitialCall) {
@ -1239,16 +1354,20 @@ ApiStatus FallToGoal(Evt* script, s32 isInitialCall) {
actor->state.currentPos.y = actor->currentPos.y; actor->state.currentPos.y = actor->currentPos.y;
actor->state.currentPos.z = actor->currentPos.z; actor->state.currentPos.z = actor->currentPos.z;
x = actor->state.currentPos.x; posX = actor->state.currentPos.x;
y = actor->state.currentPos.y; posY = actor->state.currentPos.y;
z = actor->state.currentPos.z; posZ = actor->state.currentPos.z;
goalX = actor->state.goalPos.x; goalX = actor->state.goalPos.x;
goalY = actor->state.goalPos.y; goalY = actor->state.goalPos.y;
goalZ = actor->state.goalPos.z; goalZ = actor->state.goalPos.z;
actor->state.angle = atan2(x, z, goalX, goalZ); actor->state.angle = atan2(posX, posZ, goalX, goalZ);
actor->state.distance = dist2D(x, z, goalX, goalZ); actor->state.distance = dist2D(posX, posZ, goalX, goalZ);
y = goalY - y;
// make relative
posX = (goalX - posX);
posY = (goalY - posY);
posZ = (goalZ - posZ);
if (actor->state.moveTime == 0) { if (actor->state.moveTime == 0) {
actor->state.moveTime = actor->state.distance / actor->state.speed; actor->state.moveTime = actor->state.distance / actor->state.speed;
@ -1257,7 +1376,7 @@ ApiStatus FallToGoal(Evt* script, s32 isInitialCall) {
} }
state->velocity = 0.0f; state->velocity = 0.0f;
state->acceleration = (y / state->moveTime - state->velocity) / (-state->moveTime * 0.5); state->acceleration = (posY / state->moveTime - state->velocity) / (-state->moveTime * 0.5);
if (actor->actorTypeData1[4] != 0) { if (actor->actorTypeData1[4] != 0) {
sfx_play_sound_at_position(actor->actorTypeData1[4], 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z); sfx_play_sound_at_position(actor->actorTypeData1[4], 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z);
@ -1376,8 +1495,8 @@ s32 JumpPartTo(Evt* script, s32 isInitialCall) {
ActorPart* part; ActorPart* part;
ActorPartMovement* movement; ActorPartMovement* movement;
s32 actorID, partIndex; s32 actorID, partIndex;
f32 x, y, z; f32 posX, posY, posZ;
f32 x1, y1, z1; f32 goalX, goalY, goalZ;
f32 deltaDist; f32 deltaDist;
if (isInitialCall) { if (isInitialCall) {
@ -1397,31 +1516,34 @@ s32 JumpPartTo(Evt* script, s32 isInitialCall) {
script->functionTempPtr[2] = part; script->functionTempPtr[2] = part;
movement = part->movement; movement = part->movement;
x = evt_get_variable(script, *args++); posX = evt_get_variable(script, *args++);
y = evt_get_variable(script, *args++); posY = evt_get_variable(script, *args++);
z = evt_get_variable(script, *args++); posZ = evt_get_variable(script, *args++);
movement->goalPos.x = x; movement->goalPos.x = posX;
movement->goalPos.y = y; movement->goalPos.y = posY;
movement->goalPos.z = z; movement->goalPos.z = posZ;
movement->moveTime = evt_get_variable(script, *args++); movement->moveTime = evt_get_variable(script, *args++);
script->functionTemp[3] = evt_get_variable(script, *args++); script->functionTemp[3] = evt_get_variable(script, *args++);
x1 = movement->goalPos.x; goalX = movement->goalPos.x;
y1 = movement->goalPos.y; goalY = movement->goalPos.y;
z1 = movement->goalPos.z; goalZ = movement->goalPos.z;
movement->unk_00.x = part->absolutePosition.x; movement->absolutePosition.x = part->absolutePosition.x;
movement->unk_00.y = part->absolutePosition.y; movement->absolutePosition.y = part->absolutePosition.y;
movement->unk_00.z = part->absolutePosition.z; movement->absolutePosition.z = part->absolutePosition.z;
x = movement->unk_00.x; posX = movement->absolutePosition.x;
y = movement->unk_00.y; posY = movement->absolutePosition.y;
z = movement->unk_00.z; posZ = movement->absolutePosition.z;
movement->angle = atan2(x, z, x1, z1); movement->angle = atan2(posX, posZ, goalX, goalZ);
movement->distance = dist2D(x, z, x1, z1); movement->distance = dist2D(posX, posZ, goalX, goalZ);
y = y1 - y; // make relative
posX = (goalX - posX);
posY = (goalY - posY);
posZ = (goalZ - posZ);
if (movement->moveTime == 0) { if (movement->moveTime == 0) {
movement->moveTime = movement->distance / movement->moveSpeed; movement->moveTime = movement->distance / movement->moveSpeed;
@ -1431,7 +1553,7 @@ s32 JumpPartTo(Evt* script, s32 isInitialCall) {
deltaDist = movement->distance - movement->moveTime * movement->moveSpeed; deltaDist = movement->distance - movement->moveTime * movement->moveSpeed;
} }
movement->moveSpeed += deltaDist / movement->moveTime; movement->moveSpeed += deltaDist / movement->moveTime;
movement->unk_2C = movement->jumpScale * movement->moveTime * 0.5f + y / movement->moveTime; movement->unk_2C = movement->jumpScale * movement->moveTime * 0.5f + posY / movement->moveTime;
if (part->partTypeData[4] != 0) { if (part->partTypeData[4] != 0) {
sfx_play_sound_at_position(part->partTypeData[4], 0, part->absolutePosition.x, part->absolutePosition.y, part->absolutePosition.z); sfx_play_sound_at_position(part->partTypeData[4], 0, part->absolutePosition.x, part->absolutePosition.y, part->absolutePosition.z);
} }
@ -1440,12 +1562,12 @@ s32 JumpPartTo(Evt* script, s32 isInitialCall) {
part = script->functionTempPtr[2]; part = script->functionTempPtr[2];
movement = part->movement; movement = part->movement;
movement->unk_00.y += movement->unk_2C; movement->absolutePosition.y += movement->unk_2C;
movement->unk_2C -= movement->jumpScale; movement->unk_2C -= movement->jumpScale;
add_xz_vec3f_copy1(&movement->unk_00, movement->moveSpeed, movement->angle); add_xz_vec3f_copy1(&movement->absolutePosition, movement->moveSpeed, movement->angle);
part->absolutePosition.x = movement->unk_00.x; part->absolutePosition.x = movement->absolutePosition.x;
part->absolutePosition.y = movement->unk_00.y; part->absolutePosition.y = movement->absolutePosition.y;
part->absolutePosition.z = movement->unk_00.z; part->absolutePosition.z = movement->absolutePosition.z;
movement->moveTime--; movement->moveTime--;
if (movement->moveTime <= 0) { if (movement->moveTime <= 0) {
@ -1467,8 +1589,8 @@ s32 FallPartTo(Evt* script, s32 isInitialCall) {
ActorPart* part; ActorPart* part;
ActorPartMovement* movement; ActorPartMovement* movement;
s32 actorID, partIndex; s32 actorID, partIndex;
f32 x, y, z; f32 posX, posY, posZ;
f32 x1, y1, z1; f32 goalX, goalY, goalZ;
if (isInitialCall) { if (isInitialCall) {
script->functionTemp[0] = 0; script->functionTemp[0] = 0;
@ -1487,30 +1609,33 @@ s32 FallPartTo(Evt* script, s32 isInitialCall) {
script->functionTempPtr[2] = part; script->functionTempPtr[2] = part;
movement = part->movement; movement = part->movement;
x = evt_get_variable(script, *args++); posX = evt_get_variable(script, *args++);
y = evt_get_variable(script, *args++); posY = evt_get_variable(script, *args++);
z = evt_get_variable(script, *args++); posZ = evt_get_variable(script, *args++);
movement->goalPos.x = x; movement->goalPos.x = posX;
movement->goalPos.y = y; movement->goalPos.y = posY;
movement->goalPos.z = z; movement->goalPos.z = posZ;
movement->moveTime = evt_get_variable(script, *args++); movement->moveTime = evt_get_variable(script, *args++);
x1 = movement->goalPos.x; goalX = movement->goalPos.x;
y1 = movement->goalPos.y; goalY = movement->goalPos.y;
z1 = movement->goalPos.z; goalZ = movement->goalPos.z;
movement->unk_00.x = part->absolutePosition.x; movement->absolutePosition.x = part->absolutePosition.x;
movement->unk_00.y = part->absolutePosition.y; movement->absolutePosition.y = part->absolutePosition.y;
movement->unk_00.z = part->absolutePosition.z; movement->absolutePosition.z = part->absolutePosition.z;
x = movement->unk_00.x; posX = movement->absolutePosition.x;
y = movement->unk_00.y; posY = movement->absolutePosition.y;
z = movement->unk_00.z; posZ = movement->absolutePosition.z;
movement->angle = atan2(x, z, x1, z1); movement->angle = atan2(posX, posZ, goalX, goalZ);
movement->distance = dist2D(x, z, x1, z1); movement->distance = dist2D(posX, posZ, goalX, goalZ);
y = y1 - y; // make relative
posX = (goalX - posX);
posY = (goalY - posY);
posZ = (goalZ - posZ);
if (movement->moveTime == 0) { if (movement->moveTime == 0) {
movement->moveTime = movement->distance / movement->moveSpeed; movement->moveTime = movement->distance / movement->moveSpeed;
@ -1519,7 +1644,7 @@ s32 FallPartTo(Evt* script, s32 isInitialCall) {
} }
movement->unk_2C = 0.0f; movement->unk_2C = 0.0f;
movement->jumpScale = (y / movement->moveTime - movement->unk_2C) / (-movement->moveTime * 0.5); movement->jumpScale = (posY / movement->moveTime - movement->unk_2C) / (-movement->moveTime * 0.5);
if (part->partTypeData[4] != 0) { if (part->partTypeData[4] != 0) {
sfx_play_sound_at_position(part->partTypeData[4], 0, part->absolutePosition.x, part->absolutePosition.y, part->absolutePosition.z); sfx_play_sound_at_position(part->partTypeData[4], 0, part->absolutePosition.x, part->absolutePosition.y, part->absolutePosition.z);
} }
@ -1528,12 +1653,12 @@ s32 FallPartTo(Evt* script, s32 isInitialCall) {
part = script->functionTempPtr[2]; part = script->functionTempPtr[2];
movement = part->movement; movement = part->movement;
movement->unk_00.y += movement->unk_2C; movement->absolutePosition.y += movement->unk_2C;
movement->unk_2C -= movement->jumpScale; movement->unk_2C -= movement->jumpScale;
add_xz_vec3f_copy1(&movement->unk_00, movement->moveSpeed, movement->angle); add_xz_vec3f_copy1(&movement->absolutePosition, movement->moveSpeed, movement->angle);
part->absolutePosition.x = movement->unk_00.x; part->absolutePosition.x = movement->absolutePosition.x;
part->absolutePosition.y = movement->unk_00.y; part->absolutePosition.y = movement->absolutePosition.y;
part->absolutePosition.z = movement->unk_00.z; part->absolutePosition.z = movement->absolutePosition.z;
movement->moveTime--; movement->moveTime--;
if (movement->moveTime <= 0) { if (movement->moveTime <= 0) {
@ -1570,20 +1695,20 @@ s32 LandJumpPart(Evt* script, s32 isInitialCall) {
script->functionTempPtr[1] = actor; script->functionTempPtr[1] = actor;
script->functionTempPtr[2] = part; script->functionTempPtr[2] = part;
movement = part->movement; movement = part->movement;
movement->unk_00.x = part->absolutePosition.x; movement->absolutePosition.x = part->absolutePosition.x;
movement->unk_00.y = part->absolutePosition.y; movement->absolutePosition.y = part->absolutePosition.y;
movement->unk_00.z = part->absolutePosition.z; movement->absolutePosition.z = part->absolutePosition.z;
script->functionTemp[0] = 1; script->functionTemp[0] = 1;
} }
part = script->functionTempPtr[2]; part = script->functionTempPtr[2];
movement = part->movement; movement = part->movement;
movement->unk_00.y += movement->unk_2C; movement->absolutePosition.y += movement->unk_2C;
movement->unk_2C -= movement->jumpScale; movement->unk_2C -= movement->jumpScale;
add_xz_vec3f_copy1(&movement->unk_00, movement->moveSpeed, movement->angle); add_xz_vec3f_copy1(&movement->absolutePosition, movement->moveSpeed, movement->angle);
part->absolutePosition.x = movement->unk_00.x; part->absolutePosition.x = movement->absolutePosition.x;
part->absolutePosition.y = movement->unk_00.y; part->absolutePosition.y = movement->absolutePosition.y;
part->absolutePosition.z = movement->unk_00.z; part->absolutePosition.z = movement->absolutePosition.z;
if (part->absolutePosition.y < 0.0f) { if (part->absolutePosition.y < 0.0f) {
part->absolutePosition.y = 0.0f; part->absolutePosition.y = 0.0f;
@ -1600,8 +1725,8 @@ s32 RunPartTo(Evt* script, s32 isInitialCall) {
ActorPart* part; ActorPart* part;
ActorPartMovement* movement; ActorPartMovement* movement;
s32 actorID, partIndex; s32 actorID, partIndex;
f32 x, y, z; f32 posX, posY, posZ;
f32 x1, y1, z1; f32 goalX, goalY, goalZ;
f32 deltaDist; f32 deltaDist;
if (isInitialCall) { if (isInitialCall) {
@ -1621,28 +1746,28 @@ s32 RunPartTo(Evt* script, s32 isInitialCall) {
script->functionTempPtr[2] = part; script->functionTempPtr[2] = part;
movement = part->movement; movement = part->movement;
x = evt_get_variable(script, *args++); posX = evt_get_variable(script, *args++);
y = evt_get_variable(script, *args++); posY = evt_get_variable(script, *args++);
z = evt_get_variable(script, *args++); posZ = evt_get_variable(script, *args++);
movement->goalPos.x = x; movement->goalPos.x = posX;
movement->goalPos.y = y; movement->goalPos.y = posY;
movement->goalPos.z = z; movement->goalPos.z = posZ;
movement->moveTime = evt_get_variable(script, *args++); movement->moveTime = evt_get_variable(script, *args++);
x1 = movement->goalPos.x; goalX = movement->goalPos.x;
y1 = movement->goalPos.y; goalY = movement->goalPos.y;
z1 = movement->goalPos.z; goalZ = movement->goalPos.z;
movement->unk_00.x = part->absolutePosition.x; movement->absolutePosition.x = part->absolutePosition.x;
movement->unk_00.y = part->absolutePosition.y; movement->absolutePosition.y = part->absolutePosition.y;
movement->unk_00.z = part->absolutePosition.z; movement->absolutePosition.z = part->absolutePosition.z;
x = movement->unk_00.x; posX = movement->absolutePosition.x;
y = movement->unk_00.y; posY = movement->absolutePosition.y;
z = movement->unk_00.z; posZ = movement->absolutePosition.z;
movement->angle = atan2(x, z, x1, z1); movement->angle = atan2(posX, posZ, goalX, goalZ);
movement->distance = dist2D(x, z, x1, z1); movement->distance = dist2D(posX, posZ, goalX, goalZ);
if (movement->moveTime == 0) { if (movement->moveTime == 0) {
movement->moveTime = movement->distance / movement->moveSpeed; movement->moveTime = movement->distance / movement->moveSpeed;
@ -1664,15 +1789,15 @@ s32 RunPartTo(Evt* script, s32 isInitialCall) {
movement = part->movement; movement = part->movement;
actor = script->functionTempPtr[1]; actor = script->functionTempPtr[1];
add_xz_vec3f_copy1(&movement->unk_00, movement->moveSpeed, movement->angle); add_xz_vec3f_copy1(&movement->absolutePosition, movement->moveSpeed, movement->angle);
if (movement->moveSpeed < 4.0f) { if (movement->moveSpeed < 4.0f) {
play_movement_dust_effects(0, movement->unk_00.x, movement->unk_00.y, movement->unk_00.z, movement->angle); play_movement_dust_effects(0, movement->absolutePosition.x, movement->absolutePosition.y, movement->absolutePosition.z, movement->angle);
} else { } else {
play_movement_dust_effects(1, movement->unk_00.x, movement->unk_00.y, movement->unk_00.z, movement->angle); play_movement_dust_effects(1, movement->absolutePosition.x, movement->absolutePosition.y, movement->absolutePosition.z, movement->angle);
} }
part->absolutePosition.x = movement->unk_00.x; part->absolutePosition.x = movement->absolutePosition.x;
part->absolutePosition.y = movement->unk_00.y; part->absolutePosition.y = movement->absolutePosition.y;
part->absolutePosition.z = movement->unk_00.z; part->absolutePosition.z = movement->absolutePosition.z;
if (part->partTypeData[0] != 0 && part->partTypeData[1] != 0) { if (part->partTypeData[0] != 0 && part->partTypeData[1] != 0) {
if (part->actorTypeData2b[0] >= 0) { if (part->actorTypeData2b[0] >= 0) {

View File

@ -817,7 +817,7 @@ s32 get_overriding_player_anim(s32 anim) {
if (!func_800DFCF4()) { if (!func_800DFCF4()) {
return -1; return -1;
} }
} else if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { } else if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
anim = ANIM_Peach_C0010; anim = ANIM_Peach_C0010;
} else { } else {
peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].hold); peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].hold);
@ -1480,7 +1480,7 @@ void render_player_model(void) {
playerStatus->alpha2 = 0; playerStatus->alpha2 = 0;
} }
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
rtPtr->appendGfxArg = playerStatus; rtPtr->appendGfxArg = playerStatus;
rtPtr->distance = -z; rtPtr->distance = -z;
rtPtr->renderMode = playerStatus->renderMode; rtPtr->renderMode = playerStatus->renderMode;

View File

@ -310,7 +310,7 @@ void phys_peach_update(void) {
} while (playerStatus->flags & PS_FLAGS_ACTION_STATE_CHANGED); } while (playerStatus->flags & PS_FLAGS_ACTION_STATE_CHANGED);
peach_check_for_parasol_input(); peach_check_for_parasol_input();
if (playerStatus->animFlags & PA_FLAGS_IN_DISGUISE) { if (playerStatus->animFlags & PA_FLAGS_INVISIBLE) {
peach_sync_disguise_npc(); peach_sync_disguise_npc();
} }
} }
@ -555,7 +555,7 @@ void peach_force_disguise_action(s32 useParasol) {
if (useParasol) { if (useParasol) {
set_action_state(ACTION_STATE_USE_SNEAKY_PARASOL); set_action_state(ACTION_STATE_USE_SNEAKY_PARASOL);
} else { } else {
playerStatus->animFlags &= ~PA_FLAGS_IN_DISGUISE; playerStatus->animFlags &= ~PA_FLAGS_INVISIBLE;
gGameStatusPtr->peachFlags &= ~PEACH_STATUS_FLAG_DISGUISED; gGameStatusPtr->peachFlags &= ~PEACH_STATUS_FLAG_DISGUISED;
playerStatus->peachDisguise = 0; playerStatus->peachDisguise = 0;
free_npc_by_index(PeachDisguiseNpcIndex); free_npc_by_index(PeachDisguiseNpcIndex);
@ -575,7 +575,7 @@ void peach_check_for_parasol_input(void) {
D_8010C92C--; D_8010C92C--;
if (D_8010C92C == 0) { if (D_8010C92C == 0) {
if (gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_DISGUISED) { if (gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_DISGUISED) {
playerStatus->animFlags |= PA_FLAGS_IN_DISGUISE; playerStatus->animFlags |= PA_FLAGS_INVISIBLE;
gGameStatusPtr->peachFlags |= PEACH_STATUS_FLAG_DISGUISED; gGameStatusPtr->peachFlags |= PEACH_STATUS_FLAG_DISGUISED;
disguiseNpc = peach_make_disguise_npc(gGameStatusPtr->peachDisguise); disguiseNpc = peach_make_disguise_npc(gGameStatusPtr->peachDisguise);

View File

@ -313,7 +313,7 @@ void initialize_status_menu(void) {
uiStatus->hidden = 0; uiStatus->hidden = 0;
uiStatus->showTimer = 210; uiStatus->showTimer = 210;
uiStatus->unk_3B[0] = 0; uiStatus->unk_3B[0] = 0;
uiStatus->ignoreChanges = 0; uiStatus->ignoreChanges = FALSE;
uiStatus->unk_45[0] = 0; uiStatus->unk_45[0] = 0;
uiStatus->unk_45[1] = 0; uiStatus->unk_45[1] = 0;
uiStatus->hpBlinking = 0; uiStatus->hpBlinking = 0;
@ -618,7 +618,7 @@ void show_coin_counter(void) {
uiStatus->unk_6C[2] = uiStatus->ignoreChanges; uiStatus->unk_6C[2] = uiStatus->ignoreChanges;
} }
uiStatus->ignoreChanges = 1; uiStatus->ignoreChanges = TRUE;
D_8010CD10 = 1; D_8010CD10 = 1;
} }
} }
@ -688,7 +688,7 @@ void func_800E97E4(void) {
UiStatus* uiStatus = &gUIStatus; UiStatus* uiStatus = &gUIStatus;
uiStatus->drawPosY = -100; uiStatus->drawPosY = -100;
uiStatus->ignoreChanges = 0; uiStatus->ignoreChanges = FALSE;
uiStatus->showTimer = 0; uiStatus->showTimer = 0;
uiStatus->hidden = 1; uiStatus->hidden = 1;
uiStatus->unk_3B[0] = 0; uiStatus->unk_3B[0] = 0;
@ -700,7 +700,7 @@ void func_800E9810(void) {
uiStatus->showTimer = 210; uiStatus->showTimer = 210;
uiStatus->drawPosY = 0; uiStatus->drawPosY = 0;
uiStatus->ignoreChanges = 0; uiStatus->ignoreChanges = FALSE;
uiStatus->hidden = 0; uiStatus->hidden = 0;
uiStatus->unk_3B[0] = 1; uiStatus->unk_3B[0] = 1;
uiStatus->unk_3B[1] = 0; uiStatus->unk_3B[1] = 0;
@ -728,19 +728,19 @@ s32 func_800E9860(void) {
return ret; return ret;
} }
void func_800E9894(void) { void status_menu_ignore_changes(void) {
gUIStatus.ignoreChanges = 1; gUIStatus.ignoreChanges = TRUE;
} }
void func_800E98A8(void) { void func_800E98A8(void) {
UiStatus* uiStatus = &gUIStatus; UiStatus* uiStatus = &gUIStatus;
uiStatus->ignoreChanges = 1; uiStatus->ignoreChanges = TRUE;
uiStatus->drawPosY = 18; uiStatus->drawPosY = 18;
} }
void func_800E98C4(void) { void status_menu_respond_to_changes(void) {
gUIStatus.ignoreChanges = 0; gUIStatus.ignoreChanges = FALSE;
} }
s32 func_800E98D4(void) { s32 func_800E98D4(void) {
@ -912,7 +912,7 @@ void reset_status_menu(void) {
uiStatus->hidden = 0; uiStatus->hidden = 0;
uiStatus->showTimer = 210; uiStatus->showTimer = 210;
uiStatus->unk_3B[0] = 0; uiStatus->unk_3B[0] = 0;
uiStatus->ignoreChanges = 0; uiStatus->ignoreChanges = FALSE;
uiStatus->unk_45[0] = 0; uiStatus->unk_45[0] = 0;
uiStatus->unk_45[1] = 0; uiStatus->unk_45[1] = 0;
uiStatus->hpBlinking = 0; uiStatus->hpBlinking = 0;
@ -1247,8 +1247,8 @@ s32 add_star_pieces(s32 amt) {
s32 newSP = playerData->starPieces; s32 newSP = playerData->starPieces;
newSP += amt; newSP += amt;
if (newSP > 222) { if (newSP > MAX_STAR_PIECES) {
newSP = 222; newSP = MAX_STAR_PIECES;
} }
if (newSP < 0) { if (newSP < 0) {
newSP = 0; newSP = 0;
@ -1304,7 +1304,7 @@ s32 recover_fp(s32 amt) {
s32 ret; s32 ret;
if (amt == -2) { if (amt == -2) {
playerData->curMaxFP += 1; playerData->curMaxFP++;
playerData->curFP = playerData->curMaxFP; playerData->curFP = playerData->curMaxFP;
return playerData->curMaxFP; return playerData->curMaxFP;
} }
@ -1326,7 +1326,7 @@ s32 recover_hp(s32 amt) {
s32 ret; s32 ret;
if (amt == -2) { if (amt == -2) {
playerData->curMaxHP += 1; playerData->curMaxHP++;
playerData->curHP = playerData->curMaxHP; playerData->curHP = playerData->curMaxHP;
return playerData->curMaxHP; return playerData->curMaxHP;
} }

View File

@ -185,7 +185,7 @@ void destroy_popup_menu(void) {
gPopupMenu->popupType == POPUP_TYPE_USE_KEY gPopupMenu->popupType == POPUP_TYPE_USE_KEY
) && !gGameStatusPtr->isBattle) { ) && !gGameStatusPtr->isBattle) {
if (D_8010D69A == 0) { if (D_8010D69A == 0) {
func_800E98C4(); status_menu_respond_to_changes();
} }
close_status_menu(); close_status_menu();
} }
@ -1213,7 +1213,7 @@ void create_popup_menu(PopupMenu* popup) {
s32 numEntries; s32 numEntries;
D_8010D69A = func_800E98D4(); D_8010D69A = func_800E98D4();
func_800E9894(); status_menu_ignore_changes();
open_status_menu_short(); open_status_menu_short();
gPopupMenu = popup; gPopupMenu = popup;
popup->result = 0; popup->result = 0;

View File

@ -52,7 +52,7 @@ s32 bgm_get_map_default_variation(s32 songID) {
if (SongsUsingVariationFlag[i] == songID) { if (SongsUsingVariationFlag[i] == songID) {
MapConfig* map = &gAreas[gGameStatusPtr->areaID].maps[gGameStatusPtr->mapID]; MapConfig* map = &gAreas[gGameStatusPtr->areaID].maps[gGameStatusPtr->mapID];
return map->unk_1C.bytes.songVariation & 1; return map->songVariation & 1;
} }
} }
@ -175,8 +175,6 @@ void bgm_update_music_settings(void) {
bgm_update_volume(); bgm_update_volume();
} }
static const f32 padding = 0.0f;
s32 _bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s16 volume) { s32 _bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s16 volume) {
MusicSettings* musicSetting; MusicSettings* musicSetting;
s32 mapSongVariation; s32 mapSongVariation;
@ -215,7 +213,7 @@ s32 _bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s
musicSetting->variation = variation; musicSetting->variation = variation;
musicSetting->fadeOutTime = fadeOutTime; musicSetting->fadeOutTime = fadeOutTime;
musicSetting->state = 1; musicSetting->state = 1;
musicSetting->flags &= ~MUSIC_SETTINGS_FLAGS_2; musicSetting->flags &= ~MUSIC_SETTINGS_FLAGS_ENABLE_PROXIMITY_MIX;
return 1; return 1;
} }
@ -254,7 +252,7 @@ s32 func_8014A964(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s1
musicSetting->variation = variation; musicSetting->variation = variation;
musicSetting->flags |= MUSIC_SETTINGS_FLAGS_20; musicSetting->flags |= MUSIC_SETTINGS_FLAGS_20;
musicSetting->state = 1; musicSetting->state = 1;
musicSetting->flags &= ~MUSIC_SETTINGS_FLAGS_2; musicSetting->flags &= ~MUSIC_SETTINGS_FLAGS_ENABLE_PROXIMITY_MIX;
return 1; return 1;
} }
@ -266,7 +264,7 @@ s32 bgm_adjust_proximity(s32 playerIndex, s32 mix, s16 state) {
return FALSE; return FALSE;
} }
if (!(musicSetting->flags & MUSIC_SETTINGS_FLAGS_2)) { if (!(musicSetting->flags & MUSIC_SETTINGS_FLAGS_ENABLE_PROXIMITY_MIX)) {
return FALSE; return FALSE;
} }

View File

@ -302,8 +302,8 @@ void sfx_reset_door_sounds(void);
void sfx_clear_sounds(void); void sfx_clear_sounds(void);
void sfx_clear_env_sounds(s16 playSounds); void sfx_clear_env_sounds(s16 playSounds);
void sfx_update_looping_sound_params(void); void sfx_update_looping_sound_params(void);
void func_801497FC(s32 arg0); void sfx_set_reverb_mode(s32 arg0);
s32 func_80149828(void); s32 sfx_get_reverb_mode(void);
void sfx_stop_env_sounds(void); void sfx_stop_env_sounds(void);
*/ */
SoundInstance* sfx_get_env_sound_instance(s32 soundID); SoundInstance* sfx_get_env_sound_instance(s32 soundID);

View File

@ -74,8 +74,8 @@ void sfx_reset_door_sounds(void);
void sfx_clear_sounds(void); void sfx_clear_sounds(void);
void sfx_clear_env_sounds(s16 playSounds); void sfx_clear_env_sounds(s16 playSounds);
void sfx_update_looping_sound_params(void); void sfx_update_looping_sound_params(void);
void func_801497FC(s32 arg0); void sfx_set_reverb_mode(s32 arg0);
s32 func_80149828(void); s32 sfx_get_reverb_mode(void);
void sfx_stop_env_sounds(void); void sfx_stop_env_sounds(void);
//SoundInstance* sfx_get_env_sound_instance(s32 soundID); //SoundInstance* sfx_get_env_sound_instance(s32 soundID);
void sfx_play_sound_looping(s32 soundId, u8 volume, u8 pan, s16 pitchShift); void sfx_play_sound_looping(s32 soundId, u8 volume, u8 pan, s16 pitchShift);

View File

@ -301,7 +301,7 @@ void sfx_clear_sounds(void) {
bzero(&D_801598A0, sizeof(D_801598A0)); bzero(&D_801598A0, sizeof(D_801598A0));
bzero(&D_801599B8, sizeof(D_801599B8)); bzero(&D_801599B8, sizeof(D_801599B8));
D_80159AD0 = D_801598A0; D_80159AD0 = D_801598A0;
func_801497FC(0); sfx_set_reverb_mode(0);
sfx_reset_door_sounds(); sfx_reset_door_sounds();
} }
@ -345,12 +345,12 @@ void sfx_update_looping_sound_params(void) {
} }
} }
void func_801497FC(s32 arg0) { void sfx_set_reverb_mode(s32 mode) {
func_800561E4(arg0); func_800561E4(mode);
D_80159AD4 = arg0; D_80159AD4 = mode;
} }
s32 func_80149828(void) { s32 sfx_get_reverb_mode(void) {
return D_80159AD4; return D_80159AD4;
} }

View File

@ -516,10 +516,10 @@ ApiStatus ShowStatusMenu(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
if (evt_get_variable(script, *args++) != 0) { if (evt_get_variable(script, *args++) != 0) {
func_800E9894(); status_menu_ignore_changes();
close_status_menu(); close_status_menu();
} else { } else {
func_800E98C4(); status_menu_respond_to_changes();
} }
return ApiStatus_DONE2; return ApiStatus_DONE2;

View File

@ -115,11 +115,11 @@ ApiStatus FadeInMusic(Evt* script, s32 isInitialCall) {
} }
} }
ApiStatus func_802D5EE0(Evt* script, s32 isInitialCall) { ApiStatus EnableMusicProximityMix(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
s32 playerIndex = evt_get_variable(script, *args++); s32 playerIndex = evt_get_variable(script, *args++);
gMusicSettings[playerIndex].flags |= MUSIC_SETTINGS_FLAGS_2; gMusicSettings[playerIndex].flags |= MUSIC_SETTINGS_FLAGS_ENABLE_PROXIMITY_MIX;
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }

View File

@ -99,7 +99,7 @@ void sort_scripts(void) {
for (i = 0; i < MAX_SCRIPTS; i++) { for (i = 0; i < MAX_SCRIPTS; i++) {
curScript = (*gCurrentScriptListPtr)[i]; curScript = (*gCurrentScriptListPtr)[i];
if (curScript != NULL) { if (curScript != NULL) {
if (curScript->state != 0) { if (curScript->stateFlags != 0) {
scriptIndexList[numValidScripts] = i; scriptIndexList[numValidScripts] = i;
scriptIdList[numValidScripts] = curScript->id; scriptIdList[numValidScripts] = curScript->id;
numValidScripts++; numValidScripts++;
@ -231,7 +231,7 @@ void suspend_frozen_scripts(Evt* script) {
suspend_all_group(groupFlags); suspend_all_group(groupFlags);
} }
Evt* start_script(EvtScript* source, s32 priority, s32 initialState) { Evt* start_script(EvtScript* source, s32 priority, s32 flags) {
Evt* newScript; Evt* newScript;
s32 curScriptIndex; s32 curScriptIndex;
s32 scriptListCount; s32 scriptListCount;
@ -250,7 +250,7 @@ Evt* start_script(EvtScript* source, s32 priority, s32 initialState) {
gNumScripts++; gNumScripts++;
ASSERT(newScript != NULL); ASSERT(newScript != NULL);
newScript->state = initialState | EVT_FLAG_ACTIVE; newScript->stateFlags = flags | EVT_FLAG_ACTIVE;
newScript->currentOpcode = 0; newScript->currentOpcode = 0;
newScript->priority = priority; newScript->priority = priority;
newScript->ptrNextLine = (Bytecode*)source; newScript->ptrNextLine = (Bytecode*)source;
@ -283,7 +283,7 @@ Evt* start_script(EvtScript* source, s32 priority, s32 initialState) {
find_script_labels(newScript); find_script_labels(newScript);
if (gIsUpdatingScripts && (newScript->state & EVT_FLAG_RUN_IMMEDIATELY)) { if (gIsUpdatingScripts && (newScript->stateFlags & EVT_FLAG_RUN_IMMEDIATELY)) {
scriptListCount = gScriptListCount++; scriptListCount = gScriptListCount++;
gScriptIndexList[scriptListCount] = curScriptIndex; gScriptIndexList[scriptListCount] = curScriptIndex;
gScriptIdList[scriptListCount] = newScript->id; gScriptIdList[scriptListCount] = newScript->id;
@ -298,7 +298,7 @@ Evt* start_script(EvtScript* source, s32 priority, s32 initialState) {
return newScript; return newScript;
} }
Evt* start_script_in_group(EvtScript* source, u8 priority, u8 initialState, u8 groupFlags) { Evt* start_script_in_group(EvtScript* source, u8 priority, u8 flags, u8 groupFlags) {
Evt* newScript; Evt* newScript;
s32 scriptListCount; s32 scriptListCount;
s32 i; s32 i;
@ -322,7 +322,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 initialState, u8 g
// Some of this function is surely macros. I think we'll learn more as we do others in this file. -Ethan // Some of this function is surely macros. I think we'll learn more as we do others in this file. -Ethan
do { do {
newScript->state = initialState | EVT_FLAG_ACTIVE; newScript->stateFlags = flags | EVT_FLAG_ACTIVE;
newScript->currentOpcode = 0; newScript->currentOpcode = 0;
newScript->priority = priority; newScript->priority = priority;
newScript->id = gStaticScriptCounter++; newScript->id = gStaticScriptCounter++;
@ -353,7 +353,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 initialState, u8 g
find_script_labels(newScript); find_script_labels(newScript);
if (gIsUpdatingScripts && (newScript->state & EVT_FLAG_RUN_IMMEDIATELY)) { if (gIsUpdatingScripts && (newScript->stateFlags & EVT_FLAG_RUN_IMMEDIATELY)) {
scriptListCount = gScriptListCount++; scriptListCount = gScriptListCount++;
gScriptIndexList[scriptListCount] = curScriptIndex; gScriptIndexList[scriptListCount] = curScriptIndex;
gScriptIdList[scriptListCount] = newScript->id; gScriptIdList[scriptListCount] = newScript->id;
@ -370,7 +370,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 initialState, u8 g
return newScript; return newScript;
} }
Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 initialState) { Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 flags) {
s32 curScriptIndex; s32 curScriptIndex;
s32 scriptListCount; s32 scriptListCount;
Evt* child; Evt* child;
@ -390,8 +390,8 @@ Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 initialState)
ASSERT(child != NULL); ASSERT(child != NULL);
parentScript->childScript = child; parentScript->childScript = child;
parentScript->state |= EVT_FLAG_BLOCKED_BY_CHILD; parentScript->stateFlags |= EVT_FLAG_BLOCKED_BY_CHILD;
child->state = initialState | EVT_FLAG_ACTIVE; child->stateFlags = flags | EVT_FLAG_ACTIVE;
child->ptrCurrentLine = child->ptrFirstLine = child->ptrNextLine = (Bytecode*)source; child->ptrCurrentLine = child->ptrFirstLine = child->ptrNextLine = (Bytecode*)source;
@ -459,7 +459,7 @@ Evt* func_802C39F8(Evt* parentScript, Bytecode* nextLine, s32 newState) {
gNumScripts++; gNumScripts++;
ASSERT(child != NULL); ASSERT(child != NULL);
child->state = newState | EVT_FLAG_ACTIVE; child->stateFlags = newState | EVT_FLAG_ACTIVE;
child->ptrNextLine = nextLine; child->ptrNextLine = nextLine;
child->ptrFirstLine = nextLine; child->ptrFirstLine = nextLine;
child->ptrCurrentLine = nextLine; child->ptrCurrentLine = nextLine;
@ -516,7 +516,7 @@ Evt* func_802C3C10(Evt* script, Bytecode* line, s32 arg2) {
script->ptrCurrentLine = line; script->ptrCurrentLine = line;
script->currentOpcode = 0; script->currentOpcode = 0;
script->frameCounter = 0; script->frameCounter = 0;
script->state |= arg2; script->stateFlags |= arg2;
script->timeScale = 1.0f; script->timeScale = 1.0f;
if (script->userData != NULL) { if (script->userData != NULL) {
@ -581,7 +581,7 @@ void update_scripts(void) {
for (i = 0; i < gScriptListCount; i++) { for (i = 0; i < gScriptListCount; i++) {
Evt* script = (*gCurrentScriptListPtr)[gScriptIndexList[i]]; Evt* script = (*gCurrentScriptListPtr)[gScriptIndexList[i]];
if (script != NULL && script->id == gScriptIdList[i] && script->state != 0 && !(script->state & (EVT_FLAG_SUSPENDED | EVT_FLAG_BLOCKED_BY_CHILD | EVT_FLAG_SUSPENDED_IN_GROUP))) { if (script != NULL && script->id == gScriptIdList[i] && script->stateFlags != 0 && !(script->stateFlags & (EVT_FLAG_SUSPENDED | EVT_FLAG_BLOCKED_BY_CHILD | EVT_FLAG_SUSPENDED_IN_GROUP))) {
s32 stop = FALSE; s32 stop = FALSE;
s32 status; s32 status;
@ -646,7 +646,7 @@ void kill_script(Evt* instanceToKill) {
blockingParent = instanceToKill->blockingParent; blockingParent = instanceToKill->blockingParent;
if (blockingParent != NULL) { if (blockingParent != NULL) {
blockingParent->childScript = NULL; blockingParent->childScript = NULL;
blockingParent->state &= ~EVT_FLAG_BLOCKED_BY_CHILD; blockingParent->stateFlags &= ~EVT_FLAG_BLOCKED_BY_CHILD;
for (j = 0; j < ARRAY_COUNT(blockingParent->varTable); j++) { for (j = 0; j < ARRAY_COUNT(blockingParent->varTable); j++) {
blockingParent->varTable[j] = instanceToKill->varTable[j]; blockingParent->varTable[j] = instanceToKill->varTable[j];
@ -777,7 +777,7 @@ void suspend_group_script(Evt* script, s32 groupFlags) {
} }
if ((script->groupFlags & groupFlags) != 0) { if ((script->groupFlags & groupFlags) != 0) {
script->state |= EVT_FLAG_SUSPENDED_IN_GROUP; script->stateFlags |= EVT_FLAG_SUSPENDED_IN_GROUP;
} }
} }
@ -798,7 +798,7 @@ void resume_group_script(Evt* script, s32 groupFlags) {
} }
if ((script->groupFlags & groupFlags) != 0) { if ((script->groupFlags & groupFlags) != 0) {
script->state &= ~EVT_FLAG_SUSPENDED_IN_GROUP; script->stateFlags &= ~EVT_FLAG_SUSPENDED_IN_GROUP;
} }
} }
@ -921,7 +921,7 @@ void set_script_flags(Evt* script, s32 flags) {
Evt* childScript = script->childScript; Evt* childScript = script->childScript;
s32 i; s32 i;
script->state |= flags; script->stateFlags |= flags;
if (childScript != NULL) { if (childScript != NULL) {
set_script_flags(childScript, flags); set_script_flags(childScript, flags);
} }
@ -939,7 +939,7 @@ void clear_script_flags(Evt* script, s32 flags) {
Evt* childScript = script->childScript; Evt* childScript = script->childScript;
s32 i; s32 i;
script->state &= ~flags; script->stateFlags &= ~flags;
if (childScript != NULL) { if (childScript != NULL) {
clear_script_flags(childScript, flags); clear_script_flags(childScript, flags);
} }

View File

@ -308,7 +308,7 @@ void state_step_exit_language_select(void) {
calculate_model_sizes(); calculate_model_sizes();
npc_reload_all(); npc_reload_all();
func_800E98C4(); status_menu_respond_to_changes();
set_time_freeze_mode(TIME_FREEZE_PARTIAL); set_time_freeze_mode(TIME_FREEZE_PARTIAL);
} }
set_windows_visible(WINDOW_GROUP_ALL); set_windows_visible(WINDOW_GROUP_ALL);

View File

@ -78,8 +78,8 @@ void state_step_pause(void) {
clear_npcs(); clear_npcs();
clear_entity_data(0); clear_entity_data(0);
clear_trigger_data(); clear_trigger_data();
D_800A0924 = func_80149828(); SavedReverbMode = sfx_get_reverb_mode();
func_801497FC(0); sfx_set_reverb_mode(0);
bgm_quiet_max_volume(); bgm_quiet_max_volume();
nuPiReadRomOverlay(&D_8007795C); nuPiReadRomOverlay(&D_8007795C);
pause_init(); pause_init();
@ -159,7 +159,7 @@ void state_step_unpause(void) {
init_npc_list(); init_npc_list();
init_entity_data(); init_entity_data();
init_trigger_list(); init_trigger_list();
func_801497FC(D_800A0924); sfx_set_reverb_mode(SavedReverbMode);
bgm_reset_max_volume(); bgm_reset_max_volume();
load_map_script_lib(); load_map_script_lib();
assetData = load_asset_by_name(wMapShapeName, &assetSize); assetData = load_asset_by_name(wMapShapeName, &assetSize);
@ -183,7 +183,7 @@ void state_step_unpause(void) {
calculate_model_sizes(); calculate_model_sizes();
npc_reload_all(); npc_reload_all();
set_windows_visible(WINDOW_GROUP_ALL); set_windows_visible(WINDOW_GROUP_ALL);
func_800E98C4(); status_menu_respond_to_changes();
set_time_freeze_mode(TIME_FREEZE_PARTIAL); set_time_freeze_mode(TIME_FREEZE_PARTIAL);
D_800A0921 = 3; D_800A0921 = 3;
gPlayerStatus.alpha2 = gPlayerStatus.alpha1 - 1; gPlayerStatus.alpha2 = gPlayerStatus.alpha1 - 1;

View File

@ -80,7 +80,7 @@ void state_init_title_screen(void) {
D_8014C248[0] = 1; D_8014C248[0] = 1;
general_heap_create(); general_heap_create();
clear_printers(); clear_printers();
func_801497FC(0); sfx_set_reverb_mode(0);
gGameStatusPtr->introState = INTRO_STATE_0; gGameStatusPtr->introState = INTRO_STATE_0;
gGameStatusPtr->introCounter = 0; gGameStatusPtr->introCounter = 0;
gGameStatusPtr->isBattle = FALSE; gGameStatusPtr->isBattle = FALSE;

View File

@ -110,7 +110,7 @@ void action_update_idle_peach(void) {
playerStatus->currentSpeed = 0.0f; playerStatus->currentSpeed = 0.0f;
playerStatus->flags &= ~PS_FLAGS_AIRBORNE; playerStatus->flags &= ~PS_FLAGS_AIRBORNE;
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
if (!(gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) { if (!(gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) {
suggest_player_anim_clearUnkFlag(IdlePeachAnims[gGameStatusPtr->peachCookingIngredient]); suggest_player_anim_clearUnkFlag(IdlePeachAnims[gGameStatusPtr->peachCookingIngredient]);
} else { } else {
@ -121,7 +121,7 @@ void action_update_idle_peach(void) {
} }
} }
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
switch (playerStatus->actionSubstate) { switch (playerStatus->actionSubstate) {
case SUBSTATE_IDLE_DEFAULT: case SUBSTATE_IDLE_DEFAULT:
if (!(playerStatus->flags & (PS_FLAGS_NO_STATIC_COLLISION | PS_FLAGS_INPUT_DISABLED)) if (!(playerStatus->flags & (PS_FLAGS_NO_STATIC_COLLISION | PS_FLAGS_INPUT_DISABLED))

View File

@ -229,7 +229,7 @@ void action_update_talk(void) {
if (!(playerStatus->animFlags & PA_FLAGS_USING_PEACH_PHYSICS)) { if (!(playerStatus->animFlags & PA_FLAGS_USING_PEACH_PHYSICS)) {
suggest_player_anim_setUnkFlag(ANIM_Mario_80007); suggest_player_anim_setUnkFlag(ANIM_Mario_80007);
} else if (playerStatus->peachItemHeld == 0) { } else if (playerStatus->peachItemHeld == 0) {
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
suggest_player_anim_setUnkFlag(ANIM_Peach_C0000); suggest_player_anim_setUnkFlag(ANIM_Peach_C0000);
} else { } else {
peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].talk); peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].talk);
@ -242,7 +242,7 @@ void action_update_talk(void) {
if (playerStatus->currentStateTime != 0) { if (playerStatus->currentStateTime != 0) {
playerStatus->currentStateTime--; playerStatus->currentStateTime--;
} else if (playerStatus->peachItemHeld == 0) { } else if (playerStatus->peachItemHeld == 0) {
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
suggest_player_anim_setUnkFlag(ANIM_Peach_A0001); suggest_player_anim_setUnkFlag(ANIM_Peach_A0001);
} else { } else {
peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].idle); peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].idle);

View File

@ -96,7 +96,7 @@ void action_update_parasol(void) {
} }
*tempUnk_1C = phi_f4; *tempUnk_1C = phi_f4;
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
playerStatus->currentStateTime = 20; playerStatus->currentStateTime = 20;
playerStatus->actionSubstate = SUBSTATE_DISGUISE_INIT; playerStatus->actionSubstate = SUBSTATE_DISGUISE_INIT;
transformation->disguiseTime = 15; transformation->disguiseTime = 15;
@ -185,7 +185,7 @@ void action_update_parasol(void) {
break; break;
case SUBSTATE_DISGUISE_MAKE_NPC: case SUBSTATE_DISGUISE_MAKE_NPC:
gameStatus = gGameStatusPtr; gameStatus = gGameStatusPtr;
playerStatus->animFlags |= PA_FLAGS_IN_DISGUISE; playerStatus->animFlags |= PA_FLAGS_INVISIBLE;
gameStatus->peachFlags |= PEACH_STATUS_FLAG_DISGUISED; gameStatus->peachFlags |= PEACH_STATUS_FLAG_DISGUISED;
playerStatus->actionSubstate++; // SUBSTATE_DISGUISE_SPIN_DOWN playerStatus->actionSubstate++; // SUBSTATE_DISGUISE_SPIN_DOWN
case SUBSTATE_DISGUISE_SPIN_DOWN: case SUBSTATE_DISGUISE_SPIN_DOWN:
@ -261,7 +261,7 @@ void action_update_parasol(void) {
playerStatus->currentStateTime = 2; playerStatus->currentStateTime = 2;
playerStatus->actionSubstate++; // SUBSTATE_SPIN_DOWN playerStatus->actionSubstate++; // SUBSTATE_SPIN_DOWN
gameStatus2 = gGameStatusPtr; gameStatus2 = gGameStatusPtr;
playerStatus->animFlags &= ~PA_FLAGS_IN_DISGUISE; playerStatus->animFlags &= ~PA_FLAGS_INVISIBLE;
gameStatus2->peachFlags &= ~PEACH_STATUS_FLAG_DISGUISED; gameStatus2->peachFlags &= ~PEACH_STATUS_FLAG_DISGUISED;
playerStatus->peachDisguise = 0; playerStatus->peachDisguise = 0;
free_npc_by_index(PeachDisguiseNpcIndex); free_npc_by_index(PeachDisguiseNpcIndex);

View File

@ -77,7 +77,7 @@ void action_update_step_up(void) {
} }
void func_802B6198_E24768(void) { void func_802B6198_E24768(void) {
if (!(gPlayerStatus.animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(gPlayerStatus.animFlags & PA_FLAGS_INVISIBLE)) {
if (!(gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) { if (!(gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) {
suggest_player_anim_clearUnkFlag((StepUpPeachAnims)[gGameStatusPtr->peachCookingIngredient]); suggest_player_anim_clearUnkFlag((StepUpPeachAnims)[gGameStatusPtr->peachCookingIngredient]);
} else { } else {

View File

@ -205,7 +205,7 @@ void action_update_run(void) {
} }
void func_802B6550_E23C30(void) { void func_802B6550_E23C30(void) {
if (!(gPlayerStatus.animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(gPlayerStatus.animFlags & PA_FLAGS_INVISIBLE)) {
if (!(gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) { if (!(gGameStatusPtr->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) {
suggest_player_anim_clearUnkFlag(WalkPeachAnims[gGameStatusPtr->peachCookingIngredient]); suggest_player_anim_clearUnkFlag(WalkPeachAnims[gGameStatusPtr->peachCookingIngredient]);
return; return;
@ -265,7 +265,7 @@ static void action_update_run_peach(void) {
playerStatus->currentSpeed = playerStatus->runSpeed; playerStatus->currentSpeed = playerStatus->runSpeed;
} }
if (!(playerStatus->animFlags & PA_FLAGS_IN_DISGUISE)) { if (!(playerStatus->animFlags & PA_FLAGS_INVISIBLE)) {
gameStatus = gGameStatusPtr; gameStatus = gGameStatusPtr;
if (!(gameStatus->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) { if (!(gameStatus->peachFlags & PEACH_STATUS_FLAG_HAS_INGREDIENT)) {
if (!gameStatus->peachCookingIngredient) { if (!gameStatus->peachCookingIngredient) {

View File

@ -7,7 +7,7 @@
#include "world/common/npc/Boo.inc.c" #include "world/common/npc/Boo.inc.c"
#include "world/common/npc/StarSpirit.inc.c" #include "world/common/npc/StarSpirit.inc.c"
API_CALLABLE(N(UpgradeStarPower)) { API_CALLABLE(N(UpgradeStarPowerCh3)) {
set_max_SP(3); set_max_SP(3);
gPlayerData.curHP = gPlayerData.curMaxHP; gPlayerData.curHP = gPlayerData.curMaxHP;
gPlayerData.curFP = gPlayerData.curMaxFP; gPlayerData.curFP = gPlayerData.curMaxFP;
@ -472,7 +472,7 @@ EvtScript N(EVS_Scene_SkolarRescued) = {
EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002) EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002)
EVT_CALL(SetNpcAnimation, NPC_Skolar, ANIM_WorldSkolar_Idle) EVT_CALL(SetNpcAnimation, NPC_Skolar, ANIM_WorldSkolar_Idle)
EVT_CALL(EnableNpcAI, NPC_Skolar, TRUE) EVT_CALL(EnableNpcAI, NPC_Skolar, TRUE)
EVT_CALL(N(UpgradeStarPower)) EVT_CALL(N(UpgradeStarPowerCh3))
EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_0193, 160, 40) EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_0193, 160, 40)
EVT_WAIT(10) EVT_WAIT(10)
EVT_CALL(GetNpcPos, NPC_Skolar, LVar0, LVar1, LVar2) EVT_CALL(GetNpcPos, NPC_Skolar, LVar0, LVar1, LVar2)

View File

@ -1,309 +0,0 @@
#include "arn_11.h"
#include "sprite/npc/TubbasHeart.h"
enum {
NPC_TUBBAS_HEART,
};
EvtScript N(802400F0) = {
EVT_CALL(SetCamType, 0, 6, 1)
EVT_CALL(SetCamSpeed, 0, EVT_FLOAT(3.0))
EVT_CALL(UseSettingsFrom, 0, 60, 30, 0)
EVT_CALL(SetPanTarget, 0, 60, 30, 0)
EVT_CALL(SetCamPitch, 0, EVT_FLOAT(20.0), EVT_FLOAT(-13.0))
EVT_CALL(SetCamDistance, 0, 275)
EVT_CALL(PanToTarget, 0, 0, 1)
EVT_CALL(WaitForCam, 0, EVT_FLOAT(1.0))
EVT_RETURN
EVT_END
};
EvtScript N(802401BC) = {
EVT_CALL(DisablePlayerInput, TRUE)
EVT_WAIT(30)
EVT_CALL(SetPlayerSpeed, EVT_FLOAT(3.0))
EVT_CALL(PlayerMoveTo, 6, 0, 0)
EVT_CALL(SpeakToPlayer, 0, ANIM_TubbasHeart_Anim0B, ANIM_TubbasHeart_Anim01, 0, MSG_CH3_00BF)
EVT_WAIT(10)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_80007)
EVT_WAIT(40)
EVT_CALL(SpeakToPlayer, 0, ANIM_TubbasHeart_Anim0B, ANIM_TubbasHeart_Anim01, 0, MSG_CH3_00C0)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002)
EVT_WAIT(10)
EVT_CALL(SetPlayerAnimation, 589824)
EVT_WAIT(30)
EVT_CALL(SpeakToPlayer, 0, ANIM_TubbasHeart_Anim0B, ANIM_TubbasHeart_Anim01, 0, MSG_CH3_00C1)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002)
EVT_WAIT(20)
EVT_CALL(SetPlayerAnimation, 589824)
EVT_THREAD
EVT_CALL(SetNpcJumpscale, 0, EVT_FLOAT(2.5))
EVT_CALL(GetNpcPos, 0, LVar0, LVar1, LVar2)
EVT_CALL(PlaySoundAtNpc, 0, 0x20C8, 0)
EVT_CALL(NpcJump0, 0, LVar0, LVar1, LVar2, 10)
EVT_WAIT(1)
EVT_CALL(PlaySoundAtNpc, 0, 0x20C8, 0)
EVT_CALL(NpcJump0, 0, LVar0, LVar1, LVar2, 10)
EVT_END_THREAD
EVT_WAIT(40)
EVT_CALL(SpeakToPlayer, 0, ANIM_TubbasHeart_Anim0B, ANIM_TubbasHeart_Anim01, 0, MSG_CH3_00C2)
EVT_CALL(SetPlayerAnimation, 589824)
EVT_WAIT(10)
EVT_CALL(SetNpcVar, 0, 0, 1)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_RETURN
EVT_END
};
EvtScript N(exitSingleDoor_80240428) = {
EVT_SET_GROUP(EVT_GROUP_1B)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_SET(LVar0, 0)
EVT_SET(LVar1, 2)
EVT_SET(LVar2, 0)
EVT_SET(LVar3, -1)
EVT_EXEC(ExitSingleDoor)
EVT_WAIT(17)
EVT_CALL(GotoMap, EVT_PTR("arn_13"), 1)
EVT_WAIT(100)
EVT_RETURN
EVT_END
};
EvtScript N(802404CC) = {
EVT_BIND_TRIGGER(N(exitSingleDoor_80240428), TRIGGER_WALL_PRESS_A, 2, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(enterSingleDoor_802404F8) = {
EVT_CALL(DisablePlayerInput, TRUE)
EVT_SET(LVar2, 0)
EVT_SET(LVar3, -1)
EVT_EXEC_WAIT(EnterSingleDoor)
EVT_EXEC(N(802404CC))
EVT_IF_LT(GB_StoryProgress, -22)
EVT_WAIT(10)
EVT_EXEC(N(802400F0))
EVT_EXEC(N(802401BC))
EVT_WAIT(1)
EVT_END_IF
EVT_CALL(DisablePlayerInput, FALSE)
EVT_RETURN
EVT_END
};
EvtScript N(main) = {
EVT_SET(GB_WorldLocation, 35)
EVT_CALL(SetSpriteShading, 524290)
EVT_CALL(SetCamPerspective, 0, 3, 25, 16, 4096)
EVT_CALL(SetCamBGColor, 0, 0, 0, 0)
EVT_CALL(SetCamLeadPlayer, 0, 0)
EVT_CALL(SetCamEnabled, 0, 1)
EVT_CALL(MakeNpcs, 0, EVT_PTR(N(npcGroupList_802410DC)))
EVT_EXEC(N(80240050))
EVT_EXEC(N(enterSingleDoor_802404F8))
EVT_WAIT(1)
EVT_RETURN
EVT_END
};
static s32 N(pad_674)[] = {
0x00000000, 0x00000000, 0x00000000,
};
EvtScript N(80240680) = {
EVT_RETURN
EVT_END
};
EvtScript N(80240690) = {
EVT_RETURN
EVT_END
};
NpcSettings N(npcSettings_802406A0) = {
.height = 24,
.radius = 24,
.otherAI = &N(80240680),
.onDefeat = &N(80240690),
.level = 13,
};
EvtScript N(idle_802406CC) = {
EVT_LOOP(0)
EVT_CALL(GetSelfVar, 0, LVar0)
EVT_IF_NE(LVar0, 0)
EVT_BREAK_LOOP
EVT_END_IF
EVT_WAIT(1)
EVT_END_LOOP
EVT_THREAD
EVT_CALL(SetCamType, 0, 6, 1)
EVT_CALL(SetCamSpeed, 0, EVT_FLOAT(4.0))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_ADD(LVar0, 50)
EVT_CALL(UseSettingsFrom, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetCamDistance, 0, 3000)
EVT_CALL(PanToTarget, 0, 0, 1)
EVT_CALL(WaitForCam, 0, EVT_FLOAT(1.0))
EVT_END_THREAD
EVT_CALL(StartBossBattle, 11)
EVT_RETURN
EVT_END
};
EvtScript N(8024081C) = {
EVT_WAIT(15)
EVT_CALL(PlaySoundAtCollider, 2, 449, 0)
EVT_CALL(MakeLerp, 0, 80, 10, 0)
EVT_LOOP(0)
EVT_CALL(UpdateLerp)
EVT_CALL(RotateModel, 0, LVar0, 0, -1, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 0)
EVT_BREAK_LOOP
EVT_END_IF
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(802408D8) = {
EVT_CALL(MakeLerp, 80, 0, 10, 0)
EVT_LOOP(0)
EVT_CALL(UpdateLerp)
EVT_CALL(RotateModel, 0, LVar0, 0, -1, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 0)
EVT_BREAK_LOOP
EVT_END_IF
EVT_END_LOOP
EVT_CALL(PlaySoundAtCollider, 2, 450, 0)
EVT_RETURN
EVT_END
};
s32 N(intTable_80240988)[] = {
0x00000064, 0x0000001E, 0x00000046, 0x00000019, 0x0000001E, 0x00000050, 0xFFFFD8F0, 0x00000000,
0x00000000, 0xFFFFFFBA, 0x0000000A, 0x00000014, 0xFFFFFF4C, 0x00000000, 0x00000000, 0xFFFFFED4,
0x00000000, 0x00000000, 0xFFFFD8F0, 0x00000000, 0x00000000,
};
EvtScript N(defeat_802409DC) = {
EVT_THREAD
EVT_CALL(SetCamType, 0, 6, 1)
EVT_CALL(SetCamSpeed, 0, EVT_FLOAT(90.0))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_ADD(LVar0, 50)
EVT_CALL(UseSettingsFrom, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetCamDistance, 0, 450)
EVT_CALL(PanToTarget, 0, 0, 1)
EVT_END_THREAD
EVT_WAIT(10)
EVT_CALL(PlayerFaceNpc, 0, 1)
EVT_LOOP(2)
EVT_CALL(GetNpcPos, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetNpcJumpscale, 0, EVT_FLOAT(2.5))
EVT_CALL(PlaySoundAtNpc, NPC_SELF, 0x20C8, 0)
EVT_CALL(NpcJump0, 0, LVar0, LVar1, LVar2, 12)
EVT_WAIT(1)
EVT_END_LOOP
EVT_THREAD
EVT_WAIT(10)
EVT_CALL(SetCamType, 0, 4, 1)
EVT_CALL(SetCamSpeed, 0, EVT_FLOAT(2.0))
EVT_CALL(SetCamPitch, 0, EVT_FLOAT(17.0), EVT_FLOAT(-7.0))
EVT_CALL(SetCamDistance, 0, 450)
EVT_CALL(SetCamPosA, 0, -56, 70)
EVT_CALL(SetCamPosB, 0, -90, 40)
EVT_CALL(SetCamPosC, 0, 0, 0)
EVT_CALL(PanToTarget, 0, 0, 1)
EVT_END_THREAD
EVT_CALL(PlayerFaceNpc, 0, 1)
EVT_USE_BUF(EVT_PTR(N(intTable_80240988)))
EVT_LOOP(0)
EVT_BUF_READ3(LVar0, LVar1, LVar2)
EVT_IF_EQ(LVar0, -10000)
EVT_BREAK_LOOP
EVT_END_IF
EVT_CALL(PlaySoundAtNpc, NPC_SELF, 0x20C8, 0)
EVT_CALL(NpcJump0, 0, LVar0, LVar1, LVar2, 12)
EVT_WAIT(1)
EVT_END_LOOP
EVT_EXEC(N(8024081C))
EVT_LOOP(0)
EVT_BUF_READ3(LVar0, LVar1, LVar2)
EVT_IF_EQ(LVar0, -10000)
EVT_BREAK_LOOP
EVT_END_IF
EVT_CALL(PlaySoundAtNpc, NPC_SELF, 0x20C8, 0)
EVT_CALL(NpcJump0, 0, LVar0, LVar1, LVar2, 12)
EVT_WAIT(1)
EVT_END_LOOP
EVT_EXEC(N(802408D8))
EVT_WAIT(30)
EVT_CALL(SetCamType, 0, 6, 1)
EVT_CALL(SetCamSpeed, 0, EVT_FLOAT(90.0))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, 0, LVar0, LVar1, LVar2)
EVT_CALL(SetCamDistance, 0, 450)
EVT_CALL(PanToTarget, 0, 0, 1)
EVT_CALL(WaitForCam, 0, EVT_FLOAT(1.0))
EVT_CALL(PanToTarget, 0, 0, 0)
EVT_SET(GB_StoryProgress, -22)
EVT_RETURN
EVT_END
};
EvtScript N(init_80240E70) = {
EVT_IF_GE(GB_StoryProgress, -22)
EVT_CALL(RemoveNpc, NPC_SELF)
EVT_ELSE
EVT_CALL(SetSelfVar, 0, 0)
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(idle_802406CC)))
EVT_CALL(BindNpcDefeat, NPC_SELF, EVT_PTR(N(defeat_802409DC)))
EVT_END_IF
EVT_RETURN
EVT_END
};
StaticNpc N(npcGroup_80240EEC) = {
.id = NPC_TUBBAS_HEART,
.settings = &N(npcSettings_802406A0),
.pos = { 119.0f, 60.0f, 0.0f },
.flags = ENEMY_FLAGS_1 | ENEMY_FLAGS_4 | ENEMY_FLAGS_100 | ENEMY_FLAGS_200 | ENEMY_FLAGS_800 | ENEMY_FLAGS_40000,
.init = &N(init_80240E70),
.yaw = 270,
.drops = {
.dropFlags = NPC_DROP_FLAGS_80,
.heartDrops = NO_DROPS,
.flowerDrops = NO_DROPS,
},
.animations = {
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
ANIM_TubbasHeart_Anim01,
},
};
NpcGroupList N(npcGroupList_802410DC) = {
NPC_GROUP(N(npcGroup_80240EEC), 0x0E0F, BTL_DEFAULT_STAGE),
{},
};

View File

@ -2,12 +2,29 @@
#define NAMESPACE dro_01_Shop #define NAMESPACE dro_01_Shop
s32 N(ShopMessages)[] = { s32 N(ShopMessages)[] = {
MSG_Shop_0049, MSG_Shop_004A, MSG_Shop_004B, MSG_Shop_004C, MSG_Shop_0049,
MSG_Shop_004D, MSG_Shop_004E, MSG_Shop_004F, MSG_Shop_0050, MSG_Shop_004A,
MSG_Shop_0051, MSG_Shop_0052, MSG_Shop_0053, MSG_Shop_0054, MSG_Shop_004B,
MSG_Shop_0055, MSG_Shop_0056, MSG_Shop_0057, MSG_Shop_0058, MSG_Shop_004C,
MSG_Shop_0059, MSG_Shop_005A, MSG_Shop_005B, MSG_Shop_005C, MSG_Shop_004D,
MSG_Shop_005D, MSG_Shop_005E, MSG_Shop_005F, MSG_Shop_004E,
MSG_Shop_004F,
MSG_Shop_0050,
MSG_Shop_0051,
MSG_Shop_0052,
MSG_Shop_0053,
MSG_Shop_0054,
MSG_Shop_0055,
MSG_Shop_0056,
MSG_Shop_0057,
MSG_Shop_0058,
MSG_Shop_0059,
MSG_Shop_005A,
MSG_Shop_005B,
MSG_Shop_005C,
MSG_Shop_005D,
MSG_Shop_005E,
MSG_Shop_005F,
}; };
ShopItemData N(Inventory)[] = { ShopItemData N(Inventory)[] = {

View File

@ -10,7 +10,7 @@ NpcSettings N(NpcSettings_Dummy) = {
#include "world/common/npc/Tolielup.inc.c" #include "world/common/npc/Tolielup.inc.c"
#include "world/common/npc/StarSpirit.inc.c" #include "world/common/npc/StarSpirit.inc.c"
API_CALLABLE(N(UpgradeStarPower)) { API_CALLABLE(N(UpgradeStarPowerCh6)) {
set_max_SP(6); set_max_SP(6);
gPlayerData.curHP = gPlayerData.curMaxHP; gPlayerData.curHP = gPlayerData.curMaxHP;
gPlayerData.curFP = gPlayerData.curMaxFP; gPlayerData.curFP = gPlayerData.curMaxFP;
@ -498,7 +498,7 @@ EvtScript N(EVS_Scene_RescuedKlevar) = {
EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002) EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002)
EVT_CALL(SetNpcAnimation, NPC_Klevar, ANIM_WorldKlevar_Idle) EVT_CALL(SetNpcAnimation, NPC_Klevar, ANIM_WorldKlevar_Idle)
EVT_CALL(EnableNpcAI, NPC_Klevar, TRUE) EVT_CALL(EnableNpcAI, NPC_Klevar, TRUE)
EVT_CALL(N(UpgradeStarPower)) EVT_CALL(N(UpgradeStarPowerCh6))
EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_0196, 160, 40) EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_0196, 160, 40)
EVT_WAIT(10) EVT_WAIT(10)
EVT_CALL(GetNpcPos, NPC_Klevar, LVar0, LVar1, LVar2) EVT_CALL(GetNpcPos, NPC_Klevar, LVar0, LVar1, LVar2)

View File

@ -1,7 +1,5 @@
#include "hos_00.h" #include "hos_00.h"
extern char wMapBgName[];
ApiStatus func_80240000_A0BCF0(Evt* script, s32 isInitialCall) { ApiStatus func_80240000_A0BCF0(Evt* script, s32 isInitialCall) {
if (gGameStatusPtr->entryID == 3) { if (gGameStatusPtr->entryID == 3) {
sprintf(wMapBgName, "hos_bg\0\0\0\0\0\0\0\0\0"); sprintf(wMapBgName, "hos_bg\0\0\0\0\0\0\0\0\0");

View File

@ -1,7 +1,7 @@
#include "common.h" #include "common.h"
#include "sprite/npc/StoneChomp.h" #include "sprite/npc/StoneChomp.h"
ApiStatus N(StoneChompFXA)(Evt* script, s32 isInitialCall) { API_CALLABLE(N(StoneChompFXA)) {
NpcBlueprint bp; NpcBlueprint bp;
NpcBlueprint* bpPtr = &bp; NpcBlueprint* bpPtr = &bp;
NpcChompBlur* blurData; NpcChompBlur* blurData;
@ -34,7 +34,7 @@ ApiStatus N(StoneChompFXA)(Evt* script, s32 isInitialCall) {
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }
ApiStatus N(StoneChompFXB)(Evt* script, s32 isInitialCall) { API_CALLABLE(N(StoneChompFXB)) {
NpcChompBlur* blurData; NpcChompBlur* blurData;
Npc* ownerNpc; Npc* ownerNpc;
Npc* childNpc; Npc* childNpc;
@ -110,7 +110,7 @@ ApiStatus N(StoneChompFXB)(Evt* script, s32 isInitialCall) {
return ApiStatus_BLOCK; return ApiStatus_BLOCK;
} }
ApiStatus N(StoneChompFXC)(Evt* script, s32 isInitialCall) { API_CALLABLE(N(StoneChompFXC)) {
NpcChompBlur* blurData = get_npc_safe(script->owner2.npcID)->blur.chomp; NpcChompBlur* blurData = get_npc_safe(script->owner2.npcID)->blur.chomp;
s32 i; s32 i;

View File

@ -20,6 +20,44 @@ enum {
AB_ISK_F = AreaByte(15), AB_ISK_F = AreaByte(15),
}; };
#define AF_ISK(index) AreaFlag(index) enum {
AF_ISK03_SandSwitchActivated = AreaFlag(1),
AF_ISK06_SandSwitchActivated = AreaFlag(2),
AF_ISK12_SandSwitchActivated = AreaFlag(3),
AF_ISK02_Sarcophagus1Opened = AreaFlag(4),
AF_ISK02_Sarcophagus2Opened = AreaFlag(5),
AF_ISK02_Sarcophagus3Opened = AreaFlag(6),
AF_ISK02_OpeningSarcophagus1 = AreaFlag(7),
AF_ISK02_OpeningSarcophagus2 = AreaFlag(8),
AF_ISK02_OpeningSarcophagus3 = AreaFlag(9),
AF_ISK07_OpeningSarcophagus1 = AreaFlag(10),
AF_ISK07_OpeningSarcophagus2 = AreaFlag(11),
AF_ISK07_OpeningSarcophagus3 = AreaFlag(12),
AF_ISK07_MummiesReleased = AreaFlag(13),
AF_ISK07_FlippingRedStairs = AreaFlag(14),
AF_ISK09_FlippingBlueStairs = AreaFlag(15),
AF_ISK09_FlippingRedStairs = AreaFlag(16),
AF_ISK05_StoneChompDefeated = AreaFlag(17),
AF_ISK12_StairSwitchActivated = AreaFlag(18),
AF_ISK14_StoneChompDefeated = AreaFlag(19),
};
extern MapSettings isk_01_settings;
extern MapSettings isk_02_settings;
extern MapSettings isk_03_settings;
extern MapSettings isk_04_settings;
extern MapSettings isk_05_settings;
extern MapSettings isk_06_settings;
extern MapSettings isk_07_settings;
extern MapSettings isk_08_settings;
extern MapSettings isk_09_settings;
extern MapSettings isk_10_settings;
extern MapSettings isk_11_settings;
extern MapSettings isk_12_settings;
extern MapSettings isk_13_settings;
extern MapSettings isk_14_settings;
extern MapSettings isk_16_settings;
extern MapSettings isk_18_settings;
extern MapSettings isk_19_settings;
#endif #endif

View File

@ -1,5 +0,0 @@
#include "isk_01.h"
static char* N(exit_str_0) = "sbk_02";
static char* N(exit_str_1) = "isk_02";

View File

@ -2,8 +2,16 @@
/// @brief Dry Dry Ruins - Entrance /// @brief Dry Dry Ruins - Entrance
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_01_shape.h"
#include "mapfs/isk_01_hit.h"
#define NAMESPACE isk_01 #define NAMESPACE isk_01
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupMusic);
extern EvtScript N(EVS_SetupHaze);
extern EvtScript N(EVS_MakeEntities);

View File

@ -0,0 +1,14 @@
#include "isk_01.h"
EntryList N(Entrances) = {
[isk_01_ENTRY_0] { -576.0, 0.0, -71.0, 179.0 },
[isk_01_ENTRY_1] { -555.0, 0.0, 170.0, 350.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.background = &gBackgroundImage,
.tattle = { MSG_MapTattle_isk_01 },
};

View File

@ -0,0 +1,31 @@
#include "isk_01.h"
EvtScript N(EVS_SetupMusic) = {
EVT_IF_EQ(GF_ISK01_FirstWarning, FALSE)
EVT_THREAD
EVT_CALL(FadeInMusic, 1, SONG_TUTANKOOPA_WARNING, 0, 2000, 0, 127)
EVT_CALL(FadeOutMusic, 0, 2000)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_WAIT(20)
EVT_SET_GROUP(EVT_GROUP_00)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_PARTIAL)
EVT_CALL(ShowMessageAtScreenPos, MSG_CH2_00DD, 160, 40)
EVT_SET(GF_ISK01_FirstWarning, TRUE)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_CALL(FadeInMusic, 0, SONG_DRY_DRY_RUINS, 0, 2000, 0, 127)
EVT_CALL(FadeOutMusic, 1, 2000)
EVT_END_THREAD
EVT_RETURN
EVT_END_IF
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,38 @@
#include "isk_01.h"
EvtScript N(D_80240220_978360) = EVT_EXIT_WALK(40, isk_01_ENTRY_0, "sbk_02", sbk_02_ENTRY_4);
EvtScript N(D_8024027C_9783BC) = EVT_EXIT_WALK(40, isk_01_ENTRY_1, "isk_02", isk_02_ENTRY_0);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(D_80240220_978360)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(D_8024027C_9783BC)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_EnterMap) = {
EVT_CALL(GetLoadType, LVar1)
EVT_IF_EQ(LVar1, LOAD_FROM_FILE_SELECT)
EVT_EXEC(EnterSavePoint)
EVT_EXEC(N(EVS_BindExitTriggers))
EVT_RETURN
EVT_END_IF
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_NONE)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_SET(GF_MAP_DryDryRuins, TRUE)
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC(N(EVS_SetupMusic))
EVT_EXEC(N(EVS_SetupHaze))
EVT_EXEC(N(EVS_EnterMap))
EVT_WAIT(1)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,24 @@
#include "isk_01.h"
Gfx N(HazePreGfx)[] = {
gsDPSetAlphaDither(G_AD_NOISE),
gsSPEndDisplayList(),
};
EvtScript N(EVS_SetupHaze) = {
EVT_CALL(SetTexPanner, MODEL_o99, TEX_PANNER_2)
EVT_CALL(EnableTexPanning, MODEL_o99, TRUE)
EVT_SET(LVar0, 0)
EVT_CALL(SetCustomGfx, 0, EVT_PTR(N(HazePreGfx)), NULL)
EVT_CALL(SetModelFlags, MODEL_o99, MODEL_FLAGS_USES_CUSTOM_GFX, TRUE)
EVT_LABEL(0)
EVT_ADD(LVar0, 70)
EVT_CALL(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_MAIN, LVar0, 0)
EVT_IF_GT(LVar0, 0x4000)
EVT_ADD(LVar0, -0x4000)
EVT_END_IF
EVT_WAIT(1)
EVT_GOTO(0)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,8 @@
#include "isk_01.h"
#include "entity.h"
EvtScript N(EVS_MakeEntities) = {
EVT_CALL(MakeEntity, EVT_PTR(Entity_SavePoint), -530, 60, 43, 0, MAKE_ENTITY_END)
EVT_RETURN
EVT_END
};

View File

@ -1,6 +0,0 @@
#include "isk_02.h"
static char* N(exit_str_0) = "isk_01";
static char* N(exit_str_1) = "isk_03";
#include "world/common/todo/RemovePadlock.inc.c"

View File

@ -1,14 +0,0 @@
#include "isk_02.h"
ApiStatus func_80240040_978750(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
f32 x = evt_get_variable(script, *args++);
f32 y = evt_get_variable(script, *args++);
if (dist2D(x, y, gPlayerStatus.position.x, gPlayerStatus.position.z) > 250.0f) {
script->varTable[0] = FALSE;
} else {
script->varTable[0] = TRUE;
}
return ApiStatus_DONE2;
}

View File

@ -1,2 +0,0 @@
#include "isk_02.h"
#include "world/common/todo/SetNpcB5_3.inc.c"

View File

@ -2,8 +2,29 @@
/// @brief Dry Dry Ruins - Sarcophagus Hall 1 /// @brief Dry Dry Ruins - Sarcophagus Hall 1
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_02_shape.h"
#include "mapfs/isk_02_hit.h"
#include "sprite/npc/Pokey.h"
enum {
NPC_Pokey_01 = 0,
NPC_Pokey_02 = 1,
NPC_Pokey_03 = 2,
};
enum {
MV_EntityID_Padlock = MapVar(0),
};
#define NAMESPACE isk_02 #define NAMESPACE isk_02
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupLock);
extern EvtScript N(EVS_SetupSarcophagi);
extern EvtScript N(EVS_MakeEntities);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,15 @@
#include "isk_02.h"
EntryList N(Entrances) = {
[isk_02_ENTRY_0] { -484.0, 0.0, 302.0, 140.0 },
[isk_02_ENTRY_1] { 258.0, 50.0, 486.0, 250.0 },
[isk_02_ENTRY_2] { 283.0, -80.0, 530.0, 250.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.background = &gBackgroundImage,
.tattle = { MSG_MapTattle_isk_02 },
};

View File

@ -0,0 +1,35 @@
#include "isk_02.h"
EvtScript N(EVS_ExitWalk_isk_01_1) = EVT_EXIT_WALK(40, isk_02_ENTRY_0, "isk_01", isk_01_ENTRY_1);
EvtScript N(EVS_ExitWalk_isk_03_0) = EVT_EXIT_WALK(40, isk_02_ENTRY_1, "isk_03", isk_03_ENTRY_0);
EvtScript N(EVS_ExitWalk_isk_03_1) = EVT_EXIT_WALK(40, isk_02_ENTRY_2, "isk_03", isk_03_ENTRY_1);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_01_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_03_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiline, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_03_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_NONE)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_CALL(MakeNpcs, TRUE, EVT_PTR(N(DefaultNPCs)))
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC_WAIT(N(EVS_SetupLock))
EVT_EXEC(N(EVS_SetupSarcophagi))
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,54 @@
#include "isk_02.h"
#include "world/common/todo/RemovePadlock.inc.c"
s32 N(KeyList)[] = {
ITEM_RUINS_KEY,
ITEM_NONE,
};
EvtScript N(EVS_UnlockDoor) = {
EVT_CALL(ShowKeyChoicePopup)
EVT_IF_EQ(LVar0, 0)
EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_00D8, 160, 40)
EVT_CALL(CloseChoicePopup)
EVT_RETURN
EVT_END_IF
EVT_IF_EQ(LVar0, -1)
EVT_CALL(CloseChoicePopup)
EVT_RETURN
EVT_END_IF
EVT_CALL(PlaySoundAt, SOUND_269, 0, 272, 60, 486)
EVT_CALL(RemoveKeyItemAt, LVar1)
EVT_SET(GF_ISK02_UnlockedDoor, TRUE)
EVT_SET(LVar0, MV_EntityID_Padlock)
EVT_CALL(N(RemovePadlock))
EVT_SET(LVar1, 0)
EVT_WAIT(5)
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilittne, SOUND_265, 0)
EVT_CALL(MakeLerp, 0, 65, 65, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateGroup, MODEL_g304, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittne, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(CloseChoicePopup)
EVT_UNBIND
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SetupLock) = {
EVT_IF_EQ(GF_ISK02_UnlockedDoor, FALSE)
EVT_CALL(MakeTransformGroup, MODEL_g304)
EVT_BIND_PADLOCK(EVT_PTR(N(EVS_UnlockDoor)), TRIGGER_WALL_PRESS_A, EVT_ENTITY_INDEX(0), EVT_PTR(N(KeyList)), 0, 1)
EVT_ELSE
EVT_CALL(EnableGroup, MODEL_g304, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittne, COLLIDER_FLAGS_SURFACE_TYPE_MASK | COLLIDER_FLAGS_SAFE_FLOOR | COLLIDER_FLAGS_IGNORE_SHELL | COLLIDER_FLAGS_IGNORE_PLAYER | COLLIDER_FLAGS_80000 | 0x7FF47E00)
EVT_END_IF
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,125 @@
#include "isk_02.h"
extern EvtScript N(EVS_ManageSarcophagus1);
extern EvtScript N(EVS_ManageSarcophagus2);
extern EvtScript N(EVS_ManageSarcophagus3);
API_CALLABLE(N(AwaitPlayerMummyAmbush)) {
Bytecode* args = script->ptrReadPos;
f32 x = evt_get_variable(script, *args++);
f32 y = evt_get_variable(script, *args++);
if (dist2D(x, y, gPlayerStatus.position.x, gPlayerStatus.position.z) > 250.0f) {
script->varTable[0] = FALSE;
} else {
script->varTable[0] = TRUE;
}
return ApiStatus_DONE2;
}
EvtScript N(EVS_SetupSarcophagi) = {
EVT_SET(AF_ISK02_OpeningSarcophagus1, FALSE)
EVT_SET(AF_ISK02_OpeningSarcophagus2, FALSE)
EVT_SET(AF_ISK02_OpeningSarcophagus3, FALSE)
EVT_EXEC(N(EVS_ManageSarcophagus1))
EVT_EXEC(N(EVS_ManageSarcophagus2))
EVT_EXEC(N(EVS_ManageSarcophagus3))
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_h1o, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_h2o, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_h3o, COLLIDER_FLAGS_UPPER_MASK)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OpenSarcophagus) = {
EVT_IF_EQ(LVar0, 0)
EVT_CALL(PlaySoundAtModel, LVar3, SOUND_1D1, 0)
EVT_CALL(TranslateModel, LVar3, 0, 0, 13)
EVT_WAIT(3)
EVT_CALL(MakeLerp, 0, 35, 9, EASING_COS_IN_OUT)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_SET(LVar2, LVar0)
EVT_MULF(LVar2, EVT_FLOAT(1.1))
EVT_CALL(TranslateModel, LVar3, LVar2, 0, 13)
EVT_CALL(RotateModel, LVar3, LVar0, 0, 1, 0)
EVT_ADD(LVar0, 1)
EVT_WAIT(1)
EVT_IF_NE(LVar1, 0)
EVT_GOTO(10)
EVT_END_IF
EVT_WAIT(3)
EVT_ELSE
EVT_CALL(TranslateModel, LVar3, EVT_FLOAT(38.5), 0, 13)
EVT_CALL(RotateModel, LVar3, 35, 0, 1, 0)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ManageSarcophagus1) = {
EVT_IF_EQ(AF_ISK02_Sarcophagus1Opened, FALSE)
EVT_LABEL(5)
EVT_CALL(N(AwaitPlayerMummyAmbush), -210, 580)
EVT_WAIT(1)
EVT_IF_EQ(LVar0, 0)
EVT_GOTO(5)
EVT_END_IF
EVT_END_IF
EVT_SET(AF_ISK02_OpeningSarcophagus1, TRUE)
EVT_CALL(SetNpcFlagBits, NPC_Pokey_01, NPC_FLAG_2, FALSE)
EVT_SET(LVar0, AF_ISK02_Sarcophagus1Opened)
EVT_SET(LVar3, MODEL_g346)
EVT_EXEC_WAIT(N(EVS_OpenSarcophagus))
EVT_SET(AF_ISK02_OpeningSarcophagus1, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_h1c, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_h1o, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(AF_ISK02_Sarcophagus1Opened, TRUE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ManageSarcophagus2) = {
EVT_IF_EQ(AF_ISK02_Sarcophagus2Opened, FALSE)
EVT_LABEL(5)
EVT_CALL(N(AwaitPlayerMummyAmbush), -30, 670)
EVT_WAIT(1)
EVT_IF_EQ(LVar0, 0)
EVT_GOTO(5)
EVT_END_IF
EVT_END_IF
EVT_CALL(MakeItemEntity, ITEM_SPIKE_SHIELD, -133, 1, 500, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_ISK02_Item_SpikeShield)
EVT_SET(AF_ISK02_OpeningSarcophagus2, TRUE)
EVT_CALL(SetNpcFlagBits, NPC_Pokey_02, NPC_FLAG_2, FALSE)
EVT_SET(LVar0, AF_ISK02_Sarcophagus2Opened)
EVT_SET(LVar3, MODEL_g348)
EVT_EXEC_WAIT(N(EVS_OpenSarcophagus))
EVT_SET(AF_ISK02_OpeningSarcophagus2, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_h2c, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_h2o, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(AF_ISK02_Sarcophagus2Opened, TRUE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ManageSarcophagus3) = {
EVT_IF_EQ(AF_ISK02_Sarcophagus3Opened, FALSE)
EVT_LABEL(5)
EVT_CALL(N(AwaitPlayerMummyAmbush), 220, 600)
EVT_WAIT(1)
EVT_IF_EQ(LVar0, 0)
EVT_GOTO(5)
EVT_END_IF
EVT_END_IF
EVT_SET(AF_ISK02_OpeningSarcophagus3, TRUE)
EVT_CALL(SetNpcFlagBits, NPC_Pokey_03, NPC_FLAG_2, FALSE)
EVT_SET(LVar0, AF_ISK02_Sarcophagus3Opened)
EVT_SET(LVar3, MODEL_g350)
EVT_EXEC_WAIT(N(EVS_OpenSarcophagus))
EVT_SET(AF_ISK02_OpeningSarcophagus3, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_h3c, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_h3o, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(AF_ISK02_Sarcophagus3Opened, TRUE)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,11 @@
#include "isk_02.h"
#include "entity.h"
EvtScript N(EVS_MakeEntities) = {
EVT_IF_EQ(GF_ISK02_UnlockedDoor, FALSE)
EVT_CALL(MakeEntity, EVT_PTR(Entity_Padlock), 272, 60, 486, 300, MAKE_ENTITY_END)
EVT_SET(MV_EntityID_Padlock, LVar0)
EVT_END_IF
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,157 @@
#include "isk_02.h"
#include "world/common/enemy/complete/PokeyMummy.inc.c"
EvtScript N(EVS_NpcIdle_Pokey_01) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 1)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_LABEL(1)
EVT_IF_EQ(AF_ISK02_OpeningSarcophagus1, FALSE)
EVT_WAIT(1)
EVT_GOTO(1)
EVT_END_IF
EVT_WAIT(15)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 0)
EVT_CALL(NpcMoveTo, NPC_SELF, -315, 455, 10)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, FALSE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_40000000, 1)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_PokeyMummy)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Pokey_02) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 1)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_LABEL(1)
EVT_IF_EQ(AF_ISK02_OpeningSarcophagus2, FALSE)
EVT_WAIT(1)
EVT_GOTO(1)
EVT_END_IF
EVT_WAIT(15)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 0)
EVT_CALL(NpcMoveTo, NPC_SELF, -145, 535, 10)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, FALSE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_40000000, 1)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_PokeyMummy)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Pokey_03) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 1)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_LABEL(1)
EVT_IF_EQ(AF_ISK02_OpeningSarcophagus3, FALSE)
EVT_WAIT(1)
EVT_GOTO(1)
EVT_END_IF
EVT_WAIT(15)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 0)
EVT_CALL(NpcMoveTo, NPC_SELF, 50, 550, 10)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, FALSE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_40000000, 1)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_PokeyMummy)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Pokey_01) = {
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Pokey_01)))
EVT_CALL(func_800457C4, 3)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Pokey_02) = {
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Pokey_02)))
EVT_CALL(func_800457C4, 3)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Pokey_03) = {
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Pokey_03)))
EVT_CALL(func_800457C4, 3)
EVT_RETURN
EVT_END
};
StaticNpc N(NpcData_Pokey_01) = {
.id = NPC_Pokey_01,
.settings = &N(NpcSettings_PokeyMummy),
.pos = { -296.0f, 0.0f, 421.0f },
.yaw = 304,
.flags = ENEMY_FLAGS_200 | ENEMY_FLAGS_800,
.init = &N(EVS_NpcInit_Pokey_01),
.drops = POKEY_MUMMY_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { -301, 0, 427 },
.wanderSize = { 200 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { -301, 0, 427 },
.detectSize = { 400 },
}
},
.animations = POKEY_MUMMY_ANIMS,
};
StaticNpc N(NpcData_Pokey_02) = {
.id = NPC_Pokey_02,
.settings = &N(NpcSettings_PokeyMummy),
.pos = { -133.0f, 0.0f, 497.0f },
.yaw = 284,
.flags = ENEMY_FLAGS_200 | ENEMY_FLAGS_800,
.init = &N(EVS_NpcInit_Pokey_02),
.drops = POKEY_MUMMY_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { -134, 0, 495 },
.wanderSize = { 200 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { -140, 0, 510 },
.detectSize = { 400 },
}
},
.animations = POKEY_MUMMY_ANIMS,
};
StaticNpc N(NpcData_Pokey_03) = {
.id = NPC_Pokey_03,
.settings = &N(NpcSettings_PokeyMummy),
.pos = { 45.0f, 0.0f, 505.0f },
.yaw = 264,
.flags = ENEMY_FLAGS_200 | ENEMY_FLAGS_800,
.init = &N(EVS_NpcInit_Pokey_03),
.drops = POKEY_MUMMY_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 46, 0, 514 },
.wanderSize = { 200 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 47, 0, 518 },
.detectSize = { 400 },
}
},
.animations = POKEY_MUMMY_ANIMS,
};
NpcGroupList N(DefaultNPCs) = {
NPC_GROUP(N(NpcData_Pokey_01), BTL_ISK_PART_1_FORMATION_00, BTL_ISK_PART_1_STAGE_05),
NPC_GROUP(N(NpcData_Pokey_02), BTL_ISK_PART_1_FORMATION_00, BTL_ISK_PART_1_STAGE_05),
NPC_GROUP(N(NpcData_Pokey_03), BTL_ISK_PART_1_FORMATION_01, BTL_ISK_PART_1_STAGE_05),
{}
};

View File

@ -1,5 +0,0 @@
#include "isk_03.h"
static char* N(exit_str_0) = "isk_02";
static char* N(exit_str_1) = "isk_04";

View File

@ -2,8 +2,16 @@
/// @brief Dry Dry Ruins - Sand Drainage Room 1 /// @brief Dry Dry Ruins - Sand Drainage Room 1
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_03_shape.h"
#include "mapfs/isk_03_hit.h"
#define NAMESPACE isk_03 #define NAMESPACE isk_03
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_MakeEntities);
extern EvtScript N(EVS_SetupSand);
extern EvtScript N(EVS_SetupSwitch);

View File

@ -0,0 +1,14 @@
#include "isk_03.h"
EntryList N(Entrances) = {
[isk_03_ENTRY_0] { 369.0, 50.0, 408.0, 59.0 },
[isk_03_ENTRY_1] { 401.0, -140.0, 447.0, 59.0 },
[isk_03_ENTRY_2] { 557.0, -155.0, 224.0, 209.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.tattle = { MSG_MapTattle_isk_03 },
};

View File

@ -0,0 +1,41 @@
#include "isk_03.h"
EvtScript N(EVS_ExitWalk_isk_02_1) = EVT_EXIT_WALK(40, isk_03_ENTRY_0, "isk_02", isk_02_ENTRY_1);
EvtScript N(EVS_ExitWalk_isk_02_2) = EVT_EXIT_WALK(40, isk_03_ENTRY_1, "isk_02", isk_02_ENTRY_2);
EvtScript N(EVS_ExitWalk_isk_04_0) = EVT_EXIT_WALK(40, isk_03_ENTRY_2, "isk_04", isk_04_ENTRY_0);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_02_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilinw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_02_2)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_04_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_ISK_03)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_CALL(SetZoneEnabled, ZONE_o2023, FALSE)
EVT_CALL(SetZoneEnabled, ZONE_03, FALSE)
EVT_ELSE
EVT_CALL(SetZoneEnabled, ZONE_o2023, FALSE)
EVT_CALL(SetZoneEnabled, ZONE_o2008, FALSE)
EVT_END_IF
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC(N(EVS_SetupSand))
EVT_EXEC(N(EVS_SetupSwitch))
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,294 @@
#include "isk_03.h"
EvtScript N(EVS_TexPan_DrippingSand) = {
EVT_CALL(SetTexPanner, MODEL_o6000, TEX_PANNER_4)
EVT_SET(LVar1, 0)
EVT_SET(LVar2, 0)
EVT_LABEL(10)
EVT_ADD(LVar1, -1000)
EVT_ADD(LVar2, 200)
EVT_CALL(SetTexPanOffset, TEX_PANNER_4, TEX_PANNER_MAIN, 0, LVar1)
EVT_CALL(SetTexPanOffset, TEX_PANNER_4, TEX_PANNER_AUX, LVar2, 0)
EVT_WAIT(1)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(EnableModel, MODEL_o6000, FALSE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Camera_LookAtDrain) = {
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 454, 35, 285)
EVT_CALL(SetCamDistance, CAM_DEFAULT, 400)
EVT_CALL(SetCamPosA, CAM_DEFAULT, 250, 40)
EVT_CALL(SetCamPosB, CAM_DEFAULT, 566, -50)
EVT_CALL(SetCamPitch, CAM_DEFAULT, EVT_FLOAT(13.6), EVT_FLOAT(-1.5))
EVT_CALL(SetPanTarget, CAM_DEFAULT, 429, 35, 278)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Camera_LookBelow) = {
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(0.5))
EVT_CALL(SetCamPitch, CAM_DEFAULT, EVT_FLOAT(3.4), EVT_FLOAT(-5.5))
EVT_CALL(SetPanTarget, CAM_DEFAULT, 429, -153, 278)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Camera_Reset) = {
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(90.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 430, 35, 295)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_TexPan_UpperSand) = {
EVT_CALL(SetTexPanner, MODEL_o1350, TEX_PANNER_0)
EVT_CALL(SetTexPanner, MODEL_o1351, TEX_PANNER_0)
EVT_CALL(SetTexPanner, MODEL_o1352, TEX_PANNER_0)
EVT_SET(LVar2, 0)
EVT_CALL(MakeLerp, 0, 500, 60, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_ADD(LVar2, LVar0)
EVT_CALL(SetTexPanOffset, TEX_PANNER_0, TEX_PANNER_MAIN, 0, LVar2)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_LABEL(20)
EVT_ADD(LVar2, 500)
EVT_CALL(SetTexPanOffset, TEX_PANNER_0, TEX_PANNER_MAIN, 0, LVar2)
EVT_WAIT(1)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_GOTO(20)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_TexPan_LowerSand) = {
EVT_CALL(SetTexPanner, MODEL_o1341, TEX_PANNER_1)
EVT_CALL(SetTexPanner, MODEL_o1346, TEX_PANNER_2)
EVT_CALL(SetTexPanner, MODEL_o1343, TEX_PANNER_3)
EVT_CALL(SetTexPanner, MODEL_o1344, TEX_PANNER_3)
EVT_CALL(SetTexPanner, MODEL_o1345, TEX_PANNER_3)
EVT_SET(LVar2, 0)
EVT_SET(LVar3, 0)
EVT_SET(LVar4, 0)
EVT_LABEL(10)
EVT_ADD(LVar2, 0x1800)
EVT_ADD(LVar3, -500)
EVT_ADD(LVar4, -100)
EVT_CALL(SetTexPanOffset, TEX_PANNER_1, TEX_PANNER_MAIN, 0, LVar2)
EVT_CALL(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_MAIN, 0, LVar3)
EVT_CALL(SetTexPanOffset, TEX_PANNER_3, TEX_PANNER_MAIN, 0, LVar4)
EVT_WAIT(1)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_GOTO(10)
EVT_END_IF
EVT_SET(LVar5, 0x1800)
EVT_SET(LVar6, -500)
EVT_SET(LVar7, -100)
EVT_LOOP(10)
EVT_ADD(LVar5, -512)
EVT_ADD(LVar6, 50)
EVT_ADD(LVar7, 10)
EVT_ADD(LVar2, LVar5)
EVT_ADD(LVar3, LVar6)
EVT_ADD(LVar4, LVar7)
EVT_CALL(SetTexPanOffset, TEX_PANNER_1, TEX_PANNER_MAIN, 0, LVar2)
EVT_CALL(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_MAIN, 0, LVar3)
EVT_CALL(SetTexPanOffset, TEX_PANNER_3, TEX_PANNER_MAIN, 0, LVar4)
EVT_WAIT(1)
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_RescaleDrainingSand) = {
EVT_CALL(MakeLerp, 0, 100, 60, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(ScaleModel, MODEL_o1351, EVT_FLOAT(1.0), LVar0, EVT_FLOAT(1.0))
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_CollapseSandPile) = {
EVT_CALL(MakeLerp, 0, 50, 10, EASING_QUADRATIC_OUT)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 100)
EVT_SETF(LVar2, 1)
EVT_ADDF(LVar2, LVar0)
EVT_SETF(LVar3, 1)
EVT_SUBF(LVar3, LVar0)
EVT_CALL(ScaleModel, MODEL_o1346, LVar2, LVar3, LVar2)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_DrainUpperSand) = {
EVT_CALL(MakeLerp, 0, -100, 60, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 10)
EVT_SETF(LVar2, 0)
EVT_SUBF(LVar2, LVar0)
EVT_CALL(TranslateGroup, MODEL_g206, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o1952, 0, LVar2, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(MakeLerp, -100, -250, 30, EASING_LINEAR)
EVT_LABEL(20)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 10)
EVT_SETF(LVar2, 0)
EVT_SUBF(LVar2, LVar0)
EVT_CALL(TranslateGroup, MODEL_g206, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o1952, 0, LVar2, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(20)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_FillLowerSand) = {
EVT_CALL(MakeTransformGroup, MODEL_g210)
EVT_CALL(MakeLerp, -200, 0, 120, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 10)
EVT_CALL(TranslateGroup, MODEL_g210, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o1346, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_LowerSandColumn) = {
EVT_CALL(MakeLerp, 0, -200, 10, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_o1341, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Scene_DrainSand) = {
EVT_WAIT(5)
EVT_CALL(InterpPlayerYaw, 179, 0)
EVT_CALL(EnableModel, MODEL_o1343, TRUE)
EVT_CALL(EnableModel, MODEL_o1344, TRUE)
EVT_CALL(EnableModel, MODEL_o1345, TRUE)
EVT_CALL(EnableModel, MODEL_o1354, TRUE)
EVT_CALL(EnableModel, MODEL_o1355, TRUE)
EVT_CALL(EnableModel, MODEL_o1356, TRUE)
EVT_CALL(EnableModel, MODEL_o1341, TRUE)
EVT_CALL(EnableModel, MODEL_o1346, TRUE)
EVT_EXEC(N(EVS_Camera_LookAtDrain))
EVT_WAIT(30)
EVT_EXEC(N(EVS_TexPan_UpperSand))
EVT_EXEC(N(EVS_RescaleDrainingSand))
EVT_EXEC(N(EVS_DrainUpperSand))
EVT_CALL(PlaySound, SOUND_53)
EVT_WAIT(75)
EVT_EXEC(N(EVS_Camera_LookBelow))
EVT_WAIT(30)
EVT_EXEC(N(EVS_TexPan_LowerSand))
EVT_EXEC(N(EVS_FillLowerSand))
EVT_CALL(PlaySound, SOUND_453)
EVT_WAIT(120)
EVT_EXEC(N(EVS_LowerSandColumn))
EVT_WAIT(5)
EVT_EXEC(N(EVS_CollapseSandPile))
EVT_CALL(PlaySound, SOUND_453)
EVT_WAIT(10)
EVT_CALL(EnableModel, MODEL_o1347, FALSE)
EVT_CALL(EnableModel, MODEL_o1348, FALSE)
EVT_CALL(EnableModel, MODEL_o1349, FALSE)
EVT_CALL(EnableModel, MODEL_o1350, FALSE)
EVT_CALL(EnableModel, MODEL_o1351, FALSE)
EVT_CALL(EnableModel, MODEL_o1352, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1350, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1351, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1352, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_CALL(SetZoneEnabled, ZONE_o2008, FALSE)
EVT_CALL(SetZoneEnabled, ZONE_o2023, TRUE)
EVT_WAIT(20)
EVT_EXEC(N(EVS_Camera_Reset))
EVT_WAIT(5)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_UNBIND
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SetupSand) = {
EVT_SET(AF_ISK03_SandSwitchActivated, FALSE)
EVT_CALL(MakeTransformGroup, MODEL_g206)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_Scene_DrainSand)), TRIGGER_AREA_FLAG_SET, AF_ISK03_SandSwitchActivated, 1, 0)
EVT_CALL(EnableModel, MODEL_o1343, FALSE)
EVT_CALL(EnableModel, MODEL_o1344, FALSE)
EVT_CALL(EnableModel, MODEL_o1345, FALSE)
EVT_CALL(EnableModel, MODEL_o1354, FALSE)
EVT_CALL(EnableModel, MODEL_o1355, FALSE)
EVT_CALL(EnableModel, MODEL_o1356, FALSE)
EVT_CALL(EnableModel, MODEL_o1341, FALSE)
EVT_CALL(EnableModel, MODEL_o1346, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1343, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1344, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1345, COLLIDER_FLAGS_UPPER_MASK)
EVT_EXEC(N(EVS_TexPan_DrippingSand))
EVT_ELSE
EVT_CALL(EnableModel, MODEL_o1347, FALSE)
EVT_CALL(EnableModel, MODEL_o1348, FALSE)
EVT_CALL(EnableModel, MODEL_o1349, FALSE)
EVT_CALL(EnableModel, MODEL_o1350, FALSE)
EVT_CALL(EnableModel, MODEL_o1351, FALSE)
EVT_CALL(EnableModel, MODEL_o1352, FALSE)
EVT_CALL(EnableModel, MODEL_o1341, FALSE)
EVT_CALL(EnableModel, MODEL_o1346, FALSE)
EVT_CALL(EnableModel, MODEL_o6000, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1350, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1351, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1352, COLLIDER_FLAGS_UPPER_MASK)
EVT_END_IF
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_FIRST_SAND_ROOM)
EVT_ELSE
EVT_CALL(EnableModel, MODEL_o6000, FALSE)
EVT_END_IF
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,10 @@
#include "isk_03.h"
#include "effects.h"
EvtScript N(EVS_MakeEntities) = {
EVT_CALL(MakeItemEntity, ITEM_RUINS_KEY, 467, -170, 218, ITEM_SPAWN_MODE_KEY, GF_ISK03_Item_RuinsKey)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 358, -123, 358, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 457, -123, 214, EVT_FLOAT(0.3), LVar0)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,57 @@
#include "isk_03.h"
extern EvtScript N(EVS_OnTouch_DrainSwitch);
EvtScript N(EVS_SetupSwitch) = {
EVT_CALL(ParentColliderToModel, COLLIDER_o1989, MODEL_o1992)
EVT_CALL(ParentColliderToModel, COLLIDER_o1990, MODEL_o1992)
EVT_IF_EQ(AF_ISK03_SandSwitchActivated, FALSE)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_OnTouch_DrainSwitch)), TRIGGER_FLOOR_TOUCH, COLLIDER_o1990, 1, 0)
EVT_ELSE
EVT_CALL(TranslateGroup, MODEL_g319, 0, -14, 0)
EVT_CALL(UpdateColliderTransform, COLLIDER_o1989)
EVT_CALL(UpdateColliderTransform, COLLIDER_o1990)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OnTouch_DrainSwitch) = {
EVT_CALL(IsPlayerOnValidFloor, LVar0)
EVT_IF_EQ(LVar0, FALSE)
EVT_RETURN
EVT_END_IF
EVT_CALL(DisablePlayerInput, TRUE)
EVT_LABEL(5)
EVT_WAIT(1)
EVT_CALL(PartnerCanUseAbility, LVar0)
EVT_IF_EQ(LVar0, TRUE)
EVT_GOTO(5)
EVT_END_IF
EVT_CALL(GetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2)
EVT_IF_LT(LVar1, 50)
EVT_THREAD
EVT_CALL(DisablePartnerAI, 0)
EVT_CALL(SetNpcJumpscale, NPC_PARTNER, EVT_FLOAT(2.5))
EVT_CALL(NpcJump0, NPC_PARTNER, 470, 50, 268, 10)
EVT_WAIT(10)
EVT_CALL(EnablePartnerAI)
EVT_END_THREAD
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_o1990, SOUND_208A, 0)
EVT_CALL(MakeLerp, 0, -14, 30, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateGroup, MODEL_g319, 0, LVar0, 0)
EVT_CALL(UpdateColliderTransform, COLLIDER_o1989)
EVT_CALL(UpdateColliderTransform, COLLIDER_o1990)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_o1990, SOUND_208B, 0)
EVT_SET(AF_ISK03_SandSwitchActivated, TRUE)
EVT_UNBIND
EVT_RETURN
EVT_END
};

View File

@ -1,8 +0,0 @@
#include "isk_04.h"
static char* N(exit_str_0) = "isk_03";
static char* N(exit_str_1) = "isk_07";
static char* N(exit_str_2) = "isk_06";
static char* N(exit_str_3) = "isk_05";
#include "world/common/todo/RemovePadlock.inc.c"

View File

@ -1,9 +0,0 @@
#include "isk_04.h"
#include "world/common/enemy/ai/TackleAI.inc.c"
#include "world/common/todo/AwaitPlayerNearNpc.inc.c"
static const f32 padding = 0.0f;
static char* N(exit_str_0) = "isk_04";

View File

@ -1,33 +0,0 @@
#include "isk_04.h"
#include "world/common/todo/SwitchToPartner.inc.c"
#include "world/partners.h"
extern s32 D_80242288_97D8B8;
// duplicate of SetupDemoScene from trd_09
ApiStatus func_8024095C_97BF8C(Evt* script, s32 isInitialCall) {
PlayerStatus* playerStatus = &gPlayerStatus;
switch (D_80242288_97D8B8) {
case 0:
D_80242288_97D8B8 = 1;
return ApiStatus_BLOCK;
case 1:
case 2:
D_80242288_97D8B8++;
return ApiStatus_BLOCK;
case 3:
wPartnerNpc->pos.x = playerStatus->position.x - 30.0f;
wPartnerNpc->pos.z = playerStatus->position.z + 30.0f;
partner_clear_player_tracking(wPartnerNpc);
partner_set_goal_pos(playerStatus->position.x, playerStatus->position.z);
func_800EF3D4(0);
set_npc_yaw(wPartnerNpc, 90.0f);
playerStatus->targetYaw = 90.0f;
playerStatus->currentYaw = 90.0f;
playerStatus->spriteFacingAngle = 0.0f;
return ApiStatus_DONE2;
}
return ApiStatus_BLOCK;
}

View File

@ -2,8 +2,29 @@
/// @brief Dry Dry Ruins - Descending Stairs 1 /// @brief Dry Dry Ruins - Descending Stairs 1
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_04_shape.h"
#include "mapfs/isk_04_hit.h"
#include "sprite/npc/BuzzyBeetle.h"
enum {
NPC_BuzzyBeetle_01 = 0,
NPC_BuzzyBeetle_02 = 1,
};
enum {
MV_RuinsLockEntityID = MapVar(0),
};
#define NAMESPACE isk_04 #define NAMESPACE isk_04
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupMusic);
extern EvtScript N(EVS_SetupObstructions);
extern EvtScript N(EVS_MakeEntities);
extern EvtScript N(EVS_SetupDemo);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,18 @@
#include "isk_04.h"
EntryList N(Entrances) = {
[isk_04_ENTRY_0] { 594.0, -80.0, 84.0, 0.0 },
[isk_04_ENTRY_1] { 594.0, -340.0, 84.0, 0.0 },
[isk_04_ENTRY_2] { 524.0, 25.0, -169.0, 170.0 },
[isk_04_ENTRY_3] { 571.0, -80.0, -186.0, 170.0 },
[isk_04_ENTRY_4] { 524.0, -210.0, -169.0, 170.0 },
[isk_04_ENTRY_5] { 543.0, 25.0, 5.0, 90.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.background = &gBackgroundImage,
.tattle = { MSG_MapTattle_isk_04 },
};

View File

@ -0,0 +1,31 @@
#include "isk_04.h"
EvtScript N(EVS_SetupMusic) = {
EVT_IF_EQ(GF_ISK04_SecondWarning, FALSE)
EVT_THREAD
EVT_CALL(FadeInMusic, 1, SONG_TUTANKOOPA_WARNING, 0, 2000, 0, 127)
EVT_CALL(FadeOutMusic, 0, 2000)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_WAIT(20)
EVT_SET_GROUP(EVT_GROUP_00)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_PARTIAL)
EVT_CALL(ShowMessageAtScreenPos, MSG_CH2_00DE, 160, 40)
EVT_SET(GF_ISK04_SecondWarning, TRUE)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_CALL(FadeInMusic, 0, SONG_DRY_DRY_RUINS, 0, 2000, 0, 127)
EVT_CALL(FadeOutMusic, 1, 2000)
EVT_END_THREAD
EVT_RETURN
EVT_END_IF
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,44 @@
#include "isk_04.h"
EvtScript N(EVS_ExitWalk_isk_03_2) = EVT_EXIT_WALK(40, isk_04_ENTRY_0, "isk_03", isk_03_ENTRY_2);
EvtScript N(EVS_ExitWalk_isk_07_1) = EVT_EXIT_WALK(40, isk_04_ENTRY_1, "isk_07", isk_07_ENTRY_1);
EvtScript N(EVS_ExitWalk_isk_06_0) = EVT_EXIT_WALK(40, isk_04_ENTRY_2, "isk_06", isk_06_ENTRY_0);
EvtScript N(EVS_ExitWalk_isk_06_1) = EVT_EXIT_WALK(40, isk_04_ENTRY_3, "isk_06", isk_06_ENTRY_1);
EvtScript N(EVS_ExitWalk_isk_05_0) = EVT_EXIT_WALK(40, isk_04_ENTRY_4, "isk_05", isk_05_ENTRY_0);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_03_2)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_07_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilisw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_06_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiline, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_06_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_05_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilise, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_EnterMap) = {
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_ISK_04)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_CALL(GetDemoState, LVar0)
EVT_IF_NE(LVar0, 0)
EVT_EXEC_WAIT(N(EVS_SetupObstructions))
EVT_EXEC_WAIT(N(EVS_SetupDemo))
EVT_RETURN
EVT_END_IF
EVT_CALL(MakeNpcs, TRUE, EVT_PTR(N(DefaultNPCs)))
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC_WAIT(N(EVS_SetupObstructions))
EVT_EXEC(N(EVS_SetupMusic))
EVT_EXEC(N(EVS_EnterMap))
EVT_WAIT(1)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,81 @@
#include "isk_04.h"
#include "effects.h"
#include "world/common/todo/RemovePadlock.inc.c"
s32 N(ItemList_RuinsKey)[] = {
ITEM_RUINS_KEY,
ITEM_NONE
};
BombTrigger N(BombPos_Wall) = {
.pos = { 510.0f, 25.0f, -184.0f },
.radius = 0.0f
};
EvtScript N(EVS_OnBlast_Wall) = {
EVT_PLAY_EFFECT(EFFECT_BOMBETTE_BREAKING, 0, 63, 22, 1, 10, 30)
EVT_LOOP(10)
EVT_CALL(EnableModel, MODEL_g262, TRUE)
EVT_WAIT(1)
EVT_CALL(EnableModel, MODEL_g262, FALSE)
EVT_WAIT(1)
EVT_END_LOOP
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittne, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(GF_ISK04_BombedWall, TRUE)
EVT_UNBIND
EVT_RETURN
EVT_END
};
EvtScript N(EVS_UnlockDoorPrompt) = {
EVT_CALL(ShowKeyChoicePopup)
EVT_IF_EQ(LVar0, 0)
EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_00D8, 160, 40)
EVT_CALL(CloseChoicePopup)
EVT_RETURN
EVT_END_IF
EVT_IF_EQ(LVar0, -1)
EVT_CALL(CloseChoicePopup)
EVT_RETURN
EVT_END_IF
EVT_CALL(PlaySoundAt, SOUND_269, 0, 600, -330, 100)
EVT_CALL(RemoveKeyItemAt, LVar1)
EVT_SET(GF_ISK04_UnlockedDoor, TRUE)
EVT_SET(LVar0, MV_RuinsLockEntityID)
EVT_CALL(N(RemovePadlock))
EVT_SET(LVar1, 0)
EVT_WAIT(5)
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilittsw, SOUND_265, 0)
EVT_CALL(MakeLerp, 0, 65, 65, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateGroup, MODEL_g304, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittsw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(CloseChoicePopup)
EVT_UNBIND
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SetupObstructions) = {
EVT_IF_EQ(GF_ISK04_BombedWall, FALSE)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_OnBlast_Wall)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Wall)), 1, 0)
EVT_ELSE
EVT_CALL(EnableModel, MODEL_g262, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittne, COLLIDER_FLAGS_UPPER_MASK)
EVT_END_IF
EVT_IF_EQ(GF_ISK04_UnlockedDoor, FALSE)
EVT_CALL(MakeTransformGroup, MODEL_g304)
EVT_BIND_PADLOCK(EVT_PTR(N(EVS_UnlockDoorPrompt)), TRIGGER_WALL_PRESS_A, EVT_ENTITY_INDEX(0), EVT_PTR(N(ItemList_RuinsKey)), 0, 1)
EVT_ELSE
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittsw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(EnableModel, MODEL_g304, FALSE)
EVT_END_IF
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,14 @@
#include "isk_04.h"
#include "entity.h"
#include "effects.h"
EvtScript N(EVS_MakeEntities) = {
EVT_IF_EQ(GF_ISK04_UnlockedDoor, FALSE)
EVT_CALL(MakeEntity, EVT_PTR(Entity_Padlock), 600, -330, 100, 160, MAKE_ENTITY_END)
EVT_SET(MV_RuinsLockEntityID, LVar0)
EVT_END_IF
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 504, -193, 43, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 486, -193, -128, EVT_FLOAT(0.3), LVar0)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,53 @@
#include "isk_04.h"
#include "world/common/enemy/complete/SpikeTop.inc.c"
StaticNpc N(NpcData_BuzzyBeetle_01) = {
.id = NPC_BuzzyBeetle_01,
.settings = &N(NpcSettings_BuzzyBeetle),
.pos = { 561.0f, 25.0f, 47.0f },
.yaw = 355,
.flags = ENEMY_FLAGS_400,
.drops = ISK_BUZZY_BEETLE_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 561, 25, 47 },
.wanderSize = { 30 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 606, 25, 94 },
.detectSize = { 80 },
}
},
.animations = BUZZY_BEETLE_ANIMS,
};
StaticNpc N(NpcData_BuzzyBeetle_02) = {
.id = NPC_BuzzyBeetle_02,
.settings = &N(NpcSettings_BuzzyBeetle),
.pos = { 608.0f, -260.0f, -158.0f },
.yaw = 175,
.flags = ENEMY_FLAGS_400 | ENEMY_FLAGS_800,
.drops = ISK_BUZZY_BEETLE_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 608, -260, -158 },
.wanderSize = { 30 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 596, -260, -203 },
.detectSize = { 80 },
}
},
.animations = BUZZY_BEETLE_ANIMS,
};
NpcGroupList N(DefaultNPCs) = {
NPC_GROUP(N(NpcData_BuzzyBeetle_01), BTL_ISK_PART_1_FORMATION_09, BTL_ISK_PART_1_STAGE_03),
NPC_GROUP(N(NpcData_BuzzyBeetle_02), BTL_ISK_PART_1_FORMATION_09, BTL_ISK_PART_1_STAGE_03),
{}
};

View File

@ -0,0 +1,164 @@
#include "isk_04.h"
#include "world/partners.h"
#include "world/common/todo/SwitchToPartner.inc.c"
EvtScript N(EVS_ProvideDemoInputs) = {
EVT_CALL(EnableStatusMenu, FALSE)
EVT_CALL(DemoSetButtons, BUTTON_C_DOWN)
EVT_WAIT(5)
EVT_CALL(DemoSetButtons, 0)
EVT_WAIT(93)
EVT_CALL(DemoJoystickXY, 2, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 15, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 45, 19)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 75, 11)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 76, 11)
EVT_WAIT(8)
EVT_CALL(DemoJoystickXY, 69, 11)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -2, 21)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -1, -1)
EVT_CALL(N(SwitchToPartner), PARTNER_BOMBETTE)
EVT_WAIT(57)
EVT_CALL(DemoSetButtons, BUTTON_C_DOWN)
EVT_WAIT(4)
EVT_CALL(DemoSetButtons, 0)
EVT_WAIT(34)
EVT_CALL(DemoJoystickXY, -1, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -4, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -23, 3)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -48, 4)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -67, 6)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -76, 7)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -78, 7)
EVT_WAIT(4)
EVT_CALL(DemoJoystickXY, -36, 6)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 1, -1)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 47, -6)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 74, -12)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 63, -9)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, -1, 0)
EVT_WAIT(70)
EVT_CALL(DemoJoystickXY, 0, 0)
EVT_WAIT(2)
EVT_CALL(DemoJoystickXY, 3, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 17, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 38, 0)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 64, -3)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 76, -6)
EVT_WAIT(8)
EVT_CALL(DemoJoystickXY, 77, -5)
EVT_WAIT(3)
EVT_CALL(DemoJoystickXY, 77, -4)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 77, -2)
EVT_WAIT(2)
EVT_CALL(DemoJoystickXY, 77, -1)
EVT_WAIT(1)
EVT_CALL(DemoJoystickXY, 78, -1)
EVT_WAIT(2)
EVT_CALL(DemoJoystickXY, 78, 0)
EVT_IF_EQ(GF_DemoSceneDone, TRUE)
EVT_RETURN
EVT_END_IF
EVT_SET(GF_DemoSceneDone, TRUE)
EVT_CALL(GotoMapSpecial, EVT_PTR("isk_04"), isk_04_ENTRY_5, TRANSITION_2)
EVT_WAIT(323)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_MonitorDemoState) = {
EVT_WAIT(10)
EVT_LOOP(0)
EVT_CALL(GetDemoState, LVar0)
EVT_IF_EQ(LVar0, DEMO_STATE_CHANGE_MAP)
EVT_BREAK_LOOP
EVT_END_IF
EVT_WAIT(1)
EVT_END_LOOP
EVT_IF_EQ(GF_DemoSceneDone, TRUE)
EVT_RETURN
EVT_END_IF
EVT_SET(GF_DemoSceneDone, TRUE)
EVT_CALL(GotoMapSpecial, EVT_PTR("isk_04"), isk_04_ENTRY_2, TRANSITION_3)
EVT_WAIT(313)
EVT_RETURN
EVT_END
};
s32 N(DemoSceneState) = 0;
// duplicate of SetupDemoScene from trd_09
API_CALLABLE(N(SetupDemoScene)) {
PlayerStatus* playerStatus = &gPlayerStatus;
switch (N(DemoSceneState)) {
case 0:
N(DemoSceneState) = 1;
return ApiStatus_BLOCK;
case 1:
case 2:
N(DemoSceneState)++;
return ApiStatus_BLOCK;
case 3:
wPartnerNpc->pos.x = playerStatus->position.x - 30.0f;
wPartnerNpc->pos.z = playerStatus->position.z + 30.0f;
partner_clear_player_tracking(wPartnerNpc);
partner_set_goal_pos(playerStatus->position.x, playerStatus->position.z);
func_800EF3D4(0);
set_npc_yaw(wPartnerNpc, 90.0f);
playerStatus->targetYaw = 90.0f;
playerStatus->currentYaw = 90.0f;
playerStatus->spriteFacingAngle = 0.0f;
return ApiStatus_DONE2;
}
return ApiStatus_BLOCK;
}
EvtScript N(EVS_SetupDemo) = {
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 530, 25, -50)
EVT_CALL(SetCamPitch, CAM_DEFAULT, 12, -3)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(90.0))
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, 25, LVar2)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_THREAD
EVT_WAIT(1)
EVT_LOOP(0)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetCamPitch, CAM_DEFAULT, 12, -3)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, 25, LVar2)
EVT_WAIT(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(N(SetupDemoScene))
EVT_SET(GF_DemoSceneDone, FALSE)
EVT_EXEC(N(EVS_MonitorDemoState))
EVT_EXEC(N(EVS_ProvideDemoInputs))
EVT_RETURN
EVT_END
};

View File

@ -1,161 +0,0 @@
#include "isk_05.h"
#include "sprite.h"
#include "sprite/npc/StoneChomp.h"
static char* N(exit_str_0) = "isk_04";
static char* N(exit_str_1) = "";
#include "world/common/enemy/ai/StoneChompAI.inc.c"
#include "world/area_isk/StoneChompFX.inc.c"
typedef struct StoneChompAmbushIsk05 {
/* 0x00 */ s32 foldID;
/* 0x04 */ s32 workerID;
/* 0x08 */ s32 spriteIndex;
/* 0x0C */ s32 rasterIndex;
/* 0x10 */ Vec3f pos;
/* 0x1C */ Vec3f rot;
/* 0x28 */ Vec3f scale;
/* 0x34 */ f32 renderYaw;
/* 0x38 */ s32 alpha;
/* 0x3C */ f32 width;
/* 0x40 */ f32 height;
} StoneChompAmbushIsk05; // size = 0x44
extern StoneChompAmbushIsk05 N(ChompAmbush);
void func_80241610_97F0E0(void) {
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
Camera* cam = &gCameras[gCurrentCameraID];
FoldImageRecPart foldImg;
SpriteRasterInfo spriteRaster;
Matrix4f transformMtx, tempMtx;
gSPViewport(gMasterGfxPos++, &cam->vp);
if (!(cam->flags & CAMERA_FLAGS_ORTHO)) {
gSPPerspNormalize(gMasterGfxPos++, cam->perspNorm);
}
guMtxF2L(cam->perspectiveMatrix, &gDisplayContext->camPerspMatrix[gCurrentCameraID]);
gSPMatrix(gMasterGfxPos++, &gDisplayContext->camPerspMatrix[gCurrentCameraID],
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gDPPipeSync(gMasterGfxPos++);
gDPSetCycleType(gMasterGfxPos++, G_CYC_1CYCLE);
gSPClearGeometryMode(gMasterGfxPos++, G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING
| G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH);
gSPSetGeometryMode(gMasterGfxPos++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
gSPTexture(gMasterGfxPos++, -1, -1, 0, G_TX_RENDERTILE, G_ON);
gDPSetTextureLOD(gMasterGfxPos++, G_TL_TILE);
gDPSetTexturePersp(gMasterGfxPos++, G_TP_PERSP);
gDPSetTextureFilter(gMasterGfxPos++, G_TF_BILERP);
gDPSetColorDither(gMasterGfxPos++, G_CD_DISABLE);
gDPSetTextureDetail(gMasterGfxPos++, G_TD_CLAMP);
gDPSetTextureConvert(gMasterGfxPos++, G_TC_FILT);
gDPSetCombineKey(gMasterGfxPos++, G_CK_NONE);
gDPSetAlphaCompare(gMasterGfxPos++, G_AC_NONE);
guTranslateF(transformMtx, ambush->pos.x, ambush->pos.y, ambush->pos.z);
guRotateF(tempMtx, ambush->rot.y + gCameras[gCurrentCameraID].currentYaw + ambush->renderYaw, 0.0f, 1.0f, 0.0f);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guRotateF(tempMtx, ambush->rot.z, 0.0f, 0.0f, 1.0f);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guRotateF(tempMtx, ambush->rot.x, 1.0f, 0.0f, 0.0f);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guScaleF(tempMtx, ambush->scale.x, ambush->scale.y, ambush->scale.z);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guMtxF2L(transformMtx, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(gMasterGfxPos++, OS_PHYSICAL_TO_K0(&gDisplayContext->matrixStack[gMatrixListPos++]),
G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
spr_get_npc_raster_info(&spriteRaster, ambush->spriteIndex, ambush->rasterIndex);
foldImg.raster = spriteRaster.raster;
foldImg.palette = spriteRaster.defaultPal;
ambush->width = foldImg.width = spriteRaster.width;
ambush->height = foldImg.height = spriteRaster.height;
foldImg.xOffset = -(spriteRaster.width / 2);
foldImg.yOffset = (spriteRaster.height / 2);
foldImg.opacity = 255;
fold_update(ambush->foldID, FOLD_TYPE_7, 255, 255, 255, ambush->alpha, 0);
fold_appendGfx_component(ambush->foldID, &foldImg, 0, transformMtx);
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
}
ApiStatus func_80241B28_97F5F8(Evt* script, s32 isInitialCall) {
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
SpriteRasterInfo rasterInfo;
Npc* npc = get_npc_unsafe(script->owner1.enemy->npcID);
ambush->spriteIndex = 53; //TODO get spriteID for this constant
ambush->rasterIndex = 0;
spr_get_npc_raster_info(&rasterInfo, ambush->spriteIndex, ambush->rasterIndex);
ambush->width = rasterInfo.width;
ambush->height = rasterInfo.height;
ambush->pos.x = npc->pos.x;
ambush->pos.y = npc->pos.y + (ambush->height * SPRITE_WORLD_SCALE_D * 0.5);
ambush->pos.z = npc->pos.z;
ambush->rot.x = 0;
ambush->rot.y = 0;
ambush->rot.z = 0;
ambush->scale.x = SPRITE_WORLD_SCALE_F;
ambush->scale.y = SPRITE_WORLD_SCALE_F;
ambush->scale.z = SPRITE_WORLD_SCALE_F;
ambush->renderYaw = 85.0f;
ambush->alpha = 0.0f;
ambush->foldID = 0;
ambush->workerID = create_worker_frontUI(NULL, func_80241610_97F0E0);
return ApiStatus_DONE2;
}
ApiStatus func_80241C34_97F704(Evt* script, s32 isInitialCall) {
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
free_worker(ambush->workerID);
return ApiStatus_DONE2;
}
ApiStatus func_80241C5C_97F72C(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 x = evt_get_float_variable(script, *args++);
s32 y = evt_get_float_variable(script, *args++);
s32 z = evt_get_float_variable(script, *args++);
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
ambush->pos.x = x;
ambush->pos.y = y + (ambush->height * SPRITE_WORLD_SCALE_D * 0.5);
ambush->pos.z = z;
return ApiStatus_DONE2;
}
ApiStatus func_80241D44_97F814(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 x = evt_get_float_variable(script, *args++);
s32 y = evt_get_float_variable(script, *args++);
s32 z = evt_get_float_variable(script, *args++);
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
ambush->rot.x = x;
ambush->rot.y = y;
ambush->rot.z = z;
return ApiStatus_DONE2;
}
ApiStatus func_80241DF8_97F8C8(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
ambush->alpha = evt_get_variable(script, *args++);
return ApiStatus_DONE2;
}
ApiStatus func_80241E24_97F8F4(Evt* script, s32 isInitialCall) {
f32 x = evt_get_variable(script, LVar2);
f32 y = evt_get_variable(script, LVar0);
f32 z = evt_get_variable(script, LVar4);
fx_landing_dust(0, x, y, z, 0.0f);
return ApiStatus_DONE2;
}

View File

@ -2,8 +2,21 @@
/// @brief Dry Dry Ruins - Pyramid Stone Room /// @brief Dry Dry Ruins - Pyramid Stone Room
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_05_shape.h"
#include "mapfs/isk_05_hit.h"
#include "sprite/npc/StoneChomp.h"
enum {
NPC_StoneChomp = 1,
};
#define NAMESPACE isk_05 #define NAMESPACE isk_05
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_MakeEntities);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,12 @@
#include "isk_05.h"
EntryList N(Entrances) = {
[isk_05_ENTRY_0] { 463.0, 25.0, -279.0, 320.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.tattle = { MSG_MapTattle_isk_05 },
};

View File

@ -0,0 +1,48 @@
#include "isk_05.h"
EvtScript N(D_80241F10_97F9E0) = EVT_EXIT_WALK(40, isk_05_ENTRY_0, "isk_04", isk_04_ENTRY_4);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(D_80241F10_97F9E0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_EnterWalk_80241F98) = {
EVT_CALL(TranslateGroup, MODEL_g304, 0, 65, 0)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittw, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_ISK_05)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_CALL(MakeNpcs, TRUE, EVT_PTR(N(DefaultNPCs)))
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_CALL(TranslateGroup, MODEL_g304, 0, 65, 0)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittw, COLLIDER_FLAGS_UPPER_MASK)
EVT_IF_EQ(GF_ISK05_Hammer2Block, FALSE)
EVT_CALL(SetGroupEnabled, MODEL_wan1, 1)
EVT_CALL(SetGroupEnabled, MODEL_wan2, 0)
EVT_ELSE
EVT_CALL(SetGroupEnabled, MODEL_wan1, 0)
EVT_CALL(SetGroupEnabled, MODEL_wan2, 1)
EVT_END_IF
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_WAIT(1)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,22 @@
#include "isk_05.h"
#include "effects.h"
#include "entity.h"
EvtScript N(D_80242210_97FCE0) = {
EVT_SET(GF_ISK05_Hammer2Block, TRUE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_MakeEntities) = {
EVT_CALL(MakeItemEntity, ITEM_PYRAMID_STONE, 316, 82, -481, ITEM_SPAWN_MODE_KEY, GF_ISK05_Item_PyramidStone)
EVT_IF_EQ(GF_ISK05_Hammer2Block, FALSE)
EVT_CALL(MakeEntity, EVT_PTR(Entity_Hammer2Block_WideX), 431, 0, -478, 45, MAKE_ENTITY_END)
EVT_CALL(AssignScript, EVT_PTR(N(D_80242210_97FCE0)))
EVT_END_IF
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 415, 196, -290, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 290, 196, -411, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 415, 66, -290, EVT_FLOAT(0.3), LVar0)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,298 @@
#include "isk_05.h"
#include "sprite.h"
#include "world/common/enemy/complete/StoneChomp.inc.c"
typedef struct StoneChompAmbushIsk05 {
/* 0x00 */ s32 foldID;
/* 0x04 */ s32 workerID;
/* 0x08 */ s32 spriteIndex;
/* 0x0C */ s32 rasterIndex;
/* 0x10 */ Vec3f pos;
/* 0x1C */ Vec3f rot;
/* 0x28 */ Vec3f scale;
/* 0x34 */ f32 renderYaw;
/* 0x38 */ s32 alpha;
/* 0x3C */ f32 width;
/* 0x40 */ f32 height;
} StoneChompAmbushIsk05; // size = 0x44
StoneChompAmbushIsk05 N(ChompAmbush) = {};
void N(func_80241610_97F0E0)(void) {
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
Camera* cam = &gCameras[gCurrentCameraID];
FoldImageRecPart foldImg;
SpriteRasterInfo spriteRaster;
Matrix4f transformMtx, tempMtx;
gSPViewport(gMasterGfxPos++, &cam->vp);
if (!(cam->flags & CAMERA_FLAGS_ORTHO)) {
gSPPerspNormalize(gMasterGfxPos++, cam->perspNorm);
}
guMtxF2L(cam->perspectiveMatrix, &gDisplayContext->camPerspMatrix[gCurrentCameraID]);
gSPMatrix(gMasterGfxPos++, &gDisplayContext->camPerspMatrix[gCurrentCameraID],
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gDPPipeSync(gMasterGfxPos++);
gDPSetCycleType(gMasterGfxPos++, G_CYC_1CYCLE);
gSPClearGeometryMode(gMasterGfxPos++, G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING
| G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH);
gSPSetGeometryMode(gMasterGfxPos++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
gSPTexture(gMasterGfxPos++, -1, -1, 0, G_TX_RENDERTILE, G_ON);
gDPSetTextureLOD(gMasterGfxPos++, G_TL_TILE);
gDPSetTexturePersp(gMasterGfxPos++, G_TP_PERSP);
gDPSetTextureFilter(gMasterGfxPos++, G_TF_BILERP);
gDPSetColorDither(gMasterGfxPos++, G_CD_DISABLE);
gDPSetTextureDetail(gMasterGfxPos++, G_TD_CLAMP);
gDPSetTextureConvert(gMasterGfxPos++, G_TC_FILT);
gDPSetCombineKey(gMasterGfxPos++, G_CK_NONE);
gDPSetAlphaCompare(gMasterGfxPos++, G_AC_NONE);
guTranslateF(transformMtx, ambush->pos.x, ambush->pos.y, ambush->pos.z);
guRotateF(tempMtx, ambush->rot.y + gCameras[gCurrentCameraID].currentYaw + ambush->renderYaw, 0.0f, 1.0f, 0.0f);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guRotateF(tempMtx, ambush->rot.z, 0.0f, 0.0f, 1.0f);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guRotateF(tempMtx, ambush->rot.x, 1.0f, 0.0f, 0.0f);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guScaleF(tempMtx, ambush->scale.x, ambush->scale.y, ambush->scale.z);
guMtxCatF(tempMtx, transformMtx, transformMtx);
guMtxF2L(transformMtx, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(gMasterGfxPos++, OS_PHYSICAL_TO_K0(&gDisplayContext->matrixStack[gMatrixListPos++]),
G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
spr_get_npc_raster_info(&spriteRaster, ambush->spriteIndex, ambush->rasterIndex);
foldImg.raster = spriteRaster.raster;
foldImg.palette = spriteRaster.defaultPal;
ambush->width = foldImg.width = spriteRaster.width;
ambush->height = foldImg.height = spriteRaster.height;
foldImg.xOffset = -(spriteRaster.width / 2);
foldImg.yOffset = (spriteRaster.height / 2);
foldImg.opacity = 255;
fold_update(ambush->foldID, FOLD_TYPE_7, 255, 255, 255, ambush->alpha, 0);
fold_appendGfx_component(ambush->foldID, &foldImg, 0, transformMtx);
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
}
API_CALLABLE(N(func_80241B28_97F5F8)) {
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
SpriteRasterInfo rasterInfo;
Npc* npc = get_npc_unsafe(script->owner1.enemy->npcID);
ambush->spriteIndex = SPR_StoneChomp;
ambush->rasterIndex = 0;
spr_get_npc_raster_info(&rasterInfo, ambush->spriteIndex, ambush->rasterIndex);
ambush->width = rasterInfo.width;
ambush->height = rasterInfo.height;
ambush->pos.x = npc->pos.x;
ambush->pos.y = npc->pos.y + (ambush->height * SPRITE_WORLD_SCALE_D * 0.5);
ambush->pos.z = npc->pos.z;
ambush->rot.x = 0;
ambush->rot.y = 0;
ambush->rot.z = 0;
ambush->scale.x = SPRITE_WORLD_SCALE_F;
ambush->scale.y = SPRITE_WORLD_SCALE_F;
ambush->scale.z = SPRITE_WORLD_SCALE_F;
ambush->renderYaw = 85.0f;
ambush->alpha = 0.0f;
ambush->foldID = 0;
ambush->workerID = create_worker_frontUI(NULL, N(func_80241610_97F0E0));
return ApiStatus_DONE2;
}
API_CALLABLE(N(DestroyAmbushWorker)) {
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
free_worker(ambush->workerID);
return ApiStatus_DONE2;
}
API_CALLABLE(N(func_80241C5C_97F72C)) {
Bytecode* args = script->ptrReadPos;
s32 x = evt_get_float_variable(script, *args++);
s32 y = evt_get_float_variable(script, *args++);
s32 z = evt_get_float_variable(script, *args++);
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
ambush->pos.x = x;
ambush->pos.y = y + (ambush->height * SPRITE_WORLD_SCALE_D * 0.5);
ambush->pos.z = z;
return ApiStatus_DONE2;
}
API_CALLABLE(N(func_80241D44_97F814)) {
Bytecode* args = script->ptrReadPos;
s32 x = evt_get_float_variable(script, *args++);
s32 y = evt_get_float_variable(script, *args++);
s32 z = evt_get_float_variable(script, *args++);
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
ambush->rot.x = x;
ambush->rot.y = y;
ambush->rot.z = z;
return ApiStatus_DONE2;
}
API_CALLABLE(N(func_80241DF8_97F8C8)) {
Bytecode* args = script->ptrReadPos;
StoneChompAmbushIsk05* ambush = &N(ChompAmbush);
ambush->alpha = evt_get_variable(script, *args++);
return ApiStatus_DONE2;
}
API_CALLABLE(N(func_80241E24_97F8F4)) {
f32 x = evt_get_variable(script, LVar2);
f32 y = evt_get_variable(script, LVar0);
f32 z = evt_get_variable(script, LVar4);
fx_landing_dust(0, x, y, z, 0.0f);
return ApiStatus_DONE2;
}
EvtScript N(EVS_NpcIdle_StoneChomp) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_20, 1)
EVT_LABEL(100)
EVT_IF_EQ(GF_ISK05_Hammer2Block, FALSE)
EVT_WAIT(1)
EVT_GOTO(100)
EVT_END_IF
EVT_CALL(PlaySound, SOUND_A)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_20, 0)
EVT_THREAD
EVT_WAIT(5)
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilittw, SOUND_266, 0)
EVT_CALL(MakeLerp, 65, 0, 15, EASING_QUADRATIC_IN)
EVT_LABEL(101)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateGroup, MODEL_g304, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(101)
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilittw, SOUND_267, 0)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilittw, COLLIDER_FLAGS_UPPER_MASK)
EVT_END_THREAD
EVT_CALL(DisablePlayerInput, TRUE)
EVT_WAIT(5)
EVT_CALL(N(func_80241B28_97F5F8))
EVT_CALL(MakeLerp, 0, 255, 30, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(N(func_80241DF8_97F8C8), LVar0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(SetGroupEnabled, MODEL_wan1, 0)
EVT_CALL(SetGroupEnabled, MODEL_wan2, 1)
EVT_THREAD
EVT_WAIT(15)
EVT_CALL(MakeLerp, 0, 360, 15, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(N(func_80241D44_97F814), LVar0, 0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_END_THREAD
EVT_CALL(GetNpcPos, NPC_SELF, LVar2, LVar3, LVar4)
EVT_CALL(N(func_80241C5C_97F72C), LVar2, LVar3, LVar4)
EVT_CALL(MakeLerp, LVar3, 0, 30, EASING_QUARTIC_IN)
EVT_LABEL(1)
EVT_CALL(UpdateLerp)
EVT_CALL(SetNpcPos, NPC_SELF, LVar2, LVar0, LVar4)
EVT_CALL(N(func_80241C5C_97F72C), LVar2, LVar0, LVar4)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(N(func_80241E24_97F8F4))
EVT_WAIT(5)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, FALSE)
EVT_CALL(EnableNpcShadow, NPC_SELF, TRUE)
EVT_WAIT(1)
EVT_CALL(N(DestroyAmbushWorker))
EVT_CALL(func_802CFD30, -1, 0, 0, 0, 0, 0)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_StoneChomp)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcDefeat_StoneChomp_Override) = {
EVT_SET(GF_ISK05_Defeated_StoneChomp, TRUE)
EVT_CALL(GetBattleOutcome, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(OUTCOME_PLAYER_WON)
EVT_SET(GF_ISK05_Defeated_StoneChomp, TRUE)
EVT_SET(AF_ISK05_StoneChompDefeated, TRUE)
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilittw, SOUND_265, 0)
EVT_THREAD
EVT_WAIT(5)
EVT_CALL(MakeLerp, 0, 65, 65, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateGroup, MODEL_g304, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittw, COLLIDER_FLAGS_UPPER_MASK)
EVT_END_THREAD
EVT_CALL(N(StoneChompFXC))
EVT_CALL(DoNpcDefeat)
EVT_CASE_EQ(OUTCOME_PLAYER_LOST)
EVT_CASE_EQ(OUTCOME_PLAYER_FLED)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_StoneChomp) = {
EVT_IF_EQ(GF_ISK05_Defeated_StoneChomp, TRUE)
EVT_CALL(RemoveNpc, NPC_SELF)
EVT_RETURN
EVT_END_IF
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_StoneChomp)))
EVT_CALL(BindNpcDefeat, NPC_SELF, EVT_PTR(N(EVS_NpcDefeat_StoneChomp_Override)))
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_CALL(EnableNpcShadow, NPC_SELF, FALSE)
EVT_RETURN
EVT_END
};
StaticNpc N(NpcData_StoneChomp) = {
.id = NPC_StoneChomp,
.settings = &N(NpcSettings_StoneChomp),
.pos = { 385.0f, 71.0f, -330.0f },
.yaw = 320,
.flags = ENEMY_FLAGS_100 | ENEMY_FLAGS_200 | ENEMY_FLAGS_800 | ENEMY_FLAGS_40000,
.init = &N(EVS_NpcInit_StoneChomp),
.initVarCount = 1,
.initVar = { .value = 0 },
.drops = STONE_CHOMP_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 468, 0, -378 },
.wanderSize = { 200 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 468, 0, -378 },
.detectSize = { 400 },
}
},
.animations = STONE_CHOMP_ANIMS,
};
NpcGroupList N(DefaultNPCs) = {
NPC_GROUP(N(NpcData_StoneChomp), BTL_ISK_PART_1_FORMATION_07, BTL_ISK_PART_1_STAGE_09),
{}
};

View File

@ -1,4 +0,0 @@
#include "isk_06.h"
static char* N(exit_str_0) = "isk_04";

View File

@ -2,8 +2,16 @@
/// @brief Dry Dry Ruins - Sand Drainage Room 2 /// @brief Dry Dry Ruins - Sand Drainage Room 2
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_06_shape.h"
#include "mapfs/isk_06_hit.h"
#define NAMESPACE isk_06 #define NAMESPACE isk_06
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupSand);
extern EvtScript N(EVS_SetupSwitch);
extern EvtScript N(EVS_MakeEntities);

View File

@ -0,0 +1,13 @@
#include "isk_06.h"
EntryList N(Entrances) = {
[isk_06_ENTRY_0] { 471.0, -80.0, -290.0, 320.0 },
[isk_06_ENTRY_1] { 509.0, -270.0, -318.0, 320.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.tattle = { MSG_MapTattle_isk_06 },
};

View File

@ -0,0 +1,38 @@
#include "isk_06.h"
EvtScript N(EVS_ExitWalk_isk_04_2) = EVT_EXIT_WALK(40, isk_06_ENTRY_0, "isk_04", isk_04_ENTRY_2);
EvtScript N(EVS_ExitWalk_isk_04_3) = EVT_EXIT_WALK(40, isk_06_ENTRY_1, "isk_04", isk_04_ENTRY_3);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_04_2)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiline, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_04_3)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_ISK_06)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_CALL(SetZoneEnabled, ZONE_o2016, FALSE)
EVT_ELSE
EVT_CALL(SetZoneEnabled, ZONE_C2, FALSE)
EVT_CALL(SetZoneEnabled, ZONE_o2012, FALSE)
EVT_END_IF
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC(N(EVS_SetupSand))
EVT_EXEC(N(EVS_SetupSwitch))
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,11 @@
#include "isk_06.h"
#include "effects.h"
EvtScript N(EVS_MakeEntities) = {
EVT_CALL(MakeItemEntity, ITEM_STAR_PIECE, 335, -130, -550, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_ISK06_Item_StarPiece)
EVT_CALL(MakeItemEntity, ITEM_RUINS_KEY, 304, -270, -434, ITEM_SPAWN_MODE_KEY, GF_ISK06_Item_RuinsKey)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 415, -253, -291, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 291, -253, -415, EVT_FLOAT(0.3), LVar0)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,326 @@
#include "isk_06.h"
EvtScript N(EVS_TexPan_DrippingSand) = {
EVT_CALL(SetTexPanner, MODEL_o2057, TEX_PANNER_4)
EVT_SET(LVar1, 0)
EVT_SET(LVar2, 0)
EVT_LABEL(10)
EVT_ADD(LVar1, -1000)
EVT_ADD(LVar2, 200)
EVT_CALL(SetTexPanOffset, TEX_PANNER_4, TEX_PANNER_MAIN, 0, LVar1)
EVT_CALL(SetTexPanOffset, TEX_PANNER_4, TEX_PANNER_AUX, LVar2, 0)
EVT_WAIT(1)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(EnableModel, MODEL_o2057, FALSE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Camera_LookAtDrain) = {
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 356, -95, -373)
EVT_CALL(SetCamDistance, CAM_DEFAULT, 364)
EVT_CALL(SetCamPosA, CAM_DEFAULT, -623, 192)
EVT_CALL(SetCamPosB, CAM_DEFAULT, 566, 0)
EVT_CALL(SetCamPitch, CAM_DEFAULT, EVT_FLOAT(13.6), EVT_FLOAT(-1.5))
EVT_CALL(SetPanTarget, CAM_DEFAULT, 356, -95, -373)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Camera_LookBelow) = {
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(0.5))
EVT_CALL(SetCamPitch, CAM_DEFAULT, EVT_FLOAT(3.4), EVT_FLOAT(-5.5))
EVT_CALL(SetPanTarget, CAM_DEFAULT, 356, -285, -373)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Camera_Reset) = {
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(90.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 356, -95, -373)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_TexPan_UpperSand) = {
EVT_CALL(SetTexPanner, MODEL_o1689, TEX_PANNER_0)
EVT_CALL(SetTexPanner, MODEL_o1690, TEX_PANNER_0)
EVT_CALL(SetTexPanner, MODEL_o1691, TEX_PANNER_0)
EVT_SET(LVar2, 0)
EVT_CALL(MakeLerp, 0, 500, 60, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_ADD(LVar2, LVar0)
EVT_CALL(SetTexPanOffset, TEX_PANNER_0, TEX_PANNER_MAIN, 0, LVar2)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_LABEL(20)
EVT_ADD(LVar2, 500)
EVT_CALL(SetTexPanOffset, TEX_PANNER_0, TEX_PANNER_MAIN, 0, LVar2)
EVT_WAIT(1)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_GOTO(20)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_TexPan_LowerSand) = {
EVT_CALL(SetTexPanner, MODEL_o1682, TEX_PANNER_1)
EVT_CALL(SetTexPanner, MODEL_o1681, TEX_PANNER_2)
EVT_CALL(SetTexPanner, MODEL_o1675, TEX_PANNER_3)
EVT_CALL(SetTexPanner, MODEL_o1676, TEX_PANNER_3)
EVT_CALL(SetTexPanner, MODEL_o1677, TEX_PANNER_3)
EVT_SET(LVar2, 0)
EVT_SET(LVar3, 0)
EVT_SET(LVar4, 0)
EVT_LABEL(10)
EVT_ADD(LVar2, 0x1800)
EVT_ADD(LVar3, -500)
EVT_ADD(LVar4, -100)
EVT_CALL(SetTexPanOffset, TEX_PANNER_1, TEX_PANNER_MAIN, 0, LVar2)
EVT_CALL(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_MAIN, 0, LVar3)
EVT_CALL(SetTexPanOffset, TEX_PANNER_3, TEX_PANNER_MAIN, 0, LVar4)
EVT_WAIT(1)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_GOTO(10)
EVT_END_IF
EVT_SET(LVar5, 0x00001800)
EVT_SET(LVar6, -500)
EVT_SET(LVar7, -100)
EVT_LOOP(10)
EVT_ADD(LVar5, -512)
EVT_ADD(LVar6, 50)
EVT_ADD(LVar7, 10)
EVT_ADD(LVar2, LVar5)
EVT_ADD(LVar3, LVar6)
EVT_ADD(LVar4, LVar7)
EVT_CALL(SetTexPanOffset, TEX_PANNER_1, TEX_PANNER_MAIN, 0, LVar2)
EVT_CALL(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_MAIN, 0, LVar3)
EVT_CALL(SetTexPanOffset, TEX_PANNER_3, TEX_PANNER_MAIN, 0, LVar4)
EVT_WAIT(1)
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_RescaleDrainingSand) = {
EVT_CALL(MakeLerp, 0, 100, 60, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(ScaleModel, MODEL_o1690, EVT_FLOAT(1.0), LVar0, EVT_FLOAT(1.0))
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_CollapseSandPile) = {
EVT_CALL(MakeLerp, 0, 50, 10, EASING_QUADRATIC_OUT)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 100)
EVT_SETF(LVar2, 1)
EVT_ADDF(LVar2, LVar0)
EVT_SETF(LVar3, 1)
EVT_SUBF(LVar3, LVar0)
EVT_CALL(ScaleModel, MODEL_o1681, LVar2, LVar3, LVar2)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_DrainUpperSand) = {
EVT_CALL(MakeLerp, 0, -100, 60, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 10)
EVT_SETF(LVar2, 0)
EVT_SUBF(LVar2, LVar0)
EVT_CALL(TranslateGroup, MODEL_g279, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o1959, 0, LVar2, 0)
EVT_CALL(TranslateModel, MODEL_o1960, 0, LVar2, 0)
EVT_CALL(TranslateModel, MODEL_o1961, 0, LVar2, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(MakeLerp, -100, -250, 30, EASING_LINEAR)
EVT_LABEL(20)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 10)
EVT_SETF(LVar2, 0)
EVT_SUBF(LVar2, LVar0)
EVT_CALL(TranslateGroup, MODEL_g279, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o1959, 0, LVar2, 0)
EVT_CALL(TranslateModel, MODEL_o1960, 0, LVar2, 0)
EVT_CALL(TranslateModel, MODEL_o1961, 0, LVar2, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(20)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_FillLowerSand) = {
EVT_CALL(MakeTransformGroup, MODEL_g277)
EVT_CALL(MakeLerp, -200, 0, 120, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_DIVF(LVar0, 10)
EVT_CALL(TranslateGroup, MODEL_g277, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o1681, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_LowerSandColumn) = {
EVT_CALL(MakeLerp, 0, -200, 10, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_o1682, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Scene_DrainSand) = {
EVT_WAIT(5)
EVT_CALL(InterpPlayerYaw, 98, 0)
EVT_CALL(EnableModel, MODEL_o1675, TRUE)
EVT_CALL(EnableModel, MODEL_o1676, TRUE)
EVT_CALL(EnableModel, MODEL_o1677, TRUE)
EVT_CALL(EnableModel, MODEL_o1678, TRUE)
EVT_CALL(EnableModel, MODEL_o1679, TRUE)
EVT_CALL(EnableModel, MODEL_o1680, TRUE)
EVT_CALL(EnableModel, MODEL_o1681, TRUE)
EVT_CALL(EnableModel, MODEL_o1682, TRUE)
EVT_EXEC(N(EVS_Camera_LookAtDrain))
EVT_WAIT(30)
EVT_EXEC(N(EVS_TexPan_UpperSand))
EVT_EXEC(N(EVS_RescaleDrainingSand))
EVT_EXEC(N(EVS_DrainUpperSand))
EVT_CALL(PlaySound, SOUND_53)
EVT_WAIT(75)
EVT_EXEC(N(EVS_Camera_LookBelow))
EVT_WAIT(30)
EVT_EXEC(N(EVS_TexPan_LowerSand))
EVT_EXEC(N(EVS_FillLowerSand))
EVT_CALL(PlaySound, SOUND_453)
EVT_WAIT(120)
EVT_EXEC(N(EVS_LowerSandColumn))
EVT_WAIT(5)
EVT_EXEC(N(EVS_CollapseSandPile))
EVT_CALL(PlaySound, SOUND_453)
EVT_WAIT(10)
EVT_CALL(EnableModel, MODEL_o1686, FALSE)
EVT_CALL(EnableModel, MODEL_o1687, FALSE)
EVT_CALL(EnableModel, MODEL_o1688, FALSE)
EVT_CALL(EnableModel, MODEL_o1689, FALSE)
EVT_CALL(EnableModel, MODEL_o1690, FALSE)
EVT_CALL(EnableModel, MODEL_o1691, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1689, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1690, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1691, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o1675, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o1676, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o1677, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(EnableModel, MODEL_o2047, TRUE)
EVT_CALL(EnableModel, MODEL_o2048, TRUE)
EVT_CALL(EnableModel, MODEL_o2049, TRUE)
EVT_CALL(EnableModel, MODEL_o2050, TRUE)
EVT_CALL(EnableModel, MODEL_o2051, TRUE)
EVT_CALL(EnableModel, MODEL_o2052, FALSE)
EVT_CALL(EnableModel, MODEL_o2053, FALSE)
EVT_CALL(EnableModel, MODEL_o2054, FALSE)
EVT_CALL(EnableModel, MODEL_o2055, FALSE)
EVT_CALL(EnableModel, MODEL_o2056, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2077, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2078, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_CALL(SetZoneEnabled, ZONE_o2012, FALSE)
EVT_CALL(SetZoneEnabled, ZONE_o2016, TRUE)
EVT_WAIT(20)
EVT_EXEC(N(EVS_Camera_Reset))
EVT_WAIT(5)
EVT_CALL(EnableModel, MODEL_o1681, FALSE)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_UNBIND
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SetupSand) = {
EVT_SET(AF_ISK06_SandSwitchActivated, FALSE)
EVT_CALL(MakeTransformGroup, MODEL_g279)
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_Scene_DrainSand)), TRIGGER_AREA_FLAG_SET, AF_ISK06_SandSwitchActivated, 1, 0)
EVT_CALL(EnableModel, MODEL_o1675, FALSE)
EVT_CALL(EnableModel, MODEL_o1676, FALSE)
EVT_CALL(EnableModel, MODEL_o1677, FALSE)
EVT_CALL(EnableModel, MODEL_o1678, FALSE)
EVT_CALL(EnableModel, MODEL_o1679, FALSE)
EVT_CALL(EnableModel, MODEL_o1680, FALSE)
EVT_CALL(EnableModel, MODEL_o1681, FALSE)
EVT_CALL(EnableModel, MODEL_o1682, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1675, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1676, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1677, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(EnableModel, MODEL_o2047, FALSE)
EVT_CALL(EnableModel, MODEL_o2048, FALSE)
EVT_CALL(EnableModel, MODEL_o2049, FALSE)
EVT_CALL(EnableModel, MODEL_o2050, FALSE)
EVT_CALL(EnableModel, MODEL_o2051, FALSE)
EVT_EXEC(N(EVS_TexPan_DrippingSand))
EVT_ELSE
EVT_CALL(EnableModel, MODEL_o1686, FALSE)
EVT_CALL(EnableModel, MODEL_o1687, FALSE)
EVT_CALL(EnableModel, MODEL_o1688, FALSE)
EVT_CALL(EnableModel, MODEL_o1689, FALSE)
EVT_CALL(EnableModel, MODEL_o1690, FALSE)
EVT_CALL(EnableModel, MODEL_o1691, FALSE)
EVT_CALL(EnableModel, MODEL_o1681, FALSE)
EVT_CALL(EnableModel, MODEL_o1682, FALSE)
EVT_CALL(EnableModel, MODEL_o2052, FALSE)
EVT_CALL(EnableModel, MODEL_o2053, FALSE)
EVT_CALL(EnableModel, MODEL_o2054, FALSE)
EVT_CALL(EnableModel, MODEL_o2055, FALSE)
EVT_CALL(EnableModel, MODEL_o2056, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2077, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2078, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(EnableModel, MODEL_o2057, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1689, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1690, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1691, COLLIDER_FLAGS_UPPER_MASK)
EVT_END_IF
EVT_IF_LT(GB_StoryProgress, STORY_CH2_DRAINED_SECOND_SAND_ROOM)
EVT_ELSE
EVT_CALL(EnableModel, MODEL_o2057, FALSE)
EVT_END_IF
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,57 @@
#include "isk_06.h"
extern EvtScript N(EVS_OnTouch_DrainSwitch);
EvtScript N(EVS_SetupSwitch) = {
EVT_CALL(ParentColliderToModel, COLLIDER_o2090, MODEL_g336)
EVT_CALL(ParentColliderToModel, COLLIDER_o2091, MODEL_g336)
EVT_IF_EQ(AF_ISK06_SandSwitchActivated, FALSE)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_OnTouch_DrainSwitch)), TRIGGER_FLOOR_TOUCH, COLLIDER_o2091, 1, 0)
EVT_ELSE
EVT_CALL(TranslateModel, MODEL_g336, 0, -14, 0)
EVT_CALL(UpdateColliderTransform, COLLIDER_o2090)
EVT_CALL(UpdateColliderTransform, COLLIDER_o2091)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OnTouch_DrainSwitch) = {
EVT_CALL(IsPlayerOnValidFloor, LVar0)
EVT_IF_EQ(LVar0, FALSE)
EVT_RETURN
EVT_END_IF
EVT_CALL(DisablePlayerInput, TRUE)
EVT_LABEL(5)
EVT_WAIT(1)
EVT_CALL(PartnerCanUseAbility, LVar0)
EVT_IF_EQ(LVar0, TRUE)
EVT_GOTO(5)
EVT_END_IF
EVT_CALL(GetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2)
EVT_IF_LT(LVar1, -80)
EVT_THREAD
EVT_CALL(DisablePartnerAI, 0)
EVT_CALL(SetNpcJumpscale, NPC_PARTNER, EVT_FLOAT(2.5))
EVT_CALL(NpcJump0, NPC_PARTNER, 343, -80, -421, 10)
EVT_WAIT(10)
EVT_CALL(EnablePartnerAI)
EVT_END_THREAD
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_o2091, SOUND_208A, 0)
EVT_CALL(MakeLerp, 0, -14, 30, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_g336, 0, LVar0, 0)
EVT_CALL(UpdateColliderTransform, COLLIDER_o2090)
EVT_CALL(UpdateColliderTransform, COLLIDER_o2091)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_o2091, SOUND_208B, 0)
EVT_SET(AF_ISK06_SandSwitchActivated, TRUE)
EVT_UNBIND
EVT_RETURN
EVT_END
};

View File

@ -1,35 +0,0 @@
#include "isk_07.h"
static char* N(exit_str_0) = "isk_08";
static char* N(exit_str_1) = "isk_04";
#include "world/common/todo/SetNpcB5_3.inc.c"
ApiStatus func_80240014_982454(Evt* script, s32 isInitialCall) {
EncounterStatus* encounterStatus = &gCurrentEncounter;
s32 i, j;
s32 count;
script->varTable[1] = 0;
count = 0;
for (i = 0; i < encounterStatus->numEncounters; i++) {
Encounter* encounter = encounterStatus->encounterList[i];
if (encounter != NULL) {
s32 hasEnemy = FALSE;
for (j = 0; j < encounter->count; j++) {
if (encounter->enemy[j] != NULL) {
hasEnemy = TRUE;
}
}
if (hasEnemy) {
count++;
}
}
}
if (count != 1) {
return ApiStatus_DONE2;
}
script->varTable[1] = count;
return ApiStatus_DONE2;
}

View File

@ -1,3 +0,0 @@
#include "isk_07.h"
#include "world/common/todo/RemovePadlock.inc.c"

View File

@ -1,11 +0,0 @@
#include "isk_07.h"
#include "mapfs/isk_07_hit.h"
ApiStatus func_802400F0_982530(Evt* script, s32 isInitialCall) {
if (gCollisionStatus.currentFloor == COLLIDER_o2022) {
return ApiStatus_BLOCK;
} else {
return ApiStatus_DONE2;
}
}

View File

@ -2,8 +2,37 @@
/// @brief Dry Dry Ruins - Sarcophagus Hall 2 /// @brief Dry Dry Ruins - Sarcophagus Hall 2
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_07_shape.h"
#include "mapfs/isk_07_hit.h"
#include "sprite/npc/Pokey.h"
enum {
NPC_Pokey_01 = 0,
NPC_Pokey_02 = 1,
NPC_Pokey_03 = 2,
};
enum {
MV_LockEntityID = MapVar(0),
};
enum {
MF_StairsFlipped = MapFlag(0),
};
#define NAMESPACE isk_07 #define NAMESPACE isk_07
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupLock);
extern EvtScript N(EVS_SetupStairs);
extern EvtScript N(EVS_SetupSwitch);
extern EvtScript N(EVS_SetupSarcophagi);
extern EvtScript N(EVS_OpenEntryDoor);
extern EvtScript N(EVS_ShutEntryDoor);
extern EvtScript N(EVS_MakeEntities);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,13 @@
#include "isk_07.h"
EntryList N(Entrances) = {
[isk_07_ENTRY_0] { -283.0, -390.0, 530.0, 110.0 },
[isk_07_ENTRY_1] { 560.0, -340.0, 217.0, 210.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.tattle = { MSG_MapTattle_isk_07 },
};

View File

@ -0,0 +1,37 @@
#include "isk_07.h"
EvtScript N(EVS_ExitWalk_isk_08_2) = EVT_EXIT_WALK(40, isk_07_ENTRY_0, "isk_08", isk_08_ENTRY_2);
EvtScript N(EVS_ExitWalk_isk_04_1) = EVT_EXIT_WALK(40, isk_07_ENTRY_1, "isk_04", isk_04_ENTRY_1);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_08_2)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_isk_04_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_DRY_DRY_RUINS)
EVT_CALL(SetSpriteShading, SHADING_ISK_07)
EVT_SETUP_CAMERA_ALT_NO_LEAD()
EVT_IF_EQ(GF_ISK07_Defeated_Mummies, FALSE)
EVT_CALL(MakeNpcs, TRUE, EVT_PTR(N(DefaultNPCs)))
EVT_END_IF
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC(N(EVS_SetupLock))
EVT_EXEC(N(EVS_SetupStairs))
EVT_EXEC(N(EVS_SetupSwitch))
EVT_EXEC(N(EVS_SetupSarcophagi))
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH2_SOLVED_ARTIFACT_PUZZLE)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_CASE_LT(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_RUINS_BASEMENT, 0, 8)
EVT_CASE_GE(STORY_CH2_DEFEATED_TUTANKOOPA)
EVT_CALL(SetMusicTrack, 0, SONG_DRY_DRY_RUINS, 0, 8)
EVT_END_SWITCH
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,46 @@
#include "isk_07.h"
#include "entity.h"
#include "effects.h"
EvtScript N(EVS_HitBlock_Trigger) = {
EVT_SET(GF_ISK07_OpenedSarcophagi, TRUE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SmashBlock_Stone) = {
EVT_SET(GF_ISK07_Hammer2Block, TRUE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_MakeEntities) = {
EVT_IF_EQ(GF_ISK07_UnlockedDoor, FALSE)
EVT_CALL(MakeEntity, EVT_PTR(Entity_Padlock), -300, -380, 530, 50, MAKE_ENTITY_END)
EVT_SET(MV_LockEntityID, LVar0)
EVT_END_IF
EVT_IF_EQ(GF_ISK07_Hammer2Block, FALSE)
EVT_CALL(MakeEntity, EVT_PTR(Entity_Hammer2Block_WideX), 470, -250, 270, 150, MAKE_ENTITY_END)
EVT_CALL(AssignScript, EVT_PTR(N(EVS_SmashBlock_Stone)))
EVT_END_IF
EVT_IF_EQ(GF_ISK07_OpenedSarcophagi, FALSE)
EVT_CALL(MakeEntity, EVT_PTR(Entity_TriggerBlock), -250, -330, 545, -25, MAKE_ENTITY_END)
EVT_CALL(AssignScript, EVT_PTR(N(EVS_HitBlock_Trigger)))
EVT_END_IF
EVT_IF_EQ(GF_ISK07_Defeated_Mummies, TRUE)
EVT_CALL(MakeItemEntity, ITEM_RUINS_KEY, -250, -390, 545, ITEM_SPAWN_MODE_KEY, GF_ISK07_Item_RuinsKey)
EVT_END_IF
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 415, -193, 291, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 291, -193, 415, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 131, -193, 489, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, -44, -193, 505, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, -214, -193, 459, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 415, -323, 291, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 291, -323, 415, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, 131, -323, 489, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, -44, -323, 505, EVT_FLOAT(0.3), LVar0)
EVT_PLAY_EFFECT(EFFECT_FLAME, 1, -214, -323, 459, EVT_FLOAT(0.3), LVar0)
EVT_CALL(MakeItemEntity, ITEM_ARTIFACT, 490, -250, 215, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_ISK07_Item_Artifact)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,249 @@
#include "isk_07.h"
#include "world/common/enemy/complete/PokeyMummy.inc.c"
API_CALLABLE(N(IsLastEnemy)) {
EncounterStatus* encounterStatus = &gCurrentEncounter;
s32 livingEncounters;
s32 i, j;
script->varTable[1] = FALSE;
livingEncounters = 0;
for (i = 0; i < encounterStatus->numEncounters; i++) {
Encounter* encounter = encounterStatus->encounterList[i];
if (encounter != NULL) {
s32 hasEnemy = FALSE;
for (j = 0; j < encounter->count; j++) {
if (encounter->enemy[j] != NULL) {
hasEnemy = TRUE;
}
}
if (hasEnemy) {
livingEncounters++;
}
}
}
if (livingEncounters != 1) {
return ApiStatus_DONE2;
} else {
script->varTable[1] = TRUE;
return ApiStatus_DONE2;
}
}
EvtScript N(EVS_NpcDefeat_Pokey_01) = {
EVT_CALL(GetBattleOutcome, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(OUTCOME_PLAYER_WON)
EVT_IF_EQ(GF_ISK07_Defeated_Mummies, FALSE)
EVT_THREAD
EVT_CALL(N(IsLastEnemy))
EVT_IF_EQ(LVar1, TRUE)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(PlaySound, SOUND_B)
EVT_WAIT(30)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_PARTIAL)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(2.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, -150, -390, 571)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, -251, -390, 553)
EVT_CALL(SetPanTarget, CAM_DEFAULT, -251, -390, 553)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_WAIT(45)
EVT_CALL(MakeItemEntity, ITEM_RUINS_KEY, -250, -240, 545, ITEM_SPAWN_MODE_FALL_NEVER_VANISH, GF_ISK07_Item_RuinsKey)
EVT_SET(GF_ISK07_Defeated_Mummies, TRUE)
EVT_EXEC_WAIT(N(EVS_OpenEntryDoor))
EVT_WAIT(60)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(90.0))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 0)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_END_IF
EVT_END_THREAD
EVT_END_IF
EVT_CALL(DoNpcDefeat)
EVT_CASE_EQ(OUTCOME_PLAYER_FLED)
EVT_CALL(OnPlayerFled, 0)
EVT_CASE_EQ(OUTCOME_ENEMY_FLED)
EVT_CALL(SetEnemyFlagBits, NPC_SELF, ENEMY_FLAGS_FLED, 1)
EVT_CALL(RemoveNpc, NPC_SELF)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Pokey_01) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 1)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_LABEL(1)
EVT_IF_EQ(AF_ISK07_MummiesReleased, FALSE)
EVT_WAIT(1)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(SetNpcYaw, NPC_SELF, 105)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, FALSE)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 0)
EVT_CALL(NpcMoveTo, NPC_SELF, -140, 528, 10)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, FALSE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_40000000, 1)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_PokeyMummy)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Pokey_02) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 1)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_LABEL(1)
EVT_IF_EQ(AF_ISK07_MummiesReleased, FALSE)
EVT_WAIT(1)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, FALSE)
EVT_WAIT(15)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 0)
EVT_CALL(NpcMoveTo, NPC_SELF, 47, 543, 10)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, FALSE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_40000000, 1)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_PokeyMummy)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Pokey_03) = {
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 1)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, TRUE)
EVT_LABEL(1)
EVT_IF_EQ(AF_ISK07_MummiesReleased, FALSE)
EVT_WAIT(1)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_2, FALSE)
EVT_WAIT(15)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_100000 | ENEMY_FLAGS_IGNORE_TOUCH | ENEMY_FLAGS_IGNORE_JUMP | ENEMY_FLAGS_IGNORE_HAMMER | ENEMY_FLAGS_10000000, 0)
EVT_CALL(NpcMoveTo, NPC_SELF, 227, 489, 10)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40, FALSE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAGS_40000000, 1)
EVT_CALL(BindNpcAI, NPC_SELF, EVT_PTR(N(EVS_NpcAI_PokeyMummy)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Pokey_01) = {
EVT_IF_EQ(GF_ISK07_Defeated_Mummies, FALSE)
EVT_CALL(SetSelfEnemyFlags, ENEMY_FLAGS_800000)
EVT_END_IF
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Pokey_01)))
EVT_CALL(BindNpcDefeat, NPC_SELF, EVT_PTR(N(EVS_NpcDefeat_Pokey_01)))
EVT_CALL(InterpNpcYaw, NPC_SELF, 100, 0)
EVT_CALL(func_800457C4, 3)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Pokey_02) = {
EVT_IF_EQ(GF_ISK07_Defeated_Mummies, FALSE)
EVT_CALL(SetSelfEnemyFlags, ENEMY_FLAGS_800000)
EVT_END_IF
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Pokey_02)))
EVT_CALL(BindNpcDefeat, NPC_SELF, EVT_PTR(N(EVS_NpcDefeat_Pokey_01)))
EVT_CALL(func_800457C4, 3)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Pokey_03) = {
EVT_IF_EQ(GF_ISK07_Defeated_Mummies, FALSE)
EVT_CALL(SetSelfEnemyFlags, ENEMY_FLAGS_800000)
EVT_END_IF
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Pokey_03)))
EVT_CALL(BindNpcDefeat, NPC_SELF, EVT_PTR(N(EVS_NpcDefeat_Pokey_01)))
EVT_CALL(func_800457C4, 3)
EVT_RETURN
EVT_END
};
StaticNpc N(NpcData_Pokey_01) = {
.id = NPC_Pokey_01,
.settings = &N(NpcSettings_PokeyMummy),
.pos = { -132.0f, -390.0f, 492.0f },
.yaw = 304,
.flags = ENEMY_FLAGS_200 | ENEMY_FLAGS_800,
.init = &N(EVS_NpcInit_Pokey_01),
.drops = POKEY_MUMMY_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { -301, 0, 427 },
.wanderSize = { 200 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { -301, 0, 427 },
.detectSize = { 400 },
}
},
.animations = POKEY_MUMMY_ANIMS,
};
StaticNpc N(NpcData_Pokey_02) = {
.id = NPC_Pokey_02,
.settings = &N(NpcSettings_PokeyMummy),
.pos = { 45.0f, -390.0f, 507.0f },
.yaw = 263,
.flags = ENEMY_FLAGS_200 | ENEMY_FLAGS_800,
.init = &N(EVS_NpcInit_Pokey_02),
.drops = POKEY_MUMMY_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 52, -390, 573 },
.wanderSize = { 50 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 52, -390, 573 },
.detectSize = { 150 },
}
},
.animations = POKEY_MUMMY_ANIMS,
};
StaticNpc N(NpcData_Pokey_03) = {
.id = NPC_Pokey_03,
.settings = &N(NpcSettings_PokeyMummy),
.pos = { 220.0f, -389.0f, 467.0f },
.yaw = 244,
.flags = ENEMY_FLAGS_200 | ENEMY_FLAGS_800,
.init = &N(EVS_NpcInit_Pokey_03),
.drops = POKEY_MUMMY_DROPS,
.territory = {
.wander = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 243, -390, 523 },
.wanderSize = { 50 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 243, -390, 523 },
.detectSize = { 150 },
}
},
.animations = POKEY_MUMMY_ANIMS,
};
NpcGroupList N(DefaultNPCs) = {
NPC_GROUP(N(NpcData_Pokey_01), BTL_ISK_PART_1_FORMATION_00, BTL_ISK_PART_1_STAGE_0C),
NPC_GROUP(N(NpcData_Pokey_02), BTL_ISK_PART_1_FORMATION_02, BTL_ISK_PART_1_STAGE_0C),
NPC_GROUP(N(NpcData_Pokey_03), BTL_ISK_PART_1_FORMATION_03, BTL_ISK_PART_1_STAGE_0C),
{}
};

View File

@ -0,0 +1,70 @@
#include "isk_07.h"
EvtScript N(EVS_RedStairs_FlipCCW) = {
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1994, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o2000, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(PlaySoundAtCollider, COLLIDER_o2000, SOUND_80000002, 0)
EVT_CALL(MakeLerp, 0, 90, 30, EASING_QUADRATIC_OUT)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(RotateModel, MODEL_g311, LVar0, 0, 0, 1)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(StopSound, SOUND_80000002)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_RedStairs_FlipCW) = {
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o1994, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2000, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(PlaySoundAtCollider, COLLIDER_o1994, SOUND_80000002, 0)
EVT_CALL(MakeLerp, 90, 0, 30, EASING_QUADRATIC_OUT)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(RotateModel, MODEL_g311, LVar0, 0, 0, 1)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(StopSound, SOUND_80000002)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_FlipRedStairs) = {
EVT_CALL(InterpCamTargetPos, 0, 1, 369, -349, 369, 20)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 369, -349, 369)
EVT_CALL(SetPanTarget, CAM_DEFAULT, 369, -349, 369)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_IF_EQ(MF_StairsFlipped, FALSE)
EVT_EXEC_WAIT(N(EVS_RedStairs_FlipCCW))
EVT_SET(MF_StairsFlipped, TRUE)
EVT_ELSE
EVT_EXEC_WAIT(N(EVS_RedStairs_FlipCW))
EVT_SET(MF_StairsFlipped, FALSE)
EVT_END_IF
EVT_CALL(ShakeCam, CAM_DEFAULT, 0, 3, EVT_FLOAT(0.1))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 0)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_SET(AF_ISK07_FlippingRedStairs, FALSE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SetupStairs) = {
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o1994, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2000, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(MF_StairsFlipped, FALSE)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_FlipRedStairs)), TRIGGER_AREA_FLAG_SET, AF_ISK07_FlippingRedStairs, 1, 0)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,95 @@
#include "isk_07.h"
#include "world/common/todo/RemovePadlock.inc.c"
s32 N(ItemList_RuinsKey)[] = {
ITEM_RUINS_KEY,
ITEM_NONE
};
EvtScript N(EVS_UnlockPrompt_RuinsDoor) = {
EVT_SET_GROUP(EVT_GROUP_00)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_PARTIAL)
EVT_CALL(ShowKeyChoicePopup)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(0)
EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_00D8, 160, 40)
EVT_CALL(CloseChoicePopup)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_RETURN
EVT_CASE_EQ(-1)
EVT_CALL(CloseChoicePopup)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_RETURN
EVT_END_SWITCH
EVT_CALL(PlaySoundAt, SOUND_269, 0, -300, -380, 530)
EVT_CALL(RemoveKeyItemAt, LVar1)
EVT_SET(GF_ISK07_UnlockedDoor, TRUE)
EVT_SET(LVar0, MV_LockEntityID)
EVT_CALL(N(RemovePadlock))
EVT_SET(LVar1, 0)
EVT_WAIT(5)
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilittw, SOUND_265, 0)
EVT_CALL(MakeLerp, 0, 65, 65, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateGroup, MODEL_g310, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(CloseChoicePopup)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_UNBIND
EVT_RETURN
EVT_END
};
EvtScript N(EVS_SetupLock) = {
EVT_IF_EQ(GF_ISK07_UnlockedDoor, FALSE)
EVT_CALL(MakeTransformGroup, MODEL_g310)
EVT_BIND_PADLOCK(EVT_PTR(N(EVS_UnlockPrompt_RuinsDoor)), TRIGGER_WALL_PRESS_A, EVT_ENTITY_INDEX(0), EVT_PTR(N(ItemList_RuinsKey)), 0, 1)
EVT_ELSE
EVT_CALL(EnableModel, MODEL_g310, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittw, COLLIDER_FLAGS_UPPER_MASK)
EVT_END_IF
EVT_CALL(TranslateModel, MODEL_o2057, 0, 65, 0)
EVT_CALL(TranslateModel, MODEL_o2058, 0, 65, 0)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitte, COLLIDER_FLAGS_UPPER_MASK)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ShutEntryDoor) = {
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilitte, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilitte, SOUND_266, 0)
EVT_CALL(MakeLerp, 65, 0, 15, EASING_QUADRATIC_IN)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_o2057, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o2058, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_deilitte, SOUND_267, 0)
EVT_CALL(ShakeCam, CAM_DEFAULT, 0, 10, EVT_FLOAT(0.3))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OpenEntryDoor) = {
EVT_CALL(MakeLerp, 0, 65, 15, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_o2057, 0, LVar0, 0)
EVT_CALL(TranslateModel, MODEL_o2058, 0, LVar0, 0)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitte, COLLIDER_FLAGS_UPPER_MASK)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,55 @@
#include "isk_07.h"
extern EvtScript N(EVS_OnTouch_StairSwitch);
API_CALLABLE(N(WaitForPlayerTouchingGround)) {
if (gCollisionStatus.currentFloor == COLLIDER_o2022) {
return ApiStatus_BLOCK;
} else {
return ApiStatus_DONE2;
}
}
EvtScript N(EVS_SetupSwitch) = {
EVT_CALL(ParentColliderToModel, COLLIDER_o2022, MODEL_g313)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_OnTouch_StairSwitch)), TRIGGER_FLOOR_TOUCH, COLLIDER_o2022, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OnTouch_StairSwitch) = {
EVT_CALL(IsPlayerOnValidFloor, LVar0)
EVT_IF_EQ(LVar0, FALSE)
EVT_RETURN
EVT_END_IF
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(PlaySoundAtCollider, COLLIDER_o2022, SOUND_208A, 0)
EVT_CALL(MakeLerp, 0, -14, 30, EASING_LINEAR)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_g313, 0, LVar0, 0)
EVT_CALL(UpdateColliderTransform, COLLIDER_o2022)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(PlaySoundAtCollider, COLLIDER_o2022, SOUND_208B, 0)
EVT_SET(AF_ISK07_FlippingRedStairs, TRUE)
EVT_LABEL(15)
EVT_WAIT(1)
EVT_IF_EQ(AF_ISK07_FlippingRedStairs, TRUE)
EVT_GOTO(15)
EVT_END_IF
EVT_CALL(MakeLerp, -14, 0, 5, EASING_LINEAR)
EVT_LABEL(20)
EVT_CALL(UpdateLerp)
EVT_CALL(TranslateModel, MODEL_g313, 0, LVar0, 0)
EVT_CALL(UpdateColliderTransform, COLLIDER_o2022)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 1)
EVT_GOTO(20)
EVT_END_IF
EVT_CALL(N(WaitForPlayerTouchingGround))
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,139 @@
#include "isk_07.h"
extern EvtScript N(EVS_OpenSarcophagus1);
extern EvtScript N(EVS_OpenSarcophagus2);
extern EvtScript N(EVS_OpenSarcophagus3);
EvtScript N(EVS_SetupSarcophagi) = {
EVT_IF_EQ(GF_ISK07_OpenedSarcophagi, FALSE)
EVT_SET(AF_ISK07_OpeningSarcophagus1, FALSE)
EVT_SET(AF_ISK07_OpeningSarcophagus2, FALSE)
EVT_SET(AF_ISK07_OpeningSarcophagus3, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2039, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2040, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2041, COLLIDER_FLAGS_UPPER_MASK)
EVT_LABEL(10)
EVT_IF_EQ(GF_ISK07_OpenedSarcophagi, FALSE)
EVT_WAIT(1)
EVT_GOTO(10)
EVT_END_IF
EVT_CALL(PlaySound, SOUND_A)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(ShakeCam, CAM_DEFAULT, 0, 30, EVT_FLOAT(1.0))
EVT_CALL(SetNpcYaw, NPC_Pokey_01, 105)
EVT_CALL(SetNpcFlagBits, NPC_Pokey_01, NPC_FLAG_2, FALSE)
EVT_CALL(SetNpcFlagBits, NPC_Pokey_02, NPC_FLAG_2, FALSE)
EVT_CALL(SetNpcFlagBits, NPC_Pokey_03, NPC_FLAG_2, FALSE)
EVT_THREAD
EVT_WAIT(12)
EVT_CALL(InterpPlayerYaw, 109, 0)
EVT_WAIT(3)
EVT_CALL(func_802D2520, ANIM_Mario_10002, 5, 0, 1, 1, 0)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_8000A)
EVT_WAIT(20)
EVT_CALL(func_802D2520, ANIM_Mario_10002, 0, 0, 0, 0, 0)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002)
EVT_END_THREAD
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(2.0))
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, -151, -390, 576)
EVT_CALL(SetPanTarget, CAM_DEFAULT, -151, -390, 576)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_EXEC(N(EVS_OpenSarcophagus1))
EVT_WAIT(15)
EVT_CALL(SetPanTarget, CAM_DEFAULT, 51, -390, 589)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_EXEC(N(EVS_OpenSarcophagus2))
EVT_WAIT(15)
EVT_CALL(SetPanTarget, CAM_DEFAULT, 239, -390, 515)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_EXEC(N(EVS_OpenSarcophagus3))
EVT_WAIT(15)
EVT_CALL(SetPanTarget, CAM_DEFAULT, 517, -390, 292)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_EXEC(N(EVS_ShutEntryDoor))
EVT_WAIT(30)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(90.0))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_WAIT(1)
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 0)
EVT_SET(AF_ISK07_MummiesReleased, TRUE)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_ELSE
EVT_SET(AF_ISK07_OpeningSarcophagus1, TRUE)
EVT_SET(AF_ISK07_OpeningSarcophagus2, TRUE)
EVT_SET(AF_ISK07_OpeningSarcophagus3, TRUE)
EVT_CALL(TranslateModel, MODEL_g323, 38, 0, 13)
EVT_CALL(RotateModel, MODEL_g323, 35, 0, 1, 0)
EVT_CALL(TranslateModel, MODEL_g327, 38, 0, 13)
EVT_CALL(RotateModel, MODEL_g327, 35, 0, 1, 0)
EVT_CALL(TranslateModel, MODEL_g331, 38, 0, 13)
EVT_CALL(RotateModel, MODEL_g331, 35, 0, 1, 0)
EVT_WAIT(5)
EVT_SET(AF_ISK07_OpeningSarcophagus1, FALSE)
EVT_SET(AF_ISK07_OpeningSarcophagus2, FALSE)
EVT_SET(AF_ISK07_OpeningSarcophagus3, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2036, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2037, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2038, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(AF_ISK07_MummiesReleased, TRUE)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OpenSarcophagusAnim) = {
EVT_CALL(PlaySoundAtModel, LVar3, SOUND_1D1, 0)
EVT_CALL(TranslateModel, LVar3, 0, 0, 13)
EVT_WAIT(3)
EVT_CALL(MakeLerp, 0, 35, 9, EASING_COS_IN_OUT)
EVT_LABEL(10)
EVT_CALL(UpdateLerp)
EVT_SET(LVar2, LVar0)
EVT_MULF(LVar2, EVT_FLOAT(1.1))
EVT_CALL(TranslateModel, LVar3, LVar2, 0, 13)
EVT_CALL(RotateModel, LVar3, LVar0, 0, 1, 0)
EVT_WAIT(1)
EVT_IF_NE(LVar1, 0)
EVT_GOTO(10)
EVT_END_IF
EVT_WAIT(3)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OpenSarcophagus1) = {
EVT_SET(AF_ISK07_OpeningSarcophagus1, TRUE)
EVT_SET(LVar3, MODEL_g323)
EVT_EXEC_WAIT(N(EVS_OpenSarcophagusAnim))
EVT_SET(AF_ISK07_OpeningSarcophagus1, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2036, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o2039, COLLIDER_FLAGS_UPPER_MASK)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OpenSarcophagus2) = {
EVT_SET(AF_ISK07_OpeningSarcophagus2, TRUE)
EVT_SET(LVar3, MODEL_g327)
EVT_EXEC_WAIT(N(EVS_OpenSarcophagusAnim))
EVT_SET(AF_ISK07_OpeningSarcophagus2, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2037, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o2040, COLLIDER_FLAGS_UPPER_MASK)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_OpenSarcophagus3) = {
EVT_SET(AF_ISK07_OpeningSarcophagus3, TRUE)
EVT_SET(LVar3, MODEL_g331)
EVT_EXEC_WAIT(N(EVS_OpenSarcophagusAnim))
EVT_SET(AF_ISK07_OpeningSarcophagus3, FALSE)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o2038, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o2041, COLLIDER_FLAGS_UPPER_MASK)
EVT_RETURN
EVT_END
};

View File

@ -1,10 +0,0 @@
#include "isk_08.h"
static char* N(exit_str_0) = "isk_09";
static char* N(exit_str_1) = "isk_10";
static char* N(exit_str_2) = "isk_07";
static char* N(exit_str_3) = "isk_11";
#include "world/common/enemy/ai/TackleAI.inc.c"
#include "world/common/todo/AwaitPlayerNearNpc.inc.c"

View File

@ -2,8 +2,22 @@
/// @brief Dry Dry Ruins - Descending Stairs 2 /// @brief Dry Dry Ruins - Descending Stairs 2
#include "common.h" #include "common.h"
#include "../isk.h"
#include "message_ids.h" #include "message_ids.h"
#include "map.h" #include "map.h"
#include "../isk.h"
#include "mapfs/isk_08_shape.h"
#include "mapfs/isk_08_hit.h"
#include "sprite/npc/BuzzyBeetle.h"
enum {
NPC_BuzzyBeetle = 1,
};
#define NAMESPACE isk_08 #define NAMESPACE isk_08
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupFlames);
extern EvtScript N(EVS_SetupBombableWall);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,15 @@
#include "isk_08.h"
EntryList N(Entrances) = {
[isk_08_ENTRY_0] { -510.0, -390.0, 207.0, 150.0 },
[isk_08_ENTRY_1] { -557.0, -520.0, 224.0, 150.0 },
[isk_08_ENTRY_2] { -401.0, -390.0, 447.0, 320.0 },
[isk_08_ENTRY_3] { -401.0, -520.0, 447.0, 320.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.tattle = { MSG_MapTattle_isk_08 },
};

Some files were not shown because too many files have changed in this diff Show More