Merge pull request #153 from robojumper/d_lyt_meter_stuff

d_lyt_meter OK
This commit is contained in:
robojumper
2025-04-26 21:26:09 +02:00
committed by GitHub
109 changed files with 17709 additions and 2561 deletions
+83 -1
View File
@@ -316,19 +316,27 @@ d/lyt/meter/d_lyt_meter_unk.cpp:
d/lyt/meter/d_lyt_meter_a_btn.cpp:
.text start:0x800DFCC0 end:0x800E1188
.ctors start:0x804DB6E4 end:0x804DB6E8
.data start:0x80513BE8 end:0x80513F38
.rodata start:0x804E5020 end:0x804E5298
.data start:0x80513B70 end:0x80513F38
.sdata start:0x80572380 end:0x80572398
.sdata2 start:0x80579B60 end:0x80579B70
.bss start:0x805AA190 end:0x805AA350
d/lyt/meter/d_lyt_meter_z_btn.cpp:
.text start:0x800E1190 end:0x800E2238
.ctors start:0x804DB6E8 end:0x804DB6EC
.rodata start:0x804E5298 end:0x804E5510
.data start:0x80513F38 end:0x80514188
.sdata start:0x80572398 end:0x805723B8
.sdata2 start:0x80579B70 end:0x80579B80
.bss start:0x805AA350 end:0x805AA450
d/lyt/meter/d_lyt_meter_key.cpp:
.text start:0x800E2240 end:0x800E4928
.ctors start:0x804DB6EC end:0x804DB6F0
.rodata start:0x804E5510 end:0x804E55A0
.data start:0x80514188 end:0x805148B0
.sdata2 start:0x80579B80 end:0x80579BA0
.bss start:0x805AA450 end:0x805AA790
d/lyt/meter/d_lyt_meter_drink.cpp:
@@ -343,71 +351,121 @@ d/lyt/meter/d_lyt_meter_remocon_bg.cpp:
.text start:0x800E6AD0 end:0x800E7218
.ctors start:0x804DB6F4 end:0x804DB6F8
.data start:0x80514D60 end:0x80514F10
.sdata start:0x805723B8 end:0x805723C0
.bss start:0x805AA9D0 end:0x805AAAD0
d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp:
.text start:0x800E7220 end:0x800E8168
.ctors start:0x804DB6F8 end:0x804DB6FC
.rodata start:0x804E5640 end:0x804E58B8
.data start:0x80514F10 end:0x80515178
.sdata start:0x805723C0 end:0x805723D8
.sdata2 start:0x80579BB0 end:0x80579BC0
.bss start:0x805AAAD0 end:0x805AABD0
d/lyt/meter/d_lyt_meter_nun_stk.cpp:
.text start:0x800E8170 end:0x800E8ED8
.ctors start:0x804DB6FC end:0x804DB700
.rodata start:0x804E58B8 end:0x804E5B28
.data start:0x80515178 end:0x805153A8
.sdata start:0x805723D8 end:0x805723F0
.sdata2 start:0x80579BC0 end:0x80579BD0
.bss start:0x805AABD0 end:0x805AACD0
d/lyt/meter/d_lyt_meter_item_select.cpp:
.text start:0x800E8EE0 end:0x800F35A8
.ctors start:0x804DB700 end:0x804DB704
.rodata start:0x804E5B28 end:0x804E5F28
.data start:0x805153A8 end:0x80516A28
.sdata start:0x805723F0 end:0x80572400
.sdata2 start:0x80579BD0 end:0x80579BF8
.bss start:0x805AACD0 end:0x805AB650
d/lyt/meter/d_lyt_meter_plus_btn.cpp:
.text start:0x800F35B0 end:0x800F4768
.ctors start:0x804DB704 end:0x804DB708
.rodata start:0x804E5F28 end:0x804E61A0
.data start:0x80516A28 end:0x80516C90
.sdata start:0x80572400 end:0x80572418
.sdata2 start:0x80579BF8 end:0x80579C08
.bss start:0x805AB650 end:0x805AB750
d/lyt/meter/d_lyt_meter_minus_btn.cpp:
.text start:0x800F4770 end:0x800F8D98
.ctors start:0x804DB708 end:0x804DB70C
.rodata start:0x804E61A0 end:0x804E62A8
.data start:0x80516C90 end:0x80517818
.sdata start:0x80572418 end:0x80572480
.sdata2 start:0x80579C08 end:0x80579C18
.bss start:0x805AB750 end:0x805ABC90
d/lyt/meter/d_lyt_meter_cross_btn.cpp:
.text start:0x800F8DA0 end:0x800FAFC8
.ctors start:0x804DB70C end:0x804DB710
.rodata start:0x804E62A8 end:0x804E6568
.data start:0x80517818 end:0x80517CE0
.sdata start:0x80572480 end:0x805724A8
.sdata2 start:0x80579C18 end:0x80579C38
.bss start:0x805ABC90 end:0x805ABE90
d/lyt/meter/d_lyt_meter_dowsing.cpp:
.text start:0x800FAFD0 end:0x801003E8
.ctors start:0x804DB710 end:0x804DB714
.rodata start:0x804E6568 end:0x804E6928
.data start:0x80517CE0 end:0x80518A60
.sdata start:0x805724A8 end:0x805724F0
.sdata2 start:0x80579C38 end:0x80579C48
.bss start:0x805ABE90 end:0x805AC550
d/lyt/meter/d_lyt_meter_rupy.cpp:
.text start:0x801003F0 end:0x801026A8
.ctors start:0x804DB714 end:0x804DB718
.rodata start:0x804E6928 end:0x804E69D8
.data start:0x80518A60 end:0x80518F00
.sdata2 start:0x80579C48 end:0x80579C78
.bss start:0x805AC550 end:0x805AC750
d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp:
.text start:0x801026B0 end:0x80105548
.ctors start:0x804DB718 end:0x804DB71C
.rodata start:0x804E69D8 end:0x804E6A58
.data start:0x80518F00 end:0x80519578
.sdata start:0x805724F0 end:0x80572500
.sdata2 start:0x80579C78 end:0x80579CF8
.bss start:0x805AC750 end:0x805ACA90
d/lyt/meter/d_lyt_meter_event_skip.cpp:
.text start:0x80105550 end:0x80105F68
.ctors start:0x804DB71C end:0x804DB720
.rodata start:0x804E6A58 end:0x804E6A68
.data start:0x80519578 end:0x80519748
.sdata start:0x80572500 end:0x80572510
.sdata2 start:0x80579CF8 end:0x80579D00
.bss start:0x805ACA90 end:0x805ACB90
d/lyt/meter/d_lyt_meter_timer.cpp:
.text start:0x80105F70 end:0x8010AEB8
.ctors start:0x804DB720 end:0x804DB724
.rodata start:0x804E6A68 end:0x804E6C28
.data start:0x80519748 end:0x80519F60
.sdata start:0x80572510 end:0x80572518
.sbss start:0x80575458 end:0x80575468
.sdata2 start:0x80579D00 end:0x80579D30
.bss start:0x805ACB90 end:0x805ACD50
d/lyt/meter/d_lyt_meter_heart.cpp:
.text start:0x8010AEC0 end:0x8010BD48
.rodata start:0x804E6C28 end:0x804E6CF8
.data start:0x80519F60 end:0x8051A320
.sdata start:0x80572518 end:0x80572520
.sdata2 start:0x80579D30 end:0x80579D48
d/lyt/meter/d_lyt_meter_shield_gauge.cpp:
.text start:0x8010BD50 end:0x8010CEC8
.ctors start:0x804DB724 end:0x804DB728
.rodata start:0x804E6CF8 end:0x804E6D60
.data start:0x8051A320 end:0x8051A5A8
.sdata2 start:0x80579D48 end:0x80579D70
.bss start:0x805ACD50 end:0x805ACE10
d/lyt/d_lyt_do_button.cpp:
@@ -417,6 +475,10 @@ d/lyt/d_lyt_do_button.cpp:
.data start:0x8051A5A8 end:0x8051AC00
.bss start:0x805ACE10 end:0x805ACF78
d/lyt/d_lyt_do_button_related.cpp:
.text start:0x8010EB00 end:0x8010EF8C
.ctors start:0x804DB72C end:0x804DB730
d/lyt/d_lyt_common_a_btn.cpp:
.text start:0x8010EF90 end:0x8010F818
.rodata start:0x804E72E0 end:0x804E7330
@@ -592,12 +654,17 @@ d/lyt/d_lyt_area_caption.cpp:
.data start:0x80522B00 end:0x80522E80
.sdata start:0x80572878 end:0x80572880
.sbss start:0x805754C0 end:0x805754C8
.sdata2 start:0x80579FD0 end:0x80579FE0
.bss start:0x805B0A70 end:0x805B0B30
d/lyt/d_lyt_wipe.cpp:
.text start:0x8014C6C0 end:0x8014E008
.ctors start:0x804DB77C end:0x804DB780
.data start:0x80522E80 end:0x805231E8
.sdata start:0x80572880 end:0x80572888
.sbss start:0x805754C8 end:0x805754D0
.sdata2 start:0x80579FE0 end:0x80579FF0
.bss start:0x805B0B30 end:0x805B0D30
d/lyt/d_lyt_help.cpp:
.text start:0x8014E010 end:0x80150428
@@ -657,6 +724,9 @@ d/lyt/d_lyt_save_msg_window.cpp:
.text start:0x80164F90 end:0x80166968
.ctors start:0x804DB7A8 end:0x804DB7AC
d/lyt/d_lyt_util_items.cpp:
.text start:0x80166970 end:0x80167FD4
d/lyt/d_lyt_common_arrow.cpp:
.text start:0x80167FE0 end:0x801695E8
.ctors start:0x804DB7AC end:0x804DB7B0
@@ -749,6 +819,9 @@ d/a/d_a_door_base.cpp:
d/lyt/d_lyt_map_popup.cpp:
.text start:0x801792D0 end:0x80189F9C
d/d_pouch.cpp:
.text start:0x80189FA0 end:0x8018B4A4
d/a/d_a_fish_mgr_base.cpp:
.text start:0x8018B880 end:0x8018BFC8
.ctors start:0x804DB7E4 end:0x804DB7E8
@@ -945,6 +1018,14 @@ d/lyt/d_lyt_save_mgr.cpp:
.text start:0x80284FB0 end:0x80286C88
.ctors start:0x804DB864 end:0x804DB868
d/lyt/d_lyt_drop_line.cpp:
.text start:0x80286C90 end:0x802884F8
.ctors start:0x804DB868 end:0x804DB86C
d/lyt/d_lyt_force_line.cpp:
.text start:0x80288500 end:0x8028A9F8
.ctors start:0x804DB86C end:0x804DB870
d/lyt/d_lyt_enemy_icon.cpp:
.text start:0x8028AA00 end:0x8028BCD8
.ctors start:0x804DB870 end:0x804DB874
@@ -975,6 +1056,7 @@ d/lyt/d_lyt_end_roll.cpp:
d/lyt/d_lyt_control_game.cpp:
.text start:0x802CC7B0 end:0x802D16A8
.ctors start:0x804DB8A0 end:0x804DB8A4
.data start:0x805403F8 end:0x80540C88
d/lyt/d_lyt_control_title.cpp:
.text start:0x802D16B0 end:0x802D17BC
+1749 -1750
View File
File diff suppressed because it is too large Load Diff
+23 -22
View File
@@ -384,27 +384,28 @@ config.libs = [
Object(Matching, "d/d_textunk.cpp"),
Object(NonMatching, "d/d_textwindow_unk.cpp"),
Object(NonMatching, "d/d_tag_processor.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_unk.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_a_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_z_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_key.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_a_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_z_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_key.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_drink.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_remocon_bg.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_nun_stk.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_item_select.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_plus_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_minus_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_dowsing.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_timer.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_heart.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_remocon_bg.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_nun_stk.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_item_select.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_plus_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_minus_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_dowsing.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_timer.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_heart.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"),
Object(NonMatching, "d/lyt/d_lyt_do_button.cpp"),
Object(NonMatching, "d/lyt/d_lyt_do_button_related.cpp"),
Object(Matching, "d/lyt/d_lyt_common_a_btn.cpp"),
Object(Matching, "d/lyt/d_lyt_common_icon_material.cpp"),
Object(Matching, "d/lyt/d_lyt_common_icon_item.cpp"),
@@ -419,14 +420,14 @@ config.libs = [
Object(Matching, "d/lyt/msg_window/d_lyt_msg_window_stone.cpp"),
Object(Matching, "d/lyt/msg_window/d_lyt_msg_window_demo.cpp"),
Object(NonMatching, "d/lyt/d_lyt_simple_window.cpp"),
Object(NonMatching, "d/lyt/d_lyt_auto_caption.cpp"),
Object(NonMatching, "d/lyt/d_lyt_auto_explain.cpp"),
Object(Matching, "d/lyt/d_lyt_auto_caption.cpp"),
Object(Matching, "d/lyt/d_lyt_auto_explain.cpp"),
Object(NonMatching, "d/lyt/d_lyt_map_capture.cpp"),
Object(NonMatching, "d/lyt/d_lyt_map.cpp"),
Object(Matching, "d/lyt/d_lyt_note.cpp"),
Object(Matching, "d/lyt/d_lyt_battery.cpp"),
Object(NonMatching, "d/lyt/d_lyt_area_caption.cpp"),
Object(NonMatching, "d/lyt/d_lyt_wipe.cpp"),
Object(Matching, "d/lyt/d_lyt_area_caption.cpp"),
Object(Matching, "d/lyt/d_lyt_wipe.cpp"),
Object(NonMatching, "d/lyt/d_lyt_help.cpp"),
Object(Matching, "d/lyt/d_lyt_bird_gauge.cpp"),
Object(Matching, "d/lyt/d_lyt_sky_gauge.cpp"),
+3
View File
@@ -10,6 +10,9 @@ s32 targetAngleY(const mVec3_c &target, const mVec3_c &source);
s32 targetAngleX(const mVec3_c &target, const mVec3_c &source);
f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
// made up name
f32 easeOut(f32 value, f32 exponent);
} // namespace cLib
#endif
+9
View File
@@ -21,6 +21,15 @@
#define ALIGN_DECL(ALIGNMENT) __attribute__((aligned(ALIGNMENT)))
// static_assert from TP
#ifdef __MWERKS__
#define GLUE(a, b) a##b
#define GLUE2(a, b) GLUE(a, b)
#define STATIC_ASSERT(cond) typedef char GLUE2(static_assertion_failed, __LINE__)[(cond) ? 1 : -1]
#else
#define STATIC_ASSERT(...)
#endif
// To remove some warnings
#ifdef __MWERKS__
#define DECL_SECTION(x) __declspec(section x)
+6
View File
@@ -26,8 +26,14 @@ public:
STATE_FUNC_DECLARE(dBird_c, MiniGameEnd);
STATE_FUNC_DECLARE(dBird_c, MiniGameLevelUpDemo);
s16 getNumDashes() const {
return mNumDashes;
}
private:
/* 0x??? */ STATE_MGR_DECLARE(dBird_c);
u8 _0x36C[0xF8E - 0x36C];
/* 0xF8E */ s16 mNumDashes;
};
#endif
+21 -4
View File
@@ -51,9 +51,16 @@ public:
void getItemFromBWheelItem();
bool isStateWait();
static int getTotalBombCount();
static int getTotalArrowCount();
static int getTotalSeedCount();
static s32 getTotalBombCount();
static s32 getTotalArrowCount();
static s32 getTotalSeedCount();
static s32 getTotalBombCapacity();
static s32 getTotalSeedCapacity();
static s32 getTotalArrowCapacity();
static u32 getKeyPieceCount();
static u32 getSmallKeyCount();
static bool isRupee(ITEM_ID item);
static bool isKeyPiece(ITEM_ID item);
@@ -63,7 +70,17 @@ public:
static void itemGetEventStart(dAcBase_c *);
static void itemGetEventEnd(dAcBase_c *);
static void healLink(u32 amount, bool);
enum Trial_e {
TRIAL_SKYLOFT,
TRIAL_FARON,
TRIAL_ELDIN,
TRIAL_LANAYRU,
TRIAL_NONE,
};
static Trial_e getCurrentTrial();
static void healLink(u32 amount, bool); // move to dAcPy_c
private:
/* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system
+1 -1
View File
@@ -109,7 +109,7 @@ enum ITEM_ID {
/* 0x066 */ ITEM_TREASURE_MEDAL = 102,
/* 0x067 */ ITEM_POTION_MEDAL = 103,
/* 0x068 */ ITEM_CURSED_MEDAL = 104,
/* 0x069 */ ITEM_SCATTERSHOT = 105,
/* 0x069 */ ITEM_MIGHTY_SCATTERSHOT = 105,
/* 0x06A */ ITEM_UNK_106 = 106,
/* 0x06B */ ITEM_UNK_107 = 107,
/* 0x06C */ ITEM_MEDIUM_WALLET = 108,
+71 -4
View File
@@ -3,12 +3,15 @@
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_itembase.h"
#include "d/a/obj/d_a_obj_base.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m_allocator.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/file_manager.h"
class dAcPy_c : public dAcObjBase_c {
// See Below for some info
@@ -54,6 +57,13 @@ public:
FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR,
};
enum dAcPy_RidingActor {
RIDING_NONE = 0,
RIDING_TRUCK_MINECART = 1,
RIDING_LOFTWING = 2,
RIDING_BOAT = 3,
};
dAcPy_c();
virtual ~dAcPy_c();
@@ -61,6 +71,7 @@ public:
void setPosYRot(const mVec3_c &pos, mAng rot, UNKWORD, UNKWORD, UNKWORD);
// argument is always false in existing code, true doesn't seem to make a difference
void bonk(bool unk = false);
bool fn_80202D90(bool);
/* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD);
/* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD);
@@ -142,7 +153,7 @@ public:
/* vt 0x1B4 */ virtual void isByte0x434eEqual7();
/* vt 0x1B8 */ virtual void canHandleGameOver();
/* vt 0x1BC */ virtual void vt_0x1BC();
/* vt 0x1C0 */ virtual void vt_0x1C0();
/* vt 0x1C0 */ virtual void *vt_0x1C0() const;
/* vt 0x1C4 */ virtual void getActorInActorRef1();
/* vt 0x1C8 */ virtual void doesActorRef1Exist();
/* vt 0x1CC */ virtual void unlinkActorRef1();
@@ -182,7 +193,7 @@ public:
/* vt 0x254 */ virtual void isAttackingUnderground();
/* vt 0x258 */ virtual void vt_0x258();
/* vt 0x25C */ virtual void vt_0x25C();
/* vt 0x260 */ virtual void vt_0x260();
/* vt 0x260 */ virtual f32 vt_0x260() const;
/* vt 0x264 */ virtual void getGroosenatorIfIn();
/* vt 0x268 */ virtual void setActorRef11();
/* vt 0x26C */ virtual void doesGameOver();
@@ -230,9 +241,13 @@ public:
/* vt 0x314 */ virtual void vt_0x314();
/* vt 0x318 */ virtual void vt_0x318();
/* 0x330 */ u8 unk_0x330[0x340 - 0x330];
/* 0x330 */ u8 unk_0x330[0x339 - 0x330];
/* 0x339 */ u8 mRidingActorType;
/* 0x33A */ u8 unk_0x33A[0x340 - 0x33A];
/* 0x340 */ u32 someFlags_0x340;
/* 0x344 */ u8 unk_0x344[0x350 - 0x344];
/* 0x344 */ u8 unk_0x344[0x348 - 0x344];
/* 0x348 */ u32 mSwordAndMoreStates;
/* 0x34C */ u8 unk_0x34C[0x350 - 0x34C];
/* 0x350 */ u32 someFlags_0x350;
u8 UNK_0x354[0x35C - 0x354];
/* 0x35C */ u32 mForceOrPreventActionFlags;
@@ -242,6 +257,18 @@ public:
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
/* 0x370 */ u8 _370[0x3C8 - 0x370];
/* 0x3C8 */ nw4r::g3d::ResFile mSwordRes;
/* 0x3CC */ u8 _0x3CC[0x5B4 - 0x3CC];
/* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr;
/* 0x5E0 */ u8 _0x5E0[0x4564 - 0x5E0];
/* 0x4564 */ f32 field_0x4564;
f32 getField_0x4564() const {
return field_0x4564;
}
f32 getAnmMatClrFrame() const {
return mAnmMatClr.getFrame(0);
}
inline bool checkFlags0x340(u32 mask) const {
return (someFlags_0x340 & mask) != 0;
@@ -263,6 +290,14 @@ public:
return mCurrentAction == action;
}
bool isSittingOrUnk0xAE() const {
return mCurrentAction == 0xAD || mCurrentAction == 0xAE;
}
inline bool checkSwordAndMoreStates(u32 mask) const {
return (mSwordAndMoreStates & mask) != 0;
}
inline bool checkActionFlags(u32 mask) const {
return (mActionFlags & mask) != 0;
}
@@ -270,13 +305,45 @@ public:
return (mActionFlagsCont & mask) != 0;
}
inline u8 getRidingActorType() const {
return mRidingActorType;
}
inline bool hasvt_0x1C0() const {
return vt_0x1C0() != nullptr;
}
inline bool isAffectedByStaminaPotion() const {
return FileManager::GetInstance()->hasStaminaPotionNormal() && getRidingActorType() != RIDING_BOAT;
}
inline bool isAffectedByStaminaPotionPlus() const {
return FileManager::GetInstance()->hasStaminaPotionPlus() && getRidingActorType() != RIDING_BOAT;
}
static nw4r::g3d::ResFile getItemResFile(const char *name, mAllocator_c &allocator);
static const dAcPy_c *GetLink() {
return LINK;
}
static dAcPy_c *GetLink2() {
return LINK2;
}
static dAcPy_c *LINK;
static dAcPy_c *LINK2;
static s32 getCurrentBowType();
static s32 getCurrentSlingshotType();
static s32 getCurrentBeetleType();
static s32 getCurrentBugNetType();
static bool isItemRestrictedByBokoBase(ITEM_ID item);
static u32 getCurrentHealthCapacity();
bool canDowseProbably() const;
};
#endif
+1 -1
View File
@@ -189,7 +189,7 @@ struct STIF {
/* 0x0F */ u8 field_0x0F;
/* 0x10 */ u8 field_0x10;
/* 0x11 */ u8 field_0x11;
/* 0x12 */ u8 mapNameId;
/* 0x12 */ s8 mapNameId;
/* 0x13 */ u8 field_0x13;
};
+30
View File
@@ -0,0 +1,30 @@
#ifndef D_CAMERA_H
#define D_CAMERA_H
#include "d/d_base.h"
#include "m/m_vec.h"
extern "C" bool fn_80081FE0(void *, const char *);
class dCamera_c : public dBase_c {
public:
bool isCurrentTrend(const char *name) const {
return fn_80081FE0(field_0xD98, name);
}
void *getField_0xD98() const {
return field_0xD98;
}
const mVec3_c &getPositionMaybe() const {
return mPositionMaybe;
}
private:
/* 0x068 */ u8 _0x068[0x6C - 0x068];
/* 0x06C */ mVec3_c mPositionMaybe;
/* 0x078 */ u8 _0x078[0xD98 - 0x078];
/* 0xD98 */ void *field_0xD98;
};
#endif
+22 -2
View File
@@ -30,12 +30,29 @@ public:
return sTagProcessor;
}
void init();
void reset();
bool getField_0x328() const {
return field_0x328;
}
bool getField_0x329() const {
return field_0x329;
}
s32 getField_0x2FC() const {
return field_0x2FC;
}
void setField_0x2FC(s32 val) {
field_0x2FC = val;
}
s32 getField_0x32C() const {
return field_0x32C;
}
void setField_0x329(bool v) {
field_0x329 = v;
}
@@ -102,12 +119,15 @@ private:
/* 0x2FC */ s32 field_0x2FC;
/* 0x300 */ u8 _0x300[0x329 - 0x300];
/* 0x300 */ u8 _0x300[0x328 - 0x300];
/* 0x328 */ bool field_0x328;
/* 0x329 */ bool field_0x329;
/* 0x32A */ bool field_0x32A;
/* 0x32B */ u8 _0x32B[0x334 - 0x32B];
/* 0x32B */ u8 field_0x32B;
/* 0x32C */ s32 field_0x32C;
/* 0x330 */ u8 _0x330[0x334 - 0x330];
/* 0x334 */ u32 mMinigameResultPoints;
/* 0x338 */ u32 mMinigameTime;
+9
View File
@@ -6,7 +6,16 @@ public:
static bool checkButtonAPressed();
static bool checkButtonBPressed();
static bool checkButtonZPressed();
static bool checkButtonCPressed();
static bool checkButtonMinusPressed();
static bool checkButtonPlusPressed();
static bool checkButton1Pressed();
static bool checkButton2Pressed();
static bool checkButtonDpadUpPressed();
static bool checkButtonDpadDownPressed();
static bool checkButtonDpadLeftPressed();
static bool checkButtonDpadRightPressed();
static bool checkButtonAHeld();
static bool checkButtonZHeld();
+12
View File
@@ -0,0 +1,12 @@
#ifndef D_POUCH_H
#define D_POUCH_H
#include "common.h"
u32 convertFilePouchSlot(s32 fileSlot);
s32 convertLytPouchSlot(s32 fileSlot);
s32 getPouchSlotCount(bool unk);
bool isItemExtraAmmo(s32 item);
bool isItemMedal(s32 item);
#endif
+9
View File
@@ -6,6 +6,7 @@
#include "d/d_dylink.h"
#include "d/d_fader.h"
#include "d/d_scene.h"
#include "d/d_camera.h"
#include "egg/gfx/eggScreen.h"
#include "f/f_profile_name.h"
#include "m/m2d.h"
@@ -148,6 +149,7 @@ public:
return sInstance;
}
bool setReloadTrigger(fProfile::PROFILE_NAME_e reloadTrigger);
void setRespawnInfo(const mVec3_c &linkPos, const mAng3_c &linkRot, bool unk);
void setSpawnInfo(u8 roomid, const mVec3_c &pos, mAng rot);
@@ -190,6 +192,13 @@ public:
sReloaderType = type;
}
static dCamera_c *getCamera(s32 idx);
static void setCamera(s32 idx, dCamera_c *);
bool isFaderSettled() const {
return mFader.isSettled();
}
protected:
static u32 sUpdateFrameCount;
static u8 sCurrentLayer;
+11
View File
@@ -8,6 +8,7 @@
#include "egg/gfx/eggPostEffectBlur.h"
#include "egg/gfx/eggScreenEffectBlur.h"
#include "m/m_allocator.h"
#include "m/m_fader_base.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "s/s_FPhase.h"
@@ -128,10 +129,20 @@ public:
return sInstance;
}
bool isFadedOut() const {
return mFader.isStatus(mFaderBase_c::FADED_OUT);
}
bool isFadedIn() const {
return mFader.isStatus(mFaderBase_c::FADED_IN);
}
u8 getCurrRoomId() const {
return curr_room_id;
}
bool fn_801B3EE0();
private:
dRoom_c *createRoom(int roomid, bool flag0x40);
void createLytSeekerStone();
+29
View File
@@ -49,11 +49,26 @@ public:
public:
bool isAreaTypeDungeon() const;
bool isAreaTypeSky() const;
bool isAreaTypeHouse() const;
bool isAreaTypeDungeonOrBoss() const;
bool isAreaTypeOverworldOrSkyloft() const;
s32 getSTIFunk1() const;
s32 getSTIFbyte4() const;
bool isSTIFbyte4_2or3or4() const;
bool isSTIFbyte4_5or6() const;
bool isSTIFbyte4_7or8or9or10or11() const;
bool isSTIFbyte4_1() const {
return getSTIFbyte4() == 1;
}
bool isSTIFbyte4_0() const {
return getSTIFbyte4() == 0;
}
s32 getAreaType() const;
s32 getMapNameId() const;
bool fn_80199250();
static dStageMgr_c *GetInstance() {
return sInstance;
@@ -121,6 +136,14 @@ public:
return &mFader;
}
bool isFaderSettled() const {
return mFader.isSettled();
}
bool isInLastBoss() const {
return mIsInLastBoss;
}
private:
static void lastExecuteCallback();
@@ -165,6 +188,12 @@ private:
/* 0x88A0 */ u32 field_0x88A0;
/* 0x88A4 */ SizedString<16> mDemoName;
/* 0x88B4 */ u8 _0x88B4[0x88BC - 0x88B4];
/* 0x88BC */ bool field_0x88BC;
/* 0x88BD */ u8 field_0x88BD;
/* 0x88BE */ u8 field_0x88BE;
/* 0x88BF */ u8 field_0x88BF;
/* 0x88C0 */ u8 field_0x88C0;
/* 0x88C1 */ bool mIsInLastBoss;
};
#endif
+1 -1
View File
@@ -51,7 +51,7 @@ public:
return checkUncommittedTempOrSceneflag(flag);
}
u16 checkFlag(u16 roomId, u16 flag);
bool checkSceneflagGlobal(u16 sceneIdx, u16 flag);
u16 checkSceneflagGlobal(u16 sceneIdx, u16 flag);
u16 checkTempOrSceneflag(u16 flag);
u16 checkUncommittedFlag(u16 roomId, u16 flag);
void setZoneflag(u16 roomId, u16 flag);
+11 -1
View File
@@ -46,7 +46,7 @@ public:
virtual ~Multi_c() {}
/* vt 0x0C */ virtual void draw() override;
/* vt 0x10 */ virtual void animate();
/* vt 0x18 */ virtual void calc();
/* vt 0x14 */ virtual void calc();
/* vt 0x18 */ virtual bool build(const char *name, m2d::ResAccIf_c *acc);
void calcBefore();
@@ -258,6 +258,10 @@ struct AnmGroupBase_c {
mpFrameCtrl->setFlags(FLAG_NO_LOOP);
}
inline void setForwardLoop() {
mpFrameCtrl->setFlags(0);
}
inline void setToStart() {
m2d::FrameCtrl_c &ctrl = *mpFrameCtrl;
ctrl.setCurrFrame(ctrl.getStartFrame());
@@ -288,6 +292,12 @@ struct AnmGroupBase_c {
return mpFrameCtrl->getNextFrame();
}
#ifdef NEED_DIRECT_FRAMECTRL_ACCESS
m2d::FrameCtrl_c *getFrameCtrl() {
return mpFrameCtrl;
}
#endif
private:
/* 0x04 */ void *field_0x04;
/* 0x08 */ m2d::FrameCtrl_c *mpFrameCtrl;
+9 -8
View File
@@ -3,7 +3,6 @@
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytAreaCaptionParts_c {
public:
@@ -23,13 +22,15 @@ public:
STATE_FUNC_DECLARE(dLytAreaCaptionParts_c, Out);
private:
bool shouldImmediatelyDismiss() const;
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytAreaCaptionParts_c);
/* 0x040 */ d2d::ResAccIf_c mResAcc;
/* 0x0EB */ d2d::dLytSub mLyt;
/* 0x110 */ d2d::AnmGroup_c mAnmGroups[4];
/* 0x540 */ dTextBox_c *mTextBoxes[3];
/* 0x54C */ u8 field_0x54C;
/* 0x54D */ u8 field_0x54D;
/* 0x54C */ bool field_0x54C;
/* 0x54D */ bool field_0x54D;
/* 0x54E */ u8 mFirst;
/* 0x54F */ bool mAnmCtrlInUse[4];
};
@@ -46,8 +47,8 @@ public:
static void setArea(int id);
static void check();
static void set0xAAC(u8 arg);
static u8 get0xAAC();
static void setVisible(bool arg);
static bool getVisible();
private:
dLytAreaCaption_c() {
@@ -63,10 +64,10 @@ private:
void doSetTextIfWaiting(const char *);
void doSetArea(int id);
void doCheck();
dLytAreaCaptionParts_c mParts[2];
s32 mPartToDraw;
u8 field_0xAAC;
/* 0x000 */ dLytAreaCaptionParts_c mParts[2];
/* 0xAA8 */ s32 mPartToDraw;
/* 0xAAC */ bool mVisible;
};
#endif
+18
View File
@@ -71,6 +71,22 @@ public:
void hide();
void setNumDashes(s32 num) {
mGameStateDashes = num;
}
void setField_0x690(bool val) {
field_0x690 = val;
}
bool getField_0x692() const {
return field_0x692;
}
bool getField_0x693() const {
return field_0x693;
}
private:
static dLytBirdGauge_c *sInstance;
@@ -80,6 +96,8 @@ private:
STATE_FUNC_DECLARE(dLytBirdGauge_c, Recovery);
STATE_FUNC_DECLARE(dLytBirdGauge_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytBirdGauge_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytBirdGauge_c);
/* 0x008 */ d2d::ResAccIf_c mResAcc;
/* 0x3B4 */ dLytBirdGaugeMain_c mMain;
+14 -1
View File
@@ -3,7 +3,6 @@
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytBossGauge_c {
public:
@@ -12,18 +11,32 @@ public:
bool build();
bool remove();
bool execute();
bool draw();
void setMode(s32 mode);
void fn_80158940();
void setField_0x545(bool value) {
field_0x545 = value;
}
private:
STATE_FUNC_DECLARE(dLytBossGauge_c, None);
STATE_FUNC_DECLARE(dLytBossGauge_c, In);
STATE_FUNC_DECLARE(dLytBossGauge_c, Move);
STATE_FUNC_DECLARE(dLytBossGauge_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytBossGauge_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytBossGauge_c);
/* 0x040 */ d2d::ResAccIf_c mResAcc;
/* 0x3B0 */ d2d::dLytSub mLyt;
/* 0x444 */ d2d::AnmGroup_c mAnmGroups[4];
/* 0x544 */ u8 field_0x544;
/* 0x545 */ bool field_0x545;
/* 0x546 */ u8 _0x546[0x550 - 0x546];
};
#endif
+22 -22
View File
@@ -8,27 +8,19 @@
#include "nw4r/lyt/lyt_bounding.h"
#include "s/s_State.hpp"
class dLytCommonIconItemPartBase_c {
public:
virtual ~dLytCommonIconItemPartBase_c() {}
virtual nw4r::lyt::Pane *getPane() = 0;
virtual d2d::LytBase_c *getLyt() = 0;
virtual const char *getName() const = 0;
};
/** B-Wheel item */
class dLytCommonIconItemPart1_c : public dLytCommonIconItemPartBase_c {
class dLytCommonIconItemPart1_c {
public:
dLytCommonIconItemPart1_c()
: mItem(0), mColor(0), field_0x2B4(false), mHasNumber(false), mSize(false), mBocoburinLocked(false) {}
virtual ~dLytCommonIconItemPart1_c() {}
virtual nw4r::lyt::Pane *getPane() override {
virtual nw4r::lyt::Pane *getPane() {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
virtual d2d::LytBase_c *getLyt() {
return &mLyt;
}
virtual const char *getName() const override {
virtual const char *getName() const {
return mLyt.getName();
}
@@ -82,7 +74,7 @@ private:
};
/** Pouch item */
class dLytCommonIconItemPart2_c : public dLytCommonIconItemPartBase_c {
class dLytCommonIconItemPart2_c {
public:
dLytCommonIconItemPart2_c()
: mItem(0),
@@ -94,13 +86,13 @@ public:
mOnOff(true),
mDurability(0.0f) {}
virtual ~dLytCommonIconItemPart2_c() {}
virtual nw4r::lyt::Pane *getPane() override {
virtual nw4r::lyt::Pane *getPane() {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
virtual d2d::LytBase_c *getLyt() {
return &mLyt;
}
virtual const char *getName() const override {
virtual const char *getName() const {
return mLyt.getName();
}
@@ -162,17 +154,17 @@ private:
};
/** Dowsing "item" */
class dLytCommonIconItemPart3_c : public dLytCommonIconItemPartBase_c {
class dLytCommonIconItemPart3_c {
public:
dLytCommonIconItemPart3_c() : mItem(0), mSize(false), mBocoburinLocked(false) {}
virtual ~dLytCommonIconItemPart3_c() {}
virtual nw4r::lyt::Pane *getPane() override {
virtual nw4r::lyt::Pane *getPane() {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
virtual d2d::LytBase_c *getLyt() {
return &mLyt;
}
virtual const char *getName() const override {
virtual const char *getName() const {
return mLyt.getName();
}
@@ -208,11 +200,16 @@ private:
/**
* A common item component used in various UI screens like the item check, scrap shop,
* pause menu wheels, B item preview in the top right HUD corner.
* NOT used for the HUD wheels.
* pause menu wheels, HUD wheels, B item preview in the top right HUD corner.
*/
class dLytCommonIconItem_c : public d2d::dSubPane {
public:
enum Variant_e {
B_WHEEL,
POUCH,
DOWSING,
};
dLytCommonIconItem_c() : mStateMgr(*this, sStateID::null), mPart(3) {}
~dLytCommonIconItem_c() {}
@@ -276,6 +273,9 @@ private:
STATE_FUNC_DECLARE(dLytCommonIconItem_c, Wait);
STATE_FUNC_DECLARE(dLytCommonIconItem_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytCommonIconItem_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytCommonIconItem_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytCommonIconItem_c);
/* 0x044 */ u8 mPart;
/* 0x048 */ dLytCommonIconItemPart1_c mPart1;
@@ -34,6 +34,7 @@
#define LYT_CMN_ItemBigBugnet (15) // [14] uc_netB_00.tpl
#define LYT_CMN_ItemBoatCannon (16) // [ 7] uc_boatCannon_00.tpl
#define LYT_CMN_ItemHarp (17) // [ 0] tr_tategoto_00.tpl
#define LYT_CMN_ItemInvalid (18) // -------------------------
// Pouch Items
#define LYT_CMN_PouchPotionHealyh (0) // [12] uc_bottleKusuriA_00.tpl
@@ -112,5 +113,6 @@
#define LYT_CMN_DowsingZelda (19) // [13] tr_dauzTarget_19.tpl
#define LYT_CMN_DowsingTrialGate (20) // [14] tr_dauzTarget_20.tpl
#define LYT_CMN_DowsingNewPlantSpecies (21) // [15] tr_dauzTarget_21.tpl
#define LYT_CMN_DowsingInvalid (22) // -------------------------
#endif
+16
View File
@@ -2,6 +2,7 @@
#define D_LYT_CONTROL_GAME_H
#include "d/d_base.h"
#include "s/s_State.hpp"
class dLytControlGame_c : public dBase_c {
public:
@@ -17,7 +18,22 @@ public:
return sInstance;
}
STATE_FUNC_DECLARE(dLytControlGame_c, Normal);
STATE_FUNC_DECLARE(dLytControlGame_c, Pause_SetRes);
STATE_FUNC_DECLARE(dLytControlGame_c, Pause_SyncRes);
STATE_FUNC_DECLARE(dLytControlGame_c, Pause);
STATE_FUNC_DECLARE(dLytControlGame_c, Pause_DelRes);
STATE_FUNC_DECLARE(dLytControlGame_c, Map_SetRes);
STATE_FUNC_DECLARE(dLytControlGame_c, Map_SyncRes);
STATE_FUNC_DECLARE(dLytControlGame_c, Map);
STATE_FUNC_DECLARE(dLytControlGame_c, Map_DelRes);
bool isStateNormal() const {
return *mStateMgr.getStateID() == StateID_Normal;
}
private:
/* 0x00068 */ UI_STATE_MGR_DECLARE(dLytControlGame_c);
static dLytControlGame_c *sInstance;
};
+59 -2
View File
@@ -1,9 +1,9 @@
#ifndef D_LYT_DO_BUTTON_H
#define D_LYT_DO_BUTTON_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytDobutton_c {
public:
@@ -16,17 +16,74 @@ public:
bool init(m2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
bool draw();
static dLytDobutton_c *GetInstance() {
return sInstance;
}
static s32 getField0x47C() {
if (sInstance != nullptr) {
return sInstance->field_0x47C;
} else {
return 0x5E;
}
}
static s32 getField0x480() {
if (sInstance != nullptr) {
return sInstance->field_0x480;
} else {
return 0x29;
}
}
static s32 getNextActionToShow() {
if (sInstance != nullptr) {
return sInstance->mNextDoActionToShow;
} else {
return 0x29;
}
}
static s32 getFn0x8010E5E0() {
if (sInstance != nullptr) {
return sInstance->fn_8010E5E0();
} else {
return 0x29;
}
}
static s32 getFn0x8010E5D0() {
if (sInstance != nullptr) {
return sInstance->fn_8010E5D0();
} else {
return 0x5E;
}
}
static void setActionTextStuff(s32 p1, s32 p2, bool p3) {
if (sInstance != nullptr) {
sInstance->setActionTextStuffInternal(p1, p2, p3);
}
}
private:
void setActionTextStuffInternal(s32, s32, bool);
s32 fn_8010E5D0() const;
s32 fn_8010E5E0() const;
static dLytDobutton_c *sInstance;
private:
STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleWait);
STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleTimeCnt);
STATE_FUNC_DECLARE(dLytDobutton_c, In);
STATE_FUNC_DECLARE(dLytDobutton_c, Wait);
STATE_FUNC_DECLARE(dLytDobutton_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytDobutton_c);
UI_STATE_MGR_DECLARE(dLytDobutton_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[12];
+30
View File
@@ -0,0 +1,30 @@
#ifndef D_LYT_DROP_LINE_H
#define D_LYT_DROP_LINE_H
#include "common.h"
#include "d/a/d_a_item.h"
#include "nw4r/lyt/lyt_pane.h"
class dLytDropLine_c {
public:
dLytDropLine_c() {
sInstance = this;
}
virtual ~dLytDropLine_c() {
sInstance = nullptr;
}
static dLytDropLine_c *GetInstance() {
return sInstance;
}
static nw4r::lyt::Pane *getActivePane();
static nw4r::lyt::Pane *setPane(nw4r::lyt::Pane *pane);
static nw4r::lyt::Pane *update(nw4r::lyt::Pane *pane, nw4r::lyt::Pane *otherPane, dAcItem_c::Trial_e, bool);
static bool finishPartMaybe();
private:
static dLytDropLine_c *sInstance;
};
#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef D_LYT_GAME_OVER_H
#define D_LYT_GAME_OVER_H
#include "d/d_base.h"
class dLytGameOver_c : public dBase_c {
public:
dLytGameOver_c();
virtual ~dLytGameOver_c();
static dLytGameOver_c *GetInstance() {
return sInstance;
}
private:
static dLytGameOver_c *sInstance;
};
#endif
+26 -2
View File
@@ -267,6 +267,7 @@ private:
};
class dLytMapMain_c : public m2d::Base_c {
friend class dLytMap_c;
public:
dLytMapMain_c();
virtual ~dLytMapMain_c();
@@ -276,6 +277,7 @@ public:
void build();
bool isOpenMaybe() const;
bool fn_80139EA0() const;
STATE_FUNC_DECLARE(dLytMapMain_c, Invisible);
STATE_FUNC_DECLARE(dLytMapMain_c, RenderingWait);
@@ -338,10 +340,16 @@ private:
/* 0x8904 */ mVec3_c field_0x8904;
/* 0x8910 */ mVec3_c field_0x8910;
/* 0x891C */ mVec3_c field_0x891C;
// ???
/* 0x8928 */ u8 _0x8928[0x8930 - 0x8928];
/* 0x8930 */ mVec3_c field_0x8930;
/* 0x893C */ mVec3_c field_0x893C;
// ???
/* 0x8948 */ u8 idkfixmelater[0x4BC0];
/* 0x8C94 */ s32 field_0x8C94;
// ...
/* 0x8CC4 */ mVec3_c field_0x8CC4;
/* 0x8CD0 */ mVec3_c field_0x8CD0;
@@ -391,8 +399,24 @@ public:
return mMapMain.isOpenMaybe();
}
bool getFn_80139EA0() const {
return mMapMain.fn_80139EA0();
}
void build();
static bool isValid(s32 val) {
if (val >= 2 && val < 7) {
return true;
}
return false;
}
bool unkMeterCheck() const {
s32 val = mMapMain.field_0x8C94;
return isValid(val) && ((1 << (val - 2)) & 0x1D);
}
private:
/* 0x0004 */ d2d::ResAccIf_c mResAcc;
/* 0x0374 */ dLytMapMain_c mMapMain;
+126 -1
View File
@@ -8,9 +8,134 @@ public:
dLytMeterConfiguration_c();
virtual ~dLytMeterConfiguration_c();
static const dLytMeterConfiguration_c *GetInstance() {
return sInstance;
}
f32 getField_0x1CC() const {
return field_0x1CC;
}
f32 getField_0x1D0() const {
return field_0x1D0;
}
f32 getField_0x1C4() const {
return field_0x1C4;
}
s32 getField_0x1C8() const {
return field_0x1C8;
}
s32 getField_0x1D8() const {
return field_0x1D8;
}
s32 getField_0x1DC() const {
return field_0x1DC;
}
s32 getField_0x1E0() const {
return field_0x1E0;
}
s32 getField_0x1E4() const {
return field_0x1E4;
}
static dLytMeterConfiguration_c *sInstance;
f32 field_0x04[0x7A - 0x01];
/* 0x004 */ u8 field_0x004;
/* 0x005 */ u8 field_0x005;
/* 0x006 */ u8 field_0x006;
/* 0x007 */ u8 field_0x007;
/* 0x008 */ u8 field_0x008;
/* 0x009 */ u8 field_0x009;
/* 0x00A */ u8 field_0x00A;
/* 0x00B */ u8 field_0x00B;
/* 0x00C */ f32 field_0x00C;
/* 0x010 */ u8 field_0x010;
/* 0x011 */ u8 field_0x011;
/* 0x012 */ u8 field_0x012;
/* 0x013 */ u8 field_0x013;
/* 0x014 */ f32 field_0x014;
/* 0x018 */ f32 field_0x018;
/* 0x01C */ u8 field_0x01C;
/* 0x01D */ u8 field_0x01D;
/* 0x01E */ u8 field_0x01E;
/* 0x01F */ u8 field_0x01F;
/* 0x020 */ s32 field_0x020;
/* 0x024 */ s32 field_0x024;
/* 0x028 */ u8 field_0x028;
/* 0x029 */ u8 field_0x029;
/* 0x02A */ u8 field_0x02A;
/* 0x02B */ u8 field_0x02B;
/* 0x02C */ s32 field_0x02C[16];
/* 0x06C */ s32 field_0x06C[16];
/* 0x0AC */ f32 field_0x0AC[16];
/* 0x0EC */ u8 field_0x0EC[16];
/* 0x0FC */ u8 field_0x0FC;
/* 0x0FD */ u8 field_0x0FD;
/* 0x0FE */ u8 field_0x0FE;
/* 0x0FF */ u8 field_0x0FF;
/* 0x100 */ s32 field_0x100[8];
/* 0x121 */ u8 field_0x121;
/* 0x124 */ f32 field_0x124;
/* 0x128 */ f32 field_0x128;
/* 0x12C */ f32 field_0x12C;
/* 0x130 */ f32 field_0x130;
/* 0x134 */ u8 field_0x134;
/* 0x135 */ u8 field_0x135;
/* 0x138 */ f32 field_0x138;
/* 0x13C */ u8 field_0x13C;
/* 0x140 */ f32 field_0x140;
/* 0x144 */ f32 field_0x144;
/* 0x148 */ f32 field_0x148;
/* 0x14C */ f32 field_0x14C;
/* 0x150 */ f32 field_0x150;
/* 0x154 */ f32 field_0x154;
/* 0x158 */ f32 field_0x158;
/* 0x15C */ f32 field_0x15C;
/* 0x160 */ f32 field_0x160;
/* 0x164 */ u8 field_0x164;
/* 0x168 */ f32 field_0x168;
/* 0x16C */ f32 field_0x16C;
/* 0x170 */ f32 field_0x170;
/* 0x174 */ f32 field_0x174;
/* 0x178 */ f32 field_0x178;
/* 0x17C */ f32 field_0x17C;
/* 0x180 */ f32 field_0x180;
/* 0x184 */ f32 field_0x184;
/* 0x188 */ f32 field_0x188;
/* 0x18C */ f32 field_0x18C;
/* 0x190 */ f32 field_0x190;
/* 0x194 */ f32 field_0x194;
/* 0x198 */ f32 field_0x198;
/* 0x19C */ f32 field_0x19C;
/* 0x1A0 */ f32 field_0x1A0;
/* 0x1A4 */ f32 field_0x1A4;
/* 0x1A8 */ f32 field_0x1A8;
/* 0x1AC */ f32 field_0x1AC;
/* 0x1B0 */ u8 field_0x1B0;
/* 0x1B1 */ u8 field_0x1B1;
/* 0x1B4 */ f32 field_0x1B4;
/* 0x1B8 */ f32 field_0x1B8;
/* 0x1BC */ u8 field_0x1BC;
/* 0x1C0 */ f32 field_0x1C0;
/* 0x1C4 */ f32 field_0x1C4;
/* 0x1C8 */ u32 field_0x1C8;
/* 0x1CC */ f32 field_0x1CC;
/* 0x1D0 */ f32 field_0x1D0;
/* 0x1D4 */ u8 field_0x1D4;
/* 0x1D5 */ u8 field_0x1D5;
/* 0x1D6 */ u8 field_0x1D6;
/* 0x1D7 */ u8 field_0x1D7;
/* 0x1D8 */ s32 field_0x1D8;
/* 0x1D8 */ s32 field_0x1DC;
/* 0x1D8 */ s32 field_0x1E0;
/* 0x1D8 */ s32 field_0x1E4;
};
#endif
+17
View File
@@ -0,0 +1,17 @@
#ifndef D_LYT_SAVE_MGR_H
#define D_LYT_SAVE_MGR_H
class dLytSaveMgr_c {
public:
static dLytSaveMgr_c* GetInstance() {
return sInstance;
}
bool fn_80285650() const;
private:
static dLytSaveMgr_c *sInstance;
};
#endif
+8
View File
@@ -68,6 +68,12 @@ public:
void setHeight(f32 height);
static dLytSkyGauge_c *sInstance;
void setWantsIn() {
mWantsIn = true;
}
void setWantsOut() {
mWantsOut = true;
}
private:
STATE_FUNC_DECLARE(dLytSkyGauge_c, None);
@@ -75,6 +81,8 @@ private:
STATE_FUNC_DECLARE(dLytSkyGauge_c, Move);
STATE_FUNC_DECLARE(dLytSkyGauge_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytSkyGauge_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytSkyGauge_c);
/* 0x008 */ d2d::ResAccIf_c mResAcc;
/* 0x3B4 */ dLytSkyGaugeMain_c mMain;
+89 -3
View File
@@ -7,14 +7,99 @@
class LytDoButtonRelated {
public:
LytDoButtonRelated();
virtual ~LytDoButtonRelated();
virtual ~LytDoButtonRelated() {
sInstance = nullptr;
}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
static LytDoButtonRelated *sInstance;
static LytDoButtonRelated *GetInstance() {
return sInstance;
}
enum Action_e {
DO_DASH = 0x5F,
DO_0x74 = 0x74,
DO_RETURN = 0x7F,
DO_STOP = 0x84,
DO_ITEMS = 0x85,
DO_DONE = 0x87,
DO_READY_CANNON = 0x8F,
DO_STOW_CANNON = 0x90,
DO_SAILCLOTH = 0x91,
DO_NONE = 0x98,
};
enum DoButton_e {
DO_BUTTON_A = 0,
DO_BUTTON_B = 1,
DO_BUTTON_C = 2,
DO_BUTTON_Z = 3,
DO_BUTTON_NUN_STK = 4,
DO_BUTTON_REMOCON_BG = 5,
DO_BUTTON_NUN_BG = 6,
DO_BUTTON_CROSS_T = 7,
DO_BUTTON_CROSS_D = 8,
DO_BUTTON_CROSS_L = 9,
DO_BUTTON_CROSS_R = 10,
DO_BUTTON_PLUS = 11,
};
static void set(DoButton_e button, Action_e value) {
if (sInstance != nullptr) {
LytDoButtonRelated *b = sInstance;
b->field_0x04[button] = value;
b->field_0x34[button] = true;
}
}
static void reset(DoButton_e button, Action_e value) {
LytDoButtonRelated *b = sInstance;
if (b != nullptr) {
b->field_0x04[button] = value;
b->field_0x34[button] = false;
}
}
static Action_e get(DoButton_e button) {
if (sInstance != nullptr) {
return sInstance->field_0x04[button];
} else {
return DO_NONE;
}
}
static bool getHas(DoButton_e button) {
if (sInstance != nullptr) {
return sInstance->field_0x34[button];
} else {
return false;
}
}
static Action_e get0x08() {
if (sInstance != nullptr) {
return sInstance->field_0x04[1];
} else {
return DO_NONE;
}
}
static Action_e convertDoButton(s32);
static void fn_8010EC10(Action_e, bool);
static void fn_8010ED50(Action_e, bool);
private:
u8 field_0x04[0x40 - 0x04];
static LytDoButtonRelated *sInstance;
/* 0x04 */ Action_e field_0x04[12];
/* 0x34 */ bool field_0x34[12];
};
// size 0x27C
@@ -28,6 +113,7 @@ public:
}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
bool draw();
static LytBirdButtonRelated *sInstance;
+19
View File
@@ -0,0 +1,19 @@
#ifndef D_LYT_UTIL_ITEMS_H
#define D_LYT_UTIL_ITEMS_H
#include "common.h"
#include "toBeSorted/dowsing_target.h"
bool isPouchBocoburinLocked();
u8 getPouchItemForSlot(s32 slot, bool unk);
bool hasPouchSlot(s32 slot, bool unk);
s32 getPouchItemAmount(s32 slot, bool unk);
u8 getPouchItemNumberColor(s32 slot, bool unk);
f32 getShieldDurability(s32 slot, bool unk);
DowsingTarget::DowsingSlot dowsingSlotForIndex(s32 index);
s32 getLytIndexForDowsingIndex(s32 index);
u16 getDowsingItemIdForIndex(s32 index);
#endif
+74
View File
@@ -0,0 +1,74 @@
#ifndef D_LYT_WIPE_H
#define D_LYT_WIPE_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
class dLytWipeMain_c {
public:
dLytWipeMain_c();
virtual ~dLytWipeMain_c() {}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
bool draw();
void gotoIn();
void gotoWait();
void gotoOut();
void gotoNone();
bool isStateEndReached() const {
return mStateEndReached;
}
private:
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeNone);
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeIn);
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeWait);
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeOut);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytWipeMain_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytWipeMain_c);
/* 0x040 */ d2d::LytBase_c mLyt;
/* 0x0D0 */ d2d::AnmGroup_c mAnm[1];
/* 0x110 */ bool mStateEndReached;
/* 0x111 */ u8 _0x111[0x132 - 0x111];
/* 0x132 */ bool mIsIn;
};
class dLytWipe_c {
public:
dLytWipe_c() : mStateMgr(*this, sStateID::null) {}
bool build();
bool remove();
bool execute();
bool draw();
private:
static dLytWipe_c *sInstance;
STATE_FUNC_DECLARE(dLytWipe_c, None);
STATE_FUNC_DECLARE(dLytWipe_c, In);
STATE_FUNC_DECLARE(dLytWipe_c, Wait);
STATE_FUNC_DECLARE(dLytWipe_c, Out);
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytWipe_c);
/* 0x03C */ d2d::ResAccIf_c mResAcc;
/* 0x3AC */ dLytWipeMain_c mMain;
/* 0x4E0 */ u8 _0x4E0[0x59C - 0x4E0];
/* 0x59C */ bool mWantsIn;
/* 0x59D */ bool mWantsOut;
/* 0x59E */ bool mIsSettled;
/* 0x59F */ bool mVisible;
/* 0x5A0 */ s32 mTransitionStage;
/* 0x5A4 */ s32 mFadeDelay;
};
#endif
+8 -5
View File
@@ -1,6 +1,7 @@
#ifndef D_LYT_TEXTBOX_H
#define D_LYT_TEXTBOX_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "libms/msgfile.h"
#include "nw4r/lyt/lyt_drawInfo.h"
@@ -47,8 +48,11 @@ public:
return mMyScale;
}
void fn_800E0A60(const char *area, ...) {
// TODO
void setMessageWithGlobalTextProcessor2(const char *message, void *unk, ...) {
va_list l;
va_start(l, str);
setMessageWithGlobalTextProcessorV(message, nullptr, unk, l);
va_end(l);
}
void setTextWithGlobalTextProcessor(const wchar_t *str);
@@ -58,9 +62,8 @@ public:
void setTextWithTextProcessor(const wchar_t *str, dTagProcessor_c *tagProcessor, void *, ...);
s32 calcTextLines(const wchar_t *src, dTagProcessor_c *tagProcessor);
void setMessageWithGlobalTextProcessorAndMsbtInfo(
MsbtInfo *info, const char *labelId, wchar_t *destBuf, u32 maxLen
);
void
setMessageWithGlobalTextProcessorAndMsbtInfo(MsbtInfo *info, const char *labelId, wchar_t *destBuf, u32 maxLen);
void loadTextFormatVars();
void setupGX() const;
+332 -121
View File
@@ -1,8 +1,11 @@
#ifndef D_LYT_METER_H
#define D_LYT_METER_H
// TODO sort includes for vtable order
// clang-format off
#include "common.h"
#include "d/lyt/d2d.h"
#include "d/d_cursor_hit_check.h"
#include "d/lyt/d_lyt_do_button.h"
#include "d/lyt/meter/d_lyt_meter_shield_gauge.h"
#include "d/lyt/d_lyt_common_icon_item.h"
@@ -20,122 +23,115 @@
#include "d/lyt/meter/d_lyt_meter_ganbari_gauge.h"
#include "d/lyt/meter/d_lyt_meter_event_skip.h"
#include "d/lyt/meter/d_lyt_meter_item_select.h"
// clang-format on
class dLytMeter1Button_c : public d2d::dSubPane {
public:
dLytMeter1Button_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeter1Button_c() {}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
private:
STATE_FUNC_DECLARE(dLytMeter1Button_c, Wait);
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUse);
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeter1Button_c, Unuse);
UI_STATE_MGR_DECLARE(dLytMeter1Button_c);
d2d::dLytSub mLyt;
d2d::AnmGroup_c mAnmGroups[3];
/* 0x198 */ dWindow_c *mpWindow;
/* 0x19C */ dTextBox_c *mpTextbox;
/* 0x1A0 */ u32 field_0x1A0;
/* 0x1A4 */ s32 field_0x1A4;
/* 0x1A8 */ s32 field_0x1A8;
/* 0x1AC */ u8 field_0x1AC;
/* 0x1AD */ u8 field_0x1AD;
};
class dLytMeter2Button_c : public d2d::dSubPane {
public:
dLytMeter2Button_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeter2Button_c() {}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
private:
STATE_FUNC_DECLARE(dLytMeter2Button_c, Wait);
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUse);
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeter2Button_c, Unuse);
UI_STATE_MGR_DECLARE(dLytMeter2Button_c);
d2d::dLytSub mLyt;
d2d::AnmGroup_c mAnmGroups[3];
/* 0x198 */ dWindow_c *mpWindow;
/* 0x19C */ dTextBox_c *mpTextbox;
/* 0x1A0 */ u32 field_0x1A0;
/* 0x1A4 */ s32 field_0x1A4;
/* 0x1A8 */ s32 field_0x1A8;
/* 0x1AC */ u8 field_0x1AC;
/* 0x1AD */ u8 field_0x1AD;
};
class dLytMeterParts_c {
public:
dLytMeterParts_c() : mStateMgr(*this, sStateID::null) {}
private:
STATE_FUNC_DECLARE(dLytMeterParts_c, Invisible);
STATE_FUNC_DECLARE(dLytMeterParts_c, In);
STATE_FUNC_DECLARE(dLytMeterParts_c, Visible);
STATE_FUNC_DECLARE(dLytMeterParts_c, Out);
UI_STATE_MGR_DECLARE(dLytMeterParts_c);
u8 field_0x3C[0x10];
};
// TODO sort includes for vtable order
// clang-format off
#include "d/lyt/meter/d_lyt_meter_key.h"
#include "d/lyt/meter/d_lyt_meter_parts.h"
#include "d/lyt/d_lyt_unknowns.h"
#include "d/lyt/meter/d_lyt_meter_drink.h"
#include "d/lyt/meter/d_lyt_meter_timer.h"
#include "d/lyt/d_lyt_bird_gauge.h"
#include "d/lyt/d_lyt_boss_gauge.h"
#include "d/lyt/d_lyt_sky_gauge.h"
#include "m/m_vec.h"
// clang-format on
class dLytMeter_c {
class dLytMeter1Button_c;
class dLytMeter2Button_c;
class dLytMeterTimer_c;
class LytMeterTimerPart1_c;
class LytMeterTimerPart2_c;
class dLytMeterKakeraKey_c;
class dLytMeterBossKey_c;
class dLytMeterSmallKey_c;
class dLytMeterDrink_c;
class dLytSkyGauge_c;
class dLytBirdGauge_c;
class dLytBossGauge_c;
// apart from dLytMeterParts_c the names here are made up
enum MeterFlag_e {
METER_BTN_CROSS_UP = 0x1,
METER_BTN_CROSS_DOWN = 0x2,
METER_BTN_CROSS_LEFT = 0x4,
METER_BTN_CROSS_RIGHT = 0x8,
METER_BTN_B = 0x10,
METER_BTN_PLUS = 0x20,
METER_BTN_MINUS = 0x40,
METER_BTN_1 = 0x80,
METER_BTN_2 = 0x100,
METER_BTN_NUN_STK = 0x200,
METER_BTN_C = 0x400,
METER_BTN_Z = 0x800,
METER_BTN_0x1000 = 0x1000,
METER_BTN_CROSS = METER_BTN_CROSS_UP | METER_BTN_CROSS_DOWN | METER_BTN_CROSS_LEFT | METER_BTN_CROSS_RIGHT,
};
class dLytMeterMain_c {
friend class dLytMeter_c;
public:
dLytMeter_c();
virtual ~dLytMeter_c() {}
dLytMeterMain_c();
virtual ~dLytMeterMain_c() {}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool draw();
bool isNotSilentRealmOrLoftwing();
bool fn_800C9F70();
bool fn_800C9FE0();
bool fn_800CA040();
bool fn_800D5350();
bool fn_800D5380(u8);
void fn_800D5290();
bool fn_800D5590();
void fn_800D5630();
bool fn_800D5650();
bool fn_800D5680();
bool fn_800D56B0();
void checkPaneVisibility();
bool execute();
bool isSilentRealm();
bool fn_800D53D0();
bool fn_800D5420();
void setUiMode(u16 value) const;
u8 getUiMode();
bool getItemSelectNotHiddenByAreaCaption() const {
return mPanesNotHiddenByAreaCaption[0];
}
bool getMinusBtnNotHiddenByAreaCaption() const {
return mPanesNotHiddenByAreaCaption[1];
}
bool getDowsingNotHiddenByAreaCaption() const {
return mPanesNotHiddenByAreaCaption[8];
}
void setGanbariGaugeHiddenByAreaCaption(bool visible) {
mPanesNotHiddenByAreaCaption[15] = visible;
}
bool getField_0x1377E() const {
return field_0x1377E;
}
bool getField_0x1377F() const {
return field_0x1377F;
}
dLytMeterNunStk_c *getNunStk() {
return &mNunStk;
}
private:
/* 0x00004 */ d2d::ResAccIf_c mResAcc;
/* 0x00374 */ d2d::LytBase_c mLyt;
/* 0x00404 */ d2d::AnmGroup_c mAnmGroups[34];
u8 field_0x00C84[0x00C8C - 0x00C84];
/* 0x00C84 */ u8 _0x00C84[0x00C8C - 0x00C84];
/* 0x00C8C */ dLytMeterGanbariGauge_c mGanbariGauge;
/* 0x011E8 */ dLytMeterRupy_c mRupy;
/* 0x01A98 */ dLytMeterItemSelect_c mItemSelect;
@@ -165,51 +161,266 @@ public:
/* 0x130F4 */ d2d::SubPaneList mMeters;
/* 0x13100 */ d2d::SubPaneListNode mNodes[16];
/* 0x13200 */ u8 field_0x13200[0x13204 - 0x13200];
/* 0x13200 */ u8 _0x13200[0x13204 - 0x13200];
/* 0x13204 */ dLytMeterParts_c mParts[16];
/* 0x136C4 */ mVec3_c mPosArray1[2];
/* 0x136DC */ mVec3_c mPosArray2[7];
/* 0x13730 */ mVec3_c mPos1;
/* 0x1373C */ mVec3_c mPos2;
/* 0x13748 */ u8 field_0x13748[0x13750 - 0x13748];
/* 0x136C4 */ mVec3_c mShieldPositions[2];
/* 0x136DC */ mVec3_c mRupyPositions[7];
/* 0x13730 */ mVec3_c mShieldPos;
/* 0x1373C */ mVec3_c mRupyPos;
/* 0x13748 */ s32 field_0x13748;
/* 0x1374C */ s32 field_0x1374C;
/* 0x13750 */ s32 field_0x13750;
/* 0x13754 */ u8 field_0x13754[0x137B4 - 0x13754];
/* 0x13754 */ s32 field_0x13754;
/* 0x13758 */ s32 mShieldPosIndex;
/* 0x1375C */ s32 mRupyPosIndex;
/* 0x13760 */ s32 mRupyPosInterpFrame;
/* 0x13764 */ s32 mShieldPosInterpFrame;
/* 0x13768 */ s32 mOldShieldPosIndex;
/* 0x1376C */ s32 mOldRupyPosIndex;
/* 0x13770 */ u8 field_0x13770;
/* 0x13771 */ bool field_0x13771;
/* 0x13772 */ bool field_0x13772;
/* 0x13773 */ bool field_0x13773;
/* 0x13774 */ bool field_0x13774;
/* 0x13775 */ bool field_0x13775;
/* 0x13776 */ bool mTimerVisible;
/* 0x13777 */ bool mBirdGaugeVisible;
/* 0x13778 */ bool mSkyGaugeVisible;
/* 0x13779 */ bool mBossGaugeVisible;
/* 0x1377A */ bool mKakeraKeyVisible;
/* 0x1377B */ bool mBossKeyVisible;
/* 0x1377C */ bool mSmallKeyVisible;
/* 0x1377D */ bool mDrinkVisible;
/* 0x1377E */ bool field_0x1377E;
/* 0x1377F */ bool field_0x1377F;
/* 0x13780 */ bool field_0x13780;
/* 0x13781 */ bool field_0x13781;
/* 0x13782 */ bool mPanesVisible[16];
/* 0x13792 */ bool mPanesNotHiddenByAreaCaption[16];
/* 0x137A2 */ bool mPanesForceShown[16];
/* 0x137B2 */ bool field_0x137B2;
/* 0x137B4 */ mVec3_c mPos3;
/* 0x13B38 */ u32 field_0x13B38;
/* 0x137C0 */ u32 field_0x137C0;
};
// made up name
class dLytMeterContainer_c {
class dLytMeter_c {
public:
dLytMeterContainer_c();
virtual ~dLytMeterContainer_c() {
dLytMeter_c();
virtual ~dLytMeter_c() {
sInstance = nullptr;
}
bool build();
bool remove();
bool execute();
bool draw();
// FIXME This goes to doButton!!!
bool isButtonFlag(u32 flag) {
return (mMeter.field_0x13B38 & flag) == flag;
bool fn_800D5670();
bool fn_800D56F0();
bool fn_800D97A0();
/** Running out of good names for this function, but this allows
the area caption to temporarily hide the main HUD. */
void setAreaCaptionOverrideVisibility(bool visible);
void fn_800D9710();
void fn_800D9730(u8 val);
void fn_800D9780(bool val);
static void fn_800D97E0(u8);
static void setVisible(bool);
static void setStaminaWheelPercent(f32 percent);
void setStaminaWheelPercentInternal(f32 percent);
static dLytMeter_c *GetInstance() {
return sInstance;
}
static dLytMeterContainer_c *GetInstance() {
return sInstance;
static dLytMeterMain_c *GetMain() {
return &sInstance->mMain;
}
// Not all of these inlines exist on dLytMeterMain_c
// because accessing via GetMeter->get... causes
// different instructions sometimes
s32 getMeterField_0x13750() const {
return mMain.field_0x13750;
}
u8 getMeterField_0x13770() const {
return mMain.field_0x13770;
}
bool getMeterField_0x13774() const {
return mMain.field_0x13774;
}
bool getMeterField_0x1377F() const {
return mMain.field_0x1377F;
}
bool checkAllFlags(u32 mask) const {
return (mFlags & mask) == mask;
}
void clearFlags(u32 mask) {
mFlags = mFlags & ~mask;
}
void setFlags(u32 mask) {
mFlags = mFlags | mask;
}
void resetFlags() {
mFlags = 0xFFFFFFFF;
}
static s32 getCrossBtn0x7BF8() {
if (sInstance != nullptr) {
return sInstance->mMain.mCrossBtn.getField_0x620();
} else {
return 6;
}
}
static bool getItemSelect0x75A2() {
if (sInstance != nullptr) {
return sInstance->mMain.mItemSelect.getField_0x57A2();
} else {
return 0;
}
}
static void setRupyField_0x8A9(u8 val) {
if (sInstance != nullptr) {
sInstance->mMain.mRupy.setField_0x8A9(val);
}
}
static void setRupyField_0x8AA(u8 val) {
if (sInstance != nullptr) {
sInstance->mMain.mRupy.setField_0x8AA(val);
}
}
static void setRupyField_0x8AC(u8 val) {
if (sInstance != nullptr) {
sInstance->mMain.mRupy.setField_0x8AC(val);
}
}
static u8 getRupyField_0x8AC() {
if (sInstance != nullptr) {
return sInstance->mMain.mRupy.getField_0x8AC();
} else {
return 0;
}
}
static s32 getHeartField_0x78C() {
if (sInstance != nullptr) {
return sInstance->mMain.mHeart.getField_0x78C();
} else {
return 0;
}
}
static void setField_0x13B61(u8 val) {
if (sInstance != nullptr) {
sInstance->field_0x13B61 = val;
}
}
static void setField_0x13B63(u8 val) {
if (sInstance != nullptr) {
sInstance->field_0x13B63 = val;
}
}
static u8 getField_0x13B63() {
if (sInstance != nullptr) {
return sInstance->field_0x13B63;
} else {
return 0;
}
}
static void setField_0x13B64(u8 val) {
if (sInstance != nullptr) {
sInstance->field_0x13B64 = val;
}
}
static u8 getField_0x13B66() {
if (sInstance != nullptr) {
return sInstance->field_0x13B66;
} else {
return 0;
}
}
static u8 getDowsing0x550A() {
if (sInstance != nullptr) {
return sInstance->mMain.mDowsing.getField_0x550A();
} else {
return 0;
}
}
static bool getfn_800C9FE0() {
if (sInstance != nullptr) {
return sInstance->mMain.fn_800C9FE0();
} else {
return false;
}
}
static bool getfn_800D97A0() {
if (sInstance != nullptr) {
return sInstance->fn_800D97A0();
} else {
return false;
}
}
static bool getMinusBtnFn800F7600() {
if (sInstance != nullptr) {
return sInstance->mMain.mMinusBtn.fn_800F7600();
} else {
return false;
}
}
static bool getDowsingFn800FE4B0() {
if (sInstance != nullptr) {
return sInstance->mMain.mDowsing.fn_800FE4B0();
} else {
return false;
}
}
private:
/* 0x00004 */ d2d::ResAccIf_c mResAcc;
/* 0x00374 */ dLytMeterEventSkip_c *mpEventSkip;
/* 0x00378 */ dLytMeter_c mMeter;
/* 0x00378 */ dLytMeterMain_c mMain;
/* 0x13B3C */ dLytDobutton_c *mpDoButton;
/* 0x13B40 */ LytDoButtonRelated *mpDoButtonRelated;
/* 0x13B44 */ LytBirdButtonRelated *mpBirdRelated;
/* 0x13B48 */ bool mVisible;
/* 0x13B49 */ u8 _0x13B49[0x13B50 - 0x13B49];
/* 0x13B50 */ s32 mFlags;
/* 0x13B54 */ s32 field_0x13B54;
/* 0x13B58 */ s32 field_0x13B58;
/* 0x13B5C */ s32 field_0x13B5C;
/* 0x13B60 */ bool field_0x13B60;
/* 0x13B61 */ bool field_0x13B61;
/* 0x13B62 */ bool field_0x13B62;
/* 0x13B63 */ bool field_0x13B63;
/* 0x13B64 */ bool field_0x13B64;
/* 0x13B65 */ bool field_0x13B65;
/* 0x13B66 */ bool field_0x13B66;
static dLytMeterContainer_c *sInstance;
static dLytMeter_c *sInstance;
};
#endif
+20 -14
View File
@@ -3,7 +3,6 @@
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterABtn_c : public d2d::dSubPane {
public:
@@ -17,7 +16,7 @@ public:
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const {
virtual const char *getName() const override {
return mLyt.getName();
}
@@ -26,8 +25,13 @@ public:
mpContainerAnmGroup1 = g1;
mpContainerAnmGroup2 = g2;
}
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
private:
void fn_800E0870(u32);
void setMessage(s32 id);
STATE_FUNC_DECLARE(dLytMeterABtn_c, InvisibleWait);
STATE_FUNC_DECLARE(dLytMeterABtn_c, In);
@@ -37,24 +41,26 @@ private:
STATE_FUNC_DECLARE(dLytMeterABtn_c, Active);
STATE_FUNC_DECLARE(dLytMeterABtn_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterABtn_c);
d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterABtn_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterABtn_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
/* 0x198 */ d2d::AnmGroup_c *mpContainerAnmGroup1;
/* 0x19C */ d2d::AnmGroup_c *mpContainerAnmGroup2;
/* 0x1A0 */ nw4r::lyt::Pane *mpPane;
/* 0x1A4 */ void *field_0x1A4;
/* 0x1A4 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x1A8 */ dTextBox_c *mpTextBoxes[2];
/* 0x1B0 */ dWindow_c *mpWindow;
/* 0x1B4 */ dTextBox_c *mpSizeBox;
/* 0x1B8 */ u32 field_0x1B8;
/* 0x1BC */ u32 field_0x1BC;
/* 0x1C0 */ u32 field_0x1C0;
/* 0x1C4 */ u32 field_0x1C4;
/* 0x1B0 */ dWindow_c *mpWindow[1];
/* 0x1B4 */ dTextBox_c *mpSizeBox[1];
/* 0x1B8 */ s32 field_0x1B8;
/* 0x1BC */ s32 field_0x1BC;
/* 0x1C0 */ BOOL field_0x1C0;
/* 0x1C4 */ s32 field_0x1C4;
/* 0x1C8 */ u8 field_0x1C8;
/* 0x1C9 */ u8 field_0x1C9;
/* 0x1CA */ u8 field_0x1CA;
/* 0x1CB */ u8 field_0x1CB;
/* 0x1CB */ bool mOldTextState;
};
#endif
+76 -13
View File
@@ -2,23 +2,53 @@
#define D_LYT_METER_CROSS_BTN_H
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
// Size 0x80
class dLytMeterCrossBtnParts_c {
friend class dLytMeterCrossBtn_c;
public:
dLytMeterCrossBtnParts_c(): mStateMgr(*this, sStateID::null) {}
dLytMeterCrossBtnParts_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterCrossBtnParts_c() {}
void init();
void execute(bool bIsVisible);
bool isActive() const {
return *mStateMgr.getStateID() == StateID_Active;
}
private:
void setMessage(s32 id);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Wait);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, On);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Active);
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterCrossBtnParts_c);
u32 padding[17];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterCrossBtnParts_c);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtnParts_c);
/* 0x3C */ d2d::LytBase_c *mpLyt;
/* 0x40 */ d2d::AnmGroup_c *mpAnm[2];
/* 0x48 */ dTextBox_c *mpTextBoxes[2];
/* 0x50 */ dWindow_c *mpWindow;
/* 0x54 */ dTextBox_c *mpSizeBox;
/* 0x58 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x5C */ s32 mIndex;
/* 0x60 */ s32 field_0x60;
/* 0x64 */ s32 field_0x64;
/* 0x68 */ s32 field_0x68;
/* 0x6C */ s32 field_0x6C;
/* 0x70 */ s32 field_0x70;
/* 0x74 */ s32 field_0x74;
/* 0x78 */ s32 mOnDelay;
/* 0x7C */ u8 field_0x7C;
};
class dLytMeterCrossBtn_c : public d2d::dSubPane {
@@ -27,23 +57,56 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterCrossBtn_c() {}
s32 getField_0x620() const {
return field_0x620;
}
void setOwnerPane(nw4r::lyt::Pane *pane);
bool fn_800FA730() const;
private:
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Wait);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUse);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Unuse);
UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[12];
/* 0x3D8 */ u8 field_0x3D8[0x420 - 0x3D8];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[12];
/* 0x3D8 */ nw4r::lyt::Pane *mpPane;
/* 0x3DC */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x3E0 */ dTextBox_c *mpTextboxes[8];
/* 0x400 */ dWindow_c *mpWindows[4];
/* 0x410 */ dTextBox_c *mpSizeBoxes[4];
/* 0x420 */ dLytMeterCrossBtnParts_c mParts[4];
/* 0x??? */ u8 padding[0x78A0 - 0x7880];
/* 0x620 */ s32 field_0x620;
/* 0x624 */ s32 field_0x624;
/* 0x628 */ u16 field_0x628;
/* 0x62C */ s32 mCallCount0;
/* 0x630 */ s32 mCallCount1;
/* 0x634 */ u8 field_0x634;
/* 0x635 */ u8 field_0x635;
/* 0x636 */ u8 field_0x636;
/* 0x637 */ u8 field_0x637;
/* 0x638 */ u8 field_0x638;
/* 0x639 */ u8 field_0x639;
/* 0x63A */ u8 field_0x63A;
/* 0x63B */ u8 field_0x63B;
/* 0x63C */ u8 field_0x63C;
};
#endif
+150 -28
View File
@@ -3,23 +3,39 @@
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_common_icon_item.h"
#include "d/lyt/d_textbox.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterDowsingMenuIcon_c {
public:
dLytMeterDowsingMenuIcon_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeterDowsingMenuIcon_c() {}
void init();
void execute();
void reset();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, Wait);
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, On);
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, Select);
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterDowsingMenuIcon_c);
u32 field_0x40;
u32 field_0x44;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingMenuIcon_c);
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingMenuIcon_c);
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
/* 0x44 */ u32 mShouldBeSelect;
};
class dLytMeterDowsingBlink_c {
@@ -27,15 +43,29 @@ public:
dLytMeterDowsingBlink_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterDowsingBlink_c() {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, Wait);
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, On);
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, Select);
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterDowsingBlink_c);
u32 field_0x40;
u32 field_0x44;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingBlink_c);
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingBlink_c);
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
/* 0x44 */ u32 mShouldBeSelect;
};
class dLytMeterDowsingInput_c {
@@ -43,15 +73,29 @@ public:
dLytMeterDowsingInput_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterDowsingInput_c() {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, Wait);
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, On);
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, Select);
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterDowsingInput_c);
u32 field_0x40;
u32 field_0x44;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingInput_c);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingInput_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
class dLytMeterDowsingText_c {
@@ -59,15 +103,29 @@ public:
dLytMeterDowsingText_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterDowsingText_c() {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, Wait);
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, On);
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, Select);
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterDowsingText_c);
u32 field_0x40;
u32 field_0x44;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingText_c);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingText_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
class dLytMeterDowsing_c : public d2d::dSubPane {
@@ -76,13 +134,50 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterDowsing_c() {}
bool shouldCall() const;
bool fn_800FE3C0(s32 arg);
bool fn_800FE490() const;
bool fn_800FE4B0() const;
bool fn_800FE610();
u8 getField_0x550A() const {
return field_0x550A;
}
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
void setField_0x54E0(s32 value) {
field_0x54E0 = value;
}
private:
void setItemName(s32 id);
void setMessage(s32 id);
u8 getSelectedDowsingSlot() const;
void fn_800FE110();
void fn_800FE220();
s32 convertToLytIndex(s32 slot) const;
s32 convertSlotIndexToAnm(s32 slot) const;
s32 fn_800FE9C0(s32) const;
nw4r::lyt::Pane *getPaneByIndex(s32 idx) const {
return mpPanes[idx];
}
STATE_FUNC_DECLARE(dLytMeterDowsing_c, Invisible);
STATE_FUNC_DECLARE(dLytMeterDowsing_c, Wait);
STATE_FUNC_DECLARE(dLytMeterDowsing_c, MenuSelectingIn);
@@ -95,21 +190,48 @@ private:
STATE_FUNC_DECLARE(dLytMeterDowsing_c, DemoMove);
STATE_FUNC_DECLARE(dLytMeterDowsing_c, DemoOut);
/* 0x008 */ dLytMeterDowsingMenuIcon_c mIcon[8];
/* 0x248 */ dLytMeterDowsingBlink_c mBlink;
/* 0x28C */ dLytMeterDowsingInput_c mInput;
/* 0x2D0 */ dLytMeterDowsingText_c mText[2];
/* 0x358 */ UI_STATE_MGR_DECLARE(dLytMeterDowsing_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterDowsing_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsing_c);
/* 0x490 */ d2d::dLytSub mLyt;
/* 0x0008 */ dLytMeterDowsingMenuIcon_c mIcon[8];
/* 0x0248 */ dLytMeterDowsingBlink_c mBlink;
/* 0x028C */ dLytMeterDowsingInput_c mInput;
/* 0x02D0 */ dLytMeterDowsingText_c mText[2];
/* 0x0358 */ UI_STATE_MGR_DECLARE(dLytMeterDowsing_c);
/* 0x428 */ d2d::AnmGroup_c mAnmGroups[29];
/* 0xB68 */ u8 field_0xB68[0xBEC - 0xB68];
/* 0xBEC */ dLytCommonIconItem_c mItemIcons[9];
/* 0x0490 */ d2d::dLytSub mLyt;
/* 0x5434 */ d2d::SubPaneList mNodeList;
/* 0x5440 */ d2d::SubPaneListNode mNodes[9];
/* 0x??? */ u8 padding[0x11E34 - 0x11DF8];
/* 0x0428 */ d2d::AnmGroup_c mAnm[29];
/* 0x0B68 */ nw4r::lyt::Pane *mpPanes[22];
/* 0x0BC0 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x0BC4 */ dWindow_c *mpWindows[3];
/* 0x0BD0 */ dTextBox_c *mpSizeBoxes[3];
/* 0x0BDC */ dTextBox_c *mpTextBoxes[4];
/* 0x0BEC */ dLytCommonIconItem_c mItemIcons[9];
/* 0x5434 */ d2d::SubPaneList mSubpaneList;
/* 0x5440 */ d2d::SubPaneListNode mSubpanes[9];
/* 0x54D0 */ f32 mArrowRotation;
/* 0x54D4 */ f32 mArrowLength;
/* 0x54D8 */ s32 field_0x54D8;
/* 0x54D8 */ s32 field_0x54DC;
/* 0x54E0 */ s32 field_0x54E0;
/* 0x54E4 */ s32 field_0x54E4;
/* 0x54E8 */ s32 field_0x54E8;
/* 0x54EC */ s32 field_0x54EC;
/* 0x54F0 */ s32 field_0x54F0;
/* 0x54F4 */ s32 field_0x54F4;
/* 0x54F8 */ u32 field_0x54F8;
/* 0x54FC */ s32 mDemoFrame;
/* 0x5500 */ s32 field_0x5500;
/* 0x5504 */ u8 field_0x5504;
/* 0x5505 */ u8 field_0x5505;
/* 0x5506 */ u8 field_0x5506;
/* 0x5507 */ u8 field_0x5507;
/* 0x5508 */ u8 field_0x5508;
/* 0x5509 */ u8 field_0x5509;
/* 0x550A */ u8 field_0x550A;
/* 0x550B */ u8 field_0x550B;
};
#endif
+12 -1
View File
@@ -6,7 +6,6 @@
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
// Size 0x54
class dLytMeterDrinkParts_c {
@@ -46,6 +45,8 @@ private:
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, Visible);
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDrinkParts_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterDrinkParts_c);
/* 0x03C */ d2d::AnmGroup_c *mAnmGroups[3];
/* 0x048 */ s32 field_0x48;
@@ -71,6 +72,14 @@ public:
bool draw();
bool execute();
void setShouldBeVisible(bool v) {
field_0x6F4 = v;
}
void setField_0x6E0(const mVec3_c &v) {
field_0x6E0 = v;
}
private:
bool fn_800E5C40(int);
int getPartForDrinkType(dLytMeterDrinkParts_c::DrinkType_e ty) const;
@@ -82,6 +91,8 @@ private:
STATE_FUNC_DECLARE(dLytMeterDrink_c, Move);
STATE_FUNC_DECLARE(dLytMeterDrink_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDrink_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterDrink_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[20];
+14 -6
View File
@@ -2,28 +2,36 @@
#define D_LYT_METER_EVENT_SKIP_H
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
// size 0x164
class dLytMeterEventSkip_c {
public:
dLytMeterEventSkip_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeterEventSkip_c() {}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
bool draw();
private:
bool shouldPromptForSkip() const;
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Invisible);
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, In);
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Visible);
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Out);
UI_STATE_MGR_DECLARE(dLytMeterEventSkip_c);
d2d::LytBase_c mLyt;
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[2];
/* 0x150 */ u8 field_0x150[0x164 - 0x150];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterEventSkip_c);
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMeterEventSkip_c);
/* 0x03C */ d2d::LytBase_c mLyt;
/* 0x0D0 */ d2d::AnmGroup_c mAnm[2];
/* 0x150 */ dTextBox_c *mpTextBoxes[2];
/* 0x158 */ dWindow_c *mpWindow;
/* 0x15C */ dTextBox_c *mpSizeBox;
/* 0x160 */ bool mVisible;
};
#endif
@@ -1,22 +1,54 @@
#ifndef D_LYT_METER_GANBARI_GAUGE_H
#define D_LYT_METER_GANBARI_GAUGE_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterGanbariGauge_c : public d2d::dSubPane {
public:
dLytMeterGanbariGauge_c() : mStateMgr1(*this, sStateID::null), mStateMgr2(*this, sStateID::null) {}
dLytMeterGanbariGauge_c() : mStateMgrMain(*this, sStateID::null), mStateMgrWheel(*this, sStateID::null) {}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterGanbariGauge_c() {}
bool fn_80104760() const;
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
void setStaminaPercent(f32 value) {
mStaminaPercent = value;
}
void setField_0x539(bool v) {
field_0x539 = v;
}
private:
void realizeAnimState();
static bool isStaminaLow(f32);
static bool isStaminaCritical(f32);
bool fn_80104710(bool) const;
bool isCrawling() const;
static bool swimmingRelated();
bool fn_801047B0() const;
bool displayAirInsteadOfStamina();
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, InvisibleWait);
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, In);
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, Wait);
@@ -31,13 +63,38 @@ private:
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, Recovery);
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, ToMax);
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgr1;
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgr2;
void changeState(const sStateIDIf_c &value) {
mStateMgrMain.changeState(value);
}
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgrMain;
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgrWheel;
/* 0x080 */ d2d::dLytSub mLyt;
/* 0x114 */ d2d::AnmGroup_c mAnmGroups[16];
/* 0x??? */ u8 padding[0x11E8 - 0x11A0];
/* 0x114 */ d2d::AnmGroup_c mAnm[16];
/* 0x514 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x518 */ f32 mStaminaPercent;
/* 0x51C */ f32 field_0x51C;
/* 0x520 */ u8 _0x520[0x524 - 0x520];
/* 0x524 */ mVec3_c field_0x524;
/* 0x530 */ u8 field_0x530;
/* 0x534 */ s32 field_0x534;
/* 0x538 */ u8 field_0x538;
/* 0x539 */ u8 field_0x539;
/* 0x53C */ s32 mOutWaitTimer;
/* 0x540 */ s32 field_0x540;
/* 0x544 */ s32 field_0x544;
/* 0x548 */ s32 field_0x548;
/* 0x54C */ f32 field_0x54C;
/* 0x550 */ f32 field_0x550;
/* 0x554 */ f32 field_0x554;
u8 field_0x558;
u8 field_0x559;
bool field_0x55A;
u8 field_0x55B;
};
STATIC_ASSERT(sizeof(dLytMeterGanbariGauge_c) == 0x55C);
#endif
+43 -7
View File
@@ -2,6 +2,7 @@
#define D_LYT_METER_HEART_H
#include "d/lyt/d2d.h"
#include "nw4r/lyt/lyt_pane.h"
class dLytMeterHeart_c : public d2d::dSubPane {
public:
@@ -9,16 +10,51 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterHeart_c() {}
private:
s32 getField_0x78C() const {
return field_0x78C;
}
d2d::dLytSub mLyt;
/* 0xD8 */ d2d::AnmGroup_c mAnm[26];
/* 0x??? */ u8 padding[0x12DA4 - 0x12D24];
u8 getCurrentHealthCapacity() const;
private:
u8 getCurrentHealth() const;
void realizeHeartsState();
void executeInternal();
s32 getNumDisplayedHearts() const;
s32 getDisplayedHealthCapacity() const;
/* 0x008 */ d2d::dLytSub mLyt;
/* 0x09C */ d2d::AnmGroup_c mAnm[26];
/* 0x71C */ nw4r::lyt::Pane *mpHeartPanes[20];
/* 0x76C */ nw4r::lyt::Pane *mpAlphaPane;
/* 0x770 */ nw4r::lyt::Pane *mpMainPane;
/* 0x774 */ s32 mCurrentHealth;
/* 0x778 */ s32 mCurrentHealthCapacity;
/* 0x77C */ s32 mStoredHealth;
/* 0x780 */ s32 mStoredHealthCapacity;
/* 0x784 */ s32 mHealthCapacityIncreaseDelayTimer;
/* 0x788 */ s32 mEffectHeartIdx;
/* 0x78C */ s32 field_0x78C;
/* 0x790 */ s32 field_0x790;
/* 0x794 */ u8 field_0x794;
/* 0x795 */ u8 field_0x795;
/* 0x796 */ u8 field_0x796;
/* 0x797 */ bool field_0x797;
/* 0x798 */ bool mIsLoop;
/* 0x799 */ bool mIsDanger;
/* 0x79A */ u8 field_0x79A;
};
#endif
+267 -50
View File
@@ -1,53 +1,154 @@
#ifndef D_LYT_METER_ITEM_SELECT_H
#define D_LYT_METER_ITEM_SELECT_H
#include "d/a/d_a_itembase.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_common_icon_item.h"
#include "toBeSorted/effects_struct.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/effects_struct.h"
class dLytMeterItemSelectIcon_c {
public:
dLytMeterItemSelectIcon_c(): mStateMgr(*this, sStateID::null) {}
dLytMeterItemSelectIcon_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterItemSelectIcon_c() {}
private:
UI_STATE_MGR_DECLARE(dLytMeterItemSelectIcon_c);
u32 padding;
u32 padding2;
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, Wait);
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, On);
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, Select);
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, Off);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectIcon_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
class dLytMeterItemSelectBlink_c {
public:
dLytMeterItemSelectBlink_c(): mStateMgr(*this, sStateID::null) {}
dLytMeterItemSelectBlink_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterItemSelectBlink_c() {}
private:
UI_STATE_MGR_DECLARE(dLytMeterItemSelectBlink_c);
u32 padding;
u32 padding2;
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Wait);
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, On);
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Select);
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Off);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectBlink_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
class dLytMeterItemSelectText_c {
public:
dLytMeterItemSelectText_c(): mStateMgr(*this, sStateID::null) {}
dLytMeterItemSelectText_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterItemSelectText_c() {}
private:
UI_STATE_MGR_DECLARE(dLytMeterItemSelectText_c);
u32 padding;
u32 padding2;
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Wait);
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, On);
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Select);
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Off);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectText_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
class dLytMeterItemSelectBtn_c {
public:
dLytMeterItemSelectBtn_c(): mStateMgr(*this, sStateID::null) {}
dLytMeterItemSelectBtn_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterItemSelectBtn_c() {}
private:
UI_STATE_MGR_DECLARE(dLytMeterItemSelectBtn_c);
u8 padding[0x58 - 0x3C];
void init(s32 i, d2d::dLytSub *lyt, nw4r::lyt::Pane *pane);
void setVisible(bool bVisible, bool bInstant);
void setVisible(bool bVisible);
void setVisible2(bool bVisible);
void execute();
bool isSettled() const;
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
u8 getField_0x57() const {
return field_0x57;
}
void setField_0x57(u8 val) {
field_0x57 = val;
}
bool getShouldBeVisible() const {
return mShouldBeVisible;
}
bool getInstant() const {
return mInstant;
}
void setOwnerPane(nw4r::lyt::Pane *p) {
mpPane2 = p;
}
private:
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Invisible);
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, On);
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Visible);
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Off);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectBtn_c);
/* 0x3C */ d2d::dLytSub *mpLyt;
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
/* 0x44 */ nw4r::lyt::Pane *mpPane1;
/* 0x48 */ nw4r::lyt::Pane *mpPane2;
/* 0x4C */ s32 mDelay;
/* 0x50 */ s32 mIdx;
/* 0x54 */ bool mShouldBeVisible;
/* 0x55 */ bool mInstant;
/* 0x56 */ u8 field_0x56;
/* 0x57 */ u8 field_0x57;
};
class dLytMeterItemSelect_c : public d2d::dSubPane {
@@ -56,12 +157,84 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterItemSelect_c() {}
static bool isInSpiralChargeTutorialMinigame();
static bool isInRollercoasterMinigame();
// This enum might be used externally too?
enum InternalItem_e {
I_BOMB_BAG,
I_BOW,
I_SAILCLOTH,
I_CLAWSHOTS,
I_BEETLE,
I_SLINGSHOT,
I_GUST_BELLOWS,
I_BUG_NET,
I_WHIP,
I_BOAT_CANNON,
I_HARP,
I_INVALID, // 11
};
void fn_800EF580();
void fn_800EF6B0(u8);
void setOwnerPane(nw4r::lyt::Pane *p);
void fn_800EF710(u8);
void fn_800EF720(InternalItem_e item);
void fn_800EF7A0(bool, s32);
bool fn_800EFDF0(bool b) const;
bool fn_800F02F0() const;
bool fn_800F0220(s32 arg);
bool getField_0x57A2() const {
return field_0x57A2;
}
u8 getField_0x5794() const {
return field_0x5794;
}
private:
void setBtnItem(s32 internalItem);
void realizeSelectedWheelItem();
void fn_800EF8C0(bool);
bool isWheelBlockedByCurrentAction();
void setBtnText(s32);
bool fn_800F01B0(s32) const;
bool fn_800F01E0(s32) const;
bool isSlotBocoburinLocked(s32);
void fn_800F0310();
bool fn_800F0030() const;
s32 fn_800F0170(s32) const;
u8 getInternalBaseItemForSlot(s32) const;
bool isWheelIndexLocked(s32 idx);
void realizeWheelItems();
void realizeWheelNumberForLytIndex(s32 iconIdx, s32 lytItemIdx);
void realizeBtnNumberForLytIndex(s32 iconIdx, bool);
void realizeWheelNumberVForLytIndex(s32 iconIdx, s32 lytItemIdx);
void setCurrentItemText(ITEM_ID item);
static ITEM_ID getBaseItemForBWheelSlot(s32 idx);
ITEM_ID baseItemIdToCurrentVariant(ITEM_ID baseItem) const;
s32 baseItemLytIndexToCurrentVariant(s32 lytIndex) const;
s32 getBaseItemLytIndexforInternalId(s32 idx) const;
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, InitWait);
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, Wait);
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, SelectIn);
@@ -85,35 +258,79 @@ private:
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, FrameOffMove);
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, FrameOffOut);
dLytMeterItemSelectIcon_c mIcon[8];
dLytMeterItemSelectBlink_c mBlink;
dLytMeterItemSelectText_c mText[2];
dLytMeterItemSelectBtn_c mBtn[4];
UI_STATE_MGR_DECLARE(dLytMeterItemSelect_c);
/* 0x0008 */ dLytMeterItemSelectIcon_c mIcon[8];
/* 0x0228 */ dLytMeterItemSelectBlink_c mBlink;
/* 0x026C */ dLytMeterItemSelectText_c mText[2];
/* 0x02F4 */ dLytMeterItemSelectBtn_c mBtn[4];
/* 0x0454 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelect_c);
/* 0x0490 */ d2d::dLytSub mLyt;
/* 0x0524 */ d2d::AnmGroup_c mAnm[34];
/* 0x490 */ d2d::dLytSub mLyt;
/* 0x0DA4 */ nw4r::lyt::Pane *mpPanes[17];
/* 0x524 */ d2d::AnmGroup_c mAnmGroups[34];
/* 0x0DE8 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x0DEC */ dTextBox_c *mpTextBoxes[10];
/* 0x0E14 */ dWindow_c *mpWindows[4];
/* 0x0E24 */ dTextBox_c *mpSizeBoxes[4];
/* 0x0E34 */ dLytCommonIconItem_c mItemIcons[9];
/* 0x567C */ d2d::SubPaneList mSubpaneList;
/* 0x5688 */ d2d::SubPaneListNode mSubpanes[9];
/* 0x5718 */ EffectsStruct mEffects;
// What is here?
u8 padding2[0xE34 - 0xDA4];
/* 0xE34 */ dLytCommonIconItem_c mItemIcons[9];
d2d::SubPaneList mNodeList;
d2d::SubPaneListNode mNodes[9];
EffectsStruct mEffects;
s32 field_0x574C;
s32 field_0x5750;
s32 field_0x5754;
s32 field_0x5758;
s32 field_0x575C;
s32 field_0x5760;
s32 field_0x5764;
s32 field_0x5768;
/* 0x??? */ u8 padding[0x7260 - 0x7204];
/* 0x574C */ InternalItem_e field_0x574C;
/* 0x5750 */ InternalItem_e field_0x5750;
/* 0x5754 */ s32 field_0x5754;
/* 0x5758 */ s32 field_0x5758;
/* 0x575C */ s32 field_0x575C;
/* 0x5760 */ s32 mDemoMoveTimer;
/* 0x5764 */ s32 field_0x5764;
/* 0x5768 */ s32 field_0x5768;
/* 0x576C */ s32 mLastDoButtonRelatedAction;
/* 0x5770 */ s32 field_0x5770;
/* 0x5774 */ s32 field_0x5774;
/* 0x5778 */ f32 mArrowRotation;
/* 0x577C */ f32 mArrowLength;
/* 0x5780 */ f32 field_0x5780;
/* 0x5784 */ f32 field_0x5784;
/* 0x5788 */ s32 field_0x5788;
/* 0x578C */ s32 field_0x578C;
/* 0x5790 */ s32 field_0x5790;
/* 0x5794 */ u8 field_0x5794;
/* 0x5795 */ u8 field_0x5795;
/* 0x5796 */ u8 field_0x5796;
/* 0x5797 */ u8 field_0x5797;
/* 0x5798 */ u8 field_0x5798;
/* 0x5799 */ u8 field_0x5799;
/* 0x579A */ u8 field_0x579A;
/* 0x579B */ u8 field_0x579B;
/* 0x579C */ u8 mStoredBowVariant;
/* 0x579C */ u8 mStoredSlingshotVariant;
/* 0x579C */ u8 mStoredBeetleVariant;
/* 0x579C */ u8 mStoredBugNetVariant;
/* 0x57A0 */ u8 field_0x57A0;
/* 0x57A1 */ u8 field_0x57A1;
/* 0x57A2 */ bool field_0x57A2;
/* 0x57A3 */ bool field_0x57A3[8];
/* 0x57AB */ bool mIsBocoburinLocked[8];
/* 0x57B3 */ u8 field_0x57B3;
/* 0x57B4 */ u8 field_0x57B4;
/* 0x57B5 */ u8 field_0x57B5;
/* 0x57B6 */ bool field_0x57B6;
/* 0x57B7 */ bool field_0x57B7;
/* 0x57B8 */ u8 field_0x57B8;
/* 0x57B9 */ u8 field_0x57B9;
/* 0x57BA */ u8 field_0x57BA;
/* 0x57BB */ u8 field_0x57BB;
/* 0x57BC */ u8 field_0x57BC;
/* 0x57BD */ u8 field_0x57BD;
/* 0x57BE */ u8 field_0x57BE;
/* 0x57BF */ u8 field_0x57BF;
/* 0x57C0 */ u8 field_0x57C0;
/* 0x57C1 */ u8 field_0x57C1;
/* 0x57C2 */ u8 field_0x57C2;
/* 0x57C3 */ u8 field_0x57C3;
/* 0x57C4 */ u8 field_0x57C4;
/* 0x57C5 */ u8 field_0x57C5;
};
#endif
+69 -14
View File
@@ -1,9 +1,11 @@
#ifndef D_LYT_METER_KEY_H
#define D_LYT_METER_KEY_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterKakeraKey_c {
public:
@@ -12,8 +14,15 @@ public:
bool build(d2d::ResAccIf_c *);
bool remove();
bool execute();
bool draw();
void setPosition(s32 position);
void setShouldBeVisible(bool v) {
mShouldBeVisible = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, Wait);
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, On);
@@ -21,11 +30,20 @@ private:
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, Active);
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, Off);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterKakeraKey_c);
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMeterKakeraKey_c);
/* 0x03C */ d2d::dLytSub mLyt;
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[8];
/* 0x2D0 */ u32 field_0x2D0;
/* 0x2D4 */ mVec3_c mVecs[2];
/* 0x0D0 */ d2d::AnmGroup_c mAnm[8];
/* 0x2D0 */ nw4r::lyt::Pane *mpPane;
/* 0x2D4 */ mVec3_c mPanePositions[2];
/* 0x2EC */ mVec3_c mPosition;
/* 0x2F8 */ u32 mSavedKeyPieceCount;
/* 0x2FC */ s32 mNextKeyPieceCount;
/* 0x300 */ s32 mPosititionIndex;
/* 0x304 */ s32 mOldPosititionIndex;
/* 0x308 */ s32 mMovementFrame;
/* 0x30C */ u8 mShouldBeVisible;
};
class dLytMeterBossKey_c {
@@ -33,24 +51,42 @@ public:
dLytMeterBossKey_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterBossKey_c() {}
virtual void BossKey0x8() {}
virtual void BossKey0xC() {}
virtual d2d::LytBase_c *getLyt() {
return &mLyt;
}
virtual const char *getName() const {
return mLyt.getName();
}
bool build(d2d::ResAccIf_c *);
bool remove();
bool execute();
bool draw();
void setPosition(s32 position);
void setShouldBeVisible(bool v) {
mShouldBeVisible = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Wait);
STATE_FUNC_DECLARE(dLytMeterBossKey_c, On);
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Active);
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Off);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterBossKey_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterBossKey_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[5];
/* 0x214 */ u32 field_0x2D0;
/* 0x218 */ mVec3_c mVecs[4];
/* 0x0D4 */ d2d::AnmGroup_c mAnm[5];
/* 0x214 */ nw4r::lyt::Pane *mpPane;
/* 0x218 */ mVec3_c mPanePositions[4];
/* 0x248 */ mVec3_c mPosition;
/* 0x254 */ s32 mPosititionIndex;
/* 0x258 */ s32 mOldPosititionIndex;
/* 0x25C */ s32 mMovementFrame;
/* 0x260 */ u8 mShouldBeVisible;
};
class dLytMeterSmallKey_c {
@@ -58,24 +94,43 @@ public:
dLytMeterSmallKey_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterSmallKey_c() {}
virtual void SmallKey0x8() {}
virtual void SmallKey0xC() {}
virtual d2d::LytBase_c *getLyt() {
return &mLyt;
}
virtual const char *getName() const {
return mLyt.getName();
}
bool build(d2d::ResAccIf_c *);
bool remove();
bool execute();
bool draw();
void setPosition(s32 position);
void setShouldBeVisible(bool v) {
mShouldBeVisible = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Wait);
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, On);
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Active);
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Off);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterSmallKey_c);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterSmallKey_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[5];
/* 0x214 */ u32 field_0x2D0;
/* 0x218 */ mVec3_c mVecs[4];
/* 0x0D4 */ d2d::AnmGroup_c mAnm[5];
/* 0x214 */ nw4r::lyt::Pane *mpPane;
/* 0x218 */ mVec3_c mPanePositions[4];
/* 0x248 */ mVec3_c mPosition;
/* 0x254 */ s32 mSavedSmallKeyCount;
/* 0x258 */ s32 mPosititionIndex;
/* 0x25C */ s32 mOldPosititionIndex;
/* 0x260 */ s32 mMovementFrame;
/* 0x264 */ u8 mShouldBeVisible;
};
#endif
+119 -39
View File
@@ -3,8 +3,10 @@
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_common_icon_item.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
#include "toBeSorted/effects_struct.h"
// At 0x8, [8], size 0x48
@@ -13,16 +15,29 @@ public:
dLytMeterMinusBtnMenuIcon_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeterMinusBtnMenuIcon_c() {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, Wait);
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, On);
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, Select);
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterMinusBtnMenuIcon_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtnMenuIcon_c);
u32 padding2;
u32 padding3;
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtnMenuIcon_c);
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
/* 0x44 */ u32 mShouldBeSelect;
};
// At 0x248, standalone
@@ -31,16 +46,29 @@ public:
dLytMeterMinusBtnBlink_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterMinusBtnBlink_c() {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, Wait);
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, On);
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, Select);
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterMinusBtnBlink_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtnBlink_c);
u32 padding;
u32 padding2;
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtnBlink_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
// At 0x28C, [2], size 0x44
@@ -49,16 +77,29 @@ public:
dLytMeterMinusBtnText_c() : mStateMgr(*this, sStateID::null) {}
~dLytMeterMinusBtnText_c() {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anim) {
mpAnm = anim;
}
void setShouldBeSelect(u32 v) {
mShouldBeSelect = v;
}
private:
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, Wait);
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, On);
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, Select);
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterMinusBtnText_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtnText_c);
u32 padding;
u32 padding2;
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtnText_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
/* 0x40 */ u32 mShouldBeSelect;
};
class dLytMeterMinusBtn_c : public d2d::dSubPane {
@@ -67,13 +108,44 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterMinusBtn_c() {}
bool demoRelated(s32 arg);
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
void setField_0x4E80(s32 value) {
field_0x4E80 = value;
}
bool fn_800F75E0() const;
bool fn_800F7600() const;
private:
bool shouldCall() const;
void fn_800F7300();
bool fn_800F7760() const;
void realizeShieldDurability();
bool isUnequippable(s32 num) const;
void setItemText(s32 item);
bool isNotMedalOrExtraAmmo(s32 item);
nw4r::lyt::Pane *getPaneByIndex(s32 idx) const {
return mpPanes[idx];
}
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, Wait);
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, MenuSelectingIn);
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, MenuSelecting);
@@ -84,33 +156,41 @@ private:
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoMove);
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoOut);
dLytMeterMinusBtnMenuIcon_c mIcon[8];
dLytMeterMinusBtnBlink_c mBlink;
dLytMeterMinusBtnText_c mText[2];
UI_STATE_MGR_DECLARE(dLytMeterMinusBtn_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterMinusBtn_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
/* 0x490 */ d2d::dLytSub mLyt;
/* 0x524 */ d2d::AnmGroup_c mAnmGroups[33];
// What is here?
u8 padding2[0xE30 - 0xDA4];
/* 0xE34 */ dLytCommonIconItem_c mItemIcons[8];
d2d::SubPaneList mNodeList;
d2d::SubPaneListNode mNodes[8];
EffectsStruct mEffects[4];
s32 field_0x574C;
s32 field_0x5750;
s32 field_0x5754;
s32 field_0x5758;
s32 field_0x575C;
s32 field_0x5760;
s32 field_0x5764;
s32 field_0x5768;
/* 0x??? */ u8 padding[0x13730 - 0x136D8];
/* 0x0008 */ dLytMeterMinusBtnMenuIcon_c mIcon[8];
/* 0x0244 */ dLytMeterMinusBtnBlink_c mBlink;
/* 0x028C */ dLytMeterMinusBtnText_c mText[2];
/* 0x0314 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtn_c);
/* 0x0350 */ d2d::dLytSub mLyt;
/* 0x03E4 */ d2d::AnmGroup_c mAnm[33];
/* 0x0C24 */ nw4r::lyt::Pane *mpPanes[28];
/* 0x0C94 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x0C98 */ dWindow_c *mpWindows[2];
/* 0x0CA0 */ dTextBox_c *mpSizeBoxes[2];
/* 0x0CA8 */ dTextBox_c *mpTextBoxes[2];
/* 0x0CB0 */ dLytCommonIconItem_c mItemIcons[8];
/* 0x4CF0 */ d2d::SubPaneList mSubpaneList;
/* 0x4CFC */ d2d::SubPaneListNode mSubpanes[8];
/* 0x4D7C */ EffectsStruct mEffects[4];
/* 0x4E4C */ mAng3_c mEffectsRot[4];
/* 0x4E64 */ s32 mSlotForEffect[4];
/* 0x4E74 */ f32 mArrowRotation;
/* 0x4E78 */ f32 mArrowLength;
/* 0x4E7C */ s32 field_0x4E7C;
/* 0x4E80 */ s32 field_0x4E80;
/* 0x4E84 */ s32 field_0x4E84;
/* 0x4E88 */ s32 field_0x4E88;
/* 0x4E8C */ s32 field_0x4E8C;
/* 0x4E90 */ s32 mDemoFrame;
/* 0x4E94 */ s32 mSlotToDemo;
/* 0x4E98 */ s32 field_0x4E98[8];
/* 0x4EB8 */ u8 field_0x4EB8;
/* 0x4EB9 */ u8 field_0x4EB9;
/* 0x4EBA */ u8 field_0x4EBA;
/* 0x4EBB */ u8 field_0x4EBB[8];
/* 0x4EC3 */ u8 field_0x4EC3;
};
#endif
+39 -8
View File
@@ -2,8 +2,8 @@
#define D_LYT_METER_NUN_STK_H
#include "d/lyt/d2d.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterNunStk_c : public d2d::dSubPane {
public:
@@ -11,21 +11,52 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
nw4r::lyt::Pane *getBgPane() {
return mpPane;
}
virtual ~dLytMeterNunStk_c() {}
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
private:
void setMessage(s32 id);
STATE_FUNC_DECLARE(dLytMeterNunStk_c, Wait);
STATE_FUNC_DECLARE(dLytMeterNunStk_c, On);
STATE_FUNC_DECLARE(dLytMeterNunStk_c, Active);
STATE_FUNC_DECLARE(dLytMeterNunStk_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterNunStk_c);
d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[2];
/* 0x??? */ u8 padding[0x12350 - 0x12320];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterNunStk_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterNunStk_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[2];
/* 0x158 */ nw4r::lyt::Pane *mpPane;
/* 0x15C */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x160 */ dTextBox_c *mpTextBoxes[2];
/* 0x168 */ dWindow_c *mpWindow[1];
/* 0x16C */ dTextBox_c *mpSizeBox[1];
/* 0x170 */ s32 field_0x170;
/* 0x174 */ s32 field_0x174;
/* 0x178 */ BOOL field_0x178;
/* 0x17C */ s32 mDisplayedAction;
/* 0x180 */ s32 mOnDelay;
/* 0x184 */ bool field_0x184;
/* 0x185 */ u8 field_0x185;
};
#endif
+34 -8
View File
@@ -3,7 +3,6 @@
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterNunchakuBg_c : public d2d::dSubPane {
public:
@@ -11,21 +10,48 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterNunchakuBg_c() {}
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
private:
void setMessage(s32 id);
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, Wait);
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, On);
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, Active);
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterNunchakuBg_c);
d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
/* 0x??? */ u8 padding[0x12608 - 0x125D8];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterNunchakuBg_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterNunchakuBg_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
/* 0x198 */ nw4r::lyt::Pane *mpPane;
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x1A0 */ dTextBox_c *mpTextBoxes[2];
/* 0x1A8 */ dWindow_c *mpWindow[1];
/* 0x1AC */ dTextBox_c *mpSizeBox[1];
/* 0x1B0 */ s32 field_0x1B0;
/* 0x1B4 */ s32 field_0x1B4;
/* 0x1B8 */ BOOL field_0x1B8;
/* 0x1BC */ s32 field_0x1BC;
/* 0x1C0 */ s32 mOnDelay;
/* 0x1C4 */ bool field_0x1C4;
/* 0x1C5 */ u8 field_0x1C5;
/* 0x1C6 */ u8 field_0x1C6;
};
#endif
+119
View File
@@ -0,0 +1,119 @@
#ifndef D_LYT_METER_PARTS_H
#define D_LYT_METER_PARTS_H
#include "d/lyt/d2d.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
class dLytMeter1Button_c : public d2d::dSubPane {
public:
dLytMeter1Button_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeter1Button_c() {}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
bool shouldCall() const;
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
private:
STATE_FUNC_DECLARE(dLytMeter1Button_c, Wait);
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUse);
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeter1Button_c, Unuse);
UI_STATE_MGR_DECLARE(dLytMeter1Button_c);
d2d::dLytSub mLyt;
d2d::AnmGroup_c mAnm[3];
/* 0x198 */ dWindow_c *mpWindow[1];
/* 0x19C */ dTextBox_c *mpSizeBox[1];
/* 0x1A0 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x1A4 */ s32 mUnuseDelay;
/* 0x1A8 */ s32 mCallCount;
/* 0x1AC */ bool mShouldCall;
/* 0x1AD */ bool mHasInitedCall;
};
class dLytMeter2Button_c : public d2d::dSubPane {
public:
dLytMeter2Button_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeter2Button_c() {}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
bool shouldCall() const;
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
private:
STATE_FUNC_DECLARE(dLytMeter2Button_c, Wait);
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUse);
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeter2Button_c, Unuse);
UI_STATE_MGR_DECLARE(dLytMeter2Button_c);
d2d::dLytSub mLyt;
d2d::AnmGroup_c mAnm[3];
/* 0x198 */ dWindow_c *mpWindow[1];
/* 0x19C */ dTextBox_c *mpSizeBox[1];
/* 0x1A0 */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x1A4 */ s32 mUnuseDelay;
/* 0x1A8 */ s32 mCallCount;
/* 0x1AC */ bool mShouldCall;
/* 0x1AD */ bool mHasInitedCall;
};
class dLytMeterParts_c {
public:
dLytMeterParts_c() : mStateMgr(*this, sStateID::null) {}
void build(s32 index);
void execute();
void setAnmGroups(d2d::AnmGroup_c *inAnm, d2d::AnmGroup_c *outAnm) {
mpAnmIn = inAnm;
mpAnmOut = outAnm;
}
void setShouldBeVisible(bool val) {
mShouldBeVisible = val;
}
private:
STATE_FUNC_DECLARE(dLytMeterParts_c, Invisible);
STATE_FUNC_DECLARE(dLytMeterParts_c, In);
STATE_FUNC_DECLARE(dLytMeterParts_c, Visible);
STATE_FUNC_DECLARE(dLytMeterParts_c, Out);
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterParts_c);
/* 0x3C */ d2d::AnmGroup_c *mpAnmIn;
/* 0x40 */ d2d::AnmGroup_c *mpAnmOut;
/* 0x44 */ s32 mIndex;
/* 0x48 */ bool mShouldBeVisible;
};
#endif
+45 -8
View File
@@ -2,8 +2,9 @@
#define D_LYT_METER_PLUS_BTN_H
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterPlusBtn_c : public d2d::dSubPane {
public:
@@ -11,21 +12,57 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterPlusBtn_c() {}
bool isCalling() const;
void setCall(bool shouldCall);
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
bool getField_0x1C0() const {
return field_0x1C0;
}
private:
void setMessage(s32 id);
bool isMapOpen() const;
static bool hasSpecificMapMark();
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, Wait);
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, ToUse);
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, ToUnuse);
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, Unuse);
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
/* 0x??? */ u8 padding[0x7A64 - 0x7A38];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterPlusBtn_c);
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
/* 0x198 */ nw4r::lyt::Pane *mpPane[1];
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x1A0 */ dTextBox_c *mpTextBoxes[2];
/* 0x1A8 */ dWindow_c *mpWindow[1];
/* 0x1AC */ dTextBox_c *mpSizeBox[1];
/* 0x1B0 */ s32 field_0x1B0;
/* 0x1B4 */ s32 field_0x1B4;
/* 0x1B8 */ s32 mCallCount;
/* 0x1BC */ s32 field_0x1BC;
/* 0x1C0 */ bool field_0x1C0;
/* 0x1C1 */ bool field_0x1C1;
/* 0x1C2 */ bool mShouldCall;
/* 0x1C3 */ bool field_0x1C3;
};
#endif
+14 -7
View File
@@ -3,7 +3,6 @@
#include "d/lyt/d2d.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterRemoconBg_c : public d2d::dSubPane {
public:
@@ -11,9 +10,15 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterRemoconBg_c() {}
@@ -23,9 +28,11 @@ private:
STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Active);
STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterRemoconBg_c);
d2d::dLytSub mLyt;
/* 0xD8 */ nw4r::lyt::Pane *mpPane;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRemoconBg_c);
/* 0x08 */ UI_STATE_MGR_DECLARE(dLytMeterRemoconBg_c);
/* 0x44 */ d2d::dLytSub mLyt;
/* 0xD8 */ nw4r::lyt::Pane *mpPane[1];
/* 0xDC */ u32 field_0xDC;
/* 0xE0 */ u32 field_0xE0;
/* 0xE4 */ u32 field_0xE4;
+103 -9
View File
@@ -2,33 +2,71 @@
#define D_LYT_METER_RUPY_H
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterRupyStart_c {
public:
dLytMeterRupyStart_c() : mStateMgr(*this, sStateID::null) {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anm) {
mpAnm = anm;
}
void setShouldStart(bool b) {
mShouldStart = b;
}
bool isStarting() const {
return mShouldStart;
}
private:
STATE_FUNC_DECLARE(dLytMeterRupyStart_c, Wait);
STATE_FUNC_DECLARE(dLytMeterRupyStart_c, Start);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRupyStart_c);
UI_STATE_MGR_DECLARE(dLytMeterRupyStart_c);
u8 field_0x3C[0x8];
d2d::AnmGroup_c *mpAnm;
bool mShouldStart;
};
class dLytMeterRupyBlink_c {
public:
dLytMeterRupyBlink_c() : mStateMgr(*this, sStateID::null) {}
void init();
void execute();
void setAnm(d2d::AnmGroup_c *anm) {
mpAnm = anm;
}
void doFlash() {
mShouldFlash = true;
}
void cancelFlash() {
mImmediatelyCancelFlash = true;
}
private:
STATE_FUNC_DECLARE(dLytMeterRupyBlink_c, Wait);
STATE_FUNC_DECLARE(dLytMeterRupyBlink_c, Flash);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRupyBlink_c);
UI_STATE_MGR_DECLARE(dLytMeterRupyBlink_c);
u8 field_0x3C[0x8];
d2d::AnmGroup_c *mpAnm;
bool mShouldFlash;
bool mImmediatelyCancelFlash;
};
class dLytMeterRupy_c : public d2d::dSubPane {
@@ -37,25 +75,81 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterRupy_c() {}
mVec3_c getLastVisibleDigitPosition();
void setField_0x8A9(u8 val) {
field_0x8A9 = val;
}
u8 getField_0x8A9() const {
return field_0x8A9;
}
void setField_0x8AA(u8 val) {
field_0x8AA = val;
}
u8 getField_0x8AC() const {
return field_0x8AC;
}
void setField_0x8AC(u8 val) {
field_0x8AC = val;
}
void setSize(u8 size) {
mSize = size;
}
private:
bool updateDisplayedAmount(bool suppressSound);
bool hasChangeInRupees() const;
s32 getRupeeDifference() const;
void setDigit(s32 index, s32 digit);
void executeDigitJump();
void executeDigitBlink(s32 amount);
STATE_FUNC_DECLARE(dLytMeterRupy_c, In);
STATE_FUNC_DECLARE(dLytMeterRupy_c, Active);
STATE_FUNC_DECLARE(dLytMeterRupy_c, Start);
STATE_FUNC_DECLARE(dLytMeterRupy_c, Out);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRupy_c);
UI_STATE_MGR_DECLARE(dLytMeterRupy_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[22];
/* 0x0D8 */ d2d::AnmGroup_c mAnm[22];
/* 0x658 */ dLytMeterRupyStart_c mStartParts[4];
/* 0x768 */ dLytMeterRupyBlink_c mBlinkParts[4];
/* 0x??? */ u8 padding[0x1A98 - 0x1A60];
/* 0x878 */ nw4r::lyt::Pane *mpPanes[4];
/* 0x888 */ s32 mNumDisplayedDigits;
/* 0x88C */ s32 mDisplayedRupeeCount;
/* 0x890 */ s32 field_0x890;
/* 0x894 */ s32 mBlinkDelay;
/* 0x898 */ s32 mRupeeColor;
/* 0x89C */ u8 mSize;
/* 0x89D */ u8 mDisplayedDigits[4];
/* 0x8A1 */ u8 mPrevDigits[4];
/* 0x8A5 */ u8 mJumpState[4];
/* 0x8A9 */ u8 field_0x8A9;
/* 0x8AA */ u8 field_0x8AA;
/* 0x8AB */ u8 field_0x8AB;
/* 0x8AC */ u8 field_0x8AC;
/* 0x8AD */ u8 field_0x8AD;
/* 0x8AE */ u8 field_0x8AE;
};
#endif
+59 -9
View File
@@ -2,8 +2,8 @@
#define D_LYT_METER_SHIELD_GAUGE_H
#include "d/lyt/d2d.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterShieldGauge_c : public d2d::dSubPane {
public:
@@ -11,25 +11,75 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterShieldGauge_c() {}
void setContainerGroup(d2d::AnmGroup_c *g) {
mpContainerAnmGroup = g;
}
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
f32 getGaugePercentMaybe() const {
return field_0x2E0;
}
void setfield_0x318(s32 v) {
field_0x318 = v;
}
u8 getField_0x31D() const {
return field_0x31D;
}
private:
s32 getLytFrameForShield(s32) const;
void setLevel(f32 level);
f32 calcUpdownRatio(f32) const;
STATE_FUNC_DECLARE(dLytMeterShieldGauge_c, Normal);
STATE_FUNC_DECLARE(dLytMeterShieldGauge_c, Use);
STATE_FUNC_DECLARE(dLytMeterShieldGauge_c, ToMax);
UI_STATE_MGR_DECLARE(dLytMeterShieldGauge_c);
d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[8];
/* 0x??? */ d2d::AnmGroup_c *mpContainerAnmGroup;
/* 0x??? */ u8 padding[0x130C4 - 0x13080];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterShieldGauge_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterShieldGauge_c);
/* 0x044 */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[8];
/* 0x2D8 */ d2d::AnmGroup_c *mpContainerAnmGroup;
/* 0x2DC */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x2E0 */ f32 field_0x2E0;
/* 0x2E4 */ f32 field_0x2E4;
/* 0x2E8 */ f32 field_0x2E8;
/* 0x2EC */ f32 field_0x2EC;
/* 0x2F0 */ f32 field_0x2F0;
/* 0x2F4 */ f32 field_0x2F4;
/* 0x2F8 */ f32 field_0x2F8;
/* 0x2FC */ s32 field_0x2FC;
/* 0x300 */ f32 field_0x300;
/* 0x304 */ f32 field_0x304;
/* 0x308 */ s32 field_0x308;
/* 0x30C */ u8 field_0x30C;
/* 0x30D */ u8 field_0x30D;
/* 0x30E */ u8 field_0x30E;
/* 0x310 */ s32 field_0x310;
/* 0x314 */ s32 field_0x314;
/* 0x318 */ s32 field_0x318;
/* 0x31C */ u8 field_0x31C;
/* 0x31D */ u8 field_0x31D;
/* 0x31E */ u8 field_0x31E;
/* 0x31F */ u8 field_0x31F;
};
#endif
+244 -18
View File
@@ -1,69 +1,274 @@
#ifndef D_LYT_METER_TIMER_H
#define D_LYT_METER_TIMER_H
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/lyt/d2d.h"
#include "m/m_color.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class LytMeterTimerPart1_c : public d2d::dSubPane {
public:
LytMeterTimerPart1_c() {
LytMeterTimerPart1_c()
: mActualTearCount(0), mDisplayedTearCount(0), field_0x760(0), mTrial(dAcItem_c::TRIAL_NONE), field_0x780(0) {
sInstance = this;
}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~LytMeterTimerPart1_c() {
sInstance = nullptr;
}
static LytMeterTimerPart1_c *sInstance;
static LytMeterTimerPart1_c *GetInstance() {
return sInstance;
}
void init();
void startInAnim();
void realizeTrial();
void startOutAnim();
void stopInAnim();
void stopFinishedFruit();
void stopOutAnim();
bool isInAnimFinished();
bool isCurrentFruitAnimFinished();
bool isAnyFruitAnimFinished();
bool isLastFruitAnimFinished();
bool isOutAnimFinished();
void startFruitAnim(s32 index);
void resetBowlNuts();
void updateDropLine(nw4r::lyt::Pane *pane);
void createEffect(s32 fruitIndex);
bool incrementTearCount();
bool isAnyFruitAnimAtFrame(f32 f) const;
s32 getActualTearCount() const {
return mActualTearCount;
}
s32 getDisplayedTearCount() const {
return mDisplayedTearCount;
}
s32 getField0x780() const {
return field_0x780;
}
void setField0x780(s32 val) {
field_0x780 = val;
}
private:
void initLoopAnim();
void initBowlNuts();
void initOutAnim();
void initColors();
void initInAnim();
void startNextFruitAnim();
void disableCurrentFruitAnim();
static LytMeterTimerPart1_c *sInstance;
/* 0x008 */ d2d::dLytSub mLyt;
/* 0x09C */ d2d::AnmGroup_c mAnmGroups[26];
/* 0x71C */ u8 field_0x71C[0x768 - 0x71C];
/* 0x09C */ d2d::AnmGroup_c mAnm[26];
/* 0x71C */ s32 mActualTearCount;
/* 0x720 */ s32 mDisplayedTearCount;
/* 0x724 */ nw4r::lyt::Pane *mpPanes[15];
/* 0x760 */ s32 field_0x760;
/* 0x764 */ dAcItem_c::Trial_e mTrial;
/* 0x768 */ mColor mColors1[3];
/* 0x774 */ mColor mColors2[3];
/* 0x780 */ s32 field_0x780;
};
class LytMeterTimerPart2_c : public d2d::dSubPane {
public:
LytMeterTimerPart2_c() {
LytMeterTimerPart2_c(): mNumPetals(0), mTrial(dAcItem_c::TRIAL_NONE), mVisible(true), mFlowerLoopFrame(0.0f) {
sInstance = this;
}
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~LytMeterTimerPart2_c() {
sInstance = nullptr;
}
static LytMeterTimerPart2_c *sInstance;
static LytMeterTimerPart2_c *GetInstance() {
return sInstance;
}
void setNumPetals(s32 num) {
mNumPetals = num;
}
s32 getNumPetals() const {
return mNumPetals;
}
nw4r::lyt::Pane *i_getPane() const {
return mpPane;
}
void setVisible(bool bVisible) {
mVisible = bVisible;
}
void calc();
void init();
void initDyingAnims();
void initFallOutAnims();
void realizePetalsOnOff();
void syncPetalsTime();
void updatePetalsRate();
void restartPetals();
void finishSingleAnim(u8 idx);
void resetSingleAnim(u8 idx);
void startInAnim();
void startOutAnim();
void stopInAnim();
void stopBloomAnim();
void stopBeforeFallAnim();
void stopChangeSirenAnim();
void stopSirenLoopAnim();
void stopSirenSafeAnim();
void stopFlowerLoopAnim();
void resetFlowerLoopAnim();
void stopDyingAnims();
void stopFinishedDyingAnims();
void stopFallOutAnims();
void stopFinishedFallOutAnims();
void stopOutAnim();
void stopChangeFruitAnim();
bool isInAnimFinished();
bool isBloomAnimFinished();
bool isBeforeFallAnimAtStart();
bool isChangeSirenAnimFinished();
bool isSirenSafeAnimFinished();
bool isFlowerLoopAnimFinished();
bool isOutAnimFinished();
bool isChangeFruitAnimFinished();
void realizeFruitsColor();
void finishDyingAnims();
void setPetalsToStart();
void enableChangeFruitAnim();
void enableBloomAnim();
void enableBeforeFallAnim();
void enableChangeSirenAnim();
void enableSirenLoopAnim();
void enableSafeAnim();
void resumeFlowerLoop();
void startFlowerLoop();
void syncTime();
void syncTimeWithSafe();
/** Played when the finish animation is played and each tear hits the flower */
void createSingleFruitEffect();
/** Played when the whole fruit is finished */
void createFruitCompleteEffect();
void initBeforeFallAnim();
bool isPetalDyingAnimFinished();
bool isFirstFallOutAnimFinished();
void initChangeSirenAnim();
private:
void initBloomAnim();
void initSirenLoopAnim();
void initSirenSafeAnim();
void initFlowerLoopAnim();
void initOutAnim();
void initInAnim();
void initChangeFruitAnim();
void initColors();
static LytMeterTimerPart2_c *sInstance;
/* 0x008 */ d2d::dLytSub mLyt;
/* 0x09C */ d2d::AnmGroup_c mAnmGroups[30];
/* 0x81C */ u8 field_0x81C[0x828 - 0x81C];
/* 0x09C */ d2d::AnmGroup_c mAnm[30];
/* 0x81C */ s32 mNumPetals;
/* 0x820 */ nw4r::lyt::Pane *mpPane;
/* 0x824 */ dAcItem_c::Trial_e mTrial;
/* 0x828 */ mColor mColors1[2];
/* 0x830 */ mColor mColors2[2];
/* 0x838 */ u8 mVisible;
/* 0x83C */ f32 mFlowerLoopFrame;
};
class dLytMeterTimer_c {
public:
dLytMeterTimer_c() : mStateMgr(*this, sStateID::null) {}
dLytMeterTimer_c()
: mStateMgr(*this, sStateID::null),
mpPart1(nullptr),
mpPart2(nullptr),
field_0x48(0),
field_0x49(0),
mActualTime(0),
mLastTime(0),
field_0x54(0),
field_0x55(0),
field_0x56(8),
field_0x57(8),
field_0x58(0),
field_0x59(0),
field_0x5C(0),
field_0x60(0) {}
virtual ~dLytMeterTimer_c() {}
bool build();
bool remove();
bool execute();
bool startIn2();
bool startOut2();
bool getField_0x54() const {
return field_0x54;
}
private:
void startIn();
void gotoChangeSiren();
void gotoSiren();
void gotoChangeSafeBloom();
void gotoChangeSafe();
void gotoSafe();
void gotoChangeFruits6();
void gotoFruits();
void startOut();
void gotoChangeFruits3();
void startSafe();
void doPickup();
bool isInSiren();
s32 getPetalForTimerMaybe(s32 time);
bool checkForPetalChangeMaybe();
STATE_FUNC_DECLARE(dLytMeterTimer_c, ChangeSiren);
STATE_FUNC_DECLARE(dLytMeterTimer_c, Siren);
STATE_FUNC_DECLARE(dLytMeterTimer_c, ChangeSafeBloom);
@@ -72,7 +277,28 @@ private:
STATE_FUNC_DECLARE(dLytMeterTimer_c, ChangeFruits);
STATE_FUNC_DECLARE(dLytMeterTimer_c, Fruits);
UI_STATE_MGR_DECLARE(dLytMeterTimer_c);
static bool sDoExit;
static bool sDoFinishAnim;
static bool sFinished;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterTimer_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterTimer_c);
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterTimer_c);
/* 0x40 */ LytMeterTimerPart1_c *mpPart1;
/* 0x44 */ LytMeterTimerPart2_c *mpPart2;
/* 0x48 */ u8 field_0x48;
/* 0x49 */ u8 field_0x49;
/* 0x4C */ s32 mActualTime;
/* 0x50 */ s32 mLastTime;
/* 0x54 */ bool field_0x54;
/* 0x55 */ u8 field_0x55;
/* 0x56 */ u8 field_0x56;
/* 0x57 */ u8 field_0x57;
/* 0x58 */ u8 field_0x58;
/* 0x59 */ u8 field_0x59;
/* 0x5C */ s32 field_0x5C;
/* 0x60 */ s32 field_0x60;
};
#endif
+40 -8
View File
@@ -1,9 +1,12 @@
#ifndef D_LYT_METER_Z_BTN_H
#define D_LYT_METER_Z_BTN_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "nw4r/lyt/lyt_pane.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
class dLytMeterZBtn_c : public d2d::dSubPane {
public:
@@ -11,21 +14,50 @@ public:
virtual bool build(d2d::ResAccIf_c *resAcc) override;
virtual bool remove() override;
virtual bool execute() override;
virtual nw4r::lyt::Pane *getPane() override;
virtual d2d::LytBase_c *getLyt() override;
virtual const char *getName() const override;
virtual nw4r::lyt::Pane *getPane() override {
return mLyt.getLayout()->GetRootPane();
}
virtual d2d::LytBase_c *getLyt() override {
return &mLyt;
}
virtual const char *getName() const override {
return mLyt.getName();
}
virtual ~dLytMeterZBtn_c() {}
bool isCalling() const;
void setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
}
private:
void setMessage(s32 id);
STATE_FUNC_DECLARE(dLytMeterZBtn_c, Wait);
STATE_FUNC_DECLARE(dLytMeterZBtn_c, On);
STATE_FUNC_DECLARE(dLytMeterZBtn_c, Active);
STATE_FUNC_DECLARE(dLytMeterZBtn_c, Off);
UI_STATE_MGR_DECLARE(dLytMeterZBtn_c);
d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
/* 0x??? */ u8 padding[0x121C8 - 0x12198];
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterZBtn_c);
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterZBtn_c);
/* 0x04C */ d2d::dLytSub mLyt;
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
/* 0x198 */ nw4r::lyt::Pane *mpPane;
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
/* 0x1A0 */ dTextBox_c *mpTextBoxes[2];
/* 0x1A8 */ dWindow_c *mpWindow[1];
/* 0x1AC */ dTextBox_c *mpSizeBox[1];
/* 0x1B0 */ s32 field_0x1B0;
/* 0x1B4 */ s32 field_0x1B4;
/* 0x1B8 */ BOOL field_0x1B8;
/* 0x1BC */ s32 field_0x1BC;
/* 0x1C0 */ s32 mOnDelay;
/* 0x1C4 */ bool field_0x1C4;
/* 0x1C5 */ u8 field_0x1C5;
/* 0x1C6 */ u8 field_0x1C6;
};
#endif
@@ -50,6 +50,14 @@ public:
const char *fn_80117390(bool) const;
// This function appears to be related to a compiler quirk.
// 0x800D7B40 is in d_lyt_meter, but calling a static method
// on an instance via dLytMsgWindow_c::getInstance()->fn_800D7B40()
// causes the method to be emitted there.
static u16 fn_800D7B40() {
return sInstance->mEntryPointToTrigger;
}
private:
bool setTextToDisplay(const wchar_t *text);
void createSubMsgManager(u8 type);
@@ -0,0 +1,19 @@
#ifndef D_LYT_SIMPLE_WINDOW_H
#define D_LYT_SIMPLE_WINDOW_H
class dLytSimpleWindow_c {
public:
dLytSimpleWindow_c() {}
virtual ~dLytSimpleWindow_c() {}
static dLytSimpleWindow_c *getInstance() {
return sInstance;
}
bool fn_8012B000();
private:
static dLytSimpleWindow_c *sInstance;
};
#endif
+16 -3
View File
@@ -1,14 +1,27 @@
#ifndef D_T_MAP_MARK_H
#define D_T_MAP_MARK_H
#include "d/a/d_a_base.h"
#include "d/t/d_tg.h"
class dTgMapMark_c : public dAcBase_c {
class dTgMapMark_c : public dTg_c {
public:
dTgMapMark_c() {}
virtual ~dTgMapMark_c() {}
private:
/* 0x0FC */ u16 mTriggerStoryFlag;
/* 0x0FE */ u16 rotz_shift8_0xff;
/* 0x100 */ u8 shift4_0x8;
/* 0x101 */ u8 shift23_0x8;
/* 0x102 */ u8 shift0_0x3;
/* 0x103 */ u8 shift2_0x3;
/* 0x104 */ u8 shift4_0x3f;
/* 0x105 */ u8 rotz_shift0_0xff;
/* 0x108 */ s32 rotz_shift0_0xf;
/* 0x10C */ bool field_0x10C;
/* 0x10D */ bool field_0x10D;
/* 0x10E */ bool field_0x10E;
/* 0x10F */ u8 rotz_shift10_0x3;
/* 0x110 */ u8 rotz_shift12_0x3;
};
#endif
+11
View File
@@ -3,6 +3,7 @@
#include "common.h"
#include "d/t/d_tg.h"
#include "toBeSorted/timekeeper.h"
class dTgSiren_c : public dTg_c {
public:
@@ -16,10 +17,20 @@ public:
return sInstance->outOfTime();
}
static s32 getTime() {
if (sInstance == nullptr) {
return -1;
}
return sInstance->mTimekeeper.getTime();
}
private:
bool outOfTime() const;
static dTgSiren_c *sInstance;
/* 0x0FC */ u8 _0x0FC[0x2C0 - 0x0FC];
/* 0x2C0 */ Timekeeper mTimekeeper;
};
#endif
+8
View File
@@ -114,7 +114,15 @@ public:
return mEndFrame;
}
// There's at least 1 file where the obvious way of writing
// it seems to require accessing some members directly, without
// inlines. I want to discourage direct access though, so
// putting the ability behind an explicit define. We don't
// know either way whether inlines are used at all or
// whether stuff even is private.
#ifndef NEED_DIRECT_FRAMECTRL_ACCESS
private:
#endif
inline bool notLooping() const {
return (mFlags & FLAG_NO_LOOP) != 0;
}
+4
View File
@@ -140,6 +140,10 @@ public:
z = fz;
}
void setR(const s32 &f) {
x = y = z = f;
}
mAng x, y, z;
static mAng3_c Zero;
+4
View File
@@ -262,6 +262,10 @@ public:
mVec2_c(const mVec2_c &other) {
set(other.x, other.y);
}
mVec2_c(f32 fx, f32 fy) {
set(fx, fy);
}
};
#endif
+4
View File
@@ -71,6 +71,10 @@ public:
mTranslate = value;
}
void SetRotate(const nw4r::math::VEC3 &value) {
mRotate = value;
}
const math::MTX34 &GetGlobalMtx() const {
return mGlbMtx;
}
+11 -1
View File
@@ -2,8 +2,8 @@
#define S_STATE_H
#include "s/s_FStateMgr.hpp"
#include "s/s_StateMethodUsr_FI.hpp"
#include "s/s_FStateVirtualID.hpp"
#include "s/s_StateMethodUsr_FI.hpp"
// Note: Ported from https://github.com/NSMBW-Community/NSMBW-Decomp/tree/master/include/dol/sLib
// See include/s/README.txt for changes made
@@ -34,6 +34,16 @@
#define STATE_MGR(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
#define STATE_MGR_DEFINE_UTIL_CHANGESTATE(class_name) \
void changeState(const sStateIDIf_c &value) { \
mStateMgr.changeState(value); \
}
#define STATE_MGR_DEFINE_UTIL_ISSTATE(class_name) \
bool isState(const sFStateID_c<class_name> &value) const { \
return *mStateMgr.getStateID() == value; \
}
// TODO this is probably not the whole solution.
// The problems with this approach are:
// * You can't define the same state name for multiple files in the same TU due to baseID_ symbol clash.
+2 -1
View File
@@ -213,12 +213,13 @@ public:
void addReadTarget(dAcObjBase_c &actor, u32 flags, f32 field_0x14, f32 ignored, f32 field_0x20, f32 field_0x24);
void addReadTarget2(dAcObjBase_c &actor, u32 flags, f32 field_0x14, f32 field_0x20, f32 field_0x24);
bool checkLink2() const;
private:
bool isInNormalGameState() const;
bool checkZButtonPressed() const;
bool checkZButtonHeld() const;
bool checkLink1() const;
bool checkLink2() const;
bool switchTarget(s32 target);
bool playTargetAnim(s32 target);
@@ -8,9 +8,9 @@ public:
GoddessChestCounter() : Counter(0x43F) {}
virtual ~GoddessChestCounter() {};
virtual u16 getCommittedValue() override;
virtual u16 getMax() override;
virtual u16 getUncommittedValue() override;
virtual u16 getCommittedValue() const override;
virtual u16 getMax() const override;
virtual u16 getUncommittedValue() const override;
virtual void setValue(u16 num) override;
static GoddessChestCounter sInstance;
+2 -2
View File
@@ -65,8 +65,8 @@ public:
static void init();
static void execute();
static u8 getTopDowsingIcon();
static u8 getLeftDowsingIcon();
static s32 getTopDowsingIcon();
static s32 getLeftDowsingIcon();
};
#endif
+7
View File
@@ -24,12 +24,19 @@ public:
void remove(bool);
void fn_80027320(u8);
void fn_800271E0(mVec3_c *pos, mAng3_c *rot, mVec3_c *scale);
void fn_80029920(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
void fn_80029980(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
void fn_800299F0(u16 effect, mMtx_c *mtx, void *, void *);
void fn_80029A10(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
void fn_80029A70(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
void setMtx(const mMtx_c &);
static void fn_800298C0(u16 effect, mVec3_c *pos, void*, void*, void*, void*);
void fn_80026ED0();
void fn_80026F10();
bool checkField0x00() const {
return field_0x00 != 0;
}
+3
View File
@@ -17,6 +17,7 @@ public:
static void changeOwnEvent(dAcBase_c *actor1, dAcBase_c *actor2, Event *event, UNKWORD);
static bool alsoSetAsCurrentEvent(dAcBase_c *actor, Event *event, void *unknown);
static dAcObjBase_c *fn_800A08F0(fBase_c::GROUP_TYPE_e);
static bool canSkipCurrentEvent();
static EventManager *sInstance;
@@ -40,6 +41,8 @@ public:
return strequals(getCurrentEventName(), name);
}
static bool eventRelatedStateFlags_shift0x11_1();
// Something like isActorInEvent maybe?
static bool FUN_800a0570(dAcBase_c *actor);
static bool FUN_800a0ba0();
+30 -6
View File
@@ -149,17 +149,17 @@ public:
/* 8000B6A0 */ u8 getShieldPouchSlot();
/* 8000B6F0 */ void setAirPotionTimer(u16 time);
/* 8000B720 */ u16 getAirPotionTimer();
/* 8000B720 */ u16 getAirPotionTimer() const;
/* 8000B770 */ void setAirPotionPlusTimer(u16 time);
/* 8000B7A0 */ u16 getAirPotionPlusTimer();
/* 8000B7A0 */ u16 getAirPotionPlusTimer() const;
/* 8000B7F0 */ void setStaminaPotionTimer(u16 time);
/* 8000B820 */ u16 getStaminaPotionTimer();
/* 8000B820 */ u16 getStaminaPotionTimer() const;
/* 8000B870 */ void setStaminaPotionPlusTimer(u16 time);
/* 8000B8A0 */ u16 getStaminaPotionPlusTimer();
/* 8000B8A0 */ u16 getStaminaPotionPlusTimer() const;
/* 8000B8F0 */ void setGuardianPotionTimer(u16 time);
/* 8000B920 */ u16 getGuardianPotionTimer();
/* 8000B920 */ u16 getGuardianPotionTimer() const;
/* 8000B970 */ void setGuardianPotionPlusTimer(u16 time);
/* 8000B9A0 */ u16 getGuardianPotionPlusTimer();
/* 8000B9A0 */ u16 getGuardianPotionPlusTimer() const;
/* 8000B9F0 */ void setDowsingSlotIdx(u8 idx);
/* 8000BA20 */ u8 getDowsingSlotIdx();
@@ -285,6 +285,30 @@ public:
return sInstance;
}
bool hasGuardianPotionPlus() const {
return getGuardianPotionPlusTimer() != 0;
}
bool hasGuardianPotionNormal() const {
return getGuardianPotionTimer() != 0;
}
bool hasAirPotionPlus() const {
return getAirPotionPlusTimer() != 0;
}
bool hasAirPotionNormal() const {
return getAirPotionTimer() != 0;
}
bool hasStaminaPotionPlus() const {
return getStaminaPotionPlusTimer() != 0;
}
bool hasStaminaPotionNormal() const {
return getStaminaPotionTimer() != 0;
}
private:
static FileManager *sInstance;
};
+1
View File
@@ -19,6 +19,7 @@ public:
HARP_PLAYING,
};
static bool isInMinigameState(Minigame game);
static bool isInAnyMinigame();
static void create();
static void destroy();
+1
View File
@@ -6472,6 +6472,7 @@ enum WZSound {
class SmallSoundManager {
public:
void playSound(WZSound id);
void playSoundWithPitch(WZSound id, f32 pitch);
void playButtonPressSoundWhenAdvancingTextBoxes(f32);
static SmallSoundManager *GetInstance() {
+11
View File
@@ -0,0 +1,11 @@
#ifndef TIMEKEEPER_H
#define TIMEKEEPER_H
#include "common.h"
class Timekeeper {
public:
s32 getTime() const;
};
#endif
+2 -2
View File
@@ -171,8 +171,8 @@ int dAcODungeonShip_c::doDelete() {
return SUCCEEDED;
}
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_682_;
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_683_;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_682_;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_683_;
int dAcODungeonShip_c::actorExecute() {
field_0x850++;
+1 -1
View File
@@ -126,7 +126,7 @@ void dAcOTowerGearD101_c::initTransform() {
mMdl.setLocalMtx(field_0x3C4);
}
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_585_;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_585_;
void dAcOTowerGearD101_c::playVisualEffect() {
mEffects.fn_80029A10(PARTICLE_RESOURCE_ID_MAPPING_585_, &field_0x3F4, &rotation, nullptr, nullptr, nullptr);
}
+1 -1
View File
@@ -593,7 +593,7 @@ void dAcOTowerHandD101_c::executeState_RemainOpen() {
}
void dAcOTowerHandD101_c::finalizeState_RemainOpen() {}
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_573;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_573;
void dAcOTowerHandD101_c::initializeState_Close() {
mMdl.getAnm().setPlayState(m3d::PLAY_MODE_1);
mMdl.setRate(getCloseRate());
+1 -1
View File
@@ -449,7 +449,7 @@ void dAcOtubo_c::finalizeState_Rebirth() {
extern "C" void fn_80027510(void *, bool);
extern "C" void fn_80027560(void *, bool, int);
extern "C" void *fn_800298B0(u16, mVec3_c *, mVec3_c *, u32, u32, u32, u32, u32);
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_109_, PARTICLE_RESOURCE_ID_MAPPING_209_;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_109_, PARTICLE_RESOURCE_ID_MAPPING_209_;
extern "C" void *ENVIRONMENT;
extern "C" void fn_80022BE0(void *, const mVec3_c &);
+1 -1
View File
@@ -259,7 +259,7 @@ bool dAcOTumbleWeed_c::checkInvalidGround() const {
code == POLY_ATTR_SAND_DEEP_SLOW;
}
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_743_;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_743_;
extern "C" void fn_800298B0(u16, mVec3_c *, mAng3_c *, u32, u32, u32, u32, u32);
void dAcOTumbleWeed_c::doBreak() {
+2 -2
View File
@@ -1933,8 +1933,8 @@ void dAcTbox_c::executeState_LoadArchive() {
void dAcTbox_c::finalizeState_LoadArchive() {}
extern "C" void fn_800298B0(u16 effectIndex, mVec3_c *, mAng3_c *, mVec3_c *, void *, void *, void *, void *);
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_209_;
extern "C" bool isPouchItem(u16);
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_209_;
extern "C" const bool isPouchItem(u16);
extern "C" u8 adventurePouchFindItemSlot(ITEM_ID item);
extern "C" u16 findItemInItemCheck(ITEM_ID item);
extern "C" dAcItem_c *giveItem3(u16 item, s32);
+1 -1
View File
@@ -60,7 +60,7 @@ int dAcOwaterSpout_c::draw() {
}
extern "C" void fn_800298B0(u16, mVec3_c *, mVec3_c *, mVec3_c *, u32, u32, u32, u32);
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_213_;
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_213_;
void dAcOwaterSpout_c::initializeState_Wait() {
if (params == 1) {
+1 -1
View File
@@ -138,7 +138,7 @@ u16 SceneflagManager::checkFlag(u16 roomId, u16 flag) {
return checkTempOrSceneflag(flag);
}
}
bool SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
u16 SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
u16 *pData = FileManager::GetInstance()->getSceneFlagsConst();
return mFlagHelper.checkFlag(getSceneflagSlotGlobal(sceneIdx, flag), flag % 16, pData, 0x800);
}
+168 -21
View File
@@ -1,8 +1,13 @@
#include "d/lyt/d_lyt_area_caption.h"
#include "d/d_message.h"
#include "d/d_pad.h"
#include "d/d_sc_game.h"
#include "d/d_stage_mgr.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytAreaCaptionParts_c, Wait);
STATE_DEFINE(dLytAreaCaptionParts_c, Start);
@@ -22,6 +27,13 @@ static const d2d::LytBrlanMapping brlanMap2[] = {
{ "areaCaption_01_out.brlan", "G_inOut_00"},
};
#define AREA_CAPTION_ANIM_START 0
#define AREA_CAPTION_ANIM_TYPE 1
#define AREA_CAPTION_ANIM_TEXTLINE 2
#define AREA_CAPTION_ANIM_OUT 3
#define AREA_CAPTION_NUM_ANIMS 4
static const char *captionBoxes[] = {
"T_caption_00",
"T_captionS_00",
@@ -38,7 +50,7 @@ bool dLytAreaCaptionParts_c::init(int first) {
mFirst = first;
if (mFirst != 0) {
mLyt.build("areaCaption_00.brlyt", nullptr);
for (int i = 0; i < 4; i++) {
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
if (brlanMap1[i].mFile[0] == '\0') {
mAnmCtrlInUse[i] = false;
} else {
@@ -51,7 +63,7 @@ bool dLytAreaCaptionParts_c::init(int first) {
} else {
mLyt.build("areaCaption_01.brlyt", nullptr);
mLyt.setPriority(0x8A);
for (int i = 0; i < 4; i++) {
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
if (brlanMap2[i].mFile[0] == '\0') {
mAnmCtrlInUse[i] = false;
} else {
@@ -67,15 +79,15 @@ bool dLytAreaCaptionParts_c::init(int first) {
mTextBoxes[i] = mLyt.getTextBox(captionBoxes[i]);
}
field_0x54C = 0;
field_0x54D = 0;
field_0x54C = false;
field_0x54D = false;
mStateMgr.changeState(StateID_Wait);
mLyt.calc();
return true;
}
bool dLytAreaCaptionParts_c::remove() {
for (int i = 0; i < 4; i++) {
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
if (mAnmCtrlInUse[i]) {
mAnmGroups[i].unbind();
mAnmGroups[i].remove();
@@ -88,7 +100,7 @@ bool dLytAreaCaptionParts_c::remove() {
bool dLytAreaCaptionParts_c::update() {
mStateMgr.executeState();
if (*mStateMgr.getStateID() != StateID_Wait) {
for (int i = 0; i < 4; i++) {
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
if (mAnmCtrlInUse[i] && mAnmGroups[i].isEnabled()) {
mAnmGroups[i].play();
}
@@ -105,33 +117,168 @@ bool dLytAreaCaptionParts_c::draw() {
void dLytAreaCaptionParts_c::setTextIfWaiting(const char *text) {
if (*mStateMgr.getStateID() == StateID_Wait) {
mTextBoxes[0]->fn_800E0A60(text, nullptr);
mTextBoxes[1]->fn_800E0A60(text, nullptr);
mTextBoxes[2]->fn_800E0A60(text, nullptr);
field_0x54C = 1;
mTextBoxes[0]->setMessageWithGlobalTextProcessor2(text, nullptr);
mTextBoxes[1]->setMessageWithGlobalTextProcessor2(text, nullptr);
mTextBoxes[2]->setMessageWithGlobalTextProcessor2(text, nullptr);
field_0x54C = true;
}
}
void dLytAreaCaptionParts_c::check() {
if (*mStateMgr.getStateID() == StateID_Start) {
field_0x54D = 1;
field_0x54D = true;
}
}
void dLytAreaCaptionParts_c::initializeState_Wait() {}
void dLytAreaCaptionParts_c::executeState_Wait() {
mTextBoxes[0]->fn_800E0A60("N_inOut_00", nullptr);
if (field_0x54C) {
field_0x54C = false;
s32 typeFrame = 0;
if (dStageMgr_c::GetInstance()->isSTIFbyte4_2or3or4()) {
typeFrame = 1;
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_5or6()) {
typeFrame = 2;
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_7or8or9or10or11()) {
typeFrame = 3;
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_1()) {
typeFrame = 4;
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_0()) {
typeFrame = 5;
}
if (!mFirst && dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL) {
typeFrame = 6;
}
s32 numLines = mTextBoxes[0]->calcTextLines(mTextBoxes[0]->GetString(), dMessage_c::getGlobalTagProcessor());
f32 textFrame = 0.0f;
if (numLines > 1) {
textFrame = 1.0f;
}
if (!mFirst) {
mLyt.findPane("N_inOut_00")->SetVisible(true);
}
mAnmGroups[AREA_CAPTION_ANIM_TYPE].setFrame(typeFrame);
mAnmGroups[AREA_CAPTION_ANIM_TYPE].setAnimEnable(true);
mAnmGroups[AREA_CAPTION_ANIM_TEXTLINE].setAnimEnable(true);
mAnmGroups[AREA_CAPTION_ANIM_TEXTLINE].setFrame(textFrame);
mLyt.calc();
mAnmGroups[AREA_CAPTION_ANIM_TYPE].setAnimEnable(false);
mAnmGroups[AREA_CAPTION_ANIM_TEXTLINE].setAnimEnable(false);
mAnmGroups[AREA_CAPTION_ANIM_START].setAnimEnable(true);
mAnmGroups[AREA_CAPTION_ANIM_START].setFrame(0.0f);
mStateMgr.changeState(StateID_Start);
}
}
void dLytAreaCaptionParts_c::finalizeState_Wait() {}
void dLytAreaCaptionParts_c::initializeState_Start() {}
void dLytAreaCaptionParts_c::executeState_Start() {}
void dLytAreaCaptionParts_c::initializeState_Start() {
if (mFirst == 0) {
dLytAreaCaption_c::setVisible(true);
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(false);
dLytMeter_c::GetMain()->setGanbariGaugeHiddenByAreaCaption(true);
}
}
void dLytAreaCaptionParts_c::executeState_Start() {
if (mAnmGroups[AREA_CAPTION_ANIM_START].isEndReached()) {
mAnmGroups[AREA_CAPTION_ANIM_START].setAnimEnable(false);
if (!mFirst) {
dLytAreaCaption_c::setVisible(false);
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(true);
}
mStateMgr.changeState(StateID_Wait);
} else {
if (shouldImmediatelyDismiss()) {
field_0x54D = false;
if (mFirst) {
mAnmGroups[AREA_CAPTION_ANIM_START].setFrame(0.0f);
mLyt.calc();
mAnmGroups[AREA_CAPTION_ANIM_START].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
} else {
mAnmGroups[AREA_CAPTION_ANIM_OUT].setAnimEnable(true);
mAnmGroups[AREA_CAPTION_ANIM_OUT].setFrame(0.0f);
mStateMgr.changeState(StateID_Out);
dLytAreaCaption_c::setVisible(false);
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(true);
}
}
}
}
void dLytAreaCaptionParts_c::finalizeState_Start() {}
void dLytAreaCaptionParts_c::initializeState_Out() {}
void dLytAreaCaptionParts_c::executeState_Out() {}
void dLytAreaCaptionParts_c::executeState_Out() {
if (mAnmGroups[AREA_CAPTION_ANIM_OUT].isEndReached()) {
mAnmGroups[AREA_CAPTION_ANIM_OUT].setAnimEnable(false);
if (!mFirst) {
dLytAreaCaption_c::setVisible(false);
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(true);
}
mStateMgr.changeState(StateID_Wait);
}
}
void dLytAreaCaptionParts_c::finalizeState_Out() {}
bool dLytAreaCaptionParts_c::shouldImmediatelyDismiss() const {
if (mFirst) {
return field_0x54D;
}
if (field_0x54D) {
return true;
}
if (dPad::checkButtonBPressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_C) && dPad::checkButtonCPressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_PLUS) && dPad::checkButtonPlusPressed()) {
return true;
}
if (dPad::checkButtonMinusPressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_1) && dPad::checkButton1Pressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_2) && dPad::checkButton2Pressed()) {
return true;
}
if (dPad::checkButtonDpadUpPressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_DOWN) && dPad::checkButtonDpadDownPressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_LEFT) && dPad::checkButtonDpadLeftPressed()) {
return true;
}
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_RIGHT) && dPad::checkButtonDpadRightPressed()) {
return true;
}
if (EventManager::eventRelatedStateFlags_shift0x11_1()) {
return true;
}
return false;
}
bool dLytAreaCaption_c::create() {
new dLytAreaCaption_c();
if (dLytAreaCaption_c::sInstance == nullptr) {
@@ -182,15 +329,15 @@ void dLytAreaCaption_c::check() {
}
}
void dLytAreaCaption_c::set0xAAC(u8 arg) {
void dLytAreaCaption_c::setVisible(bool arg) {
if (sInstance != nullptr) {
sInstance->field_0xAAC = arg;
sInstance->mVisible = arg;
}
}
u8 dLytAreaCaption_c::get0xAAC() {
bool dLytAreaCaption_c::getVisible() {
if (sInstance != nullptr) {
return sInstance->field_0xAAC;
return sInstance->mVisible;
}
return 0;
}
@@ -202,7 +349,7 @@ bool dLytAreaCaption_c::init() {
first = 0;
}
mPartToDraw = 0;
field_0xAAC = 0;
mVisible = false;
return true;
}
+8 -1
View File
@@ -3,8 +3,11 @@
#include "common.h"
#include "d/d_tag_processor.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_control_game.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "s/s_State.hpp"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytAutoCaption_c, Invisible);
STATE_DEFINE(dLytAutoCaption_c, In);
@@ -171,6 +174,10 @@ bool dLytAutoCaption_c::setText(const wchar_t *text) {
}
bool dLytAutoCaption_c::checkSomethingMeter() {
// TODO - too many dependencies on dLytMeter
if (EventManager::isInEvent() || !dLytControlGame_c::getInstance()->isStateNormal() ||
dLytMeter_c::getItemSelect0x75A2() || dLytMeter_c::getMinusBtnFn800F7600() ||
dLytMeter_c::getDowsingFn800FE4B0()) {
return true;
}
return false;
}
+9 -1
View File
@@ -3,8 +3,11 @@
#include "common.h"
#include "d/d_tag_processor.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_control_game.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "s/s_State.hpp"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytAutoExplain_c, Invisible);
STATE_DEFINE(dLytAutoExplain_c, In);
@@ -164,6 +167,11 @@ bool dLytAutoExplain_c::setText(const wchar_t *text) {
}
bool dLytAutoExplain_c::checkSomethingMeter() {
// TODO - too many dependencies on dLytMeter
if (EventManager::isInEvent() || !dLytControlGame_c::getInstance()->isStateNormal() ||
dLytMeter_c::getItemSelect0x75A2() || dLytMeter_c::getMinusBtnFn800F7600() ||
dLytMeter_c::getDowsingFn800FE4B0()) {
return true;
}
return false;
}
+19
View File
@@ -0,0 +1,19 @@
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_unknowns.h"
LytDoButtonRelated::LytDoButtonRelated() {
sInstance = this;
}
bool LytDoButtonRelated::build(d2d::ResAccIf_c *resAcc) {
for (int i = 0; i < 12; i++) {
field_0x04[i] = DO_NONE;
field_0x34[i] = 0;
}
return true;
}
bool LytDoButtonRelated::remove() {
return true;
}
+263
View File
@@ -0,0 +1,263 @@
#include "d/lyt/d_lyt_wipe.h"
#include "common.h"
#include "d/d_stage.h"
#include "d/lyt/d2d.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
STATE_DEFINE(dLytWipeMain_c, ModeNone);
STATE_DEFINE(dLytWipeMain_c, ModeIn);
STATE_DEFINE(dLytWipeMain_c, ModeWait);
STATE_DEFINE(dLytWipeMain_c, ModeOut);
STATE_DEFINE(dLytWipe_c, None);
STATE_DEFINE(dLytWipe_c, In);
STATE_DEFINE(dLytWipe_c, Wait);
STATE_DEFINE(dLytWipe_c, Out);
dLytWipe_c *dLytWipe_c::sInstance;
#define WIPE_ANIM_INOUT 0
#define WIPE_NUM_ANIMS 1
void dLytWipeMain_c::initializeState_ModeNone() {}
void dLytWipeMain_c::executeState_ModeNone() {
mStateEndReached = true;
}
void dLytWipeMain_c::finalizeState_ModeNone() {}
void dLytWipeMain_c::initializeState_ModeIn() {}
void dLytWipeMain_c::executeState_ModeIn() {
if (mAnm[WIPE_ANIM_INOUT].isStop2()) {
mStateEndReached = true;
}
}
void dLytWipeMain_c::finalizeState_ModeIn() {}
void dLytWipeMain_c::initializeState_ModeWait() {}
void dLytWipeMain_c::executeState_ModeWait() {
mStateEndReached = true;
}
void dLytWipeMain_c::finalizeState_ModeWait() {}
void dLytWipeMain_c::initializeState_ModeOut() {}
void dLytWipeMain_c::executeState_ModeOut() {
if (mAnm[WIPE_ANIM_INOUT].isStop2()) {
mStateEndReached = true;
}
}
void dLytWipeMain_c::finalizeState_ModeOut() {}
dLytWipeMain_c::dLytWipeMain_c() : mStateMgr(*this, sStateID::null) {}
static const d2d::LytBrlanMapping brlanMap[] = {
{"wipe_00_inOut.brlan", "G_inOut_00"},
};
bool dLytWipeMain_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("wipe_00.brlyt", nullptr);
mLyt.setPriority(0);
for (int i = 0; i < WIPE_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[WIPE_ANIM_INOUT].setAnimEnable(true);
mAnm[WIPE_ANIM_INOUT].setFrame(0.0f);
mLyt.calc();
mAnm[WIPE_ANIM_INOUT].setAnimEnable(false);
mIsIn = false;
return true;
}
bool dLytWipeMain_c::remove() {
mLyt.unbindAnims();
for (int i = 0; i < WIPE_NUM_ANIMS; i++) {
mAnm[i].remove();
}
return true;
}
void dLytWipeMain_c::gotoIn() {
if (!mIsIn) {
mAnm[WIPE_ANIM_INOUT].setForwardOnce();
mAnm[WIPE_ANIM_INOUT].setAnimEnable(true);
if (mStateEndReached) {
mAnm[WIPE_ANIM_INOUT].setToStart();
} else {
mStateMgr.finalizeState(); // ???????
}
mStateMgr.changeState(StateID_ModeIn);
mIsIn = true;
mStateEndReached = false;
}
}
void dLytWipeMain_c::gotoWait() {
mAnm[WIPE_ANIM_INOUT].setAnimEnable(false);
mStateMgr.changeState(StateID_ModeWait);
mStateEndReached = false;
}
void dLytWipeMain_c::gotoOut() {
if (mIsIn) {
mAnm[WIPE_ANIM_INOUT].setBackwardsOnce();
mAnm[WIPE_ANIM_INOUT].setAnimEnable(true);
if (mStateEndReached) {
// Nothing to do - Anim already at end
} else {
mStateMgr.finalizeState(); // ???????
}
mStateMgr.changeState(StateID_ModeOut);
mIsIn = false;
mStateEndReached = false;
}
}
void dLytWipeMain_c::gotoNone() {
mStateMgr.changeState(StateID_ModeNone);
mStateEndReached = false;
}
bool dLytWipeMain_c::execute() {
mStateMgr.executeState();
for (int i = 0; i < WIPE_NUM_ANIMS; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytWipeMain_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytWipe_c::initializeState_None() {
mWantsIn = false;
}
void dLytWipe_c::executeState_None() {
mWantsOut = false;
if (mWantsIn) {
mTransitionStage = 0;
mIsSettled = false;
// State IN fades OUT, because I guess the fader fades the scene out,
// which means Wipe is In
if (dStage_c::GetInstance()->fadeOut(2, 16)) {
mStateMgr.changeState(StateID_In);
mWantsIn = false;
mVisible = true;
}
}
}
void dLytWipe_c::finalizeState_None() {}
void dLytWipe_c::initializeState_In() {}
void dLytWipe_c::executeState_In() {
if (mTransitionStage == 0) {
if (dStage_c::GetInstance()->isFadedOut()) {
mFadeDelay = 15;
mTransitionStage = 1;
}
} else if (mTransitionStage == 1) {
mFadeDelay--;
if (mFadeDelay == 0) {
dStage_c::GetInstance()->forceFadeIn();
mMain.gotoIn();
mTransitionStage = 2;
}
} else {
mTransitionStage = 3;
if (mMain.isStateEndReached()) {
mMain.gotoWait();
mStateMgr.changeState(StateID_Wait);
mIsSettled = true;
}
}
}
void dLytWipe_c::finalizeState_In() {}
void dLytWipe_c::initializeState_Wait() {}
void dLytWipe_c::executeState_Wait() {
mWantsIn = false;
if (mWantsOut) {
mTransitionStage = 0;
mMain.gotoOut();
mStateMgr.changeState(StateID_Out);
mWantsOut = false;
mIsSettled = false;
}
}
void dLytWipe_c::finalizeState_Wait() {}
void dLytWipe_c::initializeState_Out() {}
void dLytWipe_c::executeState_Out() {
if (mTransitionStage == 0) {
if (mMain.isStateEndReached()) {
dStage_c::GetInstance()->forceFadeOut();
mFadeDelay = 15;
mTransitionStage = 1;
}
} else if (mTransitionStage == 1) {
dStage_c::GetInstance()->forceFadeOut();
mFadeDelay--;
if (mFadeDelay == 0) {
dStage_c::GetInstance()->fadeIn(2, 16);
mMain.gotoNone();
mTransitionStage = 2;
}
} else {
mTransitionStage = 3;
if (dStage_c::GetInstance()->isFadedIn()) {
mStateMgr.changeState(StateID_None);
mIsSettled = true;
mVisible = false;
}
}
}
void dLytWipe_c::finalizeState_Out() {}
bool dLytWipe_c::build() {
sInstance = this;
mTransitionStage = 0;
mFadeDelay = 0;
mWantsIn = false;
mWantsOut = false;
mIsSettled = true;
mVisible = false;
void *data = LayoutArcManager::GetInstance()->getLoadedData("DoButton");
mResAcc.attach(data, "");
mMain.build(&mResAcc);
mStateMgr.changeState(StateID_None);
return true;
}
bool dLytWipe_c::remove() {
sInstance = nullptr;
mMain.remove();
mResAcc.detach();
return true;
}
bool dLytWipe_c::execute() {
mMain.execute();
mStateMgr.executeState();
return true;
}
bool dLytWipe_c::draw() {
if (mVisible &&
((mTransitionStage && (*mStateMgr.getStateID() == StateID_In || *mStateMgr.getStateID() == StateID_Wait)) ||
(*mStateMgr.getStateID() == StateID_Out && mTransitionStage < 2))) {
mMain.draw();
}
return true;
}
File diff suppressed because it is too large Load Diff
+242 -41
View File
@@ -1,7 +1,12 @@
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "d/lyt/meter/d_lyt_meter_a_btn.h"
#include "common.h"
#include "d/lyt/d_lyt_do_button.h"
#include "d/lyt/d_lyt_unknowns.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytMeterABtn_c, InvisibleWait);
STATE_DEFINE(dLytMeterABtn_c, In);
@@ -11,6 +16,18 @@ STATE_DEFINE(dLytMeterABtn_c, On);
STATE_DEFINE(dLytMeterABtn_c, Active);
STATE_DEFINE(dLytMeterABtn_c, Off);
static const d2d::LytBrlanMapping brlanMap[] = {
{"remoConBtn_06_input.brlan", "G_input_00"},
{ "remoConBtn_06_text.brlan", "G_text_00"},
{ "remoConBtn_06_loop.brlan", "G_loop_00"},
};
#define A_BTN_ANIM_INPUT 0
#define A_BTN_ANIM_TEXT 1
#define A_BTN_ANIM_LOOP 2
#define A_BTN_NUM_ANIMS 3
void dLytMeterABtn_c::initializeState_InvisibleWait() {}
void dLytMeterABtn_c::executeState_InvisibleWait() {
if (field_0x1C8 == 0) {
@@ -28,8 +45,8 @@ void dLytMeterABtn_c::finalizeState_InvisibleWait() {}
void dLytMeterABtn_c::initializeState_In() {
mpContainerAnmGroup1->setToStart();
mpContainerAnmGroup1->setAnimEnable(true);
mAnmGroups[0].setBackwardsOnce();
mAnmGroups[0].setToStart();
mAnm[A_BTN_ANIM_INPUT].setBackwardsOnce();
mAnm[A_BTN_ANIM_INPUT].setToStart();
}
void dLytMeterABtn_c::executeState_In() {
if (mpContainerAnmGroup1->isEndReached()) {
@@ -58,82 +75,266 @@ void dLytMeterABtn_c::executeState_Out() {
void dLytMeterABtn_c::finalizeState_Out() {}
void dLytMeterABtn_c::initializeState_Wait() {}
void dLytMeterABtn_c::executeState_Wait() {}
void dLytMeterABtn_c::executeState_Wait() {
if (field_0x1C9 == 0) {
return;
}
if (field_0x1C0) {
if (field_0x1BC != LytDoButtonRelated::DO_NONE) {
mAnm[A_BTN_ANIM_INPUT].setBackwardsOnce();
mAnm[A_BTN_ANIM_INPUT].setToStart();
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
mStateMgr.changeState(StateID_On);
setMessage(field_0x1BC);
}
field_0x1B8 = field_0x1BC;
} else {
if (field_0x1BC != LytDoButtonRelated::DO_NONE) {
setMessage(field_0x1BC);
}
field_0x1B8 = field_0x1BC;
}
}
void dLytMeterABtn_c::finalizeState_Wait() {}
void dLytMeterABtn_c::initializeState_On() {}
void dLytMeterABtn_c::executeState_On() {}
void dLytMeterABtn_c::executeState_On() {
if (mAnm[A_BTN_ANIM_INPUT].isStop2()) {
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterABtn_c::finalizeState_On() {}
void dLytMeterABtn_c::initializeState_Active() {}
void dLytMeterABtn_c::executeState_Active() {}
void dLytMeterABtn_c::executeState_Active() {
if (field_0x1BC != field_0x1B8 || !field_0x1C0) {
if (field_0x1BC == LytDoButtonRelated::DO_NONE || !field_0x1C0) {
mAnm[A_BTN_ANIM_INPUT].setForwardOnce();
mAnm[A_BTN_ANIM_INPUT].setFrame(0.0f);
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
if (field_0x1B8 != field_0x1C4) {
field_0x1BC = field_0x1C4;
}
mStateMgr.changeState(StateID_Off);
} else {
setMessage(field_0x1BC);
}
field_0x1B8 = field_0x1BC;
} else if (field_0x1B8 == LytDoButtonRelated::DO_NONE) {
mAnm[A_BTN_ANIM_INPUT].setForwardOnce();
mAnm[A_BTN_ANIM_INPUT].setFrame(0.0f);
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterABtn_c::finalizeState_Active() {}
void dLytMeterABtn_c::initializeState_Off() {}
void dLytMeterABtn_c::executeState_Off() {}
void dLytMeterABtn_c::executeState_Off() {
if (mAnm[A_BTN_ANIM_INPUT].isEndReached()) {
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterABtn_c::finalizeState_Off() {}
static const d2d::LytBrlanMapping brlanMap[] = {
{"remoConBtn_06_input.brlan", "G_input_00"},
{ "remoConBtn_06_text.brlan", "G_text_00"},
{ "remoConBtn_06_loop.brlan", "G_loop_00"},
};
#define A_BTN_ANIM_INPUT 0
#define A_BTN_ANIM_TEXT 1
#define A_BTN_ANIM_LOOP 2
static const char *sPane = "N_all_00";
static const char *sTextBoxes[] = {
"T_aBtn_00",
"T_aBtnS_00",
};
static const char *sWindows[] = {"W_bgP_00"};
bool dLytMeterABtn_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("remoConBtn_06.brlyt", nullptr);
for (int i = 0; i < 3; i++) {
mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnmGroups[i].bind(false);
mAnmGroups[i].setAnimEnable(false);
for (int i = 0; i < A_BTN_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
static const char *sPane = "N_all_0";
mpPane = mLyt.findPane(sPane);
for (int i = 0; i < 2; i++) {
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
static const char *sWindow = "W_bg_P_00";
mpWindow = mLyt.getWindow(sWindow);
mpSizeBox = mLyt.getSizeBoxInWindow(sWindow);
for (int i = 0; i < 1; i++) {
mpWindow[i] = mLyt.getWindow(sWindows[i]);
mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
}
field_0x1C4 = 0x5F;
field_0x1B8 = 0x5F;
field_0x1BC = 0x5F;
field_0x1C4 = LytDoButtonRelated::DO_DASH;
field_0x1B8 = LytDoButtonRelated::DO_DASH;
field_0x1BC = LytDoButtonRelated::DO_DASH;
field_0x1C8 = 0;
field_0x1CA = 0;
field_0x1C9 = 0;
field_0x1C0 = 1;
field_0x1CB = 0;
field_0x1A4 = 0;
mAnmGroups[A_BTN_ANIM_TEXT].setAnimEnable(true);
fn_800E0870(field_0x1B8);
mAnmGroups[A_BTN_ANIM_TEXT].setFrame(0.0f);
mAnmGroups[A_BTN_ANIM_INPUT].setToEnd();
mAnmGroups[A_BTN_ANIM_INPUT].setAnimEnable(true);
mAnmGroups[A_BTN_ANIM_LOOP].setAnimEnable(true);
field_0x1C0 = true;
mOldTextState = false;
mpOwnerPane = nullptr;
mAnm[A_BTN_ANIM_TEXT].setAnimEnable(true);
setMessage(field_0x1B8);
mAnm[A_BTN_ANIM_TEXT].setFrame(0.0f);
mAnm[A_BTN_ANIM_INPUT].setToEnd();
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
mAnm[A_BTN_ANIM_LOOP].setAnimEnable(true);
mLyt.calc();
mAnmGroups[A_BTN_ANIM_INPUT].setAnimEnable(false);
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterABtn_c::remove() {
for (int i = 0; i < 3; i++) {
mAnmGroups[i].unbind();
mAnmGroups[i].remove();
for (int i = 0; i < A_BTN_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
extern "C" bool checkIsInSkykeepPuzzle();
bool dLytMeterABtn_c::execute() {
if (mpOwnerPane == nullptr) {
return true;
}
if (!mpOwnerPane->IsVisible()) {
if (*mStateMgr.getStateID() == StateID_Off) {
mAnm[A_BTN_ANIM_INPUT].setToEnd2();
}
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, LytDoButtonRelated::DO_NONE);
return true;
}
if (dLytMeter_c::GetInstance()->getMeterField_0x13750() == 0) {
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, LytDoButtonRelated::DO_NONE);
if (field_0x1BC != LytDoButtonRelated::DO_NONE) {
field_0x1BC = LytDoButtonRelated::DO_NONE;
field_0x1B8 = LytDoButtonRelated::DO_NONE;
}
setMessage(field_0x1BC);
}
bool state = false;
if (EventManager::isInEvent() && !dLytMeter_c::GetInstance()->fn_800D5670() &&
dLytMeter_c::GetMain()->getField_0x1377E() == 0 && !checkIsInSkykeepPuzzle() &&
LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_A) == LytDoButtonRelated::DO_NONE) {
field_0x1C9 = 0;
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, LytDoButtonRelated::DO_NONE);
} else {
field_0x1C9 = 1;
}
field_0x1CA = 1;
// TODO
switch (dLytDobutton_c::getField0x480()) {
case 0x0:
case 0x7:
case 0xB:
case 0x15:
case 0x1A:
case 0x1B:
case 0x1C:
case 0x1D:
case 0x1F:
case 0x21:
case 0x22:
case 0x23:
case 0x27:
case 0x28: {
LytDoButtonRelated::Action_e action = LytDoButtonRelated::convertDoButton(dLytDobutton_c::getField0x47C());
if (action >= 0) {
state = true;
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, action);
}
field_0x1CA = 0;
break;
}
}
field_0x1BC = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_A);
field_0x1C0 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_A);
if (field_0x1BC == 0x76) {
state = true;
} else if (field_0x1BC == 0x57) {
state = false;
}
mStateMgr.executeState();
if (mOldTextState != state) {
if (*mStateMgr.getStateID() != StateID_Off) {
if (state) {
mAnm[A_BTN_ANIM_TEXT].setFrame(1.0f);
} else {
mAnm[A_BTN_ANIM_TEXT].setFrame(0.0f);
}
mOldTextState = state;
}
}
for (int i = 0; i < A_BTN_NUM_ANIMS; i++) {
if (i != 1 && mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
return true;
}
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
void dLytMeterABtn_c::setMessage(s32 id) {
char buf[11];
for (int i = 0; i < 11; i++) {
buf[i] = 0;
}
if (id < LytDoButtonRelated::DO_NONE) {
if (id < 0x5D) {
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
} else if (id == 0x5D) {
wchar_t b2[2];
b2[0] = b2[1] = 0;
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->setTextWithGlobalTextProcessor(b2);
}
} else {
s32 id2 = id - 0x5E;
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
}
if (id != 0x5D) {
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->SetVisible(true);
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
}
mpWindow[0]->SetVisible(true);
mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
} else {
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpWindow[0]->SetVisible(false);
}
field_0x1C4 = id;
} else {
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpWindow[0]->SetVisible(false);
}
}
@@ -0,0 +1,10 @@
static const s32 sActIds[] = {
0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x13,
0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, -1, 0x1,
0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x13, 0x14,
0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0
};
+566
View File
@@ -1,5 +1,15 @@
#include "d/lyt/meter/d_lyt_meter_cross_btn.h"
#include "common.h"
#include "d/a/d_a_player.h"
#include "d/d_message.h"
#include "d/flag/storyflag_manager.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_unknowns.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/small_sound_mgr.h"
STATE_DEFINE(dLytMeterCrossBtnParts_c, Wait);
STATE_DEFINE(dLytMeterCrossBtnParts_c, On);
STATE_DEFINE(dLytMeterCrossBtnParts_c, Active);
@@ -9,3 +19,559 @@ STATE_DEFINE(dLytMeterCrossBtn_c, Wait);
STATE_DEFINE(dLytMeterCrossBtn_c, ToUse);
STATE_DEFINE(dLytMeterCrossBtn_c, ToUnuse);
STATE_DEFINE(dLytMeterCrossBtn_c, Unuse);
void dLytMeterCrossBtnParts_c::initializeState_Wait() {
mOnDelay = 15;
}
void dLytMeterCrossBtnParts_c::executeState_Wait() {
if (dLytMeter_c::GetMain()->fn_800D5650()) {
mOnDelay = 0;
}
s32 timer = mOnDelay;
if (field_0x7C) {
if (field_0x68) {
bool bDoUpdate = true;
if (field_0x64 != LytDoButtonRelated::DO_NONE || field_0x70 != field_0x74) {
if (timer <= 0) {
mStateMgr.changeState(StateID_On);
setMessage(field_0x64);
} else {
bDoUpdate = false;
mOnDelay -= 1;
}
}
if (bDoUpdate) {
field_0x60 = field_0x64;
field_0x70 = field_0x74;
}
} else {
if (field_0x64 != LytDoButtonRelated::DO_NONE || field_0x70 != field_0x74) {
setMessage(field_0x64);
}
field_0x60 = field_0x64;
field_0x70 = field_0x74;
}
}
if (timer == mOnDelay) {
mOnDelay = 15;
}
}
void dLytMeterCrossBtnParts_c::finalizeState_Wait() {}
void dLytMeterCrossBtnParts_c::initializeState_On() {
mpAnm[0]->setBackwardsOnce();
mpAnm[0]->setToStart();
mpAnm[0]->setAnimEnable(true);
}
void dLytMeterCrossBtnParts_c::executeState_On() {
if (mpAnm[0]->isStop2()) {
mpAnm[0]->setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterCrossBtnParts_c::finalizeState_On() {}
void dLytMeterCrossBtnParts_c::initializeState_Active() {}
void dLytMeterCrossBtnParts_c::executeState_Active() {
if (field_0x64 != field_0x60 || !field_0x68 || field_0x70 != field_0x74) {
if ((field_0x64 == LytDoButtonRelated::DO_NONE && field_0x74 == 6) || !field_0x68) {
if (field_0x60 != field_0x6C) {
field_0x64 = field_0x6C;
}
mStateMgr.changeState(StateID_Off);
} else {
setMessage(field_0x64);
}
field_0x60 = field_0x64;
field_0x70 = field_0x74;
} else if (field_0x60 == LytDoButtonRelated::DO_NONE && field_0x74 == 6) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterCrossBtnParts_c::finalizeState_Active() {}
void dLytMeterCrossBtnParts_c::initializeState_Off() {
mpAnm[0]->setForwardOnce();
mpAnm[0]->setToStart();
mpAnm[0]->setAnimEnable(true);
}
void dLytMeterCrossBtnParts_c::executeState_Off() {
if (mpAnm[0]->isStop2()) {
mpAnm[0]->setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterCrossBtnParts_c::finalizeState_Off() {}
void dLytMeterCrossBtnParts_c::init() {
field_0x6C = LytDoButtonRelated::DO_NONE;
field_0x60 = LytDoButtonRelated::DO_NONE;
field_0x64 = LytDoButtonRelated::DO_NONE;
field_0x7C = false;
field_0x70 = 6;
field_0x68 = 1;
mOnDelay = 15;
mpOwnerPane = 0;
setMessage(LytDoButtonRelated::DO_NONE);
mStateMgr.changeState(StateID_Wait);
}
extern "C" bool checkIsInSkykeepPuzzle();
void dLytMeterCrossBtnParts_c::execute(bool bIsVisible) {
if (mpOwnerPane == nullptr) {
return;
}
if (!mpOwnerPane->IsVisible()) {
if (!(*mStateMgr.getStateID() == StateID_On)) {
return;
}
field_0x70 = 6;
mpAnm[0]->setForwardOnce();
mpAnm[0]->setToEnd2();
mpAnm[0]->setAnimEnable(true);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[0]->setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return;
}
if (dLytMeter_c::GetInstance()->getMeterField_0x13750() == 0) {
if (mIndex == 0) {
LytDoButtonRelated::fn_8010EC10(LytDoButtonRelated::DO_NONE, true);
} else if (mIndex == 1) {
LytDoButtonRelated::fn_8010ED50(LytDoButtonRelated::DO_NONE, true);
} else if (mIndex == 2) {
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::DO_NONE);
} else if (mIndex == 3) {
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_R, LytDoButtonRelated::DO_NONE);
}
if (field_0x64 != LytDoButtonRelated::DO_NONE) {
field_0x64 = LytDoButtonRelated::DO_NONE;
field_0x60 = LytDoButtonRelated::DO_NONE;
}
setMessage(field_0x64);
}
if (!bIsVisible && *mStateMgr.getStateID() == StateID_Off) {
mpAnm[0]->setToEnd();
mpLyt->calc();
}
if ((EventManager::isInEvent() && dMessage_c::getInstance()->getField_0x32C() == 12 && !checkIsInSkykeepPuzzle() &&
!dLytMeter_c::GetInstance()->fn_800D5670()) ||
((dLytMeter_c::getItemSelect0x75A2() && (mIndex != 1 || field_0x74 != 0)) || !bIsVisible)) {
field_0x7C = 0;
if (mIndex == 0) {
LytDoButtonRelated::fn_8010EC10(LytDoButtonRelated::DO_NONE, true);
} else if (mIndex == 1) {
LytDoButtonRelated::fn_8010ED50(LytDoButtonRelated::DO_NONE, true);
} else if (mIndex == 2) {
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::DO_NONE);
} else if (mIndex == 3) {
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_R, LytDoButtonRelated::DO_NONE);
}
} else {
field_0x7C = 1;
}
if (mIndex == 0) {
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_T);
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_T);
} else if (mIndex == 1) {
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_D);
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_D);
} else if (mIndex == 2) {
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_L);
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_L);
} else if (mIndex == 3) {
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_R);
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_R);
}
mStateMgr.executeState();
for (int i = 0; i < 2; i++) {
if (mpAnm[i]->isEnabled()) {
mpAnm[i]->play();
}
}
}
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
void dLytMeterCrossBtnParts_c::setMessage(s32 id) {
char buf[11];
for (int i = 0; i < 11; i++) {
buf[i] = 0;
}
// If only there was an easier way to write this
if (field_0x74 == 0 || field_0x74 == 1) {
mpWindow->SetVisible(false);
mpAnm[1]->setFrame(0.0f);
mpAnm[1]->setAnimEnable(true);
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
} else if (field_0x74 == 2) {
mpWindow->SetVisible(false);
mpAnm[1]->setFrame(2.0f);
mpAnm[1]->setAnimEnable(true);
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
} else if (field_0x74 == 3) {
mpWindow->SetVisible(false);
mpAnm[1]->setFrame(3.0f);
mpAnm[1]->setAnimEnable(true);
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
} else if (field_0x74 == 4) {
mpWindow->SetVisible(false);
mpAnm[1]->setFrame(4.0f);
mpAnm[1]->setAnimEnable(true);
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
} else if (field_0x74 == 5) {
mpWindow->SetVisible(false);
mpAnm[1]->setFrame(5.0f);
mpAnm[1]->setAnimEnable(true);
mpTextBoxes[0]->SetVisible(false);
mpTextBoxes[1]->SetVisible(false);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
} else if (id < LytDoButtonRelated::DO_NONE) {
if (id < 0x5D) {
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
} else {
s32 id2 = id - 0x5E;
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
}
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->SetVisible(true);
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
}
mpWindow->SetVisible(true);
mpWindow->UpdateSize(mpSizeBox, 32.0f);
field_0x6C = id;
mpAnm[1]->setFrame(1.0f);
mpAnm[1]->setAnimEnable(true);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
} else {
mpWindow->SetVisible(false);
mpAnm[1]->setFrame(1.0f);
mpAnm[1]->setAnimEnable(true);
mpLyt->getLayout()->Animate(0);
mpLyt->calc();
mpAnm[1]->setAnimEnable(false);
}
}
static const d2d::LytBrlanMapping brlanMap[] = {
{ "remoConBtn_03_input.brlan", "G_inputT_00"},
{ "remoConBtn_03_input.brlan", "G_inputD_00"},
{ "remoConBtn_03_input.brlan", "G_inputL_00"},
{ "remoConBtn_03_input.brlan", "G_inputR_00"},
{"remoConBtn_03_pattern.brlan", "N_T_00"},
{"remoConBtn_03_pattern.brlan", "N_D_00"},
{"remoConBtn_03_pattern.brlan", "N_L_00"},
{"remoConBtn_03_pattern.brlan", "N_R_00"},
{ "remoConBtn_03_call.brlan", "G_call_00"},
{ "remoConBtn_03_call.brlan", "G_call_01"},
{ "remoConBtn_03_call.brlan", "G_call_02"},
{ "remoConBtn_03_loop.brlan", "G_loop_00"},
};
#define CROSS_BTN_ANIM_INPUT_T 0
#define CROSS_BTN_ANIM_INPUT_OFFSET 0
#define CROSS_BTN_ANIM_PATTERN_OFFSET 4
#define CROSS_BTN_ANIM_CALL_0 8
#define CROSS_BTN_ANIM_CALL_1 9
#define CROSS_BTN_ANIM_CALL_2 10
#define CROSS_BTN_ANIM_LOOP 11
#define CROSS_BTN_NUM_ANIMS 12
void dLytMeterCrossBtn_c::initializeState_Wait() {}
void dLytMeterCrossBtn_c::executeState_Wait() {}
void dLytMeterCrossBtn_c::finalizeState_Wait() {}
void dLytMeterCrossBtn_c::initializeState_ToUse() {
mAnm[CROSS_BTN_ANIM_INPUT_T].setBackwardsOnce();
mAnm[CROSS_BTN_ANIM_INPUT_T].setToStart();
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(true);
}
void dLytMeterCrossBtn_c::executeState_ToUse() {
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isStop2()) {
mStateMgr.changeState(StateID_Wait);
}
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isEnabled()) {
mAnm[CROSS_BTN_ANIM_INPUT_T].play();
}
}
void dLytMeterCrossBtn_c::finalizeState_ToUse() {
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(false);
}
void dLytMeterCrossBtn_c::initializeState_ToUnuse() {
mAnm[CROSS_BTN_ANIM_INPUT_T].setForwardOnce();
mAnm[CROSS_BTN_ANIM_INPUT_T].setToStart();
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(true);
}
void dLytMeterCrossBtn_c::executeState_ToUnuse() {
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isStop2()) {
mStateMgr.changeState(StateID_Unuse);
}
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isEnabled()) {
mAnm[CROSS_BTN_ANIM_INPUT_T].play();
}
}
void dLytMeterCrossBtn_c::finalizeState_ToUnuse() {
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(false);
}
void dLytMeterCrossBtn_c::initializeState_Unuse() {}
void dLytMeterCrossBtn_c::executeState_Unuse() {
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_UP)) {
mStateMgr.changeState(StateID_ToUse);
}
}
void dLytMeterCrossBtn_c::finalizeState_Unuse() {}
static const char *sPane = "N_all_00";
static const char *sTextBoxes[] = {
"T_textT_00", "T_textD_00", "T_textL_00", "T_textR_00", "T_textTS_00", "T_textDS_00", "T_textLS_00", "T_textRS_00",
};
static const char *sWindows[] = {"W_bgP_01", "W_bgP_00", "W_bgP_02", "W_bgP_03"};
bool dLytMeterCrossBtn_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("remoConBtn_03.brlyt", nullptr);
for (int i = 0; i < CROSS_BTN_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mpPane = mLyt.findPane(sPane);
for (int i = 0; i < 8; i++) {
mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
for (int i = 0; i < 4; i++) {
mpWindows[i] = mLyt.getWindow(sWindows[i]);
mpSizeBoxes[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
}
for (int i = 0; i < 4; i++) {
mParts[i].mIndex = i;
mParts[i].mpLyt = &mLyt;
mParts[i].mpAnm[0] = &mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET];
mParts[i].mpAnm[1] = &mAnm[i + CROSS_BTN_ANIM_PATTERN_OFFSET];
mParts[i].mpTextBoxes[0] = mpTextboxes[i];
mParts[i].mpTextBoxes[1] = mpTextboxes[i + 4];
mParts[i].mpWindow = mpWindows[i];
mParts[i].mpSizeBox = mpSizeBoxes[i];
mParts[i].field_0x74 = 6;
mParts[i].init();
}
field_0x634 = 0;
field_0x635 = 0;
field_0x636 = 0;
field_0x628 = 0xFFFF;
mCallCount0 = 0;
mCallCount1 = 0;
field_0x620 = 6;
field_0x624 = 6;
field_0x637 = 0;
field_0x638 = 0;
field_0x639 = 0;
field_0x63A = 0;
field_0x63B = 0;
field_0x63C = 0;
mpOwnerPane = nullptr;
for (int i = 0; i < 4; i++) {
mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setToEnd();
mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setAnimEnable(true);
}
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(true);
mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(true);
mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(true);
mLyt.calc();
for (int i = 0; i < 4; i++) {
mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setAnimEnable(false);
}
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(false);
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(false);
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(false);
mAnm[CROSS_BTN_ANIM_LOOP].setAnimEnable(true);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterCrossBtn_c::remove() {
for (int i = 0; i < CROSS_BTN_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
extern "C" u16 prepareFiHelpIndex();
bool dLytMeterCrossBtn_c::execute() {
u16 newFiValue = prepareFiHelpIndex();
if (newFiValue != field_0x628) {
field_0x628 = newFiValue;
mCallCount0 = 0;
}
mParts[0].field_0x74 = field_0x624;
mParts[1].field_0x74 = field_0x620;
if (mpOwnerPane != nullptr) {
for (int i = 0; i < 4; i++) {
mParts[i].execute(mpOwnerPane->IsVisible());
}
}
mStateMgr.executeState();
if (StoryflagManager::sInstance->getCounterOrFlag(43)) {
field_0x63B = 1;
}
if (field_0x637 != 0) {
if (field_0x620 == 0) {
f32 frame = dAcPy_c::GetLink2()->getAnmMatClrFrame();
if (frame == 0.0f) {
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
if (!mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(true);
}
}
if (mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_0].play();
if (mParts[1].isActive() && mCallCount0 < 3 && mAnm[CROSS_BTN_ANIM_CALL_0].getFrame() == 1.0f) {
SmallSoundManager::GetInstance()->playSound(SE_S_SG_CALL);
mCallCount0++;
}
}
}
} else if (field_0x638 == 1) {
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
} else if (mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(false);
}
if (field_0x639 != 0) {
if (field_0x624 == 3) {
if (field_0x63A == 0) {
mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(true);
}
if (mAnm[CROSS_BTN_ANIM_CALL_1].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_1].play();
if (mParts[0].isActive() && mCallCount1 < 3 && mAnm[CROSS_BTN_ANIM_CALL_1].getFrame() == 1.0f) {
SmallSoundManager::GetInstance()->playSound(SE_S_CATAPULT_READY);
mCallCount1++;
}
}
}
} else if (field_0x63A == 1) {
mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
} else if (mAnm[CROSS_BTN_ANIM_CALL_1].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(false);
}
if (field_0x63B != 0) {
if (field_0x620 == 2) {
if (field_0x63C == 0) {
mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
mAnm[CROSS_BTN_ANIM_CALL_2].setRate(2.0f);
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(true);
}
if (mAnm[CROSS_BTN_ANIM_CALL_2].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_2].play();
if (mParts[1].isActive() && mAnm[CROSS_BTN_ANIM_CALL_2].getFrame() == 1.0f) {
SmallSoundManager::GetInstance()->playSound(SE_S_BIRD_CALL);
}
}
}
} else if (field_0x63C == 1) {
mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
} else if (mAnm[CROSS_BTN_ANIM_CALL_2].isEnabled()) {
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(false);
}
if (mAnm[CROSS_BTN_ANIM_LOOP].isEnabled()) {
mAnm[CROSS_BTN_ANIM_LOOP].play();
}
field_0x620 = 6;
field_0x624 = 6;
// Might be arrays
field_0x638 = field_0x637;
field_0x637 = 0;
field_0x63A = field_0x639;
field_0x639 = 0;
field_0x63C = field_0x63B;
field_0x63B = 0;
return true;
}
void dLytMeterCrossBtn_c::setOwnerPane(nw4r::lyt::Pane *pane) {
mpOwnerPane = pane;
for (int i = 0; i < 4; i++) {
mParts[i].mpOwnerPane = pane;
}
}
bool dLytMeterCrossBtn_c::fn_800FA730() const {
if (field_0x620 == 2) {
return true;
}
return field_0x637 != 0 || field_0x639 != 0 || field_0x63B != 0;
}
File diff suppressed because it is too large Load Diff
+127
View File
@@ -1,6 +1,133 @@
#include "d/lyt/meter/d_lyt_meter_event_skip.h"
#include "d/d_sc_game.h"
#include "d/lyt/d2d.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytMeterEventSkip_c, Invisible);
STATE_DEFINE(dLytMeterEventSkip_c, In);
STATE_DEFINE(dLytMeterEventSkip_c, Visible);
STATE_DEFINE(dLytMeterEventSkip_c, Out);
static const d2d::LytBrlanMapping brlanMap[] = {
{ "skip_00_in.brlan", "G_inOut_00"},
{"skip_00_out.brlan", "G_inOut_00"},
};
#define SKIP_ANIM_IN 0
#define SKIP_ANIM_OUT 1
#define SKIP_NUM_ANIMS 2
void dLytMeterEventSkip_c::initializeState_Invisible() {}
void dLytMeterEventSkip_c::executeState_Invisible() {
if (shouldPromptForSkip() || dLytMeter_c::GetInstance()->getMeterField_0x13774()) {
if (dLytMeter_c::GetInstance()->getMeterField_0x13774()) {
for (int i = 0; i < 2; i++) {
mLyt.fn_800AB9A0(mpTextBoxes[i], 1);
}
} else {
for (int i = 0; i < 2; i++) {
mLyt.fn_800AB9A0(mpTextBoxes[i], 0);
}
}
mpWindow->UpdateSize(mpSizeBox, 32.0f);
mVisible = true;
mAnm[SKIP_ANIM_IN].setAnimEnable(true);
mAnm[SKIP_ANIM_IN].setFrame(0.0f);
mStateMgr.changeState(StateID_In);
}
}
void dLytMeterEventSkip_c::finalizeState_Invisible() {}
void dLytMeterEventSkip_c::initializeState_In() {}
void dLytMeterEventSkip_c::executeState_In() {
if (mAnm[SKIP_ANIM_IN].isStop2()) {
mLyt.calc(); // ???
mAnm[SKIP_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Visible);
}
}
void dLytMeterEventSkip_c::finalizeState_In() {}
void dLytMeterEventSkip_c::initializeState_Visible() {}
void dLytMeterEventSkip_c::executeState_Visible() {
if (!shouldPromptForSkip() && !dLytMeter_c::GetInstance()->getMeterField_0x13774()) {
mAnm[SKIP_ANIM_OUT].setAnimEnable(true);
mAnm[SKIP_ANIM_OUT].setFrame(0.0f);
mStateMgr.changeState(StateID_Out);
}
}
void dLytMeterEventSkip_c::finalizeState_Visible() {}
void dLytMeterEventSkip_c::initializeState_Out() {}
void dLytMeterEventSkip_c::executeState_Out() {
if (mAnm[SKIP_ANIM_OUT].isStop2()) {
mAnm[SKIP_ANIM_OUT].setAnimEnable(false);
mVisible = false;
mStateMgr.changeState(StateID_Invisible);
}
}
void dLytMeterEventSkip_c::finalizeState_Out() {}
static const char *sTextBoxes[] = {
"T_skipText_00",
"T_skipTextS_00",
};
bool dLytMeterEventSkip_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("skip_00.brlyt", nullptr);
for (int i = 0; i < SKIP_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
for (int i = 0; i < 2; i++) {
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
mpWindow = mLyt.getWindow("W_bgP_00");
mpSizeBox = mLyt.getSizeBoxInWindow("W_bgP_00");
mpWindow->UpdateSize(mpSizeBox, 32.0f);
mLyt.setPriority(0x8A);
mVisible = false;
mStateMgr.changeState(StateID_Invisible);
return true;
}
bool dLytMeterEventSkip_c::remove() {
for (int i = 0; i < 2; i++) {
mAnm[i].remove();
}
return true;
}
bool dLytMeterEventSkip_c::execute() {
mStateMgr.executeState();
if (mVisible) {
for (int i = 0; i < 2; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
}
return true;
}
bool dLytMeterEventSkip_c::draw() {
if (mVisible) {
mLyt.addToDrawList();
}
return true;
}
bool dLytMeterEventSkip_c::shouldPromptForSkip() const {
return dScGame_c::currentSpawnInfo.stageName == "Demo" ? false : EventManager::canSkipCurrentEvent();
}
+666 -32
View File
@@ -1,5 +1,15 @@
#include "d/lyt/meter/d_lyt_meter_ganbari_gauge.h"
#include "common.h"
#include "d/a/d_a_player.h"
#include "d/d_camera.h"
#include "d/d_sc_game.h"
#include "d/lyt/d_lyt_meter_configuration.h"
#include "m/m_vec.h"
#include "toBeSorted/d_d3d.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/file_manager.h"
STATE_DEFINE(dLytMeterGanbariGauge_c, InvisibleWait);
STATE_DEFINE(dLytMeterGanbariGauge_c, In);
STATE_DEFINE(dLytMeterGanbariGauge_c, Wait);
@@ -14,80 +24,704 @@ STATE_DEFINE(dLytMeterGanbariGauge_c, ToMin);
STATE_DEFINE(dLytMeterGanbariGauge_c, Recovery);
STATE_DEFINE(dLytMeterGanbariGauge_c, ToMax);
void dLytMeterGanbariGauge_c::initializeState_InvisibleWait() {}
static const d2d::LytBrlanMapping brlanMap[] = {
{ "guts_00_in.brlan", "G_inOut_00"},
{ "guts_00_angle.brlan", "G_angle_00"},
{"guts_00_ganbariUpDown.brlan", "G_ganbari_00"},
{"guts_00_ganbariUpDown.brlan", "G_ganbari_01"},
{ "guts_00_ganbariUse.brlan", "G_ganbari_01"},
{ "guts_00_ganbariLoop.brlan", "G_ganbariLoop_00"},
{ "guts_00_drink.brlan", "G_drink_00"},
{ "guts_00_mLoop.brlan", "G_mLoop_00"},
{ "guts_00_mCaution.brlan", "G_mCaution_00"},
{ "guts_00_caution.brlan", "G_caution_00"},
{ "guts_00_toMin.brlan", "G_minMax_00"},
{ "guts_00_toMinLoop.brlan", "G_toMinLoop"},
{ "guts_00_toMax.brlan", "G_minMax_00"},
{ "guts_00_color.brlan", "G_color_00"},
{ "guts_00_out.brlan", "G_inOut_00"},
{ "guts_00_cameraOut.brlan", "G_inOut_00"},
};
#define GANBARI_ANIM_IN 0
#define GANBARI_ANIM_ANGLE 1
#define GANBARI_ANIM_UPDOWN_0 2
#define GANBARI_ANIM_UPDOWN_1 3
#define GANBARI_ANIM_USE 4
#define GANBARI_ANIM_LOOP 5
#define GANBARI_ANIM_DRINK 6
#define GANBARI_ANIM_M_LOOP 7
#define GANBARI_ANIM_M_CAUTION 8
#define GANBARI_ANIM_CAUTION 9
#define GANBARI_ANIM_TO_MIN 10
#define GANBARI_ANIM_TO_MIN_LOOP 11
#define GANBARI_ANIM_TO_MAX 12
#define GANBARI_ANIM_COLOR 13
#define GANBARI_ANIM_OUT 14
#define GANBARI_ANIM_CAMERA_OUT 15
#define GANBARI_NUM_ANIMS 16
void dLytMeterGanbariGauge_c::initializeState_InvisibleWait() {
mAnm[GANBARI_ANIM_IN].setToStart();
mAnm[GANBARI_ANIM_IN].setAnimEnable(true);
mLyt.calc();
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
mAnm[GANBARI_ANIM_OUT].setAnimEnable(false);
}
void dLytMeterGanbariGauge_c::executeState_InvisibleWait() {}
void dLytMeterGanbariGauge_c::finalizeState_InvisibleWait() {}
void dLytMeterGanbariGauge_c::initializeState_In() {}
void dLytMeterGanbariGauge_c::executeState_In() {}
void dLytMeterGanbariGauge_c::finalizeState_In() {}
void dLytMeterGanbariGauge_c::initializeState_In() {
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
field_0x554 = 3.0f;
} else if (swimmingRelated()) {
field_0x554 = 1.0f;
} else {
field_0x554 = 0.0f;
}
mAnm[GANBARI_ANIM_IN].setAnimEnable(true);
mAnm[GANBARI_ANIM_IN].setFrame(0.0f);
}
#pragma pool_data off
void dLytMeterGanbariGauge_c::executeState_In() {
if (mAnm[GANBARI_ANIM_IN].getFrame() == 1.0f) {
realizeAnimState();
if (*mStateMgrWheel.getStateID() == StateID_Caution || *mStateMgrWheel.getStateID() == StateID_ToMin ||
*mStateMgrWheel.getStateID() == StateID_Recovery || *mStateMgrWheel.getStateID() == StateID_ToMax) {
if (mStaminaPercent > 0.95f) {
mStateMgrWheel.changeState(StateID_Normal);
} else {
mStateMgrWheel.changeState(*mStateMgrWheel.getStateID());
}
}
}
if (mAnm[GANBARI_ANIM_IN].isEndReached()) {
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
mStateMgrMain.changeState(StateID_Wait);
}
}
#pragma pool_data on
void dLytMeterGanbariGauge_c::finalizeState_In() {
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
}
void dLytMeterGanbariGauge_c::initializeState_Wait() {}
void dLytMeterGanbariGauge_c::executeState_Wait() {}
void dLytMeterGanbariGauge_c::finalizeState_Wait() {}
void dLytMeterGanbariGauge_c::initializeState_OutWait() {}
void dLytMeterGanbariGauge_c::executeState_OutWait() {}
void dLytMeterGanbariGauge_c::initializeState_OutWait() {
mOutWaitTimer = 0x1E;
}
void dLytMeterGanbariGauge_c::executeState_OutWait() {
if (--mOutWaitTimer <= 0) {
mStateMgrMain.changeState(StateID_Out);
} else if (mStaminaPercent < 0.9999f) {
mStateMgrMain.changeState(StateID_Wait);
}
}
void dLytMeterGanbariGauge_c::finalizeState_OutWait() {}
void dLytMeterGanbariGauge_c::initializeState_Out() {}
void dLytMeterGanbariGauge_c::executeState_Out() {}
void dLytMeterGanbariGauge_c::finalizeState_Out() {}
void dLytMeterGanbariGauge_c::initializeState_Out() {
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
mAnm[GANBARI_ANIM_OUT].setAnimEnable(true);
mAnm[GANBARI_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterGanbariGauge_c::executeState_Out() {
if (mAnm[GANBARI_ANIM_OUT].isEndReached()) {
mLyt.calc();
mStateMgrMain.changeState(StateID_InvisibleWait);
}
}
void dLytMeterGanbariGauge_c::finalizeState_Out() {
mAnm[GANBARI_ANIM_OUT].setAnimEnable(false);
}
void dLytMeterGanbariGauge_c::initializeState_CameraOut() {}
void dLytMeterGanbariGauge_c::executeState_CameraOut() {}
void dLytMeterGanbariGauge_c::finalizeState_CameraOut() {}
void dLytMeterGanbariGauge_c::initializeState_CameraOut() {
mAnm[GANBARI_ANIM_CAMERA_OUT].setAnimEnable(true);
mAnm[GANBARI_ANIM_CAMERA_OUT].setFrame(0.0f);
}
void dLytMeterGanbariGauge_c::executeState_CameraOut() {
if (mAnm[GANBARI_ANIM_CAMERA_OUT].isEndReached()) {
mLyt.calc();
mStateMgrMain.changeState(StateID_InvisibleWait);
}
}
void dLytMeterGanbariGauge_c::finalizeState_CameraOut() {
mAnm[GANBARI_ANIM_CAMERA_OUT].setAnimEnable(false);
}
void dLytMeterGanbariGauge_c::initializeState_Full() {}
void dLytMeterGanbariGauge_c::executeState_Full() {}
void dLytMeterGanbariGauge_c::executeState_Full() {
if (mStaminaPercent < 0.9999f) {
mStateMgrWheel.changeState(StateID_Normal);
} else if (dAcPy_c::GetLink()->checkSwordAndMoreStates(0x200 | 0x40 | 0x20) || field_0x558 != 0) {
mStateMgrWheel.changeState(StateID_FullGutsUse);
}
}
void dLytMeterGanbariGauge_c::finalizeState_Full() {}
void dLytMeterGanbariGauge_c::initializeState_FullGutsUse() {}
void dLytMeterGanbariGauge_c::executeState_FullGutsUse() {}
void dLytMeterGanbariGauge_c::executeState_FullGutsUse() {
if (mStaminaPercent < 0.9999f) {
mStateMgrWheel.changeState(StateID_Normal);
} else if (!dAcPy_c::GetLink()->checkSwordAndMoreStates(0x200 | 0x40 | 0x20) && field_0x558 == 0) {
mStateMgrWheel.changeState(StateID_Full);
}
}
void dLytMeterGanbariGauge_c::finalizeState_FullGutsUse() {}
void dLytMeterGanbariGauge_c::initializeState_Normal() {}
void dLytMeterGanbariGauge_c::executeState_Normal() {}
void dLytMeterGanbariGauge_c::executeState_Normal() {
if (isStaminaLow(mStaminaPercent)) {
mAnm[GANBARI_ANIM_CAUTION].setRate(1.0f);
mStateMgrWheel.changeState(StateID_Caution);
} else if (isStaminaCritical(mStaminaPercent)) {
mAnm[GANBARI_ANIM_CAUTION].setRate(3.0f);
mStateMgrWheel.changeState(StateID_Caution);
} else if (mStaminaPercent >= 0.9999f) {
mStateMgrWheel.changeState(StateID_ToMax);
}
}
void dLytMeterGanbariGauge_c::finalizeState_Normal() {}
void dLytMeterGanbariGauge_c::initializeState_Caution() {}
void dLytMeterGanbariGauge_c::executeState_Caution() {}
void dLytMeterGanbariGauge_c::finalizeState_Caution() {}
void dLytMeterGanbariGauge_c::initializeState_Caution() {
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(true);
mAnm[GANBARI_ANIM_CAUTION].setFrame(0.0f);
}
void dLytMeterGanbariGauge_c::executeState_Caution() {
if (mStaminaPercent <= 0.0001f) {
mStateMgrWheel.changeState(StateID_ToMin);
} else if (isStaminaCritical(mStaminaPercent)) {
mAnm[GANBARI_ANIM_CAUTION].setRate(3.0f);
} else if (isStaminaLow(mStaminaPercent)) {
mAnm[GANBARI_ANIM_CAUTION].setRate(1.0f);
} else {
mStateMgrWheel.changeState(StateID_Normal);
}
}
void dLytMeterGanbariGauge_c::finalizeState_Caution() {
mAnm[GANBARI_ANIM_CAUTION].setFrame(0.0f);
mLyt.calc();
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(false);
}
void dLytMeterGanbariGauge_c::initializeState_ToMin() {}
void dLytMeterGanbariGauge_c::executeState_ToMin() {}
void dLytMeterGanbariGauge_c::initializeState_ToMin() {
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
mLyt.calc();
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
}
void dLytMeterGanbariGauge_c::executeState_ToMin() {
if (mStaminaPercent >= 0.9999f) {
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
mLyt.calc();
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
mStateMgrWheel.changeState(StateID_ToMax);
} else if (mAnm[GANBARI_ANIM_TO_MIN].isEndReached()) {
mStateMgrWheel.changeState(StateID_Recovery);
}
}
void dLytMeterGanbariGauge_c::finalizeState_ToMin() {}
void dLytMeterGanbariGauge_c::initializeState_Recovery() {}
void dLytMeterGanbariGauge_c::executeState_Recovery() {}
void dLytMeterGanbariGauge_c::initializeState_Recovery() {
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MIN].setToEnd2();
mLyt.calc();
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
field_0x554 = 4.0f;
} else if (swimmingRelated()) {
field_0x554 = 1.0f;
} else {
field_0x554 = 2.0f;
}
}
void dLytMeterGanbariGauge_c::executeState_Recovery() {
if (swimmingRelated()) {
if (mStaminaPercent >= 0.0001f) {
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MAX].setToEnd2();
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
mLyt.calc();
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(false);
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(false);
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
mStateMgrWheel.changeState(StateID_Normal);
}
} else if (mStaminaPercent >= 0.9999f) {
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
mLyt.calc();
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(false);
mStateMgrWheel.changeState(StateID_ToMax);
}
}
void dLytMeterGanbariGauge_c::finalizeState_Recovery() {}
void dLytMeterGanbariGauge_c::initializeState_ToMax() {}
void dLytMeterGanbariGauge_c::executeState_ToMax() {}
void dLytMeterGanbariGauge_c::initializeState_ToMax() {
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
mLyt.calc();
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MAX].setToStart();
if (swimmingRelated()) {
field_0x554 = 1.0f;
}
}
void dLytMeterGanbariGauge_c::executeState_ToMax() {
if (mAnm[GANBARI_ANIM_TO_MAX].isStop2()) {
realizeAnimState();
if (dAcPy_c::GetLink()->checkSwordAndMoreStates(0x200 | 0x40 | 0x20)) {
mStateMgrWheel.changeState(StateID_FullGutsUse);
} else {
mStateMgrWheel.changeState(StateID_Full);
}
}
}
void dLytMeterGanbariGauge_c::finalizeState_ToMax() {}
bool dLytMeterGanbariGauge_c::isStaminaLow(f32 arg) {
if (swimmingRelated()) {
return arg <= 0.125f;
} else {
return arg <= 0.3f;
}
}
bool dLytMeterGanbariGauge_c::isStaminaCritical(f32 arg) {
if (swimmingRelated()) {
return false;
} else {
return arg <= 0.1f;
}
}
bool dLytMeterGanbariGauge_c::build(d2d::ResAccIf_c *resAcc) {
// TODO
mLyt.setResAcc(resAcc);
mLyt.build("guts_00.brlyt", nullptr);
for (int i = 0; i < GANBARI_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(true);
}
mAnm[GANBARI_ANIM_USE].setAnimEnable(false);
mAnm[GANBARI_ANIM_LOOP].setAnimEnable(false);
mAnm[GANBARI_ANIM_M_LOOP].setAnimEnable(false);
mAnm[GANBARI_ANIM_M_CAUTION].setAnimEnable(false);
mAnm[GANBARI_ANIM_OUT].setAnimEnable(false);
mAnm[GANBARI_ANIM_CAMERA_OUT].setAnimEnable(false);
mStaminaPercent = 1.0f;
field_0x51C = 1.0f;
field_0x54C = 1.0f;
field_0x550 = 1.0f;
field_0x548 = dLytMeterConfiguration_c::sInstance->field_0x1C8;
field_0x558 = 0;
field_0x559 = 0;
field_0x55B = 0;
mpOwnerPane = nullptr;
field_0x55A = 0;
field_0x554 = 0.0f;
mOutWaitTimer = 0x1E;
field_0x540 = 0;
field_0x534 = 0;
if (dLytMeterConfiguration_c::sInstance->field_0x13C != 0) {
field_0x534 = 0;
} else {
field_0x534 = 1;
}
if (field_0x534 == 0) {
mAnm[GANBARI_ANIM_IN].setToStart();
} else {
mAnm[GANBARI_ANIM_IN].setToEnd2();
}
mAnm[GANBARI_ANIM_IN].setAnimEnable(true);
realizeAnimState();
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
field_0x524.copyFrom(mLyt.getLayout()->GetRootPane()->GetTranslate());
field_0x530 = 0;
field_0x544 = 0;
if (field_0x534 == 0) {
mStateMgrMain.changeState(StateID_InvisibleWait);
} else {
mStateMgrMain.changeState(StateID_Wait);
}
mStateMgrWheel.changeState(StateID_Full);
return true;
}
bool dLytMeterGanbariGauge_c::remove() {
for (int i = 0; i < GANBARI_NUM_ANIMS; i++) {
mAnm[i].remove();
}
return true;
}
bool dLytMeterGanbariGauge_c::execute() {
// TODO
if (mpOwnerPane == nullptr) {
return true;
}
if (!mpOwnerPane->IsVisible()) {
if (*mStateMgrMain.getStateID() != StateID_InvisibleWait) {
mStateMgrMain.changeState(StateID_InvisibleWait);
}
return true;
}
if (fn_80104710(false) || (isCrawling() && !fn_801047B0())) {
field_0x534 = 1;
} else if (dLytMeterConfiguration_c::GetInstance()->field_0x13C) {
field_0x534 = 0;
} else {
field_0x534 = 1;
}
bool b12 = false;
field_0x558 = 0;
f32 drinkFrame = 0.0f;
if (displayAirInsteadOfStamina()) {
if (FileManager::GetInstance()->hasAirPotionPlus() || FileManager::GetInstance()->hasAirPotionNormal()) {
b12 = true;
if ((FileManager::GetInstance()->hasAirPotionNormal() &&
FileManager::GetInstance()->getAirPotionTimer() < 600) ||
(FileManager::GetInstance()->hasAirPotionPlus() &&
FileManager::GetInstance()->getAirPotionPlusTimer() < 600)) {
field_0x558 = 1;
}
if (FileManager::GetInstance()->hasAirPotionPlus()) {
drinkFrame = 3.0f;
} else if (FileManager::GetInstance()->hasAirPotionNormal()) {
drinkFrame = 1.0f;
}
}
} else {
if (dAcPy_c::GetLink()->isAffectedByStaminaPotionPlus() || dAcPy_c::GetLink()->isAffectedByStaminaPotion()) {
b12 = true;
if ((dAcPy_c::GetLink()->isAffectedByStaminaPotion() &&
FileManager::GetInstance()->getStaminaPotionTimer() < 600) ||
(dAcPy_c::GetLink()->isAffectedByStaminaPotionPlus() &&
FileManager::GetInstance()->getStaminaPotionPlusTimer() < 600)) {
field_0x558 = 1;
}
if (dAcPy_c::GetLink()->isAffectedByStaminaPotionPlus()) {
drinkFrame = 2.0f;
} else if (dAcPy_c::GetLink()->isAffectedByStaminaPotion()) {
drinkFrame = 1.0f;
}
}
}
mVec3_c diff = dAcPy_c::GetLink()->poscopy3 - dScGame_c::getCamera(0)->getPositionMaybe();
f32 len = diff.mag();
mVec3_c v;
d3d::fn_80016960(v, dAcPy_c::GetLink()->poscopy3);
if (!EventManager::isInEvent()) {
field_0x524 = v;
}
s32 angle = 0;
mVec3_c v1(field_0x524);
mVec2_c v2(0.0f, 0.0f);
if (fn_80104710(true)) {
field_0x540 = 5;
} else if (field_0x540 > 0 && *mStateMgrMain.getStateID() == StateID_Wait) {
mStateMgrMain.changeState(StateID_CameraOut);
}
f32 scale;
if (fn_80104710(false) || (isCrawling() && !fn_801047B0())) {
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
angle = 4;
v1.x = 232.0f;
v1.y = 145.0f;
scale = 1.12f;
} else if (displayAirInsteadOfStamina()) {
angle = 2;
scale = 1.45f;
v1.x = 232.0f;
v1.y = 145.0f;
} else {
angle = 2;
scale = 1.3f;
v1.x = 232.0f;
v1.y = 145.0f;
}
} else if (fn_801047B0()) {
v2.set(-32.0f, -40.0f);
scale = 0.8f;
} else if (field_0x55B) {
v2.x = -44.0f;
v2.y = -105.0f;
v2.y += 46.0f;
scale = 1.0f;
} else if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
angle = 3;
v2.set(-95.0f, -50.0f);
scale = 0.9f;
} else if (field_0x559 && swimmingRelated()) {
angle = 1;
v2.set(-65.0f, 0.0f);
scale = 1.0f;
} else if (field_0x534 == 0) {
v2.set(-44.0f, -105.0f);
scale = 1.0f;
} else {
v1.x = 216.0f;
v1.y = -60.0f;
scale = 1.4f;
}
v1.x = v1.x + v2.x;
v1.y = v1.y + v2.y;
v1.z = 0.0f;
mLyt.getLayout()->GetRootPane()->SetTranslate(v1);
mVec2_c scaleV(scale, scale);
mLyt.getLayout()->GetRootPane()->SetScale(scaleV);
if (!field_0x534 && len <= dLytMeterConfiguration_c::GetInstance()->field_0x138 && !fn_80104710(false) &&
!isCrawling()) {
field_0x530 = 1;
} else {
field_0x530 = 0;
}
for (int i = 0; i < GANBARI_NUM_ANIMS; i++) {
if (i != GANBARI_ANIM_ANGLE && i != GANBARI_ANIM_UPDOWN_0 && i != GANBARI_ANIM_UPDOWN_1 &&
i != GANBARI_ANIM_USE && i != GANBARI_ANIM_COLOR && i != GANBARI_ANIM_DRINK) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
}
mAnm[GANBARI_ANIM_UPDOWN_0].setFrame(mStaminaPercent * 100.0f);
mAnm[GANBARI_ANIM_ANGLE].setFrame(angle);
mStateMgrWheel.executeState();
if (field_0x544 != 0) {
if (mStaminaPercent < field_0x550 &&
mStaminaPercent < field_0x51C - dLytMeterConfiguration_c::GetInstance()->getField_0x1CC()) {
field_0x548 = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
field_0x54C = field_0x51C;
field_0x550 = mStaminaPercent;
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(field_0x54C * 100.0f);
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
} else {
if (field_0x548 > 0) {
field_0x548--;
}
if (field_0x548 == 0) {
field_0x54C -= dLytMeterConfiguration_c::GetInstance()->getField_0x1D0();
if (field_0x54C < mStaminaPercent) {
field_0x544 = 0;
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
mLyt.calc();
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
} else {
f32 frame = field_0x54C * 100.0f;
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(frame);
}
}
}
} else {
if (mStaminaPercent < field_0x51C - dLytMeterConfiguration_c::GetInstance()->getField_0x1C4()) {
field_0x544 = 1;
field_0x54C = field_0x51C;
field_0x550 = mStaminaPercent;
field_0x548 = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(field_0x54C * 100.0f);
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
} else {
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(mStaminaPercent * 100.0f);
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
}
}
if (b12) {
if (!mAnm[GANBARI_ANIM_M_LOOP].isEnabled()) {
mAnm[GANBARI_ANIM_M_LOOP].setFrame(0.0f);
mAnm[GANBARI_ANIM_M_LOOP].setAnimEnable(true);
}
} else if (mAnm[GANBARI_ANIM_M_LOOP].getFrame() < 1.0f) {
mAnm[GANBARI_ANIM_M_LOOP].setFrame(0.0f);
mAnm[GANBARI_ANIM_M_LOOP].setAnimEnable(false);
}
if (b12 && field_0x558) {
if (!mAnm[GANBARI_ANIM_M_CAUTION].isEnabled()) {
mAnm[GANBARI_ANIM_M_CAUTION].setFrame(0.0f);
mAnm[GANBARI_ANIM_M_CAUTION].setAnimEnable(true);
}
} else if (mAnm[GANBARI_ANIM_M_CAUTION].getFrame() < 1.0f) {
mAnm[GANBARI_ANIM_M_CAUTION].setFrame(0.0f);
mAnm[GANBARI_ANIM_M_CAUTION].setAnimEnable(false);
}
if (!b12 && mStaminaPercent < field_0x51C) {
if (!mAnm[GANBARI_ANIM_LOOP].isEnabled()) {
mAnm[GANBARI_ANIM_LOOP].setFrame(0.0f);
mAnm[GANBARI_ANIM_LOOP].setAnimEnable(true);
}
} else if (mAnm[GANBARI_ANIM_LOOP].getFrame() < 1.0f) {
mAnm[GANBARI_ANIM_LOOP].setFrame(0.0f);
mAnm[GANBARI_ANIM_LOOP].setAnimEnable(false);
}
mAnm[GANBARI_ANIM_COLOR].setFrame(field_0x554);
mAnm[GANBARI_ANIM_COLOR].setAnimEnable(true);
mAnm[GANBARI_ANIM_DRINK].setFrame(drinkFrame);
mAnm[GANBARI_ANIM_DRINK].setAnimEnable(true);
if (!EventManager::isInEvent() && !dAcPy_c::GetLink()->hasvt_0x1C0() &&
!dAcPy_c::GetLink()->checkActionFlagsCont(0x10) &&
(d3d::fn_80016A90(dAcPy_c::GetLink()->poscopy3) || fn_80104710(false) || isCrawling()) &&
*mStateMgrWheel.getStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_InvisibleWait &&
!field_0x530) {
mStateMgrMain.changeState(StateID_In);
} else if (!EventManager::isInEvent() && *mStateMgrWheel.getStateID() == StateID_Full &&
*mStateMgrWheel.getOldStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_Wait) {
mStateMgrMain.changeState(StateID_OutWait);
} else if ((EventManager::isInEvent() || dAcPy_c::GetLink()->hasvt_0x1C0() ||
dAcPy_c::GetLink()->checkActionFlagsCont(0x10) ||
(!d3d::fn_80016A90(dAcPy_c::GetLink()->poscopy3) && !fn_80104710(false) && !isCrawling())) &&
*mStateMgrMain.getStateID() == StateID_Wait) {
mStateMgrMain.changeState(StateID_CameraOut);
} else if (field_0x530 && *mStateMgrMain.getStateID() == StateID_Wait) {
mStateMgrMain.changeState(StateID_CameraOut);
}
if (field_0x540 > 0) {
field_0x540--;
}
if (field_0x55A != swimmingRelated() && *mStateMgrMain.getStateID() == StateID_Wait) {
mStateMgrMain.changeState(StateID_Out);
field_0x55A = swimmingRelated();
}
mStateMgrMain.executeState();
field_0x51C = mStaminaPercent;
return true;
}
const char *dLytMeterGanbariGauge_c::getName() const {
return mLyt.getName();
bool dLytMeterGanbariGauge_c::fn_80104710(bool arg) const {
if (dAcPy_c::GetLink() != nullptr &&
dAcPy_c::GetLink()->checkActionFlagsCont(0x400 | 0x100 | 0x80 | 0x40 | 0x10 | 0x4 | 0x2 | 0x1) &&
dAcPy_c::GetLink()->checkActionFlagsCont(0x40)) {
return true;
}
if (!arg && field_0x540 > 0) {
return true;
}
return false;
}
d2d::LytBase_c *dLytMeterGanbariGauge_c::getLyt() {
return &mLyt;
bool dLytMeterGanbariGauge_c::fn_80104760() const {
const dAcPy_c *link = dAcPy_c::GetLink();
if (link != nullptr &&
(link->checkActionFlagsCont(0x2) || link->checkActionFlagsCont(0x80) || link->checkActionFlagsCont(0x4) ||
link->checkActionFlagsCont(0x10) || link->checkActionFlagsCont(0x100))) {
return true;
}
return false;
}
nw4r::lyt::Pane *dLytMeterGanbariGauge_c::getPane() {
return mLyt.getLayout()->GetRootPane();
bool dLytMeterGanbariGauge_c::fn_801047B0() const {
if (fn_80081FE0(dScGame_c::getCamera(0)->getField_0xD98(), "mogu") ||
fn_80081FE0(dScGame_c::getCamera(0)->getField_0xD98(), "mogu2")) {
return true;
}
return false;
}
bool dLytMeterGanbariGauge_c::isCrawling() const {
return dAcPy_c::GetLink()->checkActionFlags(dAcPy_c::FLG0_CRAWLING);
}
bool dLytMeterGanbariGauge_c::swimmingRelated() {
if (!dAcPy_c::GetLink()->checkFlags0x340(0x100) || dAcPy_c::GetLink()->getCurrentAction() == 0x57 ||
dAcPy_c::GetLink()->checkActionFlags(dAcPy_c::FLG0_IN_WATER)) {
return true;
}
return false;
}
bool dLytMeterGanbariGauge_c::displayAirInsteadOfStamina() {
if (field_0x554 == 1.0f) {
return true;
}
if (field_0x554 == 2.0f && swimmingRelated()) {
return true;
}
return false;
}
void dLytMeterGanbariGauge_c::realizeAnimState() {
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(true);
mAnm[GANBARI_ANIM_TO_MAX].setToEnd2();
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(true);
mAnm[GANBARI_ANIM_CAUTION].setFrame(0.0f);
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(true);
// okay
mAnm[GANBARI_ANIM_USE].setAnimEnable(false);
mAnm[GANBARI_ANIM_USE].setAnimEnable(true);
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
mLyt.calc();
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(false);
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(false);
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(false);
mAnm[GANBARI_ANIM_USE].setAnimEnable(false);
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
if (dAcPy_c::GetLink() != nullptr) {
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
field_0x554 = 3.0f;
} else if (swimmingRelated()) {
field_0x554 = 1.0f;
} else {
field_0x554 = 0.0f;
}
}
}
+382
View File
@@ -0,0 +1,382 @@
#include "d/lyt/meter/d_lyt_meter_heart.h"
#include "common.h"
#include "d/a/d_a_player.h"
#include "d/d_sc_game.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_game_over.h"
#include "nw4r/math/math_types.h"
#include "toBeSorted/effects_struct.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/file_manager.h"
#include "toBeSorted/small_sound_mgr.h"
static const d2d::LytBrlanMapping brlanMap[] = {
{ "heartAll_00_heat.brlan", "G_heart_00"},
{ "heartAll_00_heat.brlan", "G_heart_01"},
{ "heartAll_00_heat.brlan", "G_heart_02"},
{ "heartAll_00_heat.brlan", "G_heart_03"},
{ "heartAll_00_heat.brlan", "G_heart_04"},
{ "heartAll_00_heat.brlan", "G_heart_05"},
{ "heartAll_00_heat.brlan", "G_heart_06"},
{ "heartAll_00_heat.brlan", "G_heart_07"},
{ "heartAll_00_heat.brlan", "G_heart_08"},
{ "heartAll_00_heat.brlan", "G_heart_09"},
{ "heartAll_00_heat.brlan", "G_heart_10"},
{ "heartAll_00_heat.brlan", "G_heart_11"},
{ "heartAll_00_heat.brlan", "G_heart_12"},
{ "heartAll_00_heat.brlan", "G_heart_13"},
{ "heartAll_00_heat.brlan", "G_heart_14"},
{ "heartAll_00_heat.brlan", "G_heart_15"},
{ "heartAll_00_heat.brlan", "G_heart_16"},
{ "heartAll_00_heat.brlan", "G_heart_17"},
{ "heartAll_00_heat.brlan", "G_heart_18"},
{ "heartAll_00_heat.brlan", "G_heart_19"},
{"heartAll_00_heartMain.brlan", "G_heartMain_00"},
{ "heartAll_00_drink.brlan", "G_drink_00"},
{ "heartAll_00_mLoop.brlan", "G_mLoop_00"},
{ "heartAll_00_mCaution.brlan", "G_mCaution_00"},
{ "heartAll_00_loop.brlan", "G_loop_00"},
{ "heartAll_00_danger.brlan", "G_danger_00"},
};
#define HEART_ANIM_HEAT_OFFSET 0
#define HEART_ANIM_MAIN 20
#define HEART_ANIM_DRINK 21
#define HEART_ANIM_MLOOP 22
#define HEART_ANIM_MCAUTION 23
#define HEART_ANIM_LOOP 24
#define HEART_ANIM_DANGER 25
#define HEART_NUM_ANIMS 26
#define HEART_NUM_HEARTS 20
static const char *sPaneNames[] = {
"N_heart_00", "N_heart_01", "N_heart_02", "N_heart_03", "N_heart_04", "N_heart_05", "N_heart_06",
"N_heart_07", "N_heart_08", "N_heart_09", "N_heart_10", "N_heart_11", "N_heart_12", "N_heart_13",
"N_heart_14", "N_heart_15", "N_heart_16", "N_heart_17", "N_heart_18", "N_heart_19",
};
bool dLytMeterHeart_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("heartAll_00.brlyt", nullptr);
for (int i = 0; i < HEART_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
if (i <= HEART_NUM_HEARTS) {
mAnm[i].setAnimEnable(true);
} else {
mAnm[i].setAnimEnable(false);
}
}
for (int i = 0; i < HEART_NUM_HEARTS; i++) {
mpHeartPanes[i] = mLyt.findPane(sPaneNames[i]);
}
mpAlphaPane = mLyt.findPane("N_heartAlpha_00");
mpMainPane = mLyt.findPane("N_heartMain_00");
mCurrentHealth = 0;
mCurrentHealthCapacity = 0;
mStoredHealth = 0;
mStoredHealthCapacity = 0;
mHealthCapacityIncreaseDelayTimer = 0;
mEffectHeartIdx = -1;
field_0x78C = 0;
field_0x790 = 0;
field_0x794 = 0;
field_0x797 = 0;
mIsLoop = false;
mIsDanger = false;
field_0x79A = 0;
mCurrentHealth = getCurrentHealth();
mCurrentHealthCapacity = getCurrentHealthCapacity();
mStoredHealth = mCurrentHealth;
mStoredHealthCapacity = mCurrentHealthCapacity;
field_0x794 = 1;
realizeHeartsState();
field_0x795 = 1;
mLyt.calc();
return true;
}
bool dLytMeterHeart_c::remove() {
return true;
}
bool dLytMeterHeart_c::execute() {
if (field_0x78C > 0) {
field_0x78C--;
}
if (field_0x790 > 0) {
field_0x790--;
}
executeInternal();
if (mIsLoop) {
if (!mAnm[HEART_ANIM_LOOP].isEnabled()) {
mAnm[HEART_ANIM_LOOP].setFrame(0.0f);
mAnm[HEART_ANIM_LOOP].setAnimEnable(true);
}
} else {
if (mAnm[HEART_ANIM_LOOP].isEnabled()) {
mAnm[HEART_ANIM_LOOP].setFrame(0.0f);
mLyt.calc();
mAnm[HEART_ANIM_LOOP].setAnimEnable(false);
}
}
if (mIsDanger) {
if (dAcPy_c::GetLink2()->getField_0x4564() == 1.0f) {
if (!mAnm[HEART_ANIM_DANGER].isEnabled()) {
mAnm[HEART_ANIM_DANGER].setAnimEnable(true);
}
mAnm[HEART_ANIM_DANGER].setFrame(0.0f);
}
} else {
if (mAnm[HEART_ANIM_DANGER].isEnabled()) {
mAnm[HEART_ANIM_DANGER].setToEnd();
mLyt.getLayout()->Animate(0);
mLyt.calc();
mAnm[HEART_ANIM_DANGER].setAnimEnable(false);
}
}
f32 drinkFrame = 0.0f;
bool hasGuardianPotion = false;
bool hasExpiringGuardianPotion = false;
if (FileManager::GetInstance()->hasGuardianPotionPlus()) {
drinkFrame = 2.0f;
hasGuardianPotion = true;
} else if (FileManager::GetInstance()->hasGuardianPotionNormal()) {
hasGuardianPotion = true;
drinkFrame = 1.0f;
}
if ((FileManager::GetInstance()->hasGuardianPotionNormal() &&
FileManager::GetInstance()->getGuardianPotionTimer() < 600) ||
(FileManager::GetInstance()->hasGuardianPotionPlus() &&
FileManager::GetInstance()->getGuardianPotionPlusTimer() < 600)) {
hasExpiringGuardianPotion = true;
}
if (hasGuardianPotion) {
if (!mAnm[HEART_ANIM_MLOOP].isEnabled()) {
mAnm[HEART_ANIM_MLOOP].setFrame(0.0f);
mAnm[HEART_ANIM_MLOOP].setAnimEnable(true);
}
} else if (mAnm[HEART_ANIM_MLOOP].getFrame() < 1.0f) {
mAnm[HEART_ANIM_MLOOP].setFrame(0.0f);
mLyt.getLayout()->Animate(0);
mAnm[HEART_ANIM_MLOOP].setAnimEnable(false);
}
if (hasGuardianPotion && hasExpiringGuardianPotion) {
if (!mAnm[HEART_ANIM_MCAUTION].isEnabled()) {
mAnm[HEART_ANIM_MCAUTION].setFrame(0.0f);
mAnm[HEART_ANIM_MCAUTION].setAnimEnable(true);
}
} else if (mAnm[HEART_ANIM_MCAUTION].getFrame() < 1.0f) {
mAnm[HEART_ANIM_MCAUTION].setFrame(0.0f);
mLyt.getLayout()->Animate(0);
mAnm[HEART_ANIM_MCAUTION].setAnimEnable(false);
}
mAnm[HEART_ANIM_DRINK].setFrame(drinkFrame);
mAnm[HEART_ANIM_DRINK].setAnimEnable(true);
for (int i = 0; i < HEART_NUM_ANIMS; i++) {
if (i > HEART_NUM_HEARTS + 1 && mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
if (mIsDanger && mAnm[HEART_ANIM_DANGER].isEndReached()) {
mAnm[HEART_ANIM_DANGER].setToEnd();
mAnm[HEART_ANIM_DANGER].setAnimEnable(false);
}
mLyt.calc();
return true;
}
s32 dLytMeterHeart_c::getNumDisplayedHearts() const {
return mStoredHealthCapacity / 4;
}
s32 dLytMeterHeart_c::getDisplayedHealthCapacity() const {
return getNumDisplayedHearts() * 4;
}
void dLytMeterHeart_c::realizeHeartsState() {
s32 hearts = getNumDisplayedHearts();
(void)getDisplayedHealthCapacity();
s32 health = mStoredHealth;
s32 healthCapacity = mStoredHealthCapacity;
s32 numFilledHearts = health / 4;
s32 partialHeartFill = health % 4; // Wrong
s32 displayedFilledHearts = healthCapacity / 4;
s32 mNumTotalHeartsIncludingPartial = (getCurrentHealthCapacity() + 3) / 4;
if (displayedFilledHearts < mNumTotalHeartsIncludingPartial) {
mNumTotalHeartsIncludingPartial = displayedFilledHearts;
}
mIsLoop = false;
mIsDanger = false;
for (int i = 0; i < HEART_NUM_HEARTS; i++) {
if (i < mNumTotalHeartsIncludingPartial) {
mpHeartPanes[i]->SetVisible(true);
if (i < displayedFilledHearts) {
if (i < hearts) {
if (numFilledHearts == 0 && partialHeartFill == 0) {
if (i == 0) {
mpMainPane->SetVisible(false);
}
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
} else if (i < numFilledHearts) {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(0.0f);
if (i == numFilledHearts - 1 && partialHeartFill == 0) {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(2.0f);
mpMainPane->SetVisible(true);
mpMainPane->SetTranslate(mpHeartPanes[i]->GetTranslate());
mAnm[HEART_ANIM_MAIN].setFrame(4.0f);
if (dAcPy_c::GetLink2() != nullptr &&
dAcPy_c::GetLink2()->hasLessThanQuarterHealth(false)) {
mIsDanger = true;
} else {
mIsLoop = true;
}
} else {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(0.0f);
}
} else if (i == numFilledHearts && partialHeartFill != 0) {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(2.0f);
mpMainPane->SetVisible(true);
mpMainPane->SetTranslate(mpHeartPanes[i]->GetTranslate());
mAnm[HEART_ANIM_MAIN].setFrame(partialHeartFill);
if (dAcPy_c::GetLink2() != nullptr && dAcPy_c::GetLink2()->hasLessThanQuarterHealth(false)) {
mIsDanger = true;
} else {
mIsLoop = true;
}
} else {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
}
} else {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
}
} else {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
}
} else {
mpHeartPanes[i]->SetVisible(false);
}
}
}
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_972_;
void dLytMeterHeart_c::executeInternal() {
if (mEffectHeartIdx >= 0) {
nw4r::math::MTX34 mtx = mpHeartPanes[mEffectHeartIdx]->GetGlobalMtx();
mVec3_c pos(mtx._03, mtx._13, 0.0f);
EffectsStruct::fn_800298C0(PARTICLE_RESOURCE_ID_MAPPING_972_, &pos, nullptr, nullptr, nullptr, nullptr);
SmallSoundManager::GetInstance()->playSound(SE_S_HEART_ADD);
mEffectHeartIdx = -1;
}
// Redundant
if (!field_0x794) {
mCurrentHealth = getCurrentHealth();
mCurrentHealthCapacity = getCurrentHealthCapacity();
field_0x794 = 1;
}
mCurrentHealthCapacity = getCurrentHealthCapacity();
mCurrentHealth = getCurrentHealth();
if (field_0x796) {
for (int i = 0; i < HEART_NUM_HEARTS; i++) {
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
}
mLyt.calc();
field_0x796 = 0;
}
bool isDanger = dAcPy_c::GetLink2()->hasLessThanQuarterHealth(0);
bool healthDifferent = mStoredHealth != mCurrentHealth;
bool healthCapacityDifferent = mStoredHealthCapacity != mCurrentHealthCapacity;
if (healthCapacityDifferent && field_0x790 < 20) {
field_0x790 = 20;
}
if (healthDifferent || field_0x797 != isDanger) {
s32 current = mCurrentHealth;
if (mStoredHealth + 1 <= current) {
mStoredHealth = mStoredHealth + 1;
if (mpAlphaPane->IsVisible() && mpAlphaPane->GetGlobalAlpha() != 0 && mStoredHealth % 4 == 0 &&
(!(dScGame_c::currentSpawnInfo.stageName == "F406") || dScGame_c::currentSpawnInfo.layer != 13) &&
dLytGameOver_c::GetInstance() == nullptr) {
SmallSoundManager::GetInstance()->playSound(SE_S_HP_GAUGE_UP);
}
} else {
if (mStoredHealth - 1 >= current) {
mStoredHealth = mStoredHealth - 1;
if (EventManager::isInEvent() && !strcmp(EventManager::getCurrentEventName(), ("MoleF202Start")) &&
mStoredHealth % 4 == 0) {
SmallSoundManager::GetInstance()->playSound(SE_S_HP_GAUGE_DOWN);
}
}
}
realizeHeartsState();
if (healthDifferent && field_0x78C < 10) {
field_0x78C = 10;
}
field_0x797 = isDanger;
} else if (healthCapacityDifferent) {
if (mStoredHealthCapacity + 1 <= mCurrentHealthCapacity) {
if ((mStoredHealthCapacity + 1) % 4 == 0) {
if (mHealthCapacityIncreaseDelayTimer < 15) {
mHealthCapacityIncreaseDelayTimer += 1;
return;
}
mHealthCapacityIncreaseDelayTimer = 0;
}
mStoredHealthCapacity++;
if (mStoredHealthCapacity % 4 == 0) {
field_0x79A = 1;
}
} else {
if (mStoredHealthCapacity - 1 >= mCurrentHealthCapacity) {
mStoredHealthCapacity = mStoredHealthCapacity - 1;
}
}
if (field_0x79A && mStoredHealth > mCurrentHealthCapacity - 3) {
s32 numDisplayed = getNumDisplayedHearts();
if (numDisplayed >= 1 && numDisplayed <= 20) {
mEffectHeartIdx = numDisplayed - 1;
field_0x79A = 0;
}
}
realizeHeartsState();
if (field_0x78C < 20) {
field_0x78C = 20;
}
} else if (field_0x79A) {
field_0x79A = 0;
}
}
u8 dLytMeterHeart_c::getCurrentHealth() const {
return FileManager::GetInstance()->getCurrentHealth();
}
u8 dLytMeterHeart_c::getCurrentHealthCapacity() const {
return dAcPy_c::getCurrentHealthCapacity();
}
File diff suppressed because it is too large Load Diff
+478 -20
View File
@@ -1,5 +1,14 @@
#include "d/lyt/meter/d_lyt_meter_key.h"
#include "c/c_lib.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/d_stage_mgr.h"
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
#include "toBeSorted/small_sound_mgr.h"
STATE_DEFINE(dLytMeterKakeraKey_c, Wait);
STATE_DEFINE(dLytMeterKakeraKey_c, On);
STATE_DEFINE(dLytMeterKakeraKey_c, Increase);
@@ -16,54 +25,503 @@ STATE_DEFINE(dLytMeterSmallKey_c, On);
STATE_DEFINE(dLytMeterSmallKey_c, Active);
STATE_DEFINE(dLytMeterSmallKey_c, Off);
static const d2d::LytBrlanMapping brlanMapKakera[] = {
{ "keyKakera_00_in.brlan", "G_inOut_00"},
{"keyKakera_00_number1.brlan", "G_number1_00"},
{"keyKakera_00_number2.brlan", "G_number2_00"},
{"keyKakera_00_number3.brlan", "G_number3_00"},
{"keyKakera_00_number4.brlan", "G_number4_00"},
{"keyKakera_00_number5.brlan", "G_number5_00"},
{ "keyKakera_00_loop.brlan", "G_loop_00"},
{ "keyKakera_00_out.brlan", "G_inOut_00"},
};
#define KEY_KAKERA_ANIM_IN 0
#define KEY_KAKERA_ANIM_NUMBER_OFFSET 1
#define KEY_KAKERA_ANIM_LOOP 6
#define KEY_KAKERA_ANIM_OUT 7
#define KEY_KAKERA_NUM_ANIMS 8
#define KEY_KAKERA_NUM_PIECES 5
void dLytMeterKakeraKey_c::initializeState_Wait() {}
void dLytMeterKakeraKey_c::executeState_Wait() {}
void dLytMeterKakeraKey_c::executeState_Wait() {
if (mShouldBeVisible) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterKakeraKey_c::finalizeState_Wait() {}
void dLytMeterKakeraKey_c::initializeState_On() {}
void dLytMeterKakeraKey_c::executeState_On() {}
void dLytMeterKakeraKey_c::initializeState_On() {
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(true);
mAnm[KEY_KAKERA_ANIM_IN].setToEnd();
for (int i = 0; i < KEY_KAKERA_NUM_PIECES; i++) {
if (i < mSavedKeyPieceCount) {
mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].setAnimEnable(true);
mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].setToEnd();
}
}
mLyt.calc();
for (int i = 0; i < KEY_KAKERA_NUM_PIECES; i++) {
if (mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].isEnabled()) {
mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].setAnimEnable(false);
}
}
mAnm[KEY_KAKERA_ANIM_IN].setFrame(0.0f);
}
void dLytMeterKakeraKey_c::executeState_On() {
if (mAnm[KEY_KAKERA_ANIM_IN].isEndReached()) {
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterKakeraKey_c::finalizeState_On() {}
void dLytMeterKakeraKey_c::initializeState_Increase() {}
void dLytMeterKakeraKey_c::executeState_Increase() {}
void dLytMeterKakeraKey_c::initializeState_Increase() {
mNextKeyPieceCount = mSavedKeyPieceCount + 1;
mAnm[mNextKeyPieceCount - 1 + KEY_KAKERA_ANIM_NUMBER_OFFSET].setAnimEnable(true);
mAnm[mNextKeyPieceCount - 1 + KEY_KAKERA_ANIM_NUMBER_OFFSET].setFrame(0.0f);
mSavedKeyPieceCount = dAcItem_c::getKeyPieceCount();
if (mSavedKeyPieceCount == KEY_KAKERA_NUM_PIECES) {
SmallSoundManager::GetInstance()->playSound(SE_S_KEY_COMPLETE);
} else {
SmallSoundManager::GetInstance()->playSound(SE_S_KEY_PARTS);
}
}
void dLytMeterKakeraKey_c::executeState_Increase() {
if (mAnm[mNextKeyPieceCount + KEY_KAKERA_ANIM_IN].isEndReached()) {
mAnm[mNextKeyPieceCount + KEY_KAKERA_ANIM_IN].setAnimEnable(false);
mNextKeyPieceCount = -1;
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterKakeraKey_c::finalizeState_Increase() {}
void dLytMeterKakeraKey_c::initializeState_Active() {}
void dLytMeterKakeraKey_c::executeState_Active() {}
void dLytMeterKakeraKey_c::executeState_Active() {
if (mSavedKeyPieceCount != dAcItem_c::getKeyPieceCount()) {
mStateMgr.changeState(StateID_Increase);
} else if (!mShouldBeVisible) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterKakeraKey_c::finalizeState_Active() {}
void dLytMeterKakeraKey_c::initializeState_Off() {}
void dLytMeterKakeraKey_c::executeState_Off() {}
void dLytMeterKakeraKey_c::initializeState_Off() {
mAnm[KEY_KAKERA_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_KAKERA_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterKakeraKey_c::executeState_Off() {
if (mAnm[KEY_KAKERA_ANIM_OUT].isEndReached()) {
mAnm[KEY_KAKERA_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterKakeraKey_c::finalizeState_Off() {}
bool dLytMeterKakeraKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keyKakera_00.brlyt", nullptr);
mLyt.setPriority(0x8A);
for (int i = 0; i < KEY_KAKERA_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapKakera[i].mFile, resAcc, mLyt.getLayout(), brlanMapKakera[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_KAKERA_ANIM_LOOP].setAnimEnable(true);
mSavedKeyPieceCount = dAcItem_c::getKeyPieceCount();
mNextKeyPieceCount = -1;
mpPane = mLyt.findPane("N_inOut_00");
nw4r::lyt::Pane *positionPane = mLyt.findPane("N_keyPosition_00");
mPanePositions[0].copyFrom(positionPane->GetTranslate());
mPanePositions[1].copyFrom(mpPane->GetTranslate());
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_KAKERA_ANIM_IN].setFrame(0.0f);
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(true);
mLyt.calc();
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterKakeraKey_c::remove() {
for (int i = 0; i < KEY_KAKERA_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterKakeraKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mVec3_c diff = mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex];
mPosition = diff * cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) + mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_KAKERA_NUM_ANIMS; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterKakeraKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterKakeraKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}
static const d2d::LytBrlanMapping brlanMapBoss[] = {
{ "keyBoss_00_in.brlan", "G_inOut_00"},
{ "keyBoss_00_out.brlan", "G_inOut_00"},
{ "keyBoss_00_keyBoss.brlan", "G_keyBoss_00"},
{ "keyBoss_00_loop.brlan", "G_loop_00"},
{"keyBoss_00_position.brlan", "G_position_00"},
};
#define KEY_BOSS_ANIM_IN 0
#define KEY_BOSS_ANIM_OUT 1
#define KEY_BOSS_ANIM_KEYBOSS 2
#define KEY_BOSS_ANIM_LOOP 3
#define KEY_BOSS_ANIM_POSITION 4
#define KEY_BOSS_NUM_ANIMS 5
void dLytMeterBossKey_c::initializeState_Wait() {}
void dLytMeterBossKey_c::executeState_Wait() {}
void dLytMeterBossKey_c::executeState_Wait() {
if (mShouldBeVisible) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterBossKey_c::finalizeState_Wait() {}
void dLytMeterBossKey_c::initializeState_On() {}
void dLytMeterBossKey_c::executeState_On() {}
void dLytMeterBossKey_c::initializeState_On() {
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_IN].setFrame(0.0f);
}
void dLytMeterBossKey_c::executeState_On() {
if (mAnm[KEY_BOSS_ANIM_IN].isEndReached()) {
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterBossKey_c::finalizeState_On() {}
void dLytMeterBossKey_c::initializeState_Active() {}
void dLytMeterBossKey_c::executeState_Active() {}
void dLytMeterBossKey_c::executeState_Active() {
if (!mShouldBeVisible) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterBossKey_c::finalizeState_Active() {}
void dLytMeterBossKey_c::initializeState_Off() {}
void dLytMeterBossKey_c::executeState_Off() {}
void dLytMeterBossKey_c::initializeState_Off() {
mAnm[KEY_BOSS_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterBossKey_c::executeState_Off() {
if (mAnm[KEY_BOSS_ANIM_OUT].isEndReached()) {
mAnm[KEY_BOSS_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterBossKey_c::finalizeState_Off() {}
bool dLytMeterBossKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keyBoss_00.brlyt", nullptr);
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapBoss[i].mFile, resAcc, mLyt.getLayout(), brlanMapBoss[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_BOSS_ANIM_LOOP].setAnimEnable(true);
mpPane = mLyt.findPane("N_keyBoss_00");
mAnm[KEY_BOSS_ANIM_POSITION].setAnimEnable(true);
for (int i = 0; i < 4; i++) {
mAnm[KEY_BOSS_ANIM_POSITION].setFrame(i);
mLyt.calc();
mPanePositions[i].copyFrom(mLyt.findPane("N_keyPosition_00")->GetTranslate());
}
mAnm[KEY_BOSS_ANIM_POSITION].setAnimEnable(false);
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_BOSS_ANIM_IN].setFrame(0.0f);
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(true);
f32 frame = 0.0f;
if (dStageMgr_c::GetInstance()->getMapNameId() == 11) {
frame = 0.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 14) {
frame = 1.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 12) {
frame = 2.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 16) {
frame = 3.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 13) {
frame = 4.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 15) {
frame = 5.0f;
}
mAnm[KEY_BOSS_ANIM_KEYBOSS].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_KEYBOSS].setFrame(frame);
mLyt.getLayout()->Animate(0);
mLyt.calc();
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(false);
mAnm[KEY_BOSS_ANIM_KEYBOSS].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterBossKey_c::remove() {
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterBossKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mVec3_c diff = mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex];
mPosition = diff * cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) + mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterBossKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterBossKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}
static const d2d::LytBrlanMapping brlanMapSmall[] = {
{ "keySmall_00_in.brlan", "G_inOut_00"},
{ "keySmall_00_out.brlan", "G_inOut_00"},
{"keySmall_00_keySmall.brlan", "G_keySmall_00"},
{ "keySmall_00_loop.brlan", "G_loop_00"},
{"keySmall_00_position.brlan", "G_position_00"},
};
#define KEY_SMALL_ANIM_IN 0
#define KEY_SMALL_ANIM_OUT 1
#define KEY_SMALL_ANIM_KEYSMALL 2
#define KEY_SMALL_ANIM_LOOP 3
#define KEY_SMALL_ANIM_POSITION 4
#define KEY_SMALL_NUM_ANIMS 5
void dLytMeterSmallKey_c::initializeState_Wait() {}
void dLytMeterSmallKey_c::executeState_Wait() {}
void dLytMeterSmallKey_c::executeState_Wait() {
if (mShouldBeVisible && dAcItem_c::getSmallKeyCount() != 0) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterSmallKey_c::finalizeState_Wait() {}
void dLytMeterSmallKey_c::initializeState_On() {}
void dLytMeterSmallKey_c::executeState_On() {}
void dLytMeterSmallKey_c::initializeState_On() {
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_IN].setToEnd();
mSavedSmallKeyCount = dAcItem_c::getSmallKeyCount();
if (mSavedSmallKeyCount > 0 && mSavedSmallKeyCount <= 5) {
mAnm[KEY_SMALL_ANIM_KEYSMALL].setFrame(mSavedSmallKeyCount - 1);
}
mAnm[KEY_SMALL_ANIM_IN].setFrame(0.0f);
}
void dLytMeterSmallKey_c::executeState_On() {
if (mAnm[KEY_SMALL_ANIM_IN].isEndReached()) {
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterSmallKey_c::finalizeState_On() {}
void dLytMeterSmallKey_c::initializeState_Active() {}
void dLytMeterSmallKey_c::executeState_Active() {}
void dLytMeterSmallKey_c::executeState_Active() {
if (mSavedSmallKeyCount != dAcItem_c::getSmallKeyCount()) {
mSavedSmallKeyCount = dAcItem_c::getSmallKeyCount();
if (mSavedSmallKeyCount > 0 && mSavedSmallKeyCount <= 5) {
mAnm[KEY_SMALL_ANIM_KEYSMALL].setFrame(mSavedSmallKeyCount - 1);
}
}
if (!mShouldBeVisible || dAcItem_c::getSmallKeyCount() == 0) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterSmallKey_c::finalizeState_Active() {}
void dLytMeterSmallKey_c::initializeState_Off() {}
void dLytMeterSmallKey_c::executeState_Off() {}
void dLytMeterSmallKey_c::initializeState_Off() {
mAnm[KEY_SMALL_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterSmallKey_c::executeState_Off() {
if (mAnm[KEY_SMALL_ANIM_OUT].isEndReached()) {
mAnm[KEY_SMALL_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterSmallKey_c::finalizeState_Off() {}
bool dLytMeterSmallKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keySmall_00.brlyt", nullptr);
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapSmall[i].mFile, resAcc, mLyt.getLayout(), brlanMapSmall[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_SMALL_ANIM_LOOP].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_KEYSMALL].setAnimEnable(true);
mpPane = mLyt.findPane("N_keyAll_00");
mAnm[KEY_SMALL_ANIM_POSITION].setAnimEnable(true);
for (int i = 0; i < 4; i++) {
mAnm[KEY_SMALL_ANIM_POSITION].setFrame(i);
mLyt.calc();
mPanePositions[i].copyFrom(mLyt.findPane("N_keyPosition_00")->GetTranslate());
}
mAnm[KEY_SMALL_ANIM_POSITION].setAnimEnable(false);
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mSavedSmallKeyCount = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_SMALL_ANIM_IN].setFrame(0.0f);
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(true);
mLyt.calc();
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterSmallKey_c::remove() {
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterSmallKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mVec3_c diff = mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex];
mPosition = diff * cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) + mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
if (i != KEY_SMALL_ANIM_KEYSMALL && mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterSmallKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterSmallKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}
File diff suppressed because it is too large Load Diff
+222
View File
@@ -1,6 +1,228 @@
#include "d/lyt/meter/d_lyt_meter_nun_stk.h"
#include "d/lyt/d_lyt_unknowns.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
STATE_DEFINE(dLytMeterNunStk_c, Wait);
STATE_DEFINE(dLytMeterNunStk_c, On);
STATE_DEFINE(dLytMeterNunStk_c, Active);
STATE_DEFINE(dLytMeterNunStk_c, Off);
static const d2d::LytBrlanMapping brlanMap[] = {
{"nunBtn_02_input.brlan", "G_input_00"},
{ "nunBtn_02_loop.brlan", "G_loop_00"},
};
#define NUN_STK_ANIM_INPUT 0
#define NUN_STK_ANIM_LOOP 1
#define NUN_STK_NUM_ANIMS 2
void dLytMeterNunStk_c::initializeState_Wait() {
mOnDelay = 15;
}
void dLytMeterNunStk_c::executeState_Wait() {
s32 timer = mOnDelay;
if (field_0x184) {
if (field_0x178) {
bool bDoUpdate = true;
if (field_0x174 != LytDoButtonRelated::DO_NONE) {
if (timer <= 0) {
mAnm[NUN_STK_ANIM_INPUT].setBackwardsOnce();
mAnm[NUN_STK_ANIM_INPUT].setToStart();
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
mStateMgr.changeState(StateID_On);
setMessage(field_0x174);
} else {
mOnDelay = timer - 1;
bDoUpdate = false;
}
}
if (bDoUpdate) {
field_0x170 = field_0x174;
}
} else {
if (field_0x174 != LytDoButtonRelated::DO_NONE) {
setMessage(field_0x174);
}
field_0x170 = field_0x174;
}
}
if (timer == mOnDelay) {
mOnDelay = 15;
}
}
void dLytMeterNunStk_c::finalizeState_Wait() {}
void dLytMeterNunStk_c::initializeState_On() {}
void dLytMeterNunStk_c::executeState_On() {
if (mAnm[NUN_STK_ANIM_INPUT].isStop2()) {
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterNunStk_c::finalizeState_On() {}
void dLytMeterNunStk_c::initializeState_Active() {}
void dLytMeterNunStk_c::executeState_Active() {
if (field_0x174 != field_0x170 || !field_0x178) {
if (field_0x174 == LytDoButtonRelated::DO_NONE || !field_0x178) {
mAnm[NUN_STK_ANIM_INPUT].setForwardOnce();
mAnm[NUN_STK_ANIM_INPUT].setFrame(0.0f);
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
if (field_0x170 != mDisplayedAction) {
field_0x174 = mDisplayedAction;
}
mStateMgr.changeState(StateID_Off);
} else {
setMessage(field_0x174);
}
field_0x170 = field_0x174;
} else if (field_0x170 == LytDoButtonRelated::DO_NONE) {
mAnm[NUN_STK_ANIM_INPUT].setForwardOnce();
mAnm[NUN_STK_ANIM_INPUT].setFrame(0.0f);
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterNunStk_c::finalizeState_Active() {}
void dLytMeterNunStk_c::initializeState_Off() {}
void dLytMeterNunStk_c::executeState_Off() {
if (mAnm[NUN_STK_ANIM_INPUT].isEndReached()) {
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterNunStk_c::finalizeState_Off() {}
static const char *sPane = "N_all_00";
static const char *sTextBoxes[] = {
"T_conStick_00",
"T_conStickS_00",
};
static const char *sWindows[] = {"W_bgP_00"};
bool dLytMeterNunStk_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("nunBtn_02.brlyt", nullptr);
for (int i = 0; i < NUN_STK_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mpPane = mLyt.findPane(sPane);
for (int i = 0; i < 2; i++) {
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
for (int i = 0; i < 1; i++) {
mpWindow[i] = mLyt.getWindow(sWindows[i]);
mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
}
mDisplayedAction = LytDoButtonRelated::DO_NONE;
field_0x170 = LytDoButtonRelated::DO_NONE;
field_0x174 = LytDoButtonRelated::DO_NONE;
field_0x184 = true;
field_0x178 = true;
field_0x185 = false;
mpOwnerPane = nullptr;
setMessage(field_0x170);
mAnm[NUN_STK_ANIM_INPUT].setToEnd();
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
mAnm[NUN_STK_ANIM_LOOP].setAnimEnable(true);
mLyt.calc();
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterNunStk_c::remove() {
for (int i = 0; i < NUN_STK_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterNunStk_c::execute() {
if (mpOwnerPane == nullptr) {
return true;
}
if (!mpOwnerPane->IsVisible()) {
if (*mStateMgr.getStateID() == StateID_Active) {
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
}
if (mAnm[NUN_STK_ANIM_INPUT].isEnabled()) {
mAnm[NUN_STK_ANIM_INPUT].setForwardOnce();
mAnm[NUN_STK_ANIM_INPUT].setToEnd2();
mLyt.calc();
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_STK, LytDoButtonRelated::DO_NONE);
field_0x174 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_STK);
setMessage(field_0x174);
return true;
}
field_0x185 = false;
field_0x174 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_STK);
field_0x178 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_NUN_STK);
mStateMgr.executeState();
for (int i = 0; i < NUN_STK_NUM_ANIMS; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
return true;
}
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
void dLytMeterNunStk_c::setMessage(s32 id) {
char buf[11];
for (int i = 0; i < 11; i++) {
buf[i] = 0;
}
if (id < LytDoButtonRelated::DO_NONE) {
if (id < 0x5D) {
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
} else {
s32 id2 = id - 0x5E;
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
}
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
}
mpWindow[0]->SetVisible(true);
mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
mDisplayedAction = id;
} else {
wchar_t b2[2];
b2[0] = b2[1] = 0;
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->setTextWithGlobalTextProcessor(b2);
}
mpWindow[0]->SetVisible(false);
}
}
+264
View File
@@ -1,6 +1,270 @@
#include "d/lyt/meter/d_lyt_meter_nunchaku_bg.h"
#include "common.h"
#include "d/lyt/d_lyt_unknowns.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytMeterNunchakuBg_c, Wait);
STATE_DEFINE(dLytMeterNunchakuBg_c, On);
STATE_DEFINE(dLytMeterNunchakuBg_c, Active);
STATE_DEFINE(dLytMeterNunchakuBg_c, Off);
static const d2d::LytBrlanMapping brlanMap[] = {
{ "nunBg_00_input.brlan", "G_input_00"},
{"nunBg_00_arrowV.brlan", "G_arrowAlpha_00"},
{ "nunBg_00_loop.brlan", "G_loop_00"},
};
#define NUN_BG_ANIM_INPUT 0
#define NUN_BG_ANIM_ARROWV 1
#define NUN_BG_ANIM_LOOP 2
#define NUN_BG_NUM_ANIMS 3
void dLytMeterNunchakuBg_c::initializeState_Wait() {
mOnDelay = 15;
}
void dLytMeterNunchakuBg_c::executeState_Wait() {
s32 timer = mOnDelay;
if (field_0x1C4) {
if (field_0x1B8) {
bool bDoUpdate = true;
if (field_0x1B4 != LytDoButtonRelated::DO_NONE) {
if (timer <= 0) {
mAnm[NUN_BG_ANIM_INPUT].setBackwardsOnce();
mAnm[NUN_BG_ANIM_INPUT].setToStart();
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
mStateMgr.changeState(StateID_On);
setMessage(field_0x1B4);
} else {
mOnDelay = timer - 1;
bDoUpdate = false;
}
}
if (bDoUpdate) {
field_0x1B0 = field_0x1B4;
}
} else {
if (field_0x1B4 != LytDoButtonRelated::DO_NONE) {
setMessage(field_0x1B4);
}
field_0x1B0 = field_0x1B4;
}
}
if (timer == mOnDelay) {
mOnDelay = 15;
}
}
void dLytMeterNunchakuBg_c::finalizeState_Wait() {}
void dLytMeterNunchakuBg_c::initializeState_On() {}
void dLytMeterNunchakuBg_c::executeState_On() {
if (mAnm[NUN_BG_ANIM_INPUT].isStop2()) {
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterNunchakuBg_c::finalizeState_On() {}
void dLytMeterNunchakuBg_c::initializeState_Active() {}
void dLytMeterNunchakuBg_c::executeState_Active() {
if (field_0x1B4 != field_0x1B0 || !field_0x1B8) {
if (field_0x1B4 == LytDoButtonRelated::DO_NONE || !field_0x1B8) {
mAnm[NUN_BG_ANIM_INPUT].setForwardOnce();
mAnm[NUN_BG_ANIM_INPUT].setFrame(0.0f);
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
if (field_0x1B0 != field_0x1BC) {
field_0x1B4 = field_0x1BC;
}
mStateMgr.changeState(StateID_Off);
} else {
setMessage(field_0x1B4);
}
field_0x1B0 = field_0x1B4;
} else if (field_0x1B0 == LytDoButtonRelated::DO_NONE) {
mAnm[NUN_BG_ANIM_INPUT].setForwardOnce();
mAnm[NUN_BG_ANIM_INPUT].setFrame(0.0f);
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterNunchakuBg_c::finalizeState_Active() {}
void dLytMeterNunchakuBg_c::initializeState_Off() {}
void dLytMeterNunchakuBg_c::executeState_Off() {
if (mAnm[NUN_BG_ANIM_INPUT].isEndReached()) {
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterNunchakuBg_c::finalizeState_Off() {}
static const char *sPane = "N_nunBg_00";
static const char *sTextBoxes[] = {
"T_nunchaku_00",
"T_nunchakuS_00",
};
static const char *sWindows[] = {"W_bgP_04"};
bool dLytMeterNunchakuBg_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("nunBg_00.brlyt", nullptr);
for (int i = 0; i < NUN_BG_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mpPane = mLyt.findPane(sPane);
for (int i = 0; i < 2; i++) {
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
for (int i = 0; i < 1; i++) {
mpWindow[i] = mLyt.getWindow(sWindows[i]);
mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
}
field_0x1BC = 0x60;
field_0x1B0 = 0x60;
field_0x1B4 = 0x60;
field_0x1C4 = false;
field_0x1B8 = true;
field_0x1C5 = 0;
field_0x1C6 = 0;
mpOwnerPane = nullptr;
mOnDelay = 15;
dLytMeter_c::GetMain()->getNunStk()->getBgPane()->SetVisible(false);
setMessage(field_0x1B0);
mAnm[NUN_BG_ANIM_INPUT].setToEnd();
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
mAnm[NUN_BG_ANIM_LOOP].setAnimEnable(true);
mLyt.calc();
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterNunchakuBg_c::remove() {
for (int i = 0; i < NUN_BG_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterNunchakuBg_c::execute() {
if (mpOwnerPane == nullptr) {
return true;
}
if (!mpOwnerPane->IsVisible()) {
if (*mStateMgr.getStateID() == StateID_Active) {
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
}
if (mAnm[NUN_BG_ANIM_INPUT].isEnabled()) {
mAnm[NUN_BG_ANIM_INPUT].setForwardOnce();
mAnm[NUN_BG_ANIM_INPUT].setToEnd2();
mLyt.calc();
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_BG, LytDoButtonRelated::DO_NONE);
field_0x1B4 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_STK);
setMessage(field_0x1B4);
return true;
}
if (EventManager::isInEvent()) {
field_0x1C4 = false;
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_BG, LytDoButtonRelated::DO_NONE);
} else {
field_0x1C4 = true;
}
s32 d = dLytDobutton_c::getFn0x8010E5E0();
if (d == 6 || d == 9) {
LytDoButtonRelated::Action_e a = LytDoButtonRelated::convertDoButton(dLytDobutton_c::getFn0x8010E5D0());
if (a >= 0) {
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_BG, a);
}
}
field_0x1B4 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_BG);
field_0x1B8 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_NUN_BG);
bool hasNunStk = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_NUN_STK);
u8 val = dLytMeter_c::getDowsing0x550A();
if (hasNunStk != field_0x1C5 || val != field_0x1C6) {
field_0x1C5 = hasNunStk;
field_0x1C6 = val;
if (hasNunStk) {
mAnm[NUN_BG_ANIM_ARROWV].setFrame(1.0f);
mAnm[NUN_BG_ANIM_ARROWV].setAnimEnable(true);
dLytMeter_c::GetMain()->getNunStk()->getBgPane()->SetVisible(true);
} else {
if (val) {
mAnm[NUN_BG_ANIM_ARROWV].setFrame(1.0f);
mAnm[NUN_BG_ANIM_ARROWV].setAnimEnable(true);
} else {
mAnm[NUN_BG_ANIM_ARROWV].setFrame(0.0f);
mAnm[NUN_BG_ANIM_ARROWV].setAnimEnable(true);
setMessage(field_0x1B4);
}
dLytMeter_c::GetMain()->getNunStk()->getBgPane()->SetVisible(false);
}
}
mStateMgr.executeState();
for (int i = 0; i < NUN_BG_NUM_ANIMS; i++) {
if (i != 1 && mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
return true;
}
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
void dLytMeterNunchakuBg_c::setMessage(s32 id) {
char buf[11];
for (int i = 0; i < 11; i++) {
buf[i] = 0;
}
if (id < LytDoButtonRelated::DO_NONE) {
if (id < 0x5D) {
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
} else {
s32 id2 = id - 0x5E;
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
}
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
}
mpWindow[0]->SetVisible(true);
mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
field_0x1BC = id;
} else {
wchar_t b2[2];
b2[0] = b2[1] = 0;
for (int i = 0; i < 2; i++) {
mpTextBoxes[i]->setTextWithGlobalTextProcessor(b2);
}
mpWindow[0]->SetVisible(false);
}
}

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