Implement always-allowed medallions

This commit is contained in:
2021-06-24 12:23:55 -07:00
parent bf953e7953
commit ea72d70b1b
3 changed files with 65 additions and 47 deletions

View File

@@ -71,15 +71,15 @@ macro DrawBombosPlatform(roomX, roomY, quadX, quadY)
endMacro
IcePalaceBombosSE:
LDA AllowSwordlessMedallionUse : BNE + : RTL : +
LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
%DrawBombosPlatform(14, 18, 1, 1)
RTL
IcePalaceBombosSW:
LDA AllowSwordlessMedallionUse : BNE + : RTL : +
LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
%DrawBombosPlatform(14, 18, 0, 1)
RTL
IcePalaceBombosNE:
LDA AllowSwordlessMedallionUse : BNE + : RTL : +
LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
%DrawBombosPlatform(14, 18, 1, 0)
RTL
@@ -165,4 +165,4 @@ RoomCallbackTable:
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Fx
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 10x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 11x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 12x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 12x

View File

@@ -180,50 +180,68 @@ GetSmithSword:
JML.l Smithy_AlreadyGotSword
;================================================================================
CheckMedallionSword:
PHB : PHX : PHY
LDA.l AllowSwordlessMedallionUse : BNE +++ : JMP + : +++
LDA $1B : BEQ .outdoors
.indoors
REP #$20 ; set 16-bit accumulator
LDA $A0 ; load room ID
CMP.w #$000E : BNE ++ : .freezor1
LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord
LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord
JMP .permit
++ : CMP.w #$007E : BNE ++ : .freezor2
LDA $22 : AND.w #$01FF : CMP.w #112-8 : !BLT .normal : CMP.w #112+32-8 : !BGE .normal ; check x-coord
LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord
JMP .permit
++ : CMP.w #$00DE : BNE ++ : .kholdstare
LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord
LDA $20 : AND.w #$01FF : CMP.w #144-22 : !BLT .normal : CMP.w #144+32-22 : !BGE .normal ; check y-coord
BRA .permit
++ : .normal
SEP #$20 ; set 8-bit accumulator
LDA.l AllowSwordlessMedallionUse : BEQ .check_sword
CMP #$01 : BEQ .check_pad
LDA.b #$02 ; Pretend we have master sword
RTL
.check_sword
LDA $7EF359
RTL
.check_pad
PHB : PHX : PHY
LDA $1B : BEQ .outdoors
.indoors
REP #$20 ; set 16-bit accumulator
LDA $A0 ; load room ID
CMP.w #$000E : BNE + ; freezor1
LDA $22 : AND.w #$01FF ; check x-coord
CMP.w #368-8 : !BLT .normal
CMP.w #368+32-8 : !BGE .normal
LDA $20 : AND.w #$01FF ; check y-coord
CMP.w #400-22 : !BLT .normal
CMP.w #400+32-22 : !BGE .normal
JMP .permit
+ : CMP.w #$007E : BNE + ; freezor2
LDA $22 : AND.w #$01FF ; check x-coord
CMP.w #112-8 : !BLT .normal
CMP.w #112+32-8 : !BGE .normal
LDA $20 : AND.w #$01FF ; check y-coord
CMP.w #400-22 : !BLT .normal
CMP.w #400+32-22 : !BGE .normal
JMP .permit
+ : CMP.w #$00DE : BNE + ; kholdstare
LDA $22 : AND.w #$01FF ; check x-coord
CMP.w #368-8 : !BLT .normal
CMP.w #368+32-8 : !BGE .normal
LDA $20 : AND.w #$01FF ; check y-coord
CMP.w #144-22 : !BLT .normal
CMP.w #144+32-22 : !BGE .normal
BRA .permit
+ : .normal
SEP #$20 ; set 8-bit accumulator
BRA .done
.outdoors
LDA $8A : CMP.b #$70 : BNE +
LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done
LDA $7EF2F0 : AND.b #$20 : BNE .done
LDA.b #$08 : PHA : PLB ; set data bank to $08
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire
BRA .done
.outdoors
LDA $8A : CMP.b #$70 : BNE ++
LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE +
LDA $7EF2F0 : AND.b #$20 : BNE +
LDA.b #$08 : PHA : PLB ; set data bank to $08
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire
BRA +
++ : CMP.b #$47 : BNE ++
LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE +
LDA $7EF2C7 : AND.b #$20 : BNE +
LDA.b #$08 : PHA : PLB ; set data bank to $08
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock
++
.done
+
PLY : PLX : PLB
LDA $7EF359
RTL
+ : CMP.b #$47 : BNE +
LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done
LDA $7EF2C7 : AND.b #$20 : BNE .done
LDA.b #$08 : PHA : PLB ; set data bank to $08
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock
+
.done
PLY : PLX : PLB
LDA $7EF359
RTL
.permit
SEP #$20 ; set 8-bit accumulator
PLY : PLX : PLB
LDA.b #$02 ; Pretend we have master sword
RTL
SEP #$20 ; set 8-bit accumulator
PLY : PLX : PLB
LDA.b #$02 ; Pretend we have master sword
RTL
.medallion_type
db #$0F, #$10, #$11
;================================================================================

View File

@@ -171,7 +171,7 @@ db #$00 ; #$00 = Off (default) - #$01 = On
;--------------------------------------------------------------------------------
org $308041 ; PC 0x180041
AllowSwordlessMedallionUse:
db #$00 ; #$00 = Off (default) - #$01 = Medallion Pads - #$02 = Always (Not Implemented)
db #$00 ; #$00 = Off (default) - #$01 = Medallion Pads - #$02 = Always
;--------------------------------------------------------------------------------
org $308042 ; PC 0x180042
PermitSQFromBosses: