ref: 94e576f035e0fbb5aa8843e22a0d65d3cba7a909
parent: 1b95f8b2b540d45efb57b129840115b2aed6f666
author: Snesrev <snesrev@protonmail.com>
date: Fri Sep 30 11:00:46 EDT 2022
Fix broken Zoras in Shallow Water in Misery Mire (#126)
--- a/config.c
+++ b/config.c
@@ -320,6 +320,8 @@
return ParseBoolBit(value, &g_config.features0, kFeatures0_CarryMoreRupees);
} else if (StringEqualsNoCase(key, "MiscBugFixes")) {
return ParseBoolBit(value, &g_config.features0, kFeatures0_MiscBugFixes);
+ } else if (StringEqualsNoCase(key, "GameChangingBugFixes")) {
+ return ParseBoolBit(value, &g_config.features0, kFeatures0_GameChangingBugFixes);
} else if (StringEqualsNoCase(key, "CancelBirdTravel")) {
return ParseBoolBit(value, &g_config.features0, kFeatures0_CancelBirdTravel);
}
--- a/features.h
+++ b/features.h
@@ -40,6 +40,8 @@
kFeatures0_MiscBugFixes = 4096,
kFeatures0_CancelBirdTravel = 8192,
+
+ kFeatures0_GameChangingBugFixes = 16384,
};
#define enhanced_features0 (*(uint32*)(g_ram+0x64c))
--- a/sprite_main.c
+++ b/sprite_main.c
@@ -2959,14 +2959,28 @@
case 0: // choose surfacing location
sprite_ignore_projectile[k] = sprite_delay_main[k];
if (!sprite_delay_main[k]) {
- Sprite_SetX(k, (sprite_A[k] | sprite_B[k] << 8) + kSprite_Zora_Surface_XY[GetRandomNumber() & 7]);
- Sprite_SetY(k, (sprite_C[k] | sprite_head_dir[k] << 8) + kSprite_Zora_Surface_XY[GetRandomNumber() & 7]);
+ int org_x = (sprite_A[k] | sprite_B[k] << 8);
+ int org_y = (sprite_C[k] | sprite_head_dir[k] << 8);
+ Sprite_SetX(k, org_x + kSprite_Zora_Surface_XY[GetRandomNumber() & 7]);
+ Sprite_SetY(k, org_y + kSprite_Zora_Surface_XY[GetRandomNumber() & 7]);
Sprite_Get16BitCoords(k);
Sprite_CheckTileCollision(k);
- if (sprite_tiletype == 8) {
+ if (sprite_tiletype == 8) spawn_anyway: {
sprite_delay_main[k] = 127;
sprite_ai_state[k]++;
sprite_flags3[k] |= 0x40;
+ } else {
+ // In Misery Mire some Zoras are placed in shallow water so they can't spawn
+ // This fixes so they will be able to spawn in shallow water after a delay.
+ if (enhanced_features0 & kFeatures0_GameChangingBugFixes) {
+ if (sprite_tiletype == 9 && sprite_delay_aux2[k] == 1)
+ goto spawn_anyway;
+ Sprite_SetX(k, org_x);
+ Sprite_SetY(k, org_y);
+ sprite_ignore_projectile[k] = 1;
+ if (sprite_delay_aux2[k] == 0)
+ sprite_delay_aux2[k] = 32;
+ }
}
}
break;
--- a/zelda3.ini
+++ b/zelda3.ini
@@ -74,10 +74,13 @@
CarryMoreRupees = 0
# Enable various zelda bug fixes
-MiscBugFixes = 1
+MiscBugFixes = 0
+# Enable some more advanced zelda bugfixes that change game behavior
+GameChangingBugFixes = 0
+
# Allow bird travel to be cancelled by hitting the X key
-CancelBirdTravel = 1
+CancelBirdTravel = 0
[KeyMap]
# Change what keyboard keys map to the joypad