diff --git a/config/GM8E01_00/symbols.txt b/config/GM8E01_00/symbols.txt index a1590979..aa29d598 100644 --- a/config/GM8E01_00/symbols.txt +++ b/config/GM8E01_00/symbols.txt @@ -17773,8 +17773,8 @@ lbl_803D6D68 = .rodata:0x803D6D68; // type:object size:0x8 lbl_803D6D70 = .rodata:0x803D6D70; // type:object size:0x8 lbl_803D6D78 = .rodata:0x803D6D78; // type:object size:0x8 @stringBase0 = .rodata:0x803D6D80; // type:object size:0x8 scope:local data:string_table -lbl_803D6D88 = .rodata:0x803D6D88; // type:object size:0x8 -lbl_803D6D90 = .rodata:0x803D6D90; // type:object size:0x8 +@stringBase0 = .rodata:0x803D6D88; // type:object size:0x8 scope:local data:string_table +@stringBase0 = .rodata:0x803D6D90; // type:object size:0x8 scope:local data:string_table lbl_803D6D98 = .rodata:0x803D6D98; // type:object size:0x8 lbl_803D6DA0 = .rodata:0x803D6DA0; // type:object size:0x8 lbl_803D6DA8 = .rodata:0x803D6DA8; // type:object size:0x8 @@ -18056,7 +18056,7 @@ lbl_803D9C2C = .data:0x803D9C2C; // type:object size:0xC lbl_803D9C38 = .data:0x803D9C38; // type:object size:0xC __vt__10IVParamObj = .data:0x803D9C44; // type:object size:0xC scope:global lbl_803D9C50 = .data:0x803D9C50; // type:object size:0x20 -lbl_803D9C70 = .data:0x803D9C70; // type:object size:0x18 +__vt__10IMetaTrans = .data:0x803D9C70; // type:object size:0x18 lbl_803D9C88 = .data:0x803D9C88; // type:object size:0x20 lbl_803D9CA8 = .data:0x803D9CA8; // type:object size:0x10 __vt__12CTweakPlayer = .data:0x803D9CB8; // type:object size:0xC scope:weak @@ -18677,10 +18677,10 @@ lbl_803ECD10 = .data:0x803ECD10; // type:object size:0x20 __vt__13CMetaAnimPlay = .data:0x803ECD30; // type:object size:0x20 __vt__15CMetaAnimRandom = .data:0x803ECD50; // type:object size:0x20 __vt__17CMetaAnimSequence = .data:0x803ECD70; // type:object size:0x20 -lbl_803ECD90 = .data:0x803ECD90; // type:object size:0x18 -lbl_803ECDA8 = .data:0x803ECDA8; // type:object size:0x18 -lbl_803ECDC0 = .data:0x803ECDC0; // type:object size:0x18 -lbl_803ECDD8 = .data:0x803ECDD8; // type:object size:0x18 +__vt__18CMetaTransMetaAnim = .data:0x803ECD90; // type:object size:0x18 +__vt__20CMetaTransPhaseTrans = .data:0x803ECDA8; // type:object size:0x18 +__vt__14CMetaTransSnap = .data:0x803ECDC0; // type:object size:0x18 +__vt__15CMetaTransTrans = .data:0x803ECDD8; // type:object size:0x18 __vt__9IMetaAnim = .data:0x803ECDF0; // type:object size:0x20 __vt__Q211CSfxManager11CSfxWrapper = .data:0x803ECE10; // type:object size:0x64 __vt__71TObjOwnerDerivedFromIObj> = .data:0x803ECE74; // type:object size:0xC diff --git a/config/GM8E01_01/symbols.txt b/config/GM8E01_01/symbols.txt index 85c70e8f..ae88a8bd 100644 --- a/config/GM8E01_01/symbols.txt +++ b/config/GM8E01_01/symbols.txt @@ -17811,7 +17811,7 @@ lbl_803D6F48 = .rodata:0x803D6F48; // type:object size:0x8 lbl_803D6F50 = .rodata:0x803D6F50; // type:object size:0x8 lbl_803D6F58 = .rodata:0x803D6F58; // type:object size:0x8 lbl_803D6F60 = .rodata:0x803D6F60; // type:object size:0x8 -lbl_803D6F68 = .rodata:0x803D6F68; // type:object size:0x8 +@stringBase0 = .rodata:0x803D6F68; // type:object size:0x8 scope:local data:string_table lbl_803D6F70 = .rodata:0x803D6F70; // type:object size:0x8 lbl_803D6F78 = .rodata:0x803D6F78; // type:object size:0x8 lbl_803D6F80 = .rodata:0x803D6F80; // type:object size:0x8 @@ -18094,7 +18094,7 @@ lbl_803D9E0C = .data:0x803D9E0C; // type:object size:0xC lbl_803D9E18 = .data:0x803D9E18; // type:object size:0xC __vt__10IVParamObj = .data:0x803D9E24; // type:object size:0xC lbl_803D9E30 = .data:0x803D9E30; // type:object size:0x20 -lbl_803D9E50 = .data:0x803D9E50; // type:object size:0x18 +__vt__10IMetaTrans = .data:0x803D9E50; // type:object size:0x18 lbl_803D9E68 = .data:0x803D9E68; // type:object size:0x20 lbl_803D9E88 = .data:0x803D9E88; // type:object size:0x10 __vt__12CTweakPlayer = .data:0x803D9E98; // type:object size:0xC scope:weak @@ -18711,10 +18711,10 @@ lbl_803ECEF0 = .data:0x803ECEF0; // type:object size:0x20 __vt__13CMetaAnimPlay = .data:0x803ECF10; // type:object size:0x20 __vt__15CMetaAnimRandom = .data:0x803ECF30; // type:object size:0x20 __vt__17CMetaAnimSequence = .data:0x803ECF50; // type:object size:0x20 -lbl_803ECF70 = .data:0x803ECF70; // type:object size:0x18 -lbl_803ECF88 = .data:0x803ECF88; // type:object size:0x18 -lbl_803ECFA0 = .data:0x803ECFA0; // type:object size:0x18 -lbl_803ECFB8 = .data:0x803ECFB8; // type:object size:0x18 +__vt__18CMetaTransMetaAnim = .data:0x803ECF70; // type:object size:0x18 +__vt__20CMetaTransPhaseTrans = .data:0x803ECF88; // type:object size:0x18 +__vt__14CMetaTransSnap = .data:0x803ECFA0; // type:object size:0x18 +__vt__15CMetaTransTrans = .data:0x803ECFB8; // type:object size:0x18 __vt__9IMetaAnim = .data:0x803ECFD0; // type:object size:0x20 lbl_803ECFF0 = .data:0x803ECFF0; // type:object size:0x64 lbl_803ED054 = .data:0x803ED054; // type:object size:0xC diff --git a/configure.py b/configure.py index b44d6d81..0936b6d4 100755 --- a/configure.py +++ b/configure.py @@ -878,10 +878,10 @@ config.libs = [ Object(NonMatching, "Kyoto/Animation/CMetaAnimPlay.cpp"), Object(NonMatching, "Kyoto/Animation/CMetaAnimRandom.cpp"), Object(NonMatching, "Kyoto/Animation/CMetaAnimSequence.cpp"), - Object(NonMatching, "Kyoto/Animation/CMetaTransFactory.cpp"), + Object(Matching, "Kyoto/Animation/CMetaTransFactory.cpp"), Object(NonMatching, "Kyoto/Animation/CMetaTransMetaAnim.cpp"), Object(NonMatching, "Kyoto/Animation/CMetaTransPhaseTrans.cpp"), - Object(NonMatching, "Kyoto/Animation/CMetaTransSnap.cpp"), + Object(Matching, "Kyoto/Animation/CMetaTransSnap.cpp"), Object(NonMatching, "Kyoto/Animation/CMetaTransTrans.cpp"), Object(MatchingFor("GM8E01_00", "GM8E01_01"), "Kyoto/Animation/CPASAnimInfo.cpp"), Object(MatchingFor("GM8E01_00", "GM8E01_01"), "Kyoto/Animation/CPASAnimParm.cpp"), diff --git a/include/Kyoto/Animation/CMetaTransMetaAnim.hpp b/include/Kyoto/Animation/CMetaTransMetaAnim.hpp new file mode 100644 index 00000000..b0ea74f0 --- /dev/null +++ b/include/Kyoto/Animation/CMetaTransMetaAnim.hpp @@ -0,0 +1,24 @@ +#ifndef _CMETATRANSMETAANIM +#define _CMETATRANSMETAANIM + +#include "Kyoto/Animation/IMetaTrans.hpp" +#include "rstl/rc_ptr.hpp" +class IMetaAnim; +class CInputStream; +class COutputStream; + +class CMetaTransMetaAnim : public IMetaTrans { + rstl::rc_ptr< IMetaAnim > x4_metaAnim; + +public: + explicit CMetaTransMetaAnim(CInputStream& in); + EMetaTransType GetType() const override { return kMTT_MetaAnim; } + + rstl::rc_ptr< CAnimTreeNode > VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const override; + + void WriteTransData(COutputStream&) const override; +}; + +#endif // _CMETATRANSMETAANIM diff --git a/include/Kyoto/Animation/CMetaTransPhaseTrans.hpp b/include/Kyoto/Animation/CMetaTransPhaseTrans.hpp new file mode 100644 index 00000000..8223e2e4 --- /dev/null +++ b/include/Kyoto/Animation/CMetaTransPhaseTrans.hpp @@ -0,0 +1,24 @@ +#ifndef _CMETATRANSPHASETRANS +#define _CMETATRANSPHASETRANS + +#include "Kyoto/Animation/CCharAnimTime.hpp" +#include "Kyoto/Animation/IMetaTrans.hpp" + +class CMetaTransPhaseTrans : public IMetaTrans { + CCharAnimTime x4_transDur; + bool xc_; + bool xd_runA; + uint x10_flags; + +public: + explicit CMetaTransPhaseTrans(CInputStream& in); + EMetaTransType GetType() const override { return kMTT_PhaseTrans; } + + rstl::rc_ptr< CAnimTreeNode > VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const override; + + void WriteTransData(COutputStream&) const override; +}; + +#endif // _CMETATRANSPHASETRANS diff --git a/include/Kyoto/Animation/CMetaTransSnap.hpp b/include/Kyoto/Animation/CMetaTransSnap.hpp new file mode 100644 index 00000000..ab415a08 --- /dev/null +++ b/include/Kyoto/Animation/CMetaTransSnap.hpp @@ -0,0 +1,17 @@ +#ifndef _CMETATRANSSNAP +#define _CMETATRANSSNAP + +#include "Kyoto/Animation/IMetaTrans.hpp" + +class CMetaTransSnap : public IMetaTrans { +public: + EMetaTransType GetType() const override { return kMTT_Snap; } + + rstl::rc_ptr< CAnimTreeNode > VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const override; + + void WriteTransData(COutputStream&) const override; +}; + +#endif // _CMETATRANSSNAP diff --git a/include/Kyoto/Animation/CMetaTransTrans.hpp b/include/Kyoto/Animation/CMetaTransTrans.hpp new file mode 100644 index 00000000..f04ab1d0 --- /dev/null +++ b/include/Kyoto/Animation/CMetaTransTrans.hpp @@ -0,0 +1,28 @@ +#ifndef _CMETATRANSTRANS +#define _CMETATRANSTRANS + +#include "Kyoto/Animation/CCharAnimTime.hpp" +#include "Kyoto/Animation/IMetaTrans.hpp" +#include "rstl/rc_ptr.hpp" +class IMetaAnim; +class CInputStream; +class COutputStream; + +class CMetaTransTrans : public IMetaTrans { + CCharAnimTime x4_transDur; + bool xc_; + bool xd_runA; + u32 x10_flags; + +public: + explicit CMetaTransTrans(CInputStream& in); + EMetaTransType GetType() const override { return kMTT_Trans; } + + rstl::rc_ptr< CAnimTreeNode > VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const override; + + void WriteTransData(COutputStream&) const override; +}; + +#endif // _CMETATRANSTRANS diff --git a/include/Kyoto/Animation/IMetaTrans.hpp b/include/Kyoto/Animation/IMetaTrans.hpp new file mode 100644 index 00000000..257c30bc --- /dev/null +++ b/include/Kyoto/Animation/IMetaTrans.hpp @@ -0,0 +1,30 @@ +#ifndef _IMETATRANS +#define _IMETATRANS + +#include "rstl/rc_ptr.hpp" + +class CAnimTreeNode; +class CAnimSysContext; +class COutputStream; + +enum EMetaTransType { kMTT_MetaAnim, kMTT_Trans, kMTT_PhaseTrans, kMTT_Snap }; + +class IMetaTrans { +public: + virtual ~IMetaTrans() {} + virtual rstl::rc_ptr< CAnimTreeNode > + VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const = 0; + virtual EMetaTransType GetType() const = 0; + + virtual void WriteTransData(COutputStream&) const; + + rstl::rc_ptr< CAnimTreeNode > GetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) { + return VGetTransitionTree(a, b, animSys); + } +}; + +#endif // _IMETATRANS diff --git a/src/Kyoto/Animation/CMetaTransFactory.cpp b/src/Kyoto/Animation/CMetaTransFactory.cpp new file mode 100644 index 00000000..06f82799 --- /dev/null +++ b/src/Kyoto/Animation/CMetaTransFactory.cpp @@ -0,0 +1,24 @@ +#include "Kyoto/Animation/CMetaTransFactory.hpp" +#include "Kyoto/Alloc/CMemory.hpp" +#include "Kyoto/Animation/CMetaTransMetaAnim.hpp" +#include "Kyoto/Animation/CMetaTransPhaseTrans.hpp" +#include "Kyoto/Animation/CMetaTransSnap.hpp" +#include "Kyoto/Animation/CMetaTransTrans.hpp" +#include "Kyoto/Animation/IMetaTrans.hpp" +#include "Kyoto/Streams/CInputStream.hpp" + +rstl::rc_ptr< IMetaTrans > CMetaTransFactory::CreateMetaTrans(CInputStream& in) { + EMetaTransType type = static_cast< EMetaTransType >(in.ReadLong()); + switch (type) { + case kMTT_MetaAnim: + return rs_new CMetaTransMetaAnim(in); + case kMTT_Trans: + return rs_new CMetaTransTrans(in); + case kMTT_PhaseTrans: + return rs_new CMetaTransPhaseTrans(in); + case kMTT_Snap: + return rs_new CMetaTransSnap; + default: + return rstl::rc_ptr< IMetaTrans >(); + } +} diff --git a/src/Kyoto/Animation/CMetaTransMetaAnim.cpp b/src/Kyoto/Animation/CMetaTransMetaAnim.cpp new file mode 100644 index 00000000..7dc49076 --- /dev/null +++ b/src/Kyoto/Animation/CMetaTransMetaAnim.cpp @@ -0,0 +1,15 @@ +#include "Kyoto/Animation/CMetaTransMetaAnim.hpp" +#include "Kyoto/Animation/CMetaAnimFactory.hpp" +#include "Kyoto/Animation/IMetaAnim.hpp" +#include "Kyoto/Streams/CInputStream.hpp" +#include "Kyoto/Streams/COutputStream.hpp" + +CMetaTransMetaAnim::CMetaTransMetaAnim(CInputStream& in) +: x4_metaAnim(CMetaAnimFactory::CreateMetaAnim(in)) {} + +rstl::rc_ptr< CAnimTreeNode > +CMetaTransMetaAnim::VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const {} + +void CMetaTransMetaAnim::WriteTransData(COutputStream& out) const { x4_metaAnim->PutTo(out); } diff --git a/src/Kyoto/Animation/CMetaTransPhaseTrans.cpp b/src/Kyoto/Animation/CMetaTransPhaseTrans.cpp new file mode 100644 index 00000000..3fcfd21c --- /dev/null +++ b/src/Kyoto/Animation/CMetaTransPhaseTrans.cpp @@ -0,0 +1,21 @@ +#include "Kyoto/Animation/CMetaTransPhaseTrans.hpp" +#include "Kyoto/Streams/CInputStream.hpp" +#include "Kyoto/Streams/COutputStream.hpp" + +CMetaTransPhaseTrans::CMetaTransPhaseTrans(CInputStream& in) +: x4_transDur(CCharAnimTime(in)) +, xc_(in.ReadBool()) +, xd_runA(in.ReadBool()) +, x10_flags(in.ReadLong()) {} + +rstl::rc_ptr< CAnimTreeNode > +CMetaTransPhaseTrans::VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const {} + +void CMetaTransPhaseTrans::WriteTransData(COutputStream& out) const { + x4_transDur.PutTo(out); + out.WriteChar(bool(xc_)); + out.WriteChar(bool(xd_runA)); + out.WriteLong(x10_flags); +} diff --git a/src/Kyoto/Animation/CMetaTransSnap.cpp b/src/Kyoto/Animation/CMetaTransSnap.cpp new file mode 100644 index 00000000..951aea26 --- /dev/null +++ b/src/Kyoto/Animation/CMetaTransSnap.cpp @@ -0,0 +1,10 @@ +#include "Kyoto/Animation/CMetaTransSnap.hpp" + +rstl::rc_ptr< CAnimTreeNode > +CMetaTransSnap::VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const { + return b; +} + +void CMetaTransSnap::WriteTransData(COutputStream& out) const {} diff --git a/src/Kyoto/Animation/CMetaTransTrans.cpp b/src/Kyoto/Animation/CMetaTransTrans.cpp new file mode 100644 index 00000000..35370384 --- /dev/null +++ b/src/Kyoto/Animation/CMetaTransTrans.cpp @@ -0,0 +1,21 @@ +#include "Kyoto/Animation/CMetaTransTrans.hpp" +#include "Kyoto/Streams/CInputStream.hpp" +#include "Kyoto/Streams/COutputStream.hpp" + +CMetaTransTrans::CMetaTransTrans(CInputStream& in) +: x4_transDur(CCharAnimTime(in)) +, xc_(in.ReadBool()) +, xd_runA(in.ReadBool()) +, x10_flags(in.ReadLong()) {} + +rstl::rc_ptr< CAnimTreeNode > +CMetaTransTrans::VGetTransitionTree(const rstl::ncrc_ptr< CAnimTreeNode >& a, + const rstl::ncrc_ptr< CAnimTreeNode >& b, + const CAnimSysContext& animSys) const {} + +void CMetaTransTrans::WriteTransData(COutputStream& out) const { + x4_transDur.PutTo(out); + out.WriteChar(bool(xc_)); + out.WriteChar(bool(xd_runA)); + out.WriteLong(x10_flags); +}