summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2012-03-23 04:21:35 +0100
committerTreeki <treeki@gmail.com>2012-03-23 04:21:35 +0100
commit393be37f168ba7bca4d471993aaf0899a4afc16b (patch)
tree410d3fdebc599d3e43eb6e3f6038fb6d099581eb
parent6739d68df74fabb94f1525f5f6ae8ff3dfe0d907 (diff)
downloadkamek-393be37f168ba7bca4d471993aaf0899a4afc16b.tar.gz
kamek-393be37f168ba7bca4d471993aaf0899a4afc16b.zip
a really hacky fix for the clown crash
-rw-r--r--kamek_pal.x2
-rw-r--r--src/bossPlayerClown.cpp8
-rw-r--r--src/challengeStar.cpp2
3 files changed, 11 insertions, 1 deletions
diff --git a/kamek_pal.x b/kamek_pal.x
index 1b35358..a8bc58a 100644
--- a/kamek_pal.x
+++ b/kamek_pal.x
@@ -16,6 +16,8 @@ SECTIONS {
PClownCarDraw = 0x80810B90;
PClownCarMove = 0x80811E70;
+ sAllocatorFunc__FrmHeap = 0x8042E5B0;
+
/* Back to other shit I didn't want to scroll for */
diff --git a/src/bossPlayerClown.cpp b/src/bossPlayerClown.cpp
index eb67db3..522314e 100644
--- a/src/bossPlayerClown.cpp
+++ b/src/bossPlayerClown.cpp
@@ -126,7 +126,15 @@ extern "C" void __dt__Q23m3d5mdl_cFv(m3d::mdl_c *mdl, u32 willDelete);
extern "C" void __dt__16mHeapAllocator_cFv(mHeapAllocator_c *al, u32 willDelete);
extern "C" void __dt__20daJrClownForPlayer_cFv(dEn_c *clown, u32 willDelete);
+extern "C" u32 sAllocatorFunc__FrmHeap;
+
void newClownDtor(dEn_c *clown, u32 willDelete) {
+ void **al = (void **)(((u32)clown) + 0x524);
+ if (*al != &sAllocatorFunc__FrmHeap) {
+ OSReport("oh no! bad allocator %p\n", *al);
+ *al = &sAllocatorFunc__FrmHeap;
+ }
+
__dt__Q23m3d5mdl_cFv(cModel, 0xFFFFFFFF);
__dt__16mHeapAllocator_cFv(cAllocator, 0xFFFFFFFF);
__dt__20daJrClownForPlayer_cFv(clown, willDelete);
diff --git a/src/challengeStar.cpp b/src/challengeStar.cpp
index 03b4089..ec863f1 100644
--- a/src/challengeStar.cpp
+++ b/src/challengeStar.cpp
@@ -72,7 +72,7 @@ dChallengeStar *dChallengeStar::build() {
int dChallengeStar::onCreate() {
char die = this->settings & 0xF;
- if (GetSpecificPlayerActor(die) == 0) { this->Delete(1); return; }
+ if (GetSpecificPlayerActor(die) == 0) { this->Delete(1); return 2; }
GlobalStarsCollected++;