From 77a65fde4e940f409342c0d7aca0c46ff1c25e99 Mon Sep 17 00:00:00 2001 From: Kevin Cathcart Date: Sat, 6 Jul 2019 17:12:23 -0400 Subject: [PATCH] Add new feature to block HC exits in rain state This new feature will block off the upstairs exits in rain state, which will enable Entrance Randomizer to have a safe Standard Mode option. --- roomloading.asm | 70 ++++++++++++++++++++++++++++++++++++++++++++++++- tables.asm | 6 ++++- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/roomloading.asm b/roomloading.asm index 0bb8b7b..633a876 100644 --- a/roomloading.asm +++ b/roomloading.asm @@ -13,6 +13,8 @@ LoadRoomHook: dl IcePalaceBombosSE ; 01 dl IcePalaceBombosSW ; 02 dl IcePalaceBombosNE ; 03 + dl CastleEastEntrance ; 04 + dl CastleWestEntrance ; 05 NoCallback: RTL @@ -30,6 +32,10 @@ macro writeTile() INX #2 endmacro +macro writeTileAt(roomX, roomY, quadX, quadY) + STA.l *32+*2+*32+*2+$7E2000 +endmacro + !BOMBOS_BORDER = #$08D0 !BOMBOS_ICON_1 = #$0CCA !BOMBOS_ICON_2 = #$0CCB @@ -77,6 +83,68 @@ IcePalaceBombosNE: %DrawBombosPlatform(14, 18, 1, 0) RTL +CastleEastEntrance: + LDA $7EF3C5 : CMP.b #$02 : !BLT + : RTL : + ; only apply in rain states (0 or 1) + LDA.l BlockCastleDoorsInRain : BNE + : RTL : + + + REP #$20 ; 16 A + LDA.w #$08e1 ; square peg + %writeTileAt(11,21,0,1) + %writeTileAt(11,26,0,1) + %writeTileAt(20,21,0,1) + %writeTileAt(20,26,0,1) + INC ;horizontal rail + %writeTileAt(12,21,0,1) + %writeTileAt(13,21,0,1) + %writeTileAt(14,21,0,1) + %writeTileAt(15,21,0,1) + %writeTileAt(16,21,0,1) + %writeTileAt(17,21,0,1) + %writeTileAt(18,21,0,1) + %writeTileAt(19,21,0,1) + INC ;vertical rail + %writeTileAt(11,22,0,1) + %writeTileAt(11,23,0,1) + %writeTileAt(11,24,0,1) + %writeTileAt(11,25,0,1) + %writeTileAt(20,22,0,1) + %writeTileAt(20,23,0,1) + %writeTileAt(20,24,0,1) + %writeTileAt(20,25,0,1) + SEP #$20 ; 8 A + RTL + +CastleWestEntrance: + LDA $7EF3C5 : CMP.b #$02 : !BLT + : RTL : + ; only apply in rain states (0 or 1) + LDA.l BlockCastleDoorsInRain : BNE + : RTL : + + + REP #$20 ; 16 A + LDA.w #$08e1 ; square peg + %writeTileAt(11,21,1,1) + %writeTileAt(11,26,1,1) + %writeTileAt(20,21,1,1) + %writeTileAt(20,26,1,1) + INC ;horizontal rail + %writeTileAt(12,21,1,1) + %writeTileAt(13,21,1,1) + %writeTileAt(14,21,1,1) + %writeTileAt(15,21,1,1) + %writeTileAt(16,21,1,1) + %writeTileAt(17,21,1,1) + %writeTileAt(18,21,1,1) + %writeTileAt(19,21,1,1) + INC ;vertical rail + %writeTileAt(11,22,1,1) + %writeTileAt(11,23,1,1) + %writeTileAt(11,24,1,1) + %writeTileAt(11,25,1,1) + %writeTileAt(20,22,1,1) + %writeTileAt(20,23,1,1) + %writeTileAt(20,24,1,1) + %writeTileAt(20,25,1,1) + SEP #$20 ; 8 A + RTL + RoomCallbackTable: db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00 ; 00x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 01x @@ -84,7 +152,7 @@ RoomCallbackTable: db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 03x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 04x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 05x - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 06x + db $05, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 06x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00 ; 07x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 08x db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 09x diff --git a/tables.asm b/tables.asm index 20ed838..0e5e986 100644 --- a/tables.asm +++ b/tables.asm @@ -371,7 +371,11 @@ org $308089 ; PC 0x180089 TurtleRockAutoOpenFix: db #$00 ; #$00 - Normal, #$01 - Open TR Entrance if exiting from it ;-------------------------------------------------------------------------------- -; 0x18008A - 0x18008F (unused) +org $30808A ; PC 0x18008A +BlockCastleDoorsInRain: +db #$00 ; #$00 - Normal, $01 - Block them (Used by Entrance Rando in Standard Mode) +;-------------------------------------------------------------------------------- +; 0x18008B - 0x18008F (unused) ;-------------------------------------------------------------------------------- org $308090 ; PC 0x180090 - 0x180097 ProgressiveSwordLimit: