mirror of
https://github.com/pmret/papermario.git
synced 2025-04-22 20:55:55 +02:00
one for the books (#765)
* func_802A1518_78BB18 * btl_state_update_select_target * wip * btl_state_draw_select_target and WIP * cleanup * render_shaded_sprite and wip * WIP/cleanup * wip * reset_player_status * btl_state_update_player_move and cleanup * func_802A2C84 * func_80242FE0 wip * btl_state_update_normal_start and cleanup * WIP * btl_state_update_end_turn * btl_state_update_enemy_striking_first * cleanup * cleanup & wip * item_entity_update & cleanup * update_item_entity_temp * appendGfx_item_entity * E21870 * mdl_create_mode * cleanup * func_802A9310_42D220 * area_flo2 battle funcs dun * b_area_isk_part_1_ChompChainUpdate * wip and rip * clean * partner_move_to_goal * partner_get_out * wip * cleanup * func_802BD1AC_31CD1C * func_802BD754_31D2C4 * Cleanin * fix func def * UnkShadowFunc001 * a bunch of kpa funcs * comment
This commit is contained in:
parent
c108f11cab
commit
408c49cb75
@ -634,8 +634,8 @@ typedef struct UiStatus {
|
||||
/* 0x38 */ s16 showTimer;
|
||||
/* 0x3A */ s8 hidden;
|
||||
/* 0x3B */ s8 unk_3B[2];
|
||||
/* 0x3D */ u8 displayHP;
|
||||
/* 0x3E */ u8 displayFP;
|
||||
/* 0x3D */ s8 displayHP;
|
||||
/* 0x3E */ s8 displayFP;
|
||||
/* 0x3F */ char unk_3F;
|
||||
/* 0x40 */ s16 displayCoins;
|
||||
/* 0x42 */ s16 displayStarpoints;
|
||||
@ -644,20 +644,22 @@ typedef struct UiStatus {
|
||||
/* 0x47 */ s8 disabled; /* set != 0 for menu to be disabled completely */
|
||||
/* 0x48 */ s16 displaySP;
|
||||
/* 0x4A */ s8 hpBlinking; /* bool */
|
||||
/* 0x4B */ u8 hpBlinkCounter;
|
||||
/* 0x4C */ u8 hpBlinkTimer; /* until stop */
|
||||
/* 0x4B */ s8 hpBlinkCounter;
|
||||
/* 0x4C */ s8 hpBlinkTimer; /* until stop */
|
||||
/* 0x4D */ s8 fpBlinking; /* bool */
|
||||
/* 0x4E */ u8 fpBlinkCounter;
|
||||
/* 0x4F */ u8 fpBlinkTimer; /* until stop */
|
||||
/* 0x4E */ s8 fpBlinkCounter;
|
||||
/* 0x4F */ s8 fpBlinkTimer; /* until stop */
|
||||
/* 0x50 */ s8 spBlinking;
|
||||
/* 0x51 */ u8 spBlinkCounter;
|
||||
/* 0x51 */ s8 spBlinkCounter;
|
||||
/* 0x52 */ s8 starpointsBlinking; /* bool */
|
||||
/* 0x53 */ u8 starpointsBlinkCounter;
|
||||
/* 0x53 */ s8 starpointsBlinkCounter;
|
||||
/* 0x54 */ s8 coinsBlinking; /* bool */
|
||||
/* 0x55 */ u8 coinsBlinkCounter;
|
||||
/* 0x56 */ u8 coinsBlinkTimer; /* until stop */
|
||||
/* 0x57 */ char unk_57[3];
|
||||
/* 0x5A */ u8 spBarsToBlink; /* how many sp bars to blink */
|
||||
/* 0x55 */ s8 coinsBlinkCounter;
|
||||
/* 0x56 */ s8 coinsBlinkTimer; /* until stop */
|
||||
/* 0x57 */ u8 unk_57;
|
||||
/* 0x58 */ u8 unk_58;
|
||||
/* 0x59 */ u8 unk_59;
|
||||
/* 0x5A */ s8 spBarsToBlink; /* how many sp bars to blink */
|
||||
/* 0x5B */ char unk_5B;
|
||||
/* 0x5C */ s32 iconIndex10;
|
||||
/* 0x60 */ s32 iconIndex11;
|
||||
@ -799,11 +801,6 @@ typedef struct Camera {
|
||||
/* 0x556 */ s16 unk_556;
|
||||
} Camera; // size = 0x558
|
||||
|
||||
typedef struct FGModelData {
|
||||
/* 0x00 */ char unk_00[0x18];
|
||||
/* 0x18 */ s32* idList;
|
||||
} FGModelData; // size = unknown
|
||||
|
||||
typedef struct BattleStatus {
|
||||
/* 0x000 */ s32 flags1;
|
||||
/* 0x004 */ s32 flags2;
|
||||
@ -813,7 +810,9 @@ typedef struct BattleStatus {
|
||||
/* */ void* varTablePtr[16];
|
||||
/* */ };
|
||||
/* 0x048 */ s8 currentSubmenu;
|
||||
/* 0x049 */ char unk_49[3];
|
||||
/* 0x049 */ s8 unk_49;
|
||||
/* 0x04A */ s8 unk_4A;
|
||||
/* 0x04B */ s8 unk_4B;
|
||||
/* 0x04C */ s8 unk_4C[16];
|
||||
/* 0x05C */ s8 unk_5C[16];
|
||||
/* 0x06C */ s16 unk_6C;
|
||||
@ -928,9 +927,9 @@ typedef struct BattleStatus {
|
||||
/* 0x430 */ s8 holdInputBufferPos;
|
||||
/* 0x431 */ s8 inputBufferPos;
|
||||
/* 0x432 */ s8 unk_432;
|
||||
/* 0x433 */ char unk_433;
|
||||
/* 0x433 */ u8 unk_433;
|
||||
/* 0x434 */ s32* unk_434;
|
||||
/* 0x438 */ FGModelData* foregroundModelData;
|
||||
/* 0x438 */ struct Stage* currentStage;
|
||||
/* 0x43C */ struct EffectInstance* buffEffect;
|
||||
/* 0x440 */ u8 tattleFlags[28];
|
||||
/* 0x45C */ char unk_45C[4];
|
||||
@ -1107,8 +1106,8 @@ typedef struct ItemEntity {
|
||||
/* 0x22 */ char unk_22[2];
|
||||
/* 0x24 */ u32* readPos;
|
||||
/* 0x28 */ u32* savedReadPos;
|
||||
/* 0x2C */ s8 lookupRasterIndex;
|
||||
/* 0x2D */ s8 lookupPaletteIndex;
|
||||
/* 0x2C */ u8 lookupRasterIndex;
|
||||
/* 0x2D */ u8 lookupPaletteIndex;
|
||||
/* 0x2E */ u8 nextUpdate;
|
||||
/* 0x2F */ u8 alpha;
|
||||
/* 0x30 */ f32 scale;
|
||||
@ -2318,11 +2317,11 @@ typedef struct SpriteShadingLightSource {
|
||||
} SpriteShadingLightSource; // size = 0x18
|
||||
|
||||
typedef struct SpriteShadingProfile {
|
||||
/* 0x00 */ s16 flags;
|
||||
/* 0x00 */ u16 flags;
|
||||
/* 0x02 */ char unk_02[0x2];
|
||||
/* 0x04 */ SpriteShadingLightSource sources[7];
|
||||
/* 0xAC */ Color_RGB8 ambientColor;
|
||||
/* 0xAF */ s8 ambientPower; // ?
|
||||
/* 0xAF */ u8 ambientPower; // ?
|
||||
} SpriteShadingProfile; // size = 0xB0
|
||||
|
||||
typedef struct FoldImageRecPart {
|
||||
@ -2457,4 +2456,18 @@ typedef struct CreditsUnkBeta {
|
||||
/* 0x02 */ s16 size;
|
||||
} CreditsUnkBeta; // size = 0x4
|
||||
|
||||
typedef struct TempE20110 {
|
||||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ f32 scale;
|
||||
/* 0x10 */ f32 unk_10;
|
||||
/* 0x14 */ char unk_14[0x4];
|
||||
/* 0x18 */ s32 unk_18;
|
||||
/* 0x1C */ s32 unk_1C;
|
||||
/* 0x20 */ s8 unk_20;
|
||||
/* 0x21 */ s8 unk_21;
|
||||
/* 0x22 */ s8 unk_22;
|
||||
/* 0x23 */ s8 unk_23;
|
||||
/* 0x24 */ s32 unk_24;
|
||||
} TempE20110; // size = 0x28
|
||||
|
||||
#endif
|
||||
|
@ -494,6 +494,8 @@ enum Easings {
|
||||
|
||||
enum SoundIDs {
|
||||
SOUND_0 = 0x00000000,
|
||||
SOUND_1 = 0x00000001,
|
||||
SOUND_2 = 0x00000002,
|
||||
SOUND_3 = 0x00000003,
|
||||
SOUND_4 = 0x00000004,
|
||||
SOUND_MENU_BADGE_EQUIP = 0x00000005,
|
||||
@ -558,6 +560,7 @@ enum SoundIDs {
|
||||
SOUND_73 = 0x00000073,
|
||||
SOUND_74 = 0x00000074,
|
||||
SOUND_77 = 0x00000077,
|
||||
SOUND_7D = 0x0000007D,
|
||||
SOUND_82 = 0x00000082,
|
||||
SOUND_83 = 0x00000083,
|
||||
SOUND_84 = 0x00000084,
|
||||
@ -603,7 +606,9 @@ enum SoundIDs {
|
||||
SOUND_CC = 0x000000CC,
|
||||
SOUND_CD = 0x000000CD,
|
||||
SOUND_CE = 0x000000CE,
|
||||
SOUND_D1 = 0x000000D1,
|
||||
SOUND_D2 = 0x000000D2,
|
||||
SOUND_D3 = 0x000000D3,
|
||||
SOUND_D4 = 0x000000D4,
|
||||
SOUND_D5 = 0x000000D5,
|
||||
SOUND_D6 = 0x000000D6,
|
||||
@ -622,6 +627,7 @@ enum SoundIDs {
|
||||
SOUND_HIT_FIRE = 0x000000EA,
|
||||
SOUND_HIT_ICE = 0x000000EB,
|
||||
SOUND_F1 = 0x000000F1,
|
||||
SOUND_F2 = 0x000000F2,
|
||||
SOUND_F3 = 0x000000F3,
|
||||
SOUND_F4 = 0x000000F4,
|
||||
SOUND_F5 = 0x000000F5,
|
||||
@ -735,6 +741,7 @@ enum SoundIDs {
|
||||
SOUND_1D0 = 0x000001D0,
|
||||
SOUND_1D1 = 0x000001D1,
|
||||
SOUND_1D2 = 0x000001D2,
|
||||
SOUND_1D3 = 0x000001D3,
|
||||
SOUND_1D4 = 0x000001D4,
|
||||
SOUND_1D5 = 0x000001D5,
|
||||
SOUND_CREAKY_ROCKING_CHAIR = 0x000001D6,
|
||||
@ -1064,6 +1071,7 @@ enum SoundIDs {
|
||||
SOUND_205F = 0x0000205F,
|
||||
SOUND_2060 = 0x00002060,
|
||||
SOUND_2061 = 0x00002061,
|
||||
SOUND_2063 = 0x00002063,
|
||||
SOUND_2064 = 0x00002064,
|
||||
SOUND_2065 = 0x00002065,
|
||||
SOUND_2066 = 0x00002066,
|
||||
@ -3719,6 +3727,7 @@ enum BattleStatusFlags2 {
|
||||
BS_FLAGS2_4 = 0x00000004,
|
||||
BS_FLAGS2_8 = 0x00000008,
|
||||
BS_FLAGS2_10 = 0x00000010,
|
||||
BS_FLAGS2_20 = 0x00000020,
|
||||
BS_FLAGS2_40 = 0x00000040,
|
||||
BS_FLAGS2_80 = 0x00000080,
|
||||
BS_FLAGS2_100 = 0x00000100,
|
||||
|
@ -148,7 +148,6 @@ s32 general_heap_free(void* data);
|
||||
|
||||
s32 integer_log(s32 number, u32 base);
|
||||
|
||||
void set_battle_formation(s32);
|
||||
void set_battle_stage(s32);
|
||||
void load_battle(s32);
|
||||
|
||||
@ -221,6 +220,7 @@ 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 try_player_footstep_sounds(s32 arg0);
|
||||
void phys_update_interact_collider(void);
|
||||
void phys_reset_spin_history(void);
|
||||
s32 phys_adjust_cam_on_landing(void);
|
||||
s32 phys_should_player_be_sliding(void);
|
||||
void phys_init_integrator_for_current_state(void);
|
||||
@ -299,6 +299,10 @@ void init_model_animators(void);
|
||||
void play_model_animation(s32, s16*);
|
||||
s32 heap_free(void* ptr);
|
||||
|
||||
void load_battle_hit_asset(const char* hitName);
|
||||
void load_data_for_models(struct ModelNode* model, s32 romOffset, s32 size);
|
||||
void load_player_actor(void);
|
||||
|
||||
void btl_state_update_normal_start(void);
|
||||
void btl_state_draw_normal_start(void);
|
||||
void btl_state_update_begin_turn(void);
|
||||
@ -520,6 +524,7 @@ s32 bgm_set_song(s32 playerIndex, s32 songID, s32 variation, s32 fadeOutTime, s1
|
||||
void bgm_set_battle_song(s32, s32);
|
||||
void bgm_push_battle_song(void);
|
||||
s32 bgm_adjust_proximity(s32 playerIndex, s32 arg1, s16 arg2);
|
||||
void func_801491E4(s32, s32, s32, s32, s32, s32 alpha);
|
||||
s32 func_8014A964(s32 playerIndex, s32 songID, s32 variation, s32 fadeInTime, s16 arg4, s16 arg5);
|
||||
|
||||
#include "audio/public.h"
|
||||
@ -721,6 +726,8 @@ void state_step_demo(void);
|
||||
void state_drawUI_demo(void);
|
||||
void game_mode_set_fpDrawAuxUI(s32 i, void (*fn)(void));
|
||||
|
||||
void func_80260A60(void);
|
||||
|
||||
void func_802B2000(void);
|
||||
void func_802B203C(void);
|
||||
void func_802B2078(void);
|
||||
@ -796,7 +803,7 @@ void mdl_get_copied_vertices(s32 copyIndex, Vtx** firstVertex, Vtx** copiedVerti
|
||||
void mdl_draw_hidden_panel_surface(Gfx** arg0, u16 treeIndex);
|
||||
s32 func_8011CFBC(void);
|
||||
void set_screen_overlay_center_worldpos(s32 idx, s32 posIdx, s32 x, s32 y, s32 z);
|
||||
s32 mdl_get_next_texture_address(s32);
|
||||
void* mdl_get_next_texture_address(s32);
|
||||
void draw_msg(s32 msgID, s32 posX, s32 posY, s32 opacity, s32 palette, u8 style);
|
||||
void get_background_color_blend(u8* r, u8* g, u8* b, u8* a);
|
||||
|
||||
@ -892,16 +899,22 @@ s32 add_badge(s32 itemID);
|
||||
void hide_coin_counter_immediately(void);
|
||||
void hide_popup_menu(void);
|
||||
void destroy_popup_menu(void);
|
||||
void reset_player_status(void);;
|
||||
void reset_player_status(void);
|
||||
s32 has_valid_conversation_npc(void);
|
||||
s32 func_800E06D8(void);
|
||||
void func_800E4F10(void);
|
||||
void func_800E5520(void);
|
||||
void func_800E6B68(void);
|
||||
void func_800E9810(void);
|
||||
s32 func_800E9860(void);
|
||||
void func_800E98C4(void);
|
||||
void func_800E98EC(void);
|
||||
void func_800E9900(void);
|
||||
void func_800F0D5C(void);
|
||||
void func_800F0C9C(void);
|
||||
void func_800F0CB0(s32, f32, f32, f32);
|
||||
void func_800F0D5C(void);
|
||||
void func_800F0D80(void);
|
||||
void func_800F102C(void);
|
||||
s32 get_item_count(void);
|
||||
s32 get_stored_empty_count(void);
|
||||
s32 get_stored_count(void);
|
||||
@ -970,6 +983,9 @@ void status_menu_start_blinking_sp(void);
|
||||
void status_menu_stop_blinking_fp(void);
|
||||
void status_menu_stop_blinking_hp(void);
|
||||
void status_menu_stop_blinking_sp(void);
|
||||
void status_menu_start_blinking_sp_bars(s8 numBarsToBlink);
|
||||
void status_menu_draw_number(s32 iconID, s32 x, s32 y, s32 value, s32 numDigits);
|
||||
void status_menu_draw_stat(s32 id, s32 x, s32 y, s32, s32);
|
||||
void set_background_size(s16, s16, s16, s16);
|
||||
void read_background_size(BackgroundHeader*);
|
||||
void set_max_SP(s8);
|
||||
|
@ -9,6 +9,26 @@ typedef union ModelNodePropertyData {
|
||||
s32* p;
|
||||
} ModelNodePropertyData;
|
||||
|
||||
// In memory this is a list of ModelNodeProperty, but due to the way it uses
|
||||
// the fields (storing into the "type" field) we decided to make a struct for this
|
||||
typedef struct ModelBoundingBox {
|
||||
/* 0x00 */ s32 key; // MODEL_PROP_KEY_BOUNDING_BOX
|
||||
/* 0x04 */ s32 halfSizeX;
|
||||
/* 0x08 */ f32 minX;
|
||||
/* 0x0C */ char unk_0C[0x04];
|
||||
/* 0x10 */ s32 halfSizeY;
|
||||
/* 0x14 */ f32 minY;
|
||||
/* 0x18 */ char unk_18[0x04];
|
||||
/* 0x1C */ s32 halfSizeZ;
|
||||
/* 0x20 */ f32 minZ;
|
||||
/* 0x24 */ char unk_24[0x8];
|
||||
/* 0x2C */ f32 maxX;
|
||||
/* 0x30 */ char unk_30[0x8];
|
||||
/* 0x38 */ f32 maxY;
|
||||
/* 0x3C */ char unk_3C[0x8];
|
||||
/* 0x44 */ f32 maxZ;
|
||||
} ModelBoundingBox; // size = 0x48?
|
||||
|
||||
typedef struct ModelNodeProperty {
|
||||
/* 0x0 */ s32 key;
|
||||
/* 0x4 */ s32 dataType;
|
||||
@ -26,12 +46,12 @@ typedef struct ModelNode {
|
||||
typedef struct Model {
|
||||
/* 0x00 */ u16 flags;
|
||||
/* 0x02 */ u16 modelID;
|
||||
/* 0x04 */ Matrix4s* currentMatrix;
|
||||
/* 0x04 */ Mtx* currentMatrix;
|
||||
/* 0x08 */ ModelNode* modelNode;
|
||||
/* 0x0C */ ModelGroupData* groupData;
|
||||
/* 0x10 */ s32* currentSpecialMatrix;
|
||||
/* 0x14 */ char unk_14[4];
|
||||
/* 0x18 */ Matrix4s specialMatrix;
|
||||
/* 0x18 */ Mtx specialMatrix;
|
||||
/* 0x58 */ Matrix4f transformMatrix;
|
||||
/* 0x98 */ Vec3f center;
|
||||
/* 0xA4 */ u8 texPannerID;
|
||||
@ -92,7 +112,7 @@ typedef struct ModelBlueprint {
|
||||
/* 0x2 */ char unk_02[0x2];
|
||||
/* 0x4 */ ModelNode* mdlNode;
|
||||
/* 0x8 */ ModelGroupData* groupData;
|
||||
/* 0xC */ Matrix4s* mtx;
|
||||
/* 0xC */ Mtx* mtx;
|
||||
} ModelBlueprint; // size = 0x10
|
||||
|
||||
typedef void(*ModelCustomGfxBuilderFunc)(s32 index);
|
||||
@ -100,26 +120,6 @@ typedef void(*ModelCustomGfxBuilderFunc)(s32 index);
|
||||
typedef Gfx* ModelCustomGfxList[32];
|
||||
typedef ModelCustomGfxBuilderFunc ModelCustomGfxBuilderList[32];
|
||||
|
||||
// In memory this is a list of ModelNodeProperty, but due to the way it uses
|
||||
// the fields (storing into the "type" field) we decided to make a struct for this
|
||||
typedef struct ModelBoundingBox {
|
||||
/* 0x00 */ s32 key; // MODEL_PROP_KEY_BOUNDING_BOX
|
||||
/* 0x04 */ s32 halfSizeX;
|
||||
/* 0x08 */ f32 minX;
|
||||
/* 0x0C */ char unk_0C[0x04];
|
||||
/* 0x10 */ s32 halfSizeY;
|
||||
/* 0x14 */ f32 minY;
|
||||
/* 0x18 */ char unk_18[0x04];
|
||||
/* 0x1C */ s32 halfSizeZ;
|
||||
/* 0x20 */ f32 minZ;
|
||||
/* 0x24 */ char unk_24[0x8];
|
||||
/* 0x2C */ f32 maxX;
|
||||
/* 0x30 */ char unk_30[0x8];
|
||||
/* 0x38 */ f32 maxY;
|
||||
/* 0x3C */ char unk_3C[0x8];
|
||||
/* 0x44 */ f32 maxZ;
|
||||
} ModelBoundingBox; // size = 0x48?
|
||||
|
||||
typedef enum ModelPropertyKeys {
|
||||
MODEL_PROP_KEY_RENDER_MODE = 0x5C,
|
||||
MODEL_PROP_KEY_CAMERA_DATA = 0x5D,
|
||||
|
@ -348,7 +348,7 @@ typedef struct Encounter {
|
||||
|
||||
typedef struct EncounterStatus {
|
||||
/* 0x000 */ s32 flags;
|
||||
/* 0x004 */ s8 eFirstStrike; /* 0 = none, 1 = player, 2 = enemy */
|
||||
/* 0x004 */ s8 firstStrikeType; /* 0 = none, 1 = player, 2 = enemy */
|
||||
/* 0x005 */ s8 hitType; /* 1 = none/enemy, 2 = jump */
|
||||
/* 0x006 */ s8 hitTier; /* 0 = normal, 1 = super, 2 = ultra */
|
||||
/* 0x007 */ char unk_07;
|
||||
@ -360,7 +360,7 @@ typedef struct EncounterStatus {
|
||||
/* 0x00D */ char unk_0D;
|
||||
/* 0x00E */ s16 coinsEarned; /* valid after battle */
|
||||
/* 0x010 */ char unk_10;
|
||||
/* 0x011 */ u8 allowFleeing;
|
||||
/* 0x011 */ s8 allowFleeing;
|
||||
/* 0x012 */ s8 unk_12;
|
||||
/* 0x013 */ u8 dropWhackaBump;
|
||||
/* 0x014 */ s32 songID;
|
||||
|
@ -29,7 +29,7 @@ extern u8 D_800DC4EB; // in the middle of the previous var
|
||||
extern s32 D_800DC4E0;
|
||||
extern s32 D_800DC4EC;
|
||||
extern s32 D_800DC4F0;
|
||||
extern s32 D_800DC4F4;
|
||||
extern struct Battle* D_800DC4F4;
|
||||
extern s32 D_800DC4F8;
|
||||
extern s32 gBattleDmaDest;
|
||||
|
||||
@ -96,7 +96,7 @@ extern MessagePrintState* SaveBlockResultPrinter;
|
||||
extern Entity* SwitchToLink;
|
||||
extern s32 CreateEntityVarArgBuffer[4];
|
||||
|
||||
extern f32 DefaultMoveSpeeds[4];
|
||||
extern f32 D_800F7B74;
|
||||
|
||||
extern CollisionData gZoneCollisionData;
|
||||
|
||||
@ -164,7 +164,7 @@ extern s16 D_800A0922;
|
||||
extern s32 wMapTexName;
|
||||
extern char wMapHitName[];
|
||||
extern char wMapShapeName[];
|
||||
extern s32* D_80210000;
|
||||
extern struct ModelNode* D_80210000;
|
||||
extern u8 D_802D9D70; // player alpha1 copy?
|
||||
extern u8 D_802D9D71; // player alpha2 copy?
|
||||
|
||||
|
@ -46,7 +46,7 @@ void state_step_enter_world(void) {
|
||||
}
|
||||
|
||||
gGameStatusPtr->prevArea = gGameStatusPtr->areaID;
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
if (gGameStatusPtr->demoState == 0) {
|
||||
disable_player_input();
|
||||
}
|
||||
@ -135,7 +135,7 @@ void state_step_change_map(void) {
|
||||
gGameStatusPtr->isBattle = FALSE;
|
||||
gGameStatusPtr->disableScripts = FALSE;
|
||||
load_map_by_IDs(gGameStatusPtr->areaID, gGameStatusPtr->mapID, 0);
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
nuContRmbForceStopEnd();
|
||||
if (gGameStatusPtr->demoState == 0) {
|
||||
disable_player_input();
|
||||
|
1537
src/16F740.c
1537
src/16F740.c
File diff suppressed because it is too large
Load Diff
@ -904,8 +904,8 @@ void btl_update_starpoints_display(void) {
|
||||
}
|
||||
|
||||
for (; i < ARRAY_COUNT(D_8029EFC0); i++) {
|
||||
hud_element_set_flags(D_8029EFC0[i], 2);
|
||||
hud_element_set_flags(D_8029EFE8[i], 2);
|
||||
hud_element_set_flags(D_8029EFC0[i], HUD_ELEMENT_FLAGS_FILTER_TEX);
|
||||
hud_element_set_flags(D_8029EFE8[i], HUD_ELEMENT_FLAGS_FILTER_TEX);
|
||||
}
|
||||
|
||||
posX = D_8029DA40;
|
||||
@ -929,7 +929,7 @@ void btl_update_starpoints_display(void) {
|
||||
}
|
||||
|
||||
for (; i < ARRAY_COUNT(D_8029F010); i++) {
|
||||
hud_element_set_flags(D_8029F010[i], 2);
|
||||
hud_element_set_flags(D_8029F010[i], HUD_ELEMENT_FLAGS_FILTER_TEX);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -425,7 +425,7 @@ INCLUDE_ASM(s32, "181810", load_tattle_flags);
|
||||
|
||||
ApiStatus func_80253FB0(Evt* script, s32 isInitialCall) {
|
||||
gCurrentEncounter.battleOutcome = 3;
|
||||
btl_set_state(0x20);
|
||||
btl_set_state(BATTLE_STATE_END_BATTLE);
|
||||
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -229,7 +229,7 @@ void btl_state_update_celebration(void) {
|
||||
if (partner != NULL) {
|
||||
partner->flags &= ~(ACTOR_FLAG_4000000 | ACTOR_FLAG_8000000);
|
||||
}
|
||||
battleStatus->battlePhase = 5;
|
||||
battleStatus->battlePhase = PHASE_5;
|
||||
script = start_script(&PlayerScriptDispatcher, EVT_PRIORITY_A, 0);
|
||||
player->takeTurnScript = script;
|
||||
player->takeTurnID = script->id;
|
||||
@ -762,7 +762,7 @@ void btl_state_update_celebration(void) {
|
||||
|
||||
hud_element_free(D_8029FB48);
|
||||
set_background_color_blend(0, 0, 0, 0);
|
||||
btl_set_state(0x20);
|
||||
btl_set_state(BATTLE_STATE_END_BATTLE);
|
||||
gBattleState2 = BATTLE_STATE2_UNK_2;
|
||||
break;
|
||||
case BATTLE_STATE2_UNK_F:
|
||||
@ -837,7 +837,7 @@ void btl_state_update_celebration(void) {
|
||||
if (partner != NULL && does_script_exist(partner->takeTurnID)) {
|
||||
kill_script_by_ID(partner->takeTurnID);
|
||||
}
|
||||
btl_set_state(0x20);
|
||||
btl_set_state(BATTLE_STATE_END_BATTLE);
|
||||
gBattleState2 = BATTLE_STATE2_UNK_2;
|
||||
break;
|
||||
}
|
||||
|
28
src/190B20.c
28
src/190B20.c
@ -232,7 +232,7 @@ s32 btl_check_player_defeated(void) {
|
||||
}
|
||||
D_800DC4E4 = gBattleState;
|
||||
D_800DC4D8 = gBattleState2;
|
||||
btl_set_state(0x1B);
|
||||
btl_set_state(BATTLE_STATE_DEFEAT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -1279,7 +1279,7 @@ Actor* create_actor(Formation formation) {
|
||||
}
|
||||
|
||||
actor = battleStatus->enemyActors[i] = heap_malloc(sizeof(*actor));
|
||||
|
||||
|
||||
ASSERT(actor != NULL);
|
||||
|
||||
actor->unk_134 = battleStatus->unk_93++;
|
||||
@ -2603,10 +2603,10 @@ void reset_all_actor_sounds(Actor* actor) {
|
||||
}
|
||||
|
||||
void hide_foreground_models_unchecked(void) {
|
||||
FGModelData* data = gBattleStatus.foregroundModelData;
|
||||
Stage* data = gBattleStatus.currentStage;
|
||||
|
||||
if (data != NULL && data->idList != NULL) {
|
||||
s32* idList = data->idList;
|
||||
if (data != NULL && data->foregroundModelList != NULL) {
|
||||
s32* idList = data->foregroundModelList;
|
||||
while (*idList != 0) {
|
||||
s32 id = *idList++;
|
||||
if (id >= 0) {
|
||||
@ -2618,10 +2618,10 @@ void hide_foreground_models_unchecked(void) {
|
||||
}
|
||||
|
||||
void show_foreground_models_unchecked(void) {
|
||||
FGModelData* data = gBattleStatus.foregroundModelData;
|
||||
Stage* data = gBattleStatus.currentStage;
|
||||
|
||||
if (data != NULL && data->idList != NULL) {
|
||||
s32* idList = data->idList;
|
||||
if (data != NULL && data->foregroundModelList != NULL) {
|
||||
s32* idList = data->foregroundModelList;
|
||||
while (*idList != 0) {
|
||||
s32 id = *idList++;
|
||||
if (id >= 0) {
|
||||
@ -2633,10 +2633,10 @@ void show_foreground_models_unchecked(void) {
|
||||
}
|
||||
|
||||
void hide_foreground_models(void) {
|
||||
FGModelData* data = gBattleStatus.foregroundModelData;
|
||||
Stage* data = gBattleStatus.currentStage;
|
||||
|
||||
if (data != NULL && data->idList != NULL) {
|
||||
s32* idList = data->idList;
|
||||
if (data != NULL && data->foregroundModelList != NULL) {
|
||||
s32* idList = data->foregroundModelList;
|
||||
while (*idList != 0) {
|
||||
s32 id = *idList++;
|
||||
if (id < 0) {
|
||||
@ -2651,10 +2651,10 @@ void hide_foreground_models(void) {
|
||||
}
|
||||
|
||||
void show_foreground_models(void) {
|
||||
FGModelData* data = gBattleStatus.foregroundModelData;
|
||||
Stage* data = gBattleStatus.currentStage;
|
||||
|
||||
if (data != NULL && data->idList != NULL) {
|
||||
s32* idList = data->idList;
|
||||
if (data != NULL && data->foregroundModelList != NULL) {
|
||||
s32* idList = data->foregroundModelList;
|
||||
while (*idList != 0) {
|
||||
s32 id = *idList++;
|
||||
if (id < 0) {
|
||||
|
@ -14,6 +14,8 @@ extern f32 D_800A0BA4;
|
||||
extern EffectInstance* WorldMerleeOrbEffect;
|
||||
extern EffectInstance* WorldMerleeWaveEffect;
|
||||
|
||||
void set_battle_formation(Battle*);
|
||||
|
||||
s32 get_defeated(s32 mapID, s32 encounterID) {
|
||||
EncounterStatus* currentEncounter = &gCurrentEncounter;
|
||||
s32 encounterIdx = encounterID / 32;
|
||||
@ -389,7 +391,7 @@ void update_encounters_pre_battle(void) {
|
||||
}
|
||||
|
||||
if (currentEncounter->songID < 0) {
|
||||
switch (currentEncounter->eFirstStrike) {
|
||||
switch (currentEncounter->firstStrikeType) {
|
||||
case 0:
|
||||
bgm_set_battle_song(SONG_NORMAL_BATTLE, FIRST_STRIKE_NONE);
|
||||
break;
|
||||
@ -443,7 +445,7 @@ void update_encounters_pre_battle(void) {
|
||||
sfx_stop_sound(SOUND_2112);
|
||||
sfx_stop_sound(SOUND_2113);
|
||||
sfx_stop_sound(SOUND_2114);
|
||||
set_battle_formation(0);
|
||||
set_battle_formation(NULL);
|
||||
set_battle_stage(encounter->stage);
|
||||
load_battle(encounter->battle);
|
||||
currentEncounter->unk_07 = 1;
|
||||
@ -582,7 +584,7 @@ void show_first_strike_message(void) {
|
||||
|
||||
screenWidthHalf = SCREEN_WIDTH / 2;
|
||||
|
||||
switch (currentEncounter->eFirstStrike) {
|
||||
switch (currentEncounter->firstStrikeType) {
|
||||
case FIRST_STRIKE_PLAYER:
|
||||
switch (currentEncounter->hitType) {
|
||||
case 2:
|
||||
@ -815,7 +817,7 @@ s32 check_conversation_trigger(void) {
|
||||
enemy->encountered = ENCOUNTER_TRIGGER_CONVERSATION;
|
||||
encounterStatus->currentEncounter = encounter;
|
||||
encounterStatus->currentEnemy = enemy;
|
||||
encounterStatus->eFirstStrike = FIRST_STRIKE_PLAYER;
|
||||
encounterStatus->firstStrikeType = FIRST_STRIKE_PLAYER;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ void get_npc_pos(s32 npcID, f32* outX, f32* outY, f32* outZ, s32* arg4) {
|
||||
|
||||
}
|
||||
|
||||
void func_8005DECC(Npc* npc, s32 arg1, void* arg2, f32 arg3, f32 arg4, s32 arg5, s32 arg6);
|
||||
INCLUDE_ASM(s32, "39210_len_aa0", func_8005DECC);
|
||||
|
||||
INCLUDE_ASM(s32, "39210_len_aa0", func_8005DFD4);
|
||||
|
1585
src/415D90.c
1585
src/415D90.c
File diff suppressed because it is too large
Load Diff
18
src/7B440.c
18
src/7B440.c
@ -36,7 +36,6 @@ void update_player_input(void) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
void reset_player_status(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
MapSettings* mapSettings;
|
||||
@ -80,11 +79,11 @@ void reset_player_status(void) {
|
||||
gGameStatusPtr->peachCookingIngredient = 0;
|
||||
}
|
||||
|
||||
// This grossness is needed for matching
|
||||
floatsTemp = &DefaultMoveSpeeds[0];
|
||||
playerStatus->walkSpeed = *(floatsTemp++) * one;
|
||||
playerStatus->runSpeed = *(floatsTemp++) * one;
|
||||
playerStatus->maxJumpSpeed = *(floatsTemp++) * one;
|
||||
// TODO required to match
|
||||
floatsTemp = &(&D_800F7B74)[-1]; // index of 0 does not work
|
||||
playerStatus->walkSpeed = *floatsTemp++ * one;
|
||||
playerStatus->runSpeed = *floatsTemp++ * one;
|
||||
playerStatus->maxJumpSpeed = *floatsTemp++ * one;
|
||||
|
||||
set_action_state(ACTION_STATE_IDLE);
|
||||
|
||||
@ -103,7 +102,7 @@ void reset_player_status(void) {
|
||||
playerStatus->unk_90[CAM_TATTLE] = 0.0f;
|
||||
playerStatus->unk_90[CAM_3] = 0.0f;
|
||||
|
||||
mapSettings = gAreas[gGameStatusPtr->areaID].maps[gGameStatusPtr->mapID].config;
|
||||
mapSettings = gAreas[gGameStatusPtr->areaID].maps[gGameStatusPtr->mapID].settings;
|
||||
|
||||
if (mapSettings->entryList != NULL) {
|
||||
if (gGameStatusPtr->entryID < mapSettings->entryCount) {
|
||||
@ -118,12 +117,9 @@ void reset_player_status(void) {
|
||||
gCameras[CAM_DEFAULT].targetPos.y = playerStatus->position.y;
|
||||
gCameras[CAM_DEFAULT].targetPos.z = playerStatus->position.z;
|
||||
|
||||
phys_reset_spin_history(mapSettings);
|
||||
phys_reset_spin_history();
|
||||
mem_clear(&gPlayerSpinState, sizeof(gPlayerSpinState));
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "7B440", reset_player_status);
|
||||
#endif
|
||||
|
||||
void get_packed_buttons(s32* arg0) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
@ -233,12 +233,12 @@ block_17:
|
||||
switch (D_8010CCF8) {
|
||||
case 0:
|
||||
if (playerStatus->flags & PLAYER_STATUS_FLAGS_40) {
|
||||
sfx_play_sound(0x21D);
|
||||
sfx_play_sound(SOUND_MENU_ERROR);
|
||||
if (D_8010C9C0) {
|
||||
func_800E6860();
|
||||
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20;
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
}
|
||||
} else {
|
||||
numEntries = setup_partner_popup(popup);
|
||||
@ -280,7 +280,7 @@ block_17:
|
||||
func_800E6860();
|
||||
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20;
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
}
|
||||
} else {
|
||||
D_8010CCFA--;
|
||||
@ -299,7 +299,7 @@ block_17:
|
||||
return;
|
||||
}
|
||||
create_popup_menu(popup);
|
||||
set_time_freeze_mode(3);
|
||||
set_time_freeze_mode(TIME_FREEZE_PARTNER_MENU);
|
||||
if (partnerActionStatus->partnerActionState == 0) {
|
||||
set_action_state(ACTION_STATE_IDLE);
|
||||
}
|
||||
@ -353,7 +353,7 @@ block_17:
|
||||
func_800E6860();
|
||||
playerStatus->flags &= ~PLAYER_STATUS_FLAGS_20;
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
|
@ -1,10 +1,20 @@
|
||||
#include "common.h"
|
||||
#include "hud_element.h"
|
||||
|
||||
extern HudScript* TimesHudScript;
|
||||
extern HudScript* SPIncrementHudScripts[];
|
||||
extern HudScript* SPStarHudScripts[];
|
||||
extern s32 D_800F7FE8;
|
||||
extern s32 D_800F7FEC;
|
||||
extern s32 D_800F7FF0;
|
||||
extern s32 D_800F7FF4;
|
||||
extern s32 D_800F7FF8;
|
||||
extern s32 D_800F7FFC;
|
||||
extern s32 D_800F8000[];
|
||||
|
||||
extern s16 D_8010CD10;
|
||||
extern s16 D_8010CD12;
|
||||
|
||||
extern s32 TimesHudScript;
|
||||
extern s32 DigitHudScripts[10];
|
||||
|
||||
extern HudScript HES_StatusHP;
|
||||
@ -16,6 +26,8 @@ extern HudScript HES_StatusStarPoint;
|
||||
extern HudScript HES_StatusStar1;
|
||||
extern HudScript HES_StatusTimes;
|
||||
extern HudScript HES_StatusSPShine;
|
||||
extern HudScript HES_StatusSPEmptyIncrement;
|
||||
extern HudScript HES_StatusStarEmpty;
|
||||
|
||||
extern HudScript SlashHudScript;
|
||||
|
||||
@ -325,10 +337,10 @@ void initialize_status_menu(void) {
|
||||
uiStatus->starpointsBlinkCounter = 0;
|
||||
uiStatus->unk_6C[2] = -1;
|
||||
uiStatus->unk_3B[1] = 0;
|
||||
uiStatus->unk_57[0] = 0;
|
||||
uiStatus->unk_57[1] = 0;
|
||||
uiStatus->unk_57[2] = 0;
|
||||
uiStatus->unk_57[3] = 0;
|
||||
uiStatus->unk_57 = 0;
|
||||
uiStatus->unk_58 = 0;
|
||||
uiStatus->unk_59 = 0;
|
||||
uiStatus->spBarsToBlink = 0;
|
||||
uiStatus->unk_6C[0] = 0;
|
||||
uiStatus->unk_6C[1] = 0;
|
||||
uiStatus->iconIndex12 = -1;
|
||||
@ -955,13 +967,14 @@ void reset_status_menu(void) {
|
||||
// Weird order of loading stuff
|
||||
#ifdef NON_EQUIVALENT
|
||||
s32 is_ability_active(s32 ability) {
|
||||
s32 abilityMoveID;
|
||||
PlayerData* playerData = &gPlayerData;
|
||||
s32 attackFXArray[6];
|
||||
s32 abilityMoveID;
|
||||
s32 ret;
|
||||
s32 attackFXIndex;
|
||||
s32 badgeMoveID;
|
||||
s32 i;
|
||||
s32 badgeMoveID;
|
||||
u8* moveID;
|
||||
|
||||
ret = 0;
|
||||
attackFXIndex = 0;
|
||||
@ -974,17 +987,15 @@ s32 is_ability_active(s32 ability) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) {
|
||||
s32 b = playerData->equippedBadges[i];
|
||||
badgeMoveID = playerData->equippedBadges[i];
|
||||
|
||||
if (b != 0) {
|
||||
badgeMoveID = gItemTable[b].moveID;
|
||||
if (badgeMoveID != 0) {
|
||||
moveID = &gItemTable[badgeMoveID].moveID;
|
||||
badgeMoveID = *moveID;
|
||||
}
|
||||
|
||||
switch (ability) {
|
||||
default:
|
||||
continue;
|
||||
case ABILITY_DODGE_MASTER:
|
||||
abilityMoveID = 0x4c;
|
||||
break;
|
||||
@ -1178,6 +1189,9 @@ s32 is_ability_active(s32 ability) {
|
||||
case ABILITY_HEALTHY_HEALTHY:
|
||||
abilityMoveID = 0x4a;
|
||||
break;
|
||||
default:
|
||||
do { } while (0);
|
||||
continue;
|
||||
}
|
||||
if (badgeMoveID == abilityMoveID) {
|
||||
ret++;
|
||||
@ -1193,7 +1207,6 @@ s32 is_ability_active(s32 ability) {
|
||||
INCLUDE_ASM(s32, "80850_len_3060", is_ability_active);
|
||||
#endif
|
||||
|
||||
|
||||
s32 is_partner_ability_active(s32 ability) {
|
||||
return 0;
|
||||
}
|
||||
@ -1274,14 +1287,14 @@ void add_SP(s32 amt) {
|
||||
s32 phi_v1;
|
||||
s32 maxPower;
|
||||
|
||||
uiStatus->unk_57[0] = 1;
|
||||
uiStatus->unk_57[1] = 60;
|
||||
uiStatus->unk_57 = 1;
|
||||
uiStatus->unk_58 = 60;
|
||||
|
||||
phi_v1 = playerData->specialBarsFilled;
|
||||
if (playerData->specialBarsFilled < 0) {
|
||||
phi_v1 = playerData->specialBarsFilled + 31;
|
||||
}
|
||||
uiStatus->unk_57[2] = phi_v1 >> 5;
|
||||
uiStatus->unk_59 = phi_v1 >> 5;
|
||||
|
||||
playerData->specialBarsFilled += amt;
|
||||
|
||||
|
@ -401,20 +401,20 @@ s32 popup_menu_update(void) {
|
||||
case 9:
|
||||
case 12:
|
||||
set_window_update(WINDOW_ID_14, (s32)basic_window_update);
|
||||
sfx_play_sound(1);
|
||||
sfx_play_sound(SOUND_1);
|
||||
set_window_update(WINDOW_ID_19, (s32)basic_window_update);
|
||||
break;
|
||||
case 1:
|
||||
case 4:
|
||||
set_window_update(WINDOW_ID_14, (s32)basic_window_update);
|
||||
sfx_play_sound(2);
|
||||
sfx_play_sound(SOUND_2);
|
||||
set_window_update(WINDOW_ID_19, (s32)basic_window_update);
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
case 13:
|
||||
set_window_update(WINDOW_ID_14, (s32)basic_window_update);
|
||||
sfx_play_sound(1);
|
||||
sfx_play_sound(SOUND_1);
|
||||
break;
|
||||
}
|
||||
set_window_update(WINDOW_ID_21, WINDOW_UPDATE_SHOW);
|
||||
|
595
src/C50A0.c
595
src/C50A0.c
@ -4,13 +4,19 @@
|
||||
#include "pause/pause_common.h"
|
||||
#include "world/partners.h"
|
||||
#include "sparkle_script.h"
|
||||
#include "item_entity.h"
|
||||
|
||||
#define MAX_ITEM_ENTITIES 256
|
||||
|
||||
extern SparkleScript SparkleScript_Coin;
|
||||
|
||||
extern Gfx D_8014B870[];
|
||||
extern Gfx D_8014BBD8[];
|
||||
extern Lights1 D_8014C6C8;
|
||||
|
||||
extern HudCacheEntry* gHudElementCacheTableRaster;
|
||||
extern HudCacheEntry* gHudElementCacheTablePalette;
|
||||
|
||||
extern s32 ItemEntitiesCreated;
|
||||
extern s32 D_80155D80;
|
||||
extern s32 ItemEntityAlternatingSpawn;
|
||||
@ -45,6 +51,7 @@ void update_item_entity_static(ItemEntity*);
|
||||
void func_801356C4(ItemEntity*);
|
||||
void func_801356CC(ItemEntity*);
|
||||
void func_801356D4(ItemEntity*);
|
||||
void func_801363A0(ItemEntity*);
|
||||
void update_item_entity_temp(ItemEntity*);
|
||||
s32 draw_image_with_clipping(IMG_PTR raster, s32 width, s32 height, s32 fmt, s32 bitDepth, s16 posX, s16 posY, u16 clipULx,
|
||||
u16 clipULy, u16 clipLRx, u16 clipRLy);
|
||||
@ -668,10 +675,53 @@ s32 make_item_entity_at_player(s32 itemID, s32 arg1, s32 pickupMsgFlags) {
|
||||
return id;
|
||||
}
|
||||
|
||||
//TODO remove this
|
||||
static const f32 rodata_padding_2 = 0.0f;
|
||||
void item_entity_update(ItemEntity* entity) {
|
||||
s32* args;
|
||||
s32 max, threshold;
|
||||
|
||||
INCLUDE_ASM(s32, "C50A0", item_entity_update);
|
||||
entity->nextUpdate--;
|
||||
if (entity->nextUpdate != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
do {
|
||||
args = entity->readPos;
|
||||
switch(*args++) {
|
||||
case ITEM_SCRIPT_OP_End:
|
||||
entity->nextUpdate = 60;
|
||||
return;
|
||||
case ITEM_SCRIPT_OP_SetImage:
|
||||
entity->nextUpdate = *args++;
|
||||
*args++;
|
||||
*args++;
|
||||
if (!gGameStatusPtr->isBattle) {
|
||||
entity->lookupRasterIndex = *args++ & 0xFFFF;
|
||||
entity->lookupPaletteIndex = *args++ & 0xFFFF;
|
||||
} else {
|
||||
entity->lookupRasterIndex = *args++ >> 16;
|
||||
entity->lookupPaletteIndex = *args++ >> 16;
|
||||
}
|
||||
entity->readPos = args;
|
||||
return;
|
||||
case ITEM_SCRIPT_OP_Restart:
|
||||
entity->readPos = entity->savedReadPos;
|
||||
break;
|
||||
case ITEM_SCRIPT_OP_Loop:
|
||||
entity->savedReadPos = args;
|
||||
entity->readPos = args;
|
||||
break;
|
||||
case ITEM_SCRIPT_OP_RandomRestart:
|
||||
max = *args++;
|
||||
threshold = *args++;
|
||||
if (rand_int(max) < threshold) {
|
||||
entity->readPos = entity->savedReadPos;
|
||||
} else {
|
||||
entity->readPos = args;
|
||||
}
|
||||
break;
|
||||
}
|
||||
} while (TRUE);
|
||||
}
|
||||
|
||||
void update_item_entities(void) {
|
||||
ItemEntity* entity;
|
||||
@ -761,7 +811,153 @@ void update_item_entities(void) {
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "C50A0", appendGfx_item_entity);
|
||||
void appendGfx_item_entity(void* data) {
|
||||
ItemEntity* itemEntity = (ItemEntity*)data;
|
||||
Mtx sp18;
|
||||
Matrix4f sp58, sp98, spD8;
|
||||
s32 alpha = 255;
|
||||
s32 yOffset;
|
||||
f32 rot;
|
||||
|
||||
if (itemEntity->flags & (ITEM_ENTITY_FLAGS_8000000 | ITEM_ENTITY_FLAGS_TRANSPARENT)) {
|
||||
if (itemEntity->flags & ITEM_ENTITY_FLAGS_TRANSPARENT) {
|
||||
alpha = 255;
|
||||
alpha = (itemEntity->alpha * alpha) / 255;
|
||||
}
|
||||
if (itemEntity->flags & ITEM_ENTITY_FLAGS_8000000) {
|
||||
u8 r, g, b, a;
|
||||
|
||||
get_background_color_blend(&r, &g, &b, &a);
|
||||
alpha = (alpha * (255 - a)) / 255;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(itemEntity->flags & ITEM_ENTITY_FLAGS_40000)) {
|
||||
yOffset = -2;
|
||||
} else {
|
||||
yOffset = -3;
|
||||
}
|
||||
|
||||
if (itemEntity->itemID == ITEM_COIN || itemEntity->itemID == ITEM_STAR_POINT || itemEntity->itemID == ITEM_HEART) {
|
||||
itemEntity->scale = 1.0f;
|
||||
}
|
||||
|
||||
rot = clamp_angle(180.0f - gCameras[gCurrentCamID].currentYaw);
|
||||
guTranslateF(sp58, itemEntity->position.x, itemEntity->position.y + yOffset, itemEntity->position.z);
|
||||
guRotateF(sp98, rot, 0.0f, 1.0f, 0.0f);
|
||||
if (itemEntity->flags & ITEM_ENTITY_FLAGS_TINY) {
|
||||
guScaleF(spD8, itemEntity->scale, itemEntity->scale, itemEntity->scale);
|
||||
guMtxCatF(sp98, spD8, sp98);
|
||||
}
|
||||
guMtxCatF(sp98, sp58, sp58);
|
||||
guMtxF2L(sp58, &sp18);
|
||||
|
||||
gDisplayContext->matrixStack[gMatrixListPos] = sp18;
|
||||
|
||||
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++],
|
||||
G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
if (D_80151328->flags != 0) {
|
||||
gSPDisplayList(gMasterGfxPos++, D_8014BBD8);
|
||||
} else {
|
||||
gSPDisplayList(gMasterGfxPos++, D_8014B870);
|
||||
}
|
||||
gSPClearGeometryMode(gMasterGfxPos++, G_CULL_BOTH | G_LIGHTING);
|
||||
gSPDisplayList(gMasterGfxPos++, D_8014C620);
|
||||
|
||||
if (itemEntity->flags & (ITEM_ENTITY_FLAGS_8000000 | ITEM_ENTITY_FLAGS_TRANSPARENT)) {
|
||||
if (D_80151328->flags != 0) {
|
||||
gDPSetRenderMode(gMasterGfxPos++, AA_EN | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL | G_RM_PASS,
|
||||
AA_EN | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL |
|
||||
GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
|
||||
} else {
|
||||
gDPSetRenderMode(gMasterGfxPos++, AA_EN | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL |
|
||||
GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA),
|
||||
AA_EN | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL |
|
||||
GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA));
|
||||
gDPSetCombineLERP(gMasterGfxPos++, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0,
|
||||
TEXEL0, 0, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 255, 255, 255, alpha);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(itemEntity->flags & ITEM_ENTITY_FLAGS_40000)) {
|
||||
gDPLoadTLUT_pal16(gMasterGfxPos++, 0, gHudElementCacheTablePalette[itemEntity->lookupPaletteIndex].data);
|
||||
if (D_80151328->flags != 0) {
|
||||
gDPSetTextureImage(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 12, gHudElementCacheTableRaster[itemEntity->lookupRasterIndex].data);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 2, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR |
|
||||
G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPLoadSync(gMasterGfxPos++);
|
||||
gDPLoadTile(gMasterGfxPos++, G_TX_LOADTILE, 0, 0, 0x002E, 0x005C);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_4b, 2, 0x0000, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, 8,
|
||||
G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPSetTileSize(gMasterGfxPos++, 1, 0x0400, 0x0400, 0x045C, 0x045C);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_4b, 2, 0x0000, G_TX_RENDERTILE, 1,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 2, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPSetTileSize(gMasterGfxPos++, 2, 0, 0, 0x00FC, 0);
|
||||
|
||||
if (itemEntity->flags & (ITEM_ENTITY_FLAGS_8000000 | ITEM_ENTITY_FLAGS_TRANSPARENT)) {
|
||||
func_801491E4(&sp58, 0, 0, 0x18, 0x18, alpha);
|
||||
} else {
|
||||
func_801491E4(&sp58, 0, 0, 0x18, 0x18, 255);
|
||||
}
|
||||
} else {
|
||||
gDPSetTextureImage(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 12, gHudElementCacheTableRaster[itemEntity->lookupRasterIndex].data);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 2, 0x0000, G_TX_LOADTILE, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPLoadSync(gMasterGfxPos++);
|
||||
gDPLoadTile(gMasterGfxPos++, G_TX_LOADTILE, 0, 0, 0x002E, 0x005C);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_4b, 2, 0x0000, G_TX_RENDERTILE, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPSetTileSize(gMasterGfxPos++, G_TX_RENDERTILE, 0x0400, 0x0400, 0x045C, 0x045C);
|
||||
}
|
||||
gSPDisplayList(gMasterGfxPos++, D_8014C678);
|
||||
} else {
|
||||
gDPLoadTLUT_pal16(gMasterGfxPos++, 0, gHudElementCacheTablePalette[itemEntity->lookupPaletteIndex].data);
|
||||
if (D_80151328->flags != 0) {
|
||||
gDPSetTextureImage(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 16, gHudElementCacheTableRaster[itemEntity->lookupRasterIndex].data);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 2, 0x0000, G_TX_LOADTILE, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPLoadSync(gMasterGfxPos++);
|
||||
gDPLoadTile(gMasterGfxPos++, G_TX_LOADTILE, 0, 0, 0x003E, 0x007C);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_4b, 2, 0x0000, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP,
|
||||
8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPSetTileSize(gMasterGfxPos++, 1, 0x0400, 0x0400, 0x047C, 0x047C);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_4b, 2, 0x0000, G_TX_RENDERTILE, 1,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0x0100, 2, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPSetTileSize(gMasterGfxPos++, 2, 0, 0, 0x00FC, 0);
|
||||
if (itemEntity->flags & (ITEM_ENTITY_FLAGS_8000000 | ITEM_ENTITY_FLAGS_TRANSPARENT)) {
|
||||
func_801491E4(&sp58, 0, 0, 0x20, 0x20, alpha);
|
||||
} else {
|
||||
func_801491E4(&sp58, 0, 0, 0x20, 0x20, 255);
|
||||
}
|
||||
} else {
|
||||
gDPSetTextureImage(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 16, gHudElementCacheTableRaster[itemEntity->lookupRasterIndex].data);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_8b, 2, 0x0000, G_TX_LOADTILE, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPLoadSync(gMasterGfxPos++);
|
||||
gDPLoadTile(gMasterGfxPos++, G_TX_LOADTILE, 0, 0, 0x003E, 0x007C);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
gDPSetTile(gMasterGfxPos++, G_IM_FMT_CI, G_IM_SIZ_4b, 2, 0x0000, G_TX_RENDERTILE, 0,
|
||||
G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 8, G_TX_NOLOD);
|
||||
gDPSetTileSize(gMasterGfxPos++, G_TX_RENDERTILE, 0x0400, 0x0400, 0x047C, 0x047C);
|
||||
}
|
||||
gSPDisplayList(gMasterGfxPos++, D_8014C6A0);
|
||||
}
|
||||
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
|
||||
if (itemEntity->itemID == ITEM_COIN) {
|
||||
draw_coin_sparkles(itemEntity);
|
||||
}
|
||||
}
|
||||
|
||||
void draw_item_entities(void) {
|
||||
RenderTask rt;
|
||||
@ -961,7 +1157,7 @@ s32 test_item_player_collision(ItemEntity* item) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (gOverrideFlags & 0x200000) {
|
||||
if (gOverrideFlags & GLOBAL_OVERRIDES_200000) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1622,8 +1818,392 @@ void func_801356CC(ItemEntity* itemEntity) {
|
||||
void func_801356D4(ItemEntity* itemEntity) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "C50A0", update_item_entity_temp);
|
||||
void update_item_entity_temp(ItemEntity* itemEntity) {
|
||||
PlayerData* playerData = &gPlayerData;
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
PopupMenu* menu = &D_801565B0;
|
||||
ItemData* itemData;
|
||||
s32 numEntries;
|
||||
s32 msgID;
|
||||
s32 i;
|
||||
|
||||
if (itemEntity->state == 0) {
|
||||
isPickingUpItem = TRUE;
|
||||
if (!(itemEntity->flags & ITEM_ENTITY_FLAGS_2000000)) {
|
||||
disable_player_input();
|
||||
partner_disable_input();
|
||||
gOverrideFlags |= GLOBAL_OVERRIDES_40;
|
||||
set_time_freeze_mode(TIME_FREEZE_FULL);
|
||||
}
|
||||
item_entity_disable_shadow(itemEntity);
|
||||
itemEntity->state = 1;
|
||||
}
|
||||
|
||||
switch (itemEntity->state) {
|
||||
case 1:
|
||||
if (!(itemEntity->flags & ITEM_ENTITY_FLAGS_2000000)) {
|
||||
s32 actionState = playerStatus->actionState;
|
||||
|
||||
if (!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_10000000) &&
|
||||
((playerStatus->timeInAir == 0 &&
|
||||
actionState != ACTION_STATE_JUMP &&
|
||||
actionState != ACTION_STATE_FALLING) ||
|
||||
!playerStatus->enableCollisionOverlapsCheck ||
|
||||
playerStatus->inputEnabledCounter == 0) &&
|
||||
actionState != ACTION_STATE_LAUNCH &&
|
||||
actionState != ACTION_STATE_RIDE &&
|
||||
actionState != ACTION_STATE_IDLE &&
|
||||
(actionState != ACTION_STATE_USE_SPINNING_FLOWER || playerStatus->fallState != 1)
|
||||
) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(itemEntity->pickupMsgFlags & 1)) {
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_BADGE) {
|
||||
sfx_play_sound(SOUND_D3);
|
||||
} else if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_KEY) {
|
||||
sfx_play_sound(SOUND_D2);
|
||||
} else if (itemEntity->itemID == ITEM_COIN) {
|
||||
sfx_play_sound_at_position(
|
||||
SOUND_211, 0, itemEntity->position.x, itemEntity->position.y, itemEntity->position.z
|
||||
);
|
||||
} else {
|
||||
sfx_play_sound(SOUND_D1);
|
||||
}
|
||||
}
|
||||
D_801568E0 = hud_element_create(gItemHudScripts[gItemTable[itemEntity->itemID].hudElemID].enabled);
|
||||
hud_element_set_flags(D_801568E0, 0x80);
|
||||
hud_element_set_render_pos(D_801568E0, -100, -100);
|
||||
itemEntity->state = 2;
|
||||
|
||||
if (!(itemEntity->flags & ITEM_ENTITY_FLAGS_2000000)) {
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_CONSUMABLE) {
|
||||
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
|
||||
if (playerData->invItems[i] == ITEM_NONE) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < ARRAY_COUNT(playerData->invItems)) {
|
||||
playerData->invItems[i] = itemEntity->itemID;
|
||||
} else {
|
||||
itemEntity->state = 0xA;
|
||||
goto block_47; // TODO required to match
|
||||
}
|
||||
}
|
||||
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_KEY) {
|
||||
for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
|
||||
if (playerData->keyItems[i] == ITEM_NONE) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < ARRAY_COUNT(playerData->keyItems)) {
|
||||
playerData->keyItems[i] = itemEntity->itemID;
|
||||
} else {
|
||||
itemEntity->state = 0xA;
|
||||
goto block_47; // TODO required to match
|
||||
}
|
||||
}
|
||||
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_BADGE) {
|
||||
for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) {
|
||||
if (playerData->badges[i] == ITEM_NONE) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < ARRAY_COUNT(playerData->badges)) {
|
||||
playerData->badges[i] = itemEntity->itemID;
|
||||
} else {
|
||||
itemEntity->state = 0xA;
|
||||
goto block_47; // TODO required to match
|
||||
}
|
||||
}
|
||||
|
||||
if (itemEntity->itemID == ITEM_STAR_PIECE) {
|
||||
playerData->starPieces++;
|
||||
if (playerData->starPieces > 222) {
|
||||
playerData->starPieces = 222;
|
||||
}
|
||||
}
|
||||
|
||||
if (itemEntity->itemID == ITEM_LUCKY_STAR) {
|
||||
playerData->hasActionCommands = 1;
|
||||
}
|
||||
|
||||
if (itemEntity->itemID == ITEM_HAMMER ||
|
||||
itemEntity->itemID == ITEM_SUPER_HAMMER ||
|
||||
itemEntity->itemID == ITEM_ULTRA_HAMMER)
|
||||
{
|
||||
playerData->hammerLevel = itemEntity->itemID - 4;
|
||||
}
|
||||
|
||||
if (itemEntity->itemID == ITEM_JUMP ||
|
||||
itemEntity->itemID == ITEM_SPIN_JUMP ||
|
||||
itemEntity->itemID == ITEM_TORNADO_JUMP)
|
||||
{
|
||||
playerData->bootsLevel = itemEntity->itemID - 1;
|
||||
}
|
||||
}
|
||||
|
||||
block_47: // TODO required to match
|
||||
if (itemEntity->flags & ITEM_ENTITY_FLAGS_80000000) {
|
||||
set_global_flag(itemEntity->boundVar);
|
||||
}
|
||||
if (itemEntity->state == 0xA) {
|
||||
func_801363A0(itemEntity);
|
||||
set_window_update(0xC, (s32) basic_window_update);
|
||||
set_window_update(0x11, (s32) basic_window_update);
|
||||
set_window_update(0x13, (s32) basic_window_update);
|
||||
}
|
||||
increment_status_menu_disabled();
|
||||
D_801568E4 = 10;
|
||||
break;
|
||||
case 2:
|
||||
if (D_801568E4 == 9) {
|
||||
if ((gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_BADGE) ||
|
||||
(gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_KEY) ||
|
||||
(itemEntity->itemID == ITEM_STAR_PIECE) ||
|
||||
(gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_GEAR) ||
|
||||
(itemEntity->flags & ITEM_ENTITY_FLAGS_4000000) ||
|
||||
(itemEntity->pickupMsgFlags & 2))
|
||||
{
|
||||
itemEntity->position.x = playerStatus->position.x;
|
||||
itemEntity->position.y = playerStatus->position.y + playerStatus->colliderHeight;
|
||||
itemEntity->position.z = playerStatus->position.z;
|
||||
suggest_player_anim_setUnkFlag(0x6000C);
|
||||
}
|
||||
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_GEAR) {
|
||||
fx_got_item_outline(
|
||||
1,
|
||||
itemEntity->position.x,
|
||||
itemEntity->position.y + 8.0f,
|
||||
itemEntity->position.z,
|
||||
1.0f,
|
||||
&D_801568F0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (D_801568E4 < 9) {
|
||||
if ((gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_BADGE) ||
|
||||
(gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_KEY) ||
|
||||
(itemEntity->itemID == ITEM_STAR_PIECE) ||
|
||||
(gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_GEAR) ||
|
||||
(itemEntity->flags & ITEM_ENTITY_FLAGS_4000000) ||
|
||||
(itemEntity->pickupMsgFlags & 2))
|
||||
{
|
||||
suggest_player_anim_setUnkFlag(0x6000C);
|
||||
}
|
||||
}
|
||||
|
||||
if (D_801568E4 == 7) {
|
||||
if ((gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_BADGE) ||
|
||||
(gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_KEY) ||
|
||||
itemEntity->itemID == ITEM_STAR_PIECE ||
|
||||
(gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_GEAR) ||
|
||||
(itemEntity->flags & ITEM_ENTITY_FLAGS_4000000) ||
|
||||
(itemEntity->pickupMsgFlags & 2))
|
||||
{
|
||||
itemEntity->flags &= ~ITEM_ENTITY_FLAGS_40;
|
||||
}
|
||||
}
|
||||
|
||||
if (D_801568E4 == 6) {
|
||||
func_801363A0(itemEntity);
|
||||
set_window_update(0xC, (s32) basic_window_update);
|
||||
if (itemEntity->itemID != ITEM_STAR_PIECE && itemEntity->itemID != ITEM_COIN) {
|
||||
set_window_update(0x13, (s32) basic_window_update);
|
||||
}
|
||||
}
|
||||
|
||||
if (D_801568E4 != 0) {
|
||||
D_801568E4--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (gGameStatusPtr->pressedButtons[0] &
|
||||
(BUTTON_STICK_RIGHT | BUTTON_STICK_LEFT | BUTTON_STICK_DOWN | BUTTON_STICK_UP | BUTTON_A | BUTTON_B))
|
||||
{
|
||||
item_entity_disable_shadow(itemEntity);
|
||||
if (func_800DFCF4() &&
|
||||
playerStatus->actionState != ACTION_STATE_USE_SPINNING_FLOWER &&
|
||||
!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_10000000))
|
||||
{
|
||||
set_action_state(ACTION_STATE_IDLE);
|
||||
}
|
||||
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_GEAR) {
|
||||
D_801568F0->data.gotItemOutline->unk_14 = 0xA;
|
||||
}
|
||||
set_window_update(0xC, (s32) basic_hidden_window_update);
|
||||
set_window_update(0x13, (s32) basic_hidden_window_update);
|
||||
itemEntity->state = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!(gWindows[12].flags & WINDOW_FLAGS_INITIAL_ANIMATION) &&
|
||||
!(gWindows[19].flags & WINDOW_FLAGS_INITIAL_ANIMATION))
|
||||
{
|
||||
itemEntity->state = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if ((gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_CONSUMABLE) &&
|
||||
!evt_get_variable(NULL, GSWF(97)))
|
||||
{
|
||||
evt_set_variable(NULL, GSWF(97), TRUE);
|
||||
itemEntity->state = 5;
|
||||
break;
|
||||
}
|
||||
|
||||
if (itemEntity->itemID == ITEM_STAR_PIECE && !evt_get_variable(NULL, GSWF(101))) {
|
||||
evt_set_variable(NULL, GSWF(101), TRUE);
|
||||
itemEntity->state = 5;
|
||||
break;
|
||||
}
|
||||
itemEntity->state = 9;
|
||||
break;
|
||||
case 5:
|
||||
msgID = 0;
|
||||
if (gItemTable[itemEntity->itemID].typeFlags & ITEM_TYPE_FLAG_CONSUMABLE) {
|
||||
msgID = 0x1D0002;
|
||||
}
|
||||
if (itemEntity->itemID == ITEM_STAR_PIECE) {
|
||||
msgID = 0x1D0003;
|
||||
}
|
||||
D_801568F4 = msg_get_printer_for_msg(msgID, &D_801568F8);
|
||||
msg_printer_set_origin_pos(D_801568F4, 0, 0);
|
||||
itemEntity->state = 6;
|
||||
break;
|
||||
case 6:
|
||||
if (D_801568F8 == TRUE) {
|
||||
isPickingUpItem = FALSE;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
if (!(itemEntity->flags & ITEM_ENTITY_FLAGS_2000000)) {
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
enable_player_input();
|
||||
partner_enable_input();
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
|
||||
}
|
||||
hud_element_free(D_801568E0);
|
||||
remove_item_entity_by_reference(itemEntity);
|
||||
sort_items();
|
||||
decrement_status_menu_disabled();
|
||||
isPickingUpItem = FALSE;
|
||||
break;
|
||||
case 10:
|
||||
numEntries = 0;
|
||||
if (gGameStatusPtr->pressedButtons[0] & BUTTON_A) {
|
||||
itemData = &gItemTable[itemEntity->itemID];
|
||||
menu->ptrIcon[numEntries] = gItemHudScripts[itemData->hudElemID].enabled;
|
||||
menu->userIndex[numEntries] = itemEntity->itemID;
|
||||
menu->enabled[numEntries] = TRUE;
|
||||
menu->nameMsg[numEntries] = itemData->nameMsg;
|
||||
menu->descMsg[numEntries] = itemData->shortDescMsg;
|
||||
numEntries++;
|
||||
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
|
||||
if (playerData->invItems[i] != 0) {
|
||||
itemData = &gItemTable[playerData->invItems[i]];
|
||||
menu->ptrIcon[numEntries] = gItemHudScripts[itemData->hudElemID].enabled;
|
||||
menu->userIndex[numEntries] = playerData->invItems[i];
|
||||
menu->enabled[numEntries] = TRUE;
|
||||
menu->nameMsg[numEntries] = itemData->nameMsg;
|
||||
menu->descMsg[numEntries] = itemData->shortDescMsg;
|
||||
numEntries++;
|
||||
}
|
||||
}
|
||||
menu->popupType = 2;
|
||||
menu->numEntries = numEntries;
|
||||
menu->initialPos = 0;
|
||||
create_popup_menu(menu);
|
||||
set_window_update(0xC, (s32) basic_hidden_window_update);
|
||||
set_window_update(0x11, (s32) basic_hidden_window_update);
|
||||
D_801568E4 = 0;
|
||||
itemEntity->state = 0xB;
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (!(gWindows[12].flags & WINDOW_FLAGS_INITIAL_ANIMATION) &&
|
||||
!(gWindows[17].flags & WINDOW_FLAGS_INITIAL_ANIMATION) &&
|
||||
!(gWindows[19].flags & WINDOW_FLAGS_INITIAL_ANIMATION))
|
||||
{
|
||||
itemEntity->state = 0xC;
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
if (D_801568E4 == 0) {
|
||||
D_801568E8 = menu->result;
|
||||
if (D_801568E8 == 0) {
|
||||
break;
|
||||
}
|
||||
hide_popup_menu();
|
||||
}
|
||||
D_801568E4++;
|
||||
if (D_801568E4 >= 15) {
|
||||
destroy_popup_menu();
|
||||
if (D_801568E8 == 255) {
|
||||
D_801568E8 = 1;
|
||||
}
|
||||
D_801568EC = menu->userIndex[D_801568E8 - 1];
|
||||
hud_element_set_script(D_801568E0, menu->ptrIcon[D_801568E8 - 1]);
|
||||
|
||||
get_item_entity(
|
||||
make_item_entity_delayed(
|
||||
D_801568EC,
|
||||
playerStatus->position.x,
|
||||
playerStatus->position.y + playerStatus->colliderHeight,
|
||||
playerStatus->position.z, 3, 0, 0
|
||||
)
|
||||
)->renderGroup = -1;
|
||||
|
||||
if (D_801568E8 >= 2) {
|
||||
playerData->invItems[D_801568E8 - 2] = 0;
|
||||
sort_items();
|
||||
add_item(itemEntity->itemID);
|
||||
}
|
||||
suggest_player_anim_setUnkFlag(0x6000C);
|
||||
func_801363A0(itemEntity);
|
||||
set_window_update(0xC, (s32) basic_window_update);
|
||||
D_801568E4 = 50;
|
||||
itemEntity->state = 0xD;
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
if (gGameStatusPtr->pressedButtons[0] & BUTTON_A) {
|
||||
set_window_update(0xC, (s32) basic_hidden_window_update);
|
||||
itemEntity->state = 0xE;
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
if (!(gWindows[12].flags & WINDOW_FLAGS_INITIAL_ANIMATION) &&
|
||||
!(gWindows[17].flags & WINDOW_FLAGS_INITIAL_ANIMATION) &&
|
||||
!(gWindows[19].flags & WINDOW_FLAGS_INITIAL_ANIMATION))
|
||||
{
|
||||
itemEntity->state = 15;
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
suggest_player_anim_setUnkFlag(0x10002);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
enable_player_input();
|
||||
partner_enable_input();
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
|
||||
hud_element_free(D_801568E0);
|
||||
remove_item_entity_by_reference(itemEntity);
|
||||
sort_items();
|
||||
decrement_status_menu_disabled();
|
||||
isPickingUpItem = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
void func_801363A0(ItemEntity* itemEntity) {
|
||||
@ -1814,6 +2394,3 @@ void func_80136A08(ItemEntity* itemEntity, s32 posX, s32 posY) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO remove this
|
||||
static const f32 rodata_padding[] = { 0.0f, 0.0f };
|
||||
|
49
src/E20110.c
49
src/E20110.c
@ -2,19 +2,40 @@
|
||||
|
||||
#define NAMESPACE E20110
|
||||
|
||||
typedef struct TempE20110 {
|
||||
/* 0x00 */ Vec3f unk_00;
|
||||
/* 0x0C */ char unk_0C[0x14];
|
||||
/* 0x20 */ char unk_20[0x1];
|
||||
/* 0x21 */ s8 unk_21;
|
||||
/* 0x22 */ s8 unk_22;
|
||||
} TempE20110;
|
||||
|
||||
extern TempE20110* D_802B7CB8_E20DC8;
|
||||
|
||||
#include "common/UnkAngleFunc1.inc.c"
|
||||
|
||||
void func_802B7728_E20838(void);
|
||||
|
||||
// floatz
|
||||
#ifdef NON_MATCHING
|
||||
void func_802B70B4_E201C4(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
f32 new_var;
|
||||
|
||||
if (playerStatus->animFlags & 0x10) {
|
||||
mem_clear(D_802B7CB8_E20DC8, sizeof(*D_802B7CB8_E20DC8));
|
||||
D_8010C950 = -1;
|
||||
D_802B7CB8_E20DC8->unk_00.x = playerStatus->position.x;
|
||||
new_var = playerStatus->position.y + playerStatus->colliderHeight;
|
||||
if (!(playerStatus->animFlags & 0x1000)) {
|
||||
D_802B7CB8_E20DC8->unk_00.y = new_var + 8.0f;
|
||||
} else {
|
||||
D_802B7CB8_E20DC8->unk_00.y = new_var + 2.0f;
|
||||
}
|
||||
D_802B7CB8_E20DC8->unk_00.z = playerStatus->position.z;
|
||||
D_802B7CB8_E20DC8->unk_10 = 0.4f;
|
||||
D_802B7CB8_E20DC8->unk_23 = 0;
|
||||
D_802B7CB8_E20DC8->unk_0C = -gCameras[gCurrentCameraID].currentYaw;
|
||||
D_8010C958 = func_802B7728_E20838;
|
||||
D_802B7CB8_E20DC8->unk_24 = 0xFF;
|
||||
D_802B7CB8_E20DC8->unk_1C = 0xFF;
|
||||
}
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "E20110", func_802B70B4_E201C4);
|
||||
#endif
|
||||
|
||||
INCLUDE_ASM(s32, "E20110", func_802B71E8_E202F8);
|
||||
|
||||
@ -38,20 +59,20 @@ void func_802B75E8_E206F8(void) {
|
||||
D_802B7CB8_E20DC8->unk_21 = -4;
|
||||
}
|
||||
|
||||
delta = (playerStatus->position.x - D_802B7CB8_E20DC8->unk_00.x) * 0.666f;
|
||||
D_802B7CB8_E20DC8->unk_00.x += delta;
|
||||
delta = (playerStatus->position.z - D_802B7CB8_E20DC8->unk_00.z) * 0.666f;
|
||||
D_802B7CB8_E20DC8->unk_00.z += delta;
|
||||
delta = (playerStatus->position.x - D_802B7CB8_E20DC8->pos.x) * 0.666f;
|
||||
D_802B7CB8_E20DC8->pos.x += delta;
|
||||
delta = (playerStatus->position.z - D_802B7CB8_E20DC8->pos.z) * 0.666f;
|
||||
D_802B7CB8_E20DC8->pos.z += delta;
|
||||
|
||||
yTemp = playerStatus->position.y + playerStatus->colliderHeight;
|
||||
unk_21 = D_802B7CB8_E20DC8->unk_21;
|
||||
y = D_802B7CB8_E20DC8->unk_00.y;
|
||||
y = D_802B7CB8_E20DC8->pos.y;
|
||||
if (!(playerStatus->animFlags & 0x1000)) {
|
||||
delta = (yTemp + 8.0f + unk_21 - y) * 0.25f;
|
||||
} else {
|
||||
delta = (yTemp + 2.0f + unk_21 - y) * 0.25f;
|
||||
}
|
||||
D_802B7CB8_E20DC8->unk_00.y += delta;
|
||||
D_802B7CB8_E20DC8->pos.y += delta;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "E20110", func_802B7728_E20838);
|
||||
|
168
src/E21870.c
168
src/E21870.c
@ -1,23 +1,177 @@
|
||||
#include "common.h"
|
||||
|
||||
typedef struct TempE21870 {
|
||||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ f32 scale;
|
||||
/* 0x10 */ f32 unk_10;
|
||||
/* 0x14 */ char unk_14[0x4];
|
||||
/* 0x18 */ s32 unk_18;
|
||||
/* 0x1C */ s32 unk_1C;
|
||||
/* 0x20 */ s32 unk_20;
|
||||
/* 0x24 */ s32 unk_24;
|
||||
} TempE21870; // size = 0x28
|
||||
|
||||
extern u8 D_802B7640_E21EB0[];
|
||||
extern u16 D_802B7C60_E224D0[];
|
||||
extern u16 D_802B7C80_E224F0[];
|
||||
extern Gfx D_802B7CA0_E22510[];
|
||||
extern TempE21870* D_802B7D18_E22588;
|
||||
|
||||
void func_802B74F0(void);
|
||||
|
||||
s32 func_802B7000_2(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
PartnerActionStatus* partnerActionStatus = &gPartnerActionStatus;
|
||||
s8 actionState = gPlayerStatus.actionState;
|
||||
s8 actionState = playerStatus->actionState;
|
||||
|
||||
if (actionState != ACTION_STATE_USE_TWEESTER) {
|
||||
if (partnerActionStatus->partnerActionState != PARTNER_ACTION_USE ||
|
||||
(partnerActionStatus->actingPartner != PARTNER_BOW
|
||||
&& partnerActionStatus->actingPartner != PARTNER_PARAKARRY)) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "E21870", func_802B704C);
|
||||
s32 func_802B704C(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
INCLUDE_ASM(s32, "E21870", func_802B7140);
|
||||
if (!is_starting_conversation()) {
|
||||
if (!(playerStatus->flags & PLAYER_STATUS_FLAGS_20)) {
|
||||
if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_USING_PULSE_STONE) {
|
||||
if (!has_valid_conversation_npc()) {
|
||||
if (!func_800E06D8()) {
|
||||
s32 dx = abs((gGameStatusPtr->mapID % 7) - 2);
|
||||
s32 dy = gGameStatusPtr->mapID / 7;
|
||||
|
||||
INCLUDE_ASM(s32, "E21870", func_802B71D4);
|
||||
if ((dx + dy) < 6) {
|
||||
if (!func_802B7000_2()) {
|
||||
dy = TRUE; // TODO required to set dy to 1 and return that
|
||||
|
||||
INCLUDE_ASM(s32, "E21870", func_802B74F0);
|
||||
return dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void func_802B7140(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
mem_clear(D_802B7D18_E22588, sizeof(*D_802B7D18_E22588));
|
||||
D_802B7D18_E22588->pos.x = playerStatus->position.x;
|
||||
D_802B7D18_E22588->pos.y = playerStatus->position.y + playerStatus->colliderHeight + 8.0f;
|
||||
D_802B7D18_E22588->pos.z = playerStatus->position.z;
|
||||
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_40;
|
||||
D_8010C920 = func_802B74F0;
|
||||
}
|
||||
|
||||
void func_802B71D4(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
Matrix4f sp18, sp58;
|
||||
FoldImageRecPart part;
|
||||
s32 var_v1;
|
||||
s32 dx, dy;
|
||||
|
||||
if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_40) {
|
||||
guScaleF(sp18, D_802B7D18_E22588->scale, D_802B7D18_E22588->scale, D_802B7D18_E22588->scale);
|
||||
guRotateF(sp58, -gCameras[gCurrentCameraID].currentYaw, 0.0f, 1.0f, 0.0f);
|
||||
guMtxCatF(sp18, sp58, sp18);
|
||||
guTranslateF(sp58, D_802B7D18_E22588->pos.x, D_802B7D18_E22588->pos.y, D_802B7D18_E22588->pos.z);
|
||||
guMtxCatF(sp18, sp58, sp58);
|
||||
guMtxF2L(sp58, &gDisplayContext->matrixStack[gMatrixListPos]);
|
||||
|
||||
gSPMatrix(gMasterGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++],
|
||||
G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(gMasterGfxPos++, D_802B7CA0_E22510);
|
||||
|
||||
dx = abs((gGameStatusPtr->mapID % 7) - 2);
|
||||
dy = gGameStatusPtr->mapID / 7;
|
||||
|
||||
switch (dx + dy) {
|
||||
case 0:
|
||||
var_v1 = 4;
|
||||
break;
|
||||
case 1:
|
||||
var_v1 = 8;
|
||||
break;
|
||||
case 2:
|
||||
var_v1 = 16;
|
||||
break;
|
||||
case 3:
|
||||
var_v1 = 32;
|
||||
break;
|
||||
case 4:
|
||||
var_v1 = 64;
|
||||
break;
|
||||
case 5:
|
||||
var_v1 = 128;
|
||||
break;
|
||||
default:
|
||||
var_v1 = -1;
|
||||
D_802B7D18_E22588->unk_20 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
part.palette = D_802B7C60_E224D0;
|
||||
if (var_v1 >= 0) {
|
||||
D_802B7D18_E22588->unk_20++;
|
||||
if (D_802B7D18_E22588->unk_20 >= var_v1 + 2) {
|
||||
D_802B7D18_E22588->unk_20 = 0;
|
||||
sfx_play_sound_at_player(SOUND_7D, 0);
|
||||
}
|
||||
if (D_802B7D18_E22588->unk_20 < 2) {
|
||||
part.palette = D_802B7C80_E224F0;
|
||||
} else {
|
||||
part.palette = D_802B7C60_E224D0;
|
||||
}
|
||||
}
|
||||
|
||||
part.raster = D_802B7640_E21EB0;
|
||||
part.width = 56;
|
||||
part.height = 56;
|
||||
part.xOffset = -28;
|
||||
part.yOffset = 46;
|
||||
part.opacity = 255;
|
||||
fold_appendGfx_component(0, &part, 0, sp58);
|
||||
gSPPopMatrix(gMasterGfxPos++, G_MTX_MODELVIEW);
|
||||
}
|
||||
}
|
||||
|
||||
void func_802B74F0(void) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
D_802B7D18_E22588->pos.y +=
|
||||
((playerStatus->position.y + playerStatus->colliderHeight + 10.0f) - D_802B7D18_E22588->pos.y) / 1.5f;
|
||||
D_802B7D18_E22588->pos.x = playerStatus->position.x;
|
||||
D_802B7D18_E22588->pos.z = playerStatus->position.z;
|
||||
|
||||
if (!func_802B704C()) {
|
||||
D_8010C920 = NULL;
|
||||
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_40;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (D_802B7D18_E22588->unk_24) {
|
||||
case 0:
|
||||
if (D_802B7D18_E22588->unk_18++ < 6) {
|
||||
break;
|
||||
}
|
||||
D_802B7D18_E22588->scale = 0.36f;
|
||||
D_802B7D18_E22588->unk_24++;
|
||||
break;
|
||||
case 1:
|
||||
D_802B7D18_E22588->scale = 0.57f;
|
||||
D_802B7D18_E22588->unk_24++;
|
||||
break;
|
||||
case 2:
|
||||
D_802B7D18_E22588->scale = 0.53f;
|
||||
D_802B7D18_E22588->unk_24++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,8 @@
|
||||
#include "ld_addrs.h"
|
||||
#include "stdlib/stdarg.h"
|
||||
#include "entity.h"
|
||||
#include "hud_element.h"
|
||||
#include "effects.h"
|
||||
|
||||
typedef struct GameMode {
|
||||
/* 0x00 */ u16 flags;
|
||||
@ -997,7 +999,6 @@ s32 mdl_renderTaskBasePriorities[RENDER_MODE_COUNT] = {
|
||||
[RENDER_MODE_CLOUD_NO_ZB] = 700000,
|
||||
};
|
||||
|
||||
|
||||
s8 D_8014C248[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
|
||||
|
||||
// BSS
|
||||
@ -1008,8 +1009,8 @@ extern s32 D_80151304;
|
||||
extern s32 D_80151344;
|
||||
extern s32 entity_numEntities;
|
||||
extern s32 gEntityHeapBase;
|
||||
extern s32 gHudElementCacheTableRaster;
|
||||
extern s32 gHudElementCacheTablePalette[4];
|
||||
extern HudCacheEntry* gHudElementCacheTableRaster;
|
||||
extern HudCacheEntry* gHudElementCacheTablePalette;
|
||||
extern ModelNode** gCurrentModelTreeRoot;
|
||||
extern ModelTransformGroupList* gCurrentTransformGroups;
|
||||
extern s8 gMsgGlobalWaveCounter[0x4];
|
||||
@ -1098,7 +1099,9 @@ void func_80117D00(Model* model);
|
||||
void appendGfx_model_group(Model* model);
|
||||
void render_transform_group_node(ModelNode* node);
|
||||
void render_transform_group(ModelTransformGroup* group);
|
||||
void func_801180E8(TextureHeader*, void**, u8* raster, u16* palette, u8* auxRaster, u16* auxPalette, s32, s32, s32, s32);
|
||||
void load_model_transforms(ModelNode* model, ModelNode* parent, Matrix4f mdlTxMtx, s32 treeDepth);
|
||||
s32 is_identity_fixed_mtx(Mtx* mtx);
|
||||
|
||||
void update_entities(void) {
|
||||
s32 i;
|
||||
@ -1407,13 +1410,13 @@ void render_entities(void) {
|
||||
if (D_8014AFB0 == 0xFF) {
|
||||
if (entity->renderSetupFunc != NULL) {
|
||||
bind_entity_model_setupGfx(entity->virtualModelIndex,
|
||||
entity->listIndex,
|
||||
(void*)(u32)entity->listIndex,
|
||||
entity->renderSetupFunc);
|
||||
} else {
|
||||
get_entity_model(entity->virtualModelIndex)->fpSetupGfxCallback = NULL;
|
||||
}
|
||||
} else {
|
||||
bind_entity_model_setupGfx(entity->virtualModelIndex, entity->listIndex, func_8010FE44);
|
||||
bind_entity_model_setupGfx(entity->virtualModelIndex, (void*)(u32)entity->listIndex, func_8010FE44);
|
||||
}
|
||||
|
||||
if (entity->gfxBaseAddr == NULL) {
|
||||
@ -1463,7 +1466,7 @@ void render_shadows(void) {
|
||||
}
|
||||
}
|
||||
|
||||
bind_entity_model_setupGfx(shadow->entityModelID, (void*)shadow->alpha, entity_model_set_shadow_color);
|
||||
bind_entity_model_setupGfx(shadow->entityModelID, (void*)(u32)shadow->alpha, entity_model_set_shadow_color);
|
||||
|
||||
if (shadow->vertexArray == NULL) {
|
||||
draw_entity_model_A(shadow->entityModelID, &shadow->transformMatrix);
|
||||
@ -3186,8 +3189,118 @@ void calculate_model_sizes(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void mdl_create_model(ModelBlueprint* bp, s32 arg1);
|
||||
INCLUDE_ASM(s32, "a5dd0_len_114e0", mdl_create_model);
|
||||
void mdl_create_model(ModelBlueprint* bp, s32 arg1) {
|
||||
EffectInstance* effect;
|
||||
ModelNode* node = bp->mdlNode;
|
||||
ModelNodeProperty* prop;
|
||||
ModelBoundingBox* bb;
|
||||
s32 modelIdx;
|
||||
Model* model;
|
||||
f32 x, y, z;
|
||||
|
||||
prop = get_model_property(node, MODEL_PROP_KEY_SPECIAL);
|
||||
modelIdx = 0;
|
||||
if (prop != NULL) {
|
||||
s32 temp_s1 = (u8) prop->data.s / 16;
|
||||
|
||||
if (temp_s1 != 0) {
|
||||
prop = get_model_property(node, MODEL_PROP_KEY_BOUNDING_BOX);
|
||||
if (prop != NULL) {
|
||||
ModelBoundingBox* bb = (ModelBoundingBox*) prop;
|
||||
|
||||
fx_flame(
|
||||
temp_s1 - 1, (bb->minX + bb->maxX) * 0.5f, bb->minY, (bb->minZ + bb->maxZ) * 0.5f, 1.0f, &effect
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (modelIdx = 0; modelIdx < ARRAY_COUNT(*gCurrentModels); modelIdx++) {
|
||||
if ((*gCurrentModels)[modelIdx] == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
(*gCurrentModels)[modelIdx] = model = heap_malloc(sizeof(*model));
|
||||
model->flags = bp->flags | 1;
|
||||
model->modelID = D_80153226;
|
||||
model->modelNode = bp->mdlNode;
|
||||
model->groupData = bp->groupData;
|
||||
model->matrixMode = 0;
|
||||
node = model->modelNode;
|
||||
prop = get_model_property(node, MODEL_PROP_KEY_SPECIAL);
|
||||
if (prop != NULL) {
|
||||
model->texPannerID = prop->data.s & 0xF;
|
||||
} else {
|
||||
model->texPannerID = 0;
|
||||
}
|
||||
model->customGfxIndex = 0;
|
||||
|
||||
if (node->type != SHAPE_TYPE_GROUP) {
|
||||
prop = get_model_property(node, MODEL_PROP_KEY_RENDER_MODE);
|
||||
} else {
|
||||
prop = get_model_property(node, MODEL_PROP_KEY_GROUP_TYPE);
|
||||
|
||||
if (prop != NULL) {
|
||||
prop = &prop[1];
|
||||
}
|
||||
}
|
||||
|
||||
if (prop != NULL) {
|
||||
model->renderMode = prop->data.s;
|
||||
} else {
|
||||
model->renderMode = 1;
|
||||
}
|
||||
|
||||
model->textureID = (*mdl_currentModelTreeNodeInfo)[mdl_treeIterPos].textureID;
|
||||
model->textureVariation = 0;
|
||||
|
||||
if (!is_identity_fixed_mtx(bp->mtx)) {
|
||||
model->currentMatrix = heap_malloc(sizeof(*model->currentMatrix));
|
||||
*model->currentMatrix = *bp->mtx;
|
||||
model->specialMatrix = *model->currentMatrix;
|
||||
} else {
|
||||
model->currentMatrix = NULL;
|
||||
guMtxIdent(&model->specialMatrix);
|
||||
model->flags |= 0x2000;
|
||||
}
|
||||
|
||||
guMtxIdentF(model->transformMatrix);
|
||||
model->currentSpecialMatrix = NULL;
|
||||
prop = get_model_property(node, MODEL_PROP_KEY_BOUNDING_BOX);
|
||||
if (prop != NULL) {
|
||||
ModelBoundingBox* bb = (ModelBoundingBox*) prop;
|
||||
|
||||
x = (bb->minX + bb->maxX) * 0.5f;
|
||||
y = (bb->minY + bb->maxY) * 0.5f;
|
||||
z = (bb->minZ + bb->maxZ) * 0.5f;
|
||||
} else {
|
||||
x = y = z = 0.0f;
|
||||
}
|
||||
|
||||
if (model->currentMatrix != NULL) {
|
||||
guMtxXFML(model->currentMatrix, x, y, z, &x, &y, &z);
|
||||
}
|
||||
|
||||
model->center.x = x;
|
||||
model->center.y = y;
|
||||
model->center.z = z;
|
||||
|
||||
|
||||
bb = (ModelBoundingBox*) prop;
|
||||
x = bb->maxX - bb->minX;
|
||||
y = bb->maxY - bb->minY;
|
||||
z = bb->maxZ - bb->minZ;
|
||||
bb->halfSizeX = x * 0.5;
|
||||
bb->halfSizeY = y * 0.5;
|
||||
bb->halfSizeZ = z * 0.5;
|
||||
|
||||
if (model->currentMatrix == NULL && x < 100.0f && y < 100.0f && z < 100.0f) {
|
||||
model->flags |= 0x200;
|
||||
}
|
||||
(*mdl_currentModelTreeNodeInfo)[mdl_treeIterPos].modelIndex = modelIdx;
|
||||
}
|
||||
|
||||
// The global here is getting optimized out because nothing is happening to it. Very weird
|
||||
#ifdef NON_EQUIVALENT
|
||||
@ -4069,7 +4182,8 @@ void build_custom_gfx(void) {
|
||||
|
||||
// weird temps necessary to match
|
||||
/// @returns TRUE if mtx is NULL or identity.
|
||||
s32 is_identity_fixed_mtx(Matrix4s* mtx) {
|
||||
// TODO takes a Matrix4f, not a Matrix4s - types being weird
|
||||
s32 is_identity_fixed_mtx(Mtx* mtx) {
|
||||
s32* mtxIt = (s32*)mtx;
|
||||
s32* identityIt;
|
||||
s32 i;
|
||||
@ -4254,7 +4368,7 @@ void mdl_draw_hidden_panel_surface(Gfx** arg0, u16 treeIndex) {
|
||||
oldGfxPos = gMasterGfxPos;
|
||||
gMasterGfxPos = *arg0;
|
||||
|
||||
copied.flags = 0x80 | 0x1;
|
||||
copied.flags = MODEL_FLAGS_HAS_LOCAL_VERTEX_COPY | MODEL_FLAGS_FLAG_1;
|
||||
appendGfx_model(&copied);
|
||||
|
||||
*arg0 = gMasterGfxPos;
|
||||
@ -4264,13 +4378,13 @@ void mdl_draw_hidden_panel_surface(Gfx** arg0, u16 treeIndex) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 mdl_get_next_texture_address(s32 size) {
|
||||
void* mdl_get_next_texture_address(s32 size) {
|
||||
u32 offset = mdl_nextTextureAddress - mdl_textureBaseAddress + 0x3F;
|
||||
|
||||
offset = (offset >> 6) << 6;
|
||||
|
||||
if (size + offset > 0x28000) {
|
||||
return 0;
|
||||
return NULL;
|
||||
} else {
|
||||
return mdl_textureBaseAddress + offset;
|
||||
}
|
||||
|
@ -100,14 +100,13 @@ ApiStatus func_802A9210_42D120(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
void func_802A9310_42D220(void) {
|
||||
ActionCommandStatus* actionCommandStatus = &gActionCommandStatus;
|
||||
BattleStatus* battleStatus = &gBattleStatus;
|
||||
s32 id;
|
||||
s32 temp_v0_2;
|
||||
s32 phi_a1;
|
||||
s32 cutoff;
|
||||
s32 new_var;
|
||||
|
||||
switch (actionCommandStatus->state) {
|
||||
case 0:
|
||||
@ -147,12 +146,11 @@ void func_802A9310_42D220(void) {
|
||||
actionCommandStatus->hudElementX,
|
||||
actionCommandStatus->hudElementY + 28);
|
||||
|
||||
cutoff = 100 - actionCommandStatus->unk_46;
|
||||
cutoff = (cutoff * 60) / 100;
|
||||
temp_v0_2 = 29 - cutoff;
|
||||
phi_a1 = 100 - actionCommandStatus->unk_46;
|
||||
new_var = 29 - (phi_a1 * 60) / 100;
|
||||
hud_element_set_render_pos(
|
||||
actionCommandStatus->hudElements[4],
|
||||
actionCommandStatus->hudElementX - temp_v0_2,
|
||||
actionCommandStatus->hudElementX - new_var,
|
||||
actionCommandStatus->hudElementY + 17);
|
||||
}
|
||||
break;
|
||||
@ -163,7 +161,7 @@ void func_802A9310_42D220(void) {
|
||||
break;
|
||||
}
|
||||
hud_element_set_script(actionCommandStatus->hudElements[0], &HES_MashAButton);
|
||||
actionCommandStatus->unk_44 = 0;
|
||||
actionCommandStatus->barFillLevel = 0;
|
||||
actionCommandStatus->unk_5C = 0;
|
||||
D_802A9B00 = 1;
|
||||
actionCommandStatus->unk_54 = actionCommandStatus->unk_52;
|
||||
@ -174,7 +172,7 @@ void func_802A9310_42D220(void) {
|
||||
btl_set_popup_duration(99);
|
||||
|
||||
if (actionCommandStatus->unk_68 == 0) {
|
||||
if (actionCommandStatus->unk_64 != 0) {
|
||||
if (actionCommandStatus->easyVersion != 0) {
|
||||
cutoff = actionCommandStatus->mashMeterCutoffs[actionCommandStatus->mashMeterIntervals];
|
||||
actionCommandStatus->barFillLevel -= D_802A9AA0_42D9B0[actionCommandStatus->barFillLevel / cutoff / 20];
|
||||
if (actionCommandStatus->barFillLevel < 0) {
|
||||
@ -189,12 +187,13 @@ void func_802A9310_42D220(void) {
|
||||
}
|
||||
|
||||
if (battleStatus->currentButtonsPressed & BUTTON_A) {
|
||||
phi_a1 = actionCommandStatus->unk_64;
|
||||
// unk_434 = array of scaling values based on attack difficulty (unk_50).
|
||||
phi_a1 = actionCommandStatus->easyVersion;
|
||||
if (phi_a1 != 0) {
|
||||
s32 a;
|
||||
a = battleStatus->unk_434[actionCommandStatus->unk_50];
|
||||
actionCommandStatus->barFillLevel += a * 850 / 100 * phi_a1 / 100;
|
||||
// unk_434 = array of scaling values based on attack difficulty (unk_50).
|
||||
s32 a = battleStatus->unk_434[actionCommandStatus->unk_50];
|
||||
|
||||
phi_a1 = (((a * 850) / 100) * phi_a1) / 100;
|
||||
actionCommandStatus->barFillLevel += phi_a1;
|
||||
} else {
|
||||
actionCommandStatus->barFillLevel += 100;
|
||||
if (actionCommandStatus->barFillLevel >= 500) {
|
||||
@ -204,9 +203,9 @@ void func_802A9310_42D220(void) {
|
||||
}
|
||||
|
||||
if (actionCommandStatus->barFillLevel > 10000) {
|
||||
id = actionCommandStatus->hudElements[3];
|
||||
actionCommandStatus->barFillLevel = 10000;
|
||||
actionCommandStatus->unk_68 = 1;
|
||||
id = actionCommandStatus->hudElements[3];
|
||||
hud_element_set_render_pos(
|
||||
id,
|
||||
actionCommandStatus->hudElementX + 50,
|
||||
@ -219,7 +218,7 @@ void func_802A9310_42D220(void) {
|
||||
|
||||
if (actionCommandStatus->unk_54 == 0) {
|
||||
phi_a1 = actionCommandStatus->barFillLevel;
|
||||
if (actionCommandStatus->unk_64 == 0) {
|
||||
if (actionCommandStatus->easyVersion == 0) {
|
||||
phi_a1 = 0;
|
||||
}
|
||||
|
||||
@ -252,7 +251,7 @@ void func_802A9310_42D220(void) {
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
if (actionCommandStatus->unk_64 == 0) {
|
||||
if (actionCommandStatus->easyVersion == 0) {
|
||||
actionCommandStatus->barFillLevel -= 100;
|
||||
if (actionCommandStatus->barFillLevel < 0) {
|
||||
actionCommandStatus->barFillLevel = 0;
|
||||
@ -287,9 +286,6 @@ void func_802A9310_42D220(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "battle/action_cmd/power_shock", func_802A9310_42D220, void);
|
||||
#endif
|
||||
|
||||
void N(draw_hud_elements)(void) {
|
||||
ActionCommandStatus* actionCommandStatus = &gActionCommandStatus;
|
||||
|
@ -50,7 +50,66 @@ ApiStatus func_802182A4_5CE934(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "battle/area_flo2/5CE690", func_80218440_5CEAD0);
|
||||
ApiStatus func_80218440_5CEAD0(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 arr[10];
|
||||
s32 flags = evt_get_variable(script, *args++);
|
||||
s32 count = 0;
|
||||
s32 var_a2;
|
||||
|
||||
if (!(flags & 2)) {
|
||||
arr[count] = 2;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 8)) {
|
||||
arr[count] = 8;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 0x20)) {
|
||||
arr[count] = 0x20;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 0x80)) {
|
||||
arr[count] = 0x80;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 0x200)) {
|
||||
arr[count] = 0x200;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 1)) {
|
||||
arr[count] = 1;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 4)) {
|
||||
arr[count] = 4;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 0x10)) {
|
||||
arr[count] = 0x10;
|
||||
count++;
|
||||
}
|
||||
|
||||
if (count == 0) {
|
||||
if (!(flags & 0x100)) {
|
||||
arr[count] = 0x100;
|
||||
count++;
|
||||
}
|
||||
if (!(flags & 0x40)) {
|
||||
arr[count] = 0x40;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == 0) {
|
||||
var_a2 = -1;
|
||||
} else {
|
||||
var_a2 = arr[rand_int(count - 1)];
|
||||
}
|
||||
|
||||
evt_set_variable(script, *args++, var_a2);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
ApiStatus func_802185D4_5CEC64(Evt* script, s32 isInitialCall) {
|
||||
s32* actorID = &script->owner1.actorID;
|
||||
|
@ -243,8 +243,112 @@ ActorBlueprint NAMESPACE = {
|
||||
|
||||
#include "common/ChompChainUpdateHelperFunc2.inc.c"
|
||||
|
||||
ApiStatus b_area_isk_part_1_ChompChainUpdate(Evt* script, s32 isInitialCall);
|
||||
INCLUDE_ASM(s32, "battle/area_isk_part_1/4E29B0", b_area_isk_part_1_ChompChainUpdate);
|
||||
ApiStatus b_area_isk_part_1_ChompChainUpdate(Evt* script, s32 isInitialCall) {
|
||||
f32 sp18;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
ChompChainAnimationState* animState;
|
||||
f32 dist;
|
||||
f32 angle;
|
||||
f32 ax, ay;
|
||||
s32 three;
|
||||
s32 i;
|
||||
|
||||
actor = get_actor(script->owner1.actorID);
|
||||
if (actor == NULL) {
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
three = 3;
|
||||
|
||||
animState = actor->state.unk_6C;
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
ax = actor->currentPos.x + 6.0;
|
||||
ay = actor->currentPos.y + 2.5;
|
||||
} else {
|
||||
ax = actor->currentPos.x + 12.0;
|
||||
ay = actor->currentPos.y + 5.0;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++, animState++) {
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
animState->scale.x = 3.5f;
|
||||
animState->scale.z = 3.5f;
|
||||
animState->scale.y = 3.5f;
|
||||
} else {
|
||||
animState->scale.x = 7.0f;
|
||||
animState->scale.z = 7.0f;
|
||||
animState->scale.y = 7.0f;
|
||||
}
|
||||
|
||||
animState->unk_18 -= animState->unk_14;
|
||||
if (animState->unk_18 < 2.0f * -animState->unk_14) {
|
||||
animState->unk_18 = 2.0f * -animState->unk_14;
|
||||
if (actor->state.varTable[8] != 0 && i == 0) {
|
||||
sfx_play_sound_at_position(SOUND_2063, 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z);
|
||||
}
|
||||
}
|
||||
animState->currentPos.y += animState->unk_18;
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
if (animState->currentPos.y < 2.5) {
|
||||
animState->unk_18 = 0.0f;
|
||||
animState->currentPos.y = 2.5f;
|
||||
}
|
||||
} else {
|
||||
if (animState->currentPos.y < 5.0) {
|
||||
animState->unk_18 = 0.0f;
|
||||
animState->currentPos.y = 5.0f;
|
||||
}
|
||||
}
|
||||
|
||||
dist = dist2D(ax, ay, animState->currentPos.x, animState->currentPos.y);
|
||||
angle = atan2(ax, ay, animState->currentPos.x, animState->currentPos.y);
|
||||
|
||||
if (animState->scale.z <= dist) {
|
||||
b_area_isk_part_1_stone_chomp_ChompChainUpdateHelperFunc2(&sp18, dist - animState->scale.z, angle);
|
||||
animState->unk_18 += sp18 * 0.5;
|
||||
}
|
||||
|
||||
if (animState->scale.y <= dist) {
|
||||
f32 t;
|
||||
|
||||
if (animState->scale.x <= dist) {
|
||||
t = dist - animState->scale.x;
|
||||
} else {
|
||||
animState->unk_1C += animState->unk_20;
|
||||
t = animState->unk_1C;
|
||||
}
|
||||
b_area_isk_part_1_stone_chomp_ChompChainUpdateHelperFunc(animState, t, angle);
|
||||
} else {
|
||||
animState->unk_1C -= animState->unk_20 * 0.2;
|
||||
if (animState->unk_1C < 0.0) {
|
||||
animState->unk_1C = 0.0f;
|
||||
}
|
||||
b_area_isk_part_1_stone_chomp_ChompChainUpdateHelperFunc(animState, animState->unk_1C, angle);
|
||||
}
|
||||
|
||||
if (animState->unk_1C > 4.0) {
|
||||
animState->unk_1C = 4.0f;
|
||||
}
|
||||
part = get_actor_part(actor, three + i);
|
||||
part->absolutePosition.x = animState->currentPos.x;
|
||||
part->absolutePosition.y = animState->currentPos.y;
|
||||
part->absolutePosition.z = animState->currentPos.z;
|
||||
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
part->scale.x = 0.5f;
|
||||
part->scale.y = 0.5f;
|
||||
part->scale.z = 1.0f;
|
||||
} else {
|
||||
part->scale.x = 1.0f;
|
||||
part->scale.y = 1.0f;
|
||||
part->scale.z = 1.0f;
|
||||
}
|
||||
ay = animState->currentPos.y;
|
||||
ax = animState->currentPos.x;
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
EvtScript N(80221794) = {
|
||||
EVT_CALL(SetAnimation, ACTOR_SELF, LW(0), LW(1))
|
||||
|
@ -254,8 +254,119 @@ ActorBlueprint NAMESPACE = {
|
||||
|
||||
#include "common/ChompChainUpdateHelperFunc2.inc.c"
|
||||
|
||||
ApiStatus N(ChompChainUpdate)(Evt* script, s32 isInitialCall);
|
||||
INCLUDE_ASM(ApiStatus, "battle/area_isk_part_2/4EF4A0", b_area_isk_part_2_chain_chomp_ChompChainUpdate);
|
||||
ApiStatus b_area_isk_part_2_chain_chomp_ChompChainUpdate(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
f32 sp18;
|
||||
Actor* actor;
|
||||
ActorPart* part;
|
||||
ChompChainAnimationState* animState;
|
||||
f32 dist;
|
||||
f32 angle;
|
||||
f32 ax, ay;
|
||||
s32 three;
|
||||
s32 something;
|
||||
s32 i;
|
||||
|
||||
actor = get_actor(script->owner1.actorID);
|
||||
if (actor == NULL) {
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
something = evt_get_variable(script, *args++);
|
||||
|
||||
three = 3;
|
||||
|
||||
animState = actor->state.unk_6C;
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
ax = actor->currentPos.x + 6.0;
|
||||
ay = actor->currentPos.y + 2.5;
|
||||
} else {
|
||||
ax = actor->currentPos.x + 12.0;
|
||||
ay = actor->currentPos.y + 5.0;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++, animState++) {
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
animState->scale.x = 3.5f;
|
||||
animState->scale.z = 3.5f;
|
||||
animState->scale.y = 3.5f;
|
||||
} else {
|
||||
animState->scale.x = 7.0f;
|
||||
animState->scale.z = 7.0f;
|
||||
animState->scale.y = 7.0f;
|
||||
}
|
||||
|
||||
animState->unk_18 -= animState->unk_14;
|
||||
if (animState->unk_18 < 2.0f * -animState->unk_14) {
|
||||
animState->unk_18 = 2.0f * -animState->unk_14;
|
||||
if (actor->state.varTable[8] != 0 && i == 0) {
|
||||
sfx_play_sound_at_position(SOUND_2063, 0, actor->currentPos.x, actor->currentPos.y, actor->currentPos.z);
|
||||
}
|
||||
}
|
||||
animState->currentPos.y += animState->unk_18;
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
if (animState->currentPos.y < 2.5) {
|
||||
animState->currentPos.y = 2.5f;
|
||||
animState->unk_18 = 0.0f;
|
||||
}
|
||||
} else {
|
||||
if (animState->currentPos.y < 5.0) {
|
||||
animState->currentPos.y = 5.0f;
|
||||
animState->unk_18 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
dist = dist2D(ax, ay, animState->currentPos.x, animState->currentPos.y);
|
||||
angle = atan2(ax, ay, animState->currentPos.x, animState->currentPos.y);
|
||||
|
||||
if (animState->scale.z <= dist) {
|
||||
b_area_isk_part_2_chain_chomp_ChompChainUpdateHelperFunc2(&sp18, dist - animState->scale.z, angle);
|
||||
animState->unk_18 += sp18 * 0.5;
|
||||
}
|
||||
|
||||
if (animState->scale.y <= dist) {
|
||||
f32 t;
|
||||
|
||||
if (animState->scale.x <= dist) {
|
||||
t = dist;
|
||||
t = t - animState->scale.x;
|
||||
} else {
|
||||
animState->unk_1C += animState->unk_20;
|
||||
t = animState->unk_1C;
|
||||
}
|
||||
b_area_isk_part_2_chain_chomp_ChompChainUpdateHelperFunc(animState, t, angle);
|
||||
} else {
|
||||
animState->unk_1C -= animState->unk_20 * 0.2;
|
||||
if (animState->unk_1C < 0.0) {
|
||||
animState->unk_1C = 0.0f;
|
||||
}
|
||||
b_area_isk_part_2_chain_chomp_ChompChainUpdateHelperFunc(animState, animState->unk_1C, angle);
|
||||
}
|
||||
|
||||
if (animState->unk_1C > 4.0) {
|
||||
animState->unk_1C = 4.0f;
|
||||
}
|
||||
animState->currentPos.z = something;
|
||||
part = get_actor_part(actor, three + i);
|
||||
part->absolutePosition.x = animState->currentPos.x;
|
||||
part->absolutePosition.y = animState->currentPos.y;
|
||||
part->absolutePosition.z = animState->currentPos.z;
|
||||
|
||||
if (actor->debuff == STATUS_SHRINK) {
|
||||
part->scale.x = 0.5f;
|
||||
part->scale.y = 0.5f;
|
||||
part->scale.z = 1.0f;
|
||||
} else {
|
||||
part->scale.x = 1.0f;
|
||||
part->scale.y = 1.0f;
|
||||
part->scale.z = 1.0f;
|
||||
}
|
||||
ay = animState->currentPos.y;
|
||||
ax = animState->currentPos.x;
|
||||
}
|
||||
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
ApiStatus func_8021866C_4EFB0C(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
|
@ -1,23 +1,72 @@
|
||||
#include "common.h"
|
||||
#include "effects.h"
|
||||
#include "sprite.h"
|
||||
#include "effects.h"
|
||||
|
||||
#define NAMESPACE b_area_kpa2
|
||||
|
||||
// typedef struct KpaStruct {
|
||||
// /* 0x00 */ s32 unk_00;
|
||||
// /* 0x04 */ s32 unk_04;
|
||||
// /* 0x08 */ s32 unk_08;
|
||||
// /* 0x0C */ s32 unk_0C;
|
||||
// /* 0x10 */ s32 unk_10;
|
||||
// /* 0x14 */ s32 unk_14;
|
||||
// } KpaStruct; // size = 0x14
|
||||
typedef struct KpaStruct {
|
||||
/* 0x00 */ s32 unk_00[6];
|
||||
} KpaStruct; // size = 0x14
|
||||
|
||||
// extern KpaStruct D_80234810_6BBA10;
|
||||
extern KpaStruct D_80234810_6BBA10;
|
||||
|
||||
#include "common/StartRumbleWithParams.inc.c"
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
ApiStatus func_8021B9A8_6A2BA8(Evt* script, s32 isInitialCall) {
|
||||
static KpaStruct D_80234810_6BBA10 = {90, 135, 225, 270, 315, 405};
|
||||
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
KpaStruct numbers = D_80234810_6BBA10;
|
||||
Actor* actor = get_actor(script->owner1.actorID);
|
||||
s32 temp_fp;
|
||||
s32 temp_s5;
|
||||
s32 temp_s6;
|
||||
f32 temp_f24;
|
||||
f32 temp_f20;
|
||||
s32 temp_s0_4;
|
||||
s32 temp_s1;
|
||||
s32 temp_s2;
|
||||
s32 temp_v0_2;
|
||||
s32 t1;
|
||||
EffectInstance* effect;
|
||||
s32 asdf;
|
||||
s32 i;
|
||||
|
||||
if (actor == NULL) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
temp_fp = evt_get_variable(script, *args++);
|
||||
temp_s5 = evt_get_variable(script, *args++);
|
||||
temp_s6 = evt_get_variable(script, *args++);
|
||||
temp_f24 = evt_get_float_variable(script, *args++);
|
||||
if (actor->debuff != 0xA) {
|
||||
temp_s5 += temp_f24 * 36.0f;
|
||||
} else {
|
||||
temp_s5 += temp_f24 * 14.4;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(numbers.unk_00); i++) {
|
||||
temp_f20 = numbers.unk_00[i] + rand_int(30) - 15;
|
||||
temp_s0_4 = (sin_deg(temp_f20) * 200.0f) + temp_fp;
|
||||
t1 = (cos_deg(temp_f20) * 200.0f) + temp_s5;
|
||||
asdf = temp_s6 + 20;
|
||||
effect = fx_lightning_bolt(1, temp_fp, temp_s5, temp_s6, temp_s0_4, t1, asdf, temp_f24, 11);
|
||||
temp_s1 = rand_int(256);
|
||||
temp_s2 = rand_int(256);
|
||||
temp_v0_2 = rand_int(256);
|
||||
effect->data.lightning->unk_30 = temp_s1;
|
||||
effect->data.lightning->unk_34 = temp_s2;
|
||||
effect->data.lightning->unk_38 = temp_v0_2;
|
||||
}
|
||||
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "battle/area_kpa2/6A2B50", func_8021B9A8_6A2BA8);
|
||||
#endif
|
||||
|
||||
INCLUDE_ASM(s32, "battle/area_kpa2/6A2B50", func_8021BC60_6A2E60);
|
||||
|
||||
|
@ -290,7 +290,7 @@ void reset_battle_status(void) {
|
||||
D_800DC064 = NULL;
|
||||
D_800DC060 = 0;
|
||||
D_800DC4EC = 0;
|
||||
D_800DC4F4 = 0;
|
||||
D_800DC4F4 = NULL;
|
||||
}
|
||||
|
||||
void ALT_reset_battle_status(void) {
|
||||
@ -315,7 +315,7 @@ void load_battle_section(void) {
|
||||
D_800DC064 = &(*battleArea->stages)[D_800DC4EC];
|
||||
}
|
||||
|
||||
btl_set_state(1);
|
||||
btl_set_state(BATTLE_STATE_NORMAL_START);
|
||||
D_800DC4D0 = 0;
|
||||
}
|
||||
|
||||
@ -331,8 +331,8 @@ void set_battle_stage(s32 arg0) {
|
||||
D_800DC4EC = arg0;
|
||||
}
|
||||
|
||||
void set_battle_formation(s32 arg0) {
|
||||
D_800DC4F4 = arg0;
|
||||
void set_battle_formation(Battle* battle) {
|
||||
D_800DC4F4 = battle;
|
||||
}
|
||||
|
||||
void func_80072CEC(f32 arg0, f32 arg1, f32 arg2) {
|
||||
@ -467,7 +467,7 @@ void load_demo_battle(u32 index) {
|
||||
|
||||
switch (mode) {
|
||||
case 0:
|
||||
gCurrentEncounter.eFirstStrike = FIRST_STRIKE_NONE;
|
||||
gCurrentEncounter.firstStrikeType = FIRST_STRIKE_NONE;
|
||||
gCurrentEncounter.hitType = ENCOUNTER_TRIGGER_NONE;
|
||||
gCurrentEncounter.hitTier = 0;
|
||||
gGameStatusPtr->demoFlags |= 0x10;
|
||||
@ -475,24 +475,24 @@ void load_demo_battle(u32 index) {
|
||||
gGameStatusPtr->demoFlags |= 0x40;
|
||||
break;
|
||||
case 1:
|
||||
gCurrentEncounter.eFirstStrike = FIRST_STRIKE_PLAYER;
|
||||
gCurrentEncounter.firstStrikeType = FIRST_STRIKE_PLAYER;
|
||||
gCurrentEncounter.hitType = ENCOUNTER_TRIGGER_HAMMER;
|
||||
gCurrentEncounter.hitTier = playerData->hammerLevel;
|
||||
gGameStatusPtr->demoFlags |= 0x10;
|
||||
break;
|
||||
case 2:
|
||||
gCurrentEncounter.eFirstStrike = FIRST_STRIKE_PLAYER;
|
||||
gCurrentEncounter.firstStrikeType = FIRST_STRIKE_PLAYER;
|
||||
gCurrentEncounter.hitType = ENCOUNTER_TRIGGER_JUMP;
|
||||
gCurrentEncounter.hitTier = playerData->bootsLevel;
|
||||
gGameStatusPtr->demoFlags |= 0x10;
|
||||
break;
|
||||
case 3:
|
||||
gCurrentEncounter.eFirstStrike = FIRST_STRIKE_PLAYER;
|
||||
gCurrentEncounter.firstStrikeType = FIRST_STRIKE_PLAYER;
|
||||
gCurrentEncounter.hitType = ENCOUNTER_TRIGGER_PARTNER;
|
||||
gGameStatusPtr->demoFlags |= 0x20;
|
||||
break;
|
||||
case 4:
|
||||
gCurrentEncounter.eFirstStrike = FIRST_STRIKE_ENEMY;
|
||||
gCurrentEncounter.firstStrikeType = FIRST_STRIKE_ENEMY;
|
||||
gCurrentEncounter.hitType = ENCOUNTER_TRIGGER_NONE;
|
||||
gCurrentEncounter.hitTier = 0;
|
||||
gGameStatusPtr->demoFlags |= 0x40;
|
||||
|
@ -275,6 +275,8 @@ typedef enum ActorType {
|
||||
ACTOR_TYPE_COUNT = 0xD4,
|
||||
} ActorType;
|
||||
|
||||
extern s32 bActorNames[];
|
||||
|
||||
#define BTL_AREA(id) \
|
||||
.dmaStart = battle_##id##_ROM_START, \
|
||||
.dmaEnd = battle_##id##_ROM_END, \
|
||||
@ -321,12 +323,12 @@ typedef struct FormationRow {
|
||||
typedef FormationRow Formation[];
|
||||
|
||||
typedef struct Stage {
|
||||
/* 0x00 */ const char* texture;
|
||||
/* 0x00 */ char* texture;
|
||||
/* 0x04 */ const char* shape;
|
||||
/* 0x08 */ const char* hit;
|
||||
/* 0x0C */ EvtScript* preBattle;
|
||||
/* 0x10 */ EvtScript* postBattle;
|
||||
/* 0x14 */ const char* bg;
|
||||
/* 0x14 */ char* bg;
|
||||
/* 0x18 */ s32* foregroundModelList;
|
||||
/* 0x1C */ s32 specialFormationSize;
|
||||
/* 0x20 */ Formation* specialFormation;
|
||||
@ -339,8 +341,8 @@ typedef struct Battle {
|
||||
/* 0x04 */ s32 formationSize;
|
||||
/* 0x08 */ Formation* formation;
|
||||
/* 0x0C */ Stage* stage;
|
||||
/* 0x10 */ s32 unk_10;
|
||||
} Battle; // size = 0x14 * n
|
||||
/* 0x10 */ EvtScript* unk_10;
|
||||
} Battle; // size = 0x14
|
||||
|
||||
typedef Battle BattleList[];
|
||||
|
||||
|
@ -7,8 +7,72 @@
|
||||
|
||||
#include "common/StarPower.inc.c"
|
||||
|
||||
ApiStatus func_802A1518_78BB18(Evt* script, s32 isInitialCall);
|
||||
INCLUDE_ASM(s32, "battle/star/refresh/78B600", func_802A1518_78BB18);
|
||||
ApiStatus func_802A1518_78BB18(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Npc* npc;
|
||||
|
||||
if (isInitialCall) {
|
||||
script->functionTemp[0] = 0;
|
||||
}
|
||||
|
||||
npc = script->functionTempPtr[1];
|
||||
|
||||
switch (script->functionTemp[0]) {
|
||||
case 0:
|
||||
script->functionTempPtr[1] = npc = get_npc_unsafe(evt_get_variable(script, *args++));
|
||||
npc->planarFlyDist = 0;
|
||||
npc->yaw = 0;
|
||||
npc->duration = 0;
|
||||
npc->jumpVelocity = -1.5f;
|
||||
npc->jumpScale = 0.02f;
|
||||
npc->moveSpeed = 1.0f;
|
||||
npc->moveToPos.x = npc->pos.x;
|
||||
npc->moveToPos.y = npc->pos.y;
|
||||
npc->moveToPos.z = npc->pos.z;
|
||||
script->functionTemp[0] = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (npc->jumpVelocity < 0.0f) {
|
||||
npc->planarFlyDist += 3.0;
|
||||
if (npc->planarFlyDist > 40.0f) {
|
||||
npc->planarFlyDist = 40.0f;
|
||||
}
|
||||
} else {
|
||||
npc->planarFlyDist -= 2.0;
|
||||
if (npc->planarFlyDist < 20.0f) {
|
||||
npc->planarFlyDist = 20.0f;
|
||||
}
|
||||
}
|
||||
|
||||
npc->moveSpeed += 0.75;
|
||||
npc->jumpVelocity += npc->jumpScale;
|
||||
npc->pos.y += npc->jumpVelocity;
|
||||
if (npc->moveSpeed > 33.0f) {
|
||||
npc->moveSpeed = 33.0f;
|
||||
}
|
||||
|
||||
npc->yaw += npc->moveSpeed;
|
||||
npc->pos.x = npc->moveToPos.x;
|
||||
npc->pos.z = npc->moveToPos.z;
|
||||
add_vec2D_polar(&npc->pos.x, &npc->pos.z, npc->planarFlyDist, npc->yaw);
|
||||
if ((npc->duration % 14) == 0) {
|
||||
fx_sparkles(0, npc->pos.x, npc->pos.y, npc->pos.z, 30.0f);
|
||||
}
|
||||
|
||||
npc->duration++;
|
||||
if (npc->duration > 40) {
|
||||
npc->jumpScale = 0.5f;
|
||||
}
|
||||
if (npc->pos.y > 200.0f) {
|
||||
script->functionTemp[0] = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
ApiStatus func_802A17D4_78BDD4(Evt* script, s32 isInitialCall) {
|
||||
Actor* actor = gBattleStatus.playerActor;
|
||||
|
@ -1,9 +1,9 @@
|
||||
#include "common.h"
|
||||
|
||||
ApiStatus N(ChompChainUpdateHelperFunc2)(ChompChainAnimationState* script, f32 magnitude, f32 angleDeg) {
|
||||
ApiStatus N(ChompChainUpdateHelperFunc2)(f32* x, f32 magnitude, f32 angleDeg) {
|
||||
f32 angle = (angleDeg * TAU) / 360.0f;
|
||||
f32 dirX = sin_rad(angle);
|
||||
f32 dirY = cos_rad(angle);
|
||||
|
||||
script->currentPos.x = magnitude * dirY;
|
||||
*x = magnitude * dirY;
|
||||
}
|
||||
|
@ -1187,7 +1187,7 @@ void func_8013CFA8(FoldState* state, Matrix4f mtx) {
|
||||
gSP2Triangles(gMasterGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
}
|
||||
render_shaded_sprite(mtx, uls, ult, lrs, lrt, alpha, state->unk_78);
|
||||
create_shading_palette(mtx, uls, ult, lrs, lrt, alpha, state->unk_78);
|
||||
} else {
|
||||
gDPScrollTextureTile_4b(gMasterGfxPos++,
|
||||
fold_currentImage->raster, G_IM_FMT_CI,
|
||||
|
@ -6,8 +6,20 @@ extern SpriteShadingProfile D_801595C0;
|
||||
extern SpriteShadingProfile D_80159670;
|
||||
extern SpriteShadingProfile D_80159720;
|
||||
extern SpriteShadingProfile D_801597D0;
|
||||
extern s8 D_80159880[0x20];
|
||||
|
||||
extern int ENVIRONMENT;
|
||||
extern int COMBINED;
|
||||
extern int COMBINED_ALPHA;
|
||||
extern int SHADE;
|
||||
extern int TEXEL0_ALPHA;
|
||||
|
||||
void init_sprite_shading_data(void);
|
||||
void appendGfx_shading_palette(Matrix4f mtx, s32 uls, s32 ult, s32 lrs, s32 lrt, s32 alpha,
|
||||
f32 shadowX, f32 shadowY, f32 shadowZ,
|
||||
s32 shadowR, s32 shadowG, s32 shadowB,
|
||||
s32 highlightR, s32 highlightG, s32 highlightB,
|
||||
s32 ambientPower, s32 otherModeLBits);
|
||||
|
||||
void clear_sprite_shading_data(void) {
|
||||
s32 i;
|
||||
@ -55,9 +67,353 @@ void sprite_shading_set_light_source(u32 idx, s8 flags, f32 x, f32 y, f32 z, u8
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "de740_len_23f0", render_shaded_sprite);
|
||||
void create_shading_palette(Matrix4f mtx, s32 uls, s32 ult, s32 lrs, s32 lrt, s32 alpha, s32 otherModeLBits) {
|
||||
Camera* camera = &gCameras[gCurrentCameraID];
|
||||
SpriteShadingLightSource* lightSource;
|
||||
f32 shadowX, shadowY, shadowZ;
|
||||
f32 sp54, sp58, sp5C;
|
||||
f32 sp60;
|
||||
f32 sp64, var_f30, sp68;
|
||||
f32 shadowR, shadowG, shadowB;
|
||||
f32 sp78, sp7C, sp80;
|
||||
f32 sp84, sp88, sp8C;
|
||||
f32 sp90, sp94, sp98;
|
||||
f32 temp_f10;
|
||||
f32 temp_f12;
|
||||
f32 temp_f16;
|
||||
f32 temp_f20;
|
||||
f32 temp_f26, temp_f24, temp_f22;
|
||||
f32 temp_f6;
|
||||
f32 var_f0_2;
|
||||
f32 var_f2;
|
||||
f32 var_f8;
|
||||
f32 temp3;
|
||||
f32 qx, qy, qz;
|
||||
f32 wx, wy, wz;
|
||||
f32 ex, ey, ez;
|
||||
s32 i;
|
||||
|
||||
INCLUDE_ASM(s32, "de740_len_23f0", appendGfx_shaded_sprite);
|
||||
shadowX = 0.0f;
|
||||
shadowY = 0.0f;
|
||||
shadowZ = 0.0f;
|
||||
|
||||
sp54 = mtx[3][0];
|
||||
sp58 = mtx[3][1];
|
||||
sp5C = mtx[3][2];
|
||||
|
||||
sp78 = 0.0f;
|
||||
sp7C = 0.0f;
|
||||
sp80 = 0.0f;
|
||||
|
||||
sp84 = 0.0f;
|
||||
sp88 = 0.0f;
|
||||
sp8C = 0.0f;
|
||||
|
||||
sp64 = mtx[0][2];
|
||||
var_f30 = mtx[1][2];
|
||||
sp68 = mtx[2][2];
|
||||
|
||||
sp90 = 0.0f;
|
||||
sp94 = 0.0f;
|
||||
sp98 = 0.0f;
|
||||
|
||||
shadowR = D_80151328->ambientColor.r;
|
||||
shadowG = D_80151328->ambientColor.g;
|
||||
shadowB = D_80151328->ambientColor.b;
|
||||
|
||||
if (((-sp64 * camera->perspectiveMatrix[0][2]) + (sp68 * camera->perspectiveMatrix[2][2])) < 0.0f) {
|
||||
sp60 = 1.0f;
|
||||
} else {
|
||||
sp60 = -1.0f;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80151328->sources); i++) {
|
||||
lightSource = &D_80151328->sources[i];
|
||||
if (lightSource->flags & 1) {
|
||||
temp_f26 = sp54 - lightSource->pos.x;
|
||||
temp_f24 = sp58 - lightSource->pos.y;
|
||||
temp_f22 = sp5C - lightSource->pos.z;
|
||||
|
||||
temp_f20 = SQ(temp_f26) + SQ(temp_f24) + SQ(temp_f22);
|
||||
|
||||
if (temp_f20 != 0.0f) {
|
||||
var_f2 = sqrtf(temp_f20);
|
||||
var_f0_2 = 1.0f / var_f2;
|
||||
} else {
|
||||
var_f2 = 0.0f;
|
||||
var_f0_2 = 0.0f;
|
||||
}
|
||||
|
||||
temp_f26 *= var_f0_2;
|
||||
temp_f24 *= var_f0_2;
|
||||
temp_f22 *= var_f0_2;
|
||||
|
||||
if ((lightSource->flags & 4)) {
|
||||
if ((var_f2 == 0.0f) && (lightSource->falloff == 0.0f)) {
|
||||
var_f8 = 1.0f;
|
||||
} else {
|
||||
var_f8 = 1.0f / (var_f2 * lightSource->falloff);
|
||||
temp_f26 *= var_f8;
|
||||
temp_f24 *= var_f8;
|
||||
temp_f22 *= var_f8;
|
||||
}
|
||||
} else {
|
||||
if ((lightSource->flags & 8) && (temp_f20 != 0.0f || lightSource->falloff != 0.0f)) {
|
||||
var_f8 = 1.0f / (temp_f20 * lightSource->falloff);
|
||||
temp_f26 *= var_f8;
|
||||
temp_f24 *= var_f8;
|
||||
temp_f22 *= var_f8;
|
||||
} else {
|
||||
var_f8 = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (var_f8 > 1.0f) {
|
||||
var_f8 = 1.0f;
|
||||
}
|
||||
shadowX += temp_f26;
|
||||
shadowY += temp_f24;
|
||||
shadowZ += temp_f22;
|
||||
|
||||
if (sp60 < 0.0f) {
|
||||
ex = sp64;
|
||||
ey = var_f30;
|
||||
ez = -sp68;
|
||||
} else {
|
||||
ex = -sp64;
|
||||
ey = var_f30;
|
||||
ez = sp68;
|
||||
}
|
||||
temp_f10 = ex * temp_f26 + ey * temp_f24 + ez * temp_f22;
|
||||
|
||||
if (sp60 < 0.0f) {
|
||||
wx = sp68;
|
||||
wy = var_f30;
|
||||
wz = sp64;
|
||||
} else {
|
||||
wx = -sp68;
|
||||
wy = var_f30;
|
||||
wz = -sp64;
|
||||
}
|
||||
temp3 = wx * temp_f26 + wy * temp_f24 + wz * temp_f22;
|
||||
|
||||
temp_f16 = temp3;
|
||||
temp_f12 = var_f8 * fabsf(temp_f10);
|
||||
temp_f6 = var_f8 * fabsf(temp_f16);
|
||||
if (temp_f10 > 0.0f) {
|
||||
sp78 += lightSource->rgb.r * temp_f12;
|
||||
sp7C += lightSource->rgb.g * temp_f12;
|
||||
sp80 += lightSource->rgb.b * temp_f12;
|
||||
if (temp_f16 > 0.0f) {
|
||||
sp84 += lightSource->rgb.r * temp_f6;
|
||||
sp88 += lightSource->rgb.g * temp_f6;
|
||||
sp8C += lightSource->rgb.b * temp_f6;
|
||||
} else {
|
||||
sp90 += lightSource->rgb.r * temp_f6;
|
||||
sp94 += lightSource->rgb.g * temp_f6;
|
||||
sp98 += lightSource->rgb.b * temp_f6;
|
||||
}
|
||||
} else {
|
||||
shadowR += lightSource->rgb.r * temp_f12;
|
||||
shadowG += lightSource->rgb.g * temp_f12;
|
||||
shadowB += lightSource->rgb.b * temp_f12;
|
||||
if (temp_f16 > 0.0f) {
|
||||
sp84 += lightSource->rgb.r * temp_f6;
|
||||
sp88 += lightSource->rgb.g * temp_f6;
|
||||
sp8C += lightSource->rgb.b * temp_f6;
|
||||
} else {
|
||||
sp90 += lightSource->rgb.r * temp_f6;
|
||||
sp94 += lightSource->rgb.g * temp_f6;
|
||||
sp98 += lightSource->rgb.b * temp_f6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sp60 < 0.0f) {
|
||||
qx = sp68;
|
||||
qy = var_f30;
|
||||
qz = sp64;
|
||||
} else {
|
||||
qx = -sp68;
|
||||
qy = var_f30;
|
||||
qz = -sp64;
|
||||
}
|
||||
|
||||
if (qx * shadowX + qy * shadowY + qz * shadowZ > 0.0f) {
|
||||
appendGfx_shading_palette(
|
||||
mtx,
|
||||
uls, ult, lrs, lrt,
|
||||
alpha,
|
||||
shadowX, shadowY, shadowZ,
|
||||
shadowR, shadowG, shadowB,
|
||||
D_80151328->ambientColor.r + sp78 + sp84,
|
||||
D_80151328->ambientColor.g + sp7C + sp88,
|
||||
D_80151328->ambientColor.b + sp80 + sp8C,
|
||||
D_80151328->ambientPower, otherModeLBits
|
||||
);
|
||||
} else {
|
||||
appendGfx_shading_palette(
|
||||
mtx,
|
||||
uls, ult, lrs, lrt,
|
||||
alpha,
|
||||
shadowX, shadowY, shadowZ,
|
||||
shadowR, shadowG, shadowB,
|
||||
D_80151328->ambientColor.r + sp78 + sp90,
|
||||
D_80151328->ambientColor.g + sp7C + sp94,
|
||||
D_80151328->ambientColor.b + sp80 + sp98,
|
||||
D_80151328->ambientPower, otherModeLBits
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// float regalloc
|
||||
#ifdef NON_MATCHING
|
||||
void appendGfx_shading_palette(
|
||||
Matrix4f mtx,
|
||||
s32 uls, s32 ult, s32 lrs, s32 lrt,
|
||||
s32 alpha,
|
||||
f32 shadowX, f32 shadowY, f32 shadowZ,
|
||||
s32 shadowR, s32 shadowG, s32 shadowB,
|
||||
s32 highlightR, s32 highlightG, s32 highlightB,
|
||||
s32 ambientPower, s32 renderMode)
|
||||
{
|
||||
Camera* camera = &gCameras[gCurrentCameraID];
|
||||
f32 temp_f0;
|
||||
f32 asdasdasd;
|
||||
f32 temp_f2;
|
||||
f32 var_f26;
|
||||
f32 temp_f28 = 0;
|
||||
f32 temp_f6;
|
||||
f32 temp_f6_2;
|
||||
f32 var_f12;
|
||||
f32 var_f12_2;
|
||||
f32 var_f20;
|
||||
f32 var_f2;
|
||||
f32 var_f30;
|
||||
f32 var_f8;
|
||||
f32 abc;
|
||||
f32 ex, ey, ez;
|
||||
|
||||
var_f12 = (shadowX * shadowX) + (shadowY * shadowY) + (shadowZ * shadowZ);
|
||||
|
||||
if (var_f12 < 1.0) {
|
||||
ambientPower *= var_f12;
|
||||
}
|
||||
if (var_f12 != 0.0f) {
|
||||
var_f12 = 1.0f / sqrtf(var_f12);
|
||||
}
|
||||
shadowX *= var_f12;
|
||||
shadowY *= var_f12;
|
||||
shadowZ *= var_f12;
|
||||
|
||||
if ((-mtx[0][2] * camera->perspectiveMatrix[0][2]) + (mtx[2][2] * camera->perspectiveMatrix[2][2]) < 0.0f) {
|
||||
var_f30 = 1.0f;
|
||||
} else {
|
||||
var_f30 = -1.0f;
|
||||
}
|
||||
|
||||
if (var_f30 < 0.0f) {
|
||||
ex = mtx[0][2];
|
||||
ey = mtx[1][2];
|
||||
ez = -mtx[2][2];
|
||||
} else {
|
||||
ex = -mtx[0][2];
|
||||
ey = mtx[1][2];
|
||||
ez = mtx[2][2];
|
||||
}
|
||||
|
||||
temp_f6_2 = (shadowX * -camera->perspectiveMatrix[2][2]) + (shadowZ * camera->perspectiveMatrix[0][2]);
|
||||
if ((ex * shadowX) + (ey * shadowY) + (ez * shadowZ) > 0.0f) {
|
||||
var_f26 = ambientPower * temp_f6_2;
|
||||
} else {
|
||||
var_f26 = ambientPower;
|
||||
var_f26 = ambientPower * temp_f6_2;
|
||||
}
|
||||
var_f20 = SQ(shadowX) + SQ(shadowZ);
|
||||
if (var_f20 != 0.0f) {
|
||||
var_f20 = sqrtf(var_f20);
|
||||
}
|
||||
temp_f0 = -mtx[0][1];
|
||||
asdasdasd = mtx[1][1];
|
||||
temp_f2 = mtx[2][1];
|
||||
var_f12_2 = SQ(temp_f0) + SQ(temp_f2);
|
||||
if (var_f12_2 != 0.0f) {
|
||||
var_f12_2 = sqrtf(var_f12_2);
|
||||
}
|
||||
temp_f28 = -((var_f20 * var_f12_2) + (shadowY * asdasdasd)) * ambientPower;
|
||||
if (shadowR > 255) {
|
||||
shadowR = 255;
|
||||
}
|
||||
if (shadowG > 255) {
|
||||
shadowG = 255;
|
||||
}
|
||||
if (shadowB > 255) {
|
||||
shadowB = 255;
|
||||
}
|
||||
if (highlightR > 255) {
|
||||
highlightR = 255;
|
||||
}
|
||||
if (highlightG > 255) {
|
||||
highlightG = 255;
|
||||
}
|
||||
if (highlightB > 255) {
|
||||
highlightB = 255;
|
||||
}
|
||||
|
||||
gDPSetPrimColor(gMasterGfxPos++, 0, 0, shadowR, shadowG, shadowB, alpha);
|
||||
gDPSetCombineLERP(gMasterGfxPos++, TEXEL1, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0, COMBINED, TEXEL0, COMBINED_ALPHA,
|
||||
TEXEL0, PRIMITIVE, 0, TEXEL0, 0);
|
||||
gDPSetColorImage(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, D_80159880);
|
||||
gDPSetScissor(gMasterGfxPos++, G_SC_NON_INTERLACE, 0, 0, 16, 1);
|
||||
|
||||
gSPSetOtherMode(gMasterGfxPos++, G_SETOTHERMODE_H, 4, 18,
|
||||
G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE |
|
||||
G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE);
|
||||
|
||||
gDPSetRenderMode(gMasterGfxPos++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
|
||||
gDPSetPrimColor(gMasterGfxPos++, 0, 0, shadowR, shadowG, shadowB, alpha);
|
||||
gDPSetEnvColor(gMasterGfxPos++, highlightR, highlightG, highlightB, 0);
|
||||
gDPSetCombineLERP(gMasterGfxPos++, PRIMITIVE, ENVIRONMENT, TEXEL0_ALPHA, ENVIRONMENT, 0, 0, 0, 1,
|
||||
PRIMITIVE, ENVIRONMENT, TEXEL0_ALPHA, ENVIRONMENT, 0, 0, 0, 1);
|
||||
gSPTextureRectangle(gMasterGfxPos++, 0, 0, 16 << 2, 1 << 2, 2, 0, 0, 4 << 10, 1 << 10);
|
||||
gDPPipeSync(gMasterGfxPos++);
|
||||
gDPSetColorImage(gMasterGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, osVirtualToPhysical(nuGfxCfb_ptr));
|
||||
|
||||
gDPSetScissor(
|
||||
gMasterGfxPos++, 0,
|
||||
camera->viewportStartX,
|
||||
camera->viewportStartY,
|
||||
camera->viewportStartX + camera->viewportW,
|
||||
camera->viewportStartY + camera->viewportH
|
||||
);
|
||||
|
||||
gDPLoadTLUT_pal16(gMasterGfxPos++, 1, D_80159880);
|
||||
|
||||
gSPSetOtherMode(gMasterGfxPos++, G_SETOTHERMODE_H, 4, 18,
|
||||
G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE |
|
||||
G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE);
|
||||
|
||||
gDPSetRenderMode(gMasterGfxPos++, G_RM_PASS, renderMode);
|
||||
gDPSetEnvColor(gMasterGfxPos++, 100, 100, 100, 255);
|
||||
|
||||
if (alpha == 255) {
|
||||
gDPSetCombineLERP(gMasterGfxPos++, TEXEL0, 0, TEXEL1, 0, 0, 0, 0, TEXEL1, SHADE, ENVIRONMENT, COMBINED,
|
||||
COMBINED, 0, 0, 0, COMBINED);
|
||||
} else {
|
||||
gDPSetCombineLERP(gMasterGfxPos++, TEXEL0, 0, TEXEL1, 0, PRIMITIVE, 0, TEXEL1, 0, SHADE, ENVIRONMENT, COMBINED,
|
||||
COMBINED, 0, 0, 0, COMBINED);
|
||||
}
|
||||
|
||||
// abc = var_f30 * var_f26;
|
||||
abc = var_f26;
|
||||
abc = var_f30 * abc;
|
||||
gDPSetTileSize(gMasterGfxPos++, 0, ((uls + 0x100) << 2) + (s32)abc, ((ult + 0x100) << 2) + (s32)temp_f28, ((lrs + 0x100 - 1) << 2) + (s32)abc, ((lrt + 0x100 - 1) << 2) + (s32)temp_f28);
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "de740_len_23f0", appendGfx_shading_palette);
|
||||
#endif
|
||||
|
||||
void func_801491E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 alpha) {
|
||||
gDPSetPrimColor(gMasterGfxPos++, 0, 0, 0, 0, 0, alpha);
|
||||
|
@ -192,7 +192,7 @@ void start_battle(Evt* script, s32 songID) {
|
||||
enemy->encountered = TRUE;
|
||||
currentEncounter->currentEnemy = enemy;
|
||||
currentEncounter->currentEncounter = currentEncounter->encounterList[enemy->encounterIndex];
|
||||
currentEncounter->eFirstStrike = 0;
|
||||
currentEncounter->firstStrikeType = FIRST_STRIKE_NONE;
|
||||
currentEncounter->allowFleeing = 0;
|
||||
currentEncounter->songID = songID;
|
||||
currentEncounter->unk_18 = -1;
|
||||
@ -260,7 +260,7 @@ ApiStatus StartBossBattle(Evt* script, s32 isInitialCall) {
|
||||
enemy->encountered = TRUE;
|
||||
currentEncounter->currentEnemy = enemy;
|
||||
currentEncounter->currentEncounter = currentEncounter->encounterList[enemy->encounterIndex];
|
||||
currentEncounter->eFirstStrike = FIRST_STRIKE_NONE;
|
||||
currentEncounter->firstStrikeType = FIRST_STRIKE_NONE;
|
||||
currentEncounter->allowFleeing = TRUE;
|
||||
currentEncounter->songID = songID;
|
||||
currentEncounter->unk_18 = -1;
|
||||
|
@ -150,7 +150,7 @@ void entity_Chest_begin_opening(Entity* entity) {
|
||||
data->lidAngle = 0.0f;
|
||||
data->openState = 0;
|
||||
data->giveItemTimer = 40;
|
||||
sfx_play_sound(467);
|
||||
sfx_play_sound(SOUND_1D3);
|
||||
}
|
||||
|
||||
void entity_Chest_open(Entity* entity) {
|
||||
|
@ -158,7 +158,7 @@ void entity_HeartBlockContent_anim_idle(Entity* entity, s32 arg1) {
|
||||
disable_player_input();
|
||||
gPlayerStatus.currentSpeed = 0;
|
||||
gPlayerStatus.animFlags |= PLAYER_STATUS_ANIM_FLAGS_RAISED_ARMS;
|
||||
set_time_freeze_mode(1);
|
||||
set_time_freeze_mode(TIME_FREEZE_PARTIAL);
|
||||
gOverrideFlags |= GLOBAL_OVERRIDES_40;
|
||||
}
|
||||
}
|
||||
@ -277,7 +277,7 @@ void entity_HeartBlockContent__anim_heal(Entity* entity, s32 arg1) {
|
||||
case 5:
|
||||
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_RAISED_ARMS;
|
||||
enable_player_input();
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
|
||||
exec_entity_commandlist(entity);
|
||||
break;
|
||||
|
@ -284,7 +284,7 @@ void entity_CymbalPlant_idle(Entity* entity) {
|
||||
disable_player_input();
|
||||
set_action_state(0);
|
||||
play_model_animation(entity->virtualModelIndex, Entity_CymbalPlant_AnimationGrab);
|
||||
sfx_play_sound(242);
|
||||
sfx_play_sound(SOUND_F2);
|
||||
func_802BB8D4_E2E204(entity);
|
||||
} else {
|
||||
data->unk_01 = 0;
|
||||
|
@ -11,11 +11,6 @@ typedef struct HudElementSize {
|
||||
s16 size;
|
||||
} HudElementSize;
|
||||
|
||||
typedef struct HudCacheEntry {
|
||||
/* 0x00 */ s32 id;
|
||||
/* 0x04 */ u8* data;
|
||||
} HudCacheEntry; // size = 0x08;
|
||||
|
||||
u8* gHudElementAuxCache = NULL;
|
||||
s32 gHudElementCacheCapacity = 0x11000;
|
||||
|
||||
|
@ -108,6 +108,11 @@ enum {
|
||||
HUD_ELEMENT_DRAW_FIRST_WITHOUT_CLIPPING = 2,
|
||||
};
|
||||
|
||||
typedef struct HudCacheEntry {
|
||||
/* 0x00 */ s32 id;
|
||||
/* 0x04 */ u8* data;
|
||||
} HudCacheEntry; // size = 0x08;
|
||||
|
||||
typedef struct PopupMenu {
|
||||
/* 0x000 */ HudScript* ptrIcon[32];
|
||||
/* 0x080 */ char unk_80[0x4];
|
||||
|
@ -1791,7 +1791,7 @@ void init_encounter_status(void) {
|
||||
|
||||
currentEncounter->flags = ENCOUNTER_STATUS_FLAGS_0;
|
||||
currentEncounter->numEncounters = 0;
|
||||
currentEncounter->eFirstStrike = 0;
|
||||
currentEncounter->firstStrikeType = FIRST_STRIKE_NONE;
|
||||
currentEncounter->hitType = 0;
|
||||
currentEncounter->battleTriggerCooldown = 0;
|
||||
currentEncounter->npcGroupList = 0;
|
||||
@ -1837,7 +1837,7 @@ void clear_encounter_status(void) {
|
||||
}
|
||||
|
||||
currentEncounter->numEncounters = 0;
|
||||
currentEncounter->eFirstStrike = 0;
|
||||
currentEncounter->firstStrikeType = FIRST_STRIKE_NONE;
|
||||
currentEncounter->hitType = 0;
|
||||
currentEncounter->battleTriggerCooldown = 0;
|
||||
currentEncounter->currentAreaIndex = gGameStatusPtr->areaID;
|
||||
|
@ -644,7 +644,7 @@ void pause_tutorial_input(s32 *pressed, s32 *held) {
|
||||
gPauseTutorialInputState = 1;
|
||||
}
|
||||
if (pressedOld && pressedNew == 0) {
|
||||
sfx_play_sound(541);
|
||||
sfx_play_sound(SOUND_MENU_ERROR);
|
||||
}
|
||||
if (gPauseTutorialState == 0) {
|
||||
pressedNew = 0;
|
||||
@ -710,7 +710,7 @@ void pause_handle_input(s32 pressed, s32 held) {
|
||||
|
||||
if ((gPausePressedButtons & BUTTON_START) || (gPauseMenuCurrentTab == 0) && (gPausePressedButtons & BUTTON_B)) {
|
||||
enforce_hpfp_limits();
|
||||
sfx_play_sound(198);
|
||||
sfx_play_sound(SOUND_MENU_CLOSE);
|
||||
set_game_mode(GAME_MODE_UNPAUSE);
|
||||
return;
|
||||
}
|
||||
|
@ -152,7 +152,7 @@ PAL_PTR* spr_get_npc_palettes(s32 npcSpriteID);
|
||||
|
||||
s32 spr_get_npc_color_variations(s32 npcSpriteID);
|
||||
|
||||
void render_shaded_sprite(Matrix4f mtx, s32 uls, s32 ult, s32 lrs, s32 lrt, s32 alpha, s32);
|
||||
void create_shading_palette(Matrix4f mtx, s32 uls, s32 ult, s32 lrs, s32 lrt, s32 alpha, s32);
|
||||
|
||||
SpriteAnimData* spr_load_sprite(s32 idx, s32 arg1, s32 arg2);
|
||||
|
||||
|
@ -308,7 +308,7 @@ void state_step_exit_language_select(void) {
|
||||
calculate_model_sizes();
|
||||
npc_reload_all();
|
||||
func_800E98C4();
|
||||
set_time_freeze_mode(1);
|
||||
set_time_freeze_mode(TIME_FREEZE_PARTIAL);
|
||||
}
|
||||
set_windows_visible(WINDOW_GROUP_ALL);
|
||||
D_800A0931 = 3;
|
||||
@ -341,7 +341,7 @@ void state_step_exit_language_select(void) {
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
update_player();
|
||||
update_npcs();
|
||||
update_encounters();
|
||||
@ -384,7 +384,7 @@ void state_step_exit_file_select(void) {
|
||||
set_windows_visible(WINDOW_GROUP_ALL);
|
||||
D_800A0931 = 3;
|
||||
case 3:
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
if (temp_s0 == 0) {
|
||||
set_game_mode(GAME_MODE_TITLE_SCREEN);
|
||||
gOverrideFlags &= ~GLOBAL_OVERRIDES_WINDOWS_IN_FRONT_OF_CURTAINS;
|
||||
|
@ -29,7 +29,13 @@ s32 D_800F7B4C = 0;
|
||||
|
||||
f32 GravityParamsStartJump[] = { 15.7566404343f, -7.38624f, 3.44693994522f, -0.75f };
|
||||
f32 GravityParamsStartFall[] = { 0.154342994094f, -0.350080013275f, -0.182262003422f, 0.0115200001746f };
|
||||
f32 DefaultMoveSpeeds[] = { 2.0f, 4.0f, 32.0f, -32.0f }; // walk, run, max jump, ???
|
||||
|
||||
// default move speeds
|
||||
f32 D_800F7B70 = 2.0f; // walk
|
||||
f32 D_800F7B74 = 4.0f; // run
|
||||
f32 D_800F7B78 = 32.0f; // max jump
|
||||
f32 D_800F7B7C = -32.0f; // ???
|
||||
|
||||
s16 D_800F7B80 = 0;
|
||||
s32 D_800F7B84[] = { 0, 0, 0};
|
||||
f32 D_800F7B90 = 0.0;
|
||||
|
@ -10,7 +10,7 @@ static char* N(exit_str_1) = "";
|
||||
ApiStatus N(AwaitScriptComplete)(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 waitingScriptID = evt_get_variable(script, *args++);
|
||||
|
||||
|
||||
if (!does_script_exist(waitingScriptID)) {
|
||||
return ApiStatus_DONE2;
|
||||
} else {
|
||||
|
@ -72,7 +72,7 @@ ApiStatus Merlow_ShopBadgesPopup(Evt* script, s32 isInitialCall) {
|
||||
create_popup_menu(menu);
|
||||
script->functionTemp[0] = 0;
|
||||
}
|
||||
|
||||
|
||||
menu = script->functionTempPtr[2];
|
||||
if (script->functionTemp[0] == 0) {
|
||||
script->functionTemp[1] = menu->result;
|
||||
@ -86,7 +86,7 @@ ApiStatus Merlow_ShopBadgesPopup(Evt* script, s32 isInitialCall) {
|
||||
if (script->functionTemp[0] < 20) {
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
|
||||
destroy_popup_menu();
|
||||
selected = script->functionTemp[1];
|
||||
if (selected != 0xFF) {
|
||||
@ -101,7 +101,7 @@ ApiStatus Merlow_ShopBadgesPopup(Evt* script, s32 isInitialCall) {
|
||||
} else {
|
||||
script->varTable[0] = -1;
|
||||
}
|
||||
|
||||
|
||||
heap_free(script->functionTempPtr[2]);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -3,6 +3,5 @@
|
||||
static char* N(exit_str_0) = "kmr_21";
|
||||
static char* N(exit_str_1) = "osr_02";
|
||||
static char* N(exit_str_2) = "kmr_20";
|
||||
static char* N(exit_str_3) = "";
|
||||
|
||||
#include "world/common/SetPlayerSpriteSet2.inc.c"
|
||||
|
@ -12,7 +12,7 @@ ApiStatus func_80240000_98AA10(Evt* script, s32 isInitialCall) {
|
||||
f32 posY = evt_get_float_variable(script, *args++);
|
||||
f32 posZ = evt_get_float_variable(script, *args++);
|
||||
s32 duration = evt_get_variable(script, *args++);
|
||||
|
||||
|
||||
fx_lens_flare(0, posX, posY, posZ, duration);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
#include "jan_05.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_jan/jan_05/B4ADC0", func_80240350_B4ADC0);
|
||||
#include "world/common/UnkShadowFunc001.inc.c"
|
||||
|
@ -1,3 +1,3 @@
|
||||
#include "jan_06.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_jan/jan_06/B52BE0", func_802403B0_B52BE0);
|
||||
#include "world/common/UnkShadowFunc001.inc.c"
|
||||
|
@ -1,3 +1,3 @@
|
||||
#include "jan_10.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_jan/jan_10/B6D4C0", func_80241130_B6D4C0);
|
||||
#include "world/common/UnkShadowFunc001.inc.c"
|
||||
|
@ -5,4 +5,14 @@ static char* N(exit_str_1) = "kpa_100";
|
||||
|
||||
#include "world/common/UnsetCamera0MoveFlag1.inc.c"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_08/A4CA20", func_8024001C_A4CA3C);
|
||||
ApiStatus func_8024001C_A4CA3C(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 floor = evt_get_variable(script, *args++);
|
||||
s32 yOffset = evt_get_variable(script, *args++);
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
if (floor == gCollisionStatus.currentFloor) {
|
||||
playerStatus->position.y = script->varTable[0] + yOffset;
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -5,4 +5,14 @@ static char* N(exit_str_1) = "kpa_33";
|
||||
|
||||
#include "world/common/UnsetCamera0MoveFlag1.inc.c"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_09/A4F000", func_8024001C_A4F01C);
|
||||
ApiStatus func_8024001C_A4F01C(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 floor = evt_get_variable(script, *args++);
|
||||
s32 yOffset = evt_get_variable(script, *args++);
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
if (floor == gCollisionStatus.currentFloor) {
|
||||
playerStatus->position.y = script->varTable[0] + yOffset;
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
#include "kpa_100.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_100/A93160", func_80240000_A93160);
|
||||
ApiStatus func_80240000_A93160(Evt* script, s32 isInitialCall) {
|
||||
sprintf(wMapShapeName, "kpa_117_shape");
|
||||
sprintf(wMapHitName, "kpa_117_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
const char* N(exit_str_0) = "kpa_08";
|
||||
|
@ -1,3 +1,9 @@
|
||||
#include "kpa_101.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_101/A93440", func_80240000_A93440);
|
||||
ApiStatus func_80240000_A93440(Evt* script, s32 isInitialCall) {
|
||||
sprintf(wMapShapeName, "kpa_119_shape");
|
||||
sprintf(wMapHitName, "kpa_119_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
const char* N(exit_str_0) = "kpa_09";
|
||||
|
@ -3,6 +3,11 @@
|
||||
static char* N(exit_str_0) = "kpa_10";
|
||||
static char* N(exit_str_1) = "kpa_11";
|
||||
static char* N(exit_str_2) = "kpa_13";
|
||||
static char* N(exit_str_3) = "";
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_12/A54950", func_80240000_A54950);
|
||||
s32 func_80240000_A54950(void) {
|
||||
if (evt_get_variable(NULL, GSWF(1556)) == 0) {
|
||||
return 0x190160;
|
||||
} else {
|
||||
return 0x190161;
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,25 @@ ApiStatus N(func_80240350_A54CA0)(Evt* script, s32 isInitialCall) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_12/A54CA0", func_8024037C_A54CCC);
|
||||
ApiStatus func_8024037C_A54CCC(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 velocity = evt_get_variable(script, *args++);
|
||||
s32 floor = evt_get_variable(script, *args++);
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
if (gCollisionStatus.currentFloor == floor || gCollisionStatus.lastTouchedFloor == floor) {
|
||||
playerStatus->extraVelocity.x = velocity;
|
||||
}
|
||||
|
||||
if (gPlayerData.currentPartner != PARTNER_NONE) {
|
||||
Npc* partner = get_npc_unsafe(NPC_PARTNER);
|
||||
|
||||
if (partner->currentFloor == floor) {
|
||||
partner->pos.x += velocity;
|
||||
}
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
ApiStatus N(IsPartnerLakilester)(Evt* script, s32 isInitialCall) {
|
||||
if (gPartnerActionStatus.actingPartner == PARTNER_LAKILESTER) {
|
||||
|
@ -3,6 +3,11 @@
|
||||
static char* N(exit_str_0) = "kpa_12";
|
||||
static char* N(exit_str_1) = "kpa_15";
|
||||
static char* N(exit_str_2) = "kpa_14";
|
||||
static char* N(exit_str_3) = "";
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_13/A55F20", func_80240000_A55F20);
|
||||
s32 func_80240000_A55F20(void) {
|
||||
if (evt_get_variable(NULL, GSWF(1556)) == 0) {
|
||||
return 0x190162;
|
||||
} else {
|
||||
return 0x190163;
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,32 @@
|
||||
#include "kpa_13.h"
|
||||
|
||||
ApiStatus N(func_80240350_A56270)(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
CollisionStatus* collisionStatus = &gCollisionStatus;
|
||||
|
||||
evt_set_variable(script, *script->ptrReadPos, collisionStatus->floorBelow);
|
||||
evt_set_variable(script, *args++, collisionStatus->floorBelow);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_13/A56270", func_8024037C_A5629C);
|
||||
ApiStatus func_8024037C_A5629C(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 velocity = evt_get_variable(script, *args++);
|
||||
s32 floor = evt_get_variable(script, *args++);
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
if (gCollisionStatus.currentFloor == floor || gCollisionStatus.lastTouchedFloor == floor) {
|
||||
playerStatus->extraVelocity.x = velocity;
|
||||
}
|
||||
|
||||
if (gPlayerData.currentPartner != PARTNER_NONE) {
|
||||
Npc* partner = get_npc_unsafe(NPC_PARTNER);
|
||||
|
||||
if (partner->currentFloor == floor) {
|
||||
partner->pos.x += velocity;
|
||||
}
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
ApiStatus N(IsPartnerLakilester)(Evt* script, s32 isInitialCall) {
|
||||
if (gPartnerActionStatus.actingPartner == PARTNER_LAKILESTER) {
|
||||
|
@ -1,5 +1,21 @@
|
||||
#include "kpa_133.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_133/AA7790", func_80240310_AA7790);
|
||||
ApiStatus func_80240310_AA7790(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Entity* entity = get_entity_by_index(evt_get_variable(NULL, -50000000));
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_133/AA7790", func_802403C0_AA7840);
|
||||
entity->rotation.x = evt_get_variable(script, *args++);
|
||||
entity->rotation.y = evt_get_variable(script, *args++);
|
||||
entity->rotation.z = evt_get_variable(script, *args++);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
ApiStatus func_802403C0_AA7840(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Entity* entity = get_entity_by_index(evt_get_variable(NULL, -50000000));
|
||||
|
||||
entity->position.x = evt_get_variable(script, *args++);
|
||||
entity->position.y = evt_get_variable(script, *args++);
|
||||
entity->position.z = evt_get_variable(script, *args++);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -3,6 +3,11 @@
|
||||
static char* N(exit_str_0) = "kpa_13";
|
||||
static char* N(exit_str_1) = "kpa_01";
|
||||
static char* N(exit_str_2) = "kpa_16";
|
||||
static char* N(exit_str_3) = "";
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_14/A574B0", func_80240000_A574B0);
|
||||
s32 func_80240000_A574B0(void) {
|
||||
if (evt_get_variable(NULL, GSWF(1556)) == 0) {
|
||||
return 0x190164;
|
||||
} else {
|
||||
return 0x190165;
|
||||
}
|
||||
}
|
||||
|
@ -13,13 +13,37 @@
|
||||
#include "world/common/GetEntityPosition.inc.c"
|
||||
|
||||
ApiStatus N(func_80240710_A57BC0)(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
CollisionStatus* collisionStatus = &gCollisionStatus;
|
||||
|
||||
evt_set_variable(script, *script->ptrReadPos, collisionStatus->floorBelow);
|
||||
evt_set_variable(script, *args++, collisionStatus->floorBelow);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_14/A57830", func_8024073C_A57BEC);
|
||||
ApiStatus func_8024073C_A57BEC(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 xVel = evt_get_variable(script, *args++);
|
||||
s32 floor = evt_get_variable(script, *args++);
|
||||
s32 temp_a0 = evt_get_variable(script, *args++);
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
|
||||
if (gCollisionStatus.currentFloor == floor || gCollisionStatus.lastTouchedFloor == floor) {
|
||||
if (playerStatus->actionState != ACTION_STATE_ULTRA_JUMP &&
|
||||
playerStatus->actionState != ACTION_STATE_SPIN_JUMP &&
|
||||
temp_a0 == 0)
|
||||
{
|
||||
playerStatus->extraVelocity.x = xVel;
|
||||
}
|
||||
}
|
||||
if (gPlayerData.currentPartner != PARTNER_NONE) {
|
||||
Npc* partner = get_npc_unsafe(NPC_PARTNER);
|
||||
|
||||
if (partner->currentFloor == floor) {
|
||||
partner->pos.x += xVel;
|
||||
}
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
ApiStatus N(IsPartnerLakilester)(Evt* script, s32 isInitialCall) {
|
||||
if (gPartnerActionStatus.actingPartner == PARTNER_LAKILESTER) {
|
||||
|
@ -1,3 +1,10 @@
|
||||
#include "kpa_51.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_51/A64090", func_80240000_A64090);
|
||||
ApiStatus func_80240000_A64090(Evt* script, s32 isInitialCall) {
|
||||
sprintf(wMapShapeName, "kpa_50_shape");
|
||||
sprintf(wMapHitName, "kpa_50_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
const char* N(exit_str_0) = "kpa_32";
|
||||
const char* N(exit_str_1) = "kpa_133";
|
||||
|
@ -1,5 +1,36 @@
|
||||
#include "kpa_53.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_53/A6ACA0", func_80240000_A6ACA0);
|
||||
ApiStatus func_80240000_A6ACA0(Evt* script, s32 isInitialCall) {
|
||||
gGameStatusPtr->playerSpriteSet = 2;
|
||||
sprintf(wMapShapeName, "kpa_50_shape");
|
||||
sprintf(wMapHitName, "kpa_50_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_53/A6ACA0", func_80240050_A6ACF0);
|
||||
const char* N(exit_str_0) = "kpa_102";
|
||||
const char* N(exit_str_1) = "kpa_83";
|
||||
|
||||
ApiStatus func_80240050_A6ACF0(Evt* script, s32 isInitialCall) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
s32 npcID = evt_get_variable(script, *args++);
|
||||
s32 outVar = *args++;
|
||||
Npc* npc = resolve_npc(script, npcID);
|
||||
u32 animID;
|
||||
|
||||
if (npc == NULL) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
npc->pos.x = (s32)(((s32)playerStatus->position.x - 700) * 0.85) + 765;
|
||||
if (playerStatus->currentSpeed == 0.0f) {
|
||||
animID = 0xA0001;
|
||||
} else if (playerStatus->currentSpeed < 2.0f) {
|
||||
animID = 0xA0002;
|
||||
} else {
|
||||
animID = 0xA0003;
|
||||
}
|
||||
npc->currentAnim.w = animID;
|
||||
evt_set_variable(script, outVar, playerStatus->targetYaw);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -3,4 +3,52 @@
|
||||
static char* N(exit_str_0) = "kpa_62";
|
||||
static char* N(exit_str_1) = "kpa_60";
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_63/A735B0", func_80240000_A735B0);
|
||||
ApiStatus func_80240000_A735B0(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
Npc* partner;
|
||||
f32 x, y, z;
|
||||
f32 yBase;
|
||||
f32 angle;
|
||||
f32 var_f20;
|
||||
|
||||
if (isInitialCall) {
|
||||
script->functionTemp[0] = evt_get_variable(script, *args++);
|
||||
yBase = evt_get_variable(script, *args++);
|
||||
angle = evt_get_variable(script, *args++);
|
||||
switch (script->functionTemp[0]) {
|
||||
case 0:
|
||||
var_f20 = 0.0f;
|
||||
break;
|
||||
case 1:
|
||||
var_f20 = 5.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
x = (sin_deg(angle) * var_f20) + -120.0f;
|
||||
y = yBase - 11.0f;
|
||||
z = (cos_deg(angle) * var_f20) + 225.0f;
|
||||
|
||||
switch (script->functionTemp[0]) {
|
||||
case 0:
|
||||
gPlayerStatus.position.x = x;
|
||||
gPlayerStatus.position.y = y;
|
||||
gPlayerStatus.position.z = z;
|
||||
break;
|
||||
case 1:
|
||||
partner = get_npc_safe(NPC_PARTNER);
|
||||
if (partner != NULL) {
|
||||
partner->pos.x = x;
|
||||
partner->pos.y = y;
|
||||
partner->pos.z = z;
|
||||
partner->colliderPos.x = partner->pos.x;
|
||||
partner->colliderPos.y = partner->pos.y;
|
||||
partner->colliderPos.z = partner->pos.z;
|
||||
partner->flags |= 0x10000;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
@ -1,3 +1,12 @@
|
||||
#include "kpa_81.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_81/A784C0", func_80240000_A784C0);
|
||||
ApiStatus func_80240000_A784C0(Evt* script, s32 isInitialCall) {
|
||||
sprintf(wMapShapeName, "kpa_80_shape");
|
||||
sprintf(wMapHitName, "kpa_80_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
const char* N(exit_str_0) = "kpa_50";
|
||||
const char* N(exit_str_1) = "kpa_32";
|
||||
const char* N(exit_str_2) = "kpa_04";
|
||||
const char* N(exit_str_3) = "kpa_17";
|
||||
|
@ -1,3 +1,10 @@
|
||||
#include "kpa_82.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_82/A7A500", func_80240000_A7A500);
|
||||
ApiStatus func_80240000_A7A500(Evt* script, s32 isInitialCall) {
|
||||
sprintf(wMapShapeName, "kpa_80_shape");
|
||||
sprintf(wMapHitName, "kpa_80_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
const char* N(exit_str_0) = "kpa_113";
|
||||
const char* N(exit_str_1) = "kpa_61";
|
||||
|
@ -1,3 +1,10 @@
|
||||
#include "kpa_83.h"
|
||||
|
||||
INCLUDE_ASM(s32, "world/area_kpa/kpa_83/A83490", func_80240000_A83490);
|
||||
ApiStatus func_80240000_A83490(Evt* script, s32 isInitialCall) {
|
||||
sprintf(wMapShapeName, "kpa_80_shape");
|
||||
sprintf(wMapHitName, "kpa_80_hit");
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
const char* N(exit_str_0) = "kpa_53";
|
||||
const char* N(exit_str_1) = "kpa_121";
|
||||
|
43
src/world/common/UnkShadowFunc001.inc.c
Normal file
43
src/world/common/UnkShadowFunc001.inc.c
Normal file
@ -0,0 +1,43 @@
|
||||
#include "common.h"
|
||||
#include "model.h"
|
||||
|
||||
ApiStatus N(UnkShadowFunc001)(Evt* script, s32 isInitialCall) {
|
||||
Bytecode* args = script->ptrReadPos;
|
||||
f32 x, y, z;
|
||||
f32 sp24;
|
||||
f32 sp28;
|
||||
f32 sp2C;
|
||||
Shadow* shadow;
|
||||
Model* model;
|
||||
|
||||
if (isInitialCall) {
|
||||
s32 treeIndex = evt_get_variable(script, *args++);
|
||||
|
||||
script->functionTemp[3] = *args++;
|
||||
script->functionTempPtr[1] = model = get_model_from_list_index(get_model_list_index_from_tree_index(treeIndex));
|
||||
script->functionTemp[2] = create_shadow_type(0, model->center.x, 0.0f, model->center.z);
|
||||
evt_set_variable(script, script->functionTemp[3], 0);
|
||||
}
|
||||
|
||||
if (evt_get_variable(script, script->functionTemp[3]) != 0) {
|
||||
delete_shadow(script->functionTemp[2]);
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
|
||||
model = script->functionTempPtr[1];
|
||||
shadow = get_shadow_by_index(script->functionTemp[2]);
|
||||
x = model->center.x;
|
||||
y = model->center.y;
|
||||
z = model->center.z;
|
||||
entity_raycast_down(&x, &y, &z, &sp24, &sp28, &sp2C);
|
||||
set_standard_shadow_scale(shadow, sp2C);
|
||||
shadow->rotation.y = 0.0f;
|
||||
shadow->position.x = x;
|
||||
shadow->position.y = y;
|
||||
shadow->position.z = z;
|
||||
shadow->rotation.x = sp24;
|
||||
shadow->rotation.z = sp28;
|
||||
shadow->scale.x *= 2.0f;
|
||||
shadow->scale.z *= 2.0f;
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
#include "common.h"
|
||||
#include "../src/world/partners.h"
|
||||
#include "world/partners.h"
|
||||
#include "effects.h"
|
||||
|
||||
BSS s32 D_802BE920;
|
||||
BSS s32 D_802BE924;
|
||||
@ -193,7 +194,367 @@ s32 world_bombette_can_player_pause(Npc* npc) {
|
||||
}
|
||||
|
||||
ApiStatus func_802BD758_3184A8(Evt* evt, s32 isInitialCall);
|
||||
// control flol
|
||||
#ifdef NON_MATCHING
|
||||
ApiStatus func_802BD758_3184A8(Evt* evt, s32 isInitialCall) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
CollisionStatus* collisionStatus = &gCollisionStatus;
|
||||
PartnerActionStatus* partnerActionStatus = &gPartnerActionStatus;
|
||||
Camera* camera = &gCameras[CAM_DEFAULT];
|
||||
f32 x, y, z, hitDepth;
|
||||
Npc* npc = evt->owner2.npc;
|
||||
f32* zPtr;
|
||||
f32* xPtr;
|
||||
|
||||
f32 temp_f0;
|
||||
f32 temp_f0_2;
|
||||
f32 temp_f0_5;
|
||||
s32 var_v0_5;
|
||||
f32 temp1;
|
||||
|
||||
if (gCurrentEncounter.unk_08 != 0) {
|
||||
return 0;
|
||||
}
|
||||
if (isInitialCall) {
|
||||
func_802BD6DC_31842C(npc);
|
||||
evt->functionTemp[0] = 20;
|
||||
}
|
||||
|
||||
switch (evt->functionTemp[0]) {
|
||||
case 20:
|
||||
if ((playerStatus->inputEnabledCounter != 0) || (playerStatus->flags & 2) || !(npc->flags & 0x1000)) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
disable_player_input();
|
||||
evt->functionTemp[3] = playerStatus->inputEnabledCounter;
|
||||
D_802BE92C = 1;
|
||||
D_802BE928 = 0;
|
||||
D_802BE930 = 0;
|
||||
D_802BE934 = 0;
|
||||
npc->flags &= ~0xA48;
|
||||
partnerActionStatus->partnerActionState = 1;
|
||||
partnerActionStatus->actingPartner = 3;
|
||||
D_802BE920 = func_800EF4E0();
|
||||
enable_npc_blur(npc);
|
||||
npc->duration = 4;
|
||||
npc->yaw = atan2(npc->pos.x, npc->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
suggest_player_anim_clearUnkFlag(0x10002);
|
||||
evt->functionTemp[0] = 21;
|
||||
case 21:
|
||||
if (playerStatus->actionState == 0x15 || playerStatus->actionState == 0x16) {
|
||||
disable_npc_blur(npc);
|
||||
evt->functionTemp[0] = 7;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((playerStatus->flags & 2)) {
|
||||
evt->functionTemp[0] = 7;
|
||||
break;
|
||||
}
|
||||
|
||||
npc->moveToPos.x = playerStatus->position.x;
|
||||
npc->moveToPos.y = playerStatus->position.y;
|
||||
npc->moveToPos.z = playerStatus->position.z;
|
||||
npc->currentAnim.w = 0x30007;
|
||||
add_vec2D_polar(&npc->moveToPos.x, &npc->moveToPos.z, 0.0f, playerStatus->targetYaw);
|
||||
|
||||
temp_f0 = clamp_angle(playerStatus->targetYaw + ((D_802BE920 != 0) ? -90.0f : 90.0f));
|
||||
add_vec2D_polar(&npc->moveToPos.x, &npc->moveToPos.z, playerStatus->colliderDiameter / 4, temp_f0);
|
||||
npc->pos.x += (npc->moveToPos.x - npc->pos.x) / npc->duration;
|
||||
npc->pos.y += (npc->moveToPos.y - npc->pos.y) / npc->duration;
|
||||
npc->pos.z += (npc->moveToPos.z - npc->pos.z) / npc->duration;
|
||||
npc->duration--;
|
||||
|
||||
if (npc->duration != 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (evt->functionTemp[3] < playerStatus->inputEnabledCounter) {
|
||||
disable_npc_blur(npc);
|
||||
evt->functionTemp[0] = 7;
|
||||
} else {
|
||||
npc->pos.x = npc->moveToPos.x;
|
||||
npc->pos.y = npc->moveToPos.y;
|
||||
npc->pos.z = npc->moveToPos.z;
|
||||
disable_npc_blur(npc);
|
||||
suggest_player_anim_clearUnkFlag(0x6000C);
|
||||
npc->yaw = playerStatus->targetYaw;
|
||||
npc->currentAnim.w = 0x30005;
|
||||
evt->functionTemp[0] = 1;
|
||||
evt->functionTemp[1] = 10;
|
||||
}
|
||||
case 1:
|
||||
if (!(playerStatus->actionState == 0x15 || playerStatus->actionState == 0x16)) {
|
||||
npc->pos.y = playerStatus->position.y + playerStatus->colliderHeight;
|
||||
npc->yaw = playerStatus->targetYaw;
|
||||
if (evt->functionTemp[1] == 1) {
|
||||
suggest_player_anim_clearUnkFlag(0x60006);
|
||||
}
|
||||
|
||||
if (evt->functionTemp[1] != 0) {
|
||||
evt->functionTemp[1]--;
|
||||
break;
|
||||
}
|
||||
|
||||
sfx_play_sound_at_npc(0x80000000, 0, -4);
|
||||
D_802BE924 = 1;
|
||||
add_vec2D_polar(&npc->pos.x, &npc->pos.z, 0.0f, npc->yaw);
|
||||
npc->currentAnim.w = 0x30006;
|
||||
npc->jumpVelocity = 0.0f;
|
||||
D_802BE938 = 0;
|
||||
npc->flags = (npc->flags | 0x200) & ~0x100;
|
||||
npc->moveSpeed = 1.0f;
|
||||
evt->functionTemp[0] = 2;
|
||||
evt->functionTemp[1] = 50;
|
||||
} else {
|
||||
evt->functionTemp[1] = 7;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
if ((playerStatus->animFlags & 4) || (playerStatus->actionState == 0x15 || playerStatus->actionState == 0x16)) {
|
||||
evt->functionTemp[0] = 7;
|
||||
break;
|
||||
}
|
||||
|
||||
if (evt->functionTemp[1] < 45) {
|
||||
if (!(npc->flags & 0x2000) && (D_802BE938 == 0)) {
|
||||
npc_move_heading(npc, npc->moveSpeed, npc->yaw);
|
||||
func_8003D660(npc, 0);
|
||||
} else {
|
||||
D_802BE938 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
x = npc->pos.x;
|
||||
y = npc->pos.y + 14.0f;
|
||||
z = npc->pos.z;
|
||||
hitDepth = 16.0f;
|
||||
if ((npc_raycast_down_around(0x10000, &x, &y, &z, &hitDepth, npc->yaw, npc->collisionRadius) != 0) && ((u32) ((get_collider_type_by_id(D_8010C978) & 0xFF) - 2) < 2U)) {
|
||||
if (playerStatus->actionState == 0) {
|
||||
suggest_player_anim_clearUnkFlag(0x10002);
|
||||
}
|
||||
npc->currentAnim.w = 0x30010;
|
||||
npc->flags &= ~0x200;
|
||||
evt->functionTemp[1] = 2;
|
||||
evt->functionTemp[0] = 3;
|
||||
if (D_802BE92C != 0) {
|
||||
D_802BE92C = 0;
|
||||
enable_player_input();
|
||||
}
|
||||
} else {
|
||||
if (!(evt->functionTemp[1] & 3)) {
|
||||
if (gGameStatusPtr->frameCounter & 1) {
|
||||
sfx_play_sound_at_npc(0x141, 0, -4);
|
||||
} else {
|
||||
sfx_play_sound_at_npc(0x142, 0, -4);
|
||||
}
|
||||
}
|
||||
if (evt->functionTemp[1] == 40) {
|
||||
if (playerStatus->actionState == 0) {
|
||||
suggest_player_anim_clearUnkFlag(0x10002);
|
||||
}
|
||||
enable_player_input();
|
||||
D_802BE92C = 0;
|
||||
}
|
||||
npc_do_other_npc_collision(npc);
|
||||
|
||||
if (npc->flags & 0x02000000) {
|
||||
if (D_802BE92C != 0) {
|
||||
D_802BE92C = 0;
|
||||
enable_player_input();
|
||||
}
|
||||
} else {
|
||||
if (D_802BE934 == 0) {
|
||||
if (evt->functionTemp[1] != 0) {
|
||||
evt->functionTemp[1]--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
npc->currentAnim.w = 0x30000 | 0x10;
|
||||
evt->functionTemp[1] = 0x14;
|
||||
evt->functionTemp[0] = 3;
|
||||
if (playerStatus->actionState == 0) {
|
||||
suggest_player_anim_clearUnkFlag(0x10002);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (evt->functionTemp[0]) {
|
||||
case 3:
|
||||
if (evt->functionTemp[1] != 0) {
|
||||
evt->functionTemp[1]--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (D_802BE924 != 0) {
|
||||
D_802BE924 = 0;
|
||||
sfx_stop_sound(0x80000000);
|
||||
}
|
||||
fx_explosion(gPlayerData.partners[gPlayerData.currentPartner].level, npc->pos.x, npc->pos.y + (npc->collisionHeight * 0.5f), npc->pos.z);
|
||||
|
||||
switch (gPlayerData.partners[gPlayerData.currentPartner].level) {
|
||||
case 0:
|
||||
sfx_play_sound_at_npc(0x2016, 0, -4);
|
||||
break;
|
||||
case 1:
|
||||
sfx_play_sound_at_npc(0x2017, 0, -4);
|
||||
break;
|
||||
case 2:
|
||||
sfx_play_sound_at_npc(0x2018, 0, -4);
|
||||
break;
|
||||
}
|
||||
|
||||
exec_ShakeCam1(0, 0, 0x14);
|
||||
func_8003D660(npc, 2);
|
||||
collisionStatus->bombetteExploded = 0;
|
||||
collisionStatus->bombetteExplosionPos.x = npc->pos.x;
|
||||
collisionStatus->bombetteExplosionPos.y = npc->pos.y;
|
||||
collisionStatus->bombetteExplosionPos.z = npc->pos.z;
|
||||
func_802BD100_317E50(npc);
|
||||
D_802BE928 = 1;
|
||||
partnerActionStatus->partnerActionState = 2;
|
||||
evt->functionTemp[1] = 3;
|
||||
evt->functionTemp[0]++;
|
||||
break;
|
||||
case 4:
|
||||
if (evt->functionTemp[1] != 0) {
|
||||
evt->functionTemp[1]--;
|
||||
break;
|
||||
}
|
||||
|
||||
partnerActionStatus->partnerActionState = 3;
|
||||
D_802BE928 = 0;
|
||||
npc->jumpVelocity = ((playerStatus->position.y - npc->pos.y) / 20.0f) + 30.0;
|
||||
npc->moveSpeed = 0.8f;
|
||||
npc->yaw = rand_int(360);
|
||||
npc->jumpScale = 0.8f;
|
||||
npc->pos.y += 10.0f;
|
||||
npc->moveToPos.y = npc->pos.y ;
|
||||
collisionStatus->bombetteExploded = -1;
|
||||
collisionStatus->bombetteExplosionPos.x = npc->pos.x;
|
||||
collisionStatus->bombetteExplosionPos.y = npc->pos.y;
|
||||
collisionStatus->bombetteExplosionPos.z = npc->pos.z;
|
||||
npc->currentAnim.w = 0x30011;
|
||||
temp1 = atan2(npc->pos.x, npc->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
if (!(get_clamped_angle_diff(camera->currentYaw, temp1) < 0.0f)) {
|
||||
evt->functionTemp[2] = 1;
|
||||
} else {
|
||||
evt->functionTemp[2] = -1;
|
||||
}
|
||||
evt->functionTemp[1] = 10;
|
||||
evt->functionTemp[0] = 5;
|
||||
break;
|
||||
case 5:
|
||||
npc->pos.y += npc->jumpVelocity;
|
||||
npc->jumpVelocity -= npc->jumpScale;
|
||||
npc->rotation.z -= ((evt->functionTemp[2] * 0x4F) / 2);
|
||||
npc->rotation.x -= ((evt->functionTemp[2] * 0x43) / 2);
|
||||
if (evt->functionTemp[1] != 0) {
|
||||
evt->functionTemp[1]--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (D_802BE930 == 0) {
|
||||
npc->pos.x = playerStatus->position.x;
|
||||
npc->pos.z = playerStatus->position.z;
|
||||
}
|
||||
npc->yaw = clamp_angle(gCameras[CAM_DEFAULT].currentYaw + playerStatus->spriteFacingAngle);
|
||||
add_vec2D_polar(&npc->pos.x, &npc->pos.z, 10.0f, npc->yaw);
|
||||
npc->jumpVelocity = 0.0f;
|
||||
npc->currentAnim.w = 0x30011;
|
||||
npc->flags |= 0x800;
|
||||
evt->functionTemp[0] = 6;
|
||||
break;
|
||||
case 6:
|
||||
if (npc->pos.y + 10.0f < playerStatus->position.y + playerStatus->colliderHeight) {
|
||||
npc->flags &= ~0x800;
|
||||
if (fabsf(playerStatus->position.y - npc->pos.y) < 500.0) {
|
||||
evt->functionTemp[0] = 8;
|
||||
break;
|
||||
} else if (func_800397E8(npc, npc->jumpVelocity)) {
|
||||
evt->functionTemp[0] = 7;
|
||||
break;
|
||||
}
|
||||
}
|
||||
npc->pos.y += npc->jumpVelocity;
|
||||
npc->jumpVelocity -= npc->jumpScale;
|
||||
if (npc->jumpVelocity < -8.0) {
|
||||
npc->jumpVelocity = -8.0f;
|
||||
}
|
||||
npc->rotation.z -= ((evt->functionTemp[2] * 0x4F) / 2);
|
||||
npc->rotation.x -= ((evt->functionTemp[2] * 0x43) / 2);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
switch (evt->functionTemp[0]) {
|
||||
case 7:
|
||||
if (playerStatus->actionState == 0) {
|
||||
suggest_player_anim_clearUnkFlag(0x10002);
|
||||
}
|
||||
if (D_802BE92C != 0) {
|
||||
D_802BE92C = 0;
|
||||
enable_player_input();
|
||||
}
|
||||
partnerActionStatus->partnerActionState = 0;
|
||||
partnerActionStatus->actingPartner = 0;
|
||||
npc->jumpVelocity = 0.0f;
|
||||
D_802BE928 = 0;
|
||||
D_802BE934 = 0;
|
||||
npc->pos.y = playerStatus->position.y;
|
||||
npc->rotation.x = 0.0f;
|
||||
npc->rotation.z = 0.0f;
|
||||
npc->currentAnim.w = 0x30003;
|
||||
partner_clear_player_tracking(npc);
|
||||
if (D_802BE924 == 0) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
D_802BE924 = 0;
|
||||
sfx_stop_sound(0x80000000);
|
||||
return ApiStatus_DONE2;
|
||||
case 8:
|
||||
if (D_802BE92C != 0) {
|
||||
D_802BE92C = 0;
|
||||
enable_player_input();
|
||||
}
|
||||
partnerActionStatus->partnerActionState = 0;
|
||||
partnerActionStatus->actingPartner = 0;
|
||||
npc->jumpVelocity = 0.0f;
|
||||
npc->pos.y = playerStatus->position.y;
|
||||
npc->rotation.x = 0.0f;
|
||||
npc->rotation.z = 0.0f;
|
||||
npc->currentAnim.w = 0x30003;
|
||||
npc->pos.x = playerStatus->position.x;
|
||||
npc->pos.y = playerStatus->position.y;
|
||||
npc->pos.z = playerStatus->position.z;
|
||||
D_802BE928 = 0;
|
||||
D_802BE934 = 0;
|
||||
xPtr = &npc->pos.x;
|
||||
zPtr = &npc->pos.z;
|
||||
if (D_802BE920 == 0) {
|
||||
temp_f0_5 = clamp_angle(playerStatus->targetYaw + 90.0f);
|
||||
} else {
|
||||
temp_f0_5 = clamp_angle(playerStatus->targetYaw - 90.0f);
|
||||
}
|
||||
|
||||
add_vec2D_polar(xPtr, zPtr, playerStatus->colliderDiameter / 4, temp_f0_5);
|
||||
npc->jumpVelocity = 0.0f;
|
||||
partner_clear_player_tracking(npc);
|
||||
if (D_802BE924 == 0) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
D_802BE924 = 0;
|
||||
sfx_stop_sound(0x80000000);
|
||||
break;
|
||||
}
|
||||
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "world/partner/bombette", func_802BD758_3184A8);
|
||||
#endif
|
||||
|
||||
EvtScript world_bombette_use_ability = {
|
||||
EVT_CALL(func_802BD758_3184A8)
|
||||
|
@ -170,7 +170,7 @@ ApiStatus BowUseAbility(Evt* script, s32 isInitialCall) {
|
||||
if (isInitialCall) {
|
||||
func_802BD4FC_323E4C(bow);
|
||||
if (!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_100000)) {
|
||||
if (func_800EA52C(9) != 0) {
|
||||
if (func_800EA52C(9)) {
|
||||
if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_200000) {
|
||||
playerStatus->animFlags &= ~PLAYER_STATUS_ANIM_FLAGS_200000;
|
||||
script->functionTemp[2] = disable_player_input();
|
||||
@ -200,7 +200,7 @@ ApiStatus BowUseAbility(Evt* script, s32 isInitialCall) {
|
||||
script->functionTemp[0]++;
|
||||
break;
|
||||
case 41:
|
||||
if ((func_800EA52C(9) == 0 || is_starting_conversation()) &&
|
||||
if ((!func_800EA52C(9) || is_starting_conversation()) &&
|
||||
script->functionTemp[2] < playerStatus->inputEnabledCounter
|
||||
&& D_802BE0C4) {
|
||||
|
||||
|
@ -3,9 +3,11 @@
|
||||
#include "goombario.h"
|
||||
#include "../src/world/partners.h"
|
||||
|
||||
extern s32* D_802B79A8_E21858;
|
||||
|
||||
BSS s32 D_802BDF30;
|
||||
BSS s32 D_802BDF34;
|
||||
BSS s32 D_802BDF38;
|
||||
BSS Npc* D_802BDF38;
|
||||
BSS s32 D_802BDF3C;
|
||||
BSS TweesterPhysics GoombarioTweesterPhysics;
|
||||
BSS s32 D_802BDF5C;
|
||||
@ -177,14 +179,13 @@ s32 world_goombario_can_pause(Npc* goombario) {
|
||||
}
|
||||
|
||||
// get message for tattle routine
|
||||
// has big jumptable at rodata 802BDE88
|
||||
ApiStatus func_802BD5D8_3174F8(Evt* script, s32 isInitialCall);
|
||||
INCLUDE_ASM(ApiStatus, "world/partner/goombario", func_802BD5D8_3174F8, Evt* script, s32 isInitialCall);
|
||||
|
||||
ApiStatus func_802BDB30_317A50(Evt* script, s32 isInitialCall) {
|
||||
PartnerActionStatus* goombarioActionStatus = &gPartnerActionStatus;
|
||||
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
|
||||
if (D_802BDF64 != 0) {
|
||||
D_802BDF64 = 0;
|
||||
|
@ -179,7 +179,7 @@ ApiStatus func_802BD660_319BD0(Evt* evt, s32 isInitialCall) {
|
||||
func_802BD514_319A84(parakarry);
|
||||
if (!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_100000)) {
|
||||
if (partnerActionStatus->partnerAction_unk_1 == 0) {
|
||||
if (func_800EA52C(4) == 0) {
|
||||
if (!func_800EA52C(4)) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
D_802BEBC0_31CBE0 = 0x28;
|
||||
@ -214,7 +214,7 @@ ApiStatus func_802BD660_319BD0(Evt* evt, s32 isInitialCall) {
|
||||
case 0x29:
|
||||
if (D_802BEBC4 == 0) {
|
||||
if (evt->functionTemp[2] >= playerStatus->inputEnabledCounter) {
|
||||
if (func_800EA52C(4) != 0) {
|
||||
if (func_800EA52C(4)) {
|
||||
D_802BEBC0_31CBE0 = 0x1E;
|
||||
break;
|
||||
}
|
||||
|
@ -4,8 +4,9 @@
|
||||
#include "npc.h"
|
||||
|
||||
void force_player_anim(s32 arg0);
|
||||
void func_802BE070_31DBE0(void);
|
||||
void partner_kill_ability_script(void);
|
||||
void func_802BE014_31DB84(void);
|
||||
|
||||
s32 D_802BE250_31DDC0[] = {24, 6};
|
||||
|
||||
BSS s32 D_802BE300;
|
||||
BSS s32 D_802BE304;
|
||||
@ -15,10 +16,6 @@ BSS EffectInstance* WattStaticEffect;
|
||||
BSS s32 D_802BE314;
|
||||
BSS TweesterPhysics WattTweesterPhysics;
|
||||
|
||||
s32 D_802BE250_31DDC0 = 0x18;
|
||||
|
||||
s32 D_802BE254_31DDC4 = 6;
|
||||
|
||||
void func_802BD100_31CC70(Npc* npc) {
|
||||
if (!(npc->flags & NPC_FLAG_2)) {
|
||||
if (WattStaticEffect == NULL) {
|
||||
@ -35,8 +32,22 @@ s32 world_watt_dispose_static_effect(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_802BD1AC_31CD1C(s32 arg0);
|
||||
INCLUDE_ASM(s32, "world/partner/watt", func_802BD1AC_31CD1C);
|
||||
void func_802BD1AC_31CD1C(s32 arg0) {
|
||||
EffectInstance* effect = WattStaticEffect;
|
||||
StaticStatusFXData* data = effect->data.staticStatus;
|
||||
f32 tmp;
|
||||
s32 parts;
|
||||
s32 i;
|
||||
|
||||
data->unk_00 = arg0;
|
||||
tmp = D_802BE250_31DDC0[arg0] * 0.5f;
|
||||
parts = effect->numParts - 1;
|
||||
|
||||
data++;
|
||||
for (i = 1; i < parts; i++, data++) {
|
||||
data->unk_20 = -1.0f - (tmp * (i & 1));
|
||||
}
|
||||
}
|
||||
|
||||
void world_watt_init(Npc* npc) {
|
||||
npc->collisionHeight = 24;
|
||||
@ -76,8 +87,8 @@ ApiStatus WattUpdate(Evt* script, s32 isInitialCall) {
|
||||
PlayerData* playerData = &gPlayerData;
|
||||
Npc* watt = script->owner2.npc;
|
||||
f32 sinAngle, cosAngle, liftoffVelocity;
|
||||
Entity* entity;
|
||||
|
||||
Entity* entity;
|
||||
|
||||
if (gPartnerActionStatus.partnerAction_unk_1 == 0) {
|
||||
if (isInitialCall) {
|
||||
partner_flying_enable(watt, 1);
|
||||
@ -112,7 +123,7 @@ ApiStatus WattUpdate(Evt* script, s32 isInitialCall) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
switch (WattTweesterPhysicsPtr->state) {
|
||||
case 0:
|
||||
WattTweesterPhysicsPtr->state = 1;
|
||||
@ -143,7 +154,7 @@ ApiStatus WattUpdate(Evt* script, s32 isInitialCall) {
|
||||
if (WattTweesterPhysicsPtr->liftoffVelocityPhase > 150.0f) {
|
||||
WattTweesterPhysicsPtr->liftoffVelocityPhase = 150.0f;
|
||||
}
|
||||
|
||||
|
||||
watt->pos.y += liftoffVelocity;
|
||||
watt->renderYaw = clamp_angle(360.0f - WattTweesterPhysicsPtr->angle);
|
||||
WattTweesterPhysicsPtr->angularVelocity += 0.8;
|
||||
@ -195,8 +206,176 @@ void func_802BD710_31D280(Npc* watt) {
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_802BD754_31D2C4(void);
|
||||
INCLUDE_ASM(s32, "world/partner/watt", func_802BD754_31D2C4);
|
||||
ApiStatus func_802BD754_31D2C4(Evt* script, s32 isInitialCall) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
PartnerActionStatus* partnerActionStatus = &gPartnerActionStatus;
|
||||
Npc* npc = script->owner2.npc;
|
||||
|
||||
if (isInitialCall) {
|
||||
func_802BD710_31D280(npc);
|
||||
if (!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_100000)) {
|
||||
if (partnerActionStatus->partnerAction_unk_1 == 0) {
|
||||
if ((partnerActionStatus->partnerActionState != ACTION_STATE_IDLE) ||
|
||||
(func_800EA52C(6) && !is_starting_conversation()))
|
||||
{
|
||||
if (gGameStatusPtr->keepUsingPartnerOnMapChange) {
|
||||
if (playerStatus->animFlags & (PLAYER_STATUS_ANIM_FLAGS_2 | 1)) {
|
||||
D_802BE304 = 20;
|
||||
} else {
|
||||
D_802BE304 = 40;
|
||||
}
|
||||
} else if (playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_HOLDING_WATT) {
|
||||
D_802BE304 = 2;
|
||||
} else {
|
||||
D_802BE304 = 40;
|
||||
}
|
||||
} else {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
} else {
|
||||
partnerActionStatus->partnerAction_unk_1 = 0;
|
||||
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_2 | PLAYER_STATUS_ANIM_FLAGS_HOLDING_WATT;
|
||||
func_802BE014_31DB84();
|
||||
npc->currentAnim.w = 0x60001;
|
||||
D_802BE304 = 1;
|
||||
script->functionTemp[1] = 2;
|
||||
}
|
||||
} else {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
}
|
||||
|
||||
switch (D_802BE304) {
|
||||
case 40:
|
||||
if (playerStatus->inputEnabledCounter != 0) {
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
script->functionTemp[1] = 3;
|
||||
D_802BE304 = 41;
|
||||
script->functionTemp[2] = playerStatus->inputEnabledCounter;
|
||||
break;
|
||||
case 41:
|
||||
if (script->functionTemp[1] == 0) {
|
||||
if (script->functionTemp[2] >= playerStatus->inputEnabledCounter) {
|
||||
if (!(playerStatus->animFlags & PLAYER_STATUS_ANIM_FLAGS_100000)) {
|
||||
if (func_800EA52C(6)) {
|
||||
if (!is_starting_conversation()) {
|
||||
D_802BE304 = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ApiStatus_DONE2;
|
||||
}
|
||||
script->functionTemp[1]--;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (D_802BE304) {
|
||||
case 20:
|
||||
if (gGameStatusPtr->keepUsingPartnerOnMapChange) {
|
||||
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_HOLDING_WATT;
|
||||
D_802BE30C = 1;
|
||||
npc->flags |= NPC_FLAG_100 | NPC_FLAG_ENABLE_HIT_SCRIPT;
|
||||
npc->flags &= ~(NPC_FLAG_JUMPING | NPC_FLAG_GRAVITY);
|
||||
gGameStatusPtr->keepUsingPartnerOnMapChange = 0;
|
||||
partnerActionStatus->partnerActionState = PARTNER_ACTION_USE;
|
||||
partnerActionStatus->actingPartner = PARTNER_WATT;
|
||||
npc->moveToPos.x = playerStatus->position.x;
|
||||
npc->moveToPos.y = playerStatus->position.y + 5.0f;
|
||||
npc->moveToPos.z = playerStatus->position.z;
|
||||
npc->currentAnim.w = 0x60002;
|
||||
add_vec2D_polar(&npc->moveToPos.x, &npc->moveToPos.z, 15.0f, playerStatus->targetYaw);
|
||||
npc->yaw = playerStatus->targetYaw;
|
||||
npc->currentAnim.w = 0x60001;
|
||||
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_2;
|
||||
func_802BE014_31DB84();
|
||||
npc_set_palswap_mode_A(npc, 1);
|
||||
script->functionTemp[1] = 2;
|
||||
D_802BE304 = 1;
|
||||
} else {
|
||||
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_HOLDING_WATT;
|
||||
D_802BE30C = 1;
|
||||
npc->flags &= ~(NPC_FLAG_JUMPING | NPC_FLAG_GRAVITY);
|
||||
gGameStatusPtr->keepUsingPartnerOnMapChange = 0;
|
||||
partnerActionStatus->partnerActionState = PARTNER_ACTION_USE;
|
||||
partnerActionStatus->actingPartner = PARTNER_WATT;
|
||||
func_800EF4E0();
|
||||
npc->moveToPos.x = playerStatus->position.x;
|
||||
npc->moveToPos.y = playerStatus->position.y + 5.0f;
|
||||
npc->moveToPos.z = playerStatus->position.z;
|
||||
npc->currentAnim.w = 0x60002;
|
||||
add_vec2D_polar(&npc->moveToPos.x, &npc->moveToPos.z, 15.0f, playerStatus->targetYaw);
|
||||
npc->duration = 8;
|
||||
npc->yaw = atan2(npc->pos.x, npc->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
D_802BE304++;
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
npc->pos.x += (npc->moveToPos.x - npc->pos.x) / npc->duration;
|
||||
npc->pos.y += (npc->moveToPos.y - npc->pos.y) / npc->duration;
|
||||
npc->pos.z += (npc->moveToPos.z - npc->pos.z) / npc->duration;
|
||||
npc->duration--;
|
||||
if (npc->duration == 0) {
|
||||
npc->yaw = playerStatus->targetYaw;
|
||||
npc->currentAnim.w = 0x60001;
|
||||
partnerActionStatus->actingPartner = PARTNER_WATT;
|
||||
playerStatus->animFlags |= PLAYER_STATUS_ANIM_FLAGS_2;
|
||||
func_802BE014_31DB84();
|
||||
script->functionTemp[1] = 2;
|
||||
D_802BE304 = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
func_802BE070_31DBE0();
|
||||
if ((playerStatus->flags & PLAYER_STATUS_FLAGS_800)) {
|
||||
D_802BE304 = 2;
|
||||
} else {
|
||||
s32 actionState = playerStatus->actionState;
|
||||
|
||||
if (actionState != ACTION_STATE_USE_SPINNING_FLOWER) {
|
||||
if (script->functionTemp[1] != 0) {
|
||||
script->functionTemp[1]--;
|
||||
} else if (
|
||||
actionState == ACTION_STATE_IDLE ||
|
||||
actionState == ACTION_STATE_WALK ||
|
||||
actionState == ACTION_STATE_RUN ||
|
||||
actionState == ACTION_STATE_LAND)
|
||||
{
|
||||
if (partnerActionStatus->pressedButtons & B_BUTTON) {
|
||||
D_802BE304 = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (D_802BE304 == 2) {
|
||||
playerStatus->animFlags &= ~(PLAYER_STATUS_ANIM_FLAGS_2 | PLAYER_STATUS_ANIM_FLAGS_HOLDING_WATT);
|
||||
npc->currentAnim.w = 0x60001;
|
||||
partner_clear_player_tracking(npc);
|
||||
D_802BE30C = 0;
|
||||
partnerActionStatus->actingPartner = PARTNER_NONE;
|
||||
partnerActionStatus->partnerActionState = PARTNER_ACTION_NONE;
|
||||
gGameStatusPtr->keepUsingPartnerOnMapChange = FALSE;
|
||||
D_802BE304 = 20;
|
||||
npc_set_palswap_mode_A(npc, 0);
|
||||
if (!(playerStatus->flags & 0x800)) {
|
||||
set_action_state(0);
|
||||
}
|
||||
return ApiStatus_DONE1;
|
||||
}
|
||||
|
||||
if (WattStaticEffect != NULL) {
|
||||
WattStaticEffect->data.staticStatus->unk_04 = npc->pos.x;
|
||||
WattStaticEffect->data.staticStatus->unk_08 = npc->pos.y + 13.0f;
|
||||
WattStaticEffect->data.staticStatus->unk_0C = npc->pos.z;
|
||||
}
|
||||
|
||||
return ApiStatus_BLOCK;
|
||||
}
|
||||
|
||||
EvtScript world_watt_use_ability = {
|
||||
EVT_CALL(func_802BD754_31D2C4)
|
||||
@ -325,7 +504,7 @@ void func_802BE070_31DBE0(void) {
|
||||
f32 temp, angle;
|
||||
f32 spriteFacingAngle;
|
||||
s32 phi_v1;
|
||||
|
||||
|
||||
if (gPartnerActionStatus.partnerActionState != PARTNER_ACTION_NONE) {
|
||||
spriteFacingAngle = gPlayerStatusPtr->spriteFacingAngle;
|
||||
if ((spriteFacingAngle < 90.0f) || (spriteFacingAngle > 270.0f)) {
|
||||
@ -356,7 +535,7 @@ void func_802BE070_31DBE0(void) {
|
||||
playerStatus = gPlayerStatusPtr;
|
||||
partnerNPC = new_var2;
|
||||
partnerNPC->pos.z = playerStatus->position.z - (cos_rad(angle) * gPlayerStatusPtr->colliderDiameter * temp);
|
||||
|
||||
|
||||
wPartnerNpc->yaw = gPlayerStatusPtr->targetYaw;
|
||||
wPartnerNpc->pos.y = gPlayerStatusPtr->position.y + 5.0f;
|
||||
}
|
||||
|
@ -219,7 +219,8 @@ s32 wPartnerMoveGoalX = 0;
|
||||
s32 wPartnerMoveGoalZ = 0;
|
||||
s32 wPartnerMoveTime = 0;
|
||||
f32 wPartnerMoveSpeed = 0.0f;
|
||||
s8 D_800F8034[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
f32 D_800F8034 = 0.0f;
|
||||
s16 D_800F8038 = 0;
|
||||
s16 D_800F803A = 0;
|
||||
|
||||
WorldPartner wPartners[12] = {
|
||||
@ -617,13 +618,13 @@ void _use_partner_ability(void) {
|
||||
wPartnerCurrentScriptID = wPartnerCurrentScript->id;
|
||||
wPartnerCurrentScript->groupFlags = EVT_GROUP_08 | EVT_GROUP_02;
|
||||
D_8010CD34 += 1;
|
||||
set_time_freeze_mode(1);
|
||||
set_time_freeze_mode(TIME_FREEZE_PARTIAL);
|
||||
break;
|
||||
case 1:
|
||||
if (does_script_exist(wPartnerCurrentScriptID)) {
|
||||
break;
|
||||
}
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
partner_free_npc();
|
||||
playerData->currentPartner = D_8010CFD8 = D_8010CFE4;
|
||||
partner_create_npc();
|
||||
@ -636,7 +637,7 @@ void _use_partner_ability(void) {
|
||||
wPartnerCurrentScriptID = wPartnerCurrentScript->id;
|
||||
wPartnerCurrentScript->groupFlags = EVT_GROUP_08 | EVT_GROUP_02;
|
||||
D_8010CD34 += 1;
|
||||
set_time_freeze_mode(1);
|
||||
set_time_freeze_mode(TIME_FREEZE_PARTIAL);
|
||||
break;
|
||||
case 3:
|
||||
if (does_script_exist(wPartnerCurrentScriptID)) {
|
||||
@ -648,7 +649,7 @@ void _use_partner_ability(void) {
|
||||
wPartnerCurrentScript->groupFlags = EVT_GROUP_08 | EVT_GROUP_02;
|
||||
D_8010CD30 = 1;
|
||||
enable_player_input();
|
||||
set_time_freeze_mode(0);
|
||||
set_time_freeze_mode(TIME_FREEZE_NORMAL);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -766,7 +767,7 @@ void _use_partner_ability(void) {
|
||||
wPartnerCurrentScriptID = wPartnerCurrentScript->id;
|
||||
wPartnerCurrentScript->groupFlags = EVT_GROUP_08 | EVT_GROUP_02;
|
||||
D_8010CD30 = 1;
|
||||
wPartnerNpc->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[4];
|
||||
wPartnerNpc->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_FLY];
|
||||
enable_player_input();
|
||||
break;
|
||||
}
|
||||
@ -1101,7 +1102,7 @@ void partner_walking_enable(Npc* partner, s32 val) {
|
||||
D_8010CFCC = 0;
|
||||
wPartnerMoveTime = 16;
|
||||
wPartnerTetherDistance = 40.0f;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_IDLE];
|
||||
func_800EA5B8(&partner->flags);
|
||||
partner->collisionChannel = 0x10000;
|
||||
partner->jumpVelocity = 0.0f;
|
||||
@ -1205,7 +1206,7 @@ void partner_flying_enable(Npc* partner, s32 val) {
|
||||
D_8010CFCC = 0;
|
||||
wPartnerMoveTime = 16;
|
||||
wPartnerTetherDistance = 40.0f;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_IDLE];
|
||||
func_800EA5B8(&partner->flags);
|
||||
partner->collisionChannel = 0x10000;
|
||||
partner->flags |= NPC_FLAG_100;
|
||||
@ -1320,7 +1321,334 @@ void partner_flying_update_motion(Npc* partner) {
|
||||
}
|
||||
}
|
||||
|
||||
// backwards jump hall of shame + more work required
|
||||
#ifdef NON_EQUIVALENT
|
||||
void partner_flying_follow_player(Npc* partner) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
Camera* camera = &gCameras[CAM_DEFAULT];
|
||||
f32 x, y, z;
|
||||
f32 temp;
|
||||
f32 yaw;
|
||||
|
||||
f32 temp_a3;
|
||||
f32 var_f0_2;
|
||||
f32 temp_f0_15;
|
||||
|
||||
f32 temp_f20;
|
||||
f32 temp_f2_3;
|
||||
f32 var_f12;
|
||||
f32 moveHistoryX, moveHistoryY, moveHistoryZ;
|
||||
|
||||
u16 temp_v0_3;
|
||||
|
||||
switch (D_8010CFC8) {
|
||||
case 0:
|
||||
var_f12 = 0.0f;
|
||||
x = partner->pos.x;
|
||||
y = partner->pos.y;
|
||||
z = partner->pos.z;
|
||||
wSavedPartnerPosX = x;
|
||||
wSavedPartnerPosY = y;
|
||||
wSavedPartnerPosZ = z;
|
||||
moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x;
|
||||
moveHistoryY = gPlayerMoveHistory[D_8010CFBC].pos.y;
|
||||
moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z;
|
||||
if (wPartnerTetherDistance < 20.0f) {
|
||||
var_f12 = (20.0f - wPartnerTetherDistance) * 0.5f;
|
||||
}
|
||||
partner->pos.y = y + (((moveHistoryY + 20.0f + var_f12) - y) * 0.125f);
|
||||
partner->moveSpeed = 3.0f;
|
||||
y = partner->pos.y;
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
if (temp >= 50.0) {
|
||||
if (playerStatus->position.y <= partner->pos.y) {
|
||||
partner->moveSpeed = temp * 0.25f;
|
||||
} else {
|
||||
partner->moveSpeed = 8.0f;
|
||||
}
|
||||
}
|
||||
if (wPartnerTetherDistance < 20.0f) {
|
||||
partner->moveSpeed = 4.0f;
|
||||
}
|
||||
|
||||
while (TRUE) {
|
||||
yaw = atan2(x, z, moveHistoryX, moveHistoryZ);
|
||||
temp = dist2D(x, z, moveHistoryX, moveHistoryZ);
|
||||
if (partner->moveSpeed < temp) {
|
||||
if (!(playerStatus->position.y <= partner->pos.y)) {
|
||||
if (!(partner->moveSpeed > 6.0)) {
|
||||
partner->moveSpeed += 1.0;
|
||||
} else {
|
||||
partner->moveSpeed = 6.0f;
|
||||
}
|
||||
} else {
|
||||
if (partner->moveSpeed >= temp * 0.25f) {
|
||||
partner->moveSpeed = temp * 0.25f;
|
||||
} else {
|
||||
partner->moveSpeed += temp * 0.0625f;
|
||||
}
|
||||
}
|
||||
} else if (D_8010CFBC != gPlayerMoveHistoryIndex) {
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
if (!(temp <= wPartnerTetherDistance)) {
|
||||
D_8010CFBC++;
|
||||
if (D_8010CFBC >= 40) {
|
||||
D_8010CFBC = 0;
|
||||
}
|
||||
moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x;
|
||||
moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z;
|
||||
continue;
|
||||
}
|
||||
D_8010CFC8 = 5;
|
||||
yaw = partner->yaw;
|
||||
partner->moveSpeed = 0.0f;
|
||||
partner->jumpScale = 0.0f;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
} else {
|
||||
yaw = partner->yaw;
|
||||
partner->moveSpeed = 0.0f;
|
||||
partner->jumpScale = 0.0f;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
}
|
||||
break;
|
||||
}
|
||||
partner->yaw = yaw;
|
||||
npc_move_heading(partner, partner->moveSpeed, yaw);
|
||||
if (partner->flags & 0x4000) {
|
||||
D_8010CFC8 = 1;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
if (D_8010CFBC != gPlayerMoveHistoryIndex) {
|
||||
D_8010CFBC++;
|
||||
if (D_8010CFBC >= 40) {
|
||||
D_8010CFBC = 0;
|
||||
}
|
||||
partner->duration = 0;
|
||||
partner->jumpScale = 1.3f;
|
||||
partner->moveToPos.x = gPlayerMoveHistory[D_8010CFBC].pos.x;
|
||||
partner->moveToPos.y = gPlayerMoveHistory[D_8010CFBC].pos.y;
|
||||
partner->moveToPos.z = gPlayerMoveHistory[D_8010CFBC].pos.z;
|
||||
if (D_8010CFC8 == 1) {
|
||||
partner->moveSpeed = 6.0f;
|
||||
}
|
||||
partner->planarFlyDist = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
partner->yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
if (partner->planarFlyDist > 50.0) {
|
||||
partner->planarFlyDist = 50.0f;
|
||||
}
|
||||
temp = partner->planarFlyDist;
|
||||
y = partner->moveToPos.y - partner->pos.y;
|
||||
if (partner->planarFlyDist < y) {
|
||||
temp = y;
|
||||
}
|
||||
if (D_8010CFC8 == 1) {
|
||||
if (temp < wPartnerTetherDistance) {
|
||||
partner->jumpVelocity = 0.0f;
|
||||
partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
D_8010CFC8 = 5;
|
||||
return;
|
||||
}
|
||||
partner->duration = temp / partner->moveSpeed;
|
||||
if (partner->duration < 10) {
|
||||
partner->duration = 10;
|
||||
}
|
||||
partner->moveSpeed = partner->planarFlyDist / partner->duration;
|
||||
} else {
|
||||
partner->duration = 0xA;
|
||||
}
|
||||
|
||||
partner->jumpVelocity = (y + (partner->jumpScale * partner->duration * partner->duration * 0.5f)) / partner->duration;
|
||||
if (partner->jumpVelocity > 20.0) {
|
||||
partner->jumpVelocity = 20.0f;
|
||||
}
|
||||
D_8010CFC8 = 2;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[2];
|
||||
partner->moveToPos.x = partner->pos.x;
|
||||
partner->moveToPos.y = partner->pos.y;
|
||||
partner->moveToPos.z = partner->pos.z;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
partner->jumpVelocity -= partner->jumpScale;
|
||||
partner->pos.y += partner->jumpVelocity;
|
||||
if (partner->jumpVelocity <= 0.0f) {
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[3];
|
||||
}
|
||||
npc_move_heading(partner, partner->moveSpeed, partner->yaw);
|
||||
if (partner->jumpVelocity <= 0.0f) {
|
||||
if (partner->pos.y < partner->moveToPos.y) {
|
||||
partner->jumpVelocity = 0.0f;
|
||||
partner->pos.y = partner->moveToPos.y;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[4];
|
||||
partner->yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
D_8010CFC8 = 0;
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
if (temp < wPartnerTetherDistance) {
|
||||
D_8010CFC8 = 0xF;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
x = partner->pos.x;
|
||||
y = partner->pos.y;
|
||||
z = partner->pos.z;
|
||||
moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x;
|
||||
moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z;
|
||||
temp = dist2D(x, z, playerStatus->position.x, playerStatus->position.z);
|
||||
if (temp <= wPartnerTetherDistance) {
|
||||
if (D_8010CFCA == 0) {
|
||||
temp_v0_3 = partner->collisionHeight;
|
||||
partner->moveSpeed = 0.0f;
|
||||
partner->jumpScale = 0.0f;
|
||||
temp_f2_3 = (y + (((playerStatus->position.y + (playerStatus->colliderHeight - ((s32) ((s16) temp_v0_3 + ((u32) (temp_v0_3 << 0x10) >> 0x1F)) >> 1))) - partner->pos.y) * 0.03125));
|
||||
partner->pos.y = temp_f2_3;
|
||||
y = temp_f2_3;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
if (playerStatus->actionState == 0xC) {
|
||||
D_8010CFCA = 0;
|
||||
}
|
||||
} else {
|
||||
if (playerStatus->spriteFacingAngle < 180.0f) {
|
||||
var_f0_2 = 90.0f;
|
||||
temp_a3 = clamp_angle(camera->currentYaw + 90.0f);
|
||||
} else {
|
||||
var_f0_2 = -90.0f;
|
||||
temp_a3 = clamp_angle(camera->currentYaw + -90.0f);
|
||||
}
|
||||
partner->moveToPos.x = playerStatus->position.x;
|
||||
partner->moveToPos.y = playerStatus->position.y;
|
||||
partner->moveToPos.z = playerStatus->position.z;
|
||||
add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, wPartnerTetherDistance - 10.0f, temp_a3);
|
||||
yaw = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
partner->moveSpeed = 2.0f;
|
||||
if (temp > 2.0f) {
|
||||
partner->yaw = yaw;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[6];
|
||||
if (!(partner->flags & 0x4000)) {
|
||||
D_800F803A = 0;
|
||||
} else {
|
||||
D_800F803A++;
|
||||
if (D_800F803A > 10) {
|
||||
yaw = playerStatus->targetYaw;
|
||||
partner->moveSpeed = 0.0f;
|
||||
partner->jumpScale = 0.0f;
|
||||
partner->renderYaw = yaw;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
if (D_8010CFCA == 2 || playerStatus->actionState == 0xC) {
|
||||
D_8010CFCA = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
yaw = atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
partner->yaw = yaw;
|
||||
partner->moveSpeed = 0.0f;
|
||||
partner->jumpScale = 0.0f;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
if (D_8010CFCA == 2 || playerStatus->actionState == 0xC) {
|
||||
D_8010CFCA = 0;
|
||||
}
|
||||
}
|
||||
partner->yaw = yaw;
|
||||
npc_move_heading(partner, partner->moveSpeed, yaw);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z);
|
||||
if (!(temp <= wPartnerTetherDistance)) {
|
||||
while (TRUE) {
|
||||
if (!gPlayerMoveHistory[D_8010CFBC].isJumping) {
|
||||
temp_f20 = atan2(partner->pos.x, partner->pos.z, moveHistoryX, moveHistoryZ);
|
||||
if (!(fabsf(get_clamped_angle_diff(temp_f20, atan2(partner->pos.x, partner->pos.z, playerStatus->position.x, playerStatus->position.z))) < 90.0f)) {
|
||||
if (D_8010CFBC != gPlayerMoveHistoryIndex) {
|
||||
D_8010CFBC++;
|
||||
if (D_8010CFBC >= 40) {
|
||||
D_8010CFBC = 0;
|
||||
}
|
||||
moveHistoryX = gPlayerMoveHistory[D_8010CFBC].pos.x;
|
||||
moveHistoryZ = gPlayerMoveHistory[D_8010CFBC].pos.z;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
D_8010CFC8 = 0;
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
if (!(playerStatus->animFlags & 0x100000)) {
|
||||
switch (D_8010CFCE) {
|
||||
case 0:
|
||||
temp_f0_15 = clamp_angle(func_800E5348() + 180.0f);
|
||||
partner->moveToPos.x = playerStatus->position.x;
|
||||
partner->moveToPos.y = playerStatus->position.y;
|
||||
partner->moveToPos.z = playerStatus->position.z;
|
||||
add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, playerStatus->colliderDiameter, temp_f0_15);
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
partner->moveSpeed = wPartnerMoveSpeed = temp / wPartnerMoveTime;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[(partner->moveSpeed < 4.0) ? 1 : 6];
|
||||
D_800F8034 = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
partner->yaw = D_800F8034;
|
||||
D_8010CFCE++;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
if (wPartnerMoveTime != 0) {
|
||||
z = partner->pos.z;
|
||||
x = partner->pos.x;
|
||||
y = partner->pos.y + partner->collisionHeight;
|
||||
temp = partner->collisionHeight + 1;
|
||||
wPartnerMoveTime--;
|
||||
if (npc_raycast_down_around(0x10000, &x, &y, &z, &temp, partner->yaw, partner->collisionRadius) == 0) {
|
||||
if ((partner->collisionHeight + 5) < fabs((partner->pos.y - playerStatus->position.y))) {
|
||||
partner->pos.y += (playerStatus->position.y - partner->pos.y) / 10.0f;
|
||||
}
|
||||
} else {
|
||||
partner->pos.y += (((playerStatus->position.y + playerStatus->colliderHeight) - partner->pos.y) * 0.125f);
|
||||
}
|
||||
partner->moveSpeed = wPartnerMoveSpeed;
|
||||
partner->yaw = D_800F8034;
|
||||
x = partner->pos.x;
|
||||
y = partner->pos.y;
|
||||
z = partner->pos.z;
|
||||
if (npc_test_move_taller_with_slipping(0, &x, &y, &z, partner->moveSpeed, partner->yaw, partner->collisionHeight, partner->collisionRadius) != 0) {
|
||||
partner->pos.x += (x - partner->pos.x) / 5.0f;
|
||||
partner->pos.z += (z - partner->pos.z) / 5.0f;
|
||||
} else {
|
||||
npc_move_heading(partner, partner->moveSpeed, partner->yaw);
|
||||
}
|
||||
return;
|
||||
}
|
||||
partner_clear_player_tracking(partner);
|
||||
partner->moveSpeed = 0.0f;
|
||||
partner->jumpScale = 0.0f;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
D_8010CFC8 = 0;
|
||||
D_8010CFCA = 0;
|
||||
D_8010CFCE = 0;
|
||||
partner->yaw = clamp_angle((camera->currentYaw + 270.0f) - playerStatus->spriteFacingAngle);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
partner_move_to_goal(partner, 1);
|
||||
break;
|
||||
case 40:
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[5];
|
||||
break;
|
||||
case 50:
|
||||
break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
INCLUDE_ASM(s32, "world/partners", partner_flying_follow_player);
|
||||
#endif
|
||||
|
||||
s32 partner_init_put_away(Npc* partner) {
|
||||
partner->collisionChannel = 0x10000;
|
||||
@ -1365,7 +1693,7 @@ s32 partner_put_away(Npc* partner) {
|
||||
partner->moveSpeed = partner->planarFlyDist / divisor;
|
||||
tempMoveToY = tempPosY - tempMoveToY;
|
||||
partner->jumpVelocity = (tempMoveToY + partner->jumpScale * partner->duration * partner->duration * 0.5f) / partner->duration;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[2];
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_JUMP];
|
||||
enable_npc_blur(partner);
|
||||
D_8010CFC8 = 1;
|
||||
break;
|
||||
@ -1373,7 +1701,7 @@ s32 partner_put_away(Npc* partner) {
|
||||
partner->jumpVelocity -= partner->jumpScale;
|
||||
partner->pos.y += partner->jumpVelocity;
|
||||
if (partner->jumpVelocity <= 0.0f) {
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[3];
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_FALL];
|
||||
}
|
||||
npc_move_heading(partner, partner->moveSpeed, partner->yaw);
|
||||
tempDuration = partner->duration;
|
||||
@ -1389,7 +1717,7 @@ s32 partner_put_away(Npc* partner) {
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[4];
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_FLY];
|
||||
partner->jumpVelocity = 0.0f;
|
||||
partner->pos.y = partner->moveToPos.y;
|
||||
disable_npc_blur(partner);
|
||||
@ -1405,7 +1733,127 @@ s32 partner_init_get_out(Npc* npc) {
|
||||
return D_8010CFC8;
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "world/partners", partner_get_out);
|
||||
s32 partner_get_out(Npc* partner) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
Camera* camera = &gCameras[gCurrentCameraID];
|
||||
f32 x, y, z, hitDepth;
|
||||
f32 var_f0;
|
||||
|
||||
f32 moveToX, moveToY, moveToZ;
|
||||
|
||||
switch (D_8010CFC8) {
|
||||
case 0:
|
||||
if (clamp_angle(playerStatus->spriteFacingAngle) < 180.0f) {
|
||||
partner->yaw = clamp_angle(camera->currentYaw + 90.0f);
|
||||
} else {
|
||||
partner->yaw = clamp_angle(camera->currentYaw - 90.0f);
|
||||
}
|
||||
partner->moveToPos.x = playerStatus->position.x;
|
||||
partner->moveToPos.y = playerStatus->position.y;
|
||||
if (wPartner->isFlying) {
|
||||
partner->moveToPos.y = playerStatus->position.y;
|
||||
}
|
||||
partner->moveToPos.z = playerStatus->position.z;
|
||||
add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, playerStatus->colliderDiameter, partner->yaw);
|
||||
moveToX = partner->moveToPos.x;
|
||||
moveToY = partner->moveToPos.y;
|
||||
moveToZ = partner->moveToPos.z;
|
||||
if (!wPartner->isFlying) {
|
||||
x = moveToX;
|
||||
y = moveToY + partner->collisionHeight;
|
||||
z = moveToZ;
|
||||
add_vec2D_polar(&x, &z, 2.0f, gCameras[gCurrentCameraID].currentYaw);
|
||||
hitDepth = 1000.0f;
|
||||
if (npc_raycast_down_around(0x10000, &x, &y, &z, &hitDepth, partner->yaw, partner->collisionRadius)) {
|
||||
s32 colliderType = get_collider_type_by_id(D_8010C978);
|
||||
|
||||
if ((colliderType == 2 || colliderType == 3) || (hitDepth > 100.0f)) {
|
||||
moveToX = playerStatus->position.x;
|
||||
moveToY = playerStatus->position.y;
|
||||
moveToZ = playerStatus->position.z;
|
||||
add_vec2D_polar(&x, &z, 2.0f, gCameras[gCurrentCameraID].currentYaw);
|
||||
}
|
||||
} else {
|
||||
moveToX = playerStatus->position.x;
|
||||
moveToY = playerStatus->position.y;
|
||||
moveToZ = playerStatus->position.z;
|
||||
add_vec2D_polar(&x, &z, 2.0f, gCameras[gCurrentCameraID].currentYaw);
|
||||
}
|
||||
}
|
||||
|
||||
x = partner->pos.x = playerStatus->position.x;
|
||||
y = partner->pos.y = playerStatus->position.y + (playerStatus->colliderHeight / 2);
|
||||
z = partner->pos.z = playerStatus->position.z;
|
||||
|
||||
partner->moveSpeed = 4.0f;
|
||||
partner->jumpScale = 1.2f;
|
||||
partner->planarFlyDist = dist2D(x, z, moveToX, moveToZ);
|
||||
partner->yaw = atan2(x, z, moveToX, moveToZ);
|
||||
partner->duration = partner->planarFlyDist / partner->moveSpeed;
|
||||
if (partner->duration < 10) {
|
||||
partner->duration = 10;
|
||||
partner->moveSpeed = partner->planarFlyDist / partner->duration;
|
||||
}
|
||||
partner->jumpVelocity = (moveToY - y + (partner->jumpScale * partner->duration * partner->duration * 0.5f)) /
|
||||
partner->duration;
|
||||
D_8010CFC8 = 1;
|
||||
y = moveToY - y;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[2];
|
||||
break;
|
||||
case 1:
|
||||
if (partner->jumpVelocity < 0.0f && func_800397E8(partner, fabsf(partner->jumpVelocity))) {
|
||||
D_8010CFC8 = 2;
|
||||
break;
|
||||
}
|
||||
partner->jumpVelocity -= partner->jumpScale;
|
||||
partner->pos.y += partner->jumpVelocity;
|
||||
if (partner->jumpVelocity <= 0.0f) {
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[3];
|
||||
}
|
||||
npc_move_heading(partner, partner->moveSpeed, partner->yaw);
|
||||
npc_do_world_collision(partner);
|
||||
var_f0 = partner->duration;
|
||||
if (var_f0 > 10.0f) {
|
||||
var_f0 = 10.0f;
|
||||
}
|
||||
|
||||
partner->scale.x = (10.0f - var_f0) / 10.0f;
|
||||
partner->scale.y = partner->scale.x;
|
||||
partner->scale.z = partner->scale.x;
|
||||
|
||||
partner->duration--;
|
||||
if (partner->duration < 0) {
|
||||
D_8010CFC8 = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
partner->pos.y = partner->moveToPos.y;
|
||||
partner->jumpVelocity = 0.0f;
|
||||
partner->scale.x = 1.0f;
|
||||
partner->scale.y = 1.0f;
|
||||
partner->scale.z = 1.0f;
|
||||
partner->moveToPos.x = partner->pos.x;
|
||||
partner->moveToPos.y = partner->pos.y;
|
||||
partner->moveToPos.z = partner->pos.z;
|
||||
partner->pos.x = partner->pos.x;
|
||||
partner->pos.y = playerStatus->position.y;
|
||||
if (wPartner->isFlying) {
|
||||
partner->pos.y = playerStatus->position.y;
|
||||
}
|
||||
partner->pos.z = partner->pos.z;
|
||||
partner_clear_player_tracking(partner);
|
||||
partner->pos.x = partner->moveToPos.x;
|
||||
partner->pos.y = partner->moveToPos.y;
|
||||
partner->pos.z = partner->moveToPos.z;
|
||||
if (partner->flags & 0x1000) {
|
||||
if (!wPartner->isFlying) {
|
||||
func_8003D660(partner, 2);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void func_800EF300(void) {
|
||||
D_8010CFC8 = 40;
|
||||
@ -1527,15 +1975,103 @@ void partner_do_player_collision(Npc* partner) {
|
||||
f32 partnerScreenZ;
|
||||
f32 W;
|
||||
|
||||
transform_point(gCameras[CAM_DEFAULT].perspectiveMatrix, playerStatus->position.x, playerStatus->position.y, playerStatus->position.z, 1.0f, &playerScreenX, &playerScreenY, &playerScreenZ, &W);
|
||||
transform_point(gCameras[CAM_DEFAULT].perspectiveMatrix, partner->pos.x, partner->pos.y, partner->pos.z, 1.0f, &partnerScreenX, &partnerScreenY, &partnerScreenZ, &W);
|
||||
transform_point(gCameras[CAM_DEFAULT].perspectiveMatrix,
|
||||
playerStatus->position.x, playerStatus->position.y, playerStatus->position.z, 1.0f,
|
||||
&playerScreenX, &playerScreenY, &playerScreenZ, &W);
|
||||
transform_point(gCameras[CAM_DEFAULT].perspectiveMatrix, partner->pos.x, partner->pos.y, partner->pos.z, 1.0f,
|
||||
&partnerScreenX, &partnerScreenY, &partnerScreenZ, &W);
|
||||
playerScreenX = fabsf(playerScreenX - partnerScreenX);
|
||||
playerScreenY = fabsf(playerScreenY - partnerScreenY);
|
||||
playerScreenZ = fabsf(playerScreenZ - partnerScreenZ);
|
||||
if (playerScreenX <= (partner->collisionRadius + playerStatus->colliderDiameter) * 0.9f && playerScreenY <= partner->collisionHeight + playerStatus->colliderHeight && playerScreenZ <= 4.0) {
|
||||
npc_move_heading(partner, 1.0f, atan2(playerStatus->position.x, playerStatus->position.z, partner->pos.x, partner->pos.z));
|
||||
if (playerScreenX <= (partner->collisionRadius + playerStatus->colliderDiameter) * 0.9f &&
|
||||
playerScreenY <= partner->collisionHeight + playerStatus->colliderHeight && playerScreenZ <= 4.0)
|
||||
{
|
||||
npc_move_heading(partner, 1.0f,
|
||||
atan2(playerStatus->position.x, playerStatus->position.z, partner->pos.x, partner->pos.z));
|
||||
add_vec2D_polar(&partner->pos.x, &partner->pos.z, 2.0f, gCameras[gCurrentCameraID].currentYaw);
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM(s32, "world/partners", partner_move_to_goal);
|
||||
void partner_move_to_goal(Npc* partner, s32 arg1) {
|
||||
PlayerStatus* playerStatus = &gPlayerStatus;
|
||||
f32 x, y, z, temp;
|
||||
s32 var_a1;
|
||||
|
||||
switch (D_8010CFCE) {
|
||||
case 0:
|
||||
D_8010CFCE++;
|
||||
partner->moveToPos.y = playerStatus->position.y;
|
||||
partner->moveToPos.x = wPartnerMoveGoalX;
|
||||
partner->moveToPos.z = wPartnerMoveGoalZ;
|
||||
D_800F8034 = atan2(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
partner->yaw = D_800F8034;
|
||||
add_vec2D_polar(&partner->moveToPos.x, &partner->moveToPos.z, 5.0f, D_800F8034);
|
||||
wPartnerMoveTime = 18;
|
||||
temp = dist2D(partner->pos.x, partner->pos.z, partner->moveToPos.x, partner->moveToPos.z);
|
||||
partner->moveSpeed = wPartnerMoveSpeed = temp / wPartnerMoveTime;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[
|
||||
(partner->moveSpeed >= 4.0) ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK];
|
||||
case 1:
|
||||
if (wPartnerMoveTime != 0) {
|
||||
wPartnerMoveTime--;
|
||||
if (arg1 == 0) {
|
||||
if (!(partner->flags & NPC_FLAG_1000)) {
|
||||
partner->pos.y = playerStatus->position.y;
|
||||
}
|
||||
if (partner->jumpVelocity != 0.0f) {
|
||||
partner->jumpVelocity -= partner->jumpScale;
|
||||
partner->pos.y += partner->jumpVelocity;
|
||||
if (partner->jumpVelocity <= 0.0f) {
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_FALL];
|
||||
}
|
||||
|
||||
if (partner->jumpVelocity <= 0.0f) {
|
||||
temp = fabsf(partner->jumpVelocity) + partner->collisionHeight;
|
||||
y = partner->pos.y + partner->collisionHeight;
|
||||
x = partner->pos.x;
|
||||
z = partner->pos.z;
|
||||
|
||||
if (npc_raycast_down_around(partner->collisionChannel, &x, &y, &z, &temp,
|
||||
partner->yaw, partner->collisionRadius) &&
|
||||
(temp <= fabsf(partner->jumpVelocity) + 22.0f))
|
||||
{
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[
|
||||
(partner->moveSpeed >= 4.0) ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK];
|
||||
partner->jumpScale = 0.0f;
|
||||
partner->jumpVelocity = 0.0f;
|
||||
partner->pos.y = y;
|
||||
partner->flags &= ~NPC_FLAG_JUMPING;
|
||||
}
|
||||
}
|
||||
}
|
||||
partner->moveSpeed = wPartnerMoveSpeed;
|
||||
partner->yaw = D_800F8034;
|
||||
npc_move_heading(partner, partner->moveSpeed, partner->yaw);
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[
|
||||
(partner->moveSpeed >= 4.0) ? PARTNER_ANIM_INDEX_RUN : PARTNER_ANIM_INDEX_WALK];
|
||||
npc_do_world_collision(partner);
|
||||
} else {
|
||||
if (fabs(partner->pos.y - playerStatus->position.y) > 5.0) {
|
||||
partner->pos.y += (playerStatus->position.y - partner->pos.y) * 0.5f;
|
||||
}
|
||||
partner->moveSpeed = wPartnerMoveSpeed;
|
||||
partner->yaw = D_800F8034;
|
||||
npc_move_heading(partner, partner->moveSpeed, partner->yaw);
|
||||
}
|
||||
|
||||
if (partner->moveSpeed < 4.0) {
|
||||
var_a1 = 0;
|
||||
} else {
|
||||
var_a1 = 1;
|
||||
}
|
||||
func_8003D660(partner, var_a1);
|
||||
} else {
|
||||
partner->flags &= ~NPC_FLAG_40;
|
||||
partner->currentAnim.w = gPartnerAnimations[D_8010CFD8].anims[PARTNER_ANIM_INDEX_IDLE];
|
||||
D_8010CFCE++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ dlabel D_80242F00_B4D970
|
||||
.word 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000004C, 0x00000165, 0x00000000, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF10, 0xFFFFFEFD, 0x00000005, 0x00000006, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x0000006F, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000072, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
||||
dlabel D_80242FC8_B4DA38
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000011, 0x00000043, 0x00000002, SetPlayerAnimation, 0x0001002A, 0x00000043, 0x00000003, func_80240350_B4ADC0, 0x0000006E, 0xFAA2B58B, 0x00000057, 0x00000000, 0x00000043, 0x00000004, ModifyColliderFlags, 0x00000000, 0x0000004C, 0x7FFFFE00, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFEFD, 0x0000003C, 0x0000001E, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x0000006F, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000072, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000043, 0x00000005, MakeLerp, 0x0000003C, 0x00000000, 0x0000001E, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x0000006F, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000072, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000043, 0x00000002, SetPlayerAnimation, 0x00010002, 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000004C, 0x0000209D, 0x00000000, 0x00000043, 0x0000000F, PlayEffect, 0x00000006, 0x00000004, 0xFFFFFF47, 0x00000000, 0x00000140, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000011, 0x00000043, 0x00000002, SetPlayerAnimation, 0x0001002A, 0x00000043, 0x00000003, jan_05_UnkShadowFunc001, 0x0000006E, 0xFAA2B58B, 0x00000057, 0x00000000, 0x00000043, 0x00000004, ModifyColliderFlags, 0x00000000, 0x0000004C, 0x7FFFFE00, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFEFD, 0x0000003C, 0x0000001E, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x0000006F, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000072, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000043, 0x00000005, MakeLerp, 0x0000003C, 0x00000000, 0x0000001E, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x0000006F, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000072, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000043, 0x00000002, SetPlayerAnimation, 0x00010002, 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000004C, 0x0000209D, 0x00000000, 0x00000043, 0x0000000F, PlayEffect, 0x00000006, 0x00000004, 0xFFFFFF47, 0x00000000, 0x00000140, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
||||
dlabel D_80243204_B4DC74
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000032, 0x00000024, 0x00000002, 0xFAA2B58B, 0x00000001, 0x00000057, 0x00000000, 0x00000043, 0x00000005, MakeLerp, 0x00000000, 0xFFFFFFA6, 0x0000003C, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x0000006F, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000072, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000006, RotateGroup, 0x0000006F, 0xFE363C80, 0x00000000, 0x00000000, 0x00000001, 0x00000043, 0x00000006, RotateGroup, 0x00000072, 0xFE363C80, 0x00000000, 0x00000000, 0x00000001, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000056, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000057, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
@ -9,7 +9,7 @@ dlabel D_802438E0_B56110
|
||||
.word 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000005A, 0x00000165, 0x00000000, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF6A, 0xFFFFFF57, 0x00000005, 0x00000006, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000083, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000086, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
||||
dlabel D_802439A8_B561D8
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000011, 0x00000043, 0x00000002, SetPlayerAnimation, 0x0001002A, 0x00000043, 0x00000003, func_802403B0_B52BE0, 0x00000082, 0xFAA2B58B, 0x00000057, 0x00000000, 0x00000043, 0x00000004, ModifyColliderFlags, 0x00000000, 0x0000005A, 0x7FFFFE00, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF57, 0x0000003C, 0x0000001E, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000083, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000086, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000043, 0x00000005, MakeLerp, 0x0000003C, 0x00000000, 0x0000001E, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000083, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000086, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000043, 0x00000002, SetPlayerAnimation, 0x00010002, 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000005A, 0x0000209D, 0x00000000, 0x00000043, 0x0000000F, PlayEffect, 0x00000006, 0x00000004, 0xFFFFFF9C, 0x00000000, 0x0000003C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000011, 0x00000043, 0x00000002, SetPlayerAnimation, 0x0001002A, 0x00000043, 0x00000003, jan_06_UnkShadowFunc001, 0x00000082, 0xFAA2B58B, 0x00000057, 0x00000000, 0x00000043, 0x00000004, ModifyColliderFlags, 0x00000000, 0x0000005A, 0x7FFFFE00, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF57, 0x0000003C, 0x0000001E, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000083, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000086, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000043, 0x00000005, MakeLerp, 0x0000003C, 0x00000000, 0x0000001E, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000083, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000086, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000043, 0x00000002, SetPlayerAnimation, 0x00010002, 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000005A, 0x0000209D, 0x00000000, 0x00000043, 0x0000000F, PlayEffect, 0x00000006, 0x00000004, 0xFFFFFF9C, 0x00000000, 0x0000003C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
||||
dlabel D_80243BE4_B56414
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000032, 0x00000024, 0x00000002, 0xFAA2B58B, 0x00000001, 0x00000057, 0x00000000, 0x00000043, 0x00000005, MakeLerp, 0x00000000, 0xFFFFFFA6, 0x0000003C, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000083, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x00000086, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000006, RotateGroup, 0x00000083, 0xFE363C80, 0x00000000, 0x00000000, 0x00000001, 0x00000043, 0x00000006, RotateGroup, 0x00000086, 0xFE363C80, 0x00000000, 0x00000000, 0x00000001, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000056, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000057, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
@ -54,7 +54,7 @@ dlabel D_80242760_B6EAF0
|
||||
.word 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000001C, 0x00000165, 0x00000000, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF5B, 0xFFFFFF48, 0x00000005, 0x00000006, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000040, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x0000003D, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
||||
dlabel D_80242828_B6EBB8
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000011, 0x00000043, 0x00000002, SetPlayerAnimation, 0x0001002A, 0x00000043, 0x00000003, func_80241130_B6D4C0, 0x0000003F, 0xFAA2B58A, 0x00000057, 0x00000000, 0x00000043, 0x00000004, ModifyColliderFlags, 0x00000000, 0x0000001C, 0x7FFFFE00, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF48, 0x0000003C, 0x0000001E, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000040, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x0000003D, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000043, 0x00000005, MakeLerp, 0x0000003C, 0x00000000, 0x0000001E, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000040, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x0000003D, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000043, 0x00000002, SetPlayerAnimation, 0x00010002, 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000001C, 0x0000209D, 0x00000000, 0x00000043, 0x0000000F, PlayEffect, 0x00000006, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000011, 0x00000043, 0x00000002, SetPlayerAnimation, 0x0001002A, 0x00000043, 0x00000003, jan_10_UnkShadowFunc001, 0x0000003F, 0xFAA2B58A, 0x00000057, 0x00000000, 0x00000043, 0x00000004, ModifyColliderFlags, 0x00000000, 0x0000001C, 0x7FFFFE00, 0x00000043, 0x00000005, MakeLerp, 0xFFFFFF48, 0x0000003C, 0x0000001E, 0x00000004, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000040, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x0000003D, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x00000043, 0x00000005, MakeLerp, 0x0000003C, 0x00000000, 0x0000001E, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000040, 0x00000000, 0xFE363C80, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x0000003D, 0x00000000, 0xFE363C80, 0x00000000, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000043, 0x00000002, SetPlayerAnimation, 0x00010002, 0x00000043, 0x00000004, PlaySoundAtCollider, 0x0000001C, 0x0000209D, 0x00000000, 0x00000043, 0x0000000F, PlayEffect, 0x00000006, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
||||
dlabel D_80242A64_B6EDF4
|
||||
.word 0x00000056, 0x00000000, 0x00000008, 0x00000001, 0x00000032, 0x00000024, 0x00000002, 0xFAA2B58A, 0x00000001, 0x00000057, 0x00000000, 0x00000043, 0x00000005, MakeLerp, 0x00000000, 0x0000005A, 0x0000003C, 0x00000002, 0x00000005, 0x00000001, 0x00000000, 0x00000043, 0x00000001, UpdateLerp, 0x00000043, 0x00000005, TranslateGroup, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000005, TranslateGroup, 0x0000003D, 0x00000000, 0x00000000, 0x00000000, 0x00000043, 0x00000006, RotateGroup, 0x00000040, 0xFE363C80, 0x00000000, 0x00000000, 0x00000001, 0x00000043, 0x00000006, RotateGroup, 0x0000003D, 0xFE363C80, 0x00000000, 0x00000000, 0x00000001, 0x00000008, 0x00000001, 0x00000001, 0x0000000A, 0x00000002, 0xFE363C81, 0x00000000, 0x00000007, 0x00000000, 0x00000013, 0x00000000, 0x00000006, 0x00000000, 0x00000056, 0x00000000, 0x00000043, 0x00000005, ShakeCam, 0x00000000, 0x00000002, 0x00000003, 0x00000001, 0x00000057, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000
|
||||
|
@ -1,417 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel btl_state_update_end_turn
|
||||
/* 1722B8 802439D8 27BDFFB0 */ addiu $sp, $sp, -0x50
|
||||
/* 1722BC 802439DC AFB60028 */ sw $s6, 0x28($sp)
|
||||
/* 1722C0 802439E0 3C16800E */ lui $s6, %hi(gBattleStatus)
|
||||
/* 1722C4 802439E4 26D6C070 */ addiu $s6, $s6, %lo(gBattleStatus)
|
||||
/* 1722C8 802439E8 AFB7002C */ sw $s7, 0x2c($sp)
|
||||
/* 1722CC 802439EC 3C178011 */ lui $s7, %hi(gPlayerData)
|
||||
/* 1722D0 802439F0 26F7F290 */ addiu $s7, $s7, %lo(gPlayerData)
|
||||
/* 1722D4 802439F4 AFBF0030 */ sw $ra, 0x30($sp)
|
||||
/* 1722D8 802439F8 AFB50024 */ sw $s5, 0x24($sp)
|
||||
/* 1722DC 802439FC AFB40020 */ sw $s4, 0x20($sp)
|
||||
/* 1722E0 80243A00 AFB3001C */ sw $s3, 0x1c($sp)
|
||||
/* 1722E4 80243A04 AFB20018 */ sw $s2, 0x18($sp)
|
||||
/* 1722E8 80243A08 AFB10014 */ sw $s1, 0x14($sp)
|
||||
/* 1722EC 80243A0C AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 1722F0 80243A10 F7B80048 */ sdc1 $f24, 0x48($sp)
|
||||
/* 1722F4 80243A14 F7B60040 */ sdc1 $f22, 0x40($sp)
|
||||
/* 1722F8 80243A18 F7B40038 */ sdc1 $f20, 0x38($sp)
|
||||
/* 1722FC 80243A1C 8ED500D8 */ lw $s5, 0xd8($s6)
|
||||
/* 172300 80243A20 3C02800E */ lui $v0, %hi(gBattleState2)
|
||||
/* 172304 80243A24 8C42C4DC */ lw $v0, %lo(gBattleState2)($v0)
|
||||
/* 172308 80243A28 8ED300DC */ lw $s3, 0xdc($s6)
|
||||
/* 17230C 80243A2C 1440002E */ bnez $v0, .L80243AE8
|
||||
/* 172310 80243A30 0000A02D */ daddu $s4, $zero, $zero
|
||||
/* 172314 80243A34 0280882D */ daddu $s1, $s4, $zero
|
||||
/* 172318 80243A38 02C0902D */ daddu $s2, $s6, $zero
|
||||
.L80243A3C:
|
||||
/* 17231C 80243A3C 8E5000E0 */ lw $s0, 0xe0($s2)
|
||||
/* 172320 80243A40 5200000B */ beql $s0, $zero, .L80243A70
|
||||
/* 172324 80243A44 26310001 */ addiu $s1, $s1, 1
|
||||
/* 172328 80243A48 8E0201D8 */ lw $v0, 0x1d8($s0)
|
||||
/* 17232C 80243A4C 50400008 */ beql $v0, $zero, .L80243A70
|
||||
/* 172330 80243A50 26310001 */ addiu $s1, $s1, 1
|
||||
/* 172334 80243A54 8E0401E8 */ lw $a0, 0x1e8($s0)
|
||||
/* 172338 80243A58 0C0B1059 */ jal does_script_exist
|
||||
/* 17233C 80243A5C 00000000 */ nop
|
||||
/* 172340 80243A60 50400002 */ beql $v0, $zero, .L80243A6C
|
||||
/* 172344 80243A64 AE0001D8 */ sw $zero, 0x1d8($s0)
|
||||
/* 172348 80243A68 24140001 */ addiu $s4, $zero, 1
|
||||
.L80243A6C:
|
||||
/* 17234C 80243A6C 26310001 */ addiu $s1, $s1, 1
|
||||
.L80243A70:
|
||||
/* 172350 80243A70 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 172354 80243A74 1440FFF1 */ bnez $v0, .L80243A3C
|
||||
/* 172358 80243A78 26520004 */ addiu $s2, $s2, 4
|
||||
/* 17235C 80243A7C 1680001A */ bnez $s4, .L80243AE8
|
||||
/* 172360 80243A80 00000000 */ nop
|
||||
/* 172364 80243A84 0000882D */ daddu $s1, $zero, $zero
|
||||
/* 172368 80243A88 02C0902D */ daddu $s2, $s6, $zero
|
||||
.L80243A8C:
|
||||
/* 17236C 80243A8C 8E5000E0 */ lw $s0, 0xe0($s2)
|
||||
/* 172370 80243A90 5200000B */ beql $s0, $zero, .L80243AC0
|
||||
/* 172374 80243A94 26310001 */ addiu $s1, $s1, 1
|
||||
/* 172378 80243A98 8E0201D4 */ lw $v0, 0x1d4($s0)
|
||||
/* 17237C 80243A9C 50400008 */ beql $v0, $zero, .L80243AC0
|
||||
/* 172380 80243AA0 26310001 */ addiu $s1, $s1, 1
|
||||
/* 172384 80243AA4 8E0401E4 */ lw $a0, 0x1e4($s0)
|
||||
/* 172388 80243AA8 0C0B1059 */ jal does_script_exist
|
||||
/* 17238C 80243AAC 00000000 */ nop
|
||||
/* 172390 80243AB0 50400002 */ beql $v0, $zero, .L80243ABC
|
||||
/* 172394 80243AB4 AE0001D4 */ sw $zero, 0x1d4($s0)
|
||||
/* 172398 80243AB8 24140001 */ addiu $s4, $zero, 1
|
||||
.L80243ABC:
|
||||
/* 17239C 80243ABC 26310001 */ addiu $s1, $s1, 1
|
||||
.L80243AC0:
|
||||
/* 1723A0 80243AC0 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 1723A4 80243AC4 1440FFF1 */ bnez $v0, .L80243A8C
|
||||
/* 1723A8 80243AC8 26520004 */ addiu $s2, $s2, 4
|
||||
/* 1723AC 80243ACC 16800006 */ bnez $s4, .L80243AE8
|
||||
/* 1723B0 80243AD0 00000000 */ nop
|
||||
/* 1723B4 80243AD4 0C093903 */ jal btl_cam_use_preset
|
||||
/* 1723B8 80243AD8 24040002 */ addiu $a0, $zero, 2
|
||||
/* 1723BC 80243ADC 24020001 */ addiu $v0, $zero, 1
|
||||
/* 1723C0 80243AE0 3C01800E */ lui $at, %hi(gBattleState2)
|
||||
/* 1723C4 80243AE4 AC22C4DC */ sw $v0, %lo(gBattleState2)($at)
|
||||
.L80243AE8:
|
||||
/* 1723C8 80243AE8 3C04800E */ lui $a0, %hi(gBattleState2)
|
||||
/* 1723CC 80243AEC 2484C4DC */ addiu $a0, $a0, %lo(gBattleState2)
|
||||
/* 1723D0 80243AF0 8C830000 */ lw $v1, ($a0)
|
||||
/* 1723D4 80243AF4 24020001 */ addiu $v0, $zero, 1
|
||||
/* 1723D8 80243AF8 1462002A */ bne $v1, $v0, .L80243BA4
|
||||
/* 1723DC 80243AFC 00000000 */ nop
|
||||
/* 1723E0 80243B00 3C03800E */ lui $v1, %hi(gBattleStatus)
|
||||
/* 1723E4 80243B04 2463C070 */ addiu $v1, $v1, %lo(gBattleStatus)
|
||||
/* 1723E8 80243B08 8C620004 */ lw $v0, 4($v1)
|
||||
/* 1723EC 80243B0C 30420040 */ andi $v0, $v0, 0x40
|
||||
/* 1723F0 80243B10 14400007 */ bnez $v0, .L80243B30
|
||||
/* 1723F4 80243B14 2402000C */ addiu $v0, $zero, 0xc
|
||||
/* 1723F8 80243B18 8C620000 */ lw $v0, ($v1)
|
||||
/* 1723FC 80243B1C 3C030010 */ lui $v1, 0x10
|
||||
/* 172400 80243B20 00431024 */ and $v0, $v0, $v1
|
||||
/* 172404 80243B24 14400004 */ bnez $v0, .L80243B38
|
||||
/* 172408 80243B28 3C03F7FF */ lui $v1, 0xf7ff
|
||||
/* 17240C 80243B2C 2402000C */ addiu $v0, $zero, 0xc
|
||||
.L80243B30:
|
||||
/* 172410 80243B30 08090EE9 */ j .L80243BA4
|
||||
/* 172414 80243B34 AC820000 */ sw $v0, ($a0)
|
||||
.L80243B38:
|
||||
/* 172418 80243B38 8EA20000 */ lw $v0, ($s5)
|
||||
/* 17241C 80243B3C 3463FFFF */ ori $v1, $v1, 0xffff
|
||||
/* 172420 80243B40 00431024 */ and $v0, $v0, $v1
|
||||
/* 172424 80243B44 AEA20000 */ sw $v0, ($s5)
|
||||
/* 172428 80243B48 8E620000 */ lw $v0, ($s3)
|
||||
/* 17242C 80243B4C 00431024 */ and $v0, $v0, $v1
|
||||
/* 172430 80243B50 AE620000 */ sw $v0, ($s3)
|
||||
/* 172434 80243B54 8EA20000 */ lw $v0, ($s5)
|
||||
/* 172438 80243B58 3C030400 */ lui $v1, 0x400
|
||||
/* 17243C 80243B5C 00431025 */ or $v0, $v0, $v1
|
||||
/* 172440 80243B60 AEA20000 */ sw $v0, ($s5)
|
||||
/* 172444 80243B64 8E620000 */ lw $v0, ($s3)
|
||||
/* 172448 80243B68 C6600138 */ lwc1 $f0, 0x138($s3)
|
||||
/* 17244C 80243B6C C6620140 */ lwc1 $f2, 0x140($s3)
|
||||
/* 172450 80243B70 00431025 */ or $v0, $v0, $v1
|
||||
/* 172454 80243B74 AE620000 */ sw $v0, ($s3)
|
||||
/* 172458 80243B78 E660000C */ swc1 $f0, 0xc($s3)
|
||||
/* 17245C 80243B7C E6620014 */ swc1 $f2, 0x14($s3)
|
||||
/* 172460 80243B80 C6A00138 */ lwc1 $f0, 0x138($s5)
|
||||
/* 172464 80243B84 2402000B */ addiu $v0, $zero, 0xb
|
||||
/* 172468 80243B88 AC820000 */ sw $v0, ($a0)
|
||||
/* 17246C 80243B8C E6600018 */ swc1 $f0, 0x18($s3)
|
||||
/* 172470 80243B90 C6A00140 */ lwc1 $f0, 0x140($s5)
|
||||
/* 172474 80243B94 24020004 */ addiu $v0, $zero, 4
|
||||
/* 172478 80243B98 A6620070 */ sh $v0, 0x70($s3)
|
||||
/* 17247C 80243B9C AE600054 */ sw $zero, 0x54($s3)
|
||||
/* 172480 80243BA0 E6600020 */ swc1 $f0, 0x20($s3)
|
||||
.L80243BA4:
|
||||
/* 172484 80243BA4 3C03800E */ lui $v1, %hi(gBattleState2)
|
||||
/* 172488 80243BA8 8C63C4DC */ lw $v1, %lo(gBattleState2)($v1)
|
||||
/* 17248C 80243BAC 2402000B */ addiu $v0, $zero, 0xb
|
||||
/* 172490 80243BB0 1462007D */ bne $v1, $v0, .L80243DA8
|
||||
/* 172494 80243BB4 2402000C */ addiu $v0, $zero, 0xc
|
||||
/* 172498 80243BB8 86620070 */ lh $v0, 0x70($s3)
|
||||
/* 17249C 80243BBC 10400022 */ beqz $v0, .L80243C48
|
||||
/* 1724A0 80243BC0 00000000 */ nop
|
||||
/* 1724A4 80243BC4 C6600018 */ lwc1 $f0, 0x18($s3)
|
||||
/* 1724A8 80243BC8 C6680144 */ lwc1 $f8, 0x144($s3)
|
||||
/* 1724AC 80243BCC C6620020 */ lwc1 $f2, 0x20($s3)
|
||||
/* 1724B0 80243BD0 46080001 */ sub.s $f0, $f0, $f8
|
||||
/* 1724B4 80243BD4 C664014C */ lwc1 $f4, 0x14c($s3)
|
||||
/* 1724B8 80243BD8 46041081 */ sub.s $f2, $f2, $f4
|
||||
/* 1724BC 80243BDC 44823000 */ mtc1 $v0, $f6
|
||||
/* 1724C0 80243BE0 00000000 */ nop
|
||||
/* 1724C4 80243BE4 468031A0 */ cvt.s.w $f6, $f6
|
||||
/* 1724C8 80243BE8 46060003 */ div.s $f0, $f0, $f6
|
||||
/* 1724CC 80243BEC 46004200 */ add.s $f8, $f8, $f0
|
||||
/* 1724D0 80243BF0 46003006 */ mov.s $f0, $f6
|
||||
/* 1724D4 80243BF4 46061083 */ div.s $f2, $f2, $f6
|
||||
/* 1724D8 80243BF8 C660000C */ lwc1 $f0, 0xc($s3)
|
||||
/* 1724DC 80243BFC 46022100 */ add.s $f4, $f4, $f2
|
||||
/* 1724E0 80243C00 E6680144 */ swc1 $f8, 0x144($s3)
|
||||
/* 1724E4 80243C04 E664014C */ swc1 $f4, 0x14c($s3)
|
||||
/* 1724E8 80243C08 C6A40144 */ lwc1 $f4, 0x144($s5)
|
||||
/* 1724EC 80243C0C 46040001 */ sub.s $f0, $f0, $f4
|
||||
/* 1724F0 80243C10 46003086 */ mov.s $f2, $f6
|
||||
/* 1724F4 80243C14 46060003 */ div.s $f0, $f0, $f6
|
||||
/* 1724F8 80243C18 46002100 */ add.s $f4, $f4, $f0
|
||||
/* 1724FC 80243C1C E6A40144 */ swc1 $f4, 0x144($s5)
|
||||
/* 172500 80243C20 C6600014 */ lwc1 $f0, 0x14($s3)
|
||||
/* 172504 80243C24 C6A4014C */ lwc1 $f4, 0x14c($s5)
|
||||
/* 172508 80243C28 86620070 */ lh $v0, 0x70($s3)
|
||||
/* 17250C 80243C2C 46040001 */ sub.s $f0, $f0, $f4
|
||||
/* 172510 80243C30 44821000 */ mtc1 $v0, $f2
|
||||
/* 172514 80243C34 00000000 */ nop
|
||||
/* 172518 80243C38 468010A0 */ cvt.s.w $f2, $f2
|
||||
/* 17251C 80243C3C 46020003 */ div.s $f0, $f0, $f2
|
||||
/* 172520 80243C40 46002100 */ add.s $f4, $f4, $f0
|
||||
/* 172524 80243C44 E6A4014C */ swc1 $f4, 0x14c($s5)
|
||||
.L80243C48:
|
||||
/* 172528 80243C48 C66C0054 */ lwc1 $f12, 0x54($s3)
|
||||
/* 17252C 80243C4C 3C0140C9 */ lui $at, 0x40c9
|
||||
/* 172530 80243C50 34210FD0 */ ori $at, $at, 0xfd0
|
||||
/* 172534 80243C54 4481B000 */ mtc1 $at, $f22
|
||||
/* 172538 80243C58 00000000 */ nop
|
||||
/* 17253C 80243C5C 46166302 */ mul.s $f12, $f12, $f22
|
||||
/* 172540 80243C60 00000000 */ nop
|
||||
/* 172544 80243C64 3C0143B4 */ lui $at, 0x43b4
|
||||
/* 172548 80243C68 4481C000 */ mtc1 $at, $f24
|
||||
/* 17254C 80243C6C 3C014180 */ lui $at, 0x4180
|
||||
/* 172550 80243C70 4481A000 */ mtc1 $at, $f20
|
||||
/* 172554 80243C74 0C00A85B */ jal sin_rad
|
||||
/* 172558 80243C78 46186303 */ div.s $f12, $f12, $f24
|
||||
/* 17255C 80243C7C 46140002 */ mul.s $f0, $f0, $f20
|
||||
/* 172560 80243C80 00000000 */ nop
|
||||
/* 172564 80243C84 C662014C */ lwc1 $f2, 0x14c($s3)
|
||||
/* 172568 80243C88 46001081 */ sub.s $f2, $f2, $f0
|
||||
/* 17256C 80243C8C C66C0054 */ lwc1 $f12, 0x54($s3)
|
||||
/* 172570 80243C90 0C00A6C9 */ jal clamp_angle
|
||||
/* 172574 80243C94 E662014C */ swc1 $f2, 0x14c($s3)
|
||||
/* 172578 80243C98 C66C0054 */ lwc1 $f12, 0x54($s3)
|
||||
/* 17257C 80243C9C 46166302 */ mul.s $f12, $f12, $f22
|
||||
/* 172580 80243CA0 00000000 */ nop
|
||||
/* 172584 80243CA4 E660018C */ swc1 $f0, 0x18c($s3)
|
||||
/* 172588 80243CA8 0C00A85B */ jal sin_rad
|
||||
/* 17258C 80243CAC 46186303 */ div.s $f12, $f12, $f24
|
||||
/* 172590 80243CB0 46140002 */ mul.s $f0, $f0, $f20
|
||||
/* 172594 80243CB4 00000000 */ nop
|
||||
/* 172598 80243CB8 C6A2014C */ lwc1 $f2, 0x14c($s5)
|
||||
/* 17259C 80243CBC 46001080 */ add.s $f2, $f2, $f0
|
||||
/* 1725A0 80243CC0 E6A2014C */ swc1 $f2, 0x14c($s5)
|
||||
/* 1725A4 80243CC4 0C00A6C9 */ jal clamp_angle
|
||||
/* 1725A8 80243CC8 C66C0054 */ lwc1 $f12, 0x54($s3)
|
||||
/* 1725AC 80243CCC E6A0018C */ swc1 $f0, 0x18c($s5)
|
||||
/* 1725B0 80243CD0 C6600054 */ lwc1 $f0, 0x54($s3)
|
||||
/* 1725B4 80243CD4 3C0142B4 */ lui $at, 0x42b4
|
||||
/* 1725B8 80243CD8 44811000 */ mtc1 $at, $f2
|
||||
/* 1725BC 80243CDC 86620070 */ lh $v0, 0x70($s3)
|
||||
/* 1725C0 80243CE0 46020000 */ add.s $f0, $f0, $f2
|
||||
/* 1725C4 80243CE4 96630070 */ lhu $v1, 0x70($s3)
|
||||
/* 1725C8 80243CE8 10400004 */ beqz $v0, .L80243CFC
|
||||
/* 1725CC 80243CEC E6600054 */ swc1 $f0, 0x54($s3)
|
||||
/* 1725D0 80243CF0 2462FFFF */ addiu $v0, $v1, -1
|
||||
/* 1725D4 80243CF4 08090F67 */ j .L80243D9C
|
||||
/* 1725D8 80243CF8 A6620070 */ sh $v0, 0x70($s3)
|
||||
.L80243CFC:
|
||||
/* 1725DC 80243CFC C6600018 */ lwc1 $f0, 0x18($s3)
|
||||
/* 1725E0 80243D00 C6620020 */ lwc1 $f2, 0x20($s3)
|
||||
/* 1725E4 80243D04 C664000C */ lwc1 $f4, 0xc($s3)
|
||||
/* 1725E8 80243D08 E6600144 */ swc1 $f0, 0x144($s3)
|
||||
/* 1725EC 80243D0C E662014C */ swc1 $f2, 0x14c($s3)
|
||||
/* 1725F0 80243D10 E6A40144 */ swc1 $f4, 0x144($s5)
|
||||
/* 1725F4 80243D14 C6600014 */ lwc1 $f0, 0x14($s3)
|
||||
/* 1725F8 80243D18 E6A0014C */ swc1 $f0, 0x14c($s5)
|
||||
/* 1725FC 80243D1C C6600144 */ lwc1 $f0, 0x144($s3)
|
||||
/* 172600 80243D20 C662014C */ lwc1 $f2, 0x14c($s3)
|
||||
/* 172604 80243D24 3C030800 */ lui $v1, 0x800
|
||||
/* 172608 80243D28 E6600138 */ swc1 $f0, 0x138($s3)
|
||||
/* 17260C 80243D2C E6620140 */ swc1 $f2, 0x140($s3)
|
||||
/* 172610 80243D30 C6A00144 */ lwc1 $f0, 0x144($s5)
|
||||
/* 172614 80243D34 8EA20000 */ lw $v0, ($s5)
|
||||
/* 172618 80243D38 C6A2014C */ lwc1 $f2, 0x14c($s5)
|
||||
/* 17261C 80243D3C 00431025 */ or $v0, $v0, $v1
|
||||
/* 172620 80243D40 E6A00138 */ swc1 $f0, 0x138($s5)
|
||||
/* 172624 80243D44 E6A20140 */ swc1 $f2, 0x140($s5)
|
||||
/* 172628 80243D48 AEA20000 */ sw $v0, ($s5)
|
||||
/* 17262C 80243D4C 8E620000 */ lw $v0, ($s3)
|
||||
/* 172630 80243D50 3C04800E */ lui $a0, %hi(gBattleStatus)
|
||||
/* 172634 80243D54 2484C070 */ addiu $a0, $a0, %lo(gBattleStatus)
|
||||
/* 172638 80243D58 00431025 */ or $v0, $v0, $v1
|
||||
/* 17263C 80243D5C AE620000 */ sw $v0, ($s3)
|
||||
/* 172640 80243D60 8C820004 */ lw $v0, 4($a0)
|
||||
/* 172644 80243D64 30420040 */ andi $v0, $v0, 0x40
|
||||
/* 172648 80243D68 10400004 */ beqz $v0, .L80243D7C
|
||||
/* 17264C 80243D6C 3C030010 */ lui $v1, 0x10
|
||||
/* 172650 80243D70 8C820000 */ lw $v0, ($a0)
|
||||
/* 172654 80243D74 08090F63 */ j .L80243D8C
|
||||
/* 172658 80243D78 00431025 */ or $v0, $v0, $v1
|
||||
.L80243D7C:
|
||||
/* 17265C 80243D7C 3C03FFEF */ lui $v1, 0xffef
|
||||
/* 172660 80243D80 8C820000 */ lw $v0, ($a0)
|
||||
/* 172664 80243D84 3463FFFF */ ori $v1, $v1, 0xffff
|
||||
/* 172668 80243D88 00431024 */ and $v0, $v0, $v1
|
||||
.L80243D8C:
|
||||
/* 17266C 80243D8C AC820000 */ sw $v0, ($a0)
|
||||
/* 172670 80243D90 2402000C */ addiu $v0, $zero, 0xc
|
||||
/* 172674 80243D94 3C01800E */ lui $at, %hi(gBattleState2)
|
||||
/* 172678 80243D98 AC22C4DC */ sw $v0, %lo(gBattleState2)($at)
|
||||
.L80243D9C:
|
||||
/* 17267C 80243D9C 3C03800E */ lui $v1, %hi(gBattleState2)
|
||||
/* 172680 80243DA0 8C63C4DC */ lw $v1, %lo(gBattleState2)($v1)
|
||||
/* 172684 80243DA4 2402000C */ addiu $v0, $zero, 0xc
|
||||
.L80243DA8:
|
||||
/* 172688 80243DA8 1462004C */ bne $v1, $v0, .L80243EDC
|
||||
/* 17268C 80243DAC 3C02FFFE */ lui $v0, 0xfffe
|
||||
/* 172690 80243DB0 3C10800E */ lui $s0, %hi(gBattleStatus)
|
||||
/* 172694 80243DB4 2610C070 */ addiu $s0, $s0, %lo(gBattleStatus)
|
||||
/* 172698 80243DB8 8E030004 */ lw $v1, 4($s0)
|
||||
/* 17269C 80243DBC 3442FFFF */ ori $v0, $v0, 0xffff
|
||||
/* 1726A0 80243DC0 00621824 */ and $v1, $v1, $v0
|
||||
/* 1726A4 80243DC4 AE030004 */ sw $v1, 4($s0)
|
||||
/* 1726A8 80243DC8 8EA20000 */ lw $v0, ($s5)
|
||||
/* 1726AC 80243DCC 3C030C00 */ lui $v1, 0xc00
|
||||
/* 1726B0 80243DD0 A2A0021D */ sb $zero, 0x21d($s5)
|
||||
/* 1726B4 80243DD4 00431025 */ or $v0, $v0, $v1
|
||||
/* 1726B8 80243DD8 12600004 */ beqz $s3, .L80243DEC
|
||||
/* 1726BC 80243DDC AEA20000 */ sw $v0, ($s5)
|
||||
/* 1726C0 80243DE0 00431025 */ or $v0, $v0, $v1
|
||||
/* 1726C4 80243DE4 AEA20000 */ sw $v0, ($s5)
|
||||
/* 1726C8 80243DE8 A260021D */ sb $zero, 0x21d($s3)
|
||||
.L80243DEC:
|
||||
/* 1726CC 80243DEC 0C098298 */ jal func_80260A60
|
||||
/* 1726D0 80243DF0 00000000 */ nop
|
||||
/* 1726D4 80243DF4 3C04FFBF */ lui $a0, 0xffbf
|
||||
/* 1726D8 80243DF8 3484FFFF */ ori $a0, $a0, 0xffff
|
||||
/* 1726DC 80243DFC 8E030000 */ lw $v1, ($s0)
|
||||
/* 1726E0 80243E00 96E20290 */ lhu $v0, 0x290($s7)
|
||||
/* 1726E4 80243E04 00641824 */ and $v1, $v1, $a0
|
||||
/* 1726E8 80243E08 24420020 */ addiu $v0, $v0, 0x20
|
||||
/* 1726EC 80243E0C AE030000 */ sw $v1, ($s0)
|
||||
/* 1726F0 80243E10 A6E20290 */ sh $v0, 0x290($s7)
|
||||
/* 1726F4 80243E14 00021400 */ sll $v0, $v0, 0x10
|
||||
/* 1726F8 80243E18 82E3028E */ lb $v1, 0x28e($s7)
|
||||
/* 1726FC 80243E1C 00021403 */ sra $v0, $v0, 0x10
|
||||
/* 172700 80243E20 00031A00 */ sll $v1, $v1, 8
|
||||
/* 172704 80243E24 0062102A */ slt $v0, $v1, $v0
|
||||
/* 172708 80243E28 54400001 */ bnel $v0, $zero, .L80243E30
|
||||
/* 17270C 80243E2C A6E30290 */ sh $v1, 0x290($s7)
|
||||
.L80243E30:
|
||||
/* 172710 80243E30 0000882D */ daddu $s1, $zero, $zero
|
||||
/* 172714 80243E34 2414000B */ addiu $s4, $zero, 0xb
|
||||
/* 172718 80243E38 02C0902D */ daddu $s2, $s6, $zero
|
||||
.L80243E3C:
|
||||
/* 17271C 80243E3C 8E5000E0 */ lw $s0, 0xe0($s2)
|
||||
/* 172720 80243E40 52000010 */ beql $s0, $zero, .L80243E84
|
||||
/* 172724 80243E44 26310001 */ addiu $s1, $s1, 1
|
||||
/* 172728 80243E48 8E0201CC */ lw $v0, 0x1cc($s0)
|
||||
/* 17272C 80243E4C 5040000D */ beql $v0, $zero, .L80243E84
|
||||
/* 172730 80243E50 26310001 */ addiu $s1, $s1, 1
|
||||
/* 172734 80243E54 2405000A */ addiu $a1, $zero, 0xa
|
||||
/* 172738 80243E58 A2D401A7 */ sb $s4, 0x1a7($s6)
|
||||
/* 17273C 80243E5C 8E0401CC */ lw $a0, 0x1cc($s0)
|
||||
/* 172740 80243E60 0C0B0CF8 */ jal start_script
|
||||
/* 172744 80243E64 0000302D */ daddu $a2, $zero, $zero
|
||||
/* 172748 80243E68 0040182D */ daddu $v1, $v0, $zero
|
||||
/* 17274C 80243E6C AE0301DC */ sw $v1, 0x1dc($s0)
|
||||
/* 172750 80243E70 8C620144 */ lw $v0, 0x144($v1)
|
||||
/* 172754 80243E74 AE0201EC */ sw $v0, 0x1ec($s0)
|
||||
/* 172758 80243E78 36220200 */ ori $v0, $s1, 0x200
|
||||
/* 17275C 80243E7C AC620148 */ sw $v0, 0x148($v1)
|
||||
/* 172760 80243E80 26310001 */ addiu $s1, $s1, 1
|
||||
.L80243E84:
|
||||
/* 172764 80243E84 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 172768 80243E88 1440FFEC */ bnez $v0, .L80243E3C
|
||||
/* 17276C 80243E8C 26520004 */ addiu $s2, $s2, 4
|
||||
/* 172770 80243E90 12600010 */ beqz $s3, .L80243ED4
|
||||
/* 172774 80243E94 24020002 */ addiu $v0, $zero, 2
|
||||
/* 172778 80243E98 8E6201CC */ lw $v0, 0x1cc($s3)
|
||||
/* 17277C 80243E9C 1040000C */ beqz $v0, .L80243ED0
|
||||
/* 172780 80243EA0 2405000A */ addiu $a1, $zero, 0xa
|
||||
/* 172784 80243EA4 2402000B */ addiu $v0, $zero, 0xb
|
||||
/* 172788 80243EA8 A2C201A7 */ sb $v0, 0x1a7($s6)
|
||||
/* 17278C 80243EAC 8E6401CC */ lw $a0, 0x1cc($s3)
|
||||
/* 172790 80243EB0 0C0B0CF8 */ jal start_script
|
||||
/* 172794 80243EB4 0000302D */ daddu $a2, $zero, $zero
|
||||
/* 172798 80243EB8 0040182D */ daddu $v1, $v0, $zero
|
||||
/* 17279C 80243EBC AE6301DC */ sw $v1, 0x1dc($s3)
|
||||
/* 1727A0 80243EC0 8C620144 */ lw $v0, 0x144($v1)
|
||||
/* 1727A4 80243EC4 AE6201EC */ sw $v0, 0x1ec($s3)
|
||||
/* 1727A8 80243EC8 24020100 */ addiu $v0, $zero, 0x100
|
||||
/* 1727AC 80243ECC AC620148 */ sw $v0, 0x148($v1)
|
||||
.L80243ED0:
|
||||
/* 1727B0 80243ED0 24020002 */ addiu $v0, $zero, 2
|
||||
.L80243ED4:
|
||||
/* 1727B4 80243ED4 3C01800E */ lui $at, %hi(gBattleState2)
|
||||
/* 1727B8 80243ED8 AC22C4DC */ sw $v0, %lo(gBattleState2)($at)
|
||||
.L80243EDC:
|
||||
/* 1727BC 80243EDC 3C03800E */ lui $v1, %hi(gBattleState2)
|
||||
/* 1727C0 80243EE0 8C63C4DC */ lw $v1, %lo(gBattleState2)($v1)
|
||||
/* 1727C4 80243EE4 24020002 */ addiu $v0, $zero, 2
|
||||
/* 1727C8 80243EE8 14620026 */ bne $v1, $v0, .L80243F84
|
||||
/* 1727CC 80243EEC 28620005 */ slti $v0, $v1, 5
|
||||
/* 1727D0 80243EF0 0000A02D */ daddu $s4, $zero, $zero
|
||||
/* 1727D4 80243EF4 0280882D */ daddu $s1, $s4, $zero
|
||||
/* 1727D8 80243EF8 02C0902D */ daddu $s2, $s6, $zero
|
||||
.L80243EFC:
|
||||
/* 1727DC 80243EFC 8E5000E0 */ lw $s0, 0xe0($s2)
|
||||
/* 1727E0 80243F00 5200000A */ beql $s0, $zero, .L80243F2C
|
||||
/* 1727E4 80243F04 26310001 */ addiu $s1, $s1, 1
|
||||
/* 1727E8 80243F08 8E0201CC */ lw $v0, 0x1cc($s0)
|
||||
/* 1727EC 80243F0C 50400007 */ beql $v0, $zero, .L80243F2C
|
||||
/* 1727F0 80243F10 26310001 */ addiu $s1, $s1, 1
|
||||
/* 1727F4 80243F14 8E0401EC */ lw $a0, 0x1ec($s0)
|
||||
/* 1727F8 80243F18 0C0B1059 */ jal does_script_exist
|
||||
/* 1727FC 80243F1C 00000000 */ nop
|
||||
/* 172800 80243F20 54400001 */ bnel $v0, $zero, .L80243F28
|
||||
/* 172804 80243F24 24140001 */ addiu $s4, $zero, 1
|
||||
.L80243F28:
|
||||
/* 172808 80243F28 26310001 */ addiu $s1, $s1, 1
|
||||
.L80243F2C:
|
||||
/* 17280C 80243F2C 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 172810 80243F30 1440FFF2 */ bnez $v0, .L80243EFC
|
||||
/* 172814 80243F34 26520004 */ addiu $s2, $s2, 4
|
||||
/* 172818 80243F38 12600008 */ beqz $s3, .L80243F5C
|
||||
/* 17281C 80243F3C 00000000 */ nop
|
||||
/* 172820 80243F40 8E6201CC */ lw $v0, 0x1cc($s3)
|
||||
/* 172824 80243F44 10400005 */ beqz $v0, .L80243F5C
|
||||
/* 172828 80243F48 00000000 */ nop
|
||||
/* 17282C 80243F4C 0C0B1059 */ jal does_script_exist
|
||||
/* 172830 80243F50 8E6401EC */ lw $a0, 0x1ec($s3)
|
||||
/* 172834 80243F54 54400001 */ bnel $v0, $zero, .L80243F5C
|
||||
/* 172838 80243F58 24140001 */ addiu $s4, $zero, 1
|
||||
.L80243F5C:
|
||||
/* 17283C 80243F5C 16800006 */ bnez $s4, .L80243F78
|
||||
/* 172840 80243F60 00000000 */ nop
|
||||
/* 172844 80243F64 0C093903 */ jal btl_cam_use_preset
|
||||
/* 172848 80243F68 24040002 */ addiu $a0, $zero, 2
|
||||
/* 17284C 80243F6C 24020003 */ addiu $v0, $zero, 3
|
||||
/* 172850 80243F70 3C01800E */ lui $at, %hi(gBattleState2)
|
||||
/* 172854 80243F74 AC22C4DC */ sw $v0, %lo(gBattleState2)($at)
|
||||
.L80243F78:
|
||||
/* 172858 80243F78 3C03800E */ lui $v1, %hi(gBattleState2)
|
||||
/* 17285C 80243F7C 8C63C4DC */ lw $v1, %lo(gBattleState2)($v1)
|
||||
/* 172860 80243F80 28620005 */ slti $v0, $v1, 5
|
||||
.L80243F84:
|
||||
/* 172864 80243F84 10400005 */ beqz $v0, .L80243F9C
|
||||
/* 172868 80243F88 28620003 */ slti $v0, $v1, 3
|
||||
/* 17286C 80243F8C 14400003 */ bnez $v0, .L80243F9C
|
||||
/* 172870 80243F90 00000000 */ nop
|
||||
/* 172874 80243F94 0C090464 */ jal btl_set_state
|
||||
/* 172878 80243F98 24040005 */ addiu $a0, $zero, 5
|
||||
.L80243F9C:
|
||||
/* 17287C 80243F9C 8FBF0030 */ lw $ra, 0x30($sp)
|
||||
/* 172880 80243FA0 8FB7002C */ lw $s7, 0x2c($sp)
|
||||
/* 172884 80243FA4 8FB60028 */ lw $s6, 0x28($sp)
|
||||
/* 172888 80243FA8 8FB50024 */ lw $s5, 0x24($sp)
|
||||
/* 17288C 80243FAC 8FB40020 */ lw $s4, 0x20($sp)
|
||||
/* 172890 80243FB0 8FB3001C */ lw $s3, 0x1c($sp)
|
||||
/* 172894 80243FB4 8FB20018 */ lw $s2, 0x18($sp)
|
||||
/* 172898 80243FB8 8FB10014 */ lw $s1, 0x14($sp)
|
||||
/* 17289C 80243FBC 8FB00010 */ lw $s0, 0x10($sp)
|
||||
/* 1728A0 80243FC0 D7B80048 */ ldc1 $f24, 0x48($sp)
|
||||
/* 1728A4 80243FC4 D7B60040 */ ldc1 $f22, 0x40($sp)
|
||||
/* 1728A8 80243FC8 D7B40038 */ ldc1 $f20, 0x38($sp)
|
||||
/* 1728AC 80243FCC 03E00008 */ jr $ra
|
||||
/* 1728B0 80243FD0 27BD0050 */ addiu $sp, $sp, 0x50
|
@ -1,306 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
glabel btl_state_update_enemy_striking_first
|
||||
/* 176F40 80248660 27BDFFD8 */ addiu $sp, $sp, -0x28
|
||||
/* 176F44 80248664 3C058011 */ lui $a1, %hi(gPlayerData)
|
||||
/* 176F48 80248668 24A5F290 */ addiu $a1, $a1, %lo(gPlayerData)
|
||||
/* 176F4C 8024866C AFB3001C */ sw $s3, 0x1c($sp)
|
||||
/* 176F50 80248670 3C13800E */ lui $s3, %hi(gBattleStatus)
|
||||
/* 176F54 80248674 2673C070 */ addiu $s3, $s3, %lo(gBattleStatus)
|
||||
/* 176F58 80248678 AFBF0024 */ sw $ra, 0x24($sp)
|
||||
/* 176F5C 8024867C AFB40020 */ sw $s4, 0x20($sp)
|
||||
/* 176F60 80248680 AFB20018 */ sw $s2, 0x18($sp)
|
||||
/* 176F64 80248684 AFB10014 */ sw $s1, 0x14($sp)
|
||||
/* 176F68 80248688 AFB00010 */ sw $s0, 0x10($sp)
|
||||
/* 176F6C 8024868C 8E7200D8 */ lw $s2, 0xd8($s3)
|
||||
/* 176F70 80248690 3C03800E */ lui $v1, %hi(gBattleState2)
|
||||
/* 176F74 80248694 8C63C4DC */ lw $v1, %lo(gBattleState2)($v1)
|
||||
/* 176F78 80248698 8E7100DC */ lw $s1, 0xdc($s3)
|
||||
/* 176F7C 8024869C 10600005 */ beqz $v1, .L802486B4
|
||||
/* 176F80 802486A0 24020002 */ addiu $v0, $zero, 2
|
||||
/* 176F84 802486A4 1062008A */ beq $v1, $v0, .L802488D0
|
||||
/* 176F88 802486A8 00000000 */ nop
|
||||
/* 176F8C 802486AC 080922A1 */ j .L80248A84
|
||||
/* 176F90 802486B0 00000000 */ nop
|
||||
.L802486B4:
|
||||
/* 176F94 802486B4 94A2029E */ lhu $v0, 0x29e($a1)
|
||||
/* 176F98 802486B8 3C04F7FF */ lui $a0, 0xf7ff
|
||||
/* 176F9C 802486BC A260008C */ sb $zero, 0x8c($s3)
|
||||
/* 176FA0 802486C0 A6600180 */ sh $zero, 0x180($s3)
|
||||
/* 176FA4 802486C4 A260019A */ sb $zero, 0x19a($s3)
|
||||
/* 176FA8 802486C8 24420001 */ addiu $v0, $v0, 1
|
||||
/* 176FAC 802486CC A4A2029E */ sh $v0, 0x29e($a1)
|
||||
/* 176FB0 802486D0 8E620000 */ lw $v0, ($s3)
|
||||
/* 176FB4 802486D4 2403FFFD */ addiu $v1, $zero, -3
|
||||
/* 176FB8 802486D8 00431024 */ and $v0, $v0, $v1
|
||||
/* 176FBC 802486DC AE620000 */ sw $v0, ($s3)
|
||||
/* 176FC0 802486E0 8E420000 */ lw $v0, ($s2)
|
||||
/* 176FC4 802486E4 3484FFFF */ ori $a0, $a0, 0xffff
|
||||
/* 176FC8 802486E8 3C01802A */ lui $at, %hi(D_8029F254)
|
||||
/* 176FCC 802486EC AC20F254 */ sw $zero, %lo(D_8029F254)($at)
|
||||
/* 176FD0 802486F0 00441024 */ and $v0, $v0, $a0
|
||||
/* 176FD4 802486F4 12200004 */ beqz $s1, .L80248708
|
||||
/* 176FD8 802486F8 AE420000 */ sw $v0, ($s2)
|
||||
/* 176FDC 802486FC 8E220000 */ lw $v0, ($s1)
|
||||
/* 176FE0 80248700 00441024 */ and $v0, $v0, $a0
|
||||
/* 176FE4 80248704 AE220000 */ sw $v0, ($s1)
|
||||
.L80248708:
|
||||
/* 176FE8 80248708 3C030100 */ lui $v1, 0x100
|
||||
/* 176FEC 8024870C 34634000 */ ori $v1, $v1, 0x4000
|
||||
/* 176FF0 80248710 0000502D */ daddu $t2, $zero, $zero
|
||||
/* 176FF4 80248714 0140882D */ daddu $s1, $t2, $zero
|
||||
/* 176FF8 80248718 0260282D */ daddu $a1, $s3, $zero
|
||||
/* 176FFC 8024871C 8E620004 */ lw $v0, 4($s3)
|
||||
/* 177000 80248720 0260202D */ daddu $a0, $s3, $zero
|
||||
/* 177004 80248724 00431025 */ or $v0, $v0, $v1
|
||||
/* 177008 80248728 AE620004 */ sw $v0, 4($s3)
|
||||
.L8024872C:
|
||||
/* 17700C 8024872C 8CB000E0 */ lw $s0, 0xe0($a1)
|
||||
/* 177010 80248730 52000006 */ beql $s0, $zero, .L8024874C
|
||||
/* 177014 80248734 26310001 */ addiu $s1, $s1, 1
|
||||
/* 177018 80248738 36220200 */ ori $v0, $s1, 0x200
|
||||
/* 17701C 8024873C A4820140 */ sh $v0, 0x140($a0)
|
||||
/* 177020 80248740 24840002 */ addiu $a0, $a0, 2
|
||||
/* 177024 80248744 254A0001 */ addiu $t2, $t2, 1
|
||||
/* 177028 80248748 26310001 */ addiu $s1, $s1, 1
|
||||
.L8024874C:
|
||||
/* 17702C 8024874C 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 177030 80248750 1440FFF6 */ bnez $v0, .L8024872C
|
||||
/* 177034 80248754 24A50004 */ addiu $a1, $a1, 4
|
||||
/* 177038 80248758 A26A0171 */ sb $t2, 0x171($s3)
|
||||
/* 17703C 8024875C 0000882D */ daddu $s1, $zero, $zero
|
||||
/* 177040 80248760 2542FFFF */ addiu $v0, $t2, -1
|
||||
/* 177044 80248764 18400022 */ blez $v0, .L802487F0
|
||||
/* 177048 80248768 266C0140 */ addiu $t4, $s3, 0x140
|
||||
/* 17704C 8024876C 0040682D */ daddu $t5, $v0, $zero
|
||||
/* 177050 80248770 0180582D */ daddu $t3, $t4, $zero
|
||||
.L80248774:
|
||||
/* 177054 80248774 26270001 */ addiu $a3, $s1, 1
|
||||
/* 177058 80248778 00EA102A */ slt $v0, $a3, $t2
|
||||
/* 17705C 8024877C 50400019 */ beql $v0, $zero, .L802487E4
|
||||
/* 177060 80248780 26310001 */ addiu $s1, $s1, 1
|
||||
/* 177064 80248784 0160482D */ daddu $t1, $t3, $zero
|
||||
/* 177068 80248788 00071040 */ sll $v0, $a3, 1
|
||||
/* 17706C 8024878C 004C3021 */ addu $a2, $v0, $t4
|
||||
.L80248790:
|
||||
/* 177070 80248790 95280000 */ lhu $t0, ($t1)
|
||||
/* 177074 80248794 94C50000 */ lhu $a1, ($a2)
|
||||
/* 177078 80248798 310300FF */ andi $v1, $t0, 0xff
|
||||
/* 17707C 8024879C 00031880 */ sll $v1, $v1, 2
|
||||
/* 177080 802487A0 02631821 */ addu $v1, $s3, $v1
|
||||
/* 177084 802487A4 30A200FF */ andi $v0, $a1, 0xff
|
||||
/* 177088 802487A8 00021080 */ sll $v0, $v0, 2
|
||||
/* 17708C 802487AC 02621021 */ addu $v0, $s3, $v0
|
||||
/* 177090 802487B0 8C6300E0 */ lw $v1, 0xe0($v1)
|
||||
/* 177094 802487B4 8C4400E0 */ lw $a0, 0xe0($v0)
|
||||
/* 177098 802487B8 806201F1 */ lb $v0, 0x1f1($v1)
|
||||
/* 17709C 802487BC 808301F1 */ lb $v1, 0x1f1($a0)
|
||||
/* 1770A0 802487C0 0043102A */ slt $v0, $v0, $v1
|
||||
/* 1770A4 802487C4 10400003 */ beqz $v0, .L802487D4
|
||||
/* 1770A8 802487C8 24E70001 */ addiu $a3, $a3, 1
|
||||
/* 1770AC 802487CC A5250000 */ sh $a1, ($t1)
|
||||
/* 1770B0 802487D0 A4C80000 */ sh $t0, ($a2)
|
||||
.L802487D4:
|
||||
/* 1770B4 802487D4 00EA102A */ slt $v0, $a3, $t2
|
||||
/* 1770B8 802487D8 1440FFED */ bnez $v0, .L80248790
|
||||
/* 1770BC 802487DC 24C60002 */ addiu $a2, $a2, 2
|
||||
/* 1770C0 802487E0 26310001 */ addiu $s1, $s1, 1
|
||||
.L802487E4:
|
||||
/* 1770C4 802487E4 022D102A */ slt $v0, $s1, $t5
|
||||
/* 1770C8 802487E8 1440FFE2 */ bnez $v0, .L80248774
|
||||
/* 1770CC 802487EC 256B0002 */ addiu $t3, $t3, 2
|
||||
.L802487F0:
|
||||
/* 1770D0 802487F0 A2600170 */ sb $zero, 0x170($s3)
|
||||
/* 1770D4 802487F4 0000282D */ daddu $a1, $zero, $zero
|
||||
/* 1770D8 802487F8 3C030020 */ lui $v1, 0x20
|
||||
/* 1770DC 802487FC 34634000 */ ori $v1, $v1, 0x4000
|
||||
.L80248800:
|
||||
/* 1770E0 80248800 00051040 */ sll $v0, $a1, 1
|
||||
.L80248804:
|
||||
/* 1770E4 80248804 02621021 */ addu $v0, $s3, $v0
|
||||
/* 1770E8 80248808 90420141 */ lbu $v0, 0x141($v0)
|
||||
/* 1770EC 8024880C 00021080 */ sll $v0, $v0, 2
|
||||
/* 1770F0 80248810 02621021 */ addu $v0, $s3, $v0
|
||||
/* 1770F4 80248814 8C5000E0 */ lw $s0, 0xe0($v0)
|
||||
/* 1770F8 80248818 12000005 */ beqz $s0, .L80248830
|
||||
/* 1770FC 8024881C 00000000 */ nop
|
||||
/* 177100 80248820 8E020000 */ lw $v0, ($s0)
|
||||
/* 177104 80248824 00431024 */ and $v0, $v0, $v1
|
||||
/* 177108 80248828 10400008 */ beqz $v0, .L8024884C
|
||||
/* 17710C 8024882C 00051040 */ sll $v0, $a1, 1
|
||||
.L80248830:
|
||||
/* 177110 80248830 82620171 */ lb $v0, 0x171($s3)
|
||||
/* 177114 80248834 24A50001 */ addiu $a1, $a1, 1
|
||||
/* 177118 80248838 00A2102A */ slt $v0, $a1, $v0
|
||||
/* 17711C 8024883C 5040FFF0 */ beql $v0, $zero, .L80248800
|
||||
/* 177120 80248840 0000282D */ daddu $a1, $zero, $zero
|
||||
/* 177124 80248844 08092201 */ j .L80248804
|
||||
/* 177128 80248848 00051040 */ sll $v0, $a1, 1
|
||||
.L8024884C:
|
||||
/* 17712C 8024884C 02621021 */ addu $v0, $s3, $v0
|
||||
/* 177130 80248850 94430140 */ lhu $v1, 0x140($v0)
|
||||
/* 177134 80248854 82620171 */ lb $v0, 0x171($s3)
|
||||
/* 177138 80248858 24A50001 */ addiu $a1, $a1, 1
|
||||
/* 17713C 8024885C AE700174 */ sw $s0, 0x174($s3)
|
||||
/* 177140 80248860 00A2102A */ slt $v0, $a1, $v0
|
||||
/* 177144 80248864 14400002 */ bnez $v0, .L80248870
|
||||
/* 177148 80248868 A6630172 */ sh $v1, 0x172($s3)
|
||||
/* 17714C 8024886C 0000282D */ daddu $a1, $zero, $zero
|
||||
.L80248870:
|
||||
/* 177150 80248870 86640172 */ lh $a0, 0x172($s3)
|
||||
/* 177154 80248874 0C09390F */ jal btl_cam_target_actor
|
||||
/* 177158 80248878 A2650170 */ sb $a1, 0x170($s3)
|
||||
/* 17715C 8024887C 8E700174 */ lw $s0, 0x174($s3)
|
||||
/* 177160 80248880 0C098F18 */ jal reset_actor_turn_info
|
||||
/* 177164 80248884 00000000 */ nop
|
||||
/* 177168 80248888 24020001 */ addiu $v0, $zero, 1
|
||||
/* 17716C 8024888C 2405000A */ addiu $a1, $zero, 0xa
|
||||
/* 177170 80248890 A26201A7 */ sb $v0, 0x1a7($s3)
|
||||
/* 177174 80248894 8E0401C4 */ lw $a0, 0x1c4($s0)
|
||||
/* 177178 80248898 0C0B0CF8 */ jal start_script
|
||||
/* 17717C 8024889C 0000302D */ daddu $a2, $zero, $zero
|
||||
/* 177180 802488A0 AE0201D4 */ sw $v0, 0x1d4($s0)
|
||||
/* 177184 802488A4 8C440144 */ lw $a0, 0x144($v0)
|
||||
/* 177188 802488A8 24030003 */ addiu $v1, $zero, 3
|
||||
/* 17718C 802488AC 3C01802A */ lui $at, %hi(D_8029F248)
|
||||
/* 177190 802488B0 AC23F248 */ sw $v1, %lo(D_8029F248)($at)
|
||||
/* 177194 802488B4 AE0401E4 */ sw $a0, 0x1e4($s0)
|
||||
/* 177198 802488B8 86640172 */ lh $a0, 0x172($s3)
|
||||
/* 17719C 802488BC 24030002 */ addiu $v1, $zero, 2
|
||||
/* 1771A0 802488C0 3C01800E */ lui $at, %hi(gBattleState2)
|
||||
/* 1771A4 802488C4 AC23C4DC */ sw $v1, %lo(gBattleState2)($at)
|
||||
/* 1771A8 802488C8 080922A1 */ j .L80248A84
|
||||
/* 1771AC 802488CC AC440148 */ sw $a0, 0x148($v0)
|
||||
.L802488D0:
|
||||
/* 1771B0 802488D0 3C03802A */ lui $v1, %hi(D_8029F248)
|
||||
/* 1771B4 802488D4 2463F248 */ addiu $v1, $v1, %lo(D_8029F248)
|
||||
/* 1771B8 802488D8 8C620000 */ lw $v0, ($v1)
|
||||
/* 1771BC 802488DC 10400003 */ beqz $v0, .L802488EC
|
||||
/* 1771C0 802488E0 2442FFFF */ addiu $v0, $v0, -1
|
||||
/* 1771C4 802488E4 0809223E */ j .L802488F8
|
||||
/* 1771C8 802488E8 AC620000 */ sw $v0, ($v1)
|
||||
.L802488EC:
|
||||
/* 1771CC 802488EC 24020001 */ addiu $v0, $zero, 1
|
||||
/* 1771D0 802488F0 3C01802A */ lui $at, %hi(D_8029F254)
|
||||
/* 1771D4 802488F4 AC22F254 */ sw $v0, %lo(D_8029F254)($at)
|
||||
.L802488F8:
|
||||
/* 1771D8 802488F8 8E700174 */ lw $s0, 0x174($s3)
|
||||
/* 1771DC 802488FC 8E0201D4 */ lw $v0, 0x1d4($s0)
|
||||
/* 1771E0 80248900 50400007 */ beql $v0, $zero, .L80248920
|
||||
/* 1771E4 80248904 AE0001D4 */ sw $zero, 0x1d4($s0)
|
||||
/* 1771E8 80248908 8E0401E4 */ lw $a0, 0x1e4($s0)
|
||||
/* 1771EC 8024890C 0C0B1059 */ jal does_script_exist
|
||||
/* 1771F0 80248910 00000000 */ nop
|
||||
/* 1771F4 80248914 1440005B */ bnez $v0, .L80248A84
|
||||
/* 1771F8 80248918 00000000 */ nop
|
||||
/* 1771FC 8024891C AE0001D4 */ sw $zero, 0x1d4($s0)
|
||||
.L80248920:
|
||||
/* 177200 80248920 8E4201D8 */ lw $v0, 0x1d8($s2)
|
||||
/* 177204 80248924 10400005 */ beqz $v0, .L8024893C
|
||||
/* 177208 80248928 00000000 */ nop
|
||||
/* 17720C 8024892C 0C0B1059 */ jal does_script_exist
|
||||
/* 177210 80248930 8E4401E8 */ lw $a0, 0x1e8($s2)
|
||||
/* 177214 80248934 14400053 */ bnez $v0, .L80248A84
|
||||
/* 177218 80248938 00000000 */ nop
|
||||
.L8024893C:
|
||||
/* 17721C 8024893C 1220000A */ beqz $s1, .L80248968
|
||||
/* 177220 80248940 AE4001D8 */ sw $zero, 0x1d8($s2)
|
||||
/* 177224 80248944 8E2201D8 */ lw $v0, 0x1d8($s1)
|
||||
/* 177228 80248948 50400007 */ beql $v0, $zero, .L80248968
|
||||
/* 17722C 8024894C AE2001D8 */ sw $zero, 0x1d8($s1)
|
||||
/* 177230 80248950 8E2401E8 */ lw $a0, 0x1e8($s1)
|
||||
/* 177234 80248954 0C0B1059 */ jal does_script_exist
|
||||
/* 177238 80248958 00000000 */ nop
|
||||
/* 17723C 8024895C 14400049 */ bnez $v0, .L80248A84
|
||||
/* 177240 80248960 00000000 */ nop
|
||||
/* 177244 80248964 AE2001D8 */ sw $zero, 0x1d8($s1)
|
||||
.L80248968:
|
||||
/* 177248 80248968 0000A02D */ daddu $s4, $zero, $zero
|
||||
/* 17724C 8024896C 0280882D */ daddu $s1, $s4, $zero
|
||||
/* 177250 80248970 0260902D */ daddu $s2, $s3, $zero
|
||||
.L80248974:
|
||||
/* 177254 80248974 8E5000E0 */ lw $s0, 0xe0($s2)
|
||||
/* 177258 80248978 5200000B */ beql $s0, $zero, .L802489A8
|
||||
/* 17725C 8024897C 26310001 */ addiu $s1, $s1, 1
|
||||
/* 177260 80248980 8E0201D4 */ lw $v0, 0x1d4($s0)
|
||||
/* 177264 80248984 50400008 */ beql $v0, $zero, .L802489A8
|
||||
/* 177268 80248988 26310001 */ addiu $s1, $s1, 1
|
||||
/* 17726C 8024898C 8E0401E4 */ lw $a0, 0x1e4($s0)
|
||||
/* 177270 80248990 0C0B1059 */ jal does_script_exist
|
||||
/* 177274 80248994 00000000 */ nop
|
||||
/* 177278 80248998 50400002 */ beql $v0, $zero, .L802489A4
|
||||
/* 17727C 8024899C AE0001D4 */ sw $zero, 0x1d4($s0)
|
||||
/* 177280 802489A0 24140001 */ addiu $s4, $zero, 1
|
||||
.L802489A4:
|
||||
/* 177284 802489A4 26310001 */ addiu $s1, $s1, 1
|
||||
.L802489A8:
|
||||
/* 177288 802489A8 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 17728C 802489AC 1440FFF1 */ bnez $v0, .L80248974
|
||||
/* 177290 802489B0 26520004 */ addiu $s2, $s2, 4
|
||||
/* 177294 802489B4 16800033 */ bnez $s4, .L80248A84
|
||||
/* 177298 802489B8 0000882D */ daddu $s1, $zero, $zero
|
||||
/* 17729C 802489BC 0260902D */ daddu $s2, $s3, $zero
|
||||
.L802489C0:
|
||||
/* 1772A0 802489C0 8E5000E0 */ lw $s0, 0xe0($s2)
|
||||
/* 1772A4 802489C4 5200000B */ beql $s0, $zero, .L802489F4
|
||||
/* 1772A8 802489C8 26310001 */ addiu $s1, $s1, 1
|
||||
/* 1772AC 802489CC 8E0201D8 */ lw $v0, 0x1d8($s0)
|
||||
/* 1772B0 802489D0 50400008 */ beql $v0, $zero, .L802489F4
|
||||
/* 1772B4 802489D4 26310001 */ addiu $s1, $s1, 1
|
||||
/* 1772B8 802489D8 8E0401E8 */ lw $a0, 0x1e8($s0)
|
||||
/* 1772BC 802489DC 0C0B1059 */ jal does_script_exist
|
||||
/* 1772C0 802489E0 00000000 */ nop
|
||||
/* 1772C4 802489E4 50400002 */ beql $v0, $zero, .L802489F0
|
||||
/* 1772C8 802489E8 AE0001D8 */ sw $zero, 0x1d8($s0)
|
||||
/* 1772CC 802489EC 24140001 */ addiu $s4, $zero, 1
|
||||
.L802489F0:
|
||||
/* 1772D0 802489F0 26310001 */ addiu $s1, $s1, 1
|
||||
.L802489F4:
|
||||
/* 1772D4 802489F4 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 1772D8 802489F8 1440FFF1 */ bnez $v0, .L802489C0
|
||||
/* 1772DC 802489FC 26520004 */ addiu $s2, $s2, 4
|
||||
/* 1772E0 80248A00 16800020 */ bnez $s4, .L80248A84
|
||||
/* 1772E4 80248A04 0000882D */ daddu $s1, $zero, $zero
|
||||
/* 1772E8 80248A08 3C06FFF7 */ lui $a2, 0xfff7
|
||||
/* 1772EC 80248A0C 34C6FFFF */ ori $a2, $a2, 0xffff
|
||||
/* 1772F0 80248A10 0260282D */ daddu $a1, $s3, $zero
|
||||
/* 1772F4 80248A14 3C02800E */ lui $v0, %hi(gBattleStatus)
|
||||
/* 1772F8 80248A18 2442C070 */ addiu $v0, $v0, %lo(gBattleStatus)
|
||||
/* 1772FC 80248A1C 8C430004 */ lw $v1, 4($v0)
|
||||
/* 177300 80248A20 2404BFFF */ addiu $a0, $zero, -0x4001
|
||||
/* 177304 80248A24 00641824 */ and $v1, $v1, $a0
|
||||
/* 177308 80248A28 AC430004 */ sw $v1, 4($v0)
|
||||
.L80248A2C:
|
||||
/* 17730C 80248A2C 8CB000E0 */ lw $s0, 0xe0($a1)
|
||||
/* 177310 80248A30 12000004 */ beqz $s0, .L80248A44
|
||||
/* 177314 80248A34 26310001 */ addiu $s1, $s1, 1
|
||||
/* 177318 80248A38 8E020000 */ lw $v0, ($s0)
|
||||
/* 17731C 80248A3C 00461024 */ and $v0, $v0, $a2
|
||||
/* 177320 80248A40 AE020000 */ sw $v0, ($s0)
|
||||
.L80248A44:
|
||||
/* 177324 80248A44 2A220018 */ slti $v0, $s1, 0x18
|
||||
/* 177328 80248A48 1440FFF8 */ bnez $v0, .L80248A2C
|
||||
/* 17732C 80248A4C 24A50004 */ addiu $a1, $a1, 4
|
||||
/* 177330 80248A50 8262008C */ lb $v0, 0x8c($s3)
|
||||
/* 177334 80248A54 1440000B */ bnez $v0, .L80248A84
|
||||
/* 177338 80248A58 00000000 */ nop
|
||||
/* 17733C 80248A5C 0C098D19 */ jal btl_check_player_defeated
|
||||
/* 177340 80248A60 00000000 */ nop
|
||||
/* 177344 80248A64 14400007 */ bnez $v0, .L80248A84
|
||||
/* 177348 80248A68 00000000 */ nop
|
||||
/* 17734C 80248A6C 0C098D0D */ jal btl_check_enemies_defeated
|
||||
/* 177350 80248A70 00000000 */ nop
|
||||
/* 177354 80248A74 14400003 */ bnez $v0, .L80248A84
|
||||
/* 177358 80248A78 00000000 */ nop
|
||||
/* 17735C 80248A7C 0C090464 */ jal btl_set_state
|
||||
/* 177360 80248A80 24040005 */ addiu $a0, $zero, 5
|
||||
.L80248A84:
|
||||
/* 177364 80248A84 8FBF0024 */ lw $ra, 0x24($sp)
|
||||
/* 177368 80248A88 8FB40020 */ lw $s4, 0x20($sp)
|
||||
/* 17736C 80248A8C 8FB3001C */ lw $s3, 0x1c($sp)
|
||||
/* 177370 80248A90 8FB20018 */ lw $s2, 0x18($sp)
|
||||
/* 177374 80248A94 8FB10014 */ lw $s1, 0x14($sp)
|
||||
/* 177378 80248A98 8FB00010 */ lw $s0, 0x10($sp)
|
||||
/* 17737C 80248A9C 03E00008 */ jr $ra
|
||||
/* 177380 80248AA0 27BD0028 */ addiu $sp, $sp, 0x28
|
@ -1,613 +0,0 @@
|
||||
.set noat # allow manual use of $at
|
||||
.set noreorder # don't insert nops after branches
|
||||
|
||||
.section .rodata
|
||||
|
||||
dlabel jtbl_8029CA88
|
||||
.word .L802412B4_16FB94, .L80241590_16FE70, .L80241A88_170368, .L80241A88_170368, .L802417DC_1700BC, .L80241A88_170368, .L80241A88_170368, .L802419CC_1702AC, .L80241A64_170344
|
||||
|
||||
.section .text
|
||||
|
||||
glabel btl_state_update_normal_start
|
||||
/* 16FAF8 80241218 27BDFFB8 */ addiu $sp, $sp, -0x48
|
||||
/* 16FAFC 8024121C AFB60038 */ sw $s6, 0x38($sp)
|
||||
/* 16FB00 80241220 3C16800E */ lui $s6, %hi(D_800DC4FC)
|
||||
/* 16FB04 80241224 8ED6C4FC */ lw $s6, %lo(D_800DC4FC)($s6)
|
||||
/* 16FB08 80241228 3C02800E */ lui $v0, %hi(D_800DC4F4)
|
||||
/* 16FB0C 8024122C 8C42C4F4 */ lw $v0, %lo(D_800DC4F4)($v0)
|
||||
/* 16FB10 80241230 AFB40030 */ sw $s4, 0x30($sp)
|
||||
/* 16FB14 80241234 3C14800E */ lui $s4, %hi(gBattleStatus)
|
||||
/* 16FB18 80241238 2694C070 */ addiu $s4, $s4, %lo(gBattleStatus)
|
||||
/* 16FB1C 8024123C AFBE0040 */ sw $fp, 0x40($sp)
|
||||
/* 16FB20 80241240 3C1E800B */ lui $fp, %hi(gCurrentEncounter)
|
||||
/* 16FB24 80241244 27DE0F10 */ addiu $fp, $fp, %lo(gCurrentEncounter)
|
||||
/* 16FB28 80241248 AFBF0044 */ sw $ra, 0x44($sp)
|
||||
/* 16FB2C 8024124C AFB7003C */ sw $s7, 0x3c($sp)
|
||||
/* 16FB30 80241250 AFB50034 */ sw $s5, 0x34($sp)
|
||||
/* 16FB34 80241254 AFB3002C */ sw $s3, 0x2c($sp)
|
||||
/* 16FB38 80241258 AFB20028 */ sw $s2, 0x28($sp)
|
||||
/* 16FB3C 8024125C AFB10024 */ sw $s1, 0x24($sp)
|
||||
/* 16FB40 80241260 10400002 */ beqz $v0, .L8024126C
|
||||
/* 16FB44 80241264 AFB00020 */ sw $s0, 0x20($sp)
|
||||
/* 16FB48 80241268 0040B02D */ daddu $s6, $v0, $zero
|
||||
.L8024126C:
|
||||
/* 16FB4C 8024126C 3C04800E */ lui $a0, %hi(D_800DC064)
|
||||
/* 16FB50 80241270 8C84C064 */ lw $a0, %lo(D_800DC064)($a0)
|
||||
/* 16FB54 80241274 14800003 */ bnez $a0, .L80241284
|
||||
/* 16FB58 80241278 00000000 */ nop
|
||||
/* 16FB5C 8024127C 080904A2 */ j .L80241288
|
||||
/* 16FB60 80241280 8ED5000C */ lw $s5, 0xc($s6)
|
||||
.L80241284:
|
||||
/* 16FB64 80241284 8C950004 */ lw $s5, 4($a0)
|
||||
.L80241288:
|
||||
/* 16FB68 80241288 3C03800E */ lui $v1, %hi(gBattleState2)
|
||||
/* 16FB6C 8024128C 8C63C4DC */ lw $v1, %lo(gBattleState2)($v1)
|
||||
/* 16FB70 80241290 2C620009 */ sltiu $v0, $v1, 9
|
||||
/* 16FB74 80241294 104001FC */ beqz $v0, .L80241A88_170368
|
||||
/* 16FB78 80241298 AE950438 */ sw $s5, 0x438($s4)
|
||||
/* 16FB7C 8024129C 00031080 */ sll $v0, $v1, 2
|
||||
/* 16FB80 802412A0 3C01802A */ lui $at, %hi(jtbl_8029CA88)
|
||||
/* 16FB84 802412A4 00220821 */ addu $at, $at, $v0
|
||||
/* 16FB88 802412A8 8C22CA88 */ lw $v0, %lo(jtbl_8029CA88)($at)
|
||||
/* 16FB8C 802412AC 00400008 */ jr $v0
|
||||
/* 16FB90 802412B0 00000000 */ nop
|
||||
.L802412B4_16FB94:
|
||||
/* 16FB94 802412B4 3C05BF80 */ lui $a1, 0xbf80
|
||||
/* 16FB98 802412B8 8EC20004 */ lw $v0, 4($s6)
|
||||
/* 16FB9C 802412BC 3C01802A */ lui $at, %hi(D_8029F240)
|
||||
/* 16FBA0 802412C0 AC22F240 */ sw $v0, %lo(D_8029F240)($at)
|
||||
/* 16FBA4 802412C4 0C04DF69 */ jal set_screen_overlay_params_back
|
||||
/* 16FBA8 802412C8 240400FF */ addiu $a0, $zero, 0xff
|
||||
/* 16FBAC 802412CC 8EA40004 */ lw $a0, 4($s5)
|
||||
/* 16FBB0 802412D0 0C016B3A */ jal load_asset_by_name
|
||||
/* 16FBB4 802412D4 27A50018 */ addiu $a1, $sp, 0x18
|
||||
/* 16FBB8 802412D8 0040802D */ daddu $s0, $v0, $zero
|
||||
/* 16FBBC 802412DC 3C058021 */ lui $a1, %hi(D_80210000)
|
||||
/* 16FBC0 802412E0 24A50000 */ addiu $a1, $a1, %lo(D_80210000)
|
||||
/* 16FBC4 802412E4 0C01BB7C */ jal decode_yay0
|
||||
/* 16FBC8 802412E8 0200202D */ daddu $a0, $s0, $zero
|
||||
/* 16FBCC 802412EC 0C00AB1E */ jal general_heap_free
|
||||
/* 16FBD0 802412F0 0200202D */ daddu $a0, $s0, $zero
|
||||
/* 16FBD4 802412F4 8FA30018 */ lw $v1, 0x18($sp)
|
||||
/* 16FBD8 802412F8 34028000 */ ori $v0, $zero, 0x8000
|
||||
/* 16FBDC 802412FC 0043102A */ slt $v0, $v0, $v1
|
||||
/* 16FBE0 80241300 10400003 */ beqz $v0, .L80241310
|
||||
/* 16FBE4 80241304 00000000 */ nop
|
||||
.L80241308:
|
||||
/* 16FBE8 80241308 080904C2 */ j .L80241308
|
||||
/* 16FBEC 8024130C 00000000 */ nop
|
||||
.L80241310:
|
||||