Skip to content

Commit

Permalink
Add Handlers/PropSyncs/other context funcs to the bandobj folder (#345)
Browse files Browse the repository at this point in the history
* start adding handlers/propsyncs/other context to bandobjs

* more handlers/propsyncs/ctx

* more ctx

* bands ctx

* bandchardsec

* even moar band ctx

* moved on from band classes wow

* layerdir ctx

* outfitconfig

* patch ctx

* display and arrow ctx

* bandtrack ctx

* trackpaneldir ctx

* gemtrackdir ctx

* more gemtrackdir ctx

* vocaltrackdir propsync

* vocaltrackdir handler

* vocaltrackdir sync objects
  • Loading branch information
rjkiv authored Sep 14, 2024
1 parent 76e6717 commit 1021f87
Show file tree
Hide file tree
Showing 79 changed files with 2,243 additions and 504 deletions.
114 changes: 111 additions & 3 deletions src/system/bandobj/BandCharDesc.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
}

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
23 changes: 21 additions & 2 deletions src/system/bandobj/BandCharDesc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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);
Expand All @@ -138,7 +158,6 @@ class BandCharDesc : public virtual Hmx::Object, public FixedSizeSaveable {
float mMuscle; // 0x220
int unk224; // 0x224
std::vector<Patch> mPatches; // 0x228
int unk230; // 0x230
};

class BandCharDescTest : public BandCharDesc {
Expand Down
14 changes: 13 additions & 1 deletion src/system/bandobj/BandConfiguration.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "bandobj/BandConfiguration.h"
#include "utl/Symbols.h"

BandConfiguration::BandConfiguration(){
for(int i = 0; i < 4; i++){
Expand All @@ -17,4 +18,15 @@ BandConfiguration::~BandConfiguration(){
for(int i = 0; i < 4; i++){
delete mXfms[i].mWay;
}
}
}

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
5 changes: 5 additions & 0 deletions src/system/bandobj/BandConfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
77 changes: 72 additions & 5 deletions src/system/bandobj/BandCrowdMeter.cpp
Original file line number Diff line number Diff line change
@@ -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) {

}
}

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<EventTrigger>("band_energy_deploy.trig", true);
if(!mBandEnergyStopTrig) mBandEnergyStopTrig = Find<EventTrigger>("band_energy_stop.trig", true);
if(!mDisabledStartTrig) mDisabledStartTrig = Find<EventTrigger>("disabled_start.trig", true);
if(!mDisabledStopTrig) mDisabledStopTrig = Find<EventTrigger>("disabled_stop.trig", true);
if(!mShowPeakArrowTrig) mShowPeakArrowTrig = Find<EventTrigger>("show_peak_arrow.trig", true);
if(!mHidePeakArrowTrig) mHidePeakArrowTrig = Find<EventTrigger>("hide_peak_arrow.trig", true);
if(!mCrowdMeterAnim) mCrowdMeterAnim = Find<RndMatAnim>("crowd_meter.mnm", true);
if(!mCanJoinTrig) mCanJoinTrig = Find<EventTrigger>("can_join.trig", true);
if(!mCannotJoinTrig) mCannotJoinTrig = Find<EventTrigger>("cannot_join.trig", true);
if(!mJoinInvalidTrig) mJoinInvalidTrig = Find<EventTrigger>("join_invalid.trig", true);
if(mIcons.size() != 5){
mIcons.clear();
for(int i = 0; i < 5; i++){
mIcons.push_back(IconData(this, Find<CrowdMeterIcon>(MakeString("icon_%1d", i), true), Find<RndGroup>(MakeString("icon_%d.grp", i), true)));
}
}
if(mExcitementTrigs.size() != 5){
mExcitementTrigs.clear();
mExcitementTrigs.push_back(ObjPtr<EventTrigger, ObjectDir>(this, Find<EventTrigger>("excitement_boot.trig", true)));
mExcitementTrigs.push_back(ObjPtr<EventTrigger, ObjectDir>(this, Find<EventTrigger>("excitement_bad.trig", true)));
mExcitementTrigs.push_back(ObjPtr<EventTrigger, ObjectDir>(this, Find<EventTrigger>("excitement_okay.trig", true)));
mExcitementTrigs.push_back(ObjPtr<EventTrigger, ObjectDir>(this, Find<EventTrigger>("excitement_great.trig", true)));
mExcitementTrigs.push_back(ObjPtr<EventTrigger, ObjectDir>(this, Find<EventTrigger>("excitement_peak.trig", true)));
}
RndDir::SyncObjects();
}
#pragma pop
Loading

0 comments on commit 1021f87

Please sign in to comment.