diff --git a/src/system/bandobj/BandCharDesc.cpp b/src/system/bandobj/BandCharDesc.cpp index 3eef85a4..3e4e220a 100644 --- a/src/system/bandobj/BandCharDesc.cpp +++ b/src/system/bandobj/BandCharDesc.cpp @@ -1,19 +1,127 @@ #include "bandobj/BandCharDesc.h" +#include "bandobj/BandHeadShaper.h" +#include "utl/Symbols.h" + +BandCharDesc* gBandCharDescMe; void BandCharDesc::Init(){ Register(); } +BandCharDesc::OutfitPiece::OutfitPiece(){ + mName = Symbol(); + mColor0 = 0; + mColor1 = 0; + mColor2 = 0; + mSaveSizeMethod = &SaveSize; +} + BandCharDesc::Outfit::Outfit(){ - + mSaveSizeMethod = &SaveSize; } -BandCharDesc::BandCharDesc() : mGender("male"), mSkinColor(3) { +BandCharDesc::InstrumentOutfit::InstrumentOutfit(){ + mSaveSizeMethod = &SaveSize; +} +BandCharDesc::Patch::Patch() : mTexture(0), mCategory(0), mUV(0.5f, 0.5f), mRotation(0), mScale(1.0f, 1.0f) { + mSaveSizeMethod = &SaveSize; +} + +BandCharDesc::BandCharDesc() : mGender("male"), mSkinColor(3), mHeight(0.5f), mWeight(0.5f), mMuscle(0.5f), unk224(0) { + mSaveSizeMethod = &SaveSize; } BandCharDesc::Head::Head() : mHide(0), mEyeColor(0), mShape(0), mChin(0), mChinWidth(0.5f), mChinHeight(0.5f), mJawWidth(0.5f), mJawHeight(0.5f), mNose(0), mNoseWidth(0.5f), mNoseHeight(0.5f), mEye(0), mEyeSeparation(0.5f), mEyeHeight(0.5f), mEyeRotation(0.5f), mMouth(0), mMouthWidth(0.5f), mMouthHeight(0.5f), mBrowSeparation(0.5f), mBrowHeight(0.5f) { mSaveSizeMethod = &SaveSize; -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandCharDesc) + if(sym == list_outfits) return ListOutfits(_msg->Sym(2)); + HANDLE_EXPR(nose_num, BandHeadShaper::sNoseNum) + HANDLE_EXPR(mouth_num, BandHeadShaper::sMouthNum) + HANDLE_EXPR(eye_num, BandHeadShaper::sEyeNum) + HANDLE_EXPR(shape_num, BandHeadShaper::sShapeNum) + HANDLE_EXPR(chin_num, BandHeadShaper::sChinNum) + HANDLE_ACTION(milo_reload, MiloReload()) + if(ClassName() == StaticClassName()) HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x604) +END_HANDLERS + +BEGIN_CUSTOM_PROPSYNC(BandCharDesc::Patch) + SYNC_PROP_MODIFY(category, o.mCategory, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY(texture, o.mTexture, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY_ALT(mesh_name, o.mMeshName, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY(rotation, o.mRotation, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY_ALT(uv, o.mUV, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY_ALT(scale, o.mScale, gBandCharDescMe->SetChanged(1)) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(BandCharDesc::OutfitPiece) + SYNC_PROP_MODIFY(name, o.mName, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY(color0, o.mColor0, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY(color1, o.mColor1, gBandCharDescMe->SetChanged(1)) + SYNC_PROP_MODIFY(color2, o.mColor2, gBandCharDescMe->SetChanged(1)) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(BandCharDesc::Outfit) + SYNC_PROP(eyebrows, o.mEyebrows) + SYNC_PROP(earrings, o.mEarrings) + SYNC_PROP(facehair, o.mFaceHair) + SYNC_PROP(glasses, o.mGlasses) + SYNC_PROP(hair, o.mHair) + SYNC_PROP(piercings, o.mPiercings) + SYNC_PROP(feet, o.mFeet) + SYNC_PROP(hands, o.mHands) + SYNC_PROP(legs, o.mLegs) + SYNC_PROP(rings, o.mRings) + SYNC_PROP(torso, o.mTorso) + SYNC_PROP(wrist, o.mWrist) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(BandCharDesc::InstrumentOutfit) + SYNC_PROP(guitar, o.mGuitar) + SYNC_PROP(bass, o.mBass) + SYNC_PROP(drum, o.mDrum) + SYNC_PROP(mic, o.mMic) + SYNC_PROP(keyboard, o.mKeyboard) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(BandCharDesc::Head) + SYNC_PROP(eye_color, o.mEyeColor) + SYNC_PROP(shape, o.mShape) + SYNC_PROP(chin, o.mChin) + SYNC_PROP(chin_width, o.mChinWidth) + SYNC_PROP(chin_height, o.mChinHeight) + SYNC_PROP(jaw_width, o.mJawWidth) + SYNC_PROP(jaw_height, o.mJawHeight) + SYNC_PROP(nose, o.mNose) + SYNC_PROP(nose_width, o.mNoseWidth) + SYNC_PROP(nose_height, o.mNoseHeight) + SYNC_PROP(eye, o.mEye) + SYNC_PROP(eye_separation, o.mEyeSeparation) + SYNC_PROP(eye_height, o.mEyeHeight) + SYNC_PROP(eye_rotation, o.mEyeRotation) + SYNC_PROP(mouth, o.mMouth) + SYNC_PROP(mouth_width, o.mMouthWidth) + SYNC_PROP(mouth_height, o.mMouthHeight) + SYNC_PROP_MODIFY(brow_separation, o.mBrowSeparation, gBandCharDescMe->SetChanged(2)) + SYNC_PROP_MODIFY(brow_height, o.mBrowHeight, gBandCharDescMe->SetChanged(2)) + SYNC_PROP(hide, o.mHide) +END_CUSTOM_PROPSYNC + +BEGIN_PROPSYNCS(BandCharDesc) + gBandCharDescMe = this; + SYNC_PROP_SET(prefab, mPrefab, SetPrefab(_val.Sym(0))) + SYNC_PROP_SET(gender, mGender, SetGender(_val.Sym(0))) + SYNC_PROP_SET(height, mHeight, SetHeight(_val.Float(0))) + SYNC_PROP_SET(weight, mWeight, SetWeight(_val.Float(0))) + SYNC_PROP_SET(muscle, mMuscle, SetMuscle(_val.Float(0))) + SYNC_PROP_SET(skin_color, mSkinColor, SetSkinColor(_val.Int(0))) + SYNC_PROP_MODIFY_ALT(head, mHead, SetChanged(1)) + SYNC_PROP(instruments, mInstruments) + SYNC_PROP(outfit, mOutfit) + SYNC_PROP(patches, mPatches) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandCharDesc.h b/src/system/bandobj/BandCharDesc.h index afcd691b..a4a9e487 100644 --- a/src/system/bandobj/BandCharDesc.h +++ b/src/system/bandobj/BandCharDesc.h @@ -13,6 +13,8 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable { virtual void SaveFixed(FixedSizeSaveableStream&) const; virtual void LoadFixed(FixedSizeSaveableStream&, int); + static int SaveSize(int); + int mTexture; // 0x8 int mCategory; // 0xc String mMeshName; // 0x10 @@ -28,6 +30,8 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable { virtual void SaveFixed(FixedSizeSaveableStream&) const; virtual void LoadFixed(FixedSizeSaveableStream&, int); + static int SaveSize(int); + Symbol mName; // 0x8 int mColor0; // 0xc int mColor1; // 0x10 @@ -72,6 +76,8 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable { virtual void SaveFixed(FixedSizeSaveableStream&) const; virtual void LoadFixed(FixedSizeSaveableStream&, int); + static int SaveSize(int); + OutfitPiece mEyebrows; // 0x8 OutfitPiece mFaceHair; // 0x20 OutfitPiece mHair; // 0x38 @@ -86,13 +92,15 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable { OutfitPiece mWrist; // 0x110 }; - class InstrumentOutfit { + class InstrumentOutfit : public FixedSizeSaveable { public: InstrumentOutfit(); virtual ~InstrumentOutfit(){} virtual void SaveFixed(FixedSizeSaveableStream&) const; virtual void LoadFixed(FixedSizeSaveableStream&, int); + static int SaveSize(int); + OutfitPiece mGuitar; // 0x8 OutfitPiece mBass; // 0x20 OutfitPiece mDrum; // 0x38 @@ -119,6 +127,18 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable { virtual void AddOverlays(BandPatchMesh&); virtual void MiloReload(){} + void SetChanged(int); + void SetPrefab(Symbol); + void SetGender(Symbol); + void SetHeight(float); + void SetWeight(float); + void SetMuscle(float); + void SetSkinColor(int); + + DataNode ListOutfits(Symbol); + + static ObjectDir* GetPrefabs(); + static int SaveSize(int); static void Init(); static void Register(){ REGISTER_OBJ_FACTORY(BandCharDesc); @@ -138,7 +158,6 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable { float mMuscle; // 0x220 int unk224; // 0x224 std::vector mPatches; // 0x228 - int unk230; // 0x230 }; class BandCharDescTest : public BandCharDesc { diff --git a/src/system/bandobj/BandConfiguration.cpp b/src/system/bandobj/BandConfiguration.cpp index 517e43ea..b37fd78c 100644 --- a/src/system/bandobj/BandConfiguration.cpp +++ b/src/system/bandobj/BandConfiguration.cpp @@ -1,4 +1,5 @@ #include "bandobj/BandConfiguration.h" +#include "utl/Symbols.h" BandConfiguration::BandConfiguration(){ for(int i = 0; i < 4; i++){ @@ -17,4 +18,15 @@ BandConfiguration::~BandConfiguration(){ for(int i = 0; i < 4; i++){ delete mXfms[i].mWay; } -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandConfiguration) + HANDLE(store_configuration, OnStoreConfiguration) + HANDLE(release_configuration, OnReleaseConfiguration) + HANDLE_ACTION(sync_play_mode, SyncPlayMode()) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x9F) +END_HANDLERS + +BEGIN_PROPSYNCS(BandConfiguration) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandConfiguration.h b/src/system/bandobj/BandConfiguration.h index 181f60e5..673e9a48 100644 --- a/src/system/bandobj/BandConfiguration.h +++ b/src/system/bandobj/BandConfiguration.h @@ -29,6 +29,11 @@ class BandConfiguration : public Hmx::Object { virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); virtual void Load(BinStream&); + void SyncPlayMode(); + + DataNode OnStoreConfiguration(DataArray*); + DataNode OnReleaseConfiguration(DataArray*); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; diff --git a/src/system/bandobj/BandCrowdMeter.cpp b/src/system/bandobj/BandCrowdMeter.cpp index 9bcb62c1..27b62133 100644 --- a/src/system/bandobj/BandCrowdMeter.cpp +++ b/src/system/bandobj/BandCrowdMeter.cpp @@ -1,16 +1,83 @@ #include "bandobj/BandCrowdMeter.h" +#include "bandobj/TrackPanelDirBase.h" +#include "utl/Symbols.h" -BandCrowdMeter::BandCrowdMeter() : unk194(0), unk198(1.0f), unk19c(0), unk1a8(2), unk1ac(0), unk1b0(this, kObjListNoNull), unk1c0(this, 0), unk1cc(this, 0), - unk1d8(this, 0), unk1e4(this, 0), unk1f0(this, 0), unk1fc(this, 0), unk210(this, 0), unk21c(this, 0), unk228(this, 0), unk234(2), unk238(this, 0), unk244(0.5f) { - for(int i = 0; i < 5; i++) unk1a0.push_back(Hmx::Color(0)); - for(int i = 0; i < 5; i++) unk248[i] = 0.5f; +BandCrowdMeter::BandCrowdMeter() : mMaxed(0), mPeakValue(1.0f), mDisabled(0), unk1a8(2), unk1ac(0), unk1b0(this, kObjListNoNull), mBandEnergyDeployTrig(this, 0), + mBandEnergyStopTrig(this, 0), mDisabledStartTrig(this, 0), mDisabledStopTrig(this, 0), mShowPeakArrowTrig(this, 0), mHidePeakArrowTrig(this, 0), + mCanJoinTrig(this, 0), mCannotJoinTrig(this, 0), mJoinInvalidTrig(this, 0), unk234(2), mCrowdMeterAnim(this, 0), mValue(0.5f) { + for(int i = 0; i < 5; i++) mLevelColors.push_back(Hmx::Color(0)); + for(int i = 0; i < 5; i++) mIconValues[i] = 0.5f; } BandCrowdMeter::~BandCrowdMeter(){ } +TrackInstrument GetTrackInstrument(Symbol); + BandCrowdMeter::IconData::IconData(BandCrowdMeter* bcm, CrowdMeterIcon* icon, RndGroup* grp) : unk0(bcm, icon), unkc(bcm, grp), unk18(0), unk19(0), unk1a(0), unk1b(0), unk1c(0), unk20(0) { -} \ No newline at end of file +} + +BEGIN_PROPSYNCS(BandCrowdMeter) + SYNC_PROP(peak_value, mPeakValue) + SYNC_PROP_MODIFY(value, mValue, SetCrowd(mValue)) + SYNC_PROP_MODIFY(icon_0_val, mIconValues[0], SetIconVal(0, mIconValues[0])) + SYNC_PROP_MODIFY(icon_1_val, mIconValues[1], SetIconVal(1, mIconValues[1])) + SYNC_PROP_MODIFY(icon_2_val, mIconValues[2], SetIconVal(2, mIconValues[2])) + SYNC_PROP_MODIFY(icon_3_val, mIconValues[3], SetIconVal(3, mIconValues[3])) + SYNC_PROP_MODIFY(icon_4_val, mIconValues[4], SetIconVal(4, mIconValues[4])) + SYNC_PROP_MODIFY(maxed, mMaxed, SetMaxed(mMaxed)) + SYNC_PROP(level_colors, mLevelColors) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS + +BEGIN_HANDLERS(BandCrowdMeter) + HANDLE_EXPR(get_peak_value, GetPeakValue()) + HANDLE_ACTION(reset_crowd_meter, Reset()) + HANDLE_EXPR(is_enabled, mDisabled == 0) + HANDLE_ACTION(update_excitement, UpdateExcitement(true)) + HANDLE_ACTION(set_player_icon_state, SetPlayerIconState(GetTrackInstrument(_msg->Sym(2)), (CrowdMeterState)_msg->Int(3))) + HANDLE_ACTION(deploy, Deploy(GetTrackInstrument(_msg->Sym(2)))) + HANDLE_ACTION(stop_deploy, StopDeploy(GetTrackInstrument(_msg->Sym(2)))) + HANDLE_ACTION(enable_player, EnablePlayer(GetTrackInstrument(_msg->Sym(2)))) + HANDLE_ACTION(disable_player, DisablePlayer(GetTrackInstrument(_msg->Sym(2)))) + HANDLE_ACTION(show_peak_arrow, ShowPeakArrow(true)) + HANDLE_ACTION(hide_peak_arrow, ShowPeakArrow(false)) + HANDLE_ACTION(reset, Reset()) + HANDLE_ACTION(worst_case, OnShowWorstCase()) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x249) +END_HANDLERS + +#pragma push +#pragma dont_inline on +void BandCrowdMeter::SyncObjects(){ + if(!mBandEnergyDeployTrig) mBandEnergyDeployTrig = Find("band_energy_deploy.trig", true); + if(!mBandEnergyStopTrig) mBandEnergyStopTrig = Find("band_energy_stop.trig", true); + if(!mDisabledStartTrig) mDisabledStartTrig = Find("disabled_start.trig", true); + if(!mDisabledStopTrig) mDisabledStopTrig = Find("disabled_stop.trig", true); + if(!mShowPeakArrowTrig) mShowPeakArrowTrig = Find("show_peak_arrow.trig", true); + if(!mHidePeakArrowTrig) mHidePeakArrowTrig = Find("hide_peak_arrow.trig", true); + if(!mCrowdMeterAnim) mCrowdMeterAnim = Find("crowd_meter.mnm", true); + if(!mCanJoinTrig) mCanJoinTrig = Find("can_join.trig", true); + if(!mCannotJoinTrig) mCannotJoinTrig = Find("cannot_join.trig", true); + if(!mJoinInvalidTrig) mJoinInvalidTrig = Find("join_invalid.trig", true); + if(mIcons.size() != 5){ + mIcons.clear(); + for(int i = 0; i < 5; i++){ + mIcons.push_back(IconData(this, Find(MakeString("icon_%1d", i), true), Find(MakeString("icon_%d.grp", i), true))); + } + } + if(mExcitementTrigs.size() != 5){ + mExcitementTrigs.clear(); + mExcitementTrigs.push_back(ObjPtr(this, Find("excitement_boot.trig", true))); + mExcitementTrigs.push_back(ObjPtr(this, Find("excitement_bad.trig", true))); + mExcitementTrigs.push_back(ObjPtr(this, Find("excitement_okay.trig", true))); + mExcitementTrigs.push_back(ObjPtr(this, Find("excitement_great.trig", true))); + mExcitementTrigs.push_back(ObjPtr(this, Find("excitement_peak.trig", true))); + } + RndDir::SyncObjects(); +} +#pragma pop \ No newline at end of file diff --git a/src/system/bandobj/BandCrowdMeter.h b/src/system/bandobj/BandCrowdMeter.h index 62b5b6ab..ad6f1347 100644 --- a/src/system/bandobj/BandCrowdMeter.h +++ b/src/system/bandobj/BandCrowdMeter.h @@ -10,6 +10,7 @@ class BandCrowdMeter : public RndDir { class IconData { public: IconData(BandCrowdMeter*, CrowdMeterIcon*, RndGroup*); + ~IconData(){} ObjPtr unk0; // 0x0 ObjPtr unkc; // 0xc @@ -35,32 +36,45 @@ class BandCrowdMeter : public RndDir { virtual void Poll(); bool Disabled() const; + void SetCrowd(float); + void SetIconVal(int, float); + void SetMaxed(bool); + float GetPeakValue(); + void Reset(); + void UpdateExcitement(bool); + void SetPlayerIconState(int, CrowdMeterState); + void Deploy(int); + void StopDeploy(int); + void EnablePlayer(int); + void DisablePlayer(int); + void ShowPeakArrow(bool); + void OnShowWorstCase(); CrowdMeterIcon* PlayerIcon(int); DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - std::vector unk18c; // 0x18c - bool unk194; // 0x194 - float unk198; // 0x198 - bool unk19c; // 0x19c - std::vector unk1a0; // 0x1a0 + std::vector mIcons; // 0x18c + bool mMaxed; // 0x194 + float mPeakValue; // 0x198 + bool mDisabled; // 0x19c + std::vector mLevelColors; // 0x1a0 int unk1a8; // 0x1a8 int unk1ac; // 0x1ac ObjPtrList unk1b0; // 0x1b0 - ObjPtr unk1c0; // 0x1c0 - ObjPtr unk1cc; // 0x1cc - ObjPtr unk1d8; // 0x1d8 - ObjPtr unk1e4; // 0x1e4 - ObjPtr unk1f0; // 0x1f0 - ObjPtr unk1fc; // 0x1fc - std::vector > unk208; // 0x208 - ObjPtr unk210; // 0x210 - ObjPtr unk21c; // 0x21c - ObjPtr unk228; // 0x228 + ObjPtr mBandEnergyDeployTrig; // 0x1c0 + ObjPtr mBandEnergyStopTrig; // 0x1cc + ObjPtr mDisabledStartTrig; // 0x1d8 + ObjPtr mDisabledStopTrig; // 0x1e4 + ObjPtr mShowPeakArrowTrig; // 0x1f0 + ObjPtr mHidePeakArrowTrig; // 0x1fc + std::vector > mExcitementTrigs; // 0x208 + ObjPtr mCanJoinTrig; // 0x210 + ObjPtr mCannotJoinTrig; // 0x21c + ObjPtr mJoinInvalidTrig; // 0x228 int unk234; // 0x234 - ObjPtr unk238; // 0x238 - float unk244; // 0x244 - float unk248[5]; // 0x248 + ObjPtr mCrowdMeterAnim; // 0x238 + float mValue; // 0x244 + float mIconValues[5]; // 0x248 }; \ No newline at end of file diff --git a/src/system/bandobj/BandFaceDeform.cpp b/src/system/bandobj/BandFaceDeform.cpp index ad14dfc9..d22cbc36 100644 --- a/src/system/bandobj/BandFaceDeform.cpp +++ b/src/system/bandobj/BandFaceDeform.cpp @@ -1,4 +1,5 @@ #include "bandobj/BandFaceDeform.h" +#include "utl/Symbols.h" BandFaceDeform::BandFaceDeform(){ @@ -6,4 +7,19 @@ BandFaceDeform::BandFaceDeform(){ BandFaceDeform::~BandFaceDeform(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandFaceDeform) + HANDLE_ACTION(set_from_meshanim, SetFromMeshAnim(_msg->Obj(2), _msg->Obj(3), 0, -1)) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x145) +END_HANDLERS + +BEGIN_CUSTOM_PROPSYNC(BandFaceDeform::DeltaArray) + SYNC_PROP_SET(verts, o.NumVerts(), ) +END_CUSTOM_PROPSYNC + +BEGIN_PROPSYNCS(BandFaceDeform) + SYNC_PROP(frames, mFrames) + SYNC_PROP_SET(size, TotalSize(), ) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandFaceDeform.h b/src/system/bandobj/BandFaceDeform.h index 67d01151..514c3506 100644 --- a/src/system/bandobj/BandFaceDeform.h +++ b/src/system/bandobj/BandFaceDeform.h @@ -1,12 +1,18 @@ #pragma once #include "obj/Object.h" +#include "rndobj/MeshAnim.h" class BandFaceDeform : public Hmx::Object { public: class DeltaArray { public: DeltaArray(); + DeltaArray(const DeltaArray&); ~DeltaArray(); + int NumVerts(); + + DeltaArray& operator=(const DeltaArray&); + int unk0; int unk4; }; @@ -21,9 +27,12 @@ class BandFaceDeform : public Hmx::Object { virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); virtual void Load(BinStream&); + int TotalSize(); + void SetFromMeshAnim(RndMeshAnim*, RndMeshAnim*, int, int); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - std::vector unk1c; // 0x1c + std::vector mFrames; // 0x1c }; \ No newline at end of file diff --git a/src/system/bandobj/BandHeadShaper.h b/src/system/bandobj/BandHeadShaper.h index f4891719..bd6699cf 100644 --- a/src/system/bandobj/BandHeadShaper.h +++ b/src/system/bandobj/BandHeadShaper.h @@ -11,6 +11,12 @@ class BandHeadShaper { BandHeadShaper(); ~BandHeadShaper(); + static int sNoseNum; + static int sMouthNum; + static int sEyeNum; + static int sShapeNum; + static int sChinNum; + RndMesh* mDst; // 0x0 ObjectDir* mHeadDir; // 0x4 RndMeshAnim* mAnim; // 0x8 diff --git a/src/system/bandobj/BandHighlight.cpp b/src/system/bandobj/BandHighlight.cpp index 9644bf4d..7ab2ce5c 100644 --- a/src/system/bandobj/BandHighlight.cpp +++ b/src/system/bandobj/BandHighlight.cpp @@ -1,4 +1,5 @@ #include "bandobj/BandHighlight.h" +#include "utl/Symbols.h" BandHighlight::BandHighlight() : unk148(0), unk154(0), unk158(0) { @@ -6,4 +7,16 @@ BandHighlight::BandHighlight() : unk148(0), unk154(0), unk158(0) { BandHighlight::~BandHighlight(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandHighlight) + HANDLE_MESSAGE(UIComponentFocusChangeMsg) + HANDLE_ACTION(register_focus, OnRegisterFocus()) + HANDLE_ACTION(unregister_focus, OnUnregisterFocus()) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0x12B) +END_HANDLERS + +BEGIN_PROPSYNCS(BandHighlight) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandHighlight.h b/src/system/bandobj/BandHighlight.h index afad984f..42bd848f 100644 --- a/src/system/bandobj/BandHighlight.h +++ b/src/system/bandobj/BandHighlight.h @@ -1,5 +1,6 @@ #pragma once #include "ui/UIComponent.h" +#include "ui/UIMessages.h" class BandHighlight : public UIComponent { public: @@ -22,6 +23,11 @@ class BandHighlight : public UIComponent { virtual void Poll(); virtual void Update(); + void OnRegisterFocus(); + void OnUnregisterFocus(); + + DataNode OnMsg(const UIComponentFocusChangeMsg&); + char filler[0x3c]; // 0x10c int unk148; // 0x148 std::vector unk14c; // 0x14c diff --git a/src/system/bandobj/BandIKEffector.cpp b/src/system/bandobj/BandIKEffector.cpp index 47d4ae78..2775694f 100644 --- a/src/system/bandobj/BandIKEffector.cpp +++ b/src/system/bandobj/BandIKEffector.cpp @@ -1,9 +1,31 @@ #include "bandobj/BandIKEffector.h" +#include "utl/Symbols.h" -BandIKEffector::BandIKEffector() : unk28(this, 0), unk34(this, 0), unk40(this, 0), unk4c(this, 0), unk58(this), unk64(this, 0) { +BandIKEffector::BandIKEffector() : mEffector(this, 0), mGround(this, 0), mMore(this, 0), mElbow(this, 0), mConstraints(this), unk64(this, 0) { } BandIKEffector::~BandIKEffector(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandIKEffector) + HANDLE_SUPERCLASS(CharWeightable) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x388) +END_HANDLERS + +BEGIN_CUSTOM_PROPSYNC(BandIKEffector::Constraint) + SYNC_PROP(target, o.mTarget) + SYNC_PROP(finger, o.mFinger) + SYNC_PROP(weight, o.mWeight) +END_CUSTOM_PROPSYNC + +BEGIN_PROPSYNCS(BandIKEffector) + SYNC_PROP(effector, mEffector) + SYNC_PROP(ground, mGround) + SYNC_PROP(more, mMore) + SYNC_PROP(elbow, mElbow) + SYNC_PROP(constraints, mConstraints) + SYNC_SUPERCLASS(CharWeightable) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandIKEffector.h b/src/system/bandobj/BandIKEffector.h index a87bacae..463f73ec 100644 --- a/src/system/bandobj/BandIKEffector.h +++ b/src/system/bandobj/BandIKEffector.h @@ -9,6 +9,11 @@ class BandIKEffector : public RndHighlightable, public CharWeightable, public Ch public: class Constraint { public: + Constraint(Hmx::Object*); + Constraint(const Constraint&); + + Constraint& operator=(const Constraint&); + ObjPtr mTarget; // 0x0 ObjPtr mFinger; // 0xc float mWeight; // 0x18 @@ -28,10 +33,10 @@ class BandIKEffector : public RndHighlightable, public CharWeightable, public Ch virtual void Load(BinStream&); virtual void SetName(const char*, ObjectDir*); - ObjPtr unk28; // 0x28 - ObjPtr unk34; // 0x34 - ObjPtr unk40; // 0x40 - ObjPtr unk4c; // 0x4c - ObjVector unk58; // 0x58 + ObjPtr mEffector; // 0x28 + ObjPtr mGround; // 0x34 + ObjPtr mMore; // 0x40 + ObjPtr mElbow; // 0x4c + ObjVector mConstraints; // 0x58 ObjPtr unk64; // 0x64 }; \ No newline at end of file diff --git a/src/system/bandobj/BandLabel.cpp b/src/system/bandobj/BandLabel.cpp index 1661f889..ab27588e 100644 --- a/src/system/bandobj/BandLabel.cpp +++ b/src/system/bandobj/BandLabel.cpp @@ -1,5 +1,6 @@ #include "bandobj/BandLabel.h" #include "ui/UI.h" +#include "utl/Symbols.h" void BandLabel::Init(){ TheUI->InitResources("BandLabel"); @@ -12,4 +13,17 @@ BandLabel::BandLabel() : UITransitionHandler(this), unk1e8(""), unk1f4(0) { BandLabel::~BandLabel(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandLabel) + HANDLE_ACTION(start_count, Count(_msg->Int(2), _msg->Int(3), _msg->Float(4), _msg->Sym(5))) + HANDLE_ACTION(finish_count, FinishCount()) + HANDLE_SUPERCLASS(UILabel) + HANDLE_CHECK(0x162) +END_HANDLERS + +BEGIN_PROPSYNCS(BandLabel) + SYNC_PROP_SET(in_anim, GetInAnim(), SetInAnim(_val.Obj(0))) + SYNC_PROP_SET(out_anim, GetOutAnim(), SetOutAnim(_val.Obj(0))) + SYNC_SUPERCLASS(UILabel) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandLeadMeter.cpp b/src/system/bandobj/BandLeadMeter.cpp index b1d3e3e9..14cf3afa 100644 --- a/src/system/bandobj/BandLeadMeter.cpp +++ b/src/system/bandobj/BandLeadMeter.cpp @@ -1,6 +1,28 @@ #include "bandobj/BandLeadMeter.h" +#include "utl/Symbols.h" -BandLeadMeter::BandLeadMeter() : unk18c(this, 0), unk198(this, 0), unk1a4(this, 0), unk1b0(this, 0), unk1bc(this, 0), unk1c8(this, 0), unk1d4(this, 0), unk1e0(this, 0), - unk1ec(this, 0), unk1f8(this, 0), unk204(10000), unk208(0) { +BandLeadMeter::BandLeadMeter() : mNeedleAnim(this, 0), mLogoGlowAnim(this, 0), mGlowMesh1(this, 0), mGlowMesh2(this, 0), mPeggedAnim1(this, 0), mPeggedAnim2(this, 0), + mLensMesh(this, 0), mLensMatNeutral(this, 0), mLensMat1(this, 0), mLensMat2(this, 0), unk204(10000), mScoreDiff(0) { SyncScores(); -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandLeadMeter) + HANDLE_ACTION(refresh, SyncScores()) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x80) +END_HANDLERS + +BEGIN_PROPSYNCS(BandLeadMeter) + SYNC_PROP_MODIFY(score_diff, mScoreDiff, SyncScores()) + SYNC_PROP(needle_anim, mNeedleAnim) + SYNC_PROP(logo_glow_anim, mLogoGlowAnim) + SYNC_PROP(glow_mesh_1, mGlowMesh1) + SYNC_PROP(glow_mesh_2, mGlowMesh2) + SYNC_PROP(pegged_anim_1, mPeggedAnim1) + SYNC_PROP(pegged_anim_2, mPeggedAnim2) + SYNC_PROP(lens_mesh, mLensMesh) + SYNC_PROP(lens_mat_neutral, mLensMatNeutral) + SYNC_PROP(lens_mat_1, mLensMat1) + SYNC_PROP(lens_mat_2, mLensMat2) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandLeadMeter.h b/src/system/bandobj/BandLeadMeter.h index 64e5e3e1..8e2f20ca 100644 --- a/src/system/bandobj/BandLeadMeter.h +++ b/src/system/bandobj/BandLeadMeter.h @@ -15,22 +15,22 @@ class BandLeadMeter : public RndDir { virtual ~BandLeadMeter(){} virtual void PreLoad(BinStream&); virtual void PostLoad(BinStream&); - virtual void SetFrame(float, float); + virtual void SetFrame(float, float){} virtual void Poll(); virtual void Enter(); void SyncScores(); - ObjPtr unk18c; // 0x18c - ObjPtr unk198; // 0x198 - ObjPtr unk1a4; // 0x1a4 - ObjPtr unk1b0; // 0x1b0 - ObjPtr unk1bc; // 0x1bc - ObjPtr unk1c8; // 0x1c8 - ObjPtr unk1d4; // 0x1d4 - ObjPtr unk1e0; // 0x1e0 - ObjPtr unk1ec; // 0x1ec - ObjPtr unk1f8; // 0x1f8 + ObjPtr mNeedleAnim; // 0x18c + ObjPtr mLogoGlowAnim; // 0x198 + ObjPtr mGlowMesh1; // 0x1a4 + ObjPtr mGlowMesh2; // 0x1b0 + ObjPtr mPeggedAnim1; // 0x1bc + ObjPtr mPeggedAnim2; // 0x1c8 + ObjPtr mLensMesh; // 0x1d4 + ObjPtr mLensMatNeutral; // 0x1e0 + ObjPtr mLensMat1; // 0x1ec + ObjPtr mLensMat2; // 0x1f8 int unk204; // 0x204 - int unk208; // 0x208 + int mScoreDiff; // 0x208 }; \ No newline at end of file diff --git a/src/system/bandobj/BandList.cpp b/src/system/bandobj/BandList.cpp index 5ac20682..66345fe0 100644 --- a/src/system/bandobj/BandList.cpp +++ b/src/system/bandobj/BandList.cpp @@ -1,10 +1,55 @@ #include "bandobj/BandList.h" +#include "ui/UIListDir.h" +#include "utl/Symbols.h" -HighlightObject::HighlightObject(Hmx::Object* o) : unk0(o, 0), unkc(0), unk10(0), unk14(0) { +HighlightObject::HighlightObject(Hmx::Object* o) : mTargetObj(o, 0), mXOffset(0), mYOffset(0), mZOffset(0) { } -BandList::BandList() : unk27c(this, 0), unk288(this, 0), unk294(this, 0), unk2a0(this, 0), unk2ac(this, 0), unk2b8(this, 0), unk2c4(0), unk2c8(0), unk2cc(0), unk2d0(0), - unk2d4(1.0f), unk2d8(0), unk2dc(0), unk2e0(1.0f), unk2e4(0), unk2e8(1), unk2ec(0), unk2f0(this) { +BandList::BandList() : mFocusAnim(this, 0), mPulseAnim(this, 0), mRevealAnim(this, 0), mConcealAnim(this, 0), mRevealSound(this, 0), mConcealSound(this, 0), + mRevealSoundDelay(0), mConcealSoundDelay(0), mRevealStartDelay(0), mRevealEntryDelay(0), mRevealScale(1.0f), mConcealStartDelay(0), mConcealEntryDelay(0), + mConcealScale(1.0f), mAutoReveal(0), unk2e8(1), unk2ec(0), mHighlightObjects(this) { -} \ No newline at end of file +} + +BandList::~BandList(){ + +} + +BEGIN_HANDLERS(BandList) + HANDLE_ACTION(reveal, Reveal()) + HANDLE_ACTION(conceal, Conceal()) + HANDLE_ACTION(conceal_now, ConcealNow()) + HANDLE_ACTION(is_animating, IsAnimating()) + HANDLE_EXPR(is_revealed, !unk2e8 && !IsAnimating()) + HANDLE_ACTION(restart_highlight_matanim, mListDir->ListEntered()) + HANDLE_SUPERCLASS(UIList) + HANDLE_CHECK(0x468) +END_HANDLERS + +BEGIN_CUSTOM_PROPSYNC(HighlightObject) + SYNC_PROP(target_object, o.mTargetObj) + SYNC_PROP(x_offset, o.mXOffset) + SYNC_PROP(y_offset, o.mYOffset) + SYNC_PROP(z_offset, o.mZOffset) +END_CUSTOM_PROPSYNC + +BEGIN_PROPSYNCS(BandList) + SYNC_PROP(focus_anim, mFocusAnim) + SYNC_PROP(pulse_anim, mPulseAnim) + SYNC_PROP(reveal_anim, mRevealAnim) + SYNC_PROP(reveal_start_delay, mRevealStartDelay) + SYNC_PROP(reveal_entry_delay, mRevealEntryDelay) + SYNC_PROP(reveal_scale, mRevealScale) + SYNC_PROP(reveal_sound, mRevealSound) + SYNC_PROP(reveal_sound_delay, mRevealSoundDelay) + SYNC_PROP(conceal_anim, mConcealAnim) + SYNC_PROP(conceal_start_delay, mConcealStartDelay) + SYNC_PROP(conceal_entry_delay, mConcealEntryDelay) + SYNC_PROP(conceal_scale, mConcealScale) + SYNC_PROP(conceal_sound, mConcealSound) + SYNC_PROP(conceal_sound_delay, mConcealSoundDelay) + SYNC_PROP(auto_reveal, mAutoReveal) + SYNC_PROP(highlight_objects, mHighlightObjects) + SYNC_SUPERCLASS(UIList) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandList.h b/src/system/bandobj/BandList.h index b310e312..cccac92a 100644 --- a/src/system/bandobj/BandList.h +++ b/src/system/bandobj/BandList.h @@ -7,10 +7,10 @@ class HighlightObject { public: HighlightObject(Hmx::Object*); - ObjPtr unk0; // 0x0 - float unkc; // 0xc - float unk10; // 0x10 - float unk14; // 0x14 + ObjPtr mTargetObj; // 0x0 + float mXOffset; // 0xc + float mYOffset; // 0x10 + float mZOffset; // 0x14 }; class BandList : public UIList { @@ -42,6 +42,12 @@ class BandList : public UIList { void ConcealNow(); void Conceal(); + void Reveal(); + bool IsAnimating(); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; int unk1e8; // 0x1e8 std::map unk1ec; // 0x1ec @@ -50,22 +56,22 @@ class BandList : public UIList { std::map unk234; // 0x234 std::map unk24c; // 0x24c std::map unk264; // 0x264 - ObjPtr unk27c; // 0x27c - ObjPtr unk288; // 0x288 - ObjPtr unk294; // 0x294 - ObjPtr unk2a0; // 0x2a0 - ObjPtr unk2ac; // 0x2ac - ObjPtr unk2b8; // 0x2b8 - float unk2c4; // 0x2c4 - float unk2c8; // 0x2c8 - float unk2cc; // 0x2cc - float unk2d0; // 0x2d0 - float unk2d4; // 0x2d4 - float unk2d8; // 0x2d8 - float unk2dc; // 0x2dc - float unk2e0; // 0x2e0 - bool unk2e4; // 0x2e4 + ObjPtr mFocusAnim; // 0x27c + ObjPtr mPulseAnim; // 0x288 + ObjPtr mRevealAnim; // 0x294 + ObjPtr mConcealAnim; // 0x2a0 + ObjPtr mRevealSound; // 0x2ac + ObjPtr mConcealSound; // 0x2b8 + float mRevealSoundDelay; // 0x2c4 + float mConcealSoundDelay; // 0x2c8 + float mRevealStartDelay; // 0x2cc + float mRevealEntryDelay; // 0x2d0 + float mRevealScale; // 0x2d4 + float mConcealStartDelay; // 0x2d8 + float mConcealEntryDelay; // 0x2dc + float mConcealScale; // 0x2e0 + bool mAutoReveal; // 0x2e4 int unk2e8; // 0x2e8 float unk2ec; // 0x2ec - ObjVector unk2f0; // 0x2f0 + ObjVector mHighlightObjects; // 0x2f0 }; \ No newline at end of file diff --git a/src/system/bandobj/BandPatchMesh.cpp b/src/system/bandobj/BandPatchMesh.cpp index af8bc8a6..b5597c3e 100644 --- a/src/system/bandobj/BandPatchMesh.cpp +++ b/src/system/bandobj/BandPatchMesh.cpp @@ -1,5 +1,23 @@ #include "bandobj/BandPatchMesh.h" +#include "utl/Symbols.h" BandPatchMesh::BandPatchMesh(Hmx::Object* o) : mMeshes(o), mRenderTo(true), mSrc(o, 0), mCategory(0) { -} \ No newline at end of file +} + +BEGIN_CUSTOM_PROPSYNC(BandPatchMesh::MeshPair::PatchPair) + SYNC_PROP(patch, o.mPatch) + SYNC_PROP(tex, o.mTex) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(BandPatchMesh::MeshPair) + SYNC_PROP(mesh, o.mMesh) + SYNC_PROP(patches, o.mPatches) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(BandPatchMesh) + SYNC_PROP(meshes, o.mMeshes) + SYNC_PROP(src, o.mSrc) + SYNC_PROP(render_to, o.mRenderTo) + SYNC_PROP(category, o.mCategory) +END_CUSTOM_PROPSYNC \ No newline at end of file diff --git a/src/system/bandobj/BandPatchMesh.h b/src/system/bandobj/BandPatchMesh.h index 30d5c59c..47ce7894 100644 --- a/src/system/bandobj/BandPatchMesh.h +++ b/src/system/bandobj/BandPatchMesh.h @@ -1,11 +1,25 @@ #pragma once #include "obj/Object.h" +#include "rndobj/Mesh.h" +#include "rndobj/Tex.h" #include "rndobj/Trans.h" class BandPatchMesh { public: class MeshPair { public: + class PatchPair { + public: + PatchPair(Hmx::Object* o) : mPatch(o, 0), mTex(o, 0) {} + + ObjPtr mPatch; // 0x0 + ObjPtr mTex; // 0xc + }; + + MeshPair(Hmx::Object* o) : mMesh(o, 0), mPatches(o) {} + + ObjPtr mMesh; // 0x0 + ObjVector mPatches; // 0xc }; BandPatchMesh(Hmx::Object*); @@ -14,4 +28,6 @@ class BandPatchMesh { bool mRenderTo; // 0xc ObjPtr mSrc; // 0x10 int mCategory; // 0x1c -}; \ No newline at end of file +}; + +bool PropSync(BandPatchMesh&, DataNode&, DataArray*, int, PropOp); \ No newline at end of file diff --git a/src/system/bandobj/BandRetargetVignette.cpp b/src/system/bandobj/BandRetargetVignette.cpp index e36ae29a..9e795beb 100644 --- a/src/system/bandobj/BandRetargetVignette.cpp +++ b/src/system/bandobj/BandRetargetVignette.cpp @@ -1,9 +1,23 @@ #include "bandobj/BandRetargetVignette.h" +#include "utl/Symbols.h" -BandRetargetVignette::BandRetargetVignette() : unk10("player0"), unk14("bone_R-hand"), unk18(this, 0) { +BandRetargetVignette::BandRetargetVignette() : mPlayer("player0"), mBone("bone_R-hand"), mProp(this, 0) { } BandRetargetVignette::~BandRetargetVignette(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandRetargetVignette) + HANDLE_SUPERCLASS(RndPollable) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0xD1) +END_HANDLERS + +BEGIN_PROPSYNCS(BandRetargetVignette) + SYNC_PROP(effectors, mEffectors) + SYNC_PROP(player, mPlayer) + SYNC_PROP(bone, mBone) + SYNC_PROP(prop, mProp) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandRetargetVignette.h b/src/system/bandobj/BandRetargetVignette.h index fe2c702b..74b6c909 100644 --- a/src/system/bandobj/BandRetargetVignette.h +++ b/src/system/bandobj/BandRetargetVignette.h @@ -22,8 +22,8 @@ class BandRetargetVignette : public RndPollable { NEW_OVERLOAD; DELETE_OVERLOAD; - std::list unk8; // 0x8 - Symbol unk10; // 0x10 - Symbol unk14; // 0x14 - ObjPtr unk18; // 0x18 + std::list mEffectors; // 0x8 + Symbol mPlayer; // 0x10 + Symbol mBone; // 0x14 + ObjPtr mProp; // 0x18 }; \ No newline at end of file diff --git a/src/system/bandobj/BandScoreboard.cpp b/src/system/bandobj/BandScoreboard.cpp index 56ea5083..4a789798 100644 --- a/src/system/bandobj/BandScoreboard.cpp +++ b/src/system/bandobj/BandScoreboard.cpp @@ -1,9 +1,23 @@ #include "bandobj/BandScoreboard.h" +#include "utl/Symbols.h" -BandScoreboard::BandScoreboard() : unk18c(-1), unk190(this, 0), unk19c(this, 0), unk1a8(this), unk1b4(this), unk1c0(this, 0) { +BandScoreboard::BandScoreboard() : mScore(-1), unk190(this, 0), unk19c(this, 0), unk1a8(this), unk1b4(this), mStarDisplay(this, 0) { } BandScoreboard::~BandScoreboard(){ -} \ No newline at end of file +} + +BEGIN_PROPSYNCS(BandScoreboard) + SYNC_PROP_SET(score, mScore, SetScore(_val.Int(0))) + SYNC_PROP_SET(num_stars, GetNumStars(), SetNumStars(_val.Float(0), true)) + SYNC_PROP(star_display, mStarDisplay) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS + +BEGIN_HANDLERS(BandScoreboard) + HANDLE_ACTION(reset, Reset()) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0xE0) +END_HANDLERS \ No newline at end of file diff --git a/src/system/bandobj/BandScoreboard.h b/src/system/bandobj/BandScoreboard.h index 677beeb2..a8af01cf 100644 --- a/src/system/bandobj/BandScoreboard.h +++ b/src/system/bandobj/BandScoreboard.h @@ -16,14 +16,19 @@ class BandScoreboard : public RndDir { virtual void PreLoad(BinStream&); virtual void PostLoad(BinStream&); + void SetScore(int); + void SetNumStars(float, bool); + float GetNumStars() const; + void Reset(); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - int unk18c; // 0x18c + int mScore; // 0x18c ObjPtr unk190; // 0x190 ObjPtr unk19c; // 0x19c ObjVector unk1a8; // 0x1a8 ObjVector unk1b4; // 0x1b4 - ObjPtr unk1c0; // 0x1c0 + ObjPtr mStarDisplay; // 0x1c0 }; \ No newline at end of file diff --git a/src/system/bandobj/BandStarDisplay.cpp b/src/system/bandobj/BandStarDisplay.cpp index 78dbddcd..ad5b7ad0 100644 --- a/src/system/bandobj/BandStarDisplay.cpp +++ b/src/system/bandobj/BandStarDisplay.cpp @@ -1,9 +1,22 @@ #include "bandobj/BandStarDisplay.h" +#include "utl/Symbols.h" -BandStarDisplay::BandStarDisplay() : unk18c(0), unk190(this), unk19c(this), unk1a8(this), unk1b4(this), unk1c0(this, 0), unk1cc(this, 0), unk1d8(this, 0), unk1e4("normal") { +BandStarDisplay::BandStarDisplay() : mNumStars(0), unk190(this), unk19c(this), unk1a8(this), unk1b4(this), unk1c0(this, 0), unk1cc(this, 0), unk1d8(this, 0), mStarType("normal") { } BandStarDisplay::~BandStarDisplay(){ -} \ No newline at end of file +} + +BEGIN_PROPSYNCS(BandStarDisplay) + SYNC_PROP_SET(num_stars, mNumStars, SetNumStars(_val.Float(0), true)) + SYNC_PROP_SET(star_type, mStarType, SetStarType(_val.Sym(0), false)) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS + +BEGIN_HANDLERS(BandStarDisplay) + HANDLE_ACTION(reset, Reset()) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x121) +END_HANDLERS \ No newline at end of file diff --git a/src/system/bandobj/BandStarDisplay.h b/src/system/bandobj/BandStarDisplay.h index 26f02f99..3f1a3c67 100644 --- a/src/system/bandobj/BandStarDisplay.h +++ b/src/system/bandobj/BandStarDisplay.h @@ -16,11 +16,15 @@ class BandStarDisplay : public RndDir { virtual void PostLoad(BinStream&); virtual void SyncObjects(); + void SetNumStars(float, bool); + void SetStarType(Symbol, bool); + void Reset(); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - float unk18c; // 0x18c + float mNumStars; // 0x18c ObjVector unk190; // 0x190 ObjVector unk19c; // 0x19c ObjVector unk1a8; // 0x1a8 @@ -28,5 +32,5 @@ class BandStarDisplay : public RndDir { ObjPtr unk1c0; // 0x1c0 ObjPtr unk1cc; // 0x1cc ObjPtr unk1d8; // 0x1d8 - Symbol unk1e4; // 0x1e4 + Symbol mStarType; // 0x1e4 }; \ No newline at end of file diff --git a/src/system/bandobj/BandSwatch.cpp b/src/system/bandobj/BandSwatch.cpp index 1091e76b..8b99b9dd 100644 --- a/src/system/bandobj/BandSwatch.cpp +++ b/src/system/bandobj/BandSwatch.cpp @@ -1,9 +1,12 @@ #include "bandobj/BandSwatch.h" #include "math/Rand.h" +#include "ui/UI.h" +#include "utl/Symbols.h" ColorPalette* BandSwatch::sDummyPalette; void BandSwatch::Init(){ + TheUI->InitResources("BandSwatch"); Register(); sDummyPalette = Hmx::Object::New(); if(TheLoadMgr.EditMode()){ @@ -17,10 +20,21 @@ void BandSwatch::Terminate(){ RELEASE(sDummyPalette); } -BandSwatch::BandSwatch() : unk1f0(this, 0) { +BandSwatch::BandSwatch() : mColorPalette(this, 0) { MILO_ASSERT(sDummyPalette, 0x30); } BandSwatch::~BandSwatch(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(BandSwatch) + HANDLE_ACTION(set_colors, SetColors(_msg->Obj(2))) + HANDLE_SUPERCLASS(UIList) + HANDLE_CHECK(0x94) +END_HANDLERS + +BEGIN_PROPSYNCS(BandSwatch) + SYNC_PROP_MODIFY_ALT(color_palette, mColorPalette, UpdateColors()) + SYNC_SUPERCLASS(UIList) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandSwatch.h b/src/system/bandobj/BandSwatch.h index 5c421c21..f2955b82 100644 --- a/src/system/bandobj/BandSwatch.h +++ b/src/system/bandobj/BandSwatch.h @@ -19,6 +19,9 @@ class BandSwatch : public UIList { virtual RndMat* Mat(int, int, UIListMesh*) const; virtual UIColor* SlotColorOverride(int, int, class UIListWidget*, UIColor* c) const; + void UpdateColors(); + void SetColors(ColorPalette*); + static void Init(); static void Register(){ REGISTER_OBJ_FACTORY(BandSwatch); @@ -31,5 +34,5 @@ class BandSwatch : public UIList { static ColorPalette* sDummyPalette; std::vector unk1e8; // 0x1e8 - ObjPtr unk1f0; // 0x1f0 + ObjPtr mColorPalette; // 0x1f0 }; \ No newline at end of file diff --git a/src/system/bandobj/BandTrack.cpp b/src/system/bandobj/BandTrack.cpp index b4c6f956..6b3fca97 100644 --- a/src/system/bandobj/BandTrack.cpp +++ b/src/system/bandobj/BandTrack.cpp @@ -7,7 +7,7 @@ INIT_REVS(BandTrack); BandTrack::BandTrack(Hmx::Object* o) : mDisabled(0), mSimulatedNet(0), mInstrument(""), unk14(4), unk18(0), unk19(0), unk1a(0), unk1b(0), unk1c(0), mInUse(0), unk1e(0), unk1f(0), mPlayerIntro(o, 0), mStarPowerMeter(o, 0), mStreakMeter(o, 0), mPopupObject(o, 0), mPlayerFeedback(o, 0), mFailedFeedback(o, 0), mUnisonIcon(o, 0), unk74(""), unk78(0), mEndgameFeedback(o, 0), unk88(0), unk8c(0), mParent(o, 0), mRetractTrig(o, 0), mResetTrig(o, 0), mDeployTrig(o, 0), mStopDeployTrig(o, 0), mIntroTrig(o, 0), unkd8(o, 0), - unke4(o, 0), unkf0(o, 0), unkfc(this, 0), unk108(1), unk109(1), unk10c(-1) { + unke4(o, 0), unkf0(o, 0), mBeatAnimsGrp(this, 0), unk108(1), unk109(1), unk10c(-1) { } @@ -259,18 +259,66 @@ void BandTrack::FillReset(){ if(trig) trig->Trigger(); } -// void __thiscall BandTrack::FillReset(BandTrack *this) +BEGIN_PROPSYNCS(BandTrack) + SYNC_PROP_MODIFY(instrument, mInstrument, SyncInstrument()) + SYNC_PROP(disabled, mDisabled) + SYNC_PROP(simulated_net, mSimulatedNet) + SYNC_PROP(player_intro, mPlayerIntro) + SYNC_PROP(star_power_meter, mStarPowerMeter) + SYNC_PROP(streak_meter, mStreakMeter) + SYNC_PROP(popup_object, mPopupObject) + SYNC_PROP(player_feedback, mPlayerFeedback) + SYNC_PROP(failed_feedback, mFailedFeedback) + SYNC_PROP(endgame_feedback, mEndgameFeedback) + SYNC_PROP(parent, mParent) + SYNC_PROP(retract_trig, mRetractTrig) + SYNC_PROP(reset_trig, mResetTrig) + SYNC_PROP(deploy_trig, mDeployTrig) + SYNC_PROP(stop_deploy_trig, mStopDeployTrig) + SYNC_PROP(intro_trig, mIntroTrig) + SYNC_PROP(in_use, mInUse) +END_PROPSYNCS -// { -// ObjectDir *this_00; -// undefined4 uVar1; -// int iVar2; - -// this_00 = (ObjectDir *)(**(code **)(*(int *)(this + 4) + 0x6c))(); -// uVar1 = ObjectDir::FindObject(this_00,s_solo_reset.trig_80bf2e8d,false); -// iVar2 = __dynamic_cast(uVar1,0,&EventTrigger::__RTTI,&Hmx::Object::__RTTI,0); -// if (iVar2 != 0) { -// (**(code **)(*(int *)(iVar2 + 4) + 0x50))(); -// } -// return; -// } \ No newline at end of file +#pragma push +#pragma dont_inline on +BEGIN_HANDLERS(BandTrack) + HANDLE_ACTION(disable_player, DisablePlayer(_msg->Int(2))) + HANDLE_ACTION(init, Init(_msg->Obj(2))) + HANDLE_ACTION(reset, Reset()) + HANDLE_ACTION(tut_reset, TutorialReset()) + HANDLE_ACTION(setup_player_intro, SetupPlayerIntro()) + HANDLE_ACTION(setup_crowd_meter, SetupCrowdMeter()) + HANDLE_ACTION(track_reset, TrackReset()) + HANDLE_ACTION(retract, Retract(false)) + HANDLE_ACTION(immediate_retract, Retract(true)) + HANDLE_ACTION(game_won, GameWon()) + HANDLE_ACTION(game_over, GameOver()) + HANDLE_ACTION(spotlight_fail, SpotlightFail(false)) + HANDLE_ACTION(spotlight_fail_guilty, SpotlightFail(true)) + HANDLE_ACTION(fill_reset, FillReset()) + HANDLE_ACTION(set_streak, SetStreak(_msg->Int(2), _msg->Int(3), _msg->Int(4), false)) + HANDLE_ACTION(enable_player, EnablePlayer()) + HANDLE_ACTION(save_player, SavePlayer()) + HANDLE_ACTION(super_streak, SuperStreak(_msg->Int(2), false)) + HANDLE_ACTION(peak_state, PeakState(_msg->Int(2), false)) + HANDLE_ACTION(deploy, Deploy()) + HANDLE_ACTION(stop_deploy, StopDeploy()) + HANDLE_ACTION(play_intro, PlayIntro()) + HANDLE_ACTION(set_multiplier, SetMultiplier(_msg->Int(2))) + HANDLE_ACTION(enter_coda, EnterCoda()) + HANDLE_ACTION(coda_blown, CodaFail(false)) + HANDLE_ACTION(coda_fail, CodaFail(true)) + HANDLE_ACTION(coda_success, CodaSuccess()) + HANDLE_ACTION(popup_help, PopupHelp(_msg->Sym(2), _msg->Int(3))) + HANDLE_ACTION(player_disabled, PlayerDisabled()) + HANDLE_ACTION(player_saved, PlayerSaved()) + HANDLE_ACTION(failed_task, FailedTask(_msg->Int(2), _msg->Int(3))) + HANDLE_EXPR(has_net_player, HasNetPlayer()) + HANDLE_EXPR(has_local_player, HasLocalPlayer()) + HANDLE_EXPR(get_player_difficulty, GetPlayerDifficulty()) + HANDLE_ACTION(set_player_local, SetPlayerLocal(_msg->Float(2))) + HANDLE_ACTION(set_tambourine, SetTambourine(_msg->Int(2))) + HANDLE_ACTION(setup_instrument, SetupInstrument()) + HANDLE_CHECK(0x5A9) +END_HANDLERS +#pragma pop \ No newline at end of file diff --git a/src/system/bandobj/BandTrack.h b/src/system/bandobj/BandTrack.h index 63abf7e2..0500cf15 100644 --- a/src/system/bandobj/BandTrack.h +++ b/src/system/bandobj/BandTrack.h @@ -23,7 +23,7 @@ class BandTrack : public virtual Hmx::Object { virtual void TrackReset(){} virtual void ResetSmashers(bool); virtual void Retract(bool); - virtual void Extend(bool); + virtual void Extend(bool){} virtual void SpotlightPhraseSuccess(); virtual void SetStreak(int, int, int, bool); virtual void Deploy(); @@ -35,25 +35,25 @@ class BandTrack : public virtual Hmx::Object { virtual void SuperStreak(bool, bool); virtual void PeakState(bool, bool); virtual void SetTambourine(bool); - virtual void SetPlayerLocal(float); + virtual void SetPlayerLocal(float){} virtual void SetHasTrackerFocus(bool); virtual ObjectDir* ThisDir(){ MILO_ASSERT(0, 0x8A); return 0; } virtual ObjectDir* ThisDir() const; // fix ptr - virtual int AsGemTrackDir(); - virtual int AsVocalTrackDir(); + virtual int AsGemTrackDir(){ return 0; } + virtual int AsVocalTrackDir(){ return 0; } virtual int AsRndDir(); virtual void RefreshStreakMeter(int, int, int); virtual void RefreshOverdrive(float, bool); - virtual void RefreshCrowdRating(float, CrowdMeterState); + virtual void RefreshCrowdRating(float, CrowdMeterState){} virtual void StartPulseAnims(float); - virtual void SetupInstrument(); + virtual void SetupInstrument(){} virtual void SetPerformanceMode(bool); - virtual void SetUsed(bool); + virtual void SetUsed(bool b){ mInUse = b; } virtual void SetInstrument(TrackInstrument); - virtual void ResetEffectSelector(); - virtual void SetupSmasherPlate(); - virtual void ReleaseSmasherPlate(); - virtual void TutorialReset(); + virtual void ResetEffectSelector(){} + virtual void SetupSmasherPlate(){} + virtual void ReleaseSmasherPlate(){} + virtual void TutorialReset(){} virtual ~BandTrack(){} void Init(Hmx::Object*); @@ -74,6 +74,18 @@ class BandTrack : public virtual Hmx::Object { void GameWon(); void GameOver(); void SpotlightFail(bool); + void SyncInstrument(); + void EnablePlayer(); + void SetMultiplier(int); + void CodaFail(bool); + void CodaSuccess(); + void PopupHelp(Symbol, bool); + void PlayerDisabled(); + void PlayerSaved(); + void FailedTask(bool, int); + bool HasNetPlayer() const; + bool HasLocalPlayer() const; + int GetPlayerDifficulty() const; DECLARE_REVS; NEW_OVERLOAD; @@ -82,7 +94,7 @@ class BandTrack : public virtual Hmx::Object { bool mDisabled; // 0x8 bool mSimulatedNet; // 0x9 Symbol mInstrument; // 0xc - unsigned int unk10; // 0x10 + int unk10; // 0x10 int unk14; // 0x14 bool unk18; // 0x18 bool unk19; // 0x19 @@ -113,7 +125,7 @@ class BandTrack : public virtual Hmx::Object { ObjPtr unkd8; // 0xd8 ObjPtr unke4; // 0xe4 ObjPtr unkf0; // 0xf0 - ObjPtr unkfc; // 0xfc + ObjPtr mBeatAnimsGrp; // 0xfc bool unk108; // 0x108 bool unk109; // 0x109 int unk10c; // 0x10c diff --git a/src/system/bandobj/BandWardrobe.cpp b/src/system/bandobj/BandWardrobe.cpp index 2af54b62..1808cb15 100644 --- a/src/system/bandobj/BandWardrobe.cpp +++ b/src/system/bandobj/BandWardrobe.cpp @@ -1,4 +1,7 @@ #include "bandobj/BandWardrobe.h" +#include "bandobj/BandCharDesc.h" +#include "obj/Utl.h" +#include "utl/Symbols.h" BandWardrobe* TheBandWardrobe; const char* gGenres[4] = { "rocker", "dramatic", "banger", "spazz" }; @@ -16,4 +19,53 @@ BandWardrobe::~BandWardrobe(){ bandwardrobe = DataNode((Hmx::Object*)0); TheBandWardrobe = 0; } -} \ No newline at end of file +} + +#pragma push +#pragma dont_inline on +BEGIN_HANDLERS(BandWardrobe) + HANDLE(find_target, OnFindTarget) + HANDLE_ACTION(start_venue_shot, StartVenueShot(_msg->Obj(2))) + HANDLE(enter_venue, OnEnterVenue) + HANDLE(unload_venue, OnUnloadVenue) + HANDLE(enter_closet, OnEnterCloset) + HANDLE(enter_vignette, OnEnterVignette) + HANDLE(select_extras, OnSelectExtras) + HANDLE(on_extra_loaded, OnExtraLoaded) + HANDLE_EXPR(chars_dir, Dir()) + HANDLE_EXPR(get_character, GetCharacter(_msg->Int(2))) + HANDLE(list_venue_anim_groups, OnListVenueAnimGroups) + HANDLE(sort_targets, OnSortTargets) + if(sym == prefabs_list) return ObjectList(BandCharDesc::GetPrefabs(), "BandCharDesc", true); + HANDLE(get_matching_dude, OnGetMatchingDude) + HANDLE(list_interest_objects, OnGetCurrentInterests) + HANDLE(enable_debug_interests, OnEnableDebugInterests) + HANDLE_ACTION(load_prefab_prefs, LoadPrefabPrefs()) + HANDLE_ACTION(sync_interests, SyncInterestObjects()) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x73A) +END_HANDLERS +#pragma pop + +BEGIN_PROPSYNCS(BandWardrobe) + SYNC_PROP(genre, mGenre) + SYNC_PROP(tempo, mTempo) + SYNC_PROP(vocal_gender, mVocalGender) + SYNC_PROP_SET(play_mode, GetPlayMode(), SetPlayMode(_val.Sym(0), 0)) + SYNC_PROP(shot_set_play_mode, mShotSetPlayMode) + SYNC_PROP(play_shot_5, mPlayShot5) + SYNC_PROP_MODIFY(player0_forced_focus, mPlayerForcedFocuses[0], SyncVignetteInterest(0)) + SYNC_PROP_MODIFY(player1_forced_focus, mPlayerForcedFocuses[1], SyncVignetteInterest(1)) + SYNC_PROP_MODIFY(player2_forced_focus, mPlayerForcedFocuses[2], SyncVignetteInterest(2)) + SYNC_PROP_MODIFY(player3_forced_focus, mPlayerForcedFocuses[3], SyncVignetteInterest(3)) + SYNC_PROP_MODIFY(player0_enable_blinks, mPlayerEnableBlinks[0], SyncEnableBlinks(0)) + SYNC_PROP_MODIFY(player1_enable_blinks, mPlayerEnableBlinks[1], SyncEnableBlinks(1)) + SYNC_PROP_MODIFY(player2_enable_blinks, mPlayerEnableBlinks[2], SyncEnableBlinks(2)) + SYNC_PROP_MODIFY(player3_enable_blinks, mPlayerEnableBlinks[3], SyncEnableBlinks(3)) + SYNC_PROP_SET(player0_force_blink, 0, if(_val.Int(0)) ForceBlink(0)) + SYNC_PROP_SET(player1_force_blink, 0, if(_val.Int(0)) ForceBlink(1)) + SYNC_PROP_SET(player2_force_blink, 0, if(_val.Int(0)) ForceBlink(2)) + SYNC_PROP_SET(player3_force_blink, 0, if(_val.Int(0)) ForceBlink(3)) + SYNC_PROP(demand_load, mDemandLoad) + SYNC_PROP(dir, mVenueDir) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandWardrobe.h b/src/system/bandobj/BandWardrobe.h index d8852b4d..51cfd14e 100644 --- a/src/system/bandobj/BandWardrobe.h +++ b/src/system/bandobj/BandWardrobe.h @@ -2,6 +2,7 @@ #include "obj/Object.h" #include "obj/Dir.h" #include "char/FileMerger.h" +#include "bandobj/BandCamShot.h" class TargetNames { public: @@ -22,6 +23,27 @@ class BandWardrobe : public virtual Hmx::Object { Symbol GetPlayMode(); void SetVenueDir(ObjectDir*); + void StartVenueShot(BandCamShot*); + ObjectDir* GetCharacter(int) const; + void LoadPrefabPrefs(); + void SyncInterestObjects(); + void SetPlayMode(Symbol, BandCamShot*); + void SyncVignetteInterest(int); + void SyncEnableBlinks(int); + void ForceBlink(int); + + DataNode OnFindTarget(DataArray*); + DataNode OnEnterVenue(DataArray*); + DataNode OnUnloadVenue(DataArray*); + DataNode OnEnterCloset(DataArray*); + DataNode OnEnterVignette(DataArray*); + DataNode OnSelectExtras(DataArray*); + DataNode OnExtraLoaded(DataArray*); + DataNode OnListVenueAnimGroups(DataArray*); + DataNode OnSortTargets(DataArray*); + DataNode OnGetMatchingDude(DataArray*); + DataNode OnGetCurrentInterests(DataArray*); + DataNode OnEnableDebugInterests(DataArray*); DECLARE_REVS; NEW_OVERLOAD; diff --git a/src/system/bandobj/CharKeyHandMidi.cpp b/src/system/bandobj/CharKeyHandMidi.cpp index 16659f1d..246ba767 100644 --- a/src/system/bandobj/CharKeyHandMidi.cpp +++ b/src/system/bandobj/CharKeyHandMidi.cpp @@ -1,9 +1,28 @@ #include "bandobj/CharKeyHandMidi.h" +#include "utl/Symbols.h" -CharKeyHandMidi::CharKeyHandMidi() : unk28(this, 0), unk34(this, 0), unk40(this, 0), unk7c(this, 0) { +CharKeyHandMidi::CharKeyHandMidi() : mIKObject(this, 0), mFirstSpot(this, 0), mSecondSpot(this, 0), unk7c(this, 0) { } CharKeyHandMidi::~CharKeyHandMidi(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(CharKeyHandMidi) + HANDLE(fingers_up, OnFingersUp) + HANDLE(fingers_down, OnFingersDown) + HANDLE_ACTION(run_test, RunTest()) + HANDLE_ACTION(end_test, EndTest()) + HANDLE_SUPERCLASS(CharWeightable) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x319) +END_HANDLERS + +BEGIN_PROPSYNCS(CharKeyHandMidi) + SYNC_PROP(ik_object, mIKObject) + SYNC_PROP(first_spot, mFirstSpot) + SYNC_PROP(second_spot, mSecondSpot) + SYNC_PROP(is_right_hand, mIsRightHand) + SYNC_SUPERCLASS(CharWeightable) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/CharKeyHandMidi.h b/src/system/bandobj/CharKeyHandMidi.h index 84d945a4..6e9ac8f6 100644 --- a/src/system/bandobj/CharKeyHandMidi.h +++ b/src/system/bandobj/CharKeyHandMidi.h @@ -21,21 +21,28 @@ class CharKeyHandMidi : public RndHighlightable, public CharWeightable, public C virtual void Enter(); virtual void SetName(const char*, ObjectDir*); + void RunTest(); + void EndTest(); + + DataNode OnFingersUp(DataArray*); + DataNode OnFingersDown(DataArray*); + + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - ObjPtr unk28; // 0x28 - ObjPtr unk34; // 0x34 - ObjPtr unk40; // 0x40 - std::vector unk4c; - std::vector unk54; - std::vector unk5c; - int unk64; - int unk68; - std::vector unk6c; - int unk74; - bool unk78; - ObjPtr unk7c; - float unk88; - bool unk8c; + ObjPtr mIKObject; // 0x28 + ObjPtr mFirstSpot; // 0x34 + ObjPtr mSecondSpot; // 0x40 + std::vector unk4c; // 0x4c + std::vector unk54; // 0x54 + std::vector unk5c; // 0x5c + int unk64; // 0x64 + int unk68; // 0x68 + std::vector unk6c; // 0x6c + int unk74; // 0x74 + bool unk78; // 0x78 + ObjPtr unk7c; // 0x7c + float unk88; // 0x88 + bool mIsRightHand; // 0x8c }; \ No newline at end of file diff --git a/src/system/bandobj/CheckboxDisplay.cpp b/src/system/bandobj/CheckboxDisplay.cpp index 62f33b60..8a5f0b23 100644 --- a/src/system/bandobj/CheckboxDisplay.cpp +++ b/src/system/bandobj/CheckboxDisplay.cpp @@ -1,9 +1,20 @@ #include "bandobj/CheckboxDisplay.h" +#include "utl/Symbols.h" -CheckboxDisplay::CheckboxDisplay() : unk110(1) { +CheckboxDisplay::CheckboxDisplay() : mChecked(1) { } CheckboxDisplay::~CheckboxDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(CheckboxDisplay) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0x87) +END_HANDLERS + +BEGIN_PROPSYNCS(CheckboxDisplay) + SYNC_PROP_SET(checked, mChecked, SetChecked(_val.Int(0))) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/CheckboxDisplay.h b/src/system/bandobj/CheckboxDisplay.h index 0b9db8b7..78e2fa2a 100644 --- a/src/system/bandobj/CheckboxDisplay.h +++ b/src/system/bandobj/CheckboxDisplay.h @@ -19,10 +19,12 @@ class CheckboxDisplay : public UIComponent { virtual void CopyMembers(const UIComponent*, CopyType); virtual void Update(); + void SetChecked(bool); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; int unk10c; // 0x10c - bool unk110; // 0x110 + bool mChecked; // 0x110 }; \ No newline at end of file diff --git a/src/system/bandobj/ChordShapeGenerator.cpp b/src/system/bandobj/ChordShapeGenerator.cpp index ea7c1a9a..c4b9ea68 100644 --- a/src/system/bandobj/ChordShapeGenerator.cpp +++ b/src/system/bandobj/ChordShapeGenerator.cpp @@ -1,13 +1,56 @@ #include "bandobj/ChordShapeGenerator.h" +#include "utl/Symbols.h" -ChordShapeGenerator::ChordShapeGenerator() : unk1c(this, 0), unk28(this, 0), unk34(this, 0), unk40(this, 0), unk4c(this, 0), unk58(6), unk6c(this, 0), - unk78(this, 0), unk84(this, 0), unk90(this, 0), unk9c(this, 0), unka8(this, 0), unkc4(0), unkc8(-1.0f), unkcc(1.0f), unkd0(0.2f) { - unkb4.resize(7); - for(int i = 0; i < 7; i++) unkb4[i] = 1.0f; - unkbc.resize(7); - for(int i = 0; i < 7; i++) unkbc[i] = 0.33f; - unk5c.resize(6); - for(int i = 0; i < 6; i++) unk5c[i] = -1; +ChordShapeGenerator::ChordShapeGenerator() : mFingerSrcMesh(this, 0), mChordSrcMesh(this, 0), mBaseXSection(this, 0), mContourXSection(this, 0), mBaseHeight(this, 0), + mNumSlots(6), mString0(this, 0), mString1(this, 0), mString2(this, 0), mString3(this, 0), mString4(this, 0), mString5(this, 0), unkc4(0), unkc8(-1.0f), unkcc(1.0f), unkd0(0.2f) { + mFretHeights.resize(7); + for(int i = 0; i < 7; i++) mFretHeights[i] = 1.0f; + mGradeDistances.resize(7); + for(int i = 0; i < 7; i++) mGradeDistances[i] = 0.33f; + mStringFrets.resize(6); + for(int i = 0; i < 6; i++) mStringFrets[i] = -1; unk64.resize(6); for(int i = 0; i < 6; i++) unk64[i] = 1; -} \ No newline at end of file +} + +BEGIN_HANDLERS(ChordShapeGenerator) + HANDLE(generate_chord_shape, OnGenerate) + HANDLE(invert_chord_shape, OnInvert) + HANDLE(set_string_fret, OnSetStringFret) + HANDLE(get_string_trans, OnGetStringTrans) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x40A) +END_HANDLERS + +BEGIN_PROPSYNCS(ChordShapeGenerator) + SYNC_PROP(chord_source_mesh, mChordSrcMesh) + SYNC_PROP(finger_source_mesh, mFingerSrcMesh) + SYNC_PROP(base_cross_section, mBaseXSection) + SYNC_PROP(contour_cross_section, mContourXSection) + SYNC_PROP(base_height, mBaseHeight) + SYNC_PROP(num_slots, mNumSlots) + SYNC_PROP(string_0_fret, mStringFrets[0]) + SYNC_PROP(string_1_fret, mStringFrets[1]) + SYNC_PROP(string_2_fret, mStringFrets[2]) + SYNC_PROP(string_3_fret, mStringFrets[3]) + SYNC_PROP(string_4_fret, mStringFrets[4]) + SYNC_PROP(string_5_fret, mStringFrets[5]) + SYNC_PROP(string_0, mString0) + SYNC_PROP(string_1, mString1) + SYNC_PROP(string_2, mString2) + SYNC_PROP(string_3, mString3) + SYNC_PROP(string_4, mString4) + SYNC_PROP(string_5, mString5) + SYNC_PROP(fret_height_1, mFretHeights[1]) + SYNC_PROP(fret_height_2, mFretHeights[2]) + SYNC_PROP(fret_height_3, mFretHeights[3]) + SYNC_PROP(fret_height_4, mFretHeights[4]) + SYNC_PROP(fret_height_5, mFretHeights[5]) + SYNC_PROP(fret_height_6, mFretHeights[6]) + SYNC_PROP(grade_distance_1, mGradeDistances[1]) + SYNC_PROP(grade_distance_2, mGradeDistances[2]) + SYNC_PROP(grade_distance_3, mGradeDistances[3]) + SYNC_PROP(grade_distance_4, mGradeDistances[4]) + SYNC_PROP(grade_distance_5, mGradeDistances[5]) + SYNC_SUPERCLASS(Hmx::Object) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/ChordShapeGenerator.h b/src/system/bandobj/ChordShapeGenerator.h index 8f96aebb..5b8740a8 100644 --- a/src/system/bandobj/ChordShapeGenerator.h +++ b/src/system/bandobj/ChordShapeGenerator.h @@ -15,22 +15,31 @@ class ChordShapeGenerator : public Hmx::Object { virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); virtual void Load(BinStream&); - ObjPtr unk1c; // 0x1c - ObjPtr unk28; // 0x28 - ObjPtr unk34; // 0x34 - ObjPtr unk40; // 0x40 - ObjPtr unk4c; // 0x4c - int unk58; // 0x58 - std::vector unk5c; // 0x5c + DataNode OnGenerate(const DataArray*); + DataNode OnInvert(const DataArray*); + DataNode OnSetStringFret(const DataArray*); + DataNode OnGetStringTrans(const DataArray*); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; + + ObjPtr mFingerSrcMesh; // 0x1c + ObjPtr mChordSrcMesh; // 0x28 + ObjPtr mBaseXSection; // 0x34 + ObjPtr mContourXSection; // 0x40 + ObjPtr mBaseHeight; // 0x4c + int mNumSlots; // 0x58 + std::vector mStringFrets; // 0x5c std::vector unk64; // 0x64 - ObjPtr unk6c; // 0x6c - ObjPtr unk78; // 0x78 - ObjPtr unk84; // 0x84 - ObjPtr unk90; // 0x90 - ObjPtr unk9c; // 0x9c - ObjPtr unka8; // 0xa8 - std::vector unkb4; // 0xb4 - std::vector unkbc; // 0xbc + ObjPtr mString0; // 0x6c + ObjPtr mString1; // 0x78 + ObjPtr mString2; // 0x84 + ObjPtr mString3; // 0x90 + ObjPtr mString4; // 0x9c + ObjPtr mString5; // 0xa8 + std::vector mFretHeights; // 0xb4 + std::vector mGradeDistances; // 0xbc int unkc4; // 0xc4 float unkc8; // 0xc8 float unkcc; // 0xcc diff --git a/src/system/bandobj/DialogDisplay.cpp b/src/system/bandobj/DialogDisplay.cpp index 3efe581b..d51ba738 100644 --- a/src/system/bandobj/DialogDisplay.cpp +++ b/src/system/bandobj/DialogDisplay.cpp @@ -1,9 +1,24 @@ #include "bandobj/DialogDisplay.h" +#include "utl/Symbols.h" -DialogDisplay::DialogDisplay() : unk8(this, 0), unk14(this, 0), unk20(this, 0) { +DialogDisplay::DialogDisplay() : mDialogLabel(this, 0), mTopBone(this, 0), mBottomBone(this, 0) { } DialogDisplay::~DialogDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(DialogDisplay) + HANDLE_SUPERCLASS(RndPollable) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x8C) +END_HANDLERS + +BEGIN_PROPSYNCS(DialogDisplay) + SYNC_PROP_SET(dialog_label, GetLabel(), SetLabel(_val.Obj(0))) + SYNC_PROP_SET(top_bone, GetTopBone(), SetTopBone(_val.Obj(0))) + SYNC_PROP_SET(bottom_bone, GetBottomBone(), SetBottomBone(_val.Obj(0))) + SYNC_SUPERCLASS(RndPollable) + SYNC_SUPERCLASS(Hmx::Object) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/DialogDisplay.h b/src/system/bandobj/DialogDisplay.h index 7b93d130..e608012b 100644 --- a/src/system/bandobj/DialogDisplay.h +++ b/src/system/bandobj/DialogDisplay.h @@ -16,11 +16,19 @@ class DialogDisplay : public RndPollable { virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); virtual void Load(BinStream&); + void SetLabel(UILabel*); + void SetTopBone(RndMesh*); + void SetBottomBone(RndMesh*); + + UILabel* GetLabel() const { return mDialogLabel.Ptr() ? mDialogLabel.Ptr() : 0; } + RndMesh* GetTopBone() const { return mTopBone.Ptr() ? mTopBone.Ptr() : 0; } + RndMesh* GetBottomBone() const { return mBottomBone.Ptr() ? mBottomBone.Ptr() : 0; } + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - ObjPtr unk8; // 0x8 - ObjPtr unk14; // 0x14 - ObjPtr unk20; // 0x20 + ObjPtr mDialogLabel; // 0x8 + ObjPtr mTopBone; // 0x14 + ObjPtr mBottomBone; // 0x20 }; \ No newline at end of file diff --git a/src/system/bandobj/EndingBonus.cpp b/src/system/bandobj/EndingBonus.cpp index e3121cf7..364fa3de 100644 --- a/src/system/bandobj/EndingBonus.cpp +++ b/src/system/bandobj/EndingBonus.cpp @@ -1,6 +1,43 @@ #include "bandobj/EndingBonus.h" +#include "utl/Symbols.h" -EndingBonus::EndingBonus() : unk18c(0), unk18d(0), unk190(0), unk194(0), unk198(this, 0), unk1b4(this, 0), unk1c0(this, 0), - unk1cc(this, 0), unk1d8(this, 0), unk1e4(this, 0), unk1f0(this, 0), unk1fc(this, 0), unk208(this, 0) { +EndingBonus::EndingBonus() : mSuppressUnisonDisplay(0), unk18d(0), mScore(0), mSucceeded(0), unk198(this, 0), mScoreLabel(this, 0), mUnisonStartTrig(this, 0), + mUnisonEndTrig(this, 0), mUnisonSucceedTrig(this, 0), mStartTrig(this, 0), mEndTrig(this, 0), mSucceedTrig(this, 0), mResetTrig(this, 0) { -} \ No newline at end of file +} + +void EndingBonus::SyncObjects(){ + RndDir::SyncObjects(); + if(!mScoreLabel) mScoreLabel = Find("score.lbl", false); + if(!mUnisonStartTrig) mUnisonStartTrig = Find("unison_start.trig", false); + if(!mUnisonEndTrig) mUnisonEndTrig = Find("unison_end.trig", false); + if(!mUnisonSucceedTrig) mUnisonSucceedTrig = Find("unison_succeed.trig", false); + if(!mStartTrig) mStartTrig = Find("start.trig", false); + if(!mEndTrig) mEndTrig = Find("end.trig", false); + if(!mSucceedTrig) mSucceedTrig = Find("succeed.trig", false); + if(!mResetTrig) mResetTrig = Find("reset.trig", false); + if(mMiniIcons.size() != 5){ + mMiniIcons.clear(); + for(int i = 0; i < 5; i++){ + mMiniIcons.push_back(MiniIconData(this, Find(MakeString("unison_icon_%d", i), true))); + } + } +} + +BEGIN_HANDLERS(EndingBonus) + HANDLE_ACTION(coda_end_script, if(!mSucceeded) Find("failure.trig", true)->Trigger(); ) + HANDLE_ACTION(start, Start(true)) + HANDLE(reset, OnReset) + HANDLE_ACTION(success, Success()) + HANDLE_ACTION(coda_end, CodaEnd()) + HANDLE_ACTION(set_score, SetScore(_msg->Int(2))) + HANDLE_ACTION(unison_end, UnisonEnd()) + HANDLE_ACTION(unison_succeed, UnisonSucceed()) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x128) +END_HANDLERS + +BEGIN_PROPSYNCS(EndingBonus) + SYNC_PROP(score, mScore) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/EndingBonus.h b/src/system/bandobj/EndingBonus.h index a9ff2637..77c90248 100644 --- a/src/system/bandobj/EndingBonus.h +++ b/src/system/bandobj/EndingBonus.h @@ -3,9 +3,21 @@ #include "rndobj/EventTrigger.h" #include "obj/Task.h" #include "bandobj/BandLabel.h" +#include "bandobj/UnisonIcon.h" class EndingBonus : public RndDir { public: + class MiniIconData { + public: + MiniIconData(EndingBonus* b, UnisonIcon* u) : mIcon(b, u), mFailed(0), mSucceeded(0), unke(0), mUsed(0) {} + + ObjPtr mIcon; // 0x0 + bool mFailed; // 0xc + bool mSucceeded; // 0xd + bool unke; // 0xe + bool mUsed; // 0xf + }; + EndingBonus(); OBJ_CLASSNAME(EndingBonus); OBJ_SET_TYPE(EndingBonus); @@ -18,19 +30,32 @@ class EndingBonus : public RndDir { virtual void PostLoad(BinStream&); virtual void SyncObjects(); - bool unk18c; // 0x18c + void Start(bool); + void Success(); + void CodaEnd(); + void SetScore(int); + void UnisonSucceed(); + void UnisonEnd(); + + DataNode OnReset(DataArray*); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; + + bool mSuppressUnisonDisplay; // 0x18c bool unk18d; // 0x18d - int unk190; // 0x190 - bool unk194; // 0x194 + int mScore; // 0x190 + bool mSucceeded; // 0x194 ObjPtr unk198; // 0x198 std::vector unk1a4; // 0x1a4 - std::vector unk1ac; // 0x1ac - ObjPtr unk1b4; // 0x1b4 - ObjPtr unk1c0; // 0x1c0 - ObjPtr unk1cc; // 0x1cc - ObjPtr unk1d8; // 0x1d8 - ObjPtr unk1e4; // 0x1e4 - ObjPtr unk1f0; // 0x1f0 - ObjPtr unk1fc; // 0x1fc - ObjPtr unk208; // 0x208 + std::vector mMiniIcons; // 0x1ac + ObjPtr mScoreLabel; // 0x1b4 + ObjPtr mUnisonStartTrig; // 0x1c0 + ObjPtr mUnisonEndTrig; // 0x1cc + ObjPtr mUnisonSucceedTrig; // 0x1d8 + ObjPtr mStartTrig; // 0x1e4 + ObjPtr mEndTrig; // 0x1f0 + ObjPtr mSucceedTrig; // 0x1fc + ObjPtr mResetTrig; // 0x208 }; \ No newline at end of file diff --git a/src/system/bandobj/GemTrackDir.cpp b/src/system/bandobj/GemTrackDir.cpp index 88fb75cd..e2323b5a 100644 --- a/src/system/bandobj/GemTrackDir.cpp +++ b/src/system/bandobj/GemTrackDir.cpp @@ -1,28 +1,30 @@ #include "bandobj/GemTrackDir.h" +#include "utl/Symbols.h" #pragma push #pragma dont_inline on -GemTrackDir::GemTrackDir() : BandTrack(this), unk484(1), unk488(-1), unk48c(-1), unk490(0), unk494(0), unk498(2.25f), unk49c(0), unk4a0(0), unk4a4(this, 0), - unk4b0(this, 0), unk4bc(this, 0), unk4c8(this, 0), unk4d4(this, 0), unk4e0(this, 0), unk4ec(this, 0), unk4f8(this, 0), unk504(this, 0), unk510(this, 0), - unk51c(this, 0), unk528(this, 0), unk534(this, 0), unk540(this, 0), unk54c(this, 0), unk558(this, 0), unk564(this, 0), unk5a8(this, 0), unk5b4(this, 0), - unk5c0(this, 0), unk5cc(this, 0), unk5d8(this, 0), unk5e4(this, 0), unk5f0(this, kObjListNoNull), unk600(this, 0), unk60c(this, 0), unk618(this, 0), - unk624(this, 0), unk630(this, 0), unk63c(this, 0), unk648(this, 0), unk654(this, 0), unk660(this, 0), unk66c(this, 0), unk678(-1.0f), unk67c(-1.0f), - unk698(0), unk6a4(0), unk6a8(this, 0), unk6e4(0), unk6e8(0), unk6e9(0), unk6ea(0), unk6ec(0x96) { +GemTrackDir::GemTrackDir() : BandTrack(this), mNumTracks(1), unk488(-1), mGemTrackDirID(-1), mKickPassCounter(0), unk494(0), mStreakMeterOffset(2.25f), mStreakMeterTilt(0), mTrackPitch(0), + mEffectSelector(this, 0), mRotater(this, 0), mSurfaceTexture(this, 0), mSurfaceMesh(this, 0), mSurfaceMat(this, 0), mTrackEnv(this, 0), mTrackMissGemsEnv(this, 0), mGameCam(this, 0), + mPeakStateOnTrig(this, 0), mPeakStateOffTrig(this, 0), mPeakStopImmediateTrig(this, 0), mBassSuperStreakOnTrig(this, 0), mBassSuperStreakOffTrig(this, 0), mBassSSOffImmediateTrig(this, 0), mKickDrummerTrig(this, 0), + mKickDrummerResetTrig(this, 0), mSpotlightPhraseSuccessTrig(this, 0), mDrumFillResetTrig(this, 0), mDrumMash2ndPassActivateAnim(this, 0), mDrumMashHitAnimGrp(this, 0), + mFillColorsGrp(this, 0), mLodAnim(this, 0), mSmasherPlate(this, 0), mGlowWidgets(this, kObjListNoNull), unk600(this, 0), unk60c(this, 0), unk618(this, 0), + unk624(this, 0), mGemWhiteMesh(this, 0), mMissOutofRangeRightTrig(this, 0), mMissOutofRangeLeftTrig(this, 0), unk654(this, 0), mKeysShiftAnim(this, 0), mKeysMashAnim(this, 0), unk678(-1.0f), unk67c(-1.0f), + mFingerShape(0), mChordLabelPosOffset(0), mChordShapeGen(this, 0), mArpShapePool(0), unk6e8(0), mFakeFingerShape(0), mCycleFakeFingerShapes(0), mRandomShapeFrameCount(0x96) { ObjPtr propAnim(this, 0); ObjPtr trig(this, 0); for(int i = 0; i < 6; i++){ - unk570.push_back(propAnim); - unk578.push_back(propAnim); - unk580.push_back(propAnim); - unk588.push_back(propAnim); - unk590.push_back(std::make_pair(trig, trig)); - unk598.push_back(std::make_pair(trig, trig)); + mGemMashAnims.push_back(propAnim); + mDrumMashAnims.push_back(propAnim); + mFillLaneAnims.push_back(propAnim); + mRGMashAnims.push_back(propAnim); + mDrumRollTrigs.push_back(std::make_pair(trig, trig)); + mTrillTrigs.push_back(std::make_pair(trig, trig)); } for(int i = 0; i < 3; i++){ - unk5a0.push_back(trig); + mFillHitTrigs.push_back(trig); } for(int i = 0; i < 5; i++){ - unk69c.push_back(0); + mFretPosOffsets.push_back(0); } DataArray* cfg = SystemConfig(); DataArray* arr = cfg->FindArray("fake_finger_shape", false); @@ -30,13 +32,173 @@ GemTrackDir::GemTrackDir() : BandTrack(this), unk484(1), unk488(-1), unk48c(-1), for(int i = 0; i < 6; i++){ unk6f0.FretDown(i, arr->Int(i + 1)); } - unk6e9 = true; - if(arr->Size() > 7) unk6ea = arr->Int(7); + mFakeFingerShape = true; + if(arr->Size() > 7) mCycleFakeFingerShapes = arr->Int(7); } } GemTrackDir::~GemTrackDir(){ - RELEASE(unk6e4); - RELEASE(unk698); + RELEASE(mArpShapePool); + RELEASE(mFingerShape); } -#pragma pop \ No newline at end of file +#pragma pop + +SAVE_OBJ(GemTrackDir, 0xBC) + +DECOMP_FORCEACTIVE(GemTrackDir, "ObjPtr_p.h", "f.Owner()", "") + +void GemTrackDir::PreLoad(BinStream& bs){ + LOAD_REVS(bs); + ASSERT_REVS(0xC, 0); +} + +void GemTrackDir::SyncFingerFeedback(){ + RndDir* outlinedir = Find("chord_shape_outline", true); + if(!mFingerShape) mFingerShape = new FingerShape(outlinedir); +} + +void GemTrackDir::SyncObjects(){ + TrackDir::SyncObjects(); + if(!mBeatAnimsGrp) mBeatAnimsGrp = Find("beat_anims.grp", false); + if(!mPeakStopImmediateTrig) mPeakStopImmediateTrig = Find("peak_stop_immediate.trig", false); + if(!mBassSSOffImmediateTrig) mBassSSOffImmediateTrig = Find("BassSuperStreak_OFF_immediate.trig", false); + if(!mTrackMissGemsEnv) mTrackMissGemsEnv = Find("track_miss_gems.env", false); + if(!mGemWhiteMesh) mGemWhiteMesh = Find("gem_white.mesh", false); + if(!mMissOutofRangeRightTrig) mMissOutofRangeRightTrig = Find("miss_outofrange_right.trig", false); + if(!mMissOutofRangeLeftTrig) mMissOutofRangeLeftTrig = Find("miss_outofrange_left.trig", false); + if(!mKeysMashAnim) mKeysMashAnim = Find("keys_mash.anim", false); + if(!mUnisonIcon) mUnisonIcon = Find("unison_icon", false); + if(!mDrumRollTrigs[1].first) mDrumRollTrigs[1].first = Find("drum_roll_start1.trig", false); + if(!mDrumRollTrigs[1].second) mDrumRollTrigs[1].second = Find("drum_roll_stop1.trig", false); + if(!mDrumRollTrigs[2].first) mDrumRollTrigs[2].first = Find("drum_roll_start2.trig", false); + if(!mDrumRollTrigs[2].second) mDrumRollTrigs[2].second = Find("drum_roll_stop2.trig", false); + if(!mDrumRollTrigs[3].first) mDrumRollTrigs[3].first = Find("drum_roll_start3.trig", false); + if(!mDrumRollTrigs[3].second) mDrumRollTrigs[3].second = Find("drum_roll_stop3.trig", false); + if(!mDrumRollTrigs[4].first) mDrumRollTrigs[4].first = Find("drum_roll_start4.trig", false); + if(!mDrumRollTrigs[4].second) mDrumRollTrigs[4].second = Find("drum_roll_stop4.trig", false); + if(!mTrillTrigs[0].first) mTrillTrigs[0].first = Find("trill_start0.trig", false); + if(!mTrillTrigs[0].second) mTrillTrigs[0].second = Find("trill_stop0.trig", false); + if(!mTrillTrigs[1].first) mTrillTrigs[1].first = Find("trill_start1.trig", false); + if(!mTrillTrigs[1].second) mTrillTrigs[1].second = Find("trill_stop1.trig", false); + if(!mTrillTrigs[2].first) mTrillTrigs[2].first = Find("trill_start2.trig", false); + if(!mTrillTrigs[2].second) mTrillTrigs[2].second = Find("trill_stop2.trig", false); + if(!mTrillTrigs[3].first) mTrillTrigs[3].first = Find("trill_start3.trig", false); + if(!mTrillTrigs[3].second) mTrillTrigs[3].second = Find("trill_stop3.trig", false); + if(!mTrillTrigs[4].first) mTrillTrigs[4].first = Find("trill_start4.trig", false); + if(!mTrillTrigs[4].second) mTrillTrigs[4].second = Find("trill_stop4.trig", false); + if(!mTrillTrigs[5].first) mTrillTrigs[5].first = Find("trill_start4.trig", false); + if(!mTrillTrigs[5].second) mTrillTrigs[5].second = Find("trill_stop4.trig", false); + if(!mKeysShiftAnim) mKeysShiftAnim = Find("keys_shift.anim", false); + if(!mChordShapeGen) mChordShapeGen = Find("RG_chord_generator", true)->Find("ChordShapeGenerator01", true); + bool b1 = true; + if(unk10 != 6 && unk10 != 5) b1 = false; + if(!mFingerShape && b1){ + SyncFingerFeedback(); + RndDir* outlinedir = Find("chord_shape_outline", true); + RndGroup* outline = outlinedir->Find("outline.grp", true); + RndGroup* smash = Find("rg_smasher_glow.grp", true); + for(int i = 0; i < 6; i++){ + RndMesh* mesh = outlinedir->Find(MakeString("gem_smasher_glow_%d.mesh", i), true); + outline->RemoveObject(mesh); + smash->AddObject(mesh, 0); + } + } + if(!mArpShapePool && b1){ + ObjectDir* arpdir = Find("arpeggio_source", true); + RndGroup* shapesgrp = Find("arpeggio_shapes.grp", true); + mArpShapePool = new ArpeggioShapePool(arpdir, shapesgrp, 15); + } +} + +#pragma push +#pragma dont_inline on +BEGIN_HANDLERS(GemTrackDir) + HANDLE_ACTION(set_pitch, SetPitch(_msg->Float(2))) + HANDLE_ACTION(set_fade, SetFade(_msg->Float(2), _msg->Float(3))) + HANDLE_ACTION(set_fov, SetFOV(_msg->Float(2))) + HANDLE_ACTION(set_cam_pos, SetCamPos(_msg->Float(2), _msg->Float(3), _msg->Float(4))) + HANDLE_ACTION(set_screen_rect_x, SetScreenRectX(_msg->Float(2))) + HANDLE_ACTION(set_track_offset, SetTrackOffset(_msg->Float(2))) + HANDLE_ACTION(set_side_angle, SetSideAngle(_msg->Float(2))) + HANDLE_ACTION(track_in, Extend(false)) + HANDLE_ACTION(track_in_now, Extend(true)) + HANDLE_ACTION(track_out, Retract(false)) + HANDLE_ACTION(track_out_now, Retract(true)) + HANDLE_ACTION(spotlight_phrase_success, SpotlightPhraseSuccess()) + HANDLE_ACTION(mash, Mash(_msg->Int(2))) + HANDLE_ACTION(crash_fill, CrashFill()) + HANDLE_EXPR(get_smasher_plate, mSmasherPlate.Ptr()) + HANDLE_ACTION(key_miss_right, KeyMissRight()) + HANDLE_ACTION(key_miss_left, KeyMissLeft()) + HANDLE(draw_sample_chord, OnDrawSampleChord) + HANDLE_ACTION(set_key_range, SetDisplayRange(_msg->Float(2))) + HANDLE_ACTION(set_key_offset, SetDisplayOffset(_msg->Float(2), false)) + HANDLE_ACTION(toggle_key_shifting, ToggleKeyShifting()) + HANDLE_SUPERCLASS(BandTrack) + HANDLE_SUPERCLASS(TrackDir) + HANDLE_CHECK(0x7B4) +END_HANDLERS +#pragma pop + +BEGIN_PROPSYNCS(GemTrackDir) + SYNC_PROP(num_tracks, mNumTracks) + SYNC_PROP(kick_pass_counter, mKickPassCounter) + SYNC_PROP(surface_texture, mSurfaceTexture) + SYNC_PROP(surface_mesh, mSurfaceMesh) + SYNC_PROP(effect_selector, mEffectSelector) + SYNC_PROP(surface_mat, mSurfaceMat) + SYNC_PROP(track_env, mTrackEnv) + SYNC_PROP(game_cam, mGameCam) + SYNC_PROP(peak_state_on_trig, mPeakStateOnTrig) + SYNC_PROP(peak_state_off_trig, mPeakStateOffTrig) + SYNC_PROP(bass_super_streak_on_trig, mBassSuperStreakOnTrig) + SYNC_PROP(bass_super_streak_off_trig, mBassSuperStreakOffTrig) + SYNC_PROP(kick_drummer_trig, mKickDrummerTrig) + SYNC_PROP(kick_drummer_reset_trig, mKickDrummerResetTrig) + SYNC_PROP(spotlight_phrase_success_trig, mSpotlightPhraseSuccessTrig) + SYNC_PROP(gem_mash_0_anim, mGemMashAnims[0]) + SYNC_PROP(gem_mash_1_anim, mGemMashAnims[1]) + SYNC_PROP(gem_mash_2_anim, mGemMashAnims[2]) + SYNC_PROP(gem_mash_3_anim, mGemMashAnims[3]) + SYNC_PROP(gem_mash_4_anim, mGemMashAnims[4]) + SYNC_PROP(drum_mash_1_anim, mDrumMashAnims[1]) + SYNC_PROP(drum_mash_2_anim, mDrumMashAnims[2]) + SYNC_PROP(drum_mash_3_anim, mDrumMashAnims[3]) + SYNC_PROP(drum_mash_4_anim, mDrumMashAnims[4]) + SYNC_PROP(fill_lane_1_anim, mFillLaneAnims[1]) + SYNC_PROP(fill_lane_2_anim, mFillLaneAnims[2]) + SYNC_PROP(fill_lane_3_anim, mFillLaneAnims[3]) + SYNC_PROP(fill_lane_4_anim, mFillLaneAnims[4]) + SYNC_PROP(real_guitar_mash_0_anim, mRGMashAnims[0]) + SYNC_PROP(real_guitar_mash_1_anim, mRGMashAnims[1]) + SYNC_PROP(real_guitar_mash_2_anim, mRGMashAnims[2]) + SYNC_PROP(real_guitar_mash_3_anim, mRGMashAnims[3]) + SYNC_PROP(real_guitar_mash_4_anim, mRGMashAnims[4]) + SYNC_PROP(real_guitar_mash_5_anim, mRGMashAnims[5]) + SYNC_PROP(fill_hit_1_trig, mFillHitTrigs[0]) + SYNC_PROP(fill_hit_2_trig, mFillHitTrigs[1]) + SYNC_PROP(fill_hit_3_trig, mFillHitTrigs[2]) + SYNC_PROP(drum_fill_reset_trig, mDrumFillResetTrig) + SYNC_PROP(drum_mash_2nd_pass_activate_anim, mDrumMash2ndPassActivateAnim) + SYNC_PROP(drum_mash_hit_anim_grp, mDrumMashHitAnimGrp) + SYNC_PROP(fill_colors_grp, mFillColorsGrp) + SYNC_PROP(rotater, mRotater) + SYNC_PROP(lod_anim, mLodAnim) + SYNC_PROP(glow_widgets, mGlowWidgets) + SYNC_PROP(streak_meter_offset, mStreakMeterOffset) + SYNC_PROP(streak_meter_tilt, mStreakMeterTilt) + SYNC_PROP(track_pitch, mTrackPitch) + SYNC_PROP(smasher_plate, mSmasherPlate) + SYNC_PROP(fret_pos_offset_0, mFretPosOffsets[0]) + SYNC_PROP(fret_pos_offset_1, mFretPosOffsets[1]) + SYNC_PROP(fret_pos_offset_2, mFretPosOffsets[2]) + SYNC_PROP(fret_pos_offset_3, mFretPosOffsets[3]) + SYNC_PROP(fret_pos_offset_4, mFretPosOffsets[4]) + SYNC_PROP(chord_label_pos_offset, mChordLabelPosOffset) + SYNC_PROP(gem_track_dir_id, mGemTrackDirID) + SYNC_PROP(fake_finger_shape, mFakeFingerShape) + SYNC_PROP(cycle_fake_finger_shapes, mCycleFakeFingerShapes) + SYNC_PROP(random_shape_frame_count, mRandomShapeFrameCount) + SYNC_SUPERCLASS(BandTrack) + SYNC_SUPERCLASS(TrackDir) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/GemTrackDir.h b/src/system/bandobj/GemTrackDir.h index b083c2d9..3dd64ff0 100644 --- a/src/system/bandobj/GemTrackDir.h +++ b/src/system/bandobj/GemTrackDir.h @@ -34,9 +34,9 @@ class GemTrackDir : public TrackDir, public BandTrack { virtual void SyncFingerFeedback(); virtual void SetDisplayRange(float); virtual void SetDisplayOffset(float, bool); - virtual int SmasherPlate(); // change return type + virtual RndDir* SmasherPlate(){ return mSmasherPlate; } virtual float GetFretPosOffset(int) const; - virtual int GetNumFretPosOffsets() const; + virtual int GetNumFretPosOffsets() const { return mFretPosOffsets.size(); } virtual float GetCurrentChordLabelPosOffset() const; virtual int PrepareChordMesh(unsigned int); virtual int GetChordMesh(unsigned int, bool); @@ -44,7 +44,7 @@ class GemTrackDir : public TrackDir, public BandTrack { virtual void ClearChordMeshRefCounts(); virtual void DeleteUnusedChordMeshes(); virtual void AddChordImpl(RndMesh*, TrackWidget*, TrackWidget*, TrackWidget*, float, const std::vector&, class String); - virtual int GetArpeggioShapePool(); + virtual ArpeggioShapePool* GetArpeggioShapePool(){ return mArpShapePool; } virtual bool IsBlackKey(int) const; virtual void KeyMissLeft(); virtual void KeyMissRight(); @@ -62,12 +62,12 @@ class GemTrackDir : public TrackDir, public BandTrack { virtual void EnterCoda(); virtual void DisablePlayer(int); virtual void SetPlayerLocal(float); - virtual ObjectDir* ThisDir(); - virtual ObjectDir* ThisDir() const; // fix ptr + virtual ObjectDir* ThisDir(){} + virtual ObjectDir* ThisDir() const {} virtual void RefreshStreakMeter(int, int, int); virtual void SpotlightPhraseSuccess(); - virtual int AsGemTrackDir(); - virtual int AsRndDir(); + virtual int AsGemTrackDir(){} + virtual int AsRndDir(){ return AsGemTrackDir(); } virtual void SetPerformanceMode(bool); virtual void SetInstrument(TrackInstrument); virtual void SetupInstrument(); @@ -75,74 +75,87 @@ class GemTrackDir : public TrackDir, public BandTrack { virtual void SetupSmasherPlate(); virtual void ReleaseSmasherPlate(); + void SetPitch(float); + void SetFade(float, float); + void SetFOV(float); + void SetCamPos(float, float, float); + void SetScreenRectX(float); + void SetTrackOffset(float); + void SetSideAngle(float); + void Mash(int); + void CrashFill(); + void ToggleKeyShifting(); + + DataNode OnDrawSampleChord(DataArray*); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - int unk484; // 0x484 + int mNumTracks; // 0x484 int unk488; // 0x488 - int unk48c; // 0x48c - int unk490; // 0x490 + int mGemTrackDirID; // 0x48c + int mKickPassCounter; // 0x490 int unk494; // 0x494 - float unk498; // 0x498 - float unk49c; // 0x49c - float unk4a0; // 0x4a0 - ObjPtr unk4a4; // 0x4a4 - ObjPtr unk4b0; // 0x4b0 - ObjPtr unk4bc; // 0x4bc - ObjPtr unk4c8; // 0x4c8 - ObjPtr unk4d4; // 0x4d4 - ObjPtr unk4e0; // 0x4e0 - ObjPtr unk4ec; // 0x4ec - ObjPtr unk4f8; // 0x4f8 - ObjPtr unk504; // 0x504 - ObjPtr unk510; // 0x510 - ObjPtr unk51c; // 0x51c - ObjPtr unk528; // 0x528 - ObjPtr unk534; // 0x534 - ObjPtr unk540; // 0x540 - ObjPtr unk54c; // 0x54c - ObjPtr unk558; // 0x558 - ObjPtr unk564; // 0x564 - std::vector > unk570; // 0x570 - std::vector > unk578; // 0x578 - std::vector > unk580; // 0x580 - std::vector > unk588; // 0x588 - std::vector, ObjPtr > > unk590; // 0x590 - std::vector, ObjPtr > > unk598; // 0x598 - std::vector > unk5a0; // 0x5a0 - ObjPtr unk5a8; // 0x5a8 - ObjPtr unk5b4; // 0x5b4 - ObjPtr unk5c0; // 0x5c0 - ObjPtr unk5cc; // 0x5cc - ObjPtr unk5d8; // 0x5d8 - ObjPtr unk5e4; // 0x5e4 - ObjPtrList unk5f0; // 0x5f0 + float mStreakMeterOffset; // 0x498 + float mStreakMeterTilt; // 0x49c + float mTrackPitch; // 0x4a0 + ObjPtr mEffectSelector; // 0x4a4 + ObjPtr mRotater; // 0x4b0 + ObjPtr mSurfaceTexture; // 0x4bc + ObjPtr mSurfaceMesh; // 0x4c8 + ObjPtr mSurfaceMat; // 0x4d4 + ObjPtr mTrackEnv; // 0x4e0 + ObjPtr mTrackMissGemsEnv; // 0x4ec + ObjPtr mGameCam; // 0x4f8 + ObjPtr mPeakStateOnTrig; // 0x504 + ObjPtr mPeakStateOffTrig; // 0x510 + ObjPtr mPeakStopImmediateTrig; // 0x51c + ObjPtr mBassSuperStreakOnTrig; // 0x528 + ObjPtr mBassSuperStreakOffTrig; // 0x534 + ObjPtr mBassSSOffImmediateTrig; // 0x540 + ObjPtr mKickDrummerTrig; // 0x54c + ObjPtr mKickDrummerResetTrig; // 0x558 + ObjPtr mSpotlightPhraseSuccessTrig; // 0x564 + std::vector > mGemMashAnims; // 0x570 + std::vector > mDrumMashAnims; // 0x578 + std::vector > mFillLaneAnims; // 0x580 + std::vector > mRGMashAnims; // 0x588 + std::vector, ObjPtr > > mDrumRollTrigs; // 0x590 + std::vector, ObjPtr > > mTrillTrigs; // 0x598 + std::vector > mFillHitTrigs; // 0x5a0 + ObjPtr mDrumFillResetTrig; // 0x5a8 + ObjPtr mDrumMash2ndPassActivateAnim; // 0x5b4 + ObjPtr mDrumMashHitAnimGrp; // 0x5c0 + ObjPtr mFillColorsGrp; // 0x5cc + ObjPtr mLodAnim; // 0x5d8 + ObjPtr mSmasherPlate; // 0x5e4 + ObjPtrList mGlowWidgets; // 0x5f0 ObjPtr unk600; // 0x600 ObjPtr unk60c; // 0x60c ObjPtr unk618; // 0x618 ObjPtr unk624; // 0x624 - ObjPtr unk630; // 0x630 - ObjPtr unk63c; // 0x63c - ObjPtr unk648; // 0x648 + ObjPtr mGemWhiteMesh; // 0x630 + ObjPtr mMissOutofRangeRightTrig; // 0x63c + ObjPtr mMissOutofRangeLeftTrig; // 0x648 ObjPtr unk654; // 0x654 - ObjPtr unk660; // 0x660 - ObjPtr unk66c; // 0x66c + ObjPtr mKeysShiftAnim; // 0x660 + ObjPtr mKeysMashAnim; // 0x66c float unk678; // 0x678 float unk67c; // 0x67c std::vector unk680; // 0x680 std::vector unk688; // 0x688 std::vector unk690; // 0x690 - FingerShape* unk698; // 0x698 - std::vector unk69c; // 0x69c - float unk6a4; // 0x6a4 - ObjPtr unk6a8; // 0x6a8 + FingerShape* mFingerShape; // 0x698 + std::vector mFretPosOffsets; // 0x69c + float mChordLabelPosOffset; // 0x6a4 + ObjPtr mChordShapeGen; // 0x6a8 std::map > unk6b4; // 0x6b4 std::map > unk6cc; // 0x6cc - ArpeggioShapePool* unk6e4; // 0x6e4 + ArpeggioShapePool* mArpShapePool; // 0x6e4 bool unk6e8; // 0x6e8 - bool unk6e9; // 0x6e9 - bool unk6ea; // 0x6ea - int unk6ec; // 0x6ec + bool mFakeFingerShape; // 0x6e9 + bool mCycleFakeFingerShapes; // 0x6ea + int mRandomShapeFrameCount; // 0x6ec RGState unk6f0; // 0x6f0 }; \ No newline at end of file diff --git a/src/system/bandobj/InstrumentDifficultyDisplay.cpp b/src/system/bandobj/InstrumentDifficultyDisplay.cpp index 9356e668..2712e70a 100644 --- a/src/system/bandobj/InstrumentDifficultyDisplay.cpp +++ b/src/system/bandobj/InstrumentDifficultyDisplay.cpp @@ -1,16 +1,34 @@ #include "bandobj/InstrumentDifficultyDisplay.h" #include "ui/UI.h" +#include "utl/Symbols.h" void InstrumentDifficultyDisplay::Init(){ Register(); TheUI->InitResources("InstrumentDifficultyDisplay"); } -InstrumentDifficultyDisplay::InstrumentDifficultyDisplay() : unk10c(0), unk114(0), unk118(0), unk11c(0), unk124(1), unk128(1), unk12c(3), unk130(0), unk134("band"), unk138(this, 0) { +InstrumentDifficultyDisplay::InstrumentDifficultyDisplay() : unk10c(0), unk114(0), unk118(0), unk11c(0), mInstrumentState(kName), mHasPart(1), + mDifficulty(3), mNumVocalParts(0), mInstrumentType("band"), mInstrumentColorOverride(this, 0) { unk120 = Hmx::Object::New(); unk110 = Hmx::Object::New(); } InstrumentDifficultyDisplay::~InstrumentDifficultyDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(InstrumentDifficultyDisplay) + HANDLE_ACTION(set_values, SetValues(_msg->Sym(2), _msg->Int(3), _msg->Int(4), _msg->Int(5))) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0x11B) +END_HANDLERS + +BEGIN_PROPSYNCS(InstrumentDifficultyDisplay) + SYNC_PROP_MODIFY(difficulty, mDifficulty, UpdateDisplay()) + SYNC_PROP_MODIFY(instrument_type, mInstrumentType, UpdateDisplay()) + SYNC_PROP_MODIFY(num_vocal_parts, mNumVocalParts, UpdateDisplay()) + SYNC_PROP_MODIFY(has_part, mHasPart, UpdateDisplay()) + SYNC_PROP_SET(instrument_state, mInstrumentState, SetInstrumentState((InstrumentState)_val.Int(0))) + SYNC_PROP(instrument_color_override, mInstrumentColorOverride) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/InstrumentDifficultyDisplay.h b/src/system/bandobj/InstrumentDifficultyDisplay.h index 11cfdfd1..e533764c 100644 --- a/src/system/bandobj/InstrumentDifficultyDisplay.h +++ b/src/system/bandobj/InstrumentDifficultyDisplay.h @@ -6,6 +6,12 @@ class InstrumentDifficultyDisplay : public UIComponent { public: + enum InstrumentState { + kHidden, + kName, + kIcon + }; + InstrumentDifficultyDisplay(); OBJ_CLASSNAME(InstrumentDifficultyDisplay); OBJ_SET_TYPE(InstrumentDifficultyDisplay); @@ -20,6 +26,10 @@ class InstrumentDifficultyDisplay : public UIComponent { virtual void PostLoad(BinStream&); virtual void Update(); + void SetValues(Symbol, int, int, bool); + void UpdateDisplay(); + void SetInstrumentState(InstrumentState); + static void Init(); static void Register(){ REGISTER_OBJ_FACTORY(InstrumentDifficultyDisplay); @@ -35,10 +45,10 @@ class InstrumentDifficultyDisplay : public UIComponent { int unk118; // 0x118 int unk11c; // 0x11c BandLabel* unk120; // 0x120 - int unk124; // 0x124 - bool unk128; // 0x128 - int unk12c; // 0x12c - int unk130; // 0x130 - Symbol unk134; // 0x134 - ObjPtr unk138; // 0x138 + InstrumentState mInstrumentState; // 0x124 + bool mHasPart; // 0x128 + int mDifficulty; // 0x12c + int mNumVocalParts; // 0x130 + Symbol mInstrumentType; // 0x134 + ObjPtr mInstrumentColorOverride; // 0x138 }; \ No newline at end of file diff --git a/src/system/bandobj/LayerDir.cpp b/src/system/bandobj/LayerDir.cpp index 52435d03..87af0b76 100644 --- a/src/system/bandobj/LayerDir.cpp +++ b/src/system/bandobj/LayerDir.cpp @@ -1,5 +1,40 @@ #include "bandobj/LayerDir.h" +#include "utl/Symbols.h" -LayerDir::LayerDir() : unk18c(this), unk198(0) { +LayerDir* gLayerDirOwner; + +LayerDir::LayerDir() : mLayers(this), mUseFreeCam(0) { -} \ No newline at end of file +} + +BEGIN_CUSTOM_PROPSYNC(LayerDir::Layer) + SYNC_PROP(name, o.mName) + SYNC_PROP_MODIFY_ALT(mat, o.mMat, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP_MODIFY_ALT(bitmap, o.mBitmap, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP_MODIFY_ALT(active, o.mActive, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP_MODIFY_ALT(color, o.mColor, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP_MODIFY_ALT(color_idx, o.mColorIdx, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP_MODIFY_ALT(alpha, o.mAlpha, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP_MODIFY_ALT(proxy, o.mProxy, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP(layer_optional, o.mLayerOptional) + SYNC_PROP(allow_color, o.mAllowColor) + SYNC_PROP_MODIFY_ALT(color_palette, o.mColorPalette, gLayerDirOwner->RefreshLayer(o, false)) + SYNC_PROP(allow_alpha, o.mAllowAlpha) + SYNC_PROP(alpha_min, o.mAlphaMin) + SYNC_PROP(alpha_max, o.mAlphaMax) + SYNC_PROP(bitmap_list, o.mBitmapList) +END_CUSTOM_PROPSYNC + +BEGIN_PROPSYNCS(LayerDir) + gLayerDirOwner = this; + SYNC_SUPERCLASS(RndDir) + SYNC_PROP(layers, mLayers) + SYNC_PROP(use_free_cam, mUseFreeCam) +END_PROPSYNCS + +BEGIN_HANDLERS(LayerDir) + HANDLE_SUPERCLASS(RndDir) + HANDLE(get_bitmap_list, GetBitmapList) + HANDLE(randomize_colors, RandomizeColors) + HANDLE_CHECK(0x12E) +END_HANDLERS \ No newline at end of file diff --git a/src/system/bandobj/LayerDir.h b/src/system/bandobj/LayerDir.h index 7e8d47a2..6a3dea4e 100644 --- a/src/system/bandobj/LayerDir.h +++ b/src/system/bandobj/LayerDir.h @@ -1,8 +1,32 @@ #pragma once #include "rndobj/Dir.h" +#include "rndobj/Mat.h" class LayerDir : public RndDir { public: + class Layer { + public: + Layer(Hmx::Object* o) : mName(""), mMat(o, 0), mActive(1), mColorIdx(0), mAlpha(1.0f), mBitmap(""), unk40(""), + mLayerOptional(0), mAllowColor(1), mColorPalette(o, 0), mAllowAlpha(0), mAlphaMin(0.0f), mAlphaMax(1.0f), mProxy(o, 0) {} + + String mName; // 0x0 + ObjPtr mMat; // 0xc + bool mActive; // 0x18 + Hmx::Color mColor; // 0x1c + int mColorIdx; // 0x20 + float mAlpha; // 0x30 + String mBitmap; // 0x34 + FilePath unk40; // 0x40 + bool mLayerOptional; // 0x4c + bool mAllowColor; // 0x4d + ObjPtr mColorPalette; // 0x50 + bool mAllowAlpha; // 0x5c + float mAlphaMin; // 0x60 + float mAlphaMax; // 0x64 + std::vector mBitmapList; // 0x68 + ObjPtr mProxy; // 0x70 + }; + LayerDir(); OBJ_CLASSNAME(LayerDir); OBJ_SET_TYPE(LayerDir); @@ -16,6 +40,15 @@ class LayerDir : public RndDir { virtual void DrawShowing(); virtual RndCam* CamOverride(); - ObjList unk18c; // 0x18c - bool unk198; // 0x198 + void RefreshLayer(Layer&, bool); + + DataNode GetBitmapList(DataArray*); + DataNode RandomizeColors(DataArray*); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; + + ObjList mLayers; // 0x18c + bool mUseFreeCam; // 0x198 }; \ No newline at end of file diff --git a/src/system/bandobj/MeterDisplay.cpp b/src/system/bandobj/MeterDisplay.cpp index 24070079..a9a615be 100644 --- a/src/system/bandobj/MeterDisplay.cpp +++ b/src/system/bandobj/MeterDisplay.cpp @@ -1,9 +1,28 @@ #include "bandobj/MeterDisplay.h" +#include "utl/Symbols.h" -MeterDisplay::MeterDisplay() : unk10c(0), unk110(0), unk114(0), unk118(-1), unk11c(0), unk120(0), unk121(0), unk122(0), unk124(gNullStr), unk128(0), unk12c(0) { +MeterDisplay::MeterDisplay() : unk10c(0), mAnimPeriod(0), unk114(0), unk118(-1), unk11c(0), mShowText(0), mPercentageText(0), mHideDenominator(0), + mWrapperText(gNullStr), mCurrentValue(0), mMaxValue(0) { } MeterDisplay::~MeterDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(MeterDisplay) + HANDLE_ACTION(animate_to_value, AnimateToValue(_msg->Int(2), _msg->Int(3))) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0x14C) +END_HANDLERS + +BEGIN_PROPSYNCS(MeterDisplay) + SYNC_PROP_MODIFY(show_text, mShowText, UpdateDisplay()) + SYNC_PROP_MODIFY(percentage_text, mPercentageText, UpdateDisplay()) + SYNC_PROP_MODIFY(hide_denominator, mHideDenominator, UpdateDisplay()) + SYNC_PROP_MODIFY(wrapper_text, mWrapperText, UpdateDisplay()) + SYNC_PROP_MODIFY(current_value, mCurrentValue, UpdateDisplay()) + SYNC_PROP_MODIFY(max_value, mMaxValue, UpdateDisplay()) + SYNC_PROP(anim_period, mAnimPeriod) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/MeterDisplay.h b/src/system/bandobj/MeterDisplay.h index f153ccdd..e2028a4a 100644 --- a/src/system/bandobj/MeterDisplay.h +++ b/src/system/bandobj/MeterDisplay.h @@ -19,19 +19,22 @@ class MeterDisplay : public UIComponent { virtual void Poll(); virtual void Update(); + void AnimateToValue(int, int); + void UpdateDisplay(); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; int unk10c; // 0x10c - float unk110; // 0x110 + float mAnimPeriod; // 0x110 float unk114; // 0x114 int unk118; // 0x118 int unk11c; // 0x11c - bool unk120; // 0x120 - bool unk121; // 0x121 - bool unk122; // 0x122 - Symbol unk124; // 0x124 - int unk128; // 0x128 - int unk12c; // 0x12c + bool mShowText; // 0x120 + bool mPercentageText; // 0x121 + bool mHideDenominator; // 0x122 + Symbol mWrapperText; // 0x124 + int mCurrentValue; // 0x128 + int mMaxValue; // 0x12c }; \ No newline at end of file diff --git a/src/system/bandobj/MicInputArrow.cpp b/src/system/bandobj/MicInputArrow.cpp index b709dbeb..09a9527f 100644 --- a/src/system/bandobj/MicInputArrow.cpp +++ b/src/system/bandobj/MicInputArrow.cpp @@ -1,6 +1,10 @@ #include "bandobj/MicInputArrow.h" +#include "synth/MicManagerInterface.h" +#include "utl/Symbols.h" -MicInputArrow::MicInputArrow() : unk10c(0), unk110(0), unk15c(1.0f), unk160(0) { +MicClientID sNullMicClientID(-1, -1); + +MicInputArrow::MicInputArrow() : mArrowNum(0), mMicManagerInterface(0), unk15c(1.0f), unk160(0) { for(int i = 0; i < 3; i++){ unk114.push_back(-1); unk11c.push_back(true); @@ -8,5 +12,17 @@ MicInputArrow::MicInputArrow() : unk10c(0), unk110(0), unk15c(1.0f), unk160(0) { } } - // std::vector unk114; // 0x114 - // std::vector unk11c; // 0x11c \ No newline at end of file +BEGIN_HANDLERS(MicInputArrow) + HANDLE_ACTION(set_mic_mgr, SetMicMgr(_msg->Obj(0))) + HANDLE_ACTION(set_mic_connected, SetMicConnected(_msg->Int(2), _msg->Int(3))) + HANDLE_ACTION(set_mic_extended, SetMicExtended(_msg->Int(2))) + HANDLE_ACTION(set_mic_preview, SetMicPreview(_msg->Int(2))) + HANDLE_ACTION(set_mic_hidden, SetMicHidden(_msg->Int(2))) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0x10B) +END_HANDLERS + +BEGIN_PROPSYNCS(MicInputArrow) + SYNC_PROP(arrow_num, mArrowNum) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/MicInputArrow.h b/src/system/bandobj/MicInputArrow.h index 68442b93..3ef7a834 100644 --- a/src/system/bandobj/MicInputArrow.h +++ b/src/system/bandobj/MicInputArrow.h @@ -1,6 +1,8 @@ #pragma once #include "ui/UIComponent.h" +class MicManagerInterface; + class MicInputArrow : public UIComponent { public: MicInputArrow(); @@ -17,8 +19,14 @@ class MicInputArrow : public UIComponent { virtual void PostLoad(BinStream&); virtual void Update(); - int unk10c; // 0x10c - int unk110; // 0x110 + void SetMicMgr(MicManagerInterface*); + void SetMicConnected(bool, int); + void SetMicExtended(int); + void SetMicPreview(int); + void SetMicHidden(int); + + int mArrowNum; // 0x10c + MicManagerInterface* mMicManagerInterface; // 0x110 std::vector unk114; // 0x114 std::vector unk11c; // 0x11c std::vector unk124; // 0x124 diff --git a/src/system/bandobj/OutfitConfig.cpp b/src/system/bandobj/OutfitConfig.cpp index 8f752d6a..4624815e 100644 --- a/src/system/bandobj/OutfitConfig.cpp +++ b/src/system/bandobj/OutfitConfig.cpp @@ -1,6 +1,84 @@ #include "bandobj/OutfitConfig.h" +#include "utl/Symbols.h" + +OutfitConfig* gOutfitConfigOwner; OutfitConfig::OutfitConfig() : mMats(this), unk38(0), unk3c(0), mComputeAO(1), mPatches(this), mPermaProject(0), mPiercings(this), mTexBlender(this, 0), mWrinkleBlender(this, 0), mOverlays(this), mBandLogo(this, 0) { for(int i = 0; i < 3; i++) mColors[i] = i; -} \ No newline at end of file +} + +BEGIN_HANDLERS(OutfitConfig) + HANDLE_ACTION(recompose, Recompose()) + HANDLE_ACTION(randomize_colors, Randomize()) + HANDLE_EXPR(num_color_options, NumColorOptions()) + HANDLE_ACTION(compress_textures, CompressTextures()) + HANDLE_SUPERCLASS(RndDrawable) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0xB3C) +END_HANDLERS + +BEGIN_CUSTOM_PROPSYNC(OutfitConfig::Piercing::Piece) + SYNC_PROP(attachment, o.mAttachment) + SYNC_PROP(highlight, o.mHighlight) + SYNC_PROP(vert, o.mVert) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(OutfitConfig::Piercing) + SYNC_PROP(piercing, o.mPiercing) + SYNC_PROP(reskin, o.mReskin) + SYNC_PROP(pieces, o.mPieces) +END_CUSTOM_PROPSYNC + +void PropSyncTwoColor(OutfitConfig::MatSwap& swap){ + swap.SyncTwoColor(); + gOutfitConfigOwner->Recompose(); +} + +BEGIN_CUSTOM_PROPSYNC(OutfitConfig::MatSwap) + SYNC_PROP_MODIFY_ALT(mat, o.mMat, gOutfitConfigOwner->Recompose()) + SYNC_PROP_MODIFY_ALT(resource_mat, o.mResourceMat, gOutfitConfigOwner->Recompose()) + SYNC_PROP_MODIFY_ALT(two_color_diffuse, o.mTwoColorDiffuse, PropSyncTwoColor(o)) + SYNC_PROP_MODIFY_ALT(two_color_interp, o.mTwoColorInterp, PropSyncTwoColor(o)) + SYNC_PROP_MODIFY_ALT(two_color_mask, o.mTwoColorMask, PropSyncTwoColor(o)) + SYNC_PROP_MODIFY_ALT(color1_palette, o.mColor1Palette, gOutfitConfigOwner->Recompose()) + SYNC_PROP_MODIFY_ALT(color1_option, o.mColor1Option, gOutfitConfigOwner->Recompose()) + SYNC_PROP_MODIFY_ALT(color2_palette, o.mColor2Palette, gOutfitConfigOwner->Recompose()) + SYNC_PROP_MODIFY_ALT(color2_option, o.mColor2Option, gOutfitConfigOwner->Recompose()) + SYNC_PROP_MODIFY_ALT(textures, o.mTextures, gOutfitConfigOwner->Recompose()) + SYNC_PROP(two_color, o.mTwoColor) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(OutfitConfig::MeshAO::Seam) + SYNC_PROP(index, o.mIndex) + SYNC_PROP(coeff, o.mCoeff) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(OutfitConfig::MeshAO) + SYNC_PROP(meshname, o.mMeshName) + SYNC_PROP(coeffs, o.mCoeffs) + SYNC_PROP(seams, o.mSeams) +END_CUSTOM_PROPSYNC + +BEGIN_CUSTOM_PROPSYNC(OutfitConfig::Overlay) + SYNC_PROP(category, o.mCategory) + SYNC_PROP(texture, o.mTexture) +END_CUSTOM_PROPSYNC + +BEGIN_PROPSYNCS(OutfitConfig) + gOutfitConfigOwner = this; + SYNC_PROP_MODIFY_ALT(primary_color, mColors[0], Recompose()) + SYNC_PROP_MODIFY_ALT(secondary_color, mColors[1], Recompose()) + SYNC_PROP_MODIFY_ALT(tertiary_color, mColors[2], Recompose()) + SYNC_PROP(mats, mMats) + SYNC_PROP(meshao, mMeshAO) + SYNC_PROP(compute_ao, mComputeAO) + SYNC_PROP(patches, mPatches) + SYNC_PROP(perma_project, mPermaProject) + SYNC_PROP(piercings, mPiercings) + SYNC_PROP(overlays, mOverlays) + SYNC_PROP(tex_blender, mTexBlender) + SYNC_PROP(wrinkle_blender, mWrinkleBlender) + SYNC_PROP(band_logo, mBandLogo) + SYNC_SUPERCLASS(RndDrawable) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/OutfitConfig.h b/src/system/bandobj/OutfitConfig.h index cde99a76..89fcd323 100644 --- a/src/system/bandobj/OutfitConfig.h +++ b/src/system/bandobj/OutfitConfig.h @@ -4,23 +4,68 @@ #include "rndobj/TexBlender.h" #include "bandobj/BandPatchMesh.h" #include "math/SHA1.h" +#include "world/ColorPalette.h" class OutfitConfig : public RndDrawable { public: - class MatSwap { + class Piercing { public: + class Piece { + public: + Piece(Hmx::Object* o) : mAttachment(o, 0), mHighlight(0), mVert(-1) {} + + ObjPtr mAttachment; // 0x0 + bool mHighlight; // 0xc + int mVert; // 0x10 + std::vector unk14; // 0x14 + }; + + Piercing(Hmx::Object*); + + ObjPtr mPiercing; // 0x0 + Transform unkc; // 0xc + bool mReskin; // 0x3c + ObjVector mPieces; // 0x40 }; - class MeshAO { + class MatSwap { public: + MatSwap(Hmx::Object*); + void SyncTwoColor(); + + ObjPtr mMat; // 0x0 + ObjPtr mResourceMat; // 0xc + ObjPtr mTwoColorDiffuse; // 0x18 + ObjPtr mTwoColorInterp; // 0x24 + ObjPtr mTwoColorMask; // 0x30 + ObjPtr mColor1Palette; // 0x3c + int mColor1Option; // 0x48 + ObjPtr mColor2Palette; // 0x4c + int mColor2Option; // 0x58 + ObjVector > mTextures; // 0x5c + bool mTwoColor; // 0x68 }; - class Piercing { + class MeshAO { public: + class Seam { + public: + int mIndex; // 0x0 + int mCoeff; // 0x4 + }; + + String mMeshName; // 0x0 + String unkc; // 0xc + std::vector mCoeffs; // 0x18 + std::vector mSeams; // 0x20 }; class Overlay { public: + Overlay(Hmx::Object*); + + int mCategory; // 0x0 + ObjPtr mTexture; // 0x4 }; OutfitConfig(); @@ -35,17 +80,25 @@ class OutfitConfig : public RndDrawable { virtual void ListDrawChildren(std::list&); virtual void DrawPreClear(); virtual void UpdatePreClearState(); - virtual ~OutfitConfig(); + virtual ~OutfitConfig(){} virtual void PreSave(BinStream&); virtual void PostSave(BinStream&); unsigned int OverlayFlags() const; + int NumColorOptions() const; + void CompressTextures(); + void Recompose(); + void Randomize(); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; int mColors[3]; // 0x20, 0x24, 0x28 ObjVector mMats; // 0x2c int unk38; int unk3c; - std::vector unk40; // 0x40 + std::vector mMeshAO; // 0x40 bool mComputeAO; // 0x48 ObjVector mPatches; // 0x4c bool mPermaProject; // 0x58 diff --git a/src/system/bandobj/PatchDir.cpp b/src/system/bandobj/PatchDir.cpp index 1d8a649c..f14739ac 100644 --- a/src/system/bandobj/PatchDir.cpp +++ b/src/system/bandobj/PatchDir.cpp @@ -1,4 +1,5 @@ #include "bandobj/PatchDir.h" +#include "utl/Symbols.h" std::vector PatchLayer::sCategoryNames; @@ -6,18 +7,51 @@ PatchSticker::PatchSticker() : unk18(1.0f), unk1c(1.0f), unk20(0), unk24(1), unk } -PatchLayer::PatchLayer() : unk1c(gNullStr), unk20(0), unk28(0) { +PatchSticker::~PatchSticker(){ + Unload(); +} + +PatchLayer::PatchLayer() : mStickerCategory(gNullStr), mStickerIdx(0), unk28(0) { Reset(); } +BEGIN_HANDLERS(PatchLayer) + HANDLE_EXPR(color_palette, sColorPalette) + HANDLE_EXPR(has_sticker, !mStickerCategory.Null()) + HANDLE_ACTION(set_scale, SetScale(_msg->Float(2), _msg->Float(3))) + HANDLE_EXPR(allow_color, AllowColor()) + HANDLE_ACTION(set_default_color, SetDefaultColor()) + HANDLE_ACTION(select_fx, SelectFX()) + HANDLE_ACTION(flip_x, FlipX()) + HANDLE_ACTION(flip_y, FlipY()) + HANDLE_ACTION(clear_sticker, ClearSticker()) + HANDLE_SUPERCLASS(Hmx::Object) + HANDLE_CHECK(0x185) +END_HANDLERS + +BEGIN_PROPSYNCS(PatchLayer) + SYNC_PROP_MODIFY(sticker_category, mStickerCategory, mStickerIdx = 0) + SYNC_PROP(sticker_idx, mStickerIdx) + SYNC_PROP(color_idx, mColorIdx) +END_PROPSYNCS + PatchDir::PatchDir() : unk1c0(0) { mSaveSizeMethod = &SaveSize; unk194.resize(50); - unk1bc = Hmx::Object::New(); - unk1bc->SetMipMapK(666.0f); + mTex = Hmx::Object::New(); + mTex->SetMipMapK(666.0f); if(TheLoadMgr.EditMode()) LoadStickerData(); } PatchDir::~PatchDir(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(PatchDir) + HANDLE_EXPR(has_layers, HasLayers()) + HANDLE_ACTION(clear, Clear()) + HANDLE_EXPR(is_loading_stickers, !unk1b4.empty()) + HANDLE_EXPR(get_tex, mTex) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x544) +END_HANDLERS \ No newline at end of file diff --git a/src/system/bandobj/PatchDir.h b/src/system/bandobj/PatchDir.h index 768ffb62..76526846 100644 --- a/src/system/bandobj/PatchDir.h +++ b/src/system/bandobj/PatchDir.h @@ -2,10 +2,14 @@ #include "meta/FixedSizeSaveable.h" #include "rndobj/Dir.h" #include "rndobj/Tex.h" +#include "world/ColorPalette.h" class PatchSticker { public: PatchSticker(); + ~PatchSticker(); + + void Unload(); String unk0; FilePath unkc; @@ -27,12 +31,27 @@ class PatchLayer : public Hmx::Object { virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); void Reset(); + void SetScale(float, float); + bool AllowColor(); + void SetDefaultColor(); + void SelectFX(); + void FlipX(); + void FlipY(); + void ClearSticker(); + static std::vector sCategoryNames; + static ColorPalette* sColorPalette; - Symbol unk1c; // 0x1c - int unk20; // 0x20 - int unk24; // 0x24 + Symbol mStickerCategory; // 0x1c + int mStickerIdx; // 0x20 + int mColorIdx; // 0x24 float unk28; // 0x28 + int mPosX; // 0x2c + int mPosZ; // 0x30 + int mRot; // 0x34 + int mScaleX; // 0x38 + int mScaleY; // 0x3c + int mDeformFrame; // 0x40 }; class PatchDir : public FixedSizeSaveable, public RndDir { @@ -50,6 +69,8 @@ class PatchDir : public FixedSizeSaveable, public RndDir { virtual void Poll(); void LoadStickerData(); + bool HasLayers() const; + void Clear(); static int SaveSize(int); @@ -60,6 +81,6 @@ class PatchDir : public FixedSizeSaveable, public RndDir { std::vector unk194; // 0x194 std::map > unk19c; // 0x19c std::vector unk1b4; // 0x1b4 - RndTex* unk1bc; // 0x1bc + RndTex* mTex; // 0x1bc bool unk1c0; // 0x1c0 }; \ No newline at end of file diff --git a/src/system/bandobj/PatchRenderer.cpp b/src/system/bandobj/PatchRenderer.cpp index fd916aed..5a959d1c 100644 --- a/src/system/bandobj/PatchRenderer.cpp +++ b/src/system/bandobj/PatchRenderer.cpp @@ -1,5 +1,22 @@ #include "bandobj/PatchRenderer.h" +#include "utl/Symbols.h" -PatchRenderer::PatchRenderer() : unk78(this, 0), unk84(this, 0), unk94("blank"), unk98("front") { +RndDir* PatchRenderer::sBlankPatch; +RndDir* PatchRenderer::sTestPatch; -} \ No newline at end of file +PatchRenderer::PatchRenderer() : mBackMat(this, 0), mOverlayMat(this, 0), mTestMode("blank"), mPosition("front") { + +} + +BEGIN_HANDLERS(PatchRenderer) + HANDLE_SUPERCLASS(RndTexRenderer) + HANDLE_CHECK(0xA8) +END_HANDLERS + +BEGIN_PROPSYNCS(PatchRenderer) + SYNC_PROP_MODIFY(test_mode, mTestMode, SetPatch(mTestMode == "test" ? sTestPatch : sBlankPatch)) + SYNC_PROP(position, mPosition) + SYNC_PROP(back_mat, mBackMat) + SYNC_PROP(overlay_mat, mOverlayMat) + SYNC_SUPERCLASS(RndTexRenderer) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/PatchRenderer.h b/src/system/bandobj/PatchRenderer.h index aaf05396..d1acf65c 100644 --- a/src/system/bandobj/PatchRenderer.h +++ b/src/system/bandobj/PatchRenderer.h @@ -1,6 +1,7 @@ #pragma once #include "rndobj/TexRenderer.h" #include "rndobj/Mat.h" +#include "rndobj/Dir.h" class PatchRenderer : public RndTexRenderer { public: @@ -17,9 +18,14 @@ class PatchRenderer : public RndTexRenderer { virtual void DrawBefore(); virtual void DrawAfter(); - ObjPtr unk78; // 0x78 - ObjPtr unk84; // 0x84 + void SetPatch(RndDir*); + + static RndDir* sBlankPatch; + static RndDir* sTestPatch; + + ObjPtr mBackMat; // 0x78 + ObjPtr mOverlayMat; // 0x84 int unk90; // 0x90 - Symbol unk94; // 0x94 - Symbol unk98; // 0x98 + Symbol mTestMode; // 0x94 + Symbol mPosition; // 0x98 }; \ No newline at end of file diff --git a/src/system/bandobj/PitchArrow.cpp b/src/system/bandobj/PitchArrow.cpp index 8dab13d1..79832f35 100644 --- a/src/system/bandobj/PitchArrow.cpp +++ b/src/system/bandobj/PitchArrow.cpp @@ -1,8 +1,70 @@ #include "bandobj/PitchArrow.h" +#include "utl/Symbols.h" -PitchArrow::PitchArrow() : unk18c(0), unk190(0), unk194(0), unk198(1.0f), unk19c(0), unk1a0(-1), unk1a4(0), unk1a8(0), unk1a9(0), unk1aa(1), unk1ab(0), - unk1ac("white"), unk1b0(0), unk1b4(this, 0), unk1c0(this, 0), unk1cc(this, 0), unk1d8(this, 0), unk1e4(this, 0), unk1f0(this, 0), unk1fc(this, 0), unk208(this, 0), - unk214(this, 0), unk220(this, 0), unk22c(this, 0), unk238(this, 0), unk244(this, 0), unk250(this, 0), unk25c(this, 0), unk268(this, 0), unk274(this, 0), - unk280(0), unk284(0), unk288(this, 0), unk294(0), unk298(0), unk29c(0) { +PitchArrow::PitchArrow() : unk18c(0), mScore(0), mHarmonyFX(0), mVolume(1.0f), mTilt(0), unk1a0(-1), mColorFade(0), mSpotlight(0), mDeploying(0), mPitched(1), unk1ab(0), + mTestColor("white"), mArrowStyle(0), mScoreAnim(this, 0), mHarmonyFXAnim(this, 0), mVolumeAnim(this, 0), mTiltAnim(this, 0), mColorAnim(this, 0), mColorFadeAnim(this, 0), + mSplitAnim(this, 0), mArrowStyleAnim(this, 0), mSetPitchedTrig(this, 0), mSetUnpitchedTrig(this, 0), mSpotlightStartTrig(this, 0), mSpotlightEndTrig(this, 0), + mDeployStartTrig(this, 0), mDeployEndTrig(this, 0), mGhostGrp(this, 0), mGhostFadeAnim(this, 0), mArrowFXGrp(this, 0), + unk280(0), mSpinSpeed(0), mSpinAnim(this, 0), mSpinRestFrame(0), mSpinBeginFrame(0), mSpinEndFrame(0) { -} \ No newline at end of file +} + +void PitchArrow::SyncObjects(){ + mScoreAnim = Find("score.anim", false); + mHarmonyFXAnim = Find("harmony_fx.anim", false); + mVolumeAnim = Find("volume.anim", false); + mTiltAnim = Find("tilt.anim", false); + mColorAnim = Find("color.anim", false); + mColorFadeAnim = Find("color_fade.anim", false); + mSetPitchedTrig = Find("set_pitched.trig", false); + mSetUnpitchedTrig = Find("set_unpitched.trig", false); + mSpotlightStartTrig = Find("spotlight_start.trig", false); + mSpotlightEndTrig = Find("spotlight_end.trig", false); + mDeployStartTrig = Find("deploy_start.trig", false); + mDeployEndTrig = Find("deploy_end.trig", false); + mGhostGrp = Find("ghost.grp", false); + mGhostFadeAnim = Find("ghost_fade.anim", false); + mArrowFXGrp = Find("arrow_fx.grp", false); + mSplitAnim = Find("split.anim", false); + mArrowStyleAnim = Find("arrow_style.anim", false); + if(!mScoreAnim || !mHarmonyFXAnim || !mVolumeAnim || !mTiltAnim || !mColorAnim || !mColorFadeAnim || + !mSetPitchedTrig || !mSetUnpitchedTrig || !mSpotlightStartTrig || !mSpotlightEndTrig || !mDeployStartTrig || !mDeployEndTrig){ + MILO_WARN("Some expected rnd objects are missing from pitch arrow"); + } + RndDir::SyncObjects(); +} + +BEGIN_PROPSYNCS(PitchArrow) + SYNC_PROP(pitched, mPitched) + SYNC_PROP(spotlight, mSpotlight) + SYNC_PROP(deploying, mDeploying) + SYNC_PROP(score, mScore) + SYNC_PROP(harmony_fx, mHarmonyFX) + SYNC_PROP(volume, mVolume) + SYNC_PROP(tilt, mTilt) + SYNC_PROP(test_color, mTestColor) + SYNC_PROP(color_fade, mColorFade) + SYNC_PROP(spin_speed, mSpinSpeed) + SYNC_PROP(spin_anim, mSpinAnim) + SYNC_PROP(spin_rest_frame, mSpinRestFrame) + SYNC_PROP(spin_begin_frame, mSpinBeginFrame) + SYNC_PROP(spin_end_frame, mSpinEndFrame) + SYNC_PROP_MODIFY(arrow_style, mArrowStyle, SetArrowStyle(mArrowStyle)) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS + +BEGIN_HANDLERS(PitchArrow) + HANDLE_ACTION(reset, Reset(0)) + HANDLE_ACTION(toggle_pitched, SetPitched(mPitched == 0)) + HANDLE_ACTION(toggle_spotlight, SetSpotlight(mSpotlight == 0)) + HANDLE_ACTION(toggle_deploying, SetDeploying(mDeploying == 0)) + HANDLE_ACTION(sync_score, mScoreAnim->SetFrame(mScore, 1.0f)) + HANDLE_ACTION(sync_harm_score, mHarmonyFXAnim->SetFrame(mHarmonyFX, 1.0f)) + HANDLE_ACTION(sync_tilt, mTiltAnim->SetFrame((mTilt / 90.0f) + 1.0f, 1.0f)) + HANDLE(sync_color, OnSyncColor) + HANDLE_ACTION(sync_color_fade, mColorFadeAnim->SetFrame(mColorFade, 1.0f)) + HANDLE_ACTION(sync_volume, mVolumeAnim->SetFrame(mVolume, 1.0f)) + HANDLE(setup_fx, OnSetupFx) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x195) +END_HANDLERS \ No newline at end of file diff --git a/src/system/bandobj/PitchArrow.h b/src/system/bandobj/PitchArrow.h index d0780c6a..dbaf019e 100644 --- a/src/system/bandobj/PitchArrow.h +++ b/src/system/bandobj/PitchArrow.h @@ -19,40 +19,49 @@ class PitchArrow : public RndDir { virtual void SyncObjects(); virtual void Poll(); + void SetArrowStyle(int); + void Reset(RndGroup*); + void SetPitched(bool); + void SetSpotlight(bool); + void SetDeploying(bool); + + DataNode OnSyncColor(DataArray*); + DataNode OnSetupFx(DataArray*); + bool unk18c; // 0x18c - float unk190; // 0x190 - float unk194; // 0x194 - float unk198; // 0x198 - float unk19c; // 0x19c + float mScore; // 0x190 + float mHarmonyFX; // 0x194 + float mVolume; // 0x198 + float mTilt; // 0x19c int unk1a0; // 0x1a0 - float unk1a4; // 0x1a4 - bool unk1a8; // 0x1a8 - bool unk1a9; // 0x1a9 - bool unk1aa; // 0x1aa + float mColorFade; // 0x1a4 + bool mSpotlight; // 0x1a8 + bool mDeploying; // 0x1a9 + bool mPitched; // 0x1aa bool unk1ab; // 0x1ab - Symbol unk1ac; // 0x1ac - int unk1b0; // 0x1b0 - ObjPtr unk1b4; // 0x1b4 - ObjPtr unk1c0; // 0x1c0 - ObjPtr unk1cc; // 0x1cc - ObjPtr unk1d8; // 0x1d8 - ObjPtr unk1e4; // 0x1e4 - ObjPtr unk1f0; // 0x1f0 - ObjPtr unk1fc; // 0x1fc - ObjPtr unk208; // 0x208 - ObjPtr unk214; // 0x214 - ObjPtr unk220; // 0x220 - ObjPtr unk22c; // 0x22c - ObjPtr unk238; // 0x238 - ObjPtr unk244; // 0x244 - ObjPtr unk250; // 0x250 - ObjPtr unk25c; // 0x25c - ObjPtr unk268; // 0x268 - ObjPtr unk274; // 0x274 + Symbol mTestColor; // 0x1ac + int mArrowStyle; // 0x1b0 + ObjPtr mScoreAnim; // 0x1b4 + ObjPtr mHarmonyFXAnim; // 0x1c0 + ObjPtr mVolumeAnim; // 0x1cc + ObjPtr mTiltAnim; // 0x1d8 + ObjPtr mColorAnim; // 0x1e4 + ObjPtr mColorFadeAnim; // 0x1f0 + ObjPtr mSplitAnim; // 0x1fc + ObjPtr mArrowStyleAnim; // 0x208 + ObjPtr mSetPitchedTrig; // 0x214 + ObjPtr mSetUnpitchedTrig; // 0x220 + ObjPtr mSpotlightStartTrig; // 0x22c + ObjPtr mSpotlightEndTrig; // 0x238 + ObjPtr mDeployStartTrig; // 0x244 + ObjPtr mDeployEndTrig; // 0x250 + ObjPtr mGhostGrp; // 0x25c + ObjPtr mGhostFadeAnim; // 0x268 + ObjPtr mArrowFXGrp; // 0x274 bool unk280; // 0x280 - float unk284; // 0x284 - ObjPtr unk288; // 0x288 - float unk294; // 0x294 - float unk298; // 0x298 - float unk29c; // 0x29c + float mSpinSpeed; // 0x284 + ObjPtr mSpinAnim; // 0x288 + float mSpinRestFrame; // 0x294 + float mSpinBeginFrame; // 0x298 + float mSpinEndFrame; // 0x29c }; \ No newline at end of file diff --git a/src/system/bandobj/PlayerDiffIcon.cpp b/src/system/bandobj/PlayerDiffIcon.cpp index d401623e..d1466604 100644 --- a/src/system/bandobj/PlayerDiffIcon.cpp +++ b/src/system/bandobj/PlayerDiffIcon.cpp @@ -1,9 +1,22 @@ #include "bandobj/PlayerDiffIcon.h" +#include "utl/Symbols.h" -PlayerDiffIcon::PlayerDiffIcon() : unk118(0), unk11c(0), unk128(1), unk12c(0), unk130(1.0f), unk134(1.0f), unk138(1.0f), unk13c(1.0f), unk140(1.0f) { +PlayerDiffIcon::PlayerDiffIcon() : unk118(0), unk11c(0), mNumPlayers(1), mDiff(0), unk130(1.0f), unk134(1.0f), unk138(1.0f), unk13c(1.0f), unk140(1.0f) { } PlayerDiffIcon::~PlayerDiffIcon(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(PlayerDiffIcon) + HANDLE_ACTION(set_num_players_diff, SetNumPlayersDiff(_msg->Int(2), _msg->Int(3))) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0xBD) +END_HANDLERS + +BEGIN_PROPSYNCS(PlayerDiffIcon) + SYNC_PROP(num_players, mNumPlayers) + SYNC_PROP(diff, mDiff) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/PlayerDiffIcon.h b/src/system/bandobj/PlayerDiffIcon.h index 01919e34..ad54f149 100644 --- a/src/system/bandobj/PlayerDiffIcon.h +++ b/src/system/bandobj/PlayerDiffIcon.h @@ -22,6 +22,8 @@ class PlayerDiffIcon : public UIComponent, public UIListCustomTemplate { virtual void SetAlphaColor(float, UIColor*); virtual void GrowBoundingBox(Box&) const; + void SetNumPlayersDiff(int, int); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; @@ -30,8 +32,8 @@ class PlayerDiffIcon : public UIComponent, public UIListCustomTemplate { int unk118; // 0x118 int unk11c; // 0x11c std::vector unk120; // 0x120 - int unk128; // 0x128 - int unk12c; // 0x12c + int mNumPlayers; // 0x128 + int mDiff; // 0x12c float unk130; // 0x130 float unk134; // 0x134 float unk138; // 0x138 diff --git a/src/system/bandobj/ReviewDisplay.cpp b/src/system/bandobj/ReviewDisplay.cpp index 89128c54..e851f32b 100644 --- a/src/system/bandobj/ReviewDisplay.cpp +++ b/src/system/bandobj/ReviewDisplay.cpp @@ -1,9 +1,21 @@ #include "bandobj/ReviewDisplay.h" +#include "utl/Symbols.h" -ReviewDisplay::ReviewDisplay() : unk10c(0), unk110(0), unk114(0) { +ReviewDisplay::ReviewDisplay() : unk10c(0), unk110(0), mScore(0) { } ReviewDisplay::~ReviewDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(ReviewDisplay) + HANDLE_ACTION(set_values, SetValues(_msg->Int(2), _msg->Int(3))) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0xE0) +END_HANDLERS + +BEGIN_PROPSYNCS(ReviewDisplay) + SYNC_PROP_MODIFY(score, mScore, UpdateDisplay(true)) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/ReviewDisplay.h b/src/system/bandobj/ReviewDisplay.h index d626ba12..a06bd1fd 100644 --- a/src/system/bandobj/ReviewDisplay.h +++ b/src/system/bandobj/ReviewDisplay.h @@ -18,7 +18,9 @@ class ReviewDisplay : public UIComponent { virtual void Enter(); virtual void CopyMembers(const UIComponent*, CopyType); virtual void Update(); - virtual void UpdateDisplay(); + virtual void UpdateDisplay(bool); + + void SetValues(int, bool); DECLARE_REVS; NEW_OVERLOAD; @@ -26,5 +28,5 @@ class ReviewDisplay : public UIComponent { int unk10c; // 0x10c int unk110; // 0x110 - int unk114; // 0x114 + int mScore; // 0x114 }; \ No newline at end of file diff --git a/src/system/bandobj/ScoreDisplay.cpp b/src/system/bandobj/ScoreDisplay.cpp index 2ac5071f..2eeb6ef7 100644 --- a/src/system/bandobj/ScoreDisplay.cpp +++ b/src/system/bandobj/ScoreDisplay.cpp @@ -1,9 +1,24 @@ #include "bandobj/ScoreDisplay.h" +#include "utl/Symbols.h" -ScoreDisplay::ScoreDisplay() : unk114(0), unk118(1000000), unk11c(0), unk120(0), unk124(this, 0) { +ScoreDisplay::ScoreDisplay() : unk114(0), mScore(1000000), mRank(0), mGlobally(0), mTextColor(this, 0) { unk110 = Hmx::Object::New(); } ScoreDisplay::~ScoreDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(ScoreDisplay) + HANDLE(set_values, OnSetValues) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0xDA) +END_HANDLERS + +BEGIN_PROPSYNCS(ScoreDisplay) + SYNC_PROP_MODIFY(score, mScore, UpdateDisplay()) + SYNC_PROP_MODIFY(rank, mRank, UpdateDisplay()) + SYNC_PROP_MODIFY(globally, mGlobally, UpdateDisplay()) + SYNC_PROP_MODIFY_ALT(text_color, mTextColor, unk110->SetColorOverride(mTextColor)) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/ScoreDisplay.h b/src/system/bandobj/ScoreDisplay.h index 17701aab..d3fe741d 100644 --- a/src/system/bandobj/ScoreDisplay.h +++ b/src/system/bandobj/ScoreDisplay.h @@ -25,14 +25,16 @@ class ScoreDisplay : public UIComponent, public UIListCustomTemplate { virtual void GrowBoundingBox(Box&) const; virtual void UpdateDisplay(); + DataNode OnSetValues(const DataArray*); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; BandLabel* unk110; // 0x110 short unk114; // 0x114 - int unk118; // 0x118 - int unk11c; // 0x11c - bool unk120; // 0x120 - ObjPtr unk124; // 0x124 + int mScore; // 0x118 + int mRank; // 0x11c + bool mGlobally; // 0x120 + ObjPtr mTextColor; // 0x124 }; \ No newline at end of file diff --git a/src/system/bandobj/ScrollbarDisplay.cpp b/src/system/bandobj/ScrollbarDisplay.cpp index a390d333..304e9dcb 100644 --- a/src/system/bandobj/ScrollbarDisplay.cpp +++ b/src/system/bandobj/ScrollbarDisplay.cpp @@ -1,10 +1,27 @@ #include "bandobj/ScrollbarDisplay.h" +#include "utl/Symbols.h" -ScrollbarDisplay::ScrollbarDisplay() : unk10c(this, 0), unk118(200.0f), unk11c(0), unk120(0), unk124(0), unk128(1.0f), unk12c(0), unk130(0), unk134(0), unk138(0), unk13c(0), - unk140(-1), unk144(-1), unk148(-1), unk14c(-1), unk150(0), unk154(0) { +ScrollbarDisplay::ScrollbarDisplay() : mScrollbarList(this, 0), mScrollbarHeight(200.0f), mAlwaysShow(0), mListXOffset(0), mListYOffset(0), mMinThumbHeight(1.0f), + unk12c(0), unk130(0), unk134(0), unk138(0), unk13c(0), unk140(-1), unk144(-1), unk148(-1), unk14c(-1), unk150(0), unk154(0) { } ScrollbarDisplay::~ScrollbarDisplay(){ -} \ No newline at end of file +} + +BEGIN_HANDLERS(ScrollbarDisplay) + HANDLE_SUPERCLASS(UIComponent) + HANDLE_CHECK(0x1E9) +END_HANDLERS + +BEGIN_PROPSYNCS(ScrollbarDisplay) + SYNC_PROP_SET(scrollbar_list, GetList(), SetList(_val.Obj(0))) + SYNC_PROP_SET(always_show, mAlwaysShow, SetAlwaysShow(_val.Int(0))) + SYNC_PROP_SET(list_attached, GetListAttached(), SetListAttached(_val.Int(0))) + SYNC_PROP_SET(list_x_offset, mListXOffset, SetListXOffset(_val.Float(0))) + SYNC_PROP_SET(list_y_offset, mListYOffset, SetListYOffset(_val.Float(0))) + SYNC_PROP_SET(scrollbar_height, mScrollbarHeight, SetHeight(_val.Float(0))) + SYNC_PROP_SET(min_thumb_height, mMinThumbHeight, SetMinThumbHeight(_val.Float(0))) + SYNC_SUPERCLASS(UIComponent) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/ScrollbarDisplay.h b/src/system/bandobj/ScrollbarDisplay.h index 18689d79..7557eec8 100644 --- a/src/system/bandobj/ScrollbarDisplay.h +++ b/src/system/bandobj/ScrollbarDisplay.h @@ -20,16 +20,26 @@ class ScrollbarDisplay : public UIComponent { virtual void CopyMembers(const UIComponent*, CopyType); virtual void Update(); + BandList* GetList() const { return mScrollbarList.Ptr() ? mScrollbarList.Ptr() : 0; } + void SetList(BandList*); + void SetAlwaysShow(bool); + void SetListAttached(bool); + bool GetListAttached() const; + void SetListXOffset(float); + void SetListYOffset(float); + void SetHeight(float); + void SetMinThumbHeight(float); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - ObjPtr unk10c; // 0x10c - float unk118; // 0x118 - bool unk11c; // 0x11c - float unk120; // 0x120 - float unk124; // 0x124 - float unk128; // 0x128 + ObjPtr mScrollbarList; // 0x10c + float mScrollbarHeight; // 0x118 + bool mAlwaysShow; // 0x11c + float mListXOffset; // 0x120 + float mListYOffset; // 0x124 + float mMinThumbHeight; // 0x128 int unk12c; // 0x12c int unk130; // 0x130 int unk134; // 0x134 diff --git a/src/system/bandobj/StreakMeter.cpp b/src/system/bandobj/StreakMeter.cpp index ac868c66..a6e18f9c 100644 --- a/src/system/bandobj/StreakMeter.cpp +++ b/src/system/bandobj/StreakMeter.cpp @@ -1,4 +1,5 @@ #include "bandobj/StreakMeter.h" +#include "utl/Symbols.h" StreakMeter::StreakMeter() : mStreakMultiplier(1), mBandMultiplier(1), mMaxMultiplier(4), mShowBandMult(0), mNewStreakTrig(this, 0), mEndStreakTrig(this, 0), mPeakStateTrig(this, 0), mBreakOverdriveTrig(this, 0), mMultiMeterAnim(this, 0), mMultiplierLabel(this, 0), mXLabel(this, 0), mMeterWipeAnim(this, 0), mStarDeployTrig(this, 0), mEndOverdriveTrig(this, 0), @@ -6,4 +7,25 @@ StreakMeter::StreakMeter() : mStreakMultiplier(1), mBandMultiplier(1), mMaxMulti mPartColorAnims(this), mPartFadeAnims(this), mPartWipeAnims(this), mPartWipeResidualAnims(this), mResidueFadeTrig(this, 0), mNumPartsAnim(this, 0), mPartSparksLaunchers(this), unk2c8(1), unk2d0(-1) { -} \ No newline at end of file +} + +BEGIN_HANDLERS(StreakMeter) + HANDLE_ACTION(set_multiplier, SetMultiplier(_msg->Int(2))) + HANDLE_ACTION(set_band_multiplier, SetBandMultiplier(_msg->Int(2))) + HANDLE_ACTION(break_streak, BreakStreak(true)) + HANDLE_ACTION(star_deploy, Overdrive()) + HANDLE_ACTION(star_deploy_stop, EndOverdrive()) + HANDLE_ACTION(reset, Reset()) + HANDLE_ACTION(set_wipe, SetWipe(_msg->Float(2))) + HANDLE_ACTION(peak_state, SetPeakState()) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x184) +END_HANDLERS + +BEGIN_PROPSYNCS(StreakMeter) + SYNC_PROP(streak_multiplier, mStreakMultiplier) + SYNC_PROP(band_multiplier, mBandMultiplier) + SYNC_PROP(max_multiplier, mMaxMultiplier) + SYNC_PROP(show_band_mult, mShowBandMult) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/StreakMeter.h b/src/system/bandobj/StreakMeter.h index 62412af4..7aba7feb 100644 --- a/src/system/bandobj/StreakMeter.h +++ b/src/system/bandobj/StreakMeter.h @@ -14,14 +14,23 @@ class StreakMeter : public RndDir { virtual bool SyncProperty(DataNode&, DataArray*, int, PropOp); virtual void Save(BinStream&); virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); - virtual ~StreakMeter(); + virtual ~StreakMeter(){} virtual void PreLoad(BinStream&); virtual void PostLoad(BinStream&); virtual void SyncObjects(); void Reset(); + void SetMultiplier(int); void SetBandMultiplier(int); void EndOverdrive() const; + void BreakStreak(bool); + void Overdrive() const; + void SetWipe(float); + void SetPeakState(); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; int mStreakMultiplier; // 0x18c int mBandMultiplier; // 0x190 diff --git a/src/system/bandobj/TrackPanelDir.cpp b/src/system/bandobj/TrackPanelDir.cpp index a5345954..b36b1707 100644 --- a/src/system/bandobj/TrackPanelDir.cpp +++ b/src/system/bandobj/TrackPanelDir.cpp @@ -1,6 +1,22 @@ #include "bandobj/TrackPanelDir.h" +#include "utl/Symbols.h" -TrackPanelDir::TrackPanelDir() : unk258(this, 0), unk264(this, 0), unk270(this, 0), unk27c(this, 0), unk288(this, 0), unk294(this, 0), unk2a0(this, 0), - unk2ac(1), unk2ad(0), unk2ae(0), unk2b0(this, 0), unk2bc(1), unk2bd(0) { +TrackPanelDir::TrackPanelDir() : unk258(this, 0), mCrowdMeter(this, 0), unk270(this, 0), unk27c(this, 0), mEndingBonus(this, 0), unk294(this, 0), unk2a0(this, 0), + unk2ac(1), unk2ad(0), mTracksExtended(0), mGemTrackRsrcMgr(this, 0), mVocals(1), mVocalsNet(0) { -} \ No newline at end of file +} + +TrackPanelDir::~TrackPanelDir(){ + +} + +BEGIN_HANDLERS(TrackPanelDir) + HANDLE_ACTION(game_won, GameWon()) + HANDLE_ACTION(game_lost, GameLost()) + HANDLE_ACTION(game_skip, GameLost()) + HANDLE_ACTION(set_crowd_rating, SetCrowdRating(_msg->Float(2))) + HANDLE_ACTION(game_won_finale, GameWon()) + HANDLE_EXPR(tracks_extended, TracksExtended()) + HANDLE_SUPERCLASS(TrackPanelDirBase) + HANDLE_CHECK(0x3F3) +END_HANDLERS \ No newline at end of file diff --git a/src/system/bandobj/TrackPanelDir.h b/src/system/bandobj/TrackPanelDir.h index 5e8f2834..7c4e14a2 100644 --- a/src/system/bandobj/TrackPanelDir.h +++ b/src/system/bandobj/TrackPanelDir.h @@ -29,7 +29,7 @@ class TrackPanelDir : public TrackPanelDirBase { virtual void Reset(); virtual void ResetAll(); virtual void PlayIntro(); - virtual bool TracksExtended() const; + virtual bool TracksExtended() const { return mTracksExtended; } virtual void GameOver(); virtual void HideScore(); virtual void Coda(); @@ -45,8 +45,8 @@ class TrackPanelDir : public TrackPanelDirBase { virtual void UnisonStart(int); virtual void UnisonEnd(); virtual void UnisonSucceed(); - virtual int GetEndingBonus(); // ptr to EndingBonus* - virtual int GetCrowdMeter(); // ptr + virtual EndingBonus* GetEndingBonus(){ return mEndingBonus; } + virtual BandCrowdMeter* GetCrowdMeter(){ return mCrowdMeter; } virtual void SetupApplauseMeter(int, const char*, const char*, RndDir*, RndDir*, bool, Symbol); virtual void DisablePlayer(int, bool); virtual void EnablePlayer(int); @@ -54,24 +54,31 @@ class TrackPanelDir : public TrackPanelDirBase { virtual void CleanUpChordMeshes(); virtual void SetApplauseMeterScale(int, int); virtual void StartPulseAnims(float); - virtual int GetGemTrackResourceManager() const; // also a ptr + virtual GemTrackResourceManager* GetGemTrackResourceManager() const { return mGemTrackRsrcMgr; } + + void GameWon(); + void GameLost(); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; int unk244; // 0x244 - int unk248; // 0x248 + int mTestMultiplier; // 0x248 int unk24c; // 0x24c int unk250; // 0x250 int unk254; // 0x254 ObjPtr unk258; // 0x258 - ObjPtr unk264; // 0x264 + ObjPtr mCrowdMeter; // 0x264 ObjPtr unk270; // 0x270 ObjPtr unk27c; // 0x27c - ObjPtr unk288; // 0x288 + ObjPtr mEndingBonus; // 0x288 ObjPtr unk294; // 0x294 ObjPtr unk2a0; // 0x2a0 bool unk2ac; // 0x2ac bool unk2ad; // 0x2ad - bool unk2ae; // 0x2ae - ObjPtr unk2b0; // 0x2b0 - bool unk2bc; // 0x2bc - bool unk2bd; // 0x2bd + bool mTracksExtended; // 0x2ae + ObjPtr mGemTrackRsrcMgr; // 0x2b0 + bool mVocals; // 0x2bc + bool mVocalsNet; // 0x2bd }; \ No newline at end of file diff --git a/src/system/bandobj/TrackPanelDirBase.h b/src/system/bandobj/TrackPanelDirBase.h index 93e45e70..de446d5e 100644 --- a/src/system/bandobj/TrackPanelDirBase.h +++ b/src/system/bandobj/TrackPanelDirBase.h @@ -3,6 +3,9 @@ class BandTrack; class TrackPanelInterface; +class GemTrackResourceManager; +class EndingBonus; +class BandCrowdMeter; enum TrackInstrument { kInstGuitar = 0, @@ -55,8 +58,8 @@ class TrackPanelDirBase : public PanelDir { virtual void UnisonStart(int){} virtual void UnisonEnd(); virtual void UnisonSucceed(); - virtual int GetEndingBonus(); // ptr to EndingBonus* - virtual int GetCrowdMeter(); // ptr + virtual EndingBonus* GetEndingBonus(); + virtual BandCrowdMeter* GetCrowdMeter(); // ptr virtual void SetupApplauseMeter(int, const char*, const char*, RndDir*, RndDir*, bool, Symbol){} virtual void DisablePlayer(int, bool); virtual void EnablePlayer(int); @@ -65,7 +68,7 @@ class TrackPanelDirBase : public PanelDir { virtual void SetApplauseMeterScale(int, int){} virtual void StartPulseAnims(float); virtual float GetPulseAnimStartDelay(bool) const; - virtual int GetGemTrackResourceManager() const; // also a ptr + virtual GemTrackResourceManager* GetGemTrackResourceManager() const; void SetShowing(bool); bool ModifierActive(Symbol); diff --git a/src/system/bandobj/VocalTrackDir.cpp b/src/system/bandobj/VocalTrackDir.cpp index 58d54edd..10015757 100644 --- a/src/system/bandobj/VocalTrackDir.cpp +++ b/src/system/bandobj/VocalTrackDir.cpp @@ -1,16 +1,188 @@ #include "bandobj/VocalTrackDir.h" +#include "bandobj/TrackInterface.h" +#include "utl/Symbols.h" -VocalTrackDir::VocalTrackDir() : BandTrack(this), unk2a0(0.3f), unk2a4(1), unk2a5(1), unk2a6(1), unk2a7(0), unk2a8(0), unk2ac(0), unk2b0(0), unk2e4(this, 0), unk2f0(this, 0), - unk2fc(12.0f), unk300(3.0f), unk304(0.85f), unk308(this, kObjListNoNull), unk318(this, 0), unk324(this, 0), unk330(this, 0), unk33c(this, 0), unk348(this, 0), unk354(this, 0), - unk360(this, 0), unk36c(this, 0), unk378(this, 0), unk384(this, 0), unk390(this, 0), unk39c(1), unk3a0(2.5f), unk3a4(this, 0), unk3b0(this, 0), unk3bc(1), unk3c0(0.4f), - unk3c4(this, 0), unk3d0(1), unk3d4(0.4f), unk3d8(this, 0), unk3e4(this, 0), unk3f0(this, 0), unk3fc(0.2f), unk400(this, 0), unk40c(0), unk410(-20.0f), unk414(20.0f), - unk418(0.0f), unk41c(10.0f), unk420(0.0f), unk424(2.0f), unk428(-10.0f), unk42c(0), unk430("harmonic"), unk434(this, 0), unk440(this, 0), unk44c(this, 0), unk458(this, 0), - unk464(this, 0), unk470(this, 0), unk47c(this, 0), unk488(36.0f), unk48c(84.0f), unk490(0), unk494(0x3c), unk498(this, 0), unk4a4(this, 0), unk4b0(1), unk4b4(2), unk4b8(0), - unk4bc(0), unk4c0(0), unk4c4(0), unk4c8(0), unk4cc(0), unk4d0(0), unk4d4(0), unk4d8(this, 0), unk4e4(this, 0), unk4f0(this, 0), unk4fc(this, 0), unk508(this, 0), unk514(this, 0), - unk520(this, 0), unk52c(this, 0), unk538(this, 0), unk544(this, 0), unk550(this, 0), unk55c(this, 0), unk568(this, 0), unk574(this, 0), unk580(this, 0), unk58c(this, 0), - unk598(this, 0), unk5a4(this, 0), unk5b0(this, 0), unk5bc(this, 0), unk5c8(this, 0), unk5d4(this, 0), unk5e0(this, 0), unk5ec(this, 0), unk5f8(this, 0), unk604(this, 0), - unk610(this, 0), unk61c(this, 0), unk628(this, 0), unk634(this, 0), unk640(this, 0), unk64c(this, 0), unk658(this, 0), unk664(this, 0), unk670(this, 0), unk67c(this, 0), - unk688(this, 0), unk694(0), unk698(0), unk69c(0), unk6a0(0), unk6a4(this, 0), unk6b0(this, 0), unk6bc(-1.0f), unk6c0(0.3f), unk6c4(-1), unk6c8(0), unk6cc(this, 0), - unk6d8(18.0f), unk6dc(48.0f), unk6e0(0) { +VocalTrackDir::VocalTrackDir() : BandTrack(this), mHiddenPartAlpha(0.3f), unk2a4(1), unk2a5(1), mIsTop(1), unk2a7(0), mFeedbackStateLead(0), mFeedbackStateHarm1(0), mFeedbackStateHarm2(0), + mVocalMics(this, 0), unk2f0(this, 0), mMinPitchRange(12.0f), mPitchDisplayMargin(3.0f), mArrowSmoothing(0.85f), mConfigurableObjects(this, kObjListNoNull), mVoxCfg(this, 0), + mTambourineSmasher(this, 0), mTambourineNowShowTrig(this, 0), mTambourineNowHideTrig(this, 0), mLeadPhraseFeedbackBottomLbl(this, 0), mPhraseFeedbackTrig(this, 0), + mSpotlightSparklesOnlyTrig(this, 0), mSpotlightPhraseSuccessTrig(this, 0), mPitchArrow1(this, 0), mPitchArrow2(this, 0), mPitchArrow3(this, 0), mPitchWindow(1), + mPitchWindowHeight(2.5f), mPitchWindowMesh(this, 0), mPitchWindowOverlay(this, 0), mLeadLyrics(1), mLeadLyricHeight(0.4f), mLeadLyricMesh(this, 0), mHarmLyrics(1), + mHarmLyricHeight(0.4f), mHarmLyricMesh(this, 0), mLeftDecoMesh(this, 0), mRightDecoMesh(this, 0), mNowBarWidth(0.2f), mNowBarMesh(this, 0), mRemoteVocals(0), + mTrackLeftX(-20.0f), mTrackRightX(20.0f), mTrackBottomZ(0.0f), mTrackTopZ(10.0f), mPitchBottomZ(0.0f), mPitchTopZ(2.0f), mNowBarX(-10.0f), unk42c(0), mPitchGuides("harmonic"), + mTubeStyle(this, 0), mArrowStyle(this, 0), mFontStyle(this, 0), unk458(this, 0), unk464(this, 0), unk470(this, 0), unk47c(this, 0), mLastMin(36.0f), mLastMax(84.0f), mMiddleCZPos(0), + mTonic(0x3c), mRangeScaleAnim(this, 0), mRangeOffsetAnim(this, 0), unk4b0(1), unk4b4(2), mLeftTrans(0), mRightTrans(0), mBottomTrans(0), mTopTrans(0), + mPitchBottomTrans(0), mPitchTopTrans(0), mPitchMidTrans(0), mNowTrans(0), mTubeRangeGrp(this, 0), mTubeSpotlightGrp(this, 0), mTubeBack0Grp(this, 0), mTubeBack1Grp(this, 0), + mTubeBack2Grp(this, 0), mTubeFront0Grp(this, 0), mTubeFront1Grp(this, 0), mTubeFront2Grp(this, 0), mTubeGlow0Grp(this, 0), mTubeGlow1Grp(this, 0), mTubeGlow2Grp(this, 0), + mTubePhoneme0Grp(this, 0), mTubePhoneme1Grp(this, 0), mTubePhoneme2Grp(this, 0), unk580(this, 0), unk58c(this, 0), unk598(this, 0), unk5a4(this, 0), unk5b0(this, 0), unk5bc(this, 0), + unk5c8(this, 0), unk5d4(this, 0), unk5e0(this, 0), unk5ec(this, 0), unk5f8(this, 0), unk604(this, 0), unk610(this, 0), mVocalsGrp(this, 0), mScroller(this, 0), mLeadLyricScroller(this, 0), + mHarmonyLyricScroller(this, 0), mBREGrp(this, 0), mLeadBREGrp(this, 0), mHarmonyBREGrp(this, 0), mPitchScrollGroup(this, 0), mLeadLyricScrollGroup(this, 0), + mHarmonyLyricScrollGroup(this, 0), unk694(0), unk698(0), unk69c(0), unk6a0(0), mLeadDeployMat(this, 0), mHarmDeployMat(this, 0), unk6bc(-1.0f), unk6c0(0.3f), + unk6c4(-1), unk6c8(0), mArrowFXDrawGrp(this, 0), unk6d8(18.0f), unk6dc(48.0f), unk6e0(0) { -} \ No newline at end of file +} + +void VocalTrackDir::SyncObjects(){ + RndDir::SyncObjects(); + if(!mLeftTrans) mLeftTrans = Find("track_left.trans", false); + if(!mRightTrans) mRightTrans = Find("track_right.trans", false); + if(!mBottomTrans) mBottomTrans = Find("track_bottom.trans", false); + if(!mTopTrans) mTopTrans = Find("track_top.trans", false); + if(!mPitchBottomTrans) mPitchBottomTrans = Find("pitch_bottom.trans", false); + if(!mPitchTopTrans) mPitchTopTrans = Find("pitch_top.trans", false); + if(!mPitchMidTrans) mPitchMidTrans = Find("pitch_mid.trans", false); + if(!mNowTrans) mNowTrans = Find("now_bar.trans", false); + if(!mPitchArrow1) mPitchArrow1 = Find("pitch_arrow_1", false); + if(!mPitchArrow2) mPitchArrow2 = Find("pitch_arrow_2", false); + if(!mPitchArrow3) mPitchArrow3 = Find("pitch_arrow_3", false); + if(!mTubeRangeGrp) mTubeRangeGrp = Find("tubes.grp", false); + if(!mTubeSpotlightGrp) mTubeSpotlightGrp = Find("spotlight.grp", false); + if(!mTubeBack0Grp) mTubeBack0Grp = Find("back0.grp", false); + if(!mTubeBack1Grp) mTubeBack1Grp = Find("back1.grp", false); + if(!mTubeBack2Grp) mTubeBack2Grp = Find("back2.grp", false); + if(!mTubeFront0Grp) mTubeFront0Grp = Find("front0.grp", false); + if(!mTubeFront1Grp) mTubeFront1Grp = Find("front1.grp", false); + if(!mTubeFront2Grp) mTubeFront2Grp = Find("front2.grp", false); + if(!mTubeGlow0Grp) mTubeGlow0Grp = Find("glow0.grp", false); + if(!mTubeGlow1Grp) mTubeGlow1Grp = Find("glow1.grp", false); + if(!mTubeGlow2Grp) mTubeGlow2Grp = Find("glow2.grp", false); + if(!mTubePhoneme0Grp) mTubePhoneme0Grp = Find("phoneme0.grp", false); + if(!mTubePhoneme1Grp) mTubePhoneme1Grp = Find("phoneme1.grp", false); + if(!mTubePhoneme2Grp) mTubePhoneme2Grp = Find("phoneme2.grp", false); + if(!mVocalsGrp) mVocalsGrp = Find("vocals.grp", false); + if(!mScroller) mScroller = Find("scroller.trans", false); + if(!mLeadLyricScroller) mLeadLyricScroller = Find("lead_lyric_scroller.trans", false); + if(!mHarmonyLyricScroller) mHarmonyLyricScroller = Find("harmony_lyric_scroller.trans", false); + if(!mBREGrp) mBREGrp = Find("bre.grp", false); + if(!mLeadBREGrp) mLeadBREGrp = Find("lead_bre.grp", false); + if(!mHarmonyBREGrp) mHarmonyBREGrp = Find("harmony_bre.grp", false); + if(!mPitchScrollGroup) mPitchScrollGroup = Find("pitch_scroll.grp", false); + if(!mLeadLyricScrollGroup) mLeadLyricScrollGroup = Find("lead_lyric_scroll.grp", false); + if(!mHarmonyLyricScrollGroup) mHarmonyLyricScrollGroup = Find("harmony_lyric_scroll.grp", false); + if(!mBeatAnimsGrp) mBeatAnimsGrp = Find("beat_anims.grp", false); + if(!mArrowFXDrawGrp) mArrowFXDrawGrp = Find("arrow_fx_draw.grp", false); + if(!mTambourineSmasher) mTambourineSmasher = Find("tambourine_smasher", false); + if(!mTambourineNowShowTrig) mTambourineNowShowTrig = Find("tambourine_now_show.trig", false); + if(!mTambourineNowHideTrig) mTambourineNowHideTrig = Find("tambourine_now_hide.trig", false); + if(!mVocalMics) mVocalMics = Find("vocals_mics", false); + if(!mLeadPhraseFeedbackBottomLbl) mLeadPhraseFeedbackBottomLbl = Find("lead_phrase_feedback_bottom.lbl", false); + UpdateTubeStyle(); +} + +#pragma push +#pragma dont_inline on +BEGIN_PROPSYNCS(VocalTrackDir) + SYNC_PROP(is_top, mIsTop) + SYNC_PROP(feedback_state_lead, mFeedbackStateLead) + SYNC_PROP(feedback_state_harm_1, mFeedbackStateHarm1) + SYNC_PROP(feedback_state_harm_2, mFeedbackStateHarm2) + SYNC_PROP(lead_coming, mLyricColorMap[5]) + SYNC_PROP(lead_now, mLyricColorMap[6]) + SYNC_PROP(lead_past, mLyricColorMap[7]) + SYNC_PROP(lead_od_coming, mLyricColorMap[0x15]) + SYNC_PROP(lead_od_now, mLyricColorMap[0x16]) + SYNC_PROP(lead_od_past, mLyricColorMap[0x17]) + SYNC_PROP(harmony_coming, mLyricColorMap[1]) + SYNC_PROP(harmony_now, mLyricColorMap[2]) + SYNC_PROP(harmony_past, mLyricColorMap[3]) + SYNC_PROP(harmony_od_coming, mLyricColorMap[0x11]) + SYNC_PROP(harmony_od_now, mLyricColorMap[0x12]) + SYNC_PROP(harmony_od_past, mLyricColorMap[0x13]) + SYNC_PROP(lead_static_preview, mLyricColorMap[0xC]) + SYNC_PROP(lead_static_coming, mLyricColorMap[0xD]) + SYNC_PROP(lead_static_now, mLyricColorMap[0xE]) + SYNC_PROP(lead_static_past, mLyricColorMap[0xF]) + SYNC_PROP(lead_static_od_preview, mLyricColorMap[0x1C]) + SYNC_PROP(lead_static_od_coming, mLyricColorMap[0x1D]) + SYNC_PROP(lead_static_od_now, mLyricColorMap[0x1E]) + SYNC_PROP(lead_static_od_past, mLyricColorMap[0x1F]) + SYNC_PROP(harmony_static_preview, mLyricColorMap[8]) + SYNC_PROP(harmony_static_coming, mLyricColorMap[9]) + SYNC_PROP(harmony_static_now, mLyricColorMap[0xA]) + SYNC_PROP(harmony_static_past, mLyricColorMap[0xB]) + SYNC_PROP(harmony_static_od_preview, mLyricColorMap[0x18]) + SYNC_PROP(harmony_static_od_coming, mLyricColorMap[0x19]) + SYNC_PROP(harmony_static_od_now, mLyricColorMap[0x1A]) + SYNC_PROP(harmony_static_od_past, mLyricColorMap[0x1B]) + SYNC_PROP(scrolling_coming_alpha, mLyricAlphaMap[1]) + SYNC_PROP(scrolling_now_alpha, mLyricAlphaMap[2]) + SYNC_PROP(scrolling_past_alpha, mLyricAlphaMap[3]) + SYNC_PROP(static_preview_alpha, mLyricAlphaMap[8]) + SYNC_PROP(static_coming_alpha, mLyricAlphaMap[9]) + SYNC_PROP(static_now_alpha, mLyricAlphaMap[0xA]) + SYNC_PROP(static_past_alpha, mLyricAlphaMap[0xB]) + SYNC_PROP(min_pitch_range, mMinPitchRange) + SYNC_PROP(pitch_display_margin, mPitchDisplayMargin) + SYNC_PROP(arrow_smoothing, mArrowSmoothing) + SYNC_PROP(configurable_objects, mConfigurableObjects) + SYNC_PROP(phrase_feedback_trig, mPhraseFeedbackTrig) + SYNC_PROP(spotlight_sparkles_only_trig, mSpotlightSparklesOnlyTrig) + SYNC_PROP(spotlight_phrase_success_trig, mSpotlightPhraseSuccessTrig) + SYNC_PROP(vox_configuration, mVoxCfg) + SYNC_PROP(pitch_window, mPitchWindow) + SYNC_PROP(pitch_window_height, mPitchWindowHeight) + SYNC_PROP(pitch_window_mesh, mPitchWindowMesh) + SYNC_PROP(pitch_window_overlay, mPitchWindowOverlay) + SYNC_PROP(lead_lyrics, mLeadLyrics) + SYNC_PROP(lead_lyric_height, mLeadLyricHeight) + SYNC_PROP(lead_lyric_mesh, mLeadLyricMesh) + SYNC_PROP(harmony_lyrics, mHarmLyrics) + SYNC_PROP(harmony_lyric_height, mHarmLyricHeight) + SYNC_PROP(harmony_lyric_mesh, mHarmLyricMesh) + SYNC_PROP(left_deco_mesh, mLeftDecoMesh) + SYNC_PROP(right_deco_mesh, mRightDecoMesh) + SYNC_PROP(now_bar_width, mNowBarWidth) + SYNC_PROP(now_bar_mesh, mNowBarMesh) + SYNC_PROP(remote, mRemoteVocals) + SYNC_PROP(track_left, mTrackLeftX) + SYNC_PROP(track_right, mTrackRightX) + SYNC_PROP(track_bottom, mTrackBottomZ) + SYNC_PROP(track_top, mTrackTopZ) + SYNC_PROP(pitch_bottom, mPitchBottomZ) + SYNC_PROP(pitch_top, mPitchTopZ) + SYNC_PROP(now_bar, mNowBarX) + SYNC_PROP(pitch_guides, mPitchGuides) + SYNC_PROP(tube_style, mTubeStyle) + SYNC_PROP(arrow_style, mArrowStyle) + SYNC_PROP(font_style, mFontStyle) + SYNC_PROP(last_min, mLastMin) + SYNC_PROP(last_max, mLastMax) + SYNC_PROP(middle_c_z_pos, mMiddleCZPos) + SYNC_PROP(tonic, mTonic) + SYNC_PROP(range_scale_anim, mRangeScaleAnim) + SYNC_PROP(range_offset_anim, mRangeOffsetAnim) + SYNC_PROP(lead_deploy_mat, mLeadDeployMat) + SYNC_PROP(harmony_deploy_mat, mHarmDeployMat) + SYNC_PROP(hidden_part_alpha, mHiddenPartAlpha) + SYNC_PROP(overdrive_meter, mStarPowerMeter) + SYNC_SUPERCLASS(BandTrack) + SYNC_SUPERCLASS(RndDir) +END_PROPSYNCS + +BEGIN_HANDLERS(VocalTrackDir) + HANDLE_ACTION(set_vox_configuration, SetConfiguration(_msg->Obj(2), (HarmonyShowingState)2)) + HANDLE_ACTION(update_configuration, UpdateConfiguration()) + HANDLE(display_mode, OnGetDisplayMode) + HANDLE(set_display_mode, OnSetDisplayMode) + HANDLE_ACTION(set_feedback_state, ShowPhraseFeedback(_msg->Int(2), _msg->Int(3), _msg->Int(4), false)) + HANDLE_ACTION(set_phrase_meter, SetStreakPct(_msg->Float(2))) + HANDLE_ACTION(spotlight_phrase_success, SpotlightPhraseSuccess()) + HANDLE_ACTION(set_enable_vocals_options, SetEnableVocalsOptions(_msg->Int(2))) + HANDLE(foreach_configurable_object, DataForEachConfigObj) + HANDLE_ACTION(rebuild_hud, if(BandTrack::mParent) BandTrack::mParent->RebuildVocalHUD()) + HANDLE_ACTION(apply_font_style, ApplyFontStyle(_msg->Obj(2))) + HANDLE_ACTION(apply_arrow_style, ApplyArrowStyle(_msg->Obj(2))) + HANDLE(set_lyric_color, OnSetLyricColor) + HANDLE_ACTION(track_in, Extend(false)) + HANDLE_ACTION(track_in_now, Extend(true)) + HANDLE_ACTION(track_out, Retract(false)) + HANDLE_ACTION(track_out_now, Retract(true)) + HANDLE(isolate_vocal_part, OnIsolatePart) + HANDLE_ACTION(show_all_parts, SetIsolatedPart(-1)) + HANDLE_EXPR(num_vocal_parts, NumVocalParts()) + HANDLE_ACTION(set_range, SetRange(_msg->Float(2), _msg->Float(3), _msg->Int(4), false)) + HANDLE_EXPR(num_vocal_parts, NumVocalParts()) + HANDLE_SUPERCLASS(BandTrack) + HANDLE_SUPERCLASS(RndDir) + HANDLE_CHECK(0x71C) +END_HANDLERS +#pragma pop \ No newline at end of file diff --git a/src/system/bandobj/VocalTrackDir.h b/src/system/bandobj/VocalTrackDir.h index bb5f6a79..31d0a725 100644 --- a/src/system/bandobj/VocalTrackDir.h +++ b/src/system/bandobj/VocalTrackDir.h @@ -7,6 +7,10 @@ class VocalTrackDir : public RndDir, public BandTrack { public: + enum HarmonyShowingState { + + }; + VocalTrackDir(); OBJ_CLASSNAME(VocalTrackDir) OBJ_SET_TYPE(VocalTrackDir) @@ -24,11 +28,11 @@ class VocalTrackDir : public RndDir, public BandTrack { virtual void PlayIntro(); virtual void Deploy(); virtual void SetPlayerLocal(float); - virtual ObjectDir* ThisDir(); - virtual ObjectDir* ThisDir() const; // fix ptr + virtual ObjectDir* ThisDir(){} + virtual ObjectDir* ThisDir() const {} virtual void SpotlightPhraseSuccess(); - virtual int AsVocalTrackDir(); - virtual int AsRndDir(); + virtual int AsVocalTrackDir(){} + virtual int AsRndDir(){ return AsVocalTrackDir(); } virtual void Reset(); virtual void Retract(bool); virtual void Extend(bool); @@ -37,98 +41,116 @@ class VocalTrackDir : public RndDir, public BandTrack { virtual void SetTambourine(bool); virtual void TutorialReset(); + void SetConfiguration(Hmx::Object*, HarmonyShowingState); + void UpdateConfiguration(); + void ShowPhraseFeedback(int, int, int, bool); + void SetStreakPct(float); + void SetEnableVocalsOptions(bool); + void ApplyFontStyle(Hmx::Object*); + void ApplyArrowStyle(Hmx::Object*); + void SetIsolatedPart(int); + int NumVocalParts(); + void SetRange(float, float, int, bool); + void UpdateTubeStyle(); + + DataNode DataForEachConfigObj(DataArray*); + DataNode OnGetDisplayMode(DataArray*); + DataNode OnSetDisplayMode(DataArray*); + DataNode OnSetLyricColor(const DataArray*); + DataNode OnIsolatePart(DataArray*); + DECLARE_REVS; NEW_OVERLOAD; DELETE_OVERLOAD; - float unk2a0; // 0x2a0 + float mHiddenPartAlpha; // 0x2a0 bool unk2a4; // 0x2a4 bool unk2a5; // 0x2a5 - bool unk2a6; // 0x2a6 + bool mIsTop; // 0x2a6 bool unk2a7; // 0x2a7 - int unk2a8; // 0x2a8 - int unk2ac; // 0x2ac - int unk2b0; // 0x2b0 - std::map unk2b4; // 0x2b4 - std::map unk2cc; // 0x2cc - ObjPtr unk2e4; // 0x2e4 + int mFeedbackStateLead; // 0x2a8 + int mFeedbackStateHarm1; // 0x2ac + int mFeedbackStateHarm2; // 0x2b0 + std::map mLyricColorMap; // 0x2b4 + std::map mLyricAlphaMap; // 0x2cc + ObjPtr mVocalMics; // 0x2e4 ObjPtr unk2f0; // 0x2f0 - float unk2fc; // 0x2fc - float unk300; // 0x300 - float unk304; // 0x304 - ObjPtrList unk308; // 0x308 - ObjPtr unk318; // 0x318 - ObjPtr unk324; // 0x324 - ObjPtr unk330; // 0x330 - ObjPtr unk33c; // 0x33c - ObjPtr unk348; // 0x348 - ObjPtr unk354; // 0x354 - ObjPtr unk360; // 0x360 - ObjPtr unk36c; // 0x36c - ObjPtr unk378; // 0x378 - ObjPtr unk384; // 0x384 - ObjPtr unk390; // 0x390 - bool unk39c; // 0x39c - float unk3a0; // 0x3a0 - ObjPtr unk3a4; // 0x3a4 - ObjPtr unk3b0; // 0x3b0 - bool unk3bc; // 0x3bc - float unk3c0; // 0x3c0 - ObjPtr unk3c4; // 0x3c4 - bool unk3d0; // 0x3d0 - float unk3d4; // 0x3d4 - ObjPtr unk3d8; // 0x3d8 - ObjPtr unk3e4; // 0x3e4 - ObjPtr unk3f0; // 0x3f0 - float unk3fc; // 0x3fc - ObjPtr unk400; // 0x400 - bool unk40c; // 0x40c - float unk410; // 0x410 - float unk414; // 0x414 - float unk418; // 0x418 - float unk41c; // 0x41c - float unk420; // 0x420 - float unk424; // 0x424 - float unk428; // 0x428 + float mMinPitchRange; // 0x2fc + float mPitchDisplayMargin; // 0x300 + float mArrowSmoothing; // 0x304 + ObjPtrList mConfigurableObjects; // 0x308 + ObjPtr mVoxCfg; // 0x318 + ObjPtr mTambourineSmasher; // 0x324 + ObjPtr mTambourineNowShowTrig; // 0x330 + ObjPtr mTambourineNowHideTrig; // 0x33c + ObjPtr mLeadPhraseFeedbackBottomLbl; // 0x348 + ObjPtr mPhraseFeedbackTrig; // 0x354 + ObjPtr mSpotlightSparklesOnlyTrig; // 0x360 + ObjPtr mSpotlightPhraseSuccessTrig; // 0x36c + ObjPtr mPitchArrow1; // 0x378 + ObjPtr mPitchArrow2; // 0x384 + ObjPtr mPitchArrow3; // 0x390 + bool mPitchWindow; // 0x39c + float mPitchWindowHeight; // 0x3a0 + ObjPtr mPitchWindowMesh; // 0x3a4 + ObjPtr mPitchWindowOverlay; // 0x3b0 + bool mLeadLyrics; // 0x3bc + float mLeadLyricHeight; // 0x3c0 + ObjPtr mLeadLyricMesh; // 0x3c4 + bool mHarmLyrics; // 0x3d0 + float mHarmLyricHeight; // 0x3d4 + ObjPtr mHarmLyricMesh; // 0x3d8 + ObjPtr mLeftDecoMesh; // 0x3e4 + ObjPtr mRightDecoMesh; // 0x3f0 + float mNowBarWidth; // 0x3fc + ObjPtr mNowBarMesh; // 0x400 + bool mRemoteVocals; // 0x40c + float mTrackLeftX; // 0x410 + float mTrackRightX; // 0x414 + float mTrackBottomZ; // 0x418 + float mTrackTopZ; // 0x41c + float mPitchBottomZ; // 0x420 + float mPitchTopZ; // 0x424 + float mNowBarX; // 0x428 float unk42c; // 0x42c - Symbol unk430; // 0x430 - ObjPtr unk434; // 0x434 - ObjPtr unk440; // 0x440 - ObjPtr unk44c; // 0x44c + Symbol mPitchGuides; // 0x430 + ObjPtr mTubeStyle; // 0x434 + ObjPtr mArrowStyle; // 0x440 + ObjPtr mFontStyle; // 0x44c ObjPtr unk458; // 0x458 ObjPtr unk464; // 0x464 ObjPtr unk470; // 0x470 ObjPtr unk47c; // 0x47c - float unk488; // 0x488 - float unk48c; // 0x48c - float unk490; // 0x490 - int unk494; // 0x494 - ObjPtr unk498; // 0x498 - ObjPtr unk4a4; // 0x4a4 + float mLastMin; // 0x488 + float mLastMax; // 0x48c + float mMiddleCZPos; // 0x490 + int mTonic; // 0x494 + ObjPtr mRangeScaleAnim; // 0x498 + ObjPtr mRangeOffsetAnim; // 0x4a4 bool unk4b0; // 0x4b0 int unk4b4; // 0x4b4 - int unk4b8; // 0x4b8 - int unk4bc; // 0x4bc - int unk4c0; // 0x4c0 - int unk4c4; // 0x4c4 - int unk4c8; // 0x4c8 - int unk4cc; // 0x4cc - int unk4d0; // 0x4d0 - int unk4d4; // 0x4d4 - ObjPtr unk4d8; // 0x4d8 - ObjPtr unk4e4; // 0x4e4 - ObjPtr unk4f0; // 0x4f0 - ObjPtr unk4fc; // 0x4fc - ObjPtr unk508; // 0x508 - ObjPtr unk514; // 0x514 - ObjPtr unk520; // 0x520 - ObjPtr unk52c; // 0x52c - ObjPtr unk538; // 0x538 - ObjPtr unk544; // 0x544 - ObjPtr unk550; // 0x550 - ObjPtr unk55c; // 0x55c - ObjPtr unk568; // 0x568 - ObjPtr unk574; // 0x574 + RndTransformable* mLeftTrans; // 0x4b8 + RndTransformable* mRightTrans; // 0x4bc + RndTransformable* mBottomTrans; // 0x4c0 + RndTransformable* mTopTrans; // 0x4c4 + RndTransformable* mPitchBottomTrans; // 0x4c8 + RndTransformable* mPitchTopTrans; // 0x4cc + RndTransformable* mPitchMidTrans; // 0x4d0 + RndTransformable* mNowTrans; // 0x4d4 + ObjPtr mTubeRangeGrp; // 0x4d8 + ObjPtr mTubeSpotlightGrp; // 0x4e4 + ObjPtr mTubeBack0Grp; // 0x4f0 + ObjPtr mTubeBack1Grp; // 0x4fc + ObjPtr mTubeBack2Grp; // 0x508 + ObjPtr mTubeFront0Grp; // 0x514 + ObjPtr mTubeFront1Grp; // 0x520 + ObjPtr mTubeFront2Grp; // 0x52c + ObjPtr mTubeGlow0Grp; // 0x538 + ObjPtr mTubeGlow1Grp; // 0x544 + ObjPtr mTubeGlow2Grp; // 0x550 + ObjPtr mTubePhoneme0Grp; // 0x55c + ObjPtr mTubePhoneme1Grp; // 0x568 + ObjPtr mTubePhoneme2Grp; // 0x574 ObjPtr unk580; // 0x580 ObjPtr unk58c; // 0x58c ObjPtr unk598; // 0x598 @@ -142,27 +164,27 @@ class VocalTrackDir : public RndDir, public BandTrack { ObjPtr unk5f8; // 0x5f8 ObjPtr unk604; // 0x604 ObjPtr unk610; // 0x610 - ObjPtr unk61c; // 0x61c - ObjPtr unk628; // 0x628 - ObjPtr unk634; // 0x634 - ObjPtr unk640; // 0x640 - ObjPtr unk64c; // 0x64c - ObjPtr unk658; // 0x658 - ObjPtr unk664; // 0x664 - ObjPtr unk670; // 0x670 - ObjPtr unk67c; // 0x67c - ObjPtr unk688; // 0x688 + ObjPtr mVocalsGrp; // 0x61c + ObjPtr mScroller; // 0x628 + ObjPtr mLeadLyricScroller; // 0x634 + ObjPtr mHarmonyLyricScroller; // 0x640 + ObjPtr mBREGrp; // 0x64c + ObjPtr mLeadBREGrp; // 0x658 + ObjPtr mHarmonyBREGrp; // 0x664 + ObjPtr mPitchScrollGroup; // 0x670 + ObjPtr mLeadLyricScrollGroup; // 0x67c + ObjPtr mHarmonyLyricScrollGroup; // 0x688 float unk694; // 0x694 float unk698; // 0x698 float unk69c; // 0x69c float unk6a0; // 0x6a0 - ObjPtr unk6a4; // 0x6a4 - ObjPtr unk6b0; // 0x6b0 + ObjPtr mLeadDeployMat; // 0x6a4 + ObjPtr mHarmDeployMat; // 0x6b0 float unk6bc; // 0x6bc float unk6c0; // 0x6c0 int unk6c4; // 0x6c4 bool unk6c8; // 0x6c8 - ObjPtr unk6cc; // 0x6cc + ObjPtr mArrowFXDrawGrp; // 0x6cc float unk6d8; // 0x6d8 float unk6dc; // 0x6dc bool unk6e0; // 0x6e0 diff --git a/src/system/rndobj/Dir.h b/src/system/rndobj/Dir.h index 934fcbf2..da1c26aa 100644 --- a/src/system/rndobj/Dir.h +++ b/src/system/rndobj/Dir.h @@ -45,7 +45,7 @@ class RndDir : public ObjectDir, public RndDrawable, public RndAnimatable, publi virtual void Enter(); virtual void Exit(); virtual void ListPollChildren(std::list&) const; - virtual void Highlight(); + virtual void Highlight(){ RndDrawable::Highlight(); } virtual void Export(DataArray*, bool); virtual void ChainSourceSubdir(MsgSource*, ObjectDir*); diff --git a/src/system/rndobj/TexRenderer.h b/src/system/rndobj/TexRenderer.h index 6ba4d3ee..8262ef5d 100644 --- a/src/system/rndobj/TexRenderer.h +++ b/src/system/rndobj/TexRenderer.h @@ -19,7 +19,7 @@ class RndTexRenderer : public RndDrawable, public RndAnimatable, public RndPolla virtual void Load(BinStream&); virtual void DrawShowing(); virtual void ListDrawChildren(std::list&); - virtual void DrawPreClear(); + virtual void DrawPreClear(){ DrawToTexture(); } virtual void UpdatePreClearState(); virtual ~RndTexRenderer(); virtual void Enter(); diff --git a/src/system/synth/MicManagerInterface.h b/src/system/synth/MicManagerInterface.h new file mode 100644 index 00000000..8f8a5c2a --- /dev/null +++ b/src/system/synth/MicManagerInterface.h @@ -0,0 +1,17 @@ +#pragma once + +class MicClientID { +public: + MicClientID(int i, int j) : unk0(i), unk4(j) {} + int unk0; + int unk4; +}; + +class MicManagerInterface { +public: + MicManagerInterface(){} + virtual ~MicManagerInterface(){} + virtual void HandleMicsChanged() = 0; + virtual void SetPlayback(bool) = 0; + virtual float GetEnergyForMic(const MicClientID&) = 0; +}; \ No newline at end of file diff --git a/src/system/track/TrackDir.h b/src/system/track/TrackDir.h index 84f56325..4d6f63c6 100644 --- a/src/system/track/TrackDir.h +++ b/src/system/track/TrackDir.h @@ -8,6 +8,7 @@ class RndGroup; class RndMesh; class TrackTest; class TrackWidget; +class ArpeggioShapePool; class TrackDir : public PanelDir { public: @@ -28,7 +29,7 @@ class TrackDir : public PanelDir { virtual void SyncFingerFeedback(); virtual void SetDisplayRange(float){} virtual void SetDisplayOffset(float, bool){} - virtual int SmasherPlate(); // change return type + virtual RndDir* SmasherPlate(); virtual float GetFretPosOffset(int) const; virtual int GetNumFretPosOffsets() const { return 0; } virtual float GetCurrentChordLabelPosOffset() const; @@ -38,13 +39,13 @@ class TrackDir : public PanelDir { virtual void ClearChordMeshRefCounts(); virtual void DeleteUnusedChordMeshes(); virtual void AddChordImpl(RndMesh*, TrackWidget*, TrackWidget*, TrackWidget*, float, const std::vector&, class String); - virtual int GetArpeggioShapePool(); + virtual ArpeggioShapePool* GetArpeggioShapePool(); virtual bool IsBlackKey(int) const; virtual void KeyMissLeft(); virtual void KeyMissRight(); virtual bool IsActiveInSession() const { return false; } - virtual void PreDraw(); - virtual void PostDraw(); + virtual void PreDraw(){} + virtual void PostDraw(){} void AddActiveWidget(class TrackWidget*); void AddTestWidget(class TrackWidget*, int);