Generalize item-on-B approach
This commit is contained in:
@@ -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
|
||||
|
||||
35
hooks.asm
35
hooks.asm
@@ -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
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -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
98
item_on_b.asm
Normal 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
|
||||
@@ -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 +
|
||||
|
||||
@@ -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:
|
||||
|
||||
3
sram.asm
3
sram.asm
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
15
tables.asm
15
tables.asm
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user