From 5e6032e645e347877c8c537065750fc4e3778335 Mon Sep 17 00:00:00 2001 From: mouzedrift <43358824+mouzedrift@users.noreply.github.com> Date: Tue, 9 Aug 2022 03:06:06 +0200 Subject: [PATCH] register `SwitchStateBooleanLogic` and `Elum` AO types --- Source/AliveLibAO/Factory.cpp | 4 +-- Source/AliveLibAO/PathData.hpp | 6 ++-- Source/AliveLibAO/SwitchStateBooleanLogic.cpp | 8 ++--- Source/AliveLibAO/SwitchStateBooleanLogic.hpp | 8 ++--- Source/Tools/relive_api/TlvsAO.hpp | 36 +++++++++++++++++++ Source/Tools/relive_api/TypesCollectionAO.cpp | 2 ++ 6 files changed, 51 insertions(+), 13 deletions(-) diff --git a/Source/AliveLibAO/Factory.cpp b/Source/AliveLibAO/Factory.cpp index 49ba26bf7..d90a4446f 100644 --- a/Source/AliveLibAO/Factory.cpp +++ b/Source/AliveLibAO/Factory.cpp @@ -1782,7 +1782,7 @@ EXPORT void Factory_ChimeLock_4870D0(Path_TLV* pTlv, Map* /*pMap*/, TlvItemInfoU } } -EXPORT void Factory_ElumStart_Unknown_4873D0(Path_TLV* pTlv, Map* /*pMap*/, TlvItemInfoUnion tlvOffsetLevelIdPathId, LoadMode loadMode) +EXPORT void Factory_Elum_4873D0(Path_TLV* pTlv, Map* /*pMap*/, TlvItemInfoUnion tlvOffsetLevelIdPathId, LoadMode loadMode) { if (loadMode == LoadMode::LoadResourceFromList_1 || loadMode == LoadMode::LoadResource_2) { @@ -2768,7 +2768,7 @@ const PathFunctionTable kObjectFactory = { Factory_ElectricWall_4874E0, Factory_LiftMover_487580, Factory_ChimeLock_4870D0, - Factory_ElumStart_Unknown_4873D0, + Factory_Elum_4873D0, Factory_MeatSack_483790, Factory_Scrab_4863E0, Factory_FlintLockFire_487640, diff --git a/Source/AliveLibAO/PathData.hpp b/Source/AliveLibAO/PathData.hpp index 0ac7392ff..5a90a7b6b 100644 --- a/Source/AliveLibAO/PathData.hpp +++ b/Source/AliveLibAO/PathData.hpp @@ -85,7 +85,7 @@ enum class TlvTypes : s16 Pulley_35 = 35, HoneySack_36 = 36, AbeStart_37 = 37, - ElumStart_38 = 38, + ElumStart_38 = 38, // this just controls whether the bell hammer does a sound when abe jumps against it ElumWall_40 = 40, SlingMudokon_41 = 41, @@ -115,7 +115,7 @@ enum class TlvTypes : s16 ElectricWall_67 = 67, LiftMover_68 = 68, ChimeLock_69 = 69, - + Elum_70 = 70, MeatSack_71 = 71, Scrab_72 = 72, FlintLockFire_73 = 73, @@ -148,7 +148,7 @@ enum class TlvTypes : s16 CreditsController_101 = 101, Preloader_102 = 102, LCDStatusBoard_103 = 103, - + SwitchStateBooleanLogic_104 = 104, MusicTrigger_105 = 105, LightEffect_106 = 106, SlogSpawner_107 = 107, diff --git a/Source/AliveLibAO/SwitchStateBooleanLogic.cpp b/Source/AliveLibAO/SwitchStateBooleanLogic.cpp index d2b3383cc..4a1cc6898 100644 --- a/Source/AliveLibAO/SwitchStateBooleanLogic.cpp +++ b/Source/AliveLibAO/SwitchStateBooleanLogic.cpp @@ -75,7 +75,7 @@ void SwitchStateBooleanLogic::VUpdate_436B60() s8 id_value = 0; switch (field_16_operator) { - case BooleanOperatorType::eAnd_0: + case BooleanOperatorType::eAllOn_0: if (id1_value && id2_value) { id_value = 1; @@ -86,7 +86,7 @@ void SwitchStateBooleanLogic::VUpdate_436B60() } break; - case BooleanOperatorType::eAndNot_1: + case BooleanOperatorType::e1OnAnd2Off_1: if (id1_value && !id2_value) { id_value = 1; @@ -97,7 +97,7 @@ void SwitchStateBooleanLogic::VUpdate_436B60() } break; - case BooleanOperatorType::eOr_2: + case BooleanOperatorType::e1Or2On_2: if (id1_value || id2_value) { id_value = 1; @@ -108,7 +108,7 @@ void SwitchStateBooleanLogic::VUpdate_436B60() } break; - case BooleanOperatorType::eOrNot_3: + case BooleanOperatorType::e1OnOr2Off_3: if (id1_value || !id2_value) { id_value = 1; diff --git a/Source/AliveLibAO/SwitchStateBooleanLogic.hpp b/Source/AliveLibAO/SwitchStateBooleanLogic.hpp index 2ad674aa7..80db2e219 100644 --- a/Source/AliveLibAO/SwitchStateBooleanLogic.hpp +++ b/Source/AliveLibAO/SwitchStateBooleanLogic.hpp @@ -8,10 +8,10 @@ namespace AO { enum class BooleanOperatorType : s16 { - eAnd_0 = 0, - eAndNot_1 = 1, - eOr_2 = 2, - eOrNot_3 = 3, + eAllOn_0 = 0, + e1OnAnd2Off_1 = 1, + e1Or2On_2 = 2, + e1OnOr2Off_3 = 3, }; struct Path_SwitchStateBooleanLogic final : public Path_TLV diff --git a/Source/Tools/relive_api/TlvsAO.hpp b/Source/Tools/relive_api/TlvsAO.hpp index 37fe98a82..d0daa5394 100644 --- a/Source/Tools/relive_api/TlvsAO.hpp +++ b/Source/Tools/relive_api/TlvsAO.hpp @@ -63,6 +63,7 @@ #include "../../AliveLibAO/BackgroundGlukkon.hpp" #include "../../AliveLibAO/CreditsController.hpp" #include "../../AliveLibAO/DoorFlame.hpp" +#include "../../AliveLibAO/SwitchStateBooleanLogic.hpp" #define CTOR_AO(className, objectTypeName, tlvEnumType)\ className() : TlvObjectBaseAO(sizeof(AO::className), tlvEnumType, objectTypeName, &mTlv)\ @@ -95,6 +96,11 @@ struct Path_HoneyDripTarget final : public Path_TLV // No fields }; +struct Path_Elum final : public Path_TLV +{ + // No fields +}; + struct Path_Honey final : public Path_TLV { s16 switch_id; @@ -267,6 +273,28 @@ struct Path_KillUnsavedMuds final : public ReliveAPI::TlvObjectBaseAO } }; +struct Path_SwitchStateBooleanLogic final : public ReliveAPI::TlvObjectBaseAO +{ + void AddTypes(ReliveAPI::TypesCollectionBase& types) override + { + types.AddEnum("Enum_BooleanOperatorType", + { + {AO::BooleanOperatorType::eAllOn_0, "All On"}, + {AO::BooleanOperatorType::e1OnAnd2Off_1, "1 On And 2 Off"}, + {AO::BooleanOperatorType::e1Or2On_2, "1 Or 2 On"}, + {AO::BooleanOperatorType::e1OnOr2Off_3, "1 On Or 2 Off"}, + }); + } + + CTOR_AO(Path_SwitchStateBooleanLogic, "SwitchStateBooleanLogic", AO::TlvTypes::SwitchStateBooleanLogic_104) + { + ADD("Input Switch ID 1", mTlv.field_18_input1); + ADD("Input Switch ID 2", mTlv.field_1A_input2); + ADD("Output Switch ID", mTlv.field_1C_output); + ADD("Operator", mTlv.field_1E_operator); + } +}; + struct Path_DoorFlame final : public ReliveAPI::TlvObjectBaseAO { void AddTypes(ReliveAPI::TypesCollectionBase& types) override @@ -996,6 +1024,14 @@ struct Path_ElumPathTrans final : public ReliveAPI::TlvObjectBaseAO } }; +struct Path_Elum final : public ReliveAPI::TlvObjectBaseAO +{ + CTOR_AO(Path_Elum, "Elum", AO::TlvTypes::Elum_70) + { + EMPTY_CTOR_AO(); + } +}; + struct Path_ElumStart final : public ReliveAPI::TlvObjectBaseAO { CTOR_AO(Path_ElumStart, "ElumStart", AO::TlvTypes::ElumStart_38) diff --git a/Source/Tools/relive_api/TypesCollectionAO.cpp b/Source/Tools/relive_api/TypesCollectionAO.cpp index 3737eae6e..83ca35182 100644 --- a/Source/Tools/relive_api/TypesCollectionAO.cpp +++ b/Source/Tools/relive_api/TypesCollectionAO.cpp @@ -80,6 +80,7 @@ void TypesCollectionAO::AddAOTypes() REGISTER_TYPE_AO(AOTlvs::Path_TimerTrigger); REGISTER_TYPE_AO(AOTlvs::Path_PullRingRope); REGISTER_TYPE_AO(AOTlvs::Path_MusicTrigger); + REGISTER_TYPE_AO(AOTlvs::Path_Elum); REGISTER_TYPE_AO(AOTlvs::Path_ElumPathTrans); REGISTER_TYPE_AO(AOTlvs::Path_ElumStart); REGISTER_TYPE_AO(AOTlvs::Path_ElumWall); @@ -136,6 +137,7 @@ void TypesCollectionAO::AddAOTypes() REGISTER_TYPE_AO(AOTlvs::Path_HandStone); REGISTER_TYPE_AO(AOTlvs::Path_BellsongStone); REGISTER_TYPE_AO(AOTlvs::Path_MovieStone); + REGISTER_TYPE_AO(AOTlvs::Path_SwitchStateBooleanLogic); #undef REGISTER_TYPE_AO AddEnum("Enum_LineTypes",