* sam_02

* sam_11 ok

* sam_11 done

* jan progress

* jan_03

* fix

* small

* oops

* spaceman

---------

Co-authored-by: HailSanta <Hail2Santa@gmail.com>
This commit is contained in:
HailSanta 2023-02-03 01:16:32 -05:00 committed by GitHub
parent 625d7874c5
commit 18befa1ec6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
295 changed files with 14468 additions and 4518 deletions

View File

@ -1739,6 +1739,12 @@ typedef struct BombTrigger {
/* 0x0C */ s32 radius; // effective 'size' of the object, usually set to zero because bombettes explosion radius is large enough
} BombTrigger; // size = 0x10;
// the use of this is a bug in sam_11
typedef struct BombTriggerF {
/* 0x00 */ Vec3f pos;
/* 0x0C */ f32 radius;
} BombTriggerF; // size = 0x10;
typedef struct AnimatedModel {
/* 0x00 */ s32 animModelID;
/* 0x04 */ Vec3f pos;

View File

@ -2382,29 +2382,19 @@ typedef struct ChapterChangeFXData {
} ChapterChangeFXData; // size = 0x58
typedef struct IceShardFXData {
/* 0x00 */ s32 unk_00;
/* 0x04 */ f32 unk_04;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ s32 unk_1C;
/* 0x20 */ s32 unk_20;
/* 0x24 */ s32 unk_24;
/* 0x28 */ s32 unk_28;
/* 0x2C */ s32 unk_2C;
/* 0x30 */ s32 unk_30;
/* 0x34 */ s32 unk_34;
/* 0x38 */ f32 unk_38;
/* 0x3C */ f32 unk_3C;
/* 0x40 */ f32 unk_40;
/* 0x44 */ f32 unk_44;
/* 0x48 */ f32 unk_48;
/* 0x4C */ f32 unk_4C;
/* 0x50 */ f32 unk_50;
/* 0x54 */ f32 unk_54;
/* 0x58 */ f32 unk_58;
/* 0x00 */ s32 type;
/* 0x04 */ Vec3f pos;
/* 0x10 */ s32 timeLeft;
/* 0x14 */ s32 lifetime;
/* 0x18 */ Color4i primCol;
/* 0x28 */ Color4i envCol;
/* 0x38 */ f32 scale;
/* 0x3C */ f32 rotation;
/* 0x40 */ f32 angularVel;
/* 0x44 */ f32 animFrame;
/* 0x48 */ f32 animRate;
/* 0x4C */ Vec3f vel;
/* 0x58 */ f32 gravAccel;
} IceShardFXData; // size = 0x5C
typedef struct SpiritCardFXData {

View File

@ -1690,12 +1690,12 @@ enum ItemIDs {
ITEM_LETTER19 = 0x0000004C,
ITEM_UNUSED_LETTER06 = 0x0000004D,
ITEM_LETTER20 = 0x0000004E,
ITEM_LETTER21 = 0x0000004F,
ITEM_LETTER22 = 0x00000050,
ITEM_LETTER_TO_FROSTT = 0x00000051,
ITEM_LETTER_TO_RED_YOSHI_KID = 0x0000004F,
ITEM_LETTER_TO_DANE_T = 0x00000050,
ITEM_LETTER_TO_FROST_T = 0x00000051,
ITEM_LETTER24 = 0x00000052,
ITEM_ARTIFACT = 0x00000053,
ITEM_LETTER25 = 0x00000054,
ITEM_LETTER_TO_KOLORADO = 0x00000054,
ITEM_UNUSED_LETTER07 = 0x00000055,
ITEM_DOLLY = 0x00000056,
ITEM_WATER_STONE = 0x00000057,
@ -3092,7 +3092,7 @@ enum ItemEntityFlags {
ITEM_ENTITY_FLAG_800 = 0x00000800,
ITEM_ENTITY_FLAG_1000 = 0x00001000,
ITEM_ENTITY_FLAG_FIXED = 0x00002000,
ITEM_ENTITY_FLAG_TINY = 0x00004000,
ITEM_ENTITY_RESIZABLE = 0x00004000,
ITEM_ENTITY_FLAG_8000 = 0x00008000,
ITEM_ENTITY_FLAG_10000 = 0x00010000,
ITEM_ENTITY_FLAG_20000 = 0x00020000,
@ -4773,6 +4773,7 @@ enum TexPanner {
};
enum CustomGfxUnit {
CUSTOM_GFX_NONE = -1,
CUSTOM_GFX_0 = 0x00,
CUSTOM_GFX_1 = 0x01,
CUSTOM_GFX_2 = 0x02,
@ -4920,6 +4921,7 @@ enum EnemyActionFlags {
enum EnemyDetectFlags {
AI_DETECT_SIGHT = 0x01,
AI_DETECT_SENSITIVE_MOTION = 0x02,
AI_DETECT_FLAG_8 = 0x08,
};
enum EnemyTerritoryFlags {
@ -5627,13 +5629,41 @@ typedef enum FoldType {
FOLD_TYPE_A = 0xA,
FOLD_TYPE_B = 0xB,
FOLD_TYPE_C = 0xC,
FOLD_TYPE_D = 0xD, // noisy star spirit
FOLD_TYPE_D = 0xD, // noisy hologram -- used for ghostly star spirits and merlar
FOLD_TYPE_E = 0xE,
FOLD_TYPE_F = 0xF,
FOLD_TYPE_10 = 0x10,
FOLD_TYPE_11 = 0x11,
} FoldType;
typedef enum FoldRenderType {
FOLD_RENDER_TYPE_0 = 0x0,
FOLD_RENDER_TYPE_1 = 0x1,
FOLD_RENDER_TYPE_2 = 0x2,
FOLD_RENDER_TYPE_3 = 0x3,
FOLD_RENDER_TYPE_4 = 0x4,
FOLD_RENDER_TYPE_5 = 0x5,
FOLD_RENDER_TYPE_6 = 0x6,
FOLD_RENDER_TYPE_7 = 0x7,
FOLD_RENDER_TYPE_8 = 0x8,
FOLD_RENDER_TYPE_9 = 0x9,
FOLD_RENDER_TYPE_A = 0xA,
FOLD_RENDER_TYPE_B = 0xB,
FOLD_RENDER_TYPE_C = 0xC,
FOLD_RENDER_TYPE_D = 0xD,
FOLD_RENDER_TYPE_E = 0xE,
FOLD_RENDER_TYPE_F = 0xF,
FOLD_RENDER_TYPE_10 = 0x10,
} FoldRenderType;
typedef enum FoldMeshType {
FOLD_MESH_TYPE_0 = 0x0,
FOLD_MESH_TYPE_1 = 0x1,
FOLD_MESH_TYPE_2 = 0x2,
FOLD_MESH_TYPE_3 = 0x3,
FOLD_MESH_TYPE_4 = 0x4,
} FoldMeshType;
enum MoveType {
MOVE_TYPE_NONE = 0,
MOVE_TYPE_HAMMER = 1,

View File

@ -125,6 +125,10 @@
#define COLLISION_WITH_NPC_BIT 0x2000
#define COLLISION_WITH_ENTITY_BIT 0x4000
#define ENTITY_COLLIDER_ID(entityIndex) (entityIndex | COLLISION_WITH_ENTITY_BIT)
#define NO_COLLIDER -1
#define NPC_DISPOSE_LOCATION 0,-1000,0
#define NPC_DISPOSE_POS_X 0
#define NPC_DISPOSE_POS_Y -1000

View File

@ -7,10 +7,16 @@
// battle and stage are optional in overloaded NPC_GROUP macros
#define NPC_GROUP(args...) VFUNC(NPC_GROUP, args)
#define NPC_GROUP1(npcs) { sizeof(npcs) / sizeof(StaticNpc), (StaticNpc*) &npcs, 0, 0 }
#define NPC_GROUP2(npcs, battle) { sizeof(npcs) / sizeof(StaticNpc), (StaticNpc*) &npcs, battle, 0 }
#define NPC_GROUP1(npcs) { sizeof(npcs) / sizeof(StaticNpc), (StaticNpc*) &npcs, 0, 0 }
#define NPC_GROUP2(npcs, battle) { sizeof(npcs) / sizeof(StaticNpc), (StaticNpc*) &npcs, battle, 0 }
#define NPC_GROUP3(npcs, battle, stage) { sizeof(npcs) / sizeof(StaticNpc), (StaticNpc*) &npcs, battle, stage + 1 }
#define NPC_GROUP_EXPLICIT_SIZE(args...) VFUNC(NPC_GROUP_EXPLICIT_SIZE, args)
#define NPC_GROUP_EXPLICIT_SIZE3(npcs, start, count) { count, (StaticNpc*) &npcs[start], 0, 0 }
#define NPC_GROUP_EXPLICIT_SIZE4(npcs, start, count, battle) { count, (StaticNpc*) &npcs[start], battle, 0 }
#define NPC_GROUP_EXPLICIT_SIZE5(npcs, start, count, battle, stage) { count, (StaticNpc*) &npcs[start], battle, stage + 1 }
#define NO_DROPS { { F16(100), F16(0), 0, F16(0) }, }
// rename this to NO_DROPS and the above to NO_STAT_DROPS after all map data done

View File

@ -707,7 +707,7 @@ enum GameFlags {
GF_IWA03_ItemBlock_Mushroom = GameFlag(0x2BF),
GF_IWA03_ItemBlock_HoneySyrup = GameFlag(0x2C0),
GF_IWA01_Item_Letter01 = GameFlag(0x2C1),
GF_IWA03_Item_Letter25 = GameFlag(0x2C2),
GF_IWA03_Item_LettertoKolorado = GameFlag(0x2C2),
GF_IWA04_Item_Letter10 = GameFlag(0x2C3),
GF_IWA04_Defeated_Buzzar = GameFlag(0x2C4),
GF_IWA10_Bush1_Coin = GameFlag(0x2C5),

View File

@ -260,7 +260,7 @@ ApiStatus CountFortessKeys(Evt* script, s32 isInitialCall);
ApiStatus RemoveFortressKeys(Evt* script, s32 isInitialCall);
ApiStatus MakeItemEntity(Evt* script, s32 isInitialCall);
ApiStatus DropItemEntity(Evt* script, s32 isInitialCall);
ApiStatus DropTinyItemEntity(Evt* script, s32 isInitialCall);
ApiStatus DropResizableItemEntity(Evt* script, s32 isInitialCall);
ApiStatus RemoveItemEntity(Evt* script, s32 isInitialCall);
ApiStatus AddBadge(Evt* script, s32 isInitialCall);
ApiStatus RemoveBadge(Evt* script, s32 isInitialCall);

View File

@ -896,7 +896,7 @@ void phys_main_collision_below(void) {
playerStatus->groundNormalPitch = get_player_normal_pitch();
if (collHeightHalf + (temp_f24 * 0.5f) < outLength) {
colliderID = -1;
colliderID = NO_COLLIDER;
}
if (playerStatus->timeInAir == 0) {
collisionStatus->currentFloor = colliderID;

View File

@ -950,10 +950,10 @@ s32 make_item_entity(s32 itemID, f32 x, f32 y, f32 z, s32 itemSpawnMode, s32 pic
itemEntity->unk_34.z = -9999;
D_801565A6 = 30;
itemEntity->flags |= ITEM_ENTITY_FLAG_TINY;
itemEntity->flags |= ITEM_ENTITY_RESIZABLE;
if (gItemTable[itemID].typeFlags & ITEM_TYPE_FLAG_ENTITY_FULLSIZE) {
itemEntity->flags |= ITEM_ENTITY_FLAG_40000;
itemEntity->flags &= ~ITEM_ENTITY_FLAG_TINY;
itemEntity->flags &= ~ITEM_ENTITY_RESIZABLE;
}
if (ItemEntityAlternatingSpawn != 0) {
@ -1045,33 +1045,33 @@ s32 make_item_entity(s32 itemID, f32 x, f32 y, f32 z, s32 itemSpawnMode, s32 pic
case ITEM_SPAWN_MODE_TOSS_FADE1:
itemEntity->flags |= ITEM_ENTITY_FLAG_800000 | ITEM_ENTITY_FLAG_1000;
itemEntity->scale = 0.8f;
itemEntity->flags |= ITEM_ENTITY_FLAG_TINY;
itemEntity->flags |= ITEM_ENTITY_RESIZABLE;
break;
case ITEM_SPAWN_MODE_TOSS_FADE2:
itemEntity->flags |= ITEM_ENTITY_FLAG_800000 | ITEM_ENTITY_FLAG_1000;
itemEntity->flags |= ITEM_ENTITY_FLAG_10000;
itemEntity->spawnType = ITEM_SPAWN_MODE_TOSS_FADE1;
itemEntity->scale = 0.8f;
itemEntity->flags |= ITEM_ENTITY_FLAG_TINY;
itemEntity->flags |= ITEM_ENTITY_RESIZABLE;
break;
case ITEM_SPAWN_MODE_TOSS_FADE3:
itemEntity->flags |= ITEM_ENTITY_FLAG_800000 | ITEM_ENTITY_FLAG_1000;
itemEntity->flags |= ITEM_ENTITY_FLAG_400000;
itemEntity->spawnType = ITEM_SPAWN_MODE_TOSS_FADE1;
itemEntity->scale = 0.8f;
itemEntity->flags |= ITEM_ENTITY_FLAG_TINY;
itemEntity->flags |= ITEM_ENTITY_RESIZABLE;
break;
case ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS_SMALL:
itemEntity->flags |= ITEM_ENTITY_FLAG_800000;
itemEntity->spawnType = ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS;
itemEntity->scale = 0.8f;
itemEntity->flags |= ITEM_ENTITY_FLAG_TINY;
itemEntity->flags |= ITEM_ENTITY_RESIZABLE;
break;
case ITEM_SPAWN_MODE_UNKNOWN_1B:
itemEntity->flags |= ITEM_ENTITY_FLAG_800000 | ITEM_ENTITY_FLAG_8000;
itemEntity->spawnType = ITEM_SPAWN_MODE_ITEM_BLOCK_SPAWN_ALWAYS;
itemEntity->scale = 0.8f;
itemEntity->flags |= ITEM_ENTITY_FLAG_TINY;
itemEntity->flags |= ITEM_ENTITY_RESIZABLE;
break;
case ITEM_SPAWN_MODE_ITEM_BLOCK_SPAWN_ALWAYS:
itemEntity->flags |= ITEM_ENTITY_FLAG_800000 | ITEM_ENTITY_FLAG_8000 | ITEM_ENTITY_FLAG_NEVER_VANISH;
@ -1188,10 +1188,10 @@ s32 make_item_entity_at_player(s32 itemID, s32 category, s32 pickupMsgFlags) {
item->physicsData = NULL;
item->pickupDelay = 0;
item->wsFaceAngle = 0;
item->flags |= ITEM_ENTITY_FLAG_TINY;
item->flags |= ITEM_ENTITY_RESIZABLE;
if (gItemTable[itemID].typeFlags & ITEM_TYPE_FLAG_ENTITY_FULLSIZE) {
item->flags = (item->flags | ITEM_ENTITY_FLAG_40000) & ~ITEM_ENTITY_FLAG_TINY;
item->flags = (item->flags | ITEM_ENTITY_FLAG_40000) & ~ITEM_ENTITY_RESIZABLE;
}
if (ItemEntityAlternatingSpawn != 0) {
item->flags |= ITEM_ENTITY_FLAG_20000;
@ -1394,7 +1394,7 @@ void appendGfx_item_entity(void* data) {
rot = clamp_angle(180.0f - gCameras[gCurrentCamID].currentYaw);
guTranslateF(mtxTranslate, itemEntity->position.x, itemEntity->position.y + yOffset, itemEntity->position.z);
guRotateF(mtxRotY, rot, 0.0f, 1.0f, 0.0f);
if (itemEntity->flags & ITEM_ENTITY_FLAG_TINY) {
if (itemEntity->flags & ITEM_ENTITY_RESIZABLE) {
guScaleF(mtxScale, itemEntity->scale, itemEntity->scale, itemEntity->scale);
guMtxCatF(mtxRotY, mtxScale, mtxRotY);
}
@ -1605,7 +1605,7 @@ void render_item_entities(void) {
rotX = clamp_angle(180.0f - gCameras[gCurrentCamID].currentYaw);
guTranslateF(sp58, item->position.x, -item->position.y - offsetY, item->position.z);
guRotateF(sp98, rotX, 0.0f, 1.0f, 0.0f);
if (item->flags & ITEM_ENTITY_FLAG_TINY) {
if (item->flags & ITEM_ENTITY_RESIZABLE) {
guScaleF(spD8, item->scale, item->scale, item->scale);
guMtxCatF(sp98, spD8, sp98);
}
@ -1766,12 +1766,12 @@ void func_80133A94(s32 idx, s32 itemID) {
item->itemID = itemID;
item->flags |= ITEM_ENTITY_FLAG_TINY;
item->flags |= ITEM_ENTITY_RESIZABLE;
item->flags &= ~ITEM_ENTITY_FLAG_40000;
if (gItemTable[itemID].typeFlags & ITEM_TYPE_FLAG_ENTITY_FULLSIZE) {
item->flags |= ITEM_ENTITY_FLAG_40000;
item->flags &= ~ITEM_ENTITY_FLAG_TINY;
item->flags &= ~ITEM_ENTITY_RESIZABLE;
}
item_entity_load(item);

View File

@ -370,10 +370,10 @@ ApiStatus func_80218250_52B8F0(Evt* script, s32 isInitialCall) {
for (i = 0; i < ARRAY_COUNT(bpArray); i++) {
EffectInstance* effect = fx_ice_shard(bpArray[i].unk_00, bpArray[i].unk_04, bpArray[i].unk_08,
bpArray[i].unk_0C, bpArray[i].unk_10, bpArray[i].unk_14);
effect->data.iceShard->unk_4C = bpArray[i].unk_18;
effect->data.iceShard->unk_50 = bpArray[i].unk_1C;
effect->data.iceShard->unk_54 = bpArray[i].unk_20;
effect->data.iceShard->unk_58 = bpArray[i].unk_24;
effect->data.iceShard->vel.x = bpArray[i].unk_18;
effect->data.iceShard->vel.y = bpArray[i].unk_1C;
effect->data.iceShard->vel.z = bpArray[i].unk_20;
effect->data.iceShard->gravAccel = bpArray[i].unk_24;
}
return ApiStatus_DONE2;

View File

@ -1375,7 +1375,7 @@ ApiStatus N(ProcessHurricane)(Evt* script, s32 isInitialCall) {
partner->state.moveArcAmplitude = 0;
sIsHurricaneActive = TRUE;
D_8023D338 = 255;
sHuffPuffBreathEffect = effect = fx_huff_puff_breath(0, 0.0f, -1000.0f, 0.0f, 0.0f, -2.0f, 0.6f, 0);
sHuffPuffBreathEffect = effect = fx_huff_puff_breath(0, NPC_DISPOSE_LOCATION, 0.0f, -2.0f, 0.6f, 0);
effect->data.huffPuffBreath->primR = 20;
effect->data.huffPuffBreath->primG = 80;

View File

@ -773,7 +773,7 @@ s32 test_ray_colliders(s32 ignoreFlags, f32 startX, f32 startY, f32 startZ, f32
gCollisionRayStartY = startY;
gCollisionRayStartZ = startZ;
gCollisionRayLength = *hitDepth;
colliderID = -1;
colliderID = NO_COLLIDER;
if (dirX < 0) {
min_x = startX + dirX * gCollisionRayLength;
@ -866,7 +866,7 @@ s32 test_ray_zones(f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 d
gCollisionRayStartY = startY;
gCollisionRayStartZ = startZ;
gCollisionRayLength = *hitDepth;
colliderID = -1;
colliderID = NO_COLLIDER;
for (i = 0; i < collisionData->numColliders; i++) {
collider = &collisionData->colliderList[i];

View File

@ -387,7 +387,7 @@ void fold_init_state(FoldState* state) {
state->unk_06 = 0;
state->flags = 0;
state->meshType = 0;
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
state->firstVtxIdx = 0;
state->lastVtxIdx = 0;
state->unk_0C = 0;
@ -431,7 +431,7 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
state->unk_05 = 0;
state->unk_06 = 0;
state->meshType = 0;
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
state->unk_1C[0][0] = -1;
state->unk_1C[1][0] = -1;
state->flags &= FOLD_STATE_FLAG_ENABLED;
@ -444,7 +444,7 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
return;
case FOLD_TYPE_1:
state->unk_05 = 0;
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
state->unk_1C[0][0] = -1;
return;
case FOLD_TYPE_2:
@ -508,7 +508,7 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
switch (type) {
case FOLD_TYPE_3:
state->meshType = 0;
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
break;
case FOLD_TYPE_4:
state->subdivX = 4;
@ -518,7 +518,7 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
break;
case FOLD_TYPE_5:
state->meshType = 2;
state->renderType = 0xB;
state->renderType = FOLD_RENDER_TYPE_B;
state->unk_3C[0][0] = 0.0f;
state->unk_3C[0][1] = 0.0f;
state->flags |= FOLD_STATE_FLAG_200;
@ -527,21 +527,21 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
case FOLD_TYPE_7:
case FOLD_TYPE_8:
if (arg2 >= 0xFF && arg3 >= 0xFF && arg4 >= 0xFF && arg5 >= 0xFF) {
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
} else if (arg5 >= 0xFF) {
state->renderType = 1;
state->renderType = FOLD_RENDER_TYPE_1;
} else if (arg2 >= 0xFF && arg3 >= 0xFF && arg4 >= 0xFF) {
state->renderType = 2;
state->renderType = FOLD_RENDER_TYPE_2;
} else {
state->renderType = 3;
state->renderType = FOLD_RENDER_TYPE_3;
}
break;
case FOLD_TYPE_9:
case FOLD_TYPE_A:
if (arg5 == 255.0) {
state->renderType = 4;
state->renderType = FOLD_RENDER_TYPE_4;
} else {
state->renderType = 5;
state->renderType = FOLD_RENDER_TYPE_5;
}
break;
case FOLD_TYPE_B:
@ -557,9 +557,9 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
state->meshType = 0;
if ((arg3 & 0xFF) == 0xFF) {
state->renderType = 6;
state->renderType = FOLD_RENDER_TYPE_6;
} else {
state->renderType = 8;
state->renderType = FOLD_RENDER_TYPE_8;
}
}
break;
@ -576,25 +576,25 @@ void fold_update(u32 idx, FoldType type, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
state->meshType = 0;
if ((arg3 & 0xFF) == 0xFF) {
state->renderType = 9;
state->renderType = FOLD_RENDER_TYPE_9;
} else {
state->renderType = 0xA;
state->renderType = FOLD_RENDER_TYPE_A;
}
}
break;
case FOLD_TYPE_D:
state->renderType = 0xC;
state->renderType = FOLD_RENDER_TYPE_C;
break;
case FOLD_TYPE_E:
state->renderType = 0xD;
state->renderType = FOLD_RENDER_TYPE_D;
break;
case FOLD_TYPE_F:
case FOLD_TYPE_10:
state->meshType = 4;
if (arg3 >= 0xFF) {
state->renderType = 0xE;
state->renderType = FOLD_RENDER_TYPE_E;
} else {
state->renderType = 0xF;
state->renderType = FOLD_RENDER_TYPE_F;
}
state->unk_3C[1][0] = 0.0f;
state->unk_3C[1][1] = 0.0f;
@ -648,7 +648,7 @@ s32 fold_appendGfx_component(s32 idx, FoldImageRecPart* image, u32 flagBits, Mat
state->unk_1C[1][0] = -1;
state->unk_05 = 0;
state->meshType = 0;
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
state->flags &= ~(FOLD_STATE_FLAG_1000 | FOLD_STATE_FLAG_800 | FOLD_STATE_FLAG_100 | FOLD_STATE_FLAG_80);
fold_clear_state_gfx(state);
ret = 1;
@ -658,7 +658,7 @@ s32 fold_appendGfx_component(s32 idx, FoldImageRecPart* image, u32 flagBits, Mat
state->unk_05 = 0;
state->unk_06 = 0;
state->meshType = 0;
state->renderType = 0;
state->renderType = FOLD_RENDER_TYPE_0;
state->unk_1C[0][0] = -1;
state->unk_1C[1][0] = -1;
state->flags &= FOLD_STATE_FLAG_ENABLED;
@ -744,16 +744,16 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
if (!cond && (fold_currentImage->alphaMultiplier < 0xFF)) {
state->unk_1C[1][3] = 0xFF;
switch (state->renderType) {
case 0:
case 11:
renderType = 2;
case FOLD_RENDER_TYPE_0:
case FOLD_RENDER_TYPE_B:
renderType = FOLD_RENDER_TYPE_2;
break;
case 1:
case 4:
renderType = 3;
case FOLD_RENDER_TYPE_1:
case FOLD_RENDER_TYPE_4:
renderType = FOLD_RENDER_TYPE_3;
break;
case 9:
renderType = 10;
case FOLD_RENDER_TYPE_9:
renderType = FOLD_RENDER_TYPE_A;
break;
}
primColor = state->unk_1C[1][3] * alphaComp;
@ -785,11 +785,11 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
gDPSetRenderMode(gMasterGfxPos++, mode1, mode2);
switch (renderType) {
case 1:
case FOLD_RENDER_TYPE_1:
gDPSetCombineMode(gMasterGfxPos++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, state->unk_1C[1][0], state->unk_1C[1][1], state->unk_1C[1][2], 0);
break;
case 2:
case FOLD_RENDER_TYPE_2:
if (primColor <= 0) {
return;
}
@ -797,7 +797,7 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
TEXEL0, 0, PRIMITIVE, 0);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 0, 0, 0, primColor);
break;
case 3:
case FOLD_RENDER_TYPE_3:
if (primColor <= 0) {
return;
}
@ -805,12 +805,12 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
gDPSetPrimColor(gMasterGfxPos++, 0, 0, state->unk_1C[1][0], state->unk_1C[1][1],
state->unk_1C[1][2], primColor);
break;
case 4:
case FOLD_RENDER_TYPE_4:
gDPSetCombineLERP(gMasterGfxPos++, 1, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0, 1, PRIMITIVE,
TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, state->unk_1C[1][0], state->unk_1C[1][1], state->unk_1C[1][2], 0);
break;
case 5:
case FOLD_RENDER_TYPE_5:
if (primColor <= 0) {
return;
}
@ -819,35 +819,35 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
gDPSetPrimColor(gMasterGfxPos++, 0, 0, state->unk_1C[1][0], state->unk_1C[1][1],
state->unk_1C[1][2], primColor);
break;
case 6:
case FOLD_RENDER_TYPE_6:
gDPSetCombineMode(gMasterGfxPos++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA);
gSPSetGeometryMode(gMasterGfxPos++, G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(gMasterGfxPos++, G_LIGHTING);
break;
case 9:
case FOLD_RENDER_TYPE_9:
gDPSetCombineLERP(gMasterGfxPos++, 1, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0, 1, SHADE, TEXEL0, SHADE,
0, 0, 0, TEXEL0);
gSPSetGeometryMode(gMasterGfxPos++, G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(gMasterGfxPos++, G_LIGHTING);
break;
case 7:
case FOLD_RENDER_TYPE_7:
gDPSetCombineLERP(gMasterGfxPos++, 0, 0, 0, TEXEL0, TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, TEXEL0, 0,
SHADE, 0);
gSPSetGeometryMode(gMasterGfxPos++, G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(gMasterGfxPos++, G_LIGHTING);
break;
case 8:
case FOLD_RENDER_TYPE_8:
gDPSetCombineMode(gMasterGfxPos++, G_CC_MODULATEIA, G_CC_MODULATEIA);
gSPSetGeometryMode(gMasterGfxPos++, G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(gMasterGfxPos++, G_LIGHTING);
break;
case 10:
case FOLD_RENDER_TYPE_A:
gDPSetCombineLERP(gMasterGfxPos++, 1, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0, 1, SHADE, TEXEL0,
SHADE, TEXEL0, 0, SHADE, 0);
gSPSetGeometryMode(gMasterGfxPos++, G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(gMasterGfxPos++, G_LIGHTING);
break;
case 11:
case FOLD_RENDER_TYPE_B:
if (state->flags & (FOLD_STATE_FLAG_2000 | FOLD_STATE_FLAG_8000)) {
Camera* currentCam = &gCameras[gCurrentCameraID];
@ -867,7 +867,7 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
}
gDPSetCombineMode(gMasterGfxPos++, G_CC_DECALRGBA, G_CC_DECALRGBA);
break;
case 12:
case FOLD_RENDER_TYPE_C:
if (state->unk_1C[1][0] == 0) {
primColor = state->unk_1C[1][3] * alphaComp;
gDPSetCombineLERP(gMasterGfxPos++, NOISE, PRIMITIVE, PRIMITIVE, TEXEL0, TEXEL0, 0, PRIMITIVE, 0,
@ -895,17 +895,17 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
gDPSetBlendColor(gMasterGfxPos++, 0, 0, 0, blendColor);
}
break;
case 13:
case FOLD_RENDER_TYPE_D:
gDPSetCombineLERP(gMasterGfxPos++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0,
TEXEL0);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, state->unk_1C[1][0], state->unk_1C[1][1], state->unk_1C[1][2], 0);
break;
case 0:
case 14:
case 16:
case FOLD_RENDER_TYPE_0:
case FOLD_RENDER_TYPE_E:
case FOLD_RENDER_TYPE_10:
gDPSetCombineMode(gMasterGfxPos++, G_CC_DECALRGBA, G_CC_DECALRGBA);
break;
case 15:
case FOLD_RENDER_TYPE_F:
gDPSetCombineLERP(gMasterGfxPos++, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0, TEXEL0, 0,
PRIMITIVE, 0);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 0, 0, 0, state->unk_1C[1][1]);
@ -914,17 +914,17 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
}
switch (state->meshType) {
case 0:
case FOLD_MESH_TYPE_0:
func_8013CFA8(state, mtx);
break;
case 1:
case 3:
case FOLD_MESH_TYPE_1:
case FOLD_MESH_TYPE_3:
func_8013DAB4(state, mtx);
break;
case 2:
case FOLD_MESH_TYPE_2:
func_8013E2F0(state, mtx);
break;
case 4:
case FOLD_MESH_TYPE_4:
func_8013CFA8(state, mtx);
gDPPipeSync(gMasterGfxPos++);
func_8013E904(state, mtx);
@ -933,7 +933,7 @@ void func_8013B1B0(FoldState* state, Matrix4f mtx) {
gDPPipeSync(gMasterGfxPos++);
if (state->renderType == 0xC) {
if (state->renderType == FOLD_RENDER_TYPE_C) {
gDPSetAlphaCompare(gMasterGfxPos++, G_AC_NONE);
gDPSetAlphaDither(gMasterGfxPos++, G_AD_DISABLE);
}
@ -1339,7 +1339,10 @@ void func_8013CFA8(FoldState* state, Matrix4f mtx) {
if ((D_80151328->flags & 1) &&
(state->arrayIdx != 0) &&
(state->flags & someFlags) &&
(state->renderType == 0 || state->renderType == 2 || state->renderType == 15 || state->renderType == 7))
(state->renderType == FOLD_RENDER_TYPE_0
|| state->renderType == FOLD_RENDER_TYPE_2
|| state->renderType == FOLD_RENDER_TYPE_F
|| state->renderType == FOLD_RENDER_TYPE_7))
{
gDPScrollMultiTile2_4b(gMasterGfxPos++,
fold_currentImage->raster, G_IM_FMT_CI,
@ -1358,13 +1361,13 @@ void func_8013CFA8(FoldState* state, Matrix4f mtx) {
alpha = 255;
switch (state->renderType) {
case 0:
case FOLD_RENDER_TYPE_0:
break;
case 2:
case 15:
case FOLD_RENDER_TYPE_2:
case FOLD_RENDER_TYPE_F:
alpha = state->unk_1C[1][3];
break;
case 7:
case FOLD_RENDER_TYPE_7:
alpha = -1;
break;
}
@ -1423,14 +1426,14 @@ void func_8013CFA8(FoldState* state, Matrix4f mtx) {
}
switch (state->renderType) {
case 0:
case FOLD_RENDER_TYPE_0:
alpha2 = 255;
break;
case 2:
case 15:
case FOLD_RENDER_TYPE_2:
case FOLD_RENDER_TYPE_F:
alpha2 = state->unk_1C[1][3];
break;
case 7:
case FOLD_RENDER_TYPE_7:
alpha2 = -1;
break;
}
@ -1504,7 +1507,9 @@ void func_8013DAB4(FoldState* state, Matrix4f mtx) {
if ((D_80151328->flags & 1) &&
(*D_80156954)[0].arrayIdx != 0 &&
(state->flags & (FOLD_STATE_FLAG_100000 | FOLD_STATE_FLAG_80000)) &&
(state->renderType == 0 || state->renderType == 2 || state->renderType == 7)) {
(state->renderType == FOLD_RENDER_TYPE_0
|| state->renderType == FOLD_RENDER_TYPE_2
|| state->renderType == FOLD_RENDER_TYPE_7)) {
s32 alpha = 255;
gDPScrollMultiTile2_4b(gMasterGfxPos++,
fold_currentImage->raster, G_IM_FMT_CI,
@ -1519,13 +1524,13 @@ void func_8013DAB4(FoldState* state, Matrix4f mtx) {
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
gDPSetTileSize(gMasterGfxPos++, 2, 0, 0, 63 << 2, 0);
switch (state->renderType) {
case 0:
case FOLD_RENDER_TYPE_0:
alpha = 255;
break;
case 2:
case FOLD_RENDER_TYPE_2:
alpha = state->unk_1C[1][3];
break;
case 7:
case FOLD_RENDER_TYPE_7:
alpha = -1;
break;
@ -1569,7 +1574,10 @@ void func_8013E2F0(FoldState* state, Matrix4f mtx) {
gDPSetTextureLUT(gMasterGfxPos++, G_TT_RGBA16);
gDPLoadTLUT_pal16(gMasterGfxPos++, 0, fold_currentImage->palette);
if ((D_80151328->flags & 1) && (state->flags & (FOLD_STATE_FLAG_100000 | FOLD_STATE_FLAG_80000)) &&
(state->renderType == 0 || state->renderType == 2 || state->renderType == 7 || state->renderType == 11)) {
(state->renderType == FOLD_RENDER_TYPE_0
|| state->renderType == FOLD_RENDER_TYPE_2
|| state->renderType == FOLD_RENDER_TYPE_7
|| state->renderType == FOLD_RENDER_TYPE_B)) {
s32 alpha = 255;
gDPScrollMultiTile2_4b(gMasterGfxPos++, fold_currentImage->raster, G_IM_FMT_CI,
fold_currentImage->width, fold_currentImage->height,
@ -1581,14 +1589,14 @@ void func_8013E2F0(FoldState* state, Matrix4f mtx) {
gDPSetTileSize(gMasterGfxPos++, 2, 0, 0, 252, 0);
switch (state->renderType) {
case 0:
case 11:
case FOLD_RENDER_TYPE_0:
case FOLD_RENDER_TYPE_B:
alpha = 255;
break;
case 2:
case FOLD_RENDER_TYPE_2:
alpha = state->unk_1C[1][3];
break;
case 7:
case FOLD_RENDER_TYPE_7:
alpha = -1;
break;
@ -1617,7 +1625,7 @@ void func_8013E904(FoldState* state, Matrix4f mtx) {
gSPMatrix(gMasterGfxPos++, VIRTUAL_TO_PHYSICAL(&gDisplayContext->matrixStack[gMatrixListPos++]), G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gDPSetRenderMode(gMasterGfxPos++, G_RM_ZB_XLU_DECAL, G_RM_ZB_XLU_DECAL2);
if (state->renderType == 15) {
if (state->renderType == FOLD_RENDER_TYPE_F) {
s32 temp = state->unk_1C[1][1];
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 0, 0, 0, temp);
gDPSetCombineLERP(gMasterGfxPos++, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, SHADE, 0, TEXEL0, 0, PRIMITIVE, 0);

View File

@ -97,14 +97,14 @@ void ice_pillar_update(EffectInstance* effect) {
(data->scale * ((shim_rand_int(10) * 0.7 * 0.1) + 0.3)),
i + 30
);
iceShard->data.iceShard->unk_44 = shim_rand_int(10) * 0.1;
iceShard->data.iceShard->unk_48 = (shim_rand_int(30) * 0.01) + 0.1;
iceShard->data.iceShard->unk_3C = shim_rand_int(359);
iceShard->data.iceShard->unk_40 = shim_rand_int(20);
iceShard->data.iceShard->unk_4C = shim_rand_int(10) - 5;
iceShard->data.iceShard->unk_50 = shim_rand_int(10) - 5;
iceShard->data.iceShard->unk_54 = 0;
iceShard->data.iceShard->unk_58 = -0.1f;
iceShard->data.iceShard->animFrame = shim_rand_int(10) * 0.1;
iceShard->data.iceShard->animRate = (shim_rand_int(30) * 0.01) + 0.1;
iceShard->data.iceShard->rotation = shim_rand_int(359);
iceShard->data.iceShard->angularVel = shim_rand_int(20);
iceShard->data.iceShard->vel.x = shim_rand_int(10) - 5;
iceShard->data.iceShard->vel.y = shim_rand_int(10) - 5;
iceShard->data.iceShard->vel.z = 0;
iceShard->data.iceShard->gravAccel = -0.1f;
}
shim_remove_effect(data->miscParticles);
shim_remove_effect(effect);

View File

@ -15,11 +15,11 @@ void ice_shard_appendGfx(void* effect);
EffectInstance* ice_shard_main(
s32 arg0,
f32 arg1,
f32 arg2,
f32 arg3,
f32 arg4,
s32 arg5
f32 posX,
f32 posY,
f32 posZ,
f32 scale,
s32 duration
) {
EffectBlueprint bp;
EffectInstance* effect;
@ -38,33 +38,33 @@ EffectInstance* ice_shard_main(
data = effect->data.iceShard = shim_general_heap_malloc(numParts * sizeof(*data));
ASSERT(effect->data.iceShard != NULL);
data->unk_00 = arg0;
data->unk_14 = 0;
if (arg5 <= 0) {
data->unk_10 = 1000;
data->type = arg0;
data->lifetime = 0;
if (duration <= 0) {
data->timeLeft = 1000;
} else {
data->unk_10 = arg5;
data->timeLeft = duration;
}
data->unk_24 = 255;
data->unk_04 = arg1;
data->unk_08 = arg2;
data->unk_0C = arg3;
data->unk_38 = arg4;
data->unk_18 = 255;
data->unk_1C = 255;
data->unk_20 = 255;
data->unk_28 = 255;
data->unk_2C = 255;
data->unk_30 = 255;
data->unk_34 = 255;
data->unk_44 = 0;
data->unk_48 = (shim_rand_int(1) * 2 - 1) * 0.25 * (shim_rand_int(4) * 0.1 + 0.1);
data->unk_3C = shim_rand_int(359);
data->unk_4C = shim_rand_int(10) - 5;
data->unk_50 = shim_rand_int(10) - 5;
data->unk_54 = shim_rand_int(10) - 5;
data->unk_40 = shim_rand_int(40) - 20;
data->unk_58 = -0.1f;
data->primCol.a = 255;
data->pos.x = posX;
data->pos.y = posY;
data->pos.z = posZ;
data->scale = scale;
data->primCol.r = 255;
data->primCol.g = 255;
data->primCol.b = 255;
data->envCol.r = 255;
data->envCol.g = 255;
data->envCol.b = 255;
data->envCol.a = 255;
data->animFrame = 0;
data->animRate = (shim_rand_int(1) * 2 - 1) * 0.25 * (shim_rand_int(4) * 0.1 + 0.1);
data->rotation = shim_rand_int(359);
data->vel.x = shim_rand_int(10) - 5;
data->vel.y = shim_rand_int(10) - 5;
data->vel.z = shim_rand_int(10) - 5;
data->angularVel = shim_rand_int(40) - 20;
data->gravAccel = -0.1f;
return effect;
}
@ -74,46 +74,46 @@ void ice_shard_init(EffectInstance* effect) {
void ice_shard_update(EffectInstance* effect) {
IceShardFXData* data = effect->data.iceShard;
s32 unk_00 = data->unk_00;
s32 unk_00 = data->type;
if (effect->flags & EFFECT_INSTANCE_FLAG_10) {
effect->flags &= ~EFFECT_INSTANCE_FLAG_10;
data->unk_10 = 16;
data->timeLeft = 16;
}
if (data->unk_10 < 1000) {
data->unk_10--;
if (data->timeLeft < 1000) {
data->timeLeft--;
}
data->unk_14++;
data->lifetime++;
if (data->unk_10 < 0) {
if (data->timeLeft < 0) {
shim_remove_effect(effect);
return;
}
if (data->unk_10 < 16) {
data->unk_24 = data->unk_10 * 16;
if (data->timeLeft < 16) {
data->primCol.a = data->timeLeft * 16;
}
data->unk_44 += data->unk_48;
data->animFrame += data->animRate;
if (data->unk_44 < 0.0f) {
data->unk_44 += 1.0f;
if (data->animFrame < 0.0f) {
data->animFrame += 1.0f;
}
if (data->unk_44 > 1.0f) {
data->unk_44 -= 1.0f;
if (data->animFrame > 1.0f) {
data->animFrame -= 1.0f;
}
data->unk_50 += data->unk_58;
data->unk_04 += data->unk_4C;
data->unk_08 += data->unk_50;
data->unk_0C += data->unk_54;
data->unk_3C += data->unk_40;
data->vel.y += data->gravAccel;
data->pos.x += data->vel.x;
data->pos.y += data->vel.y;
data->pos.z += data->vel.z;
data->rotation += data->angularVel;
if (unk_00 >= 2 && data->unk_08 < 0.0f && data->unk_50 < 0.0f) {
data->unk_08 = 0.0f;
data->unk_50 *= -0.7;
if (unk_00 >= 2 && data->pos.y < 0.0f && data->vel.y < 0.0f) {
data->pos.y = 0.0f;
data->vel.y *= -0.7;
}
}
@ -132,10 +132,10 @@ void ice_shard_render(EffectInstance* effect) {
void ice_shard_appendGfx(void* effect) {
IceShardFXData* data = ((EffectInstance*)effect)->data.iceShard;
s32 unk_24 = data->unk_24;
s32 unk_00 = data->unk_00;
s32 temp1;
s32 temp2;
s32 alpha = data->primCol.a;
s32 type = data->type;
s32 texCoordS;
s32 texCoordT;
s32 envAlpha;
Matrix4f sp20;
Matrix4f unused;
@ -143,35 +143,35 @@ void ice_shard_appendGfx(void* effect) {
gDPPipeSync(gMasterGfxPos++);
gSPSegment(gMasterGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->graphics->data));
shim_guPositionF(sp20, 0.0f, -gCameras[gCurrentCameraID].currentYaw, 0.0f, data->unk_38, data->unk_04, data->unk_08, data->unk_0C);
shim_guPositionF(sp20, 0.0f, -gCameras[gCurrentCameraID].currentYaw, 0.0f, data->scale, data->pos.x, data->pos.y, data->pos.z);
shim_guMtxF2L(sp20, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
shim_guRotateF(sp20, data->unk_3C, 0.0f, 0.0f, 1.0f);
shim_guRotateF(sp20, data->rotation, 0.0f, 0.0f, 1.0f);
shim_guMtxF2L(sp20, &gDisplayContext->matrixStack[gMatrixListPos]);
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPDisplayList(gMasterGfxPos++, D_E01108B4[0]);
temp1 = (unk_00 % 2) * 32;
temp2 = (s32) (data->unk_44 * 4.0f) * 32;
envAlpha = (data->unk_44 * 4.0f - (s32) data->unk_44 * 4) * 256.0f;
texCoordS = (type % 2) * 32;
texCoordT = (s32) (data->animFrame * 4.0f) * 32;
envAlpha = (data->animFrame * 4.0f - (s32) data->animFrame * 4) * 256.0f;
gDPSetTileSize(gMasterGfxPos++, G_TX_RENDERTILE,
(temp1 ) * 4, (temp2 ) * 4,
(temp1 + 31) * 4, (temp2 + 31) * 4);
(texCoordS ) * 4, (texCoordT ) * 4,
(texCoordS + 31) * 4, (texCoordT + 31) * 4);
gDPSetTileSize(gMasterGfxPos++, 1,
(temp1 ) * 4, (temp2 + 32) * 4,
(temp1 + 31) * 4, (temp2 + 63) * 4);
(texCoordS ) * 4, (texCoordT + 32) * 4,
(texCoordS + 31) * 4, (texCoordT + 63) * 4);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, data->unk_18, data->unk_1C, data->unk_20, unk_24);
gDPSetEnvColor(gMasterGfxPos++, data->unk_28, data->unk_2C, data->unk_30, envAlpha);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, data->primCol.r, data->primCol.g, data->primCol.b, alpha);
gDPSetEnvColor(gMasterGfxPos++, data->envCol.r, data->envCol.g, data->envCol.b, envAlpha);
gSPDisplayList(gMasterGfxPos++, D_E01108B0[0]);
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
if (unk_00 % 2 == 1 && (s32) (data->unk_44 * 4.0f) == 3) {
gDPSetPrimColor(gMasterGfxPos++, 0, 0, data->unk_18, data->unk_1C, data->unk_20, unk_24 * envAlpha / 255);
if (type % 2 == 1 && (s32) (data->animFrame * 4.0f) == 3) {
gDPSetPrimColor(gMasterGfxPos++, 0, 0, data->primCol.r, data->primCol.g, data->primCol.b, alpha * envAlpha / 255);
gDPSetCombineLERP(gMasterGfxPos++, 0, 0, 0, PRIMITIVE, SHADE, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, SHADE, 0, PRIMITIVE, 0);
gSPDisplayList(gMasterGfxPos++, D_09001168_3F9E28);
}

View File

@ -646,7 +646,7 @@ ApiStatus DropItemEntity(Evt* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
ApiStatus DropTinyItemEntity(Evt* script, s32 isInitialCall) {
ApiStatus DropResizableItemEntity(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 x = evt_get_variable(script, *args++);
@ -656,7 +656,7 @@ ApiStatus DropTinyItemEntity(Evt* script, s32 isInitialCall) {
s32 pickupVar = evt_get_variable_index(script, *args++);
script->varTable[0] = make_item_entity_nodelay(itemID, x, y, z, itemSpawnMode, pickupVar);
set_item_entity_flags(script->varTable[0], ITEM_ENTITY_FLAG_TINY);
set_item_entity_flags(script->varTable[0], ITEM_ENTITY_RESIZABLE);
return ApiStatus_DONE2;
}

View File

@ -634,42 +634,42 @@ ApiStatus func_802D2520(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
PlayerStatus* playerStatus = &gPlayerStatus;
s32 a0 = *args++;
s32 val = evt_get_variable(script, *args++);
s32 foldType = evt_get_variable(script, *args++);
s32 a2, a3, a4, a5;
func_802DDFF8(a0, FOLD_TYPE_NONE, 0, 0, 0, 0, 0);
switch (val) {
case 0:
switch (foldType) {
case FOLD_TYPE_NONE:
playerStatus->renderMode = RENDER_MODE_ALPHATEST;
func_802DDFF8(a0, FOLD_TYPE_NONE, 0, 0, 0, 0, D_802DB5B0);
break;
case 2:
case 3:
case FOLD_TYPE_2:
case FOLD_TYPE_3:
playerStatus->renderMode = RENDER_MODE_ALPHATEST;
case 1:
func_802DDFF8(a0, val, 0, 0, 0, 0, D_802DB5B0);
case FOLD_TYPE_1:
func_802DDFF8(a0, foldType, 0, 0, 0, 0, D_802DB5B0);
break;
case 4:
case FOLD_TYPE_4:
playerStatus->renderMode = RENDER_MODE_ALPHATEST;
a2 = evt_get_variable(script, *args++);
a3 = evt_get_variable(script, *args++);
a4 = evt_get_variable(script, *args++);
func_802DDFF8(a0, FOLD_TYPE_4, a2, a3, a4, 0, D_802DB5B0);
break;
case 6:
case FOLD_TYPE_6:
playerStatus->renderMode = RENDER_MODE_ALPHATEST;
a2 = evt_get_variable(script, *args++);
a3 = evt_get_variable(script, *args++);
a4 = evt_get_variable(script, *args++);
func_802DDFF8(a0, FOLD_TYPE_6, a2, a3, a4, 255, D_802DB5B0);
break;
case 7:
case FOLD_TYPE_7:
playerStatus->renderMode = RENDER_MODE_SURFACE_XLU_LAYER2;
a5 = evt_get_variable(script, *args++);
func_802DDFF8(a0, FOLD_TYPE_7, 255, 255, 255, a5, D_802DB5B0);
break;
case 8:
case FOLD_TYPE_8:
playerStatus->renderMode = RENDER_MODE_SURFACE_XLU_LAYER2;
a2 = evt_get_variable(script, *args++);
a3 = evt_get_variable(script, *args++);
@ -677,14 +677,14 @@ ApiStatus func_802D2520(Evt* script, s32 isInitialCall) {
a5 = evt_get_variable(script, *args++);
func_802DDFF8(a0, FOLD_TYPE_8, a2, a3, a4, a5, D_802DB5B0);
break;
case 5:
case FOLD_TYPE_5:
playerStatus->renderMode = RENDER_MODE_ALPHATEST;
a2 = evt_get_variable(script, *args++);
a3 = evt_get_variable(script, *args++);
a4 = evt_get_variable(script, *args++);
func_802DDFF8(a0, FOLD_TYPE_5, a2, a3, a4, 0, D_802DB5B0);
break;
case 13:
case FOLD_TYPE_D:
playerStatus->renderMode = RENDER_MODE_SURFACE_XLU_LAYER2;
a2 = evt_get_variable(script, *args++);
a3 = evt_get_variable(script, *args++);

View File

@ -57,7 +57,7 @@ void action_update_step_up(void) {
integrate_gravity();
sin_cos_rad(DEG_TO_RAD(playerStatus->targetYaw), &sinTheta, &cosTheta);
colliderID = -1;
colliderID = NO_COLLIDER;
playerStatus->position.x += sinTheta * 3.0f;
playerStatus->position.z -= cosTheta * 3.0f;

View File

@ -217,7 +217,7 @@ EvtScript N(EVS_Scene_TubbaReunion) = {
EVT_END_THREAD
EVT_CALL(PlaySoundAtNpc, NPC_TubbasHeart, SOUND_20C8, 0)
EVT_CALL(NpcJump0, NPC_TubbasHeart, 298, 56, 31, 18)
EVT_CALL(SetNpcPos, NPC_TubbasHeart, 0, -1000, 0)
EVT_CALL(SetNpcPos, NPC_TubbasHeart, NPC_DISPOSE_LOCATION)
EVT_CALL(EnableNpcShadow, NPC_TubbasHeart, FALSE)
EVT_THREAD
EVT_CALL(SetNpcAnimation, NPC_Tubba, ANIM_WorldTubba_Anim23)

View File

@ -29,7 +29,7 @@ EvtScript N(EVS_NpcIdle_TubbasHeart) = {
EVT_CALL(SetNpcJumpscale, NPC_SELF, EVT_FLOAT(2.5))
EVT_CALL(PlaySoundAtNpc, NPC_SELF, SOUND_20C8, 0)
EVT_CALL(NpcJump0, NPC_SELF, 0, 200, 0, 15)
EVT_CALL(SetNpcPos, NPC_SELF, 0, -1000, 0)
EVT_CALL(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION)
EVT_SET(GB_StoryProgress, STORY_CH3_HEART_ESCAPED_WELL)
EVT_RETURN
EVT_END

View File

@ -20,23 +20,7 @@ NpcSettings N(NpcSettings_HuffNPuff) = {
.level = 99,
};
NpcSettings N(NpcSettings_Unused1) = {
.height = 26,
.radius = 24,
.level = 99,
};
NpcSettings N(NpcSettings_Unused2) = {
.height = 20,
.radius = 20,
.level = 99,
};
NpcSettings N(NpcSettings_Unused3) = {
.height = 22,
.radius = 24,
.level = 99,
};
#include "world/common/npc/StarSpirit.inc.c"
Vec3f N(Path_JumpOut)[] = {
{ 600.0, 104.0, 0.0 },

View File

@ -65,7 +65,7 @@ EvtScript N(EVS_MakeEntities) = {
EVT_CALL(AssignBlockFlag, GF_IWA03_ItemBlock_Mushroom)
EVT_CALL(MakeEntity, EVT_PTR(Entity_YellowBlock), -1090, 408, -130, 0, ITEM_HONEY_SYRUP, MAKE_ENTITY_END)
EVT_CALL(AssignBlockFlag, GF_IWA03_ItemBlock_HoneySyrup)
EVT_CALL(MakeItemEntity, ITEM_LETTER25, -20, 95, -85, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_IWA03_Item_Letter25)
EVT_CALL(MakeItemEntity, ITEM_LETTER_TO_KOLORADO, -20, 95, -85, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_IWA03_Item_LettertoKolorado)
EVT_CALL(MakeItemEntity, ITEM_STAR_PIECE, -1865, 23, 20, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_IWA03_Item_StarPiece)
EVT_CALL(MakeItemEntity, ITEM_COIN, -1815, 23, 20, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_IWA03_Item_CoinC)
EVT_CALL(MakeItemEntity, ITEM_COIN, -1915, 23, 20, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_IWA03_Item_CoinD)

View File

@ -158,7 +158,7 @@ EvtScript N(EVS_Scene_MeetParakarry) = {
s32 N(LetterList)[] = {
ITEM_LETTER01,
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_LETTER10,
ITEM_NONE
};
@ -170,7 +170,7 @@ EvtScript N(EVS_NpcInteract_Parakarry) = {
EVT_IF_EQ(GF_IWA01_Item_Letter01, TRUE)
EVT_ADD(LVar0, 1)
EVT_END_IF
EVT_IF_EQ(GF_IWA03_Item_Letter25, TRUE)
EVT_IF_EQ(GF_IWA03_Item_LettertoKolorado, TRUE)
EVT_ADD(LVar0, 1)
EVT_END_IF
EVT_IF_EQ(GF_IWA04_Item_Letter10, TRUE)
@ -255,7 +255,7 @@ EvtScript N(EVS_NpcInteract_Parakarry) = {
EVT_WAIT(10)
EVT_CALL(SpeakToPlayer, NPC_PARTNER, ANIM_WorldParakarry_Talk, ANIM_WorldParakarry_Idle, 0, MSG_CH2_001E)
EVT_CALL(AddKeyItem, ITEM_LETTER01)
EVT_CALL(AddKeyItem, ITEM_LETTER25)
EVT_CALL(AddKeyItem, ITEM_LETTER_TO_KOLORADO)
EVT_CALL(AddKeyItem, ITEM_LETTER10)
EVT_END_IF
EVT_CALL(ResetCam, CAM_DEFAULT, EVT_FLOAT(4.0))

View File

@ -2,27 +2,44 @@
#define _WORLD_AREA_JAN_JAN_H_
enum {
AB_JAN_0 = AreaByte(0),
AB_JAN_1 = AreaByte(1),
AB_JAN_2 = AreaByte(2),
AB_JAN_3 = AreaByte(3),
AB_JAN_4 = AreaByte(4),
AB_JAN_5 = AreaByte(5),
AB_JAN_6 = AreaByte(6),
AB_JAN_7 = AreaByte(7),
AB_JAN_8 = AreaByte(8),
AB_JAN_9 = AreaByte(9),
AB_JAN_A = AreaByte(10),
AB_JAN_B = AreaByte(11),
AB_JAN_C = AreaByte(12),
AB_JAN_D = AreaByte(13),
AB_JAN_E = AreaByte(14),
AB_JAN_F = AreaByte(15),
AB_JAN_Unused_0 = AreaByte(0),
AB_JAN_Unused_1 = AreaByte(1),
AB_JAN_Unused_2 = AreaByte(2),
AB_JAN_Unused_3 = AreaByte(3),
AB_JAN_Unused_4 = AreaByte(4),
AB_JAN_Unused_5 = AreaByte(5),
AB_JAN_Unused_6 = AreaByte(6),
AB_JAN_Unused_7 = AreaByte(7),
AB_JAN_Unused_8 = AreaByte(8),
AB_JAN_Unused_9 = AreaByte(9),
AB_JAN_Unused_A = AreaByte(10),
AB_JAN_Unused_B = AreaByte(11),
AB_JAN_Unused_C = AreaByte(12),
AB_JAN_Unused_D = AreaByte(13),
AB_JAN_Unused_E = AreaByte(14),
AB_JAN_Unused_F = AreaByte(15),
};
enum {
AF_JAN_03 = AreaFlag(3),
AF_JAN_0D = AreaFlag(13),
AF_JAN_03 = AreaFlag(3),
AF_JAN02_RaphaelComment = AreaFlag(4),
AF_JAN02_MetCouncillor = AreaFlag(5),
AF_JAN_06 = AreaFlag(6),
AF_JAN_07 = AreaFlag(7),
AF_JAN01_KoloradoShouting = AreaFlag(9),
AF_JAN00_TreeDrop1 = AreaFlag(13),
AF_JAN01_TreeDrop2 = AreaFlag(14),
AF_JAN01_TreeDrop3 = AreaFlag(15),
AF_JAN01_TreeDrop4 = AreaFlag(16),
AF_JAN01_TreeDrop5 = AreaFlag(17),
AF_JAN01_TreeDrop6 = AreaFlag(18),
AF_JAN01_TreeDrop7 = AreaFlag(19),
AF_JAN02_TreeDrop2 = AreaFlag(20),
AF_JAN02_TreeDrop3 = AreaFlag(21),
AF_JAN_16 = AreaFlag(22),
AF_JAN03_TreeDrop1 = AreaFlag(23),
};
extern MapSettings jan_00_settings;

View File

@ -72,14 +72,14 @@ NpcSettings N(NpcSettings_HeartPlant_01) = {
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EvtScript N(EVS_LetterPrompt_Kolorado) = {
EVT_CALL(N(LetterDelivery_Init),
NPC_Kolorado_02, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
ITEM_LETTER25, ITEM_NONE,
ITEM_LETTER_TO_KOLORADO, ITEM_NONE,
MSG_CH5_001D, MSG_CH5_001E, MSG_CH5_001F, MSG_CH5_0020,
EVT_PTR(N(LetterList)))
EVT_EXEC_WAIT(N(EVS_DoLetterDelivery))

View File

@ -13,7 +13,7 @@ FoliageDropList N(Tree1_Drops) = {
.itemID = ITEM_COCONUT,
.pos = { 485, 95, -145 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN_0D,
.spawnFlag = AF_JAN00_TreeDrop1,
},
}
};
@ -30,7 +30,7 @@ BombTrigger N(D_80247A1C_B27F5C) = {
};
EvtScript N(EVS_80247A2C) = {
EVT_SET(AF_JAN_0D, FALSE)
EVT_SET(AF_JAN00_TreeDrop1, FALSE)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree1)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o282, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(D_80247A1C_B27F5C)), 1, 0)

View File

@ -1,18 +0,0 @@
#include "jan_01.h"
#include "effects.h"
static char* N(exit_str_0) = "jan_00";
static char* N(exit_str_1) = "jan_02";
#include "world/common/atomic/TexturePan.inc.c"
ApiStatus func_8024030C_B2833C(Evt* script, s32 isInitialCall) {
fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}
#include "world/common/enemy/ai/HoppingAI.inc.c"
#include "world/common/todo/SetCamera0Flag1000.inc.c"
#include "world/common/todo/UnsetCamera0Flag1000.inc.c"

View File

@ -1,4 +0,0 @@
#include "jan_01.h"
#include "common/foliage.inc.c"

View File

@ -2,8 +2,32 @@
/// @brief Jade Jungle - Beach
#include "common.h"
#include "../jan.h"
#include "message_ids.h"
#include "map.h"
#include "../jan.h"
#include "mapfs/jan_01_shape.h"
#include "mapfs/jan_01_hit.h"
#include "sprite/npc/Kolorado.h"
#include "sprite/npc/Fuzzy.h"
enum {
NPC_Kolorado = 0,
NPC_Fuzzy_01 = 1,
NPC_Fuzzy_02 = 2,
NPC_Fuzzy_03 = 3,
NPC_Fuzzy_04 = 4,
};
enum {
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE jan_01
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupMusic);
extern EvtScript N(EVS_MakeEntities);
extern EvtScript N(EVS_SetupFoliage);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,14 @@
#include "jan_01.h"
EntryList N(Entrances) = {
[jan_01_ENTRY_0] { -663.0, -14.0, 53.0, 90.0 },
[jan_01_ENTRY_1] { 663.0, -16.0, 40.0, 270.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.background = &gBackgroundImage,
.tattle = { MSG_MapTattle_jan_01 },
};

View File

@ -0,0 +1,8 @@
#include "jan_01.h"
EvtScript N(EVS_SetupMusic) = {
EVT_CALL(SetMusicTrack, 0, SONG_YOSHIS_VILLAGE, 0, 8)
EVT_CALL(ClearAmbientSounds, 250)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,58 @@
#include "jan_01.h"
#include "effects.h"
#include "world/common/atomic/TexturePan.inc.c"
#include "world/common/atomic/TexturePan.data.inc.c"
API_CALLABLE(N(SpawnSunEffect)) {
fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}
EvtScript N(EVS_ExitWalk_jan_00_1) = EVT_EXIT_WALK(60, jan_01_ENTRY_0, "jan_00", jan_00_ENTRY_1);
EvtScript N(EVS_ExitWalk_jan_02_0) = EVT_EXIT_WALK(60, jan_01_ENTRY_1, "jan_02", jan_02_ENTRY_0);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_00_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_02_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_JADE_JUNGLE)
EVT_CALL(SetSpriteShading, SHADING_NONE)
EVT_SETUP_CAMERA_DEFAULT()
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(DefaultNPCs)))
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC(N(EVS_SetupFoliage))
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_WAIT(1)
EVT_EXEC(N(EVS_SetupMusic))
EVT_CALL(PlaySound, SOUND_80000017)
EVT_CALL(EnableTexPanning, MODEL_o75, TRUE)
EVT_CALL(EnableTexPanning, MODEL_o7, TRUE)
EVT_CALL(EnableTexPanning, MODEL_o6, TRUE)
EVT_THREAD
TEX_PAN_PARAMS_ID(TEX_PANNER_1)
TEX_PAN_PARAMS_STEP( -100, 350, 0, 0)
TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0)
TEX_PAN_PARAMS_INIT( 0, 0, 0, 0)
EVT_EXEC(N(EVS_UpdateTexturePan))
EVT_END_THREAD
EVT_THREAD
TEX_PAN_PARAMS_ID(TEX_PANNER_2)
TEX_PAN_PARAMS_STEP( 100, 200, 0, 0)
TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0)
TEX_PAN_PARAMS_INIT( 0, 0, 0, 0)
EVT_EXEC(N(EVS_UpdateTexturePan))
EVT_END_THREAD
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o144, SURFACE_TYPE_WATER)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o145, SURFACE_TYPE_WATER)
EVT_CALL(N(SpawnSunEffect))
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,382 @@
#include "jan_01.h"
#include "effects.h"
#include "world/common/enemy/complete/JungleFuzzy_Wander.inc.c"
#include "world/common/enemy/complete/Fuzzy.inc.c"
#include "world/common/npc/Kolorado.inc.c"
#include "world/common/todo/SetCamera0Flag1000.inc.c"
#include "world/common/todo/UnsetCamera0Flag1000.inc.c"
EvtScript N(EVS_PlayerWatchKolorado) = {
EVT_LOOP(0)
EVT_CALL(PlayerFaceNpc, NPC_SELF, FALSE)
EVT_WAIT(1)
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Kolorado_RunToVillage) = {
EVT_EXEC_GET_TID(N(EVS_PlayerWatchKolorado), LVar9)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_40 | NPC_FLAG_100, TRUE)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Run)
EVT_CALL(SetNpcSpeed, NPC_SELF, EVT_FLOAT(4.5))
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_ADD(LVar0, 150)
EVT_CALL(NpcMoveTo, NPC_SELF, LVar0, 60, 0)
EVT_CALL(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_GRAVITY, FALSE)
EVT_KILL_THREAD(LVar9)
EVT_CALL(N(UnsetCamera0Flag1000))
EVT_CALL(ResetCam, CAM_DEFAULT, EVT_FLOAT(5.0))
EVT_CALL(SetSelfVar, 0, 3)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Kolorado) = {
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Fallen)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_GRAVITY, TRUE)
EVT_LOOP(0)
EVT_WAIT(1)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_IF_GT(LVar0, -600)
EVT_BREAK_LOOP
EVT_END_IF
EVT_END_LOOP
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(ShowMessageAtScreenPos, MSG_CH5_000D, 320, 60)
EVT_CALL(PlaySoundAtPlayer, SOUND_262, 0)
EVT_CALL(ShowEmote, NPC_Kolorado, EMOTE_EXCLAMATION, 0, 25, FALSE, 0, 0, 0, 0)
EVT_CALL(PlaySoundAtNpc, NPC_PARTNER, SOUND_262, 0)
EVT_CALL(ShowEmote, NPC_PARTNER, EMOTE_EXCLAMATION, 0, 25, TRUE, 0, 0, 0, 0)
EVT_WAIT(25)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_LABEL(0)
EVT_CALL(GetSelfVar, 0, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(0)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_IF_GT(LVar0, 430)
EVT_CALL(GetPartnerInUse, LVar0)
EVT_IF_NE(LVar0, PARTNER_NONE)
EVT_CALL(InterruptUsePartner)
EVT_END_IF
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(RemoveNpc, NPC_Fuzzy_01)
EVT_CALL(ShowMessageAtScreenPos, MSG_CH5_0010, 0, 60)
EVT_CALL(InterpPlayerYaw, 270, 4)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic)
EVT_CALL(NpcMoveTo, NPC_SELF, 250, 90, 5)
EVT_CALL(func_802CF56C, 2)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_SET(LVar3, LVar0)
EVT_ADD(LVar3, -50)
EVT_CALL(SetNpcSpeed, NPC_SELF, EVT_FLOAT(5.0))
EVT_CALL(NpcMoveTo, NPC_SELF, LVar3, LVar2, 0)
EVT_ADD(LVar0, LVar3)
EVT_DIV(LVar0, 2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetCamDistance, CAM_DEFAULT, 300)
EVT_CALL(SetCamPitch, CAM_DEFAULT, EVT_FLOAT(17.0), EVT_FLOAT(-7.0))
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(5.0))
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_CALL(N(SetCamera0Flag1000))
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_WAIT(10)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_0011)
EVT_SET(GB_StoryProgress, STORY_CH5_KOLORADO_ESCAPED_FUZZIES)
EVT_EXEC_WAIT(N(EVS_Kolorado_RunToVillage))
EVT_CALL(DisablePlayerInput, FALSE)
EVT_END_IF
EVT_CASE_EQ(1)
EVT_SET_GROUP(EVT_GROUP_00)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_PARTIAL)
EVT_CALL(func_802D2C14, 1)
EVT_WAIT(10)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Idle, 0, MSG_CH5_000F)
EVT_SET(GF_JAN01_SavedKolorado, TRUE)
EVT_CALL(SetSelfVar, 0, 2)
EVT_SET(GB_StoryProgress, STORY_CH5_KOLORADO_ESCAPED_FUZZIES)
EVT_EXEC_WAIT(N(EVS_Kolorado_RunToVillage))
EVT_CALL(func_802D2C14, 0)
EVT_CALL(SetTimeFreezeMode, TIME_FREEZE_NORMAL)
EVT_SET_GROUP(EVT_GROUP_0B)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_END_SWITCH
EVT_CALL(GetSelfVar, 0, LVar0)
EVT_IF_NE(LVar0, 3)
EVT_WAIT(1)
EVT_GOTO(0)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcHit_Kolorado) = {
EVT_CALL(GetOwnerEncounterTrigger, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(ENCOUNTER_TRIGGER_HAMMER)
EVT_SET(LVar1, 1)
EVT_CASE_EQ(ENCOUNTER_TRIGGER_JUMP)
EVT_SET(LVar1, 1)
EVT_CASE_EQ(ENCOUNTER_TRIGGER_PARTNER)
EVT_SET(LVar1, 1)
EVT_CASE_DEFAULT
EVT_SET(LVar1, 0)
EVT_END_SWITCH
EVT_IF_NE(LVar1, 0)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_WAIT(5)
EVT_SET(AF_JAN01_KoloradoShouting, TRUE)
EVT_WAIT(10)
EVT_CALL(NpcFacePlayer, NPC_SELF, 0)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Yell, 0, MSG_CH5_000E)
EVT_SET(AF_JAN01_KoloradoShouting, FALSE)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Kolorado) = {
EVT_IF_LT(GB_StoryProgress, STORY_CH5_KOLORADO_ESCAPED_FUZZIES)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_100, FALSE)
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Kolorado)))
EVT_CALL(BindNpcHit, NPC_SELF, EVT_PTR(N(EVS_NpcHit_Kolorado)))
EVT_ELSE
EVT_CALL(RemoveNpc, NPC_SELF)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Fuzzy_01) = {
EVT_CHILD_THREAD
EVT_CALL(GetNpcPos, NPC_Kolorado, LVar3, LVar1, LVar2)
EVT_SET(LVar4, LVar3)
EVT_ADD(LVar3, -200)
EVT_ADD(LVar4, 200)
EVT_LOOP(0)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_SWITCH(LVar0)
EVT_CASE_RANGE(LVar3, LVar4)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAG_IGNORE_TOUCH, 0)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAG_10000000, 0)
EVT_CASE_DEFAULT
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAG_IGNORE_TOUCH, 1)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAG_10000000, 1)
EVT_END_SWITCH
EVT_WAIT(1)
EVT_END_LOOP
EVT_END_CHILD_THREAD
EVT_SET(AF_JAN01_KoloradoShouting, FALSE)
EVT_CALL(GetNpcPos, NPC_Kolorado, LVar7, LVar8, LVar9)
EVT_ADD(LVar8, 20)
EVT_CALL(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2)
EVT_ADD(LVar2, 5)
EVT_CALL(SetNpcJumpscale, NPC_SELF, EVT_FLOAT(4.0))
EVT_SET(LVar4, 40)
EVT_SET(LVar5, 90)
EVT_SET(LVar6, 45)
EVT_LOOP(0)
EVT_MUL(LVar4, -1)
EVT_MUL(LVar5, -1)
EVT_MUL(LVar6, -1)
EVT_ADD(LVar0, LVar4)
EVT_CALL(NpcJump0, NPC_SELF, LVar0, 18, LVar2, 15)
EVT_CALL(PlaySoundAtNpc, NPC_Kolorado, SOUND_HIT_PLAYER_NORMAL, 0)
EVT_IF_NE(AF_JAN01_KoloradoShouting, TRUE)
EVT_CHILD_THREAD
EVT_CALL(InterpNpcYaw, NPC_Kolorado, LVar5, 2)
EVT_PLAY_EFFECT(EFFECT_DAMAGE_STARS, 3, LVar7, LVar8, LVar9, 0, -1, 0, 3)
EVT_END_CHILD_THREAD
EVT_END_IF
EVT_ADD(LVar0, LVar4)
EVT_CALL(SetNpcJumpscale, NPC_SELF, EVT_FLOAT(1.0))
EVT_CALL(NpcJump0, NPC_SELF, LVar0, -12, LVar2, 15)
EVT_LABEL(1)
EVT_WAIT(1)
EVT_IF_EQ(AF_JAN01_KoloradoShouting, TRUE)
EVT_GOTO(1)
EVT_END_IF
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcDefeat_Fuzzy_01) = {
EVT_CALL(GetBattleOutcome, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(OUTCOME_PLAYER_WON)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Idle)
EVT_CALL(GetPartnerInUse, LVar0)
EVT_IF_NE(LVar0, PARTNER_NONE)
EVT_CALL(InterruptUsePartner)
EVT_END_IF
EVT_CALL(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_100, TRUE)
EVT_THREAD
EVT_WAIT(30)
EVT_CALL(GetNpcPos, NPC_Kolorado, LVar3, LVar1, LVar2)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_SET(LVar4, LVar0)
EVT_IF_LT(LVar3, LVar0)
EVT_CALL(InterpPlayerYaw, 270, 0)
EVT_ADD(LVar4, -30)
EVT_ELSE
EVT_CALL(InterpPlayerYaw, 90, 0)
EVT_ADD(LVar4, 30)
EVT_END_IF
EVT_ADD(LVar0, LVar4)
EVT_DIV(LVar0, 2)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_CALL(SetCamDistance, CAM_DEFAULT, 300)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(3.0))
EVT_CALL(N(SetCamera0Flag1000))
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_CALL(SetNpcFlagBits, NPC_Kolorado, NPC_FLAG_40 | NPC_FLAG_100, TRUE)
EVT_CALL(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Run)
EVT_CALL(SetNpcSpeed, NPC_Kolorado, EVT_FLOAT(3.0))
EVT_IF_LT(LVar2, -45)
EVT_SET(LVar2, -45)
EVT_END_IF
EVT_CALL(NpcMoveTo, NPC_Kolorado, LVar4, LVar2, 0)
EVT_CALL(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Idle)
EVT_CALL(NpcFacePlayer, NPC_Kolorado, 0)
EVT_CALL(SetNpcVar, NPC_Kolorado, 0, 1)
EVT_END_THREAD
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_Fuzzy_01) = {
EVT_IF_LT(GB_StoryProgress, STORY_CH5_KOLORADO_ESCAPED_FUZZIES)
EVT_CALL(SetSelfVar, 0, 0)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Fuzzy_Jungle_Anim04)
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Fuzzy_01)))
EVT_CALL(BindNpcDefeat, NPC_SELF, EVT_PTR(N(EVS_NpcDefeat_Fuzzy_01)))
EVT_ELSE
EVT_CALL(RemoveNpc, NPC_SELF)
EVT_END_IF
EVT_RETURN
EVT_END
};
StaticNpc N(NpcData_Kolorado) = {
.id = NPC_Kolorado,
.settings = &N(NpcSettings_Kolorado),
.pos = { -70.0f, -9.0f, 90.0f },
.yaw = 90,
.flags = ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_100000 | ENEMY_FLAG_200000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_20000000,
.init = &N(EVS_NpcInit_Kolorado),
.drops = NPC_NO_DROPS,
.animations = KOLORADO_ANIMS,
.tattle = MSG_NpcTattle_Kolorado,
};
StaticNpc N(NpcData_Fuzzy_01) = {
.id = NPC_Fuzzy_01,
.settings = &N(NpcSettings_Fuzzy),
.pos = { -30.0f, 0.0f, 90.0f },
.yaw = 270,
.flags = ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_40000 | ENEMY_FLAG_200000 | ENEMY_FLAG_400000 | ENEMY_FLAG_800000,
.init = &N(EVS_NpcInit_Fuzzy_01),
.drops = NPC_NO_DROPS,
.animations = JUNGLE_FUZZY_ANIMS,
};
EvtScript N(EVS_NpcInit_Fuzzy_02) = {
EVT_IF_LT(GB_StoryProgress, STORY_CH5_KOLORADO_ESCAPED_FUZZIES)
EVT_CALL(RemoveNpc, NPC_SELF)
EVT_END_IF
EVT_RETURN
EVT_END
};
StaticNpc N(NpcData_Fuzzy_02) = {
.id = NPC_Fuzzy_02,
.settings = &N(NpcSettings_JungleFuzzy_Wander),
.pos = { -350.0f, 3.0f, 40.0f },
.yaw = 270,
.flags = ENEMY_FLAG_400 | ENEMY_FLAG_400000,
.init = &N(EVS_NpcInit_Fuzzy_02),
.drops = JUNGLE_FUZZY_DROPS,
.territory = {
.wander = {
.isFlying = FALSE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { -350, 3, 40 },
.wanderSize = { 50 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { -350, 3, 40 },
.detectSize = { 200 },
}
},
.animations = JUNGLE_FUZZY_ANIMS,
.aiDetectFlags = AI_DETECT_SENSITIVE_MOTION,
};
StaticNpc N(NpcData_Fuzzy_03) = {
.id = NPC_Fuzzy_03,
.settings = &N(NpcSettings_JungleFuzzy_Wander),
.pos = { 0.0f, -10.0f, 110.0f },
.yaw = 90,
.flags = ENEMY_FLAG_400 | ENEMY_FLAG_400000,
.init = &N(EVS_NpcInit_Fuzzy_02),
.drops = JUNGLE_FUZZY_DROPS,
.territory = {
.wander = {
.isFlying = FALSE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 0, -10, 110 },
.wanderSize = { 50 },
.detectShape = SHAPE_CYLINDER,
.detectPos = { 0, -10, 110 },
.detectSize = { 200 },
}
},
.animations = JUNGLE_FUZZY_ANIMS,
.aiDetectFlags = AI_DETECT_SENSITIVE_MOTION,
};
StaticNpc N(NpcData_Fuzzy_04) = {
.id = NPC_Fuzzy_04,
.settings = &N(NpcSettings_JungleFuzzy_Wander),
.pos = { 350.0f, 3.0f, 40.0f },
.yaw = 270,
.flags = ENEMY_FLAG_400 | ENEMY_FLAG_400000,
.init = &N(EVS_NpcInit_Fuzzy_02),
.drops = JUNGLE_FUZZY_DROPS,
.territory = {
.wander = {
.isFlying = FALSE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.wanderShape = SHAPE_CYLINDER,
.centerPos = { 350, 3, 40 },
.wanderSize = { 50 },
.detectShape = SHAPE_RECT,
.detectPos = { 350, 3, 75 },
.detectSize = { 200, 125 },
}
},
.animations = JUNGLE_FUZZY_ANIMS,
.aiDetectFlags = AI_DETECT_SENSITIVE_MOTION,
};
NpcGroupList N(DefaultNPCs) = {
NPC_GROUP(N(NpcData_Kolorado)),
NPC_GROUP(N(NpcData_Fuzzy_01), BTL_JAN_FORMATION_0A, BTL_JAN_STAGE_00),
NPC_GROUP(N(NpcData_Fuzzy_02), BTL_JAN_FORMATION_0A, BTL_JAN_STAGE_00),
NPC_GROUP(N(NpcData_Fuzzy_03), BTL_JAN_FORMATION_0B, BTL_JAN_STAGE_00),
NPC_GROUP(N(NpcData_Fuzzy_04), BTL_JAN_FORMATION_0A, BTL_JAN_STAGE_00),
{}
};

View File

@ -0,0 +1,17 @@
#include "jan_01.h"
#include "entity.h"
EvtScript N(EVS_MakeEntities) = {
EVT_CALL(MakeItemEntity, ITEM_LETTER_TO_IGOR, -110, 90, -230, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_JAN01_Item_Letter11)
EVT_CALL(MakeEntity, EVT_PTR(Entity_BellbellPlant), -375, -3, -75, 0, MAKE_ENTITY_END)
EVT_CALL(MakeEntity, EVT_PTR(Entity_HiddenYellowBlock), -335, 57, -55, 0, ITEM_REPEL_GEL, MAKE_ENTITY_END)
EVT_CALL(AssignBlockFlag, GF_JAN01_HiddenItem_RepelGel)
EVT_CALL(MakeEntity, EVT_PTR(Entity_BellbellPlant), 180, -3, -115, 0, MAKE_ENTITY_END)
EVT_CALL(MakeEntity, EVT_PTR(Entity_HiddenYellowBlock), 140, 57, -85, 0, ITEM_MYSTERY, MAKE_ENTITY_END)
EVT_CALL(AssignBlockFlag, GF_JAN01_HiddenItem_Mystery)
EVT_CALL(MakeItemEntity, ITEM_COIN, 340, 100, -90, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_JAN01_Item_CoinA)
EVT_CALL(MakeItemEntity, ITEM_COIN, 340, 125, -90, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_JAN01_Item_CoinB)
EVT_CALL(MakeEntity, EVT_PTR(Entity_SpinningFlower), 340, 0, -90, 0, MAKE_ENTITY_END)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,227 @@
#include "jan_01.h"
#include "common/foliage.inc.c"
FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o99);
FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o98);
ShakeTreeConfig N(ShakeTree_Tree1) = {
.leaves = &N(Tree1_LeafModels),
.trunk = &N(Tree1_TrunkModels),
};
BombTrigger N(BombPos_Tree1) = {
.pos = { 160.0f, 0.0f, -287.0f },
.radius = 0.0f
};
FoliageModelList N(Tree2_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o85, MODEL_o86);
FoliageModelList N(Tree2_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o84);
FoliageDropList N(Tree2_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { -618, 95, -75 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN01_TreeDrop2,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree2) = {
.leaves = &N(Tree2_LeafModels),
.trunk = &N(Tree2_TrunkModels),
.drops = &N(Tree2_Drops),
};
BombTrigger N(BombPos_Tree2) = {
.pos = { -628.0f, 0.0f, -95.0f },
.radius = 0.0f
};
FoliageModelList N(Tree3_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o79, MODEL_o80);
FoliageModelList N(Tree3_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o78);
FoliageDropList N(Tree3_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { -401, 105, -115 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN01_TreeDrop3,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree3) = {
.leaves = &N(Tree3_LeafModels),
.trunk = &N(Tree3_TrunkModels),
.drops = &N(Tree3_Drops),
};
BombTrigger N(BombPos_Tree3) = {
.pos = { -391.0f, 0.0f, -135.0f },
.radius = 0.0f
};
FoliageModelList N(Tree4_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o82, MODEL_o83);
FoliageModelList N(Tree4_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o81);
FoliageDropList N(Tree4_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { -351, 75, -95 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN01_TreeDrop4,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree4) = {
.leaves = &N(Tree4_LeafModels),
.trunk = &N(Tree4_TrunkModels),
.drops = &N(Tree4_Drops),
};
BombTrigger N(BombPos_Tree4) = {
.pos = { -341.0f, 0.0f, -115.0f },
.radius = 0.0f
};
FoliageModelList N(Tree5_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o88, MODEL_o89);
FoliageModelList N(Tree5_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o87);
FoliageDropList N(Tree5_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { 58, 95, -135 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN01_TreeDrop5,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree5) = {
.leaves = &N(Tree5_LeafModels),
.trunk = &N(Tree5_TrunkModels),
.drops = &N(Tree5_Drops),
};
BombTrigger N(BombPos_Tree5) = {
.pos = { 68.0f, 0.0f, -155.0f },
.radius = 0.0f
};
FoliageModelList N(Tree6_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o104, MODEL_o105);
FoliageModelList N(Tree6_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o103);
FoliageDropList N(Tree6_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { 261, 75, -115 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN01_TreeDrop6,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree6) = {
.leaves = &N(Tree6_LeafModels),
.trunk = &N(Tree6_TrunkModels),
.drops = &N(Tree6_Drops),
};
BombTrigger N(BombPos_Tree6) = {
.pos = { 251.0f, 0.0f, -135.0f },
.radius = 0.0f
};
FoliageModelList N(Tree7_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o113, MODEL_o114);
FoliageModelList N(Tree7_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o112);
FoliageDropList N(Tree7_DropsA) = {
.count = 1,
.drops = {
{
.itemID = ITEM_STAR_PIECE,
.pos = { 441, 75, -135 },
.spawnMode = ITEM_SPAWN_MODE_FALL_NEVER_VANISH,
.pickupFlag = GF_JAN01_Tree7_StarPiece,
.spawnFlag = AF_JAN01_TreeDrop_StarPiece,
},
}
};
FoliageDropList N(Tree7_DropsB) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { 441, 75, -135 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN01_TreeDrop7,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree7A) = {
.leaves = &N(Tree7_LeafModels),
.trunk = &N(Tree7_TrunkModels),
.drops = &N(Tree7_DropsA),
};
ShakeTreeConfig N(ShakeTree_Tree7B) = {
.leaves = &N(Tree7_LeafModels),
.trunk = &N(Tree7_TrunkModels),
.drops = &N(Tree7_DropsB),
};
BombTrigger N(BombPos_Tree7) = {
.pos = { 431.0f, 0.0f, -155.0f },
.radius = 0.0f
};
EvtScript N(EVS_SetupFoliage) = {
EVT_SET(AF_JAN01_TreeDrop2, FALSE)
EVT_SET(AF_JAN01_TreeDrop3, FALSE)
EVT_SET(AF_JAN01_TreeDrop4, FALSE)
EVT_SET(AF_JAN01_TreeDrop5, FALSE)
EVT_SET(AF_JAN01_TreeDrop6, FALSE)
EVT_SET(AF_JAN01_TreeDrop7, FALSE)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree1)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o204, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree1)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree2)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o84, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree2)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree3)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o203, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree3)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree4)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o152, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree4)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree5)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o155, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree5)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree6)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o103, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree6)), 1, 0)
EVT_IF_EQ(GF_JAN01_Tree7_StarPiece, FALSE)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree7A)))
EVT_ELSE
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree7B)))
EVT_END_IF
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o205, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree7)), 1, 0)
EVT_RETURN
EVT_END
};

View File

@ -1,9 +0,0 @@
#include "jan_02.h"
static char* N(exit_str_0) = "jan_01";
static char* N(exit_str_1) = "jan_03";
ApiStatus func_80240000_B2C470(Evt* script, s32 isInitialCall) {
bgm_set_track_volumes(0, 0);
return ApiStatus_DONE2;
}

View File

@ -1,35 +0,0 @@
#include "jan_02.h"
#include "effects.h"
#include "mapfs/jan_02_hit.h"
#include "mapfs/jan_02_shape.h"
#include "world/common/atomic/TexturePan.inc.c"
extern s32 D_80242BD8_B2F048;
ApiStatus func_8024033C_B2C7AC(Evt* script, s32 isInitialCall) {
bgm_clear_track_volumes(0, 0);
return ApiStatus_DONE2;
}
ApiStatus func_80240360_B2C7D0(Evt* script, s32 isInitialCall) {
u16 currentFloor = gCollisionStatus.currentFloor;
if (D_80242BD8_B2F048 != 0) {
if (currentFloor == COLLIDER_o327 || currentFloor == COLLIDER_o330) {
set_model_flags(MODEL_g70, MODEL_FLAG_ENABLED, 0);
D_80242BD8_B2F048 = 0;
}
} else {
if (currentFloor == COLLIDER_o319 || currentFloor == COLLIDER_o316) {
set_model_flags(MODEL_g70, MODEL_FLAG_ENABLED, 1);
D_80242BD8_B2F048 = 1;
}
}
return ApiStatus_BLOCK;
}
ApiStatus func_802403F8_B2C868(Evt* script, s32 isInitialCall) {
fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

View File

@ -1,52 +0,0 @@
#include "jan_02.h"
#define CHUCK_QUIZMO_NPC_ID 5
#include "world/common/enemy/ai/PatrolNoAttackAI.inc.c"
#include "world/common/todo/GetNpcCollisionHeight.inc.c"
#include "world/common/todo/AddPlayerHandsOffset.inc.c"
extern s32 N(ItemChoice_HasSelectedItem);
extern s32 N(ItemChoice_SelectedItemID);
#include "world/common/todo/ItemChoice_WaitForSelection.inc.c"
ApiStatus N(ItemChoice_SaveSelected)(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
N(ItemChoice_SelectedItemID) = evt_get_variable(script, *args++);
N(ItemChoice_HasSelectedItem) = TRUE;
return ApiStatus_DONE2;
}
BSS s32 D_80248760_jan_02[114];
ApiStatus func_80241578_B2D9E8(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr = (s32*) evt_get_variable(script, *args++);
s32 i;
if (ptr != NULL) {
for (i = 0; ptr[i] != 0; i++) {
D_80248760_jan_02[i] = ptr[i];
}
D_80248760_jan_02[i] = 0;
} else {
for (i = 0; i < 112; i++) {
D_80248760_jan_02[i] = i + 16;
D_80248760_jan_02[112] = 0;
}
}
return ApiStatus_DONE2;
}
extern s32 N(Quizmo_Worker);
extern s32 N(Quizmo_AnswerResult);
extern EffectInstance* N(Quizmo_StageEffect);
extern EffectInstance* N(Quizmo_AudienceEffect);
extern EffectInstance* N(Quizmo_VannaTEffect);
#include "world/common/atomic/Quizmo.inc.c"
#include "world/common/todo/SwitchToPartner.inc.c"

View File

@ -1,4 +0,0 @@
#include "jan_02.h"
#include "common/foliage.inc.c"

View File

@ -2,8 +2,28 @@
/// @brief Jade Jungle - Village Cove
#include "common.h"
#include "../jan.h"
#include "message_ids.h"
#include "map.h"
#include "../jan.h"
#include "mapfs/jan_02_shape.h"
#include "mapfs/jan_02_hit.h"
#include "sprite/npc/WorldSushie.h"
enum {
NPC_YoshiLeader = 0,
NPC_YoshiCouncillor = 1,
NPC_Yoshi_01 = 2,
NPC_Yoshi_02 = 3,
NPC_Yoshi_03 = 4,
NPC_ChuckQuizmo = 5,
};
#define NAMESPACE jan_02
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupMusic);
extern EvtScript N(EVS_MakeEntities);
extern EvtScript N(EVS_SetupFoliage);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,14 @@
#include "jan_02.h"
EntryList N(Entrances) = {
[jan_02_ENTRY_0] { -450.0, 0.0, -450.0, 135.0 },
[jan_02_ENTRY_1] { 640.0, 0.0, 0.0, 270.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.background = &gBackgroundImage,
.tattle = { MSG_MapTattle_jan_02 },
};

View File

@ -0,0 +1,22 @@
#include "jan_02.h"
API_CALLABLE(N(AdjustTrackVolumes)) {
bgm_set_track_volumes(0, TRACK_VOLS_0);
return ApiStatus_DONE2;
}
EvtScript N(EVS_SetupMusic) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_RANGE(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING, STORY_CH5_SUSHIE_JOINED_PARTY)
EVT_CALL(SetMusicTrack, 0, SONG_YOSHIS_PANIC, 0, 8)
EVT_CASE_DEFAULT
EVT_CALL(SetMusicTrack, 0, SONG_YOSHIS_VILLAGE, 0, 8)
EVT_THREAD
EVT_WAIT(3)
EVT_CALL(N(AdjustTrackVolumes))
EVT_END_THREAD
EVT_END_SWITCH
EVT_CALL(ClearAmbientSounds, 250)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,98 @@
#include "jan_02.h"
#include "effects.h"
#include "world/common/atomic/TexturePan.inc.c"
#include "world/common/atomic/TexturePan.data.inc.c"
extern s32 N(PrevPalmTreeVisibility);
API_CALLABLE(N(ClearTrackVols)) {
bgm_clear_track_volumes(0, TRACK_VOLS_0);
return ApiStatus_DONE2;
}
API_CALLABLE(N(ManageBigPalmTreeVisibility)) {
u16 currentFloor = gCollisionStatus.currentFloor;
if (N(PrevPalmTreeVisibility) != 0) {
if (currentFloor == COLLIDER_o327 || currentFloor == COLLIDER_o330) {
set_model_flags(MODEL_g70, MODEL_FLAG_ENABLED, FALSE);
N(PrevPalmTreeVisibility) = FALSE;
}
} else {
if (currentFloor == COLLIDER_o319 || currentFloor == COLLIDER_o316) {
set_model_flags(MODEL_g70, MODEL_FLAG_ENABLED, TRUE);
N(PrevPalmTreeVisibility) = TRUE;
}
}
return ApiStatus_BLOCK;
}
API_CALLABLE(N(SpawnSunEffect)) {
fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}
EvtScript N(EVS_ExitWalk_jan_01_1) = {
EVT_SET_GROUP(EVT_GROUP_1B)
EVT_CALL(N(ClearTrackVols))
EVT_CALL(UseExitHeading, 60, jan_02_ENTRY_0)
EVT_EXEC(ExitWalk)
EVT_CALL(GotoMap, EVT_PTR("jan_01"), jan_01_ENTRY_1)
EVT_WAIT(100)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ExitWalk_jan_03_0) = EVT_EXIT_WALK(60, jan_02_ENTRY_1, "jan_03", jan_03_ENTRY_0);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_01_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilinw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_03_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0)
EVT_RETURN
EVT_END
};
s32 N(PrevPalmTreeVisibility) = TRUE;
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_YOSHIS_VILLAGE)
EVT_CALL(SetSpriteShading, SHADING_NONE)
EVT_SETUP_CAMERA_NO_LEAD()
EVT_SET(GF_MAP_YoshisVillage, TRUE)
EVT_SET(AF_JAN02_RaphaelComment, FALSE)
EVT_SET(AF_JAN02_MetCouncillor, FALSE)
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(DefaultNPCs)))
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_EXEC(N(EVS_SetupFoliage))
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitnw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK)
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_EXEC(N(EVS_SetupMusic))
EVT_CALL(PlaySound, SOUND_80000017)
EVT_CALL(EnableTexPanning, MODEL_o202, TRUE)
EVT_CALL(EnableTexPanning, MODEL_o203, TRUE)
EVT_CALL(EnableTexPanning, MODEL_o103, TRUE)
EVT_THREAD
TEX_PAN_PARAMS_ID(TEX_PANNER_1)
TEX_PAN_PARAMS_STEP( 0, 400, 0, 0)
TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0)
TEX_PAN_PARAMS_INIT( 0, 0, 0, 0)
EVT_EXEC(N(EVS_UpdateTexturePan))
EVT_END_THREAD
EVT_THREAD
TEX_PAN_PARAMS_ID(TEX_PANNER_2)
TEX_PAN_PARAMS_STEP( -100, 200, 0, 0)
TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0)
TEX_PAN_PARAMS_INIT( 0, 0, 0, 0)
EVT_EXEC(N(EVS_UpdateTexturePan))
EVT_END_THREAD
EVT_THREAD
EVT_CALL(N(ManageBigPalmTreeVisibility))
EVT_END_THREAD
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o337, SURFACE_TYPE_WATER)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o338, SURFACE_TYPE_WATER)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,510 @@
#include "jan_02.h"
#include "world/common/npc/Yoshi.inc.c"
#include "world/common/npc/Yoshi_Patrol.inc.c"
#include "world/common/complete/KeyItemChoice.inc.c"
#define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo
#define QUIZMO_PRE_STATIC_PAD
#include "world/common/complete/Quizmo.inc.c"
#include "world/common/todo/SwitchToPartner.inc.c"
EvtScript N(EVS_GetRescuedYoshiCount) = {
EVT_SET(LVar0, 0)
EVT_ADD(LVar0, GF_JAN05_SavedYoshi)
EVT_ADD(LVar0, GF_JAN07_SavedYoshi)
EVT_ADD(LVar0, GF_JAN08_SavedYoshi)
EVT_ADD(LVar0, GF_JAN10_SavedYoshi)
EVT_ADD(LVar0, GF_JAN11_SavedYoshi)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Scene_GetJadeRaven) = {
EVT_CALL(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_40, TRUE)
EVT_IF_EQ(GF_JAN02_Met_VillageLeader, TRUE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_0023)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_0024)
EVT_END_IF
EVT_WAIT(5)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_100, TRUE)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Walk)
EVT_CALL(NpcMoveTo, NPC_SELF, 8, -140, 25)
EVT_CALL(SetNpcFlagBits, NPC_SELF, NPC_FLAG_100, FALSE)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Idle)
EVT_WAIT(5)
EVT_CALL(UseSettingsFrom, CAM_DEFAULT, 25, 15, -150)
EVT_CALL(SetPanTarget, CAM_DEFAULT, 25, 15, -150)
EVT_CALL(SetCamDistance, CAM_DEFAULT, EVT_FLOAT(300.0))
EVT_CALL(SetCamPitch, CAM_DEFAULT, EVT_FLOAT(16.0), EVT_FLOAT(-8.0))
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(4.0))
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_WAIT(5)
EVT_CALL(PlayerMoveTo, 58, -140, 25)
EVT_CALL(PlayerFaceNpc, NPC_SELF, FALSE)
EVT_CALL(func_802D2C14, 1)
EVT_CALL(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_100, TRUE)
EVT_WAIT(30)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Rummage)
EVT_WAIT(30)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Rummage, ANIM_VillageLeader_Rummage, 5, MSG_CH5_0025)
EVT_WAIT(60)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Idle)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_0026)
EVT_GIVE_KEY_REWARD(ITEM_JADE_RAVEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_0027)
EVT_SET(GB_StoryProgress, STORY_CH5_GOT_JADE_RAVEN)
EVT_WAIT(15)
EVT_CALL(GetPlayerPos, LVar3, LVar4, LVar5)
EVT_ADD(LVar3, 25)
EVT_CALL(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5)
EVT_CALL(SetCamSpeed, CAM_DEFAULT, EVT_FLOAT(2.5))
EVT_CALL(PanToTarget, CAM_DEFAULT, 0, 1)
EVT_CALL(WaitForCam, CAM_DEFAULT, EVT_FLOAT(1.0))
EVT_CALL(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_40, FALSE)
EVT_CALL(func_802D2C14, 0)
EVT_CALL(GetCurrentPartnerID, LVar0)
EVT_IF_EQ(LVar0, PARTNER_SUSHIE)
EVT_THREAD
EVT_WAIT(15)
EVT_CALL(PlayerFaceNpc, NPC_PARTNER, FALSE)
EVT_END_THREAD
EVT_CALL(DisablePartnerAI, 0)
EVT_CALL(SpeakToPlayer, NPC_PARTNER, ANIM_WorldSushie_Talk, ANIM_WorldSushie_Idle, 2, MSG_CH5_0028)
EVT_ELSE
EVT_CALL(N(SwitchToPartner), PARTNER_SUSHIE)
EVT_CALL(SpeakToPlayer, NPC_PARTNER, -1, -1, 5, MSG_CH5_0029)
EVT_CALL(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_100, TRUE)
EVT_WAIT(15)
EVT_CALL(GetNpcPos, NPC_PARTNER, LVar2, LVar3, LVar4)
EVT_CALL(MakeLerp, LVar2, 85, 10, EASING_LINEAR)
EVT_LOOP(0)
EVT_CALL(UpdateLerp)
EVT_CALL(SetNpcPos, NPC_PARTNER, LVar0, LVar3, LVar4)
EVT_WAIT(1)
EVT_IF_EQ(LVar1, 0)
EVT_BREAK_LOOP
EVT_END_IF
EVT_END_LOOP
EVT_CALL(InterpNpcYaw, NPC_PARTNER, 270, 0)
EVT_WAIT(10)
EVT_THREAD
EVT_WAIT(10)
EVT_CALL(PlayerFaceNpc, NPC_PARTNER, FALSE)
EVT_END_THREAD
EVT_CALL(DisablePartnerAI, 0)
EVT_CALL(ContinueSpeech, NPC_PARTNER, ANIM_WorldSushie_Talk, ANIM_WorldSushie_Idle, 5, MSG_CH5_002A)
EVT_WAIT(10)
EVT_END_IF
EVT_CALL(ContinueSpeech, NPC_PARTNER, ANIM_WorldSushie_Talk, ANIM_WorldSushie_Idle, 5, MSG_CH5_002B)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_80007)
EVT_WAIT(30)
EVT_CALL(SpeakToPlayer, NPC_PARTNER, ANIM_WorldSushie_Talk, ANIM_WorldSushie_Idle, 5, MSG_CH5_002C)
EVT_WAIT(10)
EVT_CALL(EnablePartnerAI)
EVT_CALL(ResetCam, CAM_DEFAULT, EVT_FLOAT(2.0))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInteract_VillageLeader) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_IF_EQ(GF_JAN02_Met_VillageLeader, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_0021)
EVT_SET(GF_JAN02_Met_VillageLeader, TRUE)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_0022)
EVT_END_IF
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_CASE_LT(STORY_CH5_GOT_JADE_RAVEN)
EVT_EXEC_WAIT(N(EVS_Scene_GetJadeRaven))
EVT_CASE_LT(STORY_CH5_RAFAEL_LEFT_NEST)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_002D)
EVT_CASE_LT(STORY_CH5_ZIP_LINE_READY)
EVT_IF_EQ(AF_JAN02_RaphaelComment, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_002E)
EVT_SET(AF_JAN02_RaphaelComment, TRUE)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_002F)
EVT_END_IF
EVT_CASE_LT(STORY_CH5_ENTERED_MT_LAVA_LAVA)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_0030)
EVT_CASE_LT(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_0031)
EVT_CASE_LT(STORY_CH6_FLOWER_GATE_OPEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_0032)
EVT_CASE_DEFAULT
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_TalkSit, ANIM_VillageLeader_IdleSit, 0, MSG_CH5_0033)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_VillageLeader) = {
EVT_CALL(BindNpcIdle, NPC_SELF, 0)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_IdleSit)
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_VillageLeader)))
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_CALL(SetNpcPos, NPC_SELF, 0, -1000, 0)
EVT_CASE_LT(STORY_CH5_GOT_JADE_RAVEN)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Idle)
EVT_CALL(InterpNpcYaw, NPC_SELF, 90, 1)
EVT_CALL(SetNpcPos, NPC_SELF, 0, 15, -50)
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_VillageLeader)))
EVT_CASE_LT(STORY_CH5_RAFAEL_LEFT_NEST)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Idle)
EVT_CALL(InterpNpcYaw, NPC_SELF, 90, 1)
EVT_CALL(SetNpcPos, NPC_SELF, 30, 15, -30)
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_VillageLeader)))
EVT_CASE_DEFAULT
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_VillageLeader)))
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInteract_Councillor) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_IF_EQ(AF_JAN02_MetCouncillor, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_0034)
EVT_CALL(EndSpeech, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0)
EVT_SET(AF_JAN02_MetCouncillor, TRUE)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_0035)
EVT_END_IF
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_IF_EQ(GF_JAN03_AgreedToRescueChildren, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSitSad, ANIM_LeadersFriend_BowSit, 0, MSG_CH5_0036)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSitSad, ANIM_LeadersFriend_BowSit, 0, MSG_CH5_0037)
EVT_END_IF
EVT_CASE_LT(STORY_CH5_GOT_JADE_RAVEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_0038)
EVT_CASE_LT(STORY_CH5_ENTERED_MT_LAVA_LAVA)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_0039)
EVT_CASE_LT(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_003A)
EVT_CASE_LT(STORY_CH6_FLOWER_GATE_OPEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_003B)
EVT_CASE_DEFAULT
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_LeadersFriend_TalkSit, ANIM_LeadersFriend_IdleSit, 0, MSG_CH5_003C)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Councillor) = {
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_LeadersFriend_IdleSit)
EVT_CALL(SetNpcCollisionSize, NPC_SELF, 40, 32)
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_LeadersFriend_BowSit)
EVT_END_IF
EVT_END_SWITCH
EVT_CALL(BindNpcIdle, NPC_SELF, 0)
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_Councillor)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInteract_Yoshi_01) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_Talk, ANIM_Yoshi_Red_Idle, 0, MSG_CH5_003D)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_EXEC_WAIT(N(EVS_GetRescuedYoshiCount))
EVT_IF_EQ(LVar0, 0)
EVT_IF_EQ(GF_JAN03_AgreedToRescueChildren, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_CryTalk, ANIM_Yoshi_Red_Cry, 0, MSG_CH5_003E)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_CryTalk, ANIM_Yoshi_Red_Cry, 0, MSG_CH5_003F)
EVT_END_IF
EVT_ELSE
EVT_IF_EQ(GF_JAN08_SavedYoshi, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_CryTalk, ANIM_Yoshi_Red_Cry, 0, MSG_CH5_0040)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_Talk, ANIM_Yoshi_Red_Idle, 0, MSG_CH5_0041)
EVT_END_IF
EVT_END_IF
EVT_CASE_LE(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_Talk, ANIM_Yoshi_Red_Idle, 0, MSG_CH5_0042)
EVT_CASE_LT(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_Talk, ANIM_Yoshi_Red_Idle, 0, MSG_CH5_0043)
EVT_CASE_LT(STORY_CH6_FLOWER_GATE_OPEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_Talk, ANIM_Yoshi_Red_Idle, 0, MSG_CH5_0044)
EVT_CASE_DEFAULT
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Red_Talk, ANIM_Yoshi_Red_Idle, 0, MSG_CH5_0045)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Yoshi_01) = {
EVT_LOOP(0)
EVT_CALL(NpcMoveTo, NPC_SELF, -520, -270, 50)
EVT_CALL(NpcMoveTo, NPC_SELF, -420, -270, 50)
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Yoshi_01) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_IF_EQ(GF_JAN08_SavedYoshi, FALSE)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Yoshi_Red_Panic)
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Yoshi_01)))
EVT_END_IF
EVT_END_SWITCH
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_Yoshi_01)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInteract_Yoshi_02) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_Talk, ANIM_Yoshi_Blue_Idle, 0, MSG_CH5_0046)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_EXEC_WAIT(N(EVS_GetRescuedYoshiCount))
EVT_IF_EQ(LVar0, 0)
EVT_IF_EQ(GF_JAN03_AgreedToRescueChildren, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_CryTalk, ANIM_Yoshi_Blue_Cry, 0, MSG_CH5_0047)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_CryTalk, ANIM_Yoshi_Blue_Cry, 0, MSG_CH5_0048)
EVT_END_IF
EVT_ELSE
EVT_IF_EQ(GF_JAN10_SavedYoshi, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_CryTalk, ANIM_Yoshi_Blue_Cry, 0, MSG_CH5_0049)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_Talk, ANIM_Yoshi_Blue_Idle, 0, MSG_CH5_004A)
EVT_END_IF
EVT_END_IF
EVT_CASE_LE(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_Talk, ANIM_Yoshi_Blue_Idle, 0, MSG_CH5_004B)
EVT_CASE_LT(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_Talk, ANIM_Yoshi_Blue_Idle, 0, MSG_CH5_004C)
EVT_CASE_LT(STORY_CH6_FLOWER_GATE_OPEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_Talk, ANIM_Yoshi_Blue_Idle, 0, MSG_CH5_004D)
EVT_CASE_DEFAULT
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Blue_Talk, ANIM_Yoshi_Blue_Idle, 0, MSG_CH5_004E)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Yoshi_02) = {
EVT_LOOP(0)
EVT_CALL(NpcMoveTo, NPC_SELF, 180, -520, 50)
EVT_CALL(NpcMoveTo, NPC_SELF, 80, -520, 50)
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Yoshi_02) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_IF_EQ(GF_JAN10_SavedYoshi, FALSE)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Yoshi_Blue_Panic)
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Yoshi_02)))
EVT_END_IF
EVT_END_SWITCH
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_Yoshi_02)))
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInteract_Yoshi_03) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_Talk, ANIM_Yoshi_Purple_Idle, 0, MSG_CH5_004F)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_EXEC_WAIT(N(EVS_GetRescuedYoshiCount))
EVT_IF_EQ(LVar0, 0)
EVT_IF_EQ(GF_JAN03_AgreedToRescueChildren, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_CryTalk, ANIM_Yoshi_Purple_Cry, 0, MSG_CH5_0050)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_CryTalk, ANIM_Yoshi_Purple_Cry, 0, MSG_CH5_0051)
EVT_END_IF
EVT_ELSE
EVT_IF_EQ(GF_JAN05_SavedYoshi, FALSE)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_CryTalk, ANIM_Yoshi_Purple_Cry, 0, MSG_CH5_0052)
EVT_ELSE
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_Talk, ANIM_Yoshi_Purple_Idle, 0, MSG_CH5_0053)
EVT_END_IF
EVT_END_IF
EVT_CASE_LE(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_Talk, ANIM_Yoshi_Purple_Idle, 0, MSG_CH5_0054)
EVT_CASE_LT(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_Talk, ANIM_Yoshi_Purple_Idle, 0, MSG_CH5_0055)
EVT_CASE_LT(STORY_CH6_FLOWER_GATE_OPEN)
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_Talk, ANIM_Yoshi_Purple_Idle, 0, MSG_CH5_0056)
EVT_CASE_DEFAULT
EVT_CALL(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Purple_Talk, ANIM_Yoshi_Purple_Idle, 0, MSG_CH5_0057)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcIdle_Yoshi_03) = {
EVT_LOOP(0)
EVT_CALL(NpcMoveTo, NPC_SELF, 600, -150, 50)
EVT_CALL(NpcMoveTo, NPC_SELF, 500, -150, 50)
EVT_END_LOOP
EVT_RETURN
EVT_END
};
EvtScript N(EVS_NpcInit_Yoshi_03) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CASE_LT(STORY_CH5_ALL_YOSHI_CHILDREN_RESCUED)
EVT_IF_EQ(GF_JAN05_SavedYoshi, FALSE)
EVT_CALL(SetNpcAnimation, NPC_SELF, ANIM_Yoshi_Purple_Panic)
EVT_CALL(BindNpcIdle, NPC_SELF, EVT_PTR(N(EVS_NpcIdle_Yoshi_03)))
EVT_END_IF
EVT_END_SWITCH
EVT_CALL(BindNpcInteract, NPC_SELF, EVT_PTR(N(EVS_NpcInteract_Yoshi_03)))
EVT_RETURN
EVT_END
};
s32 N(ExtraAnims_Councillor)[] = {
ANIM_LeadersFriend_TalkSit,
ANIM_LeadersFriend_TalkSitSad,
ANIM_LeadersFriend_IdleSit,
ANIM_LeadersFriend_BowSit,
-1
};
StaticNpc N(NpcData_Townsfolk)[] = {
{
.id = NPC_YoshiLeader,
.settings = &N(NpcSettings_Yoshi),
.pos = { 323.0f, 30.0f, 412.0f },
.yaw = 270,
.flags = ENEMY_FLAG_1 | ENEMY_FLAG_8 | ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_800 | ENEMY_FLAG_2000 | ENEMY_FLAG_400000,
.init = &N(EVS_NpcInit_VillageLeader),
.drops = NPC_NO_DROPS,
.animations = YOSHI_LEADER_ANIMS,
.tattle = MSG_NpcTattle_VillageLeader,
},
{
.id = NPC_YoshiCouncillor,
.settings = &N(NpcSettings_Yoshi),
.pos = { 172.0f, 30.0f, 418.0f },
.yaw = 90,
.flags = ENEMY_FLAG_1 | ENEMY_FLAG_8 | ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_800 | ENEMY_FLAG_2000 | ENEMY_FLAG_400000,
.init = &N(EVS_NpcInit_Councillor),
.drops = NPC_NO_DROPS,
.animations = YOSHI_COUNCILLOR_ANIMS,
.extraAnimations = N(ExtraAnims_Councillor),
.tattle = MSG_NpcTattle_LeadersFriend,
},
{
.id = NPC_Yoshi_01,
.settings = &N(NpcSettings_Yoshi_Patrol),
.pos = { -520.0f, 0.0f, -270.0f },
.yaw = 90,
.flags = ENEMY_FLAG_1 | ENEMY_FLAG_8 | ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_800 | ENEMY_FLAG_2000,
.init = &N(EVS_NpcInit_Yoshi_01),
.drops = NPC_NO_DROPS,
.territory = {
.patrol = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.numPoints = 2,
.points = {
{ -520, 0, -270 },
{ -420, 0, -270 },
},
.detectShape = SHAPE_CYLINDER,
.detectPos = { -520, 0, -270 },
.detectSize = { 100 },
}
},
.animations = YOSHI_RED_ANIMS,
.tattle = MSG_NpcTattle_EntranceYoshi,
},
{
.id = NPC_Yoshi_02,
.settings = &N(NpcSettings_Yoshi_Patrol),
.pos = { 180.0f, 0.0f, -520.0f },
.yaw = 270,
.flags = ENEMY_FLAG_1 | ENEMY_FLAG_8 | ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_800 | ENEMY_FLAG_2000,
.init = &N(EVS_NpcInit_Yoshi_02),
.drops = NPC_NO_DROPS,
.territory = {
.patrol = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.numPoints = 3,
.points = {
{ 180, 0, -520 },
{ 10, 0, -520 },
{ 100, 0, -600 },
},
.detectShape = SHAPE_CYLINDER,
.detectPos = { 5, 0, -554 },
.detectSize = { 100 },
}
},
.animations = YOSHI_BLUE_ANIMS,
.tattle = MSG_NpcTattle_BlueYoshi,
},
{
.id = NPC_Yoshi_03,
.settings = &N(NpcSettings_Yoshi_Patrol),
.pos = { 600.0f, 0.0f, -150.0f },
.yaw = 270,
.flags = ENEMY_FLAG_1 | ENEMY_FLAG_8 | ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_800 | ENEMY_FLAG_2000,
.init = &N(EVS_NpcInit_Yoshi_03),
.drops = NPC_NO_DROPS,
.territory = {
.patrol = {
.isFlying = TRUE,
.moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED,
.numPoints = 2,
.points = {
{ 600, 0, -150 },
{ 485, 0, -220 },
},
.detectShape = SHAPE_CYLINDER,
.detectPos = { 600, 0, -150 },
.detectSize = { 100 },
}
},
.animations = YOSHI_PURPLE_ANIMS,
.tattle = MSG_NpcTattle_LikeableYoshi,
},
};
StaticNpc N(NpcData_ChuckQuizmo) = {
.id = NPC_ChuckQuizmo,
.settings = &N(NpcSettings_ChuckQuizmo),
.pos = { -150.0f, 15.0f, 300.0f },
.yaw = 90,
.flags = ENEMY_FLAG_1 | ENEMY_FLAG_8 | ENEMY_FLAG_100 | ENEMY_FLAG_400 | ENEMY_FLAG_800 | ENEMY_FLAG_2000,
.initVarCount = 1,
.initVar = { .bytes = { 0, QUIZ_AREA_JAN, QUIZ_COUNT_JAN, QUIZ_MAP_JAN_02 }},
.drops = NPC_NO_DROPS,
.animations = QUIZMO_ANIMS,
.tattle = MSG_NpcTattle_ChuckQuizmo,
};
NpcGroupList N(DefaultNPCs) = {
NPC_GROUP(N(NpcData_Townsfolk)),
NPC_GROUP(N(NpcData_ChuckQuizmo)),
{}
};

View File

@ -0,0 +1,9 @@
#include "jan_02.h"
#include "entity.h"
EvtScript N(EVS_MakeEntities) = {
EVT_CALL(MakeEntity, EVT_PTR(Entity_HiddenPanel), 25, 15, -60, 0, MODEL_o222, MAKE_ENTITY_END)
EVT_CALL(AssignPanelFlag, GF_JAN02_HiddenPanel)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,101 @@
#include "jan_02.h"
#include "common/foliage.inc.c"
FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o240);
FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o239);
ShakeTreeConfig N(ShakeTree_Tree1) = {
.leaves = &N(Tree1_LeafModels),
.trunk = &N(Tree1_TrunkModels),
};
BombTrigger N(BombPos_Tree1) = {
.pos = { -220.0f, 15.0f, 292.0f },
.radius = 0.0f
};
FoliageModelList N(Tree2_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o260, MODEL_o261);
FoliageModelList N(Tree2_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o259);
FoliageDropList N(Tree2_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { -596, 75, -190 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN02_TreeDrop2,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree2) = {
.leaves = &N(Tree2_LeafModels),
.trunk = &N(Tree2_TrunkModels),
.drops = &N(Tree2_Drops),
};
BombTrigger N(BombPos_Tree2) = {
.pos = { -586.0f, 0.0f, -215.0f },
.radius = 0.0f
};
FoliageModelList N(Tree3_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o281, MODEL_o282);
FoliageModelList N(Tree3_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o280);
FoliageDropList N(Tree3_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { 591, 75, -220 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN02_TreeDrop3,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree3) = {
.leaves = &N(Tree3_LeafModels),
.trunk = &N(Tree3_TrunkModels),
.drops = &N(Tree3_Drops),
};
BombTrigger N(BombPos_Tree3) = {
.pos = { 581.0f, 0.0f, -240.0f },
.radius = 0.0f
};
FoliageModelList N(Tree4_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o257);
FoliageModelList N(Tree4_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o256);
ShakeTreeConfig N(ShakeTree_Tree4) = {
.leaves = &N(Tree4_LeafModels),
.trunk = &N(Tree4_TrunkModels),
};
BombTrigger N(BombPos_Tree4) = {
.pos = { -636.0f, 0.0f, -235.0f },
.radius = 0.0f
};
EvtScript N(EVS_SetupFoliage) = {
EVT_SET(AF_JAN02_TreeDrop2, FALSE)
EVT_SET(AF_JAN02_TreeDrop3, FALSE)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree1)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o239, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree1)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree2)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o259, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree2)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree3)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o343, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree3)), 1, 0)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree4)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o364, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree4)), 1, 0)
EVT_RETURN
EVT_END
};

View File

@ -1,116 +0,0 @@
#include "jan_03.h"
#include "effects.h"
static char* N(exit_str_0) = "jan_02";
static char* N(exit_str_1) = "jan_05";
static char* N(exit_str_2) = "jan_22";
static char* N(exit_str_3) = "";
#define CHUCK_QUIZMO_NPC_ID 17
#include "world/common/entity/Pipe.inc.c"
#include "world/common/atomic/TexturePan.inc.c"
ApiStatus func_802405EC_B351BC(Evt* script, s32 isInitialCall) {
fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}
#include "world/common/enemy/ai/PatrolNoAttackAI.inc.c"
static char* N(exit_str_4) = "tik_08";
#include "world/common/atomic/ToadHouse.inc.c"
#include "world/common/todo/GetNpcCollisionHeight.inc.c"
#include "world/common/todo/AddPlayerHandsOffset.inc.c"
extern s32 N(ItemChoice_HasSelectedItem);
extern s32 N(ItemChoice_SelectedItemID);
#include "world/common/todo/ItemChoice_WaitForSelection.inc.c"
ApiStatus N(ItemChoice_SaveSelected)(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
N(ItemChoice_SelectedItemID) = evt_get_variable(script, *args++);
N(ItemChoice_HasSelectedItem) = TRUE;
return ApiStatus_DONE2;
}
BSS s32 D_8024FBA0[114];
BSS s32 D_8024FD68[92];
BSS s32 D_8024FED8[2]; // Unused or padding
BSS s32 D_8024FEE0;
ApiStatus func_80241A64_B36634(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr = (s32*) evt_get_variable(script, *args++);
s32 i;
if (ptr != NULL) {
for (i = 0; ptr[i] != 0; i++) {
D_8024FBA0[i] = ptr[i];
}
D_8024FBA0[i] = 0;
} else {
for (i = 0; i < 112; i++) {
D_8024FBA0[i] = i + 16;
D_8024FBA0[112] = 0;
}
}
return ApiStatus_DONE2;
}
ApiStatus func_80241B00_B366D0(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr = (s32*) evt_get_variable(script, *args++);
s32 i;
if (ptr != NULL) {
for (i = 0; ptr[i] != 0; i++) {
D_8024FD68[i] = ptr[i];
}
D_8024FD68[i] = 0;
} else {
for (i = 0; i < 91; i++) {
D_8024FD68[i] = i + 128;
D_8024FD68[91] = 0;
}
}
return ApiStatus_DONE2;
}
extern s32 N(Quizmo_Worker);
extern s32 N(Quizmo_AnswerResult);
extern EffectInstance* N(Quizmo_StageEffect);
extern EffectInstance* N(Quizmo_AudienceEffect);
extern EffectInstance* N(Quizmo_VannaTEffect);
#include "world/common/atomic/Quizmo.inc.c"
extern s32 N(LetterDelivery_SavedNpcAnim);
#include "world/common/todo/LetterDelivery.inc.c"
extern s32 D_8024A5AC_B3F17C[];
ApiStatus func_80242F1C_B37AEC(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
PlayerData* playerData = &gPlayerData;
s32 outVar = *args++;
s32 outVal = 0;
s32* it;
s32 i;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
it = D_8024A5AC_B3F17C;
while (*it != 0) {
if (playerData->invItems[i] == *it++) {
outVal++;
}
}
}
evt_set_variable(script, outVar, outVal);
return ApiStatus_DONE2;
}

View File

@ -1,10 +0,0 @@
#include "jan_03.h"
ApiStatus func_80242FA0_B37B70(Evt* script, s32 isInitialCall) {
f32 x = gPlayerStatus.currentSpeed * 5.0f * sin_deg(gPlayerStatus.targetYaw);
f32 z = gPlayerStatus.currentSpeed * 5.0f * -cos_deg(gPlayerStatus.targetYaw);
script->varTable[0] = gPlayerStatus.position.x + x;
script->varTable[1] = gPlayerStatus.position.z + z;
return ApiStatus_DONE2;
}

View File

@ -1,4 +0,0 @@
#include "jan_03.h"
#include "common/foliage.inc.c"

View File

@ -2,8 +2,47 @@
/// @brief Jade Jungle - Village Buildings
#include "common.h"
#include "../jan.h"
#include "message_ids.h"
#include "map.h"
#include "../jan.h"
#include "mapfs/jan_03_shape.h"
#include "mapfs/jan_03_hit.h"
#include "sprite/npc/WorldSushie.h"
enum {
NPC_Toad = 0,
NPC_Yoshi_01 = 1,
NPC_VillageLeader = 2,
NPC_Yoshi_02 = 3,
NPC_Yoshi_03 = 4,
NPC_YoshiKid_01 = 5,
NPC_YoshiKid_02 = 6,
NPC_YoshiKid_03 = 7,
NPC_YoshiKid_04 = 8,
NPC_YoshiKid_05 = 9,
NPC_Raven_01 = 10,
NPC_Raven_02 = 11,
NPC_Raven_03 = 12,
NPC_Raven_04 = 13,
NPC_Raven_05 = 14,
NPC_Kolorado = 15,
NPC_Sushie = 16,
NPC_ChuckQuizmo = 17,
};
#define NAMESPACE jan_03
extern EvtScript N(EVS_Main);
extern EvtScript N(EVS_SetupMusic);
extern EvtScript N(EVS_PlayRestingSong);
extern EvtScript N(EVS_SetupRooms);
extern EvtScript N(EVS_SetupShop);
extern EvtScript N(EVS_SetupFoliage);
extern EvtScript N(EVS_MakeEntities);
extern NpcGroupList N(CrisisNPCs);
extern NpcGroupList N(ChapterNPCs);
extern NpcGroupList N(AfterNPCs);
extern NpcGroupList N(DefaultNPCs);

View File

@ -0,0 +1,16 @@
#include "jan_03.h"
EntryList N(Entrances) = {
[jan_03_ENTRY_0] { -583.0, 0.0, 0.0, 90.0 },
[jan_03_ENTRY_1] { -405.0, 0.0, -405.0, 135.0 },
[jan_03_ENTRY_2] { 583.0, 0.0, 0.0, 270.0 },
[jan_03_ENTRY_3] { -540.0, 35.0, 195.0, 180.0 },
};
MapSettings N(settings) = {
.main = &N(EVS_Main),
.entryList = &N(Entrances),
.entryCount = ENTRY_COUNT(N(Entrances)),
.background = &gBackgroundImage,
.tattle = { MSG_MapTattle_jan_03 },
};

View File

@ -0,0 +1,19 @@
#include "jan_03.h"
EvtScript N(EVS_SetupMusic) = {
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_RANGE(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING, STORY_CH5_SUSHIE_JOINED_PARTY)
EVT_CALL(SetMusicTrack, 0, SONG_YOSHIS_PANIC, 0, 8)
EVT_CASE_DEFAULT
EVT_CALL(SetMusicTrack, 0, SONG_YOSHIS_VILLAGE, 0, 8)
EVT_END_SWITCH
EVT_CALL(ClearAmbientSounds, 250)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_PlayRestingSong) = {
EVT_CALL(SetMusicTrack, 0, SONG_TAKING_REST, 0, 8)
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,115 @@
#include "jan_03.h"
#include "effects.h"
#include "world/common/entity/Pipe.inc.c"
#include "world/common/entity/Pipe.data.inc.c"
#include "world/common/atomic/TexturePan.inc.c"
#include "world/common/atomic/TexturePan.data.inc.c"
API_CALLABLE(N(SpawnSunEffect)) {
fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}
EvtScript N(EVS_ExitWalk_jan_02_1) = EVT_EXIT_WALK(60, jan_03_ENTRY_0, "jan_02", jan_02_ENTRY_1);
EvtScript N(EVS_ExitWalk_jan_05_0) = EVT_EXIT_WALK(60, jan_03_ENTRY_1, "jan_05", jan_05_ENTRY_0);
EvtScript N(EVS_ExitWalk_jan_22_0) = EVT_EXIT_WALK(60, jan_03_ENTRY_2, "jan_22", jan_22_ENTRY_0);
MAP_RODATA_PAD(1, exits);
EvtScript N(EVS_BindExitTriggers) = {
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_02_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_05_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilinw, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ExitWalk_jan_22_0)), 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_CALL(GetEntryID, LVar0)
EVT_IF_NE(LVar0, jan_03_ENTRY_3)
EVT_SET(LVar0, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC(EnterWalk)
EVT_ELSE
EVT_IF_EQ(GF_JAN03_WarpPipe, FALSE)
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(DisablePlayerPhysics, TRUE)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(SetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2)
EVT_CALL(SetPlayerPos, LVar0, NPC_DISPOSE_POS_Y, LVar2)
EVT_WAIT(30)
EVT_CALL(PlaySound, SOUND_208E)
EVT_SET(GF_JAN03_WarpPipe, TRUE)
EVT_WAIT(30)
EVT_CALL(SetPlayerActionState, ACTION_STATE_IDLE)
EVT_CALL(SetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(SetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2)
EVT_CALL(DisablePlayerPhysics, FALSE)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_END_IF
EVT_SET(LVarA, EVT_PTR(N(EVS_BindExitTriggers)))
EVT_EXEC_WAIT(N(EVS_Pipe_EnterVertical))
EVT_WAIT(1)
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtScript N(EVS_Main) = {
EVT_SET(GB_WorldLocation, LOCATION_YOSHIS_VILLAGE)
EVT_CALL(SetSpriteShading, SHADING_NONE)
EVT_SETUP_CAMERA_NO_LEAD()
EVT_SWITCH(GB_StoryProgress)
EVT_CASE_LT(STORY_CH5_YOSHI_CHILDREN_ARE_MISSING)
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(CrisisNPCs)))
EVT_CASE_LT(STORY_CH5_ZIP_LINE_READY)
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(ChapterNPCs)))
EVT_CASE_EQ(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(ChapterNPCs)))
EVT_CASE_GT(STORY_CH5_STAR_SPRIT_DEPARTED)
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(AfterNPCs)))
EVT_CASE_DEFAULT
EVT_CALL(MakeNpcs, FALSE, EVT_PTR(N(DefaultNPCs)))
EVT_END_SWITCH
EVT_EXEC_WAIT(N(EVS_MakeEntities))
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitnw, COLLIDER_FLAGS_UPPER_MASK)
EVT_CALL(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK)
EVT_EXEC(N(EVS_EnterMap))
EVT_WAIT(1)
EVT_EXEC(N(EVS_SetupMusic))
EVT_CALL(PlaySound, SOUND_80000017)
EVT_EXEC(N(EVS_SetupRooms))
EVT_EXEC(N(EVS_SetupFoliage))
EVT_CALL(EnableTexPanning, MODEL_o121, TRUE)
EVT_CALL(EnableTexPanning, MODEL_o371, TRUE)
EVT_CALL(EnableTexPanning, MODEL_o119, TRUE)
EVT_THREAD
TEX_PAN_PARAMS_ID(TEX_PANNER_1)
TEX_PAN_PARAMS_STEP( 0, 400, 0, 0)
TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0)
TEX_PAN_PARAMS_INIT( 0, 0, 0, 0)
EVT_EXEC(N(EVS_UpdateTexturePan))
EVT_END_THREAD
EVT_THREAD
TEX_PAN_PARAMS_ID(TEX_PANNER_2)
TEX_PAN_PARAMS_STEP( -100, 200, 0, 0)
TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0)
TEX_PAN_PARAMS_INIT( 0, 0, 0, 0)
EVT_EXEC(N(EVS_UpdateTexturePan))
EVT_END_THREAD
EVT_CALL(SetModelFlags, MODEL_o189, 256, TRUE)
EVT_CALL(SetModelFlags, MODEL_o186, 256, TRUE)
EVT_CALL(SetModelFlags, MODEL_o192, 256, TRUE)
EVT_CALL(SetModelFlags, MODEL_o195, 256, TRUE)
EVT_EXEC(N(EVS_SetupShop))
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,83 @@
#include "jan_03.h"
#include "sprite/npc/Yoshi.h"
s32 N(ShopMessages)[] = {
[SHOP_MSG_BUY_CONFIRM ] MSG_Shop_00_JAN03,
[SHOP_MSG_NOT_ENOUGH_COINS ] MSG_Shop_01_JAN03,
[SHOP_MSG_NOT_ENOUGH_ROOM ] MSG_Shop_02_JAN03,
[SHOP_MSG_BUY_THANK_YOU ] MSG_Shop_03_JAN03,
[SHOP_MSG_GREETING ] MSG_Shop_04_JAN03,
[SHOP_MSG_INSTRUCTIONS ] MSG_Shop_05_JAN03,
[SHOP_MSG_NOTHING_TO_SELL ] MSG_Shop_06_JAN03,
[SHOP_MSG_SELL_WHICH ] MSG_Shop_07_JAN03,
[SHOP_MSG_SELL_CONFIRM ] MSG_Shop_08_JAN03,
[SHOP_MSG_SELL_CANCEL ] MSG_Shop_09_JAN03,
[SHOP_MSG_SELL_MORE ] MSG_Shop_0A_JAN03,
[SHOP_MSG_SELL_THANKS ] MSG_Shop_0B_JAN03,
[SHOP_MSG_NOTHING_TO_CHECK ] MSG_Shop_0C_JAN03,
[SHOP_MSG_NO_CHECK_ROOM ] MSG_Shop_0D_JAN03,
[SHOP_MSG_CHECK_WHICH ] MSG_Shop_0E_JAN03,
[SHOP_MSG_CHECK_ACCEPTED ] MSG_Shop_0F_JAN03,
[SHOP_MSG_CHECK_MORE ] MSG_Shop_10_JAN03,
[SHOP_MSG_NOTHING_TO_CLAIM ] MSG_Shop_11_JAN03,
[SHOP_MSG_NO_CLAIM_ROOM ] MSG_Shop_12_JAN03,
[SHOP_MSG_CLAIM_WHICH ] MSG_Shop_13_JAN03,
[SHOP_MSG_CLAIM_ACCEPTED ] MSG_Shop_14_JAN03,
[SHOP_MSG_CLAIM_MORE ] MSG_Shop_15_JAN03,
[SHOP_MSG_FAREWELL ] MSG_Shop_16_JAN03,
};
ShopItemData N(Inventory)[] = {
{ .itemID = ITEM_SNOWMAN_DOLL, .price = 15, MSG_ItemShopDesc_SnowmanDoll },
{ .itemID = ITEM_THUNDER_RAGE, .price = 15, MSG_ItemShopDesc_ThunderRage },
{ .itemID = ITEM_FIRE_FLOWER, .price = 5, MSG_ItemShopDesc_FireFlower },
{ .itemID = ITEM_TASTY_TONIC, .price = 2, MSG_ItemShopDesc_TastyTonic },
{ .itemID = ITEM_HONEY_SYRUP, .price = 6, MSG_ItemShopDesc_HoneySyrup },
{ .itemID = ITEM_SUPER_SHROOM, .price = 15, MSG_ItemShopDesc_SuperShroom },
{}
};
ShopSellPriceData N(PriceList)[] = {
{ .itemID = ITEM_SNOWMAN_DOLL, .sellPrice = 10 },
{ .itemID = ITEM_SUPER_SODA, .sellPrice = 7 },
{ .itemID = ITEM_ICED_POTATO, .sellPrice = 10 },
{ .itemID = ITEM_YOSHI_COOKIE, .sellPrice = 30 },
{ .itemID = ITEM_BUBBLE_BERRY, .sellPrice = 5 },
{}
};
EvtScript N(EVS_OnBuy) = {
EVT_SWITCH(LVar0)
EVT_CASE_EQ(SHOP_BUY_RESULT_CANCEL)
EVT_CASE_EQ(SHOP_BUY_RESULT_4)
EVT_CASE_EQ(SHOP_BUY_RESULT_OK)
EVT_CASE_EQ(SHOP_BUY_RESULT_2)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
ShopItemLocation N(ItemPositions)[] = {
{ .posModelID = MODEL_o363, .triggerColliderID = COLLIDER_o391 },
{ .posModelID = MODEL_o364, .triggerColliderID = COLLIDER_o392 },
{ .posModelID = MODEL_o365, .triggerColliderID = COLLIDER_o393 },
{ .posModelID = MODEL_o366, .triggerColliderID = COLLIDER_o394 },
{ .posModelID = MODEL_o367, .triggerColliderID = COLLIDER_o395 },
{ .posModelID = MODEL_o368, .triggerColliderID = COLLIDER_o396 },
};
ShopOwner N(Owner) = {
.npcID = NPC_Yoshi_01,
.idleAnim = ANIM_Yoshi_Blue_Idle,
.talkAnim = ANIM_Yoshi_Blue_Talk,
.onBuyEvt = &N(EVS_OnBuy),
.shopMsgIDs = N(ShopMessages),
};
EvtScript N(EVS_SetupShop) = {
EVT_CALL(EnableGroup, MODEL_g126, FALSE)
EVT_CALL(MakeShop, EVT_PTR(N(ItemPositions)), EVT_PTR(N(Inventory)), EVT_PTR(N(PriceList)), ITEM_ENTITY_FLAG_10000)
EVT_CALL(MakeShopOwner, EVT_PTR(N(Owner)))
EVT_RETURN
EVT_END
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,69 @@
#include "jan_03.h"
#include "entity.h"
EvtScript N(EVS_GotoMap_tik_08_4) = {
EVT_CALL(GotoMap, EVT_PTR("tik_08"), tik_08_ENTRY_4)
EVT_WAIT(100)
EVT_RETURN
EVT_END
};
API_CALLABLE(N(GiveInitialSpringBoost)) {
f32 x = gPlayerStatus.currentSpeed * 5.0f * sin_deg(gPlayerStatus.targetYaw);
f32 z = gPlayerStatus.currentSpeed * 5.0f * -cos_deg(gPlayerStatus.targetYaw);
script->varTable[0] = gPlayerStatus.position.x + x;
script->varTable[1] = gPlayerStatus.position.z + z;
return ApiStatus_DONE2;
}
EvtScript N(EVS_TetherCamToPlayer) = {
EVT_LABEL(0)
EVT_CALL(GetPlayerPos, LVar0, LVar1, LVar2)
EVT_CALL(SetCamTarget, CAM_DEFAULT, LVar0, LVar1, LVar2)
EVT_WAIT(1)
EVT_GOTO(0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_UseSpring) = {
EVT_CALL(N(GiveInitialSpringBoost))
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(DisablePlayerPhysics, TRUE)
EVT_CALL(SetPlayerActionState, ACTION_STATE_IDLE)
EVT_WAIT(1)
EVT_CALL(SetPlayerActionState, ACTION_STATE_LAUNCH)
EVT_WAIT(1)
EVT_EXEC_GET_TID(N(EVS_TetherCamToPlayer), LVarA)
EVT_CALL(SetPlayerJumpscale, EVT_FLOAT(0.1))
EVT_CALL(PlayerJump, -556, 300, -195, 15)
EVT_CALL(DisablePlayerPhysics, FALSE)
EVT_CALL(func_802D2884, -630, -50, 0)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_AnimMidair)
EVT_CALL(SetPlayerJumpscale, EVT_FLOAT(1.0))
EVT_CALL(PlayerJump2, -601, 376, -105, 30)
EVT_CALL(SetPlayerAnimation, ANIM_Mario_10002)
EVT_KILL_THREAD(LVarA)
EVT_CALL(DisablePlayerInput, FALSE)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_MakeEntities) = {
EVT_IF_EQ(GF_JAN03_WarpPipe, FALSE)
EVT_IF_EQ(GF_TIK08_WarpPipe, TRUE)
EVT_CALL(GetEntryID, LVar0)
EVT_IF_NE(LVar0, jan_03_ENTRY_3)
EVT_SET(GF_JAN03_WarpPipe, TRUE)
EVT_END_IF
EVT_END_IF
EVT_END_IF
EVT_CALL(MakeEntity, EVT_PTR(Entity_BlueWarpPipe), -540, 0, 195, 30, jan_03_ENTRY_3, EVT_PTR(N(EVS_GotoMap_tik_08_4)), EVT_INDEX_OF_GAME_FLAG(GF_JAN03_WarpPipe), MAKE_ENTITY_END)
EVT_CALL(MakeEntity, EVT_PTR(Entity_SavePoint), 100, 60, -25, 0, MAKE_ENTITY_END)
EVT_CALL(MakeEntity, EVT_PTR(Entity_ScriptSpring), -556, 0, -195, 0, MAKE_ENTITY_END)
EVT_CALL(AssignScript, EVT_PTR(N(EVS_UseSpring)))
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,94 @@
#include "jan_03.h"
EvtScript N(EVS_SetDoorRot_Shop) = {
EVT_CALL(RotateGroup, MODEL_g48, LVar0, 0, -1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_MoveWalls_Shop) = {
EVT_SET(LVar1, LVar0)
EVT_MULF(LVar1, EVT_FLOAT(-1.328125))
EVT_CALL(RotateGroup, MODEL_g109, LVar1, 0, 0, 1)
EVT_SET(LVar1, LVar0)
EVT_MULF(LVar1, EVT_FLOAT(1.0))
EVT_CALL(RotateGroup, MODEL_g110, LVar1, 0, 0, 1)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ToggleVis_Shop) = {
EVT_SWITCH(LVar0)
EVT_CASE_EQ(0)
EVT_CALL(EnableGroup, MODEL_g126, TRUE)
EVT_CASE_EQ(3)
EVT_CALL(EnableGroup, MODEL_g126, FALSE)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
s32 N(InteriorNPCs_Shop)[] = {
NPC_Yoshi_01,
-1
};
EvtScript N(EVS_SetDoorRot_ToadHouse) = {
EVT_CALL(RotateGroup, MODEL_g111, LVar0, 0, 1, 0)
EVT_RETURN
EVT_END
};
EvtScript N(EVS_MoveWalls_ToadHouse) = {
EVT_RETURN
EVT_END
};
EvtScript N(EVS_ToggleVis_ToadHouse) = {
EVT_SWITCH(LVar0)
EVT_CASE_EQ(0)
EVT_CALL(SetGroupEnabled, MODEL_g73, 0)
EVT_CALL(SetGroupEnabled, MODEL_g97, 0)
EVT_CASE_EQ(1)
EVT_CASE_EQ(2)
EVT_CASE_EQ(3)
EVT_CALL(SetGroupEnabled, MODEL_g73, 1)
EVT_CALL(SetGroupEnabled, MODEL_g97, 1)
EVT_END_SWITCH
EVT_RETURN
EVT_END
};
s32 N(InteriorNPCs_ToadHouse)[] = {
NPC_Toad,
-1
};
EvtScript N(EVS_SetupRooms) = {
// shop
EVT_CALL(MakeDoorAdvanced,
VIS_GROUP_PAIR(VIS_GROUP_1, VIS_GROUP_6),
EVT_PTR(N(EVS_SetDoorRot_Shop)),
EVT_PTR(N(EVS_MoveWalls_Shop)),
NULL,
EVT_PTR(N(EVS_ToggleVis_Shop)),
COLLIDER_o156,
COLLIDER_o161,
MODEL_g41,
EVT_PTR(N(InteriorNPCs_Shop)))
EVT_SET(LVar0, 3)
EVT_EXEC(N(EVS_ToggleVis_Shop))
// toad house
EVT_CALL(MakeDoorAdvanced,
VIS_GROUP_PAIR(VIS_GROUP_0, VIS_GROUP_5),
EVT_PTR(N(EVS_SetDoorRot_ToadHouse)),
EVT_PTR(N(EVS_MoveWalls_ToadHouse)),
NULL,
EVT_PTR(N(EVS_ToggleVis_ToadHouse)),
COLLIDER_o199,
COLLIDER_o200,
MODEL_o2,
EVT_PTR(N(InteriorNPCs_ToadHouse)))
EVT_RETURN
EVT_END
};

View File

@ -0,0 +1,39 @@
#include "jan_03.h"
#include "common/foliage.inc.c"
FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o351, MODEL_o352);
FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o350);
FoliageDropList N(Tree1_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COCONUT,
.pos = { 586, 75, -115 },
.spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE,
.spawnFlag = AF_JAN03_TreeDrop1,
},
}
};
ShakeTreeConfig N(ShakeTree_Tree1) = {
.leaves = &N(Tree1_LeafModels),
.trunk = &N(Tree1_TrunkModels),
.drops = &N(Tree1_Drops),
};
BombTrigger N(BombPos_Tree1) = {
.pos = { 576.0f, 0.0f, -135.0f },
.radius = 0.0f
};
EvtScript N(EVS_SetupFoliage) = {
EVT_SET(AF_JAN_16, FALSE)
EVT_SET(AF_JAN03_TreeDrop1, FALSE)
EVT_SET(LVar0, EVT_PTR(N(ShakeTree_Tree1)))
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o440, 1, 0)
EVT_BIND_TRIGGER(EVT_PTR(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, EVT_PTR(N(BombPos_Tree1)), 1, 0)
EVT_RETURN
EVT_END
};

View File

@ -95,14 +95,14 @@ ApiStatus func_802404E0_AD63B0(Evt* script, s32 isInitialCall) {
temp_f26 *= 0.1;
temp_f24 += cos_deg(temp_f20 * 15.0f) * 5.0f;
effect = fx_ice_shard(a0, a1, a2, -150.0f, ((i & 3) * 0.4) + 1.0, ((i & 3) * 4) + 30);
effect->data.iceShard->unk_44 = 0;
effect->data.iceShard->unk_48 = (rand_int(10) * 0.2) + 0.1;
effect->data.iceShard->unk_3C = 35 * i;
effect->data.iceShard->unk_40 = rand_int(10) - 5;
effect->data.iceShard->unk_4C = temp_f24;
effect->data.iceShard->unk_50 = temp_f26;
effect->data.iceShard->unk_54 = 2.0f;
effect->data.iceShard->unk_58 = -0.1f;
effect->data.iceShard->animFrame = 0;
effect->data.iceShard->animRate = (rand_int(10) * 0.2) + 0.1;
effect->data.iceShard->rotation = 35 * i;
effect->data.iceShard->angularVel = rand_int(10) - 5;
effect->data.iceShard->vel.x = temp_f24;
effect->data.iceShard->vel.y = temp_f26;
effect->data.iceShard->vel.z = 2.0f;
effect->data.iceShard->gravAccel = -0.1f;
}
return ApiStatus_DONE2;
}

View File

@ -2100,7 +2100,7 @@ EvtScript N(EVS_Goombaria_RunAround) = {
EVT_END
};
API_CALLABLE(N(ShrinkItemEntity)) {
API_CALLABLE(N(SetInvitationLetterScale)) {
get_item_entity(script->varTable[0])->scale = 0.6f;
return ApiStatus_DONE2;
}
@ -2141,8 +2141,8 @@ EvtScript N(EVS_NpcIdle_Eldstar_Epilogue) = {
EVT_CALL(SpeakToPlayer, NPC_Goombario, ANIM_WorldGoombario_Talk, ANIM_WorldGoombario_Idle, 5, MSG_Outro_0010)
EVT_CALL(SpeakToPlayer, NPC_Parakarry, ANIM_WorldParakarry_Talk, ANIM_WorldParakarry_Idle, 5, MSG_Outro_0011)
EVT_THREAD
EVT_CALL(DropTinyItemEntity, ITEM_LETTER25, NPC_DISPOSE_LOCATION, ITEM_SPAWN_MODE_DECORATION, 0)
EVT_CALL(N(ShrinkItemEntity))
EVT_CALL(DropResizableItemEntity, ITEM_LETTER_TO_KOLORADO, NPC_DISPOSE_LOCATION, ITEM_SPAWN_MODE_DECORATION, 0)
EVT_CALL(N(SetInvitationLetterScale))
EVT_LOOP(20)
EVT_CALL(GetNpcPos, NPC_Parakarry, LVar1, LVar2, LVar3)
EVT_ADD(LVar1, -12)

View File

@ -20,7 +20,7 @@ enum {
};
enum {
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE kmr_03

View File

@ -31,7 +31,7 @@ EvtScript N(EVS_OnShakeTree1) = {
EVT_IF_EQ(GF_KMR03_Tree1_Mushroom, TRUE)
EVT_RETURN
EVT_END_IF
EVT_IF_EQ(MF_Unk_0A, TRUE)
EVT_IF_EQ(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_RETURN
EVT_END_IF
EVT_WAIT(10)
@ -41,7 +41,7 @@ EvtScript N(EVS_OnShakeTree1) = {
EVT_ELSE
EVT_CALL(MakeItemEntity, ITEM_MUSHROOM, -85, 100, 16, ITEM_SPAWN_MODE_FALL_NEVER_VANISH, GF_KMR03_Tree1_Mushroom)
EVT_END_IF
EVT_SET(MF_Unk_0A, TRUE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_RETURN
EVT_END
};

View File

@ -18,7 +18,7 @@ enum {
};
enum {
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
MF_Unk_0B = MapFlag(11),
MF_Unk_0C = MapFlag(12),
MF_Unk_0D = MapFlag(13),

View File

@ -141,7 +141,7 @@ FoliageDropList N(Bush1_Drops) = {
.pos = { 248, 17, 97 },
.spawnMode = ITEM_SPAWN_MODE_TOSS_SPAWN_ONCE,
.pickupFlag = GF_KMR04_Bush1_Coin,
.spawnFlag = MF_Unk_0A,
.spawnFlag = AF_JAN01_TreeDrop_StarPiece,
},
}
};

View File

@ -23,7 +23,7 @@ enum {
};
enum {
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE kmr_05

View File

@ -37,7 +37,7 @@ EvtScript N(EVS_OnShakeTree1) = {
EVT_IF_EQ(GF_KMR05_Tree1_Coin, TRUE)
EVT_RETURN
EVT_END_IF
EVT_IF_EQ(MF_Unk_0A, TRUE)
EVT_IF_EQ(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_RETURN
EVT_END_IF
EVT_WAIT(10)
@ -47,7 +47,7 @@ EvtScript N(EVS_OnShakeTree1) = {
EVT_ELSE
EVT_CALL(MakeItemEntity, ITEM_COIN, 436, 300, -180, ITEM_SPAWN_MODE_FALL, GF_KMR05_Tree1_Coin)
EVT_END_IF
EVT_SET(MF_Unk_0A, TRUE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_RETURN
EVT_END
};

View File

@ -18,7 +18,7 @@ enum {
};
enum {
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
enum {

View File

@ -223,8 +223,8 @@ EvtScript N(EVS_OnInspect_StickerSign) = {
EVT_CALL(DisablePlayerInput, TRUE)
EVT_CALL(ShowMessageAtScreenPos, MSG_Menus_Sign_EatMushroomsTip, 160, 40)
EVT_IF_EQ(GF_KMR06_Item_Mushroom, FALSE)
EVT_IF_EQ(MF_Unk_0A, FALSE)
EVT_SET(MF_Unk_0A, TRUE)
EVT_IF_EQ(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_THREAD
EVT_WAIT(2)
EVT_SETF(LVar0, EVT_FLOAT(0.0))

View File

@ -27,7 +27,7 @@ enum {
};
enum {
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
MF_Unk_0B = MapFlag(11),
};

View File

@ -7,9 +7,9 @@ API_CALLABLE(N(func_80240010_907A40)) {
}
EvtScript N(D_80241190_908BC0) = {
EVT_SET(MF_Unk_0A, FALSE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_LOOP(0)
EVT_IF_NE(MF_Unk_0A, FALSE)
EVT_IF_NE(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_BREAK_LOOP
EVT_END_IF
EVT_WAIT(1)

View File

@ -511,7 +511,7 @@ EvtScript N(EVS_Scene_EndOfChapter) = {
EVT_CALL(ShowMessageAtScreenPos, LVar1, 160, 40)
EVT_CALL(N(ShowMessagesBehindCurtains))
EVT_WAIT(15)
EVT_SET(MF_Unk_0A, TRUE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_RETURN
EVT_END
};

View File

@ -7,14 +7,14 @@
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado,
ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_REWARD(Kolorado);

View File

@ -15,13 +15,13 @@ NpcSettings N(NpcSettings_ZiplineDummy) = {
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_REWARD(Kolorado);

View File

@ -14,13 +14,13 @@ NpcSettings N(NpcSettings_Zipline) = {
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado, ANIM_Kolorado_Fallen, ANIM_Kolorado_Fallen,
MSG_CH5_00E8, MSG_CH5_00E9, MSG_CH5_00EA, MSG_CH5_00EB,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_REWARD(Kolorado);

View File

@ -8,19 +8,19 @@
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EVT_LETTER_PROMPT(Kolorado1, NPC_Kolorado,
ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_PROMPT(Kolorado2, NPC_Kolorado,
ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
MSG_CH5_00E8, MSG_CH5_00E9, MSG_CH5_00EA, MSG_CH5_00EB,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_REWARD(Kolorado);

View File

@ -16,13 +16,13 @@
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_REWARD(Kolorado);

View File

@ -21,13 +21,13 @@ enum {
#include "world/common/complete/LetterDelivery.inc.c"
s32 N(LetterList)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7,
ITEM_LETTER25, N(LetterList));
ITEM_LETTER_TO_KOLORADO, N(LetterList));
EVT_LETTER_REWARD(Kolorado);

View File

@ -37,13 +37,13 @@ ShopItemData N(Inventory)[] = {
};
ShopSellPriceData N(PriceList)[] = {
{ .itemID = ITEM_DRIED_SHROOM, .sellPrice = 3 },
{ .itemID = ITEM_DRIED_PASTA, .sellPrice = 5 },
{ .itemID = ITEM_DUSTY_HAMMER, .sellPrice = 3 },
{ .itemID = ITEM_DRIED_SHROOM, .sellPrice = 3 },
{ .itemID = ITEM_DRIED_PASTA, .sellPrice = 5 },
{ .itemID = ITEM_DUSTY_HAMMER, .sellPrice = 3 },
{ .itemID = ITEM_WHACKAS_BUMP, .sellPrice = 64 },
{ .itemID = ITEM_DRIED_FRUIT, .sellPrice = 20 },
{ .itemID = ITEM_LIME, .sellPrice = 4 },
{ .itemID = ITEM_LEMON, .sellPrice = 4 },
{ .itemID = ITEM_LIME, .sellPrice = 4 },
{ .itemID = ITEM_LEMON, .sellPrice = 4 },
{}
};

View File

@ -93,14 +93,14 @@ EvtScript N(EVS_LetterReward_MinhT) = {
};
s32 N(LetterList_Kolorado)[] = {
ITEM_LETTER25,
ITEM_LETTER_TO_KOLORADO,
ITEM_NONE
};
EvtScript N(EVS_LetterPrompt_Kolorado) = {
EVT_CALL(N(LetterDelivery_Init),
NPC_Kolorado, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
ITEM_LETTER25, ITEM_NONE,
ITEM_LETTER_TO_KOLORADO, ITEM_NONE,
MSG_MAC_Plaza_00E0, MSG_MAC_Plaza_00E1, MSG_MAC_Plaza_00E2, MSG_MAC_Plaza_00E3,
EVT_PTR(N(LetterList_Kolorado)))
EVT_EXEC_WAIT(N(EVS_DoLetterDelivery))

View File

@ -12,25 +12,25 @@ typedef struct PostOfficeEntry {
MSG_Document_Letter_##name##_Body
PostOfficeEntry N(PostOfficeLetters)[] = {
{ PARTNER_GOOMBARIO, ITEM_LETTER25, LETTER_MESSAGES(Goombario2) },
{ PARTNER_GOOMBARIO, ITEM_LETTER25, LETTER_MESSAGES(Goombario1) },
{ PARTNER_GOOMBARIO, ITEM_LETTER25, LETTER_MESSAGES(Goombario3) },
{ PARTNER_KOOPER, ITEM_LETTER25, LETTER_MESSAGES(Kooper3) },
{ PARTNER_KOOPER, ITEM_LETTER25, LETTER_MESSAGES(Kooper2) },
{ PARTNER_KOOPER, ITEM_LETTER25, LETTER_MESSAGES(Kooper1) },
{ PARTNER_BOMBETTE, ITEM_LETTER25, LETTER_MESSAGES(Bombette2) },
{ PARTNER_BOMBETTE, ITEM_LETTER25, LETTER_MESSAGES(Bombette3) },
{ PARTNER_BOMBETTE, ITEM_LETTER25, LETTER_MESSAGES(Bombette1) },
{ PARTNER_PARAKARRY, ITEM_LETTER25, LETTER_MESSAGES(Parakarry1) },
{ PARTNER_PARAKARRY, ITEM_LETTER25, LETTER_MESSAGES(Parakarry2) },
{ PARTNER_BOW, ITEM_LETTER25, LETTER_MESSAGES(Bow1) },
{ PARTNER_BOW, ITEM_LETTER25, LETTER_MESSAGES(Bow2) },
{ PARTNER_WATT, ITEM_LETTER25, LETTER_MESSAGES(Watt1) },
{ PARTNER_WATT, ITEM_LETTER25, LETTER_MESSAGES(Watt2) },
{ PARTNER_SUSHIE, ITEM_LETTER25, LETTER_MESSAGES(Sushie2) },
{ PARTNER_SUSHIE, ITEM_LETTER25, LETTER_MESSAGES(Sushie1) },
{ PARTNER_LAKILESTER, ITEM_LETTER25, LETTER_MESSAGES(Lakilester2) },
{ PARTNER_LAKILESTER, ITEM_LETTER25, LETTER_MESSAGES(Lakilester1) },
{ PARTNER_GOOMBARIO, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Goombario2) },
{ PARTNER_GOOMBARIO, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Goombario1) },
{ PARTNER_GOOMBARIO, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Goombario3) },
{ PARTNER_KOOPER, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Kooper3) },
{ PARTNER_KOOPER, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Kooper2) },
{ PARTNER_KOOPER, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Kooper1) },
{ PARTNER_BOMBETTE, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Bombette2) },
{ PARTNER_BOMBETTE, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Bombette3) },
{ PARTNER_BOMBETTE, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Bombette1) },
{ PARTNER_PARAKARRY, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Parakarry1) },
{ PARTNER_PARAKARRY, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Parakarry2) },
{ PARTNER_BOW, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Bow1) },
{ PARTNER_BOW, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Bow2) },
{ PARTNER_WATT, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Watt1) },
{ PARTNER_WATT, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Watt2) },
{ PARTNER_SUSHIE, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Sushie2) },
{ PARTNER_SUSHIE, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Sushie1) },
{ PARTNER_LAKILESTER, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Lakilester2) },
{ PARTNER_LAKILESTER, ITEM_LETTER_TO_KOLORADO, LETTER_MESSAGES(Lakilester1) },
};
API_CALLABLE(N(func_80244E90_805710)) {

View File

@ -69,21 +69,21 @@ EvtScript N(EVS_LetterPrompt_ToadKid1A) = {
EvtScript N(EVS_LetterReward_ToadKid1A) = {
EVT_IF_EQ(LVarC, DELIVERY_ACCEPTED)
EVT_CALL(SpeakToPlayer, NPC_ToadKid_02, ANIM_ToadKid_Yellow_Talk, ANIM_ToadKid_Yellow_Idle, 0, MSG_MAC_Station_004D)
EVT_GIVE_KEY_REWARD(ITEM_LETTER21)
EVT_GIVE_KEY_REWARD(ITEM_LETTER_TO_RED_YOSHI_KID)
EVT_END_IF
EVT_RETURN
EVT_END
};
s32 N(LetterList_B)[] = {
ITEM_LETTER22,
ITEM_LETTER_TO_DANE_T,
ITEM_NONE
};
EvtScript N(EVS_LetterPrompt_ToadKid1B) = {
EVT_CALL(N(LetterDelivery_Init), NPC_ToadKid_01,
ANIM_ToadKid_Red_Talk, ANIM_ToadKid_Red_Idle,
ITEM_LETTER22, ITEM_NONE,
ITEM_LETTER_TO_DANE_T, ITEM_NONE,
MSG_MAC_Station_004E, MSG_MAC_Station_004F,
MSG_MAC_Station_0050, MSG_MAC_Station_0051,
EVT_PTR(N(LetterList_B)))
@ -95,11 +95,11 @@ EvtScript N(EVS_LetterPrompt_ToadKid1B) = {
EvtScript N(EVS_LetterReward_ToadKid1B) = {
EVT_IF_EQ(LVarC, DELIVERY_ACCEPTED)
EVT_CALL(SpeakToPlayer, NPC_ToadKid_02, ANIM_ToadKid_Yellow_Talk, ANIM_ToadKid_Yellow_Idle, 0, MSG_MAC_Station_0052)
// EVT_GIVE_KEY_REWARD(ITEM_LETTER_TO_FROSTT), but LVar1/LVar0 are set in wrong order
// EVT_GIVE_KEY_REWARD(ITEM_LETTER_TO_FROST_T), but LVar1/LVar0 are set in wrong order
EVT_SET(LVar1, 1)
EVT_SET(LVar0, ITEM_LETTER_TO_FROSTT)
EVT_SET(LVar0, ITEM_LETTER_TO_FROST_T)
EVT_EXEC_WAIT(N(GiveKeyReward))
EVT_CALL(AddKeyItem, ITEM_LETTER_TO_FROSTT)
EVT_CALL(AddKeyItem, ITEM_LETTER_TO_FROST_T)
EVT_END_IF
EVT_RETURN
EVT_END

View File

@ -46,7 +46,7 @@ enum {
enum {
MF_Unk_01 = MapFlag(1),
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE mac_05

View File

@ -50,13 +50,13 @@ EvtScript N(EVS_LetterPrompt_Fishmael) = {
};
s32 N(Kolorado_LetterList)[] = {
ITEM_LETTER25, ITEM_NONE
ITEM_LETTER_TO_KOLORADO, ITEM_NONE
};
EvtScript N(EVS_LetterPrompt_Kolorado) = {
EVT_CALL(N(LetterDelivery_Init), NPC_Kolorado,
ANIM_Kolorado_Talk, ANIM_Kolorado_Idle,
ITEM_LETTER25, ITEM_NONE,
ITEM_LETTER_TO_KOLORADO, ITEM_NONE,
MSG_MAC_Port_0085, MSG_MAC_Port_0086,
MSG_MAC_Port_0087, MSG_MAC_Port_0088,
EVT_PTR(N(Kolorado_LetterList)))
@ -1918,7 +1918,7 @@ API_CALLABLE(N(func_8024335C_8554CC)) {
}
EvtScript N(D_8024E23C_8603AC) = {
EVT_SET(MF_Unk_0A, TRUE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, TRUE)
EVT_CALL(SetSelfEnemyFlagBits, ENEMY_FLAG_400000 | ENEMY_FLAG_8000000, 1)
EVT_CALL(InterpNpcYaw, NPC_Chanterelle, 270, 0)
EVT_CALL(SetMusicTrack, 0, SONG_POP_DIVA_SONG, 1, 8)
@ -1931,10 +1931,10 @@ EvtScript N(D_8024E23C_8603AC) = {
EVT_CHILD_THREAD
EVT_WAIT(30)
EVT_CALL(N(func_8024335C_8554CC))
EVT_SET(MF_Unk_0A, FALSE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_END_CHILD_THREAD
EVT_LOOP(0)
EVT_IF_EQ(MF_Unk_0A, FALSE)
EVT_IF_EQ(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_BREAK_LOOP
EVT_END_IF
EVT_WAIT(1)

View File

@ -48,7 +48,7 @@ EvtScript N(D_802525B0_864720) = {
EVT_CALL(EnableModel, MODEL_o139, FALSE)
EVT_CALL(EnableModel, MODEL_o140, FALSE)
EVT_CASE_EQ(3)
EVT_SET(MF_Unk_0A, FALSE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_CALL(EnableGroup, MODEL_bar_inn, FALSE)
EVT_CALL(EnableModel, MODEL_o139, TRUE)
EVT_CALL(EnableModel, MODEL_o140, TRUE)

View File

@ -1012,13 +1012,7 @@ NpcSettings N(NpcSettings_Luigi) = {
.level = 99,
};
NpcSettings N(NpcSettings_Fuzzy) = {
.height = 20,
.radius = 22,
.level = 6,
.onHit = &EnemyNpcHit,
.onDefeat = &EnemyNpcDefeat,
};
#include "world/common/enemy/complete/Fuzzy.inc.c"
NpcSettings N(NpcSettings_Bobomb) = {
.height = 23,

View File

@ -7,7 +7,7 @@ EvtScript N(EVS_Unused_DoNothing) = {
#include "world/common/npc/Oaklie.inc.c"
#include "world/common/enemy/complete/ForestFuzzy.inc.c"
#include "world/common/enemy/complete/ForestFuzzy_Wander.inc.c"
s32 N(KeyList)[] = {
ITEM_FOREST_PASS,
@ -170,7 +170,7 @@ StaticNpc N(NpcData_Oaklie) = {
StaticNpc N(NpcData_Fuzzy_01) = {
.id = NPC_Fuzzy_01,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { 300.0f, 0.0f, 130.0f },
.yaw = 0,
.flags = 0,
@ -193,7 +193,7 @@ StaticNpc N(NpcData_Fuzzy_01) = {
StaticNpc N(NpcData_Fuzzy_02) = {
.id = NPC_Fuzzy_02,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { -100.0f, 0.0f, -320.0f },
.yaw = 0,
.flags = 0,

View File

@ -1,6 +1,6 @@
#include "mim_04.h"
#include "world/common/enemy/complete/ForestFuzzy.inc.c"
#include "world/common/enemy/complete/ForestFuzzy_Wander.inc.c"
#include "world/common/npc/Bubulb.inc.c"
@ -56,7 +56,7 @@ EvtScript N(EVS_NpcInit_Bubulb) = {
StaticNpc N(NpcData_Fuzzy) = {
.id = NPC_Fuzzy,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { 240.0f, 0.0f, -240.0f },
.yaw = 0,
.flags = ENEMY_FLAG_400 | ENEMY_FLAG_400000,

View File

@ -1,7 +1,7 @@
#include "mim_06.h"
#include "world/common/enemy/complete/PiranhaPlant.inc.c"
#include "world/common/enemy/complete/ForestFuzzy.inc.c"
#include "world/common/enemy/complete/ForestFuzzy_Wander.inc.c"
StaticNpc N(NpcData_PiranhaPlant_01)[] = {
{
@ -57,7 +57,7 @@ StaticNpc N(NpcData_PiranhaPlant_02)[] = {
StaticNpc N(NpcData_Fuzzy) = {
.id = NPC_Fuzzy,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { -140.0f, 0.0f, 300.0f },
.yaw = 0,
.flags = ENEMY_FLAG_400,

View File

@ -1,6 +1,6 @@
#include "mim_07.h"
#include "world/common/enemy/complete/ForestFuzzy.inc.c"
#include "world/common/enemy/complete/ForestFuzzy_Wander.inc.c"
NpcSettings N(NpcSettings_JrTroopa) = {
.height = 32,
@ -184,7 +184,7 @@ EvtScript N(EVS_NpcInit_Fuzzy) = {
StaticNpc N(NpcData_Fuzzy_01) = {
.id = NPC_Fuzzy_01,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { -240.0f, 0.0f, -240.0f },
.yaw = 0,
.flags = 0,
@ -208,7 +208,7 @@ StaticNpc N(NpcData_Fuzzy_01) = {
StaticNpc N(NpcData_Fuzzy_02) = {
.id = NPC_Fuzzy_02,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { 270.0f, 0.0f, 200.0f },
.yaw = 0,
.flags = 0,

View File

@ -1,11 +1,11 @@
#include "mim_09.h"
#include "world/common/npc/Oaklie.inc.c"
#include "world/common/enemy/complete/ForestFuzzy.inc.c"
#include "world/common/enemy/complete/ForestFuzzy_Wander.inc.c"
StaticNpc N(NpcData_Fuzzy) = {
.id = NPC_Fuzzy,
.settings = &N(NpcSettings_ForestFuzzy),
.settings = &N(NpcSettings_ForestFuzzy_Wander),
.pos = { 270.0f, 0.0f, 200.0f },
.yaw = 0,
.flags = ENEMY_FLAG_400,

View File

@ -22,7 +22,7 @@ enum {
};
enum {
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE mim_11

View File

@ -11,7 +11,7 @@ FoliageDropList N(Bush1_Drops) = {
.itemID = ITEM_STRANGE_LEAF,
.pos = { 357, 16, 315 },
.spawnMode = ITEM_SPAWN_MODE_TOSS_NEVER_VANISH,
.spawnFlag = MF_Unk_0A,
.spawnFlag = AF_JAN01_TreeDrop_StarPiece,
},
}
};

View File

@ -1,10 +1,10 @@
#include "nok_13.h"
#include "world/common/enemy/complete/Fuzzy.inc.c"
#include "world/common/enemy/complete/Fuzzy_Wander.inc.c"
StaticNpc N(NpcData_Fuzzy) = {
.id = NPC_UnusedFuzzy,
.settings = &N(NpcSettings_Fuzzy),
.settings = &N(NpcSettings_Fuzzy_Wander),
.pos = { 175.0f, 0.0f, -270.0f },
.yaw = 180,
.drops = FUZZY_DROPS,

View File

@ -26,7 +26,7 @@ EvtScript N(EVS_Scene_Epilogue) = {
EVT_CALL(SetNpcAnimation, NPC_Bootler, ANIM_Bootler_Idle)
EVT_WAIT(15)
EVT_THREAD
EVT_CALL(DropTinyItemEntity, ITEM_LETTER25, NPC_DISPOSE_LOCATION, ITEM_SPAWN_MODE_DECORATION, 0)
EVT_CALL(DropResizableItemEntity, ITEM_LETTER_TO_KOLORADO, NPC_DISPOSE_LOCATION, ITEM_SPAWN_MODE_DECORATION, 0)
EVT_CALL(N(SetInvitationLetterScale))
EVT_LOOP(35)
EVT_CALL(GetNpcPos, NPC_Bootler, LVar1, LVar2, LVar3)

View File

@ -168,7 +168,7 @@ EvtScript N(EVS_PressSwitch_Right) = {
EvtScript N(EVS_SetupSwitches) = {
EVT_SET(MF_EitherSwitchPressed, FALSE)
EVT_SET(MF_Unk_0A, FALSE)
EVT_SET(AF_JAN01_TreeDrop_StarPiece, FALSE)
EVT_EXEC(N(EVS_UpdateDirectionArrow))
EVT_CALL(ParentColliderToModel, COLLIDER_o920, MODEL_y_b1)
EVT_CALL(ParentColliderToModel, COLLIDER_o921, MODEL_y_b2)

View File

@ -38,7 +38,7 @@ enum {
enum {
MF_TrainUnk_00 = MapFlag(0),
MF_EitherSwitchPressed = MapFlag(1),
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE omo_03

View File

@ -218,7 +218,7 @@ NpcGroupList N(DefaultNPCs) = {
NpcGroupList N(EpilogueNPCs) = {
//@bug? only loads the first NPC from the group, cannot use macro here
{ .npcCount = 1, .npcs = &N(NpcData_TrainToads)[0], .battle = 0, .stage = 0 },
{ .npcCount = 1, .npcs = &N(NpcData_TrainToads)[0] },
NPC_GROUP(N(NpcData_Epilogue)),
{}
};

View File

@ -29,7 +29,7 @@ enum {
enum {
MF_TrainUnk_00 = MapFlag(0),
MF_EitherSwitchPressed = MapFlag(1),
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE omo_06

View File

@ -36,7 +36,7 @@ enum {
enum {
MF_TrainUnk_00 = MapFlag(0),
MF_EitherSwitchPressed = MapFlag(1),
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE omo_08

View File

@ -29,7 +29,7 @@ enum {
enum {
MF_TrainUnk_00 = MapFlag(0),
MF_EitherSwitchPressed = MapFlag(1),
MF_Unk_0A = MapFlag(10),
AF_JAN01_TreeDrop_StarPiece = MapFlag(10),
};
#define NAMESPACE omo_10

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