From 70e8142431f818d600b78c32e82eba83235c7347 Mon Sep 17 00:00:00 2001 From: rjkiv <76180273+rjkiv@users.noreply.github.com> Date: Sat, 7 Sep 2024 10:41:18 -0700 Subject: [PATCH] Work on BandButton and BandCamShot (#339) * bandbutton added * bandbutton nearly matched, and retail symbols too * add bandcamshot * bandcamshot work * more bandcamshot stuff --- config/SZBE69/objects.json | 2 + config/SZBE69/splits.txt | 7 + config/SZBE69/symbols.txt | 426 ++++++++++++------------- config/SZBE69_B8/objects.json | 1 + src/system/bandobj/BandButton.cpp | 219 +++++++++++++ src/system/bandobj/BandButton.h | 38 +++ src/system/bandobj/BandCamShot.cpp | 492 ++++++++++++++++++++++++++++- src/system/bandobj/BandCamShot.h | 113 +++++++ src/system/bandobj/BandLabel.h | 2 + src/system/char/Character.h | 1 + src/system/math/Mtx.h | 1 + src/system/obj/ObjPtr_p.h | 1 + src/system/rndobj/Text.h | 1 + src/system/ui/UILabel.h | 1 + src/system/world/CameraShot.h | 7 +- 15 files changed, 1091 insertions(+), 221 deletions(-) create mode 100644 src/system/bandobj/BandButton.cpp create mode 100644 src/system/bandobj/BandButton.h create mode 100644 src/system/bandobj/BandCamShot.h diff --git a/config/SZBE69/objects.json b/config/SZBE69/objects.json index 1f753ccc..9e1dc352 100644 --- a/config/SZBE69/objects.json +++ b/config/SZBE69/objects.json @@ -54,6 +54,8 @@ "mw_version": "Wii/1.3", "cflags": "system", "objects": { + "system/bandobj/BandButton.cpp": "NonMatching", + "system/bandobj/BandCamShot.cpp": "NonMatching", "system/bandobj/CrowdAudio.cpp": "NonMatching", "system/bandobj/CrowdMeterIcon.cpp": "NonMatching", "system/bandobj/InlineHelp.cpp": "NonMatching", diff --git a/config/SZBE69/splits.txt b/config/SZBE69/splits.txt index 34b66071..bb64596e 100644 --- a/config/SZBE69/splits.txt +++ b/config/SZBE69/splits.txt @@ -954,6 +954,13 @@ system/zlib/inffast.c: .text start:0x803846EC end:0x80384BA8 .data start:0x80874978 end:0x808749C8 +system/bandobj/BandButton.cpp: + .text start:0x80387FF4 end:0x80389678 + +system/bandobj/BandCamShot.cpp: + .text start:0x80389678 end:0x80392CF0 + .ctors start:0x807EFF84 end:0x807EFF88 + rb3/chordshapegenerator.cpp: .text start:0x803EEDD4 end:0x803F4E74 .ctors start:0x807EFF90 end:0x807EFF94 diff --git a/config/SZBE69/symbols.txt b/config/SZBE69/symbols.txt index 96d1e921..2a8e5242 100644 --- a/config/SZBE69/symbols.txt +++ b/config/SZBE69/symbols.txt @@ -7455,7 +7455,7 @@ fn_800D1C84 = .text:0x800D1C84; // type:function size:0x30 fn_800D1CB4 = .text:0x800D1CB4; // type:function size:0xAC fn_800D1D60 = .text:0x800D1D60; // type:function size:0xC fn_800D1D6C = .text:0x800D1D6C; // type:function size:0x10 -fn_800D1D7C = .text:0x800D1D7C; // type:function size:0x8 +SetFar__7CamShotFf = .text:0x800D1D7C; // type:function size:0x8 fn_800D1D84 = .text:0x800D1D84; // type:function size:0x8 fn_800D1D8C = .text:0x800D1D8C; // type:function size:0x10 fn_800D1D9C = .text:0x800D1D9C; // type:function size:0x4 @@ -8633,7 +8633,7 @@ fn_800EFA84 = .text:0x800EFA84; // type:function size:0x2C Abs__Ff_Cf = .text:0x800EFAB0; // type:function size:0x18 fn_800EFAC8 = .text:0x800EFAC8; // type:function size:0x38 fn_800EFB00 = .text:0x800EFB00; // type:function size:0x1C8 -fn_800EFCC8 = .text:0x800EFCC8; // type:function size:0x14 +end__Q211stlpmtx_std87vector>Fv = .text:0x800EFCC8; // type:function size:0x14 fn_800EFCDC = .text:0x800EFCDC; // type:function size:0x8 fn_800EFCE4 = .text:0x800EFCE4; // type:function size:0xD8 fn_800EFDBC = .text:0x800EFDBC; // type:function size:0x124 @@ -23842,7 +23842,7 @@ fn_802DDEA0 = .text:0x802DDEA0; // type:function size:0x58 ToQuat__9ShortQuatCFRQ23Hmx4Quat = .text:0x802DDEF8; // type:function size:0xA4 Set__16TransformNoScaleFRC9Transform = .text:0x802DDF9C; // type:function size:0x44 Set__9ShortQuatFRCQ23Hmx4Quat = .text:0x802DDFE0; // type:function size:0xF0 -__as__14ShortTransformFRC14ShortTransform = .text:0x802DE0D0; // type:function size:0x44 +Set__16TransformNoScaleFRC16TransformNoScale = .text:0x802DE0D0; // type:function size:0x44 __as__9ShortQuatFRC9ShortQuat = .text:0x802DE114; // type:function size:0x24 Set__9ShortQuatFRCQ23Hmx7Matrix3 = .text:0x802DE138; // type:function size:0x3C __ct__Q23Hmx4QuatFRCQ23Hmx7Matrix3 = .text:0x802DE174; // type:function size:0x30 @@ -23852,7 +23852,7 @@ Reset__16TransformNoScaleFv = .text:0x802DE1D8; // type:function size:0x30 __eq__7Vector3CFRC7Vector3 = .text:0x802DE208; // type:function size:0x40 __ne__7Vector3CFRC7Vector3 = .text:0x802DE248; // type:function size:0x40 __ls__FR9BinStreamRC7Vector3 = .text:0x802DE288; // type:function size:0x50 -fn_802DE2D8 = .text:0x802DE2D8; // type:function size:0x60 +__rs__FR9BinStreamR16TransformNoScale = .text:0x802DE2D8; // type:function size:0x60 __rs__FR9BinStreamR7Vector3 = .text:0x802DE338; // type:function size:0x4C __rs__FR9BinStreamRQ23Hmx7Matrix3 = .text:0x802DE384; // type:function size:0x4C Normalize__FRCQ23Hmx4QuatRQ23Hmx4Quat = .text:0x802DE3D0; // type:function size:0x68 @@ -26844,7 +26844,7 @@ fn_8033B74C = .text:0x8033B74C; // type:function size:0x10 DeltaTime__7TaskMgrCF9TaskUnits = .text:0x8033B75C; // type:function size:0x10 SetDeltaTime__7TaskMgrF9TaskUnitsf = .text:0x8033B76C; // type:function size:0x20 fn_8033B78C = .text:0x8033B78C; // type:function size:0x20 -fn_8033B7AC = .text:0x8033B7AC; // type:function size:0x64 +SetSecondsAndBeat__7TaskMgrFffb = .text:0x8033B7AC; // type:function size:0x64 SetSeconds__7TaskMgrFfb = .text:0x8033B810; // type:function size:0x98 Time__7TaskMgrCF9TaskUnits = .text:0x8033B8A8; // type:function size:0x10 fn_8033B8B8 = .text:0x8033B8B8; // type:function size:0x8 @@ -28621,67 +28621,67 @@ NewObject__17BandConfigurationFv = .text:0x80387E5C; // type:function size:0x34 fn_80387E90 = .text:0x80387E90; // type:function size:0x4C Init__11BandCamShotFv = .text:0x80387EDC; // type:function size:0x34 NewObject__11BandCamShotFv = .text:0x80387F10; // type:function size:0x44 -fn_80387F54 = .text:0x80387F54; // type:function size:0x4C +StaticClassName__11BandCamShotFv = .text:0x80387F54; // type:function size:0x4C fn_80387FA0 = .text:0x80387FA0; // type:function size:0x54 Init__10BandButtonFv = .text:0x80387FF4; // type:function size:0x40 Register__10BandButtonFv = .text:0x80388034; // type:function size:0x34 NewObject__10BandButtonFv = .text:0x80388068; // type:function size:0x48 -fn_803880B0 = .text:0x803880B0; // type:function size:0x4C +StaticClassName__10BandButtonFv = .text:0x803880B0; // type:function size:0x4C __ct__10BandButtonFv = .text:0x803880FC; // type:function size:0xE0 __dt__8UIButtonFv = .text:0x803881DC; // type:function size:0x98 -fn_80388274 = .text:0x80388274; // type:function size:0x11C -fn_80388390 = .text:0x80388390; // type:function size:0x4 -fn_80388394 = .text:0x80388394; // type:function size:0x4 -fn_80388398 = .text:0x80388398; // type:function size:0x5C -fn_803883F4 = .text:0x803883F4; // type:function size:0x3AC -fn_803887A0 = .text:0x803887A0; // type:function size:0x138 -fn_803888D8 = .text:0x803888D8; // type:function size:0x4 -fn_803888DC = .text:0x803888DC; // type:function size:0x6C +__dt__10BandButtonFv = .text:0x80388274; // type:function size:0x11C +Copy__10BandButtonFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x80388390; // type:function size:0x4 +Save__10BandButtonFR9BinStream = .text:0x80388394; // type:function size:0x4 +Load__10BandButtonFR9BinStream = .text:0x80388398; // type:function size:0x5C +PreLoad__10BandButtonFR9BinStream = .text:0x803883F4; // type:function size:0x3AC +SetType__10BandButtonF6Symbol = .text:0x803887A0; // type:function size:0x138 +ClassName__10BandButtonCFv = .text:0x803888D8; // type:function size:0x4 +PostLoad__10BandButtonFR9BinStream = .text:0x803888DC; // type:function size:0x6C __rs<7RndMesh>__FR9BinStreamR27ObjPtr<7RndMesh,9ObjectDir>_R9BinStream = .text:0x80388948; // type:function size:0x40 -fn_80388988 = .text:0x80388988; // type:function size:0x104 +Load__27ObjPtr<7RndMesh,9ObjectDir>FR9BinStreambP9ObjectDir = .text:0x80388988; // type:function size:0x104 __dt__27ObjPtr<7RndMesh,9ObjectDir>Fv = .text:0x80388A8C; // type:function size:0x84 __ct__27ObjPtr<7RndMesh,9ObjectDir>FPQ23Hmx6ObjectP7RndMesh = .text:0x80388B10; // type:function size:0x6C -fn_80388B7C = .text:0x80388B7C; // type:function size:0x13C -fn_80388CB8 = .text:0x80388CB8; // type:function size:0x8 -fn_80388CC0 = .text:0x80388CC0; // type:function size:0x1B4 -fn_80388E74 = .text:0x80388E74; // type:function size:0xAC -fn_80388F20 = .text:0x80388F20; // type:function size:0xAC -fn_80388FCC = .text:0x80388FCC; // type:function size:0xC8 -fn_80389094 = .text:0x80389094; // type:function size:0x18C -fn_80389220 = .text:0x80389220; // type:function size:0x48 +DrawShowing__10BandButtonFv = .text:0x80388B7C; // type:function size:0x13C +GetFont__7RndTextCFv = .text:0x80388CB8; // type:function size:0x8 +SetState__10BandButtonFQ211UIComponent5State = .text:0x80388CC0; // type:function size:0x1B4 +SkipToFocused__10BandButtonFv = .text:0x80388E74; // type:function size:0xAC +SkipToUnfocused__10BandButtonFv = .text:0x80388F20; // type:function size:0xAC +StartPulseAnim__10BandButtonFv = .text:0x80388FCC; // type:function size:0xC8 +Update__10BandButtonFv = .text:0x80389094; // type:function size:0x18C +New<11RndPropAnim>__Q23Hmx6ObjectFv_P11RndPropAnim = .text:0x80389220; // type:function size:0x48 StaticClassName__11RndPropAnimFv = .text:0x80389268; // type:function size:0x4C -fn_803892B4 = .text:0x803892B4; // type:function size:0x134 -fn_803893E8 = .text:0x803893E8; // type:function size:0x8C +Handle__10BandButtonFP9DataArrayb = .text:0x803892B4; // type:function size:0x134 +SyncProperty__10BandButtonFR8DataNodeP9DataArrayi6PropOp = .text:0x803893E8; // type:function size:0x8C Replace__27ObjPtr<7RndMesh,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .text:0x80389474; // type:function size:0x70 -fn_803894E4 = .text:0x803894E4; // type:function size:0x14 -fn_803894F8 = .text:0x803894F8; // type:function size:0x14 -fn_8038950C = .text:0x8038950C; // type:function size:0x8 -fn_80389514 = .text:0x80389514; // type:function size:0x8 -fn_8038951C = .text:0x8038951C; // type:function size:0x8 -fn_80389524 = .text:0x80389524; // type:function size:0x8 -fn_8038952C = .text:0x8038952C; // type:function size:0x8 -fn_80389534 = .text:0x80389534; // type:function size:0x8 -fn_8038953C = .text:0x8038953C; // type:function size:0x8 -fn_80389544 = .text:0x80389544; // type:function size:0x8 -fn_8038954C = .text:0x8038954C; // type:function size:0x14 -fn_80389560 = .text:0x80389560; // type:function size:0x14 -fn_80389574 = .text:0x80389574; // type:function size:0x14 -fn_80389588 = .text:0x80389588; // type:function size:0x14 -fn_8038959C = .text:0x8038959C; // type:function size:0x14 -fn_803895B0 = .text:0x803895B0; // type:function size:0x14 -fn_803895C4 = .text:0x803895C4; // type:function size:0x14 -fn_803895D8 = .text:0x803895D8; // type:function size:0x14 -fn_803895EC = .text:0x803895EC; // type:function size:0x14 -fn_80389600 = .text:0x80389600; // type:function size:0x14 -fn_80389614 = .text:0x80389614; // type:function size:0x14 -fn_80389628 = .text:0x80389628; // type:function size:0x14 -fn_8038963C = .text:0x8038963C; // type:function size:0x14 -fn_80389650 = .text:0x80389650; // type:function size:0x8 -fn_80389658 = .text:0x80389658; // type:function size:0x8 -fn_80389660 = .text:0x80389660; // type:function size:0x8 -fn_80389668 = .text:0x80389668; // type:function size:0x8 -fn_80389670 = .text:0x80389670; // type:function size:0x8 -fn_80389678 = .text:0x80389678; // type:function size:0x94 +@492@8@Highlight__7UILabelFv = .text:0x803894E4; // type:function size:0x14 +@492@8@__dt__10BandButtonFv = .text:0x803894F8; // type:function size:0x14 +@32@__dt__10BandButtonFv = .text:0x8038950C; // type:function size:0x8 +@32@Load__10BandButtonFR9BinStream = .text:0x80389514; // type:function size:0x8 +@32@Copy__10BandButtonFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x8038951C; // type:function size:0x8 +@32@Save__10BandButtonFR9BinStream = .text:0x80389524; // type:function size:0x8 +@32@SyncProperty__10BandButtonFR8DataNodeP9DataArrayi6PropOp = .text:0x8038952C; // type:function size:0x8 +@32@Handle__10BandButtonFP9DataArrayb = .text:0x80389534; // type:function size:0x8 +@32@SetType__10BandButtonF6Symbol = .text:0x8038953C; // type:function size:0x8 +@32@ClassName__10BandButtonCFv = .text:0x80389544; // type:function size:0x8 +@428@28@Replace__16RndTransformableFPQ23Hmx6ObjectPQ23Hmx6Object = .text:0x8038954C; // type:function size:0x14 +@460@28@PostLoad__10BandButtonFR9BinStream = .text:0x80389560; // type:function size:0x14 +@460@28@PreLoad__10BandButtonFR9BinStream = .text:0x80389574; // type:function size:0x14 +@460@28@SetTypeDef__11UIComponentFP9DataArray = .text:0x80389588; // type:function size:0x14 +@428@28@Print__16RndTransformableFv = .text:0x8038959C; // type:function size:0x14 +@460@28@Load__10BandButtonFR9BinStream = .text:0x803895B0; // type:function size:0x14 +@460@28@Copy__10BandButtonFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x803895C4; // type:function size:0x14 +@460@28@Save__10BandButtonFR9BinStream = .text:0x803895D8; // type:function size:0x14 +@460@28@__dt__10BandButtonFv = .text:0x803895EC; // type:function size:0x14 +@460@28@SyncProperty__10BandButtonFR8DataNodeP9DataArrayi6PropOp = .text:0x80389600; // type:function size:0x14 +@460@28@Handle__10BandButtonFP9DataArrayb = .text:0x80389614; // type:function size:0x14 +@460@28@SetType__10BandButtonF6Symbol = .text:0x80389628; // type:function size:0x14 +@460@28@ClassName__10BandButtonCFv = .text:0x8038963C; // type:function size:0x14 +@176@__dt__10BandButtonFv = .text:0x80389650; // type:function size:0x8 +@176@Poll__7UILabelFv = .text:0x80389658; // type:function size:0x8 +@176@Handle__10BandButtonFP9DataArrayb = .text:0x80389660; // type:function size:0x8 +@176@SetType__10BandButtonF6Symbol = .text:0x80389668; // type:function size:0x8 +@176@ClassName__10BandButtonCFv = .text:0x80389670; // type:function size:0x8 +CreateTargetCache__11BandCamShotF6Symbol = .text:0x80389678; // type:function size:0x94 fn_8038970C = .text:0x8038970C; // type:function size:0x4 fn_80389710 = .text:0x80389710; // type:function size:0x8 fn_80389718 = .text:0x80389718; // type:function size:0x30 @@ -28692,56 +28692,56 @@ fn_80389804 = .text:0x80389804; // type:function size:0x50 fn_80389854 = .text:0x80389854; // type:function size:0x10 fn_80389864 = .text:0x80389864; // type:function size:0x58 __ct__16TransformNoScaleFRC16TransformNoScale = .text:0x803898BC; // type:function size:0x30 -fn_803898EC = .text:0x803898EC; // type:function size:0x38 -fn_80389924 = .text:0x80389924; // type:function size:0xD8 +__ct__Q211BandCamShot11TargetCacheFv = .text:0x803898EC; // type:function size:0x38 +GetTargetCache__11BandCamShotF6Symbol = .text:0x80389924; // type:function size:0xD8 fn_803899FC = .text:0x803899FC; // type:function size:0x8 -fn_80389A04 = .text:0x80389A04; // type:function size:0x3C +DeleteTargetCache__11BandCamShotFQ211stlpmtx_std108_List_iterator> = .text:0x80389A04; // type:function size:0x3C fn_80389A40 = .text:0x80389A40; // type:function size:0x50 fn_80389A90 = .text:0x80389A90; // type:function size:0x6C fn_80389AFC = .text:0x80389AFC; // type:function size:0x2C __ct__11BandCamShotFv = .text:0x80389B28; // type:function size:0x148 -fn_80389C70 = .text:0x80389C70; // type:function size:0x80 -fn_80389CF0 = .text:0x80389CF0; // type:function size:0x6C -fn_80389D5C = .text:0x80389D5C; // type:function size:0x40 -fn_80389D9C = .text:0x80389D9C; // type:function size:0x44 -fn_80389DE0 = .text:0x80389DE0; // type:function size:0x54 +__dt__32ObjPtr<11BandCamShot,9ObjectDir>Fv = .text:0x80389C70; // type:function size:0x80 +__dt__36ObjPtrList<11BandCamShot,9ObjectDir>Fv = .text:0x80389CF0; // type:function size:0x6C +clear__36ObjPtrList<11BandCamShot,9ObjectDir>Fv = .text:0x80389D5C; // type:function size:0x40 +pop_back__36ObjPtrList<11BandCamShot,9ObjectDir>Fv = .text:0x80389D9C; // type:function size:0x44 +erase__36ObjPtrList<11BandCamShot,9ObjectDir>FQ236ObjPtrList<11BandCamShot,9ObjectDir>8iterator = .text:0x80389DE0; // type:function size:0x54 unlink__33ObjPtrList<9Character,9ObjectDir>FPQ233ObjPtrList<9Character,9ObjectDir>4Node = .text:0x80389E34; // type:function size:0xF0 -fn_80389F24 = .text:0x80389F24; // type:function size:0x58 -fn_80389F7C = .text:0x80389F7C; // type:function size:0x58 -fn_80389FD4 = .text:0x80389FD4; // type:function size:0x80 -fn_8038A054 = .text:0x8038A054; // type:function size:0x80 -fn_8038A0D4 = .text:0x8038A0D4; // type:function size:0x58 -fn_8038A12C = .text:0x8038A12C; // type:function size:0x54 -fn_8038A180 = .text:0x8038A180; // type:function size:0x5C -fn_8038A1DC = .text:0x8038A1DC; // type:function size:0x6C -fn_8038A248 = .text:0x8038A248; // type:function size:0x28 -fn_8038A270 = .text:0x8038A270; // type:function size:0x8 -fn_8038A278 = .text:0x8038A278; // type:function size:0x5C -fn_8038A2D4 = .text:0x8038A2D4; // type:function size:0x8 -fn_8038A2DC = .text:0x8038A2DC; // type:function size:0x3C -fn_8038A318 = .text:0x8038A318; // type:function size:0x2C -fn_8038A344 = .text:0x8038A344; // type:function size:0x8 -fn_8038A34C = .text:0x8038A34C; // type:function size:0x68 -fn_8038A3B4 = .text:0x8038A3B4; // type:function size:0x68 -fn_8038A41C = .text:0x8038A41C; // type:function size:0x50 -fn_8038A46C = .text:0x8038A46C; // type:function size:0x30 -fn_8038A49C = .text:0x8038A49C; // type:function size:0x30 -fn_8038A4CC = .text:0x8038A4CC; // type:function size:0x40 -fn_8038A50C = .text:0x8038A50C; // type:function size:0x19C +__dt__36ObjVectorFv = .text:0x80389F24; // type:function size:0x58 +__dt__Q211stlpmtx_std87vector>Fv = .text:0x80389F7C; // type:function size:0x58 +__dt__Q211stlpmtx_std93_Vector_impl>Fv = .text:0x80389FD4; // type:function size:0x80 +__dt__Q211stlpmtx_std93_Vector_base>Fv = .text:0x8038A054; // type:function size:0x80 +__dt__Q211stlpmtx_std119_STLP_alloc_proxy>Fv = .text:0x8038A0D4; // type:function size:0x58 +_Destroy_Range>__11stlpmtx_stdFQ211stlpmtx_std41reverse_iteratorQ211stlpmtx_std41reverse_iterator_v = .text:0x8038A12C; // type:function size:0x54 +__destroy_range,Q211BandCamShot6Target>__11stlpmtx_stdFQ211stlpmtx_std41reverse_iteratorQ211stlpmtx_std41reverse_iteratorPQ211BandCamShot6Target_v = .text:0x8038A180; // type:function size:0x5C +__destroy_range_aux,Q211BandCamShot6Target>__11stlpmtx_stdFQ211stlpmtx_std41reverse_iteratorQ211stlpmtx_std41reverse_iteratorPQ211BandCamShot6TargetRCQ211stlpmtx_std12__false_type_v = .text:0x8038A1DC; // type:function size:0x6C +__ne__11stlpmtx_stdFRCQ211stlpmtx_std41reverse_iteratorRCQ211stlpmtx_std41reverse_iterator_b = .text:0x8038A248; // type:function size:0x28 +__destroy_aux__11stlpmtx_stdFPQ211BandCamShot6TargetRCQ211stlpmtx_std12__false_type_v = .text:0x8038A270; // type:function size:0x8 +__dt__Q211BandCamShot6TargetFv = .text:0x8038A278; // type:function size:0x5C +rend__Q211stlpmtx_std93_Vector_impl>Fv = .text:0x8038A2D4; // type:function size:0x8 +rbegin__Q211stlpmtx_std93_Vector_impl>Fv = .text:0x8038A2DC; // type:function size:0x3C +end__36ObjPtrList<11BandCamShot,9ObjectDir>CFv = .text:0x8038A318; // type:function size:0x2C +SetNear__7CamShotFf = .text:0x8038A344; // type:function size:0x8 +__ct__32ObjPtr<11BandCamShot,9ObjectDir>FPQ23Hmx6ObjectP11BandCamShot = .text:0x8038A34C; // type:function size:0x68 +__ct__36ObjPtrList<11BandCamShot,9ObjectDir>FPQ23Hmx6Object11ObjListMode = .text:0x8038A3B4; // type:function size:0x68 +__ct__36ObjVectorFPQ23Hmx6Object = .text:0x8038A41C; // type:function size:0x50 +__ct__Q211stlpmtx_std87vector>FRCQ211stlpmtx_std36StlNodeAlloc = .text:0x8038A46C; // type:function size:0x30 +__ct__Q211stlpmtx_std93_Vector_impl>FRCQ211stlpmtx_std36StlNodeAlloc = .text:0x8038A49C; // type:function size:0x30 +__ct__Q211stlpmtx_std93_Vector_base>FRCQ211stlpmtx_std36StlNodeAlloc = .text:0x8038A4CC; // type:function size:0x40 +FindTarget__11BandCamShotF6Symbolb = .text:0x8038A50C; // type:function size:0x19C Obj<16RndTransformable>__8DataNodeCFPC9DataArray_P16RndTransformable = .text:0x8038A6A8; // type:function size:0x3C -fn_8038A6E4 = .text:0x8038A6E4; // type:function size:0x3E0 +__rs__FR9BinStreamRQ211BandCamShot6Target = .text:0x8038A6E4; // type:function size:0x3E0 __rs<10RndEnviron>__FR9BinStreamR31ObjPtr<10RndEnviron,9ObjectDir>_R9BinStream = .text:0x8038AAC4; // type:function size:0x40 Load__31ObjPtr<10RndEnviron,9ObjectDir>FR9BinStreambP9ObjectDir = .text:0x8038AB04; // type:function size:0x104 -fn_8038AC08 = .text:0x8038AC08; // type:function size:0x4 -fn_8038AC0C = .text:0x8038AC0C; // type:function size:0x48 -fn_8038AC54 = .text:0x8038AC54; // type:function size:0x88 -fn_8038ACDC = .text:0x8038ACDC; // type:function size:0x48 +Save__11BandCamShotFR9BinStream = .text:0x8038AC08; // type:function size:0x4 +__rs__FR9BinStreamR10OldTrigger = .text:0x8038AC0C; // type:function size:0x48 +MakeEventAnim__FP11BandCamShot = .text:0x8038AC54; // type:function size:0x88 +New<9EventAnim>__Q23Hmx6ObjectFv_P9EventAnim = .text:0x8038ACDC; // type:function size:0x48 StaticClassName__9EventAnimFv = .text:0x8038AD24; // type:function size:0x4C -fn_8038AD70 = .text:0x8038AD70; // type:function size:0x4C4 -fn_8038B234 = .text:0x8038B234; // type:function size:0x74 -fn_8038B2A8 = .text:0x8038B2A8; // type:function size:0x5C -fn_8038B304 = .text:0x8038B304; // type:function size:0x4 -fn_8038B308 = .text:0x8038B308; // type:function size:0x90 +Load__11BandCamShotFR9BinStream = .text:0x8038AD70; // type:function size:0x4C4 +__rs__FR9BinStreamR36ObjVector_R9BinStream = .text:0x8038B234; // type:function size:0x74 +resize__36ObjVectorFUl = .text:0x8038B2A8; // type:function size:0x5C +resize__Q211stlpmtx_std87vector>FUlRCQ211BandCamShot6Target = .text:0x8038B304; // type:function size:0x4 +resize__Q211stlpmtx_std93_Vector_impl>FUlRCQ211BandCamShot6Target = .text:0x8038B308; // type:function size:0x90 fn_8038B398 = .text:0x8038B398; // type:function size:0x4 fn_8038B39C = .text:0x8038B39C; // type:function size:0x40 fn_8038B3DC = .text:0x8038B3DC; // type:function size:0x8C @@ -28752,11 +28752,11 @@ fn_8038B4F4 = .text:0x8038B4F4; // type:function size:0x28 fn_8038B51C = .text:0x8038B51C; // type:function size:0x68 fn_8038B584 = .text:0x8038B584; // type:function size:0x78 __as__31ObjPtr<10RndEnviron,9ObjectDir>FRC31ObjPtr<10RndEnviron,9ObjectDir> = .text:0x8038B5FC; // type:function size:0x8 -fn_8038B604 = .text:0x8038B604; // type:function size:0xA0 +__ct__Q211BandCamShot6TargetFPQ23Hmx6Object = .text:0x8038B604; // type:function size:0xA0 __ct__31ObjPtr<10RndEnviron,9ObjectDir>FPQ23Hmx6ObjectP10RndEnviron = .text:0x8038B6A4; // type:function size:0x68 -fn_8038B70C = .text:0x8038B70C; // type:function size:0x40 -fn_8038B74C = .text:0x8038B74C; // type:function size:0x104 -fn_8038B850 = .text:0x8038B850; // type:function size:0x80 +__rs<11BandCamShot>__FR9BinStreamR32ObjPtr<11BandCamShot,9ObjectDir>_R9BinStream = .text:0x8038B70C; // type:function size:0x40 +Load__32ObjPtr<11BandCamShot,9ObjectDir>FR9BinStreambP9ObjectDir = .text:0x8038B74C; // type:function size:0x104 +__rs<10OldTrigger,Us>__FR9BinStreamRQ211stlpmtx_std67vector<10OldTrigger,Us,Q211stlpmtx_std26StlNodeAlloc<10OldTrigger>>_R9BinStream = .text:0x8038B850; // type:function size:0x80 fn_8038B8D0 = .text:0x8038B8D0; // type:function size:0x4 fn_8038B8D4 = .text:0x8038B8D4; // type:function size:0x90 fn_8038B964 = .text:0x8038B964; // type:function size:0x4 @@ -28767,15 +28767,15 @@ fn_8038BA3C = .text:0x8038BA3C; // type:function size:0x2C fn_8038BA68 = .text:0x8038BA68; // type:function size:0x58 fn_8038BAC0 = .text:0x8038BAC0; // type:function size:0x28 fn_8038BAE8 = .text:0x8038BAE8; // type:function size:0x68 -fn_8038BB50 = .text:0x8038BB50; // type:function size:0x34 +__ct__10OldTriggerFv = .text:0x8038BB50; // type:function size:0x34 __rs<12EventTrigger>__FR9BinStreamR33ObjPtr<12EventTrigger,9ObjectDir>_R9BinStream = .text:0x8038BB84; // type:function size:0x40 Load__33ObjPtr<12EventTrigger,9ObjectDir>FR9BinStreambP9ObjectDir = .text:0x8038BBC4; // type:function size:0x104 fn_8038BCC8 = .text:0x8038BCC8; // type:function size:0x3C fn_8038BD04 = .text:0x8038BD04; // type:function size:0x11C __rs<13RndAnimatable>__FR9BinStreamR38ObjPtrList<13RndAnimatable,9ObjectDir>_R9BinStream = .text:0x8038BE20; // type:function size:0x3C -fn_8038BE5C = .text:0x8038BE5C; // type:function size:0x11C +Load__38ObjPtrList<13RndAnimatable,9ObjectDir>FR9BinStreamb = .text:0x8038BE5C; // type:function size:0x11C clear__38ObjPtrList<13RndAnimatable,9ObjectDir>Fv = .text:0x8038BF78; // type:function size:0x40 -fn_8038BFB8 = .text:0x8038BFB8; // type:function size:0x44 +pop_back__38ObjPtrList<13RndAnimatable,9ObjectDir>Fv = .text:0x8038BFB8; // type:function size:0x44 erase__38ObjPtrList<13RndAnimatable,9ObjectDir>FQ238ObjPtrList<13RndAnimatable,9ObjectDir>8iterator = .text:0x8038BFFC; // type:function size:0x54 push_back__38ObjPtrList<13RndAnimatable,9ObjectDir>FP13RndAnimatable = .text:0x8038C050; // type:function size:0x4C insert__38ObjPtrList<13RndAnimatable,9ObjectDir>FQ238ObjPtrList<13RndAnimatable,9ObjectDir>8iteratorP13RndAnimatable = .text:0x8038C09C; // type:function size:0x78 @@ -28825,86 +28825,86 @@ fn_8038CD74 = .text:0x8038CD74; // type:function size:0x2C fn_8038CDA0 = .text:0x8038CDA0; // type:function size:0x30 fn_8038CDD0 = .text:0x8038CDD0; // type:function size:0x30 fn_8038CE00 = .text:0x8038CE00; // type:function size:0x40 -fn_8038CE40 = .text:0x8038CE40; // type:function size:0x4C -fn_8038CE8C = .text:0x8038CE8C; // type:function size:0x78 -fn_8038CF04 = .text:0x8038CF04; // type:function size:0x9C -fn_8038CFA0 = .text:0x8038CFA0; // type:function size:0xB8 +push_back__36ObjPtrList<11BandCamShot,9ObjectDir>FP11BandCamShot = .text:0x8038CE40; // type:function size:0x4C +insert__36ObjPtrList<11BandCamShot,9ObjectDir>FQ236ObjPtrList<11BandCamShot,9ObjectDir>8iteratorP11BandCamShot = .text:0x8038CE8C; // type:function size:0x78 +Copy__11BandCamShotFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x8038CF04; // type:function size:0x9C +__as__36ObjPtrList<11BandCamShot,9ObjectDir>FRC36ObjPtrList<11BandCamShot,9ObjectDir> = .text:0x8038CFA0; // type:function size:0xB8 Set__40ObjPtrList<15RndPartLauncher,9ObjectDir>FQ240ObjPtrList<15RndPartLauncher,9ObjectDir>8iteratorP15RndPartLauncher = .text:0x8038D058; // type:function size:0x70 -fn_8038D0C8 = .text:0x8038D0C8; // type:function size:0x5C -fn_8038D124 = .text:0x8038D124; // type:function size:0x30 +__as__36ObjVectorFRC36ObjVector = .text:0x8038D0C8; // type:function size:0x5C +__as__Q211stlpmtx_std87vector>FRCQ211stlpmtx_std87vector> = .text:0x8038D124; // type:function size:0x30 fn_8038D154 = .text:0x8038D154; // type:function size:0x8 -fn_8038D15C = .text:0x8038D15C; // type:function size:0x18C +TeleportTarget__11BandCamShotFP16RndTransformableRC16TransformNoScaleb = .text:0x8038D15C; // type:function size:0x18C fn_8038D2E8 = .text:0x8038D2E8; // type:function size:0x3C -fn_8038D324 = .text:0x8038D324; // type:function size:0x4D8 +StartAnim__11BandCamShotFv = .text:0x8038D324; // type:function size:0x4D8 fn_8038D7FC = .text:0x8038D7FC; // type:function size:0x8 SetEnv__6RndDirFP10RndEnviron = .text:0x8038D804; // type:function size:0x8 fn_8038D80C = .text:0x8038D80C; // type:function size:0x8 fn_8038D814 = .text:0x8038D814; // type:function size:0x8 -fn_8038D81C = .text:0x8038D81C; // type:function size:0xC0 -fn_8038D8DC = .text:0x8038D8DC; // type:function size:0x30 -fn_8038D90C = .text:0x8038D90C; // type:function size:0x5C +IterateNextShot__11BandCamShotFv = .text:0x8038D81C; // type:function size:0xC0 +begin__36ObjPtrList<11BandCamShot,9ObjectDir>CFv = .text:0x8038D8DC; // type:function size:0x30 +ResetNextShot__11BandCamShotFv = .text:0x8038D90C; // type:function size:0x5C fn_8038D968 = .text:0x8038D968; // type:function size:0x64 -fn_8038D9CC = .text:0x8038D9CC; // type:function size:0x8 -fn_8038D9D4 = .text:0x8038D9D4; // type:function size:0x1FC +Duration__7CamShotCFv = .text:0x8038D9CC; // type:function size:0x8 +SetPreFrame__11BandCamShotFff = .text:0x8038D9D4; // type:function size:0x1FC fn_8038DBD0 = .text:0x8038DBD0; // type:function size:0x14 -fn_8038DBE4 = .text:0x8038DBE4; // type:function size:0x1A8 +SetFrame__11BandCamShotFff = .text:0x8038DBE4; // type:function size:0x1A8 begin__38ObjPtrList<13RndAnimatable,9ObjectDir>CFv = .text:0x8038DD8C; // type:function size:0x30 -fn_8038DDBC = .text:0x8038DDBC; // type:function size:0x48 -fn_8038DE04 = .text:0x8038DE04; // type:function size:0x74 -fn_8038DE78 = .text:0x8038DE78; // type:function size:0x1A8 -fn_8038E020 = .text:0x8038E020; // type:function size:0x58 -fn_8038E078 = .text:0x8038E078; // type:function size:0xF8 -fn_8038E170 = .text:0x8038E170; // type:function size:0x114 -fn_8038E284 = .text:0x8038E284; // type:function size:0x14 -fn_8038E298 = .text:0x8038E298; // type:function size:0xC8 -fn_8038E360 = .text:0x8038E360; // type:function size:0xAC -fn_8038E40C = .text:0x8038E40C; // type:function size:0x24 +SetFrameEx__11BandCamShotFff = .text:0x8038DDBC; // type:function size:0x48 +AnimateShot__11BandCamShotFff = .text:0x8038DE04; // type:function size:0x74 +EndAnim__11BandCamShotFv = .text:0x8038DE78; // type:function size:0x1A8 +Store__11BandCamShotFv = .text:0x8038E020; // type:function size:0x58 +View__11BandCamShotFv = .text:0x8038E078; // type:function size:0xF8 +ViewFreeze__11BandCamShotFv = .text:0x8038E170; // type:function size:0x114 +FreezeChar__11BandCamShotFP9Characterb = .text:0x8038E284; // type:function size:0x14 +Freeze__11BandCamShotFv = .text:0x8038E298; // type:function size:0xC8 +AddTarget__11BandCamShotFP9DataArray = .text:0x8038E360; // type:function size:0xAC +back__Q211stlpmtx_std87vector>Fv = .text:0x8038E40C; // type:function size:0x24 fn_8038E430 = .text:0x8038E430; // type:function size:0x48 fn_8038E478 = .text:0x8038E478; // type:function size:0x3C -fn_8038E4B4 = .text:0x8038E4B4; // type:function size:0xCC -fn_8038E580 = .text:0x8038E580; // type:function size:0x3C -fn_8038E5BC = .text:0x8038E5BC; // type:function size:0x3C -fn_8038E5F8 = .text:0x8038E5F8; // type:function size:0x68 -fn_8038E660 = .text:0x8038E660; // type:function size:0xCC -fn_8038E72C = .text:0x8038E72C; // type:function size:0x58 -fn_8038E784 = .text:0x8038E784; // type:function size:0x154 -fn_8038E8D8 = .text:0x8038E8D8; // type:function size:0x10C -fn_8038E9E4 = .text:0x8038E9E4; // type:function size:0x4 -fn_8038E9E8 = .text:0x8038E9E8; // type:function size:0x48 -fn_8038EA30 = .text:0x8038EA30; // type:function size:0x78 +GetTotalDuration__11BandCamShotFv = .text:0x8038E4B4; // type:function size:0xCC +end__Q211stlpmtx_std66list>Fv = .text:0x8038E580; // type:function size:0x3C +begin__Q211stlpmtx_std66list>Fv = .text:0x8038E5BC; // type:function size:0x3C +GetNumShots__11BandCamShotFv = .text:0x8038E5F8; // type:function size:0x68 +GetTotalDurationSeconds__11BandCamShotFv = .text:0x8038E660; // type:function size:0xCC +CheckNextShots__11BandCamShotFv = .text:0x8038E72C; // type:function size:0x58 +InitialShot__11BandCamShotFv = .text:0x8038E784; // type:function size:0x154 +ListNextShots__11BandCamShotFRQ211stlpmtx_std66list> = .text:0x8038E8D8; // type:function size:0x10C +EndFrame__11BandCamShotFv = .text:0x8038E9E4; // type:function size:0x4 +CheckShotStarted__11BandCamShotFv = .text:0x8038E9E8; // type:function size:0x48 +CheckShotOver__11BandCamShotFf = .text:0x8038EA30; // type:function size:0x78 fn_8038EAA8 = .text:0x8038EAA8; // type:function size:0x8 -fn_8038EAB0 = .text:0x8038EAB0; // type:function size:0x98 -fn_8038EB48 = .text:0x8038EB48; // type:function size:0x7C -fn_8038EBC4 = .text:0x8038EBC4; // type:function size:0x56C +Store__Q211BandCamShot6TargetFP11BandCamShot = .text:0x8038EAB0; // type:function size:0x98 +UpdateTarget__Q211BandCamShot6TargetF6SymbolP11BandCamShot = .text:0x8038EB48; // type:function size:0x7C +PropSync__FRQ211BandCamShot6TargetR8DataNodeP9DataArrayi6PropOp = .text:0x8038EBC4; // type:function size:0x56C PropSync<10RndEnviron>__FR31ObjPtr<10RndEnviron,9ObjectDir>R8DataNodeP9DataArrayi6PropOp_b = .text:0x8038F130; // type:function size:0xC0 -fn_8038F1F0 = .text:0x8038F1F0; // type:function size:0x258 -fn_8038F448 = .text:0x8038F448; // type:function size:0x170 +SyncProperty__11BandCamShotFR8DataNodeP9DataArrayi6PropOp = .text:0x8038F1F0; // type:function size:0x258 +PropSync__FR36ObjVectorR8DataNodeP9DataArrayi6PropOp_b = .text:0x8038F448; // type:function size:0x170 fn_8038F5B8 = .text:0x8038F5B8; // type:function size:0x2C fn_8038F5E4 = .text:0x8038F5E4; // type:function size:0x84 fn_8038F668 = .text:0x8038F668; // type:function size:0x2C -fn_8038F694 = .text:0x8038F694; // type:function size:0x1E8 -fn_8038F87C = .text:0x8038F87C; // type:function size:0xBC -fn_8038F938 = .text:0x8038F938; // type:function size:0x44 +PropSync<11BandCamShot>__FR36ObjPtrList<11BandCamShot,9ObjectDir>R8DataNodeP9DataArrayi6PropOp_b = .text:0x8038F694; // type:function size:0x1E8 +PropSync<11BandCamShot>__FRP11BandCamShotR8DataNodeP9DataArrayi6PropOp_b = .text:0x8038F87C; // type:function size:0xBC +__pp__Q236ObjPtrList<11BandCamShot,9ObjectDir>8iteratorFi = .text:0x8038F938; // type:function size:0x44 Handle__11BandCamShotFP9DataArrayb = .text:0x8038F97C; // type:function size:0x468 -fn_8038FDE4 = .text:0x8038FDE4; // type:function size:0xCC -fn_8038FEB0 = .text:0x8038FEB0; // type:function size:0x2AC -fn_8039015C = .text:0x8039015C; // type:function size:0x8 -fn_80390164 = .text:0x80390164; // type:function size:0x8 -fn_8039016C = .text:0x8039016C; // type:function size:0x110 -fn_8039027C = .text:0x8039027C; // type:function size:0x2A4 +OnListTargets__11BandCamShotFPC9DataArray = .text:0x8038FDE4; // type:function size:0xCC +OnListAnimGroups__11BandCamShotFPC9DataArray = .text:0x8038FEB0; // type:function size:0x2AC +ClipDir__10CharDriverCFv = .text:0x8039015C; // type:function size:0x8 +GetDriver__9CharacterCFv = .text:0x80390164; // type:function size:0x8 +OnTestDelta__11BandCamShotFP9DataArray = .text:0x8039016C; // type:function size:0x110 +OnAllowableNextShots__11BandCamShotFP9DataArray = .text:0x8039027C; // type:function size:0x2A4 fn_80390520 = .text:0x80390520; // type:function size:0x6C fn_8039058C = .text:0x8039058C; // type:function size:0x8C fn_80390618 = .text:0x80390618; // type:function size:0x50 -fn_80390668 = .text:0x80390668; // type:function size:0x50 -fn_803906B8 = .text:0x803906B8; // type:function size:0xD0 +__pp__24ObjDirItr<11BandCamShot>Fv = .text:0x80390668; // type:function size:0x50 +Advance__24ObjDirItr<11BandCamShot>Fv = .text:0x803906B8; // type:function size:0xD0 fn_80390788 = .text:0x80390788; // type:function size:0x6C -fn_803907F4 = .text:0x803907F4; // type:function size:0x78 -fn_8039086C = .text:0x8039086C; // type:function size:0x120 -fn_8039098C = .text:0x8039098C; // type:function size:0xA4 +__ct__24ObjDirItr<11BandCamShot>FP9ObjectDirb = .text:0x803907F4; // type:function size:0x78 +OnListAllNextShots__11BandCamShotFPC9DataArray = .text:0x8039086C; // type:function size:0x120 +__dt__11BandCamShotFv = .text:0x8039098C; // type:function size:0xA4 fn_80390A30 = .text:0x80390A30; // type:function size:0x68 fn_80390A98 = .text:0x80390A98; // type:function size:0x2C fn_80390AC4 = .text:0x80390AC4; // type:function size:0x58 -fn_80390B1C = .text:0x80390B1C; // type:function size:0x160 +__as__Q211stlpmtx_std93_Vector_impl>FRCQ211stlpmtx_std93_Vector_impl> = .text:0x80390B1C; // type:function size:0x160 fn_80390C7C = .text:0x80390C7C; // type:function size:0x5C fn_80390CD8 = .text:0x80390CD8; // type:function size:0x10 fn_80390CE8 = .text:0x80390CE8; // type:function size:0x7C @@ -28953,9 +28953,9 @@ fn_80391B00 = .text:0x80391B00; // type:function size:0x6C fn_80391B6C = .text:0x80391B6C; // type:function size:0x6C fn_80391BD8 = .text:0x80391BD8; // type:function size:0x6C fn_80391C44 = .text:0x80391C44; // type:function size:0x10C -fn_80391D50 = .text:0x80391D50; // type:function size:0x8 -fn_80391D58 = .text:0x80391D58; // type:function size:0x134 -fn_80391E8C = .text:0x80391E8C; // type:function size:0x4 +CurrentShot__11BandCamShotFv = .text:0x80391D50; // type:function size:0x8 +SetType__11BandCamShotF6Symbol = .text:0x80391D58; // type:function size:0x134 +ClassName__11BandCamShotCFv = .text:0x80391E8C; // type:function size:0x4 fn_80391E90 = .text:0x80391E90; // type:function size:0x198 fn_80392028 = .text:0x80392028; // type:function size:0x5C fn_80392084 = .text:0x80392084; // type:function size:0x54 @@ -28978,23 +28978,23 @@ fn_8039273C = .text:0x8039273C; // type:function size:0x114 fn_80392850 = .text:0x80392850; // type:function size:0x60 fn_803928B0 = .text:0x803928B0; // type:function size:0x5C fn_8039290C = .text:0x8039290C; // type:function size:0x54 -fn_80392960 = .text:0x80392960; // type:function size:0x60 -fn_803929C0 = .text:0x803929C0; // type:function size:0x58 -fn_80392A18 = .text:0x80392A18; // type:function size:0x58 -fn_80392A70 = .text:0x80392A70; // type:function size:0x60 -fn_80392AD0 = .text:0x80392AD0; // type:function size:0x58 -fn_80392B28 = .text:0x80392B28; // type:function size:0x30 -fn_80392B58 = .text:0x80392B58; // type:function size:0x30 -fn_80392B88 = .text:0x80392B88; // type:function size:0x60 -fn_80392BE8 = .text:0x80392BE8; // type:function size:0x68 -fn_80392C50 = .text:0x80392C50; // type:function size:0x14 -fn_80392C64 = .text:0x80392C64; // type:function size:0x14 -fn_80392C78 = .text:0x80392C78; // type:function size:0x14 -fn_80392C8C = .text:0x80392C8C; // type:function size:0x14 -fn_80392CA0 = .text:0x80392CA0; // type:function size:0x14 -fn_80392CB4 = .text:0x80392CB4; // type:function size:0x14 -fn_80392CC8 = .text:0x80392CC8; // type:function size:0x14 -fn_80392CDC = .text:0x80392CDC; // type:function size:0x14 +__sinit_\BandCamShot_cpp = .text:0x80392960; // type:function size:0x60 +__dt__Q211stlpmtx_std94list>Fv = .text:0x803929C0; // type:function size:0x58 +__dt__Q211stlpmtx_std100_List_impl>Fv = .text:0x80392A18; // type:function size:0x58 +__dt__Q211stlpmtx_std100_List_base>Fv = .text:0x80392A70; // type:function size:0x60 +__dt__Q211stlpmtx_std198_STLP_alloc_proxy,Q211stlpmtx_std71StlNodeAlloc>>Fv = .text:0x80392AD0; // type:function size:0x58 +__ct__Q211stlpmtx_std94list>FRCQ211stlpmtx_std42StlNodeAlloc = .text:0x80392B28; // type:function size:0x30 +__ct__Q211stlpmtx_std100_List_impl>FRCQ211stlpmtx_std42StlNodeAlloc = .text:0x80392B58; // type:function size:0x30 +__ct__Q211stlpmtx_std100_List_base>FRCQ211stlpmtx_std42StlNodeAlloc = .text:0x80392B88; // type:function size:0x60 +clear__Q211stlpmtx_std100_List_base>Fv = .text:0x80392BE8; // type:function size:0x68 +@364@28@Load__11BandCamShotFR9BinStream = .text:0x80392C50; // type:function size:0x14 +@364@28@Copy__11BandCamShotFPCQ23Hmx6ObjectQ33Hmx6Object8CopyType = .text:0x80392C64; // type:function size:0x14 +@364@28@Save__11BandCamShotFR9BinStream = .text:0x80392C78; // type:function size:0x14 +@364@28@__dt__11BandCamShotFv = .text:0x80392C8C; // type:function size:0x14 +@364@28@SyncProperty__11BandCamShotFR8DataNodeP9DataArrayi6PropOp = .text:0x80392CA0; // type:function size:0x14 +@364@28@Handle__11BandCamShotFP9DataArrayb = .text:0x80392CB4; // type:function size:0x14 +@364@28@SetType__11BandCamShotF6Symbol = .text:0x80392CC8; // type:function size:0x14 +@364@28@ClassName__11BandCamShotCFv = .text:0x80392CDC; // type:function size:0x14 __ct__17BandConfigurationFv = .text:0x80392CF0; // type:function size:0xE8 fn_80392DD8 = .text:0x80392DD8; // type:function size:0x8 fn_80392DE0 = .text:0x80392DE0; // type:function size:0x8 @@ -29972,7 +29972,7 @@ Load__9BandLabelFR9BinStream = .text:0x803B083C; // type:function size:0x5C fn_803B0898 = .text:0x803B0898; // type:function size:0x3E0 SetType__9BandLabelF6Symbol = .text:0x803B0C78; // type:function size:0x138 ClassName__9BandLabelCFv = .text:0x803B0DB0; // type:function size:0x4 -fn_803B0DB4 = .text:0x803B0DB4; // type:function size:0xE0 +LoadOldBandTextComp__10BandButtonFR9BinStream = .text:0x803B0DB4; // type:function size:0xE0 fn_803B0E94 = .text:0x803B0E94; // type:function size:0x11C fn_803B0FB0 = .text:0x803B0FB0; // type:function size:0x74 fn_803B1024 = .text:0x803B1024; // type:function size:0x4C @@ -44352,7 +44352,7 @@ ClassName__8UIButtonCFv = .text:0x80552D04; // type:function size:0x4 @444@28@Handle__8UIButtonFP9DataArrayb = .text:0x80552E24; // type:function size:0x14 @444@28@SetType__8UIButtonF6Symbol = .text:0x80552E38; // type:function size:0x14 @444@28@ClassName__8UIButtonCFv = .text:0x80552E4C; // type:function size:0x14 -@176@Poll__7UILabelFv = .text:0x80552E60; // type:function size:0x8 +@176@__dt__8UIButtonFv = .text:0x80552E60; // type:function size:0x8 @176@Handle__8UIButtonFP9DataArrayb = .text:0x80552E68; // type:function size:0x8 @176@SetType__8UIButtonF6Symbol = .text:0x80552E70; // type:function size:0x8 @176@ClassName__8UIButtonCFv = .text:0x80552E78; // type:function size:0x8 @@ -44489,7 +44489,7 @@ Draw__7UILabelFv = .text:0x80556DA8; // type:function size:0x20 DrawShowing__7UILabelFv = .text:0x80556DC8; // type:function size:0x204 GetDrawWidth__7UILabelFv = .text:0x80556FCC; // type:function size:0x40 GetDrawHeight__7UILabelFv = .text:0x8055700C; // type:function size:0x40 -fn_8055704C = .text:0x8055704C; // type:function size:0x20C +UpdateAndDrawHighlightMesh__7UILabelFv = .text:0x8055704C; // type:function size:0x20C fn_80557258 = .text:0x80557258; // type:function size:0x34 GetEnv__8RndGroupCFv = .text:0x8055728C; // type:function size:0x8 SetUseHighlightMesh__7UILabelFb = .text:0x80557294; // type:function size:0x1C @@ -46030,10 +46030,10 @@ fn_80582DE0 = .text:0x80582DE0; // type:function size:0xB0 DoHide__7CamShotFv = .text:0x80582E90; // type:function size:0x34C UnHide__7CamShotFv = .text:0x805831DC; // type:function size:0xB8 fn_80583294 = .text:0x80583294; // type:function size:0xA4 -fn_80583338 = .text:0x80583338; // type:function size:0x2D8 +SetFrame__7CamShotFff = .text:0x80583338; // type:function size:0x2D8 fn_80583610 = .text:0x80583610; // type:function size:0x5C -fn_8058366C = .text:0x8058366C; // type:function size:0xC -fn_80583678 = .text:0x80583678; // type:function size:0x34 +CheckShotStarted__7CamShotFv = .text:0x8058366C; // type:function size:0xC +CheckShotOver__7CamShotFf = .text:0x80583678; // type:function size:0x34 fn_805836AC = .text:0x805836AC; // type:function size:0x378 fn_80583A24 = .text:0x80583A24; // type:function size:0x390 fn_80583DB4 = .text:0x80583DB4; // type:function size:0x10 @@ -68558,11 +68558,11 @@ __vt__11BandCamShot = .data:0x80874F80; // type:object size:0xBC lbl_8087503C = .data:0x8087503C; // type:object size:0xC data:string lbl_80875048 = .data:0x80875048; // type:object size:0x28 __RTTI__11BandCamShot = .data:0x80875070; // type:object size:0x8 -lbl_80875078 = .data:0x80875078; // type:object size:0x18 +__vt__32ObjPtr<11BandCamShot,9ObjectDir> = .data:0x80875078; // type:object size:0x18 lbl_80875090 = .data:0x80875090; // type:object size:0x20 lbl_808750B0 = .data:0x808750B0; // type:object size:0x10 lbl_808750C0 = .data:0x808750C0; // type:object size:0x8 -lbl_808750C8 = .data:0x808750C8; // type:object size:0x18 +__vt__36ObjPtrList<11BandCamShot,9ObjectDir> = .data:0x808750C8; // type:object size:0x18 lbl_808750E0 = .data:0x808750E0; // type:object size:0x24 lbl_80875104 = .data:0x80875104; // type:object size:0xC lbl_80875110 = .data:0x80875110; // type:object size:0x8 @@ -75466,13 +75466,13 @@ lbl_808E45AC = .sbss:0x808E45AC; // type:object size:0x1 data:byte lbl_808E45B1 = .sbss:0x808E45B1; // type:object size:0x1 data:byte @GUARD@SetType__10UILabelDirF6Symbol@types = .sbss:0x808E45B2; // type:object size:0x1 data:byte @GUARD@StaticClassName__10UILabelDirFv@name = .sbss:0x808E45B3; // type:object size:0x1 data:byte -lbl_808E45B4 = .sbss:0x808E45B4; // type:object size:0x2 data:2byte -lbl_808E45B6 = .sbss:0x808E45B6; // type:object size:0x2 data:2byte +gRev__10BandButton = .sbss:0x808E45B4; // type:object size:0x2 data:2byte +gAltRev__10BandButton = .sbss:0x808E45B6; // type:object size:0x2 data:2byte lbl_808E45B8 = .sbss:0x808E45B8; // type:object size:0x1 data:byte lbl_808E45B9 = .sbss:0x808E45B9; // type:object size:0x1 data:byte lbl_808E45BA = .sbss:0x808E45BA; // type:object size:0x1 data:byte -lbl_808E45BC = .sbss:0x808E45BC; // type:object size:0x2 data:2byte -lbl_808E45BE = .sbss:0x808E45BE; // type:object size:0x2 data:2byte +gRev__11BandCamShot = .sbss:0x808E45BC; // type:object size:0x2 data:2byte +gAltRev__11BandCamShot = .sbss:0x808E45BE; // type:object size:0x2 data:2byte lbl_808E45C0 = .sbss:0x808E45C0; // type:object size:0x1 data:byte lbl_808E45C1 = .sbss:0x808E45C1; // type:object size:0x1 data:byte lbl_808E45C2 = .sbss:0x808E45C2; // type:object size:0x1 data:byte @@ -75907,7 +75907,7 @@ gAltRev__11UIComponent = .sbss:0x808E4A7C; // type:object size:0x2 data:2byte @GUARD@SendSelect__11UIComponentFP9LocalUser@select_msg = .sbss:0x808E4A7E; // type:object size:0x1 data:byte gResettingType = .sbss:0x808E4A7F; // type:object size:0x1 data:byte @GUARD@FinishSelecting__11UIComponentFv@select_msg = .sbss:0x808E4A80; // type:object size:0x8 data:byte -lbl_808E4A88 = .sbss:0x808E4A88; // type:object size:0x1 data:byte +sDebugHighlight__7UILabel = .sbss:0x808E4A88; // type:object size:0x1 data:byte sDeferUpdate__7UILabel = .sbss:0x808E4A89; // type:object size:0x1 data:byte gRev__7UILabel = .sbss:0x808E4A8A; // type:object size:0x2 data:2byte gAltRev__7UILabel = .sbss:0x808E4A8C; // type:object size:0x2 data:2byte @@ -79226,7 +79226,7 @@ MsgKickNote = .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 -MsgListTargets = .bss:0x8097D9D0; // type:object size:0x18 +list_targets_msg = .bss:0x8097D9D0; // type:object size:0x18 load_msg = .bss:0x8097D9E8; // type:object size:0x18 load_panels_msg = .bss:0x8097DA00; // type:object size:0x18 MsgLoop = .bss:0x8097DA18; // type:object size:0x18 @@ -79895,11 +79895,11 @@ SymSkipCancel = .bss:0x8097F2A0; // type:object size:0x4 SymSkipConfirm = .bss:0x8097F2A4; // type:object size:0x8 SymSkipPushDialog = .bss:0x8097F2AC; // type:object size:0x4 SymSkipSong = .bss:0x8097F2B0; // type:object size:0x8 -SymSkipToFocused = .bss:0x8097F2B8; // type:object size:0x4 +skip_to_focused = .bss:0x8097F2B8; // type:object size:0x4 SymSkipToNextShortcut = .bss:0x8097F2BC; // type:object size:0x4 SymSkipToPrevShortcut = .bss:0x8097F2C0; // type:object size:0x4 SymSkipToShortcut = .bss:0x8097F2C4; // type:object size:0x4 -SymSkipToUnfocused = .bss:0x8097F2C8; // type:object size:0x4 +skip_to_unfocused = .bss:0x8097F2C8; // type:object size:0x4 SymSkippedSong = .bss:0x8097F2CC; // type:object size:0x4 slaves = .bss:0x8097F2D0; // type:object size:0x4 SymSleep = .bss:0x8097F2D4; // type:object size:0x4 @@ -80185,7 +80185,7 @@ SymTertiaryColor = .bss:0x8097F8B0; // type:object size:0x1C SymTestAnimationTime = .bss:0x8097F8CC; // type:object size:0x8 SymTestClip = .bss:0x8097F8D4; // type:object size:0x8 SymTestColor = .bss:0x8097F8DC; // type:object size:0x8 -SymTestDelta = .bss:0x8097F8E4; // type:object size:0x4 +test_delta = .bss:0x8097F8E4; // type:object size:0x4 test_disable_elements = .bss:0x8097F8E8; // type:object size:0x4 SymTestDrawGroups = .bss:0x8097F8EC; // type:object size:0x4 test_event = .bss:0x8097F8F0; // type:object size:0x8 @@ -80326,8 +80326,8 @@ SymTotalAwesomes = .bss:0x8097FC78; // type:object size:0x4 SymTotalBreHits = .bss:0x8097FC7C; // type:object size:0x4 SymTotalDoubleAwesomes = .bss:0x8097FC80; // type:object size:0x4 SymTotalDrumrolls = .bss:0x8097FC84; // type:object size:0x4 -SymTotalDuration = .bss:0x8097FC88; // type:object size:0x4 -SymTotalDurationSeconds = .bss:0x8097FC8C; // type:object size:0x4 +total_duration = .bss:0x8097FC88; // type:object size:0x4 +total_duration_seconds = .bss:0x8097FC8C; // type:object size:0x4 SymTotalGems = .bss:0x8097FC90; // type:object size:0x4 SymTotalHopos = .bss:0x8097FC94; // type:object size:0x4 SymTotalMultiplierDuration = .bss:0x8097FC98; // type:object size:0x4 data:4byte @@ -80630,9 +80630,9 @@ SymVerts = .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 -SymView = .bss:0x809802CC; // type:object size:0x4 +view = .bss:0x809802CC; // type:object size:0x4 view_direction = .bss:0x809802D0; // type:object size:0x4 -SymViewFreeze = .bss:0x809802D4; // type:object size:0x4 +view_freeze = .bss:0x809802D4; // type:object size:0x4 view_keyframe = .bss:0x809802D8; // type:object size:0x4 SymViewSetlists = .bss:0x809802DC; // type:object size:0x4 data:4byte SymViewSetlistsByLine = .bss:0x809802E0; // type:object size:0x4 data:4byte @@ -80763,7 +80763,7 @@ z_offset = .bss:0x80980580; // type:object size:0x4 SymZRange = .bss:0x80980584; // type:object size:0x8 zero_length = .bss:0x8098058C; // type:object size:0x4 zero_sphere = .bss:0x80980590; // type:object size:0x4 -SymZeroTime = .bss:0x80980594; // type:object size:0xC +zero_time = .bss:0x80980594; // type:object size:0xC SymZoomFov = .bss:0x809805A0; // type:object size:0xC SymZw = .bss:0x809805AC; // type:object size:0x8 SymSinks = .bss:0x809805B4; // type:object size:0x4 @@ -81055,7 +81055,7 @@ add_scale_key = .bss:0x80980B3C; // type:object size:0x4 SymAddSection = .bss:0x80980B40; // type:object size:0x4 SymAddSink = .bss:0x80980B44; // type:object size:0x8 SymAddSymbolKey = .bss:0x80980B4C; // type:object size:0x4 -SymAddTarget = .bss:0x80980B50; // type:object size:0x4 +add_target = .bss:0x80980B50; // type:object size:0x4 add_test_widget = .bss:0x80980B54; // type:object size:0x4 SymAddTex = .bss:0x80980B58; // type:object size:0x4 add_text_instance = .bss:0x80980B5C; // type:object size:0x4 @@ -81095,7 +81095,7 @@ SymAllowSoloScores = .bss:0x80980C04; // type:object size:0x4 SymAllowUgc = .bss:0x80980C08; // type:object size:0x4 data:4byte allowable_lights_approx = .bss:0x80980C0C; // type:object size:0x4 allowable_lights_real = .bss:0x80980C10; // type:object size:0x4 -SymAllowableNextShots = .bss:0x80980C14; // type:object size:0x4 +allowable_next_shots = .bss:0x80980C14; // type:object size:0x4 allowed_drawable = .bss:0x80980C18; // type:object size:0x4 allowed_next_pass = .bss:0x80980C1C; // type:object size:0x4 allowed_normal_map = .bss:0x80980C20; // type:object size:0x4 @@ -81153,7 +81153,7 @@ animate_range_from_preset = .bss:0x80980D10; // type:object size:0x4 SymAnimateToValue = .bss:0x80980D14; // type:object size:0x8 SymAnimationGenre = .bss:0x80980D1C; // type:object size:0x4 anims = .bss:0x80980D20; // type:object size:0x4 -SymAnimsDuringNextshots = .bss:0x80980D24; // type:object size:0x8 +anims_during_nextshots = .bss:0x80980D24; // type:object size:0x8 SymAnnounce = .bss:0x80980D2C; // type:object size:0x4 data:4byte SymAny = .bss:0x80980D30; // type:object size:0x4 data:4byte SymAnyChecked = .bss:0x80980D34; // type:object size:0x4 @@ -82079,7 +82079,7 @@ SymEnterCloset = .bss:0x80981F98; // type:object size:0x4 SymEnterCoda = .bss:0x80981F9C; // type:object size:0x4 SymEnterVenue = .bss:0x80981FA0; // type:object size:0x4 SymEnterVignette = .bss:0x80981FA4; // type:object size:0x14 -SymEnvOverride = .bss:0x80981FB8; // type:object size:0x8 +env_override = .bss:0x80981FB8; // type:object size:0x8 environ_3d = .bss:0x80981FC0; // type:object size:0xC environment = .bss:0x80981FCC; // type:object size:0x4 environment_entries = .bss:0x80981FD0; // type:object size:0x4 @@ -82330,7 +82330,7 @@ frames = .bss:0x809824D4; // type:object size:0x4 SymFramesBuffered = .bss:0x809824D8; // type:object size:0x4 SymFramesPerSec = .bss:0x809824DC; // type:object size:0x4 SymFre = .bss:0x809824E0; // type:object size:0x4 data:4byte -SymFreeze = .bss:0x809824E4; // type:object size:0x8 +freeze = .bss:0x809824E4; // type:object size:0x8 freeze_pose = .bss:0x809824EC; // type:object size:0x4 SymFrequency = .bss:0x809824F0; // type:object size:0x4 data:4byte SymFretHeight1 = .bss:0x809824F4; // type:object size:0x4 @@ -83196,7 +83196,7 @@ SymInitNintendoConnection = .bss:0x809834F8; // type:object size:0x8 SymInitPanels = .bss:0x80983500; // type:object size:0x4 SymInitPreDownload = .bss:0x80983504; // type:object size:0x4 SymInitSections = .bss:0x80983508; // type:object size:0x4 -SymInitialShot = .bss:0x8098350C; // type:object size:0x4 +initial_shot = .bss:0x8098350C; // type:object size:0x4 SymInitialize = .bss:0x80983510; // type:object size:0x4 SymInitializeContent = .bss:0x80983514; // type:object size:0x4 SymInitializeNextGig = .bss:0x80983518; // type:object size:0x4 @@ -83591,15 +83591,15 @@ linearize = .bss:0x80983C54; // type:object size:0x4 SymLips = .bss:0x80983C58; // type:object size:0x4 SymLipsync = .bss:0x80983C5C; // type:object size:0x4 list = .bss:0x80983C60; // type:object size:0x4 -SymListAllNextShots = .bss:0x80983C64; // type:object size:0x4 -SymListAnimGroups = .bss:0x80983C68; // type:object size:0x4 +list_all_next_shots = .bss:0x80983C64; // type:object size:0x4 +list_anim_groups = .bss:0x80983C68; // type:object size:0x4 SymListAttached = .bss:0x80983C6C; // type:object size:0xC SymListClips = .bss:0x80983C78; // type:object size:0x4 SymListDircuts = .bss:0x80983C7C; // type:object size:0x4 SymListDrumVenues = .bss:0x80983C80; // type:object size:0x8 SymListGuid = .bss:0x80983C88; // type:object size:0x10 data:4byte SymListOutfits = .bss:0x80983C98; // type:object size:0x8 -SymListTargets = .bss:0x80983CA0; // type:object size:0x4 +list_targets = .bss:0x80983CA0; // type:object size:0x4 SymListVenueAnimGroups = .bss:0x80983CA4; // type:object size:0x8 SymListXOffset = .bss:0x80983CAC; // type:object size:0x4 SymListYOffset = .bss:0x80983CB0; // type:object size:0x4 @@ -83724,7 +83724,7 @@ max_secs_between_sequences = .bss:0x80983EF8; // type:object size:0x4 SymMaxSimul = .bss:0x80983EFC; // type:object size:0x4 max_slack = .bss:0x80983F00; // type:object size:0x4 SymMaxSongCount = .bss:0x80983F04; // type:object size:0xC data:4byte -SymMaxTime = .bss:0x80983F10; // type:object size:0x4 +max_time = .bss:0x80983F10; // type:object size:0x4 SymMaxValue = .bss:0x80983F14; // type:object size:0x4 data:4byte max_view_angle = .bss:0x80983F18; // type:object size:0x8 SymMaxWeightYaw = .bss:0x80983F20; // type:object size:0x8 @@ -83853,7 +83853,7 @@ SymMinStars = .bss:0x80984158; // type:object size:0x4 data:4byte min_target_dist = .bss:0x8098415C; // type:object size:0x4 min_target_dist_override = .bss:0x80984160; // type:object size:0x4 SymMinThumbHeight = .bss:0x80984164; // type:object size:0x4 -SymMinTime = .bss:0x80984168; // type:object size:0x4 +min_time = .bss:0x80984168; // type:object size:0x4 SymMinValue = .bss:0x8098416C; // type:object size:0x8 data:4byte SymMinWeightYaw = .bss:0x80984174; // type:object size:0x4 SymMinX = .bss:0x80984178; // type:object size:0x4 @@ -83965,7 +83965,7 @@ SymNextPass = .bss:0x809843B0; // type:object size:0x4 SymNextScreen = .bss:0x809843B4; // type:object size:0x4 data:4byte SymNextSend = .bss:0x809843B8; // type:object size:0x4 next_shot = .bss:0x809843BC; // type:object size:0x4 -SymNextShots = .bss:0x809843C0; // type:object size:0x4 +next_shots = .bss:0x809843C0; // type:object size:0x4 next_start_delta = .bss:0x809843C4; // type:object size:0x8 next_val = .bss:0x809843CC; // type:object size:0xC SymNoPart = .bss:0x809843D8; // type:object size:0x4 @@ -85065,13 +85065,13 @@ lbl_809859C4 = .bss:0x809859C4; // type:object size:0x4 data:4byte lbl_809859C8 = .bss:0x809859C8; // type:object size:0x4 data:4byte lbl_809859CC = .bss:0x809859CC; // type:object size:0x4 data:4byte lbl_809859D0 = .bss:0x809859D0; // type:object size:0x10 -lbl_809859E0 = .bss:0x809859E0; // type:object size:0x8 +sCache__11BandCamShot = .bss:0x809859E0; // type:object size:0x8 lbl_809859E8 = .bss:0x809859E8; // type:object size:0x10 lbl_809859F8 = .bss:0x809859F8; // type:object size:0x20 lbl_80985A18 = .bss:0x80985A18; // type:object size:0x10 lbl_80985A28 = .bss:0x80985A28; // type:object size:0x8 lbl_80985A30 = .bss:0x80985A30; // type:object size:0x18 data:4byte -lbl_80985A48 = .bss:0x80985A48; // type:object size:0x18 data:4byte +gBandCamShotOwner = .bss:0x80985A48; // type:object size:0x18 data:4byte lbl_80985A60 = .bss:0x80985A60; // type:object size:0x10 lbl_80985A70 = .bss:0x80985A70; // type:object size:0x8 lbl_80985A78 = .bss:0x80985A78; // type:object size:0x18C data:4byte diff --git a/config/SZBE69_B8/objects.json b/config/SZBE69_B8/objects.json index 273f2bf8..a45abd50 100644 --- a/config/SZBE69_B8/objects.json +++ b/config/SZBE69_B8/objects.json @@ -136,6 +136,7 @@ "mw_version": "Wii/1.3", "cflags": "system", "objects": { + "system/bandobj/BandButton.cpp": "NonMatching", "system/bandobj/BandCamShot.cpp": "NonMatching", "system/bandobj/BandLabel.cpp": "NonMatching", "system/bandobj/BandList.cpp": "NonMatching", diff --git a/src/system/bandobj/BandButton.cpp b/src/system/bandobj/BandButton.cpp new file mode 100644 index 00000000..275a1c68 --- /dev/null +++ b/src/system/bandobj/BandButton.cpp @@ -0,0 +1,219 @@ +#include "bandobj/BandButton.h" +#include "bandobj/BandLabel.h" +#include "rndobj/PropAnim.h" +#include "ui/UI.h" +#include "utl/Symbols.h" + +INIT_REVS(BandButton); + +void BandButton::Init(){ + TheUI->InitResources("BandButton"); + Register(); +} + +BandButton::BandButton() : mFocusAnim(0), mPulseAnim(0), mAnimTask(0), mStartTime(0) { + +} + +BandButton::~BandButton(){ + if(mFocusAnim) delete mFocusAnim; + if(mPulseAnim) delete mPulseAnim; +} + +BEGIN_COPYS(BandButton) + COPY_SUPERCLASS(UIButton) +END_COPYS + +SAVE_OBJ(BandButton, 0x42) + +BEGIN_LOADS(BandButton) + PreLoad(bs); + PostLoad(bs); +END_LOADS + +void BandButton::PreLoad(BinStream& bs){ + LOAD_REVS(bs); + ASSERT_REVS(0x10, 0); + bool bbb = false; + if(gRev < 8){ + if(gRev <= 4){ + LOAD_SUPERCLASS(RndTransformable) + LOAD_SUPERCLASS(RndDrawable) + } + else UIButton::PreLoad(bs); + if(gRev > 2){ + int i, j, k, l; + bs >> i >> j >> k >> l; + } + if(gRev <= 4){ + Symbol s; + bs >> s; + SetType(s); + } + if(gRev < 8){ + bool b8; + bs >> b8; + if(b8) mFitType = kFitStretch; + else mFitType = kFitWrap; + } + if(gRev < 7 && mFitType == kFitStretch){ + Hmx::Matrix3 mtx; + mtx.Identity(); + SetLocalRot(mtx); + } + if(gRev != 0) bs >> bbb; + else bbb = false; + bs >> mWidth; + bs >> mHeight; + if(gRev <= 4) bs >> mTextToken; + if(gRev > 5) bs >> (int&)mAlignment; + } + else if(gRev == 8){ + UIButton::PreLoad(bs); + int i; bs >> i; + mFitType = i; + bs >> mWidth; + bs >> mHeight; + bs >> mLeading; + bs >> (int&)mAlignment; + int w, x, y, z; + bs >> w >> x >> y >> z; + bs >> bbb; + Hmx::Color col; + bs >> col; + bs >> mKerning; + bs >> mTextSize; + } + else { + UIButton::PreLoad(bs); + if(gRev < 0xC){ + int i; bs >> i; + mFitType = i; + bs >> mWidth; + bs >> mHeight; + if(mFitType == kFitWrap){ + mHeight = 0; + mWidth = 0; + } + } + if(gRev < 0xB){ + bs >> mLeading; + bs >> (int&)mAlignment; + } + if(gRev < 0xE){ + int i, j, k, l; + bs >> i >> j >> k >> l; + } + if(gRev < 0xB){ + bs >> bbb; + bs >> mKerning; + bs >> mTextSize; + } + } + if(gRev < 0xC){ + int i; bs >> i; + } + if(gRev < 0xB){ + int c = 0; + if(bbb) c = 2; + mCapsMode = c; + } + if(gRev == 0xE){ + BandLabel::LoadOldBandTextComp(bs); + } +} + +void BandButton::PostLoad(BinStream& bs){ + UIButton::PostLoad(bs); + if(gRev == 13 || gRev == 14 || gRev == 15){ + ObjPtr meshPtr(0, 0); + bs >> meshPtr; + } +} + +void BandButton::DrawShowing(){ + bool focusanimating = false; + if(mFocusAnim && mFocusAnim->IsAnimating()) focusanimating = true; + if(mState == kFocused && (focusanimating || mPulseAnim)){ + if(!focusanimating && !mPulseAnim->IsAnimating()) StartPulseAnim(); + if(focusanimating){ + if(!mText->GetFont()) Update(); + mAnimTask->Poll(TheTaskMgr.UISeconds() - mStartTime); + UpdateAndDrawHighlightMesh(); + mText->DrawShowing(); + if(UILabel::sDebugHighlight) Highlight(); + } + else UILabel::DrawShowing(); + } + else UILabel::DrawShowing(); +} + +void BandButton::SetState(UIComponent::State state){ + if(state != mState){ + UIComponent::State curstate = GetState(); + UIComponent::SetState(state); + if(mState == kFocused && mFocusAnim){ + if(TheUI->IsTransitioning()) SkipToFocused(); + else { + mAnimTask = mFocusAnim->Animate(mFocusAnim->StartFrame(), mFocusAnim->EndFrame(), kTaskUISeconds, 0.0f, 0.05f); + mStartTime = TheTaskMgr.UISeconds(); + } + } + else if(curstate == kFocused){ + if(mPulseAnim && mPulseAnim->IsAnimating()) mPulseAnim->StopAnimation(); + if(mFocusAnim){ + if(TheUI->IsTransitioning()) SkipToUnfocused(); + else { + mAnimTask = mFocusAnim->Animate(mFocusAnim->EndFrame(), mFocusAnim->StartFrame(), kTaskUISeconds, 0.0f, 0.05f); + mStartTime = TheTaskMgr.UISeconds(); + } + } + } + } +} + +void BandButton::SkipToFocused(){ + if(mFocusAnim){ + mAnimTask = mFocusAnim->Animate(mFocusAnim->EndFrame() - 1.0f, mFocusAnim->EndFrame(), kTaskUISeconds, 0.0f, 0.0f); + mStartTime = TheTaskMgr.UISeconds(); + } +} + +void BandButton::SkipToUnfocused(){ + if(mFocusAnim){ + mAnimTask = mFocusAnim->Animate(mFocusAnim->StartFrame() + 1.0f, mFocusAnim->StartFrame(), kTaskUISeconds, 0.0f, 0.0f); + mStartTime = TheTaskMgr.UISeconds(); + } +} + +void BandButton::StartPulseAnim(){ + if(mPulseAnim){ + mAnimTask = mPulseAnim->Animate(0.05f, false, 0.0f, RndAnimatable::k30_fps_ui, mPulseAnim->StartFrame(), mPulseAnim->EndFrame(), 0.0f, 1.0f, loop); + mStartTime = TheTaskMgr.UISeconds(); + } +} + +void BandButton::Update(){ + UILabel::Update(); + if(mLabelDir->FocusAnim()){ + if(!mFocusAnim) mFocusAnim = Hmx::Object::New(); + mFocusAnim->Copy(mLabelDir->FocusAnim(), kCopyShallow); + mFocusAnim->Replace(mLabelDir->TextObj(mFontMatVariation), mText); + } + if(mLabelDir->PulseAnim()){ + if(!mPulseAnim) mPulseAnim = Hmx::Object::New(); + mPulseAnim->Copy(mLabelDir->PulseAnim(), kCopyShallow); + mPulseAnim->Replace(mLabelDir->TextObj(mFontMatVariation), mText); + } +} + +BEGIN_HANDLERS(BandButton) + HANDLE_ACTION(skip_to_focused, SkipToFocused()) + HANDLE_ACTION(skip_to_unfocused, SkipToUnfocused()) + HANDLE_SUPERCLASS(UIButton) + HANDLE_CHECK(0x171) +END_HANDLERS + +BEGIN_PROPSYNCS(BandButton) + SYNC_SUPERCLASS(UIButton) +END_PROPSYNCS \ No newline at end of file diff --git a/src/system/bandobj/BandButton.h b/src/system/bandobj/BandButton.h new file mode 100644 index 00000000..3c75f8fe --- /dev/null +++ b/src/system/bandobj/BandButton.h @@ -0,0 +1,38 @@ +#pragma once +#include "ui/UIButton.h" + +class BandButton : public UIButton { +public: + BandButton(); + OBJ_CLASSNAME(BandButton); + OBJ_SET_TYPE(BandButton); + virtual DataNode Handle(DataArray*, bool); + virtual bool SyncProperty(DataNode&, DataArray*, int, PropOp); + virtual void Save(BinStream&); + virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); + virtual void Load(BinStream&); + virtual void DrawShowing(); + virtual ~BandButton(); + virtual void PreLoad(BinStream&); + virtual void PostLoad(BinStream&); + virtual void SetState(UIComponent::State); + virtual void Update(); + + void SkipToFocused(); + void SkipToUnfocused(); + void StartPulseAnim(); + + DECLARE_REVS; + static void Init(); + static void Register(){ + REGISTER_OBJ_FACTORY(BandButton) + } + NEW_OBJ(BandButton) + NEW_OVERLOAD; + DELETE_OVERLOAD; + + RndAnimatable* mFocusAnim; // 0x1bc - might be a RndPropAnim* instead? + RndAnimatable* mPulseAnim; // 0x1c0 - might be a RndPropAnim* instead? + Task* mAnimTask; // 0x1c4 - Task* + float mStartTime; // 0x1c8 +}; \ No newline at end of file diff --git a/src/system/bandobj/BandCamShot.cpp b/src/system/bandobj/BandCamShot.cpp index b5e90776..0b5321ef 100644 --- a/src/system/bandobj/BandCamShot.cpp +++ b/src/system/bandobj/BandCamShot.cpp @@ -1,8 +1,488 @@ -#include "rndobj/Anim.h" +#include "bandobj/BandCamShot.h" +#include "char/Character.h" +#include "char/CharDriver.h" +#include "obj/Msg.h" +#include "obj/Utl.h" +#include "world/EventAnim.h" +#include "utl/Symbols.h" +#include "utl/Messages.h" -#include "decomp.h" +INIT_REVS(BandCamShot) -// Here to test ObjPtrList -DECOMP_FORCEBLOCK(BandCamShot, (ObjPtrList* plist, BinStream& bs), - bs >> *plist; -) +std::list BandCamShot::sCache; +BandCamShot* gBandCamShotOwner; + +std::list::iterator BandCamShot::CreateTargetCache(Symbol s){ + sCache.push_back(TargetCache()); + sCache.back().unk4 = FindTarget(s, true); + return sCache.begin(); +} + +void BandCamShot::DeleteTargetCache(std::list::iterator it){ + sCache.erase(it); +} + +BandCamShot::BandCamShot() : mTargets(this), mMinTime(0), mMaxTime(0), mZeroTime(0), mNextShots(this, kObjListNoNull), mCurShot(this, 0), + unk15c(0), unk160(0), unk164(0), unk168(0), unk169(0), unk16a(0), mAnimsDuringNextShots(0) { + SetNear(10.0f); + SetFar(10000.0f); + mShotIter = mNextShots.end(); +} + +RndTransformable* BandCamShot::FindTarget(Symbol s, bool b){ + static Message msg("find_target", DataNode(0), DataNode(1)); + msg[0] = DataNode(s); + msg[1] = DataNode(b); + DataNode handled = HandleType(msg); + RndTransformable* ret = 0; + if(handled.Type() != kDataUnhandled){ + ret = handled.Obj(0); + } + if(!ret){ + if(Dir()) ret = Dir()->Find(s.Str(), false); + } + return ret; +} + +BinStream& operator>>(BinStream& bs, BandCamShot::Target& tgt){ + bs >> tgt.mTarget; + if(BandCamShot::gRev > 0xA){ + char b; bs >> b; + tgt.mTeleport = b; + } + else { + tgt.mTeleport = true; + } + bs >> tgt.mXfm; + if(BandCamShot::gRev == 0){ + Transform tf; + bs >> tf; + } + bs >> tgt.mAnimGroup; + char ret; + bs >> ret; + tgt.mReturn = ret; + if(BandCamShot::gRev > 2){ + if(BandCamShot::gRev < 0x1D){ + bool b; int i; bs >> b; bs >> i; + } + if(BandCamShot::gRev < 0xC){ + int i; bs >> i; + } + } + if(BandCamShot::gRev > 3) bs >> tgt.mFastForward; + else tgt.mFastForward = 0; + if(BandCamShot::gRev > 0xA) bs >> tgt.mForwardEvent; + else tgt.mForwardEvent = Symbol(); + if(BandCamShot::gRev > 5){ + char b; bs >> b; + tgt.mSelfShadow = b; + } + else tgt.mSelfShadow = 1; + if(BandCamShot::gRev > 6){ + char b; bs >> b; + tgt.unk1 = b; + char b2; bs >> b2; + tgt.unk2 = b2; + if(BandCamShot::gRev > 0x1F){ + char bhide; bs >> bhide; + tgt.mHide = bhide; + } + else tgt.mHide = 0; + } + else { + tgt.unk1 = 0; + tgt.unk2 = 1; + } + if( + BandCamShot::gRev == 8 || BandCamShot::gRev == 9 || BandCamShot::gRev == 10 || BandCamShot::gRev == 11 || BandCamShot::gRev == 12 || BandCamShot::gRev == 13 || + BandCamShot::gRev == 14 || BandCamShot::gRev == 15 || BandCamShot::gRev == 16 || BandCamShot::gRev == 17 || BandCamShot::gRev == 18 || BandCamShot::gRev == 19 || + BandCamShot::gRev == 20 || BandCamShot::gRev == 21 || BandCamShot::gRev == 22 || BandCamShot::gRev == 23 || BandCamShot::gRev == 24 || BandCamShot::gRev == 25 || + BandCamShot::gRev == 26 || BandCamShot::gRev == 27 || BandCamShot::gRev == 28 + ){ + Symbol s; + bs >> s; bs >> s; + if(BandCamShot::gRev > 8){ + bs >> s; bs >> s; + } + } + if(BandCamShot::gRev > 9) bs >> tgt.mEnvOverride; + if( + BandCamShot::gRev == 17 || BandCamShot::gRev == 18 || BandCamShot::gRev == 19 || BandCamShot::gRev == 20 || + BandCamShot::gRev == 21 || BandCamShot::gRev == 22 || BandCamShot::gRev == 23 || BandCamShot::gRev == 24 || + BandCamShot::gRev == 25 || BandCamShot::gRev == 26 || BandCamShot::gRev == 27 || BandCamShot::gRev == 28 + ){ + bool b; bs >> b; + } + if(BandCamShot::gRev > 0x14){ + if(BandCamShot::gRev < 0x1E){ + int b; bs >> b; + tgt.mForceLod = b; + } + else { + char b; bs >> b; + tgt.mForceLod = b; + } + if(BandCamShot::gRev < 0x19){ + if(tgt.mForceLod <= 0){ + tgt.mForceLod = -1; + } + } + if(BandCamShot::gRev < 0x1B && tgt.mForceLod < 0){ + tgt.mForceLod = -1; + } + } + if( + BandCamShot::gRev == 22 || BandCamShot::gRev == 23 || BandCamShot::gRev == 24 || BandCamShot::gRev == 25 || + BandCamShot::gRev == 26 || BandCamShot::gRev == 27 || BandCamShot::gRev == 28 + ){ + String s48; int i; + bs >> s48; bs >> s48; + bs >> i; bs >> i; + if(BandCamShot::gRev > 0x17){ + bs >> i; bs >> i; bs >> i; + } + } + return bs; +} + +SAVE_OBJ(BandCamShot, 0x14A) + +BinStream& operator>>(BinStream& bs, OldTrigger& o){ + bs >> o.frame; + bs >> o.trigger; + return bs; +} + +EventAnim* MakeEventAnim(BandCamShot* shot){ + EventAnim* anim = Hmx::Object::New(); + anim->SetName(MakeString("%s_trigs.evntanm", FileGetBase(shot->Name(), 0)), shot->Dir()); + return anim; +} + +BEGIN_LOADS(BandCamShot) + LOAD_REVS(bs) + ASSERT_REVS(0x20, 0) + if(gRev > 4) LOAD_SUPERCLASS(CamShot) + bs >> mTargets; + if( + BandCamShot::gRev == 2 || BandCamShot::gRev == 3 || BandCamShot::gRev == 4 || BandCamShot::gRev == 5 || BandCamShot::gRev == 6 || BandCamShot::gRev == 7 || + BandCamShot::gRev == 8 || BandCamShot::gRev == 9 || BandCamShot::gRev == 10 || BandCamShot::gRev == 11 || BandCamShot::gRev == 12 || BandCamShot::gRev == 13 || + BandCamShot::gRev == 14 || BandCamShot::gRev == 15 || BandCamShot::gRev == 16 || BandCamShot::gRev == 17 || BandCamShot::gRev == 18 + ){ + ObjPtr shotPtr(this, 0); + bs >> shotPtr; + if(shotPtr) mNextShots.push_back(shotPtr); + } + if(gRev > 3) bs >> mZeroTime; + if(gRev <= 4) LOAD_SUPERCLASS(CamShot) + if(gRev == 0xD){ + bool b; bs >> b; + mPS3PerPixel = b; + } + EventAnim* anim = 0; + if(gRev - 0xF <= 0xDU){ + std::vector trigs; + bs >> trigs; + if(!trigs.empty()){ + anim = MakeEventAnim(this); + } + } + if(gRev - 0x10 <= 0xCU){ + ObjPtr trig1(this, 0); + ObjPtr trig2(this, 0); + bs >> trig1; + bs >> trig2; + } + if(gRev > 0x11){ + bs >> mMinTime; + bs >> mMaxTime; + } + if(gRev > 0x12) bs >> mNextShots; + if(gRev - 0x14 < 0xBU){ + int i; bs >> i; + } + if(gRev - 0x17 < 6){ + bs >> anim->mResetStart; + } + if(gRev == 0x1C) bs >> mAnims; + if(anim) mAnims.push_back(anim); + ResetNextShot(); +END_LOADS + +BEGIN_COPYS(BandCamShot) + COPY_SUPERCLASS(CamShot) + CREATE_COPY(BandCamShot) + BEGIN_COPYING_MEMBERS + COPY_MEMBER(mTargets) + COPY_MEMBER(mZeroTime) + COPY_MEMBER(mMinTime) + COPY_MEMBER(mMaxTime) + COPY_MEMBER(mNextShots) + ResetNextShot(); + END_COPYING_MEMBERS +END_COPYS + +bool BandCamShot::IterateNextShot(){ + bool ret = true; + MILO_ASSERT(!mNextShots.empty(), 0x278); + if(mShotIter == mNextShots.end()){ + mShotIter = mNextShots.begin(); + } + else { + ObjPtrList::iterator curItr = mShotIter; + ++mShotIter; + if(mShotIter == mNextShots.end()){ + ret = false; + mShotIter = curItr; + } + } + return ret; +} + +void BandCamShot::ResetNextShot(){ + mShotIter = mNextShots.end(); + mCurShot = this; + unk15c = 0; + unk160 = 0; +} + +void BandCamShot::SetFrameEx(float frame, float blend){ + unk168 = true; + SetFrame(frame, blend); + unk168 = false; +} + +void BandCamShot::AnimateShot(float frame, float blend){ + for(ObjVector::iterator it = mTargets.begin(); it != mTargets.end(); ++it); + CamShot::SetFrame(frame, blend); +} + +void BandCamShot::Store(){ + for(ObjVector::iterator it = mTargets.begin(); it != mTargets.end(); ++it){ + (*it).Store(this); + } +} + +void BandCamShot::FreezeChar(Character* c, bool b){ + c->mFrozen = b; +} + +DataNode BandCamShot::AddTarget(DataArray* target){ + MILO_ASSERT(target->Size() != 2, 0x3AD); + mTargets.push_back(Target(this)); + mTargets.back().mTarget = target->Sym(2); + mTargets.back().Store(this); + return DataNode(0); +} + +float BandCamShot::GetTotalDuration(){ + float sum = Duration(); + std::list shots; + ListNextShots(shots); + for(std::list::iterator it = shots.begin(); it != shots.end(); ++it){ + sum += (*it)->Duration(); + } + return sum; +} + +int BandCamShot::GetNumShots(){ + int size; + { + std::list shots; + ListNextShots(shots); + size = shots.size(); + } + return size + 1; +} + +float BandCamShot::GetTotalDurationSeconds(){ + float secs = CamShot::GetDurationSeconds(); + std::list shots; + ListNextShots(shots); + for(std::list::iterator it = shots.begin(); it != shots.end(); ++it){ + secs += (*it)->CamShot::GetDurationSeconds(); + } + return secs; +} + +void BandCamShot::CheckNextShots(){ + std::list shots; + ListNextShots(shots); +} + +float BandCamShot::EndFrame(){ return GetTotalDuration(); } + +bool BandCamShot::CheckShotStarted(){ + return !unk168 && CamShot::CheckShotStarted(); +} + +bool BandCamShot::CheckShotOver(float f){ + return !unk168 && f >= unk164 && CamShot::CheckShotOver(f); +} + +void BandCamShot::Target::Store(BandCamShot* shot){ + if(!mTarget.Null()){ + std::list::iterator it = shot->CreateTargetCache(mTarget); + if(it->unk4){ + mXfm.Set(it->unkc); + shot->DeleteTargetCache(it); + } + } +} + +void BandCamShot::Target::UpdateTarget(Symbol s, BandCamShot* shot){ + if(mTarget != s){ + mTarget = s; + mAnimGroup = Symbol(""); + } + Store(shot); +} + +#pragma push +#pragma pool_data off +BEGIN_CUSTOM_PROPSYNC(BandCamShot::Target) + SYNC_PROP_SET(target, o.mTarget, o.UpdateTarget(_val.Sym(0), gBandCamShotOwner)) + SYNC_PROP_MODIFY(anim_group, o.mAnimGroup, gBandCamShotOwner->StartAnim()) + SYNC_PROP(fast_forward, o.mFastForward) + SYNC_PROP(forward_event, o.mForwardEvent) + { + static Symbol _s("force_lod"); + if(sym == _s){ + if(_op == kPropSet) o.mForceLod = _val.Int(0); + else _val = DataNode(o.mForceLod); + return true; + } + } + { + static Symbol _s("teleport"); + if(sym == _s){ + if(_op == kPropSet) o.mTeleport = _val.Int(0); + else _val = DataNode(o.mTeleport); + return true; + } + } + { + static Symbol _s("return"); + if(sym == _s){ + if(_op == kPropSet) o.mReturn = _val.Int(0); + else _val = DataNode(o.mReturn); + return true; + } + } + { + static Symbol _s("self_shadow"); + if(sym == _s){ + if(_op == kPropSet) o.mSelfShadow = _val.Int(0); + else _val = DataNode(o.mSelfShadow); + return true; + } + } + { + static Symbol _s("hide"); + if(sym == _s){ + if(_op == kPropSet) o.mHide = _val.Int(0); + else _val = DataNode(o.mHide); + return true; + } + } + SYNC_PROP(env_override, o.mEnvOverride) + SYNC_PROP_SET(target_ptr, gBandCamShotOwner->FindTarget(o.mTarget, false), ) +END_CUSTOM_PROPSYNC +#pragma pop + +BEGIN_PROPSYNCS(BandCamShot) + gBandCamShotOwner = this; + SYNC_PROP(targets, mTargets) + SYNC_PROP(zero_time, mZeroTime) + SYNC_PROP(min_time, mMinTime) + SYNC_PROP(max_time, mMaxTime) + SYNC_PROP_MODIFY_ALT(next_shots, mNextShots, CheckNextShots(); ResetNextShot(); ) + SYNC_PROP(anims_during_nextshots, mAnimsDuringNextShots) + SYNC_PROP_SET(total_duration, GetTotalDuration(), ) + SYNC_SUPERCLASS(CamShot) +END_PROPSYNCS + +BEGIN_HANDLERS(BandCamShot) + HANDLE(test_delta, OnTestDelta) + HANDLE_EXPR(total_duration_seconds, GetTotalDurationSeconds()) + HANDLE_ACTION(store, Store()) + HANDLE_ACTION(view, View()) + HANDLE_ACTION(freeze, Freeze()) + HANDLE_ACTION(view_freeze, ViewFreeze()) + HANDLE(add_target, AddTarget) + HANDLE_EXPR(initial_shot, InitialShot()) + HANDLE_EXPR(num_shots, GetNumShots()) + HANDLE(allowable_next_shots, OnAllowableNextShots) + HANDLE(list_all_next_shots, OnListAllNextShots) + HANDLE(list_targets, OnListTargets) + HANDLE(list_anim_groups, OnListAnimGroups) + HANDLE_SUPERCLASS(CamShot) + HANDLE_CHECK(0x4A4) +END_HANDLERS + +DataNode BandCamShot::OnListTargets(const DataArray* da){ + DataNode handled = HandleType(list_targets_msg); + if(handled.Type() != kDataUnhandled){ + return DataNode(handled.Array(0), kDataArray); + } + else return ObjectList(Dir(), "Trans", true); +} + +DataNode BandCamShot::OnListAnimGroups(const DataArray* da){ + Symbol sym = da->Sym(2); + static Message m("list_anim_groups", DataNode(0)); + m[0] = DataNode(sym); + DataNode handled = HandleType(m); + if(handled.Type() != kDataUnhandled){ + return DataNode(handled.Array(0), kDataArray); + } + else { + Character* c = dynamic_cast(FindTarget(sym, false)); + if(c){ + bool usechardir = false; + if(c->GetDriver() && c->GetDriver()->ClipDir()) usechardir = true; + ObjectDir* thedir; + if(usechardir){ + thedir = c->GetDriver()->ClipDir(); + } + else thedir = Dir(); + return ObjectList(thedir, "CharClipGroup", true); + } + else { + handled = DataNode(new DataArray(1), kDataArray); + handled.Array(0)->Node(0) = DataNode(Symbol()); + return DataNode(handled); + } + } +} + +DataNode BandCamShot::OnAllowableNextShots(const DataArray* da){ + DataArrayPtr ptr; + for(ObjDirItr it(Dir(), true); it != 0; ++it){ + if(mNextShots.find(it) != mNextShots.end()){ + std::list shots; + ListNextShots(shots); + // more + } + } + static DataNode& milo_prop_path = DataVariable("milo_prop_path"); + if(milo_prop_path.Type() == kDataArray){ + if(milo_prop_path.Array(0)->Size() == 2){ + ObjPtrList::iterator it = mNextShots.begin(); + it += milo_prop_path.Array(0)->Int(1); + ptr->Insert(ptr->Size(), DataNode(*it)); + } + } + return DataNode(ptr); +} + +DataNode BandCamShot::OnListAllNextShots(const DataArray* da){ + std::list shots; + ListNextShots(shots); + DataArrayPtr ptr; + for(std::list::iterator it = shots.begin(); it != shots.end(); ++it){ + ptr->Insert(ptr->Size(), DataNode(*it)); + } + return DataNode(ptr); +} \ No newline at end of file diff --git a/src/system/bandobj/BandCamShot.h b/src/system/bandobj/BandCamShot.h new file mode 100644 index 00000000..879d621f --- /dev/null +++ b/src/system/bandobj/BandCamShot.h @@ -0,0 +1,113 @@ +#pragma once +#include "world/CameraShot.h" +#include "rndobj/Env.h" +#include "math/Mtx.h" + +class Character; + +class OldTrigger { +public: + float frame; // 0x0 + Symbol trigger; // 0x4 +}; + +class BandCamShot : public CamShot { +public: + class Target { + public: + Target(Hmx::Object* o) : mFastForward(0), mEnvOverride(o, 0), mForceLod(-1), mTeleport(1), + mReturn(1), mSelfShadow(1), unk1(0), unk2(1), mHide(0) { + mXfm.Reset(); + } + void Store(BandCamShot*); + void UpdateTarget(Symbol, BandCamShot*); + + Symbol mTarget; // 0x0 + TransformNoScale mXfm; // 0x4 + Symbol mAnimGroup; // 0x18 + float mFastForward; // 0x1c + Symbol mForwardEvent; // 0x20 + ObjPtr mEnvOverride; // 0x24 + // 0x30 bitfields + int mForceLod : 4; + int mTeleport : 2; + int mReturn : 2; + int mSelfShadow : 2; + int unk1 : 2; + int unk2 : 2; + int mHide : 2; + }; + + // size 0x20 + class TargetCache { + public: + Symbol unk0; + RndTransformable* unk4; + int unk8; + TransformNoScale unkc; + }; + + BandCamShot(); + OBJ_CLASSNAME(BandCamShot); + OBJ_SET_TYPE(BandCamShot); + virtual DataNode Handle(DataArray*, bool); + virtual bool SyncProperty(DataNode&, DataArray*, int, PropOp); + virtual void Save(BinStream&); + virtual void Copy(const Hmx::Object*, Hmx::Object::CopyType); + virtual void Load(BinStream&); + virtual ~BandCamShot(){} + virtual void StartAnim(); + virtual void EndAnim(); + virtual void SetFrame(float, float); + virtual float EndFrame(); + virtual void SetPreFrame(float, float); + virtual CamShot* CurrentShot(){ return mCurShot; } + virtual bool CheckShotStarted(); + virtual bool CheckShotOver(float); + + RndTransformable* FindTarget(Symbol, bool); + void CheckNextShots(); + void ResetNextShot(); + float GetTotalDuration(); + float GetTotalDurationSeconds(); + void Store(); + void View(); + void Freeze(); + void FreezeChar(Character*, bool); + void ViewFreeze(); + BandCamShot* InitialShot(); + int GetNumShots(); + bool IterateNextShot(); + void SetFrameEx(float, float); + void AnimateShot(float, float); + void ListNextShots(std::list&); + static void DeleteTargetCache(std::list::iterator); + std::list::iterator CreateTargetCache(Symbol); + + DataNode OnTestDelta(DataArray*); + DataNode AddTarget(DataArray*); + DataNode OnAllowableNextShots(const DataArray*); + DataNode OnListAllNextShots(const DataArray*); + DataNode OnListTargets(const DataArray*); + DataNode OnListAnimGroups(const DataArray*); + + DECLARE_REVS; + NEW_OVERLOAD; + DELETE_OVERLOAD; + static std::list sCache; + + ObjVector mTargets; // 0x124 + int mMinTime; // 0x130 + int mMaxTime; // 0x134 + float mZeroTime; // 0x138 + ObjPtrList mNextShots; // 0x13c + ObjPtrList::iterator mShotIter; // 0x14c + ObjPtr mCurShot; // 0x150 + float unk15c; + float unk160; + float unk164; + bool unk168; + bool unk169; + bool unk16a; + bool mAnimsDuringNextShots; // 0x16b +}; \ No newline at end of file diff --git a/src/system/bandobj/BandLabel.h b/src/system/bandobj/BandLabel.h index fc005371..a9c3c6b7 100644 --- a/src/system/bandobj/BandLabel.h +++ b/src/system/bandobj/BandLabel.h @@ -21,6 +21,8 @@ class BandLabel : public UILabel, public UITransitionHandler { virtual bool IsEmptyValue() const; virtual void FinishValueChange(); + static void LoadOldBandTextComp(BinStream&); + static void Init(); static void Register(){ REGISTER_OBJ_FACTORY(BandLabel); diff --git a/src/system/char/Character.h b/src/system/char/Character.h index 317b0cf2..ba2ff0f8 100644 --- a/src/system/char/Character.h +++ b/src/system/char/Character.h @@ -108,6 +108,7 @@ class Character : public RndDir { int MinLod() const { return mMinLod; } int LastLod() const { return mLastLod; } void SetMinLod(int lod){ mMinLod = lod; } + CharDriver* GetDriver() const { return mDriver; } DataNode OnPlayClip(DataArray*); DataNode OnCopyBoundingSphere(DataArray*); diff --git a/src/system/math/Mtx.h b/src/system/math/Mtx.h index 36f20cd4..314f7942 100644 --- a/src/system/math/Mtx.h +++ b/src/system/math/Mtx.h @@ -217,6 +217,7 @@ class TransformNoScale { void Set(const TransformNoScale&); void SetRot(const Hmx::Matrix3&); void Reset(); + TransformNoScale& operator=(const TransformNoScale& t){ Set(t); } ShortQuat q; // 0x0/2/4/6 class Vector3 v; // 0x8 diff --git a/src/system/obj/ObjPtr_p.h b/src/system/obj/ObjPtr_p.h index 5fea44e8..a357b398 100644 --- a/src/system/obj/ObjPtr_p.h +++ b/src/system/obj/ObjPtr_p.h @@ -154,6 +154,7 @@ template class ObjPtrList : public ObjRef { } bool operator!=(iterator it){ return mNode != it.mNode; } + bool operator==(iterator it){ return mNode == it.mNode; } bool operator!(){ return mNode == 0; } struct Node* mNode; diff --git a/src/system/rndobj/Text.h b/src/system/rndobj/Text.h index 93497539..9adc134c 100644 --- a/src/system/rndobj/Text.h +++ b/src/system/rndobj/Text.h @@ -99,6 +99,7 @@ class RndText : public RndDrawable, public RndTransformable { void SetFixedLength(int); void GetCurrentStringDimensions(float&, float&); Alignment GetAlignment() const { return (Alignment)mAlign; } + RndFont* GetFont() const { return mFont; } float MaxLineWidth() const; void SetMarkup(bool); void ResizeText(int); diff --git a/src/system/ui/UILabel.h b/src/system/ui/UILabel.h index 737625ba..7c6841fb 100644 --- a/src/system/ui/UILabel.h +++ b/src/system/ui/UILabel.h @@ -96,6 +96,7 @@ class UILabel : public UIComponent { void AltFontResourceFileUpdated(bool); RndFont* AltFont(); RndFont* Font(); + void UpdateAndDrawHighlightMesh(); void SetTokenFmt(Symbol s, const char* cc){ SetTokenFmt(DataArrayPtr(DataNode(s), DataNode(cc))); diff --git a/src/system/world/CameraShot.h b/src/system/world/CameraShot.h index 63df400d..6b5dd156 100644 --- a/src/system/world/CameraShot.h +++ b/src/system/world/CameraShot.h @@ -120,12 +120,12 @@ class CamShot : public RndAnimatable { virtual void StartAnim(); virtual void EndAnim(); virtual void SetFrame(float, float); - virtual float StartFrame(); + virtual float StartFrame(){ return 0; } virtual float EndFrame(); virtual Hmx::Object* AnimTarget(); virtual void ListAnimChildren(std::list&) const; virtual void SetPreFrame(float, float){} - virtual void CurrentShot(){} + virtual CamShot* CurrentShot(){} virtual bool CheckShotStarted(); virtual bool CheckShotOver(float); @@ -142,6 +142,9 @@ class CamShot : public RndAnimatable { bool SetPos(CamShotFrame&, RndCam*); void Shake(float, float, const Vector2&, Vector3&, Vector3&); void Disable(bool, int); + void SetNear(float n){ mNear = n; } + void SetFar(float f){ mFar = f; } + float Duration() const { return mDuration; } DataNode OnHasTargets(DataArray*); DataNode OnSetPos(DataArray*);