Generalize item-on-B approach

This commit is contained in:
2023-09-02 12:51:35 -05:00
parent 2fad63d6af
commit 5a3277dbaf
10 changed files with 168 additions and 116 deletions

View File

@@ -158,6 +158,7 @@ incsrc msu.asm
incsrc dungeonmap.asm
incsrc special_weapons.asm
incsrc variable_ganon_vulnerability.asm
incsrc item_on_b.asm
incsrc hextodec.asm
if !FEATURE_NEW_TEXT
incsrc textrenderer.asm

View File

@@ -2487,10 +2487,6 @@ org $8DE4BF ; equipment.asm@1247 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs :
JSL DrawBombInMenu
BRA + : NOP #13 : +
;--------------------------------------------------------------------------------
org $8DE5A0 ; bank_0D@15415 (LDA $7EF34D : AND.w #$00FF : STA.b $02 : ...)
JSL DrawBugNetInMenu
BRA + : NOP #8 : +
;--------------------------------------------------------------------------------
org $8DFB6A ; headsup_display@727 (CPX #$0004 : BNE .bombsNotEquipped : LDA #$0001)
JSL DrawBombInYBox
BRA + : NOP #2 : +
@@ -2524,15 +2520,8 @@ db $B2, $24, $B3, $24, $C2, $24, $C2, $64
db $B2, $28, $B3, $28, $C2, $28, $C2, $68
db $B2, $28, $B3, $28, $C2, $28, $C2, $68
; bugnet icon with B
; $8DFCB1
db $40, $3C, $41, $3C, $42, $28, $3F, $3D
warnpc $8DFC51+197 ; we only filled in 197 NOPs so don't overwrite past that
;--------------------------------------------------------------------------------
org $879CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A)
JSL CheckDetonateBomb
;--------------------------------------------------------------------------------
org $1EDCF8 ; bank_1E.asm@16086 (LDX $0202 : ...)
JSL SetBeeType
BRA + : NOP #15 : +
@@ -2549,11 +2538,12 @@ NOP #48
skip 11
.bee_valid_target
;--------------------------------------------------------------------------------
org $87F888 ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however.
Link_UseBugNetLong:
JSR Link_UseBugNet : RTL
Link_UseHammerLong:
JSR Link_UseHammer : RTL
org $87F889 ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however.
Link_UseItemLong:
PER .done-1
JMP.w ($0000)
.done
RTL
warnpc $87F890
;--------------------------------------------------------------------------------
org $86F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10)
@@ -2592,6 +2582,19 @@ NOP
org $86ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2)
JSL StoreSwordDamage
;================================================================================
; Item-On-B
;--------------------------------------------------------------------------------
org $8DEB3C
JSL DrawBIndicator : BRA + : NOP #3 : +
;--------------------------------------------------------------------------------
org $879CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A : ...)
JSL UseItem
BCC + : RTS : +
JSR $9C56
NOP #1
;--------------------------------------------------------------------------------
;================================================================================
; Text Renderer
;--------------------------------------------------------------------------------

View File

@@ -7,7 +7,8 @@
;--------------------------------------------------------------------------------
ProcessMenuButtons:
LDA.b Joy1A_New : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button
BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button
BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button
BIT.b #$80 : BNE .b_pressed ; check for P1 B-button
LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held
.sel_unheld
LDA.l HudFlag : AND.b #$60 : BEQ +
@@ -29,6 +30,25 @@ RTL
STA.l HudFlag
JSL.l MaybePlaySelectSFX
JSL.l ResetEquipment
RTL
.b_pressed
PHX
LDA.l AllowedItemOnB : BEQ .b_error
CMP.b #$FF : BEQ .skip_allow_check
CMP.w ItemCursor : BNE .b_error
.skip_allow_check
LDA.w ItemCursor : TAX
LDA.l ValidItemOnB, X : BNE .b_error
TXA : CMP.l ItemOnB : BNE .set_b
LDA.b #$00
.set_b
STA.l ItemOnB
BRA .b_done
.b_error
LDA.b #$3C : STA.w SFX2 ; error sound
.b_done
PLX
SEC
RTL
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
LDA.b #$10 : STA.w MenuBlink
@@ -84,11 +104,6 @@ RTL
STA.l FluteEquipment ; store set item
LDA.b #$20 : STA.w SFX3 ; menu select sound
BRA .captured
+ CMP.b #$0E : BNE + ; bugnet
LDA.l SpecialWeapons : CMP.b #$08 : BNE .error
LDA.l InventoryTracking+1 : EOR.b #$80 : STA.l InventoryTracking+1
LDA.b #$20 : STA.w SFX3 ; menu select sound
BRA .captured
+
CMP.b #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : +
CLC
@@ -397,8 +412,6 @@ AddYMarker:
LDA.l InventoryTracking : BIT.w #$04 : BEQ .drawNormal ; make sure we have shovel
AND.w #$03 : BNE .drawYBubble ; make sure we have one of the flutes
BRA .drawNormal
+ CMP.w #$000E : BNE + ; bugnet
LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0008 : BEQ .drawYBubble : BRA .drawNormal
+ CMP.w #$10 : BEQ .drawJarMarker
.drawNormal

98
item_on_b.asm Normal file
View File

@@ -0,0 +1,98 @@
;--------------------------------------------------------------------------------
ItemMenuLocations:
dw $11C8 ; Bow
dw $11CE ; Boomerang
dw $11D4 ; Hookshot
dw $11DA ; Bombs
dw $11E0 ; Powder / Mushroom
dw $1288 ; Fire Rod
dw $128E ; Ice Rod
dw $1294 ; Bombos
dw $129A ; Ether
dw $12A0 ; Quake
dw $1348 ; Lamp
dw $134E ; Hammer
dw $1354 ; Flute / Shovel
dw $135A ; Bug Net
dw $1360 ; Book
dw $1408 ; Bottles
dw $140E ; Somaria
dw $1414 ; Byrna
dw $141A ; Cape
dw $1420 ; Mirror
DrawBIndicator:
LDA.l ItemOnB : AND.w #$00FF : BEQ .done
DEC : ASL : TAX
LDA.l ItemMenuLocations, X : TAX
LDA.w #$3D3F
STA.w $0042, X
.done ; what we wrote over
LDA.w $0202
AND.w #$00FF
DEC
ASL
TAX
RTL
;--------------------------------------------------------------------------------
ItemHandlerLocs:
dw $A003 ; Bow
dw $A0B8 ; Boomerang
dw $AB23 ; Hookshot
dw $A139 ; Bombs
dw $FFFF ; Powder / Mushroom
dw $9EEC ; Fire Rod
dw $9EEC ; Ice Rod
dw $A55E ; Bombos
dw $A489 ; Ether
dw $A640 ; Quake
dw $A246 ; Lamp
dw $9F82 ; Hammer
dw $FFFF ; Flute / Shovel
dw $AFEE ; Bug Net
dw $A46E ; Book
dw $FFFF ; Bottles
dw $AEBB ; Somaria
dw $FFFF ; Byrna
dw $FFFF ; Cape
dw $A913 ; Mirror
ValidItemOnB:
db $FF
db $00, $00, $00, $00, $FF
db $00, $00, $00, $00, $00
db $00, $00, $FF, $00, $00
db $FF, $00, $FF, $FF, $00
UseItem:
JSL CheckDetonateBomb : BCS .normal
LDA.l ItemOnB : BEQ .normal
TAX
LDA.b $6C : BNE .prevent_swing
CPX.b #$11 : BNE .not_somaria
LDA.w $02F5 : BNE .prevent_swing
.not_somaria
LDA.l ValidItemOnB, X : BNE .normal
LDA.b $3A : ORA.b #$40 : STA.b $3A
LDA.l $8DFA35, X : STA.w $0304
CPX.b #$06 : BEQ .fire_rod
CPX.b #$07 : BNE .not_rod
.ice_rod
LDA.b #$02 : STA.w $0307
BRA .not_rod
.fire_rod
LDA.b #$01 : STA.w $0307
.not_rod
TXA : DEC : ASL : TAX
LDA.l ItemHandlerLocs+1, X : STA.b $01
LDA.l ItemHandlerLocs, X : STA.b $00
JSL Link_UseItemLong
.prevent_swing
SEC
RTL
.normal
LDA.b #$80 : TSB.b $3A
LDA.b #$01 : TSB.b $50
CLC
RTL

View File

@@ -18,6 +18,11 @@ StoreBombCount:
PLA : LDA.b #$01 : RTL
.finite
PLA : STA.l BombsEquipment
BNE .done
LDA.l ItemOnB : CMP #$04 : BNE .done
LDA.b #$00 : STA.l ItemOnB
.done
LDA.l BombsEquipment
RTL
SearchForEquippedItem:
LDA.l InfiniteBombs : BEQ +

View File

@@ -378,23 +378,6 @@ DrawBombInMenu:
.done
RTL
;--------------------------------------------------------------------------------
DrawBugNetInMenu:
LDA.l BugNetEquipment : AND.w #$00FF : BEQ .noNet
LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0008 : BNE .normal
LDA.l InventoryTracking : AND.w #$8000 : BNE .normal
LDA.w #$0000 : STA $02
LDA.w #$FCB1 : STA $04
BRA .done
.normal
LDA.w #$0001 : STA $02
LDA.w #$F751 : STA $04
BRA .done
.noNet
LDA.w #$0000 : STA $02
LDA.w #$F751 : STA $04
.done
RTL
;--------------------------------------------------------------------------------
DrawSwordInMenu:
LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .specialSword
CMP.w #$0003 : BEQ .specialSword
@@ -471,7 +454,9 @@ BeeDamageClass:
db $FF, $01, $01, $FF, $FF
;--------------------------------------------------------------------------------
CheckDetonateBomb:
LDA.l SpecialWeapons : CMP.b #$01 : BNE .not_bomb_mode
LDA.l SpecialWeapons : CMP.b #$01 : BEQ .detonate_bombs
CMP.b #$06 : BEQ .release_bee
CLC : RTL
.detonate_bombs
LDX.b #09
.check_ancilla
@@ -484,24 +469,6 @@ CheckDetonateBomb:
DEX
BPL .check_ancilla
JMP .done
.not_bomb_mode
LDA.l SpecialWeapons : CMP.b #$06 : BEQ .release_bee
CMP.b #$07 : BEQ .hammer
CMP.b #$08 : BEQ .net
BRA .done
.hammer
LDA.l HammerEquipment : BEQ .done
LDA.b $3A : ORA.b #$40 : STA.b $3A
LDA.b #$04 : STA.w $0304
JSL Link_UseHammerLong
RTL
.net
LDA.l BugNetEquipment : BEQ .done
LDA.l InventoryTracking+1 : BIT.b #$80 : BNE .done
LDA.b $3A : ORA.b #$40 : STA.b $3A
LDA.b #$07 : STA.w $0304
JSL Link_UseBugNetLong
RTL
.release_bee
LDX.w $0202
LDA.l BeeDamageClass, X : CMP.b #$FF : BEQ .nope
@@ -525,9 +492,7 @@ CheckDetonateBomb:
ORA.w $0CF8
STA.w $012E
.done
; what we wrote over
LDA.b #$80
TSB.b $3A
SEC
RTL
;--------------------------------------------------------------------------------
SetBeeType:

View File

@@ -188,7 +188,8 @@ ItemLimitCounts: skip 16 ; Keeps track of limited non-progressive items s
; See: ItemSubstitutionRules in tables.asm
; Right now this is only used for three items but extra space is
; reserved
skip 37 ; Unused
skip 36 ; Unused
ItemOnB: skip 1 ; same table as $0202; $01 = arrows .. $14 = mirror
ProgressIndicator: skip 1 ; $00 = Pre-Uncle | $01 = Post-Uncle item | $02 = Zelda Rescued
; $03 = Agahnim 1 defeated
; $04 and above don't do anything. $00-$02 used in standard mode

View File

@@ -758,46 +758,3 @@ endif
%emptyline()
%emptyline()
%emptyline()
;---------------------------------------------------------------------------------------------------
!FIRST_SWORD_X = 19
!FIRST_SWORD_Y = 310
!PEGASUS_BOOTS_X = 19
!PEGASUS_BOOTS_Y = 313
!FLUTE_X = 19
!FLUTE_Y = 316
!MIRROR_X = 19
!MIRROR_Y = 319
!SWORDLESS_X = 23
!SWORDLESS_Y = 327
!FIGHTERS_SWORD_X = 23
!FIGHTERS_SWORD_Y = 330
!MASTER_SWORD_X = 23
!MASTER_SWORD_Y = 333
!TEMPERED_SWORD_X = 23
!TEMPERED_SWORD_Y = 336
!GOLD_SWORD_X = 23
!GOLD_SWORD_Y = 339
!DAMAGETAKEN_X = 26
!DAMAGETAKEN_Y = 346
!MAGICUSED_X = 26
!MAGICUSED_Y = 349
!BONKS_X = 26
!BONKS_Y = 352
!BOMBS_X = 26
!BOMBS_Y = 355
!SAVE_AND_QUITS_X = 26
!SAVE_AND_QUITS_Y = 358
!DEATHS_X = 26
!DEATHS_Y = 361
!FAERIE_REVIVALS_X = 26
!FAERIE_REVIVALS_Y = 364
!TOTAL_MENU_TIME_X = 19
!TOTAL_MENU_TIME_Y = 367
!TOTAL_LAG_TIME_X = 19
!TOTAL_LAG_TIME_Y = 370
!COLLECTION_RATE_X = 22
!COLLECTION_RATE_Y = 380
!TOTAL_TIME_X = 19
!TOTAL_TIME_Y = 383

View File

@@ -22,16 +22,18 @@
!MAGICUSED_Y = 349
!BONKS_X = 26
!BONKS_Y = 352
!BOMBS_X = 26
!BOMBS_Y = 355
!SAVE_AND_QUITS_X = 26
!SAVE_AND_QUITS_Y = 355
!SAVE_AND_QUITS_Y = 358
!DEATHS_X = 26
!DEATHS_Y = 358
!DEATHS_Y = 361
!FAERIE_REVIVALS_X = 26
!FAERIE_REVIVALS_Y = 361
!FAERIE_REVIVALS_Y = 364
!TOTAL_MENU_TIME_X = 19
!TOTAL_MENU_TIME_Y = 364
!TOTAL_MENU_TIME_Y = 367
!TOTAL_LAG_TIME_X = 19
!TOTAL_LAG_TIME_Y = 367
!TOTAL_LAG_TIME_Y = 370
!COLLECTION_RATE_X = 22
!COLLECTION_RATE_Y = 380
!TOTAL_TIME_X = 19

View File

@@ -92,19 +92,26 @@ SmithSword:
db $02 ; #$02 = Tempered Sword (default)
;--------------------------------------------------------------------------------
; 0x18002B- 0x18002C (Unused)
; 0x18002B (Unused)
;--------------------------------------------------------------------------------
org $30802D ; PC 0x18003D
org $30802C ; PC 0x18002C
AllowedItemOnB:
db #$00
; $00 = None (default)
; $01 - $20 = Only selected item
; $FF = Any valid
;--------------------------------------------------------------------------------
org $30802D ; PC 0x18002D
ChallengeModes:
; ---- ---i
; i: Permanent Ice Physics
db #$00 ; #$00 = Default behavior;
;--------------------------------------------------------------------------------
org $30802E ; PC 0x18003E
org $30802E ; PC 0x18002E
GanonVulnerabilityItem:
db #$00 ; #$00 = Default behavior (silver arrows)
;--------------------------------------------------------------------------------
org $30802F ; PC 0x18003F
org $30802F ; PC 0x18002F
SpecialWeapons:
db #$00
; $00 = Off (default)