mirror of
https://github.com/pmret/papermario.git
synced 2025-01-13 20:11:11 +01: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++) |