1diff --git a/third-party/c/zbanks-alttp/ap_snes.h b/third-party/c/zbanks-alttp/ap_snes.h 2index 7080b203..f1418962 100644 3--- a/third-party/c/zbanks-alttp/ap_snes.h 4+++ b/third-party/c/zbanks-alttp/ap_snes.h 5@@ -753,7 +753,24 @@ static const struct ap_sprite_subtype ap_sprite_subtypes[] = { 6 { .type = 0x73, .subtype = 0x0200, .attrs = SPRITE_ATTR_BLKS }, 7 8 // Mini Moldorm Cave Guy 9- { .type = 0xBB, .subtype = 0x0200, .only_dungeon_room = 0x123, .attrs = SPRITE_ATTR_NODE | SPRITE_ATTR_TALK }, 10+ // Carried patch (jev): the general entry for type 0xBB (above, 11+ // SPRITE_ATTR_SUBT | SPRITE_ATTR_BLKF | SPRITE_ATTR_TALK) has BLKF; this 12+ // per-room override drops it, unlike every other TALK|NODE override that 13+ // keeps its blocking flag when the real sprite is solid (Sahasrahla, 14+ // .type = 0x16 above, keeps BLKF; uncle, .type = 0x73 .only_dungeon_room 15+ // = 0x55, correctly has none - he is lying down, not solid). Without 16+ // BLKF the pathfinder's obstacle cost in ap_pathfind_local (the 17+ // SPRITE_ATTR_BLKF | SPRITE_ATTR_BLKS check) never sees this sprite at 18+ // all, so A* finds a path straight through its real hitbox that the 19+ // engine's own collision then refuses - Link pinned one pixel from the 20+ // hitbox, pressing Down forever ("Stuck Link Detected! 5a88,2447 en 21+ // route to 5a78,24c0", room $0123's door D 0x80). Evidence: 22+ // ../../research/zbanks-alttp.md, "The door D 0x80 stall in room 23+ // $0123". Restoring BLKF makes carried patch 0006's own destination/ 24+ // inside exemptions apply exactly as they do for Sahasrahla: Link's own 25+ // occupied margin cell unblocks so the search can start, the sprite's 26+ // real hitbox stays solid, and a route around it is found. 27+ { .type = 0xBB, .subtype = 0x0200, .only_dungeon_room = 0x123, .attrs = SPRITE_ATTR_NODE | SPRITE_ATTR_TALK | SPRITE_ATTR_BLKF }, 28 }; 29 30 #define DOOR_ATTR_LIST \