diff --git a/config/SZBE69/objects.json b/config/SZBE69/objects.json index 26fb3c55..80b58dcf 100644 --- a/config/SZBE69/objects.json +++ b/config/SZBE69/objects.json @@ -68,6 +68,7 @@ "system/bandobj/BandConfiguration.cpp": "NonMatching", "system/bandobj/BandCrowdMeter.cpp": "NonMatching", "system/bandobj/BandDirector.cpp": "NonMatching", + "system/bandobj/BandFaceDeform.cpp": "NonMatching", "system/bandobj/BandHeadShaper.cpp": "NonMatching", "system/bandobj/BandHighlight.cpp": "NonMatching", "system/bandobj/BandLabel.cpp": "NonMatching", @@ -84,6 +85,8 @@ "system/bandobj/CrowdMeterIcon.cpp": "NonMatching", "system/bandobj/EndingBonus.cpp": "NonMatching", "system/bandobj/FingerShape.cpp": "NonMatching", + "system/bandobj/GemTrackDir.cpp": "NonMatching", + "system/bandobj/GemTrackResourceManager.cpp": "NonMatching", "system/bandobj/InlineHelp.cpp": "NonMatching", "system/bandobj/NoteTube.cpp": "NonMatching", "system/bandobj/OutfitConfig.cpp": "NonMatching", diff --git a/config/SZBE69/splits.txt b/config/SZBE69/splits.txt index e8bfc884..c9e3d1e6 100644 --- a/config/SZBE69/splits.txt +++ b/config/SZBE69/splits.txt @@ -976,6 +976,9 @@ system/bandobj/BandCrowdMeter.cpp: system/bandobj/BandHighlight.cpp: .text start:0x803A8A44 end:0x803A9C80 +system/bandobj/BandFaceDeform.cpp: + .text start:0x803A9C80 end:0x803ABC68 + system/bandobj/BandLabel.cpp: .text start:0x803B0390 end:0x803B1FA8 @@ -1053,9 +1056,12 @@ rb3/streakmeter.cpp: rb3/overdrivemeter.cpp: .text start:0x804260A4 end:0x80426FDC -rb3/gemtrackdir.cpp: +system/bandobj/GemTrackDir.cpp: .text start:0x80426FDC end:0x80430F2C +system/bandobj/GemTrackResourceManager.cpp: + .text start:0x80430F2C end:0x80431DC8 + system/bandobj/VocalTrackDir.cpp: .text start:0x80431DC8 end:0x8043B9C0 diff --git a/config/SZBE69/symbols.txt b/config/SZBE69/symbols.txt index 6ff51a12..07c45b5c 100644 --- a/config/SZBE69/symbols.txt +++ b/config/SZBE69/symbols.txt @@ -7506,7 +7506,7 @@ fn_800D2664 = .text:0x800D2664; // type:function size:0x8 UpdateLeftyFlip__10GemManagerFv = .text:0x800D266C; // type:function size:0x5F8 fn_800D2C64 = .text:0x800D2C64; // type:function size:0x2C fn_800D2C90 = .text:0x800D2C90; // type:function size:0x8 -fn_800D2C98 = .text:0x800D2C98; // type:function size:0xA0 +Find<11TrackWidget>__9ObjectDirFPCcb_P11TrackWidget = .text:0x800D2C98; // type:function size:0xA0 fn_800D2D38 = .text:0x800D2D38; // type:function size:0x40 fn_800D2D78 = .text:0x800D2D78; // type:function size:0xC fn_800D2D84 = .text:0x800D2D84; // type:function size:0x8 @@ -8186,7 +8186,7 @@ SetLefty__11TrackConfigFb = .text:0x800E4380; // type:function size:0x8 SetGameCymbalLanes__11TrackConfigFUi = .text:0x800E4388; // type:function size:0x8 SetDisableHopos__11TrackConfigFb = .text:0x800E4390; // type:function size:0x8 SetTrackNum__11TrackConfigFi = .text:0x800E4398; // type:function size:0x8 -fn_800E43A0 = .text:0x800E43A0; // type:function size:0x4 +push_back__Q211stlpmtx_std45vector>FRCf = .text:0x800E43A0; // type:function size:0x4 fn_800E43A4 = .text:0x800E43A4; // type:function size:0x88 fn_800E442C = .text:0x800E442C; // type:function size:0x14 clear__Q211stlpmtx_std45vector>Fv = .text:0x800E4440; // type:function size:0x4 @@ -12474,7 +12474,7 @@ fn_80160EBC = .text:0x80160EBC; // type:function size:0x58 fn_80160F14 = .text:0x80160F14; // type:function size:0x20 fn_80160F34 = .text:0x80160F34; // type:function size:0x2C fn_80160F60 = .text:0x80160F60; // type:function size:0x4C -fn_80160FAC = .text:0x80160FAC; // type:function size:0x4 +pop_back__Q211stlpmtx_std45vector>Fv = .text:0x80160FAC; // type:function size:0x4 fn_80160FB0 = .text:0x80160FB0; // type:function size:0x3C fn_80160FEC = .text:0x80160FEC; // type:function size:0x40 fn_8016102C = .text:0x8016102C; // type:function size:0x7C @@ -21695,7 +21695,7 @@ fn_802927F0 = .text:0x802927F0; // type:function size:0x8 fn_802927F8 = .text:0x802927F8; // type:function size:0x8 fn_80292800 = .text:0x80292800; // type:function size:0x54 Handle__17StoreSongSortNodeFP9DataArrayb = .text:0x80292854; // type:function size:0x17C -fn_802929D0 = .text:0x802929D0; // type:function size:0xA0 +Find<10BandButton>__9ObjectDirFPCcb_P10BandButton = .text:0x802929D0; // type:function size:0xA0 __ct__10DynamicTexFPCcPCcbb = .text:0x80292A70; // type:function size:0x10C SetBlend__6RndMatF5Blend = .text:0x80292B7C; // type:function size:0x28 SetZMode__6RndMatF5ZMode = .text:0x80292BA4; // type:function size:0x28 @@ -27698,7 +27698,7 @@ MemOrPoolFree__Fi8PoolTypePv = .text:0x80354878; // type:function size:0x20 _MemOrPoolAllocSTL__Fi8PoolType = .text:0x80354898; // type:function size:0x30 _MemOrPoolFreeSTL__Fi8PoolTypePv = .text:0x803548C8; // type:function size:0x20 fn_803548E8 = .text:0x803548E8; // type:function size:0x4 -fn_803548EC = .text:0x803548EC; // type:function size:0xD4 +MemResizeElem__FRPvRiPviiPCc = .text:0x803548EC; // type:function size:0xD4 fn_803549C0 = .text:0x803549C0; // type:function size:0x70 InitDefaultHeap__21@unnamed@Mem_Wii_cpp@Fv = .text:0x80354A30; // type:function size:0xC8 fn_80354AF8 = .text:0x80354AF8; // type:function size:0x8 @@ -28584,7 +28584,7 @@ NewObject__10PitchArrowFv = .text:0x803874B4; // type:function size:0x44 fn_803874F8 = .text:0x803874F8; // type:function size:0x4C Init__11GemTrackDirFv = .text:0x80387544; // type:function size:0x34 NewObject__11GemTrackDirFv = .text:0x80387578; // type:function size:0x44 -fn_803875BC = .text:0x803875BC; // type:function size:0x4C +StaticClassName__11GemTrackDirFv = .text:0x803875BC; // type:function size:0x4C Init__11EndingBonusFv = .text:0x80387608; // type:function size:0x34 NewObject__11EndingBonusFv = .text:0x8038763C; // type:function size:0x44 StaticClassName__11EndingBonusFv = .text:0x80387680; // type:function size:0x4C @@ -28597,7 +28597,7 @@ __ct__8BandSongFv = .text:0x80387808; // type:function size:0x88 StaticClassName__8BandSongFv = .text:0x80387890; // type:function size:0x4C Init__14BandFaceDeformFv = .text:0x803878DC; // type:function size:0x34 NewObject__14BandFaceDeformFv = .text:0x80387910; // type:function size:0x34 -fn_80387944 = .text:0x80387944; // type:function size:0x4C +StaticClassName__14BandFaceDeformFv = .text:0x80387944; // type:function size:0x4C Init__15BandStarDisplayFv = .text:0x80387990; // type:function size:0x34 NewObject__15BandStarDisplayFv = .text:0x803879C4; // type:function size:0x44 StaticClassName__15BandStarDisplayFv = .text:0x80387A08; // type:function size:0x4C @@ -29008,13 +29008,13 @@ SyncPlayMode__17BandConfigurationFv = .text:0x80393050; // type:function size:0x __rs__FR9BinStreamRQ217BandConfiguration14TargTransforms = .text:0x803930EC; // type:function size:0xC0 Save__17BandConfigurationFR9BinStream = .text:0x803931AC; // type:function size:0x4 Load__17BandConfigurationFR9BinStream = .text:0x803931B0; // type:function size:0xB4 -fn_80393264 = .text:0x80393264; // type:function size:0x8 +SetModeSink__12BandWardrobeFPQ23Hmx6Object = .text:0x80393264; // type:function size:0x8 Copy__17BandConfigurationFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x8039326C; // type:function size:0xB0 __as__Q217BandConfiguration13TargTransformFRCQ217BandConfiguration13TargTransform = .text:0x8039331C; // type:function size:0x40 Handle__17BandConfigurationFP9DataArrayb = .text:0x8039335C; // type:function size:0x1B4 OnStoreConfiguration__17BandConfigurationFP9DataArray = .text:0x80393510; // type:function size:0xC8 LocalXfm__16RndTransformableCFv = .text:0x803935D8; // type:function size:0x8 -fn_803935E0 = .text:0x803935E0; // type:function size:0x8 +VenueNames__12BandWardrobeFv = .text:0x803935E0; // type:function size:0x8 OnReleaseConfiguration__17BandConfigurationFP9DataArray = .text:0x803935E8; // type:function size:0x78 SyncProperty__17BandConfigurationFR8DataNodeP9DataArrayi6PropOp = .text:0x80393660; // type:function size:0x6C ClassName__17BandConfigurationCFv = .text:0x803936CC; // type:function size:0x4 @@ -29517,7 +29517,7 @@ PostLoad__14BandCrowdMeterFR9BinStream = .text:0x803A623C; // type:function size Copy__14BandCrowdMeterFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x803A6240; // type:function size:0x90 __as__Q211stlpmtx_std67vector>FRCQ211stlpmtx_std67vector> = .text:0x803A62D0; // type:function size:0x30 fn_803A6300 = .text:0x803A6300; // type:function size:0x47C -fn_803A677C = .text:0x803A677C; // type:function size:0x4 +push_back__Q211stlpmtx_std113vector<33ObjPtr<12EventTrigger,9ObjectDir>,Us,Q211stlpmtx_std49StlNodeAlloc<33ObjPtr<12EventTrigger,9ObjectDir>>>FRC33ObjPtr<12EventTrigger,9ObjectDir> = .text:0x803A677C; // type:function size:0x4 fn_803A6780 = .text:0x803A6780; // type:function size:0x88 fn_803A6808 = .text:0x803A6808; // type:function size:0x2C fn_803A6834 = .text:0x803A6834; // type:function size:0x10 @@ -29725,20 +29725,20 @@ ClassName__13BandHighlightCFv = .text:0x803A9AD8; // type:function size:0x4 @176@Handle__13BandHighlightFP9DataArrayb = .text:0x803A9C68; // type:function size:0x8 @176@SetType__13BandHighlightF6Symbol = .text:0x803A9C70; // type:function size:0x8 @176@ClassName__13BandHighlightCFv = .text:0x803A9C78; // type:function size:0x8 -fn_803A9C80 = .text:0x803A9C80; // type:function size:0x10 -fn_803A9C90 = .text:0x803A9C90; // type:function size:0x3C -fn_803A9CCC = .text:0x803A9CCC; // type:function size:0x50 -fn_803A9D1C = .text:0x803A9D1C; // type:function size:0x58 -fn_803A9D74 = .text:0x803A9D74; // type:function size:0x8 -fn_803A9D7C = .text:0x803A9D7C; // type:function size:0x30 -fn_803A9DAC = .text:0x803A9DAC; // type:function size:0x8 -fn_803A9DB4 = .text:0x803A9DB4; // type:function size:0xC -fn_803A9DC0 = .text:0x803A9DC0; // type:function size:0x10 -fn_803A9DD0 = .text:0x803A9DD0; // type:function size:0x60 -fn_803A9E30 = .text:0x803A9E30; // type:function size:0x25C +__ct__Q214BandFaceDeform10DeltaArrayFv = .text:0x803A9C80; // type:function size:0x10 +__ct__Q214BandFaceDeform10DeltaArrayFRCQ214BandFaceDeform10DeltaArray = .text:0x803A9C90; // type:function size:0x3C +__as__Q214BandFaceDeform10DeltaArrayFRCQ214BandFaceDeform10DeltaArray = .text:0x803A9CCC; // type:function size:0x50 +__dt__Q214BandFaceDeform10DeltaArrayFv = .text:0x803A9D1C; // type:function size:0x58 +Clear__Q214BandFaceDeform10DeltaArrayFv = .text:0x803A9D74; // type:function size:0x8 +next__5DeltaFv = .text:0x803A9D7C; // type:function size:0x30 +thisoffset__5DeltaFv = .text:0x803A9DAC; // type:function size:0x8 +offset__5DeltaFUs = .text:0x803A9DB4; // type:function size:0xC +end__Q214BandFaceDeform10DeltaArrayFv = .text:0x803A9DC0; // type:function size:0x10 +NumVerts__Q214BandFaceDeform10DeltaArrayFv = .text:0x803A9DD0; // type:function size:0x60 +AppendDeltas__Q214BandFaceDeform10DeltaArrayFRCQ211stlpmtx_std59vector<7Vector3,Us,Q211stlpmtx_std22StlNodeAlloc<7Vector3>>RCQ211stlpmtx_std59vector<7Vector3,Us,Q211stlpmtx_std22StlNodeAlloc<7Vector3>> = .text:0x803A9E30; // type:function size:0x25C fn_803AA08C = .text:0x803AA08C; // type:function size:0x34 fn_803AA0C0 = .text:0x803AA0C0; // type:function size:0xBC -fn_803AA17C = .text:0x803AA17C; // type:function size:0x50 +SetSize__Q214BandFaceDeform10DeltaArrayFi = .text:0x803AA17C; // type:function size:0x50 __ct__14BandFaceDeformFv = .text:0x803AA1CC; // type:function size:0x54 fn_803AA220 = .text:0x803AA220; // type:function size:0x58 fn_803AA278 = .text:0x803AA278; // type:function size:0x80 @@ -29751,11 +29751,11 @@ fn_803AA4EC = .text:0x803AA4EC; // type:function size:0x28 fn_803AA514 = .text:0x803AA514; // type:function size:0x8 fn_803AA51C = .text:0x803AA51C; // type:function size:0x8 fn_803AA524 = .text:0x803AA524; // type:function size:0x3C -fn_803AA560 = .text:0x803AA560; // type:function size:0x30 +__ct__Q211stlpmtx_std103vector>FRCQ211stlpmtx_std44StlNodeAlloc = .text:0x803AA560; // type:function size:0x30 fn_803AA590 = .text:0x803AA590; // type:function size:0x30 fn_803AA5C0 = .text:0x803AA5C0; // type:function size:0x40 -fn_803AA600 = .text:0x803AA600; // type:function size:0x68 -fn_803AA668 = .text:0x803AA668; // type:function size:0xE0 +__dt__14BandFaceDeformFv = .text:0x803AA600; // type:function size:0x68 +SetFromMeshAnim__14BandFaceDeformFP11RndMeshAnimP11RndMeshAnimii = .text:0x803AA668; // type:function size:0xE0 fn_803AA748 = .text:0x803AA748; // type:function size:0x4 fn_803AA74C = .text:0x803AA74C; // type:function size:0x90 fn_803AA7DC = .text:0x803AA7DC; // type:function size:0x4 @@ -29767,34 +29767,34 @@ fn_803AA8E0 = .text:0x803AA8E0; // type:function size:0x58 fn_803AA938 = .text:0x803AA938; // type:function size:0x28 fn_803AA960 = .text:0x803AA960; // type:function size:0x68 VertPointsKeys__11RndMeshAnimFv = .text:0x803AA9C8; // type:function size:0x28 -fn_803AA9F0 = .text:0x803AA9F0; // type:function size:0x68 -fn_803AAA58 = .text:0x803AAA58; // type:function size:0x70 -fn_803AAAC8 = .text:0x803AAAC8; // type:function size:0x30 -fn_803AAAF8 = .text:0x803AAAF8; // type:function size:0x38 -fn_803AAB30 = .text:0x803AAB30; // type:function size:0xB4 -fn_803AABE4 = .text:0x803AABE4; // type:function size:0x4 -fn_803AABE8 = .text:0x803AABE8; // type:function size:0x70 -fn_803AAC58 = .text:0x803AAC58; // type:function size:0x8C +TotalSize__14BandFaceDeformFv = .text:0x803AA9F0; // type:function size:0x68 +Copy__14BandFaceDeformFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x803AAA58; // type:function size:0x70 +__as__Q211stlpmtx_std103vector>FRCQ211stlpmtx_std103vector> = .text:0x803AAAC8; // type:function size:0x30 +__rs__FR9BinStreamRQ214BandFaceDeform10DeltaArray = .text:0x803AAAF8; // type:function size:0x38 +Load__Q214BandFaceDeform10DeltaArrayFR9BinStream = .text:0x803AAB30; // type:function size:0xB4 +Save__14BandFaceDeformFR9BinStream = .text:0x803AABE4; // type:function size:0x4 +Load__14BandFaceDeformFR9BinStream = .text:0x803AABE8; // type:function size:0x70 +__rs__FR9BinStreamRQ211stlpmtx_std103vector>_R9BinStream = .text:0x803AAC58; // type:function size:0x8C Handle__14BandFaceDeformFP9DataArrayb = .text:0x803AACE4; // type:function size:0x120 -fn_803AAE04 = .text:0x803AAE04; // type:function size:0x34 -fn_803AAE38 = .text:0x803AAE38; // type:function size:0x3C -fn_803AAE74 = .text:0x803AAE74; // type:function size:0xDC -fn_803AAF50 = .text:0x803AAF50; // type:function size:0x110 -fn_803AB060 = .text:0x803AB060; // type:function size:0x164 +Obj<11RndMeshAnim>__9DataArrayCFi_P11RndMeshAnim = .text:0x803AAE04; // type:function size:0x34 +Obj<11RndMeshAnim>__8DataNodeCFPC9DataArray_P11RndMeshAnim = .text:0x803AAE38; // type:function size:0x3C +PropSync__FRQ214BandFaceDeform10DeltaArrayR8DataNodeP9DataArrayi6PropOp = .text:0x803AAE74; // type:function size:0xDC +SyncProperty__14BandFaceDeformFR8DataNodeP9DataArrayi6PropOp = .text:0x803AAF50; // type:function size:0x110 +PropSync__FRQ211stlpmtx_std103vector>R8DataNodeP9DataArrayi6PropOp_b = .text:0x803AB060; // type:function size:0x164 fn_803AB1C4 = .text:0x803AB1C4; // type:function size:0x2C fn_803AB1F0 = .text:0x803AB1F0; // type:function size:0x84 fn_803AB274 = .text:0x803AB274; // type:function size:0x2C fn_803AB2A0 = .text:0x803AB2A0; // type:function size:0x68 fn_803AB308 = .text:0x803AB308; // type:function size:0x2C -fn_803AB334 = .text:0x803AB334; // type:function size:0x58 -fn_803AB38C = .text:0x803AB38C; // type:function size:0x160 +insert__Q211stlpmtx_std103vector>FPQ214BandFaceDeform10DeltaArrayRCQ214BandFaceDeform10DeltaArray = .text:0x803AB334; // type:function size:0x58 +__as__Q211stlpmtx_std109_Vector_impl>FRCQ211stlpmtx_std109_Vector_impl> = .text:0x803AB38C; // type:function size:0x160 fn_803AB4EC = .text:0x803AB4EC; // type:function size:0x5C fn_803AB548 = .text:0x803AB548; // type:function size:0x10 fn_803AB558 = .text:0x803AB558; // type:function size:0x28 fn_803AB580 = .text:0x803AB580; // type:function size:0x5C fn_803AB5DC = .text:0x803AB5DC; // type:function size:0x60 -fn_803AB63C = .text:0x803AB63C; // type:function size:0x4 -fn_803AB640 = .text:0x803AB640; // type:function size:0x128 +ClassName__14BandFaceDeformCFv = .text:0x803AB63C; // type:function size:0x4 +SetType__14BandFaceDeformF6Symbol = .text:0x803AB640; // type:function size:0x128 fn_803AB768 = .text:0x803AB768; // type:function size:0x19C fn_803AB904 = .text:0x803AB904; // type:function size:0x5C fn_803AB960 = .text:0x803AB960; // type:function size:0x54 @@ -29804,7 +29804,7 @@ fn_803ABA44 = .text:0x803ABA44; // type:function size:0x114 fn_803ABB58 = .text:0x803ABB58; // type:function size:0x60 fn_803ABBB8 = .text:0x803ABBB8; // type:function size:0x5C fn_803ABC14 = .text:0x803ABC14; // type:function size:0x54 -fn_803ABC68 = .text:0x803ABC68; // type:function size:0x5C +__ct__Q214BandIKEffector10ConstraintFPQ23Hmx6Object = .text:0x803ABC68; // type:function size:0x5C __dt__37ObjPtr<16RndTransformable,9ObjectDir>Fv = .text:0x803ABCC4; // type:function size:0x84 __ct__37ObjPtr<16RndTransformable,9ObjectDir>FPQ23Hmx6ObjectP16RndTransformable = .text:0x803ABD48; // type:function size:0x6C fn_803ABDB4 = .text:0x803ABDB4; // type:function size:0x50 @@ -33490,11 +33490,11 @@ fn_8041681C = .text:0x8041681C; // type:function size:0x404 fn_80416C20 = .text:0x80416C20; // type:function size:0x90 fn_80416CB0 = .text:0x80416CB0; // type:function size:0x4 fn_80416CB4 = .text:0x80416CB4; // type:function size:0x184 -fn_80416E38 = .text:0x80416E38; // type:function size:0x40 +__rs<11RndPropAnim>__FR9BinStreamR32ObjPtr<11RndPropAnim,9ObjectDir>_R9BinStream = .text:0x80416E38; // type:function size:0x40 fn_80416E78 = .text:0x80416E78; // type:function size:0x104 fn_80416F7C = .text:0x80416F7C; // type:function size:0x4 fn_80416F80 = .text:0x80416F80; // type:function size:0xF4 -fn_80417074 = .text:0x80417074; // type:function size:0x8 +__as__32ObjPtr<11RndPropAnim,9ObjectDir>FRC32ObjPtr<11RndPropAnim,9ObjectDir> = .text:0x80417074; // type:function size:0x8 fn_8041707C = .text:0x8041707C; // type:function size:0xB4 GetDerivedObjAtIndex<8RndGroup>__FP9DataArrayi_P8RndGroup = .text:0x80417130; // type:function size:0x34 Obj<8RndGroup>__8DataNodeCFPC9DataArray_P8RndGroup = .text:0x80417164; // type:function size:0x3C @@ -34084,7 +34084,7 @@ fn_80422394 = .text:0x80422394; // type:function size:0x80 fn_80422414 = .text:0x80422414; // type:function size:0x8 fn_8042241C = .text:0x8042241C; // type:function size:0x3C fn_80422458 = .text:0x80422458; // type:function size:0x58 -fn_804224B0 = .text:0x804224B0; // type:function size:0x58 +__dt__Q211stlpmtx_std111vector<32ObjPtr<11RndPropAnim,9ObjectDir>,Us,Q211stlpmtx_std48StlNodeAlloc<32ObjPtr<11RndPropAnim,9ObjectDir>>>Fv = .text:0x804224B0; // type:function size:0x58 fn_80422508 = .text:0x80422508; // type:function size:0x80 fn_80422588 = .text:0x80422588; // type:function size:0x80 fn_80422608 = .text:0x80422608; // type:function size:0x58 @@ -34099,7 +34099,7 @@ fn_80422838 = .text:0x80422838; // type:function size:0x30 fn_80422868 = .text:0x80422868; // type:function size:0x30 fn_80422898 = .text:0x80422898; // type:function size:0x40 fn_804228D8 = .text:0x804228D8; // type:function size:0x50 -fn_80422928 = .text:0x80422928; // type:function size:0x30 +__ct__Q211stlpmtx_std111vector<32ObjPtr<11RndPropAnim,9ObjectDir>,Us,Q211stlpmtx_std48StlNodeAlloc<32ObjPtr<11RndPropAnim,9ObjectDir>>>FRCQ211stlpmtx_std48StlNodeAlloc<32ObjPtr<11RndPropAnim,9ObjectDir>> = .text:0x80422928; // type:function size:0x30 fn_80422958 = .text:0x80422958; // type:function size:0x30 fn_80422988 = .text:0x80422988; // type:function size:0x40 fn_804229C8 = .text:0x804229C8; // type:function size:0x498 @@ -34318,17 +34318,17 @@ fn_80426FC4 = .text:0x80426FC4; // type:function size:0x8 fn_80426FCC = .text:0x80426FCC; // type:function size:0x8 fn_80426FD4 = .text:0x80426FD4; // type:function size:0x8 __ct__11GemTrackDirFv = .text:0x80426FDC; // type:function size:0x7E8 -fn_804277C4 = .text:0x804277C4; // type:function size:0x58 +__dt__Q211stlpmtx_std160map,Q211stlpmtx_std8less,Q211stlpmtx_std75StlNodeAlloc>>>Fv = .text:0x804277C4; // type:function size:0x58 fn_8042781C = .text:0x8042781C; // type:function size:0x60 fn_8042787C = .text:0x8042787C; // type:function size:0x58 fn_804278D4 = .text:0x804278D4; // type:function size:0x58 fn_8042792C = .text:0x8042792C; // type:function size:0x50 -fn_8042797C = .text:0x8042797C; // type:function size:0x80 -fn_804279FC = .text:0x804279FC; // type:function size:0x6C +__dt__40ObjPtr<19ChordShapeGenerator,9ObjectDir>Fv = .text:0x8042797C; // type:function size:0x80 +__dt__36ObjPtrList<11TrackWidget,9ObjectDir>Fv = .text:0x804279FC; // type:function size:0x6C fn_80427A68 = .text:0x80427A68; // type:function size:0x40 -fn_80427AA8 = .text:0x80427AA8; // type:function size:0x44 +pop_back__36ObjPtrList<11TrackWidget,9ObjectDir>Fv = .text:0x80427AA8; // type:function size:0x44 fn_80427AEC = .text:0x80427AEC; // type:function size:0x54 -fn_80427B40 = .text:0x80427B40; // type:function size:0x58 +__dt__Q211stlpmtx_std232vector,33ObjPtr<12EventTrigger,9ObjectDir>>,Us,Q211stlpmtx_std108StlNodeAlloc,33ObjPtr<12EventTrigger,9ObjectDir>>>>Fv = .text:0x80427B40; // type:function size:0x58 fn_80427B98 = .text:0x80427B98; // type:function size:0x80 fn_80427C18 = .text:0x80427C18; // type:function size:0x80 fn_80427C98 = .text:0x80427C98; // type:function size:0x58 @@ -34341,9 +34341,9 @@ fn_80427E3C = .text:0x80427E3C; // type:function size:0x8 fn_80427E44 = .text:0x80427E44; // type:function size:0x3C __dt__26ObjPtr<6RndCam,9ObjectDir>Fv = .text:0x80427E80; // type:function size:0x84 __dt__9BandTrackFv = .text:0x80427F04; // type:function size:0x14C -fn_80428050 = .text:0x80428050; // type:function size:0x80 +__dt__35ObjPtr<14OverdriveMeter,9ObjectDir>Fv = .text:0x80428050; // type:function size:0x80 __dt__32ObjPtr<11StreakMeter,9ObjectDir>Fv = .text:0x804280D0; // type:function size:0x80 -fn_80428150 = .text:0x80428150; // type:function size:0x80 +__dt__35ObjPtr<14TrackInterface,9ObjectDir>Fv = .text:0x80428150; // type:function size:0x80 fn_804281D0 = .text:0x804281D0; // type:function size:0x68 fn_80428238 = .text:0x80428238; // type:function size:0x4 fn_8042823C = .text:0x8042823C; // type:function size:0x88 @@ -34354,100 +34354,100 @@ fn_80428348 = .text:0x80428348; // type:function size:0x4 fn_8042834C = .text:0x8042834C; // type:function size:0x48 fn_80428394 = .text:0x80428394; // type:function size:0x4 fn_80428398 = .text:0x80428398; // type:function size:0x88 -fn_80428420 = .text:0x80428420; // type:function size:0x44 +__ct__Q211stlpmtx_std160map,Q211stlpmtx_std8less,Q211stlpmtx_std75StlNodeAlloc>>>Fv = .text:0x80428420; // type:function size:0x44 fn_80428464 = .text:0x80428464; // type:function size:0x3C fn_804284A0 = .text:0x804284A0; // type:function size:0x70 -fn_80428510 = .text:0x80428510; // type:function size:0x68 -fn_80428578 = .text:0x80428578; // type:function size:0x68 -fn_804285E0 = .text:0x804285E0; // type:function size:0x30 +__ct__40ObjPtr<19ChordShapeGenerator,9ObjectDir>FPQ23Hmx6ObjectP19ChordShapeGenerator = .text:0x80428510; // type:function size:0x68 +__ct__36ObjPtrList<11TrackWidget,9ObjectDir>FPQ23Hmx6Object11ObjListMode = .text:0x80428578; // type:function size:0x68 +__ct__Q211stlpmtx_std232vector,33ObjPtr<12EventTrigger,9ObjectDir>>,Us,Q211stlpmtx_std108StlNodeAlloc,33ObjPtr<12EventTrigger,9ObjectDir>>>>FRCQ211stlpmtx_std108StlNodeAlloc,33ObjPtr<12EventTrigger,9ObjectDir>>> = .text:0x804285E0; // type:function size:0x30 fn_80428610 = .text:0x80428610; // type:function size:0x30 fn_80428640 = .text:0x80428640; // type:function size:0x40 __ct__26ObjPtr<6RndCam,9ObjectDir>FPQ23Hmx6ObjectP6RndCam = .text:0x80428680; // type:function size:0x6C -fn_804286EC = .text:0x804286EC; // type:function size:0x360 -fn_80428A4C = .text:0x80428A4C; // type:function size:0x1D4 -fn_80428C20 = .text:0x80428C20; // type:function size:0xB8 -fn_80428CD8 = .text:0x80428CD8; // type:function size:0x4C +__dt__11GemTrackDirFv = .text:0x804286EC; // type:function size:0x360 +Copy__11GemTrackDirFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x80428A4C; // type:function size:0x1D4 +__as__36ObjPtrList<11TrackWidget,9ObjectDir>FRC36ObjPtrList<11TrackWidget,9ObjectDir> = .text:0x80428C20; // type:function size:0xB8 +push_back__36ObjPtrList<11TrackWidget,9ObjectDir>FP11TrackWidget = .text:0x80428CD8; // type:function size:0x4C fn_80428D24 = .text:0x80428D24; // type:function size:0x78 fn_80428D9C = .text:0x80428D9C; // type:function size:0x2C Set__36ObjPtrList<11CharCollide,9ObjectDir>FQ236ObjPtrList<11CharCollide,9ObjectDir>8iteratorP11CharCollide = .text:0x80428DC8; // type:function size:0x78 -fn_80428E40 = .text:0x80428E40; // type:function size:0x30 -fn_80428E70 = .text:0x80428E70; // type:function size:0x30 +__as__Q211stlpmtx_std113vector<33ObjPtr<12EventTrigger,9ObjectDir>,Us,Q211stlpmtx_std49StlNodeAlloc<33ObjPtr<12EventTrigger,9ObjectDir>>>FRCQ211stlpmtx_std113vector<33ObjPtr<12EventTrigger,9ObjectDir>,Us,Q211stlpmtx_std49StlNodeAlloc<33ObjPtr<12EventTrigger,9ObjectDir>>> = .text:0x80428E40; // type:function size:0x30 +__as__Q211stlpmtx_std111vector<32ObjPtr<11RndPropAnim,9ObjectDir>,Us,Q211stlpmtx_std48StlNodeAlloc<32ObjPtr<11RndPropAnim,9ObjectDir>>>FRCQ211stlpmtx_std111vector<32ObjPtr<11RndPropAnim,9ObjectDir>,Us,Q211stlpmtx_std48StlNodeAlloc<32ObjPtr<11RndPropAnim,9ObjectDir>>> = .text:0x80428E70; // type:function size:0x30 __as__26ObjPtr<6RndCam,9ObjectDir>FRC26ObjPtr<6RndCam,9ObjectDir> = .text:0x80428EA0; // type:function size:0x8 -fn_80428EA8 = .text:0x80428EA8; // type:function size:0x4 -fn_80428EAC = .text:0x80428EAC; // type:function size:0x5C -fn_80428F08 = .text:0x80428F08; // type:function size:0x49C +Save__11GemTrackDirFR9BinStream = .text:0x80428EA8; // type:function size:0x4 +Load__11GemTrackDirFR9BinStream = .text:0x80428EAC; // type:function size:0x5C +PreLoad__11GemTrackDirFR9BinStream = .text:0x80428F08; // type:function size:0x49C __rs<6RndCam>__FR9BinStreamR26ObjPtr<6RndCam,9ObjectDir>_R9BinStream = .text:0x804293A4; // type:function size:0x40 -fn_804293E4 = .text:0x804293E4; // type:function size:0x104 -fn_804294E8 = .text:0x804294E8; // type:function size:0x3C -fn_80429524 = .text:0x80429524; // type:function size:0x11C -fn_80429640 = .text:0x80429640; // type:function size:0x58 -fn_80429698 = .text:0x80429698; // type:function size:0x70 -fn_80429708 = .text:0x80429708; // type:function size:0x9EC +Load__26ObjPtr<6RndCam,9ObjectDir>FR9BinStreambP9ObjectDir = .text:0x804293E4; // type:function size:0x104 +__rs<11TrackWidget>__FR9BinStreamR36ObjPtrList<11TrackWidget,9ObjectDir>_R9BinStream = .text:0x804294E8; // type:function size:0x3C +Load__36ObjPtrList<11TrackWidget,9ObjectDir>FR9BinStreamb = .text:0x80429524; // type:function size:0x11C +PostLoad__11GemTrackDirFR9BinStream = .text:0x80429640; // type:function size:0x58 +SyncFingerFeedback__11GemTrackDirFv = .text:0x80429698; // type:function size:0x70 +SyncObjects__11GemTrackDirFv = .text:0x80429708; // type:function size:0x9EC fn_8042A0F4 = .text:0x8042A0F4; // type:function size:0xA0 Find<10RndEnviron>__9ObjectDirFPCcb_P10RndEnviron = .text:0x8042A194; // type:function size:0xA0 -fn_8042A234 = .text:0x8042A234; // type:function size:0x54 -fn_8042A288 = .text:0x8042A288; // type:function size:0x13C -fn_8042A3C4 = .text:0x8042A3C4; // type:function size:0x130 +Poll__11GemTrackDirFv = .text:0x8042A234; // type:function size:0x54 +SetPitch__11GemTrackDirFf = .text:0x8042A288; // type:function size:0x13C +SetFade__11GemTrackDirFff = .text:0x8042A3C4; // type:function size:0x130 YFov__6RndCamCFv = .text:0x8042A4F4; // type:function size:0x8 NearPlane__6RndCamCFv = .text:0x8042A4FC; // type:function size:0x8 -fn_8042A504 = .text:0x8042A504; // type:function size:0xC -fn_8042A510 = .text:0x8042A510; // type:function size:0xB0 +SetFadeRange__10RndEnvironFff = .text:0x8042A504; // type:function size:0xC +SetFOV__11GemTrackDirFf = .text:0x8042A510; // type:function size:0xB0 FarPlane__6RndCamCFv = .text:0x8042A5C0; // type:function size:0x8 -fn_8042A5C8 = .text:0x8042A5C8; // type:function size:0x80 -fn_8042A648 = .text:0x8042A648; // type:function size:0xE0 -fn_8042A728 = .text:0x8042A728; // type:function size:0xD8 -fn_8042A800 = .text:0x8042A800; // type:function size:0xF4 -fn_8042A8F4 = .text:0x8042A8F4; // type:function size:0x6C -fn_8042A960 = .text:0x8042A960; // type:function size:0x1D8 -fn_8042AB38 = .text:0x8042AB38; // type:function size:0x1E8 -fn_8042AD20 = .text:0x8042AD20; // type:function size:0x150 -fn_8042AE70 = .text:0x8042AE70; // type:function size:0x338 +SetCamPos__11GemTrackDirFfff = .text:0x8042A5C8; // type:function size:0x80 +SetScreenRectX__11GemTrackDirFf = .text:0x8042A648; // type:function size:0xE0 +SetTrackOffset__11GemTrackDirFf = .text:0x8042A728; // type:function size:0xD8 +SetSideAngle__11GemTrackDirFf = .text:0x8042A800; // type:function size:0xF4 +UpdateSurfaceTexture__11GemTrackDirFv = .text:0x8042A8F4; // type:function size:0x6C +OnUpdateFx__11GemTrackDirFi = .text:0x8042A960; // type:function size:0x1D8 +PlayIntro__11GemTrackDirFv = .text:0x8042AB38; // type:function size:0x1E8 +TrackReset__11GemTrackDirFv = .text:0x8042AD20; // type:function size:0x150 +SetupSmasherPlate__11GemTrackDirFv = .text:0x8042AE70; // type:function size:0x338 Obj<6RndDir>__9DataArrayCFi_P6RndDir = .text:0x8042B1A8; // type:function size:0x34 -fn_8042B1DC = .text:0x8042B1DC; // type:function size:0x3C -fn_8042B218 = .text:0x8042B218; // type:function size:0x1BC -fn_8042B3D4 = .text:0x8042B3D4; // type:function size:0xB4 -fn_8042B488 = .text:0x8042B488; // type:function size:0xF4 -fn_8042B57C = .text:0x8042B57C; // type:function size:0x19C -fn_8042B718 = .text:0x8042B718; // type:function size:0x8 -fn_8042B720 = .text:0x8042B720; // type:function size:0x54 -fn_8042B774 = .text:0x8042B774; // type:function size:0x128 -fn_8042B89C = .text:0x8042B89C; // type:function size:0x164 -fn_8042BA00 = .text:0x8042BA00; // type:function size:0xE4 -fn_8042BAE4 = .text:0x8042BAE4; // type:function size:0x16C -fn_8042BC50 = .text:0x8042BC50; // type:function size:0xC4 -fn_8042BD14 = .text:0x8042BD14; // type:function size:0x160 -fn_8042BE74 = .text:0x8042BE74; // type:function size:0xC4 -fn_8042BF38 = .text:0x8042BF38; // type:function size:0x110 -fn_8042C048 = .text:0x8042C048; // type:function size:0xA8 -fn_8042C0F0 = .text:0x8042C0F0; // type:function size:0x110 -fn_8042C200 = .text:0x8042C200; // type:function size:0x24 -fn_8042C224 = .text:0x8042C224; // type:function size:0x84 -fn_8042C2A8 = .text:0x8042C2A8; // type:function size:0x54 -fn_8042C2FC = .text:0x8042C2FC; // type:function size:0x48 -fn_8042C344 = .text:0x8042C344; // type:function size:0x50 -fn_8042C394 = .text:0x8042C394; // type:function size:0x110 -fn_8042C4A4 = .text:0x8042C4A4; // type:function size:0xA4 -fn_8042C548 = .text:0x8042C548; // type:function size:0x6C -fn_8042C5B4 = .text:0x8042C5B4; // type:function size:0x10C -fn_8042C6C0 = .text:0x8042C6C0; // type:function size:0xBC -fn_8042C77C = .text:0x8042C77C; // type:function size:0x98 +Obj<6RndDir>__8DataNodeCFPC9DataArray_P6RndDir = .text:0x8042B1DC; // type:function size:0x3C +ReleaseSmasherPlate__11GemTrackDirFv = .text:0x8042B218; // type:function size:0x1BC +ResetSmashers__11GemTrackDirFb = .text:0x8042B3D4; // type:function size:0xB4 +ResetEffectSelector__11GemTrackDirFv = .text:0x8042B488; // type:function size:0xF4 +SetupInstrument__11GemTrackDirFv = .text:0x8042B57C; // type:function size:0x19C +IsActiveInSession__11GemTrackDirCFv = .text:0x8042B718; // type:function size:0x8 +GameWon__11GemTrackDirFv = .text:0x8042B720; // type:function size:0x54 +Extend__11GemTrackDirFb = .text:0x8042B774; // type:function size:0x128 +Retract__11GemTrackDirFb = .text:0x8042B89C; // type:function size:0x164 +SetStreak__11GemTrackDirFiiib = .text:0x8042BA00; // type:function size:0xE4 +RefreshStreakMeter__11GemTrackDirFiii = .text:0x8042BAE4; // type:function size:0x16C +PeakState__11GemTrackDirFbb = .text:0x8042BC50; // type:function size:0xC4 +SuperStreak__11GemTrackDirFbb = .text:0x8042BD14; // type:function size:0x160 +Deploy__11GemTrackDirFv = .text:0x8042BE74; // type:function size:0xC4 +EnterCoda__11GemTrackDirFv = .text:0x8042BF38; // type:function size:0x110 +DisablePlayer__11GemTrackDirFi = .text:0x8042C048; // type:function size:0xA8 +GemPass__11GemTrackDirFii = .text:0x8042C0F0; // type:function size:0x110 +GemHit__11GemTrackDirFi = .text:0x8042C200; // type:function size:0x24 +SeeKick__11GemTrackDirFv = .text:0x8042C224; // type:function size:0x84 +KickSwing__11GemTrackDirFv = .text:0x8042C2A8; // type:function size:0x54 +SpotlightPhraseSuccess__11GemTrackDirFv = .text:0x8042C2FC; // type:function size:0x48 +SetPerformanceMode__11GemTrackDirFb = .text:0x8042C344; // type:function size:0x50 +Mash__11GemTrackDirFi = .text:0x8042C394; // type:function size:0x110 +FillMash__11GemTrackDirFi = .text:0x8042C4A4; // type:function size:0xA4 +FillHit__11GemTrackDirFi = .text:0x8042C548; // type:function size:0x6C +ResetDrumFill__11GemTrackDirFv = .text:0x8042C5B4; // type:function size:0x10C +ResetCoda__11GemTrackDirFv = .text:0x8042C6C0; // type:function size:0xBC +CrashFill__11GemTrackDirFv = .text:0x8042C77C; // type:function size:0x98 fn_8042C814 = .text:0x8042C814; // type:function size:0x30 fn_8042C844 = .text:0x8042C844; // type:function size:0xA0 -fn_8042C8E4 = .text:0x8042C8E4; // type:function size:0x44 -fn_8042C928 = .text:0x8042C928; // type:function size:0xD0 -fn_8042C9F8 = .text:0x8042C9F8; // type:function size:0xD4 -fn_8042CACC = .text:0x8042CACC; // type:function size:0x8C -fn_8042CB58 = .text:0x8042CB58; // type:function size:0x90 -fn_8042CBE8 = .text:0x8042CBE8; // type:function size:0x48 -fn_8042CC30 = .text:0x8042CC30; // type:function size:0x2A8 -fn_8042CED8 = .text:0x8042CED8; // type:function size:0x70 -fn_8042CF48 = .text:0x8042CF48; // type:function size:0x8 -fn_8042CF50 = .text:0x8042CF50; // type:function size:0x8 -fn_8042CF58 = .text:0x8042CF58; // type:function size:0x1C -fn_8042CF74 = .text:0x8042CF74; // type:function size:0x14 -fn_8042CF88 = .text:0x8042CF88; // type:function size:0x50 -fn_8042CFD8 = .text:0x8042CFD8; // type:function size:0x50 -fn_8042D028 = .text:0x8042D028; // type:function size:0x1D4 +SetInstrument__11GemTrackDirF15TrackInstrument = .text:0x8042C8E4; // type:function size:0x44 +SetPlayerLocal__11GemTrackDirFf = .text:0x8042C928; // type:function size:0xD0 +SetDisplayRange__11GemTrackDirFf = .text:0x8042C9F8; // type:function size:0xD4 +WhiteKeyToSemitone__Fi = .text:0x8042CACC; // type:function size:0x8C +SemitoneToWhiteKey__Fi = .text:0x8042CB58; // type:function size:0x90 +IsBlackKey__11GemTrackDirCFi = .text:0x8042CBE8; // type:function size:0x48 +SetDisplayOffset__11GemTrackDirFfb = .text:0x8042CC30; // type:function size:0x2A8 +GetFretPosOffset__11GemTrackDirCFi = .text:0x8042CED8; // type:function size:0x70 +GetKeyRange__11GemTrackDirFv = .text:0x8042CF48; // type:function size:0x8 +GetKeyOffset__11GemTrackDirFv = .text:0x8042CF50; // type:function size:0x8 +UpdateFingerFeedback__11GemTrackDirFRC7RGState = .text:0x8042CF58; // type:function size:0x1C +UpdateLeftyFlip__11GemTrackDirFb = .text:0x8042CF74; // type:function size:0x14 +KeyMissRight__11GemTrackDirFv = .text:0x8042CF88; // type:function size:0x50 +KeyMissLeft__11GemTrackDirFv = .text:0x8042CFD8; // type:function size:0x50 +PrepareChordMesh__11GemTrackDirFUi = .text:0x8042D028; // type:function size:0x1D4 fn_8042D1FC = .text:0x8042D1FC; // type:function size:0x104 fn_8042D300 = .text:0x8042D300; // type:function size:0x58 fn_8042D358 = .text:0x8042D358; // type:function size:0x40 @@ -34459,12 +34459,12 @@ fn_8042D460 = .text:0x8042D460; // type:function size:0x4 fn_8042D464 = .text:0x8042D464; // type:function size:0x4 fn_8042D468 = .text:0x8042D468; // type:function size:0x40 fn_8042D4A8 = .text:0x8042D4A8; // type:function size:0xAC -fn_8042D554 = .text:0x8042D554; // type:function size:0x8C +GetChordMesh__11GemTrackDirFUib = .text:0x8042D554; // type:function size:0x8C fn_8042D5E0 = .text:0x8042D5E0; // type:function size:0x80 fn_8042D660 = .text:0x8042D660; // type:function size:0x4 fn_8042D664 = .text:0x8042D664; // type:function size:0x8 -fn_8042D66C = .text:0x8042D66C; // type:function size:0x80 -fn_8042D6EC = .text:0x8042D6EC; // type:function size:0x1B4 +ClearChordMeshRefCounts__11GemTrackDirFv = .text:0x8042D66C; // type:function size:0x80 +DeleteUnusedChordMeshes__11GemTrackDirFv = .text:0x8042D6EC; // type:function size:0x1B4 fn_8042D8A0 = .text:0x8042D8A0; // type:function size:0x3C fn_8042D8DC = .text:0x8042D8DC; // type:function size:0x6C fn_8042D948 = .text:0x8042D948; // type:function size:0x2C @@ -34473,15 +34473,15 @@ fn_8042D9A8 = .text:0x8042D9A8; // type:function size:0x88 fn_8042DA30 = .text:0x8042DA30; // type:function size:0x98 fn_8042DAC8 = .text:0x8042DAC8; // type:function size:0x4 fn_8042DACC = .text:0x8042DACC; // type:function size:0x3C -fn_8042DB08 = .text:0x8042DB08; // type:function size:0x54 -fn_8042DB5C = .text:0x8042DB5C; // type:function size:0x18C -fn_8042DCE8 = .text:0x8042DCE8; // type:function size:0x70 -fn_8042DD58 = .text:0x8042DD58; // type:function size:0x1E8 +SetUnisonProgress__11GemTrackDirFf = .text:0x8042DB08; // type:function size:0x54 +AddChordRepImpl__11GemTrackDirFP7RndMeshP11TrackWidgetP11TrackWidgetP11TrackWidgetfRCQ211stlpmtx_std45vector>6String = .text:0x8042DB5C; // type:function size:0x18C +GetCurrentChordLabelPosOffset__11GemTrackDirCFv = .text:0x8042DCE8; // type:function size:0x70 +OnDrawSampleChord__11GemTrackDirFP9DataArray = .text:0x8042DD58; // type:function size:0x1E8 Obj<16RndTransformable>__9DataArrayCFi_P16RndTransformable = .text:0x8042DF40; // type:function size:0x34 Obj<11TrackWidget>__9DataArrayCFi_P11TrackWidget = .text:0x8042DF74; // type:function size:0x34 -GetDerivedObj<11TrackWidget>__FP8DataNodeP9DataArray_P11TrackWidget = .text:0x8042DFA8; // type:function size:0x3C -fn_8042DFE4 = .text:0x8042DFE4; // type:function size:0x660 -fn_8042E644 = .text:0x8042E644; // type:function size:0xCB8 +Obj<11TrackWidget>__8DataNodeCFPC9DataArray_P11TrackWidget = .text:0x8042DFA8; // type:function size:0x3C +Handle__11GemTrackDirFP9DataArrayb = .text:0x8042DFE4; // type:function size:0x660 +SyncProperty__11GemTrackDirFR8DataNodeP9DataArrayi6PropOp = .text:0x8042E644; // type:function size:0xCB8 PropSync<6RndCam>__FR26ObjPtr<6RndCam,9ObjectDir>R8DataNodeP9DataArrayi6PropOp_b = .text:0x8042F2FC; // type:function size:0xD0 PropSync<12EventTrigger>__FR33ObjPtr<12EventTrigger,9ObjectDir>R8DataNodeP9DataArrayi6PropOp_b = .text:0x8042F3CC; // type:function size:0xCC PropSync<8RndGroup>__FR28ObjPtr<8RndGroup,9ObjectDir>R8DataNodeP9DataArrayi6PropOp_b = .text:0x8042F498; // type:function size:0xCC @@ -34510,13 +34510,13 @@ fn_80430548 = .text:0x80430548; // type:function size:0x6C fn_804305B4 = .text:0x804305B4; // type:function size:0x6C fn_80430620 = .text:0x80430620; // type:function size:0x6C fn_8043068C = .text:0x8043068C; // type:function size:0x60 -fn_804306EC = .text:0x804306EC; // type:function size:0x8 -fn_804306F4 = .text:0x804306F4; // type:function size:0x8 -fn_804306FC = .text:0x804306FC; // type:function size:0x8 +SmasherPlate__11GemTrackDirFv = .text:0x804306EC; // type:function size:0x8 +GetNumFretPosOffsets__11GemTrackDirCFv = .text:0x804306F4; // type:function size:0x8 +GetArpeggioShapePool__11GemTrackDirFv = .text:0x804306FC; // type:function size:0x8 fn_80430704 = .text:0x80430704; // type:function size:0x8 fn_8043070C = .text:0x8043070C; // type:function size:0x10 -fn_8043071C = .text:0x8043071C; // type:function size:0x134 -fn_80430850 = .text:0x80430850; // type:function size:0x4 +SetType__11GemTrackDirF6Symbol = .text:0x8043071C; // type:function size:0x134 +ClassName__11GemTrackDirCFv = .text:0x80430850; // type:function size:0x4 fn_80430854 = .text:0x80430854; // type:function size:0x15C fn_804309B0 = .text:0x804309B0; // type:function size:0x44 fn_804309F4 = .text:0x804309F4; // type:function size:0x108 @@ -34601,16 +34601,16 @@ fn_80430EC4 = .text:0x80430EC4; // type:function size:0x8 fn_80430ECC = .text:0x80430ECC; // type:function size:0x8 fn_80430ED4 = .text:0x80430ED4; // type:function size:0x8 fn_80430EDC = .text:0x80430EDC; // type:function size:0x8 -fn_80430EE4 = .text:0x80430EE4; // type:function size:0x8 -fn_80430EEC = .text:0x80430EEC; // type:function size:0x8 -fn_80430EF4 = .text:0x80430EF4; // type:function size:0x8 -fn_80430EFC = .text:0x80430EFC; // type:function size:0x8 -fn_80430F04 = .text:0x80430F04; // type:function size:0x8 -fn_80430F0C = .text:0x80430F0C; // type:function size:0x8 -fn_80430F14 = .text:0x80430F14; // type:function size:0x8 -fn_80430F1C = .text:0x80430F1C; // type:function size:0x8 -fn_80430F24 = .text:0x80430F24; // type:function size:0x8 -fn_80430F2C = .text:0x80430F2C; // type:function size:0x78 +@880@ResetSmashers__11GemTrackDirFb = .text:0x80430EE4; // type:function size:0x8 +@880@TrackReset__11GemTrackDirFv = .text:0x80430EEC; // type:function size:0x8 +@880@Load__11GemTrackDirFR9BinStream = .text:0x80430EF4; // type:function size:0x8 +@880@Copy__11GemTrackDirFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x80430EFC; // type:function size:0x8 +@880@Save__11GemTrackDirFR9BinStream = .text:0x80430F04; // type:function size:0x8 +@880@SyncProperty__11GemTrackDirFR8DataNodeP9DataArrayi6PropOp = .text:0x80430F0C; // type:function size:0x8 +@880@Handle__11GemTrackDirFP9DataArrayb = .text:0x80430F14; // type:function size:0x8 +@880@SetType__11GemTrackDirF6Symbol = .text:0x80430F1C; // type:function size:0x8 +@880@ClassName__11GemTrackDirCFv = .text:0x80430F24; // type:function size:0x8 +__ct__23GemTrackResourceManagerFP9ObjectDir = .text:0x80430F2C; // type:function size:0x78 fn_80430FA4 = .text:0x80430FA4; // type:function size:0x58 fn_80430FFC = .text:0x80430FFC; // type:function size:0x80 fn_8043107C = .text:0x8043107C; // type:function size:0x80 @@ -34626,17 +34626,17 @@ fn_80431300 = .text:0x80431300; // type:function size:0x3C fn_8043133C = .text:0x8043133C; // type:function size:0x30 fn_8043136C = .text:0x8043136C; // type:function size:0x30 fn_8043139C = .text:0x8043139C; // type:function size:0x40 -fn_804313DC = .text:0x804313DC; // type:function size:0x74 -fn_80431450 = .text:0x80431450; // type:function size:0x284 -fn_804316D4 = .text:0x804316D4; // type:function size:0x4 +__dt__23GemTrackResourceManagerFv = .text:0x804313DC; // type:function size:0x74 +InitSmasherPlates__23GemTrackResourceManagerFv = .text:0x80431450; // type:function size:0x284 +push_back__Q211stlpmtx_std133vector>FRCQ223GemTrackResourceManager16SmasherPlateInfo = .text:0x804316D4; // type:function size:0x4 fn_804316D8 = .text:0x804316D8; // type:function size:0x88 fn_80431760 = .text:0x80431760; // type:function size:0x2C fn_8043178C = .text:0x8043178C; // type:function size:0x10 fn_8043179C = .text:0x8043179C; // type:function size:0x4C -fn_804317E8 = .text:0x804317E8; // type:function size:0x4 -fn_804317EC = .text:0x804317EC; // type:function size:0x44 -fn_80431830 = .text:0x80431830; // type:function size:0x98 -fn_804318C8 = .text:0x804318C8; // type:function size:0x84 +reserve__Q211stlpmtx_std133vector>FUl = .text:0x804317E8; // type:function size:0x4 +__ct__Q223GemTrackResourceManager16SmasherPlateInfoFPQ23Hmx6Object = .text:0x804317EC; // type:function size:0x44 +GetFreeSmasherPlate__23GemTrackResourceManagerF15TrackInstrument = .text:0x80431830; // type:function size:0x98 +ReleaseSmasherPlate__23GemTrackResourceManagerFP6RndDir = .text:0x804318C8; // type:function size:0x84 fn_8043194C = .text:0x8043194C; // type:function size:0xCC fn_80431A18 = .text:0x80431A18; // type:function size:0x5C fn_80431A74 = .text:0x80431A74; // type:function size:0x5C @@ -34879,12 +34879,12 @@ fn_8043C9C4 = .text:0x8043C9C4; // type:function size:0x8 Retract__9BandTrackFb = .text:0x8043C9CC; // type:function size:0x14C fn_8043CB18 = .text:0x8043CB18; // type:function size:0x130 fn_8043CC48 = .text:0x8043CC48; // type:function size:0x190 -fn_8043CDD8 = .text:0x8043CDD8; // type:function size:0x8C +GameWon__9BandTrackFv = .text:0x8043CDD8; // type:function size:0x8C fn_8043CE64 = .text:0x8043CE64; // type:function size:0xFC fn_8043CF60 = .text:0x8043CF60; // type:function size:0xC8 SpotlightPhraseSuccess__9BandTrackFv = .text:0x8043D028; // type:function size:0xA4 fn_8043D0CC = .text:0x8043D0CC; // type:function size:0x58 -fn_8043D124 = .text:0x8043D124; // type:function size:0x118 +SetStreak__9BandTrackFiiib = .text:0x8043D124; // type:function size:0x118 fn_8043D23C = .text:0x8043D23C; // type:function size:0x44 fn_8043D280 = .text:0x8043D280; // type:function size:0x1D0 fn_8043D450 = .text:0x8043D450; // type:function size:0x78 @@ -34896,22 +34896,22 @@ EnablePlayer__9BandTrackFv = .text:0x8043D650; // type:function size:0xE0 fn_8043D730 = .text:0x8043D730; // type:function size:0x434 fn_8043DB64 = .text:0x8043DB64; // type:function size:0x204 fn_8043DD68 = .text:0x8043DD68; // type:function size:0x1C8 -fn_8043DF30 = .text:0x8043DF30; // type:function size:0x13C +EnterCoda__9BandTrackFv = .text:0x8043DF30; // type:function size:0x13C fn_8043E06C = .text:0x8043E06C; // type:function size:0x64 fn_8043E0D0 = .text:0x8043E0D0; // type:function size:0xA8 PopupHelp__9BandTrackF6Symbolb = .text:0x8043E178; // type:function size:0x2CC fn_8043E444 = .text:0x8043E444; // type:function size:0xF4 fn_8043E538 = .text:0x8043E538; // type:function size:0x54 fn_8043E58C = .text:0x8043E58C; // type:function size:0x54 -fn_8043E5E0 = .text:0x8043E5E0; // type:function size:0x68 -fn_8043E648 = .text:0x8043E648; // type:function size:0x68 +SuperStreak__9BandTrackFbb = .text:0x8043E5E0; // type:function size:0x68 +PeakState__9BandTrackFbb = .text:0x8043E648; // type:function size:0x68 fn_8043E6B0 = .text:0x8043E6B0; // type:function size:0x64 fn_8043E714 = .text:0x8043E714; // type:function size:0x5C fn_8043E770 = .text:0x8043E770; // type:function size:0x54 PlayIntro__9BandTrackFv = .text:0x8043E7C4; // type:function size:0x230 Deploy__9BandTrackFv = .text:0x8043E9F4; // type:function size:0xD0 fn_8043EAC4 = .text:0x8043EAC4; // type:function size:0x110 -fn_8043EBD4 = .text:0x8043EBD4; // type:function size:0x50 +MyTrackPanelDir__9BandTrackFv = .text:0x8043EBD4; // type:function size:0x50 fn_8043EC24 = .text:0x8043EC24; // type:function size:0x6C fn_8043EC90 = .text:0x8043EC90; // type:function size:0x6C fn_8043ECFC = .text:0x8043ECFC; // type:function size:0x58 @@ -34926,13 +34926,13 @@ fn_8043F180 = .text:0x8043F180; // type:function size:0xB8 fn_8043F238 = .text:0x8043F238; // type:function size:0x74 fn_8043F2AC = .text:0x8043F2AC; // type:function size:0xB8 fn_8043F364 = .text:0x8043F364; // type:function size:0x8 -fn_8043F36C = .text:0x8043F36C; // type:function size:0x80 +RefreshStreakMeter__9BandTrackFiii = .text:0x8043F36C; // type:function size:0x80 fn_8043F3EC = .text:0x8043F3EC; // type:function size:0x108 fn_8043F4F4 = .text:0x8043F4F4; // type:function size:0x88 fn_8043F57C = .text:0x8043F57C; // type:function size:0x94 -fn_8043F610 = .text:0x8043F610; // type:function size:0xD4 +SetPerformanceMode__9BandTrackFb = .text:0x8043F610; // type:function size:0xD4 fn_8043F6E4 = .text:0x8043F6E4; // type:function size:0x8 -fn_8043F6EC = .text:0x8043F6EC; // type:function size:0xD8 +SetInstrument__9BandTrackF15TrackInstrument = .text:0x8043F6EC; // type:function size:0xD8 fn_8043F7C4 = .text:0x8043F7C4; // type:function size:0x8 fn_8043F7CC = .text:0x8043F7CC; // type:function size:0x104 fn_8043F8D0 = .text:0x8043F8D0; // type:function size:0x4 @@ -41428,7 +41428,7 @@ OnResetHair__FP9DataArray = .text:0x804FB228; // type:function size:0x44 OnCharMergeBones__FP9DataArray = .text:0x804FB26C; // type:function size:0xC4 CharUtlIsAnimatable__FP16RndTransformable = .text:0x804FB330; // type:function size:0x140 CharUtlInit__Fv = .text:0x804FB470; // type:function size:0x5C -fn_804FB4CC = .text:0x804FB4CC; // type:function size:0x58 +__dt__Q211stlpmtx_std63vector<9Transform,Us,Q211stlpmtx_std24StlNodeAlloc<9Transform>>Fv = .text:0x804FB4CC; // type:function size:0x58 fn_804FB524 = .text:0x804FB524; // type:function size:0x80 fn_804FB5A4 = .text:0x804FB5A4; // type:function size:0x80 fn_804FB624 = .text:0x804FB624; // type:function size:0x58 @@ -60022,7 +60022,7 @@ lbl_807F0320 = .rodata:0x807F0320; // type:object size:0x8 data:float @F_00401c46 = .rodata:0x807F0328; // type:object size:0x4 data:float @D_b81ee53f1f85eb51 = .rodata:0x807F0330; // type:object size:0x8 data:double @F_0000a040 = .rodata:0x807F0338; // type:object size:0x8 data:float -lbl_807F0340 = .rodata:0x807F0340; // type:object size:0x8 data:float +@F_0ad7233c = .rodata:0x807F0340; // type:object size:0x8 data:float lbl_807F0348 = .rodata:0x807F0348; // type:object size:0x10 data:4byte @F_00007041 = .rodata:0x807F0358; // type:object size:0x4 data:float @F_ffff7f7f = .rodata:0x807F035C; // type:object size:0x4 data:float @@ -60316,7 +60316,7 @@ lbl_807F39C8 = .rodata:0x807F39C8; // type:object size:0x4 data:float @F_0d32483d = .rodata:0x807F39E0; // type:object size:0x4 data:float @F_14aea341 = .rodata:0x807F39E4; // type:object size:0x4 data:float @F_cdcc0c40 = .rodata:0x807F39E8; // type:object size:0x8 data:float -lbl_807F39F0 = .rodata:0x807F39F0; // type:object size:0x4 data:float +@F_00001040 = .rodata:0x807F39F0; // type:object size:0x4 data:float lbl_807F39F4 = .rodata:0x807F39F4; // type:object size:0x4 data:float @F_cdcccc3e = .rodata:0x807F39F8; // type:object size:0x8 data:float @F_9a99593f = .rodata:0x807F3A00; // type:object size:0x4 data:float @@ -69395,27 +69395,27 @@ lbl_8087E9A0 = .data:0x8087E9A0; // type:object size:0x8 data:string lbl_8087E9A8 = .data:0x8087E9A8; // type:object size:0x38 __RTTI__7WiiMesh = .data:0x8087E9E0; // type:object size:0x8 __vt__11GemTrackDir = .data:0x8087E9E8; // type:object size:0x3D0 -lbl_8087EDB8 = .data:0x8087EDB8; // type:object size:0x18 +__vt__40ObjPtr<19ChordShapeGenerator,9ObjectDir> = .data:0x8087EDB8; // type:object size:0x18 lbl_8087EDD0 = .data:0x8087EDD0; // type:object size:0x28 lbl_8087EDF8 = .data:0x8087EDF8; // type:object size:0x10 lbl_8087EE08 = .data:0x8087EE08; // type:object size:0x8 -lbl_8087EE10 = .data:0x8087EE10; // type:object size:0x18 +__vt__36ObjPtrList<11TrackWidget,9ObjectDir> = .data:0x8087EE10; // type:object size:0x18 lbl_8087EE28 = .data:0x8087EE28; // type:object size:0x24 lbl_8087EE4C = .data:0x8087EE4C; // type:object size:0xC lbl_8087EE58 = .data:0x8087EE58; // type:object size:0x8 -lbl_8087EE60 = .data:0x8087EE60; // type:object size:0x18 +__vt__26ObjPtr<6RndCam,9ObjectDir> = .data:0x8087EE60; // type:object size:0x18 lbl_8087EE78 = .data:0x8087EE78; // type:object size:0x1C lbl_8087EE94 = .data:0x8087EE94; // type:object size:0xC lbl_8087EEA0 = .data:0x8087EEA0; // type:object size:0x8 -lbl_8087EEA8 = .data:0x8087EEA8; // type:object size:0x18 +__vt__35ObjPtr<14TrackInterface,9ObjectDir> = .data:0x8087EEA8; // type:object size:0x18 lbl_8087EEC0 = .data:0x8087EEC0; // type:object size:0x24 lbl_8087EEE4 = .data:0x8087EEE4; // type:object size:0xC lbl_8087EEF0 = .data:0x8087EEF0; // type:object size:0x8 -lbl_8087EEF8 = .data:0x8087EEF8; // type:object size:0x18 +__vt__32ObjPtr<11StreakMeter,9ObjectDir> = .data:0x8087EEF8; // type:object size:0x18 lbl_8087EF10 = .data:0x8087EF10; // type:object size:0x20 lbl_8087EF30 = .data:0x8087EF30; // type:object size:0x10 lbl_8087EF40 = .data:0x8087EF40; // type:object size:0x8 -lbl_8087EF48 = .data:0x8087EF48; // type:object size:0x18 +__vt__35ObjPtr<14OverdriveMeter,9ObjectDir> = .data:0x8087EF48; // type:object size:0x18 lbl_8087EF60 = .data:0x8087EF60; // type:object size:0x24 lbl_8087EF84 = .data:0x8087EF84; // type:object size:0xC lbl_8087EF90 = .data:0x8087EF90; // type:object size:0x8 @@ -75482,8 +75482,8 @@ lbl_808E45C5 = .sbss:0x808E45C5; // type:object size:0x1 data:byte lbl_808E45C6 = .sbss:0x808E45C6; // type:object size:0x1 data:byte lbl_808E45C7 = .sbss:0x808E45C7; // type:object size:0x1 data:byte lbl_808E45C8 = .sbss:0x808E45C8; // type:object size:0x8 data:byte -lbl_808E45D0 = .sbss:0x808E45D0; // type:object size:0x2 data:2byte -lbl_808E45D2 = .sbss:0x808E45D2; // type:object size:0x6 data:2byte +gRev__17BandConfiguration = .sbss:0x808E45D0; // type:object size:0x2 data:2byte +gAltRev__17BandConfiguration = .sbss:0x808E45D2; // type:object size:0x6 data:2byte lbl_808E45D8 = .sbss:0x808E45D8; // type:object size:0x1 data:byte lbl_808E45D9 = .sbss:0x808E45D9; // type:object size:0x1 data:byte gIsLoadingDlc = .sbss:0x808E45DA; // type:object size:0x1 data:byte @@ -75503,8 +75503,8 @@ gRev__13BandHighlight = .sbss:0x808E45F0; // type:object size:0x2 data:2byte gAltRev__13BandHighlight = .sbss:0x808E45F2; // type:object size:0x6 data:2byte lbl_808E45F8 = .sbss:0x808E45F8; // type:object size:0x1 data:byte lbl_808E45F9 = .sbss:0x808E45F9; // type:object size:0x1 data:byte -lbl_808E45FA = .sbss:0x808E45FA; // type:object size:0x2 data:2byte -lbl_808E45FC = .sbss:0x808E45FC; // type:object size:0x2 data:2byte +gRev__14BandFaceDeform = .sbss:0x808E45FA; // type:object size:0x2 data:2byte +gAltRev__14BandFaceDeform = .sbss:0x808E45FC; // type:object size:0x2 data:2byte lbl_808E4600 = .sbss:0x808E4600; // type:object size:0x1 data:byte lbl_808E4602 = .sbss:0x808E4602; // type:object size:0x2 data:2byte lbl_808E4604 = .sbss:0x808E4604; // type:object size:0x2 data:2byte @@ -75614,8 +75614,8 @@ lbl_808E4720 = .sbss:0x808E4720; // type:object size:0x2 data:2byte lbl_808E4722 = .sbss:0x808E4722; // type:object size:0x6 data:2byte lbl_808E4728 = .sbss:0x808E4728; // type:object size:0x2 data:2byte lbl_808E472A = .sbss:0x808E472A; // type:object size:0x6 data:2byte -lbl_808E4730 = .sbss:0x808E4730; // type:object size:0x2 data:2byte -lbl_808E4732 = .sbss:0x808E4732; // type:object size:0x2 data:2byte +gRev__11GemTrackDir = .sbss:0x808E4730; // type:object size:0x2 data:2byte +gAltRev__11GemTrackDir = .sbss:0x808E4732; // type:object size:0x2 data:2byte lbl_808E4734 = .sbss:0x808E4734; // type:object size:0x1 data:byte lbl_808E4735 = .sbss:0x808E4735; // type:object size:0x1 data:byte lbl_808E4738 = .sbss:0x808E4738; // type:object size:0x8 data:byte @@ -79120,7 +79120,7 @@ MsgCheckoutFailed = .bss:0x8097CF68; // type:object size:0x18 MsgChooseCharFlow = .bss:0x8097CF80; // type:object size:0x18 MsgChooseColors = .bss:0x8097CF98; // type:object size:0x18 MsgChooseFinish = .bss:0x8097CFB0; // type:object size:0x18 -MsgClearAll = .bss:0x8097CFC8; // type:object size:0x18 +clear_all_msg = .bss:0x8097CFC8; // type:object size:0x18 MsgClearDifficultyRestriction = .bss:0x8097CFE0; // type:object size:0x18 MsgClearInitiallySelectedTour = .bss:0x8097CFF8; // type:object size:0x18 clear_lighting_msg = .bss:0x8097D010; // type:object size:0x18 @@ -79138,7 +79138,7 @@ MsgDisableFacehair = .bss:0x8097D118; // type:object size:0x18 MsgDisconnected = .bss:0x8097D130; // type:object size:0x18 MsgDlcMotd = .bss:0x8097D148; // type:object size:0x18 MsgDone = .bss:0x8097D160; // type:object size:0x18 -MsgDrumFillComplete = .bss:0x8097D178; // type:object size:0x18 +drum_fill_complete_msg = .bss:0x8097D178; // type:object size:0x18 MsgEnable = .bss:0x8097D190; // type:object size:0x18 MsgEnableFacehair = .bss:0x8097D1A8; // type:object size:0x18 MsgEnablePlayer = .bss:0x8097D1C0; // type:object size:0x18 @@ -79222,7 +79222,7 @@ MsgIntro = .bss:0x8097D8F8; // type:object size:0x18 MsgIntroRemote = .bss:0x8097D910; // type:object size:0x18 is_loaded_msg = .bss:0x8097D928; // type:object size:0x18 MsgIsMessageHiding = .bss:0x8097D940; // type:object size:0x30 -MsgKickNote = .bss:0x8097D970; // type:object size:0x18 +kick_note_msg = .bss:0x8097D970; // type:object size:0x18 MsgLbFailure = .bss:0x8097D988; // type:object size:0x18 MsgLbInProgress = .bss:0x8097D9A0; // type:object size:0x18 MsgLeaveSetlist = .bss:0x8097D9B8; // type:object size:0x18 @@ -79348,7 +79348,7 @@ MsgTalkStop = .bss:0x8097E528; // type:object size:0x18 MsgTambourineHit = .bss:0x8097E540; // type:object size:0x18 MsgTambourineMiss = .bss:0x8097E558; // type:object size:0x18 tambourine_note_msg = .bss:0x8097E570; // type:object size:0x18 -MsgTrigger = .bss:0x8097E588; // type:object size:0x18 +trigger_msg = .bss:0x8097E588; // type:object size:0x18 ui_enter_msg = .bss:0x8097E5A0; // type:object size:0x18 ui_exit_msg = .bss:0x8097E5B8; // type:object size:0x18 unload_msg = .bss:0x8097E5D0; // type:object size:0x18 @@ -79357,10 +79357,10 @@ MsgUpdateAll = .bss:0x8097E600; // type:object size:0x18 MsgUpdateCharPreview = .bss:0x8097E618; // type:object size:0x18 MsgUpdateDetails = .bss:0x8097E630; // type:object size:0x18 MsgUpdateFindingHelp = .bss:0x8097E648; // type:object size:0x18 -MsgUpdateGems = .bss:0x8097E660; // type:object size:0x18 +update_gems_msg = .bss:0x8097E660; // type:object size:0x18 MsgUpdateLoadingStatus = .bss:0x8097E678; // type:object size:0x18 MsgUpdateOutfitList = .bss:0x8097E690; // type:object size:0x18 -MsgUpdateRange = .bss:0x8097E6A8; // type:object size:0x18 +update_range_msg = .bss:0x8097E6A8; // type:object size:0x18 MsgUpdateView = .bss:0x8097E6C0; // type:object size:0x30 MsgView = .bss:0x8097E6F0; // type:object size:0x18 MsgVignetteOutro = .bss:0x8097E708; // type:object size:0x18 @@ -79397,10 +79397,10 @@ set_focus_panel = .bss:0x8097E96C; // type:object size:0x4 SymSetFont = .bss:0x8097E970; // type:object size:0x8 SymSetForegroundVolume = .bss:0x8097E978; // type:object size:0x4 SymSetFormattedProfileName = .bss:0x8097E97C; // type:object size:0x4 -SymSetFov = .bss:0x8097E980; // type:object size:0x4 +set_fov = .bss:0x8097E980; // type:object size:0x4 SymSetFraction = .bss:0x8097E984; // type:object size:0x4 set_frame = .bss:0x8097E988; // type:object size:0x4 -SymSetFromMeshAnim = .bss:0x8097E98C; // type:object size:0x4 +set_from_meshanim = .bss:0x8097E98C; // type:object size:0x4 SymSetFromSongSelectNode = .bss:0x8097E990; // type:object size:0x4 set_frozen = .bss:0x8097E994; // type:object size:0x4 set_frustum = .bss:0x8097E998; // type:object size:0x4 @@ -79452,8 +79452,8 @@ SymSetJitter = .bss:0x8097EA58; // type:object size:0x4 SymSetJoiningUser = .bss:0x8097EA5C; // type:object size:0x4 SymSetJoypadExtraLag = .bss:0x8097EA60; // type:object size:0x4 set_key = .bss:0x8097EA64; // type:object size:0x4 -SymSetKeyOffset = .bss:0x8097EA68; // type:object size:0x4 -SymSetKeyRange = .bss:0x8097EA6C; // type:object size:0x4 +set_key_offset = .bss:0x8097EA68; // type:object size:0x4 +set_key_range = .bss:0x8097EA6C; // type:object size:0x4 set_key_val = .bss:0x8097EA70; // type:object size:0x4 set_keyframe = .bss:0x8097EA74; // type:object size:0x4 SymSetKickAutoplay = .bss:0x8097EA78; // type:object size:0x4 @@ -79542,7 +79542,7 @@ set_pathvar = .bss:0x8097EC04; // type:object size:0x4 set_paused = .bss:0x8097EC08; // type:object size:0x8 SymSetPermanentOverdrive = .bss:0x8097EC10; // type:object size:0x4 set_phrase_meter = .bss:0x8097EC14; // type:object size:0x4 -SymSetPitch = .bss:0x8097EC18; // type:object size:0x4 +set_pitch = .bss:0x8097EC18; // type:object size:0x4 SymSetPitchShiftRatio = .bss:0x8097EC1C; // type:object size:0x4 SymSetPlatformAudioLatency = .bss:0x8097EC20; // type:object size:0x4 SymSetPlatformVideoLatency = .bss:0x8097EC24; // type:object size:0x4 @@ -79595,7 +79595,7 @@ SymSetScoreOrStars = .bss:0x8097ECF4; // type:object size:0x4 SymSetScoreType = .bss:0x8097ECF8; // type:object size:0x4 SymSetScoretype = .bss:0x8097ECFC; // type:object size:0x4 set_screen_rect = .bss:0x8097ED00; // type:object size:0x4 -SymSetScreenRectX = .bss:0x8097ED04; // type:object size:0x4 +set_screen_rect_x = .bss:0x8097ED04; // type:object size:0x4 SymSetScreenSaver = .bss:0x8097ED08; // type:object size:0x4 SymSetScrollExpandedDetails = .bss:0x8097ED0C; // type:object size:0x4 SymSetSecondaryStateLevel = .bss:0x8097ED10; // type:object size:0x4 data:4byte @@ -79615,7 +79615,7 @@ SymSetShowSafeArea = .bss:0x8097ED48; // type:object size:0x4 set_showing = .bss:0x8097ED4C; // type:object size:0x4 SymSetShrinkToSafe = .bss:0x8097ED50; // type:object size:0x4 SymSetShuttle = .bss:0x8097ED54; // type:object size:0x4 -SymSetSideAngle = .bss:0x8097ED58; // type:object size:0x4 +set_side_angle = .bss:0x8097ED58; // type:object size:0x4 set_singalong = .bss:0x8097ED5C; // type:object size:0x4 SymSetSize = .bss:0x8097ED60; // type:object size:0x4 SymSetSkinTone = .bss:0x8097ED64; // type:object size:0x4 @@ -79673,7 +79673,7 @@ SymSetToStartingLbIx = .bss:0x8097EE40; // type:object size:0x4 SymSetToToken = .bss:0x8097EE44; // type:object size:0x4 set_token_fmt = .bss:0x8097EE48; // type:object size:0x4 data:4byte SymSetTourDesc = .bss:0x8097EE4C; // type:object size:0x4 -SymSetTrackOffset = .bss:0x8097EE50; // type:object size:0xC +set_track_offset = .bss:0x8097EE50; // type:object size:0xC SymSetTrackType = .bss:0x8097EE5C; // type:object size:0x8 set_trans = .bss:0x8097EE64; // type:object size:0x4 set_trans_parent = .bss:0x8097EE68; // type:object size:0x4 @@ -79909,7 +79909,7 @@ SymSlider = .bss:0x8097F2E0; // type:object size:0x8 slot_draw_type = .bss:0x8097F2E8; // type:object size:0x8 slot_view = .bss:0x8097F2F0; // type:object size:0x4 slots = .bss:0x8097F2F4; // type:object size:0x8 -SymSmasherList = .bss:0x8097F2FC; // type:object size:0x4 data:4byte +smasher_list = .bss:0x8097F2FC; // type:object size:0x4 data:4byte SymSmasherPlate = .bss:0x8097F300; // type:object size:0x4 smoke_intensity = .bss:0x8097F304; // type:object size:0x8 SymSnap = .bss:0x8097F30C; // type:object size:0x8 @@ -80626,7 +80626,7 @@ SymVersion = .bss:0x809802A4; // type:object size:0x4 data:4byte SymVert = .bss:0x809802A8; // type:object size:0x4 vertical = .bss:0x809802AC; // type:object size:0x4 vertical_stretch = .bss:0x809802B0; // type:object size:0x4 -SymVerts = .bss:0x809802B4; // type:object size:0x8 +verts = .bss:0x809802B4; // type:object size:0x8 SymVideoEnable = .bss:0x809802BC; // type:object size:0x4 video_venue_postproc = .bss:0x809802C0; // type:object size:0x4 SymVideoVenues = .bss:0x809802C4; // type:object size:0x8 data:4byte @@ -81746,7 +81746,7 @@ SymCostStr = .bss:0x80981868; // type:object size:0x4 count_up = .bss:0x8098186C; // type:object size:0x8 SymCoverArtistFmt = .bss:0x80981874; // type:object size:0x8 data:4byte SymCrash = .bss:0x8098187C; // type:object size:0x4 data:4byte -SymCrashFill = .bss:0x80981880; // type:object size:0x4 +crash_fill = .bss:0x80981880; // type:object size:0x4 SymCreateBattle = .bss:0x80981884; // type:object size:0x4 SymCreateBattleSuccess = .bss:0x80981888; // type:object size:0x4 data:4byte SymCreateController = .bss:0x8098188C; // type:object size:0x4 @@ -81968,7 +81968,7 @@ SymDrawOnly = .bss:0x80981D30; // type:object size:0x4 draw_order = .bss:0x80981D34; // type:object size:0x4 draw_overrides = .bss:0x80981D38; // type:object size:0x4 SymDrawPreClear = .bss:0x80981D3C; // type:object size:0x8 -SymDrawSampleChord = .bss:0x80981D44; // type:object size:0x4 +draw_sample_chord = .bss:0x80981D44; // type:object size:0x4 SymDrawTab = .bss:0x80981D48; // type:object size:0x8 drawable = .bss:0x80981D50; // type:object size:0x4 draws = .bss:0x80981D54; // type:object size:0xC @@ -82754,7 +82754,7 @@ SymGetSkinTone = .bss:0x80982C9C; // type:object size:0x4 SymGetSlot = .bss:0x80982CA0; // type:object size:0x8 SymGetSlotNum = .bss:0x80982CA8; // type:object size:0x4 SymGetSmasher = .bss:0x80982CAC; // type:object size:0x4 -SymGetSmasherPlate = .bss:0x80982CB0; // type:object size:0x10 +get_smasher_plate = .bss:0x80982CB0; // type:object size:0x10 SymGetSongCount = .bss:0x80982CC0; // type:object size:0x4 SymGetSongFromLessonName = .bss:0x80982CC4; // type:object size:0x8 SymGetSongMs = .bss:0x80982CCC; // type:object size:0x4 @@ -83442,8 +83442,8 @@ SymKeepMeshData = .bss:0x80983990; // type:object size:0x4 SymKerning = .bss:0x80983994; // type:object size:0x4 SymKey = .bss:0x80983998; // type:object size:0x4 SymKeyKeysOnGuitar = .bss:0x8098399C; // type:object size:0x4 data:4byte -SymKeyMissLeft = .bss:0x809839A0; // type:object size:0x4 -SymKeyMissRight = .bss:0x809839A4; // type:object size:0x4 +key_miss_left = .bss:0x809839A0; // type:object size:0x4 +key_miss_right = .bss:0x809839A4; // type:object size:0x4 SymKeyUnlockedFacePaint = .bss:0x809839A8; // type:object size:0x4 data:4byte SymKeyUnlockedTattoos = .bss:0x809839AC; // type:object size:0x4 data:4byte SymKeyVideoVenues = .bss:0x809839B0; // type:object size:0x4 data:4byte @@ -83694,7 +83694,7 @@ SymMarkers = .bss:0x80983E64; // type:object size:0x4 markup = .bss:0x80983E68; // type:object size:0x8 SymMarqueePath = .bss:0x80983E70; // type:object size:0x4 SymMarqueeRotationMs = .bss:0x80983E74; // type:object size:0x4 data:4byte -SymMash = .bss:0x80983E78; // type:object size:0x4 data:4byte +mash = .bss:0x80983E78; // type:object size:0x4 data:4byte SymMaster = .bss:0x80983E7C; // type:object size:0x4 data:4byte SymMasterVol = .bss:0x80983E80; // type:object size:0x8 SymMatOverrides = .bss:0x80983E88; // type:object size:0x4 @@ -84933,7 +84933,7 @@ lbl_80985760 = .bss:0x80985760; // type:object size:0x4 lbl_80985764 = .bss:0x80985764; // type:object size:0x4 lbl_80985768 = .bss:0x80985768; // type:object size:0x4 lbl_8098576C = .bss:0x8098576C; // type:object size:0x10 -lbl_8098577C = .bss:0x8098577C; // type:object size:0x8 +set_cam_pos = .bss:0x8098577C; // type:object size:0x8 lbl_80985784 = .bss:0x80985784; // type:object size:0x4 lbl_80985788 = .bss:0x80985788; // type:object size:0x8 lbl_80985790 = .bss:0x80985790; // type:object size:0x4 data:4byte @@ -85017,7 +85017,7 @@ lbl_809858D8 = .bss:0x809858D8; // type:object size:0x4 lbl_809858DC = .bss:0x809858DC; // type:object size:0x4 lbl_809858E0 = .bss:0x809858E0; // type:object size:0x4 lbl_809858E4 = .bss:0x809858E4; // type:object size:0x4 -lbl_809858E8 = .bss:0x809858E8; // type:object size:0x4 +set_fade = .bss:0x809858E8; // type:object size:0x4 lbl_809858EC = .bss:0x809858EC; // type:object size:0x8 lbl_809858F4 = .bss:0x809858F4; // type:object size:0x8 lbl_809858FC = .bss:0x809858FC; // type:object size:0x4 diff --git a/src/system/bandobj/BandConfiguration.cpp b/src/system/bandobj/BandConfiguration.cpp index b63d87f4..83aaaff1 100644 --- a/src/system/bandobj/BandConfiguration.cpp +++ b/src/system/bandobj/BandConfiguration.cpp @@ -44,7 +44,7 @@ void BandConfiguration::SyncPlayMode(){ for(int i = 0; i < 4; i++){ TargTransform& curtargxfm = mXfms[i].xfms[idx]; mXfms[i].mWay->SetLocalXfm(curtargxfm.xfm); - BandCharacter* bchar = TheBandWardrobe->FindTarget(curtargxfm.targName, TheBandWardrobe->unk54); + BandCharacter* bchar = TheBandWardrobe->FindTarget(curtargxfm.targName, TheBandWardrobe->mVenueNames); if(bchar) bchar->Teleport(mXfms[i].mWay); } } @@ -75,7 +75,7 @@ BEGIN_LOADS(BandConfiguration) bs >> mXfms[i]; } if(TheBandWardrobe){ - TheBandWardrobe->unk90 = this; + TheBandWardrobe->SetModeSink(this); } END_LOADS @@ -99,5 +99,27 @@ BEGIN_HANDLERS(BandConfiguration) HANDLE_CHECK(0x9F) END_HANDLERS +DataNode BandConfiguration::OnStoreConfiguration(DataArray* da){ + int cfgidx = ConfigIndex(); + for(int i = 0; i < 4; i++){ + TargTransform& curtarg = mXfms[i].xfms[cfgidx]; + BandCharacter* bchar = TheBandWardrobe->GetCharacter(i); + if(bchar){ + curtarg.targName = TheBandWardrobe->VenueNames().names[i]; + curtarg.xfm = bchar->LocalXfm(); + } + } + SyncPlayMode(); + return 0; +} + +DataNode BandConfiguration::OnReleaseConfiguration(DataArray* da){ + for(int i = 0; i < 4; i++){ + BandCharacter* bchar = TheBandWardrobe->GetCharacter(i); + if(bchar) bchar->Teleport(0); + } + return 0; +} + BEGIN_PROPSYNCS(BandConfiguration) END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandFaceDeform.cpp b/src/system/bandobj/BandFaceDeform.cpp index d22cbc36..12c7f227 100644 --- a/src/system/bandobj/BandFaceDeform.cpp +++ b/src/system/bandobj/BandFaceDeform.cpp @@ -1,6 +1,45 @@ #include "bandobj/BandFaceDeform.h" #include "utl/Symbols.h" +INIT_REVS(BandFaceDeform); + +BandFaceDeform::DeltaArray::DeltaArray() : mSize(0), mData(0) {} +BandFaceDeform::DeltaArray::DeltaArray(const BandFaceDeform::DeltaArray& da) : mSize(0), mData(0) { *this = da; } + +BandFaceDeform::DeltaArray& BandFaceDeform::DeltaArray::operator=(const BandFaceDeform::DeltaArray& da){ + SetSize(da.mSize); + memcpy(mData, da.mData, mSize); + return *this; +} + +BandFaceDeform::DeltaArray::~DeltaArray(){ _MemFree(mData); } +void BandFaceDeform::DeltaArray::Clear(){ SetSize(0); } + +int BandFaceDeform::DeltaArray::NumVerts(){ + int num = 0; + void* itend = end(); + for(void* p = begin(); p < itend; p){ + Delta* d = (Delta*)p; + num += d->num; + p = d->next(); + } + return num; +} + +void BandFaceDeform::DeltaArray::AppendDeltas(const std::vector& pos, const std::vector& base){ + if(pos.size() != base.size()){ + MILO_FAIL("AppendDeltas pos has %d points, base has %d", pos.size(), base.size()); + } +} + +void BandFaceDeform::DeltaArray::SetSize(int i){ + if(mSize != i){ + mSize = i; + _MemFree(mData); + mData = _MemAlloc(mSize, 0); + } +} + BandFaceDeform::BandFaceDeform(){ } @@ -9,6 +48,62 @@ BandFaceDeform::~BandFaceDeform(){ } +void BandFaceDeform::SetFromMeshAnim(RndMeshAnim* a1, RndMeshAnim* a2, int i1, int i2){ + if(i2 == -1){ + i2 = a1->VertPointsKeys().size(); + } + mFrames.resize(i2); + for(int i = 0; i < i2; i++){ + mFrames[i].Clear(); + mFrames[i].AppendDeltas(a1->VertPointsKeys()[i + i1].value, a2->VertPointsKeys()[0].value); + } +} + +int BandFaceDeform::TotalSize(){ + int size = 0; + for(int i = 0; i < mFrames.size(); i++){ + size += mFrames[i].mSize; + } + return size; +} + +BEGIN_COPYS(BandFaceDeform) + COPY_SUPERCLASS(Hmx::Object) + CREATE_COPY(BandFaceDeform) + BEGIN_COPYING_MEMBERS + COPY_MEMBER(mFrames) + END_COPYING_MEMBERS +END_COPYS + +BinStream& operator>>(BinStream& bs, BandFaceDeform::DeltaArray& da){ + da.Load(bs); + return bs; +} + +void BandFaceDeform::DeltaArray::Load(BinStream& bs){ + int size; + bs >> size; + SetSize(size); + Delta* d = (Delta*)mData; + short* sptr = (short*)mData; + while(size > 0){ + bs >> (short&)d->unk0; + bs >> d->num; + bs.Read(d + 1, d->thisoffset() - 4); + size -= d->thisoffset(); + d = (Delta*)d->next(); + } +} + +SAVE_OBJ(BandFaceDeform, 0x129) + +BEGIN_LOADS(BandFaceDeform) + LOAD_REVS(bs) + ASSERT_REVS(0, 0) + LOAD_SUPERCLASS(Hmx::Object) + bs >> mFrames; +END_LOADS + BEGIN_HANDLERS(BandFaceDeform) HANDLE_ACTION(set_from_meshanim, SetFromMeshAnim(_msg->Obj(2), _msg->Obj(3), 0, -1)) HANDLE_SUPERCLASS(Hmx::Object) diff --git a/src/system/bandobj/BandFaceDeform.h b/src/system/bandobj/BandFaceDeform.h index 514c3506..64210358 100644 --- a/src/system/bandobj/BandFaceDeform.h +++ b/src/system/bandobj/BandFaceDeform.h @@ -2,6 +2,25 @@ #include "obj/Object.h" #include "rndobj/MeshAnim.h" +// naming stuff is hard +// if you have any better names please by all means +struct Delta { + char unk0; // 0x0 + unsigned short num; // 0x1 + + static unsigned int offset(unsigned short us){ + return us * 3 + 4; + } + + unsigned int thisoffset(){ + return offset(num); + } + void* next(){ + char* p = (char*)this; + return &p[thisoffset()]; + } +}; + class BandFaceDeform : public Hmx::Object { public: class DeltaArray { @@ -9,12 +28,19 @@ class BandFaceDeform : public Hmx::Object { DeltaArray(); DeltaArray(const DeltaArray&); ~DeltaArray(); - int NumVerts(); DeltaArray& operator=(const DeltaArray&); - int unk0; - int unk4; + int NumVerts(); + void SetSize(int); + void Clear(); + void Load(BinStream&); + void AppendDeltas(const std::vector&, const std::vector&); + void* end(){ return &((char*)mData)[mSize]; } + void* begin(){ return mData; } + + int mSize; // 0x0 + void* mData; // 0x4 }; BandFaceDeform(); diff --git a/src/system/bandobj/BandRetargetVignette.cpp b/src/system/bandobj/BandRetargetVignette.cpp index ace71dab..a66fc658 100644 --- a/src/system/bandobj/BandRetargetVignette.cpp +++ b/src/system/bandobj/BandRetargetVignette.cpp @@ -27,7 +27,7 @@ void BandRetargetVignette::Poll(){ for(std::list::iterator it = mEffectors.begin(); it != mEffectors.end(); ++it){ const char* cur = it->c_str(); if(strncmp(cur, "player", 6) == 0 && strlen(cur) == 7){ - BandCharacter* bchar = TheBandWardrobe->FindTarget(cur, TheBandWardrobe->unk34); + BandCharacter* bchar = TheBandWardrobe->FindTarget(cur, TheBandWardrobe->mVignetteNames); if(bchar) bchar->Poll(); else MILO_NOTIFY_ONCE("%s has NULL for %s", PathName(this), cur); } @@ -50,7 +50,7 @@ void BandRetargetVignette::ListPollChildren(std::list& polls) cons void BandRetargetVignette::EnterDir() const { for(int i = 0; i < 4; i++){ BandCharacter* bchar = TheBandWardrobe->GetCharacter(i); - Symbol name = TheBandWardrobe->unk34.names[i]; + Symbol name = TheBandWardrobe->mVignetteNames.names[i]; for(const char** ptr = sIkfs; *ptr != 0; ptr++){ BandIKEffector* ik = bchar->Find(*ptr, false); if(ik){ diff --git a/src/system/bandobj/BandTrack.cpp b/src/system/bandobj/BandTrack.cpp index 0da1e246..ebdf2e4d 100644 --- a/src/system/bandobj/BandTrack.cpp +++ b/src/system/bandobj/BandTrack.cpp @@ -236,7 +236,7 @@ void BandTrack::SetMaxMultiplier(int mult) { void BandTrack::SetupPlayerIntro() { if (mPlayerIntro) { mPlayerIntro->HandleType(reset_msg); - if (unk10 <= 7) { + if (mTrackInstrument <= 7) { static Message setIcon = Message("set_icon", DataNode("G")); if (mParent) { setIcon[0] = DataNode(mParent->GetTrackIcon()); @@ -262,31 +262,27 @@ void BandTrack::SetupCrowdMeter() { } void BandTrack::SyncInstrument() { - // static DebugNotifyOncer _dw; -- .bss and .sbss variable - Symbol instrument = mInstrument; if (instrument == guitar) { - unk10 = 0; + mTrackInstrument = kInstGuitar; } else if (instrument == bass) { - unk10 = 2; + mTrackInstrument = kInstBass; } else if (instrument == drums) { - unk10 = 1; + mTrackInstrument = kInstDrum; } else if (instrument == vocals) { - unk10 = 3; + mTrackInstrument = kInstVocals; } else if (instrument == keys) { - unk10 = 4; + mTrackInstrument = kInstKeys; } else if (instrument == real_guitar) { - unk10 = 5; + mTrackInstrument = kInstRealGuitar; } else if (instrument == real_bass) { - unk10 = 6; + mTrackInstrument = kInstRealBass; } else if (instrument == real_keys) { - unk10 = 7; + mTrackInstrument = kInstRealKeys; } else { - // TODO: there is something weird here with _dw which needs to be impl'd, I am not - // sure how to do it; once that is done this function will be complete - TheDebug.Notify(MakeString("unexpected instrument symbol \"%s\"", instrument)); + MILO_NOTIFY_ONCE("unexpected instrument symbol \"%s\"", instrument); - unk10 = -1; + mTrackInstrument = kInstNone; } } diff --git a/src/system/bandobj/BandTrack.h b/src/system/bandobj/BandTrack.h index fc1ca3fb..ec88ecba 100644 --- a/src/system/bandobj/BandTrack.h +++ b/src/system/bandobj/BandTrack.h @@ -93,6 +93,7 @@ class BandTrack : public virtual Hmx::Object { void SoloHide(); void UnisonEnd(); void UnisonStart(); + TrackPanelDirBase* MyTrackPanelDir(); DECLARE_REVS; NEW_OVERLOAD; @@ -101,7 +102,7 @@ class BandTrack : public virtual Hmx::Object { bool mDisabled; // 0x8 bool mSimulatedNet; // 0x9 Symbol mInstrument; // 0xc - int unk10; // 0x10 + TrackInstrument mTrackInstrument; // 0x10 int unk14; // 0x14 bool unk18; // 0x18 bool unk19; // 0x19 diff --git a/src/system/bandobj/BandWardrobe.cpp b/src/system/bandobj/BandWardrobe.cpp index 6a49cd0a..ff174ff3 100644 --- a/src/system/bandobj/BandWardrobe.cpp +++ b/src/system/bandobj/BandWardrobe.cpp @@ -106,7 +106,7 @@ int BandWardrobe::TargetNames::FindTarget(Symbol s) const { void BandWardrobe::Init(){ Register(); } -BandWardrobe::BandWardrobe() : unk8(0), unk14(0), unk20(this, 0), mCurNames(&unk54), mVenueDir(0), mGenre(gGenres[0]), mTempo("medium"), unk90(this, 0), mShotSetPlayMode(1), mPlayShot5(0), mDemandLoad("") { +BandWardrobe::BandWardrobe() : unk8(0), unk14(0), unk20(this, 0), mCurNames(&mVenueNames), mVenueDir(0), mGenre(gGenres[0]), mTempo("medium"), mModeSink(this, 0), mShotSetPlayMode(1), mPlayShot5(0), mDemandLoad("") { static DataNode& bandwardrobe = DataVariable("bandwardrobe"); if(TheBandWardrobe) MILO_WARN("Trying to make > 1 BandWardrobe, which should be single"); bandwardrobe = DataNode(this); @@ -146,7 +146,7 @@ void BandWardrobe::SetDir(ObjectDir* dir){ void BandWardrobe::SetVenueDir(ObjectDir* dir){ static const char* genders[2] = { "male", "female" }; - mCurNames = &unk54; + mCurNames = &mVenueNames; SetDir(dir); SyncPlayMode(); SetContexts("venue"); @@ -222,7 +222,7 @@ void BandWardrobe::SetPlayMode(Symbol s, BandCamShot* shot){ } void BandWardrobe::SyncPlayMode(){ - if(unk90) unk90->Handle(sync_play_mode_msg, true); + if(mModeSink) mModeSink->Handle(sync_play_mode_msg, true); } void BandWardrobe::SyncInterestObjects(){ @@ -263,7 +263,7 @@ bool BandWardrobe::AllCharsLoaded(){ bool BandWardrobe::DircutRecurse(BandCamShot* shot, int i){ for(ObjVector::iterator it = shot->mTargets.begin(); it != shot->mTargets.end(); ++it){ if(!it->mAnimGroup.Null()){ - BandCharacter* bc = FindTarget(it->mTarget, unk54); + BandCharacter* bc = FindTarget(it->mTarget, mVenueNames); if(bc){ if(!AddDircut(bc, shot, it->mAnimGroup, i)) return false; } @@ -288,7 +288,7 @@ void BandWardrobe::SendMessage(Symbol s1, Symbol s2, bool b){ static Message msg(""); if(s1 == "mic") s1 = "vocal"; for(int i = 0; i < 4; i++){ - if(strstr(unk54.names[i].Str(), s1.Str())){ + if(strstr(mVenueNames.names[i].Str(), s1.Str())){ msg.SetType(s2); if(b) mTargets[i]->HandleType(msg); else mTargets[i]->Handle(msg, true); @@ -314,7 +314,7 @@ bool BandWardrobe::ValidGenreGender(CamShot* shot){ instsym = MakeString("player_%s0", instsym); int shotflags = GetShotFlags(shot); int genderflags = 0; - BandCharacter* bc = FindTarget(instsym, unk54); + BandCharacter* bc = FindTarget(instsym, mVenueNames); if(bc) genderflags = GetGenreGenderFlags(mGenre, bc->mGender); return (shotflags & genderflags) & 0xFF; } @@ -682,13 +682,13 @@ DataNode BandWardrobe::OnEnterCloset(DataArray* da){ if(dir){ int i3 = da->Int(3); if(i3 != -1){ - mCurNames = &unk44; + mCurNames = &mClosetNames; SetContexts("closet"); CharDriver* driver = mTargets[i3]->GetDriver(); if(driver){ driver->SetClips(dir->Find("clips", false)); for(int i = 0; i < 4; i++){ - unk44.names[i] = i == i3 ? "closet_character" : ""; + mClosetNames.names[i] = i == i3 ? "closet_character" : ""; } SetDir(dir); for(int i = 0; i < 4; i++){ @@ -729,7 +729,7 @@ DataNode BandWardrobe::OnListVenueAnimGroups(DataArray* da){ BandCamShot* shot = da->Obj(3); StartVenueShot(shot); Symbol sym = da->Sym(2); - BandCharacter* bchar = FindTarget(sym, unk54); + BandCharacter* bchar = FindTarget(sym, mVenueNames); if(bchar){ return bchar->ListAnimGroups(GetShotFlags(shot)); } diff --git a/src/system/bandobj/BandWardrobe.h b/src/system/bandobj/BandWardrobe.h index be53902e..162d0d58 100644 --- a/src/system/bandobj/BandWardrobe.h +++ b/src/system/bandobj/BandWardrobe.h @@ -72,6 +72,8 @@ class BandWardrobe : public virtual Hmx::Object { } bool DemandLoadSym() const { return !mDemandLoad.Null(); } bool PlayShot5() const { return mPlayShot5; } + TargetNames& VenueNames(){ return mVenueNames; } + void SetModeSink(Hmx::Object* o){ mModeSink = o; } DataNode GetUserTrack(int); DataNode OnFindTarget(DataArray*); @@ -102,9 +104,9 @@ class BandWardrobe : public virtual Hmx::Object { ObjDirPtr unk14; // 0x14 ObjPtr unk20; // 0x20 std::list unk2c; // 0x2c - TargetNames unk34; // 0x34 - TargetNames unk44; // 0x44 - TargetNames unk54; // 0x54 + TargetNames mVignetteNames; // 0x34 + TargetNames mClosetNames; // 0x44 + TargetNames mVenueNames; // 0x54 TargetNames* mCurNames; // 0x64 BandCharacter* mTargets[4]; // 0x68 Symbol unk78; // 0x78 @@ -113,7 +115,7 @@ class BandWardrobe : public virtual Hmx::Object { Symbol mGenre; // 0x84 Symbol mTempo; // 0x88 Symbol mVocalGender; // 0x8c - ObjPtr unk90; // 0x90 + ObjPtr mModeSink; // 0x90 bool mShotSetPlayMode; // 0x9c bool mPlayShot5; // 0x9d Symbol mDemandLoad; // 0xa0 diff --git a/src/system/bandobj/GemTrackDir.cpp b/src/system/bandobj/GemTrackDir.cpp index e2323b5a..c759205b 100644 --- a/src/system/bandobj/GemTrackDir.cpp +++ b/src/system/bandobj/GemTrackDir.cpp @@ -1,5 +1,14 @@ #include "bandobj/GemTrackDir.h" +#include "bandobj/BandButton.h" +#include "bandobj/GemTrackResourceManager.h" +#include "obj/ObjVersion.h" +#include "math/Rand.h" +#include "beatmatch/RGUtl.h" #include "utl/Symbols.h" +#include "utl/Messages.h" + +INIT_REVS(GemTrackDir) +bool kKeyShifting = true; #pragma push #pragma dont_inline on @@ -8,15 +17,19 @@ GemTrackDir::GemTrackDir() : BandTrack(this), mNumTracks(1), unk488(-1), mGemTra 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) { + unk624(this, 0), mGemWhiteMesh(this, 0), mMissOutofRangeRightTrig(this, 0), mMissOutofRangeLeftTrig(this, 0), unk654(this, 0), mKeysShiftAnim(this, 0), mKeysMashAnim(this, 0), mKeyRange(-1.0f), mKeyOffset(-1.0f), + mFingerShape(0), mChordLabelPosOffset(0), mChordShapeGen(this, 0), mArpShapePool(0), unk6e8(0) +#ifdef MILO_DEBUG + , mFakeFingerShape(0), mCycleFakeFingerShapes(0), mRandomShapeFrameCount(0x96) +#endif +{ ObjPtr propAnim(this, 0); ObjPtr trig(this, 0); for(int i = 0; i < 6; i++){ mGemMashAnims.push_back(propAnim); mDrumMashAnims.push_back(propAnim); mFillLaneAnims.push_back(propAnim); - mRGMashAnims.push_back(propAnim); + mRealGuitarMashAnims.push_back(propAnim); mDrumRollTrigs.push_back(std::make_pair(trig, trig)); mTrillTrigs.push_back(std::make_pair(trig, trig)); } @@ -26,15 +39,17 @@ GemTrackDir::GemTrackDir() : BandTrack(this), mNumTracks(1), unk488(-1), mGemTra for(int i = 0; i < 5; i++){ mFretPosOffsets.push_back(0); } +#ifdef MILO_DEBUG DataArray* cfg = SystemConfig(); DataArray* arr = cfg->FindArray("fake_finger_shape", false); if(arr){ for(int i = 0; i < 6; i++){ - unk6f0.FretDown(i, arr->Int(i + 1)); + mRGState.FretDown(i, arr->Int(i + 1)); } mFakeFingerShape = true; if(arr->Size() > 7) mCycleFakeFingerShapes = arr->Int(7); } +#endif } GemTrackDir::~GemTrackDir(){ @@ -43,13 +58,153 @@ GemTrackDir::~GemTrackDir(){ } #pragma pop +BEGIN_COPYS(GemTrackDir) + COPY_SUPERCLASS(TrackDir) + CREATE_COPY(GemTrackDir) + BEGIN_COPYING_MEMBERS + COPY_MEMBER(mNumTracks) + COPY_MEMBER(mSurfaceTexture) + COPY_MEMBER(mSurfaceMesh) + COPY_MEMBER(mEffectSelector) + COPY_MEMBER(mSurfaceMat) + COPY_MEMBER(mTrackEnv) + COPY_MEMBER(mTrackMissGemsEnv) + COPY_MEMBER(mGameCam) + COPY_MEMBER(mPeakStateOnTrig) + COPY_MEMBER(mPeakStateOffTrig) + COPY_MEMBER(mBassSuperStreakOnTrig) + COPY_MEMBER(mBassSuperStreakOffTrig) + COPY_MEMBER(mKickDrummerTrig) + COPY_MEMBER(mKickDrummerResetTrig) + COPY_MEMBER(mSpotlightPhraseSuccessTrig) + COPY_MEMBER(mGemMashAnims) + COPY_MEMBER(mDrumMashAnims) + COPY_MEMBER(mFillLaneAnims) + COPY_MEMBER(mRealGuitarMashAnims) + COPY_MEMBER(mFillHitTrigs) + COPY_MEMBER(mDrumFillResetTrig) + COPY_MEMBER(mDrumMash2ndPassActivateAnim) + COPY_MEMBER(mDrumMashHitAnimGrp) + COPY_MEMBER(mFillColorsGrp) + COPY_MEMBER(mLodAnim) + COPY_MEMBER(mGlowWidgets) + COPY_MEMBER(mStreakMeterOffset) + COPY_MEMBER(mStreakMeterTilt) + COPY_MEMBER(mFretPosOffsets) + COPY_MEMBER(mChordLabelPosOffset) + CopyTrack(c); + END_COPYING_MEMBERS +END_COPYS + SAVE_OBJ(GemTrackDir, 0xBC) +#ifdef MILO_DEBUG DECOMP_FORCEACTIVE(GemTrackDir, "ObjPtr_p.h", "f.Owner()", "") +#else +DECOMP_FORCEACTIVE(GemTrackDir, "") +#endif + +BEGIN_LOADS(GemTrackDir) + PreLoad(bs); + PostLoad(bs); +END_LOADS void GemTrackDir::PreLoad(BinStream& bs){ LOAD_REVS(bs); ASSERT_REVS(0xC, 0); + if(gRev < 9){ + int i68 = 0; + bs >> i68; + bs >> mEffectSelector; + if(gRev < 1){ + if(gLoadingProxyFromDisk){ + ObjPtr tex(0, 0); + bs >> tex; + } + else bs >> mSurfaceTexture; + } + } + if(!IsProxy()){ + if(gRev >= 9) bs >> mEffectSelector; + bs >> mSurfaceMesh; + bs >> mSurfaceMat; + bs >> mTrackEnv; + bs >> mGameCam; + bs >> mBassSuperStreakOnTrig; + bs >> mBassSuperStreakOffTrig; + bs >> mKickDrummerTrig; + bs >> mSpotlightPhraseSuccessTrig; + if(gRev < 0xC){ + ObjPtr trig(this, 0); + bs >> trig; + } + bs >> mDrumFillResetTrig; + bs >> mDrumMash2ndPassActivateAnim; + bs >> mDrumMashHitAnimGrp; + bs >> mFillColorsGrp; + bs >> mLodAnim; + bs >> mRotater; + bs >> mGlowWidgets; + + for(int i = 0; i < 5; i++){ + bs >> mGemMashAnims[i]; + } + + if(gRev >= 6 && gRev <= 10){ + ObjPtr anim(this, 0); + bs >> anim; + } + + for(int i = 1; i < 5; i++){ + bs >> mDrumMashAnims[i]; + } + for(int i = 0; i < 3; i++){ + bs >> mFillHitTrigs[i]; + } + if(gRev >= 11){ + for(int i = 0; i < 6; i++){ + bs >> mRealGuitarMashAnims[i]; + } + } + if(gRev >= 2) bs >> mStreakMeterOffset; + if(gRev >= 3) bs >> mStreakMeterTilt; + if(gRev >= 4){ + int oldsize = mFretPosOffsets.size(); + bs >> mFretPosOffsets; + while(mFretPosOffsets.size() < oldsize){ + mFretPosOffsets.push_back(0); + } + while(mFretPosOffsets.size() > oldsize){ + mFretPosOffsets.pop_back(); + } + } + if(gRev >= 5) bs >> mKickDrummerResetTrig; + if(gRev >= 7) bs >> mChordLabelPosOffset; + if(gRev >= 8){ + if(gRev < 10){ + ObjPtr trig(this, 0); + bs >> trig; + bs >> trig; + } + bs >> mPeakStateOnTrig; + bs >> mPeakStateOffTrig; + } + if(gRev >= 12){ + for(int i = 1; i < 5; i++){ + bs >> mFillLaneAnims[i]; + } + } + } + LoadTrack(bs, IsProxy(), gLoadingProxyFromDisk, false); + PushRev(packRevs(gAltRev, gRev), this); + TrackDir::PreLoad(bs); +} + +void GemTrackDir::PostLoad(BinStream& bs){ + TrackDir::PostLoad(bs); + int revs = PopRev(this); + gRev = getHmxRev(revs); + gAltRev = getAltRev(revs); } void GemTrackDir::SyncFingerFeedback(){ @@ -91,7 +246,7 @@ void GemTrackDir::SyncObjects(){ 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(mTrackInstrument != kInstRealBass && mTrackInstrument != kInstRealGuitar) b1 = false; if(!mFingerShape && b1){ SyncFingerFeedback(); RndDir* outlinedir = Find("chord_shape_outline", true); @@ -110,6 +265,641 @@ void GemTrackDir::SyncObjects(){ } } +void GemTrackDir::Poll(){ + TrackDir::Poll(); + if(mSmasherPlate) mSmasherPlate->Poll(); +} + +void GemTrackDir::SetPitch(float pitch){ + if(TheLoadMgr.EditMode() || mTrackPitch != pitch){ + mTrackPitch = pitch; + Hmx::Matrix3 mtx; + Vector3 v; + MakeEuler(mRotater->LocalXfm().m, v); + v.x = pitch * DEG2RAD; + MakeRotMatrix(v, mtx, true); + mRotater->SetLocalRot(mtx); + mStreakMeter->SetPitch(pitch + 90.0f + mStreakMeterTilt); + // Clamp(5.0f, 2.0f, -(pitch + 30.0f)); + RndGroup* grp = Find("streak.grp", true); + float sined = std::sin((-pitch + 30.0f) * DEG2RAD); + Vector3 v58(grp->mLocalXfm.v); + v58.y = -mStreakMeterOffset / sined; + grp->SetLocalPos(v58); + } +} + +void GemTrackDir::SetFade(float f1, float f2){ + float frange = f1 + f2; + if(mTrackEnv){ + RndPropAnim* anim = Find("intro_fade.anim", true); + anim->SetFrame(10.0f, 1.0f); + mTrackEnv->SetFadeRange(f1, frange); + anim->SetKey(10.0f); + } + if(GetCam()){ + GetCam()->SetFrustum(GetCam()->mNearPlane, frange, GetCam()->mYFov, 1.0f); + } +} + +void GemTrackDir::SetFOV(float fov){ + RndCam* cam = GetCam(); + if(cam){ + cam->SetFrustum(cam->mNearPlane, cam->mFarPlane, fov * DEG2RAD, 1.0f); + } +} + +void GemTrackDir::SetCamPos(float x, float y, float z){ + if(GetCam()){ + GetCam()->SetLocalPos(x, y, z); + } +} + +void GemTrackDir::UpdateSurfaceTexture(){ + if(mSurfaceMat && mSurfaceTexture){ + mSurfaceMat->SetDiffuseTex(mSurfaceTexture); + } +} + +void GemTrackDir::OnUpdateFx(int fx){ + delete unk600; + if(mEffectSelector && (mTrackInstrument == kInstBass || mTrackInstrument == kInstGuitar)){ + mEffectSelector->SetShowing(true); + for(int i = 0; i < 5; i++){ + BandButton* btn = mEffectSelector->Find(MakeString("guitar_fx_%1d.btn", i), false); + if(btn) btn->SetState((UIComponent::State)(i == fx)); + } + static Message hide("set_showing", 0); + unk600 = new MessageTask(mEffectSelector, hide); + TheTaskMgr.Start(unk600, kTaskUISeconds, 1.0f); + } +} + +void GemTrackDir::PlayIntro(){ + mResetTrig->Trigger(); + BandTrack::PlayIntro(); + if(!BandTrack::mParent || (!BandTrack::mParent->PlayerDisconnected() && !BandTrack::mParent->FailedAtStart())){ + bool b2 = false; + if(BandTrack::mParent){ + if(!BandTrack::mParent->InGameMode(h2h)) b2 = true; + } + float f1; + if(b2) f1 = mTrackIdx / 4.0f + 0.05f; + else f1 = 0.55f; + + unk624 = new MessageTask(mIntroTrig, trigger_msg); + TheTaskMgr.Start(unk624, kTaskUISeconds, f1); + } + if(BandTrack::mParent) BandTrack::mParent->PlayKeyIntros(); +} + +void GemTrackDir::TrackReset(){ + UpdateSurfaceTexture(); + ClearAllWidgets(); + if(BandTrack::mParent) BandTrack::mParent->RebuildBeats(); + ResetSmashers(true); + if(BandTrack::mParent) BandTrack::mParent->UpdateGems(); + RndPropAnim* anim = Find("instrument_setup.anim", false); + if(anim) anim->SetFrame(mTrackInstrument, 1.0f); + ResetEffectSelector(); + if(!BandTrack::mParent || !BandTrack::mParent->FailedAtStart()){ + EnablePlayer(); + } + mKickPassCounter = 0; + unk494 = 0; +} + +void GemTrackDir::SetupSmasherPlate(){ + if(mSmasherPlate) MILO_FAIL("Trying to acquire a new smasher plate when we already have one!"); + GemTrackResourceManager* mgr = MyTrackPanelDir()->GetGemTrackResourceManager(); + if(!mgr) MILO_WARN("GemTrackResourceManager not available!"); + else { + mSmasherPlate = mgr->GetFreeSmasherPlate(mTrackInstrument); + if(mSmasherPlate){ + RndGroup* smashergrp = Find("smashers.grp", true); + RndGroup* keygrp = Find("key_shift_stationary_middle.grp", true); + if(mTrackInstrument == kInstRealKeys) keygrp->AddObject(mSmasherPlate, 0); + else smashergrp->AddObject(mSmasherPlate, 0); + if(!TheLoadMgr.EditMode() || IsProxy()){ + RndGroup* grptoadd = mTrackInstrument == kInstRealKeys ? Find("key_shift_stationary_front.grp", true) : Find("smasher_fx.grp", true); + RndGroup* after = mSmasherPlate->Find("after_gems.grp", false); + if(after) after->AddObject(grptoadd, 0); + RndGroup* keysback = Find("key_shift_stationary_back.grp", true); + RndGroup* keylanes = mSmasherPlate->Find("key_lanes.grp", false); + if(keylanes) keysback->AddObject(keylanes, 0); + RndGroup* afterhide = mSmasherPlate->Find("after_hide.grp", false); + if(afterhide) afterhide->SetShowing(false); + } + if(mTrackInstrument == kInstRealKeys){ + unk654 = mSmasherPlate->Find("shift.anim", true); + unk680.clear(); + unk688.clear(); + unk690.clear(); + DataArray* proparr = mSmasherPlate->Property(smasher_list, true)->Array(0); + for(int i = 0; i < proparr->Size(); i++){ + RndDir* curdir = proparr->Obj(i); + unk680.push_back(curdir); + unk688.push_back(curdir->Find("show.trig", true)); + unk690.push_back(curdir->Find("hide.trig", true)); + } + SetupKeyShifting(mSmasherPlate); + } + mSmasherPlate->HandleType(reset_msg); + } + } +} + +void GemTrackDir::ReleaseSmasherPlate(){ + if(mSmasherPlate){ + GemTrackResourceManager* mgr = MyTrackPanelDir()->GetGemTrackResourceManager(); + if(!mgr) MILO_WARN("GemTrackResourceManager not available!"); + else { + RndGroup* smashergrp = Find("smashers.grp", true); + RndGroup* keygrp = Find("key_shift_stationary_middle.grp", true); + if(!TheLoadMgr.EditMode() || IsProxy()){ + RndGroup* smashgrp = Find("smasher_fx.grp", true); + RndGroup* keyfrontgrp = Find("key_shift_stationary_front.grp", true); + RndGroup* after = mSmasherPlate->Find("after_gems.grp", false); + if(after){ + smashgrp->RemoveObject(after); + keyfrontgrp->RemoveObject(after); + } + RndGroup* keysback = Find("key_shift_stationary_back.grp", true); + RndGroup* keylanes = mSmasherPlate->Find("key_lanes.grp", false); + if(keylanes) keysback->RemoveObject(keylanes); + } + smashergrp->RemoveObject(mSmasherPlate); + keygrp->RemoveObject(mSmasherPlate); + mgr->ReleaseSmasherPlate(mSmasherPlate); + ResetKeyShifting(); + mSmasherPlate = 0; + } + } +} + +void GemTrackDir::ResetSmashers(bool b){ + if(BandTrack::mParent){ + BandTrack::mParent->ResetSmashers(reset_particles_msg); + } + mKickDrummerTrig->BasicReset(); + mKickDrummerResetTrig->Trigger(); + if(mFingerShape) mFingerShape->Reset(true); +} + +void GemTrackDir::ResetEffectSelector(){ + if(mEffectSelector){ + mEffectSelector->SetShowing(false); + if(!TheLoadMgr.EditMode()){ + DataArray* cfg = SystemConfig("track_graphics", "effects"); + DataArray* instarr = cfg->FindArray(mInstrument, false); + if(instarr){ + for(int i = 0; i < 5; i++){ + BandButton* btn = mEffectSelector->Find(MakeString("guitar_fx_%1d.btn", i), true); + btn->SetTextToken(instarr->Sym(i + 1)); + } + } + } + } +} + +void GemTrackDir::SetupInstrument(){ + RndPropAnim* anim = Find("instrument_setup.anim", false); + if(anim){ + if(mInstrument == "bass") anim->SetFrame(0, 1.0f); + else if(mInstrument == "drum") anim->SetFrame(1.0f, 1.0f); + else if(mInstrument == "guitar" || mInstrument == "keys") anim->SetFrame(2.0f, 1.0f); + else if(mInstrument == "real_keys") anim->SetFrame(7.0f, 1.0f); + else if(mInstrument == "real_guitar" || mInstrument == "real_bass") anim->SetFrame(5.0f, 1.0f); + else MILO_ASSERT(0, 0x35F); + } +} + +bool GemTrackDir::IsActiveInSession() const { return mInUse; } + +void GemTrackDir::GameWon(){ + Find("win_retract.trig", true)->Trigger(); + BandTrack::GameWon(); +} + +void GemTrackDir::Extend(bool b){ + Reset(); + RndGroup* grp = Find("intro_anim.grp", false); + if(grp){ + if(b) grp->SetFrame(grp->EndFrame(), 1.0f); + else grp->Animate(grp->StartFrame(), grp->EndFrame(), grp->Units(), 0, 0); + } + TrackWidget* widget = Find("guitar_solo_mask.wid", false); + if(widget) widget->Clear(); +} + +void GemTrackDir::Retract(bool b){ + BandTrack::Retract(b); + if(unk624) delete unk624; + if(!b){ + unk60c = new MessageTask(this, clear_all_msg); + TheTaskMgr.Start(unk60c, kTaskSeconds, 1.0f); + } + else { + RndGroup* grp = Find("intro_anim.grp", false); + if(grp) grp->SetFrame(grp->StartFrame(), 1.0f); + } + if(mEffectSelector) mEffectSelector->SetShowing(false); +} + +void GemTrackDir::SetStreak(int i1, int i2, int i3, bool b){ + BandTrack::SetStreak(i1, i2, i3, b); + if(mStreakMeter){ + float f1 = 1.0f; + if(i2 < unk14){ + if(i1 == 0 || i1 % i3){ + f1 = (i1 % i3) / (float)i3; + } + } + mStreakMeter->SetWipe(f1); + } +} + +void GemTrackDir::RefreshStreakMeter(int i1, int i2, int i3){ + BandTrack::RefreshStreakMeter(i1, i2, i3); + if(mStreakMeter){ + float f38 = 1.0f; + if(i2 < unk14){ + if(i1 == 0 || i1 % i3){ + f38 = (i1 % i3) / (float)i3; + } + } + Message msg("set_wipe", f38); + TheTaskMgr.Start(new MessageTask(mStreakMeter, msg), kTaskSeconds, 0.01f); + } +} + +void GemTrackDir::PeakState(bool b1, bool b2){ + if(b1 != unk1a){ + if(b1) mPeakStateOnTrig->Trigger(); + else if(b2 && mPeakStopImmediateTrig) mPeakStopImmediateTrig->Trigger(); + else mPeakStateOffTrig->Trigger(); + } + BandTrack::PeakState(b1, b2); +} + +void GemTrackDir::SuperStreak(bool b1, bool b2){ + if(b1 != unk19){ + if(b1) mBassSuperStreakOnTrig->Trigger(); + else if(b2 && mBassSSOffImmediateTrig) mBassSSOffImmediateTrig->Trigger(); + else mBassSuperStreakOffTrig->Trigger(); + Message msg(b1 ? "start_super_streak" : "end_super_streak"); + if(mPlayerFeedback && !unk1e && !b2){ + mPlayerFeedback->Handle(msg, true); + } + } + BandTrack::SuperStreak(b1, b2); +} + +void GemTrackDir::Deploy(){ + BandTrack::Deploy(); + if(mTrackInstrument == kInstDrum && BandTrack::mParent){ + unk618 = new MessageTask(BandTrack::mParent, update_gems_msg); + TheTaskMgr.Start(unk618, kTaskSeconds, 0.0f); + } +} + +void GemTrackDir::EnterCoda(){ + BandTrack::EnterCoda(); + if(mPlayerFeedback){ + mPlayerFeedback->HandleType(reset_msg); + } + if(BandTrack::mParent){ + DataNode* prop = FindObject("gamemode", true)->Property("is_practice", true); + if(!prop){ + BandTrack::mParent->SetGemsEnabled(TheTaskMgr.Seconds(TaskMgr::b) * 1000.0f); + } + } +} + +void GemTrackDir::DisablePlayer(int i){ + if(!mDisabled && MyTrackPanelDir()){ + MyTrackPanelDir()->UnisonEnd(); + } + if(unk624) delete unk624; + BandTrack::DisablePlayer(i); +} + +DECOMP_FORCEACTIVE(GemTrackDir, "drum_fill.mesh", "guitar_fill.mesh", "unison_mask.mesh", "guitar_solo_mask.mesh", "bar_blue_beat.wid") + +void GemTrackDir::GemPass(int i1, int i2){ + unk494++; + if((i2 & 1U) && mTrackInstrument == kInstDrum){ + TrackInterface* par = BandTrack::mParent; + if(par){ + mKickPassCounter++; + if(mKickPassCounter >= 8){ + float kickms = par->NextKickNoteMs(); + if(mKickPassCounter == 8){ + if(kickms > 5000.0f) mKickPassCounter = 7; + else PopupHelp("kick", true); + } + else if(kickms > 5000.0f){ + PopupHelp("kick", false); + mKickPassCounter = 7; + } + } + } + } +} + +void GemTrackDir::GemHit(int i){ + unk494 = 0; + if(mTrackInstrument != kInstDrum) return; + if(!(i & 1U)) return; + mKickPassCounter = 0; +} + +void GemTrackDir::SeeKick(){ + if(mPopupObject) mPopupObject->Handle(kick_note_msg, true); +} + +void GemTrackDir::KickSwing(){ + PopupHelp("kick", false); + mKickPassCounter = 0; +} + +void GemTrackDir::SpotlightPhraseSuccess(){ + mSpotlightPhraseSuccessTrig->Trigger(); + BandTrack::SpotlightPhraseSuccess(); +} + +void GemTrackDir::SetPerformanceMode(bool b){ + SetShowing(!b); + BandTrack::SetPerformanceMode(b); +} + +void GemTrackDir::Mash(int slot){ + RndAnimatable* anim; + if(mTrackInstrument != kInstDrum || (slot != 0)){ + if(mTrackInstrument == kInstDrum){ + if(BandTrack::mParent && BandTrack::mParent->Lefty()){ + slot = 5 - slot; + } + MILO_ASSERT((slot > 0) && (slot < mDrumMashAnims.size()), 0x479); + anim = mDrumMashAnims[slot]; + } + else if(mTrackInstrument == kInstRealGuitar || mTrackInstrument == kInstRealBass){ + MILO_ASSERT(slot < mRealGuitarMashAnims.size(), 0x47F); + anim = mRealGuitarMashAnims[slot]; + } + else if(mTrackInstrument == kInstRealKeys) anim = mKeysMashAnim; + else { + MILO_ASSERT(slot < mGemMashAnims.size(), 0x488); + anim = mGemMashAnims[slot]; + } + anim->Animate(0, false, 0); + } +} + +void GemTrackDir::FillMash(int slot){ + MILO_ASSERT(mTrackInstrument == kInstDrum, 0x491); + if(slot != 0){ + if(BandTrack::mParent && BandTrack::mParent->Lefty()){ + slot = 5 - slot; + } + MILO_ASSERT((slot > 0) && (slot < mFillLaneAnims.size()), 0x49B); + mFillLaneAnims[slot]->Animate(0, false, 0); + } +} + +void GemTrackDir::FillHit(int numNotes){ + if(numNotes <= mFillHitTrigs.size()){ + MILO_ASSERT(numNotes > 0, 0x4A4); + if(numNotes > 0) mFillHitTrigs[numNotes - 1]->Trigger(); + } +} + +void GemTrackDir::ResetDrumFill(){ + mDrumFillResetTrig->Trigger(); + float delay = 1.0f - (std::floor(TheTaskMgr.Beat()) - TheTaskMgr.Beat()) - 0.2f; + if(mDrumMash2ndPassActivateAnim){ + if(delay < 0.0f) delay += 1.0f; + mDrumMash2ndPassActivateAnim->Animate(0, true, delay, mDrumMash2ndPassActivateAnim->GetRate(), 0.0f, 1.0f, 0.0f, 1.0f, loop); + } +} + +void GemTrackDir::ResetCoda(){ + mDrumMashHitAnimGrp->SetFrame(mDrumMashHitAnimGrp->EndFrame(), 1.0f); + mFillColorsGrp->SetFrame(mFillColorsGrp->EndFrame(), 1.0f); +} + +void GemTrackDir::CrashFill(){ + if(BandTrack::mParent){ + BandTrack::mParent->GetSmasher(4)->Handle(drum_fill_complete_msg, true); + } +} + +void GemTrackDir::SetInstrument(TrackInstrument inst){ + BandTrack::SetInstrument(inst); + TrackReset(); +} + +DECOMP_FORCEACTIVE(GemTrackDir, "game.cam") + +void GemTrackDir::SetPlayerLocal(float f){ + bool b2 = true; + bool b1 = false; + if(BandTrack::mParent && BandTrack::mParent->HasNetPlayer()) b1 = true; + if(!b1 && !mSimulatedNet) b2 = false; + if(b2) Find("network_remote.trig", true)->Trigger(); + else Find("network_local.trig", true)->Trigger(); +} + +void GemTrackDir::SetDisplayRange(float f){ + if(f != 10.0f) MILO_WARN("keyboard range must be 10 white keys inclusive"); + mSmasherPlate->SetProperty(range, f); + mSmasherPlate->HandleType(update_range_msg); + if(BandTrack::mParent) BandTrack::mParent->UpdateSlotXfms(); + mKeyRange = f; +} + +enum { + kWhiteKeyC = 0, + kWhiteKeyD = 1, + kWhiteKeyE = 2, + kWhiteKeyF = 3, + kWhiteKeyG = 4, + kWhiteKeyA = 5, + kWhiteKeyB = 6, + kNumWhiteKeys = 7 +} WhiteKey; + +enum { + kNoteC = 0, + kNoteCSharp = 1, + kNoteDFlat = 1, + kNoteD = 2, + kNoteDSharp = 3, + kNoteEFlat = 3, + kNoteE = 4, + kNoteF = 5, + kNoteFSharp = 6, + kNoteGFlat = 6, + kNoteG = 7, + kNoteGSharp = 8, + kNoteAFlat = 8, + kNoteA = 9, + kNoteASharp = 10, + kNoteBFlat = 10, + kNoteB = 11, + kNumSemitones = 12 +} SemitoneName; + +int WhiteKeyToSemitone(int whiteKey){ + MILO_ASSERT(whiteKey > -1, 0x557); + int semitone = 0; + while(whiteKey >= kNumWhiteKeys){ + whiteKey -= kNumWhiteKeys; + semitone += kNumSemitones; + } + switch(whiteKey){ + case kWhiteKeyC: + semitone += kNoteC; + break; + case kWhiteKeyD: + semitone += kNoteD; + break; + case kWhiteKeyE: + semitone += kNoteE; + break; + case kWhiteKeyF: + semitone += kNoteF; + break; + case kWhiteKeyG: + semitone += kNoteG; + break; + case kWhiteKeyA: + semitone += kNoteA; + break; + case kWhiteKeyB: + semitone += kNoteB; + break; + default: + MILO_FAIL("unexpected white key %d", whiteKey); + break; + } + return semitone; +} + +float GemTrackDir::GetFretPosOffset(int idx) const { + float f; + if(idx > mFretPosOffsets.size()){ + if(idx > 0) MILO_WARN("fret position %d is unhandled - must be in [-1,%d]", idx, mFretPosOffsets.size() - 1); + f = 0; + } + else f = mFretPosOffsets[idx]; + return f; +} + +float GemTrackDir::GetKeyRange(){ return mKeyRange; } +float GemTrackDir::GetKeyOffset(){ return mKeyOffset; } + +void GemTrackDir::UpdateFingerFeedback(const RGState& state){ +#ifdef MILO_DEBUG + static int count; + const RGState& touse = mFakeFingerShape ? mRGState : state; + if(mCycleFakeFingerShapes){ + count++; + if(count == mRandomShapeFrameCount){ + for(int i = 0; i < 6; i++){ + mRGState.FretDown(i, RandomInt(0, 5)); + } + count = 0; + } + } + if(mFingerShape) mFingerShape->Update(touse, true, false); +#else + if(mFingerShape) mFingerShape->Update(state, true, false); +#endif +} + +void GemTrackDir::UpdateLeftyFlip(bool b){ + if(mFingerShape) mFingerShape->UpdateLeftyFlip(b); +} + +void GemTrackDir::KeyMissRight(){ + if(mMissOutofRangeRightTrig) mMissOutofRangeRightTrig->Trigger(); +} + +void GemTrackDir::KeyMissLeft(){ + if(mMissOutofRangeLeftTrig) mMissOutofRangeLeftTrig->Trigger(); +} + +void GemTrackDir::SetUnisonProgress(float f){ + if(mUnisonIcon) mUnisonIcon->SetProgress(f); +} + +#define kNumRGStrings 6 + +void GemTrackDir::AddChordRepImpl(RndMesh* mesh, TrackWidget* widget1, TrackWidget* widget2, TrackWidget* widget3, + float f, const std::vector& fretNums, String chordLabel){ + float secy = SecondsToY(f); + if(widget1 && mesh){ + Transform tf60; + tf60.Reset(); + tf60.v.y = secy; + widget1->AddMeshInstance(tf60, mesh, 0.0f); + } + if(widget2){ + MILO_ASSERT(fretNums.size() == kNumRGStrings, 0x71F); + for(int i = 0; i < 6; i++){ + int curi = fretNums[i]; + if(curi > -1){ + Transform tf90 = SlotAt(i); + tf90.v.y = secy; + widget2->AddTextInstance(tf90, String(RGFretNumberToString(curi)), false); + } + } + } + if(widget3){ + MILO_ASSERT(!chordLabel.empty(), 0x72F); + Transform tfc0; + tfc0.Reset(); + tfc0.v.y = secy; + tfc0.v.x = GetCurrentChordLabelPosOffset(); + widget3->AddTextInstance(tfc0, chordLabel, false); + } +} + +float GemTrackDir::GetCurrentChordLabelPosOffset() const { + if(BandTrack::mParent){ + if(BandTrack::mParent->Lefty()) return -mChordLabelPosOffset; + else return mChordLabelPosOffset; + } + else return mChordLabelPosOffset; +} + +DataNode GemTrackDir::OnDrawSampleChord(DataArray* da){ + RndMesh* mesh = da->Obj(2); + TrackWidget* widget1 = da->Obj(3); + TrackWidget* widget2 = da->Obj(4); + TrackWidget* widget3 = da->Obj(5); + int i6 = da->Int(6); + int i7 = da->Int(7); + RndTransformable* trans = da->Obj(8); + Transform tf68(trans->WorldXfm()); + String str78(da->Str(9)); + static std::vector fretNums; + if(fretNums.empty()) fretNums.resize(6); + for(int i = 0; i < 6; i++){ + if(i == i6) fretNums[i] = i7; + else fretNums[i] = -1; + } + AddChordImpl(mesh, widget1, widget2, widget3, 0, fretNums, str78); + return 0; +} + +bool GemTrackDir::KeyShifting(){ return kKeyShifting; } +bool GemTrackDir::ToggleKeyShifting(){ + kKeyShifting = kKeyShifting == 0; + return kKeyShifting; +} + #pragma push #pragma dont_inline on BEGIN_HANDLERS(GemTrackDir) @@ -133,7 +923,9 @@ BEGIN_HANDLERS(GemTrackDir) 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()) +#ifdef MILO_DEBUG + HANDLE_EXPR(toggle_key_shifting, ToggleKeyShifting()) +#endif HANDLE_SUPERCLASS(BandTrack) HANDLE_SUPERCLASS(TrackDir) HANDLE_CHECK(0x7B4) @@ -169,12 +961,12 @@ BEGIN_PROPSYNCS(GemTrackDir) 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(real_guitar_mash_0_anim, mRealGuitarMashAnims[0]) + SYNC_PROP(real_guitar_mash_1_anim, mRealGuitarMashAnims[1]) + SYNC_PROP(real_guitar_mash_2_anim, mRealGuitarMashAnims[2]) + SYNC_PROP(real_guitar_mash_3_anim, mRealGuitarMashAnims[3]) + SYNC_PROP(real_guitar_mash_4_anim, mRealGuitarMashAnims[4]) + SYNC_PROP(real_guitar_mash_5_anim, mRealGuitarMashAnims[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]) @@ -196,9 +988,11 @@ BEGIN_PROPSYNCS(GemTrackDir) SYNC_PROP(fret_pos_offset_4, mFretPosOffsets[4]) SYNC_PROP(chord_label_pos_offset, mChordLabelPosOffset) SYNC_PROP(gem_track_dir_id, mGemTrackDirID) +#ifdef MILO_DEBUG SYNC_PROP(fake_finger_shape, mFakeFingerShape) SYNC_PROP(cycle_fake_finger_shapes, mCycleFakeFingerShapes) SYNC_PROP(random_shape_frame_count, mRandomShapeFrameCount) +#endif 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 3dd64ff0..8be1d9f3 100644 --- a/src/system/bandobj/GemTrackDir.h +++ b/src/system/bandobj/GemTrackDir.h @@ -84,7 +84,23 @@ class GemTrackDir : public TrackDir, public BandTrack { void SetSideAngle(float); void Mash(int); void CrashFill(); - void ToggleKeyShifting(); + bool ToggleKeyShifting(); + void UpdateSurfaceTexture(); + void OnUpdateFx(int); + void GemPass(int, int); + void GemHit(int); + void SeeKick(); + void KickSwing(); + void FillMash(int); + void FillHit(int); + void ResetDrumFill(); + void ResetCoda(); + float GetKeyRange(); + float GetKeyOffset(); + void UpdateFingerFeedback(const RGState&); + void UpdateLeftyFlip(bool); + bool KeyShifting(); + void AddChordRepImpl(RndMesh*, TrackWidget*, TrackWidget*, TrackWidget*, float, const std::vector&, String); DataNode OnDrawSampleChord(DataArray*); @@ -120,7 +136,7 @@ class GemTrackDir : public TrackDir, public BandTrack { std::vector > mGemMashAnims; // 0x570 std::vector > mDrumMashAnims; // 0x578 std::vector > mFillLaneAnims; // 0x580 - std::vector > mRGMashAnims; // 0x588 + std::vector > mRealGuitarMashAnims; // 0x588 std::vector, ObjPtr > > mDrumRollTrigs; // 0x590 std::vector, ObjPtr > > mTrillTrigs; // 0x598 std::vector > mFillHitTrigs; // 0x5a0 @@ -141,8 +157,8 @@ class GemTrackDir : public TrackDir, public BandTrack { ObjPtr unk654; // 0x654 ObjPtr mKeysShiftAnim; // 0x660 ObjPtr mKeysMashAnim; // 0x66c - float unk678; // 0x678 - float unk67c; // 0x67c + float mKeyRange; // 0x678 + float mKeyOffset; // 0x67c std::vector unk680; // 0x680 std::vector unk688; // 0x688 std::vector unk690; // 0x690 @@ -154,8 +170,10 @@ class GemTrackDir : public TrackDir, public BandTrack { std::map > unk6cc; // 0x6cc ArpeggioShapePool* mArpShapePool; // 0x6e4 bool unk6e8; // 0x6e8 +#ifdef MILO_DEBUG bool mFakeFingerShape; // 0x6e9 bool mCycleFakeFingerShapes; // 0x6ea int mRandomShapeFrameCount; // 0x6ec - RGState unk6f0; // 0x6f0 + RGState mRGState; // 0x6f0 +#endif }; \ No newline at end of file diff --git a/src/system/bandobj/GemTrackResourceManager.cpp b/src/system/bandobj/GemTrackResourceManager.cpp index 8148ff67..f43f4705 100644 --- a/src/system/bandobj/GemTrackResourceManager.cpp +++ b/src/system/bandobj/GemTrackResourceManager.cpp @@ -1,4 +1,5 @@ #include "bandobj/GemTrackResourceManager.h" +#include "obj/Msg.h" GemTrackResourceManager::GemTrackResourceManager(ObjectDir* dir) : unk1c(this, dir) { InitSmasherPlates(); @@ -6,4 +7,62 @@ GemTrackResourceManager::GemTrackResourceManager(ObjectDir* dir) : unk1c(this, d GemTrackResourceManager::~GemTrackResourceManager(){ +} + +void GemTrackResourceManager::InitSmasherPlates(){ + SmasherPlateInfo info(this); + unk28.reserve(7); + info.mSmasherPlate = unk1c->Find("smasher_plate_guitar", true); + info.mTrackInst = kInstGuitar; + unk28.push_back(info); + info.mSmasherPlate = unk1c->Find("smasher_plate_bass", true); + info.mTrackInst = kInstBass; + unk28.push_back(info); + info.mSmasherPlate = unk1c->Find("smasher_plate_keys", true); + info.mTrackInst = kInstKeys; + unk28.push_back(info); + info.mSmasherPlate = unk1c->Find("smasher_plate_drum", true); + info.mTrackInst = kInstDrum; + unk28.push_back(info); + info.mSmasherPlate = unk1c->Find("smasher_plate_real_guitar", true); + info.mTrackInst = kInstRealGuitar; + unk28.push_back(info); + info.mSmasherPlate = unk1c->Find("smasher_plate_real_bass", true); + info.mTrackInst = kInstRealBass; + unk28.push_back(info); + info.mSmasherPlate = unk1c->Find("smasher_plate_real_keys", true); + info.mTrackInst = kInstRealKeys; + unk28.push_back(info); + for(int i = 0; i < unk28.size(); i++){ + static Message setup_draworder("setup_draworder", 0); + unk28[i].mSmasherPlate->HandleType(setup_draworder); + } +} + +RndDir* GemTrackResourceManager::GetFreeSmasherPlate(TrackInstrument inst){ + if(inst == kInstPending) return 0; + else { + for(int i = 0; i < unk28.size(); i++){ + SmasherPlateInfo& curinfo = unk28[i]; + if(curinfo.mTrackInst == inst && !curinfo.mInUse){ + curinfo.mInUse = true; + return curinfo.mSmasherPlate; + } + } + MILO_WARN("Could not find free smasher plate for instrument %d", inst); + } + return 0; +} + +void GemTrackResourceManager::ReleaseSmasherPlate(RndDir* plate){ + for(int i = 0; i < unk28.size(); i++){ + SmasherPlateInfo& info = unk28[i]; + if(info.mSmasherPlate == plate){ + MILO_ASSERT(info.mInUse, 0x60); + info.mInUse = false; + info.mSmasherPlate = plate; + return; + } + } + MILO_WARN("Tried to release invalid smasher 0x%08x", plate); } \ No newline at end of file diff --git a/src/system/bandobj/GemTrackResourceManager.h b/src/system/bandobj/GemTrackResourceManager.h index 14a513e7..e6fec1a7 100644 --- a/src/system/bandobj/GemTrackResourceManager.h +++ b/src/system/bandobj/GemTrackResourceManager.h @@ -2,14 +2,27 @@ #include "obj/Object.h" #include "obj/Dir.h" #include "obj/ObjPtr_p.h" +#include "rndobj/Dir.h" +#include "bandobj/TrackPanelDirBase.h" class GemTrackResourceManager : public Hmx::Object { public: + class SmasherPlateInfo { + public: + SmasherPlateInfo(Hmx::Object* o) : mSmasherPlate(o, 0), mTrackInst(kInstNone), mInUse(0) {} + + ObjPtr mSmasherPlate; // 0x0 + TrackInstrument mTrackInst; // 0xc + bool mInUse; // 0x10 + }; + GemTrackResourceManager(ObjectDir*); virtual ~GemTrackResourceManager(); void InitSmasherPlates(); + RndDir* GetFreeSmasherPlate(TrackInstrument); + void ReleaseSmasherPlate(RndDir*); ObjPtr unk1c; // 0x1c - std::vector unk28; // 0x28 + std::vector unk28; // 0x28 }; \ No newline at end of file diff --git a/src/system/bandobj/StreakMeter.h b/src/system/bandobj/StreakMeter.h index 9b70d172..0aec044c 100644 --- a/src/system/bandobj/StreakMeter.h +++ b/src/system/bandobj/StreakMeter.h @@ -51,6 +51,7 @@ class StreakMeter : public RndDir { void SetPartPct(int, float, bool); void SetNumParts(int); void SyncVoxPhraseTriggers(); + void SetPitch(float); DECLARE_REVS; NEW_OVERLOAD; diff --git a/src/system/bandobj/TrackInterface.h b/src/system/bandobj/TrackInterface.h index be37dd66..98058395 100644 --- a/src/system/bandobj/TrackInterface.h +++ b/src/system/bandobj/TrackInterface.h @@ -56,7 +56,7 @@ class TrackInterface : public Hmx::Object { virtual void SetGemsEnabledByPlayer(){} virtual void UpdateGems(){} virtual float NextKickNoteMs() const { return 3.4028235E+38f; } - virtual int GetSmasher(int){ return 0; } + virtual Hmx::Object* GetSmasher(int){ return 0; } // TODO: this return type is almost definitely wrong, fix it virtual void ResetSmashers(bool){} virtual bool Lefty() const { return 0; } virtual void RebuildBeats(){} diff --git a/src/system/bandobj/TrackPanelDirBase.h b/src/system/bandobj/TrackPanelDirBase.h index de446d5e..c790980e 100644 --- a/src/system/bandobj/TrackPanelDirBase.h +++ b/src/system/bandobj/TrackPanelDirBase.h @@ -68,7 +68,7 @@ class TrackPanelDirBase : public PanelDir { virtual void SetApplauseMeterScale(int, int){} virtual void StartPulseAnims(float); virtual float GetPulseAnimStartDelay(bool) const; - virtual GemTrackResourceManager* GetGemTrackResourceManager() const; + virtual GemTrackResourceManager* GetGemTrackResourceManager() const { return 0; } void SetShowing(bool); bool ModifierActive(Symbol); diff --git a/src/system/rndobj/Env.h b/src/system/rndobj/Env.h index 1d27b8f0..52acea20 100644 --- a/src/system/rndobj/Env.h +++ b/src/system/rndobj/Env.h @@ -55,6 +55,10 @@ class RndEnviron : public Hmx::Object { mAmbientFogOwner->mFogStart = start; mAmbientFogOwner->mFogEnd = end; } + void SetFadeRange(float start, float end){ + mFadeStart = start; + mFadeEnd = end; + } NEW_OVERLOAD DELETE_OVERLOAD diff --git a/src/system/track/TrackDir.cpp b/src/system/track/TrackDir.cpp index 45d8b6e0..5767614d 100644 --- a/src/system/track/TrackDir.cpp +++ b/src/system/track/TrackDir.cpp @@ -15,7 +15,11 @@ TrackDir::TrackDir() : mRunning(!TheLoadMgr.EditMode()), mDrawGroup(this, 0), mA mStationaryBackAfterKeyShift(this, 0), mMovingBack(this, 0), mKeyShiftMovingBack(this, 0), mKeyShiftStationaryMiddle(this, 0), mStationaryMiddle(this, 0), mMovingFront(this, 0), mKeyShiftMovingFront(this, 0), mKeyShiftStationaryFront(this, 0), mStationaryFront(this, 0), mAlwaysShowing(this, 0), mRotatorCam(this, 0), mTrack(this, 0), - mTrackGems(this, 0), unk368(1.0f), mTest(new TrackTest(this)) { + mTrackGems(this, 0), unk368(1.0f) +#ifdef MILO_DEBUG + , mTest(new TrackTest(this)) +#endif +{ mActiveWidgets.reserve(0x32); unk2d8.Reset(); unk308.Reset(); @@ -23,7 +27,9 @@ TrackDir::TrackDir() : mRunning(!TheLoadMgr.EditMode()), mDrawGroup(this, 0), mA } TrackDir::~TrackDir(){ +#ifdef MILO_DEBUG delete mTest; +#endif } // fn_8053E7D4 @@ -79,8 +85,10 @@ BEGIN_COPYS(TrackDir) COPY_MEMBER(mBottomY) COPY_MEMBER(mSlots) COPY_MEMBER(mWarnOnResort) +#ifdef MILO_DEBUG COPY_MEMBER(mTest->mWidget) COPY_MEMBER(mTest->mSlot) +#endif END_COPYING_MEMBERS END_COPYS @@ -122,9 +130,11 @@ void TrackDir::PostLoad(BinStream& bs){ } } if(gRev > 4) bs >> mWarnOnResort; +#ifdef MILO_DEBUG if(gRev > 3){ bs >> mTest->mWidget >> mTest->mSlot; } +#endif } for(ObjDirItr it(this, true); it != 0; ++it){ it->SetTrackDir(this); @@ -311,6 +321,8 @@ BEGIN_PROPSYNCS(TrackDir) SYNC_PROP(bottom_y, mBottomY) SYNC_PROP(slots, mSlots) SYNC_PROP(warn_on_resort, mWarnOnResort) +#ifdef MILO_DEBUG SYNC_PROP(TrackTesting, *mTest) +#endif SYNC_SUPERCLASS(PanelDir) END_PROPSYNCS diff --git a/src/system/track/TrackDir.h b/src/system/track/TrackDir.h index 4d6f63c6..2859608a 100644 --- a/src/system/track/TrackDir.h +++ b/src/system/track/TrackDir.h @@ -107,7 +107,9 @@ class TrackDir : public PanelDir { Transform unk308; Transform unk338; float unk368; +#ifdef MILO_DEBUG TrackTest* mTest; // 0x36c +#endif }; #endif // TRACK_TRACKDIR_H \ No newline at end of file