summaryrefslogtreecommitdiff
path: root/src/engine/objects/Thwomp.h
diff options
context:
space:
mode:
authorMegaMech <7255464+MegaMech@users.noreply.github.com>2024-12-11 20:58:18 -0700
committerMegaMech <7255464+MegaMech@users.noreply.github.com>2024-12-11 20:58:18 -0700
commit95b8cca50025f7fa10e47ca24ac5f71f9813a2e3 (patch)
treedcb7bc04eb38b8f98b6348f4b15a46124aa51faf /src/engine/objects/Thwomp.h
parenta4890f9dfcc993f3001d491395294f6836cdc0dc (diff)
Reimplementing objects
Diffstat (limited to 'src/engine/objects/Thwomp.h')
-rw-r--r--src/engine/objects/Thwomp.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/engine/objects/Thwomp.h b/src/engine/objects/Thwomp.h
new file mode 100644
index 000000000..517d2972d
--- /dev/null
+++ b/src/engine/objects/Thwomp.h
@@ -0,0 +1,108 @@
+#pragma once
+
+#include <libultraship.h>
+#include <vector>
+
+extern "C" {
+#include "macros.h"
+#include "main.h"
+#include "vehicles.h"
+#include "waypoints.h"
+#include "common_structs.h"
+#include "objects.h"
+#include "camera.h"
+#include "some_data.h"
+}
+
+//! @todo Make shadow size bigger if thwomp is scaled up
+//! @todo make adjustable properties for squishSize and boundingBoxSize
+
+/**
+ * Thwomp GameObject
+ *
+ * The game automatically places the actor on the ground so you do not need to provide a Y coordinate value.
+ *
+ * @arg direction the rotational direction the thwomp is facing.
+ * @arg behaviour the behaviour of the thwomp, uses values 1-6.
+ * @arg primAlpha unknown
+ * @arg boundingBoxSize optional. The size of the bounding box for the thwomp. Default value is 12
+ */
+class OThwomp {
+private:
+ enum States : uint16_t {
+ DISABLED,
+ STATIONARY,
+ MOVE_AND_ROTATE,
+ MOVE_FAR, // Requires enough space to work
+ STATIONARY_FAST,
+ SLIDE, // Moves sideways left / right
+ JAILED // Has no collision
+ };
+
+public:
+ States State = States::DISABLED;
+
+ explicit OThwomp(s32 i, s16 x, s16 z, s16 direction, f32 scale, s16 behaviour, s16 primAlpha, u16 boundingBoxSize);
+
+ void Tick();
+ void SetVisibility(s32 objectIndex);
+ void func_80080B28(s32 objectIndex, s32 playerId);
+ void Draw(s32 playerId);
+ void DrawModel(s32);
+ void TranslateThwompLights();
+ void ThwompLights(s32 objectIndex);
+ void func_80080DE4(s32 arg0);
+ s32 func_8007F75C(s32 playerId);
+ void func_8007F8D8();
+ void SetPlayerCrushedEffect(s32 objectIndex, Player* player);
+ void func_80080A4C(s32 objectIndex, s32 cameraPlayerId);
+ void func_8007542C(s32 arg0);
+ void func_80074FD8(s32 objectIndex);
+ void AddParticles(s32 arg0);
+
+ s32 func_8007E50C(s32 objectIndex, Player* player, Camera* camera);
+ s32 func_8007E59C(s32 objectIndex);
+
+ void func_8007F544(s32 objectIndex);
+ void func_8007EFBC(s32 objectIndex);
+ void func_8007F280(s32 objectIndex);
+
+ void func_8007F660(s32 objectIndex, s32 arg1, s32 arg2);
+ void func_80080E8C(s32 objectIndex1, s32 objectIndex2, s32 arg2);
+ void func_8007F6C4(s32 objectIndex, s32 playerId);
+
+ void func_800810F4(s32 objectIndex);
+ void func_80081080(s32 objectIndex);
+
+ void StationaryBehaviour(s32 objectIndex);
+ void func_8007EC30(s32 objectIndex);
+
+ void MoveAndRotateBehaviour(s32 objectIndex);
+ void func_8007EE5C(s32 objectIndex);
+
+ void MoveFarBehaviour(s32 objectIndex);
+ void func_8007FA08(s32 objectIndex);
+ void func_8007FF5C(s32 objectIndex);
+ void func_8007FB48(s32 objectIndex);
+ void func_8007FEA4(s32 objectIndex);
+
+ void StationaryFastBehaviour(s32 objectIndex);
+ void func_80080078(s32 objectIndex);
+
+ void JailedBehaviour(s32 objectIndex);
+ void func_800802C0(s32 objectIndex);
+
+ void SlidingBehaviour(s32 objectIndex);
+ void func_80080524(s32 objectIndex);
+ void func_8008085C(s32 objectIndex);
+ void func_800806BC(s32 objectIndex);
+ void func_8008078C(s32 objectIndex);
+
+ void func_8007E63C(s32 objectIndex);
+private:
+ s32 _idx;
+ s16 _faceDirection;
+ //! @todo Write this better. This effects the squish size and the bounding box size.
+ // We should probably return to the programmer the pointer to the actor so they can do thwomp->squishSize = value.
+ u16 _boundingBoxSize;
+};