shithub: zelda3

Download patch

ref: 3ef8be9e8ddc7b5acefbf98e5264a8547f7ef090
parent: ea788824b2a4c1f3d1768c0fa7d2b2451da61227
author: Snesrev <snesrev@protonmail.com>
date: Mon Oct 17 19:38:26 EDT 2022

Avoid invalid memory access when walking outside of map

--- a/overworld.c
+++ b/overworld.c
@@ -813,14 +813,14 @@
   y >>= 1;
   Dungeon_ResetTorchBackgroundAndPlayerInner();
   map16_load_src_off &= kSwitchAreaTab0[y];
-  uint16 pushed = current_area_of_player + kSwitchAreaTab3[y];
-  map16_load_src_off += kSwitchAreaTab1[(y * 128 | pushed) >> 1];
+  int pushed = ((current_area_of_player + kSwitchAreaTab3[y]) >> 1) & 0x3f;
+  map16_load_src_off += kSwitchAreaTab1[y * 64 + pushed];
 
   uint8 old_screen = overworld_screen_index;
   if (old_screen == 0x2a)
     sound_effect_ambient = 0x80;
 
-  uint8 new_area = kOverworldAreaHeads[pushed >> 1] | savegame_is_darkworld;
+  uint8 new_area = kOverworldAreaHeads[pushed] | savegame_is_darkworld;
   BYTE(overworld_screen_index) = new_area;
   BYTE(overworld_area_index) = new_area;
   if (!savegame_is_darkworld || link_item_moon_pearl) {