dro and flo (#285)

* dro_01

* UnkFunc25

* UnkFunc26

* UnkFunc27

* Fixup old UnkFuncs

* a

* UnkFunc28

* UnkFunc29

* UnkFunc30

* dro_02

* UnkFunc30

* UnkFunc31

* UnkFunc33

* UnkFunc34

* UnkFunc35

* UnkFunc36

* Fix splat.yaml and remove asm

* Fixed finally

* a

* flo_00

* update func

* flo_03

* flo_07

* flo_08

* UnkFunc37 & 38

* UnkFunc39

* UnkFunc40

* a

* Some copies

* Func

* flo_09

* Fix linker alignment warnings

* flo_10 (partial)

* flo_11

* flo_12

* flo_13

* UnkFunc41

* Copy funcs

* UnkFunc42

* flo_14

* UnkFunc43

* UnkFunc44

* flo_16

* UnkFunc44

* UnkFunc45

* flo_15

* flo_17

* flo_18

* flo_19

* flo_21

* flo_22

* flo_23

* flo_24

* flo_25

* cya asm

* a

* a

* Finally OK!

* Alter scripts

* Fix food func

* PR1

* PR2

* Add tree structs to disassembly and change names

* tabs to spaces and callback &

* Fix the script too

* PR3

* Fucking newlines
This commit is contained in:
Maide 2021-04-29 18:09:30 +01:00 committed by GitHub
parent d530ca24cd
commit 0ec2010b9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1054 changed files with 40057 additions and 33647 deletions

View File

@ -759,11 +759,19 @@ typedef struct CollisionData {
/* 0x0E */ char unk_0E[2];
} CollisionData; // size = 0x10
typedef struct ModelNode {
/* 0x00 */ s32 type; /* 2 = model */
/* 0x04 */ UNK_PTR displayList;
/* 0x08 */ s32 numProperties;
/* 0x0C */ UNK_PTR propertyList;
/* 0x10 */ struct ModelGroupData* groupData;
} ModelNode; // size = 0x14
typedef struct Model {
/* 0x00 */ u16 flags;
/* 0x02 */ s16 modelID;
/* 0x04 */ char unk_04[4];
/* 0x08 */ s32* modelNode;
/* 0x08 */ struct ModelNode** modelNode;
/* 0x0C */ struct ModelGroupData* groupData;
/* 0x10 */ s32* currentSpecialMatrix;
/* 0x14 */ char unk_14[4];
@ -855,6 +863,41 @@ typedef struct EffectBlueprint {
/* 0x14 */ void (*unk_14)(EffectInstance* effectInst);
} EffectBlueprint; // size = 0x18
typedef struct {
char unk_00[0x38];
f32 unk_38[4];
} EffectUnkStruct1;
// TODO figure out what this actually is
// func_800715D0 invokes gEffectTable[78]'s entryPoint function
// func_80072230 invokes gEffectTable[111]'s entryPoint function
// func_800729B0 invokes gEffectTable[131]'s entryPoint function
// These functions are currently typed to return void
// Assume they return an Effect*, and this struct is accessed at unk_0C,
// but this struct differs from EffectInstanceData
// Search for "struct N(temp)" for examples
typedef struct {
char unk_00[0x4];
f32 unk_04;
f32 unk_08;
f32 unk_0C;
f32 unk_10;
char unk_14[0x4];
s32 unk_18;
s32 unk_1C;
s32 unk_20;
X32 unk_24;
s32 unk_28;
s32 unk_2C;
s32 unk_30;
s32 unk_34;
s32 unk_38;
char unk_3C[0xC];
EffectUnkStruct1* unk_48;
char unk_4C[0x24];
s32 unk_70;
s32 unk_74;
} EffectInstanceDataThing;
typedef struct Effect {
/* 0x00 */ s32 flags;
/* 0x04 */ s32 effectIndex;
@ -906,14 +949,6 @@ typedef struct ItemEntity {
/* 0x58 */ s32 unk_58;
} ItemEntity; // size = 0x5C
typedef struct ModelNode {
/* 0x00 */ s32 type; /* 2 = model */
/* 0x04 */ UNK_PTR displayList;
/* 0x08 */ s32 numProperties;
/* 0x0C */ UNK_PTR propertyList;
/* 0x10 */ struct ModelGroupData* groupData;
} ModelNode; // size = 0x14
typedef struct StaticShadowData {
/* 0x00 */ s16 flags;
/* 0x02 */ char unk_02[34];
@ -1738,7 +1773,8 @@ typedef struct {
} PauseItemPage; // size = 0xC
typedef struct {
/* 0x00 */ char unk_00[8];
/* 0x00 */ f32 unk_00;
/* 0x04 */ char unk_04[4];
/* 0x08 */ s8* unk_08;
/* 0x0C */ void* fpInit;
/* 0x10 */ void* fpHandleInput;

View File

@ -19,6 +19,7 @@ void osCleanupThread(void);
void func_80070A90(s32, f32, f32, f32);
void func_80070AF0(s32, f32, f32, f32);
f32 signF(f32 val);
void* heap_malloc(s32 size);
HeapNode* _heap_create(s32* addr, u32 size);
@ -99,19 +100,27 @@ Npc* make_disguise_npc(s32 peachDisguise);
s32 partner_player_can_pause(void);
s32 disable_player_static_collisions(void);
s32 disable_player_input(void);
void func_80027088(s32);
void set_time_freeze_mode(s32);
void get_dpad_input_radial(f32* angle, f32* magnitude);
void transform_point(Matrix4f mtx, f32 inX, f32 inY, f32 inZ, f32 inS, f32* outX, f32* outY, f32* outZ, f32* outS);
void func_8006F8F0(f32, f32, f32);
void func_8006FEF0(s32, f32, f32, f32, f32);
void func_80070190(s32, f32, f32, f32, s32, f32, s32, s32);
void func_80070F70(s32 var1, f32 var2, f32 var3, f32 var4, f32 var5, f32 var6, f32 var7, s32 var8, s32* unk);
void func_80071090(s32, f32, f32, f32, s32);
Effect* func_80071750(s32, f32, f32, f32, f32, s32);
void func_800720B0(s32, f32, f32, f32, f32, s32);
Effect* func_800720B0(s32, f32, f32, f32, f32, s32);
void func_80072950(s32, f32, f32, f32, f32, s32 time);
Effect* func_800715D0(s32, f32, f32, f32);
Effect* func_80071810(s32, f32, f32, f32);
Effect* func_80072890(s32, f32, f32, f32, f32, s32);
Effect* func_800716F0(s32, f32, f32, f32, f32, s32);
void func_80071690(s32, f32, f32, f32);
void func_800F4E40(void*);
s32 func_800DDCEC(s32, f32*, f32*, f32*, f32, f32, f32, f32);
void update_collider_transform(s16 colliderID);
void get_collider_center(s32 colliderID, f32* x, f32* y, f32* z);
@ -200,7 +209,7 @@ ScriptInstance* start_script_in_group(Script* source, u8 priority, u8 initialSta
void set_animation_rate(ActorID actorID, s32 partIndex, f32 rate);
void func_8011B7C0(u16, s32, s32);
AnimatedMesh* get_anim_mesh(s32 arg0);
void set_transition_stencil_zoom_0(s32, f32);
void set_transition_stencil_zoom_0(u8, f32);
void set_transition_stencil_zoom_1(s32, f32);
void func_80137DC0(s32, f32*, f32*);
s32 set_transition_stencil_color(s32, u8, u8, u8);
@ -295,7 +304,11 @@ s32 func_80071030(s32 a0, f32 a1, f32 a2, f32 a3, s32 a4);
void func_80070CD0(s32, f32, f32, f32, f32, f32);
void func_802B2078(void);
extern f32 gCurtainScale;
extern f32 gCurtainScaleGoal;
extern f32 gCurtainFade;
extern f32 gCurtainFadeGoal;
extern UNK_FUN_PTR(gCurtainDrawCallback);
void func_802DDA8C(s32, s32, f32);
void initialize_curtains(void);
@ -321,21 +334,16 @@ f32 dead_set_float_variable(ScriptInstance* script, Bytecode var, f32 value);
f32 dead_cos_rad(f32 x);
f32 dead_atan2(f32 startX, f32 startZ, f32 endX, f32 endZ);
void func_8004A784(Npc* npc, f32 arg1, f32* arg2, s32* arg3, s32* arg4, s32* arg5);
void base_UnkNpcAIFunc1(ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory);
ApiStatus func_80045900(ScriptInstance* script);
ApiStatus func_802D6420(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D6954(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D2B6C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_80045838(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D585C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CF56C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CA988(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CDE68(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D8248(ScriptInstance* script, s32 isInitialCall);
s32 create_dynamic_entity_world(void (*updateFunc)(void), void (*drawFunc)(void));
EntityModel* get_entity_model(s32 idx);
f32 func_800E5938(s32 lag, s32* x, s32* y, s32* z);
void sfx_get_spatialized_sound_params(f32 arg0, f32 arg1, f32 arg2, s16* arg3, s16* arg4, s32 arg5);
void sfx_play_sound_with_params(s32 arg0, u8 arg1, u8 arg2, s16 arg3);
void* func_800729B0(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
void* func_800726B0(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
void func_8004A784(Npc* npc, f32 arg1, f32* arg2, s32* arg3, s32* arg4, s32* arg5);
void base_UnkNpcAIFunc1(ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory);
#endif

View File

@ -19,7 +19,6 @@
#define STATIC_ASSERT(condition) enum { static_assert_fail = 1/(!!(condition)) } // Causes division by zero ("not integer constant") if false
#define CAM(id) (&gCameras[id])
#define CAM2(id) ({ Camera* c = gCameras; &c[id]; })
#define BADGE_MENU_PAGE(index) (&gBadgeMenuPages[index])
#define ITEM_MENU_PAGE(index) (&gItemMenuPages[index])
@ -38,6 +37,7 @@
#define MAX_ENTITIES 30
#define MAX_DYNAMIC_ENTITIES 16
#define MAX_TEX_PANNERS 16
#define MAX_ITEM_ENTITIES 256
// Alternative to libultra's M_PI: non-float version; more digits cause issues
#define PI 3.141592f

View File

@ -219,7 +219,7 @@ typedef struct {
/* 0x0C */ s32 pointZ;
/* 0x10 */ s32 sizeX;
/* 0x14 */ s32 sizeZ;
/* 0x18 */ f32 unk_34;
/* 0x18 */ f32 unk_18;
/* 0x1C */ s16 unk_1C;
} EnemyTerritoryThing; // size = 0x20

View File

@ -261,12 +261,13 @@ ApiStatus DemoSetButtons(ScriptInstance* script, s32 isInitialCall);
ApiStatus DemoJoystickRadial(ScriptInstance* script, s32 isInitialCall);
ApiStatus DemoJoystickXY(ScriptInstance* script, s32 isInitialCall);
ApiStatus WaitForPlayerInputEnabled(ScriptInstance* script, s32 isInitialCall);
ApiStatus IsPlayerOnValidFloor(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CFE2C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CFD30(ScriptInstance* script, s32 isInitialCall);
ApiStatus IsStartingConversation(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D5830(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D3474(ScriptInstance* script, s32 isInitialCall);
ApiStatus SetNpcSprite(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D3624(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D36E0(ScriptInstance* script, s32 isInitialCall);
@ -274,6 +275,32 @@ ApiStatus func_802D38EC(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D3840(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D39FC(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D3C58(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D2884(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D2C14(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D7B10(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D663C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_80045900(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D6420(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D6954(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D2B6C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_80045838(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D585C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CF56C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CA988(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CDE68(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D8248(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D286C(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D2520(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D5FF8(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D5FD8(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802D62E4(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_80044238(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802C9C70(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802C94A0(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802C90FC(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CFE80(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802CFFC0(ScriptInstance* script, s32 isInitialCall);
ApiStatus func_802C971C(ScriptInstance* script, s32 isInitialCall);
extern Script EnemyNpcHit;
extern Script EnemyNpcDefeat;

View File

@ -75,7 +75,7 @@ typedef enum ScriptOpcode {
ScriptOpcode_OR_CONST, ///< Args: container, value to bitwise OR with
ScriptOpcode_CALL, ///< Args: *function, ...
ScriptOpcode_SPAWN_SCRIPT, ///< Args: Script*
ScriptOpcode_SPAWN_SCRIPT_GET_ID, ///< Args: Script*, container
ScriptOpcode_SPAWN_GET_ID, ///< Args: Script*, container
ScriptOpcode_AWAIT_SCRIPT, ///< Spawns a script and waits for it to return before continuing. Args: Script*
ScriptOpcode_BIND_TRIGGER, ///< Args: Script*, trigger flags, s32 target, 1, Trigger*
ScriptOpcode_UNBIND, ///< Unbinds any triggers bound to this script.
@ -99,16 +99,16 @@ typedef enum ScriptOpcode {
ScriptOpcode_DEBUG_PRINT = 0x5B, ///< Args: expression
} ScriptOpcode;
#define SI_VAR(v) ((v - 30000000))
#define SI_MAP_VAR(v) ((v - 50000000))
#define SI_FLAG(v) ((v - 70000000))
#define SI_MAP_FLAG(v) ((v - 90000000))
#define SI_AREA_FLAG(v) ((v - 110000000))
#define SI_SAVE_FLAG(v) ((v - 130000000))
#define SI_AREA_VAR(v) ((v - 150000000))
#define SI_SAVE_VAR(v) ((v - 170000000))
#define SI_ARRAY(v) ((v - 190000000))
#define SI_ARRAY_FLAG(v) ((v - 210000000))
#define SI_VAR(v) ((v - 30000000))
#define SI_MAP_VAR(v) ((v - 50000000))
#define SI_FLAG(v) ((v - 70000000))
#define SI_MAP_FLAG(v) ((v - 90000000))
#define SI_AREA_FLAG(v) ((v - 110000000))
#define SI_SAVE_FLAG(v) ((v - 130000000))
#define SI_AREA_VAR(v) ((v - 150000000))
#define SI_SAVE_VAR(v) ((v - 170000000))
#define SI_ARRAY(v) ((v - 190000000))
#define SI_ARRAY_FLAG(v) ((v - 210000000))
#define SI_FIXED(v) (((v * 1024.0f) + -230000000)) // See float_to_fixed_var
#define MAKE_ENTITY_END 0x80000000

View File

@ -163,7 +163,7 @@ extern s32 gPauseMenuCommonIconIDs[8];
extern s32 gPauseMenuTabIconIDs[6];
extern s32 gPauseMenuStrings[348];
extern s32 gPauseMenuIconScripts[8];
extern MenuTab* gPauseMenuTabs[7];
extern MenuTab gPauseMenuTabs[7];
extern s32 gPauseMenuCursorPosX;
extern s32 gPauseMenuCursorPosY;
extern s32 gPauseMenuCursorOpacity;

View File

@ -4,11 +4,9 @@
u32 func_80025D74(void* arg0, const unsigned char* str, s32 count);
void func_80025C60(void) {
OSPiHandle** handle = &carthandle;
osEPiWriteIo(*handle, 0xB3FF0014, 0);
osEPiWriteIo(*handle, 0xB3FF0004, 0);
osEPiWriteIo(*handle, 0xB3FF0000, ASCII_TO_U32('I', 'S', '6', '4'));
osEPiWriteIo(carthandle, 0xB3FF0014, 0);
osEPiWriteIo(carthandle, 0xB3FF0004, 0);
osEPiWriteIo(carthandle, 0xB3FF0000, ASCII_TO_U32('I', 'S', '6', '4'));
}
void func_80025CC0(const char* fmt, ...) {

View File

@ -517,7 +517,7 @@ ApiStatus func_800458CC(ScriptInstance* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
ApiStatus func_80045900(ScriptInstance* script) {
ApiStatus func_80045900(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var0 = get_variable(script, *script->ptrReadPos);

View File

@ -128,7 +128,7 @@ INCLUDE_ASM(s32, "4ac90_len_3910", func_80070EB0);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80070F10);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80070F70);
INCLUDE_ASM(void, "4ac90_len_3910", func_80070F70, s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, s32 arg7, s32* arg8);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80070FD0);
@ -162,19 +162,19 @@ INCLUDE_ASM(s32, "4ac90_len_3910", func_80071510);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80071570);
INCLUDE_ASM(s32, "4ac90_len_3910", func_800715D0);
INCLUDE_ASM(Effect*, "4ac90_len_3910", func_800715D0, s32 arg0, f32 arg1, f32 arg2, f32 arg3);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80071630);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80071690);
INCLUDE_ASM(void, "4ac90_len_3910", func_80071690, s32 arg0, f32 arg1, f32 arg2, f32 arg3);
INCLUDE_ASM(s32, "4ac90_len_3910", func_800716F0);
INCLUDE_ASM(Effect*, "4ac90_len_3910", func_800716F0, s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
INCLUDE_ASM(Effect*, "4ac90_len_3910", func_80071750, s32 a0, f32 a1, f32 a2, f32 a3, f32 a4, s32 a5);
INCLUDE_ASM(s32, "4ac90_len_3910", func_800717B0);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80071810);
INCLUDE_ASM(Effect*, "4ac90_len_3910", func_80071810, s32 arg0, f32 arg1, f32 arg2, f32 arg3);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80071870);
@ -220,7 +220,7 @@ INCLUDE_ASM(void, "4ac90_len_3910", func_80071FF0, s32 arg0, f32 arg1, f32 arg2,
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072050);
INCLUDE_ASM(void, "4ac90_len_3910", func_800720B0, s32 a0, f32 a1, f32 a2, f32 a3, f32 a4, s32 a5);
INCLUDE_ASM(Effect*, "4ac90_len_3910", func_800720B0, s32 a0, f32 a1, f32 a2, f32 a3, f32 a4, s32 a5);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072110);
@ -254,7 +254,7 @@ INCLUDE_ASM(s32, "4ac90_len_3910", func_800725F0);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072650);
INCLUDE_ASM(s32, "4ac90_len_3910", func_800726B0);
INCLUDE_ASM(void*, "4ac90_len_3910", func_800726B0, s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072710);
@ -264,13 +264,13 @@ INCLUDE_ASM(s32, "4ac90_len_3910", func_800727D0);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072830);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072890);
INCLUDE_ASM(Effect*, "4ac90_len_3910", func_80072890, s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
INCLUDE_ASM(s32, "4ac90_len_3910", func_800728F0);
INCLUDE_ASM(void, "4ac90_len_3910", func_80072950, s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 time);
INCLUDE_ASM(s32, "4ac90_len_3910", func_800729B0);
INCLUDE_ASM(void*, "4ac90_len_3910", func_800729B0, s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
INCLUDE_ASM(s32, "4ac90_len_3910", func_80072A10);

View File

@ -24,7 +24,7 @@ INCLUDE_ASM(s32, "8a860_len_3f30", func_800F4CF0);
INCLUDE_ASM(s32, "8a860_len_3f30", func_800F4D28);
INCLUDE_ASM(s32, "8a860_len_3f30", func_800F4E40);
INCLUDE_ASM(void, "8a860_len_3f30", func_800F4E40, void* arg0);
INCLUDE_ASM(s32, "8a860_len_3f30", func_800F4FC4);

View File

@ -102,7 +102,7 @@ INCLUDE_ASM(s32, "DF950", sfx_adjust_env_sound_pos, s32 soundID, s32 arg1, f32 a
INCLUDE_ASM(s32, "DF950", func_80149A6C);
INCLUDE_ASM(s32, "DF950", sfx_play_sound_with_params);
INCLUDE_ASM(void, "DF950", sfx_play_sound_with_params, s32 arg0, u8 arg1, u8 arg2, s16 arg3);
INCLUDE_ASM(s32, "DF950", sfx_adjust_env_sound_params);
@ -129,7 +129,7 @@ void sfx_play_sound_at_npc(s32 soundID, s32 arg1, s32 npcID) {
INCLUDE_ASM(s32, "DF950", sfx_play_sound_at_position, s32 soundID, s32 value2, f32 posX, f32 posY,
f32 posZ);
INCLUDE_ASM(s32, "DF950", sfx_get_spatialized_sound_params);
INCLUDE_ASM(void, "DF950", sfx_get_spatialized_sound_params, f32 arg0, f32 arg1, f32 arg2, s16* arg3, s16* arg4, s32 arg5);
INCLUDE_ASM(s32, "DF950", sfx_compute_spatialized_sound_params_0);

View File

@ -5,16 +5,16 @@
#include "goomba.h"
ApiStatus func_8021818C_430B2C(ScriptInstance* script, s32 isInitialCall);
s32 goomba_anims_running[];
s32 goomba_anims[];
s32 goomba_defense_table[];
s32 goomba_status_table[];
s32 goomba_defense_table[];
ActorPartDesc goomba_parts[];
Script goomba_init;
Script goomba_turn;
Script goomba_idle;
Script goomba_dispatch;
extern s32 goomba_anims_running[];
extern s32 goomba_anims[];
extern s32 goomba_defense_table[];
extern s32 goomba_status_table[];
extern s32 goomba_defense_table[];
extern ActorPartDesc goomba_parts[];
extern Script goomba_init;
extern Script goomba_turn;
extern Script goomba_idle;
extern Script goomba_dispatch;
s32 goomba_defense_table[] = {
ELEMENT_NORMAL, 0,

View File

@ -105,8 +105,8 @@ ApiStatus N(func_802A1450_7309F0)(ScriptInstance* script, s32 isInitialCall) {
ApiStatus N(AddFP)(ScriptInstance* script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
s32 amt = get_variable(script, *script->ptrReadPos);
// @bug Should be playerData->curFP
s32 newFP = playerData->curHP + amt;

View File

@ -75,33 +75,9 @@ ApiStatus N(func_802A1280_72A9D0)(ScriptInstance* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
// This is a duplicate, search for others
// TODO figure out what this actually is
// func_80072230 invokes gEffectTable[111]'s entryPoint function
// that function is currently typed to return void
// Assume it returns an Effect* and unk_0C is this EffectInstanceData
// s32 unk_0C; //? Maybe EffectInstanceData too ?
struct N(temp2) {
char unk_00[0x8];
f32 unk_08;
f32 unk_0C;
f32 unk_10;
char unk_14[0x4];
s32 unk_18;
s32 unk_1C;
s32 unk_20;
char unk_24[0x4];
s32 unk_28;
s32 unk_2C;
s32 unk_30;
char unk_34[0x3C];
s32 unk_70;
s32 unk_74;
} N(temp2);
struct N(temp) {
char unk_00[0xC];
struct N(temp2)* unk_0C;
EffectInstanceDataThing* unk_0C;
} N(temp);
ApiStatus N(func_802A12E0_72AA30)(ScriptInstance* script, s32 isInitialCall) {

View File

@ -7,6 +7,9 @@
#undef NAMESPACE
#define NAMESPACE battle_item_mystery
ApiStatus N(func_802A13E4_72C994)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_802A188C_72CE3C)(ScriptInstance *script, s32 isInitialCall);
struct N(tempStc) {
s32 iconId;
s32 unk_04;
@ -14,10 +17,6 @@ struct N(tempStc) {
extern s32 N(D_802A227C_72D82C)[8];
extern s32 N(D_802A229C_72D84C)[8];
extern Script N(UseItemWithEffect);
ApiStatus N(func_802A13E4_72C994)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_802A188C_72CE3C)(ScriptInstance *script, s32 isInitialCall);
#endif

View File

@ -2,7 +2,7 @@
INCLUDE_ASM(void, "cd180_len_38f0", _render_transition_stencil, s32 arg0, f32 arg1, s32 arg2);
INCLUDE_ASM(void, "cd180_len_38f0", set_transition_stencil_zoom_0, s32 arg0, f32 arg1);
INCLUDE_ASM(void, "cd180_len_38f0", set_transition_stencil_zoom_0, u8 arg0, f32 arg1);
INCLUDE_ASM(void, "cd180_len_38f0", set_transition_stencil_zoom_1, s32 arg0, f32 arg1);

View File

@ -176,7 +176,7 @@ ApiStatus PlaySoundAtF(ScriptInstance* script, s32 isInitialCall) {
INCLUDE_ASM(ApiStatus, "evt/fa4c0_len_3bf0", func_802D6420, ScriptInstance* script, s32 isInitialCall);
INCLUDE_ASM(s32, "evt/fa4c0_len_3bf0", func_802D663C);
INCLUDE_ASM(ApiStatus, "evt/fa4c0_len_3bf0", func_802D663C, ScriptInstance* script, s32 isInitialCall);
// TODO: probably a split here (sound_api, item_api)

View File

@ -161,7 +161,7 @@ ApiStatus func_802C90FC(ScriptInstance* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
#else
INCLUDE_ASM(s32, "evt/map_api", func_802C90FC);
INCLUDE_ASM(ApiStatus, "evt/map_api", func_802C90FC, ScriptInstance* script, s32 isInitialCall);
#endif
ApiStatus func_802C91A4(ScriptInstance* script, s32 isInitialCall) {

View File

@ -362,7 +362,7 @@ ApiStatus func_802D286C(ScriptInstance* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
INCLUDE_ASM(s32, "evt/player_api", func_802D2884);
INCLUDE_ASM(ApiStatus, "evt/player_api", func_802D2884, ScriptInstance* script, s32 isInitialCall);
ApiStatus DisablePulseStone(ScriptInstance* script, s32 isInitialCall) {
PlayerStatus* playerStatus = &gPlayerStatus;

View File

@ -6,7 +6,6 @@
s32 func_800493EC(Enemy* enemy, s32 arg1, f32 arg2, f32 arg3);
ApiStatus N(func_80240C90_BDDE40)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_80240C90_BDDE40)(ScriptInstance *script, s32 isInitialCall);
extern Script N(main);
extern Script N(80241040);

View File

@ -201,10 +201,9 @@ NpcGroupList N(npcGroupList_80241A9C) = {
};
s32 N(func_80240000_BDD1B0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
PlayerStatus** playerStatus;
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
f32 phi_f20;
s32 ret = FALSE;
@ -217,7 +216,6 @@ s32 N(func_80240000_BDD1B0)(ScriptInstance* script, NpcAISettings* aiSettings, E
phi_f20 = 270.0f;
}
playerStatus = &gPlayerStatusPtr;
if (fabsf(get_clamped_angle_diff(phi_f20,
atan2(npc->pos.x, npc->pos.z,
gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z))) > 75.0) {
@ -259,29 +257,7 @@ void N(func_802401D4_BDD384)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc22.inc.c"
void N(func_802404D0_BDD680)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
script->functionTemp[0].s = 12;
} else {
npc->duration--;
if (npc->duration <= 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->duration = 15;
script->functionTemp[0].s = 0x28;
}
}
}
}
#include "world/common/UnkFunc8.inc.c"
#include "world/common/UnkNpcAIFunc16.inc.c"
@ -309,41 +285,7 @@ void N(func_80240694_BDD844)(ScriptInstance* script, NpcAISettings* aiSettings,
}
}
void N(func_80240834_BDD9E4)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ;
s32 phi_s1;
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
phi_s1 = 0;
if (is_point_within_region(enemy->territory->wander.detectShape,
enemy->territory->wander.detect.x, enemy->territory->wander.detect.z,
npc->pos.x, npc->pos.z, enemy->territory->wander.detectSizeX,
enemy->territory->wander.detectSizeZ)) {
phi_s1 = 1;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
if (func_800DDC44(npc->unk_80, &posX, &posY, &posZ,
1.0f, npc->yaw, npc->collisionHeight, npc->collisionRadius)) {
phi_s1 = 1;
}
npc->duration--;
if (npc->duration <= 0) {
phi_s1 = 1;
}
if (phi_s1) {
script->functionTemp[0].s = 4;
enemy->unk_07 = 0;
}
}
#include "world/common/UnkFunc10.inc.c"
void N(func_80240984_BDDB34)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -361,21 +303,7 @@ void N(func_80240984_BDDB34)(ScriptInstance* script, NpcAISettings* aiSettings,
}
}
void N(func_80240A30_BDDBE0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
if (func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
script->functionTemp[0].s = 12;
} else if (dist2D(npc->pos.x, npc->pos.z, enemy->territory->wander.point.x, enemy->territory->wander.point.z) <= npc->moveSpeed) {
npc->duration = 10;
script->functionTemp[0].s = 50;
} else if (npc->turnAroundYawAdjustment == 0) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, enemy->territory->wander.point.x, enemy->territory->wander.point.z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
}
}
#include "world/common/UnkFunc9.inc.c"
#include "world/common/UnkNpcAIFunc19.inc.c"
@ -399,7 +327,7 @@ s32 N(func_80240C90_BDDE40)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall) {
@ -445,7 +373,7 @@ s32 N(func_80240C90_BDDE40)(ScriptInstance *script, s32 isInitialCall) {
case 4:
N(UnkNpcAIFunc22)(script, npcAISettings, territoryPtr);
case 5:
N(func_802404D0_BDD680)(script, npcAISettings, territoryPtr);
N(UnkFunc8)(script, npcAISettings, territoryPtr);
return ApiStatus_BLOCK;
case 12:
func_80049F7C(script, npcAISettings, territoryPtr);
@ -469,7 +397,7 @@ s32 N(func_80240C90_BDDE40)(ScriptInstance *script, s32 isInitialCall) {
N(func_80240694_BDD844)(script, npcAISettings, territoryPtr);
return ApiStatus_BLOCK;
case 22:
N(func_80240834_BDD9E4)(script, npcAISettings, territoryPtr);
N(UnkFunc10)(script, npcAISettings, territoryPtr);
return ApiStatus_BLOCK;
case 40:
N(func_80240984_BDDB34)(script, npcAISettings, territoryPtr);
@ -477,7 +405,7 @@ s32 N(func_80240C90_BDDE40)(ScriptInstance *script, s32 isInitialCall) {
return ApiStatus_BLOCK;
}
case 41:
N(func_80240A30_BDDBE0)(script, npcAISettings, territoryPtr);
N(UnkFunc9)(script, npcAISettings, territoryPtr);
return ApiStatus_BLOCK;
case 50:
N(UnkNpcAIFunc19)(script, npcAISettings, territoryPtr);

View File

@ -10,11 +10,6 @@ ApiStatus N(func_80241648_BE03D8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241680_BE0410)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802415F4_BE0384)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024113C_BDFECC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024113C_BDFECC)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(AddPlayerHandsOffset)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_80241648_BE03D8)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_80241680_BE0410)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_802415F4_BE0384)(ScriptInstance *script, s32 isInitialCall);
extern Script N(main);
extern Script N(80241780);

View File

@ -2,7 +2,7 @@
#include "sprite/npc/boo.h"
#include "sprite/npc/world_bow.h"
s32 D_80244A20[0x70];
static s32 N(D_80244A20)[112];
Script N(exitWalk_80241830) = EXIT_WALK_SCRIPT(60, 0, "arn_07", 1);
@ -91,7 +91,7 @@ NpcSettings N(npcSettings_80241C3C) = {
.level = 99,
};
s32* N(D_80241C68_BE09F8) = NULL;
s32** N(D_80241C68_BE09F8) = NULL;
Script N(80241C6C) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 0);
@ -137,7 +137,7 @@ Script N(80241CD4) = SCRIPT({
Script N(80241E18) = {
SI_CMD(ScriptOpcode_CALL, (Bytecode) N(func_80241680_BE0410), SI_VAR(0)),
SI_CMD(ScriptOpcode_BIND_PADLOCK, (Bytecode) N(80241CD4), 0x10, 0, (Bytecode) D_80244A20, 0, 1),
SI_CMD(ScriptOpcode_BIND_PADLOCK, (Bytecode) N(80241CD4), 0x10, 0, (Bytecode) N(D_80244A20), 0, 1),
SI_CMD(ScriptOpcode_CALL, (Bytecode) N(func_802415F4_BE0384), SI_VAR(0)),
SI_CMD(ScriptOpcode_RETURN),
SI_CMD(ScriptOpcode_END)
@ -985,46 +985,11 @@ void N(func_8024067C_BDF40C)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc13.inc.c"
void N(func_8024094C_BDF6DC)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_80240AD4_BDF864)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_80240B94_BDF924)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1041,7 +1006,7 @@ ApiStatus N(func_80240B94_BDF924)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -1061,7 +1026,7 @@ ApiStatus N(func_80240B94_BDF924)(ScriptInstance* script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -1096,13 +1061,13 @@ ApiStatus N(func_80240B94_BDF924)(ScriptInstance* script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, npcAISettings, territoryPtr);
case 13:
N(func_8024094C_BDF6DC)(script, npcAISettings, territoryPtr);
N(UnkFunc15)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, npcAISettings, territoryPtr);
break;
case 15:
N(func_80240AD4_BDF864)(script, npcAISettings, territoryPtr);
N(UnkFunc16)(script, npcAISettings, territoryPtr);
break;
case 99:
func_8004A73C(script);
@ -1177,7 +1142,7 @@ ApiStatus N(func_8024113C_BDFECC)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 100.0f;
territory.unk_18 = 100.0f;
territory.unk_1C = 0;
if (isInitialCall) {
@ -1208,23 +1173,19 @@ ApiStatus N(func_8024113C_BDFECC)(ScriptInstance* script, s32 isInitialCall) {
/// Pushes/pops script local variables to D_80241C68_BE09F8
ApiStatus N(func_802412B0_BE0040)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80241C68_BE09F8);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = (s32*) i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_80241C68_BE09F8) == NULL) {
N(D_80241C68_BE09F8) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_80241C68_BE09F8)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_80241C68_BE09F8)[i];
}
ptr = &N(D_80241C68_BE09F8);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_80241C68_BE09F8));
N(D_80241C68_BE09F8) = NULL;
}
return ApiStatus_DONE2;
}
@ -1265,18 +1226,18 @@ ApiStatus N(func_80241648_BE03D8)(ScriptInstance* script, s32 isInitialCall) {
ApiStatus N(func_80241680_BE0410)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* var1 = get_variable(script, *args++);
s32* ptr = get_variable(script, *args);
s32 i;
if (var1 != NULL) {
for (i = 0; var1[i] != 0; i++) {
D_80244A20[i] = var1[i];
if (ptr != NULL) {
for (i = 0; ptr[i] != 0; i++) {
N(D_80244A20)[i] = ptr[i];
}
D_80244A20[i] = 0;
N(D_80244A20)[i] = 0;
} else {
for (i = 0; i < 0x70; i++) {
D_80244A20[i] = i + 16;
D_80244A20[0x70] = 0;
N(D_80244A20)[i] = i + 16;
N(D_80244A20)[112] = 0;
}
}
return ApiStatus_DONE2;

View File

@ -412,46 +412,11 @@ void N(func_8024067C_BE3E2C)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc13.inc.c"
void N(func_8024094C_BE40FC)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_80240AD4_BE4284)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_80240B94_BE4344)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -468,7 +433,7 @@ ApiStatus N(func_80240B94_BE4344)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -488,7 +453,7 @@ ApiStatus N(func_80240B94_BE4344)(ScriptInstance* script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -523,13 +488,13 @@ ApiStatus N(func_80240B94_BE4344)(ScriptInstance* script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, aiSettings, territoryPtr);
case 13:
N(func_8024094C_BE40FC)(script, aiSettings, territoryPtr);
N(UnkFunc15)(script, aiSettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, aiSettings, territoryPtr);
break;
case 15:
N(func_80240AD4_BE4284)(script, aiSettings, territoryPtr);
N(UnkFunc16)(script, aiSettings, territoryPtr);
break;
case 99:
func_8004A73C(script);
@ -707,70 +672,7 @@ INCLUDE_ASM(void, "world/area_arn/arn_04/events", arn_04_func_80241040_BE47F0, S
#include "world/common/UnkNpcAIFunc1_copy.inc.c"
void N(func_80241728_BE4ED8)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f24 = (f32)enemy->varTable[3] / 100.0;
f32 temp_f26 = temp_f24 + (f32)((f32)enemy->varTable[7] / 100.0);
s32 var;
if (npc->duration > 0) {
npc->duration--;
}
if (enemy->varTable[1] > 0) {
f32 temp_f22 = (f32)enemy->varTable[1] / 100.0;
f32 sin_degrees = sin_deg(enemy->varTable[2]);
s32 phi_v0;
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f24 + (sin_degrees * temp_f22);
} else {
npc->pos.y = temp_f26 + (sin_degrees * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
} else {
enemy->varTable[9]--;
}
if ((npc->turnAroundYawAdjustment == 0) && (npc->duration <= 0)) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = (rand_int(1000) % 11) + 5;
} else {
script->functionTemp[0].s = 0;
}
}
}
#include "world/common/UnkFunc4.inc.c"
#include "world/common/UnkNpcAIFunc2.inc.c"
@ -788,121 +690,9 @@ void N(func_80241AE4_BE5294)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc3.inc.c"
void N(func_80241CE8_BE5498)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f0_2;
f32 temp_f20;
f32 temp_f22;
f32 temp_f2;
s32 phi_v0;
f32 phi_f20;
f32 a = enemy->varTable[3];
f32 b = enemy->varTable[7];
#include "world/common/UnkFunc6.inc.c"
npc->jumpVelocity += npc->jumpScale;
temp_f20 = a / 100.0;
temp_f22 = b / 100.0;
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->jumpVelocity >= 0.0) {
npc->pos.y += npc->jumpVelocity;
npc->currentAnim = enemy->animList[9];
enemy->unk_07 = 0;
if (!(npc->flags & 8)) {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
} else {
phi_v0 = FALSE;
}
if (phi_v0) {
temp_f2 = posY + temp_f20;
if (temp_f2 <= npc->pos.y) {
npc->pos.y = temp_f2;
script->functionTemp[0].s = 0;
}
} else if (npc->pos.y >= npc->moveToPos.y) {
script->functionTemp[0].s = 0;
}
} else if (npc->jumpVelocity < 0.0) {
npc->duration++;
if (npc->duration >= aiSettings->unk_20) {
npc->duration = 0;
phi_f20 = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
temp_f0_2 = get_clamped_angle_diff(npc->yaw, phi_f20);
if (aiSettings->unk_1C.s < fabsf(temp_f0_2)) {
phi_f20 = npc->yaw;
if (temp_f0_2 < 0.0f) {
phi_f20 += -aiSettings->unk_1C.s;
} else {
phi_f20 += aiSettings->unk_1C.s;
}
}
npc->yaw = clamp_angle(phi_f20);
}
if (npc->flags & 8) {
if (npc->pos.y + npc->jumpVelocity < temp_f22) {
npc->pos.y = temp_f22;
npc->jumpVelocity = 0.0f;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
}
posX = npc->pos.x;
posY = npc->pos.y + npc->collisionHeight;
posZ = npc->pos.z;
posW = (fabsf(npc->jumpVelocity) + npc->collisionHeight) + 10.0;
if (func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW)) {
if (posW <= (npc->collisionHeight + fabsf(npc->jumpVelocity))) {
npc->jumpVelocity = 0.0f;
npc->pos.y = posY;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
} else if (fabsf(npc->jumpVelocity) < ((npc->pos.y - temp_f22) + npc->collisionHeight)) {
npc->pos.y = npc->pos.y + npc->jumpVelocity;
return;
}
npc->jumpVelocity = 0.0f;
}
}
void N(func_80242078_BE5828)(Npc *npc, Enemy *enemy, ScriptInstance *script, NpcAISettings *aiSettings) {
f32 posX, posY, posZ, posW;
s32 temp_a1;
s32 temp_v1;
s32 phi_v0;
script->functionTemp[0].s = 0;
npc->duration = 0;
temp_v1 = npc->flags & ~0x200;
npc->flags = (npc->flags & ~0x200) | 0x800;
if (enemy->territory->wander.isFlying) {
npc->flags = temp_v1 | 0x808;
} else {
npc->flags = npc->flags & ~8;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
enemy->varTable[2] = 0;
enemy->varTable[9] = 0;
enemy->varTable[3] = ((posW * 100.0) + 0.5);
enemy->varTable[7] = ((posY * 100.0) + 0.5);
script->functionTemp[1].s = aiSettings->unk_14;
enemy->unk_B0 |= 0x10;
}
#include "world/common/UnkFunc5.inc.c"
ApiStatus N(func_8024219C_BE594C)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -918,11 +708,11 @@ ApiStatus N(func_8024219C_BE594C)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_80242078_BE5828)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -943,7 +733,7 @@ ApiStatus N(func_8024219C_BE594C)(ScriptInstance* script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1_copy)(script, aiSettings, territoryPtr);
case 3:
N(func_80241728_BE4ED8)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -957,7 +747,7 @@ ApiStatus N(func_8024219C_BE594C)(ScriptInstance* script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 14:
N(func_80241CE8_BE5498)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
}
@ -968,7 +758,7 @@ s32 N(func_80242388_BE5B38)(ScriptInstance* script, NpcAISettings *aiSettings, E
PlayerStatus** playerStatus;
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
f32 phi_f20;
s32 ret = FALSE;
@ -1023,29 +813,7 @@ void N(func_8024255C_BE5D0C)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc22.inc.c"
void N(func_80242858_BE6008)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
script->functionTemp[0].s = 12;
} else {
npc->duration--;
if (npc->duration <= 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->duration = 15;
script->functionTemp[0].s = 0x28;
}
}
}
}
#include "world/common/UnkFunc8.inc.c"
#include "world/common/UnkNpcAIFunc16.inc.c"
@ -1060,7 +828,6 @@ void N(func_80242A1C_BE61CC)(ScriptInstance* script, NpcAISettings* aiSettings,
npc->duration--;
if (npc->duration <= 0) {
enemy->unk_10.x = npc->pos.x;
enemy->unk_10.y = npc->pos.y;
enemy->unk_10.z = npc->pos.z;
@ -1074,41 +841,7 @@ void N(func_80242A1C_BE61CC)(ScriptInstance* script, NpcAISettings* aiSettings,
}
}
void N(func_80242BBC_BE636C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ;
s32 phi_s1;
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
phi_s1 = 0;
if (is_point_within_region(enemy->territory->wander.detectShape,
enemy->territory->wander.detect.x, enemy->territory->wander.detect.z,
npc->pos.x, npc->pos.z, enemy->territory->wander.detectSizeX,
enemy->territory->wander.detectSizeZ)) {
phi_s1 = 1;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
if (func_800DDC44(npc->unk_80, &posX, &posY, &posZ,
1.0f, npc->yaw, npc->collisionHeight, npc->collisionRadius)) {
phi_s1 = 1;
}
npc->duration--;
if (npc->duration <= 0) {
phi_s1 = 1;
}
if (phi_s1) {
script->functionTemp[0].s = 4;
enemy->unk_07 = 0;
}
}
#include "world/common/UnkFunc10.inc.c"
void N(func_80242D0C_BE64BC)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -1126,21 +859,7 @@ void N(func_80242D0C_BE64BC)(ScriptInstance* script, NpcAISettings* aiSettings,
}
}
void N(func_80242DB8_BE6568)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
if (func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
script->functionTemp[0].s = 12;
} else if (dist2D(npc->pos.x, npc->pos.z, enemy->territory->wander.point.x, enemy->territory->wander.point.z) <= npc->moveSpeed) {
npc->duration = 10;
script->functionTemp[0].s = 50;
} else if (npc->turnAroundYawAdjustment == 0) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, enemy->territory->wander.point.x, enemy->territory->wander.point.z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
}
}
#include "world/common/UnkFunc9.inc.c"
#include "world/common/UnkNpcAIFunc19.inc.c"
@ -1165,7 +884,7 @@ ApiStatus N(func_80243018_BE67C8)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall) {
@ -1214,7 +933,7 @@ ApiStatus N(func_80243018_BE67C8)(ScriptInstance* script, s32 isInitialCall) {
case 4:
N(UnkNpcAIFunc22)(script, aiSettings, territoryPtr);
case 5:
N(func_80242858_BE6008)(script, aiSettings, territoryPtr);
N(UnkFunc8)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 12:
func_80049F7C(script, aiSettings, territoryPtr);
@ -1238,7 +957,7 @@ ApiStatus N(func_80243018_BE67C8)(ScriptInstance* script, s32 isInitialCall) {
N(func_80242A1C_BE61CC)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 22:
N(func_80242BBC_BE636C)(script, aiSettings, territoryPtr);
N(UnkFunc10)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 40:
N(func_80242D0C_BE64BC)(script, aiSettings, territoryPtr);
@ -1246,7 +965,7 @@ ApiStatus N(func_80243018_BE67C8)(ScriptInstance* script, s32 isInitialCall) {
return ApiStatus_BLOCK;
}
case 41:
N(func_80242DB8_BE6568)(script, aiSettings, territoryPtr);
N(UnkFunc9)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 50:
N(UnkNpcAIFunc19)(script, aiSettings, territoryPtr);

View File

@ -1026,85 +1026,11 @@ void N(func_80240000_BE7BE0)(ScriptInstance* script, NpcAISettings* aiSettings,
script->functionTemp[0].s = 1;
}
void N(func_80240158_BE7D38)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 x, z;
s32 var;
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if (func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
if (npc->turnAroundYawAdjustment == 0) {
if (npc->moveSpeed < 4.0) {
func_8003D660(npc, 0);
} else {
func_8003D660(npc, 1);
}
x = script->functionTemp[2].s[enemy->territory->patrol.points].x;
z = script->functionTemp[2].s[enemy->territory->patrol.points].z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, x, z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (dist2D(npc->pos.x, npc->pos.z, x, z) <= npc->moveSpeed) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->moveTime <= 0) ||
(aiSettings->waitTime <= 0) || (script->functionTemp[1].s == 0)) {
script->functionTemp[0].s = 4;
}
if (rand_int(10000) % 100 < aiSettings->moveTime) {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc13.inc.c"
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_802404C0_BE80A0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if ((aiSettings->unk_14 >= 0) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
func_800494C0(npc, 0x2F4, 0x200000);
if (!(enemy->npcSettings->unk_2A & 1)) {
script->functionTemp[0].s = 12;
} else {
script->functionTemp[0].s = 10;
}
} else if (npc->turnAroundYawAdjustment == 0) {
npc->duration--;
if (npc->duration == 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s != 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc14.inc.c"
void N(func_8024067C_BE825C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -1129,46 +1055,11 @@ void N(func_8024067C_BE825C)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc13.inc.c"
void N(func_8024094C_BE852C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_80240AD4_BE86B4)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_80240B94_BE8774)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1185,7 +1076,7 @@ ApiStatus N(func_80240B94_BE8774)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -1205,7 +1096,7 @@ ApiStatus N(func_80240B94_BE8774)(ScriptInstance* script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -1222,12 +1113,12 @@ ApiStatus N(func_80240B94_BE8774)(ScriptInstance* script, s32 isInitialCall) {
case 0:
N(func_80240000_BE7BE0)(script, aiSettings, territoryPtr);
case 1:
N(func_80240158_BE7D38)(script, aiSettings, territoryPtr);
N(UnkFunc13)(script, aiSettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_802404C0_BE80A0)(script, aiSettings, territoryPtr);
N(UnkFunc14)(script, aiSettings, territoryPtr);
break;
case 4:
N(func_8024067C_BE825C)(script, aiSettings, territoryPtr);
@ -1240,13 +1131,13 @@ ApiStatus N(func_80240B94_BE8774)(ScriptInstance* script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, aiSettings, territoryPtr);
case 13:
N(func_8024094C_BE852C)(script, aiSettings, territoryPtr);
N(UnkFunc15)(script, aiSettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, aiSettings, territoryPtr);
break;
case 15:
N(func_80240AD4_BE86B4)(script, aiSettings, territoryPtr);
N(UnkFunc16)(script, aiSettings, territoryPtr);
break;
case 99:
func_8004A73C(script);
@ -1322,7 +1213,7 @@ ApiStatus N(func_8024113C_BE8D1C)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 100.0f;
territory.unk_18 = 100.0f;
territory.unk_1C = 0;
if (isInitialCall) {

View File

@ -2,38 +2,9 @@
#include "sprite/npc/world_tubba.h"
#include "sprite/npc/tubbas_heart.h"
void* func_800729B0(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
void* func_800726B0(s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
// This is a duplicate, search for others
// TODO figure out what this actually is
// func_800729B0 invokes gEffectTable[131]'s entryPoint function
// that function is currently typed to return void
// Assume it returns an Effect* and unk_0C is this EffectInstanceData:
// s32 unk_0C; //? Maybe EffectInstanceData too ?
struct N(temp2) {
char unk_00[0x4];
f32 unk_04;
f32 unk_08;
f32 unk_0C;
f32 unk_10;
char unk_14[0x4];
s32 unk_18;
s32 unk_1C;
s32 unk_20;
f32 unk_24;
s32 unk_28;
s32 unk_2C;
s32 unk_30;
s8 unk_34;
char unk_38[0x38];
s32 unk_70;
s32 unk_74;
} N(temp2);
struct N(temp) {
char unk_00[0xC];
struct N(temp2)* unk_0C;
EffectInstanceDataThing* unk_0C;
} N(temp);
typedef struct {
@ -132,7 +103,7 @@ ApiStatus N(func_802401AC_BECF9C)(ScriptInstance* script, s32 isInitialCall) {
ptr->unk_46++;
if (ptr->unk_46 >= 60) {
ptr->unk_54 = func_800726B0(1, ptr->unk_18, ptr->unk_1C, ptr->unk_20, 1.0f, 0);
ptr->unk_54->unk_0C->unk_34 = ptr->unk_38;
*((s8*)ptr->unk_54->unk_0C + 0x34) = ptr->unk_38;
ptr->unk_54->unk_0C->unk_20 = 0;
ptr->unk_40 = create_shadow_type(0, ptr->unk_18, ptr->unk_28, ptr->unk_20);
ptr->unk_44 = 3;
@ -188,7 +159,7 @@ ApiStatus N(func_802401AC_BECF9C)(ScriptInstance* script, s32 isInitialCall) {
ptr->unk_2C = clamp_angle(ptr->unk_2C + ptr->unk_30);
case 2:
ptr->unk_54->unk_0C->unk_24 = ptr->unk_2C;
ptr->unk_54->unk_0C->unk_24.f = ptr->unk_2C;
ptr->unk_54->unk_0C->unk_04 = ptr->unk_18;
ptr->unk_54->unk_0C->unk_08 = ptr->unk_04;
ptr->unk_54->unk_0C->unk_0C = ptr->unk_20;
@ -217,7 +188,7 @@ ApiStatus N(func_802405FC_BED3EC)(ScriptInstance* script, s32 isInitialCall) {
ptr->unk_20 = get_float_variable(script, *args++);
ptr->unk_28 = get_float_variable(script, *args++);
ptr->unk_54 = func_800726B0(1, ptr->unk_18, ptr->unk_24, ptr->unk_20, 1.0f, 0);
ptr->unk_54->unk_0C->unk_34 = ptr->unk_38;
*((s8*)ptr->unk_54->unk_0C + 0x34) = ptr->unk_38;
ptr->unk_54->unk_0C->unk_20 = 0;
ptr->unk_40 = create_shadow_type(0, ptr->unk_18, ptr->unk_28, ptr->unk_20);
ptr->unk_4C = 0x10E;

View File

@ -1330,70 +1330,7 @@ INCLUDE_ASM(void, "world/area_arn/arn_07/events", arn_07_func_80240B00_BED8F0, S
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_802411E8_BEDFD8)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f24 = (f32)enemy->varTable[3] / 100.0;
f32 temp_f26 = temp_f24 + (f32)((f32)enemy->varTable[7] / 100.0);
s32 var;
if (npc->duration > 0) {
npc->duration--;
}
if (enemy->varTable[1] > 0) {
f32 temp_f22 = (f32)enemy->varTable[1] / 100.0;
f32 sin_degrees = sin_deg(enemy->varTable[2]);
s32 phi_v0;
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f24 + (sin_degrees * temp_f22);
} else {
npc->pos.y = temp_f26 + (sin_degrees * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
} else {
enemy->varTable[9]--;
}
if ((npc->turnAroundYawAdjustment == 0) && (npc->duration <= 0)) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = (rand_int(1000) % 11) + 5;
} else {
script->functionTemp[0].s = 0;
}
}
}
#include "world/common/UnkFunc4.inc.c"
#include "world/common/UnkNpcAIFunc2.inc.c"
@ -1411,121 +1348,9 @@ void N(func_802415A4_BEE394)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc3.inc.c"
void N(func_802417A8_BEE598)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f0_2;
f32 temp_f20;
f32 temp_f22;
f32 temp_f2;
s32 phi_v0;
f32 phi_f20;
f32 a = enemy->varTable[3];
f32 b = enemy->varTable[7];
#include "world/common/UnkFunc6.inc.c"
npc->jumpVelocity += npc->jumpScale;
temp_f20 = a / 100.0;
temp_f22 = b / 100.0;
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->jumpVelocity >= 0.0) {
npc->pos.y += npc->jumpVelocity;
npc->currentAnim = enemy->animList[9];
enemy->unk_07 = 0;
if (!(npc->flags & 8)) {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
} else {
phi_v0 = FALSE;
}
if (phi_v0) {
temp_f2 = posY + temp_f20;
if (temp_f2 <= npc->pos.y) {
npc->pos.y = temp_f2;
script->functionTemp[0].s = 0;
}
} else if (npc->pos.y >= npc->moveToPos.y) {
script->functionTemp[0].s = 0;
}
} else if (npc->jumpVelocity < 0.0) {
npc->duration++;
if (npc->duration >= aiSettings->unk_20) {
npc->duration = 0;
phi_f20 = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
temp_f0_2 = get_clamped_angle_diff(npc->yaw, phi_f20);
if (aiSettings->unk_1C.s < fabsf(temp_f0_2)) {
phi_f20 = npc->yaw;
if (temp_f0_2 < 0.0f) {
phi_f20 += -aiSettings->unk_1C.s;
} else {
phi_f20 += aiSettings->unk_1C.s;
}
}
npc->yaw = clamp_angle(phi_f20);
}
if (npc->flags & 8) {
if (npc->pos.y + npc->jumpVelocity < temp_f22) {
npc->pos.y = temp_f22;
npc->jumpVelocity = 0.0f;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
}
posX = npc->pos.x;
posY = npc->pos.y + npc->collisionHeight;
posZ = npc->pos.z;
posW = (fabsf(npc->jumpVelocity) + npc->collisionHeight) + 10.0;
if (func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW)) {
if (posW <= (npc->collisionHeight + fabsf(npc->jumpVelocity))) {
npc->jumpVelocity = 0.0f;
npc->pos.y = posY;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
} else if (fabsf(npc->jumpVelocity) < ((npc->pos.y - temp_f22) + npc->collisionHeight)) {
npc->pos.y = npc->pos.y + npc->jumpVelocity;
return;
}
npc->jumpVelocity = 0.0f;
}
}
void N(func_80241B38_BEE928)(Npc *npc, Enemy *enemy, ScriptInstance *script, NpcAISettings *aiSettings) {
f32 posX, posY, posZ, posW;
s32 temp_a1;
s32 temp_v1;
s32 phi_v0;
script->functionTemp[0].s = 0;
npc->duration = 0;
temp_v1 = npc->flags & ~0x200;
npc->flags = (npc->flags & ~0x200) | 0x800;
if (enemy->territory->wander.isFlying) {
npc->flags = temp_v1 | 0x808;
} else {
npc->flags = npc->flags & ~8;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
enemy->varTable[2] = 0;
enemy->varTable[9] = 0;
enemy->varTable[3] = ((posW * 100.0) + 0.5);
enemy->varTable[7] = ((posY * 100.0) + 0.5);
script->functionTemp[1].s = aiSettings->unk_14;
enemy->unk_B0 |= 0x10;
}
#include "world/common/UnkFunc5.inc.c"
ApiStatus N(func_80241C5C_BEEA4C)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1541,11 +1366,11 @@ ApiStatus N(func_80241C5C_BEEA4C)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_80241B38_BEE928)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -1566,7 +1391,7 @@ ApiStatus N(func_80241C5C_BEEA4C)(ScriptInstance* script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_802411E8_BEDFD8)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -1580,7 +1405,7 @@ ApiStatus N(func_80241C5C_BEEA4C)(ScriptInstance* script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
case 14:
N(func_802417A8_BEE598)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
return ApiStatus_BLOCK;
}
@ -1596,4 +1421,3 @@ ApiStatus PostChapter3StatUpdate(ScriptInstance* script, s32 isInitialCall) {
sync_status_menu();
return ApiStatus_DONE2;
}

View File

@ -657,70 +657,7 @@ INCLUDE_ASM(void, "world/area_dgb/dgb_01/BFD9A0", dgb_01_func_802402D0_BFDB50, S
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_802409B8_BFE238)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f24 = (f32)enemy->varTable[3] / 100.0;
f32 temp_f26 = temp_f24 + (f32)((f32)enemy->varTable[7] / 100.0);
s32 var;
if (npc->duration > 0) {
npc->duration--;
}
if (enemy->varTable[1] > 0) {
f32 temp_f22 = (f32)enemy->varTable[1] / 100.0;
f32 sin_degrees = sin_deg(enemy->varTable[2]);
s32 phi_v0;
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f24 + (sin_degrees * temp_f22);
} else {
npc->pos.y = temp_f26 + (sin_degrees * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
} else {
enemy->varTable[9]--;
}
if ((npc->turnAroundYawAdjustment == 0) && (npc->duration <= 0)) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = (rand_int(1000) % 11) + 5;
} else {
script->functionTemp[0].s = 0;
}
}
}
#include "world/common/UnkFunc4.inc.c"
#include "world/common/UnkNpcAIFunc2.inc.c"
@ -738,121 +675,9 @@ void N(func_80240D74_BFE5F4)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc3.inc.c"
void N(func_80240F78_BFE7F8)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f0_2;
f32 temp_f20;
f32 temp_f22;
f32 temp_f2;
s32 phi_v0;
f32 phi_f20;
f32 a = enemy->varTable[3];
f32 b = enemy->varTable[7];
#include "world/common/UnkFunc6.inc.c"
npc->jumpVelocity += npc->jumpScale;
temp_f20 = a / 100.0;
temp_f22 = b / 100.0;
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->jumpVelocity >= 0.0) {
npc->pos.y += npc->jumpVelocity;
npc->currentAnim = enemy->animList[9];
enemy->unk_07 = 0;
if (!(npc->flags & 8)) {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
} else {
phi_v0 = FALSE;
}
if (phi_v0) {
temp_f2 = posY + temp_f20;
if (temp_f2 <= npc->pos.y) {
npc->pos.y = temp_f2;
script->functionTemp[0].s = 0;
}
} else if (npc->pos.y >= npc->moveToPos.y) {
script->functionTemp[0].s = 0;
}
} else if (npc->jumpVelocity < 0.0) {
npc->duration++;
if (npc->duration >= aiSettings->unk_20) {
npc->duration = 0;
phi_f20 = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
temp_f0_2 = get_clamped_angle_diff(npc->yaw, phi_f20);
if (aiSettings->unk_1C.s < fabsf(temp_f0_2)) {
phi_f20 = npc->yaw;
if (temp_f0_2 < 0.0f) {
phi_f20 += -aiSettings->unk_1C.s;
} else {
phi_f20 += aiSettings->unk_1C.s;
}
}
npc->yaw = clamp_angle(phi_f20);
}
if (npc->flags & 8) {
if (npc->pos.y + npc->jumpVelocity < temp_f22) {
npc->pos.y = temp_f22;
npc->jumpVelocity = 0.0f;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
}
posX = npc->pos.x;
posY = npc->pos.y + npc->collisionHeight;
posZ = npc->pos.z;
posW = (fabsf(npc->jumpVelocity) + npc->collisionHeight) + 10.0;
if (func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW)) {
if (posW <= (npc->collisionHeight + fabsf(npc->jumpVelocity))) {
npc->jumpVelocity = 0.0f;
npc->pos.y = posY;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
} else if (fabsf(npc->jumpVelocity) < ((npc->pos.y - temp_f22) + npc->collisionHeight)) {
npc->pos.y = npc->pos.y + npc->jumpVelocity;
return;
}
npc->jumpVelocity = 0.0f;
}
}
void N(func_80241308_BFEB88)(Npc *npc, Enemy *enemy, ScriptInstance *script, NpcAISettings *aiSettings) {
f32 posX, posY, posZ, posW;
s32 temp_a1;
s32 temp_v1;
s32 phi_v0;
script->functionTemp[0].s = 0;
npc->duration = 0;
temp_v1 = npc->flags & ~0x200;
npc->flags = (npc->flags & ~0x200) | 0x800;
if (enemy->territory->wander.isFlying) {
npc->flags = temp_v1 | 0x808;
} else {
npc->flags = npc->flags & ~8;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
enemy->varTable[2] = 0;
enemy->varTable[9] = 0;
enemy->varTable[3] = ((posW * 100.0) + 0.5);
enemy->varTable[7] = ((posY * 100.0) + 0.5);
script->functionTemp[1].s = aiSettings->unk_14;
enemy->unk_B0 |= 0x10;
}
#include "world/common/UnkFunc5.inc.c"
ApiStatus N(func_8024142C_BFECAC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -868,11 +693,11 @@ ApiStatus N(func_8024142C_BFECAC)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_80241308_BFEB88)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -893,7 +718,7 @@ ApiStatus N(func_8024142C_BFECAC)(ScriptInstance *script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_802409B8_BFE238)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
break;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -907,7 +732,7 @@ ApiStatus N(func_8024142C_BFECAC)(ScriptInstance *script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
break;
case 14:
N(func_80240F78_BFE7F8)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
break;
}
@ -922,7 +747,7 @@ void N(func_80241618_BFEE98)(ScriptInstance *script, NpcAISettings *aiSettings,
npc->duration--;
if (npc->duration <= 0) {
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->duration = aiSettings->unk_20 / 2 + rand_int(aiSettings->unk_20 / 2 + 1);
npc->currentAnim = enemy->animList[8];
npc->moveSpeed = aiSettings->chaseSpeed;
@ -996,13 +821,11 @@ void N(func_80241954_BFF1D4)(ScriptInstance *script, NpcAISettings *aiSettings,
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
enemy->varTable[0] &= ~0x100;
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
script->functionTemp[0].s = 16;
} else {
PlayerStatus** playerStatus = &gPlayerStatusPtr;
npc->pos.x = (*playerStatus)->position.x;
npc->pos.z = (*playerStatus)->position.z + 2.0f;
npc->pos.x = gPlayerStatusPtr->position.x;
npc->pos.z = gPlayerStatusPtr->position.z + 2.0f;
npc->rotation.y += 25.0f;
if (npc->rotation.y > 360.0) {
npc->rotation.y -= 360.0;
@ -1010,16 +833,16 @@ void N(func_80241954_BFF1D4)(ScriptInstance *script, NpcAISettings *aiSettings,
temp_f8_2 = 255.0f - (cosine((s32)npc->rotation.y % 180) * 56.0f);
func_802DE894(npc->spriteInstanceID, 6, temp_f8_2, temp_f8_2, temp_f8_2, 255, 0);
posX = (*playerStatus)->position.x;
posY = (*playerStatus)->position.y;
posZ = (*playerStatus)->position.z;
posX = gPlayerStatusPtr->position.x;
posY = gPlayerStatusPtr->position.y;
posZ = gPlayerStatusPtr->position.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
if (fabsf(npc->pos.y - posY) > 24.0) {
npc->pos.y -= 1.8;
} else {
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
if (D_8010EBB0.unk_03 != 9) {
disable_player_input();
func_800EF628();
@ -1102,7 +925,7 @@ void N(func_80241EF0_BFF770)(ScriptInstance *script, NpcAISettings *aiSettings,
Npc* npc = get_npc_unsafe(enemy->npcID);
enemy->varTable[0] &= ~0x100;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->moveSpeed = 2.0 * aiSettings->moveSpeed;
enemy->varTable[2] = 0;
enemy->varTable[4] = npc->pos.y * 100.0;
@ -1167,12 +990,12 @@ ApiStatus N(func_802422B0_BFFB30)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 125.0f;
territory.unk_18 = 125.0f;
territory.unk_1C = 0;
if (isInitialCall) {
script->functionTemp[0].s = 0;
N(func_80241308_BFEB88)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
switch (script->functionTemp[0].s) {
@ -1188,7 +1011,7 @@ ApiStatus N(func_802422B0_BFFB30)(ScriptInstance *script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_802409B8_BFE238)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
if (script->functionTemp[0].s == 12) {
npc->duration = 6;
}
@ -1465,85 +1288,11 @@ ApiStatus N(func_8024252C_BFFDAC)(ScriptInstance* script, NpcAISettings* aiSetti
return 1;
}
void N(func_80242684_BFFF04)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 x, z;
s32 var;
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if (func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
if (npc->turnAroundYawAdjustment == 0) {
if (npc->moveSpeed < 4.0) {
func_8003D660(npc, 0);
} else {
func_8003D660(npc, 1);
}
x = script->functionTemp[2].s[enemy->territory->patrol.points].x;
z = script->functionTemp[2].s[enemy->territory->patrol.points].z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, x, z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (dist2D(npc->pos.x, npc->pos.z, x, z) <= npc->moveSpeed) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->moveTime <= 0) ||
(aiSettings->waitTime <= 0) || (script->functionTemp[1].s == 0)) {
script->functionTemp[0].s = 4;
}
if (rand_int(10000) % 100 < aiSettings->moveTime) {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc13.inc.c"
#include "world/common/UnkNpcAIFunc1_copy.inc.c"
void N(func_802429EC_C0026C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if ((aiSettings->unk_14 >= 0) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
func_800494C0(npc, 0x2F4, 0x200000);
if (!(enemy->npcSettings->unk_2A & 1)) {
script->functionTemp[0].s = 12;
} else {
script->functionTemp[0].s = 10;
}
} else if (npc->turnAroundYawAdjustment == 0) {
npc->duration--;
if (npc->duration == 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s != 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc14.inc.c"
ApiStatus N(func_80242BA8_C00428)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -1569,46 +1318,11 @@ ApiStatus N(func_80242BA8_C00428)(ScriptInstance* script, NpcAISettings* aiSetti
#include "world/common/UnkNpcAIFunc13.inc.c"
ApiStatus N(func_80242E78_C006F8)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_80243000_C00880)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_802430C0_C00940)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1625,7 +1339,7 @@ ApiStatus N(func_802430C0_C00940)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -1645,7 +1359,7 @@ ApiStatus N(func_802430C0_C00940)(ScriptInstance *script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -1662,12 +1376,12 @@ ApiStatus N(func_802430C0_C00940)(ScriptInstance *script, s32 isInitialCall) {
case 0:
N(func_8024252C_BFFDAC)(script, aiSettings, territoryPtr);
case 1:
N(func_80242684_BFFF04)(script, aiSettings, territoryPtr);
N(UnkFunc13)(script, aiSettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1_copy)(script, aiSettings, territoryPtr);
case 3:
N(func_802429EC_C0026C)(script, aiSettings, territoryPtr);
N(UnkFunc14)(script, aiSettings, territoryPtr);
break;
case 4:
N(func_80242BA8_C00428)(script, aiSettings, territoryPtr);
@ -1680,13 +1394,13 @@ ApiStatus N(func_802430C0_C00940)(ScriptInstance *script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, aiSettings, territoryPtr);
case 13:
N(func_80242E78_C006F8)(script, aiSettings, territoryPtr);
N(UnkFunc15)(script, aiSettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, aiSettings, territoryPtr);
break;
case 15:
N(func_80243000_C00880)(script, aiSettings, territoryPtr);
N(UnkFunc16)(script, aiSettings, territoryPtr);
break;
case 99:
func_8004A73C(script);

View File

@ -258,7 +258,7 @@ Script N(npcAI_80241D34) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(update_starpoints_display_C2EF5C)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_80241DDC) = {
@ -424,7 +424,7 @@ NpcGroupList N(npcGroupList_802425C8) = {
s32 N(func_80240208_C2EDA8)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -458,77 +458,7 @@ s32 N(func_80240208_C2EDA8)(ScriptInstance *script) {
return ret;
}
ApiStatus N(update_starpoints_display_C2EF5C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
ApiStatus N(func_8024061C_C2F1BC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -544,7 +474,7 @@ ApiStatus N(func_8024061C_C2F1BC)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -806,7 +736,7 @@ ApiStatus N(func_802410D4_C2FC74)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {

View File

@ -5,7 +5,7 @@
ApiStatus N(func_8024061C_C2F1BC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802410D4_C2FC74)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(update_starpoints_display_C2EF5C)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance *script, s32 isInitialCall);
NpcGroupList N(npcGroupList_802425C8);
Script N(main);

View File

@ -1,52 +1,8 @@
#include "dgb_03.h"
ApiStatus N(func_80240000_C314E0)(ScriptInstance *script, s32 isInitialCall) {
s32 var = get_variable(script, *script->ptrReadPos);
PlayerStatus* playerStatus = &gPlayerStatus;
CollisionStatus* collisionStatus = &gCollisionStatus;
#include "world/common/UnkFunc11.inc.c"
if (((collisionStatus->pushingAgainstWall != var) && (playerStatus->actionState == 20)) ||
playerStatus->enableCollisionOverlapsCheck || playerStatus->statusMenuCounterinputEnabledCounter) {
set_action_state(0);
script->varTable[0] = 0;
return ApiStatus_DONE2;
}
if (collisionStatus->pushingAgainstWall != var) {
script->varTable[0] = 0;
} else if ((playerStatus->actionState != 20) && (playerStatus->actionState != 1) &&
(playerStatus->actionState != 2)) {
script->varTable[0] = 0;
} else if (playerStatus->animFlags & 1) {
script->varTable[0] = 0;
} else {
script->varTable[0] = 1;
}
return ApiStatus_DONE2;
}
ApiStatus N(func_802400BC_C3159C)(ScriptInstance *script, s32 isInitialCall) {
PlayerStatus* playerStatus = &gPlayerStatus;
f32 posX, posY, posZ, posW;
if (script->varTable[5] == 0) {
playerStatus->position.x = script->varTable[0];
} else {
playerStatus->position.z = script->varTable[0];
}
posX = playerStatus->position.x;
posY = playerStatus->position.y + 10.0f;
posZ = playerStatus->position.z;
posW = 40.0f;
func_800DCB7C(0, &posX, &posY, &posZ, &posW);
playerStatus->position.x = posX;
playerStatus->position.y = posY;
playerStatus->position.z = posZ;
return ApiStatus_DONE2;
}
#include "world/common/UnkFunc12.inc.c"
#include "world/common/SetEntityFlags100000.inc.c"

View File

@ -215,7 +215,7 @@ Script N(802430E0) = SCRIPT({
SI_VAR(8) = -1;
return;
}
N(func_80240000_C314E0)(SI_VAR(9));
N(UnkFunc11)(SI_VAR(9));
if (SI_VAR(0) == 0) {
SI_VAR(8) = -1;
return;
@ -249,7 +249,7 @@ Script N(802430E0) = SCRIPT({
loop {
SetPlayerActionState(20);
UpdateLerp();
N(func_802400BC_C3159C)();
N(UnkFunc12)();
sleep 1;
if (SI_VAR(1) == 0) {
break loop;
@ -507,7 +507,7 @@ Script N(npcAI_80243CC0) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(func_8024060C_C31AEC)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_80243D68) = {
@ -749,7 +749,7 @@ NpcGroupList N(npcGroupList_80244988) = {
s32 N(func_80240458_C31938)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -783,77 +783,7 @@ s32 N(func_80240458_C31938)(ScriptInstance *script) {
return ret;
}
ApiStatus N(func_8024060C_C31AEC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
ApiStatus N(func_8024086C_C31D4C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -869,7 +799,7 @@ ApiStatus N(func_8024086C_C31D4C)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -975,85 +905,11 @@ ApiStatus N(func_80240B20_C32000)(ScriptInstance* script, NpcAISettings* aiSetti
return 1;
}
void N(func_80240C78_C32158)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 x, z;
s32 var;
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if (func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
if (npc->turnAroundYawAdjustment == 0) {
if (npc->moveSpeed < 4.0) {
func_8003D660(npc, 0);
} else {
func_8003D660(npc, 1);
}
x = script->functionTemp[2].s[enemy->territory->patrol.points].x;
z = script->functionTemp[2].s[enemy->territory->patrol.points].z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, x, z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (dist2D(npc->pos.x, npc->pos.z, x, z) <= npc->moveSpeed) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->moveTime <= 0) ||
(aiSettings->waitTime <= 0) || (script->functionTemp[1].s == 0)) {
script->functionTemp[0].s = 4;
}
if (rand_int(10000) % 100 < aiSettings->moveTime) {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc13.inc.c"
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_80240FE0_C324C0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if ((aiSettings->unk_14 >= 0) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
func_800494C0(npc, 0x2F4, 0x200000);
if (!(enemy->npcSettings->unk_2A & 1)) {
script->functionTemp[0].s = 12;
} else {
script->functionTemp[0].s = 10;
}
} else if (npc->turnAroundYawAdjustment == 0) {
npc->duration--;
if (npc->duration == 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s != 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc14.inc.c"
ApiStatus N(func_8024119C_C3267C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -1079,46 +935,11 @@ ApiStatus N(func_8024119C_C3267C)(ScriptInstance* script, NpcAISettings* aiSetti
#include "world/common/UnkNpcAIFunc13.inc.c"
ApiStatus N(func_8024146C_C3294C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_802415F4_C32AD4)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_802416B4_C32B94)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1135,7 +956,7 @@ ApiStatus N(func_802416B4_C32B94)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -1155,7 +976,7 @@ ApiStatus N(func_802416B4_C32B94)(ScriptInstance *script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -1172,12 +993,12 @@ ApiStatus N(func_802416B4_C32B94)(ScriptInstance *script, s32 isInitialCall) {
case 0:
N(func_80240B20_C32000)(script, npcAISettings, territoryPtr);
case 1:
N(func_80240C78_C32158)(script, npcAISettings, territoryPtr);
N(UnkFunc13)(script, npcAISettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, npcAISettings, territoryPtr);
case 3:
N(func_80240FE0_C324C0)(script, npcAISettings, territoryPtr);
N(UnkFunc14)(script, npcAISettings, territoryPtr);
break;
case 4:
N(func_8024119C_C3267C)(script, npcAISettings, territoryPtr);
@ -1190,13 +1011,13 @@ ApiStatus N(func_802416B4_C32B94)(ScriptInstance *script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, npcAISettings, territoryPtr);
case 13:
N(func_8024146C_C3294C)(script, npcAISettings, territoryPtr);
N(UnkFunc15)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, npcAISettings, territoryPtr);
break;
case 15:
N(func_802415F4_C32AD4)(script, npcAISettings, territoryPtr);
N(UnkFunc16)(script, npcAISettings, territoryPtr);
break;
case 99:
func_8004A73C(script);
@ -1219,7 +1040,7 @@ ApiStatus N(func_802419B0_C32E90)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -1248,12 +1069,12 @@ ApiStatus N(func_802419B0_C32E90)(ScriptInstance *script, s32 isInitialCall) {
case 0:
N(func_80240B20_C32000)(script, npcAISettings, territoryPtr);
case 1:
N(func_80240C78_C32158)(script, npcAISettings, territoryPtr);
N(UnkFunc13)(script, npcAISettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, npcAISettings, territoryPtr);
case 3:
N(func_80240FE0_C324C0)(script, npcAISettings, territoryPtr);
N(UnkFunc14)(script, npcAISettings, territoryPtr);
break;
case 4:
N(func_8024119C_C3267C)(script, npcAISettings, territoryPtr);
@ -1266,7 +1087,7 @@ ApiStatus N(func_802419B0_C32E90)(ScriptInstance *script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, npcAISettings, territoryPtr);
case 13:
N(func_8024146C_C3294C)(script, npcAISettings, territoryPtr);
N(UnkFunc15)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, npcAISettings, territoryPtr);
@ -1484,7 +1305,7 @@ ApiStatus N(func_80242480_C33960)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {

View File

@ -3,9 +3,9 @@
#define NAMESPACE dgb_03
ApiStatus N(func_80240000_C314E0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802400BC_C3159C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024060C_C31AEC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc11)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc12)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024086C_C31D4C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802419B0_C32E90)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242480_C33960)(ScriptInstance* script, s32 isInitialCall);

View File

@ -267,10 +267,10 @@ s16 N(D_80243D38_C3A268)[] = {
};
s32 N(D_80243D48_C3A278)[8][2] = {
{0x001D00E0, 0x001D00E1 }, {0x001D00E2, 0x001D00E3 },
{0x001D00E4, 0x001D00E5 }, {0x001D00E6, 0x001D00E7 },
{0x001D00E8, 0x001D00E9 }, {0x001D00EA, 0x001D00EB },
{0x001D00EC, 0x001D00ED }, {0x001D00EE, 0x001D00EF }
{ 0x001D00E0, 0x001D00E1 }, { 0x001D00E2, 0x001D00E3 },
{ 0x001D00E4, 0x001D00E5 }, { 0x001D00E6, 0x001D00E7 },
{ 0x001D00E8, 0x001D00E9 }, { 0x001D00EA, 0x001D00EB },
{ 0x001D00EC, 0x001D00ED }, { 0x001D00EE, 0x001D00EF }
};
f32 N(D_80243D88_C3A2B8)[] = {
@ -280,7 +280,7 @@ f32 N(D_80243D88_C3A2B8)[] = {
Script N(80243D94) = SCRIPT({
sleep 10;
PlaySound(0x212D);
N(func_80242914_C38E44)(SI_MAP_VAR(0));
N(UnkFunc21)(SI_MAP_VAR(0));
sleep 85;
spawn {
PlaySound(0x212E);
@ -295,7 +295,7 @@ Script N(80243D94) = SCRIPT({
}
spawn {
sleep 47;
N(func_80242978_C38EA8)();
N(UnkFunc22)();
N(UnkPartnerPosFunc)();
sleep 5;
N(UnkPartnerPosFunc2)();
@ -315,7 +315,7 @@ Script N(80243EF8) = SCRIPT({
if (SI_VAR(0) == 1) {
return;
}
N(func_802430D8_C39608)();
N(UnkFunc24)();
if (SI_VAR(0) == 1) {
return;
}
@ -324,17 +324,17 @@ Script N(80243EF8) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePartnerAI(0);
SetNpcFlagBits(NPC_PARTNER, ((NPC_FLAG_100)), TRUE);
N(func_80242850_C38D80)(SI_MAP_VAR(0), SI_VAR(9));
N(UnkFunc20)(SI_MAP_VAR(0), SI_VAR(9));
FindKeyItem(15, SI_VAR(12));
N(func_802424F0_C38A20)();
N(UnkFunc38)();
if (SI_VAR(0) == -1) {
ShowMessageAtScreenPos(MESSAGE_ID(0x1D, 0x00DC), 160, 40);
sleep 10;
N(func_802428E0_C38E10)(SI_VAR(9));
N(UnkFunc39)(SI_VAR(9));
DisablePlayerInput(FALSE);
EnablePartnerAI();
func_802D585C(0, 2097152);
N(func_802423EC_C3891C)();
N(UnkFunc17)();
return;
}
if (SI_SAVE_FLAG(438) == 0) {
@ -345,11 +345,11 @@ Script N(80243EF8) = SCRIPT({
}
N(func_8024259C_C38ACC)();
if (SI_VAR(0) == -1) {
N(func_802428E0_C38E10)(SI_VAR(9));
N(UnkFunc39)(SI_VAR(9));
DisablePlayerInput(FALSE);
EnablePartnerAI();
func_802D585C(0, 2097152);
N(func_802423EC_C3891C)();
N(UnkFunc17)();
return;
}
SI_VAR(10) = SI_VAR(0);
@ -366,18 +366,18 @@ Script N(80243EF8) = SCRIPT({
ShowChoice(1966093);
CloseMessage();
if (SI_VAR(0) != 0) {
N(func_802428E0_C38E10)(SI_VAR(9));
N(UnkFunc39)(SI_VAR(9));
DisablePlayerInput(FALSE);
EnablePartnerAI();
func_802D585C(0, 2097152);
N(func_802423EC_C3891C)();
N(UnkFunc17)();
return;
}
await N(80243D94);
N(func_80242438_C38968)(SI_VAR(11), SI_VAR(13));
N(UnkFunc18)(SI_VAR(11), SI_VAR(13));
SI_SAVE_FLAG(1046) = 1;
N(func_802428E0_C38E10)(SI_VAR(9));
N(func_80242818_C38D48)();
N(UnkFunc39)(SI_VAR(9));
N(UnkFunc19)();
if (SI_VAR(13) == 1) {
ShowMessageAtScreenPos(MESSAGE_ID(0x1D, 0x00DD), 160, 40);
} else {
@ -386,7 +386,7 @@ Script N(80243EF8) = SCRIPT({
DisablePlayerInput(FALSE);
EnablePartnerAI();
func_802D585C(0, 2097152);
N(func_802423EC_C3891C)();
N(UnkFunc17)();
});
Script N(makeEntities) = SCRIPT({
@ -566,70 +566,7 @@ INCLUDE_ASM(void, "world/area_dgb/dgb_04/C36530", dgb_04_func_802401B0_C366E0, S
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_80240898_C36DC8)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f24 = (f32)enemy->varTable[3] / 100.0;
f32 temp_f26 = temp_f24 + (f32)((f32)enemy->varTable[7] / 100.0);
s32 var;
if (npc->duration > 0) {
npc->duration--;
}
if (enemy->varTable[1] > 0) {
f32 temp_f22 = (f32)enemy->varTable[1] / 100.0;
f32 sin_degrees = sin_deg(enemy->varTable[2]);
s32 phi_v0;
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f24 + (sin_degrees * temp_f22);
} else {
npc->pos.y = temp_f26 + (sin_degrees * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
} else {
enemy->varTable[9]--;
}
if ((npc->turnAroundYawAdjustment == 0) && (npc->duration <= 0)) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = (rand_int(1000) % 11) + 5;
} else {
script->functionTemp[0].s = 0;
}
}
}
#include "world/common/UnkFunc4.inc.c"
#include "world/common/UnkNpcAIFunc2.inc.c"
@ -647,121 +584,9 @@ void N(func_80240C54_C37184)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc3.inc.c"
void N(func_80240E58_C37388)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f0_2;
f32 temp_f20;
f32 temp_f22;
f32 temp_f2;
s32 phi_v0;
f32 phi_f20;
f32 a = enemy->varTable[3];
f32 b = enemy->varTable[7];
#include "world/common/UnkFunc6.inc.c"
npc->jumpVelocity += npc->jumpScale;
temp_f20 = a / 100.0;
temp_f22 = b / 100.0;
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->jumpVelocity >= 0.0) {
npc->pos.y += npc->jumpVelocity;
npc->currentAnim = enemy->animList[9];
enemy->unk_07 = 0;
if (!(npc->flags & 8)) {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
} else {
phi_v0 = FALSE;
}
if (phi_v0) {
temp_f2 = posY + temp_f20;
if (temp_f2 <= npc->pos.y) {
npc->pos.y = temp_f2;
script->functionTemp[0].s = 0;
}
} else if (npc->pos.y >= npc->moveToPos.y) {
script->functionTemp[0].s = 0;
}
} else if (npc->jumpVelocity < 0.0) {
npc->duration++;
if (npc->duration >= aiSettings->unk_20) {
npc->duration = 0;
phi_f20 = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
temp_f0_2 = get_clamped_angle_diff(npc->yaw, phi_f20);
if (aiSettings->unk_1C.s < fabsf(temp_f0_2)) {
phi_f20 = npc->yaw;
if (temp_f0_2 < 0.0f) {
phi_f20 += -aiSettings->unk_1C.s;
} else {
phi_f20 += aiSettings->unk_1C.s;
}
}
npc->yaw = clamp_angle(phi_f20);
}
if (npc->flags & 8) {
if (npc->pos.y + npc->jumpVelocity < temp_f22) {
npc->pos.y = temp_f22;
npc->jumpVelocity = 0.0f;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
}
posX = npc->pos.x;
posY = npc->pos.y + npc->collisionHeight;
posZ = npc->pos.z;
posW = (fabsf(npc->jumpVelocity) + npc->collisionHeight) + 10.0;
if (func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW)) {
if (posW <= (npc->collisionHeight + fabsf(npc->jumpVelocity))) {
npc->jumpVelocity = 0.0f;
npc->pos.y = posY;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
} else if (fabsf(npc->jumpVelocity) < ((npc->pos.y - temp_f22) + npc->collisionHeight)) {
npc->pos.y = npc->pos.y + npc->jumpVelocity;
return;
}
npc->jumpVelocity = 0.0f;
}
}
void N(func_802411E8_C37718)(Npc *npc, Enemy *enemy, ScriptInstance *script, NpcAISettings *aiSettings) {
f32 posX, posY, posZ, posW;
s32 temp_a1;
s32 temp_v1;
s32 phi_v0;
script->functionTemp[0].s = 0;
npc->duration = 0;
temp_v1 = npc->flags & ~0x200;
npc->flags = (npc->flags & ~0x200) | 0x800;
if (enemy->territory->wander.isFlying) {
npc->flags = temp_v1 | 0x808;
} else {
npc->flags = npc->flags & ~8;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
enemy->varTable[2] = 0;
enemy->varTable[9] = 0;
enemy->varTable[3] = ((posW * 100.0) + 0.5);
enemy->varTable[7] = ((posY * 100.0) + 0.5);
script->functionTemp[1].s = aiSettings->unk_14;
enemy->unk_B0 |= 0x10;
}
#include "world/common/UnkFunc5.inc.c"
ApiStatus N(func_8024130C_C3783C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -777,11 +602,11 @@ ApiStatus N(func_8024130C_C3783C)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_802411E8_C37718)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -802,7 +627,7 @@ ApiStatus N(func_8024130C_C3783C)(ScriptInstance *script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_80240898_C36DC8)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
break;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -816,7 +641,7 @@ ApiStatus N(func_8024130C_C3783C)(ScriptInstance *script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
break;
case 14:
N(func_80240E58_C37388)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
}
return ApiStatus_BLOCK;
@ -830,7 +655,7 @@ void N(func_802414F8_C37A28)(ScriptInstance *script, NpcAISettings *aiSettings,
npc->duration--;
if (npc->duration <= 0) {
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->duration = aiSettings->unk_20 / 2 + rand_int(aiSettings->unk_20 / 2 + 1);
npc->currentAnim = enemy->animList[8];
npc->moveSpeed = aiSettings->chaseSpeed;
@ -895,13 +720,11 @@ void N(func_802417F8_C37D28)(ScriptInstance *script, NpcAISettings *aiSettings,
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
enemy->varTable[0] &= ~0x100;
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
script->functionTemp[0].s = 16;
} else {
PlayerStatus** playerStatus = &gPlayerStatusPtr;
npc->pos.x = (*playerStatus)->position.x;
npc->pos.z = (*playerStatus)->position.z + 2.0f;
npc->pos.x = gPlayerStatusPtr->position.x;
npc->pos.z = gPlayerStatusPtr->position.z + 2.0f;
npc->rotation.y += 25.0f;
if (npc->rotation.y > 360.0) {
npc->rotation.y -= 360.0;
@ -909,16 +732,16 @@ void N(func_802417F8_C37D28)(ScriptInstance *script, NpcAISettings *aiSettings,
temp_f8_2 = 255.0f - (cosine((s32)npc->rotation.y % 180) * 56.0f);
func_802DE894(npc->spriteInstanceID, 6, temp_f8_2, temp_f8_2, temp_f8_2, 255, 0);
posX = (*playerStatus)->position.x;
posY = (*playerStatus)->position.y;
posZ = (*playerStatus)->position.z;
posX = gPlayerStatusPtr->position.x;
posY = gPlayerStatusPtr->position.y;
posZ = gPlayerStatusPtr->position.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
if (fabsf(npc->pos.y - posY) > 24.0) {
npc->pos.y -= 1.8;
} else {
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
if (D_8010EBB0.unk_03 != 9) {
disable_player_input();
func_800EF628();
@ -1001,7 +824,7 @@ void N(func_80241D94_C382C4)(ScriptInstance *script, NpcAISettings *aiSettings,
Npc* npc = get_npc_unsafe(enemy->npcID);
enemy->varTable[0] &= ~0x100;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->moveSpeed = 2.0 * aiSettings->moveSpeed;
enemy->varTable[2] = 0;
enemy->varTable[4] = npc->pos.y * 100.0;
@ -1066,12 +889,12 @@ ApiStatus N(func_80242154_C38684)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 125.0f;
territory.unk_18 = 125.0f;
territory.unk_1C = 0;
if (isInitialCall) {
script->functionTemp[0].s = 0;
N(func_802411E8_C37718)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
switch (script->functionTemp[0].s) {
@ -1087,7 +910,7 @@ ApiStatus N(func_80242154_C38684)(ScriptInstance *script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_80240898_C36DC8)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
if (script->functionTemp[0].s == 12) {
npc->duration = 6;
}
@ -1130,58 +953,14 @@ ApiStatus N(func_80242154_C38684)(ScriptInstance *script, s32 isInitialCall) {
#include "world/common/SetOverrideFlags_40.inc.c"
ApiStatus N(func_802423EC_C3891C)(ScriptInstance *script, s32 isInitialCall) {
gOverrideFlags &= ~0x40;
return ApiStatus_DONE2;
}
#include "world/common/UnkFunc17.inc.c"
ApiStatus N(func_8024240C_C3893C)(ScriptInstance *script, s32 isInitialCall) {
func_802E5690(get_variable(script, *script->ptrReadPos));
return ApiStatus_DONE2;
}
ApiStatus N(func_80242438_C38968)(ScriptInstance *script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
Bytecode* args = script->ptrReadPos;
s32 partnerIdx = get_variable(script, *args++);
s32 si_var = *args++;
playerData->partners[partnerIdx].level++;
set_variable(script, si_var, playerData->partners[partnerIdx].level);
return ApiStatus_DONE2;
}
#ifdef NON_MATCHING
s32 N(func_802424A4_C389D4)(s32 arg0, s16 arg1) {
PlayerData* playerData = &gPlayerData;
if (playerData->partners[arg0].enabled) {
if (playerData->partners[arg0].level <= arg1) {
return playerData->partners[arg0].level;
}
}
return -1;
}
#else
INCLUDE_ASM(s32, "world/area_dgb/dgb_04/C36530", dgb_04_func_802424A4_C389D4, s32 arg0, s16 arg1)
#endif
ApiStatus N(func_802424F0_C38A20)(ScriptInstance *script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
s32 i;
s16 var = script->varTable[12] >= 0;
script->varTable[0] = -1;
for (i = 1; i < 12; i++) {
if (playerData->partners[i].enabled && N(func_802424A4_C389D4)(i, var) != -1) {
script->varTable[0] = 1;
break;
}
}
return ApiStatus_DONE2;
}
#include "world/common/UnkFunc18.inc.c"
#ifdef NON_MATCHING
@ -1208,53 +987,50 @@ typedef struct {
ApiStatus N(func_8024259C_C38ACC)(ScriptInstance *script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
N(UnkStruct)* structPtr;
N(UnkStruct)* ptr;
s32 i;
s32 temp_a0;
s32 partnerLevel;
s32 var, partnerActiveCount;
s32 idx;
if (isInitialCall) {
script->functionTemp[2].s = heap_malloc(0x330);
structPtr = script->functionTemp[2].s;
ptr = script->functionTemp[2].s;
ptr = structPtr;
partnerActiveCount = 0;
var = script->varTable[12] >= 0;
for (i = 0; i < 8; i++) {
s32 idx = *(N(D_80243D38_C3A268) + i);
idx = N(D_80243D38_C3A268)[i];
if (playerData->partners[idx].enabled) {
continue;
ptr->unk_108[i] = idx;
ptr->unk_84[i] = *D_8008EF20[idx];
partnerLevel = N(UnkFunc37)(idx, var);
if (partnerLevel >= 0) {
ptr->unk_00[i] = D_800F7F00[idx];
ptr->unk_18C[i] = 1;
ptr->unk_294[i] = N(D_80243D48_C3A278)[i][partnerLevel];
} else {
ptr->unk_00[i] = D_800F7F40[idx];
ptr->unk_18C[i] = 0;
ptr->unk_294[i] = N(D_80243D30_C3A260)[var];
}
ptr->unk_210[i] = playerData->partners[idx].level;
partnerActiveCount++;
}
ptr->unk_108[i] = idx;
ptr->unk_84[i] = **(D_8008EF20 + idx);
temp_a0 = N(func_802424A4_C389D4)(idx, var);
if (temp_a0 >= 0) {
ptr->unk_00[i] = *(D_800F7F00 + idx);
ptr->unk_18C[i] = 1;
ptr->unk_294[i] = *(temp_a0 + *(N(D_80243D48_C3A278) + i));
} else {
ptr->unk_00[i] = *(D_800F7F40 + idx);
ptr->unk_18C[i] = 0;
ptr->unk_294[i] = *(N(D_80243D30_C3A260) + var);
}
ptr->unk_210[i] = playerData->partners[idx].level;
partnerActiveCount++;
}
structPtr->unk_318 = 4;
structPtr->unk_324 = partnerActiveCount;
structPtr->unk_328 = 0;
func_800F4E40(structPtr);
ptr->unk_318 = 4;
ptr->unk_324 = partnerActiveCount;
ptr->unk_328 = 0;
func_800F4E40(ptr);
script->functionTemp[0].s = 0;
}
structPtr = script->functionTemp[2].s;
ptr = script->functionTemp[2].s;
if (script->functionTemp[0].s == 0) {
script->functionTemp[1].s = structPtr->unk_32C;
script->functionTemp[1].s = ptr->unk_32C;
if (script->functionTemp[1].s != 0) {
func_800F13B0();
} else {
@ -1270,8 +1046,8 @@ ApiStatus N(func_8024259C_C38ACC)(ScriptInstance *script, s32 isInitialCall) {
func_800F1538();
if (script->functionTemp[1].s != 0xFF) {
script->varTable[0] = D_8008EF20[structPtr->unk_108[script->functionTemp[1].s - 1]][0];
script->varTable[1] = structPtr->unk_108[script->functionTemp[1].s - 1];
script->varTable[0] = D_8008EF20[ptr->unk_108[script->functionTemp[1].s - 1]][0];
script->varTable[1] = ptr->unk_108[script->functionTemp[1].s - 1];
} else {
script->varTable[0] = -1;
}
@ -1281,7 +1057,7 @@ ApiStatus N(func_8024259C_C38ACC)(ScriptInstance *script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
#else
INCLUDE_ASM(s32, "world/area_dgb/dgb_04/C36530", dgb_04_func_8024259C_C38ACC, ScriptInstance *script, s32 isInitialCall)
INCLUDE_ASM(ApiStatus, "world/area_dgb/dgb_04/C36530", dgb_04_func_8024259C_C38ACC, ScriptInstance *script, s32 isInitialCall)
#endif
ApiStatus N(func_802427EC_C38D1C)(ScriptInstance* script, s32 isInitialCall) {
@ -1291,47 +1067,15 @@ ApiStatus N(func_802427EC_C38D1C)(ScriptInstance* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
ApiStatus N(func_80242818_C38D48)(ScriptInstance *script, s32 isInitialCall) {
set_message_string(D_8008EF20[gPlayerData.currentPartner][0], 0);
#include "world/common/UnkFunc19.inc.c"
return ApiStatus_DONE2;
}
#include "world/common/UnkFunc20.inc.c"
ApiStatus N(func_80242850_C38D80)(ScriptInstance *script, s32 isInitialCall) {
Bytecode *args = script->ptrReadPos;
s32 entityIdx = get_variable(script, *args++);
Entity* entity = get_entity_by_index(entityIdx);
s32 si_var = *args++;
Effect* effect = func_80071750(0, entity->position.x, entity->position.y + 12.5f, entity->position.z, 0.7f, 0);
#include "world/common/UnkFunc39.inc.c"
set_variable(script, si_var, effect);
#include "world/common/UnkFunc21.inc.c"
return ApiStatus_DONE2;
}
ApiStatus N(func_802428E0_C38E10)(ScriptInstance *script, s32 isInitialCall) {
Effect* effect = get_variable(script, *script->ptrReadPos);
effect->flags |= 0x10;
return ApiStatus_DONE2;
}
ApiStatus N(func_80242914_C38E44)(ScriptInstance *script, s32 isInitialCall) {
Entity* entity = get_entity_by_index(get_variable(script, *script->ptrReadPos));
func_80070BB0(4, entity->position.x, entity->position.y + 12.5f, entity->position.z, 1.0f, 0x4B);
return ApiStatus_DONE2;
}
ApiStatus N(func_80242978_C38EA8)(ScriptInstance *script, s32 isInitialCall) {
Npc *npc = get_npc_safe(-4);
func_80070BB0(9, npc->pos.x, npc->pos.y + 12.5f, npc->pos.z, 1.0f, 0x1E);
return ApiStatus_DONE2;
}
#include "world/common/UnkFunc22.inc.c"
typedef struct {
s32 unk_00;
@ -1346,9 +1090,7 @@ typedef struct {
Entity* unk_5C;
s32 unk_60;
s32 unk_64;
} UserData;
Effect* func_800716F0(s32, f32, f32, f32, f32, s32);
} N(UserData);
ApiStatus N(func_802429D0_C38F00)(ScriptInstance *script, s32 isInitialCall) {
Bytecode *args = script->ptrReadPos;
@ -1356,15 +1098,15 @@ ApiStatus N(func_802429D0_C38F00)(ScriptInstance *script, s32 isInitialCall) {
f32 sinTheta, cosTheta;
s32 i;
f32 var;
UserData* userDataPtr;
UserData* scriptPtr;
N(UserData)* userDataPtr;
N(UserData)* scriptPtr;
f32 save, save2;
sin_cos_deg(gCameras[gCurrentCameraID].currentYaw, &sinTheta, &cosTheta);
if (isInitialCall) {
script->userData = (UserData*)general_heap_malloc(0x68);
scriptPtr = (UserData*)script->userData;
script->userData = (N(UserData)*)general_heap_malloc(0x68);
scriptPtr = (N(UserData)*)script->userData;
scriptPtr->unk_5C = get_entity_by_index(get_variable(script, *args));
@ -1396,7 +1138,7 @@ ApiStatus N(func_802429D0_C38F00)(ScriptInstance *script, s32 isInitialCall) {
}
}
scriptPtr = (UserData*)script->userData;
scriptPtr = (N(UserData)*)script->userData;
switch (scriptPtr->unk_00) {
case 0:
save = update_lerp(5, 0.0f, 50.0f, scriptPtr->unk_60, 0x14);
@ -1526,13 +1268,6 @@ s32 N(func_80242F08_C39438)(ScriptInstance *script, s32 isInitialCall) {
#include "world/common/UnkPartnerPosFuncs.inc.c"
ApiStatus N(func_802430D8_C39608)(ScriptInstance *script, s32 isInitialCall) {
script->varTable[0] = 0;
if ((D_8010EBB0.unk_00 != 0) && (D_8010EBB0.unk_03 == 3)) {
script->varTable[0] = 1;
}
return ApiStatus_DONE2;
}
#include "world/common/UnkFunc24.inc.c"
const char N(dgb_00_name_hack)[] = "dgb_00";

View File

@ -7,21 +7,21 @@ ApiStatus N(SetOverrideFlags_40)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkPartnerPosFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkPartnerPosFunc2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242154_C38684)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802423EC_C3891C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc17)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024240C_C3893C)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(func_80242438_C38968)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802424F0_C38A20)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc18)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc38)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024259C_C38ACC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802427EC_C38D1C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242818_C38D48)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242850_C38D80)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802428E0_C38E10)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242914_C38E44)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242978_C38EA8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc19)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc20)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc39)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc21)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc22)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802429D0_C38F00)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242F08_C39438)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802430D8_C39608)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc24)(ScriptInstance* script, s32 isInitialCall);
NpcGroupList N(npcGroupList_80243D18);
Script N(main);
Script N(makeEntities);
Script N(makeEntities);

View File

@ -180,7 +180,7 @@ Script N(npcAI_80241A78) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(func_8024041C_C3AE2C)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_80241B20) = {
@ -359,7 +359,7 @@ ApiStatus N(func_80240030_C3AA40)(ScriptInstance *script, s32 isInitialCall) {
s32 N(func_80240268_C3AC78)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -393,77 +393,7 @@ s32 N(func_80240268_C3AC78)(ScriptInstance *script) {
return ret;
}
ApiStatus N(func_8024041C_C3AE2C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
void N(func_8024067C_C3B08C)(ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory) {
Enemy* enemy = script->owner1.enemy;
@ -656,7 +586,7 @@ ApiStatus N(func_80240E80_C3B890)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -760,7 +690,7 @@ ApiStatus N(func_802411D0_C3BBE0)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {

View File

@ -5,7 +5,7 @@
ApiStatus N(func_80240000_C3AA10)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240030_C3AA40)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024041C_C3AE2C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240E80_C3B890)(ScriptInstance* script, s32 isInitialCall);
NpcGroupList N(npcGroupList_8024230C);

View File

@ -81,9 +81,7 @@ Script N(main) = SCRIPT({
spawn N(enterSingleDoor_80240474);
});
s32 N(D_80240620_C3D6A0) = {
0x00000000,
};
s32** N(D_80240620_C3D6A0) = NULL;
Script N(80240624) = SCRIPT({
group 0;
@ -193,23 +191,19 @@ NpcGroupList N(npcGroupList_80240B44) = {
};
ApiStatus N(func_80240000_C3D080)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80240620_C3D6A0);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_80240620_C3D6A0) == NULL) {
N(D_80240620_C3D6A0) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_80240620_C3D6A0)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_80240620_C3D6A0)[i];
}
ptr = &N(D_80240620_C3D6A0);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_80240620_C3D6A0));
N(D_80240620_C3D6A0) = NULL;
}
return ApiStatus_DONE2;
}

View File

@ -167,7 +167,7 @@ Script N(npcAI_802419A8) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(update_starpoints_display_C3DFAC)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_80241A50) = {
@ -268,7 +268,7 @@ static const s32 N(pad_1E74)[] = {
s32 N(func_80240208_C3DDF8)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -302,77 +302,7 @@ s32 N(func_80240208_C3DDF8)(ScriptInstance *script) {
return ret;
}
ApiStatus N(update_starpoints_display_C3DFAC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
void N(func_8024061C_C3E20C)(ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory) {
Enemy* enemy = script->owner1.enemy;
@ -565,7 +495,7 @@ ApiStatus N(func_80240E20_C3EA10)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -669,7 +599,7 @@ ApiStatus N(func_80241170_C3ED60)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {

View File

@ -4,7 +4,7 @@
#define NAMESPACE dgb_07
ApiStatus N(func_80240E20_C3EA10)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(update_starpoints_display_C3DFAC)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance *script, s32 isInitialCall);
NpcGroupList N(npcGroupList_80241E5C);
Script N(main);

View File

@ -242,7 +242,7 @@ Script N(npcAI_8024438C) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(func_8024124C_C40FFC)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_80244434) = {
@ -989,85 +989,11 @@ ApiStatus N(func_80240000_C3FDB0)(ScriptInstance* script, NpcAISettings* aiSetti
return ApiStatus_DONE1;
}
void N(func_80240158_C3FF08)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 x, z;
s32 var;
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if (func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
if (npc->turnAroundYawAdjustment == 0) {
if (npc->moveSpeed < 4.0) {
func_8003D660(npc, 0);
} else {
func_8003D660(npc, 1);
}
x = script->functionTemp[2].s[enemy->territory->patrol.points].x;
z = script->functionTemp[2].s[enemy->territory->patrol.points].z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, x, z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (dist2D(npc->pos.x, npc->pos.z, x, z) <= npc->moveSpeed) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->moveTime <= 0) ||
(aiSettings->waitTime <= 0) || (script->functionTemp[1].s == 0)) {
script->functionTemp[0].s = 4;
}
if (rand_int(10000) % 100 < aiSettings->moveTime) {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc13.inc.c"
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_802404C0_C40270)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if ((aiSettings->unk_14 >= 0) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
func_800494C0(npc, 0x2F4, 0x200000);
if (!(enemy->npcSettings->unk_2A & 1)) {
script->functionTemp[0].s = 12;
} else {
script->functionTemp[0].s = 10;
}
} else if (npc->turnAroundYawAdjustment == 0) {
npc->duration--;
if (npc->duration == 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s != 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc14.inc.c"
ApiStatus N(func_8024067C_C4042C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -1093,46 +1019,11 @@ ApiStatus N(func_8024067C_C4042C)(ScriptInstance* script, NpcAISettings* aiSetti
#include "world/common/UnkNpcAIFunc13.inc.c"
ApiStatus N(func_8024094C_C406FC)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_80240AD4_C40884)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_80240B94_C40944)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1149,7 +1040,7 @@ ApiStatus N(func_80240B94_C40944)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -1169,7 +1060,7 @@ ApiStatus N(func_80240B94_C40944)(ScriptInstance *script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -1186,12 +1077,12 @@ ApiStatus N(func_80240B94_C40944)(ScriptInstance *script, s32 isInitialCall) {
case 0:
N(func_80240000_C3FDB0)(script, npcAISettings, territoryPtr);
case 1:
N(func_80240158_C3FF08)(script, npcAISettings, territoryPtr);
N(UnkFunc13)(script, npcAISettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, npcAISettings, territoryPtr);
case 3:
N(func_802404C0_C40270)(script, npcAISettings, territoryPtr);
N(UnkFunc14)(script, npcAISettings, territoryPtr);
break;
case 4:
N(func_8024067C_C4042C)(script, npcAISettings, territoryPtr);
@ -1204,13 +1095,13 @@ ApiStatus N(func_80240B94_C40944)(ScriptInstance *script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, npcAISettings, territoryPtr);
case 13:
N(func_8024094C_C406FC)(script, npcAISettings, territoryPtr);
N(UnkFunc15)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, npcAISettings, territoryPtr);
break;
case 15:
N(func_80240AD4_C40884)(script, npcAISettings, territoryPtr);
N(UnkFunc16)(script, npcAISettings, territoryPtr);
break;
case 99:
func_8004A73C(script);
@ -1230,7 +1121,7 @@ ApiStatus N(func_80240B94_C40944)(ScriptInstance *script, s32 isInitialCall) {
s32 N(func_80241098_C40E48)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -1264,77 +1155,7 @@ s32 N(func_80241098_C40E48)(ScriptInstance *script) {
return ret;
}
ApiStatus N(func_8024124C_C40FFC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
ApiStatus N(func_802414AC_C4125C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1350,7 +1171,7 @@ ApiStatus N(func_802414AC_C4125C)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -1591,70 +1412,7 @@ INCLUDE_ASM(void, "world/area_dgb/dgb_08/C3FDB0", dgb_08_func_80241910_C416C0, S
#include "world/common/UnkNpcAIFunc1_copy.inc.c"
void N(func_80241FF8_C41DA8)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f24 = (f32)enemy->varTable[3] / 100.0;
f32 temp_f26 = temp_f24 + (f32)((f32)enemy->varTable[7] / 100.0);
s32 var;
if (npc->duration > 0) {
npc->duration--;
}
if (enemy->varTable[1] > 0) {
f32 temp_f22 = (f32)enemy->varTable[1] / 100.0;
f32 sin_degrees = sin_deg(enemy->varTable[2]);
s32 phi_v0;
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f24 + (sin_degrees * temp_f22);
} else {
npc->pos.y = temp_f26 + (sin_degrees * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
} else {
enemy->varTable[9]--;
}
if ((npc->turnAroundYawAdjustment == 0) && (npc->duration <= 0)) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = (rand_int(1000) % 11) + 5;
} else {
script->functionTemp[0].s = 0;
}
}
}
#include "world/common/UnkFunc4.inc.c"
#include "world/common/UnkNpcAIFunc2.inc.c"
@ -1672,121 +1430,9 @@ void N(func_802423B4_C42164)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc3.inc.c"
void N(func_802425B8_C42368)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f0_2;
f32 temp_f20;
f32 temp_f22;
f32 temp_f2;
s32 phi_v0;
f32 phi_f20;
f32 a = enemy->varTable[3];
f32 b = enemy->varTable[7];
#include "world/common/UnkFunc6.inc.c"
npc->jumpVelocity += npc->jumpScale;
temp_f20 = a / 100.0;
temp_f22 = b / 100.0;
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->jumpVelocity >= 0.0) {
npc->pos.y += npc->jumpVelocity;
npc->currentAnim = enemy->animList[9];
enemy->unk_07 = 0;
if (!(npc->flags & 8)) {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
} else {
phi_v0 = FALSE;
}
if (phi_v0) {
temp_f2 = posY + temp_f20;
if (temp_f2 <= npc->pos.y) {
npc->pos.y = temp_f2;
script->functionTemp[0].s = 0;
}
} else if (npc->pos.y >= npc->moveToPos.y) {
script->functionTemp[0].s = 0;
}
} else if (npc->jumpVelocity < 0.0) {
npc->duration++;
if (npc->duration >= aiSettings->unk_20) {
npc->duration = 0;
phi_f20 = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
temp_f0_2 = get_clamped_angle_diff(npc->yaw, phi_f20);
if (aiSettings->unk_1C.s < fabsf(temp_f0_2)) {
phi_f20 = npc->yaw;
if (temp_f0_2 < 0.0f) {
phi_f20 += -aiSettings->unk_1C.s;
} else {
phi_f20 += aiSettings->unk_1C.s;
}
}
npc->yaw = clamp_angle(phi_f20);
}
if (npc->flags & 8) {
if (npc->pos.y + npc->jumpVelocity < temp_f22) {
npc->pos.y = temp_f22;
npc->jumpVelocity = 0.0f;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
}
posX = npc->pos.x;
posY = npc->pos.y + npc->collisionHeight;
posZ = npc->pos.z;
posW = (fabsf(npc->jumpVelocity) + npc->collisionHeight) + 10.0;
if (func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW)) {
if (posW <= (npc->collisionHeight + fabsf(npc->jumpVelocity))) {
npc->jumpVelocity = 0.0f;
npc->pos.y = posY;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
} else if (fabsf(npc->jumpVelocity) < ((npc->pos.y - temp_f22) + npc->collisionHeight)) {
npc->pos.y = npc->pos.y + npc->jumpVelocity;
return;
}
npc->jumpVelocity = 0.0f;
}
}
void N(func_80242948_C426F8)(Npc *npc, Enemy *enemy, ScriptInstance *script, NpcAISettings *aiSettings) {
f32 posX, posY, posZ, posW;
s32 temp_a1;
s32 temp_v1;
s32 phi_v0;
script->functionTemp[0].s = 0;
npc->duration = 0;
temp_v1 = npc->flags & ~0x200;
npc->flags = (npc->flags & ~0x200) | 0x800;
if (enemy->territory->wander.isFlying) {
npc->flags = temp_v1 | 0x808;
} else {
npc->flags = npc->flags & ~8;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
enemy->varTable[2] = 0;
enemy->varTable[9] = 0;
enemy->varTable[3] = ((posW * 100.0) + 0.5);
enemy->varTable[7] = ((posY * 100.0) + 0.5);
script->functionTemp[1].s = aiSettings->unk_14;
enemy->unk_B0 |= 0x10;
}
#include "world/common/UnkFunc5.inc.c"
ApiStatus N(func_80242A6C_C4281C)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1802,11 +1448,11 @@ ApiStatus N(func_80242A6C_C4281C)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_80242948_C426F8)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -1827,7 +1473,7 @@ ApiStatus N(func_80242A6C_C4281C)(ScriptInstance* script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1_copy)(script, aiSettings, territoryPtr);
case 3:
N(func_80241FF8_C41DA8)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
break;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -1841,7 +1487,7 @@ ApiStatus N(func_80242A6C_C4281C)(ScriptInstance* script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
break;
case 14:
N(func_802425B8_C42368)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
break;
}
@ -1856,7 +1502,7 @@ void N(func_80242C58_C42A08)(ScriptInstance *script, NpcAISettings *aiSettings,
npc->duration--;
if (npc->duration <= 0) {
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->duration = aiSettings->unk_20 / 2 + rand_int(aiSettings->unk_20 / 2 + 1);
npc->currentAnim = enemy->animList[8];
npc->moveSpeed = aiSettings->chaseSpeed;
@ -1929,7 +1575,7 @@ void N(func_80242F94_C42D44)(ScriptInstance *script, NpcAISettings *aiSettings,
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
enemy->varTable[0] &= ~0x100;
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
script->functionTemp[0].s = 16;
} else {
PlayerStatus** playerStatus = &gPlayerStatusPtr;
@ -1952,7 +1598,7 @@ void N(func_80242F94_C42D44)(ScriptInstance *script, NpcAISettings *aiSettings,
npc->pos.y -= 1.8;
} else {
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
if (D_8010EBB0.unk_03 != 9) {
disable_player_input();
func_800EF628();
@ -2035,7 +1681,7 @@ void N(func_80243530_C432E0)(ScriptInstance *script, NpcAISettings *aiSettings,
Npc* npc = get_npc_unsafe(enemy->npcID);
enemy->varTable[0] &= ~0x100;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->moveSpeed = 2.0 * aiSettings->moveSpeed;
enemy->varTable[2] = 0;
enemy->varTable[4] = npc->pos.y * 100.0;
@ -2100,12 +1746,12 @@ ApiStatus N(func_802438F0_C436A0)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 125.0f;
territory.unk_18 = 125.0f;
territory.unk_1C = 0;
if (isInitialCall) {
script->functionTemp[0].s = 0;
N(func_80242948_C426F8)(npc, enemy, script, npcAISettings);
N(UnkFunc5)(npc, enemy, script, npcAISettings);
}
switch (script->functionTemp[0].s) {
@ -2121,7 +1767,7 @@ ApiStatus N(func_802438F0_C436A0)(ScriptInstance *script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1_copy)(script, npcAISettings, territoryPtr);
case 3:
N(func_80241FF8_C41DA8)(script, npcAISettings, territoryPtr);
N(UnkFunc4)(script, npcAISettings, territoryPtr);
if (script->functionTemp[0].s == 12) {
npc->duration = 6;
}

View File

@ -5,7 +5,7 @@
ApiStatus N(UnkFunc1)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240B94_C40944)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024124C_C40FFC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802414AC_C4125C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802438F0_C436A0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243B98_C43948)(ScriptInstance* script, s32 isInitialCall);

View File

@ -147,9 +147,7 @@ static s32 N(pad_3E4C) = {
0x00000000,
};
s32 N(triggerCoord_80243E50)[] = {
0x43960000, 0x00000000, 0x42B00000, 0x00000000,
};
Vec4f N(triggerCoord_80243E50) = { 300.0f, 0.0f, 88.0f, 0.0f };
Script N(80243E60) = SCRIPT({
sleep 2;
@ -288,7 +286,7 @@ Script N(npcAI_80244284) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(update_starpoints_display_C46F9C)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_8024432C) = {
@ -609,7 +607,7 @@ NpcGroupList N(npcGroupList_8024533C) = {
s32 N(func_80240208_C46DE8)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -643,77 +641,7 @@ s32 N(func_80240208_C46DE8)(ScriptInstance *script) {
return ret;
}
ApiStatus N(update_starpoints_display_C46F9C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
ApiStatus N(func_8024061C_C471FC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -729,7 +657,7 @@ ApiStatus N(func_8024061C_C471FC)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -991,7 +919,7 @@ ApiStatus N(func_802410D4_C47CB4)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -1251,70 +1179,7 @@ INCLUDE_ASM(void, "world/area_dgb/dgb_09/C46BE0", dgb_09_func_802415D4_C481B4, S
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_80241CBC_C4889C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f24 = (f32)enemy->varTable[3] / 100.0;
f32 temp_f26 = temp_f24 + (f32)((f32)enemy->varTable[7] / 100.0);
s32 var;
if (npc->duration > 0) {
npc->duration--;
}
if (enemy->varTable[1] > 0) {
f32 temp_f22 = (f32)enemy->varTable[1] / 100.0;
f32 sin_degrees = sin_deg(enemy->varTable[2]);
s32 phi_v0;
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f24 + (sin_degrees * temp_f22);
} else {
npc->pos.y = temp_f26 + (sin_degrees * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
} else {
enemy->varTable[9]--;
}
if ((npc->turnAroundYawAdjustment == 0) && (npc->duration <= 0)) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s > 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = (rand_int(1000) % 11) + 5;
} else {
script->functionTemp[0].s = 0;
}
}
}
#include "world/common/UnkFunc4.inc.c"
#include "world/common/UnkNpcAIFunc2.inc.c"
@ -1332,121 +1197,9 @@ void N(func_80242078_C48C58)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkNpcAIFunc3.inc.c"
void N(func_8024227C_C48E5C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 posX, posY, posZ, posW;
f32 temp_f0_2;
f32 temp_f20;
f32 temp_f22;
f32 temp_f2;
s32 phi_v0;
f32 phi_f20;
f32 a = enemy->varTable[3];
f32 b = enemy->varTable[7];
#include "world/common/UnkFunc6.inc.c"
npc->jumpVelocity += npc->jumpScale;
temp_f20 = a / 100.0;
temp_f22 = b / 100.0;
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->jumpVelocity >= 0.0) {
npc->pos.y += npc->jumpVelocity;
npc->currentAnim = enemy->animList[9];
enemy->unk_07 = 0;
if (!(npc->flags & 8)) {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
} else {
phi_v0 = FALSE;
}
if (phi_v0) {
temp_f2 = posY + temp_f20;
if (temp_f2 <= npc->pos.y) {
npc->pos.y = temp_f2;
script->functionTemp[0].s = 0;
}
} else if (npc->pos.y >= npc->moveToPos.y) {
script->functionTemp[0].s = 0;
}
} else if (npc->jumpVelocity < 0.0) {
npc->duration++;
if (npc->duration >= aiSettings->unk_20) {
npc->duration = 0;
phi_f20 = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
temp_f0_2 = get_clamped_angle_diff(npc->yaw, phi_f20);
if (aiSettings->unk_1C.s < fabsf(temp_f0_2)) {
phi_f20 = npc->yaw;
if (temp_f0_2 < 0.0f) {
phi_f20 += -aiSettings->unk_1C.s;
} else {
phi_f20 += aiSettings->unk_1C.s;
}
}
npc->yaw = clamp_angle(phi_f20);
}
if (npc->flags & 8) {
if (npc->pos.y + npc->jumpVelocity < temp_f22) {
npc->pos.y = temp_f22;
npc->jumpVelocity = 0.0f;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
}
posX = npc->pos.x;
posY = npc->pos.y + npc->collisionHeight;
posZ = npc->pos.z;
posW = (fabsf(npc->jumpVelocity) + npc->collisionHeight) + 10.0;
if (func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW)) {
if (posW <= (npc->collisionHeight + fabsf(npc->jumpVelocity))) {
npc->jumpVelocity = 0.0f;
npc->pos.y = posY;
} else {
npc->pos.y += npc->jumpVelocity;
}
return;
} else if (fabsf(npc->jumpVelocity) < ((npc->pos.y - temp_f22) + npc->collisionHeight)) {
npc->pos.y = npc->pos.y + npc->jumpVelocity;
return;
}
npc->jumpVelocity = 0.0f;
}
}
void N(func_8024260C_C491EC)(Npc *npc, Enemy *enemy, ScriptInstance *script, NpcAISettings *aiSettings) {
f32 posX, posY, posZ, posW;
s32 temp_a1;
s32 temp_v1;
s32 phi_v0;
script->functionTemp[0].s = 0;
npc->duration = 0;
temp_v1 = npc->flags & ~0x200;
npc->flags = (npc->flags & ~0x200) | 0x800;
if (enemy->territory->wander.isFlying) {
npc->flags = temp_v1 | 0x808;
} else {
npc->flags = npc->flags & ~8;
}
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
enemy->varTable[2] = 0;
enemy->varTable[9] = 0;
enemy->varTable[3] = ((posW * 100.0) + 0.5);
enemy->varTable[7] = ((posY * 100.0) + 0.5);
script->functionTemp[1].s = aiSettings->unk_14;
enemy->unk_B0 |= 0x10;
}
#include "world/common/UnkFunc5.inc.c"
ApiStatus N(func_80242730_C49310)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -1462,11 +1215,11 @@ ApiStatus N(func_80242730_C49310)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_8024260C_C491EC)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -1487,7 +1240,7 @@ ApiStatus N(func_80242730_C49310)(ScriptInstance* script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_80241CBC_C4889C)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
break;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -1501,7 +1254,7 @@ ApiStatus N(func_80242730_C49310)(ScriptInstance* script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
break;
case 14:
N(func_8024227C_C48E5C)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
break;
}
@ -1516,7 +1269,7 @@ void N(func_8024291C_C494FC)(ScriptInstance *script, NpcAISettings *aiSettings,
npc->duration--;
if (npc->duration <= 0) {
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->duration = aiSettings->unk_20 / 2 + rand_int(aiSettings->unk_20 / 2 + 1);
npc->currentAnim = enemy->animList[8];
npc->moveSpeed = aiSettings->chaseSpeed;
@ -1581,7 +1334,7 @@ void N(func_80242C1C_C497FC)(ScriptInstance *script, NpcAISettings *aiSettings,
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
enemy->varTable[0] &= ~0x100;
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
script->functionTemp[0].s = 16;
} else {
PlayerStatus** playerStatus = &gPlayerStatusPtr;
@ -1604,7 +1357,7 @@ void N(func_80242C1C_C497FC)(ScriptInstance *script, NpcAISettings *aiSettings,
npc->pos.y -= 1.8;
} else {
npc->rotation.y = 0.0f;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
if (D_8010EBB0.unk_03 != 9) {
disable_player_input();
func_800EF628();
@ -1687,7 +1440,7 @@ void N(func_802431B8_C49D98)(ScriptInstance *script, NpcAISettings *aiSettings,
Npc* npc = get_npc_unsafe(enemy->npcID);
enemy->varTable[0] &= ~0x100;
npc->flags &= 0xFFDFFFFF;
npc->flags &= ~0x00200000;
npc->moveSpeed = 2.0 * aiSettings->moveSpeed;
enemy->varTable[2] = 0;
enemy->varTable[4] = npc->pos.y * 100.0;
@ -1752,12 +1505,12 @@ ApiStatus N(func_80243578_C4A158)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 125.0f;
territory.unk_18 = 125.0f;
territory.unk_1C = 0;
if (isInitialCall) {
script->functionTemp[0].s = 0;
N(func_8024260C_C491EC)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
switch (script->functionTemp[0].s) {
@ -1773,7 +1526,7 @@ ApiStatus N(func_80243578_C4A158)(ScriptInstance *script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_80241CBC_C4889C)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
if (script->functionTemp[0].s == 12) {
npc->duration = 6;
}

View File

@ -6,7 +6,7 @@
ApiStatus N(func_8024061C_C471FC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802410D4_C47CB4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243578_C4A158)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(update_starpoints_display_C46F9C)(ScriptInstance *script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance *script, s32 isInitialCall);
NpcGroupList N(npcGroupList_8024533C);
Script N(80243F6C);

View File

@ -123,9 +123,7 @@ static s32 N(pad_868)[] = {
0x00000000, 0x00000000,
};
s32 N(D_80240870_C4E760) = {
0x00000000,
};
s32** N(D_80240870_C4E760) = NULL;
Script N(80240874) = SCRIPT({
group 0;
@ -171,23 +169,19 @@ Script N(makeEntities) = SCRIPT({
});
ApiStatus N(func_80240000_C4DEF0)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80240870_C4E760);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_80240870_C4E760) == NULL) {
N(D_80240870_C4E760) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_80240870_C4E760)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_80240870_C4E760)[i];
}
ptr = &N(D_80240870_C4E760);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_80240870_C4E760));
N(D_80240870_C4E760) = NULL;
}
return ApiStatus_DONE2;
}

View File

@ -199,7 +199,7 @@ Script N(80242058) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(update_starpoints_display_C4F8CC)();
N(UnkFunc7)();
});
s32 N(unk_missing_80242100)[] = {
@ -455,7 +455,7 @@ Script N(makeEntities) = SCRIPT({
s32 N(func_80240208_C4F718)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -489,77 +489,7 @@ s32 N(func_80240208_C4F718)(ScriptInstance *script) {
return ret;
}
ApiStatus N(update_starpoints_display_C4F8CC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
ApiStatus N(func_8024061C_C4FB2C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -575,7 +505,7 @@ ApiStatus N(func_8024061C_C4FB2C)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -681,85 +611,11 @@ ApiStatus N(func_802408D0_C4FDE0)(ScriptInstance* script, NpcAISettings* aiSetti
return ApiStatus_DONE1;
}
void N(func_80240A28_C4FF38)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 x, z;
s32 var;
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if (func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
if (npc->turnAroundYawAdjustment == 0) {
if (npc->moveSpeed < 4.0) {
func_8003D660(npc, 0);
} else {
func_8003D660(npc, 1);
}
x = script->functionTemp[2].s[enemy->territory->patrol.points].x;
z = script->functionTemp[2].s[enemy->territory->patrol.points].z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, x, z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (dist2D(npc->pos.x, npc->pos.z, x, z) <= npc->moveSpeed) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->moveTime <= 0) ||
(aiSettings->waitTime <= 0) || (script->functionTemp[1].s == 0)) {
script->functionTemp[0].s = 4;
}
if (rand_int(10000) % 100 < aiSettings->moveTime) {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc13.inc.c"
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_80240D90_C502A0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if ((aiSettings->unk_14 >= 0) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
func_800494C0(npc, 0x2F4, 0x200000);
if (!(enemy->npcSettings->unk_2A & 1)) {
script->functionTemp[0].s = 12;
} else {
script->functionTemp[0].s = 10;
}
} else if (npc->turnAroundYawAdjustment == 0) {
npc->duration--;
if (npc->duration == 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s != 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc14.inc.c"
ApiStatus N(func_80240F4C_C5045C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -785,46 +641,11 @@ ApiStatus N(func_80240F4C_C5045C)(ScriptInstance* script, NpcAISettings* aiSetti
#include "world/common/UnkNpcAIFunc13.inc.c"
ApiStatus N(func_8024121C_C5072C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_802413A4_C508B4)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_80241464_C50974)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -841,7 +662,7 @@ ApiStatus N(func_80241464_C50974)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -861,7 +682,7 @@ ApiStatus N(func_80241464_C50974)(ScriptInstance* script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -878,12 +699,12 @@ ApiStatus N(func_80241464_C50974)(ScriptInstance* script, s32 isInitialCall) {
case 0:
N(func_802408D0_C4FDE0)(script, npcAISettings, territoryPtr);
case 1:
N(func_80240A28_C4FF38)(script, npcAISettings, territoryPtr);
N(UnkFunc13)(script, npcAISettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, npcAISettings, territoryPtr);
case 3:
N(func_80240D90_C502A0)(script, npcAISettings, territoryPtr);
N(UnkFunc14)(script, npcAISettings, territoryPtr);
break;
case 4:
N(func_80240F4C_C5045C)(script, npcAISettings, territoryPtr);
@ -896,13 +717,13 @@ ApiStatus N(func_80241464_C50974)(ScriptInstance* script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, npcAISettings, territoryPtr);
case 13:
N(func_8024121C_C5072C)(script, npcAISettings, territoryPtr);
N(UnkFunc15)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, npcAISettings, territoryPtr);
break;
case 15:
N(func_802413A4_C508B4)(script, npcAISettings, territoryPtr);
N(UnkFunc16)(script, npcAISettings, territoryPtr);
break;
case 99:
func_8004A73C(script);

View File

@ -8,7 +8,7 @@ ApiStatus N(SetEntityFlags100000)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc1)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024061C_C4FB2C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241464_C50974)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(update_starpoints_display_C4F8CC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance* script, s32 isInitialCall);
NpcGroupList N(npcGroupList_80242AB0);
Script N(80242AD0);

View File

@ -183,7 +183,7 @@ Script N(npcAI_80241978) = SCRIPT({
SetSelfVar(3, 32);
SetSelfVar(4, 3);
SetSelfVar(15, 8389);
N(update_starpoints_display_C528FC)();
N(UnkFunc7)();
});
NpcSettings N(npcSettings_80241A20) = {
@ -625,7 +625,7 @@ NpcGroupList N(npcGroupList_8024318C) = {
s32 N(func_80240208_C52748)(ScriptInstance *script) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Camera* camera = CAM2(gCurrentCamID);
Camera* camera = CAM(gCurrentCamID);
Enemy* enemy2 = get_enemy(enemy->npcID + 1);
f32 phi_f20;
s32 ret = TRUE;
@ -659,77 +659,7 @@ s32 N(func_80240208_C52748)(ScriptInstance *script) {
return ret;
}
ApiStatus N(update_starpoints_display_C528FC)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Npc *npc = get_npc_unsafe(enemy->npcID);
Enemy* enemy2;
Npc* npc2;
f32 posX, posZ;
s32 func;
if (isInitialCall || (enemy->unk_B0 & 4)) {
script->functionTemp[0].s = 0;
npc->duration = 0;
npc->flags |= 0x102;
enemy->flags |= 0x1F300000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
if (enemy->unk_B0 & 4) {
enemy->unk_B0 &= ~4;
}
}
func = script->functionTemp[0].s;
switch (func) {
case 0:
enemy2 = get_enemy(enemy->npcID - 1);
npc2 = get_npc_unsafe(enemy2->npcID);
enemy->unk_07 = 1;
if (enemy2->varTable[0] == 3) {
if (enemy->varTable[15] != 0) {
func_800494C0(npc2, enemy->varTable[15], 0);
}
posX = npc2->pos.x;
posZ = npc2->pos.z;
add_vec2D_polar(&posX, &posZ, enemy->varTable[1], 270.0f - npc2->renderYaw);
npc->pos.x = posX;
enemy->unk_10.x = npc->pos.x;
npc->pos.y = npc2->pos.y + enemy->varTable[0];
enemy->unk_10.y = npc->pos.y;
npc->pos.z = posZ;
enemy->unk_10.z = npc->pos.z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
enemy->flags &= 0xE0EFFFFF;
npc->duration = 0;
script->functionTemp[0].s = 1;
}
break;
case 1:
enemy2 = get_enemy(enemy->npcID - 1);
get_npc_unsafe(enemy2->npcID);
npc->duration++;
if (npc->duration >= enemy->varTable[4]) {
enemy->unk_07 = 0;
}
if (enemy2->varTable[0] == 4) {
enemy->flags |= 0x1F100000;
npc->pos.x = 0.0f;
npc->pos.y = -1000.0f;
npc->pos.z = 0.0f;
enemy->unk_07 = func;
script->functionTemp[0].s = 0;
}
break;
}
return ApiStatus_BLOCK;
}
#include "world/common/UnkFunc7.inc.c"
void N(func_8024061C_C52B5C)(ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory) {
Enemy* enemy = script->owner1.enemy;
@ -922,7 +852,7 @@ ApiStatus N(func_80240E20_C53360)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 40.0f;
territory.unk_18 = 40.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {
@ -1026,7 +956,7 @@ ApiStatus N(func_80241170_C536B0)(ScriptInstance *script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || (enemy->unk_B0 & 4)) {

View File

@ -4,7 +4,7 @@
#define NAMESPACE dgb_16
ApiStatus N(func_80240E20_C53360)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(update_starpoints_display_C528FC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc7)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_8024318C);
extern Script N(80241780);

View File

@ -638,9 +638,7 @@ static s32 N(pad_36D8)[] = {
0x00000000, 0x00000000,
};
s32 N(D_802436E0_C59620) = {
0x00000000,
};
s32** N(D_802436E0_C59620) = NULL;
Script N(802436E4) = SCRIPT({
group 0;
@ -719,85 +717,11 @@ ApiStatus N(func_80240000_C55F40)(ScriptInstance* script, NpcAISettings* aiSetti
return ApiStatus_DONE1;
}
void N(func_80240158_C56098)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 x, z;
s32 var;
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if (func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
if (npc->turnAroundYawAdjustment == 0) {
if (npc->moveSpeed < 4.0) {
func_8003D660(npc, 0);
} else {
func_8003D660(npc, 1);
}
x = script->functionTemp[2].s[enemy->territory->patrol.points].x;
z = script->functionTemp[2].s[enemy->territory->patrol.points].z;
npc->yaw = atan2(npc->pos.x, npc->pos.z, x, z);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (dist2D(npc->pos.x, npc->pos.z, x, z) <= npc->moveSpeed) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->moveTime <= 0) ||
(aiSettings->waitTime <= 0) || (script->functionTemp[1].s == 0)) {
script->functionTemp[0].s = 4;
}
if (rand_int(10000) % 100 < aiSettings->moveTime) {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc13.inc.c"
#include "world/common/UnkNpcAIFunc1.inc.c"
void N(func_802404C0_C56400)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if ((aiSettings->unk_14 >= 0) && func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 0xF, &var);
npc->yaw = atan2(npc->pos.x, npc->pos.z, gPlayerStatusPtr->position.x, gPlayerStatusPtr->position.z);
func_800494C0(npc, 0x2F4, 0x200000);
if (!(enemy->npcSettings->unk_2A & 1)) {
script->functionTemp[0].s = 12;
} else {
script->functionTemp[0].s = 10;
}
} else if (npc->turnAroundYawAdjustment == 0) {
npc->duration--;
if (npc->duration == 0) {
script->functionTemp[1].s--;
if (script->functionTemp[1].s != 0) {
if (!(enemy->npcSettings->unk_2A & 0x10)) {
npc->yaw = clamp_angle(npc->yaw + 180.0f);
}
npc->duration = aiSettings->waitTime / 2 + rand_int(aiSettings->waitTime / 2 + 1);
} else {
script->functionTemp[0].s = 4;
}
}
}
}
#include "world/common/UnkFunc14.inc.c"
ApiStatus N(func_8024067C_C565BC)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
@ -823,46 +747,11 @@ ApiStatus N(func_8024067C_C565BC)(ScriptInstance* script, NpcAISettings* aiSetti
#include "world/common/UnkNpcAIFunc13.inc.c"
ApiStatus N(func_8024094C_C5688C)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 var;
if (!func_800490B4(territory, enemy, aiSettings->chaseRadius, aiSettings->unk_28.f, 1)) {
fx_emote(2, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 15, &var);
npc->currentAnim = enemy->animList[0];
npc->duration = 25;
script->functionTemp[0].s = 14;
} else {
func_8003D660(npc, 1);
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
if (npc->duration > 0) {
npc->duration--;
} else {
script->functionTemp[0].s = 12;
}
}
}
#include "world/common/UnkFunc15.inc.c"
#include "world/common/UnkNpcDurationFlagFunc.inc.c"
void N(func_80240AD4_C56A14)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
s32 i;
for (i = script->functionTemp[2].s; i < enemy->territory->patrol.numPoints; i++) {
if (i[enemy->territory->patrol.points].y <= npc->pos.y) {
script->functionTemp[2].s = i;
break;
}
}
npc->moveSpeed = aiSettings->moveSpeed;
npc->currentAnim = enemy->animList[1];
script->functionTemp[1].s = 0;
script->functionTemp[0].s = 1;
}
#include "world/common/UnkFunc16.inc.c"
ApiStatus N(func_80240B94_C56AD4)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
@ -879,7 +768,7 @@ ApiStatus N(func_80240B94_C56AD4)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->patrol.detect.z;
territory.sizeX = enemy->territory->patrol.detectSizeX;
territory.sizeZ = enemy->territory->patrol.detectSizeZ;
territory.unk_34 = 65.0f;
territory.unk_18 = 65.0f;
territory.unk_1C = 0;
if (isInitialCall || enemy->unk_B0 & 4) {
@ -899,7 +788,7 @@ ApiStatus N(func_80240B94_C56AD4)(ScriptInstance* script, s32 isInitialCall) {
enemy->unk_B0 &= ~4;
} else if (enemy->flags & 0x40000000) {
script->functionTemp[0].s = 12;
enemy->flags &= 0xBFFFFFFF;
enemy->flags &= ~0x40000000;
}
posX = npc->pos.x;
@ -916,12 +805,12 @@ ApiStatus N(func_80240B94_C56AD4)(ScriptInstance* script, s32 isInitialCall) {
case 0:
N(func_80240000_C55F40)(script, npcAISettings, territoryPtr);
case 1:
N(func_80240158_C56098)(script, npcAISettings, territoryPtr);
N(UnkFunc13)(script, npcAISettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, npcAISettings, territoryPtr);
case 3:
N(func_802404C0_C56400)(script, npcAISettings, territoryPtr);
N(UnkFunc14)(script, npcAISettings, territoryPtr);
break;
case 4:
N(func_8024067C_C565BC)(script, npcAISettings, territoryPtr);
@ -934,13 +823,13 @@ ApiStatus N(func_80240B94_C56AD4)(ScriptInstance* script, s32 isInitialCall) {
case 12:
N(UnkNpcAIFunc13)(script, npcAISettings, territoryPtr);
case 13:
N(func_8024094C_C5688C)(script, npcAISettings, territoryPtr);
N(UnkFunc15)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkNpcDurationFlagFunc)(script, npcAISettings, territoryPtr);
break;
case 15:
N(func_80240AD4_C56A14)(script, npcAISettings, territoryPtr);
N(UnkFunc16)(script, npcAISettings, territoryPtr);
break;
case 99:
func_8004A73C(script);

View File

@ -1,23 +1,19 @@
#include "dgb_18.h"
ApiStatus N(func_80240FB0_C56EF0)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_802436E0_C59620);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_802436E0_C59620) == NULL) {
N(D_802436E0_C59620) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_802436E0_C59620)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_802436E0_C59620)[i];
}
ptr = &N(D_802436E0_C59620);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_802436E0_C59620));
N(D_802436E0_C59620) = NULL;
}
return ApiStatus_DONE2;
}

View File

@ -6,9 +6,9 @@
ApiStatus N(UnkFunc1)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240B94_C56AD4)(ScriptInstance* script, s32 isInitialCall);
extern s32** N(D_802436E0_C59620);
extern NpcGroupList N(npcGroupList_802436B4);
extern Script N(main);
extern Script N(makeEntities);
extern Script N(npcAI_80242834);
extern s32 N(D_802436E0_C59620);

View File

@ -4,7 +4,7 @@
#include "world/common/GetCurrentFloor.inc.c"
INCLUDE_ASM(s32, "world/area_dro/dro_01/95B200", func_80240034_95B234);
#include "world/common/UnkFunc25.inc.c"
#include "world/common/GetEntryPos.inc.c"
@ -12,6 +12,6 @@ INCLUDE_ASM(s32, "world/area_dro/dro_01/95B200", func_80240034_95B234);
#include "world/common/SomeXYZFunc2.inc.c"
INCLUDE_ASM(s32, "world/area_dro/dro_01/95B200", func_802402E0_95B4E0);
#include "world/common/UnkFunc27.inc.c"
INCLUDE_ASM(s32, "world/area_dro/dro_01/95B200", func_80240404_95B604);
#include "world/common/UnkFunc26.inc.c"

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,28 @@
#include "dro_01.h"
INCLUDE_ASM(s32, "world/area_dro/dro_01/95E660", func_80243460_95E660);
/*
ApiStatus N(func_80243460_95E660)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80241C68_BE09F8);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_8024B5B0_9667B0) == NULL) {
N(D_8024B5B0_9667B0) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_8024B5B0_9667B0)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_8024B5B0_9667B0)[i];
}
ptr = &N(D_80241C68_BE09F8);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_8024B5B0_9667B0));
N(D_8024B5B0_9667B0) = NULL;
}
return ApiStatus_DONE2;
}
*/
#define NAMESPACE dup_dro_01
#define NAMESPACE dro_01_dup
#include "world/common/GetItemName.inc.c"
#define NAMESPACE dro_01
INCLUDE_ASM(s32, "world/area_dro/dro_01/95E660", func_80243578_95E778);
ApiStatus N(func_80243578_95E778)(ScriptInstance* script, s32 isInitialCall) {
func_800E96C8();
return ApiStatus_DONE2;
}

View File

@ -1,25 +1,63 @@
#include "dro_01.h"
#define NAMESPACE dup_dro_01
#define NAMESPACE dro_01_dup
#include "world/common/SetPlayerStatusAnimFlags100000.inc.c"
#define NAMESPACE dro_01
#define NAMESPACE dup_dro_01
#define NAMESPACE dro_01_dup
#include "world/common/GetCurrentFloor.inc.c"
#define NAMESPACE dro_01
INCLUDE_ASM(s32, "world/area_dro/dro_01/95E7A0", func_802435D4_95E7D4);
#define NAMESPACE dro_01_dup
#include "world/common/UnkFunc25.inc.c"
#define NAMESPACE dro_01
#define NAMESPACE dup_dro_01
#define NAMESPACE dro_01_dup
#include "world/common/GetEntryPos.inc.c"
#define NAMESPACE dro_01
#define NAMESPACE dup_dro_01
#define NAMESPACE dro_01_dup
#include "world/common/GetCurrentCameraYawClamped180.inc.c"
#define NAMESPACE dro_01
#define NAMESPACE dup_dro_01
#define NAMESPACE dro_01_dup
#include "world/common/SomeXYZFunc2.inc.c"
#define NAMESPACE dro_01
#include "world/common/foliage.inc.c"
FoliageModelList N(tree1_Leaves) = {
.count = 1,
.models = { 13 }
};
FoliageModelList N(tree1_Trunk) = {
.count = 1,
.models = { 14 }
};
FoliageDropList N(tree1_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_COIN,
.pos = { 120, 92, -18 },
.spawnMode = 0xF,
.pickupFlag = SI_SAVE_FLAG(760),
},
}
};
ShakeTreeConfig N(tree1) = {
.leaves = &N(tree1_Leaves),
.trunk = &N(tree1_Trunk),
.drops = &N(tree1_Drops),
};
Vec4f N(triggerCoord_8024DD68) = { 120.0f, 0.0f, -43.0f, 0.0f };
Script N(8024DD78) = SCRIPT({
SI_VAR(0) = N(tree1);
bind N(shakeTree) to TRIGGER_WALL_HAMMER 11;
bind N(shakeTree) to TRIGGER_POINT_BOMB N(triggerCoord_8024DD68);
});

View File

@ -2,3 +2,90 @@
#include "map.h"
#define NAMESPACE dro_01
typedef struct {
u32 itemID;
u32 buyPrice;
u32 descriptionID;
} N(shopInventory);
typedef struct {
u32 itemID;
u32 sellPrice;
u32 unk_08;
} N(shopPrice);
ApiStatus N(GetCamVfov)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetCurrentCameraYawClamped180)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetCurrentFloor)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetEntryPos)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetGameStatus75)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetNpcUnsafeOwner2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(Set80151310_0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(Set80151310_1)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetCamVfov)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetManyVars)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetPlayerStatusAnimFlags100000)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SomeXYZFunc2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(AddPlayerHandsOffset)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkAlphaFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkCameraFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkMovePartner)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkRotatePartner)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkRotatePlayer)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkYawFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc25)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc27)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc26)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241174_95C374)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802415AC_95C7AC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc31)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc29)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241B5C_95CD5C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241BE0_95CDE0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241DF8_95CFF8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241EAC_95D0AC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241EE0_95D0E0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241F60_95D160)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241F78_95D178)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241F94_95D194)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802424D4_95D6D4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242730_95D930)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242784_95D984)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802427BC_95D9BC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242858_95DA58)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243014_95E214)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243058_95E258)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243084_95E284)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetFloorCollider)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802431B4_95E3B4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802431FC_95E3FC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243350_95E550)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243578_95E778)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(dup_UnkFunc25)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(dup_GetCurrentCameraYawClamped180)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(dup_GetCurrentFloor)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(dup_GetEntryPos)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(dup_SetPlayerStatusAnimFlags100000)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(dup_SomeXYZFunc2)(ScriptInstance* script, s32 isInitialCall);
extern s32** N(D_8024B5B0_9667B0);
extern N(shopInventory) N(shopInventory_8024B4FC)[];
extern N(shopPrice) N(shopPriceList_8024B550)[];
extern NpcGroupList N(npcGroupList_8024B464);
extern NpcGroupList N(npcGroupList_8024B47C);
extern Script N(80244450);
extern Script N(8024C218);
extern Script N(8024C2EC);
extern Script N(8024C41C);
extern Script N(8024C4C8);
extern Script N(8024CDA0);
extern Script N(8024DD78);
extern Script N(main);
extern Script N(makeEntities);
extern Script N(shopItemPositions_8024BA68);
extern Script N(shopOwnerNPC_8024BA80);
extern Script N(unk_80248088);
extern Script N(unk_8024884C);

View File

@ -1,5 +1,5 @@
#include "dro_02.h"
INCLUDE_ASM(s32, "world/area_dro/dro_02/9691C0", func_80240000_9691C0);
#include "world/common/UnkFunc27.inc.c"
INCLUDE_ASM(s32, "world/area_dro/dro_02/9691C0", func_80240124_9692E4);
#include "world/common/UnkFunc26.inc.c"

File diff suppressed because it is too large Load Diff

View File

@ -2,3 +2,62 @@
#include "map.h"
#define NAMESPACE dro_02
ApiStatus N(Call800E9894)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(Call800E98C4SyncStatusMenu)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(Call800EB168)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetCamVfov)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetGameStatus75)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetNpcUnsafeOwner2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetPartnerCall800EB168)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(Set80151310_0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(Set80151310_1)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetCamVfov)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetManyVars)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(AddPlayerHandsOffset)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkAlphaFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkCameraFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc26)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc27)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc29)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkMovePartner)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkRotatePartner)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkRotatePlayer)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkYawFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024043C_9695FC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc31)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802409EC_969BAC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240A70_969C30)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240C88_969E48)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240D3C_969EFC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240D70_969F30)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240DF0_969FB0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240E08_969FC8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240E24_969FE4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241364_96A524)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241394_96A554)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802414C0_96A680)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802415CC_96A78C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802416FC_96A8BC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241874_96AA34)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024303C_96C1FC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243068_96C228)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802432C0_96C480)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243314_96C4D4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024334C_96C50C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802433E8_96C5A8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc32)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(CamSetFOV)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(DoesPlayerNeedSleep)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc35)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802439FC_96CBBC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80243A40_96CC00)(ScriptInstance* script, s32 isInitialCall);
void N(func_8024240C_96B5CC)(ScriptInstance *script, s32 isInitialCall);
void N(func_80242EAC_96C06C)(ScriptInstance *script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_8024EEF4);
extern Script N(80244C78);
extern Script N(8024D434);
extern Script N(8024D494);
extern Script N(8024D700);
extern Script N(main);

View File

@ -1,5 +1,5 @@
#include "end_01.h"
INCLUDE_ASM(s32, "world/area_end/end_01/E08050", func_80242CF0_E08050);
#include "world/common/UnkFunc27.inc.c"
INCLUDE_ASM(s32, "world/area_end/end_01/E08050", func_80242E14_E08174);
#include "world/common/UnkFunc26.inc.c"

View File

@ -1,3 +1,9 @@
#include "flo_00.h"
INCLUDE_ASM(s32, "world/area_flo/flo_00/C9DF20", func_80240000_C9DF20);
// Same as SpawnSunEffect, but doesn't touch float regs like SpawnSunEffect does
void func_80072950();
ApiStatus N(func_80240000_C9DF20)(ScriptInstance *script, s32 isInitialCall) {
func_80072950(0, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,55 @@
#include "flo_00.h"
INCLUDE_ASM(s32, "world/area_flo/flo_00/C9EE30", func_80240F10_C9EE30);
ApiStatus N(func_80240F10_C9EE30)(ScriptInstance *script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 var1 = *args++;
s32 var2 = *args++;
INCLUDE_ASM(s32, "world/area_flo/flo_00/C9EE30", func_80240F80_C9EEA0);
set_variable(script, var1, gPlayerStatus.spriteFacingAngle);
set_variable(script, var2, gPlayerStatus.targetYaw);
INCLUDE_ASM(s32, "world/area_flo/flo_00/C9EE30", func_802410B4_C9EFD4);
return ApiStatus_DONE2;
}
ApiStatus N(func_80240F80_C9EEA0)(ScriptInstance *script, s32 isInitialCall) {
f32 var1 = get_variable(NULL, script->varTable[2]);
f32 dist = dist2D(-83.0f, 87.0f, script->varTable[9], script->varTable[11]);
f32 clamped = clamp_angle(atan2(-83.0f, 87.0f, script->varTable[9], script->varTable[11]) - var1);
var1 = sin_deg(clamped);
gPlayerStatus.position.x = (dist * var1) + -83.0f;
gPlayerStatus.position.y = get_variable(NULL, script->varTable[10]) + get_variable(NULL, script->varTable[3]);
var1 = cos_deg(clamped);
gPlayerStatus.position.z = 87.0f - (dist * var1);
return ApiStatus_DONE2;
}
ApiStatus N(func_802410B4_C9EFD4)(ScriptInstance *script, s32 isInitialCall) {
Npc *npc = get_npc_by_index(0);
f32 temp_f20 = get_variable(NULL, script->varTable[2]);
f32 dist = dist2D(-83.0f, 87.0f, script->varTable[12], script->varTable[14]);
f32 clamped = clamp_angle(atan2(-83.0f, 87.0f, script->varTable[12], script->varTable[14]) - temp_f20);
temp_f20 = sin_deg(clamped);
npc->pos.x = (dist * temp_f20) + -83.0f;
npc->pos.y = get_variable(NULL, script->varTable[13]) + get_variable(NULL, script->varTable[3]);
temp_f20 = cos_deg(clamped);
npc->pos.z = 87.0f - (dist * temp_f20);
return ApiStatus_DONE2;
}
#include "common/UnkFloatFunc.inc.c"
#include "world/common/SyncStatusMenu.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_00/C9EE30", func_8024139C_C9F2BC);
ApiStatus N(func_8024139C_C9F2BC)(ScriptInstance *script, s32 isInitialCall) {
increment_status_menu_disabled();
return ApiStatus_DONE2;
}
INCLUDE_ASM(s32, "world/area_flo/flo_00/C9EE30", func_802413BC_C9F2DC);
ApiStatus N(func_802413BC_C9F2DC)(ScriptInstance *script, s32 isInitialCall) {
decrement_status_menu_disabled();
return ApiStatus_DONE2;
}

View File

@ -2,3 +2,29 @@
#include "map.h"
#define NAMESPACE flo_00
ApiStatus N(SyncStatusMenu)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(PostChapter6StatUpdate)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFloatFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240000_C9DF20)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240BD4_C9EAF4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240ED0_C9EDF0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240F10_C9EE30)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240F80_C9EEA0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802410B4_C9EFD4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802411EC_C9F10C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024137C_C9F29C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024139C_C9F2BC)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802413BC_C9F2DC)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_80245DE4);
extern NpcGroupList N(npcGroupList_80246834);
extern Script N(80242998);
extern Script N(80242FCC);
extern Script N(80245EB8);
extern Script N(80247BCC);
extern Script N(8024834C);
extern Script N(80248E30);
extern Script N(80248F48);
extern Script N(main);
extern Script N(makeEntities);

View File

@ -1,3 +1,8 @@
#include "flo_03.h"
INCLUDE_ASM(s32, "world/area_flo/flo_03/CA72A0", func_80240000_CA72A0);
void func_80072950();
ApiStatus N(func_80240000_CA72A0)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(1, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

File diff suppressed because it is too large Load Diff

View File

@ -2,3 +2,16 @@
#include "map.h"
#define NAMESPACE flo_03
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240000_CA72A0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240158_CA73F8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240460_CA7700)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_8024442C);
extern Script N(80240FFC);
extern Script N(80241EF4);
extern Script N(80244E54);
extern Script N(80244ED0);
extern Script N(main);
extern Script N(makeEntities);

View File

@ -6,4 +6,30 @@
#include "world/common/SpawnSunEffect.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_07/CAC1F0", func_80240344_CAC534);
typedef struct N(unk_effect) {
char unk_00[0x38];
s32 unk_38;
s32 unk_3C;
s32 unk_40;
char unk_44[0x4];
s32 unk_48;
s32 unk_4C;
s32 unk_50;
} N(unk_effect);
typedef struct N(temp) {
char unk_00[0xC];
N(unk_effect)* unk_0C;
} N(temp);
ApiStatus N(func_80240344_CAC534)(ScriptInstance* script, s32 isInitialCall) {
N(temp)* effect = func_80072350(3, -272.0f, 80.0f, 20.0f, 200.0f, 120.0f, 4.0f, 8, 0);
effect->unk_0C->unk_38 = 0xF0;
effect->unk_0C->unk_3C = 0xF0;
effect->unk_0C->unk_40 = 0xF0;
effect->unk_0C->unk_48 = 0xE6;
effect->unk_0C->unk_4C = 0xE6;
effect->unk_0C->unk_50 = 0xF0;
return ApiStatus_DONE2;
}

View File

@ -1,30 +1,512 @@
#include "flo_07.h"
#include "message_ids.h"
#include "sprite/npc/posie.h"
enum {
NPC_POSIE,
};
EntryList N(entryList) = {
{ 375.0f, 0.0f, 0.0f, 270.0f },
{ 325.0f, 0.0f, 0.0f, 270.0f },
};
MapConfig N(config) = {
.main = &N(main),
.entryList = &N(entryList),
.entryCount = ENTRY_COUNT(N(entryList)),
.background = &gBackgroundImage,
.tattle = { MSG_flo_07_tattle },
};
Script N(802407A0) = SCRIPT({
GetEntryID(SI_VAR(0));
if (SI_VAR(0) == 1) {
SetMusicTrack(0, SONG_SUNSHINE_RETURNS, 0, 8);
} else {
match STORY_PROGRESS {
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
SetMusicTrack(0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8);
}
else {
SetMusicTrack(0, SONG_FLOWER_FIELDS_SUNNY, 0, 8);
}
}
}
PlaySound(0x80000021);
});
Script N(8024086C) = SCRIPT({
func_802D5FF8(137, 1);
});
Script N(80240890) = SCRIPT({
FadeOutMusic(0, 250);
sleep 10;
func_802D5FD8();
});
static s32 N(pad_8CC) = {
0x00000000,
};
Script N(updateTexturePan_802408D0) = SCRIPT({
group 0;
if (SI_VAR(5) == 1) {
if (SI_VAR(6) == 1) {
if (SI_VAR(7) == 1) {
if (SI_VAR(8) == 1) {
N(UnkTexturePanFunc)();
return;
}
}
}
}
N(UnkTexturePanFunc2)();
});
Script N(8024096C) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(exitWalk_80240C18) = EXIT_WALK_SCRIPT(60, 0, "flo_25", 1);
Script N(80240C74) = SCRIPT({
bind N(exitWalk_80240C18) to TRIGGER_FLOOR_ABOVE 0;
});
Script N(main) = SCRIPT({
WORLD_LOCATION = LOCATION_FLOWER_FIELDS;
SetSpriteShading(-1);
SetCamLeadPlayer(0, 0);
SetCamPerspective(0, 3, 25, 16, 4096);
SetCamBGColor(0, 0, 0, 0);
SetCamEnabled(0, 1);
SI_AREA_FLAG(6) = 0;
MakeNpcs(0, N(npcGroupList_80242B0C));
await N(802428C4);
ModifyColliderFlags(3, 6, 0x00000006);
SI_VAR(0) = 297;
SI_VAR(1) = -95;
SI_VAR(2) = 383;
SI_VAR(3) = -65;
SI_VAR(4) = 0;
spawn N(8024096C);
SI_VAR(0) = 293;
SI_VAR(1) = 71;
SI_VAR(2) = 378;
SI_VAR(3) = 113;
SI_VAR(4) = 0;
spawn N(8024096C);
SI_VAR(0) = 21;
SI_VAR(1) = -346;
SI_VAR(2) = 147;
SI_VAR(3) = -242;
SI_VAR(4) = 20;
spawn N(8024096C);
SI_VAR(0) = -350;
SI_VAR(1) = -190;
SI_VAR(2) = -81;
SI_VAR(3) = -106;
SI_VAR(4) = 0;
spawn N(8024096C);
SI_VAR(0) = -380;
SI_VAR(1) = 85;
SI_VAR(2) = -95;
SI_VAR(3) = 150;
SI_VAR(4) = 0;
spawn N(8024096C);
EnableTexPanning(51, 1);
EnableTexPanning(49, 1);
EnableTexPanning(50, 1);
spawn {
SI_VAR(0) = 2;
SI_VAR(1) = -100;
SI_VAR(2) = 100;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 1;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_802408D0);
}
spawn {
SI_VAR(0) = 3;
SI_VAR(1) = 0;
SI_VAR(2) = -1200;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 0;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_802408D0);
}
GetEntryID(SI_VAR(0));
if (SI_VAR(0) == 1) {
spawn N(80241C14);
} else {
ModifyColliderFlags(0, 1, 0x7FFFFE00);
SI_VAR(0) = N(80240C74);
spawn EnterWalk;
spawn N(802424F4);
}
await N(802407A0);
if (STORY_PROGRESS >= STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) {
N(SpawnSunEffect)();
}
N(func_80240344_CAC534)();
});
static s32 N(pad_1214)[] = {
0x00000000, 0x00000000, 0x00000000,
};
NpcSettings N(npcSettings_80241220) = {
.height = 56,
.radius = 40,
.level = 99,
};
#include "world/common/foliage.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_07/CAC5D0", func_8024061C_CAC80C);
/*
ApiStatus N(func_8024061C_CAC80C)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80241C68_BE09F8);
s32 i;
s32* test;
s32** N(D_80241BB0_CADDA0) = NULL;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
Script N(80241BB4) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 0);
return;
});
Script N(80241BE4) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 16);
return;
});
Script N(80241C14) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePlayerPhysics(TRUE);
GetNpcPos(NPC_POSIE, SI_VAR(0), SI_VAR(1), SI_VAR(2));
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(0) += 30;
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamDistance(0, 300);
SetCamPitch(0, 11.0, -11.0);
SetCamSpeed(0, 90.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 20;
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x00C5));
sleep 10;
GotoMap("flo_10", 1);
sleep 100;
});
Script N(80241D6C) = SCRIPT({
0:
ShakeCam(0, 0, 1, 1.0);
sleep 1;
goto 0;
});
Script N(80241DBC) = SCRIPT({
if (SI_AREA_FLAG(6) == 1) {
return;
}
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0068));
spawn {
SetCamDistance(0, 300);
SetCamPitch(0, 18.0, -7.5);
SetCamSpeed(0, 0.5);
PanToTarget(0, 0, 1);
}
PlaySound(0x8000006B);
SI_MAP_VAR(0) = spawn N(80241D6C);
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_6), NPC_ANIM(posie, Palette_00, Anim_6), 0, MESSAGE_ID(0x11, 0x0069));
kill SI_MAP_VAR(0);
SetCamDistance(0, 350);
SetCamPitch(0, 18.0, -7.5);
SetCamSpeed(0, 8.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 10;
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(0) -= SI_VAR(2);
if (SI_VAR(0) < -250) {
MakeItemEntity(ITEM_CRYSTAL_BERRY, -225, 100, -25, 13, SI_SAVE_FLAG(1374));
} else {
MakeItemEntity(ITEM_CRYSTAL_BERRY, -265, 100, 54, 13, SI_SAVE_FLAG(1374));
SI_SAVE_FLAG(1396) = 1;
}
PlaySound(0x7BC);
func_802D62E4(956);
SI_AREA_FLAG(6) = 1;
sleep 20;
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x006A));
STORY_PROGRESS = STORY_CH6_GOT_CRYSTAL_BERRY;
});
Script N(interact_80242044) = SCRIPT({
await N(8024086C);
NpcFacePlayer(NPC_SELF, 1);
match STORY_PROGRESS {
< STORY_CH6_GOT_MAGICAL_BEAN {
if (SI_AREA_FLAG(5) == 0) {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0070));
SI_AREA_FLAG(5) = 1;
} else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0071));
}
}
< STORY_CH6_GOT_FERTILE_SOIL {
AdjustCam(0, 4.0, 0, 350.0, 18.0, -7.5);
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0065));
SetNpcAnimation(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_5));
sleep 20;
SetNpcAnimation(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_0));
SI_VAR(0) = 89;
SI_VAR(1) = 1;
await N(80241BB4);
AddKeyItem(ITEM_FERTILE_SOIL);
STORY_PROGRESS = STORY_CH6_GOT_FERTILE_SOIL;
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0066));
if (SI_SAVE_FLAG(1379) == 1) {
await N(80241DBC);
}
ResetCam(0, 4.0);
}
< STORY_CH6_GOT_CRYSTAL_BERRY {
if (SI_SAVE_FLAG(1379) == 1) {
if (SI_AREA_FLAG(6) == 0) {
AdjustCam(0, 4.0, 0, 350.0, 18.0, -7.5);
await N(80241DBC);
ResetCam(0, 4.0);
} else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0072));
}
} else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0072));
}
}
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
if (SI_SAVE_FLAG(1374) == 0) {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0072));
} else {
if (STORY_PROGRESS < STORY_CH6_GOT_WATER_STONE) {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0073));
} else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0074));
}
ContinueSpeech(-1, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0075));
}
}
< STORY_CH6_RETURNED_TO_TOAD_TOWN {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0076));
}
else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0077));
}
}
await N(80240890);
});
Script N(init_80242428) = SCRIPT({
if (STORY_PROGRESS == STORY_CH6_GOT_CRYSTAL_BERRY) {
if (SI_SAVE_FLAG(1374) == 0) {
if (SI_SAVE_FLAG(1396) == 0) {
MakeItemEntity(ITEM_CRYSTAL_BERRY, -225, 0, -25, 17, SI_SAVE_FLAG(1374));
} else {
MakeItemEntity(ITEM_CRYSTAL_BERRY, -265, 0, 54, 17, SI_SAVE_FLAG(1374));
}
}
}
SI_AREA_FLAG(5) = 0;
BindNpcInteract(NPC_SELF, N(interact_80242044));
});
Script N(802424F4) = SCRIPT({
if (SI_AREA_VAR(3) != 0) {
DisablePlayerInput(TRUE);
sleep 10;
if (SI_AREA_VAR(3) < 5) {
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x006E));
GetPlayerPos(SI_VAR(1), SI_VAR(2), SI_VAR(3));
PlayerMoveTo(410, SI_VAR(3), 10);
SI_AREA_VAR(3) += 1;
} else {
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_2), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x006F));
SI_AREA_VAR(3) = 0;
}
DisablePlayerInput(FALSE);
}
});
const char N(flo_25_name_hack)[];
Script N(tree1_Callback) = SCRIPT({
DisablePlayerInput(TRUE);
if (STORY_PROGRESS < STORY_CH6_GOT_CRYSTAL_BERRY) {
NpcFacePlayer(NPC_POSIE, 1);
sleep 10;
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_4), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0067));
if (STORY_PROGRESS == STORY_CH6_GOT_FERTILE_SOIL) {
if (SI_SAVE_FLAG(1379) == 1) {
UseSettingsFrom(0, -250, 0, 0);
SetPanTarget(0, -250, 0, 0);
SetCamDistance(0, 350);
PanToTarget(0, 0, 1);
await N(80241DBC);
ResetCam(0, 4.0);
}
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
if (SI_SAVE_FLAG(1374) == 0) {
NpcFacePlayer(NPC_POSIE, 1);
sleep 10;
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_4), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0067));
} else {
SI_AREA_VAR(2) += 1;
match SI_AREA_VAR(2) {
< 2 {
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_3), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x006B));
}
< 5 {
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_3), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x006C));
}
>= 5 {
SpeakToPlayer(NPC_POSIE, NPC_ANIM(posie, Palette_00, Anim_3), NPC_ANIM(posie, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x006D));
SI_AREA_VAR(3) = 1;
GotoMap(N(flo_25_name_hack), 1);
sleep 100;
}
}
}
ptr = &N(D_80241C68_BE09F8);
heap_free(*ptr);
*ptr = NULL;
}
ResetCam(0, 4.0);
DisablePlayerInput(FALSE);
});
FoliageModelList N(tree1_Leaves) = {
.count = 3,
.models = { 19, 20, 21 }
};
FoliageModelList N(tree1_Trunk) = {
.count = 1,
.models = { 18 }
};
ShakeTreeConfig N(tree1) = {
.leaves = &N(tree1_Leaves),
.trunk = &N(tree1_Trunk),
.callback = &N(tree1_Callback),
};
Vec4f N(triggerCoord_802428B4) = { -309.0f, 0.0f, 31.0f, 0.0f };
Script N(802428C4) = SCRIPT({
SI_VAR(0) = N(tree1);
bind N(shakeTree) to TRIGGER_WALL_HAMMER 4;
bind N(shakeTree) to TRIGGER_POINT_BOMB N(triggerCoord_802428B4);
});
StaticNpc N(npcGroup_8024291C) = {
.id = NPC_POSIE,
.settings = &N(npcSettings_80241220),
.pos = { -260.0f, 0.0f, 0.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT,
.init = &N(init_80242428),
.yaw = 90,
.dropFlags = 0x80,
.heartDrops = NO_DROPS,
.flowerDrops = NO_DROPS,
.animations = {
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
NPC_ANIM(posie, Palette_00, Anim_1),
},
.tattle = MESSAGE_ID(0x1A, 0x00DE),
};
NpcGroupList N(npcGroupList_80242B0C) = {
NPC_GROUP(N(npcGroup_8024291C), BATTLE_ID(0, 0, 0, 0)),
{},
};
ApiStatus N(func_8024061C_CAC80C)(ScriptInstance* script, s32 isInitialCall) {
s32 i;
if (N(D_80241BB0_CADDA0) == NULL) {
N(D_80241BB0_CADDA0) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_80241BB0_CADDA0)[i] = script->varTable[i];
}
} else {
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_80241BB0_CADDA0)[i];
}
heap_free(N(D_80241BB0_CADDA0));
N(D_80241BB0_CADDA0) = NULL;
}
return ApiStatus_DONE2;
}
*/
#include "world/common/GetItemName.inc.c"
const char N(flo_25_name_hack)[] = "flo_25";

View File

@ -2,3 +2,15 @@
#include "map.h"
#define NAMESPACE flo_07
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SpawnSunEffect)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkTexturePanFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkTexturePanFunc2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240344_CAC534)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_80242B0C);
extern Script N(80241C14);
extern Script N(802424F4);
extern Script N(802428C4);
extern Script N(main);

View File

@ -1,87 +1,161 @@
#include "flo_08.h"
extern s32 D_800F7F00[];
extern s32 D_800F7F40[];
extern s32 D_8008EF20[11][4];
#include "world/common/SetOverrideFlags_40.inc.c"
#include "world/common/UnkFunc17.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_8024003C_CAED7C);
/*
ApiStatus N(func_8024003C_CAED7C)(ScriptInstance* script, s32 isInitialCall) {
func_800EB168(get_variable(script, *script->ptrReadPos));
func_802E5690(get_variable(script, *script->ptrReadPos));
return ApiStatus_DONE2;
}
*/
#include "world/common/UnkFunc18.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_802400D4_CAEE14);
#ifdef NON_MATCHING
typedef struct {
s32 unk_00[8];
char unk_20[0x64];
s32 unk_84[8];
char unk_A4[0x64];
s32 unk_108[8];
char unk_128[0x64];
s32 unk_18C[8];
char unk_1AC[0x64];
s32 unk_210[8];
char unk_230[0x64];
s32 unk_294[8];
char unk_2B4[0x64];
s32 unk_318;
char unk_31C[8];
s32 unk_324;
s32 unk_328;
s16 unk_32C;
} N(UnkStruct);
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_80240120_CAEE60);
/*
ApiStatus N(func_80240120_CAEE60)(ScriptInstance *script, s32 isInitialCall) {
ApiStatus N(func_802401CC_CAEF0C)(ScriptInstance *script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
N(UnkStruct)* ptr;
s32 i;
s16 var = script->varTable[12] >= 0;
s32 partnerLevel;
s32 var, partnerActiveCount;
s32 idx;
script->varTable[0] = -1;
if (isInitialCall) {
script->functionTemp[2].s = heap_malloc(0x330);
ptr = script->functionTemp[2].s;
for (i = 1; i < 12; i++) {
if (playerData->partners[i].enabled && N(func_802424A4_C389D4)(i, var) != -1) {
script->varTable[0] = 1;
break;
partnerActiveCount = 0;
var = script->varTable[12] >= 0;
for (i = 0; i < 8; i++) {
idx = N(D_80241FB8_CB0CF8)[i];
if (playerData->partners[idx].enabled) {
ptr->unk_108[i] = idx;
ptr->unk_84[i] = *D_8008EF20[idx];
partnerLevel = N(UnkFunc37)(idx, var);
if (partnerLevel >= 0) {
ptr->unk_00[i] = D_800F7F00[idx];
ptr->unk_18C[i] = 1;
ptr->unk_294[i] = N(D_80241FC8_CB0D08)[i][partnerLevel];
} else {
ptr->unk_00[i] = D_800F7F40[idx];
ptr->unk_18C[i] = 0;
ptr->unk_294[i] = N(D_80241FB0_CB0CF0)[var];
}
ptr->unk_210[i] = playerData->partners[idx].level;
partnerActiveCount++;
}
}
ptr->unk_318 = 4;
ptr->unk_324 = partnerActiveCount;
ptr->unk_328 = 0;
func_800F4E40(ptr);
script->functionTemp[0].s = 0;
}
ptr = script->functionTemp[2].s;
if (script->functionTemp[0].s == 0) {
script->functionTemp[1].s = ptr->unk_32C;
if (script->functionTemp[1].s != 0) {
func_800F13B0();
} else {
return ApiStatus_BLOCK;
}
}
script->functionTemp[0].s++;
if (script->functionTemp[0].s < 15) {
return ApiStatus_BLOCK;
}
func_800F1538();
if (script->functionTemp[1].s != 0xFF) {
script->varTable[0] = D_8008EF20[ptr->unk_108[script->functionTemp[1].s - 1]][0];
script->varTable[1] = ptr->unk_108[script->functionTemp[1].s - 1];
} else {
script->varTable[0] = -1;
}
heap_free(script->functionTemp[2].s);
return ApiStatus_DONE2;
}
*/
#else
INCLUDE_ASM(ApiStatus, "world/area_flo/flo_08/CAED40", flo_08_func_802401CC_CAEF0C, ScriptInstance *script, s32 isInitialCall);
#endif
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_802401CC_CAEF0C);
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_8024041C_CAF15C);
/*
ApiStatus N(func_8024041C_CAF15C)(ScriptInstance* script, s32 isInitialCall) {
func_800EB168(get_variable(script, *script->ptrReadPos));
return ApiStatus_DONE2;
}
*/
#include "world/common/UnkFunc19.inc.c"
#include "world/common/UnkFunc20.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_80240510_CAF250);
/*
ApiStatus N(func_80240510_CAF250)(ScriptInstance *script, s32 isInitialCall) {
Effect* effect = get_variable(script, *script->ptrReadPos);
effect->flags |= 0x10;
return ApiStatus_DONE2;
}
*/
#include "world/common/UnkFunc39.inc.c"
#include "world/common/UnkFunc21.inc.c"
#include "world/common/UnkFunc22.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_80240600_CAF340);
/*
typedef struct {
s32 unk_00;
s32 unk_04;
Effect* unk_08[3];
f32 unk_14[3];
f32 unk_20[3];
f32 unk_2C[3];
f32 unk_38[3];
f32 unk_44[3];
f32 unk_50[3];
Entity* unk_5C;
s32 unk_60;
s32 unk_64;
} N(UserData);
ApiStatus N(func_80240600_CAF340)(ScriptInstance *script, s32 isInitialCall) {
Bytecode *args = script->ptrReadPos;
Npc* npc = get_npc_safe(-4);
f32 sinTheta, cosTheta;
s32 i;
f32 var;
UserData* userDataPtr;
UserData* scriptPtr;
N(UserData)* userDataPtr;
N(UserData)* scriptPtr;
f32 save, save2;
sin_cos_deg(gCameras[gCurrentCameraID].currentYaw, &sinTheta, &cosTheta);
if (isInitialCall) {
script->userData = (UserData*)general_heap_malloc(0x68);
scriptPtr = (UserData*)script->userData;
script->userData = (N(UserData)*)general_heap_malloc(0x68);
scriptPtr = (N(UserData)*)script->userData;
scriptPtr->unk_5C = get_entity_by_index(get_variable(script, *args));
@ -104,7 +178,7 @@ ApiStatus N(func_80240600_CAF340)(ScriptInstance *script, s32 isInitialCall) {
userDataPtr = scriptPtr;
for (i = 0, save = 50.0f; i < 3; i++) {
var = 0;
add_vec2D_polar(&var, &scriptPtr->unk_44[i], save, *(N(D_80243D88_C3A2B8) + i)); //*(dataPtr++));
add_vec2D_polar(&var, &scriptPtr->unk_44[i], save, N(D_80242008_CB0D48)[i]);
userDataPtr->unk_38[i] = cosTheta * var;
userDataPtr->unk_50[i] = sinTheta * var;
userDataPtr->unk_38[i] = npc->pos.x - (scriptPtr->unk_5C->position.x + userDataPtr->unk_38[i]);
@ -113,7 +187,7 @@ ApiStatus N(func_80240600_CAF340)(ScriptInstance *script, s32 isInitialCall) {
}
}
scriptPtr = (UserData*)script->userData;
scriptPtr = (N(UserData)*)script->userData;
switch (scriptPtr->unk_00) {
case 0:
save = update_lerp(5, 0.0f, 50.0f, scriptPtr->unk_60, 0x14);
@ -121,7 +195,7 @@ ApiStatus N(func_80240600_CAF340)(ScriptInstance *script, s32 isInitialCall) {
for (i = 0; i < 3; i++) {
scriptPtr->unk_20[i] = save2;
var = save2;
add_vec2D_polar(&var, &scriptPtr->unk_20[i], save, *(N(D_80243D88_C3A2B8) + i));
add_vec2D_polar(&var, &scriptPtr->unk_20[i], save, N(D_80242008_CB0D48)[i]);
scriptPtr->unk_14[i] = cosTheta * var;
scriptPtr->unk_2C[i] = sinTheta * var;
}
@ -139,7 +213,7 @@ ApiStatus N(func_80240600_CAF340)(ScriptInstance *script, s32 isInitialCall) {
for (i = 0; i < 3; i++) {
scriptPtr->unk_20[i] = save2;
var = save2;
add_vec2D_polar(&var, &scriptPtr->unk_20[i], save, *(N(D_80243D88_C3A2B8) + i));
add_vec2D_polar(&var, &scriptPtr->unk_20[i], save, N(D_80242008_CB0D48)[i]);
scriptPtr->unk_14[i] = cosTheta * var;
scriptPtr->unk_2C[i] = sinTheta * var;
}
@ -193,10 +267,9 @@ ApiStatus N(func_80240600_CAF340)(ScriptInstance *script, s32 isInitialCall) {
return ApiStatus_BLOCK;
}
*/
#include "world/common/UnkFunc23.inc.c"
#include "world/common/UnkPartnerPosFuncs.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAED40", func_80240D08_CAFA48);
#include "world/common/UnkFunc40.inc.c"

View File

@ -1,3 +1,8 @@
#include "flo_08.h"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CAFA80", func_80240D40_CAFA80);
void func_80072950();
ApiStatus N(func_80240D40_CAFA80)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(1, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
#include "flo_08.h"
INCLUDE_ASM(s32, "world/area_flo/flo_08/CB0B80", func_80241E40_CB0B80);
#include "world/common/UnkFunc43.inc.c"

View File

@ -2,3 +2,41 @@
#include "map.h"
#define NAMESPACE flo_08
ApiStatus N(AddPlayerHandsOffset)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetOverrideFlags_40)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc17)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc18)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc19)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc20)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc21)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc22)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc23)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkPartnerPosFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkPartnerPosFunc2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024003C_CAED7C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc38)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802401CC_CAEF0C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024041C_CAF15C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc39)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240600_CAF340)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc40)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240D40_CAFA80)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024150C_CB024C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241970_CB06B0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802419C4_CB0704)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802419FC_CB073C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241A98_CB07D8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241B5C_CB089C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241BCC_CB090C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc43)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_80244EC4);
extern Script N(80245914);
extern Script N(80245F5C);
extern Script N(main);
extern s32 N(D_80241FB0_CB0CF0)[];
extern s16 N(D_80241FB8_CB0CF8)[];
extern s32 N(D_80241FC8_CB0D08)[8][2];
extern f32 N(D_80242008_CB0D48)[3];

View File

@ -1,3 +1,8 @@
#include "flo_09.h"
INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5000", func_80240000_CB5000);
void func_80072950();
ApiStatus N(func_80240000_CB5000)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(1, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

View File

@ -1,3 +1,3 @@
#include "flo_09.h"
INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5040", func_80240040_CB5040);
#include "world/common/UnkFunc43.inc.c"

View File

@ -1,4 +1,672 @@
#include "flo_09.h"
#include "message_ids.h"
#include "sprite/npc/bzzap.h"
#include "sprite/npc/dayzee.h"
enum {
NPC_DAYZEE0,
NPC_DAYZEE1,
NPC_BZZAP0,
NPC_BZZAP1,
};
EntryList N(entryList) = {
{ -520.0f, 0.0f, 0.0f, 90.0f },
{ 520.0f, 0.0f, 0.0f, 270.0f },
};
MapConfig N(config) = {
.main = &N(main),
.entryList = &N(entryList),
.entryCount = ENTRY_COUNT(N(entryList)),
.background = &gBackgroundImage,
.tattle = { MSG_flo_09_tattle },
};
Script N(80241880) = SCRIPT({
match STORY_PROGRESS {
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
SetMusicTrack(0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8);
}
else {
SetMusicTrack(0, SONG_FLOWER_FIELDS_SUNNY, 0, 8);
}
}
});
Script N(802418F0) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(exitWalk_80241B9C) = EXIT_WALK_SCRIPT(60, 0, "flo_00", 5);
Script N(exitWalk_80241BF8) = EXIT_WALK_SCRIPT(60, 1, "flo_03", 0);
Script N(80241C54) = SCRIPT({
bind N(exitWalk_80241B9C) to TRIGGER_FLOOR_ABOVE 0;
bind N(exitWalk_80241BF8) to TRIGGER_FLOOR_ABOVE 4;
});
Script N(main) = SCRIPT({
WORLD_LOCATION = LOCATION_FLOWER_FIELDS;
SetSpriteShading(-1);
SetCamPerspective(0, 3, 25, 16, 4096);
SetCamBGColor(0, 0, 0, 0);
SetCamEnabled(0, 1);
MakeNpcs(0, N(npcGroupList_8024414C));
spawn N(802425DC);
spawn N(802434A8);
ModifyColliderFlags(3, 9, 0x00000006);
SI_VAR(0) = -511;
SI_VAR(1) = -4;
SI_VAR(2) = -319;
SI_VAR(3) = 10;
SI_VAR(4) = 0;
spawn N(802418F0);
SI_VAR(0) = -302;
SI_VAR(1) = 77;
SI_VAR(2) = -32;
SI_VAR(3) = 116;
SI_VAR(4) = 0;
spawn N(802418F0);
SI_VAR(0) = 51;
SI_VAR(1) = 18;
SI_VAR(2) = 141;
SI_VAR(3) = 127;
SI_VAR(4) = 0;
spawn N(802418F0);
SI_VAR(0) = 234;
SI_VAR(1) = 38;
SI_VAR(2) = 502;
SI_VAR(3) = 98;
SI_VAR(4) = 0;
spawn N(802418F0);
SI_VAR(0) = -525;
SI_VAR(1) = -163;
SI_VAR(2) = -400;
SI_VAR(3) = -80;
SI_VAR(4) = 60;
spawn N(802418F0);
SI_VAR(0) = -346;
SI_VAR(1) = -148;
SI_VAR(2) = 517;
SI_VAR(3) = -91;
SI_VAR(4) = 60;
spawn N(802418F0);
ModifyColliderFlags(0, 1, 0x7FFFFE00);
ModifyColliderFlags(0, 5, 0x7FFFFE00);
SI_VAR(0) = N(80241C54);
spawn EnterWalk;
await N(80241880);
if (STORY_PROGRESS >= STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) {
N(func_80240000_CB5000)();
}
});
static s32 N(pad_2004)[] = {
0x00000000, 0x00000000, 0x00000000,
};
Script N(80242010) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(802422BC) = SCRIPT({
SI_VAR(9) = SI_VAR(6);
SI_VAR(8) = SI_VAR(5);
SI_VAR(7) = SI_VAR(4);
SI_VAR(6) = SI_VAR(3);
SI_VAR(5) = SI_VAR(2);
SI_VAR(4) = SI_VAR(1);
SI_VAR(3) = SI_VAR(0);
EnableModel(SI_VAR(6), 0);
0:
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
N(UnkFunc43)();
if (SI_VAR(0) == 0) {
sleep 1;
goto 0;
}
spawn {
sleep 5;
EnableModel(SI_VAR(6), 1);
}
if (SI_VAR(10) != 0) {
spawn {
sleep 5;
SI_VAR(0) = SI_VAR(3);
SI_VAR(1) = SI_VAR(4);
SI_VAR(2) = SI_VAR(5);
SI_VAR(1) += 10;
SI_VAR(2) += 8;
PlayEffect(0x11, 4, SI_VAR(0), SI_VAR(1), SI_VAR(2), 15, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 15;
SI_VAR(1) -= 10;
MakeItemEntity(SI_VAR(10), SI_VAR(0), SI_VAR(1), SI_VAR(2), 14, 0);
}
}
spawn {
sleep 10;
PlaySoundAt(0xF8, 0, SI_VAR(3), SI_VAR(4), SI_VAR(5));
}
MakeLerp(0, 180, 20, 2);
1:
UpdateLerp();
RotateModel(SI_VAR(8), SI_VAR(0), 1, 0, 0);
RotateModel(SI_VAR(9), SI_VAR(0), 1, 0, 0);
if (SI_VAR(1) == 1) {
sleep 1;
goto 1;
}
EnableModel(SI_VAR(7), 0);
});
Script N(802425DC) = SCRIPT({
GetModelCenter(69);
SI_VAR(3) = 69;
SI_VAR(4) = 70;
SI_VAR(5) = 71;
SI_VAR(6) = 72;
SI_VAR(10) = 0;
spawn N(802422BC);
GetModelCenter(75);
SI_VAR(3) = 75;
SI_VAR(4) = 76;
SI_VAR(5) = 77;
SI_VAR(6) = 78;
SI_VAR(10) = 174;
spawn N(802422BC);
GetModelCenter(83);
SI_VAR(3) = 83;
SI_VAR(4) = 84;
SI_VAR(5) = 85;
SI_VAR(6) = 86;
SI_VAR(10) = 0;
spawn N(802422BC);
GetModelCenter(89);
SI_VAR(3) = 89;
SI_VAR(4) = 90;
SI_VAR(5) = 91;
SI_VAR(6) = 92;
SI_VAR(10) = 0;
spawn N(802422BC);
GetModelCenter(97);
SI_VAR(3) = 97;
SI_VAR(4) = 98;
SI_VAR(5) = 99;
SI_VAR(6) = 100;
SI_VAR(10) = 0;
spawn N(802422BC);
GetModelCenter(103);
SI_VAR(3) = 103;
SI_VAR(4) = 104;
SI_VAR(5) = 105;
SI_VAR(6) = 106;
SI_VAR(10) = 0;
spawn N(802422BC);
});
static s32 N(pad_2874)[] = {
0x00000000, 0x00000000, 0x00000000,
};
#include "world/common/foliage.inc.c"
Script N(802431E4) = SCRIPT({
GetNpcPos(NPC_BZZAP1, SI_VAR(0), SI_VAR(1), SI_VAR(2));
if (SI_VAR(1) < 0) {
GetModelCenter(SI_VAR(9));
SI_VAR(2) += 35;
SetNpcPos(NPC_BZZAP1, SI_VAR(0), SI_VAR(1), SI_VAR(2));
}
});
Script N(tree1_Callback) = SCRIPT({
if (SI_SAVE_FLAG(1382) == 0) {
if (SI_AREA_VAR(5) == 1) {
MakeItemEntity(ITEM_HAPPY_FLOWER_B, -250, 100, 0, 13, SI_SAVE_FLAG(1382));
} else {
SI_VAR(9) = 14;
spawn N(802431E4);
}
SI_AREA_VAR(4) = 0;
SI_AREA_VAR(5) = 0;
}
});
Script N(tree2_Callback) = SCRIPT({
if (SI_SAVE_FLAG(1382) == 0) {
SI_AREA_VAR(4) = 1;
SI_AREA_VAR(5) = 0;
}
});
Script N(tree3_Callback) = SCRIPT({
if (SI_SAVE_FLAG(1382) == 0) {
if (SI_AREA_VAR(4) == 1) {
if (SI_AREA_VAR(5) == 0) {
SI_AREA_VAR(5) = 1;
return;
}
}
SI_VAR(9) = 22;
spawn N(802431E4);
SI_AREA_VAR(4) = 0;
SI_AREA_VAR(5) = 0;
}
});
FoliageModelList N(tree1_Leaves) = {
.count = 2,
.models = { 15, 16 }
};
FoliageModelList N(tree1_Trunk) = {
.count = 1,
.models = { 14 }
};
ShakeTreeConfig N(tree1) = {
.leaves = &N(tree1_Leaves),
.trunk = &N(tree1_Trunk),
.callback = &N(tree1_Callback),
};
Vec4f N(triggerCoord_80243428) = { -200.0f, 0.0f, 1.0f, 0.0f };
FoliageModelList N(tree2_Leaves) = {
.count = 2,
.models = { 19, 20 }
};
FoliageModelList N(tree2_Trunk) = {
.count = 1,
.models = { 18 }
};
ShakeTreeConfig N(tree2) = {
.leaves = &N(tree2_Leaves),
.trunk = &N(tree2_Trunk),
.callback = &N(tree2_Callback),
};
Vec4f N(triggerCoord_80243460) = { 0.0f, 0.0f, 1.0f, 0.0f };
FoliageModelList N(tree3_Leaves) = {
.count = 2,
.models = { 23, 24 }
};
FoliageModelList N(tree3_Trunk) = {
.count = 1,
.models = { 22 }
};
ShakeTreeConfig N(tree3) = {
.leaves = &N(tree3_Leaves),
.trunk = &N(tree3_Trunk),
.callback = &N(tree3_Callback),
};
Vec4f N(triggerCoord_80243498) = { 200.0f, 0.0f, 1.0f, 0.0f };
Script N(802434A8) = SCRIPT({
SI_AREA_VAR(4) = 0;
SI_AREA_VAR(5) = 0;
SI_VAR(0) = N(tree1);
bind N(shakeTree) to TRIGGER_WALL_HAMMER 15;
bind N(shakeTree) to TRIGGER_POINT_BOMB N(triggerCoord_80243428);
SI_VAR(0) = N(tree2);
bind N(shakeTree) to TRIGGER_WALL_HAMMER 16;
bind N(shakeTree) to TRIGGER_POINT_BOMB N(triggerCoord_80243460);
SI_VAR(0) = N(tree3);
bind N(shakeTree) to TRIGGER_WALL_HAMMER 17;
bind N(shakeTree) to TRIGGER_POINT_BOMB N(triggerCoord_80243498);
});
NpcAISettings N(npcAISettings_802435B0) = {
.moveSpeed = 1.0f,
.moveTime = 500,
.waitTime = 10,
.alertRadius = 50.0f,
.unk_10 = { .f = 30.0f },
.unk_14 = 3,
.chaseSpeed = 3.5f,
.unk_1C = { .s = 40 },
.unk_20 = 3,
.chaseRadius = 100.0f,
.unk_28 = { .f = 30.0f },
.unk_2C = 1,
};
Script N(npcAI_802435E0) = SCRIPT({
DoBasicAI(N(npcAISettings_802435B0));
});
NpcSettings N(npcSettings_80243600) = {
.height = 30,
.radius = 24,
.ai = &N(npcAI_802435E0),
.onHit = EnemyNpcHit,
.onDefeat = EnemyNpcDefeat,
.level = 19,
};
f32 N(D_8024362C_CB862C)[] = {
4.5f, 3.5f, 2.6f, 2.0f,
1.5f, 20.0f,
};
NpcAISettings N(npcAISettings_80243644) = {
.moveSpeed = 1.0f,
.moveTime = 30,
.waitTime = 5,
.alertRadius = 80.0f,
.unk_10 = { .f = 30.0f },
.unk_14 = 2,
.chaseSpeed = 4.5f,
.unk_1C = { .s = 6 },
.unk_20 = 1,
.chaseRadius = 90.0f,
.unk_28 = { .f = 30.0f },
.unk_2C = 1,
};
Script N(npcAI_80243674) = SCRIPT({
SetSelfVar(0, 0);
SetSelfVar(5, -630);
SetSelfVar(6, 50);
SetSelfVar(1, 200);
N(func_8024162C_CB662C)(N(npcAISettings_80243644));
});
NpcSettings N(npcSettings_802436E4) = {
.height = 26,
.radius = 24,
.ai = &N(npcAI_80243674),
.onHit = EnemyNpcHit,
.onDefeat = EnemyNpcDefeat,
.level = 19,
};
NpcSettings N(npcSettings_80243710) = {
.height = 24,
.radius = 24,
.level = 99,
};
Script N(npcAI_8024373C) = SCRIPT({
loop {
GetSelfVar(0, SI_VAR(0));
match SI_VAR(0) {
== 0 {
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
if (SI_VAR(1) > 0) {
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetNpcJumpscale(NPC_SELF, 0);
NpcJump0(NPC_SELF, SI_VAR(0), 50, SI_VAR(2), 15);
SetSelfVar(0, 1);
BindNpcAI(NPC_SELF, N(npcAI_80243674));
}
}
== 2 {
DisablePlayerInput(TRUE);
sleep 25;
SetNpcPos(NPC_SELF, 0, -1000, 0);
SetNpcFlagBits(NPC_SELF, ((0x00000002)), FALSE);
SetSelfVar(0, 0);
DisablePlayerInput(FALSE);
}
}
sleep 1;
}
});
Script N(defeat_802438C8) = SCRIPT({
GetBattleOutcome(SI_VAR(0));
match SI_VAR(0) {
== 0 {
SetSelfVar(0, 2);
BindNpcAI(NPC_SELF, N(npcAI_8024373C));
DoNpcDefeat();
}
== 1 {}
== 2 {
}
}
});
Script N(init_80243954) = SCRIPT({
BindNpcIdle(NPC_SELF, N(npcAI_8024373C));
BindNpcDefeat(NPC_SELF, N(defeat_802438C8));
});
StaticNpc N(npcGroup_8024398C) = {
.id = NPC_DAYZEE0,
.settings = &N(npcSettings_80243600),
.pos = { -350.0f, 0.0f, 40.0f },
.flags = NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_NO_PROJECT_SHADOW,
.yaw = 90,
.dropFlags = 0x80,
.itemDropChance = 15,
.itemDrops = {
{ ITEM_MAPLE_SYRUP, 6, 0 },
{ ITEM_HONEY_SYRUP, 4, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(2),
.flowerDrops = STANDARD_FLOWER_DROPS(4),
.maxCoinBonus = 3,
.movement = { -350, 0, 40, 30, 0, -32767, 0, -350, 0, 40, 200, 0, 0, 1 },
.animations = {
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_2),
NPC_ANIM(dayzee, Palette_00, Anim_3),
NPC_ANIM(dayzee, Palette_00, Anim_3),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_8),
NPC_ANIM(dayzee, Palette_00, Anim_8),
NPC_ANIM(dayzee, Palette_00, Anim_6),
NPC_ANIM(dayzee, Palette_00, Anim_7),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
},
.unk_1E0 = { 00, 00, 00, 03, 00, 00, 00, 00},
};
StaticNpc N(npcGroup_80243B7C) = {
.id = NPC_DAYZEE1,
.settings = &N(npcSettings_80243600),
.pos = { 260.0f, 0.0f, 75.0f },
.flags = NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_NO_PROJECT_SHADOW,
.yaw = 270,
.dropFlags = 0x80,
.itemDropChance = 15,
.itemDrops = {
{ ITEM_MAPLE_SYRUP, 6, 0 },
{ ITEM_HONEY_SYRUP, 4, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(2),
.flowerDrops = STANDARD_FLOWER_DROPS(4),
.maxCoinBonus = 3,
.movement = { 260, 0, 75, 30, 0, -32767, 0, 260, 0, 75, 200, 0, 0, 1 },
.animations = {
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_2),
NPC_ANIM(dayzee, Palette_00, Anim_3),
NPC_ANIM(dayzee, Palette_00, Anim_3),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_8),
NPC_ANIM(dayzee, Palette_00, Anim_8),
NPC_ANIM(dayzee, Palette_00, Anim_6),
NPC_ANIM(dayzee, Palette_00, Anim_7),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
NPC_ANIM(dayzee, Palette_00, Anim_1),
},
.unk_1E0 = { 00, 00, 00, 03, 00, 00, 00, 00},
};
StaticNpc N(npcGroup_80243D6C) = {
.id = NPC_BZZAP0,
.settings = &N(npcSettings_802436E4),
.pos = { -50.0f, 55.0f, 90.0f },
.flags = NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_NO_PROJECT_SHADOW,
.yaw = 90,
.dropFlags = 0x80,
.itemDropChance = 15,
.itemDrops = {
{ ITEM_MAPLE_SYRUP, 6, 0 },
{ ITEM_HONEY_SYRUP, 4, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(3),
.flowerDrops = STANDARD_FLOWER_DROPS(2),
.minCoinBonus = 1,
.maxCoinBonus = 4,
.movement = { -50, 55, 90, 30, 0, -32767, 0, -50, 50, 90, 250, 0, 0, 1 },
.animations = {
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_3),
NPC_ANIM(bzzap, Palette_00, Anim_3),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_6),
NPC_ANIM(bzzap, Palette_00, Anim_6),
NPC_ANIM(bzzap, Palette_00, Anim_4),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
},
.unk_1E0 = { 00, 00, 00, 03, 00, 00, 00, 00},
};
StaticNpc N(npcGroup_80243F5C) = {
.id = NPC_BZZAP1,
.settings = &N(npcSettings_80243710),
.pos = { 0.0f, -1000.0f, 0.0f },
.flags = NPC_FLAG_4 | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_NO_PROJECT_SHADOW,
.init = &N(init_80243954),
.yaw = 90,
.dropFlags = 0x80,
.itemDropChance = 15,
.itemDrops = {
{ ITEM_MAPLE_SYRUP, 6, 0 },
{ ITEM_HONEY_SYRUP, 4, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(3),
.flowerDrops = STANDARD_FLOWER_DROPS(2),
.minCoinBonus = 1,
.maxCoinBonus = 4,
.movement = { -50, 55, 90, 100, 0, -32767, 0, -50, 50, 90, 250, 0, 0, 1 },
.animations = {
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_3),
NPC_ANIM(bzzap, Palette_00, Anim_3),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_6),
NPC_ANIM(bzzap, Palette_00, Anim_6),
NPC_ANIM(bzzap, Palette_00, Anim_4),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
},
.unk_1E0 = { 00, 00, 00, 03, 00, 00, 00, 00},
};
NpcGroupList N(npcGroupList_8024414C) = {
NPC_GROUP(N(npcGroup_8024398C), BATTLE_ID(24, 16, 0, 5)),
NPC_GROUP(N(npcGroup_80243B7C), BATTLE_ID(24, 21, 0, 5)),
NPC_GROUP(N(npcGroup_80243D6C), BATTLE_ID(24, 23, 0, 2)),
NPC_GROUP(N(npcGroup_80243F5C), BATTLE_ID(24, 23, 0, 2)),
{},
};

View File

@ -1,7 +1,5 @@
#include "flo_09.h"
INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5320", func_80240320_CB5320);
/*
void N(func_80240320_CB5320)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
@ -25,9 +23,154 @@ void N(func_80240320_CB5320)(ScriptInstance* script, NpcAISettings* aiSettings,
enemy->varTable[4] = npc->pos.y * 100.0;
script->functionTemp[0].s = 1;
}
*/
INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5320", func_802404D0_CB54D0);
#ifdef NON_MATCHING
void N(func_802404D0_CB54D0)(ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 temp_f24;
f32 posX, posY, posZ, posW;
s32 var;
f32 temp_f0;
f32 phi_f4;
s32 phi_v0;
s32 phi_s4 = 0;
f32 a = enemy->varTable[7];
f32 temp_f2 = a / 100.0;
f32 b = enemy->varTable[3];
f32 temp_f26 = b / 100.0;
f32 c = enemy->varTable[4];
f32 temp_f20 = c / 100.0;
f32 d = enemy->varTable[1];
f32 temp_f22 = d / 100.0;
enemy->varTable[4] = npc->pos.y * 100.0;
temp_f24 = temp_f26 + temp_f2;
if ((enemy->varTable[0] & 0x11) == 1) {
if (npc->flags & 8) {
if (temp_f22 < (temp_f24 - npc->pos.y)) {
enemy->varTable[0] |= 0x10;
}
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
if (temp_f22 < (temp_f26 - posW)) {
enemy->varTable[0] |= 0x10;
}
}
}
if ((enemy->varTable[0] & 0x11) == 0x11) {
// original m2c reference:
//if ((temp_s0->flags & 8) != 0) {
// phi_f0 = temp_f20 + ((temp_f24 - temp_f20) * D_802441A8_CB91A8);
// phi_f4 = temp_f24;
//} else {
// func_800DCB7C(temp_s0->unk_80, &subroutine_argA, &subroutine_argB, &subroutine_argC, &subroutine_argD, temp_s0->pos.x, temp_f20, temp_s0->pos.z, 1000.0f);
// temp_f4 = subroutine_argB + temp_f26;
// phi_f0 = temp_f20 + ((temp_f4 - temp_f20) * D_802441B0_CB91B0);
// phi_f4 = temp_f4;
//}
//temp_s0->pos.y = phi_f0;
f64 test;
if (npc->flags & 8) {
phi_f4 = temp_f24;
npc->pos.y = temp_f20 + ((phi_f4 - temp_f20) * 0.09);
} else {
posX = npc->pos.x;
posY = temp_f20;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
phi_f4 = posY + temp_f26;
npc->pos.y = temp_f20 + ((phi_f4 - temp_f20) * 0.09);
}
if (fabsf(phi_f4 - npc->pos.y) < 1.0) {
npc->pos.y = phi_f4;
enemy->varTable[0] &= ~0x10;
}
} else if (enemy->varTable[1] > 0) {
temp_f0 = sin_deg(enemy->varTable[2]);
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f26 + (temp_f0 * temp_f22);
} else {
npc->pos.y = temp_f24 + (temp_f0 * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) &&
func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
} else {
enemy->varTable[9]--;
}
if (is_point_within_region(enemy->territory->wander.wanderShape,
enemy->territory->wander.point.x, enemy->territory->wander.point.z,
npc->pos.x, npc->pos.z,
enemy->territory->wander.wanderSizeX, enemy->territory->wander.wanderSizeZ)) {
posW = dist2D(enemy->territory->wander.point.x, enemy->territory->wander.point.z, npc->pos.x, npc->pos.z);
if (npc->moveSpeed < posW) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, enemy->territory->wander.point.x, enemy->territory->wander.point.z);
phi_s4 = 1;
}
}
if (enemy->territory->wander.wanderSizeX | enemy->territory->wander.wanderSizeZ | phi_s4) {
if (npc->turnAroundYawAdjustment == 0) {
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
} else {
return;
}
}
enemy->varTable[4] = npc->pos.y * 100.0;
if (aiSettings->moveTime > 0) {
if ((npc->duration <= 0) || (--npc->duration <= 0)) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->waitTime <= 0) || (script->functionTemp[1].s < 3)) {
script->functionTemp[0].s = 0;
}
}
}
}
#else
INCLUDE_ASM(ApiStatus, "world/area_flo/flo_09/CB5320", flo_09_func_802404D0_CB54D0, ScriptInstance *script, NpcAISettings *aiSettings, EnemyTerritoryThing *territory);
#endif
#include "world/common/UnkNpcAIFunc1.inc.c"
@ -35,18 +178,15 @@ INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5320", func_802404D0_CB54D0);
#include "world/common/UnkNpcAIFunc2.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5320", func_80240F74_CB5F74);
/*
void N(func_80240F74_CB5F74)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
npc->pos.y += N(D_802436DC_BE6E8C)[npc->duration++];
npc->pos.y += N(D_8024362C_CB862C)[npc->duration++];
if (npc->duration >= 5) {
script->functionTemp[0].s = 12;
}
}
*/
#include "world/common/UnkNpcAIFunc14.inc.c"
@ -56,4 +196,60 @@ void N(func_80240F74_CB5F74)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkFunc5.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_09/CB5320", func_8024162C_CB662C);
ApiStatus N(func_8024162C_CB662C)(ScriptInstance *script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Bytecode* args = script->ptrReadPos;
Npc *npc = get_npc_unsafe(enemy->npcID);
EnemyTerritoryThing territory;
EnemyTerritoryThing* territoryPtr = &territory;
NpcAISettings* npcAISettings = (NpcAISettings*)get_variable(script, *args++);
territory.unk_00 = 0;
territory.shape = enemy->territory->wander.detectShape;
territory.pointX = enemy->territory->wander.detect.x;
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(UnkFunc5)(npc, enemy, script, npcAISettings);
}
npc->unk_AB = -2;
if (enemy->unk_B0 & 4) {
if (enemy->unk_B4 != 0) {
return ApiStatus_BLOCK;
}
enemy->unk_B0 &= ~4;
}
switch (script->functionTemp[0].s) {
case 0:
N(func_80240320_CB5320)(script, npcAISettings, territoryPtr);
case 1:
N(func_802404D0_CB54D0)(script, npcAISettings, territoryPtr);
break;
case 2:
N(UnkNpcAIFunc1)(script, npcAISettings, territoryPtr);
case 3:
N(UnkFunc4)(script, npcAISettings, territoryPtr);
break;
case 10:
N(UnkNpcAIFunc2)(script, npcAISettings, territoryPtr);
case 11:
N(func_80240F74_CB5F74)(script, npcAISettings, territoryPtr);
break;
case 12:
N(UnkNpcAIFunc14)(script, npcAISettings, territoryPtr);
break;
case 13:
N(UnkNpcAIFunc3)(script, npcAISettings, territoryPtr);
break;
case 14:
N(UnkFunc6)(script, npcAISettings, territoryPtr);
}
return ApiStatus_BLOCK;
}

View File

@ -2,3 +2,14 @@
#include "map.h"
#define NAMESPACE flo_09
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240000_CB5000)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc43)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024162C_CB662C)(ScriptInstance* script, s32 isInitialCall);
extern f32 N(D_8024362C_CB862C)[];
extern NpcGroupList N(npcGroupList_8024414C);
extern Script N(802425DC);
extern Script N(802434A8);
extern Script N(main);

View File

@ -1,3 +1,8 @@
#include "flo_10.h"
INCLUDE_ASM(s32, "world/area_flo/flo_10/CB9200", func_80240000_CB9200);
s32 N(func_80240000_CB9200)(void) {
if (get_variable(NULL, SI_SAVE_VAR(0)) <= 0x30) {
return MESSAGE_ID(0x19, 0x0119);
}
return MESSAGE_ID(0x19, 0x011A);
}

View File

@ -1,3 +1,8 @@
#include "flo_10.h"
INCLUDE_ASM(s32, "world/area_flo/flo_10/CB9240", func_80240040_CB9240);
void func_80072950();
ApiStatus N(func_80240040_CB9240)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(1, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

View File

@ -1,29 +1,827 @@
#include "flo_10.h"
#include "message_ids.h"
#include "sprite/npc/lily.h"
enum {
NPC_LILY,
};
EntryList N(entryList) = {
{ -360.0f, 0.0f, 0.0f, 90.0f },
{ -360.0f, 0.0f, 0.0f, 90.0f },
{ -100.0f, -10.0f, -172.0f, 135.0f },
};
MapConfig N(config) = {
.main = &N(main),
.entryList = &N(entryList),
.entryCount = ENTRY_COUNT(N(entryList)),
.background = &gBackgroundImage,
.tattle = N(func_80240000_CB9200),
};
Script N(802414E0) = SCRIPT({
GetEntryID(SI_VAR(0));
if (SI_VAR(0) == 1) {
SetMusicTrack(0, SONG_SUNSHINE_RETURNS, 0, 8);
} else {
match STORY_PROGRESS {
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
SetMusicTrack(0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8);
}
else {
SetMusicTrack(0, SONG_FLOWER_FIELDS_SUNNY, 0, 8);
}
}
}
if (STORY_PROGRESS >= STORY_CH6_FILLED_SPRING_WITH_WATER) {
PlaySound(0x80000022);
}
});
Script N(802415C4) = SCRIPT({
func_802D5FF8(137, 2);
});
Script N(802415E8) = SCRIPT({
FadeOutMusic(0, 250);
sleep 10;
func_802D5FD8();
});
static s32 N(pad_1624)[] = {
0x00000000, 0x00000000, 0x00000000,
};
Script N(80241630) = SCRIPT({
if (STORY_PROGRESS >= STORY_CH6_FILLED_SPRING_WITH_WATER) {
MakeItemEntity(ITEM_WATER_STONE, 0, -60, 6, 1, 0);
}
});
static s32 N(pad_167C) = {
0x00000000,
};
Script N(80241680) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(exitWalk_8024192C) = EXIT_WALK_SCRIPT(60, 0, "flo_24", 1);
Script N(80241988) = SCRIPT({
bind N(exitWalk_8024192C) to TRIGGER_FLOOR_ABOVE 0;
});
Script N(main) = SCRIPT({
WORLD_LOCATION = LOCATION_FLOWER_FIELDS;
SetSpriteShading(-1);
SetCamLeadPlayer(0, 0);
SetCamPerspective(0, 3, 25, 16, 4096);
SetCamBGColor(0, 0, 0, 0);
SetCamEnabled(0, 1);
MakeNpcs(0, N(npcGroupList_80244054));
await N(80241630);
spawn N(80244A50);
spawn N(802435F8);
spawn N(80242AE8);
spawn N(80244074);
ModifyColliderFlags(3, 11, 0x00000006);
ModifyColliderFlags(3, 12, 0x00000006);
SI_VAR(0) = -265;
SI_VAR(1) = 247;
SI_VAR(2) = 199;
SI_VAR(3) = 313;
SI_VAR(4) = 0;
spawn N(80241680);
SI_VAR(0) = -300;
SI_VAR(1) = -275;
SI_VAR(2) = -140;
SI_VAR(3) = -185;
SI_VAR(4) = 0;
spawn N(80241680);
SI_VAR(0) = 263;
SI_VAR(1) = -248;
SI_VAR(2) = 362;
SI_VAR(3) = 146;
SI_VAR(4) = 0;
spawn N(80241680);
GetEntryID(SI_VAR(0));
match SI_VAR(0) {
== 1 {
spawn N(8024324C);
}
== 2 {
spawn N(802427EC);
spawn N(80241988);
}
else {
ModifyColliderFlags(0, 1, 0x7FFFFE00);
SI_VAR(0) = N(80241988);
spawn EnterWalk;
}
}
await N(802414E0);
if (STORY_PROGRESS >= STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) {
N(func_80240040_CB9240)();
}
});
static s32 N(pad_1CA8)[] = {
0x00000000, 0x00000000,
};
s32** N(D_80241CB0_CBAEB0) = NULL;
Script N(80241CB4) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 0);
return;
});
Script N(80241CE4) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 16);
return;
});
Script N(updateTexturePan_80241D14) = SCRIPT({
group 0;
if (SI_VAR(5) == 1) {
if (SI_VAR(6) == 1) {
if (SI_VAR(7) == 1) {
if (SI_VAR(8) == 1) {
N(UnkTexturePanFunc)();
return;
}
}
}
}
N(UnkTexturePanFunc2)();
});
Script N(80241DB0) = SCRIPT({
MakeLerp(-50, 170, 385, 0);
1:
UpdateLerp();
TranslateGroup(56, 0, SI_VAR(0), 0);
if (SI_VAR(1) == 1) {
sleep 1;
goto 1;
}
});
Script N(80241E40) = SCRIPT({
MakeLerp(0, 100, 90, 1);
1:
UpdateLerp();
SI_VAR(2) = (float) SI_VAR(0);
SI_VAR(3) = (float) SI_VAR(0);
SI_VAR(2) /= 333.0;
SI_VAR(3) /= 100.0;
SI_VAR(2) += 0.703125;
ScaleGroup(56, SI_VAR(2), SI_VAR(3), SI_VAR(2));
if (SI_VAR(1) == 1) {
sleep 1;
goto 1;
}
});
Script N(80241F20) = SCRIPT({
EnableTexPanning(53, 1);
spawn {
SI_VAR(0) = 10;
SI_VAR(1) = -150;
SI_VAR(2) = 0;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 1;
SI_VAR(6) = 0;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
});
Script N(80242030) = SCRIPT({
sleep 60;
EnableModel(53, 1);
spawn N(80241F20);
});
Script N(8024206C) = SCRIPT({
sleep 80;
EnableNpcShadow(NPC_LILY, FALSE);
GetNpcPos(NPC_LILY, SI_VAR(3), SI_VAR(4), SI_VAR(5));
MakeLerp(10, 55, 108, 0);
loop {
UpdateLerp();
SI_VAR(6) = SI_VAR(4);
SI_VAR(6) += SI_VAR(0);
SI_VAR(6) += -10;
SetNpcPos(NPC_LILY, SI_VAR(3), SI_VAR(6), SI_VAR(5));
TranslateGroup(60, 0, SI_VAR(0), 0);
sleep 1;
if (SI_VAR(1) == 0) {
break loop;
}
}
});
Script N(80242188) = SCRIPT({
DisablePlayerPhysics(TRUE);
sleep 40;
SetPlayerAnimation(0x80024);
GetPlayerPos(SI_VAR(2), SI_VAR(0), SI_VAR(3));
MakeLerp(-50, 90, 60, 1);
loop {
UpdateLerp();
SI_VAR(2) /= 1.2001953125;
SI_VAR(3) /= 1.2001953125;
SetPlayerPos(SI_VAR(2), SI_VAR(0), SI_VAR(3));
sleep 1;
if (SI_VAR(1) == 0) {
break loop;
}
}
MakeLerp(90, 270, 280, 0);
loop {
UpdateLerp();
SetPlayerPos(0, SI_VAR(0), 0);
sleep 1;
if (SI_VAR(1) == 0) {
break loop;
}
}
DisablePlayerPhysics(FALSE);
});
Script N(8024230C) = SCRIPT({
sleep 80;
GetPlayerPos(SI_VAR(3), SI_VAR(4), SI_VAR(5));
UseSettingsFrom(0, SI_VAR(3), SI_VAR(4), SI_VAR(5));
SetPanTarget(0, SI_VAR(3), SI_VAR(4), SI_VAR(5));
SetCamSpeed(0, 0.7001953125);
SetCamPitch(0, 25.0, -22.0);
SetCamDistance(0, 450);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
});
Script N(802423E4) = SCRIPT({
DisablePartnerAI(0);
spawn N(80241DB0);
spawn N(80241E40);
spawn N(80242030);
spawn N(8024206C);
spawn N(80242188);
spawn N(8024230C);
});
Script N(8024244C) = SCRIPT({
MakeLerp(170, 75, 150, 0);
1:
UpdateLerp();
TranslateGroup(56, 0, SI_VAR(0), 0);
if (SI_VAR(1) == 1) {
sleep 1;
goto 1;
}
});
Script N(802424DC) = SCRIPT({
MakeLerp(100, 15, 150, 1);
1:
UpdateLerp();
SI_VAR(2) = (float) SI_VAR(0);
SI_VAR(3) = (float) SI_VAR(0);
SI_VAR(2) /= 333.0;
SI_VAR(3) /= 100.0;
SI_VAR(2) += 0.703125;
ScaleGroup(56, SI_VAR(2), SI_VAR(3), SI_VAR(2));
if (SI_VAR(1) == 1) {
sleep 1;
goto 1;
}
});
Script N(802425BC) = SCRIPT({
spawn N(8024244C);
spawn N(802424DC);
});
const char N(flo_24_name_hack)[];
Script N(802425E4) = SCRIPT({
sleep 20;
SetPlayerAnimation(ANIM_STAND_STILL);
GetPlayerPos(SI_VAR(3), SI_VAR(4), SI_VAR(5));
UseSettingsFrom(0, SI_VAR(3), SI_VAR(4), SI_VAR(5));
SetPanTarget(0, SI_VAR(3), SI_VAR(4), SI_VAR(5));
SetCamSpeed(0, 1.0);
SetCamDistance(0, 600);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
EnableGroup(56, 1);
TranslateGroup(56, 0, -50, 0);
ScaleGroup(56, 0, 0, 0);
EnableGroup(60, 1);
await N(802423E4);
sleep 20;
PlaySound(0x80000024);
sleep 360;
InterpPlayerYaw(90, 0);
SetPlayerAnimation(ANIM_80017);
SetPlayerJumpscale(0.2001953125);
PlayerJump1(-100, -10, -172, 75);
ShakeCam(0, 0, 5, 1.0);
await N(802425BC);
sleep 60;
GotoMap(N(flo_24_name_hack), 2);
sleep 100;
});
Script N(802427EC) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePlayerPhysics(TRUE);
SetPlayerPos(-100, -10, -172);
InterpPlayerYaw(150, 0);
SetPlayerAnimation(ANIM_DEAD_STILL);
SetNpcPos(NPC_PARTNER, -129, 9, -177);
EnablePartnerAI();
ClearPartnerMoveHistory(-4);
EnableGroup(52, 1);
EnableGroup(19, 0);
EnableGroup(61, 0);
EnableGroup(60, 0);
SetNpcPos(NPC_LILY, -57, -20, -105);
InterpNpcYaw(NPC_LILY, 90, 0);
AdjustCam(0, 90.0, 0, 450, 25.0, -6.0);
sleep 30;
SetPlayerAnimation(ANIM_GET_UP);
sleep 20;
SetPlayerAnimation(ANIM_10002);
sleep 10;
await N(802415C4);
sleep 10;
SpeakToPlayer(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 5, MESSAGE_ID(0x11, 0x0082));
NpcFacePlayer(NPC_LILY, 1);
SpeakToPlayer(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_3), NPC_ANIM(lily, Palette_00, Anim_7), 0, MESSAGE_ID(0x11, 0x0083));
SetNpcAnimation(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_6));
sleep 20;
SetNpcAnimation(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_1));
SI_VAR(0) = 90;
SI_VAR(1) = 1;
await N(80241CB4);
AddKeyItem(ITEM_MIRACLE_WATER);
SpeakToPlayer(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_3), NPC_ANIM(lily, Palette_00, Anim_7), 0, MESSAGE_ID(0x11, 0x0084));
EndSpeech(0, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 0);
SetNpcAnimation(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_1));
ResetCam(0, 4.0);
await N(802415E8);
DisablePlayerPhysics(FALSE);
DisablePlayerInput(FALSE);
});
Script N(80242AE8) = SCRIPT({
if (STORY_PROGRESS < STORY_CH6_FILLED_SPRING_WITH_WATER) {
EnableGroup(52, 0);
EnableGroup(61, 0);
ModifyColliderFlags(0, 21, 0x7FFFFE00);
} else {
EnableGroup(19, 0);
EnableGroup(61, 0);
EnableGroup(60, 0);
ModifyColliderFlags(0, 14, 0x7FFFFE00);
ModifyColliderFlags(0, 15, 0x7FFFFE00);
ModifyColliderFlags(0, 16, 0x7FFFFE00);
ModifyColliderFlags(0, 17, 0x7FFFFE00);
}
EnableTexPanning(54, 1);
EnableTexPanning(48, 1);
EnableTexPanning(55, 1);
EnableTexPanning(59, 1);
EnableTexPanning(49, 1);
EnableTexPanning(51, 1);
spawn {
SI_VAR(0) = 1;
SI_VAR(1) = 0;
SI_VAR(2) = -2000;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 0;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
spawn {
SI_VAR(0) = 3;
SI_VAR(1) = -100;
SI_VAR(2) = 80;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 1;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
spawn {
SI_VAR(0) = 5;
SI_VAR(1) = -1000;
SI_VAR(2) = 2000;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 1;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
spawn {
SI_VAR(0) = 6;
SI_VAR(1) = 0;
SI_VAR(2) = -2000;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 0;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
spawn {
SI_VAR(0) = 8;
SI_VAR(1) = 0;
SI_VAR(2) = -1500;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 0;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
spawn {
SI_VAR(0) = 9;
SI_VAR(1) = 0;
SI_VAR(2) = -1000;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 0;
SI_VAR(6) = 1;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80241D14);
}
if (STORY_PROGRESS >= STORY_CH6_FILLED_SPRING_WITH_WATER) {
spawn N(80241F20);
}
});
static s32 N(pad_3218)[] = {
0x00000000, 0x00000000,
};
NpcSettings N(npcSettings_80243220) = {
.height = 45,
.radius = 65,
.level = 99,
};
const char N(flo_24_name_hack)[] = "flo_24";
Script N(8024324C) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePlayerPhysics(TRUE);
SetNpcPos(NPC_LILY, 60, 0, 55);
UseSettingsFrom(0, 0, 0, 0);
SetPanTarget(0, 0, 0, 0);
SetCamDistance(0, 450);
SetCamPitch(0, 17.0, -6.0);
SetCamSpeed(0, 90.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 20;
SpeakToPlayer(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x00C6));
sleep 10;
GotoMap("flo_12", 1);
sleep 100;
});
s32 N(itemList_80243394)[] = {
ITEM_WATER_STONE,
ITEM_NONE,
};
Script N(8024339C) = SCRIPT({
if (SI_SAVE_FLAG(1376) == 1) {
GetCurrentPartner(SI_VAR(10));
if (SI_VAR(10) != 0) {
AwaitPlayerLeave(0, 0, 19);
return;
}
DisablePlayerInput(TRUE);
group 0;
func_802D5830(1);
func_802D6420();
SI_VAR(2) = SI_VAR(0);
match SI_VAR(2) {
== -1 {
func_802D6954();
func_802D5830(0);
sleep 10;
SpeakToPlayer(NPC_LILY, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 0, MESSAGE_ID(0x11, 0x0081));
}
else {
GetPlayerPos(SI_VAR(3), SI_VAR(4), SI_VAR(5));
PlayerMoveTo(-17, -17, 20);
func_802CF56C(2);
InterpPlayerYaw(100, 1);
sleep 10;
AdjustCam(0, 1.0, 0, 450, 25.0, -6.0);
sleep 10;
SetPlayerAnimation(0x60006);
RemoveKeyItemAt(SI_VAR(1));
MakeItemEntity(ITEM_WATER_STONE, 0, -60, 6, 1, 0);
SI_VAR(10) = SI_VAR(0);
func_802D6954();
func_802D5830(0);
await N(802425E4);
}
}
DisablePlayerInput(FALSE);
AwaitPlayerLeave(0, 0, 19);
}
});
Script N(802435F8) = {
SI_CMD(ScriptOpcode_BIND_PADLOCK, N(8024339C), TRIGGER_FLOOR_TOUCH, 15, N(itemList_80243394), 0, 1),
SI_CMD(ScriptOpcode_RETURN),
SI_CMD(ScriptOpcode_END)
};
Script N(80243628) = SCRIPT({
sleep 10;
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
GetPlayerPos(SI_VAR(3), SI_VAR(4), SI_VAR(5));
if (SI_VAR(5) < SI_VAR(2)) {
SI_VAR(6) = 30;
} else {
SI_VAR(6) = 20;
}
SI_VAR(1) = SI_VAR(0);
SI_VAR(4) = SI_VAR(0);
SI_VAR(1) -= SI_VAR(6);
SI_VAR(4) += SI_VAR(6);
match SI_VAR(3) {
SI_VAR(1)..SI_VAR(4) {
spawn {
if (SI_VAR(3) < SI_VAR(0)) {
SI_VAR(0) -= 40;
} else {
SI_VAR(0) += 40;
}
SetNpcFlagBits(NPC_SELF, ((NPC_FLAG_100)), TRUE);
PlayerMoveTo(SI_VAR(0), SI_VAR(5), 15);
PlayerFaceNpc(0, 1);
SetNpcFlagBits(NPC_SELF, ((NPC_FLAG_100)), FALSE);
}
}
}
});
Script N(interact_802437C8) = SCRIPT({
await N(802415C4);
match STORY_PROGRESS {
< STORY_CH6_GOT_MAGICAL_BEAN {
spawn N(80243628);
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamDistance(0, 325);
SetCamPitch(0, 23.0, -9.0);
SetCamSpeed(0, 4.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 10;
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 5, MESSAGE_ID(0x11, 0x0078));
EndSpeech(-1, NPC_ANIM(lily, Palette_00, Anim_9), NPC_ANIM(lily, Palette_00, Anim_5), 5);
}
< STORY_CH6_GOT_WATER_STONE {
if (SI_SAVE_FLAG(1375) == 0) {
spawn N(80243628);
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamDistance(0, 325);
SetCamPitch(0, 23.0, -9.0);
SetCamSpeed(0, 4.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 10;
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 5, MESSAGE_ID(0x11, 0x0079));
NpcFacePlayer(NPC_SELF, 1);
SetNpcAnimation(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_1));
PlaySoundAtNpc(NPC_SELF, SOUND_UNKNOWN_262, 0);
ShowEmote(-1, EMOTE_EXCLAMATION, 0, 15, 1, 0, 0, 0, 0);
sleep 15;
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_1), NPC_ANIM(lily, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x007A));
EndSpeech(-1, NPC_ANIM(lily, Palette_00, Anim_5), NPC_ANIM(lily, Palette_00, Anim_1), 0);
GetPlayerTargetYaw(SI_VAR(0));
InterpNpcYaw(NPC_SELF, SI_VAR(0), 1);
sleep 20;
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 5, MESSAGE_ID(0x11, 0x007B));
NpcFacePlayer(NPC_SELF, 1);
sleep 20;
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x007C));
ShowChoice(MESSAGE_ID(0x1E, 0x0011));
sleep 10;
match SI_VAR(0) {
== 0 {
ContinueSpeech(-1, NPC_ANIM(lily, Palette_00, Anim_3), NPC_ANIM(lily, Palette_00, Anim_7), 0, MESSAGE_ID(0x11, 0x007D));
}
== 1 {
ContinueSpeech(-1, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 0, MESSAGE_ID(0x11, 0x007E));
}
}
sleep 10;
SI_SAVE_FLAG(1375) = 1;
SetEnemyFlagBits(-1, 4194304, 0);
} else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 5, MESSAGE_ID(0x11, 0x007F));
}
}
< 49 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0080));
SI_SAVE_FLAG(1376) = 1;
}
< 53 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 0, MESSAGE_ID(0x11, 0x0085));
EndSpeech(-1, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 0);
EndSpeech(-1, NPC_ANIM(lily, Palette_00, Anim_4), NPC_ANIM(lily, Palette_00, Anim_8), 0);
}
< 60 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_3), NPC_ANIM(lily, Palette_00, Anim_7), 0, MESSAGE_ID(0x11, 0x0086));
}
else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_2), NPC_ANIM(lily, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0087));
}
}
ResetCam(0, 4.0);
await N(802415E8);
});
Script N(init_80243D78) = SCRIPT({
BindNpcInteract(NPC_SELF, N(interact_802437C8));
match STORY_PROGRESS {
< STORY_CH6_GOT_WATER_STONE {
if (SI_SAVE_FLAG(1375) == 0) {
SetNpcAnimation(NPC_SELF, NPC_ANIM(lily, Palette_00, Anim_8));
InterpNpcYaw(NPC_SELF, 90, 1);
SetEnemyFlagBits(-1, 4194304, 1);
}
}
== STORY_CH6_GOT_WATER_STONE {
InterpNpcYaw(NPC_SELF, 270, 1);
}
>= STORY_CH6_FILLED_SPRING_WITH_WATER {
SetNpcPos(NPC_SELF, -67, -20, -105);
}
}
});
StaticNpc N(npcGroup_80243E64) = {
.id = NPC_LILY,
.settings = &N(npcSettings_80243220),
.pos = { 80.0f, -60.0f, 0.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT,
.init = &N(init_80243D78),
.yaw = 270,
.dropFlags = 0x80,
.heartDrops = NO_DROPS,
.flowerDrops = NO_DROPS,
.animations = {
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
NPC_ANIM(lily, Palette_00, Anim_1),
},
.tattle = MESSAGE_ID(0x1A, 0x00DF),
};
NpcGroupList N(npcGroupList_80244054) = {
NPC_GROUP(N(npcGroup_80243E64), BATTLE_ID(0, 0, 0, 0)),
{},
};
static s32 N(pad_406C) = {
0x00000000,
};
s32 N(D_80244070_CBD270) = {
0x00000000,
};
Script N(80244074) = SCRIPT({
});
static s32 N(pad_4084)[] = {
0x00000000, 0x00000000, 0x00000000,
};
INCLUDE_ASM(s32, "world/area_flo/flo_10/CB9280", func_80240080_CB9280);
/*
ApiStatus N(func_80240080_CB9280)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80241C68_BE09F8);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_80241CB0_CBAEB0) == NULL) {
N(D_80241CB0_CBAEB0) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_80241CB0_CBAEB0)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_80241CB0_CBAEB0)[i];
}
ptr = &N(D_80241C68_BE09F8);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_80241CB0_CBAEB0));
N(D_80241CB0_CBAEB0) = NULL;
}
return ApiStatus_DONE2;
}
*/
#include "world/common/GetItemName.inc.c"

View File

@ -1,5 +1,314 @@
#include "flo_10.h"
INCLUDE_ASM(s32, "world/area_flo/flo_10/CB96B0", func_802404B0_CB96B0);
extern u16* nuGfxZBuffer;
INCLUDE_ASM(s32, "world/area_flo/flo_10/CB96B0", func_80240A98_CB9C98);
// in no way close at all, may as well start over
// good luck have fun
#ifdef NON_MATCHING
void N(func_802404B0_CB96B0)(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
s32 i;
s32 phi_a3;
s32 temp_s2_2;
s32 temp_v0_2;
s32 temp_a2_3;
s32 phi_s3;
s32 phi_s4;
s32 phi_s5;
s32 phi_s6;
s32 phi_s7;
s32 phi_a2;
s32 subroutine_arg4;
s32 subroutine_arg5;
s32 subroutine_arg6;
N(D_80244070_CBD270) += 5;
if ((arg0 < arg2) && (arg1 < arg3)) {
if (arg0 < 0) {
phi_s6 = 0;
} else {
phi_s6 = arg0;
}
if (arg1 < 0) {
arg1 = 0;
}
phi_s4 = arg2;
if (arg2 < 0) {
phi_s4 = 0;
}
phi_a3 = arg3;
if (arg3 < 0) {
phi_a3 = 0;
}
if (phi_s6 >= 0x140) {
phi_s6 = 0x13F;
}
if (arg1 >= 0xF0) {
arg1 = 0xEF;
}
if (phi_s4 >= 0x140) {
phi_s4 = 0x13F;
}
if (phi_a3 >= 0xF0) {
phi_a3 = 0xEF;
}
if ((phi_s6 != phi_s4) && (arg1 != phi_a3)) {
if (phi_s6 < 0) {
phi_s6 += 3;
}
phi_s6 = (phi_s6 >> 2) * 4;
if (phi_s4 < 0) {
phi_s4 += 3;
}
subroutine_arg5 = phi_s4 / 6;
subroutine_arg4 = phi_s4 / 6;
subroutine_arg6 = D_8009A64C;
for (i = 0; i < subroutine_arg4; i++) {
phi_s5 = arg1 - ((i + 1) * 6);
phi_s7 = arg1 + ((i + 1) * 6);
if (phi_s5 >= 0) {
phi_a2 = phi_s5 * 2;
if (phi_a2 >= 0x100) {
phi_a2 = 0xFF;
}
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 255, 255, 255, phi_a2);
gDPSetTextureImage(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(subroutine_arg6));
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, (phi_s4 - phi_s6) / 6, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 9, G_TX_NOLOD);
gDPLoadSync(gMasterGfxPos++);
gDPLoadTile(gMasterGfxPos++, G_TX_LOADTILE, phi_s6 * 4, phi_s5 * 4, (phi_s4 - 1) * 4, (phi_s5 - 1) * 4);
gDPPipeSync(gMasterGfxPos++);
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, phi_s4 - phi_s6, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 9, G_TX_NOLOD);
gDPSetTileSize(gMasterGfxPos++, G_TX_RENDERTILE, phi_s6 * 4, phi_s5 * 4, (phi_s4 - 1) * 4, (phi_s5 - 1) * 4);
gSPTextureRectangle(gMasterGfxPos++,
(phi_s4 - 1) * 4, (phi_s5 - 1) * 4, phi_s6 * 4, phi_s5 * 4,
G_TX_RENDERTILE,
phi_s6, phi_s5,
0x0400, (sin_deg(N(D_80244070_CBD270) + (i * 30)) * 500.0f) - 0x1F4);
}
}
if (subroutine_arg5 != 0) {
temp_s2_2 = arg1 - (i * 6);
temp_v0_2 = temp_s2_2 - 6;
temp_a2_3 = temp_v0_2 * 2;
if (temp_v0_2 >= 0) {
phi_a2 = temp_a2_3;
if (temp_a2_3 >= 0x100) {
phi_a2 = 0xFF;
}
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 255, 255, 255, phi_a2);
gDPSetTextureImage(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(subroutine_arg6));
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, (phi_s4 - phi_s6) / 6, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 9, G_TX_NOLOD);
gDPLoadSync(gMasterGfxPos++);
gDPLoadTile(gMasterGfxPos++, G_TX_LOADTILE, phi_s6 * 4, (temp_s2_2 - subroutine_arg5) * 4, (phi_s4 - 1) * 4, (temp_s2_2 - 1) * 4);
gDPPipeSync(gMasterGfxPos++);
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, (phi_s4 - phi_s6) / 6, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 9, G_TX_NOLOD);
gDPSetTileSize(gMasterGfxPos++, G_TX_RENDERTILE, (phi_s4 - 1) * 4, (temp_s2_2 - subroutine_arg5) * 4, phi_s6 * 4, (temp_s2_2 - subroutine_arg5) * 4);
gSPTextureRectangle(gMasterGfxPos++, phi_s6 * 4, arg1 + (i * 6), phi_s4 * 4, ((arg1 + (i * 6)) + subroutine_arg5) * 4, G_TX_RENDERTILE, phi_s6, temp_s2_2, 0x0400, -0x0400);
}
}
}
}
}
#else
INCLUDE_ASM(void, "world/area_flo/flo_10/CB96B0", flo_10_func_802404B0_CB96B0, s32 arg0, s32 arg1, s32 arg2, s32 arg3);
#endif
typedef struct {
/* 0x00 */ char unk_00[0x4];
/* 0x04 */ s32 unk_04;
/* 0x08 */ char unk_08[0x14];
/* 0x1C */ s32 unk_1C;
} N(UnkStruct2);
typedef struct {
/* 0x00 */ char unk_00[0xC];
/* 0x0C */ N(UnkStruct2)* unk_0C;
} N(UnkStruct);
void N(func_80240A98_CB9C98)(void) {
Camera* camera = &gCameras[gCurrentCameraID];
Model* model = get_model_from_list_index(get_model_list_index_from_tree_index(0x30));
// modelNode propertylist? Causes too many derefences and conflicts with the modelNode load below
N(UnkStruct2)* unk1 = ((N(UnkStruct)*)model->modelNode)->unk_0C;
f32 temp_f24;
f32 temp_f26;
f32 temp_f20;
f32 temp_f22;
s32 test;
f32 sp3C;
f32 sp38;
f32 sp34;
f32 sp30;
f32 sp2C;
f32 sp28;
sp3C = unk1->unk_04;
sp38 = unk1->unk_1C;
transform_point(camera->perspectiveMatrix,
model->center[0] - sp3C, model->center[1], model->center[2] - sp38, 1.0f,
&sp28, &sp2C, &sp30, &sp34);
sp28 = sp28 * (1.0f / sp34);
sp2C = sp2C * -(1.0f / sp34);
sp30 = sp30 * (1.0f / sp34);
sp34 = (1.0f / sp34);
if (sp34 < 0.0f) {
sp28 = 0.0f;
sp2C = 1.0f;
}
temp_f20 = sp28;
temp_f22 = sp2C;
transform_point(camera->perspectiveMatrix,
model->center[0] - sp3C, model->center[1], model->center[2] + sp38, 1.0f,
&sp28, &sp2C, &sp30, &sp34);
sp28 = sp28 * (1.0f / sp34);
sp2C = sp2C * -(1.0f / sp34);
sp30 = sp30 * (1.0f / sp34);
sp34 = 1.0f / sp34;
temp_f24 = temp_f20;
temp_f26 = temp_f22;
if (sp34 < 0.0f) {
sp28 = 0.0f;
sp2C = 1.0f;
}
if (sp28 < temp_f20) {
temp_f24 = sp28;
}
if (sp2C < temp_f22) {
temp_f26 = sp2C;
}
if (temp_f20 < sp28) {
temp_f20 = sp28;
}
if (temp_f22 < sp2C) {
temp_f22 = sp2C;
}
transform_point(camera->perspectiveMatrix,
model->center[0] + sp3C, model->center[1], model->center[2] + sp38, 1.0f,
&sp28, &sp2C, &sp30, &sp34);
sp28 = sp28 * (1.0f / sp34);
sp2C = sp2C * -(1.0f / sp34);
sp30 = sp30 * (1.0f / sp34);
sp34 = (1.0f / sp34);
if (sp34 < 0.0f) {
sp28 = 1.0f;
sp2C = 1.0f;
}
if (sp28 < temp_f24) {
temp_f24 = sp28;
}
if (sp2C < temp_f26) {
temp_f26 = sp2C;
}
if (temp_f20 < sp28) {
temp_f20 = sp28;
}
if (temp_f22 < sp2C) {
temp_f22 = sp2C;
}
transform_point(camera->perspectiveMatrix,
model->center[0] + sp3C, model->center[1], model->center[2] - sp38, 1.0f,
&sp28, &sp2C, &sp30, &sp34);
sp28 = sp28 * (1.0f / sp34);
sp2C = sp2C * -(1.0f / sp34);
sp30 = sp30 * (1.0f / sp34);
sp34 = (1.0f / sp34);
if (sp34 < 0.0f) {
sp28 = 1.0f;
sp2C = 1.0f;
}
if (sp28 < temp_f24) {
temp_f24 = sp28;
}
if (sp2C < temp_f26) {
temp_f26 = sp2C;
}
if (temp_f20 < sp28) {
temp_f20 = sp28;
}
if (temp_f22 < sp2C) {
temp_f22 = sp2C;
}
if ((temp_f24 != temp_f20) || (temp_f26 != temp_f22)) {
temp_f24 = ((temp_f24 * camera->viewportW) + camera->viewportW) * 0.5f;
temp_f26 = ((temp_f26 * camera->viewportH) + camera->viewportH) * 0.5f;
temp_f20 = ((temp_f20 * camera->viewportW) + camera->viewportW) * 0.5f;
temp_f22 = ((temp_f22 * camera->viewportH) + camera->viewportH) * 0.5f;
temp_f24 += camera->viewportStartX;
temp_f26 += camera->viewportStartY;
temp_f20 += camera->viewportStartX;
temp_f22 += camera->viewportStartY;
gDPSetCycleType(gMasterGfxPos++, G_CYC_1CYCLE);
gDPSetRenderMode(gMasterGfxPos++, Z_CMP | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | G_RM_PASS, Z_CMP | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1));
gDPSetColorImage(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(nuGfxZBuffer));
gDPSetCombineLERP(gMasterGfxPos++, 0, 0, 0, PRIMITIVE, 0, 0, 0, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, 0);
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 248, 240, 240, 0);
gDPPipeSync(gMasterGfxPos++);
gSPDisplayList(gMasterGfxPos++, model->modelNode[1]->type);
gDPPipeSync(gMasterGfxPos++);
gDPSetColorImage(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, osVirtualToPhysical(D_8009A64C));
gDPSetDepthSource(gMasterGfxPos++, G_ZS_PRIM);
gDPSetPrimDepth(gMasterGfxPos++, 32734, 0);
gDPSetRenderMode(gMasterGfxPos++, G_RM_ZB_XLU_DECAL, G_RM_ZB_XLU_DECAL2);
gDPSetTextureFilter(gMasterGfxPos++, G_TF_POINT);
gDPSetTexturePersp(gMasterGfxPos++, G_TP_NONE);
gSPTexture(gMasterGfxPos++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPSetTextureLUT(gMasterGfxPos++, G_TT_NONE);
gDPSetTextureDetail(gMasterGfxPos++, G_TD_CLAMP);
gDPSetTextureLOD(gMasterGfxPos++, G_TL_TILE);
gDPSetCombineLERP(gMasterGfxPos++, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE);
gDPPipeSync(gMasterGfxPos++);
N(func_802404B0_CB96B0)(temp_f24, temp_f26, temp_f20, temp_f22);
gDPPipeSync(gMasterGfxPos++);
gDPSetCycleType(gMasterGfxPos++, G_CYC_2CYCLE);
gDPSetDepthSource(gMasterGfxPos++, G_ZS_PIXEL);
}
}

View File

@ -2,3 +2,38 @@
#include "world/common/foliage.inc.c"
FoliageModelList N(tree1_Leaves) = {
.count = 3,
.models = { 33, 34, 35 }
};
FoliageModelList N(tree1_Trunk) = {
.count = 1,
.models = { 32 }
};
FoliageDropList N(tree1_Drops) = {
.count = 1,
.drops = {
{
.itemID = ITEM_JAMMIN_JELLY,
.pos = { 80, 100, -240 },
.spawnMode = 0xF,
.pickupFlag = SI_SAVE_FLAG(1383),
},
}
};
ShakeTreeConfig N(tree1) = {
.leaves = &N(tree1_Leaves),
.trunk = &N(tree1_Trunk),
.drops = &N(tree1_Drops),
};
Vec4f N(triggerCoord_80244A40) = { 137.0f, 0.0f, -283.0f, 0.0f };
Script N(80244A50) = SCRIPT({
SI_VAR(0) = N(tree1);
bind N(shakeTree) to TRIGGER_WALL_HAMMER 9;
bind N(shakeTree) to TRIGGER_POINT_BOMB N(triggerCoord_80244A40);
});

View File

@ -2,3 +2,20 @@
#include "map.h"
#define NAMESPACE flo_10
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkTexturePanFunc)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkTexturePanFunc2)(ScriptInstance* script, s32 isInitialCall);
s32 N(func_80240000_CB9200)(void);
ApiStatus N(func_80240040_CB9240)(ScriptInstance* script, s32 isInitialCall);
extern s32 N(D_80244070_CBD270);
extern s32** N(D_80241CB0_CBAEB0);
extern NpcGroupList N(npcGroupList_80244054);
extern Script N(802427EC);
extern Script N(80242AE8);
extern Script N(8024324C);
extern Script N(802435F8);
extern Script N(80244074);
extern Script N(80244A50);
extern Script N(main);

View File

@ -1,10 +1,845 @@
#include "flo_11.h"
#include "message_ids.h"
#include "sprite/npc/lakitu.h"
enum {
NPC_LAKITU0,
NPC_LAKITU1,
};
EntryList N(entryList) = {
{ 470.0f, 0.0f, -15.0f, 270.0f },
{ -470.0f, 0.0f, -15.0f, 90.0f },
{ 360.0f, 50.0f, -237.0f, 270.0f },
{ 118.0f, 50.0f, -420.0f, 270.0f },
{ 0.0f, 50.0f, 0.0f, 270.0f },
{ -120.0f, 50.0f, 357.0f, 90.0f },
{ -360.0f, 50.0f, -240.0f, 90.0f },
{ -360.0f, 35.0f, 0.0f, 90.0f },
};
MapConfig N(config) = {
.main = &N(main),
.entryList = &N(entryList),
.entryCount = ENTRY_COUNT(N(entryList)),
.background = &gBackgroundImage,
.tattle = { MSG_flo_11_tattle },
};
Script N(802403E0) = SCRIPT({
match STORY_PROGRESS {
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
SetMusicTrack(0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8);
}
else {
SetMusicTrack(0, SONG_FLOWER_FIELDS_SUNNY, 0, 8);
}
}
});
Script N(80240450) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(802406FC) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePlayerPhysics(TRUE);
DisablePartnerAI(0);
HidePlayerShadow(TRUE);
SetPlayerAnimation(ANIM_STAND_STILL);
GetCurrentPartnerID(SI_VAR(0));
if (SI_VAR(0) != 0) {
EnableNpcShadow(NPC_PARTNER, FALSE);
SetNpcPos(NPC_PARTNER, 0, -1000, 0);
}
GetEntryID(SI_VAR(0));
N(GetEntryPos)();
SI_VAR(2) -= 40;
SetPlayerPos(SI_VAR(1), SI_VAR(2), SI_VAR(3));
InterpPlayerYaw(SI_VAR(4), 0);
PlaySound(0x163);
func_802D286C(256);
func_802D2520(ANIM_STAND_STILL, 5, 2, 1, 1, 0);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
loop 40 {
SI_VAR(1) += 1;
SetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
sleep 1;
}
sleep 3;
GetCurrentPartnerID(SI_VAR(0));
if (SI_VAR(0) != 0) {
spawn {
DisablePartnerAI(0);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(2) -= 3;
SetNpcPos(NPC_PARTNER, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetNpcFlagBits(NPC_PARTNER, ((0x00000002)), FALSE);
EnablePartnerAI();
EnableNpcShadow(NPC_PARTNER, TRUE);
}
}
sleep 2;
func_802D2520(ANIM_STAND_STILL, 0, 0, 0, 0, 0);
sleep 1;
SetPlayerAnimation(ANIM_10002);
DisablePlayerPhysics(FALSE);
DisablePlayerInput(FALSE);
HidePlayerShadow(FALSE);
0:
N(GetCurrentFloor)();
sleep 1;
if (SI_VAR(0) != -1) {
goto 0;
}
spawn 0xFE363C8A;
});
Script N(80240A50) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePlayerPhysics(TRUE);
HidePlayerShadow(TRUE);
ModifyColliderFlags(0, SI_VAR(11), 0x7FFFFE00);
GetEntryID(SI_VAR(0));
N(GetEntryPos)();
SI_VAR(5) = SI_VAR(1);
SI_VAR(6) = SI_VAR(2);
SI_VAR(7) = SI_VAR(3);
SI_VAR(2) += 2;
SetPlayerPos(SI_VAR(1), SI_VAR(2), SI_VAR(3));
InterpPlayerYaw(SI_VAR(4), 0);
if (SI_VAR(4) == 90) {
SI_VAR(5) += 40;
} else {
SI_VAR(5) -= 40;
}
UseSettingsFrom(0, SI_VAR(5), SI_VAR(6), SI_VAR(7));
SetPanTarget(0, SI_VAR(5), SI_VAR(6), SI_VAR(7));
SetCamSpeed(0, 90.0);
PanToTarget(0, 0, 1);
GetCurrentPartnerID(SI_VAR(0));
if (SI_VAR(0) != 0) {
DisablePartnerAI(0);
EnableNpcShadow(NPC_PARTNER, FALSE);
SetNpcPos(NPC_PARTNER, 0, -1000, 0);
InterpNpcYaw(NPC_PARTNER, SI_VAR(0), 0);
}
sleep 1;
PlaySound(0x163);
spawn {
sleep 25;
HidePlayerShadow(FALSE);
}
func_802D286C(2304);
func_802D2520(ANIM_10002, 5, 3, 1, 1, 0);
loop 40 {
N(SomeXYZFunc2)(1.0);
SetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
sleep 1;
}
GetCurrentPartnerID(SI_VAR(0));
if (SI_VAR(0) != 0) {
spawn {
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(2) -= 3;
SetNpcPos(NPC_PARTNER, SI_VAR(0), SI_VAR(1), SI_VAR(2));
EnableNpcShadow(NPC_PARTNER, TRUE);
EnablePartnerAI();
}
}
sleep 5;
func_802D2520(ANIM_10002, 0, 0, 0, 0, 0);
ModifyColliderFlags(1, SI_VAR(11), 0x7FFFFE00);
DisablePlayerInput(FALSE);
DisablePlayerPhysics(FALSE);
PanToTarget(0, 0, 0);
spawn 0xFE363C8A;
});
Script N(80240E40) = SCRIPT({
N(UnkFunc25)();
if (SI_VAR(0) == 0) {
return;
}
GetCurrentPartner(SI_VAR(0));
if (SI_VAR(0) != 0) {
GetCurrentPartnerID(SI_VAR(1));
if (SI_VAR(1) != 6) {
return;
} else {
func_802D2B6C();
DisablePlayerInput(TRUE);
}
} else {
DisablePlayerInput(TRUE);
}
await N(80240F1C);
});
Script N(80240F1C) = SCRIPT({
N(SetPlayerStatusAnimFlags100000)();
group 27;
DisablePlayerPhysics(TRUE);
HidePlayerShadow(TRUE);
SI_VAR(0) = SI_VAR(10);
N(GetEntryPos)();
PlayerMoveTo(SI_VAR(1), SI_VAR(3), 3);
SI_VAR(0) = SI_VAR(10);
N(GetEntryPos)();
SetPlayerPos(SI_VAR(1), SI_VAR(2), SI_VAR(3));
SetPlayerFlagBits(2097152, 1);
N(GetCurrentCameraYawClamped180)();
InterpPlayerYaw(SI_VAR(0), 0);
sleep 2;
SetPlayerFlagBits(2097152, 0);
PlaySound(0x163);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
spawn {
sleep 4;
loop 40 {
SI_VAR(1) -= 1;
SetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
sleep 1;
}
}
func_802D286C(2048);
func_802D2520(ANIM_10002, 5, 2, 1, 1, 0);
sleep 25;
await 0xFE363C8C;
});
Script N(802410F8) = SCRIPT({
IsPlayerOnValidFloor(SI_VAR(0));
if (SI_VAR(0) == 0) {
return;
}
GetPlayerActionState(SI_VAR(0));
if (SI_VAR(0) == 26) {
return;
}
GetCurrentPartner(SI_VAR(0));
if (SI_VAR(0) != 0) {
GetCurrentPartnerID(SI_VAR(1));
if (SI_VAR(1) != 6) {
return;
} else {
func_802D2B6C();
DisablePlayerInput(TRUE);
}
} else {
DisablePlayerInput(TRUE);
}
group 27;
N(SetPlayerStatusAnimFlags100000)();
DisablePlayerPhysics(TRUE);
ModifyColliderFlags(0, SI_VAR(11), 0x7FFFFE00);
SI_VAR(0) = SI_VAR(10);
N(GetEntryPos)();
SI_VAR(5) = SI_VAR(1);
SI_VAR(6) = SI_VAR(2);
SI_VAR(6) += 2;
SI_VAR(7) = SI_VAR(3);
SI_VAR(8) = SI_VAR(4);
SI_VAR(8) += 180;
if (SI_VAR(4) >= 360) {
SI_VAR(4) -= 360;
}
InterpPlayerYaw(SI_VAR(8), 1);
sleep 1;
PlaySound(0x163);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPlayerPos(SI_VAR(0), SI_VAR(6), SI_VAR(7));
SetPlayerAnimation(ANIM_STAND_STILL);
func_802D286C(2048);
func_802D2520(ANIM_STAND_STILL, 5, 3, 1, 1, 0);
spawn {
sleep 8;
HidePlayerShadow(TRUE);
}
spawn {
sleep 3;
loop 40 {
N(SomeXYZFunc2)(1.0);
SetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
sleep 1;
}
}
sleep 25;
await 0xFE363C8C;
});
Script N(exitWalk_8024142C) = EXIT_WALK_SCRIPT(60, 0, "flo_23", 1);
Script N(exitWalk_80241488) = EXIT_WALK_SCRIPT(60, 1, "flo_12", 0);
Script N(802414E4) = SCRIPT({
group 27;
GotoMap("flo_11", 5);
sleep 100;
});
Script N(80241520) = SCRIPT({
group 27;
GotoMap("flo_11", 6);
sleep 100;
});
Script N(8024155C) = SCRIPT({
group 27;
GotoMap("flo_11", 7);
sleep 100;
});
Script N(80241598) = SCRIPT({
group 27;
GotoMap("flo_11", 2);
sleep 100;
});
Script N(802415D4) = SCRIPT({
group 27;
GotoMap("flo_11", 3);
sleep 100;
});
Script N(80241610) = SCRIPT({
group 27;
GotoMap("flo_11", 4);
sleep 100;
});
Script N(8024164C) = SCRIPT({
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
await N(80240E40);
});
Script N(80241698) = SCRIPT({
bind N(exitWalk_80241488) to TRIGGER_FLOOR_ABOVE 0;
bind N(exitWalk_8024142C) to TRIGGER_FLOOR_ABOVE 4;
SI_VAR(0) = 2;
SI_VAR(1) = 35;
SI_VAR(2) = N(802414E4);
bind N(8024164C) to TRIGGER_FLOOR_TOUCH SI_VAR(1);
SI_VAR(0) = 3;
SI_VAR(1) = 34;
SI_VAR(2) = N(80241520);
bind N(8024164C) to TRIGGER_FLOOR_TOUCH SI_VAR(1);
SI_VAR(0) = 4;
SI_VAR(1) = 33;
SI_VAR(2) = N(8024155C);
bind N(8024164C) to TRIGGER_FLOOR_TOUCH SI_VAR(1);
SI_VAR(0) = 5;
SI_VAR(1) = 32;
SI_VAR(2) = N(80241598);
bind N(8024164C) to TRIGGER_FLOOR_TOUCH SI_VAR(1);
SI_VAR(0) = 6;
SI_VAR(1) = 31;
SI_VAR(2) = N(802415D4);
bind N(8024164C) to TRIGGER_FLOOR_TOUCH SI_VAR(1);
SI_VAR(0) = 7;
SI_VAR(1) = 30;
SI_VAR(2) = N(80241610);
bind N(8024164C) to TRIGGER_FLOOR_TOUCH SI_VAR(1);
});
Script N(main) = SCRIPT({
WORLD_LOCATION = LOCATION_FLOWER_FIELDS;
SetSpriteShading(-1);
SetCamLeadPlayer(0, 0);
SetCamPerspective(0, 3, 25, 16, 4096);
SetCamBGColor(0, 0, 0, 0);
SetCamEnabled(0, 1);
func_80044238(5);
MakeNpcs(0, N(npcGroupList_802430D4));
await N(makeEntities);
ModifyColliderFlags(0, 1, 0x7FFFFE00);
ModifyColliderFlags(0, 5, 0x7FFFFE00);
GetEntryID(SI_VAR(0));
if (SI_VAR(0) <= 1) {
SI_VAR(0) = N(80241698);
spawn EnterWalk;
spawn N(80242240);
sleep 1;
} else {
SI_VAR(10) = N(80241698);
spawn N(802406FC);
sleep 1;
}
await N(802403E0);
if (STORY_PROGRESS >= STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) {
N(func_802402E0_CBDFB0)();
}
ModifyColliderFlags(3, 9, 0x00000009);
ModifyColliderFlags(3, 10, 0x00000009);
ModifyColliderFlags(3, 11, 0x00000009);
ModifyColliderFlags(3, 12, 0x00000009);
});
static s32 N(pad_1AB8)[] = {
0x00000000, 0x00000000,
};
NpcSettings N(npcSettings_80241AC0) = {
.height = 32,
.radius = 24,
.onHit = EnemyNpcHit,
.onDefeat = EnemyNpcDefeat,
.level = 20,
};
s32 N(vectorList_80241AEC)[] = {
0x43E60000, 0x43480000, 0xC3700000, 0x43B40000, 0x43160000, 0xC30C0000, 0x43820000, 0x42C80000,
0xC3700000, 0x43B40000, 0x42C80000, 0xC3DC0000, 0x43E60000, 0x42C80000, 0xC3700000, 0x43B40000,
0x42C80000, 0xC30C0000, 0x43820000, 0x42C80000, 0xC3700000, 0x43B40000, 0x42C80000, 0xC3DC0000,
};
s32 N(vectorList_80241B4C)[] = {
0xC2C80000, 0x43480000, 0xC2480000, 0x00000000, 0x43160000, 0xC3160000, 0x42C80000, 0x42C80000,
0xC2480000, 0x00000000, 0x42C80000, 0x42480000, 0xC2C80000, 0x42C80000, 0xC2480000, 0x00000000,
0x42C80000, 0xC3160000, 0x42C80000, 0x42C80000, 0xC2480000, 0x00000000, 0x42C80000, 0x42480000,
};
s32 N(vectorList_80241BAC)[] = {
0x43B40000, 0x42C80000, 0xC3DC0000, 0x43AF0000, 0x42F00000, 0xC35C0000, 0x43960000, 0x42F00000,
0xC3240000, 0x43200000, 0x42DC0000, 0xC3340000,
};
s32 N(vectorList_80241BDC)[] = {
0x00000000, 0x42C80000, 0x42480000, 0x43480000, 0x42DC0000, 0x41E80000, 0x43670000, 0x42DC0000,
0xC1900000, 0x42E60000, 0x42C80000, 0xC3160000,
};
s32 N(vectorList_80241C0C)[] = {
0x438E8000, 0x42F00000, 0xC2D80000, 0x43B90000, 0x42C80000, 0xC3020000, 0x43E30000, 0x42700000,
0xC1A00000,
};
s32 N(vectorList_80241C30)[] = {
0x43838000, 0x42DC0000, 0xC2840000, 0x43B40000, 0x42B40000, 0x42480000, 0x43E30000, 0x42480000,
0x41A00000,
};
s32 N(vectorList_80241C54)[] = {
0x43C80000, 0x41F00000, 0xC2200000, 0x43960000, 0x42A00000, 0xC2200000, 0x43160000, 0x43480000,
0xC2200000, 0x42C80000, 0x43AF0000, 0xC2200000,
};
s32 N(vectorList_80241C84)[] = {
0x43C80000, 0x41F00000, 0x42200000, 0x43960000, 0x42A00000, 0x42200000, 0x43160000, 0x43480000,
0x42200000, 0x42C80000, 0x43AF0000, 0x42200000,
};
Script N(80241CB4) = SCRIPT({
loop {
PlaySound(0x295);
sleep SI_VAR(0);
}
});
Script N(80241CF4) = SCRIPT({
SI_VAR(0) = 5;
SI_MAP_VAR(11) = spawn N(80241CB4);
spawn {
LoadPath(160, N(vectorList_80241AEC), 8, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU0, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
}
LoadPath(160, N(vectorList_80241B4C), 8, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU1, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
SI_MAP_VAR(10) = 1;
});
Script N(80241E4C) = SCRIPT({
spawn {
LoadPath(30, N(vectorList_80241BAC), 4, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU0, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
}
LoadPath(45, N(vectorList_80241BDC), 4, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU1, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
kill SI_MAP_VAR(11);
});
Script N(80241F80) = SCRIPT({
SI_VAR(0) = 4;
SI_MAP_VAR(11) = spawn N(80241CB4);
spawn {
LoadPath(35, N(vectorList_80241C0C), 3, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU0, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
}
LoadPath(35, N(vectorList_80241C30), 3, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU1, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
});
Script N(802420C8) = SCRIPT({
spawn {
LoadPath(40, N(vectorList_80241C54), 4, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU0, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
SetNpcPos(NPC_LAKITU0, 0, -1000, 0);
}
LoadPath(40, N(vectorList_80241C84), 4, 0);
loop {
GetNextPathPos();
SetNpcPos(NPC_LAKITU1, SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 0) {
break loop;
}
}
SetNpcPos(NPC_LAKITU1, 0, -1000, 0);
sleep 40;
kill SI_MAP_VAR(11);
});
Script N(80242240) = SCRIPT({
if (SI_SAVE_FLAG(1377) == 1) {
return;
}
if (STORY_PROGRESS < STORY_CH6_GOT_MAGICAL_BEAN) {
return;
}
if (SI_SAVE_FLAG(1375) == 0) {
return;
}
SetNpcPos(NPC_LAKITU0, 460, 200, -240);
SetNpcPos(NPC_LAKITU1, -100, 200, -50);
loop {
sleep 1;
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
if (SI_VAR(0) < 440) {
break loop;
}
}
DisablePlayerInput(TRUE);
SI_MAP_VAR(10) = 0;
spawn N(80241CF4);
SetCamType(0, 1, 0);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamSpeed(0, 90.0);
SetCamPitch(0, 25.0, -7.0);
SetCamDistance(0, 450);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 20;
SI_VAR(0) = 270;
SI_VAR(1) = 100;
SI_VAR(2) = -87;
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamPitch(0, 14.0, -11.0);
SetCamPosA(0, 87, 0);
SetCamPosB(0, 0, -50);
SetCamPosC(0, 87, 0);
SetCamSpeed(0, 1.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 30;
SetCamDistance(0, 150);
SetCamPitch(0, 17.0, -16.0);
PanToTarget(0, 0, 1);
loop {
sleep 1;
if (SI_MAP_VAR(10) == 1) {
break loop;
}
}
NpcFaceNpc(NPC_LAKITU0, NPC_LAKITU1, 1);
NpcFaceNpc(NPC_LAKITU1, NPC_LAKITU0, 1);
spawn N(80241E4C);
sleep 30;
SpeakToPlayer(NPC_LAKITU0, NPC_ANIM(lakitu, Palette_00, Anim_16), NPC_ANIM(lakitu, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0088));
NpcFaceNpc(NPC_LAKITU1, NPC_LAKITU0, 1);
SpeakToPlayer(NPC_LAKITU1, NPC_ANIM(lakitu, Palette_00, Anim_16), NPC_ANIM(lakitu, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x0089));
InterpNpcYaw(NPC_LAKITU0, 0, 1);
sleep 20;
SpeakToPlayer(NPC_LAKITU0, NPC_ANIM(lakitu, Palette_00, Anim_16), NPC_ANIM(lakitu, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x008A));
SpeakToPlayer(NPC_LAKITU1, NPC_ANIM(lakitu, Palette_00, Anim_16), NPC_ANIM(lakitu, Palette_00, Anim_1), 0, MESSAGE_ID(0x11, 0x008B));
SetCamType(0, 1, 0);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamSpeed(0, 90.0);
SetCamPitch(0, 14.0, -11.0);
SetCamDistance(0, 450);
SetCamPosA(0, 87, 0);
SetCamPosB(0, 0, -50);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
spawn N(80241F80);
SetNpcVar(0, 0, 1);
});
Script N(idle_80242810) = SCRIPT({
loop {
GetSelfVar(0, SI_VAR(0));
if (SI_VAR(0) != 0) {
break loop;
}
sleep 1;
}
spawn {
AdjustCam(0, 4.0, 0, 1000, 14.0, -11.0);
}
StartBossBattle(3);
});
Script N(defeat_802428B8) = SCRIPT({
GetBattleOutcome(SI_VAR(0));
match SI_VAR(0) {
== 0 {
SetNpcPos(NPC_LAKITU0, 400, 20, -40);
SetNpcPos(NPC_LAKITU1, 400, 20, 40);
InterpNpcYaw(NPC_LAKITU0, 270, 0);
InterpNpcYaw(NPC_LAKITU1, 270, 0);
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(2) += -60;
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamDistance(0, 900);
SetCamPitch(0, 24.0, -4.0);
SetCamPosA(0, -95.0, 0.0);
SetCamPosB(0, 0.0, -50.0);
SetCamSpeed(0, 90.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
await N(802420C8);
ResetCam(0, 4.0);
SI_SAVE_FLAG(1377) = 1;
SI_MAP_VAR(0) = 1;
DisablePlayerInput(FALSE);
}
== 1 {}
== 2 {
}
}
});
Script N(defeat_80242AC4) = SCRIPT({
GetBattleOutcome(SI_VAR(0));
match SI_VAR(0) {
== 0 {
0:
if (SI_MAP_VAR(0) == 0) {
sleep 1;
goto 0;
}
}
== 1 {}
== 2 {
}
}
});
Script N(init_80242B58) = SCRIPT({
SetNpcPos(NPC_LAKITU0, 0, -1000, 0);
if (SI_SAVE_FLAG(1377) == 0) {
if (STORY_PROGRESS >= STORY_CH6_GOT_MAGICAL_BEAN) {
if (SI_SAVE_FLAG(1375) == 1) {
SI_MAP_VAR(0) = 0;
BindNpcIdle(NPC_SELF, N(idle_80242810));
BindNpcDefeat(NPC_SELF, N(defeat_802428B8));
SetNpcPos(NPC_LAKITU0, 350, 120, -220);
InterpNpcYaw(NPC_LAKITU0, 270, 1);
}
}
}
});
Script N(init_80242C38) = SCRIPT({
SetNpcPos(NPC_LAKITU1, 0, -1000, 0);
if (SI_SAVE_FLAG(1377) == 0) {
if (STORY_PROGRESS >= STORY_CH6_GOT_MAGICAL_BEAN) {
if (SI_SAVE_FLAG(1375) == 1) {
BindNpcDefeat(NPC_SELF, N(defeat_80242AC4));
SetNpcPos(NPC_LAKITU1, 200, 110, 29);
InterpNpcYaw(NPC_LAKITU1, 0, 1);
}
}
}
});
StaticNpc N(npcGroup_80242CF4)[] = {
{
.id = NPC_LAKITU0,
.settings = &N(npcSettings_80241AC0),
.pos = { 553.0f, 60.0f, 52.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_40000,
.init = &N(init_80242B58),
.yaw = 270,
.dropFlags = 0x80,
.itemDropChance = 25,
.itemDrops = {
{ ITEM_SUPER_SHROOM, 2, 0 },
{ ITEM_MAPLE_SYRUP, 2, 0 },
{ ITEM_THUNDER_RAGE, 2, 0 },
{ ITEM_STOP_WATCH, 2, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(2),
.flowerDrops = STANDARD_FLOWER_DROPS(3),
.maxCoinBonus = 2,
.animations = {
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_2),
NPC_ANIM(lakitu, Palette_00, Anim_3),
NPC_ANIM(lakitu, Palette_00, Anim_3),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_4),
NPC_ANIM(lakitu, Palette_00, Anim_4),
NPC_ANIM(lakitu, Palette_00, Anim_3),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
},
},
{
.id = NPC_LAKITU1,
.settings = &N(npcSettings_80241AC0),
.pos = { 553.0f, 60.0f, 52.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_40000,
.init = &N(init_80242C38),
.yaw = 270,
.dropFlags = 0x80,
.itemDropChance = 25,
.itemDrops = {
{ ITEM_SUPER_SHROOM, 2, 0 },
{ ITEM_MAPLE_SYRUP, 2, 0 },
{ ITEM_THUNDER_RAGE, 2, 0 },
{ ITEM_STOP_WATCH, 2, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(2),
.flowerDrops = STANDARD_FLOWER_DROPS(3),
.maxCoinBonus = 2,
.animations = {
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_2),
NPC_ANIM(lakitu, Palette_00, Anim_3),
NPC_ANIM(lakitu, Palette_00, Anim_3),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_4),
NPC_ANIM(lakitu, Palette_00, Anim_4),
NPC_ANIM(lakitu, Palette_00, Anim_3),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
NPC_ANIM(lakitu, Palette_00, Anim_1),
},
},
};
NpcGroupList N(npcGroupList_802430D4) = {
NPC_GROUP(N(npcGroup_80242CF4), BATTLE_ID(24, 7, 0, 9)),
{},
};
static s32 N(pad_30EC) = {
0x00000000,
};
Script N(makeEntities) = SCRIPT({
MakeEntity(0x802EA0E8, -220, 60, -75, 0, MAKE_ENTITY_END);
AssignBlockFlag(SI_SAVE_FLAG(1384));
});
#include "world/common/SetPlayerStatusAnimFlags100000.inc.c"
#include "world/common/GetCurrentFloor.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_11/CBDCD0", func_80240034_CBDD04);
#include "world/common/UnkFunc25.inc.c"
#include "world/common/GetEntryPos.inc.c"
@ -12,4 +847,9 @@ INCLUDE_ASM(s32, "world/area_flo/flo_11/CBDCD0", func_80240034_CBDD04);
#include "world/common/SomeXYZFunc2.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_11/CBDCD0", func_802402E0_CBDFB0);
void func_80072950();
ApiStatus N(func_802402E0_CBDFB0)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(0, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

View File

@ -2,3 +2,17 @@
#include "map.h"
#define NAMESPACE flo_11
ApiStatus N(GetCurrentCameraYawClamped180)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetCurrentFloor)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(GetEntryPos)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SetPlayerStatusAnimFlags100000)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(SomeXYZFunc2)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc25)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802402E0_CBDFB0)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_802430D4);
extern Script N(80240F1C);
extern Script N(80242240);
extern Script N(main);
extern Script N(makeEntities);

View File

@ -1,3 +1,8 @@
#include "flo_12.h"
INCLUDE_ASM(s32, "world/area_flo/flo_12/CC0E30", func_80240000_CC0E30);
void func_80072950();
ApiStatus N(func_80240000_CC0E30)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(0, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

View File

@ -1,32 +1,491 @@
#include "flo_12.h"
#include "message_ids.h"
#include "sprite/npc/rosie.h"
enum {
NPC_ROSIE0,
NPC_ROSIE1,
};
static N(D_802429E0)[112];
EntryList N(entryList) = {
{ 280.0f, 0.0f, 0.0f, 270.0f },
{ 280.0f, 0.0f, 0.0f, 270.0f },
};
MapConfig N(config) = {
.main = &N(main),
.entryList = &N(entryList),
.entryCount = ENTRY_COUNT(N(entryList)),
.background = &gBackgroundImage,
.tattle = { MSG_flo_12_tattle },
};
Script N(80240750) = SCRIPT({
GetEntryID(SI_VAR(0));
if (SI_VAR(0) == 1) {
SetMusicTrack(0, SONG_SUNSHINE_RETURNS, 0, 8);
} else {
match STORY_PROGRESS {
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
SetMusicTrack(0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8);
}
else {
SetMusicTrack(0, SONG_FLOWER_FIELDS_SUNNY, 0, 8);
}
}
}
});
Script N(8024080C) = SCRIPT({
func_802D5FF8(137, 3);
});
Script N(80240830) = SCRIPT({
FadeOutMusic(0, 250);
sleep 10;
func_802D5FD8();
});
static s32 N(pad_86C) = {
0x00000000,
};
Script N(80240870) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(exitWalk_80240B1C) = EXIT_WALK_SCRIPT(60, 0, "flo_11", 1);
Script N(80240B78) = SCRIPT({
bind N(exitWalk_80240B1C) to TRIGGER_FLOOR_ABOVE 0;
});
Script N(main) = SCRIPT({
WORLD_LOCATION = LOCATION_FLOWER_FIELDS;
SetSpriteShading(-1);
SetCamLeadPlayer(0, 0);
SetCamPerspective(0, 3, 25, 16, 4096);
SetCamBGColor(0, 0, 0, 0);
SetCamEnabled(0, 1);
SI_AREA_FLAG(22) = 0;
MakeNpcs(0, N(npcGroupList_802429B8));
ModifyColliderFlags(3, 11, 0x00000006);
SI_VAR(0) = -65;
SI_VAR(1) = -210;
SI_VAR(2) = 90;
SI_VAR(3) = -110;
SI_VAR(4) = 0;
spawn N(80240870);
SI_VAR(0) = -200;
SI_VAR(1) = 130;
SI_VAR(2) = -80;
SI_VAR(3) = 170;
SI_VAR(4) = 0;
spawn N(80240870);
SI_VAR(0) = -270;
SI_VAR(1) = -80;
SI_VAR(2) = -225;
SI_VAR(3) = 125;
SI_VAR(4) = 0;
spawn N(80240870);
GetEntryID(SI_VAR(0));
if (SI_VAR(0) == 1) {
spawn N(802419F4);
} else {
ModifyColliderFlags(0, 1, 0x7FFFFE00);
SI_VAR(0) = N(80240B78);
spawn EnterWalk;
}
await N(80240750);
if (STORY_PROGRESS >= STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) {
N(func_80240000_CC0E30)();
}
});
static s32 N(pad_E28)[] = {
0x00000000, 0x00000000,
};
NpcSettings N(npcSettings_80240E30) = {
.height = 56,
.radius = 40,
.level = 99,
};
NpcSettings N(npcSettings_80240E5C) = {
.height = 24,
.radius = 24,
.level = 99,
};
#include "world/common/foliage.inc.c"
s32** N(D_802417EC_CC261C) = NULL;
Script N(802417F0) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 0);
return;
});
Script N(80241820) = SCRIPT({
ShowGotItem(SI_VAR(0), 1, 16);
return;
});
s32 N(D_80241850_CC2680) = {
0x00000000,
};
s32 N(D_80241854_CC2684) = {
0x00000000,
};
Script N(80241858) = SCRIPT({
SI_VAR(9) = SI_VAR(1);
func_802D6420();
SI_VAR(10) = SI_VAR(0);
match SI_VAR(0) {
== 0 {}
== -1 {}
else {
RemoveKeyItemAt(SI_VAR(1));
GetPlayerPos(SI_VAR(3), SI_VAR(4), SI_VAR(5));
N(AddPlayerHandsOffset)(SI_VAR(3), SI_VAR(4), SI_VAR(5));
SI_VAR(0) |= (const) 0x50000;
MakeItemEntity(SI_VAR(0), SI_VAR(3), SI_VAR(4), SI_VAR(5), 1, 0);
SetPlayerAnimation(0x60005);
sleep 30;
SetPlayerAnimation(ANIM_10002);
RemoveItemEntity(SI_VAR(0));
}
}
N(func_80240614_CC1444)(SI_VAR(10));
func_802D6954();
unbind;
});
Script N(8024199C) = {
SI_CMD(ScriptOpcode_CALL, N(func_8024064C_CC147C), SI_VAR(0)),
SI_CMD(ScriptOpcode_BIND_PADLOCK, N(80241858), 0x10, 0, N(D_802429E0), 0, 1),
SI_CMD(ScriptOpcode_CALL, N(func_802405C0_CC13F0), SI_VAR(0)),
SI_CMD(ScriptOpcode_RETURN),
SI_CMD(ScriptOpcode_END)
};
s32 N(D_802419EC_CC281C)[] = {
0x0000001E, 0x00000000,
};
Script N(802419F4) = SCRIPT({
DisablePlayerInput(TRUE);
DisablePlayerPhysics(TRUE);
GetNpcPos(NPC_ROSIE0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
UseSettingsFrom(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetPanTarget(0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamDistance(0, 350);
SetCamPitch(0, 17.0, -9.5);
SetCamPosA(0, 0, 0);
SetCamPosB(0, 0, -50);
SetCamSpeed(0, 90.0);
PanToTarget(0, 0, 1);
WaitForCam(0, 1.0);
sleep 20;
SpeakToPlayer(NPC_ROSIE0, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x00C7));
sleep 10;
GotoMap("flo_03", 2);
sleep 100;
});
Script N(80241B6C) = SCRIPT({
sleep 10;
SetNpcFlagBits(NPC_ROSIE0, ((NPC_FLAG_100)), TRUE);
PlayerMoveTo(-5, 20, 20);
SetNpcFlagBits(NPC_ROSIE0, ((NPC_FLAG_100)), FALSE);
PlayerFaceNpc(0, 1);
});
Script N(80241BE4) = SCRIPT({
sleep 10;
SetNpcFlagBits(NPC_ROSIE0, ((NPC_FLAG_100)), TRUE);
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_100)), TRUE);
PlayerMoveTo(-5, 20, 20);
SetNpcFlagBits(NPC_ROSIE0, ((NPC_FLAG_100)), FALSE);
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_100)), FALSE);
PlayerFaceNpc(0, 1);
});
Script N(interact_80241C8C) = SCRIPT({
await N(8024080C);
match STORY_PROGRESS {
< STORY_CH6_GOT_CRYSTAL_BERRY {
match SI_SAVE_FLAG(1378) {
== 0 {
spawn N(80241B6C);
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(0) += 30;
SetCamProperties(0, 4.0, SI_VAR(0), SI_VAR(1), SI_VAR(2), 325, 19.0, -9.5);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_3), NPC_ANIM(rosie, Palette_00, Anim_1), 5, MESSAGE_ID(0x11, 0x008C));
ShowChoice(MESSAGE_ID(0x1E, 0x0011));
sleep 10;
match SI_VAR(0) {
== 0 {
ContinueSpeech(-1, NPC_ANIM(rosie, Palette_00, Anim_3), NPC_ANIM(rosie, Palette_00, Anim_1), 5, MESSAGE_ID(0x11, 0x008D));
}
== 1 {
ContinueSpeech(-1, NPC_ANIM(rosie, Palette_00, Anim_3), NPC_ANIM(rosie, Palette_00, Anim_1), 5, MESSAGE_ID(0x11, 0x008E));
}
}
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_100)), FALSE);
SetNpcAnimation(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_5));
sleep 10;
SetNpcAnimation(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_2));
MakeItemEntity(ITEM_WATER_STONE, -33, 14, 19, 1, 1380);
sleep 10;
match SI_SAVE_FLAG(1375) {
== 0 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_4), 5, MESSAGE_ID(0x11, 0x008F));
}
== 1 {
SetPlayerAnimation(0x60002);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_4), 5, MESSAGE_ID(0x11, 0x008F));
SetPlayerAnimation(0x60005);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0091));
SetPlayerAnimation(ANIM_PRAY);
sleep 40;
SetPlayerAnimation(ANIM_10002);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0092));
SI_SAVE_FLAG(1379) = 1;
}
}
SI_SAVE_FLAG(1378) = 1;
}
== 1 {
match SI_SAVE_FLAG(1379) {
== 0 {
if (SI_SAVE_FLAG(1375) == 1) {
spawn N(80241BE4);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_4), 5, MESSAGE_ID(0x11, 0x0090));
SetPlayerAnimation(0x60005);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0091));
SetPlayerAnimation(ANIM_PRAY);
sleep 40;
SetPlayerAnimation(ANIM_10002);
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0092));
SI_SAVE_FLAG(1379) = 1;
} else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_4), 5, MESSAGE_ID(0x11, 0x0090));
}
}
== 1 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0093));
}
}
}
}
}
< 48 {
FindKeyItem(ITEM_CRYSTAL_BERRY, SI_VAR(0));
if (SI_VAR(0) != -1) {
spawn N(80241BE4);
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(0) += 30;
SetCamProperties(0, 4.0, SI_VAR(0), SI_VAR(1), SI_VAR(2), 325, 19.0, -9.5);
}
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0094));
SI_VAR(0) = N(D_802419EC_CC281C);
SI_VAR(1) = 0;
await N(8024199C);
match SI_VAR(0) {
<= 0 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0093));
}
else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0095));
RemoveItemEntity(SI_VAR(7));
MakeItemEntity(ITEM_CRYSTAL_BERRY, -33, 14, 19, 1, 1380);
SI_VAR(0) = 87;
SI_VAR(1) = 1;
await N(802417F0);
AddKeyItem(ITEM_WATER_STONE);
sleep 10;
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0096));
SI_AREA_FLAG(22) = 1;
STORY_PROGRESS = STORY_CH6_GOT_WATER_STONE;
}
}
}
< 53 {
match SI_AREA_FLAG(22) {
== 0 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0097));
}
== 1 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0096));
}
}
}
< 60 {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0098));
}
else {
SpeakToPlayer(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_4), NPC_ANIM(rosie, Palette_00, Anim_2), 5, MESSAGE_ID(0x11, 0x0099));
}
}
ResetCam(0, 4.0);
await N(80240830);
});
Script N(init_802423D0) = SCRIPT({
BindNpcInteract(NPC_SELF, N(interact_80241C8C));
GetNpcPos(NPC_SELF, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(0) += 35;
SetNpcPos(NPC_ROSIE1, SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetNpcFlagBits(NPC_ROSIE1, ((0x00000002)), TRUE);
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_HAS_SHADOW)), TRUE);
match STORY_PROGRESS {
< STORY_CH6_GOT_CRYSTAL_BERRY {
if (SI_SAVE_FLAG(1378) == 1) {
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_100)), FALSE);
SetNpcAnimation(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_2));
MakeItemEntity(ITEM_WATER_STONE, -33, 14, 19, 1, 1380);
SI_VAR(10) = SI_VAR(0);
}
}
< STORY_CH6_GOT_WATER_STONE {
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_100)), FALSE);
SetNpcAnimation(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_2));
MakeItemEntity(ITEM_WATER_STONE, -33, 14, 19, 1, 1380);
SI_VAR(10) = SI_VAR(0);
}
else {
SetNpcFlagBits(NPC_ROSIE1, ((NPC_FLAG_100)), FALSE);
SetNpcAnimation(NPC_SELF, NPC_ANIM(rosie, Palette_00, Anim_2));
MakeItemEntity(ITEM_CRYSTAL_BERRY, -33, 14, 19, 1, 1380);
SI_VAR(10) = SI_VAR(0);
}
}
});
StaticNpc N(npcGroup_802425D8)[] = {
{
.id = NPC_ROSIE0,
.settings = &N(npcSettings_80240E30),
.pos = { -70.0f, 0.0f, 20.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_400000,
.init = &N(init_802423D0),
.yaw = 90,
.dropFlags = 0x80,
.heartDrops = NO_DROPS,
.flowerDrops = NO_DROPS,
.animations = {
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
},
.tattle = MESSAGE_ID(0x1A, 0x00E0),
},
{
.id = NPC_ROSIE1,
.settings = &N(npcSettings_80240E5C),
.pos = { -70.0f, 0.0f, 20.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_GRAVITY,
.yaw = 90,
.dropFlags = 0x80,
.heartDrops = NO_DROPS,
.flowerDrops = NO_DROPS,
.animations = {
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
NPC_ANIM(rosie, Palette_00, Anim_1),
},
},
};
NpcGroupList N(npcGroupList_802429B8) = {
NPC_GROUP(N(npcGroup_802425D8), BATTLE_ID(0, 0, 0, 0)),
{},
};
INCLUDE_ASM(s32, "world/area_flo/flo_12/CC0E70", func_8024027C_CC10AC);
/*
ApiStatus N(func_8024027C_CC10AC)(ScriptInstance* script, s32 isInitialCall) {
s32** ptr = &N(D_80241C68_BE09F8);
s32 i;
s32* test;
if (*ptr == NULL) {
i = heap_malloc(16 * sizeof(s32));
*ptr = i;
for (i = 0, test = *ptr; i < 16; i++) {
*test++ = script->varTable[i];
if (N(D_802417EC_CC261C) == NULL) {
N(D_802417EC_CC261C) = heap_malloc(16 * sizeof(s32));
for (i = 0; i < 16; i++) {
N(D_802417EC_CC261C)[i] = script->varTable[i];
}
} else {
for (i = 0, test = *ptr; i < 16; i++) {
script->varTable[i] = *test++;
for (i = 0; i < 16; i++) {
script->varTable[i] = N(D_802417EC_CC261C)[i];
}
ptr = &N(D_80241C68_BE09F8);
heap_free(*ptr);
*ptr = NULL;
heap_free(N(D_802417EC_CC261C));
N(D_802417EC_CC261C) = NULL;
}
return ApiStatus_DONE2;
}
*/
#include "world/common/GetItemName.inc.c"
@ -34,38 +493,45 @@ ApiStatus N(func_8024027C_CC10AC)(ScriptInstance* script, s32 isInitialCall) {
#include "world/common/AddPlayerHandsOffset.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_12/CC0E70", func_802405C0_CC13F0);
/*
ApiStatus N(func_802405C0_CC13F0)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr;
if (isInitialCall) {
ptr = &D_80241CCC_BE0A5C;
*ptr = 0;
N(D_80241850_CC2680) = FALSE;
}
ptr = &D_80241CCC_BE0A5C;
if (*ptr != NULL) {
ptr = &D_80241CCC_BE0A5C;
*ptr = 0;
set_variable(script, *args, D_80241CD0_BE0A60);
if (N(D_80241850_CC2680)) {
N(D_80241850_CC2680) = FALSE;
set_variable(script, *args, N(D_80241854_CC2684));
return ApiStatus_DONE2;
}
return ApiStatus_BLOCK;
}
*/
INCLUDE_ASM(s32, "world/area_flo/flo_12/CC0E70", func_80240614_CC1444);
/*
ApiStatus N(func_80240614_CC1444)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
D_80241CD0_BE0A60 = get_variable(script, *args);
D_80241CCC_BE0A5C = 1;
N(D_80241854_CC2684) = get_variable(script, *args);
N(D_80241850_CC2680) = TRUE;
return ApiStatus_DONE2;
}
*/
INCLUDE_ASM(s32, "world/area_flo/flo_12/CC0E70", func_8024064C_CC147C);
ApiStatus N(func_8024064C_CC147C)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr = get_variable(script, *args);
s32 i;
if (ptr != NULL) {
for (i = 0; ptr[i] != 0; i++) {
N(D_802429E0)[i] = ptr[i];
}
N(D_802429E0)[i] = 0;
} else {
for (i = 0; i < 0x70; i++) {
N(D_802429E0)[i] = i + 16;
N(D_802429E0)[112] = 0;
}
}
return ApiStatus_DONE2;
}

View File

@ -2,3 +2,14 @@
#include "map.h"
#define NAMESPACE flo_12
ApiStatus N(AddPlayerHandsOffset)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(TransformFoliage)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240000_CC0E30)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802405C0_CC13F0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80240614_CC1444)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_8024064C_CC147C)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_802429B8);
extern Script N(802419F4);
extern Script N(main);

View File

@ -1,3 +1,8 @@
#include "flo_13.h"
INCLUDE_ASM(s32, "world/area_flo/flo_13/CC3810", func_80240000_CC3810);
void func_80072950();
ApiStatus N(func_80240000_CC3810)(ScriptInstance* script, s32 isInitialCall) {
func_80072950(0, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,31 @@
#include "flo_13.h"
INCLUDE_ASM(s32, "world/area_flo/flo_13/CC6DE0", func_802435D0_CC6DE0);
typedef struct {
/* 0x00 */ s32* unk_00;
/* 0x04 */ s32* unk_04;
/* 0x08 */ s16 unk_08;
/* 0x0A */ s16 unk_0A;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
} N(Unk_bss_struct);
static s8 N(D_80247B00)[0x200];
static s8 N(D_80247D00)[0x3D90];
static N(Unk_bss_struct) N(D_8024BA90);
ApiStatus N(func_802435D0_CC6DE0)(ScriptInstance *script, s32 isInitialCall) {
s32 var;
void* temp_s0 = load_asset_by_name("party_pokopi", &var);
decode_yay0(temp_s0, N(D_80247B00));
general_heap_free(temp_s0);
N(D_8024BA90).unk_00 = N(D_80247D00);
N(D_8024BA90).unk_08 = 0x96;
N(D_8024BA90).unk_0A = 0x69;
N(D_8024BA90).unk_0C = 2;
N(D_8024BA90).unk_04 = N(D_80247B00);
N(D_8024BA90).unk_10 = 1;
set_message_images(&N(D_8024BA90));
return ApiStatus_DONE2;
}

View File

@ -2,3 +2,15 @@
#include "map.h"
#define NAMESPACE flo_13
ApiStatus N(func_80240000_CC3810)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc41)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80241DB8_CC55C8)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_80242A6C_CC627C)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(UnkFunc42)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802433C0_CC6BD0)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802434D4_CC6CE4)(ScriptInstance* script, s32 isInitialCall);
ApiStatus N(func_802435D0_CC6DE0)(ScriptInstance* script, s32 isInitialCall);
extern NpcGroupList N(npcGroupList_80247984);
extern Script N(main);

View File

@ -1,19 +1,688 @@
#include "flo_14.h"
#include "message_ids.h"
EntryList N(entryList) = {
{ 720.0f, 0.0f, 0.0f, 270.0f },
{ -720.0f, 0.0f, 0.0f, 90.0f },
};
MapConfig N(config) = {
.main = &N(main),
.entryList = &N(entryList),
.entryCount = ENTRY_COUNT(N(entryList)),
.background = &gBackgroundImage,
.tattle = { MSG_flo_14_tattle },
};
Script N(802423F0) = SCRIPT({
match STORY_PROGRESS {
< STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE {
SetMusicTrack(0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8);
}
else {
SetMusicTrack(0, SONG_FLOWER_FIELDS_SUNNY, 0, 8);
}
}
});
Script N(updateTexturePan_80242460) = SCRIPT({
group 0;
if (SI_VAR(5) == 1) {
if (SI_VAR(6) == 1) {
if (SI_VAR(7) == 1) {
if (SI_VAR(8) == 1) {
N(UnkTexturePanFunc)();
return;
}
}
}
}
N(UnkTexturePanFunc2)();
});
Script N(exitWalk_802424FC) = EXIT_WALK_SCRIPT(60, 0, "flo_00", 1);
Script N(exitWalk_80242558) = EXIT_WALK_SCRIPT(60, 1, "flo_13", 0);
Script N(802425B4) = SCRIPT({
bind N(exitWalk_80242558) to TRIGGER_FLOOR_ABOVE 0;
bind N(exitWalk_802424FC) to TRIGGER_FLOOR_ABOVE 4;
});
s32 N(lavaResetList_802425FC)[] = {
0x0000001F, 0xC3FA0000, 0x00000000, 0xC2B40000, 0x00000019, 0xC3FF0000, 0x00000000, 0x00000000,
0x00000020, 0xC3FA0000, 0x00000000, 0x42DC0000, 0x00000021, 0xC37A0000, 0x00000000, 0xC2B40000,
0x0000001A, 0xC3700000, 0x00000000, 0x00000000, 0x00000022, 0xC37A0000, 0x00000000, 0x42DC0000,
0x0000001B, 0xC2480000, 0x00000000, 0x41C80000, 0x0000001C, 0x428C0000, 0x42700000, 0xC2BE0000,
0x0000001D, 0x43CD0000, 0x42700000, 0xC2BE0000, 0x0000001E, 0x44098000, 0x00000000, 0x42480000,
0x00000023, 0xC2480000, 0x00000000, 0x42DC0000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000,
};
Script N(main) = SCRIPT({
WORLD_LOCATION = LOCATION_FLOWER_FIELDS;
SetSpriteShading(-1);
SetCamPerspective(0, 3, 25, 16, 4096);
SetCamBGColor(0, 0, 0, 0);
SetCamEnabled(0, 1);
MakeNpcs(0, N(npcGroupList_80244F00));
spawn N(80244F30);
ModifyColliderFlags(3, 9, 0x00000002);
spawn {
ResetFromLava(N(lavaResetList_802425FC));
}
EnableTexPanning(29, 1);
EnableTexPanning(31, 1);
EnableTexPanning(32, 1);
EnableTexPanning(35, 1);
EnableTexPanning(36, 1);
EnableTexPanning(39, 1);
EnableTexPanning(41, 1);
EnableTexPanning(43, 1);
EnableTexPanning(45, 1);
EnableTexPanning(47, 1);
EnableTexPanning(49, 1);
EnableTexPanning(51, 1);
EnableTexPanning(53, 1);
EnableTexPanning(30, 1);
EnableTexPanning(33, 1);
EnableTexPanning(34, 1);
EnableTexPanning(37, 1);
EnableTexPanning(38, 1);
EnableTexPanning(42, 1);
EnableTexPanning(44, 1);
EnableTexPanning(46, 1);
EnableTexPanning(48, 1);
EnableTexPanning(50, 1);
EnableTexPanning(52, 1);
EnableTexPanning(54, 1);
spawn {
SI_VAR(0) = 1;
SI_VAR(1) = 140;
SI_VAR(2) = 0;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 1;
SI_VAR(6) = 0;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80242460);
}
spawn {
SI_VAR(0) = 2;
SI_VAR(1) = -200;
SI_VAR(2) = 0;
SI_VAR(3) = 0;
SI_VAR(4) = 0;
SI_VAR(5) = 1;
SI_VAR(6) = 0;
SI_VAR(7) = 0;
SI_VAR(8) = 0;
SI_VAR(9) = 0;
SI_VAR(10) = 0;
SI_VAR(11) = 0;
SI_VAR(12) = 0;
spawn N(updateTexturePan_80242460);
}
spawn N(80243E78);
spawn N(80245224);
ModifyColliderFlags(0, 1, 0x7FFFFE00);
ModifyColliderFlags(0, 5, 0x7FFFFE00);
SI_VAR(0) = N(802425B4);
spawn EnterWalk;
await N(802423F0);
if (STORY_PROGRESS >= STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) {
N(func_8024030C_CCB61C)();
}
});
static s32 N(pad_2BF4)[] = {
0x00000000, 0x00000000, 0x00000000,
};
Script N(80242C00) = SCRIPT({
group 11;
SI_VAR(10) = SI_VAR(0);
SI_VAR(11) = SI_VAR(1);
SI_VAR(12) = SI_VAR(2);
SI_VAR(13) = SI_VAR(3);
SI_VAR(14) = SI_VAR(4);
SI_VAR(12) -= SI_VAR(0);
SI_VAR(13) -= SI_VAR(1);
SI_VAR(0) = (float) SI_VAR(12);
SI_VAR(0) /= 100.0;
SI_VAR(15) = 100.0;
SI_VAR(15) /= (float) SI_VAR(0);
SI_VAR(15) += 11;
SI_VAR(5) = 200;
SI_VAR(5) /= SI_VAR(15);
SI_VAR(5) += 1;
loop SI_VAR(5) {
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
RandInt(199, SI_VAR(2));
SI_VAR(3) = 210;
SI_VAR(3) -= SI_VAR(2);
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
SI_VAR(2) += SI_VAR(14);
PlayEffect(0xD, SI_VAR(0), SI_VAR(2), SI_VAR(1), SI_VAR(3), 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
sleep SI_VAR(15);
0:
RandInt(SI_VAR(12), SI_VAR(0));
RandInt(SI_VAR(13), SI_VAR(1));
SI_VAR(0) += SI_VAR(10);
SI_VAR(1) += SI_VAR(11);
PlayEffect(0xD, SI_VAR(0), SI_VAR(14), SI_VAR(1), 200, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep SI_VAR(15);
goto 0;
});
Script N(80242EAC) = SCRIPT({
SI_VAR(9) = SI_VAR(6);
SI_VAR(8) = SI_VAR(5);
SI_VAR(7) = SI_VAR(4);
SI_VAR(6) = SI_VAR(3);
SI_VAR(5) = SI_VAR(2);
SI_VAR(4) = SI_VAR(1);
SI_VAR(3) = SI_VAR(0);
EnableModel(SI_VAR(6), 0);
0:
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
N(UnkFunc43)();
if (SI_VAR(0) == 0) {
sleep 1;
goto 0;
}
spawn {
sleep 5;
EnableModel(SI_VAR(6), 1);
}
if (SI_VAR(10) != 0) {
spawn {
sleep 5;
SI_VAR(0) = SI_VAR(3);
SI_VAR(1) = SI_VAR(4);
SI_VAR(2) = SI_VAR(5);
SI_VAR(1) += 10;
SI_VAR(2) += 8;
PlayEffect(0x11, 4, SI_VAR(0), SI_VAR(1), SI_VAR(2), 15, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 15;
SI_VAR(1) -= 10;
MakeItemEntity(SI_VAR(10), SI_VAR(0), SI_VAR(1), SI_VAR(2), 14, 0);
}
}
spawn {
sleep 10;
PlaySoundAt(0xF8, 0, SI_VAR(3), SI_VAR(4), SI_VAR(5));
}
MakeLerp(0, 180, 20, 2);
1:
UpdateLerp();
RotateModel(SI_VAR(8), SI_VAR(0), 1, 0, 0);
RotateModel(SI_VAR(9), SI_VAR(0), 1, 0, 0);
if (SI_VAR(1) == 1) {
sleep 1;
goto 1;
}
EnableModel(SI_VAR(7), 0);
});
s32 N(D_802431CC_CCE4DC) = {
0x00000000,
};
Script N(802431D0) = SCRIPT({
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
MakeLerp(SI_VAR(1), 48, 15, 0);
loop {
UpdateLerp();
GetPlayerPos(SI_VAR(2), SI_VAR(3), SI_VAR(4));
SetCamTarget(0, SI_VAR(2), SI_VAR(0), SI_VAR(4));
sleep 1;
if (SI_VAR(1) == 0) {
break loop;
}
}
loop {
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SetCamTarget(0, SI_VAR(0), 48, SI_VAR(2));
sleep 1;
}
});
Script N(802432E8) = SCRIPT({
SetNpcFlagBits(NPC_PARTNER, ((NPC_FLAG_GRAVITY)), FALSE);
loop {
GetPlayerPos(SI_VAR(0), SI_VAR(1), SI_VAR(2));
SI_VAR(1) += 20;
SI_VAR(2) += -5;
SetNpcPos(NPC_PARTNER, SI_VAR(0), SI_VAR(1), SI_VAR(2));
sleep 1;
}
});
Vec3f N(vectorList_80243384)[] = {
{ 531.0, 75.0, 81.0 }, { 481.0, 80.0, 81.0 },
{ 431.0, 75.0, 81.0 }, { 381.0, 70.0, 81.0 },
{ 331.0, 75.0, 81.0 }, { 281.0, 80.0, 81.0 },
{ 231.0, 75.0, 81.0 }, { 181.0, 70.0, 81.0 },
{ 131.0, 75.0, 81.0 }, { 81.0, 80.0, 81.0 },
{ 31.0, 75.0, 81.0 }, { -19.0, 70.0, 81.0 },
{ -69.0, 75.0, 81.0 },
};
Script N(80243420) = SCRIPT({
sleep 20;
PlaySound(0x80000023);
LoadPath(165, N(vectorList_80243384), 13, 10);
0:
GetNextPathPos();
TranslateModel(123, SI_VAR(1), SI_VAR(2), SI_VAR(3));
SI_VAR(2) += -27;
SI_VAR(3) += -10;
SetPlayerPos(SI_VAR(1), SI_VAR(2), SI_VAR(3));
N(func_8024046C_CCB77C)(SI_VAR(1), SI_VAR(2), SI_VAR(3));
sleep 1;
if (SI_VAR(0) == 1) {
goto 0;
}
StopSound(0x80000023);
});
Script N(8024352C) = SCRIPT({
IsPlayerWithin(531, 81, 30, SI_VAR(0));
if (SI_VAR(0) == 0) {
return;
}
DisablePlayerInput(TRUE);
GetCurrentPartner(SI_VAR(0));
if (SI_VAR(0) != 0) {
func_802D2B6C();
sleep 20;
}
DisablePlayerPhysics(TRUE);
DisablePartnerAI(0);
SetNpcFlagBits(NPC_PARTNER, ((NPC_FLAG_GRAVITY)), FALSE);
SetNpcFlagBits(NPC_PARTNER, ((NPC_FLAG_100)), TRUE);
GetModelCenter(123);
spawn {
SI_VAR(2) += -10;
SetPlayerJumpscale(0.2001953125);
PlayerJump(531, 48, SI_VAR(2), 10);
SetPlayerActionState(10);
}
spawn {
sleep 5;
SI_VAR(2) += -15;
SetNpcJumpscale(NPC_PARTNER, 0.2001953125);
NpcJump0(NPC_PARTNER, 531, 68, SI_VAR(2), 10);
}
SI_MAP_VAR(9) = spawn N(802431D0);
sleep 15;
N(func_802403D4_CCB6E4)();
if (SI_VAR(14) != 0) {
SI_VAR(14) = spawn N(802432E8);
}
await N(80243420);
if (SI_VAR(14) != 0) {
kill SI_VAR(14);
N(func_8024042C_CCB73C)();
}
GetModelCenter(123);
PlayEffect(0x43, 0, SI_VAR(0), SI_VAR(1), SI_VAR(2), 2, 0, 0, 0, 0, 0, 0, 0, 0);
PlaySoundAt(0x2F3, 0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
ClearPartnerMoveHistory(-4);
EnableModel(123, 0);
SI_AREA_FLAG(37) = 0;
kill SI_MAP_VAR(9);
SetNpcFlagBits(NPC_PARTNER, ((NPC_FLAG_GRAVITY)), TRUE);
EnablePartnerAI();
DisablePlayerPhysics(FALSE);
DisablePlayerInput(FALSE);
unbind;
});
Script N(80243870) = SCRIPT({
PlaySoundAt(0x193, 0, 591, 55, 121);
EnableModel(123, 1);
SI_VAR(2) = 1.0;
SI_VAR(4) = 0.0;
SI_VAR(5) = 0.0;
SI_VAR(6) = 0.0;
SI_VAR(7) = -30;
SI_VAR(8) = 20;
SI_VAR(7) /= 90.0;
SI_VAR(8) /= 90.0;
SI_VAR(9) = 180;
loop SI_VAR(9) {
TranslateModel(123, 591, 55, 121);
SI_VAR(3) = (float) SI_VAR(2);
SI_VAR(3) /= (float) 10;
ScaleModel(123, SI_VAR(3), SI_VAR(3), SI_VAR(3));
TranslateModel(123, SI_VAR(4), SI_VAR(5), SI_VAR(6));
SI_VAR(2) += 0.05078125;
if (SI_VAR(9) > 90) {
SI_VAR(4) += (float) SI_VAR(7);
SI_VAR(5) += (float) SI_VAR(8);
}
sleep 1;
}
SI_VAR(7) = -30;
SI_VAR(8) = -40;
SI_VAR(7) /= 60.0;
SI_VAR(8) /= 60.0;
loop 60 {
TranslateModel(123, 591, 55, 121);
ScaleModel(123, SI_VAR(3), SI_VAR(3), SI_VAR(3));
TranslateModel(123, SI_VAR(4), SI_VAR(5), SI_VAR(6));
SI_VAR(4) += (float) SI_VAR(7);
SI_VAR(6) += (float) SI_VAR(8);
sleep 1;
}
SI_AREA_FLAG(36) = 0;
SI_AREA_FLAG(37) = 1;
});
s32 N(D_80243B14_CCEE24) = {
0x00000000,
};
s32 N(D_80243B18_CCEE28) = {
0x0000005A,
};
// *INDENT-OFF*
Script N(80243B1C) = {
SI_CMD(ScriptOpcode_SET_GROUP, 0),
SI_CMD(ScriptOpcode_SET, SI_VAR(15), SI_VAR(0)),
SI_CMD(ScriptOpcode_LABEL, 0),
SI_CMD(ScriptOpcode_IF_EQ, SI_AREA_FLAG(35), 1),
SI_CMD(ScriptOpcode_SLEEP_FRAMES, 10),
SI_CMD(ScriptOpcode_GOTO, 0),
SI_CMD(ScriptOpcode_END_IF),
SI_CMD(ScriptOpcode_USE_BUFFER, &N(D_802431CC_CCE4DC)),
SI_CMD(ScriptOpcode_BUFFER_READ_1, SI_VAR(0)),
SI_CMD(ScriptOpcode_IF_EQ, SI_VAR(0), 0),
SI_CMD(ScriptOpcode_CALL, RandInt, 10, SI_VAR(0)),
SI_CMD(ScriptOpcode_ADD, SI_VAR(0), 1),
SI_CMD(ScriptOpcode_SLEEP_FRAMES, SI_VAR(0)),
SI_CMD(ScriptOpcode_GOTO, 0),
SI_CMD(ScriptOpcode_END_IF),
SI_CMD(ScriptOpcode_CALL, EnableModel, SI_VAR(15), 1),
SI_CMD(ScriptOpcode_CALL, RandInt, 4, SI_VAR(0)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(0), SI_FIXED(4.0)),
SI_CMD(ScriptOpcode_MUL_F, SI_VAR(0), SI_FIXED(-1.0)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(1), SI_FIXED(2.0)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(2), SI_VAR(0)),
SI_CMD(ScriptOpcode_DIV_F, SI_VAR(2), SI_FIXED(10.0)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(3), SI_FIXED(0.400390625)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(4), SI_FIXED(591.0)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(5), SI_FIXED(60.0)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(6), SI_FIXED(121.0)),
SI_CMD(ScriptOpcode_CALL, RandInt, 3, SI_VAR(7)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(7), SI_FIXED(3.0)),
SI_CMD(ScriptOpcode_MUL_F, SI_VAR(7), SI_FIXED(0.0400390625)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(9), SI_VAR(7)),
SI_CMD(ScriptOpcode_DIV_F, SI_VAR(9), SI_FIXED(5.0)),
SI_CMD(ScriptOpcode_CALL, RandInt, 50, SI_VAR(8)),
SI_CMD(ScriptOpcode_ADD, SI_VAR(8), 50),
SI_CMD(ScriptOpcode_LOOP, SI_VAR(8)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(14), SI_VAR(2)),
SI_CMD(ScriptOpcode_SUB_F, SI_VAR(14), SI_VAR(0)),
SI_CMD(ScriptOpcode_MUL_F, SI_VAR(14), SI_FIXED(0.046875)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(0), SI_VAR(14)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(14), SI_VAR(3)),
SI_CMD(ScriptOpcode_SUB_F, SI_VAR(14), SI_VAR(1)),
SI_CMD(ScriptOpcode_MUL_F, SI_VAR(14), SI_FIXED(0.046875)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(1), SI_VAR(14)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(4), SI_VAR(0)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(5), SI_VAR(1)),
SI_CMD(ScriptOpcode_SET_F, SI_VAR(14), SI_VAR(7)),
SI_CMD(ScriptOpcode_SUB_F, SI_VAR(14), SI_VAR(9)),
SI_CMD(ScriptOpcode_MUL_F, SI_VAR(14), SI_FIXED(0.203125)),
SI_CMD(ScriptOpcode_ADD_F, SI_VAR(9), SI_VAR(14)),
SI_CMD(ScriptOpcode_CALL, TranslateModel, SI_VAR(15), SI_VAR(4), SI_VAR(5), SI_VAR(6)),
SI_CMD(ScriptOpcode_CALL, ScaleModel, SI_VAR(15), SI_VAR(9), SI_VAR(9), SI_VAR(9)),
SI_CMD(ScriptOpcode_SLEEP_FRAMES, 1),
SI_CMD(ScriptOpcode_END_LOOP),
SI_CMD(ScriptOpcode_CALL, EnableModel, SI_VAR(15), 0),
SI_CMD(ScriptOpcode_GOTO, 0),
SI_CMD(ScriptOpcode_RETURN),
SI_CMD(ScriptOpcode_END)
};
// *INDENT-ON*
Script N(80243E78) = SCRIPT({
ModifyColliderFlags(3, 31, 0x00000006);
ModifyColliderFlags(3, 32, 0x00000006);
ModifyColliderFlags(3, 33, 0x00000006);
ModifyColliderFlags(3, 34, 0x00000006);
ModifyColliderFlags(3, 35, 0x00000006);
SI_VAR(0) = -730;
SI_VAR(1) = -130;
SI_VAR(2) = -470;
SI_VAR(3) = -70;
SI_VAR(4) = 0;
spawn N(80242C00);
SI_VAR(0) = -730;
SI_VAR(1) = 70;
SI_VAR(2) = -470;
SI_VAR(3) = 140;
SI_VAR(4) = 0;
spawn N(80242C00);
SI_VAR(0) = -280;
SI_VAR(1) = 130;
SI_VAR(2) = -110;
SI_VAR(3) = -70;
SI_VAR(4) = 0;
spawn N(80242C00);
SI_VAR(0) = -280;
SI_VAR(1) = 70;
SI_VAR(2) = -10;
SI_VAR(3) = 140;
SI_VAR(4) = 0;
spawn N(80242C00);
GetModelCenter(96);
SI_VAR(3) = 96;
SI_VAR(4) = 97;
SI_VAR(5) = 98;
SI_VAR(6) = 99;
SI_VAR(10) = 174;
spawn N(80242EAC);
GetModelCenter(82);
SI_VAR(3) = 82;
SI_VAR(4) = 83;
SI_VAR(5) = 84;
SI_VAR(6) = 85;
SI_VAR(10) = 0;
spawn N(80242EAC);
GetModelCenter(76);
SI_VAR(3) = 76;
SI_VAR(4) = 77;
SI_VAR(5) = 78;
SI_VAR(6) = 79;
SI_VAR(10) = 0;
spawn N(80242EAC);
GetModelCenter(90);
SI_VAR(3) = 90;
SI_VAR(4) = 91;
SI_VAR(5) = 92;
SI_VAR(6) = 93;
SI_VAR(10) = 0;
spawn N(80242EAC);
ModifyColliderFlags(0, 15, 0x7FFFFE00);
CloneModel(124, 10001);
CloneModel(124, 10002);
CloneModel(124, 10003);
CloneModel(124, 10004);
CloneModel(124, 10005);
EnableModel(123, 0);
EnableModel(124, 0);
EnableModel(10001, 0);
EnableModel(10002, 0);
EnableModel(10003, 0);
EnableModel(10004, 0);
EnableModel(10005, 0);
SI_VAR(0) = 10001;
spawn N(80243B1C);
SI_VAR(0) = 10002;
spawn N(80243B1C);
SI_VAR(0) = 10003;
spawn N(80243B1C);
SI_VAR(0) = 10004;
spawn N(80243B1C);
SI_VAR(0) = 10005;
spawn N(80243B1C);
func_802C9C70(0, 123, 1);
func_802C94A0(1, N(func_80240504_CCB814), 0);
func_802C90FC(123, 1, -1);
func_802C90FC(10001, 1, -1);
func_802C90FC(10002, 1, -1);
func_802C90FC(10003, 1, -1);
func_802C90FC(10004, 1, -1);
func_802C90FC(10005, 1, -1);
func_802C9C70(1, 57, 1);
func_802C94A0(2, N(func_802407D4_CCBAE4), 0);
func_802C90FC(57, 2, -1);
});
#include "world/common/UnkTexturePanFunc.inc.c"
#include "world/common/UnkTexturePanFunc2.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_8024030C_CCB61C);
void func_80072950();
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_80240340_CCB650);
ApiStatus N(func_8024030C_CCB61C)(ScriptInstance *script, s32 isInitialCall) {
func_80072950(0, 0, 0, 0, 0, 0);
return ApiStatus_DONE2;
}
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_802403D4_CCB6E4);
#include "world/common/UnkFunc43.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_8024042C_CCB73C);
ApiStatus N(func_802403D4_CCB6E4)(ScriptInstance *script, s32 isInitialCall) {
if (gPlayerData.currentPartner == PARTNER_NONE) {
script->varTable[14] = 0;
return ApiStatus_DONE2;
}
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_8024046C_CCB77C);
script->varTable[14] = 1;
set_variable(NULL, SI_MAP_VAR(0), get_npc_unsafe(-4)->flags);
return ApiStatus_DONE2;
}
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_80240504_CCB814);
ApiStatus N(func_8024042C_CCB73C)(ScriptInstance *script, s32 isInitialCall) {
Npc* npc = get_npc_unsafe(-4);
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCB310", func_802407D4_CCBAE4);
npc->flags = get_variable(NULL, SI_MAP_VAR(0));
return ApiStatus_DONE2;
}
ApiStatus N(func_8024046C_CCB77C)(ScriptInstance *script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
script->functionTemp[0].s = get_variable(script, *args++);
script->functionTemp[1].s = get_variable(script, *args++);
script->functionTemp[2].s = get_variable(script, *args++);
sfx_adjust_env_sound_pos(0x194, 0, script->functionTemp[0].s, script->functionTemp[1].s, script->functionTemp[2].s);
return ApiStatus_DONE2;
}
// graphics macros
#ifdef NON_MATCHING
s32 func_8011C2EC(s32);
void func_8011C2B0(s32, s32*,s32*, s32*);
void guMtxF2L(Matrix4f, Mtx *m);
void guMtxIdentF(Matrix4f);
void N(func_80240504_CCB814)(void) {
Matrix4f matrix;
s32 x, y, z;
guMtxIdentF(matrix);
matrix[0][0] = (sin_rad(N(D_80243B14_CCEE24) / 11.0f) * 0.04) + 0.98;
matrix[0][1] = sin_rad(N(D_80243B14_CCEE24) / 12.0f) * 0.04;
matrix[0][2] = cos_rad(N(D_80243B14_CCEE24) / 13.0f) * 0.04;
matrix[1][1] = (sin_rad(N(D_80243B14_CCEE24) / 7.0f + 1.0f) * 0.04) + 0.98;
matrix[1][0] = sin_rad(N(D_80243B14_CCEE24) / 14.0f) * 0.04;
matrix[1][2] = cos_rad(N(D_80243B14_CCEE24) / 15.0f) * 0.04;
matrix[2][2] = (sin_rad(N(D_80243B14_CCEE24) * 0.25f + 2.0f) * 0.04) + 0.98;
matrix[2][0] = sin_rad(N(D_80243B14_CCEE24) * 0.0625f) * 0.04;
matrix[2][1] = cos_rad(N(D_80243B14_CCEE24) / 17.0f) * 0.04;
guMtxF2L(matrix, &gDisplayContext->matrixStack[gMatrixListPos]);
func_8011C2B0(0, &x, &y, &z);
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPDisplayList(gMasterGfxPos++, func_8011C2EC(0));
N(D_80243B14_CCEE24) += 1.0f;
}
#else
INCLUDE_ASM(void, "world/area_flo/flo_14/CCB310", flo_14_func_80240504_CCB814, void);
#endif
typedef struct {
/* 0x00 */s16 unk_00;
/* 0x02 */s16 unk_02;
/* 0x04 */s16 unk_04;
/* 0x06 */char unk_06[0xA];
} N(UnkStruct); // size = 0x10
void N(func_802407D4_CCBAE4)(void) {
s32 i;
N(UnkStruct)* x;
N(UnkStruct)* y;
s32 z;
f32 temp_f20;
f32 temp_f0;
func_8011C2B0(1, &x, &y, &z);
for (i = 0; i < z; i++) {
N(UnkStruct)* ptr1 = &x[i];
N(UnkStruct)* ptr2 = &y[i];
if (ptr1->unk_00 < 0x259) {
temp_f20 = (sin_rad((N(D_80243B18_CCEE28) / 180.0f) * 3.141592) * 0.3) + 0.7;
temp_f0 = 0.2 - (sin_rad((N(D_80243B18_CCEE28) / 180.0f) * 3.141592) * 0.2);
ptr2->unk_00 = ((ptr1->unk_00 - 0x268) * temp_f20) + 616.0f + (temp_f0 * -48.0f);
ptr2->unk_02 = ((ptr1->unk_02 - 0x2C) * temp_f20) + 44.0f + (temp_f0 * 25.0f);
ptr2->unk_04 = ((ptr1->unk_04 - 0x71) * temp_f20) + 113.0f + (temp_f0 * -87.0f);
}
}
gSPDisplayList(gMasterGfxPos++, func_8011C2EC(1));
if (get_variable(NULL, SI_AREA_FLAG(36)) != 0) {
if (N(D_80243B18_CCEE28) > 90) {
N(D_80243B18_CCEE28) -= 360;
}
if (N(D_80243B18_CCEE28) >= -90) {
N(D_80243B18_CCEE28) += 5;
} else {
N(D_80243B18_CCEE28) += 20;
}
if (N(D_80243B18_CCEE28) >= 90) {
N(D_80243B18_CCEE28) = 90;
}
} else {
if (((u32)N(D_80243B18_CCEE28) - 141) < 119) {
N(D_802431CC_CCE4DC) = 1;
} else {
N(D_802431CC_CCE4DC) = 0;
}
N(D_80243B18_CCEE28) += 5;
}
if (N(D_80243B18_CCEE28) >= 360) {
N(D_80243B18_CCEE28) -= 360;
}
}

View File

@ -1,7 +1,314 @@
#include "flo_14.h"
#include "sprite/npc/bubulb.h"
#include "sprite/npc/bzzap.h"
enum {
NPC_BUBULB,
NPC_BZZAP,
};
static s32 N(D_802453B0_EF79C0)[91];
f32 N(D_802444C0_CCF7D0)[] = {
4.5f, 3.5f, 2.6f, 2.0f,
1.5f, 20.0f,
};
NpcAISettings N(npcAISettings_802444D8) = {
.moveSpeed = 1.0f,
.moveTime = 30,
.waitTime = 5,
.alertRadius = 80.0f,
.unk_10 = { .f = 30.0f },
.unk_14 = 2,
.chaseSpeed = 4.5f,
.unk_1C = { .s = 6 },
.unk_20 = 1,
.chaseRadius = 90.0f,
.unk_28 = { .f = 30.0f },
.unk_2C = 1,
};
Script N(npcAI_80244508) = SCRIPT({
SetSelfVar(0, 0);
SetSelfVar(5, -630);
SetSelfVar(6, 50);
SetSelfVar(1, 200);
N(func_80241E1C_CCD12C)(N(npcAISettings_802444D8));
});
NpcSettings N(npcSettings_80244578) = {
.height = 26,
.radius = 24,
.ai = &N(npcAI_80244508),
.onHit = EnemyNpcHit,
.onDefeat = EnemyNpcDefeat,
.level = 19,
};
NpcSettings N(npcSettings_802445A4) = {
.height = 56,
.radius = 40,
.level = 99,
};
NpcSettings N(npcSettings_802445D0) = {
.height = 24,
.radius = 24,
.level = 99,
};
s32 N(D_802445FC_CCF90C) = {
0x00000000,
};
s32 N(D_80244600_CCF910) = {
0x00000000,
};
Script N(80244604) = SCRIPT({
SI_VAR(9) = SI_VAR(1);
func_802D663C();
SI_VAR(10) = SI_VAR(0);
match SI_VAR(0) {
== 0 {}
== -1 {}
else {
RemoveItemAt(SI_VAR(1));
GetPlayerPos(SI_VAR(3), SI_VAR(4), SI_VAR(5));
N(AddPlayerHandsOffset)(SI_VAR(3), SI_VAR(4), SI_VAR(5));
MakeItemEntity(SI_VAR(0), SI_VAR(3), SI_VAR(4), SI_VAR(5), 1, 0);
SetPlayerAnimation(0x60005);
sleep 30;
SetPlayerAnimation(ANIM_10002);
RemoveItemEntity(SI_VAR(0));
}
}
N(func_80242288_CCD598)(SI_VAR(10));
func_802D6954();
unbind;
});
Script N(80244738) = {
SI_CMD(ScriptOpcode_CALL, N(func_802422C0_CCD5D0), SI_VAR(0)),
SI_CMD(ScriptOpcode_BIND_PADLOCK, N(80244604), 0x10, 0, N(D_802453B0_EF79C0), 0, 1),
SI_CMD(ScriptOpcode_CALL, N(func_80242234_CCD544), SI_VAR(0)),
SI_CMD(ScriptOpcode_RETURN),
SI_CMD(ScriptOpcode_END)
};
s32 N(D_80244788_CCFA98)[] = {
0x000000A1, 0x00000000,
};
Script N(interact_80244790) = SCRIPT({
if (SI_AREA_FLAG(37) == 1) {
SI_AREA_FLAG(35) = 1;
SpeakToPlayer(NPC_SELF, -1, -1, 0, MESSAGE_ID(0x11, 0x0063));
SI_AREA_FLAG(35) = 0;
return;
}
SI_AREA_FLAG(35) = 1;
if (SI_SAVE_FLAG(1412) == 0) {
SpeakToPlayer(NPC_SELF, -1, -1, 0, MESSAGE_ID(0x11, 0x005F));
} else {
SpeakToPlayer(NPC_SELF, -1, -1, 0, MESSAGE_ID(0x11, 0x0060));
}
FindItem(161, SI_VAR(0));
if (SI_VAR(0) != -1) {
SI_VAR(0) = N(D_80244788_CCFA98);
SI_VAR(1) = 0;
await N(80244738);
if (SI_VAR(0) == -1) {
SpeakToPlayer(NPC_SELF, -1, -1, 0, MESSAGE_ID(0x11, 0x0064));
} else {
SpeakToPlayer(NPC_SELF, -1, -1, 0, MESSAGE_ID(0x11, 0x0061));
SI_AREA_FLAG(36) = 1;
SetNpcFlagBits(NPC_SELF, ((NPC_FLAG_100)), TRUE);
PlayerMoveTo(555, 110, 20);
SetNpcFlagBits(NPC_SELF, ((NPC_FLAG_100)), FALSE);
InterpPlayerYaw(90, 0);
func_802CF56C(2);
sleep 5;
AdjustCam(0, 1.0, 0, 350, 17.0, -6.0);
spawn N(80243870);
SpeakToPlayer(NPC_SELF, -1, -1, 0, MESSAGE_ID(0x11, 0x0062));
spawn {
sleep 40;
InterpPlayerYaw(315, 0);
}
10:
if (SI_AREA_FLAG(37) == 0) {
sleep 1;
goto 10;
}
ResetCam(0, 4.0);
SpeakToPlayer(NPC_SELF, -1, -1, 5, MESSAGE_ID(0x11, 0x0063));
SI_SAVE_FLAG(1412) = 1;
bind N(8024352C) to TRIGGER_FLOOR_PRESS_A 30;
}
}
SI_AREA_FLAG(35) = 0;
});
Script N(init_80244ADC) = SCRIPT({
SI_AREA_FLAG(36) = 0;
SI_AREA_FLAG(37) = 0;
BindNpcInteract(NPC_SELF, N(interact_80244790));
});
StaticNpc N(npcGroup_80244B20) = {
.id = NPC_BUBULB,
.settings = &N(npcSettings_802445A4),
.pos = { 617.0f, 0.0f, 108.0f },
.flags = NPC_FLAG_PASSIVE | NPC_FLAG_100 | NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT | NPC_FLAG_4000,
.init = &N(init_80244ADC),
.yaw = 270,
.dropFlags = 0x80,
.heartDrops = NO_DROPS,
.flowerDrops = NO_DROPS,
.animations = {
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_E),
NPC_ANIM(bubulb, Palette_00, Anim_E),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
NPC_ANIM(bubulb, Palette_00, Anim_2),
},
.tattle = MESSAGE_ID(0x1A, 0x00E3),
};
StaticNpc N(npcGroup_80244D10) = {
.id = NPC_BZZAP,
.settings = &N(npcSettings_80244578),
.pos = { -175.0f, 55.0f, 15.0f },
.flags = NPC_FLAG_LOCK_ANIMS | NPC_FLAG_NO_Y_MOVEMENT,
.yaw = 90,
.dropFlags = 0x80,
.itemDropChance = 15,
.itemDrops = {
{ ITEM_MAPLE_SYRUP, 6, 0 },
{ ITEM_HONEY_SYRUP, 4, 0 },
},
.heartDrops = STANDARD_HEART_DROPS(3),
.flowerDrops = STANDARD_FLOWER_DROPS(2),
.minCoinBonus = 1,
.maxCoinBonus = 4,
.movement = { -175, 55, 15, 30, 0, -32767, 0, -175, 55, 15, 200, 0, 0, 1 },
.animations = {
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_3),
NPC_ANIM(bzzap, Palette_00, Anim_3),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_6),
NPC_ANIM(bzzap, Palette_00, Anim_6),
NPC_ANIM(bzzap, Palette_00, Anim_4),
NPC_ANIM(bzzap, Palette_00, Anim_2),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
NPC_ANIM(bzzap, Palette_00, Anim_1),
},
.unk_1E0 = { 00, 00, 00, 03, 00, 00, 00, 00},
};
NpcGroupList N(npcGroupList_80244F00) = {
NPC_GROUP(N(npcGroup_80244B20), BATTLE_ID(0, 0, 0, 0)),
NPC_GROUP(N(npcGroup_80244D10), BATTLE_ID(24, 25, 0, 1)),
{},
};
static s32 N(pad_4F24)[] = {
0x00000000, 0x00000000, 0x00000000,
};
Script N(80244F30) = SCRIPT({
MakeItemEntity(ITEM_STAR_PIECE, 675, 60, -100, 17, SI_SAVE_FLAG(1387));
});
static s32 N(pad_4F64)[] = {
0x00000000, 0x00000000, 0x00000000,
};
Script N(80244F70) = SCRIPT({
loop {
N(func_80242360_CCD670)(SI_VAR(0));
if (SI_VAR(0) == SI_VAR(4)) {
GetPlayerActionState(SI_VAR(0));
if (SI_VAR(0) != 23) {
if (SI_VAR(8) == 0) {
spawn {
GetModelCenter(SI_VAR(5));
PlaySoundAt(0x1DB, 4194304, SI_VAR(0), SI_VAR(1), SI_VAR(2));
}
}
if (SI_VAR(7) < 90) {
if (SI_VAR(7) == 0) {
sleep 5;
SI_VAR(8) = 6;
ModifyColliderFlags(0, SI_VAR(9), 0x7FFFFE00);
}
SI_VAR(8) += 1;
SI_VAR(7) += SI_VAR(8);
}
goto 50;
}
}
if (SI_VAR(7) != 0) {
SI_VAR(8) -= 1;
SI_VAR(7) += SI_VAR(8);
if (SI_VAR(7) <= 0) {
SI_VAR(8) = 0;
SI_VAR(7) = 0;
spawn {
GetModelCenter(SI_VAR(5));
PlaySoundAt(0x1DC, 0, SI_VAR(0), SI_VAR(1), SI_VAR(2));
}
ModifyColliderFlags(1, SI_VAR(9), 0x7FFFFE00);
}
}
50:
if (SI_VAR(7) >= 90) {
SI_VAR(8) = -1;
SI_VAR(7) = 90;
}
RotateModel(SI_VAR(5), SI_VAR(7), -1, 0, 0);
RotateModel(SI_VAR(6), SI_VAR(7), -1, 0, 0);
sleep 1;
}
});
Script N(80245224) = SCRIPT({
SI_VAR(4) = 21;
SI_VAR(5) = 21;
SI_VAR(6) = 20;
SI_VAR(7) = SI_MAP_VAR(10);
SI_VAR(8) = SI_MAP_VAR(11);
SI_VAR(9) = 22;
spawn N(80244F70);
SI_VAR(4) = 17;
SI_VAR(5) = 26;
SI_VAR(6) = 25;
SI_VAR(7) = SI_MAP_VAR(12);
SI_VAR(8) = SI_MAP_VAR(13);
SI_VAR(9) = 18;
spawn N(80244F70);
});
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80240B10_CCBE20);
/*
void N(func_80240B10_CCBE20)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
@ -25,9 +332,155 @@ void N(func_80240B10_CCBE20)(ScriptInstance* script, NpcAISettings* aiSettings,
enemy->varTable[4] = npc->pos.y * 100.0;
script->functionTemp[0].s = 1;
}
*/
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80240CC0_CCBFD0);
#ifdef NON_MATCHING
// second func_800DCB7C call
void N(func_80240CC0_CCBFD0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
f32 temp_f24;
f32 posX, posY, posZ, posW;
s32 var;
f32 temp_f0;
f32 phi_f4;
s32 phi_v0;
s32 phi_s4 = 0;
f32 a = enemy->varTable[7];
f32 temp_f2 = a / 100.0;
f32 b = enemy->varTable[3];
f32 temp_f26 = b / 100.0;
f32 c = enemy->varTable[4];
f32 temp_f20 = c / 100.0;
f32 d = enemy->varTable[1];
f32 temp_f22 = d / 100.0;
enemy->varTable[4] = npc->pos.y * 100.0;
temp_f24 = temp_f26 + temp_f2;
if ((enemy->varTable[0] & 0x11) == 1) {
if (npc->flags & 8) {
if (temp_f22 < (temp_f24 - npc->pos.y)) {
enemy->varTable[0] |= 0x10;
}
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
if (temp_f22 < (temp_f26 - posW)) {
enemy->varTable[0] |= 0x10;
}
}
}
if ((enemy->varTable[0] & 0x11) == 0x11) {
// original m2c reference:
//if ((temp_s0->flags & 8) != 0) {
// phi_f0 = temp_f20 + ((temp_f24 - temp_f20) * D_802441A8_CB91A8);
// phi_f4 = temp_f24;
//} else {
// func_800DCB7C(temp_s0->unk_80, &subroutine_argA, &subroutine_argB, &subroutine_argC, &subroutine_argD, temp_s0->pos.x, temp_f20, temp_s0->pos.z, 1000.0f);
// temp_f4 = subroutine_argB + temp_f26;
// phi_f0 = temp_f20 + ((temp_f4 - temp_f20) * D_802441B0_CB91B0);
// phi_f4 = temp_f4;
//}
//temp_s0->pos.y = phi_f0;
f64 test;
if (npc->flags & 8) {
phi_f4 = temp_f24;
npc->pos.y = temp_f20 + ((phi_f4 - temp_f20) * 0.09);
} else {
posX = npc->pos.x;
posY = temp_f20;
posZ = npc->pos.z;
posW = 1000.0f;
func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
phi_f4 = posY + temp_f26;
npc->pos.y = temp_f20 + ((phi_f4 - temp_f20) * 0.09);
}
if (fabsf(phi_f4 - npc->pos.y) < 1.0) {
npc->pos.y = phi_f4;
enemy->varTable[0] &= ~0x10;
}
} else if (enemy->varTable[1] > 0) {
temp_f0 = sin_deg(enemy->varTable[2]);
if (npc->flags & 8) {
phi_v0 = FALSE;
} else {
posX = npc->pos.x;
posY = npc->pos.y;
posZ = npc->pos.z;
posW = 1000.0f;
phi_v0 = func_800DCB7C(npc->unk_80, &posX, &posY, &posZ, &posW);
}
if (phi_v0) {
npc->pos.y = posY + temp_f26 + (temp_f0 * temp_f22);
} else {
npc->pos.y = temp_f24 + (temp_f0 * temp_f22);
}
enemy->varTable[2] = clamp_angle(enemy->varTable[2] + 10);
}
if (enemy->varTable[9] <= 0) {
if (aiSettings->unk_14 >= 0) {
if (script->functionTemp[1].s <= 0) {
script->functionTemp[1].s = aiSettings->unk_14;
if ((gPlayerStatusPtr->position.y < ((npc->pos.y + npc->collisionHeight) + 10.0)) &&
func_800490B4(territory, enemy, aiSettings->alertRadius, aiSettings->unk_10.f, 0)) {
fx_emote(0, npc, 0.0f, npc->collisionHeight, 1.0f, 2.0f, -20.0f, 12, &var);
npc->moveToPos.y = npc->pos.y;
func_800494C0(npc, 0x2F4, 0x200000);
if (enemy->npcSettings->unk_2A & 1) {
script->functionTemp[0].s = 10;
} else {
script->functionTemp[0].s = 12;
}
return;
}
}
script->functionTemp[1].s--;
}
} else {
enemy->varTable[9]--;
}
if (is_point_within_region(enemy->territory->wander.wanderShape,
enemy->territory->wander.point.x, enemy->territory->wander.point.z,
npc->pos.x, npc->pos.z,
enemy->territory->wander.wanderSizeX, enemy->territory->wander.wanderSizeZ)) {
posW = dist2D(enemy->territory->wander.point.x, enemy->territory->wander.point.z, npc->pos.x, npc->pos.z);
if (npc->moveSpeed < posW) {
npc->yaw = atan2(npc->pos.x, npc->pos.z, enemy->territory->wander.point.x, enemy->territory->wander.point.z);
phi_s4 = 1;
}
}
if (enemy->territory->wander.wanderSizeX | enemy->territory->wander.wanderSizeZ | phi_s4) {
if (npc->turnAroundYawAdjustment == 0) {
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
} else {
return;
}
}
enemy->varTable[4] = npc->pos.y * 100.0;
if (aiSettings->moveTime > 0) {
if ((npc->duration <= 0) || (--npc->duration <= 0)) {
script->functionTemp[0].s = 2;
script->functionTemp[1].s = (rand_int(1000) % 3) + 2;
if ((aiSettings->unk_2C <= 0) || (aiSettings->waitTime <= 0) || (script->functionTemp[1].s < 3)) {
script->functionTemp[0].s = 0;
}
}
}
}
#else
INCLUDE_ASM(void, "world/area_flo/flo_14/CCBE20", flo_14_func_80240CC0_CCBFD0, ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory);
#endif
#include "world/common/UnkNpcAIFunc1.inc.c"
@ -35,18 +488,15 @@ INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80240CC0_CCBFD0);
#include "world/common/UnkNpcAIFunc2.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80241764_CCCA74);
/*
void N(func_80241764_CCCA74)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) {
Enemy* enemy = script->owner1.enemy;
Npc* npc = get_npc_unsafe(enemy->npcID);
npc->pos.y += N(D_802436DC_BE6E8C)[npc->duration++];
npc->pos.y += N(D_802444C0_CCF7D0)[npc->duration++];
if (npc->duration >= 5) {
script->functionTemp[0].s = 12;
}
}
*/
#include "world/common/UnkNpcAIFunc14.inc.c"
@ -56,8 +506,6 @@ void N(func_80241764_CCCA74)(ScriptInstance* script, NpcAISettings* aiSettings,
#include "world/common/UnkFunc5.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80241E1C_CCD12C);
/*
ApiStatus N(func_80241E1C_CCD12C)(ScriptInstance* script, s32 isInitialCall) {
Enemy* enemy = script->owner1.enemy;
Bytecode* args = script->ptrReadPos;
@ -72,11 +520,11 @@ ApiStatus N(func_80241E1C_CCD12C)(ScriptInstance* script, s32 isInitialCall) {
territory.pointZ = enemy->territory->wander.detect.z;
territory.sizeX = enemy->territory->wander.detectSizeX;
territory.sizeZ = enemy->territory->wander.detectSizeZ;
territory.unk_34 = 120.0f;
territory.unk_18 = 120.0f;
territory.unk_1C = 0;
if (isInitialCall) {
N(func_80241CF8_CCD008)(npc, enemy, script, aiSettings);
N(UnkFunc5)(npc, enemy, script, aiSettings);
}
npc->unk_AB = -2;
@ -97,7 +545,7 @@ ApiStatus N(func_80241E1C_CCD12C)(ScriptInstance* script, s32 isInitialCall) {
case 2:
N(UnkNpcAIFunc1)(script, aiSettings, territoryPtr);
case 3:
N(func_802413A8_CCC6B8)(script, aiSettings, territoryPtr);
N(UnkFunc4)(script, aiSettings, territoryPtr);
break;
case 10:
N(UnkNpcAIFunc2)(script, aiSettings, territoryPtr);
@ -111,50 +559,58 @@ ApiStatus N(func_80241E1C_CCD12C)(ScriptInstance* script, s32 isInitialCall) {
N(UnkNpcAIFunc3)(script, aiSettings, territoryPtr);
break;
case 14:
N(func_80241968_CCCC78)(script, aiSettings, territoryPtr);
N(UnkFunc6)(script, aiSettings, territoryPtr);
break;
}
return ApiStatus_BLOCK;
}
*/
#include "world/common/GetNpcCollisionHeight.inc.c"
#include "world/common/AddPlayerHandsOffset.inc.c"
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80242234_CCD544);
/*
ApiStatus N(func_80242234_CCD544)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr;
if (isInitialCall) {
ptr = &D_80241CCC_BE0A5C;
*ptr = 0;
N(D_802445FC_CCF90C) = FALSE;
}
ptr = &D_80241CCC_BE0A5C;
if (*ptr != NULL) {
ptr = &D_80241CCC_BE0A5C;
*ptr = 0;
set_variable(script, *args, D_80241CD0_BE0A60);
if (N(D_802445FC_CCF90C)) {
N(D_802445FC_CCF90C) = FALSE;
set_variable(script, *args, N(D_80244600_CCF910));
return ApiStatus_DONE2;
}
return ApiStatus_BLOCK;
}
*/
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_80242288_CCD598);
/*
ApiStatus N(func_80242288_CCD598)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
D_80241CD0_BE0A60 = get_variable(script, *args);
D_80241CCC_BE0A5C = 1;
N(D_80244600_CCF910) = get_variable(script, *args);
N(D_802445FC_CCF90C) = TRUE;
return ApiStatus_DONE2;
}
*/
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCBE20", func_802422C0_CCD5D0);
extern s32 N(D_802453B0_EF79C0)[91];
ApiStatus N(func_802422C0_CCD5D0)(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32* ptr = get_variable(script, *args);
s32 i;
if (ptr != NULL) {
for (i = 0; ptr[i] != 0; i++) {
N(D_802453B0_EF79C0)[i] = ptr[i];
}
N(D_802453B0_EF79C0)[i] = 0;
} else {
for (i = 0; i <= 90; i++) {
N(D_802453B0_EF79C0)[i] = i + 128;
N(D_802453B0_EF79C0)[91] = 0;
}
}
return ApiStatus_DONE2;
}

View File

@ -1,3 +1,8 @@
#include "flo_14.h"
INCLUDE_ASM(s32, "world/area_flo/flo_14/CCD670", func_80242360_CCD670);
ApiStatus N(func_80242360_CCD670)(ScriptInstance *script, s32 isInitialCall) {
CollisionStatus* collisionStatus = &gCollisionStatus;
set_variable(script, *script->ptrReadPos, collisionStatus->floorBelow);
return ApiStatus_DONE2;
}

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