Implement always-allowed medallions

This commit is contained in:
2021-06-24 12:23:55 -07:00
parent 04a07025ef
commit 3548a0bbf5
3 changed files with 74 additions and 56 deletions

View File

@@ -71,15 +71,15 @@ macro DrawBombosPlatform(roomX, roomY, quadX, quadY)
endMacro endMacro
IcePalaceBombosSE: IcePalaceBombosSE:
LDA AllowSwordlessMedallionUse : BNE + : RTL : + LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
%DrawBombosPlatform(14, 18, 1, 1) %DrawBombosPlatform(14, 18, 1, 1)
RTL RTL
IcePalaceBombosSW: IcePalaceBombosSW:
LDA AllowSwordlessMedallionUse : BNE + : RTL : + LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
%DrawBombosPlatform(14, 18, 0, 1) %DrawBombosPlatform(14, 18, 0, 1)
RTL RTL
IcePalaceBombosNE: IcePalaceBombosNE:
LDA AllowSwordlessMedallionUse : BNE + : RTL : + LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
%DrawBombosPlatform(14, 18, 1, 0) %DrawBombosPlatform(14, 18, 1, 0)
RTL 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 ; 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 ; 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 ; 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

@@ -6,11 +6,11 @@
;GetFairySword: ;GetFairySword:
; CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert single fighter sword to low id one ; CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert single fighter sword to low id one
; CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert safe master sword to normal one ; CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert safe master sword to normal one
; CMP #$04 : !BLT + : JML.l PyramidFairy_BRANCH_IOTA : + ; for any sword, incl newer ; CMP #$04 : !BLT + : JML.l PyramidFairy_BRANCH_IOTA : + ; for any sword, incl newer
; JSL ItemCheck_FairySword : BEQ + : JML.l PyramidFairy_BRANCH_IOTA : + ; skip if we already flagged getting this ; JSL ItemCheck_FairySword : BEQ + : JML.l PyramidFairy_BRANCH_IOTA : + ; skip if we already flagged getting this
; JSL ItemSet_FairySword ; mark as got ; JSL ItemSet_FairySword ; mark as got
; LDA FairySword : STA $0DC0, X ; whichever sword ; LDA FairySword : STA $0DC0, X ; whichever sword
; LDA.b #$05 : STA $0EB0, X ; something we overwrote, documentation unclear on purpose ; LDA.b #$05 : STA $0EB0, X ; something we overwrote, documentation unclear on purpose
; ;
;JML.l PyramidFairy_BRANCH_GAMMA ;JML.l PyramidFairy_BRANCH_GAMMA
;================================================================================ ;================================================================================
@@ -146,16 +146,16 @@ GetSmithSword:
REP #$20 : LDA $7EF360 : CMP #$000A : SEP #$20 : !BGE .buy REP #$20 : LDA $7EF360 : CMP #$000A : SEP #$20 : !BGE .buy
.cant_afford .cant_afford
REP #$10 REP #$10
LDA.b #$7A LDA.b #$7A
LDY.b #$01 LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional JSL.l Sprite_ShowMessageUnconditional
LDA.b #$3C : STA $012E ; error sound LDA.b #$3C : STA $012E ; error sound
SEP #$10 SEP #$10
BRA .done BRA .done
.buy .buy
LDA.l SmithItem : TAY LDA.l SmithItem : TAY
STZ $02E9 ; Item from NPC STZ $02E9 ; Item from NPC
PHX : JSL Link_ReceiveItem : PLX PHX : JSL Link_ReceiveItem : PLX
REP #$20 : LDA $7EF360 : !SUB.w #$000A : STA $7EF360 : SEP #$20 ; Take 10 rupees REP #$20 : LDA $7EF360 : !SUB.w #$000A : STA $7EF360 : SEP #$20 ; Take 10 rupees
@@ -165,50 +165,68 @@ GetSmithSword:
JML.l Smithy_AlreadyGotSword JML.l Smithy_AlreadyGotSword
;================================================================================ ;================================================================================
CheckMedallionSword: CheckMedallionSword:
PHB : PHX : PHY LDA.l AllowSwordlessMedallionUse : BEQ .check_sword
LDA.l AllowSwordlessMedallionUse : BNE +++ : JMP + : +++ CMP #$01 : BEQ .check_pad
LDA $1B : BEQ .outdoors LDA.b #$02 ; Pretend we have master sword
.indoors RTL
REP #$20 ; set 16-bit accumulator .check_sword
LDA $A0 ; load room ID LDA $7EF359
CMP.w #$000E : BNE ++ : .freezor1 RTL
LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord .check_pad
LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord PHB : PHX : PHY
JMP .permit LDA $1B : BEQ .outdoors
++ : CMP.w #$007E : BNE ++ : .freezor2 .indoors
LDA $22 : AND.w #$01FF : CMP.w #112-8 : !BLT .normal : CMP.w #112+32-8 : !BGE .normal ; check x-coord REP #$20 ; set 16-bit accumulator
LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord LDA $A0 ; load room ID
JMP .permit CMP.w #$000E : BNE + ; freezor1
++ : CMP.w #$00DE : BNE ++ : .kholdstare LDA $22 : AND.w #$01FF ; check x-coord
LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord CMP.w #368-8 : !BLT .normal
LDA $20 : AND.w #$01FF : CMP.w #144-22 : !BLT .normal : CMP.w #144+32-22 : !BGE .normal ; check y-coord CMP.w #368+32-8 : !BGE .normal
BRA .permit LDA $20 : AND.w #$01FF ; check y-coord
++ : .normal CMP.w #400-22 : !BLT .normal
SEP #$20 ; set 8-bit accumulator 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 BRA .done
.outdoors + : CMP.b #$47 : BNE +
LDA $8A : CMP.b #$70 : BNE ++ LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done
LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE + LDA $7EF2C7 : AND.b #$20 : BNE .done
LDA $7EF2F0 : AND.b #$20 : BNE + LDA.b #$08 : PHA : PLB ; set data bank to $08
LDA.b #$08 : PHA : PLB ; set data bank to $08 LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire +
BRA + .done
++ : CMP.b #$47 : BNE ++ PLY : PLX : PLB
LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE + LDA $7EF359
LDA $7EF2C7 : AND.b #$20 : BNE + RTL
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 .permit
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
PLY : PLX : PLB PLY : PLX : PLB
LDA.b #$02 ; Pretend we have master sword LDA.b #$02 ; Pretend we have master sword
RTL RTL
.medallion_type .medallion_type
db #$0F, #$10, #$11 db #$0F, #$10, #$11
;================================================================================ ;================================================================================

View File

@@ -167,7 +167,7 @@ db #$00 ; #$00 = Off (default) - #$01 = On
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $308041 ; PC 0x180041 org $308041 ; PC 0x180041
AllowSwordlessMedallionUse: 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 org $308042 ; PC 0x180042
PermitSQFromBosses: PermitSQFromBosses: