Fix Bow item always shooting silver arrows

This commit is contained in:
scawful
2023-08-30 21:03:50 -04:00
parent 6ed152550c
commit f936a7f895
4 changed files with 200 additions and 155 deletions

View File

@@ -13,7 +13,7 @@ NothingGFX:
BowsGFX: BowsGFX:
dw $28BA, $28E9, $28E8, $28CB ; Empty bow dw $28BA, $28E9, $28E8, $28CB ; Empty bow
dw $28BA, $284A, $2849, $28CB ; Bow and arrows dw $28BA, $28BB, $24CA, $28CB ; Bow and arrows
dw $28BA, $28E9, $28E8, $28CB ; Empty silvers bow dw $28BA, $28E9, $28E8, $28CB ; Empty silvers bow
dw $28BA, $28BB, $24CA, $28CB ; Silver bow and arrows dw $28BA, $28BB, $24CA, $28CB ; Silver bow and arrows

View File

@@ -34,7 +34,7 @@ org $0DFDAB
; Partial hearts draw position ; Partial hearts draw position
org $0DF14F org $0DF14F
SEP #$30 SEP #$30
LDA.b #$44 : STA $00 LDA.b #$44 : STA $00
LDA.b #$C7 : STA $01 LDA.b #$C7 : STA $01
LDA.b #$7E : STA $02 LDA.b #$7E : STA $02
@@ -49,6 +49,8 @@ org $2E8000
HUD_Update: HUD_Update:
{ {
; JSL LinkState_GameboyForm
JSR HUD_UpdateItemBox JSR HUD_UpdateItemBox
.ignoreItemBox ; ALTERNATE ENTRY POINT .ignoreItemBox ; ALTERNATE ENTRY POINT
@@ -147,7 +149,7 @@ HUD_Update:
LDA #$A00C : STA $7EC7B2 LDA #$A00C : STA $7EC7B2
; Check if the user has bombs equipped ; Check if the user has bombs equipped
LDX $0202 : LDA $7EF33F, X : AND.w #$00FF LDX $0202 : LDA $7EF33F, X : AND.w #$00FF
CPX.w #$0004 : BNE .not_bombs CPX.w #$0004 : BNE .not_bombs
; Number of bombs Link has. ; Number of bombs Link has.
@@ -163,7 +165,7 @@ HUD_Update:
.not_bombs .not_bombs
; Check if the user has arrows equipped ; Check if the user has arrows equipped
LDX $0202 : LDA $7EF33F, X : AND.w #$00FF LDX $0202 : LDA $7EF33F, X : AND.w #$00FF
CPX.w #$0001 : BNE .not_arrows CPX.w #$0001 : BNE .not_arrows
; Number of Arrows Link has. ; Number of Arrows Link has.
@@ -190,7 +192,7 @@ HUD_Update:
; The key digit, which is optionally drawn. ; The key digit, which is optionally drawn.
; Also check to see if the key spot is blank ; Also check to see if the key spot is blank
LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC7A4 LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC7A4
CMP.w #$247F : BNE .dontBlankKeyIcon CMP.w #$247F : BNE .dontBlankKeyIcon
; If the key digit is blank, also blank out the key icon. ; If the key digit is blank, also blank out the key icon.
@@ -204,12 +206,12 @@ HUD_Update:
; ============================================================================= ; =============================================================================
Full = $3C5F Full = $3C5F
MostlyFull = $3C4D MostlyFull = $3C4D
KindaFull = $3C4E KindaFull = $3C4E
HalfEmpty = $3C4F HalfEmpty = $3C4F
AlmostEmpty = $3C5E AlmostEmpty = $3C5E
Empty = $3C4C Empty = $3C4C
New_MagicTilemap: New_MagicTilemap:
dw Empty, Empty, Empty, Empty, Empty dw Empty, Empty, Empty, Empty, Empty
@@ -234,7 +236,7 @@ MagicTilemap:
dw $3C4F, $3C5F, $3C5F, $3C5F, $3C5F dw $3C4F, $3C5F, $3C5F, $3C5F, $3C5F
dw $3C5E, $3C5F, $3C5F, $3C5F, $3C5F dw $3C5E, $3C5F, $3C5F, $3C5F, $3C5F
dw $3C5F, $3C5F, $3C5F, $3C5F, $3C5F dw $3C5F, $3C5F, $3C5F, $3C5F, $3C5F
; value 80 ; value 0x80 aka 128
HUD_DrawMagicMeter: HUD_DrawMagicMeter:
{ {
@@ -242,8 +244,6 @@ HUD_DrawMagicMeter:
; X = ((MP & 0xFF)) + 7) & 0xFFF8) ; X = ((MP & 0xFF)) + 7) & 0xFFF8)
LDA $7EF36E : AND.w #$00FF : CLC : ADC #$0007 : AND.w #$FFF8 : TAX LDA $7EF36E : AND.w #$00FF : CLC : ADC #$0007 : AND.w #$FFF8 : TAX
.draw_magic_meter .draw_magic_meter
LDA.l (MagicTilemap)+0, X : STA $7EC76A LDA.l (MagicTilemap)+0, X : STA $7EC76A
@@ -260,12 +260,22 @@ HUD_UpdateItemBox:
{ {
SEP #$30 SEP #$30
; Dost thou haveth the the bow? ; Dost thou haveth the the bow?
LDA $7EF340 : BEQ .havethNoBow LDA $7EF340 : BEQ .no_bow
LDX.b #$04
CMP.b #$03 : BCC .no_silver_arrows
; check how many arrows the player has ; check how many arrows the player has
LDA $7EF377 : BNE .drawBowItemIcon LDA $7EF377 : BNE .drawBowItemIcon
LDX.b #$03 LDX.b #$03
BRA .drawBowItemIcon BRA .drawBowItemIcon
.no_silver_arrows
LDX.b #$02
LDA $7EF377 : BNE .drawBowItemIcon
LDX.b #$01
.drawBowItemIcon .drawBowItemIcon
; values of X correspond to how the icon will end up drawn: ; values of X correspond to how the icon will end up drawn:
@@ -275,25 +285,25 @@ HUD_UpdateItemBox:
; 0x04 - silver bow with silver arrows ; 0x04 - silver bow with silver arrows
TXA : STA $7EF340 TXA : STA $7EF340
.havethNoBow .no_bow
REP #$30 REP #$30
LDX $0202 : BEQ .noEquippedItem LDX $0202 : BEQ .noEquippedItem
LDA $7EF33F, X : AND.w #$00FF LDA $7EF33F, X : AND.w #$00FF
CPX.w #$0004 : BNE .bombsNotEquipped CPX.w #$0004 : BNE .bombsNotEquipped
LDA.w #$0001 LDA.w #$0001
.bombsNotEquipped .bombsNotEquipped
CPX.w #$0006 : BNE .bottle1NotEquipped CPX.w #$0006 : BNE .bottle1NotEquipped
JMP .loadBottleContent JMP .loadBottleContent
.bottle1NotEquipped .bottle1NotEquipped
CPX.w #$000C : BNE .bottle2NotEquipped CPX.w #$000C : BNE .bottle2NotEquipped
LDA.w #$0002 LDA.w #$0002
JMP .loadBottleContent JMP .loadBottleContent
.bottle2NotEquipped .bottle2NotEquipped
CPX.w #$0012 : BNE .bottle3NotEquipped CPX.w #$0012 : BNE .bottle3NotEquipped
LDA.w #$0003 LDA.w #$0003
JMP .loadBottleContent JMP .loadBottleContent
.bottle3NotEquipped .bottle3NotEquipped
CPX.w #$0018 : BNE .bottleNotEquipped CPX.w #$0018 : BNE .bottleNotEquipped
LDA.w #$0004 LDA.w #$0004
@@ -302,7 +312,7 @@ HUD_UpdateItemBox:
.bottleNotEquipped .bottleNotEquipped
CPX.w #$000D : BNE .fluteNotEquipped CPX.w #$000D : BNE .fluteNotEquipped
LDA $030F LDA $030F
.fluteNotEquipped .fluteNotEquipped
@@ -334,19 +344,19 @@ HUD_UpdateHearts:
; Notice no SEC was needed since carry is assumedly set. ; Notice no SEC was needed since carry is assumedly set.
SBC.w #$0008 : STA.b $00 SBC.w #$0008 : STA.b $00
LDY.w #$0004 LDY.w #$0004
JSR .drawHeart JSR .drawHeart
INX #2 INX #2
BRA .nextHeart BRA .nextHeart
.lessThanOneHeart .lessThanOneHeart
CMP.w #$0005 : BCC .halfHeartOrLess CMP.w #$0005 : BCC .halfHeartOrLess
LDY.w #$0004 LDY.w #$0004
BRA .drawHeart BRA .drawHeart
.halfHeartOrLess .halfHeartOrLess
CMP.w #$0001 : BCC .emptyHeart CMP.w #$0001 : BCC .emptyHeart
LDY.w #$0002 LDY.w #$0002
BRA .drawHeart BRA .drawHeart
.emptyHeart .emptyHeart
RTS RTS
@@ -367,24 +377,24 @@ HUD_UpdateHearts:
HexToDecimal: HexToDecimal:
{ {
REP #$30 REP #$30
STZ $0003 STZ $0003
LDX.w #$0000 LDX.w #$0000
LDY.w #$0002 LDY.w #$0002
.nextDigit .nextDigit
CMP $F9F9, Y : BCC .nextLowest10sPlace CMP $F9F9, Y : BCC .nextLowest10sPlace
SEC : SBC $F9F9, Y SEC : SBC $F9F9, Y
INC $03, X INC $03, X
BRA .nextDigit BRA .nextDigit
.nextLowest10sPlace .nextLowest10sPlace
INX : DEY #2 INX : DEY #2
BPL .nextDigit BPL .nextDigit
STA $05 STA $05
SEP #$30 SEP #$30
LDX.b #$02 LDX.b #$02
.setNextDigitTile .setNextDigitTile
LDA $03, X : CMP.b #$7F LDA $03, X : CMP.b #$7F
BEQ .blankDigit BEQ .blankDigit
ORA.b #$90 ORA.b #$90
.blankDigit .blankDigit
STA $03, X STA $03, X
@@ -404,11 +414,19 @@ HudItems:
dw $F701, $F6F1, $F6A1, $F6B1, $F7C9, $F751 dw $F701, $F6F1, $F6A1, $F6B1, $F7C9, $F751
; flute, book, somaria, byrna, feather, bottle3 ; flute, book, somaria, byrna, feather, bottle3
dw $F859, $F741, $F799, $F7A9, $F731, $F751 dw $F859, $F741, $F799, $F7A9, $F731, $F751
; deku, zora, wolf, bunny, stne ; deku, zora, wolf, bunny, stone, bottle4
dw $F6E1, $F821, $F6D1, $F7B9, $F811, $F751 dw $F6E1, $F821, $F6D1, $F7B9, $F811, $F751
} }
; F711 ; F711
org $0DF629
dw $20F5, $20F5, $20F5, $20F5 ; No bow
dw $28BA, $28E9, $28E8, $28CB ; Empty bow
dw $28BA, $28BB, $24CA, $28CB ; Bow and arrows
dw $28BA, $28E9, $28E8, $28CB ; Empty silvers bow
dw $28BA, $28BB, $24CA, $28CB ; Silver bow and arrows
; Ocarina ; Ocarina
org $0DF859 org $0DF859
dw $2CD4, $2CD5, $2CE4, $2CE5 dw $2CD4, $2CD5, $2CE4, $2CE5
@@ -457,7 +475,6 @@ org $0DF6A1
org $0DF6B1 org $0DF6B1
dw $2CB0, $2CBE, $2CC0, $2CC1 dw $2CB0, $2CBE, $2CC0, $2CC1
; Mirror ; Mirror
org $0DF7C9 org $0DF7C9
dw $20F5, $20F5, $20F5, $20F5 ; No mirror dw $20F5, $20F5, $20F5, $20F5 ; No mirror
@@ -579,29 +596,29 @@ FloorIndicatorNumberLow:
org $0AFD0C org $0AFD0C
FloorIndicator: FloorIndicator:
{ {
REP #$30 REP #$30
LDA $04A0 : AND.w #$00FF : BEQ .hideIndicator LDA $04A0 : AND.w #$00FF : BEQ .hideIndicator
INC A : CMP.w #$00C0 : BNE .dontDisable INC A : CMP.w #$00C0 : BNE .dontDisable
; if the count up timer reaches 0x00BF frames, disable the floor indicator during the next frame. ; if the count up timer reaches 0x00BF frames, disable the floor indicator during the next frame.
LDA.w #$0000 LDA.w #$0000
.dontDisable .dontDisable
STA $04A0 STA $04A0
PHB : PHK : PLB PHB : PHK : PLB
LDA.w #$251E : STA $7EC7F0 LDA.w #$251E : STA $7EC7F0
INC A : STA $7EC832 INC A : STA $7EC832
INC A : STA $7EC830 INC A : STA $7EC830
LDA.w #$250F : STA $7EC7F2 LDA.w #$250F : STA $7EC7F2
LDX.w #$0000 LDX.w #$0000
; this confused me at first, but it's actually looking at whether $A4[1] ; this confused me at first, but it's actually looking at whether $A4[1]
; has a negative value $A3 has nothing to do with $A4 ; has a negative value $A3 has nothing to do with $A4
LDA $A3 : BMI .basementFloor LDA $A3 : BMI .basementFloor
; check which floor Link is on. ; check which floor Link is on.
LDA $A4 : BNE .notFloor1F LDA $A4 : BNE .notFloor1F
LDA $A0 : CMP.w #$0002 : BEQ .sanctuaryRatRoom LDA $A0 : CMP.w #$0002 : BEQ .sanctuaryRatRoom
SEP #$20 SEP #$20
; Check the world state ; Check the world state
LDA $7EF3C5 : CMP.b #$02 : BCS .noRainSound LDA $7EF3C5 : CMP.b #$02 : BCS .noRainSound
; cause the ambient rain sound to occur (indoor version) ; cause the ambient rain sound to occur (indoor version)
LDA.b #$03 : STA $012D LDA.b #$03 : STA $012D
.noRainSound .noRainSound
@@ -611,12 +628,12 @@ FloorIndicator:
LDA $A4 : AND.w #$00FF LDA $A4 : AND.w #$00FF
BRA .setFloorIndicatorNumber BRA .setFloorIndicatorNumber
.basementFloor .basementFloor
SEP #$20 SEP #$20
; turn off any ambient sound effects ; turn off any ambient sound effects
LDA.b #$05 : STA $012D LDA.b #$05 : STA $012D
REP #$20 REP #$20
INX #2 INX #2
LDA $A4 : ORA.w #$FF00 : EOR.w #$FFFF LDA $A4 : ORA.w #$FF00 : EOR.w #$FFFF
.setFloorIndicatorNumber .setFloorIndicatorNumber
ASL A : TAY ASL A : TAY

View File

@@ -11,7 +11,7 @@ Menu_ItemIndex:
; Ocarina, Book, Somaria, Byrna, Feather, Bottle3 ; Ocarina, Book, Somaria, Byrna, Feather, Bottle3
db $08, $0C, $12, $0D, $07, $0B db $08, $0C, $12, $0D, $07, $0B
; Deku, Zora, Wolf, Bunny Hood, Stone Mask, Bottle4 ; Deku, Zora, Wolf, Bunny Hood, Stone Mask, Bottle4
db $11, $0F, $08, $10, $13, $0B db $11, $0F, $08, $10, $13, $0B
; ----------------------------------------------------------------------------- ; -----------------------------------------------------------------------------
; Decides which graphics is drawn ; Decides which graphics is drawn

View File

@@ -1,18 +1,18 @@
;============================================================================== ;==============================================================================
; Sprite Properties ; Sprite Properties
;============================================================================== ;==============================================================================
!SPRID = $9E; The sprite ID you are overwriting (HEX) !SPRID = $9E ; The sprite ID you are overwriting (HEX)
!NbrTiles = 00 ; Number of tiles used in a frame !NbrTiles = 00 ; Number of tiles used in a frame
!Harmless = 01 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless !Harmless = 01 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless
!HVelocity = 00 ; Is your sprite going super fast? put 01 if it is !HVelocity = 00 ; Is your sprite going super fast? put 01 if it is
!Health = 0 ; Number of Health the sprite have !Health = 0 ; Number of Health the sprite have
!Damage = 0 ; (08 is a whole heart), 04 is half heart !Damage = 0 ; (08 is a whole heart), 04 is half heart
!DeathAnimation = 00 ; 00 = normal death, 01 = no death animation !DeathAnimation = 00 ; 00 = normal death, 01 = no death animation
!ImperviousAll = 00 ; 00 = Can be attack, 01 = attack will clink on it !ImperviousAll = 00 ; 00 = Can be attack, 01 = attack will clink on it
!SmallShadow = 00 ; 01 = small shadow, 00 = no shadow !SmallShadow = 00 ; 01 = small shadow, 00 = no shadow
!Shadow = 00 ; 00 = don't draw shadow, 01 = draw a shadow !Shadow = 00 ; 00 = don't draw shadow, 01 = draw a shadow
!Palette = 0 ; Unused in this template (can be 0 to 7) !Palette = 0 ; Unused in this template (can be 0 to 7)
!Hitbox = 0 ; 00 to 31, can be viewed in sprite draw tool !Hitbox = 0 ; 00 to 31, can be viewed in sprite draw tool
!Persist = 00 ; 01 = your sprite continue to live offscreen !Persist = 00 ; 01 = your sprite continue to live offscreen
!Statis = 00 ; 00 = is sprite is alive?, (kill all enemies room) !Statis = 00 ; 00 = is sprite is alive?, (kill all enemies room)
!CollisionLayer = 00 ; 01 = will check both layer for collision !CollisionLayer = 00 ; 01 = will check both layer for collision
@@ -20,7 +20,7 @@
!DeflectArrow = 00 ; 01 = deflect arrows !DeflectArrow = 00 ; 01 = deflect arrows
!WaterSprite = 00 ; 01 = can only walk shallow water !WaterSprite = 00 ; 01 = can only walk shallow water
!Blockable = 00 ; 01 = can be blocked by link's shield? !Blockable = 00 ; 01 = can be blocked by link's shield?
!Prize = 0 ; 00-15 = the prize pack the sprite will drop from !Prize = 0 ; 00-15 = the prize pack the sprite will drop from
!Sound = 00 ; 01 = Play different sound when taking damage !Sound = 00 ; 01 = Play different sound when taking damage
!Interaction = 00 ; ?? No documentation !Interaction = 00 ; ?? No documentation
!Statue = 00 ; 01 = Sprite is statue !Statue = 00 ; 01 = Sprite is statue
@@ -53,7 +53,10 @@ Sprite_MakuTree_Prep:
{ {
PHB : PHK : PLB PHB : PHK : PLB
LDA.l $7EF300
BNE .intro_is_done
STZ.w $0DD0, X ; Kill the sprite
.intro_is_done
PLB PLB
RTL RTL
@@ -63,14 +66,39 @@ Sprite_MakuTree_Prep:
Sprite_MakuTree_Main: Sprite_MakuTree_Main:
{ {
LDA.w SprAction, X; Load the SprAction LDA.w SprAction, X ; Load the SprAction
JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in JSL UseImplicitRegIndexedLocalJumpTable ; Goto the SprAction we are currently in
dw MakuTree_Speak dw MakuTree_Handler
dw MakuTree_MeetLink
dw MakuTree_GiveBow
MakuTree_Speak: MakuTree_Handler:
{ {
%ShowSolicitedMessage($20) ; Check the progress flags
LDA $7EF3CB : CMP.b #$01 : BEQ .has_met_link
%GotoAction(1)
RTS
.has_met_link
%ShowSolicitedMessage($22)
RTS
}
MakuTree_MeetLink:
{
%ShowSolicitedMessage($20) : BCC .no_talk
LDA #$01 : STA $7EF3CB
%GotoAction(2)
.no_talk
RTS
}
MakuTree_GiveBow:
{
; Give Link the Bow
LDY #$0B : JSL Link_ReceiveItem
%GotoAction(0)
RTS RTS
} }
@@ -88,7 +116,7 @@ Sprite_MakuTree_Draw:
PHX PHX
LDX .nbr_of_tiles, Y ;amount of tiles -1 LDX .nbr_of_tiles, Y ;amount of tiles -1
LDY.b #$00 LDY.b #$00
.nextTile .nextTile
@@ -106,12 +134,12 @@ Sprite_MakuTree_Draw:
AND.w #$0100 : STA $0E AND.w #$0100 : STA $0E
INY INY
LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y
CLC : ADC #$0010 : CMP.w #$0100 CLC : ADC #$0010 : CMP.w #$0100
SEP #$20 SEP #$20
BCC .on_screen_y BCC .on_screen_y
LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way
STA $0E STA $0E
.on_screen_y .on_screen_y
PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore) PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore)