Generalize item-on-B approach
This commit is contained in:
@@ -230,6 +230,7 @@ warnpc $A58000
|
||||
org $A28000 ; contrib area
|
||||
incsrc contrib.asm
|
||||
incsrc special_weapons.asm
|
||||
incsrc item_on_b.asm
|
||||
incsrc variable_ganon_vulnerability.asm
|
||||
warnpc $A38000
|
||||
|
||||
|
||||
34
hooks.asm
34
hooks.asm
@@ -2932,10 +2932,6 @@ org $0DE4BF ; equipment.asm@1247 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs :
|
||||
JSL DrawBombInMenu
|
||||
BRA + : NOP #13 : +
|
||||
;--------------------------------------------------------------------------------
|
||||
org $0DE5A0 ; bank_0D@15415 (LDA $7EF34D : AND.w #$00FF : STA.b $02 : ...)
|
||||
JSL DrawBugNetInMenu
|
||||
BRA + : NOP #8 : +
|
||||
;--------------------------------------------------------------------------------
|
||||
org $0DFB6A ; headsup_display@727 (CPX #$0004 : BNE .bombsNotEquipped : LDA #$0001)
|
||||
JSL DrawBombInYBox
|
||||
BRA + : NOP #2 : +
|
||||
@@ -2969,15 +2965,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
|
||||
; $0DFCB1
|
||||
db $40, $3C, $41, $3C, $42, $28, $3F, $3D
|
||||
|
||||
warnpc $0DFC51+197 ; we only filled in 197 NOPs so don't overwrite past that
|
||||
;--------------------------------------------------------------------------------
|
||||
org $079CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A)
|
||||
JSL CheckDetonateBomb
|
||||
;--------------------------------------------------------------------------------
|
||||
org $1EDCF8 ; bank_1E.asm@16086 (LDX $0202 : ...)
|
||||
JSL SetBeeType
|
||||
BRA + : NOP #15 : +
|
||||
@@ -2994,11 +2983,12 @@ NOP #48
|
||||
skip 11
|
||||
.bee_valid_target
|
||||
;--------------------------------------------------------------------------------
|
||||
org $07F888 ; 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 $07F889 ; 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 $07F890
|
||||
;--------------------------------------------------------------------------------
|
||||
org $06F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10)
|
||||
@@ -3037,6 +3027,18 @@ NOP
|
||||
;--------------------------------------------------------------------------------
|
||||
org $06ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2)
|
||||
JSL StoreSwordDamage
|
||||
|
||||
;================================================================================
|
||||
; Item-On-B
|
||||
;--------------------------------------------------------------------------------
|
||||
org $0DEB3C
|
||||
JSL DrawBIndicator : BRA + : NOP #3 : +
|
||||
;--------------------------------------------------------------------------------
|
||||
org $079CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A : ...)
|
||||
JSL UseItem
|
||||
BCC + : RTS : +
|
||||
JSR $9C56
|
||||
NOP #1
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;================================================================================
|
||||
|
||||
@@ -30,9 +30,10 @@
|
||||
ProcessMenuButtons:
|
||||
;LDA #$FD : STA InventoryTracking ; DEBUG MODE
|
||||
;LDA $F6 : BIT #$20 : BNE .l_pressed ; check for P1 L-button
|
||||
LDA $F4 : BIT #$40 : BNE .y_pressed ; check for P1 Y-button
|
||||
BIT #$20 : BNE .sel_pressed ; check for P1 Select button
|
||||
LDA $F0 : BIT #$20 : BNE .sel_held
|
||||
LDA.b $F4 : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-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 $F0 : BIT.b #$20 : BNE .sel_held
|
||||
.sel_unheld
|
||||
LDA HudFlag : AND #$20 : BEQ +
|
||||
LDA HudFlag : AND #$DF : STA HudFlag ; select is released, unset hud flag
|
||||
@@ -48,6 +49,25 @@ RTL
|
||||
LDA HudFlag : ORA #$20 : STA HudFlag ; set hud flag
|
||||
LDA.b #$20 : STA $012F ; menu select sound
|
||||
JSL.l ResetEquipment
|
||||
RTL
|
||||
.b_pressed
|
||||
PHX
|
||||
LDA.l AllowedItemOnB : BEQ .b_error
|
||||
CMP.b #$FF : BEQ .skip_allow_check
|
||||
CMP.w $0202 : BNE .b_error
|
||||
.skip_allow_check
|
||||
LDA.w $0202 : 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 $012E ; error sound
|
||||
.b_done
|
||||
PLX
|
||||
SEC
|
||||
RTL
|
||||
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
|
||||
LDA.b #$10 : STA $0207
|
||||
@@ -103,11 +123,6 @@ RTL
|
||||
STA FluteEquipment ; store set item
|
||||
LDA.b #$20 : STA $012F ; 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 $012F ; menu select sound
|
||||
BRA .captured
|
||||
+
|
||||
CMP #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : +
|
||||
CLC
|
||||
@@ -789,8 +804,6 @@ AddYMarker:
|
||||
LDA 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
|
||||
@@ -24,7 +24,12 @@ StoreBombCount:
|
||||
.infinite
|
||||
PLA : LDA.b #$01 : RTL
|
||||
.finite
|
||||
PLA : STA BombsEquipment
|
||||
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 InfiniteBombsModifier : 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
@@ -184,7 +184,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
|
||||
|
||||
@@ -772,44 +772,3 @@ endif
|
||||
%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
|
||||
|
||||
@@ -1,3 +1,44 @@
|
||||
!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
|
||||
|
||||
;(address, type, shiftRight, bits, digits, xPos, lineNumber)
|
||||
|
||||
%AddStat(SwordTime, 1, 0, 32, 4, !FIRST_SWORD_X, !FIRST_SWORD_Y)
|
||||
|
||||
15
tables.asm
15
tables.asm
@@ -98,19 +98,26 @@ db #$02 ; #$02 = Tempered Sword (default)
|
||||
;org $05EBD4 ; PC 0x2EBD4 - sprite_zelda.asm:23 - (LDA $7EF359 : CMP.b #$02 : BCS .hasMasterSword) - Zelda Spawnpoint Sword Check
|
||||
;db #$05 ; #$02 = Tempered Sword (default) - #$05 = All Swords
|
||||
;--------------------------------------------------------------------------------
|
||||
; 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