mirror of
https://github.com/zeldaret/ss
synced 2026-07-09 14:15:23 -04:00
@@ -42,7 +42,7 @@ calcRoll__10dAcOtubo_cFv = .text:0x00001D30; // type:function size:0x78C
|
||||
adjustRoll__10dAcOtubo_cFv = .text:0x000024C0; // type:function size:0x1B0
|
||||
fn_272_2670__10dAcOtubo_cFv = .text:0x00002670; // type:function size:0x3A0
|
||||
attemptDestroy__10dAcOtubo_cFv = .text:0x00002A10; // type:function size:0x324
|
||||
attemptDestroyOnWall__10dAcOtubo_cFPUlPCUc = .text:0x00002D40; // type:function size:0x64
|
||||
attemptDestroyOnWall__10dAcOtubo_cFRCUlRCb = .text:0x00002D40; // type:function size:0x64
|
||||
getCenter__10dAcOtubo_cCFv = .text:0x00002DB0; // type:function size:0xAC
|
||||
fn_272_2E60__10dAcOtubo_cFRC7mVec3_c = .text:0x00002E60; // type:function size:0x1B8
|
||||
fn_272_3020__10dAcOtubo_cFv = .text:0x00003020; // type:function size:0x12C
|
||||
|
||||
@@ -248,15 +248,19 @@ d/d_player_act.cpp:
|
||||
.bss start:0x805A06B0 end:0x805A06C8
|
||||
|
||||
d/d_player_mdl.cpp:
|
||||
.text start:0x8005CE90 end:0x80061B10 align:16
|
||||
.ctors start:0x804DB68C end:0x804DB690
|
||||
.rodata start:0x804DE1E8 end:0x804E0B38
|
||||
.text start:0x8005CE90 end:0x80061AA4 align:16
|
||||
.rodata start:0x804DE1E8 end:0x804E0918
|
||||
.data start:0x8050D690 end:0x8050DDD8
|
||||
.sdata start:0x80571C80 end:0x80571D08
|
||||
.sbss start:0x80575208 end:0x80575220
|
||||
.sbss start:0x80575208 end:0x80575210
|
||||
.sdata2 start:0x80577020 end:0x80577680
|
||||
.bss start:0x805A06C8 end:0x805A06F0
|
||||
|
||||
d/d_player_guide_colors.cpp:
|
||||
.text start:0x80061AB0 end:0x80061B0C align:16
|
||||
.ctors start:0x804DB68C end:0x804DB690
|
||||
.sbss start:0x80575210 end:0x80575220
|
||||
|
||||
d/d_rawarchive.cpp:
|
||||
.text start:0x80061B10 end:0x800629D0 align:16
|
||||
.data start:0x8050DDD8 end:0x8050DDF8
|
||||
|
||||
+905
-875
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -413,7 +413,8 @@ config.libs = [
|
||||
Object(NonMatching, "d/d_pad.cpp"),
|
||||
Object(NonMatching, "d/d_pad_player.cpp"),
|
||||
Object(NonMatching, "d/d_player_act.cpp"),
|
||||
Object(NonMatching, "d/d_player_mdl.cpp"),
|
||||
Object(Matching, "d/d_player_mdl.cpp"),
|
||||
Object(Matching, "d/d_player_guide_colors.cpp"),
|
||||
Object(Matching, "d/d_rawarchive.cpp"),
|
||||
Object(Matching, "d/d_scene.cpp"),
|
||||
Object(NonMatching, "d/d_state.cpp"),
|
||||
|
||||
+65
-2
@@ -15,11 +15,74 @@ struct cBgS_PolyInfo;
|
||||
|
||||
struct SoundSource {
|
||||
virtual ~SoundSource() {}
|
||||
// TODO
|
||||
// TODO there's probably multiple inheritance involved and stuff
|
||||
#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset();
|
||||
|
||||
SOUNDSOURCE_VIRTUAL(0x0C);
|
||||
SOUNDSOURCE_VIRTUAL(0x10);
|
||||
SOUNDSOURCE_VIRTUAL(0x14);
|
||||
SOUNDSOURCE_VIRTUAL(0x18);
|
||||
SOUNDSOURCE_VIRTUAL(0x1C);
|
||||
SOUNDSOURCE_VIRTUAL(0x20);
|
||||
SOUNDSOURCE_VIRTUAL(0x24);
|
||||
SOUNDSOURCE_VIRTUAL(0x28);
|
||||
SOUNDSOURCE_VIRTUAL(0x2C);
|
||||
SOUNDSOURCE_VIRTUAL(0x30);
|
||||
SOUNDSOURCE_VIRTUAL(0x34);
|
||||
SOUNDSOURCE_VIRTUAL(0x38);
|
||||
SOUNDSOURCE_VIRTUAL(0x3C);
|
||||
SOUNDSOURCE_VIRTUAL(0x40);
|
||||
SOUNDSOURCE_VIRTUAL(0x44);
|
||||
virtual bool shutdown(); // 0x48
|
||||
SOUNDSOURCE_VIRTUAL(0x4C);
|
||||
SOUNDSOURCE_VIRTUAL(0x50);
|
||||
SOUNDSOURCE_VIRTUAL(0x54);
|
||||
SOUNDSOURCE_VIRTUAL(0x58);
|
||||
SOUNDSOURCE_VIRTUAL(0x5C);
|
||||
SOUNDSOURCE_VIRTUAL(0x60);
|
||||
SOUNDSOURCE_VIRTUAL(0x64);
|
||||
SOUNDSOURCE_VIRTUAL(0x68);
|
||||
SOUNDSOURCE_VIRTUAL(0x6C);
|
||||
SOUNDSOURCE_VIRTUAL(0x70);
|
||||
SOUNDSOURCE_VIRTUAL(0x74);
|
||||
SOUNDSOURCE_VIRTUAL(0x78);
|
||||
SOUNDSOURCE_VIRTUAL(0x7C);
|
||||
SOUNDSOURCE_VIRTUAL(0x80);
|
||||
SOUNDSOURCE_VIRTUAL(0x84);
|
||||
SOUNDSOURCE_VIRTUAL(0x88);
|
||||
SOUNDSOURCE_VIRTUAL(0x8C);
|
||||
SOUNDSOURCE_VIRTUAL(0x90);
|
||||
SOUNDSOURCE_VIRTUAL(0x94);
|
||||
SOUNDSOURCE_VIRTUAL(0x98);
|
||||
SOUNDSOURCE_VIRTUAL(0x9C);
|
||||
SOUNDSOURCE_VIRTUAL(0xA0);
|
||||
SOUNDSOURCE_VIRTUAL(0xA4);
|
||||
SOUNDSOURCE_VIRTUAL(0xA8);
|
||||
SOUNDSOURCE_VIRTUAL(0xAC);
|
||||
SOUNDSOURCE_VIRTUAL(0xB0);
|
||||
SOUNDSOURCE_VIRTUAL(0xB4);
|
||||
SOUNDSOURCE_VIRTUAL(0xB8);
|
||||
SOUNDSOURCE_VIRTUAL(0xBC);
|
||||
SOUNDSOURCE_VIRTUAL(0xC0);
|
||||
SOUNDSOURCE_VIRTUAL(0xC4);
|
||||
SOUNDSOURCE_VIRTUAL(0xC8);
|
||||
SOUNDSOURCE_VIRTUAL(0xCC);
|
||||
SOUNDSOURCE_VIRTUAL(0xD0);
|
||||
SOUNDSOURCE_VIRTUAL(0xD4);
|
||||
SOUNDSOURCE_VIRTUAL(0xD8);
|
||||
SOUNDSOURCE_VIRTUAL(0xDC);
|
||||
SOUNDSOURCE_VIRTUAL(0xE0);
|
||||
SOUNDSOURCE_VIRTUAL(0xE4);
|
||||
SOUNDSOURCE_VIRTUAL(0xE8);
|
||||
SOUNDSOURCE_VIRTUAL(0xEC);
|
||||
SOUNDSOURCE_VIRTUAL(0xF0);
|
||||
SOUNDSOURCE_VIRTUAL(0xF4);
|
||||
SOUNDSOURCE_VIRTUAL(0xF8);
|
||||
SOUNDSOURCE_VIRTUAL(0xFC);
|
||||
|
||||
|
||||
virtual bool isReadyMaybe(); // 0x100
|
||||
virtual bool load(void *data, const char *name); // 0x100
|
||||
virtual bool load(void *data, const char *name); // 0x104
|
||||
virtual void setFrame(f32 frame); // 0x108
|
||||
virtual void setRate(f32 frame); // 0x10C
|
||||
virtual void set_0x164(UNKWORD val); // 0x114
|
||||
|
||||
@@ -47,6 +47,9 @@ public:
|
||||
static void spawnItem(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot, u32 params, u32 arg);
|
||||
static void spawnDrop(u16 item, u32 room, const mVec3_c &pos, const mAng3_c &rot);
|
||||
static u32 checkFlag(u32 flag);
|
||||
static bool hasItem(u32 flag) {
|
||||
return checkFlag(flag);
|
||||
}
|
||||
static void setFlag(s32 id);
|
||||
|
||||
void setItemPosition(const mVec3_c &);
|
||||
|
||||
+22
-288
@@ -2,311 +2,42 @@
|
||||
#define D_A_PLAYER_H
|
||||
|
||||
#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 "d/d_player_mdl.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
#include "toBeSorted/minigame_mgr.h"
|
||||
|
||||
class dAcPy_c : public dAcObjBase_c {
|
||||
// See Below for some info
|
||||
// https://github.com/lepelog/skywardsword-tools/wiki/Player-Actor
|
||||
// See Below for some info
|
||||
// https://github.com/lepelog/skywardsword-tools/wiki/Player-Actor
|
||||
|
||||
class dAcPy_c : public daPlayerModelBase_c {
|
||||
public:
|
||||
// These Flags are named under general guesses. Very likely may need some changes
|
||||
// Correspond to mActionFlags
|
||||
enum dAcPy_FLG0 {
|
||||
FLG0_ON_FOOT = 0x80000000,
|
||||
FLG0_USE_ITEM_0 = 0x40000000,
|
||||
FLG0_USE_ITEM_1 = 0x20000000,
|
||||
FLG0_UNK_GEN_MOVE = 0x10000000,
|
||||
FLG0_ATTACK_MOVE = 0x8000000,
|
||||
FLG0_USE_ITEM_2 = 0x4000000,
|
||||
FLG0_RECOVER_ELEC = 0x2000000,
|
||||
FLG0_CRAWLING = 0x1000000,
|
||||
FLG0_TIGHT_ROPE = 0x800000,
|
||||
FLG0_SWING_ROPE = 0x400000,
|
||||
FLG0_PUSHPULL = 0x200000,
|
||||
FLG0_UNK_100000 = 0x100000,
|
||||
FLG0_UNK_80000 = 0x80000,
|
||||
FLG0_IN_WATER = 0x40000,
|
||||
FLG0_ON_LADDDER = 0x20000,
|
||||
FLG0_ON_VINES = 0x10000,
|
||||
FLG0_UNK_0x8000 = 0x8000,
|
||||
FLG0_UNK_0x4000 = 0x4000,
|
||||
FLG0_INTERATION = 0x2000,
|
||||
FLG0_BASIC_ACTION = 0x1000,
|
||||
FLG0_HANGING_ITEM = 0x800,
|
||||
FLG0_EXTERN_CONTROL = 0x400,
|
||||
FLG0_ATTACK_RELATED = 0x200,
|
||||
FLG0_UNK_0x100 = 0x100,
|
||||
FLG0_UNK_0x80 = 0x80,
|
||||
FLG0_HANGING_LEDGE = 0x40,
|
||||
FLG0_UNK_0x20 = 0x20,
|
||||
FLG0_UNK_0x10 = 0x10,
|
||||
FLG0_DAMAGED = 0x8,
|
||||
FLG0_UNK_0x4 = 0x4,
|
||||
FLG0_IN_AIR = 0x2,
|
||||
FLG0_STATIONARY = 0x1,
|
||||
|
||||
FLG0_FLY = FLG0_TIGHT_ROPE | FLG0_SWING_ROPE | FLG0_IN_WATER | FLG0_ON_LADDDER | FLG0_ON_VINES |
|
||||
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();
|
||||
|
||||
void setTransform(const mMtx_c &mtx, UNKWORD, UNKWORD, UNKWORD);
|
||||
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);
|
||||
/* vt 0x088 */ virtual void set0x439F(dAcBase_c *ac, UNKWORD);
|
||||
/* vt 0x08C */ virtual void set0x43DE();
|
||||
/* vt 0x090 */ virtual f32 vt_0x090();
|
||||
/* vt 0x094 */ virtual void relatedToUsingItem0x11();
|
||||
/* vt 0x098 */ virtual void setPosRot(const mVec3_c &pos, const mAng3_c &ang, UNKWORD, UNKWORD, UNKWORD);
|
||||
/* vt 0x09C */ virtual void isLiftingObject();
|
||||
/* vt 0x0A0 */ virtual void isThrowingOrRollingItem();
|
||||
/* vt 0x0A4 */ virtual void canThrowObject();
|
||||
/* vt 0x0A8 */ virtual void canRollObject();
|
||||
/* vt 0x0AC */ virtual void vt_0x0AC();
|
||||
/* vt 0x0B0 */ virtual void isCarryingBomb();
|
||||
/* vt 0x0B4 */ virtual void isPullingOutBomb();
|
||||
/* vt 0x0B8 */ virtual void isUsingHarp();
|
||||
/* vt 0x0BC */ virtual void isFinishedPlayingHarp();
|
||||
/* vt 0x0C0 */ virtual void isUsingWhip();
|
||||
/* vt 0x0C4 */ virtual void anotherThingWithWhip();
|
||||
/* vt 0x0C8 */ virtual void somethingWithWHip();
|
||||
/* vt 0x0CC */ virtual void isWhipOnObject();
|
||||
/* vt 0x0D0 */ virtual void tryGrabItemWithWhip();
|
||||
/* vt 0x0D4 */ virtual void someFloatWithWhip();
|
||||
/* vt 0x0D8 */ virtual void getItemFromClawshotsMaybe();
|
||||
/* vt 0x0DC */ virtual void vt_0x0DC(dAcBase_c *, mVec3_c &);
|
||||
/* vt 0x0E0 */ virtual void isUsingBomb();
|
||||
/* vt 0x0E4 */ virtual mVec3_c &getCenterTranslation() const;
|
||||
/* vt 0x0E8 */ virtual void vt_0x0E8();
|
||||
/* vt 0x0EC */ virtual void vt_0x0EC();
|
||||
/* vt 0x0F0 */ virtual void vt_0x0F0();
|
||||
/* vt 0x0F4 */ virtual void vt_0x0F4();
|
||||
/* vt 0x0F8 */ virtual void vt_0x0F8();
|
||||
/* vt 0x0FC */ virtual void vt_0x0FC();
|
||||
/* vt 0x100 */ virtual void isCrawling();
|
||||
/* vt 0x104 */ virtual void isUsingSword();
|
||||
/* vt 0x108 */ virtual void isUsingMitts();
|
||||
/* vt 0x10C */ virtual void isUsingShield();
|
||||
/* vt 0x110 */ virtual void getTargetedActor1();
|
||||
/* vt 0x114 */ virtual void somethingWithCarriedActorFlags();
|
||||
/* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor();
|
||||
/* vt 0x11C */ virtual void checkBeetleActorReferences();
|
||||
/* vt 0x120 */ virtual void getBeetleActorReferencesSize();
|
||||
/* vt 0x124 */ virtual void vt_0x124();
|
||||
/* vt 0x128 */ virtual void vt_0x128();
|
||||
/* vt 0x12C */ virtual void vt_0x12C();
|
||||
/* vt 0x130 */ virtual void isBurning();
|
||||
/* vt 0x134 */ virtual void isShocked();
|
||||
/* vt 0x138 */ virtual void isCursed();
|
||||
/* vt 0x13C */ virtual void isSmelly();
|
||||
/* vt 0x140 */ virtual void store2Floats0x4500();
|
||||
/* vt 0x144 */ virtual void setActorLinkToSomething();
|
||||
/* vt 0x148 */ virtual void applyDamageWithIFrames();
|
||||
/* vt 0x14C */ virtual void vt_0x14C();
|
||||
/* vt 0x150 */ virtual bool hasLessThanQuarterHealth(bool);
|
||||
/* vt 0x154 */ virtual void vt_0x154();
|
||||
/* vt 0x158 */ virtual void vt_0x158();
|
||||
/* vt 0x15C */ virtual void vt_0x15C();
|
||||
/* vt 0x160 */ virtual void vt_0x160();
|
||||
/* vt 0x164 */ virtual void vt_0x164();
|
||||
/* vt 0x168 */ virtual f32 getCurrentAnimFrame() const;
|
||||
/* vt 0x16C */ virtual void getFloatIfStruggling();
|
||||
/* vt 0x170 */ virtual void isSwimming();
|
||||
/* vt 0x174 */ virtual void isGustBellowsBeingBlown();
|
||||
/* vt 0x178 */ virtual void getPointedAngle();
|
||||
/* vt 0x17C */ virtual void getBellowsPosOrOtherVec3F();
|
||||
/* vt 0x180 */ virtual void setWindMillPos();
|
||||
/* vt 0x184 */ virtual void isOffeset0x435eEqual0x20();
|
||||
/* vt 0x188 */ virtual void getVec3F_Z();
|
||||
/* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx);
|
||||
/* vt 0x190 */ virtual void getSheathModelMatrix();
|
||||
/* vt 0x194 */ virtual void getSwordModelMatrix();
|
||||
/* vt 0x198 */ virtual void vt_0x198();
|
||||
/* vt 0x19C */ virtual void vt_0x19C();
|
||||
/* vt 0x1A0 */ virtual void vt_0x1A0();
|
||||
/* vt 0x1A4 */ virtual void vt_0x1A4();
|
||||
/* vt 0x1A8 */ virtual void vt_0x1A8();
|
||||
/* vt 0x1AC */ virtual void vt_0x1AC();
|
||||
/* vt 0x1B0 */ virtual bool isItemFairyFromBugnet();
|
||||
/* vt 0x1B4 */ virtual void isByte0x434eEqual7();
|
||||
/* vt 0x1B8 */ virtual void canHandleGameOver();
|
||||
/* vt 0x1BC */ virtual void vt_0x1BC();
|
||||
/* vt 0x1C0 */ virtual void *vt_0x1C0() const;
|
||||
/* vt 0x1C4 */ virtual void getActorInActorRef1();
|
||||
/* vt 0x1C8 */ virtual void doesActorRef1Exist();
|
||||
/* vt 0x1CC */ virtual void unlinkActorRef1();
|
||||
/* vt 0x1D0 */ virtual void ifHasHealthAndSomethingElse();
|
||||
/* vt 0x1D4 */ virtual void isChargingWeapon();
|
||||
/* vt 0x1D8 */ virtual void isWeaponChargedFully();
|
||||
/* vt 0x1DC */ virtual void didShootBow();
|
||||
/* vt 0x1E0 */ virtual void vt_0x1E0();
|
||||
/* vt 0x1E4 */ virtual void checkRefArrayAtIndex();
|
||||
/* vt 0x1E8 */ virtual void sizeOfActorRefs_16();
|
||||
/* vt 0x1EC */ virtual void vt_0x1EC();
|
||||
/* vt 0x1F0 */ virtual void vt_0x1F0();
|
||||
/* vt 0x1F4 */ virtual void didDiveSky_and_other();
|
||||
/* vt 0x1F8 */ virtual void didDiveSky_andNotOther();
|
||||
/* vt 0x1FC */ virtual void isLandingFromSailcloth();
|
||||
/* vt 0x200 */ virtual void isBeingPulledFromRightClawshot();
|
||||
/* vt 0x204 */ virtual void isBeingPulledByLeftClawshot();
|
||||
/* vt 0x208 */ virtual void isDashing();
|
||||
/* vt 0x20C */ virtual void isSliding();
|
||||
/* vt 0x210 */ virtual void isSlding2();
|
||||
/* vt 0x214 */ virtual void vt_0x214();
|
||||
/* vt 0x218 */ virtual void isinMpPosePower();
|
||||
/* vt 0x21C */ virtual void isPushingBlock();
|
||||
/* vt 0x220 */ virtual void getRidingActor();
|
||||
/* vt 0x224 */ virtual bool isRidingBall() const;
|
||||
/* vt 0x228 */ virtual dAcObjBase_c *getRidingMinecartActor() const;
|
||||
/* vt 0x22C */ virtual void getTurnableSwitch();
|
||||
/* vt 0x230 */ virtual void vt_0x230();
|
||||
/* vt 0x234 */ virtual void vt_0x234();
|
||||
/* vt 0x238 */ virtual void setVecIfInFreeFall();
|
||||
/* vt 0x23C */ virtual void setActorRef10();
|
||||
/* vt 0x240 */ virtual void vt_0x240();
|
||||
/* vt 0x244 */ virtual void vt_0x244();
|
||||
/* vt 0x248 */ virtual void vt_0x248();
|
||||
/* vt 0x24C */ virtual void vt_0x24C();
|
||||
/* vt 0x250 */ virtual void vt_0x250();
|
||||
/* vt 0x254 */ virtual void isAttackingUnderground();
|
||||
/* vt 0x258 */ virtual mAng vt_0x258() const;
|
||||
/* vt 0x25C */ virtual void vt_0x25C();
|
||||
/* vt 0x260 */ virtual f32 vt_0x260() const;
|
||||
/* vt 0x264 */ virtual void getGroosenatorIfIn();
|
||||
/* vt 0x268 */ virtual void setActorRef11();
|
||||
/* vt 0x26C */ virtual void doesGameOver();
|
||||
/* vt 0x270 */ virtual void triggerExitRelated();
|
||||
/* vt 0x274 */ virtual void vt_0x274();
|
||||
/* vt 0x278 */ virtual void vt_0x278();
|
||||
/* vt 0x27C */ virtual void getSwordPos();
|
||||
/* vt 0x280 */ virtual void vt_0x280();
|
||||
/* vt 0x284 */ virtual bool isUsingBugnet() const;
|
||||
/* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const;
|
||||
/* vt 0x28C */ virtual bool isUsingBugnet1();
|
||||
/* vt 0x290 */ virtual void bugNetCollectTreasure(u32 itemId);
|
||||
/* vt 0x294 */ virtual void somethingSwitchDials();
|
||||
/* vt 0x298 */ virtual void vt_0x298();
|
||||
/* vt 0x29C */ virtual void getDieLargeDamageDir();
|
||||
/* vt 0x2A0 */ virtual void doGameOver();
|
||||
/* vt 0x2A4 */ virtual void isRunningUpWall();
|
||||
/* vt 0x2A8 */ virtual void lookTowardItem();
|
||||
/* vt 0x2AC */ virtual void vt_0x2AC();
|
||||
/* vt 0x2B0 */ virtual void vt_0x2B0();
|
||||
/* vt 0x2B4 */ virtual void triggerMoveEventMaybe();
|
||||
/* vt 0x2B8 */ virtual void setActorRef9();
|
||||
/* vt 0x2BC */ virtual void unlinkActorRef9();
|
||||
/* vt 0x2C0 */ virtual void vt_0x2C0();
|
||||
/* vt 0x2C4 */ virtual void vt_0x2C4();
|
||||
/* vt 0x2C8 */ virtual bool isRecovering() const;
|
||||
/* vt 0x2CC */ virtual void isDrinkingPotion();
|
||||
/* vt 0x2D0 */ virtual void isHealingShield();
|
||||
/* vt 0x2D4 */ virtual void isBottleOut();
|
||||
/* vt 0x2D8 */ virtual void isUsingBottle();
|
||||
/* vt 0x2DC */ virtual void getShieldRegenProgressMaybe();
|
||||
/* vt 0x2E0 */ virtual void vt_0x2E0();
|
||||
/* vt 0x2E4 */ virtual void someDivingHrabbingStuff();
|
||||
/* vt 0x2E8 */ virtual void vt_0x2E8();
|
||||
/* vt 0x2EC */ virtual void isOnClawTargetMaybe();
|
||||
/* vt 0x2F0 */ virtual void isMPPose();
|
||||
/* vt 0x2F4 */ virtual void isOnTightRope();
|
||||
/* vt 0x2F8 */ virtual void isOnVines();
|
||||
/* vt 0x2FC */ virtual void alwaysRet0();
|
||||
/* vt 0x300 */ virtual void canBlockAttack();
|
||||
/* vt 0x304 */ virtual void vt_0x304();
|
||||
/* vt 0x308 */ virtual void vt_0x308();
|
||||
/* vt 0x30C */ virtual void vt_0x30C();
|
||||
/* overrides omitted */
|
||||
/* vt 0x310 */ virtual void vt_0x310();
|
||||
/* vt 0x314 */ virtual void vt_0x314();
|
||||
/* vt 0x318 */ virtual void vt_0x318();
|
||||
|
||||
/* 0x330 */ u8 unk_0x330[0x339 - 0x330];
|
||||
/* 0x339 */ u8 mRidingActorType;
|
||||
/* 0x33A */ u8 unk_0x33A[0x340 - 0x33A];
|
||||
/* 0x340 */ u32 someFlags_0x340;
|
||||
/* 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;
|
||||
/* 0x360 */ UNKWORD field_0x360;
|
||||
/* 0x364 */ u32 mActionFlags;
|
||||
/* 0x368 */ u32 mActionFlagsCont;
|
||||
/* 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];
|
||||
protected:
|
||||
/* 0x137C */ u8 _0x137C[0x4564 - 0x137C];
|
||||
/* 0x4564 */ f32 field_0x4564;
|
||||
|
||||
public:
|
||||
f32 getField_0x4564() const {
|
||||
return field_0x4564;
|
||||
}
|
||||
|
||||
f32 getAnmMatClrFrame() const {
|
||||
return mAnmMatClr.getFrame(0);
|
||||
f32 getSwordAnmFrame() const {
|
||||
return mSwordAnmMatClr.getFrame(0);
|
||||
}
|
||||
|
||||
inline bool checkFlags0x340(u32 mask) const {
|
||||
return (someFlags_0x340 & mask) != 0;
|
||||
}
|
||||
|
||||
inline bool checkFlags0x350(u32 mask) const {
|
||||
return (someFlags_0x350 & mask) != 0;
|
||||
}
|
||||
|
||||
bool CheckPlayerFly() const {
|
||||
return mActionFlags & FLG0_FLY;
|
||||
}
|
||||
|
||||
int getCurrentAction() const {
|
||||
return mCurrentAction;
|
||||
}
|
||||
|
||||
bool checkCurrentAction(int action) const {
|
||||
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;
|
||||
}
|
||||
inline bool checkActionFlagsCont(u32 mask) const {
|
||||
return (mActionFlagsCont & mask) != 0;
|
||||
}
|
||||
|
||||
inline u8 getRidingActorType() const {
|
||||
return mRidingActorType;
|
||||
nw4r::g3d::ResFile getSwordResFile() const {
|
||||
return mSwordRes;
|
||||
}
|
||||
|
||||
inline bool hasvt_0x1C0() const {
|
||||
@@ -321,8 +52,6 @@ public:
|
||||
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;
|
||||
}
|
||||
@@ -331,6 +60,8 @@ public:
|
||||
return LINK2;
|
||||
}
|
||||
|
||||
void onShieldUpdate();
|
||||
|
||||
static dAcPy_c *LINK;
|
||||
static dAcPy_c *LINK2;
|
||||
|
||||
@@ -338,15 +69,18 @@ public:
|
||||
static s32 getCurrentSlingshotType();
|
||||
static s32 getCurrentBeetleType();
|
||||
static s32 getCurrentBugNetType();
|
||||
static s32 getCurrentlyEquippedShieldType();
|
||||
|
||||
static bool isInBambooCuttingMinigame();
|
||||
|
||||
static bool isInBambooCuttingMinigame() {
|
||||
return MinigameManager::isInMinigameState(MinigameManager::BAMBOO_CUTTING);
|
||||
}
|
||||
static bool isItemRestrictedByBokoBase(ITEM_ID item);
|
||||
|
||||
static u32 getCurrentHealthCapacity();
|
||||
|
||||
bool canDowseProbably() const;
|
||||
|
||||
mAng fn_8023B520() const;
|
||||
mAng fn_8023B590() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -38,6 +38,10 @@ public:
|
||||
// This is a remnant of cCcS, which dCcS::Ct calls. Idk the correct layout
|
||||
void Ct_cCcS();
|
||||
|
||||
dCcMassS_Mng &GetMassMng() {
|
||||
return mMassMng;
|
||||
}
|
||||
|
||||
void Ct();
|
||||
void Dt();
|
||||
|
||||
|
||||
@@ -0,0 +1,640 @@
|
||||
#ifndef D_A_PLAYER_ACT_H
|
||||
#define D_A_PLAYER_ACT_H
|
||||
|
||||
#include "d/d_player_base.h"
|
||||
|
||||
class dAcEnBase_c;
|
||||
|
||||
// Does this one have a vtable?
|
||||
// Name unknown
|
||||
class daPlayerActBase_c : public daPlBase_c {
|
||||
public:
|
||||
daPlayerActBase_c() : field_0x334(120.0f), mCurrentAction(187) {}
|
||||
virtual ~daPlayerActBase_c() {}
|
||||
|
||||
int preExecute() override;
|
||||
void postExecute(MAIN_STATE_e state) override;
|
||||
|
||||
/* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD) {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x084 */ virtual UNKWORD vt_0x084(dAcBase_c *ac, UNKWORD) {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x088 */ virtual void set0x439F(dAcBase_c *ac, UNKWORD) {}
|
||||
/* vt 0x08C */ virtual void set0x43DE() {}
|
||||
/* vt 0x090 */ virtual f32 vt_0x090() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x094 */ virtual void relatedToUsingItem0x11() {
|
||||
// TODO obvious hack, not sure
|
||||
delete (daPlBase_c *)0;
|
||||
}
|
||||
/* vt 0x098 */ virtual void setPosRot(const mVec3_c *pos, const mAng3_c *ang, bool force, UNKWORD, UNKWORD);
|
||||
/* vt 0x09C */ virtual bool isLiftingObject() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0A0 */ virtual bool isThrowingOrRollingItem() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0A4 */ virtual bool canThrowObject() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0A8 */ virtual bool canRollObject() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0AC */ virtual UNKWORD vt_0x0AC() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x0B0 */ virtual bool isCarryingBomb() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0B4 */ virtual bool isPullingOutBomb() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0B8 */ virtual bool isUsingHarp() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0BC */ virtual void finishPlayingHarp() {}
|
||||
/* vt 0x0C0 */ virtual bool isUsingWhip() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0C4 */ virtual bool anotherThingWithWhip() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0C8 */ virtual bool somethingWithWHip() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0CC */ virtual bool isWhipOnObject() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0D0 */ virtual bool tryGrabItemWithWhip() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0D4 */ virtual f32 someFloatWithWhip() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x0D8 */ virtual UNKWORD getItemFromClawshotsMaybe() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x0DC */ virtual UNKWORD vt_0x0DC(dAcBase_c *, mVec3_c &) {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x0E0 */ virtual bool isUsingBomb() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x0E4 */ virtual const mVec3_c &getCenterTranslation() const {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return mVec3_c::Zero;
|
||||
}
|
||||
/* vt 0x0E8 */ virtual const mVec3_c &vt_0x0E8() const {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return mVec3_c::Zero;
|
||||
}
|
||||
/* vt 0x0EC */ virtual const mVec3_c &vt_0x0EC() const {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return mVec3_c::Zero;
|
||||
}
|
||||
/* vt 0x0F0 */ virtual const mVec3_c &vt_0x0F0() const {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return mVec3_c::Zero;
|
||||
}
|
||||
/* vt 0x0F4 */ virtual const mVec3_c &vt_0x0F4() const {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return mVec3_c::Zero;
|
||||
}
|
||||
/* vt 0x0F8 */ virtual mAng vt_0x0F8() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x0FC */ virtual mAng vt_0x0FC() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x100 */ virtual bool isCrawling() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x104 */ virtual bool isUsingSword() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x108 */ virtual bool isUsingMitts() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x10C */ virtual bool isUsingShield() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x110 */ virtual dAcEnBase_c *getTargetedActor1() const {
|
||||
return nullptr;
|
||||
}
|
||||
/* vt 0x114 */ virtual void somethingWithCarriedActorFlags() {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
}
|
||||
/* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor() {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return nullptr;
|
||||
}
|
||||
/* vt 0x11C */ virtual UNKWORD checkBeetleActorReferences() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x120 */ virtual UNKWORD getBeetleActorReferencesSize() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x124 */ virtual UNKWORD vt_0x124() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x128 */ virtual UNKWORD vt_0x128() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x12C */ virtual UNKWORD vt_0x12C() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x130 */ virtual bool isBurning() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x134 */ virtual bool isShocked() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x138 */ virtual bool isCursed() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x13C */ virtual bool isSmelly() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x140 */ virtual void store2Floats0x4500() {}
|
||||
/* vt 0x144 */ virtual bool setActorLinkToSomething() {
|
||||
return true;
|
||||
}
|
||||
/* vt 0x148 */ virtual void applyDamageWithIFrames() {}
|
||||
/* vt 0x14C */ virtual void vt_0x14C() {}
|
||||
/* vt 0x150 */ virtual bool hasLessThanQuarterHealth(bool) {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x154 */ virtual UNKWORD vt_0x154() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x158 */ virtual UNKWORD vt_0x158() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x15C */ virtual UNKWORD vt_0x15C() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x160 */ virtual f32 getYPos() {
|
||||
return position.y;
|
||||
}
|
||||
/* vt 0x164 */ virtual f32 vt_0x164() {
|
||||
return position.y;
|
||||
}
|
||||
/* vt 0x168 */ virtual f32 getCurrentAnimFrame() const {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x16C */ virtual f32 getFloatIfStruggling() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x170 */ virtual bool isSwimming() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x174 */ virtual bool isGustBellowsBeingBlown() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x178 */ virtual const mAng3_c &getPointedAngle() const {
|
||||
return rotation;
|
||||
}
|
||||
/* vt 0x17C */ virtual const mVec3_c &getBellowsPosOrOtherVec3F() const {
|
||||
return position;
|
||||
}
|
||||
/* vt 0x180 */ virtual void setWindMillPos() {}
|
||||
/* vt 0x184 */ virtual bool isOffeset0x435eEqual0x20() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x188 */ virtual const mVec3_c &getVec3F_Z() const {
|
||||
return mVec3_c::Ez;
|
||||
}
|
||||
/* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx) {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
}
|
||||
/* vt 0x190 */ virtual void getSheathModelMatrix(mMtx_c *out_mtx) {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
}
|
||||
/* vt 0x194 */ virtual void getSwordModelMatrix(mMtx_c *out_mtx) {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
}
|
||||
/* vt 0x198 */ virtual mAng vt_0x198() {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x19C */ virtual mAng vt_0x19C() {
|
||||
// unused; overridden by daPlayerModelBase_c
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1A0 */ virtual f32 vt_0x1A0() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x1A4 */ virtual const mVec3_c &vt_0x1A4() {
|
||||
return poscopy3;
|
||||
}
|
||||
/* vt 0x1A8 */ virtual f32 vt_0x1A8() {
|
||||
return yoffset;
|
||||
}
|
||||
/* vt 0x1AC */ virtual f32 vt_0x1AC() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x1B0 */ virtual bool isItemFairyFromBugnet() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x1B4 */ virtual bool isByte0x434eEqual7() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x1B8 */ virtual void canHandleGameOver() {}
|
||||
/* vt 0x1BC */ virtual UNKWORD vt_0x1BC() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1C0 */ virtual void *vt_0x1C0() const {
|
||||
return nullptr;
|
||||
}
|
||||
/* vt 0x1C4 */ virtual UNKWORD getActorInActorRef1() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1C8 */ virtual bool doesActorRef1Exist() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x1CC */ virtual void unlinkActorRef1() {}
|
||||
/* vt 0x1D0 */ virtual bool ifHasHealthAndSomethingElse() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x1D4 */ virtual bool isChargingWeapon() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x1D8 */ virtual bool isWeaponChargedFully() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x1DC */ virtual bool didShootBow() {
|
||||
return true;
|
||||
}
|
||||
/* vt 0x1E0 */ virtual UNKWORD vt_0x1E0() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1E4 */ virtual dAcObjBase_c *checkRefArrayAtIndex() {
|
||||
return nullptr;
|
||||
}
|
||||
/* vt 0x1E8 */ virtual s32 sizeOfActorRefs_16() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1EC */ virtual bool vt_0x1EC() {
|
||||
return true;
|
||||
}
|
||||
/* vt 0x1F0 */ virtual UNKWORD vt_0x1F0() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1F4 */ virtual UNKWORD didDiveSky_and_other() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1F8 */ virtual UNKWORD didDiveSky_andNotOther() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x1FC */ virtual UNKWORD isLandingFromSailcloth() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x200 */ virtual bool isBeingPulledFromRightClawshot() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x204 */ virtual bool isBeingPulledByLeftClawshot() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x208 */ virtual bool isDashing() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x20C */ virtual bool isSliding() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x210 */ virtual bool isSlding2() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x214 */ virtual UNKWORD vt_0x214() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x218 */ virtual bool isinMpPosePower() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x21C */ virtual bool isPushingBlock() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x220 */ virtual dAcObjBase_c *getRidingActor() {
|
||||
return nullptr;
|
||||
}
|
||||
/* vt 0x224 */ virtual bool isRidingBall() const {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x228 */ virtual dAcObjBase_c *getRidingMinecartActor() const {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x22C */ virtual UNKWORD getTurnableSwitch() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x230 */ virtual UNKWORD vt_0x230() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x234 */ virtual UNKWORD vt_0x234() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x238 */ virtual void setVecIfInFreeFall() {}
|
||||
/* vt 0x23C */ virtual void setActorRef10() {}
|
||||
/* vt 0x240 */ virtual f32 vt_0x240() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* vt 0x244 */ virtual UNKWORD vt_0x244() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x248 */ virtual UNKWORD vt_0x248() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x24C */ virtual UNKWORD vt_0x24C() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x250 */ virtual f32 vt_0x250() {
|
||||
return 1.0f;
|
||||
}
|
||||
/* vt 0x254 */ virtual bool isAttackingUnderground() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x258 */ virtual mAng vt_0x258() const {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x25C */ virtual UNKWORD vt_0x25C() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x260 */ virtual f32 vt_0x260() const {
|
||||
return 1.0f;
|
||||
}
|
||||
/* vt 0x264 */ virtual UNKWORD getGroosenatorIfIn() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x268 */ virtual void setActorRef11() {}
|
||||
/* vt 0x26C */ virtual bool doesGameOver() {
|
||||
return true;
|
||||
}
|
||||
/* vt 0x270 */ virtual void triggerExitRelated() {}
|
||||
/* vt 0x274 */ virtual mAng vt_0x274() {
|
||||
return rotation.y;
|
||||
}
|
||||
/* vt 0x278 */ virtual const mVec3_c &vt_0x278() const {
|
||||
return position;
|
||||
}
|
||||
/* vt 0x27C */ virtual const mVec3_c &getSwordPos() const {
|
||||
return position;
|
||||
}
|
||||
/* vt 0x280 */ virtual UNKWORD vt_0x280() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x284 */ virtual bool isUsingBugnet() const {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const {
|
||||
return position;
|
||||
}
|
||||
/* vt 0x28C */ virtual bool isUsingBugnet1() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x290 */ virtual UNKWORD bugNetCollectTreasure(u32 itemId) {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x294 */ virtual mAng somethingSwitchDials() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x298 */ virtual UNKWORD vt_0x298() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x29C */ virtual UNKWORD getDieLargeDamageDir() {
|
||||
return 0;
|
||||
}
|
||||
/* vt 0x2A0 */ virtual void doGameOver() {}
|
||||
/* vt 0x2A4 */ virtual bool isRunningUpWall() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2A8 */ virtual void lookTowardItem() {}
|
||||
/* vt 0x2AC */ virtual void vt_0x2AC() {}
|
||||
/* vt 0x2B0 */ virtual void vt_0x2B0() {}
|
||||
/* vt 0x2B4 */ virtual void triggerMoveEventMaybe() {}
|
||||
/* vt 0x2B8 */ virtual void setActorRef9() {}
|
||||
/* vt 0x2BC */ virtual void unlinkActorRef9() {}
|
||||
/* vt 0x2C0 */ virtual bool vt_0x2C0() {
|
||||
return true;
|
||||
}
|
||||
/* vt 0x2C4 */ virtual bool vt_0x2C4() {
|
||||
return true;
|
||||
}
|
||||
/* vt 0x2C8 */ virtual bool isRecovering() const {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2CC */ virtual bool isDrinkingPotion() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2D0 */ virtual bool isHealingShield() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2D4 */ virtual bool isBottleOut() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2D8 */ virtual bool isUsingBottle() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2DC */ virtual f32 getShieldRegenProgressMaybe() {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
enum dAcPy_RidingActor {
|
||||
RIDING_NONE = 0,
|
||||
RIDING_TRUCK_MINECART = 1,
|
||||
RIDING_LOFTWING = 2,
|
||||
RIDING_BOAT = 3,
|
||||
};
|
||||
|
||||
enum PlayerAttackDirection_e {
|
||||
ATTACK_NONE = 0,
|
||||
ATTACK_SWING_LEFT = 1,
|
||||
ATTACK_SWING_RIGHT = 2,
|
||||
ATTACK_SWING_DOWN = 3,
|
||||
ATTACK_SWING_UP = 4,
|
||||
ATTACK_STAB = 5,
|
||||
ATTACK_SPIN_RIGHT = 6,
|
||||
ATTACK_SPIN_LEFT = 7,
|
||||
ATTACK_SPIN_DOWN = 8,
|
||||
ATTACK_SPIN_UP = 9,
|
||||
ATTACK_JUMP_SLASH = 10,
|
||||
ATTACK_FINAL_BLOW = 11,
|
||||
};
|
||||
|
||||
enum ModelUpdateFlags_e {
|
||||
UPDATE_MODEL_SWORD = 0x20,
|
||||
UPDATE_MODEL_SHIELD = 0x40,
|
||||
};
|
||||
|
||||
enum SwordAndMoreStates_e {
|
||||
NO_SHIETH = (1 << 0),
|
||||
POUCH = (1 << 1),
|
||||
SWORD_AWAY = (1 << 2),
|
||||
FLASH_RED = (1 << 4),
|
||||
DEPLETE_STAMINA = (1 << 5),
|
||||
SPRINTING = (1 << 6),
|
||||
B_WHEEL_OPEN = (1 << 7),
|
||||
POUCH_OPEN = (1 << 8),
|
||||
TRYING_TO_USE_STAMINA_NOT_ABLE = (1 << 9),
|
||||
PUTTING_AWAY_SAILCLOTH = (1 << 10),
|
||||
GRAB_LEDGE_FROM_UNDER = (1 << 13),
|
||||
HOLDING_A_NO_STAMINA_DROP = (1 << 14),
|
||||
FIRST_PERSON = (1 << 18),
|
||||
SKYWARD_STRIKE_ACTIVE = (1 << 20),
|
||||
LIGHTNING_STRIKE_ACTIVE = (1 << 22),
|
||||
C_MENU_OPEN = (1 << 23),
|
||||
SHIELD_OUT = (1 << 27),
|
||||
HOLDING_TARGET = (1 << 28),
|
||||
ITEM_NEAR_LINK = (1 << 29),
|
||||
USING_ITEM = (1 << 31),
|
||||
};
|
||||
|
||||
// These Flags are named under general guesses. Very likely may need some changes
|
||||
// Correspond to mActionFlags
|
||||
enum dAcPy_FLG0 {
|
||||
FLG0_ON_FOOT = 0x80000000,
|
||||
FLG0_USE_ITEM_0 = 0x40000000,
|
||||
FLG0_USE_ITEM_1 = 0x20000000,
|
||||
FLG0_UNK_GEN_MOVE = 0x10000000,
|
||||
FLG0_ATTACK_MOVE = 0x8000000,
|
||||
FLG0_USE_ITEM_2 = 0x4000000,
|
||||
FLG0_RECOVER_ELEC = 0x2000000,
|
||||
FLG0_CRAWLING = 0x1000000,
|
||||
FLG0_TIGHT_ROPE = 0x800000,
|
||||
FLG0_SWING_ROPE = 0x400000,
|
||||
FLG0_PUSHPULL = 0x200000,
|
||||
FLG0_UNK_100000 = 0x100000,
|
||||
FLG0_UNK_80000 = 0x80000,
|
||||
FLG0_IN_WATER = 0x40000,
|
||||
FLG0_ON_LADDDER = 0x20000,
|
||||
FLG0_ON_VINES = 0x10000,
|
||||
FLG0_UNK_0x8000 = 0x8000,
|
||||
FLG0_UNK_0x4000 = 0x4000,
|
||||
FLG0_INTERATION = 0x2000,
|
||||
FLG0_BASIC_ACTION = 0x1000,
|
||||
FLG0_HANGING_ITEM = 0x800,
|
||||
FLG0_EXTERN_CONTROL = 0x400,
|
||||
FLG0_ATTACK_RELATED = 0x200,
|
||||
FLG0_UNK_0x100 = 0x100,
|
||||
FLG0_UNK_0x80 = 0x80,
|
||||
FLG0_HANGING_LEDGE = 0x40,
|
||||
FLG0_UNK_0x20 = 0x20,
|
||||
FLG0_UNK_0x10 = 0x10,
|
||||
FLG0_DAMAGED = 0x8,
|
||||
FLG0_UNK_0x4 = 0x4,
|
||||
FLG0_IN_AIR = 0x2,
|
||||
FLG0_STATIONARY = 0x1,
|
||||
|
||||
FLG0_FLY = FLG0_TIGHT_ROPE | FLG0_SWING_ROPE | FLG0_IN_WATER | FLG0_ON_LADDDER | FLG0_ON_VINES |
|
||||
FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR,
|
||||
};
|
||||
|
||||
inline bool checkFlags0x340(u32 mask) const {
|
||||
return (someFlags_0x340 & mask) != 0;
|
||||
}
|
||||
|
||||
inline void offFlags_0x340(u32 mask) {
|
||||
someFlags_0x340 &= ~mask;
|
||||
}
|
||||
|
||||
inline bool checkFlags0x350(u32 mask) const {
|
||||
return (someFlags_0x350 & mask) != 0;
|
||||
}
|
||||
|
||||
inline void onFlags_0x360(u32 mask) {
|
||||
field_0x360 |= mask;
|
||||
}
|
||||
|
||||
inline void onForceOrPreventActionFlags(u32 mask) {
|
||||
mForceOrPreventActionFlags |= mask;
|
||||
}
|
||||
|
||||
inline void onFaceUpdateFlags(u32 mask) {
|
||||
mFaceUpdateFlags |= mask;
|
||||
}
|
||||
|
||||
inline void offFaceUpdateFlags(u32 mask) {
|
||||
mFaceUpdateFlags &= ~mask;
|
||||
}
|
||||
|
||||
inline bool checkFaceUpdateFlags(u32 mask) const {
|
||||
return (mFaceUpdateFlags & mask) != 0;
|
||||
}
|
||||
|
||||
bool CheckPlayerFly() const {
|
||||
return mActionFlags & FLG0_FLY;
|
||||
}
|
||||
|
||||
int getCurrentAction() const {
|
||||
return mCurrentAction;
|
||||
}
|
||||
|
||||
bool checkCurrentAction(int action) const {
|
||||
return mCurrentAction == action;
|
||||
}
|
||||
|
||||
bool isSittingOrUnk0xAE() const {
|
||||
return mCurrentAction == 0xAD || mCurrentAction == 0xAE;
|
||||
}
|
||||
|
||||
inline bool checkActionFlags(u32 mask) const {
|
||||
return (mActionFlags & mask) != 0;
|
||||
}
|
||||
inline bool checkActionFlagsCont(u32 mask) const {
|
||||
return (mActionFlagsCont & mask) != 0;
|
||||
}
|
||||
|
||||
inline u8 getRidingActorType() const {
|
||||
return mRidingActorType;
|
||||
}
|
||||
|
||||
static bool isInEvent();
|
||||
bool isAttackingLeft() const;
|
||||
bool isAttackingRight() const;
|
||||
bool isAttackingDown() const;
|
||||
bool isAttackingUp() const;
|
||||
bool isAttackingStab() const;
|
||||
bool isAttackingSpinHorizontal() const;
|
||||
bool isAttackingSpinVertical() const;
|
||||
void setBonkRelatedAnimFlag(bool b);
|
||||
void setPosYRot(const mVec3_c &pos, mAng rot, bool force, UNKWORD, UNKWORD);
|
||||
void setTransform(const mMtx_c &mtx, bool force, UNKWORD, UNKWORD);
|
||||
bool someTargetedActorCheck() const;
|
||||
static mAng fn_8005BA90();
|
||||
static mAng fn_8005BAA0();
|
||||
static void updateCurrentSword();
|
||||
|
||||
static s32 getCurrentSwordType();
|
||||
static const char *getSwordName(s32);
|
||||
static s32 getCurrentlyEquippedShieldType();
|
||||
|
||||
static const mColor &getEarringsColor();
|
||||
|
||||
static mVec3_c sPos1;
|
||||
static mVec3_c sPos2;
|
||||
static mAng sRot1;
|
||||
static mAng sRot2;
|
||||
static const f32 sPushRelatedConstant;
|
||||
static u8 sCurrentSword;
|
||||
|
||||
protected:
|
||||
/* 0x330 */ u8 unk_0x330[0x334 - 0x330];
|
||||
/* 0x334 */ f32 field_0x334;
|
||||
/* 0x338 */ u8 mAttackDirection;
|
||||
/* 0x339 */ u8 mRidingActorType;
|
||||
/* 0x33A */ u8 unk_0x33A[0x340 - 0x33A];
|
||||
/* 0x340 */ u32 someFlags_0x340;
|
||||
/* 0x344 */ u32 mFaceUpdateFlags;
|
||||
/* 0x348 */ u32 mSwordAndMoreStates;
|
||||
/* 0x34C */ u32 mModelUpdateFlags;
|
||||
/* 0x350 */ u32 someFlags_0x350;
|
||||
/* 0x354 */ u32 someFlags_0x354;
|
||||
/* 0x358 */ u32 someFlags_0x358;
|
||||
/* 0x35C */ u32 mForceOrPreventActionFlags;
|
||||
/* 0x360 */ u32 field_0x360;
|
||||
/* 0x364 */ u32 mActionFlags;
|
||||
/* 0x368 */ u32 mActionFlagsCont;
|
||||
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef D_A_PLAYER_BASE_H
|
||||
#define D_A_PLAYER_BASE_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
|
||||
/*
|
||||
* The inheritance chain goes something like:
|
||||
* dAcObjBase_c straightfoward
|
||||
* v
|
||||
* daPlBase_c only has a dtor, vtable (80533128) pooled into d_a_player at the end
|
||||
* v
|
||||
* daPlayerActBase_c has a few strong and many weak functions, vtable stripped
|
||||
* v
|
||||
* daPlayerModelBase_c has the actual implementation of many functions, vtable at 8050da00, size 0x310
|
||||
* v
|
||||
* dAcPy_c "ActorLink", vtable at 80532cb0
|
||||
*/
|
||||
|
||||
// Vtable at 80533128, no differences to dAcObjBase_c?
|
||||
// Name unknown, though this name exists in NSMBW
|
||||
class daPlBase_c : public dAcObjBase_c {
|
||||
public:
|
||||
virtual ~daPlBase_c() {}
|
||||
};
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,7 @@ s32 getPouchSlotCount(bool unk);
|
||||
bool isItemExtraAmmo(s32 item);
|
||||
bool isItemMedal(s32 item);
|
||||
bool hasAnyShields();
|
||||
bool isItemShield(s32 item);
|
||||
|
||||
#define POUCH_SLOT_NONE 8
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m_dvd.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "sized_string.h"
|
||||
|
||||
class ArcCallbackHandlerBase {
|
||||
@@ -23,6 +24,8 @@ public:
|
||||
static ArcCallbackHandler sInstance;
|
||||
};
|
||||
|
||||
void BindSystemModelsAndLighting(nw4r::g3d::ResFile);
|
||||
|
||||
// TODO: loading status could be an enum (-2/-1/0/+1)
|
||||
|
||||
// Ghidra: ArcManagerEntry
|
||||
|
||||
@@ -136,6 +136,7 @@ public:
|
||||
STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Stanby); // sic
|
||||
STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Action);
|
||||
|
||||
static bool isHeroMode();
|
||||
static bool isCurrentStage(const char *stageName);
|
||||
static bool isStageSkyloftLayer20();
|
||||
static bool isInCredits();
|
||||
|
||||
@@ -446,6 +446,18 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
static void setShieldMaxDurability(f32 durability) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->mMain.mShield.setMaxDurability(durability);
|
||||
}
|
||||
}
|
||||
|
||||
static void setShieldId(s32 type) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->mMain.mShield.setShieldId(type);
|
||||
}
|
||||
}
|
||||
|
||||
static f32 getShieldMaxDurability() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mShield.getMaxDurability();
|
||||
|
||||
@@ -47,6 +47,14 @@ public:
|
||||
return mMaxDurability;
|
||||
}
|
||||
|
||||
void setMaxDurability(f32 durability) {
|
||||
mMaxDurability = durability;
|
||||
}
|
||||
|
||||
void setShieldId(s32 id) {
|
||||
mShieldId = id;
|
||||
}
|
||||
|
||||
private:
|
||||
s32 getLytFrameForShield(s32) const;
|
||||
void setLevel(f32 level);
|
||||
@@ -77,7 +85,7 @@ private:
|
||||
/* 0x30C */ u8 field_0x30C;
|
||||
/* 0x30D */ u8 field_0x30D;
|
||||
/* 0x30E */ u8 field_0x30E;
|
||||
/* 0x310 */ s32 mShieldType;
|
||||
/* 0x310 */ s32 mShieldId;
|
||||
/* 0x314 */ s32 mSavedShieldType;
|
||||
/* 0x318 */ s32 field_0x318;
|
||||
/* 0x31C */ u8 field_0x31C;
|
||||
|
||||
@@ -21,6 +21,11 @@ public:
|
||||
inline MEMAllocator *getHandle() {
|
||||
return static_cast<MEMAllocator *>(this);
|
||||
}
|
||||
|
||||
Heap *getHeap() {
|
||||
return mHeap;
|
||||
}
|
||||
|
||||
/* 0x14 */ Heap *mHeap;
|
||||
/* 0x18 */ s32 align;
|
||||
};
|
||||
|
||||
@@ -5,13 +5,14 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "egg/core/eggDisposer.h"
|
||||
#include "egg/core/eggThread.h"
|
||||
#include "egg/egg_types.h"
|
||||
#include "egg/prim/eggBitFlag.h"
|
||||
|
||||
#include "nw4r/ut.h"
|
||||
|
||||
#include "rvl/MEM.h"
|
||||
#include "rvl/OS.h"
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
// class ExpHeap;
|
||||
@@ -79,6 +80,20 @@ public:
|
||||
return this;
|
||||
}
|
||||
|
||||
static inline EGG::FrmHeap *toFrmHeap(EGG::Heap *heap) {
|
||||
if (heap != nullptr && heap->getHeapKind() == HEAP_KIND_FRAME) {
|
||||
return (FrmHeap *)heap;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static inline EGG::ExpHeap *toExpHeap(EGG::Heap *heap) {
|
||||
if (heap != nullptr && heap->getHeapKind() == HEAP_KIND_EXPANDED) {
|
||||
return (ExpHeap *)heap;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
public:
|
||||
// members
|
||||
/* 0x10 */ MEMiHeapHead *mHeapHandle;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef M3D_M_ANMCHR_H
|
||||
#define M3D_M_ANMCHR_H
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m3d/m_bmdl.h"
|
||||
#include "m/m3d/m_fanm.h"
|
||||
#include "nw4r/g3d/res/g3d_resanmchr.h"
|
||||
@@ -13,6 +14,14 @@ public:
|
||||
|
||||
virtual int getType() const override;
|
||||
|
||||
bool create(nw4r::g3d::ResMdl mdl, nw4r::g3d::ResAnmChr anm, mAllocator_c *alloc) {
|
||||
return create(mdl, anm, alloc, nullptr);
|
||||
}
|
||||
// Not sure about this overload but it fixes stack alloc in some cases and other files
|
||||
// definitely have similar overloads with seemingly identical argument types
|
||||
bool create2(nw4r::g3d::ResMdl mdl, nw4r::g3d::ResAnmChr anm, mAllocator_c *alloc) {
|
||||
return create(mdl, anm, alloc);
|
||||
}
|
||||
bool create(nw4r::g3d::ResMdl, nw4r::g3d::ResAnmChr, mAllocator_c *, u32 *);
|
||||
void setAnm(bmdl_c &, nw4r::g3d::ResAnmChr, playMode_e);
|
||||
void setAnmAfter(bmdl_c &, nw4r::g3d::ResAnmChr, playMode_e);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef M3D_M_ANMCHRBLEND_H
|
||||
#define M3D_M_ANMCHRBLEND_H
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m3d/m_anmchr.h"
|
||||
#include "m/m3d/m_banm.h"
|
||||
#include "m/m3d/m_bmdl.h"
|
||||
@@ -14,6 +15,9 @@ public:
|
||||
|
||||
virtual int getType() const override;
|
||||
|
||||
bool create(nw4r::g3d::ResMdl mdl, int nView, mAllocator_c *alloc) {
|
||||
return create(mdl, nView, alloc, nullptr);
|
||||
}
|
||||
bool create(nw4r::g3d::ResMdl, int, mAllocator_c *, u32 *);
|
||||
void attach(int, nw4r::g3d::AnmObjChrRes *, f32);
|
||||
void attach(int, anmChr_c *, f32);
|
||||
|
||||
@@ -28,9 +28,9 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
nw4r::g3d::AnmObj *mpAnmObj;
|
||||
EGG::FrmHeap *mpFrameHeap;
|
||||
mAllocator_c mAllocator;
|
||||
/* 0x04 */ nw4r::g3d::AnmObj *mpAnmObj;
|
||||
/* 0x08 */ EGG::FrmHeap *mpFrameHeap;
|
||||
/* 0x0C */ mAllocator_c mAllocator;
|
||||
};
|
||||
|
||||
} // namespace m3d
|
||||
|
||||
@@ -22,7 +22,7 @@ public:
|
||||
int getNodeID(const char *name) const;
|
||||
bool getNodeWorldMtx(u32 p1, nw4r::math::MTX34 *out) const;
|
||||
bool getNodeWorldMtxMultVecZero(u32 p1, nw4r::math::VEC3 &out) const;
|
||||
bool getNodeWorldMtxMultVec(u32, nw4r::math::VEC3 &, nw4r::math::VEC3 &) const;
|
||||
bool getNodeWorldMtxMultVec(u32, const nw4r::math::VEC3 &, nw4r::math::VEC3 &) const;
|
||||
nw4r::g3d::ResMdl getResMdl() const;
|
||||
nw4r::g3d::ResMat getResMat(u32 index) const;
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
bool getBounds(mVec3_c *min, mVec3_c *max) const;
|
||||
|
||||
private:
|
||||
banm_c *mpCurrentAnm;
|
||||
/* 0x18 */ banm_c *mpCurrentAnm;
|
||||
};
|
||||
|
||||
} // namespace m3d
|
||||
|
||||
@@ -47,10 +47,10 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
f32 mEndFrame;
|
||||
f32 mStartFrame;
|
||||
f32 mCurrentFrame;
|
||||
u8 mPlayState;
|
||||
/* 0x28 */ f32 mEndFrame;
|
||||
/* 0x2C */ f32 mStartFrame;
|
||||
/* 0x30 */ f32 mCurrentFrame;
|
||||
/* 0x34 */ u8 mPlayState;
|
||||
};
|
||||
|
||||
} // namespace m3d
|
||||
|
||||
@@ -43,7 +43,11 @@ public:
|
||||
mpBaseCallback = cb;
|
||||
}
|
||||
|
||||
private:
|
||||
nw4r::g3d::ChrAnmResult *getNodeResult(u16 node) {
|
||||
return &mpNodes[node];
|
||||
}
|
||||
|
||||
protected:
|
||||
/* 0x04 */ calcRatio_c mCalcRatio;
|
||||
/* 0x20 */ int mNumNode;
|
||||
/* 0x24 */ nw4r::g3d::ChrAnmResult *mpNodes;
|
||||
@@ -66,9 +70,9 @@ public:
|
||||
|
||||
private:
|
||||
/** If we allocated the callback ourselves, this is what we need to free */
|
||||
mdlCallback_c *mpOwnedCallback;
|
||||
/* 0x1C */ mdlCallback_c *mpOwnedCallback;
|
||||
/** The actual callback to use */
|
||||
mdlCallback_c *mpCallback;
|
||||
/* 0x20 */ mdlCallback_c *mpCallback;
|
||||
};
|
||||
|
||||
} // namespace m3d
|
||||
|
||||
+5
-1
@@ -52,6 +52,10 @@ struct mAng {
|
||||
mVal -= other.mVal;
|
||||
return *this;
|
||||
}
|
||||
mAng &operator*=(const s32 &other) {
|
||||
mVal *= other;
|
||||
return *this;
|
||||
}
|
||||
|
||||
s32 step(s16 target, s32 steps, s16 max, s16 min);
|
||||
|
||||
@@ -67,7 +71,7 @@ struct mAng {
|
||||
return (360.0f / 65536.0f) * mVal;
|
||||
}
|
||||
|
||||
static mAng fromDeg(f32 deg) {
|
||||
static s16 fromDeg(f32 deg) {
|
||||
return deg * sDegToAng;
|
||||
}
|
||||
f32 degree2() const {
|
||||
|
||||
@@ -32,6 +32,12 @@ public:
|
||||
operator nw4r::math::MTX34 &() {
|
||||
return *(nw4r::math::MTX34 *)(this);
|
||||
}
|
||||
operator const nw4r::math::MTX34 *() const {
|
||||
return (nw4r::math::MTX34 *)(this);
|
||||
}
|
||||
operator const nw4r::math::MTX34 &() const {
|
||||
return *(nw4r::math::MTX34 *)(this);
|
||||
}
|
||||
|
||||
void XrotS(const mAng &angle); ///< Generates a rotation matrix for the X axis with the given angle.
|
||||
void XrotM(const mAng &angle); ///< Rotates the matrix on the X axis by the given angle.
|
||||
|
||||
@@ -43,13 +43,13 @@ public:
|
||||
virtual ~ICalcWorldCallback() {}; // at 0x8
|
||||
|
||||
virtual void ExecCallbackA(ChrAnmResult *pResult, ResMdl mdl,
|
||||
FuncObjCalcWorld *pFuncObj) = 0; // at 0xC
|
||||
FuncObjCalcWorld *pFuncObj) {}; // at 0xC
|
||||
|
||||
virtual void ExecCallbackB(WorldMtxManip *pManip, ResMdl mdl,
|
||||
FuncObjCalcWorld *pFuncObj) = 0; // at 0x10
|
||||
FuncObjCalcWorld *pFuncObj) {}; // at 0x10
|
||||
|
||||
virtual void ExecCallbackC(math::MTX34 *pMtxArray, ResMdl mdl,
|
||||
FuncObjCalcWorld *pFuncObj) = 0; // at 0x14
|
||||
FuncObjCalcWorld *pFuncObj) {}; // at 0x14
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
@@ -76,6 +76,11 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// Not sure
|
||||
void SetMtxUnchecked(const nw4r::math::MTX34 *arg) {
|
||||
PSMTXCopy(*arg, *mpM);
|
||||
}
|
||||
|
||||
private:
|
||||
math::MTX34 *mpM; // at 0x0
|
||||
math::VEC3 *mpS; // at 0x4
|
||||
|
||||
@@ -220,6 +220,11 @@ public:
|
||||
u32 GetShpID() const;
|
||||
u32 GetNodeID() const;
|
||||
};
|
||||
|
||||
// Not sure, but d_player_mdl has these strings at the end of .data (inlines) and in reverse order (in the same inline)
|
||||
DrawEnumerator ConstructDrawEnumerator() const {
|
||||
return DrawEnumerator(GetResByteCode("DrawOpa"), GetResByteCode("DrawXlu"));
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace g3d
|
||||
|
||||
@@ -109,11 +109,7 @@ public:
|
||||
}
|
||||
|
||||
u32 GetMtxID() const {
|
||||
if (IsValid()) {
|
||||
return ptr()->mtxID;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return IsValid() ? ptr()->mtxID : 0;
|
||||
}
|
||||
|
||||
bool IsVisible() const {
|
||||
|
||||
@@ -148,6 +148,15 @@ public:
|
||||
return !(ref().flag & ResShpData::FLAG_INVISIBLE);
|
||||
}
|
||||
|
||||
// Not sure, copied from ResNode
|
||||
void SetVisibility(bool visible) {
|
||||
if (visible) {
|
||||
ptr()->flag &= ~ResShpData::FLAG_INVISIBLE;
|
||||
} else {
|
||||
ptr()->flag |= ResShpData::FLAG_INVISIBLE;
|
||||
}
|
||||
}
|
||||
|
||||
void DCStore(bool sync);
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef CX_UTIL_H
|
||||
#define CX_UTIL_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
bool lzSafeDecompress(const void *src, u32 maxSize, void *dest);
|
||||
|
||||
#endif
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "m/m3d/m_scnleaf.h"
|
||||
#include "nw4r/g3d/g3d_scnobj.h"
|
||||
|
||||
|
||||
class dScnCallback_c : public nw4r::g3d::IScnObjCallback {
|
||||
public:
|
||||
dScnCallback_c(dAcObjBase_c *arg) : mpActor(arg) {}
|
||||
|
||||
@@ -133,7 +133,7 @@ int dAcBombf_c::actorExecute() {
|
||||
}
|
||||
|
||||
int dAcBombf_c::draw() {
|
||||
if (field_0x3D0 != 0 && (dAcPy_c::LINK->mActionFlagsCont & 0x400000) == 0) {
|
||||
if (field_0x3D0 != 0 && !dAcPy_c::LINK->checkActionFlagsCont(0x400000)) {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
drawModelType1(&mModel);
|
||||
@@ -170,7 +170,6 @@ void dAcBombf_c::initializeState_Wait() {}
|
||||
extern "C" u16 lbl_8057A750;
|
||||
|
||||
void dAcBombf_c::executeState_Wait() {
|
||||
// Stack problems
|
||||
if (SceneflagManager::sInstance->checkBoolFlag(roomid, mDespawnSceneFlag)) {
|
||||
deleteRequest();
|
||||
dAcBomb_c *bomb = mBombRef.get();
|
||||
@@ -184,12 +183,12 @@ void dAcBombf_c::executeState_Wait() {
|
||||
|
||||
f32 scaleFactor = mScale.x;
|
||||
if (field_0x3D2 == 0 || field_0x3D2 == 2) {
|
||||
mVec3_c m;
|
||||
PSMTXMultVecSR(mWorldMtx, mVec3_c::Ey, m);
|
||||
mVec3_c up;
|
||||
PSMTXMultVecSR(mWorldMtx, mVec3_c::Ey, up);
|
||||
mVec3_c upScaled = up * 30.0f;
|
||||
mVec3_c checkPos = position + upScaled;
|
||||
|
||||
mVec3_c m3 = position + (m * 30.0f);
|
||||
|
||||
if (mTimeAreaStruct.check(roomid, m3, 0, 30.0f, 0.1f) && field_0x3D4 != 1) {
|
||||
if (mTimeAreaStruct.check(roomid, checkPos, 0, 30.0f, 0.1f) && field_0x3D4 != 1) {
|
||||
if (mTimeAreaStruct.field_0x04 == 1) {
|
||||
playSound(SE_TIMESLIP_TIMESLIP);
|
||||
} else {
|
||||
|
||||
@@ -55,7 +55,7 @@ extern const u16 PARTICLE_RESOURCE_ID_MAPPING_8_;
|
||||
void dAcTWoodArea_c::initializeState_Wait() {}
|
||||
|
||||
void dAcTWoodArea_c::executeState_Wait() {
|
||||
if (dAcPy_c::LINK != nullptr && (dAcPy_c::LINK->someFlags_0x350 & 0x2000)) {
|
||||
if (dAcPy_c::LINK != nullptr && dAcPy_c::LINK->checkFlags0x350(0x2000)) {
|
||||
// This is a bit messed up
|
||||
mVec3_c dist = position - dAcPy_c::LINK->position;
|
||||
f32 attachRadius = getAttachRadius();
|
||||
|
||||
@@ -42,16 +42,14 @@ const InteractionTargetDef dAcOSeatSword_c::sInteractionDef = {
|
||||
|
||||
const Vec dAcOSeatSword_c::sEffectPos = {-20.f, 260.f, 30.f};
|
||||
|
||||
extern "C" const char *getSwordName(int);
|
||||
extern "C" u8 EQUIPPED_SWORD;
|
||||
bool dAcOSeatSword_c::createHeap() {
|
||||
if (mSubtype == 0) {
|
||||
const char *goddess_sword = getSwordName(1);
|
||||
const char *goddess_sword = daPlayerActBase_c::getSwordName(1);
|
||||
mRes = dAcPy_c::getItemResFile(goddess_sword, heap_allocator);
|
||||
TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(goddess_sword), &heap_allocator, 0x120, 1, nullptr));
|
||||
} else if (mSubtype == 1) {
|
||||
mRes = dAcPy_c::LINK->mSwordRes;
|
||||
const char *sword_name = getSwordName(EQUIPPED_SWORD);
|
||||
mRes = dAcPy_c::GetLink()->getSwordResFile();
|
||||
const char *sword_name = daPlayerActBase_c::getSwordName(daPlayerActBase_c::sCurrentSword);
|
||||
TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(sword_name), &heap_allocator, 0x120, 1, nullptr));
|
||||
}
|
||||
|
||||
@@ -173,7 +171,7 @@ void dAcOSeatSword_c::registerInEvent() {
|
||||
ang.y += someAng;
|
||||
vec.rotY(rotation.y);
|
||||
vec += position;
|
||||
player->setPosRot(vec, ang, 0, 1, 0);
|
||||
player->setPosRot(&vec, &ang, 0, 1, 0);
|
||||
mField_0x7E8.set(0);
|
||||
updateSwordMdl();
|
||||
}
|
||||
|
||||
@@ -459,13 +459,13 @@ void dAcOtubo_c::destroy() {
|
||||
mActorCarryInfo.fn_80050EA0(this);
|
||||
|
||||
dEmitterBase_c *fx_thing = dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_209_, poscopy2, nullptr, nullptr, nullptr, nullptr, 0, 0
|
||||
PARTICLE_RESOURCE_ID_MAPPING_211_, poscopy2, nullptr, nullptr, nullptr, nullptr, 0, 0
|
||||
);
|
||||
if (fx_thing) {
|
||||
fx_thing->attachEmitterCallbackId(mSubtype != 0 ? dJEffManager_c::TsuboB : dJEffManager_c::TsuboA);
|
||||
}
|
||||
fx_thing = dJEffManager_c::spawnEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_109_, position, nullptr, nullptr, nullptr, nullptr, 0, 0
|
||||
PARTICLE_RESOURCE_ID_MAPPING_116_, position, nullptr, nullptr, nullptr, nullptr, 0, 0
|
||||
);
|
||||
if (fx_thing) {
|
||||
fx_thing->bindShpEmitter(mSubtype != 0 ? dJEffManager_c::TsuboB : dJEffManager_c::TsuboA, false);
|
||||
@@ -573,7 +573,7 @@ void dAcOtubo_c::fn_272_2670() {
|
||||
static const s16 unk = {0}; // needed for rodata ordering
|
||||
if (!cM::isZero(mField_0x9CA)) {
|
||||
angle.y = (*(s16 *)((u8 *)this + 0x9CA)); // HACK to force load again
|
||||
mField_0x9CA = 0;
|
||||
mField_0x9CA.set(0);
|
||||
} else {
|
||||
mQuat_c q;
|
||||
q.set(1.f, 0.f, 0.f, 0.f);
|
||||
|
||||
@@ -21,7 +21,7 @@ int dTgHolyWater_c::actorExecute() {
|
||||
mDowsingTarget.doUnregister();
|
||||
}
|
||||
if (isLinkNearby()) {
|
||||
dAcPy_c::LINK->mForceOrPreventActionFlags |= 0x10000000;
|
||||
dAcPy_c::LINK->onForceOrPreventActionFlags(0x10000000);
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/d_pouch.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "toBeSorted/small_sound_mgr.h"
|
||||
@@ -30,8 +31,6 @@ bool dTgReaction_c::createHeap() {
|
||||
return true;
|
||||
}
|
||||
|
||||
extern "C" bool isHeroMode();
|
||||
|
||||
int dTgReaction_c::create() {
|
||||
// Note the double _c here
|
||||
if (!initAllocatorWork1Heap(0x1000, "dTgReaction_c_c::m_allocator", 0x20)) {
|
||||
@@ -54,7 +53,7 @@ int dTgReaction_c::create() {
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
if (isHeroMode()) {
|
||||
if (dScGame_c::isHeroMode()) {
|
||||
if (getParam0x10() == 1) {
|
||||
field_0x4DE = 1;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
#include "d/a/d_a_player.h"
|
||||
|
||||
dAcPy_c *dAcPy_c::LINK;
|
||||
|
||||
// TODO: Disable this pragma when the ctors are matching
|
||||
#pragma dont_inline on
|
||||
dAcPy_c::dAcPy_c() {}
|
||||
#pragma dont_inline reset
|
||||
|
||||
dAcPy_c::~dAcPy_c() {}
|
||||
|
||||
@@ -43,20 +43,20 @@ void dAcOsw_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *in
|
||||
dAcOsw_c *sw = static_cast<dAcOsw_c *>(actor);
|
||||
|
||||
// halp
|
||||
if (!(link == nullptr || ((link->mActionFlags & 0x40000) == 0 &&
|
||||
(((link->someFlags_0x340 & 0x800000) == 0 ||
|
||||
if (!(link == nullptr || (!link->checkActionFlags(dAcPy_c::FLG0_IN_WATER) &&
|
||||
((!link->checkFlags0x340(0x800000) ||
|
||||
((link->getCurrentCarriedActor() != nullptr &&
|
||||
link->getCurrentCarriedActor()->mActorCarryInfo.testCarryFlag(0x04)))))))) {
|
||||
return;
|
||||
}
|
||||
if (interactor->mActorCarryInfo.isCarried != 1) {
|
||||
if (link == nullptr || (link->mActionFlags & 0xC70852) == 0) {
|
||||
if (link == nullptr || (link->checkActionFlags(0xC70852)) == 0) {
|
||||
if (!sw->someInteractCheck(link != nullptr)) {
|
||||
bool needsOnFlag = sw->mOnSceneFlag < 0xFF &&
|
||||
!SceneflagManager::sInstance->checkBoolFlag(sw->roomid, sw->mOnSceneFlag);
|
||||
if (!needsOnFlag && sw->mObjRef.get() == nullptr && link != nullptr && sw->field_0x5F1 == 0 &&
|
||||
sw->mStateMgr.isState(StateID_On)) {
|
||||
link->field_0x360 |= 0x8000;
|
||||
link->onFlags_0x360(0x8000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ int dAcOsw_c::actorPostCreate() {
|
||||
int dAcOsw_c::doDelete() {
|
||||
dAcPy_c *link = dAcPy_c::LINK;
|
||||
if (mSwitchType != 1 && field_0x5F2 == 0) {
|
||||
if ((link == nullptr || (link->someFlags_0x340 & 0x200) != 0) && (link == nullptr || link->roomid == roomid)) {
|
||||
if ((link == nullptr || link->checkFlags0x340(0x200)) && (link == nullptr || link->roomid == roomid)) {
|
||||
if (mOffSceneFlag < 0xFF && SceneflagManager::sInstance->checkBoolFlag(roomid, mOffSceneFlag)) {
|
||||
SceneflagManager::sInstance->unsetFlag(roomid, mOffSceneFlag);
|
||||
}
|
||||
|
||||
@@ -96,6 +96,7 @@ const cCcD_SrcGObj dAcTbox_c::sColSrc = {
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
// TODO: pragma readonly_strings on?
|
||||
static const char sGetTriForce[] = "GetTriForce";
|
||||
static const char sGetSwordA[] = "GetSwordA";
|
||||
static const char sGetHarp[] = "GetHarp";
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
#include "d/d_player.h"
|
||||
@@ -0,0 +1,127 @@
|
||||
#include "d/d_player_act.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_item.h"
|
||||
#include "d/a/d_a_itembase.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_color.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
mVec3_c daPlayerActBase_c::sPos1(mVec3_c::Zero);
|
||||
mVec3_c daPlayerActBase_c::sPos2(mVec3_c::Zero);
|
||||
mAng daPlayerActBase_c::sRot1(0);
|
||||
mAng daPlayerActBase_c::sRot2(0);
|
||||
const f32 daPlayerActBase_c::sPushRelatedConstant = 75.0f;
|
||||
|
||||
int daPlayerActBase_c::preExecute() {
|
||||
if (dAcObjBase_c::preExecute() == NOT_READY) {
|
||||
return NOT_READY;
|
||||
}
|
||||
someFlags_0x350 = 0;
|
||||
someFlags_0x354 = 0;
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void daPlayerActBase_c::postExecute(MAIN_STATE_e state) {
|
||||
if (state != CANCELED) {
|
||||
someFlags_0x358 = 0;
|
||||
mForceOrPreventActionFlags = 0;
|
||||
}
|
||||
dAcObjBase_c::postExecute(state);
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isInEvent() {
|
||||
return EventManager::isInEvent();
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingLeft() const {
|
||||
return mAttackDirection == ATTACK_SPIN_LEFT || mAttackDirection == ATTACK_SWING_LEFT;
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingRight() const {
|
||||
return mAttackDirection == ATTACK_SPIN_RIGHT || mAttackDirection == ATTACK_SWING_RIGHT;
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingDown() const {
|
||||
return mAttackDirection == ATTACK_SWING_DOWN || mAttackDirection == ATTACK_SPIN_DOWN ||
|
||||
mAttackDirection == ATTACK_JUMP_SLASH;
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingUp() const {
|
||||
return mAttackDirection == ATTACK_SPIN_UP || mAttackDirection == ATTACK_SWING_UP;
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingStab() const {
|
||||
return mAttackDirection == ATTACK_STAB;
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingSpinHorizontal() const {
|
||||
return mAttackDirection == ATTACK_SPIN_LEFT || mAttackDirection == ATTACK_SPIN_RIGHT;
|
||||
}
|
||||
|
||||
bool daPlayerActBase_c::isAttackingSpinVertical() const {
|
||||
return mAttackDirection == ATTACK_SPIN_DOWN || mAttackDirection == ATTACK_SPIN_UP;
|
||||
}
|
||||
|
||||
void daPlayerActBase_c::setBonkRelatedAnimFlag(bool b) {
|
||||
if (b) {
|
||||
field_0x360 |= 2;
|
||||
} else {
|
||||
field_0x360 |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void daPlayerActBase_c::setPosRot(const mVec3_c *pos, const mAng3_c *rot, bool force, UNKWORD, UNKWORD) {
|
||||
if (isInEvent() || force) {
|
||||
mStts.ClrCcMove();
|
||||
if (pos != nullptr) {
|
||||
position = *pos;
|
||||
mOldPosition = position;
|
||||
velocity.y = 0.0f;
|
||||
}
|
||||
if (rot != nullptr) {
|
||||
rotation = *rot;
|
||||
angle.y = rotation.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void daPlayerActBase_c::setPosYRot(const mVec3_c &pos, mAng rot, bool force, UNKWORD a4, UNKWORD a5) {
|
||||
mAng3_c ang(0, rot, 0);
|
||||
setPosRot(&pos, &ang, force, a4, a5);
|
||||
}
|
||||
|
||||
void daPlayerActBase_c::setTransform(const mMtx_c &mtx, bool force, UNKWORD a4, UNKWORD a5) {
|
||||
mVec3_c translate;
|
||||
mtx.getTranslation(translate);
|
||||
mAng3_c rot;
|
||||
mtx.toRot(rot);
|
||||
setPosRot(&translate, &rot, force, a4, a5);
|
||||
}
|
||||
|
||||
extern "C" bool fn_80213090(dAcEnBase_c *);
|
||||
|
||||
bool daPlayerActBase_c::someTargetedActorCheck() const {
|
||||
return fn_80213090(getTargetedActor1());
|
||||
}
|
||||
|
||||
mAng daPlayerActBase_c::fn_8005BA90() {
|
||||
return dAcPy_c::LINK2->fn_8023B520();
|
||||
}
|
||||
|
||||
mAng daPlayerActBase_c::fn_8005BAA0() {
|
||||
return dAcPy_c::LINK2->fn_8023B590();
|
||||
}
|
||||
|
||||
const mColor &daPlayerActBase_c::getEarringsColor() {
|
||||
static const mColor sNoFireshieldEarrings = mColor(45, 80, 127, 255);
|
||||
static const mColor sFireshieldEarrings = mColor(222, 57, 20, 255);
|
||||
if (dAcItem_c::hasItem(ITEM_FIRESHIELD_EARRINGS)) {
|
||||
return sFireshieldEarrings;
|
||||
} else {
|
||||
return sNoFireshieldEarrings;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#include "d/a/d_a_player.h"
|
||||
|
||||
// Need to be their own file due to sbss alignment
|
||||
|
||||
mColor daPlayerModelBase_c::sGuideColor1(0x00, 0x82, 0xDC, 0xFF);
|
||||
mColor daPlayerModelBase_c::sGuideColor2(0x64, 0xFF, 0xFF, 0xFF);
|
||||
mColor daPlayerModelBase_c::sGuideColor3(0x46, 0xC8, 0xFF, 0xFF);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -294,7 +294,7 @@ bool dLytDobutton_c::remove() {
|
||||
bool dLytDobutton_c::execute() {
|
||||
bool isInEvent = EventManager::isInEvent();
|
||||
bool b1 = true;
|
||||
if (dAcPy_c::isInBambooCuttingMinigame()) {
|
||||
if (dAcPy_c::GetLink()->isInBambooCuttingMinigame()) {
|
||||
setActionTextStuff(ICON_12, ACT_DO_70, false);
|
||||
}
|
||||
if (field_0x490 == 0) {
|
||||
|
||||
@@ -491,7 +491,8 @@ bool dLytMeterCrossBtn_c::execute() {
|
||||
|
||||
if (field_0x637 != 0) {
|
||||
if (mIconDown == 0) {
|
||||
f32 frame = dAcPy_c::GetLink2()->getAnmMatClrFrame();
|
||||
// Start UI animation together with sword animation on Link's back
|
||||
f32 frame = dAcPy_c::GetLink2()->getSwordAnmFrame();
|
||||
if (frame == 0.0f) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
|
||||
if (!mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
|
||||
|
||||
@@ -78,7 +78,7 @@ bool dLytMeterShieldGauge_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
field_0x31F = 0;
|
||||
field_0x31E = 0;
|
||||
field_0x318 = 0;
|
||||
mShieldType = 0;
|
||||
mShieldId = 0;
|
||||
mSavedShieldType = -1;
|
||||
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setFrame(mCurrentDurability);
|
||||
@@ -134,11 +134,11 @@ bool dLytMeterShieldGauge_c::execute() {
|
||||
bool b3 = false;
|
||||
bool b4 = false;
|
||||
|
||||
if (mShieldType != mSavedShieldType ||
|
||||
if (mShieldId != mSavedShieldType ||
|
||||
mCurrentShieldPouchSlot != convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot())) {
|
||||
mLyt.findPane("N_alpha_00")->SetVisible(true);
|
||||
mSavedShieldType = mShieldType;
|
||||
mAnm[SHIELD_ANIM_TYPE].setFrame(getLytFrameForShield(mShieldType));
|
||||
mSavedShieldType = mShieldId;
|
||||
mAnm[SHIELD_ANIM_TYPE].setFrame(getLytFrameForShield(mShieldId));
|
||||
mAnm[SHIELD_ANIM_TYPE].setAnimEnable(true);
|
||||
mAnm[SHIELD_ANIM_LOOP_0].setFrame(0.0f);
|
||||
field_0x31D = 1;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#include "egg/core/eggHeap.h"
|
||||
|
||||
#include "egg/core/eggAllocator.h"
|
||||
#include "egg/core/eggThread.h"
|
||||
#include "nw4r/ut/ut_list.h"
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
/* 80673ae8 */ nw4r::ut::List Heap::sHeapList;
|
||||
|
||||
@@ -39,7 +39,7 @@ bool bmdl_c::getNodeWorldMtxMultVecZero(u32 p1, nw4r::math::VEC3 &out) const {
|
||||
}
|
||||
}
|
||||
|
||||
bool bmdl_c::getNodeWorldMtxMultVec(u32 p1, nw4r::math::VEC3 &in, nw4r::math::VEC3 &out) const {
|
||||
bool bmdl_c::getNodeWorldMtxMultVec(u32 p1, const nw4r::math::VEC3 &in, nw4r::math::VEC3 &out) const {
|
||||
nw4r::math::MTX34 mtx;
|
||||
if (!getNodeWorldMtx(p1, &mtx)) {
|
||||
return false;
|
||||
|
||||
+12
-16
@@ -514,17 +514,14 @@ bool mShadowChild_c::setGeom(const GXTexObj *texObj, const mMtx_c &mtx, const mQ
|
||||
}
|
||||
|
||||
void mShadowChild_c::updateMtx() {
|
||||
const mQuat_c &q = GetQuat();
|
||||
const mVec3_c &pos = GetPosition();
|
||||
// NONMATCHING
|
||||
field_0x13C = mQuat.w;
|
||||
|
||||
Set0x13C(q.w);
|
||||
|
||||
mVec3_c a(q.v);
|
||||
|
||||
a += pos * GetOffset();
|
||||
|
||||
mVec3_c b(q.v);
|
||||
b -= pos * Get0x13C();
|
||||
mVec3_c a(mQuat.v.x, mQuat.v.y, mQuat.v.z);
|
||||
a += mPositionMaybe * GetOffset();
|
||||
|
||||
mVec3_c b(mQuat.v.x, mQuat.v.y, mQuat.v.z);
|
||||
b -= mPositionMaybe * field_0x13C;
|
||||
|
||||
const mVec3_c *up;
|
||||
if (cM::isZero((a - b).squareMagXZ())) {
|
||||
@@ -536,17 +533,16 @@ void mShadowChild_c::updateMtx() {
|
||||
mMtx_c mtx;
|
||||
C_MTXLookAt(mtx.m, a, *up, b);
|
||||
|
||||
const f32 f = Get0x13C();
|
||||
f32 f = field_0x13C;
|
||||
mFrustum.set(f, -f, -f, f, f, f + GetOffset(), mtx, true);
|
||||
}
|
||||
|
||||
void mShadowChild_c::drawMdl() {
|
||||
// Equivalent, but stack problems and regswaps
|
||||
using namespace nw4r;
|
||||
mMtx_c mtx;
|
||||
Mtx44 mtx;
|
||||
GXSetTevColor(GX_TEVREG0, sColors[mColorChanIdx]);
|
||||
C_MTXOrtho(mtx.m, field_0x13C, -field_0x13C, -field_0x13C, field_0x13C, 0.0f, 100.0f + (-mFrustum.mFar));
|
||||
GXSetProjection(mtx.m, GX_ORTHOGRAPHIC);
|
||||
C_MTXOrtho(mtx, field_0x13C, -field_0x13C, -field_0x13C, field_0x13C, 0.0f, 100.0f + (-mFrustum.mFar));
|
||||
GXSetProjection(mtx, GX_ORTHOGRAPHIC);
|
||||
g3d::G3DState::Invalidate(0x7FF);
|
||||
|
||||
mMtx_c &viewMtx = mFrustum.mView;
|
||||
@@ -571,7 +567,7 @@ void mShadowChild_c::drawMdl() {
|
||||
g3d::DrawResMdlReplacement *pRep = mdl2 ? &mdl2->GetDrawResMdlReplacement() : nullptr;
|
||||
|
||||
g3d::DrawResMdlDirectly(
|
||||
resMdl, viewPosArray, nullptr, nullptr, mdl2->GetByteCode(g3d::ScnMdlSimple::BYTE_CODE_DRAW_OPA),
|
||||
resMdl, viewPosArray, nullptr, nullptr, mdl->GetByteCode(g3d::ScnMdlSimple::BYTE_CODE_DRAW_OPA),
|
||||
nullptr, pRep, g3d::RESMDL_DRAWMODE_FORCE_LIGHTOFF | g3d::RESMDL_DRAWMODE_IGNORE_MATERIAL
|
||||
);
|
||||
GXInvalidateVtxCache();
|
||||
|
||||
+3
-10
@@ -63,19 +63,12 @@ void mHeapAllocator_c::destroyHeap() {
|
||||
}
|
||||
}
|
||||
|
||||
inline EGG::Heap *getHeapOfKind(EGG::Heap *heap, EGG::Heap::eHeapKind kind) {
|
||||
if (heap != nullptr && heap->getHeapKind() == kind) {
|
||||
return heap;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
s32 mHeapAllocator_c::adjustFrmHeap() {
|
||||
EGG::Heap *heap = mHeap;
|
||||
if (heap == mHeap::g_assertHeap) {
|
||||
return 0;
|
||||
}
|
||||
return mHeap::adjustFrmHeap(static_cast<EGG::FrmHeap *>(getHeapOfKind(heap, EGG::Heap::HEAP_KIND_FRAME)));
|
||||
return mHeap::adjustFrmHeap(EGG::Heap::toFrmHeap(heap));
|
||||
}
|
||||
|
||||
s32 mHeapAllocator_c::adjustExpHeap() {
|
||||
@@ -83,7 +76,7 @@ s32 mHeapAllocator_c::adjustExpHeap() {
|
||||
if (heap == mHeap::g_assertHeap) {
|
||||
return 0;
|
||||
}
|
||||
return mHeap::adjustExpHeap(static_cast<EGG::ExpHeap *>(getHeapOfKind(heap, EGG::Heap::HEAP_KIND_EXPANDED)));
|
||||
return mHeap::adjustExpHeap(EGG::Heap::toExpHeap(heap));
|
||||
}
|
||||
|
||||
bool mHeapAllocator_c::createNewTempFrmHeap(s32 size, EGG::Heap *newHeap, char *heapName, s32 align, u32 attrs) {
|
||||
@@ -98,7 +91,7 @@ bool mHeapAllocator_c::createNewTempFrmHeap(s32 size, EGG::Heap *newHeap, char *
|
||||
void mHeapAllocator_c::adjustFrmHeapRestoreCurrent() {
|
||||
mHeap::restoreCurrentHeap();
|
||||
EGG::Heap *heap = mHeap;
|
||||
mHeap::adjustFrmHeap(static_cast<EGG::FrmHeap *>(getHeapOfKind(heap, EGG::Heap::HEAP_KIND_FRAME)));
|
||||
mHeap::adjustFrmHeap(EGG::Heap::toFrmHeap(heap));
|
||||
}
|
||||
|
||||
void *operator new[](size_t size, mAllocator_c *allocator) {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "d/a/d_a_itembase.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/d_pouch.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
@@ -386,8 +387,6 @@ static const struct {
|
||||
};
|
||||
static const u16 RAND_RUPEE_ARRAY[3] = {ITEM_GREEN_RUPEE, ITEM_BLUE_RUPEE, ITEM_RED_RUPEE};
|
||||
|
||||
extern "C" bool isHeroMode();
|
||||
|
||||
// 800c7bb0
|
||||
int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) {
|
||||
const DropList *list = &sDropTable.mList[specialItemId];
|
||||
@@ -410,8 +409,8 @@ int SpecialItemDropMgr::fn_800C7BB0(int specialItemId) {
|
||||
// No seeds until you get the Slingshot
|
||||
weight = 0;
|
||||
}
|
||||
} else if (specialItemId != 0x27 && (entryIdx == 1 || entryIdx == 2) && isHeroMode()) {
|
||||
// Hearts generally don't drop on Hero Mode unless it's a special kind of heart (which?)
|
||||
} else if (specialItemId != 0x27 && (entryIdx == 1 || entryIdx == 2) && dScGame_c::isHeroMode()) {
|
||||
// Hearts generally don't drop on Hero Mode unless it's a special kind of heart (TODO which?)
|
||||
weight = 0;
|
||||
} else if ((entryIdx == 7 || entryIdx == 8) && !dAcItem_c::checkFlag(ITEM_BOMB_BAG)) {
|
||||
// Bombs won't drop until you get the Bomb Bag
|
||||
|
||||
Reference in New Issue
Block a user