diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2025-07-20 17:13:35 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-20 17:13:35 -0600 |
| commit | adc7dd050f3a2fd13b85b2d799154061d196ef09 (patch) | |
| tree | a29def388d8045fa491de1c6f6ff42c1f5bfe8c9 /src/engine | |
| parent | d62d4bb90050ee195ef10996bd702b770c519eb1 (diff) | |
Add Rulesets (#494)
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/Rulesets.cpp | 48 | ||||
| -rw-r--r-- | src/engine/Rulesets.h | 11 | ||||
| -rw-r--r-- | src/engine/courses/KalimariDesert.cpp | 4 | ||||
| -rw-r--r-- | src/engine/courses/ToadsTurnpike.cpp | 5 | ||||
| -rw-r--r-- | src/engine/objects/BombKart.cpp | 5 |
5 files changed, 73 insertions, 0 deletions
diff --git a/src/engine/Rulesets.cpp b/src/engine/Rulesets.cpp new file mode 100644 index 000000000..acdbfde2a --- /dev/null +++ b/src/engine/Rulesets.cpp @@ -0,0 +1,48 @@ +#include "Rulesets.h"
+#include "objects/Thwomp.h"
+#include "objects/Trophy.h"
+
+extern "C" {
+#include "code_800029B0.h"
+#include "memory.h"
+}
+
+// Before the game is loaded, and before vertices and displaylists are unpacked.
+// Only runs a single time at the beginning of a track.
+void Rulesets::PreLoad() {
+}
+
+// Just before BeginPlay() (used to spawn actors) is ran.
+// Only runs a single time at the beginning of a track.
+void Rulesets::PreInit() {
+ if (CVarGetInteger("gDisableItemboxes", false) == true) {
+ gPlaceItemBoxes = false;
+ } else {
+ gPlaceItemBoxes = true;
+ }
+}
+
+// Just after BeginPlay() is ran.
+// Only runs a single time at the beginning of a track.
+void Rulesets::PostInit() {
+ if (CVarGetInteger("gAllThwompsAreMarty", false) == true) {
+ for (auto object : gWorldInstance.Objects) {
+ if (OThwomp* thwomp = dynamic_cast<OThwomp*>(object)) {
+ gObjectList[thwomp->_objectIndex].unk_0D5 = OThwomp::States::JAILED; // Sets all the thwomp behaviour flags to marty
+ thwomp->State = OThwomp::States::JAILED;
+ }
+ }
+ }
+
+ if (CVarGetInteger("gAllBombKartsChase", false) == true) {
+ for (auto object : gWorldInstance.Objects) {
+ if (OBombKart* kart = dynamic_cast<OBombKart*>(object)) {
+ kart->State = OBombKart::States::CHASE;
+ }
+ }
+ }
+
+ if (CVarGetInteger("gGoFish", false) == true) {
+ gWorldInstance.AddObject(new OTrophy(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH));
+ }
+}
diff --git a/src/engine/Rulesets.h b/src/engine/Rulesets.h new file mode 100644 index 000000000..26e67b594 --- /dev/null +++ b/src/engine/Rulesets.h @@ -0,0 +1,11 @@ +#pragma once
+
+#include <libultraship.h>
+#include "World.h"
+
+class Rulesets {
+public:
+ virtual void PreLoad();
+ virtual void PreInit();
+ virtual void PostInit();
+};
diff --git a/src/engine/courses/KalimariDesert.cpp b/src/engine/courses/KalimariDesert.cpp index 369828581..3ecb3f03d 100644 --- a/src/engine/courses/KalimariDesert.cpp +++ b/src/engine/courses/KalimariDesert.cpp @@ -192,6 +192,10 @@ void KalimariDesert::BeginPlay() { s32 centerWaypoint = 160; + _numTrains = CVarGetInteger("gNumTrains", 2); + _numCarriages = CVarGetInteger("gNumCarriages", 5); + _tender = (ATrain::TenderStatus)CVarGetInteger("gHasTender", 1); + // Spawn two trains for (size_t i = 0; i < _numTrains; ++i) { uint32_t waypoint = CalculateWaypointDistribution(i, _numTrains, gVehicle2DPathLength, centerWaypoint); diff --git a/src/engine/courses/ToadsTurnpike.cpp b/src/engine/courses/ToadsTurnpike.cpp index 0d79cd942..c9f8b9918 100644 --- a/src/engine/courses/ToadsTurnpike.cpp +++ b/src/engine/courses/ToadsTurnpike.cpp @@ -176,6 +176,11 @@ void ToadsTurnpike::BeginPlay() { a /= 2; // Normally vehicle logic is only ran every 2 frames. This slows the vehicles down to match. b /= 2; + _numTrucks = CVarGetInteger("gNumTrucks", 7); + _numBuses = CVarGetInteger("gNumBuses", 7); + _numTankerTrucks = CVarGetInteger("gNumTankerTrucks", 7); + _numCars = CVarGetInteger("gNumCars", 7); + // Other game modes spawn seven of each vehicle if (gModeSelection == TIME_TRIALS) { _numTrucks = 8; diff --git a/src/engine/objects/BombKart.cpp b/src/engine/objects/BombKart.cpp index a9dd3a22e..78d4762a9 100644 --- a/src/engine/objects/BombKart.cpp +++ b/src/engine/objects/BombKart.cpp @@ -253,6 +253,11 @@ void OBombKart::Tick() { } break; case States::CHASE: + // Prevents chasing during race staging + if (gRaceState != RACE_IN_PROGRESS) { + return; + } + if (!_target) { _target = OBombKart::FindTarget(); } else { |
