summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPepe20129 <72659707+Pepe20129@users.noreply.github.com>2026-09-06 17:01:46 +0200
committerGitHub <noreply@github.com>2026-09-06 15:01:46 +0000
commit61523391e29be22c85d6efbabc0c08820783f0a5 (patch)
treebcaf8f7326aa5ee3f3b3def1a5a8ec309cb806a4
parent17a4c2cf89a9b34c8b1b6db9bf17cd46ddb3c93b (diff)
Fix flare dancer crash (#7122)HEADdevelop
Expand the main `GfxPool` buffers to 1MiB
-rw-r--r--soh/include/z64.h13
-rw-r--r--soh/soh/Enhancements/ExtraModes/EnemyRandomizer.cpp2
2 files changed, 8 insertions, 7 deletions
diff --git a/soh/include/z64.h b/soh/include/z64.h
index 254b7e966..e47f8386e 100644
--- a/soh/include/z64.h
+++ b/soh/include/z64.h
@@ -93,15 +93,16 @@ typedef struct {
/* 0x14 */ s16 data[REG_GROUPS * REG_PER_GROUP]; // 0xAE0 entries
} GameInfo; // size = 0x15D4
+// Changed the main buffers to be 1MiB to make them basically impossible to overflow
typedef struct {
/* 0x00000 */ u16 headMagic; // GFXPOOL_HEAD_MAGIC
- /* 0x00008 */ Gfx polyOpaBuffer[0x2FC0];
- /* 0x0BF08 */ Gfx polyXluBuffer[0x1000];
- /* 0x0FF08 */ Gfx overlayBuffer[0x800];
- /* 0x11F08 */ Gfx workBuffer[0x100];
- /* 0x11308 */ Gfx unusedBuffer[0x40];
+ /* 0x00008 */ Gfx polyOpaBuffer[1 * 1024 * 1024]; // original size was 0x17E0
+ /* 0x0BF08 */ Gfx polyXluBuffer[1 * 1024 * 1024]; // original size was 0x800
+ /* 0x0FF08 */ Gfx overlayBuffer[1 * 1024 * 1024]; // original size was 0x400
+ /* 0x11F08 */ Gfx workBuffer[0x80];
+ /* 0x11308 */ Gfx unusedBuffer[0x20];
/* 0x12408 */ u16 tailMagic; // GFXPOOL_TAIL_MAGIC
-} GfxPool; // size = 0x24820
+} GfxPool; // size = 0x12410
typedef struct {
/* 0x0000 */ u32 size;
diff --git a/soh/soh/Enhancements/ExtraModes/EnemyRandomizer.cpp b/soh/soh/Enhancements/ExtraModes/EnemyRandomizer.cpp
index 07341235f..98f1304fe 100644
--- a/soh/soh/Enhancements/ExtraModes/EnemyRandomizer.cpp
+++ b/soh/soh/Enhancements/ExtraModes/EnemyRandomizer.cpp
@@ -64,7 +64,7 @@ static EnemyEntry randomizedEnemySpawnTable[] = {
{ CVAR_ENHANCEMENT("RandomizedEnemyList.Dinolfos"), "Dinolfos", ACTOR_EN_ZF, -2 }, // Dinolfos
{ CVAR_ENHANCEMENT("RandomizedEnemyList.Dodongo"), "Dodongo", ACTOR_EN_DODONGO, -1 }, // Dodongo
{ CVAR_ENHANCEMENT("RandomizedEnemyList.FireKeese"), "Fire Keese", ACTOR_EN_FIREFLY, 1 }, // Fire Keese
- // { CVAR_ENHANCEMENT("RandomizedEnemyList.FlareDancer"), "Flare Dancer", ACTOR_EN_FD, 0 }, // Flare Dancer (possible cause of crashes because of spawning flame actors on sloped ground or overloading)
+ { CVAR_ENHANCEMENT("RandomizedEnemyList.FlareDancer"), "Flare Dancer", ACTOR_EN_FD, 0 }, // Flare Dancer
{ CVAR_ENHANCEMENT("RandomizedEnemyList.FloorTile"), "Floor Tile", ACTOR_EN_YUKABYUN, 0 }, // Flying Floor Tile
{ CVAR_ENHANCEMENT("RandomizedEnemyList.Floormaster"), "Floormaster", ACTOR_EN_FLOORMAS, 0 }, // Floormaster
{ CVAR_ENHANCEMENT("RandomizedEnemyList.FlyingPeahat"), "Flying Peahat", ACTOR_EN_PEEHAT, -1 }, // Flying Peahat (big grounded, doesn't spawn larva)