Initial Prize Shuffle Implementation
This commit is contained in:
@@ -188,6 +188,8 @@ ItemReceiptGraphicsROM:
|
|||||||
; we need some empty space here so that 0000 can mean nothing
|
; we need some empty space here so that 0000 can mean nothing
|
||||||
fillbyte $00 : fill 32
|
fillbyte $00 : fill 32
|
||||||
incbin "data/customitems.4bpp"
|
incbin "data/customitems.4bpp"
|
||||||
|
PreloadedGraphicsROM:
|
||||||
|
incbin "data/preloadedgfx.4bpp"
|
||||||
warnpc $A2B000
|
warnpc $A2B000
|
||||||
org $A2B000
|
org $A2B000
|
||||||
incsrc itemdatatables.asm ; Statically mapped
|
incsrc itemdatatables.asm ; Statically mapped
|
||||||
|
|||||||
@@ -13,5 +13,7 @@ dw $0000, $7FFF, $27FF, $5E2D, $4F5F, $1CE7, $2E9C, $14B6
|
|||||||
dw $0000, $7E4E, $6F44, $1CF5, $7399, $1CE7, $02F9, $0233
|
dw $0000, $7E4E, $6F44, $1CF5, $7399, $1CE7, $02F9, $0233
|
||||||
.crystal
|
.crystal
|
||||||
dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672
|
dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672
|
||||||
|
.red_crystal
|
||||||
|
dw $7FFF, $7FFF, $0000, $0C94, $2D99, $0000, $6F3D, $4A3B
|
||||||
.off_black
|
.off_black
|
||||||
dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5
|
dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5
|
||||||
|
|||||||
BIN
data/preloadedgfx.4bpp
Normal file
BIN
data/preloadedgfx.4bpp
Normal file
Binary file not shown.
BIN
data/preloadedgfx.png
Normal file
BIN
data/preloadedgfx.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
@@ -1,8 +1,6 @@
|
|||||||
!BlankTile = $207F
|
!BlankTile = $207F
|
||||||
!SlashTile = $2830
|
!SlashTile = $2830
|
||||||
!HyphenTile = $2405
|
!HyphenTile = $2405
|
||||||
!PTile = $296C
|
|
||||||
!CTile = $295F
|
|
||||||
!LTile = $2D68
|
!LTile = $2D68
|
||||||
!DTile = $2D60
|
!DTile = $2D60
|
||||||
!RedSquare = $345E
|
!RedSquare = $345E
|
||||||
@@ -114,8 +112,8 @@ dw $0000, $0000, $0000, $0000, $000a, $000a, $000a, $0014, $000a, $0014, $0000,
|
|||||||
DrHudDungeonItemsAdditions:
|
DrHudDungeonItemsAdditions:
|
||||||
{
|
{
|
||||||
jsl DrawHUDDungeonItems
|
jsl DrawHUDDungeonItems
|
||||||
lda.l HUDDungeonItems : and.b #$ff : bne + : rtl : +
|
lda.l DRMode : cmp.b #$02 : beq + : rtl
|
||||||
lda.l DRMode : cmp.b #$02 : beq + : rtl : +
|
+
|
||||||
|
|
||||||
phx : phy : php
|
phx : phy : php
|
||||||
rep #$30
|
rep #$30
|
||||||
|
|||||||
133
dungeondrops.asm
133
dungeondrops.asm
@@ -3,9 +3,6 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SpawnDungeonPrize:
|
SpawnDungeonPrize:
|
||||||
PHX : PHB
|
PHX : PHB
|
||||||
PHA : LDA.b #$00 : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID : PLA
|
|
||||||
JSL AttemptItemSubstitution
|
|
||||||
JSL ResolveLootIDLong
|
|
||||||
STA.w ItemReceiptID
|
STA.w ItemReceiptID
|
||||||
TAX
|
TAX
|
||||||
LDA.b #$29 : LDY.b #$06
|
LDA.b #$29 : LDY.b #$06
|
||||||
@@ -13,7 +10,7 @@ SpawnDungeonPrize:
|
|||||||
JSL AddAncillaLong
|
JSL AddAncillaLong
|
||||||
BCS .failed_spawn
|
BCS .failed_spawn
|
||||||
LDA.w ItemReceiptID
|
LDA.w ItemReceiptID
|
||||||
STA.w AncillaGet,X : STA.w SprItemReceipt,X
|
STA.w AncillaGet,X
|
||||||
JSR AddDungeonPrizeAncilla
|
JSR AddDungeonPrizeAncilla
|
||||||
.failed_spawn
|
.failed_spawn
|
||||||
PLB : PLX
|
PLB : PLX
|
||||||
@@ -62,15 +59,33 @@ RTS
|
|||||||
|
|
||||||
PrepPrizeTile:
|
PrepPrizeTile:
|
||||||
PHA : PHX : PHY
|
PHA : PHX : PHY
|
||||||
LDA.b #$00 : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
JSL BossPrizeGetPlayer : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
||||||
LDA.w AncillaGet, X
|
LDA.b #$01 : STA.l SpriteSkipEOR
|
||||||
JSL AttemptItemSubstitution
|
LDA.w AncillaGet, X
|
||||||
JSL ResolveLootIDLong
|
JSL AttemptItemSubstitution
|
||||||
STA.w SprItemReceipt,X
|
JSL ResolveLootIDLong
|
||||||
JSL TransferItemReceiptToBuffer_using_ReceiptID
|
STA.w AncillaGet, X
|
||||||
|
JSL RequestStandingItemVRAMSlot
|
||||||
|
LDA.b #$00 : STA.l SpriteSkipEOR
|
||||||
PLY : PLX : PLA
|
PLY : PLX : PLA
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
PrizeReceiveItem:
|
||||||
|
PHA
|
||||||
|
JSL BossPrizeGetPlayer : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||||
|
PLA
|
||||||
|
CMP.b #$6A : BNE +
|
||||||
|
; TODO : This doesn't increment any item counts/stats
|
||||||
|
JML ActivateTriforceCutscene
|
||||||
|
+
|
||||||
|
JSL Link_ReceiveItem
|
||||||
|
LDA.l TextBoxDefer : BEQ +
|
||||||
|
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||||
|
JSL Main_ShowTextMessage_Alt
|
||||||
|
LDA.b #$00 : STA.l TextBoxDefer
|
||||||
|
+
|
||||||
|
RTL
|
||||||
|
|
||||||
SetItemPose:
|
SetItemPose:
|
||||||
PHA
|
PHA
|
||||||
LDA.w DungeonID : BMI .one_handed
|
LDA.w DungeonID : BMI .one_handed
|
||||||
@@ -232,7 +247,6 @@ PrepPrizeOAMCoordinates:
|
|||||||
STA.b Scrap02
|
STA.b Scrap02
|
||||||
STA.b Scrap04
|
STA.b Scrap04
|
||||||
|
|
||||||
REP #$20
|
|
||||||
LDA.w AncillaZCoord,X
|
LDA.w AncillaZCoord,X
|
||||||
AND.w #$00FF
|
AND.w #$00FF
|
||||||
STA.b ScrapBuffer72
|
STA.b ScrapBuffer72
|
||||||
@@ -243,9 +257,35 @@ PrepPrizeOAMCoordinates:
|
|||||||
SBC.b ScrapBuffer72
|
SBC.b ScrapBuffer72
|
||||||
STA.b Scrap00
|
STA.b Scrap00
|
||||||
|
|
||||||
SEP #$20
|
JSL PrepAncillaAnimation
|
||||||
TXY
|
TXY
|
||||||
LDA.w AncillaGet,X : TAX
|
LDA.w AncillaGet,Y : AND.w #$00FF : PHA
|
||||||
|
REP #$10
|
||||||
|
ASL : TAX
|
||||||
|
LDA.l VRAMAddressOffset,X : STA.b Scrap0C
|
||||||
|
CLC : ADC.w #$0010 : STA.b Scrap0D
|
||||||
|
PLX
|
||||||
|
SEP #$10
|
||||||
|
PHX
|
||||||
|
; special animation handling
|
||||||
|
CPX.b #$D2 : BNE + ; fairy
|
||||||
|
LDX.w AncillaDirection,Y : BEQ ++ : CPX.b #$03 : BEQ ++ ; use other fairy GFX
|
||||||
|
LDA.b Scrap0C : CLC : ADC.w #$0002 : STA.b Scrap0C
|
||||||
|
CLC : ADC.w #$0010 : STA.b Scrap0D
|
||||||
|
++ CPX.b #$02 : BCC .check_width ; move fairy up 2 pixels
|
||||||
|
LDA.b Scrap00 : SEC : SBC.w #$0002 : STA.b Scrap00
|
||||||
|
BRA .check_width
|
||||||
|
+ CPX.b #$D6 : BNE + ; good bee
|
||||||
|
LDA.b Scrap0C : AND.w #$FF00 : ORA.w #$007C : STA.b Scrap0C ; use blank GFX for high VRAM
|
||||||
|
LDX.w AncillaDirection,Y : BEQ ++ : CPX.b #$03 : BEQ ++ ; use other bee GFX
|
||||||
|
LDA.b Scrap0D : SEC : SBC.w #$0010 : STA.b Scrap0D
|
||||||
|
++ CPX.b #$02 : BCC + ; move bee up 2 pixels
|
||||||
|
LDA.b Scrap00 : SEC : SBC.w #$0002 : STA.b Scrap00
|
||||||
|
+
|
||||||
|
|
||||||
|
.check_width
|
||||||
|
PLX
|
||||||
|
SEP #$20
|
||||||
LDA.l SpriteProperties_chest_width,X : BNE .wide
|
LDA.l SpriteProperties_chest_width,X : BNE .wide
|
||||||
TYX
|
TYX
|
||||||
LDA.w AncillaID,X : CMP.b #$3E : BEQ .rising_crystal
|
LDA.w AncillaID,X : CMP.b #$3E : BEQ .rising_crystal
|
||||||
@@ -267,20 +307,70 @@ PrepPrizeOAMCoordinates:
|
|||||||
PLY : PLX
|
PLY : PLX
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
PrepPrizeVRAMHigh:
|
||||||
|
PHX
|
||||||
|
LDX.b #$00
|
||||||
|
JSL PrepPrizeVRAM : BCS .store
|
||||||
|
LDA.b #$24
|
||||||
|
.store
|
||||||
|
STA.b ($90),Y
|
||||||
|
PLX
|
||||||
|
RTL
|
||||||
|
|
||||||
|
PrepPrizeVRAMLow:
|
||||||
|
PHX
|
||||||
|
LDX.b #$01
|
||||||
|
JSL PrepPrizeVRAM : BCS .store
|
||||||
|
LDA.b #$34
|
||||||
|
.store
|
||||||
|
STA.b ($90),Y
|
||||||
|
PLX
|
||||||
|
RTL
|
||||||
|
|
||||||
|
PrepPrizeVRAM:
|
||||||
|
PHY
|
||||||
|
LDA.b 9,S : TAY
|
||||||
|
LDA.w AncillaID,Y : CMP.b #$29 : BEQ +
|
||||||
|
PLY : CLC : RTL ; not a prize drop ancilla
|
||||||
|
+ LDA.b Scrap0C,X : CMP.b #$24 : BEQ + : CMP.b #$34 : BEQ +
|
||||||
|
PLY : SEC : RTL ; in vanilla VRAM
|
||||||
|
+
|
||||||
|
; use dynamic VRAM slot
|
||||||
|
PHX
|
||||||
|
LDA.w SprItemGFXSlot,Y : ASL : TAX
|
||||||
|
REP #$20
|
||||||
|
LDA.l FreeUWGraphics,X : LSR #4
|
||||||
|
PLX
|
||||||
|
CPX.b #$01 : BNE +
|
||||||
|
CLC : ADC.w #$0010
|
||||||
|
+
|
||||||
|
SEP #$20
|
||||||
|
PLY : SEC
|
||||||
|
RTL
|
||||||
|
|
||||||
PrepPrizeShadow:
|
PrepPrizeShadow:
|
||||||
PHX
|
PHX
|
||||||
LDA.w ItemReceiptID : TAX
|
LDA.b 5,S : TAX : LDA.w AncillaGet,X : TAX
|
||||||
LDA.l SpriteProperties_standing_width,X : BNE .wide
|
LDA.l SpriteProperties_standing_width,X : BNE .wide
|
||||||
LDA.b Scrap02
|
LDA.b Scrap02
|
||||||
SEC : SBC.b #$04
|
SEC : SBC.b #$04
|
||||||
STA.b Scrap02
|
STA.b Scrap02
|
||||||
|
PLX : LDX.b #$02
|
||||||
|
BRA .wide+1
|
||||||
.wide
|
.wide
|
||||||
LDA.b #$20 : STA.b Scrap04 ; What we wrote over
|
|
||||||
PLX
|
PLX
|
||||||
|
LDA.b #$20 : STA.b Scrap04 ; What we wrote over
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
CheckPoseItemCoordinates:
|
CheckPoseItemCoordinates:
|
||||||
PHX
|
PHX
|
||||||
|
LDA.w SprRedrawFlag,X : BEQ +
|
||||||
|
JSL BossPrizeGetPlayer : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
||||||
|
LDA.b #$01 : STA.l SpriteSkipEOR
|
||||||
|
LDA.w AncillaGet,X
|
||||||
|
JSL RequestStandingItemVRAMSlot
|
||||||
|
LDA.b #$00 : STA.l SpriteSkipEOR
|
||||||
|
+
|
||||||
LDA.w ItemReceiptPose : BEQ .done
|
LDA.w ItemReceiptPose : BEQ .done
|
||||||
BIT.b #$02 : BEQ .done
|
BIT.b #$02 : BEQ .done
|
||||||
LDA.w AncillaGet,X : TAX
|
LDA.w AncillaGet,X : TAX
|
||||||
@@ -302,6 +392,9 @@ CrystalOrPendantBehavior:
|
|||||||
AND.w #$00FF : ASL : TAX
|
AND.w #$00FF : ASL : TAX
|
||||||
LDA.l InventoryTable_properties,X : BIT.w #$0080 : BNE .crystal_behavior
|
LDA.l InventoryTable_properties,X : BIT.w #$0080 : BNE .crystal_behavior
|
||||||
SEP #$30
|
SEP #$30
|
||||||
|
LDA.w ItemReceiptPose : BEQ +
|
||||||
|
LDA.b #$02 : STA.b LinkDirection
|
||||||
|
+
|
||||||
PLX : PLA
|
PLX : PLA
|
||||||
RTS
|
RTS
|
||||||
.crystal_behavior
|
.crystal_behavior
|
||||||
@@ -325,3 +418,13 @@ SetDungeonCompleted:
|
|||||||
SEP #$20
|
SEP #$20
|
||||||
+
|
+
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
ClearMultiworldText:
|
||||||
|
PHP : PHX
|
||||||
|
SEP #$30
|
||||||
|
LDA.l !MULTIWORLD_HUD_TIMER : BEQ +
|
||||||
|
LDA.b #$01 : STA.l !MULTIWORLD_HUD_TIMER
|
||||||
|
JSL GetMultiworldItem
|
||||||
|
+
|
||||||
|
PLX : PLP
|
||||||
|
RTL
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OnDungeonBossExit:
|
OnDungeonBossExit:
|
||||||
JSL StatTransitionCounter
|
JSL StatTransitionCounter
|
||||||
|
JSL ClearMultiworldText
|
||||||
JSL DynamicDropGFXClear
|
JSL DynamicDropGFXClear
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ CheckForCrystalBossesDefeated:
|
|||||||
LDY.w #10
|
LDY.w #10
|
||||||
|
|
||||||
.next_check
|
.next_check
|
||||||
LDA.w CrystalPendantFlags_2-2,Y
|
LDA.w CrystalPendantFlags_2+2,Y
|
||||||
BIT.w #$0040
|
BIT.w #$0040
|
||||||
BEQ ++
|
BEQ ++
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
HeartPieceGet:
|
HeartPieceGet:
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
||||||
LDY.w SprItemReceipt, X : BNE +
|
LDY.w SprItemReceipt, X : BNE +
|
||||||
LDA.w SprSourceItemId, X : BNE ++
|
LDA.w SprSourceItemId, X : BNE ++
|
||||||
JSL LoadHeartPieceRoomValue
|
JSL LoadHeartPieceRoomValue
|
||||||
@@ -16,8 +16,9 @@ HeartPieceGet:
|
|||||||
+
|
+
|
||||||
JSL MaybeMarkDigSpotCollected
|
JSL MaybeMarkDigSpotCollected
|
||||||
.skipLoad
|
.skipLoad
|
||||||
|
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_ITEM_PLAYER_ID
|
||||||
CPY.b #$26 : BNE .not_heart ; don't add a 1/4 heart if it's not a heart piece
|
CPY.b #$26 : BNE .not_heart ; don't add a 1/4 heart if it's not a heart piece
|
||||||
LDA.w SprItemMWPlayer, X : BNE .not_heart
|
CMP.b #$00 : BNE .not_heart
|
||||||
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter
|
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter
|
||||||
.not_heart
|
.not_heart
|
||||||
JSL Player_HaltDashAttackLong
|
JSL Player_HaltDashAttackLong
|
||||||
@@ -110,8 +111,8 @@ RTL
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
NormalItemSkipSound:
|
NormalItemSkipSound:
|
||||||
; Out: c - skip sounds if set
|
; Out: c - skip sounds if set
|
||||||
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .skip
|
|
||||||
JSL CheckIfBossRoom : BCS .boss_room
|
JSL CheckIfBossRoom : BCS .boss_room
|
||||||
|
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .skip
|
||||||
TDC
|
TDC
|
||||||
CPY.b #$17 : BEQ .skip
|
CPY.b #$17 : BEQ .skip
|
||||||
CLC
|
CLC
|
||||||
@@ -816,6 +817,50 @@ HeartPieceGetPlayer:
|
|||||||
RTL
|
RTL
|
||||||
}
|
}
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
BossPrizeGetPlayer:
|
||||||
|
{
|
||||||
|
PHP
|
||||||
|
REP #$20 ; set 16-bit accumulator
|
||||||
|
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||||
|
CMP.w #200 : BNE +
|
||||||
|
LDA.l Prize_ArmosKnights_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #51 : BNE +
|
||||||
|
LDA.l Prize_Lanmolas_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #7 : BNE +
|
||||||
|
LDA.l Prize_Moldorm_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #90 : BNE +
|
||||||
|
LDA.l Prize_HelmasaurKing_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #6 : BNE +
|
||||||
|
LDA.l Prize_Arrghus_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #41 : BNE +
|
||||||
|
LDA.l Prize_Mothula_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #172 : BNE +
|
||||||
|
LDA.l Prize_Blind_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #222 : BNE +
|
||||||
|
LDA.l Prize_Kholdstare_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #144 : BNE +
|
||||||
|
LDA.l Prize_Vitreous_Player
|
||||||
|
BRA .done
|
||||||
|
+ CMP.w #164 : BNE +
|
||||||
|
LDA.l Prize_Trinexx_Player
|
||||||
|
BRA .done
|
||||||
|
+
|
||||||
|
LDA.w #$0000
|
||||||
|
|
||||||
|
.done
|
||||||
|
AND.w #$00FF ; the loads are words but the values are 1-byte so we need to clear the top half of the accumulator - no guarantee it was 8-bit before
|
||||||
|
PLP
|
||||||
|
RTL
|
||||||
|
}
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
HeartPieceSetRedraw:
|
HeartPieceSetRedraw:
|
||||||
PHY
|
PHY
|
||||||
LDY.b #$0F
|
LDY.b #$0F
|
||||||
|
|||||||
18
hooks.asm
18
hooks.asm
@@ -914,6 +914,7 @@ JSL Sprite_ConditionalPrepOAMCoord
|
|||||||
|
|
||||||
org $8799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem)
|
org $8799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem)
|
||||||
JSL AddReceivedItemExpanded
|
JSL AddReceivedItemExpanded
|
||||||
|
BRA Link_ReceiveItem_HUDRefresh
|
||||||
|
|
||||||
org $88C505
|
org $88C505
|
||||||
JSL Ancilla22_ItemReceipt_ContinueB : NOP #2
|
JSL Ancilla22_ItemReceipt_ContinueB : NOP #2
|
||||||
@@ -1049,10 +1050,13 @@ BCS Ancilla22_ItemReceipt_is_pendant : BRA Ancilla22_ItemReceipt_wait_for_music
|
|||||||
org $88C61D : JSL AnimatePrizeCutscene : NOP
|
org $88C61D : JSL AnimatePrizeCutscene : NOP
|
||||||
org $88C622 : BCC ItemReceipt_Animate_continue
|
org $88C622 : BCC ItemReceipt_Animate_continue
|
||||||
org $88C6BA : JSL CheckPoseItemCoordinates
|
org $88C6BA : JSL CheckPoseItemCoordinates
|
||||||
|
org $88C6C3 : JSL PrepPrizeVRAMHigh
|
||||||
|
org $88C6F4 : JSL PrepPrizeVRAMLow
|
||||||
org $88CAD6 : JSL HandleDropSFX : NOP #2
|
org $88CAD6 : JSL HandleDropSFX : NOP #2
|
||||||
org $88CADC : BCC Ancilla29_MilestoneItemReceipt_skip_crystal_sfx
|
org $88CADC : BCC Ancilla29_MilestoneItemReceipt_skip_crystal_sfx
|
||||||
org $88CAE9 : JSL PrepPrizeTile
|
org $88CAE9 : JSL PrepPrizeTile
|
||||||
org $88CB23 : JSL PrizeDropSparkle : BCC Ancilla29_MilestoneItemReceipt_no_sparkle : NOP #2
|
org $88CB23 : JSL PrizeDropSparkle : BCC Ancilla29_MilestoneItemReceipt_no_sparkle : NOP #2
|
||||||
|
org $88CB6A : JSL PrizeReceiveItem
|
||||||
org $88CB97 : JSL PrepPrizeOAMCoordinates : BRA + : NOP #$12 : +
|
org $88CB97 : JSL PrepPrizeOAMCoordinates : BRA + : NOP #$12 : +
|
||||||
org $88CBFF : JSL PrepPrizeShadow
|
org $88CBFF : JSL PrepPrizeShadow
|
||||||
org $88CC6C : JSL HandleCrystalsField
|
org $88CC6C : JSL HandleCrystalsField
|
||||||
@@ -1249,7 +1253,8 @@ org $87A3AB ; 3A3AB - Bank07.asm : 5726 - LDA.b #$12 : JSR Player_DoSfx2
|
|||||||
_Bank07_5726:
|
_Bank07_5726:
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $879A0E ; 39A0E - Bank07.asm : 4117 - JSL HUD.RefreshIconLong
|
org $879A0E ; 39A0E - Bank07.asm : 4117 - JSL HUD.RefreshIconLong
|
||||||
JSL Link_ReceiveItem_HUDRefresh
|
Link_ReceiveItem_HUDRefresh:
|
||||||
|
JSL HUDRefresh
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Swordless Mode
|
; Swordless Mode
|
||||||
@@ -1693,14 +1698,6 @@ org $82B15C ; <- 1315C - Bank02.asm:7672 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3
|
|||||||
JSL IncrementOWMirror
|
JSL IncrementOWMirror
|
||||||
JSL FlipLWDWFlag : NOP #2
|
JSL FlipLWDWFlag : NOP #2
|
||||||
;================================================================================
|
;================================================================================
|
||||||
;org $8AC5BB ; < 545BB - Bank0A.asm:1856 - (LDA $7EF3C7 : CMP.b #$03 : BNE .fail)
|
|
||||||
;JSL OverworldMap_CheckObject : RTS
|
|
||||||
;org $8AC5D8 ; < 545D8 - Bank0A.asm:1885 - (LDA $7EF3C7 : CMP.b #$07 : BNE OverworldMap_CheckPendant_fail)
|
|
||||||
;JSL OverworldMap_CheckObject : RTS
|
|
||||||
;================================================================================
|
|
||||||
org $8AC53E ; <- 5453E - Bank0A.asm:1771 - (LDA $0AC50D, X : STA $0D)
|
|
||||||
LDA.l CrystalNumberTable-1,X
|
|
||||||
;================================================================================
|
|
||||||
; EVERY INSTANCE OF STA $7EF3C7 IN THE ENTIRE CODEBASE
|
; EVERY INSTANCE OF STA $7EF3C7 IN THE ENTIRE CODEBASE
|
||||||
org $829D51 : JSL SetLWDWMap
|
org $829D51 : JSL SetLWDWMap
|
||||||
org $8589BB : JSL SetLWDWMap
|
org $8589BB : JSL SetLWDWMap
|
||||||
@@ -1721,9 +1718,6 @@ org $85FF7D : JSL GetMapMode
|
|||||||
org $8AC01A : JSL GetMapMode
|
org $8AC01A : JSL GetMapMode
|
||||||
org $8DC849 : JSL GetMapMode
|
org $8DC849 : JSL GetMapMode
|
||||||
;================================================================================
|
;================================================================================
|
||||||
org $8AC012 ; <- 54012 - Bank0A.asm:1039 (LDA $7EF2DB : AND.b #$20 : BNE BRANCH_DELTA)
|
|
||||||
NOP #8
|
|
||||||
;================================================================================
|
|
||||||
org $828B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A)
|
org $828B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A)
|
||||||
JSL CheckHeraBossDefeated : NOP
|
JSL CheckHeraBossDefeated : NOP
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ IncrementFinalSword:
|
|||||||
PLX
|
PLX
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
Link_ReceiveItem_HUDRefresh:
|
HUDRefresh:
|
||||||
LDA.l BombsEquipment : BNE + ; skip if we have bombs
|
LDA.l BombsEquipment : BNE + ; skip if we have bombs
|
||||||
LDA.l BombCapacity : BEQ + ; skip if we can't have bombs
|
LDA.l BombCapacity : BEQ + ; skip if we can't have bombs
|
||||||
LDA.l BombsFiller : BEQ + ; skip if we are filling no bombs
|
LDA.l BombsFiller : BEQ + ; skip if we are filling no bombs
|
||||||
@@ -593,6 +593,7 @@ RTL
|
|||||||
DrawPowder:
|
DrawPowder:
|
||||||
;LDA.w ItemReceiptPose : BNE .defer ; defer if link is buying a potion
|
;LDA.w ItemReceiptPose : BNE .defer ; defer if link is buying a potion
|
||||||
LDA.w SprRedrawFlag, X : BEQ +
|
LDA.w SprRedrawFlag, X : BEQ +
|
||||||
|
LDA.w SprItemMWPlayer, X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID
|
||||||
LDA.w SprSourceItemId, X
|
LDA.w SprSourceItemId, X
|
||||||
JSL AttemptItemSubstitution
|
JSL AttemptItemSubstitution
|
||||||
JSL ResolveLootIDLong
|
JSL ResolveLootIDLong
|
||||||
|
|||||||
@@ -592,9 +592,9 @@ endmacro
|
|||||||
%SpriteProps($AD, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AD - Small key of Ganon's Tower
|
%SpriteProps($AD, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AD - Small key of Ganon's Tower
|
||||||
%SpriteProps($AE, 2, 2, $02, $02, $0000) ; AE - Reserved
|
%SpriteProps($AE, 2, 2, $02, $02, $0000) ; AE - Reserved
|
||||||
%SpriteProps($AF, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AF - Generic small key
|
%SpriteProps($AF, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AF - Generic small key
|
||||||
%SpriteProps($B0, 2, 2, $80, $80, PalettesCustom_crystal) ; B0 - Crystal 6
|
%SpriteProps($B0, 2, 2, $80, $80, PalettesCustom_red_crystal) ; B0 - Crystal 6
|
||||||
%SpriteProps($B1, 2, 2, $80, $80, PalettesCustom_crystal) ; B1 - Crystal 1
|
%SpriteProps($B1, 2, 2, $80, $80, PalettesCustom_crystal) ; B1 - Crystal 1
|
||||||
%SpriteProps($B2, 2, 2, $80, $80, PalettesCustom_crystal) ; B2 - Crystal 5
|
%SpriteProps($B2, 2, 2, $80, $80, PalettesCustom_red_crystal) ; B2 - Crystal 5
|
||||||
%SpriteProps($B3, 2, 2, $80, $80, PalettesCustom_crystal) ; B3 - Crystal 7
|
%SpriteProps($B3, 2, 2, $80, $80, PalettesCustom_crystal) ; B3 - Crystal 7
|
||||||
%SpriteProps($B4, 2, 2, $80, $80, PalettesCustom_crystal) ; B4 - Crystal 2
|
%SpriteProps($B4, 2, 2, $80, $80, PalettesCustom_crystal) ; B4 - Crystal 2
|
||||||
%SpriteProps($B5, 2, 2, $80, $80, PalettesCustom_crystal) ; B5 - Crystal 4
|
%SpriteProps($B5, 2, 2, $80, $80, PalettesCustom_crystal) ; B5 - Crystal 4
|
||||||
@@ -1522,8 +1522,8 @@ VRAMAddressOffset:
|
|||||||
dw $0024 ; 21 - Net
|
dw $0024 ; 21 - Net
|
||||||
dw $0024 ; 22 - Blue Mail
|
dw $0024 ; 22 - Blue Mail
|
||||||
dw $0024 ; 23 - Red Mail
|
dw $0024 ; 23 - Red Mail
|
||||||
dw $0024 ; 24 - Small Key
|
dw $006B ; 24 - Small Key
|
||||||
dw $0024 ; 25 - Compbutt
|
dw $0024 ; 25 - Compass
|
||||||
dw $0024 ; 26 - Heart Container from 4/4
|
dw $0024 ; 26 - Heart Container from 4/4
|
||||||
dw $0024 ; 27 - Bomb
|
dw $0024 ; 27 - Bomb
|
||||||
dw $0024 ; 28 - 3 bombs
|
dw $0024 ; 28 - 3 bombs
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ RequestStandingItemVRAMSlot:
|
|||||||
PHX : PHY
|
PHX : PHY
|
||||||
PHA
|
PHA
|
||||||
LDA.b #$01 : STA.w SprRedrawFlag, X
|
LDA.b #$01 : STA.w SprRedrawFlag, X
|
||||||
JSL Sprite_IsOnscreen : BCC ++
|
LDA.l SpriteSkipEOR : BNE + ; skips on-screen check for special cases, like for prize ancilla
|
||||||
|
JSL Sprite_IsOnscreen : BCC ++ : +
|
||||||
; skip sending the request if busy with other things
|
; skip sending the request if busy with other things
|
||||||
LDA.b GameSubMode : CMP.b #$21 : BCS ++ ; skip if OW is loading Map16 GFX ; TODO: Figure out how to allow submodule 22, check DMA status instead
|
LDA.b GameSubMode : CMP.b #$21 : BCS ++ ; skip if OW is loading Map16 GFX ; TODO: Figure out how to allow submodule 22, check DMA status instead
|
||||||
LDA.b LinkState : CMP.b #$14 : BEQ ++ ; skip if we're mid-mirror
|
LDA.b LinkState : CMP.b #$14 : BEQ ++ ; skip if we're mid-mirror
|
||||||
@@ -357,6 +358,12 @@ PrepItemAnimation:
|
|||||||
LDA.b FrameCounter : AND.b #$30 : LSR #4 : STA.w SpriteDirectionTable, X
|
LDA.b FrameCounter : AND.b #$30 : LSR #4 : STA.w SpriteDirectionTable, X
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
PrepAncillaAnimation:
|
||||||
|
PHP : SEP #$20
|
||||||
|
LDA.b FrameCounter : AND.b #$30 : LSR #4 : STA.w AncillaDirection, X
|
||||||
|
PLP
|
||||||
|
RTL
|
||||||
|
|
||||||
WaitForNewVBlank:
|
WaitForNewVBlank:
|
||||||
LDA.b #$00 : STA.w NMITIMEN ; Disable interrupts
|
LDA.b #$00 : STA.w NMITIMEN ; Disable interrupts
|
||||||
- LDA.w RDNMI : BMI - ; Wait until v-blank is over
|
- LDA.w RDNMI : BMI - ; Wait until v-blank is over
|
||||||
|
|||||||
@@ -352,7 +352,7 @@ SetupEnemyDropIndicator:
|
|||||||
; LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF : BEQ .skipCompassChecks
|
; LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF : BEQ .skipCompassChecks
|
||||||
; compass checks
|
; compass checks
|
||||||
; does compass for dungeon exist?
|
; does compass for dungeon exist?
|
||||||
; LSR : TAX : LDA.l ExistsTransfer, X : TAX : LDA.l CompassExists, X : BEQ .skipCompassChecks
|
; LSR : TAX : LDA.l CompassExists : AND.l DungeonItemMasks,X : BEQ .skipCompassChecks
|
||||||
; do we have the compass
|
; do we have the compass
|
||||||
; sewers? outstanding?
|
; sewers? outstanding?
|
||||||
; LDA.l CompassField : LDX.w DungeonID : AND.l DungeonMask, X : BEQ .done
|
; LDA.l CompassField : LDX.w DungeonID : AND.l DungeonMask, X : BEQ .done
|
||||||
|
|||||||
@@ -1,146 +1,413 @@
|
|||||||
pushpc
|
pushpc
|
||||||
|
|
||||||
|
org $8ABABE : JSL WorldMap_LoadChrHalfSlot
|
||||||
|
|
||||||
|
org $8ABDF6
|
||||||
|
WorldMapIcon_DungeonPointers: ; dungeon idx order
|
||||||
|
dw WorldMapIcon_pos_hc
|
||||||
|
dw $0000
|
||||||
|
dw WorldMapIcon_pos_ep
|
||||||
|
dw WorldMapIcon_pos_dp
|
||||||
|
dw WorldMapIcon_pos_at
|
||||||
|
dw WorldMapIcon_pos_sp
|
||||||
|
dw WorldMapIcon_pos_pod
|
||||||
|
dw WorldMapIcon_pos_mm
|
||||||
|
|
||||||
|
dw WorldMapIcon_pos_sw
|
||||||
|
dw WorldMapIcon_pos_ip
|
||||||
|
dw WorldMapIcon_pos_toh
|
||||||
|
dw WorldMapIcon_pos_tt
|
||||||
|
dw WorldMapIcon_pos_tr
|
||||||
|
dw WorldMapIcon_pos_gt
|
||||||
|
|
||||||
|
WorldMapIcon_ExtraPointers: ; dungeon idx order
|
||||||
|
dw WorldMapIcon_extrapos_hc
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw WorldMapIcon_extrapos_dp
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw WorldMapIcon_extrapos_sw
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
dw $0000
|
||||||
|
dw $0000
|
||||||
|
dw WorldMapIcon_extrapos_tr
|
||||||
|
dw $0000
|
||||||
|
|
||||||
|
warnpc $8ABE2E
|
||||||
|
org $8ABE2E
|
||||||
|
; located posx/posy, dislocated posx/posy, prize pox/posy
|
||||||
|
; located = proper location of icon (default: if you have map)
|
||||||
|
; dislocated = location of icon if proper location is hidden from player
|
||||||
|
; highest bit on first posx indicates which world it should show in
|
||||||
|
; $FFxx on X coord means skip drawing
|
||||||
|
WorldMapIcon_pos:
|
||||||
|
.hc
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
|
||||||
|
.ep
|
||||||
|
dw $0F31, $0620, $FF00, $FF00, $0F31, $0620
|
||||||
|
.dp
|
||||||
|
dw $0108, $0D70, $FF00, $FF00, $0108, $0D70
|
||||||
|
.at
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
|
||||||
|
.sp
|
||||||
|
dw $8759, $0ED0, $FF00, $FF00, $8759, $0ED0
|
||||||
|
.pod
|
||||||
|
dw $8F40, $0620, $FF00, $FF00, $8F40, $0620
|
||||||
|
.mm
|
||||||
|
dw $8100, $0CA0, $FF00, $FF00, $8100, $0CA0
|
||||||
|
.sw
|
||||||
|
dw $8082, $00B0, $FF00, $FF00, $8082, $00B0
|
||||||
|
.ip
|
||||||
|
dw $8CA0, $0DA0, $FF00, $FF00, $8CA0, $0DA0
|
||||||
|
.toh
|
||||||
|
dw $08D0, $0080, $FF00, $FF00, $08D0, $0080
|
||||||
|
.tt
|
||||||
|
dw $81D0, $0780, $FF00, $FF00, $81D0, $0780
|
||||||
|
.tr
|
||||||
|
dw $8F11, $0103, $FF00, $FF00, $8F11, $0103
|
||||||
|
.gt
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
|
||||||
|
|
||||||
|
warnpc $8ABECA
|
||||||
|
org $8ABECA
|
||||||
|
; additional icons posx/posy (terminator = $FFxx)
|
||||||
|
; additional icons only show if located
|
||||||
|
; highest bit on posx indicates which world it should show in
|
||||||
|
WorldMapIcon_extrapos:
|
||||||
|
.hc
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FFFF
|
||||||
|
.dp
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FFFF
|
||||||
|
.sw
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FFFF
|
||||||
|
.tr
|
||||||
|
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00, $FFFF
|
||||||
|
|
||||||
|
warnpc $8ABF36
|
||||||
|
org $8ABF36
|
||||||
|
; vhpp ccco tttttttt
|
||||||
|
; v/h - vert/horiz flip
|
||||||
|
; p - draw priority
|
||||||
|
; c - color palette idx
|
||||||
|
; o - OAM page change
|
||||||
|
; t - VRAM tile idx
|
||||||
|
WorldMapIcon_prize_tile:
|
||||||
|
db $00, $00 ; ; Hyrule Castle
|
||||||
|
db $00, $00 ; ; Sewers
|
||||||
|
db $38, $62 ; green pendant ; Eastern Palace
|
||||||
|
db $34, $60 ; blue pendant ; Desert Palace
|
||||||
|
db $00, $00 ; ; Agahnim's Tower
|
||||||
|
db $34, $64 ; crystal ; Swamp Palace
|
||||||
|
db $34, $64 ; crystal ; Dark Palace
|
||||||
|
db $32, $64 ; red crystal ; Misery Mire
|
||||||
|
db $34, $64 ; crystal ; Skull Woods
|
||||||
|
db $32, $64 ; red crystal ; Ice Palace
|
||||||
|
db $32, $60 ; red pendant ; Tower of Hera
|
||||||
|
db $34, $64 ; crystal ; Thieves' Town
|
||||||
|
db $34, $64 ; crystal ; Turtle Rock
|
||||||
|
db $00, $00 ; ; Ganon's Tower
|
||||||
|
|
||||||
|
warnpc $8ABF52
|
||||||
|
org $8ABF52
|
||||||
|
WorldMapIcon_dungeon_tile:
|
||||||
|
db $22, $7E ; white H ; Hyrule Castle
|
||||||
|
db $00, $00 ; ; Sewers
|
||||||
|
db $24, $7F ; blue 1 ; Eastern Palace
|
||||||
|
db $24, $79 ; blue 2 ; Desert Palace
|
||||||
|
db $22, $7D ; white A ; Agahnim's Tower
|
||||||
|
db $22, $79 ; red 2 ; Swamp Palace
|
||||||
|
db $22, $7F ; red 1 ; Dark Palace
|
||||||
|
db $22, $6F ; red 6 ; Misery Mire
|
||||||
|
db $22, $6C ; red 3 ; Skull Woods
|
||||||
|
db $22, $6E ; red 5 ; Ice Palace
|
||||||
|
db $24, $6C ; blue 3 ; Tower of Hera
|
||||||
|
db $22, $6D ; red 4 ; Thieves' Town
|
||||||
|
db $22, $7C ; red 7 ; Turtle Rock
|
||||||
|
db $22, $66 ; skull ; Ganon's Tower
|
||||||
|
; db $22, $68 ; red X
|
||||||
|
|
||||||
|
warnpc $8ABF6E
|
||||||
|
org $8ABF6E
|
||||||
|
CompassExists:
|
||||||
|
dw $37F8
|
||||||
|
|
||||||
|
; mirror portal fixes
|
||||||
|
org $8ABF74
|
||||||
|
db $24, $64, $E4, $A4 ; lowering mirror portal draw priority
|
||||||
|
org $8ABFFA
|
||||||
|
db $4C ; use other mirror portal gfx
|
||||||
|
org $8AC00E
|
||||||
|
db $01 ; draw in 2nd OAM slot
|
||||||
|
|
||||||
|
org $8AC012 ; <- 54012 - Bank0A.asm:1039 (LDA $7EF2DB : AND.b #$20 : BNE BRANCH_DELTA)
|
||||||
|
BRA + : NOP #6 : + ; skip pyramid open check
|
||||||
|
|
||||||
|
; Scrap
|
||||||
|
; $00/$01 = Dungeon Pointer
|
||||||
|
; $02/$03 = Extra Pointer
|
||||||
|
; $04 = Current World
|
||||||
|
; $05 = Current Dungeon
|
||||||
|
; $06 = Helper Bitfield
|
||||||
|
; $0B-$0F = OAM GFX Data
|
||||||
org $8AC02B
|
org $8AC02B
|
||||||
DrawPrizesOverride:
|
DrawPrizesOverride:
|
||||||
LDX.b #$FF
|
PHB : LDA.b #WorldMapIcon_DungeonPointers>>16 : PHA : PLB
|
||||||
|
LDA.l CurrentWorld : STA.b Scrap04
|
||||||
|
REP #$20
|
||||||
|
LDA.w #$0800+8 : STA.b OAMPtr
|
||||||
|
LDA.w #$0A20+2 : STA.b OAMPtr+2
|
||||||
|
LDY.b #$1A
|
||||||
|
.next_dungeon
|
||||||
|
STY.b Scrap05
|
||||||
|
REP #$20
|
||||||
|
LDA.w WorldMapIcon_DungeonPointers,Y : BNE + : JMP .advance : +
|
||||||
|
STA.b Scrap00
|
||||||
|
LDA.w WorldMapIcon_ExtraPointers,Y : STA.b Scrap02
|
||||||
|
JSR WorldMap_CheckForDungeonState
|
||||||
|
LDA.w WorldMapIcon_dungeon_tile,Y : BNE + : JMP .advance : +
|
||||||
|
XBA : STA.b Scrap0C
|
||||||
|
TAX : CPX.b #$68 : BNE +
|
||||||
|
; handle red X animation
|
||||||
|
PHX
|
||||||
|
LDA.b FrameCounter : LSR #3 : AND.w #$0003 : TAX
|
||||||
|
LDA.l WorldMap_RedXChars,X : TAX : STX.b Scrap0D
|
||||||
|
PLX : CPX.b #$68
|
||||||
|
BRA .do_dungeon
|
||||||
|
+
|
||||||
|
LDA.b FrameCounter : AND.w #$0010 : BEQ + : JMP .show_prizes : +
|
||||||
|
.do_dungeon
|
||||||
|
; determine tile size
|
||||||
|
LDX.b #$00 : BCS +
|
||||||
|
LDX.b #$02
|
||||||
|
+ STX.b Scrap0B
|
||||||
|
|
||||||
.loopStart
|
LDA.l CompassMode : AND.w #$00F0 : ORA.b Scrap06
|
||||||
INX : PHX
|
BIT.w #$0040 : BEQ .main_dungeon_icon
|
||||||
JSR OverworldMap_CheckForPrize
|
BIT.w #$0003 : BEQ .main_dungeon_icon
|
||||||
BCC + : JMP .skip_draw : +
|
; draw additional dungeon icon under prize
|
||||||
|
LDY.b #$08 ; 8 is located
|
||||||
|
BIT.w #$0002 : BNE +
|
||||||
|
LDY.b #$04 ; 4 is dislocated
|
||||||
|
+
|
||||||
|
JSR WorldMap_ValidateCoords : BCS .main_dungeon_icon
|
||||||
|
JSR WorldMap_DrawTile
|
||||||
|
|
||||||
TXA : ASL A : TAX
|
; determine located/dislocated/hidden
|
||||||
LDA.l MapCompassFlag
|
.main_dungeon_icon
|
||||||
AND.b #$01 : BNE +
|
LDA.l CompassMode : AND.w #$00F0 : ORA.b Scrap06
|
||||||
LDA.l WorldMapIcon_posx_vanilla+1, X : STA.l $7EC10B
|
BIT.w #$0020 : BEQ + : BIT.w #$0004 : BNE .show_dungeon ; compass mode, show dungeon icon if its allowed to
|
||||||
LDA.l WorldMapIcon_posx_vanilla, X : STA.l $7EC10A
|
+ BIT.w #$0001 : BNE + : JMP .advance : + ; hidden
|
||||||
LDA.l WorldMapIcon_posy_vanilla+1, X : STA.l $7EC109
|
.show_dungeon
|
||||||
LDA.l WorldMapIcon_posy_vanilla, X : STA.l $7EC108
|
LDY.b #$00 ; 0 is located
|
||||||
BRA .adjustment
|
BIT.w #$0004 : BNE + : BIT.w #$0030 : BEQ +
|
||||||
+ LDA.l WorldMapIcon_posx_located+1, X : STA.l $7EC10B
|
LDY.b #$04 ; 4 is dislocated
|
||||||
LDA.l WorldMapIcon_posx_located, X : STA.l $7EC10A
|
+
|
||||||
LDA.l WorldMapIcon_posy_located+1, X : STA.l $7EC109
|
|
||||||
LDA.l WorldMapIcon_posy_located, X : STA.l $7EC108
|
|
||||||
.adjustment
|
|
||||||
LDA.l WorldMapIcon_tile, X : CMP.b #$FF : BEQ .skip_draw
|
|
||||||
LDA.l WorldMapIcon_tile+1, X : BEQ .dont_adjust
|
|
||||||
CMP.b #$64 : BEQ .is_crystal
|
|
||||||
LDA.b FrameCounter : AND.b #$10 : BNE .skip_draw
|
|
||||||
.is_crystal
|
|
||||||
JSR WorldMapIcon_AdjustCoordinate
|
|
||||||
.dont_adjust
|
|
||||||
JSR WorldMap_CalculateOAMCoordinates
|
|
||||||
BCC .skip_draw
|
|
||||||
PLX : PHX : TXA : ASL A : TAX
|
|
||||||
LDA.l WorldMapIcon_tile+1, X : BEQ .is_red_x
|
|
||||||
LDA.l MapCompassFlag : CMP.b #$01 : BEQ .is_red_x
|
|
||||||
LDA.l WorldMapIcon_tile+1, X : STA.b Scrap0D
|
|
||||||
LDA.l WorldMapIcon_tile, X : STA.b Scrap0C
|
|
||||||
LDA.b #$02 : BRA .continue
|
|
||||||
.is_red_x
|
|
||||||
LDA.b FrameCounter : LSR #3 : AND.b #$03 : TAX
|
|
||||||
LDA.l WorldMap_RedXChars,X : STA.b Scrap0D
|
|
||||||
LDA.b #$32 : STA.b Scrap0C : LDA.b #$00
|
|
||||||
.continue
|
|
||||||
STA.b Scrap0B
|
|
||||||
PLX : PHX
|
|
||||||
INX : JSR WorldMap_HandleSpriteBlink
|
|
||||||
.skip_draw
|
|
||||||
; end of loop
|
|
||||||
PLX : CPX.b #12 : BCS + : JMP .loopStart : +
|
|
||||||
|
|
||||||
PLA : STA.l $7EC10B
|
; determine if draw and/or continue
|
||||||
PLA : STA.l $7EC10A
|
JSR WorldMap_ValidateCoords : BCC +
|
||||||
PLA : STA.l $7EC109
|
BNE .extras : BRA .advance
|
||||||
PLA : STA.l $7EC108
|
+
|
||||||
RTS
|
JSR WorldMap_DrawTile
|
||||||
|
|
||||||
|
; TODO: draw X if prize icon is X?... here?
|
||||||
|
.extras
|
||||||
|
CPY.b #$04 : BCS .advance ; dislocated dungeon skips extras
|
||||||
|
LDA.b Scrap02 : BEQ .advance : STA.b Scrap00
|
||||||
|
LDY.b #$00
|
||||||
|
.next_icon
|
||||||
|
JSR WorldMap_ValidateCoords : BCC +
|
||||||
|
BEQ .advance : INY #4 : BRA .next_icon
|
||||||
|
+
|
||||||
|
JSR WorldMap_DrawTile
|
||||||
|
BRA .next_icon
|
||||||
|
.show_prizes
|
||||||
|
LDA.w WorldMapIcon_prize_tile,Y : BEQ .advance
|
||||||
|
XBA : STA.b Scrap0C
|
||||||
|
LDX.b #$02 : STX.b Scrap0B ; all prize icons are wide
|
||||||
|
|
||||||
; X - the index of the prize marker
|
; determine located/dislocated/unknown
|
||||||
OverworldMap_CheckForPrize:
|
LDA.l CompassMode : AND.w #$00F0 : ORA.b Scrap06
|
||||||
PHX
|
LDY.b #$04 ; 4 is dislocated
|
||||||
LDA.b #$00 : STA.l MapCompassFlag
|
BIT.w #$0003 : BEQ .advance
|
||||||
JSR OverworldMap_CheckForCompass
|
BIT.w #$0002 : BEQ +
|
||||||
BCC +
|
LDY.b #$08 ; 8 is located
|
||||||
LDA.l MapCompassFlag : ORA.b #$01 : STA.l MapCompassFlag
|
BIT.w #$0001 : BNE +
|
||||||
LDA.l CurrentWorld : AND.b #$40 : BNE ++ ; is the compass position on LW or DW?
|
; don't know what prize
|
||||||
LDA.l WorldCompassMask, X : BEQ + : JMP .fail
|
BIT.w #$0040 : BEQ .advance
|
||||||
++ LDA.l WorldCompassMask, X : BNE + : JMP .fail
|
; red X
|
||||||
+ JSR OverworldMap_CheckForMap
|
STZ.b Scrap0B
|
||||||
BCC +
|
LDA.b FrameCounter : LSR #3 : AND.w #$0003 : TAX
|
||||||
LDA.l MapCompassFlag : ORA.b #$02 : STA.l MapCompassFlag
|
LDA.l WorldMap_RedXChars,X : AND.w #$00FF : ORA.w #$2200 : STA.b Scrap0C
|
||||||
+
|
+
|
||||||
LDA.l MapCompassFlag : BEQ .fail
|
|
||||||
CMP.b #$02 : BNE .checkIfObtained
|
|
||||||
LDA.l CurrentWorld : AND.b #$40 : BNE +
|
|
||||||
CPX.b #3 : BCS .fail : BRA .checkIfObtained
|
|
||||||
+ CPX.b #10 : BCS .fail
|
|
||||||
CPX.b #3 : BCC .fail
|
|
||||||
|
|
||||||
.checkIfObtained
|
; determine if draw and/or continue
|
||||||
LDA.l MC_DungeonIdsForPrize, X
|
JSR WorldMap_ValidateCoords : BCS .advance
|
||||||
BPL +++ : CLC : BRA .done : +++ ; non-prize flags
|
JSR WorldMap_DrawTile
|
||||||
CMP.b #$02 : BCC .hyrule_castle
|
.advance
|
||||||
ASL : TAX
|
LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : +
|
||||||
REP #$20
|
PLB
|
||||||
LDA.l DungeonsCompleted : AND.l DungeonItemMasks,X : BNE .fail
|
PLA : XBA : STA.l $7EC10A
|
||||||
CLC : BRA .done
|
PLA : XBA : STA.l $7EC108
|
||||||
|
|
||||||
; see if hyrule castle has been completely cleared
|
|
||||||
.hyrule_castle
|
|
||||||
REP #$20
|
|
||||||
LDA.l CompassTotalsWRAM, X : SEC : SBC.l DungeonLocationsChecked, X
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
BEQ .fail
|
|
||||||
CLC : BRA .done
|
|
||||||
|
|
||||||
.fail
|
|
||||||
SEC
|
|
||||||
.done
|
|
||||||
SEP #$20
|
|
||||||
PLX
|
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
; X - which compass in question
|
; returns with C set if we skip drawing
|
||||||
; CLC - should not move indicator
|
; returns with Z unset if we want to continue loop for this dungeon
|
||||||
; SEC - yep indicator can move
|
WorldMap_ValidateCoords:
|
||||||
OverworldMap_CheckForCompass:
|
; checks if icon is valid
|
||||||
LDA.l CompassMode : AND.b #$80 : BEQ .unset ; should I check for compass logic
|
LDA.b (Scrap00),Y : CMP.w #$FF00 : LDX.b #$00 : BCS .fail ; exits with C and Z set
|
||||||
LDA.l CompassMode : AND.b #$40 : BEQ .set ; compasses/maps aren't shuffled
|
BIT.w #$8000 : BEQ +
|
||||||
LDA.l CompassMode : AND.b #$20 : BNE +
|
LDX.b #$40
|
||||||
JSR OverworldMap_CheckForMap : BCC .unset : BRA .set
|
+
|
||||||
+ LDA.l CompassExists, X : BEQ .set ; compass doesn't exist
|
; checks if icon is for this world
|
||||||
|
CPX.b Scrap04 : BNE .fail ; exits with C set and Z unset
|
||||||
|
AND.w #$7FFF : STA.l $7EC10A
|
||||||
|
INY #2 : LDA.b (Scrap00),Y : STA.l $7EC108
|
||||||
|
INY #2
|
||||||
|
CLC : RTS
|
||||||
|
.fail
|
||||||
|
SEC : RTS
|
||||||
|
|
||||||
|
WorldMap_DrawTile:
|
||||||
|
SEP #$20
|
||||||
|
LDX.b Scrap0B : TXA : STA.b (OAMPtr+2)
|
||||||
|
INC.b OAMPtr+2
|
||||||
|
LDA.b Scrap00 : PHA
|
||||||
|
JSR WorldMap_CalculateOAMCoordinates
|
||||||
|
PLA : STA.b Scrap00
|
||||||
|
LDX.b Scrap0B : BEQ +
|
||||||
|
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
|
||||||
|
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
|
||||||
|
+
|
||||||
|
REP #$20
|
||||||
|
LDA.b Scrap0E : STA.b (OAMPtr)
|
||||||
|
INC.b OAMPtr : INC.b OAMPtr
|
||||||
|
LDA.b Scrap0C : STA.b (OAMPtr)
|
||||||
|
INC.b OAMPtr : INC.b OAMPtr
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; Y - dungeon index
|
||||||
|
; TODO: This is terribly inefficient and needs to be rewritten someday
|
||||||
|
; DungeonItemMasks = 16-bit mask for bitfields
|
||||||
|
; DungeonsCompleted = 16-bit bitfield for beaten bosses
|
||||||
|
; MapMode = flag is maps are not wild
|
||||||
|
; MapField = 16-bit bitfield for collected maps
|
||||||
|
; MapOverlay = 16-bit bitfield for revealed prizes via Saha/Bomb Shop
|
||||||
|
; CompassMode = (repurposed version of MapMode above)
|
||||||
|
; 0x80 = flag is compasses are not wild (similar to MapMode)
|
||||||
|
; 0x10 = Maps reveals location of dungeons
|
||||||
|
; 0x20 = Compass reveals location of dungeons
|
||||||
|
; 0x40 = Boss kill reveals location of prize
|
||||||
|
; CompassField = 16-bit bitfield for collected compasses
|
||||||
|
WorldMap_CheckForDungeonState:
|
||||||
|
PHY : TYX
|
||||||
|
LDY.b #$00 ; used as bitfield
|
||||||
|
; determine if prize is revealed
|
||||||
|
LDA.l MapMode : AND.w #$0001 : BEQ .setRevealPrize ; 0 = always show, 1 = requires map
|
||||||
|
LDA.l MapField : ORA.l MapOverlay : AND.l DungeonItemMasks,X : BEQ +
|
||||||
|
.setRevealPrize
|
||||||
|
TYA : ORA.w #$0001 : TAY
|
||||||
|
+
|
||||||
|
|
||||||
|
; determine if prize is located
|
||||||
|
LDA.l CompassMode : BIT.w #$0040 : BEQ + ; boss defeated
|
||||||
|
JSR WorldMap_CheckPrizeCollected : BCC ++
|
||||||
|
TYA : AND.w #$00FC : TAY ; prize collected, hide prize icons
|
||||||
|
BRA .dungeon_icon
|
||||||
|
++ LDA.l DungeonsCompleted : AND.l DungeonItemMasks,X : BEQ ++
|
||||||
|
.setLocatePrize
|
||||||
|
TYA : ORA.w #$0002 : TAY
|
||||||
|
BRA .dungeon_icon
|
||||||
|
++ LDA.l MapOverlay : AND.l DungeonItemMasks,X : BNE .setLocatePrize
|
||||||
|
BRA .dungeon_icon
|
||||||
|
+ BIT.w #$0030 : BNE + ; Default ow map
|
||||||
|
.defaultPrizeCheck
|
||||||
|
LDA.l MapMode : AND.w #$00FF : BEQ .setLocatePrize ; 0 = always show, 1 = requires map
|
||||||
|
LDA.l MapField : ORA.l MapOverlay : AND.l DungeonItemMasks,X : BNE .setLocatePrize
|
||||||
|
BRA .dungeon_icon
|
||||||
|
+ BIT.w #$0020 : BEQ + ; compass collected
|
||||||
|
BIT.w #$0080 : BEQ .setLocatePrize ; 0 = always show, 1 = require compass
|
||||||
|
LDA.l CompassExists : AND.l DungeonItemMasks,X : BEQ .setLocatePrize
|
||||||
|
LDA.l CompassField : ORA.l MapOverlay : AND.l DungeonItemMasks,X : BNE .setLocatePrize
|
||||||
|
+ LDA.l CompassMode : BIT.w #$0010 : BNE .defaultPrizeCheck ; map collected
|
||||||
|
|
||||||
|
; determine if dungeon is located
|
||||||
|
.dungeon_icon
|
||||||
|
LDA.l CompassMode : BIT.w #$0020 : BEQ + ; compass collected
|
||||||
|
BIT.w #$0080 : BEQ .setLocateDungeon ; 0 = always show, 1 = require compass
|
||||||
|
LDA.l CompassExists : AND.l DungeonItemMasks,X : BEQ .setLocateDungeon
|
||||||
|
LDA.l CompassField : AND.l DungeonItemMasks,X : BNE .setLocateDungeon
|
||||||
|
+ ; Overworld Map: Default or Map option
|
||||||
|
LDA.l MapMode : AND.w #$00FF : BNE + ; 0 = always show, 1 = requires map
|
||||||
|
LDA.l MapField : AND.l DungeonItemMasks,X : BEQ +
|
||||||
|
.setLocateDungeon
|
||||||
|
TYA : ORA.w #$0004 : TAY
|
||||||
|
+
|
||||||
|
.continue
|
||||||
|
STY.b Scrap06
|
||||||
|
PLY
|
||||||
|
RTS
|
||||||
|
|
||||||
|
WorldMap_CheckPrizeCollected:
|
||||||
PHX
|
PHX
|
||||||
LDA.l MC_SRAM_Offsets, X : TAX ; put compass offset into X
|
TXA : LSR : TAX
|
||||||
LDA.l CompassField, X : ORA.l MapOverlay, X
|
LDA.l CrystalPendantFlags_3,X : AND.w #$00FF : BEQ .prize_not_collected
|
||||||
PLX
|
CMP.w #$0008 : LDA.l CrystalPendantFlags,X : BCS .pendant
|
||||||
AND.l MC_Masks, X : BNE .set ; is the compass obtained
|
AND.l CrystalsField : BRA .check
|
||||||
.unset
|
.pendant
|
||||||
CLC
|
AND.l PendantsField
|
||||||
RTS
|
.check
|
||||||
.set
|
AND.w #$00FF : BEQ .prize_not_collected
|
||||||
SEC
|
PLX : SEC : RTS
|
||||||
|
.prize_not_collected
|
||||||
|
PLX : CLC
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
; map - which map in question
|
WorldMap_LoadChrHalfSlot:
|
||||||
; CLC - should not show exact prize
|
JSL Graphics_LoadChrHalfSlot ; what we wrote over
|
||||||
; SEC - yep should show exact prize
|
|
||||||
OverworldMap_CheckForMap:
|
|
||||||
LDA.l MapMode : BEQ .set ; obtaining map doesn't change anything
|
|
||||||
LDA.l CurrentWorld : AND.b #$40 : BNE + ; not really sure on this check
|
|
||||||
LDA.l MapField : ORA.l MapOverlay : AND.b #$01 : BNE .set : BRA .continue
|
|
||||||
+ LDA.l MapField : ORA.l MapOverlay : AND.b #$02 : BNE .set
|
|
||||||
.continue
|
|
||||||
PHX
|
|
||||||
LDA.l MC_SRAM_Offsets, X : TAX ; put map offset into X
|
|
||||||
LDA.l MapField, X : ORA.l MapOverlay, X
|
|
||||||
PLX
|
|
||||||
AND.l MC_Masks, X : BNE .set ; is the map obtained?
|
|
||||||
.unset
|
|
||||||
CLC
|
|
||||||
RTS
|
|
||||||
.set
|
|
||||||
SEC
|
|
||||||
RTS
|
|
||||||
|
|
||||||
|
PHB : LDA.b #$7F : PHA : PLB
|
||||||
|
LDA.b #PreloadedGraphicsROM>>16 : STA.b Scrap02
|
||||||
|
REP #$20
|
||||||
|
LDX.b GameSubMode : CPX.b #$07 : BEQ .not_flute_menu
|
||||||
|
LDX.b #(.list_end-.list_flute)-6
|
||||||
|
|
||||||
|
.next_flute_group
|
||||||
|
LDA.l .list_flute+4,X : TAY
|
||||||
|
LDA.l .list_flute+2,X : STA.b Scrap03
|
||||||
|
LDA.l .list_flute,X : STA.b Scrap00
|
||||||
|
- LDA.b [$00],Y : STA.b ($03),Y : DEY #2 : BPL -
|
||||||
|
TXA : SBC.w #6 : TAX : BPL .next_flute_group ; SEC is always set
|
||||||
|
BRA .return
|
||||||
|
|
||||||
|
.not_flute_menu
|
||||||
|
LDX.b #(.list_flute-.list)-6
|
||||||
|
|
||||||
|
.next_group
|
||||||
|
LDA.l .list+4,X : TAY
|
||||||
|
LDA.l .list+2,X : STA.b Scrap03
|
||||||
|
LDA.l .list,X : STA.b Scrap00
|
||||||
|
- LDA.b [$00],Y : STA.b ($03),Y : DEY #2 : BPL -
|
||||||
|
TXA : SBC.w #6 : TAX : BPL .next_group ; SEC is always set
|
||||||
|
|
||||||
|
.return
|
||||||
|
SEP #$20
|
||||||
|
PLB
|
||||||
|
RTL
|
||||||
|
|
||||||
|
; from (bank $A2 only), to (bank $7F only), length (limited to 8-bit)
|
||||||
|
.list
|
||||||
|
dw #PreloadedGraphicsROM+$180, $7F1180, $80-2
|
||||||
|
dw #PreloadedGraphicsROM+$380, $7F1380, $80-2
|
||||||
|
dw #PreloadedGraphicsROM+$360, $7F1320, $20-2
|
||||||
|
.list_flute
|
||||||
|
dw #PreloadedGraphicsROM+$160, $7F13C0, $20-2
|
||||||
|
.list_end
|
||||||
|
|
||||||
|
warnpc $8AC3B1
|
||||||
pullpc
|
pullpc
|
||||||
|
|||||||
36
newhud.asm
36
newhud.asm
@@ -177,14 +177,14 @@ NewHUD_DrawPrizeIcon:
|
|||||||
BEQ .no_prize
|
BEQ .no_prize
|
||||||
|
|
||||||
.prize
|
.prize
|
||||||
TYX
|
TYX
|
||||||
LDA.l CrystalPendantFlags_2,X
|
LDA.l CrystalPendantFlags_3,X : AND.w #$00FF
|
||||||
BIT.w #$0080
|
ASL : TAX
|
||||||
BNE .no_icon
|
LDA.l PrizeIconTiles_Transparent,X : BEQ .no_icon
|
||||||
|
TAY
|
||||||
BIT.w #$0040
|
BRA .draw_prize
|
||||||
BNE .crystal
|
|
||||||
|
|
||||||
|
.pendant
|
||||||
LDY.w #!PTile
|
LDY.w #!PTile
|
||||||
BRA .draw_prize
|
BRA .draw_prize
|
||||||
|
|
||||||
@@ -291,6 +291,20 @@ MagicMeterColorMasks:
|
|||||||
dw $EBFF ; yellow
|
dw $EBFF ; yellow
|
||||||
dw $E3FF ; orange
|
dw $E3FF ; orange
|
||||||
|
|
||||||
|
;================================================================================
|
||||||
|
PrizeIconTiles_Transparent:
|
||||||
|
dw $0000 ; no icon
|
||||||
|
dw $2978 ; crystal 1
|
||||||
|
dw $2979 ; crystal 2
|
||||||
|
dw $297A ; crystal 3
|
||||||
|
dw $297B ; crystal 4
|
||||||
|
dw $297C ; crystal 5
|
||||||
|
dw $297D ; crystal 6
|
||||||
|
dw $297E ; crystal 7
|
||||||
|
dw $2963 ; green pendant
|
||||||
|
dw $295E ; blue pendant
|
||||||
|
dw $296E ; red pendant
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
DrawCompassCounts:
|
DrawCompassCounts:
|
||||||
LDA.l CompassMode : AND.b #$0F : BNE .continue
|
LDA.l CompassMode : AND.b #$0F : BNE .continue
|
||||||
@@ -300,9 +314,9 @@ DrawCompassCounts:
|
|||||||
|
|
||||||
; no compass needed if this bit is set
|
; no compass needed if this bit is set
|
||||||
BIT.b #$02 : BNE .draw_compass_count
|
BIT.b #$02 : BNE .draw_compass_count
|
||||||
TYX : LDA.l ExistsTransfer, X : TAX : LDA.l CompassExists, X : BEQ .draw_compass_count
|
|
||||||
REP #$20
|
REP #$20
|
||||||
LDX.w DungeonID : LDA.w CompassField : AND.l DungeonItemMasks,X : BEQ .early_exit
|
LDX.w DungeonID : LDA.l CompassExists : AND.l DungeonItemMasks,X : BEQ .draw_compass_count
|
||||||
|
LDA.w CompassField : AND.l DungeonItemMasks,X : BEQ .early_exit
|
||||||
|
|
||||||
.draw_compass_count
|
.draw_compass_count
|
||||||
LDX.w DungeonID
|
LDX.w DungeonID
|
||||||
@@ -387,10 +401,6 @@ DrawMapCounts:
|
|||||||
SEP #$20
|
SEP #$20
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
; maps from $040C to the odd order used in overworld map
|
|
||||||
ExistsTransfer:
|
|
||||||
db $0C, $0C, $00, $02, $0B, $09, $03, $07, $04, $08, $01, $06, $05, $0A
|
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Exits with:
|
; Exits with:
|
||||||
; X - ones place tile
|
; X - ones place tile
|
||||||
|
|||||||
@@ -190,7 +190,9 @@ DrawMoonPearlInMenuLocation:
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
DrawHUDDungeonItems:
|
DrawHUDDungeonItems:
|
||||||
LDA.l HUDDungeonItems : BNE .continue
|
LDA.l HUDDungeonItems : BEQ .return
|
||||||
|
JMP .continue
|
||||||
|
.return
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
.dungeon_positions
|
.dungeon_positions
|
||||||
@@ -208,6 +210,21 @@ RTL
|
|||||||
dw 26 ; Turtle Rock
|
dw 26 ; Turtle Rock
|
||||||
dw 30 ; Ganon's Tower
|
dw 30 ; Ganon's Tower
|
||||||
|
|
||||||
|
.dungeon_reorder ; why was I forced to make this table? smh.
|
||||||
|
dw 0 ; Hyrule Castle
|
||||||
|
dw 2 ; Eastern
|
||||||
|
dw 4 ; Desert
|
||||||
|
dw 18 ; Hera
|
||||||
|
dw 6 ; Agahnims Tower
|
||||||
|
dw 10 ; PoD
|
||||||
|
dw 8 ; Swamp
|
||||||
|
dw 14 ; Skull Woods
|
||||||
|
dw 20 ; Thieves Town
|
||||||
|
dw 16 ; Ice
|
||||||
|
dw 12 ; Mire
|
||||||
|
dw 22 ; Turtle Rock
|
||||||
|
dw 24 ; Ganon's Tower
|
||||||
|
|
||||||
.small_key_x_offset
|
.small_key_x_offset
|
||||||
dw HyruleCastleKeys-DungeonKeys ; Hyrule Castle
|
dw HyruleCastleKeys-DungeonKeys ; Hyrule Castle
|
||||||
dw EasternKeys-DungeonKeys ; Eastern
|
dw EasternKeys-DungeonKeys ; Eastern
|
||||||
@@ -373,8 +390,16 @@ RTL
|
|||||||
BIT.w .dungeon_bitmasks,X
|
BIT.w .dungeon_bitmasks,X
|
||||||
BEQ ..skip_map
|
BEQ ..skip_map
|
||||||
|
|
||||||
|
PHX : TXA : TAX
|
||||||
|
LDA.w .dungeon_reorder,X
|
||||||
|
LSR : TAX
|
||||||
|
LDA.l CrystalPendantFlags_3+1,X
|
||||||
|
AND.w #$00FF : ASL : TAX
|
||||||
|
LDA.w PrizeIconTiles,X : BNE +
|
||||||
|
LDA.w #$2826
|
||||||
|
+
|
||||||
|
PLX
|
||||||
LDY.w .dungeon_positions,X
|
LDY.w .dungeon_positions,X
|
||||||
LDA.w #$2826
|
|
||||||
STA.w GFXStripes+$0686,Y
|
STA.w GFXStripes+$0686,Y
|
||||||
LDA.l MapField
|
LDA.l MapField
|
||||||
|
|
||||||
@@ -412,6 +437,18 @@ RTL
|
|||||||
PLP
|
PLP
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
PrizeIconTiles:
|
||||||
|
dw $0000 ; no icon
|
||||||
|
dw $2981 ; crystal 1
|
||||||
|
dw $2982 ; crystal 2
|
||||||
|
dw $2983 ; crystal 3
|
||||||
|
dw $2984 ; crystal 4
|
||||||
|
dw $2985 ; crystal 5
|
||||||
|
dw $2986 ; crystal 6
|
||||||
|
dw $2987 ; crystal 7
|
||||||
|
dw $2990 ; green pendant
|
||||||
|
dw $298B ; blue pendant
|
||||||
|
dw $299B ; red pendant
|
||||||
;================================================================================
|
;================================================================================
|
||||||
DrawPendantCrystalDiagram:
|
DrawPendantCrystalDiagram:
|
||||||
PHP : PHB : PHK : PLB
|
PHP : PHB : PHK : PLB
|
||||||
|
|||||||
4
ram.asm
4
ram.asm
@@ -379,8 +379,9 @@ AncillaID = $7E0C4A ; $0A bytes.
|
|||||||
;
|
;
|
||||||
AncillaGeneralN = $7E0C54 ; General use buffer for ancillae. $0A bytes.
|
AncillaGeneralN = $7E0C54 ; General use buffer for ancillae. $0A bytes.
|
||||||
;
|
;
|
||||||
AncillaGet = $7E0C5E ; Used by varius ancilla in various ways. $0F bytes.
|
AncillaGet = $7E0C5E ; Used by various ancilla in various ways. $0A bytes.
|
||||||
;
|
;
|
||||||
|
AncillaDirection = $7E0C72 ; Used by various ancilla to track its direction. $0A bytes
|
||||||
AncillaLayer = $7E0C7C ;
|
AncillaLayer = $7E0C7C ;
|
||||||
;
|
;
|
||||||
SpriteForceDrop = $7E0CBA ; Forces drops on sprite death. $10 bytes.
|
SpriteForceDrop = $7E0CBA ; Forces drops on sprite death. $10 bytes.
|
||||||
@@ -917,6 +918,7 @@ endmacro
|
|||||||
%assertRAM(AncillaID, $7E0C4A)
|
%assertRAM(AncillaID, $7E0C4A)
|
||||||
%assertRAM(AncillaGeneralN, $7E0C54)
|
%assertRAM(AncillaGeneralN, $7E0C54)
|
||||||
%assertRAM(AncillaGet, $7E0C5E)
|
%assertRAM(AncillaGet, $7E0C5E)
|
||||||
|
%assertRAM(AncillaDirection, $7E0C72)
|
||||||
%assertRAM(AncillaLayer, $7E0C7C)
|
%assertRAM(AncillaLayer, $7E0C7C)
|
||||||
%assertRAM(SpriteForceDrop, $7E0CBA)
|
%assertRAM(SpriteForceDrop, $7E0CBA)
|
||||||
%assertRAM(SpriteBump, $7E0CD2)
|
%assertRAM(SpriteBump, $7E0CD2)
|
||||||
|
|||||||
215
tables.asm
215
tables.asm
@@ -123,10 +123,14 @@ db #$00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Map - #$02 = Dis
|
|||||||
MapMode:
|
MapMode:
|
||||||
db $00 ; #$00 = Always On (default) - #$01 = Require Map Item
|
db $00 ; #$00 = Always On (default) - #$01 = Require Map Item
|
||||||
CompassMode:
|
CompassMode:
|
||||||
db $00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Compass - #$02 = Display Dungeon Count Always
|
;xbcm --ii
|
||||||
; #$80 = Move prizes to custom position
|
;
|
||||||
; #$40 = Compasses or Maps are shuffled and must be obtained to show position if bit on
|
;x - True CompassMode Check (similar to MapMode): #$00 = Always On (default) - #$01 = Require Compass Item
|
||||||
; #$20 = Use Compass for position, otherwise use Map
|
;b - Boss Reveal - Beating a boss reveals the location of the prize
|
||||||
|
;c - Compass Reveal - Collecting the compass reveals the location of the dungeon
|
||||||
|
;m - Map Reveal - Collecting the map reveals the location of the dungeon
|
||||||
|
;i - Dungeon Item Counts: #$00 = Off (default) - #$01 = Display w/ Compass - #$02 = Always Display
|
||||||
|
db $00
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $B0803D ; PC 0x18003D
|
org $B0803D ; PC 0x18003D
|
||||||
PersistentFloodgate:
|
PersistentFloodgate:
|
||||||
@@ -571,52 +575,6 @@ dw $0190
|
|||||||
org $87F52F
|
org $87F52F
|
||||||
dw $0191
|
dw $0191
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
;Map Pendant / Crystal Indicators - DEPRECATED in favor of WorldMapIcon_tile, don't use
|
|
||||||
|
|
||||||
org $8ABF2E ; PC 0x53F02
|
|
||||||
dw $0100 ; #$6234 - Master Sword
|
|
||||||
|
|
||||||
org $8ABEF8 ; PC 0x53EF8
|
|
||||||
MapObject_Eastern:
|
|
||||||
dw $6238 ; #$6038 - Green Pendant / Courage
|
|
||||||
|
|
||||||
org $8ABF1C ; PC 0x53F1C
|
|
||||||
MapObject_Desert:
|
|
||||||
dw $6034 ; #$6034 - Blue Pendant / Power
|
|
||||||
|
|
||||||
org $8ABF0A ; PC 0x53F0A
|
|
||||||
MapObject_Hera:
|
|
||||||
dw $6032 ; #$6032 - Red Pendant / Wisdom
|
|
||||||
|
|
||||||
org $8ABF00 ; PC 0x53F00
|
|
||||||
MapObject_Darkness:
|
|
||||||
dw $6434 ; #6434 - Crystal
|
|
||||||
|
|
||||||
org $8ABF6C ; PC 0x53F6C
|
|
||||||
MapObject_Swamp:
|
|
||||||
dw $6434 ; #6434 - Crystal
|
|
||||||
|
|
||||||
org $8ABF12 ; PC 0x53F12
|
|
||||||
MapObject_Skull:
|
|
||||||
dw $6434 ; #6434 - Crystal
|
|
||||||
|
|
||||||
org $8ABF36 ; PC 0x53F36
|
|
||||||
MapObject_Thieves:
|
|
||||||
dw $6434 ; #6434 - Crystal
|
|
||||||
|
|
||||||
org $8ABF5A ; PC 0x53F5A
|
|
||||||
MapObject_Ice:
|
|
||||||
dw $6432 ; #6434 - Crystal 5/6
|
|
||||||
|
|
||||||
org $8ABF48 ; PC 0x53F48
|
|
||||||
MapObject_Mire:
|
|
||||||
dw $6432 ; #6434 - Crystal 5/6
|
|
||||||
|
|
||||||
org $8ABF24 ; PC 0x53F24
|
|
||||||
MapObject_TRock:
|
|
||||||
dw $6434 ; #6434 - Crystal
|
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $82A09B ; PC 0x1209B - Bank02.asm:5802 - (pool MilestoneItem_Flags:)
|
org $82A09B ; PC 0x1209B - Bank02.asm:5802 - (pool MilestoneItem_Flags:)
|
||||||
CrystalPendantFlags:
|
CrystalPendantFlags:
|
||||||
@@ -2530,6 +2488,26 @@ TreeKidItem_Player: ; EE2A
|
|||||||
db #$00
|
db #$00
|
||||||
ChestGameItem_Player: ; EE2B
|
ChestGameItem_Player: ; EE2B
|
||||||
db #$00
|
db #$00
|
||||||
|
Prize_ArmosKnights_Player: ; EE2C
|
||||||
|
db #$00
|
||||||
|
Prize_Lanmolas_Player: ; EE2D
|
||||||
|
db #$00
|
||||||
|
Prize_Moldorm_Player: ; EE2E
|
||||||
|
db #$00
|
||||||
|
Prize_HelmasaurKing_Player: ; EE2F
|
||||||
|
db #$00
|
||||||
|
Prize_Arrghus_Player: ; EE30
|
||||||
|
db #$00
|
||||||
|
Prize_Mothula_Player: ; EE31
|
||||||
|
db #$00
|
||||||
|
Prize_Blind_Player: ; EE32
|
||||||
|
db #$00
|
||||||
|
Prize_Kholdstare_Player: ; EE33
|
||||||
|
db #$00
|
||||||
|
Prize_Vitreous_Player: ; EE34
|
||||||
|
db #$00
|
||||||
|
Prize_Trinexx_Player: ; EE35
|
||||||
|
db #$00
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $B0EE30 ; PC 0x18636C
|
org $B0EE30 ; PC 0x18636C
|
||||||
RemoteItems:
|
RemoteItems:
|
||||||
@@ -2623,140 +2601,3 @@ org $B0F0C0 ; PC 0x1870C0
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; 0x1870C0 - 187FFF (unused)
|
; 0x1870C0 - 187FFF (unused)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
pushpc
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
; Overworld Map Tables
|
|
||||||
;--------------------------------------------------------------------------------
|
|
||||||
org $8ABDF6
|
|
||||||
WorldMapIcon_posx_vanilla:
|
|
||||||
dw $0F31 ; prize1
|
|
||||||
dw $08D0 ; prize2
|
|
||||||
dw $0108
|
|
||||||
dw $0F40
|
|
||||||
|
|
||||||
dw $0082
|
|
||||||
dw $0F11
|
|
||||||
dw $01D0
|
|
||||||
dw $0100
|
|
||||||
|
|
||||||
dw $0CA0
|
|
||||||
dw $0759
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FFFF ; reserved - not used
|
|
||||||
dw $FFFF
|
|
||||||
dw $FFFF
|
|
||||||
|
|
||||||
org $8ABE16
|
|
||||||
WorldMapIcon_posy_vanilla:
|
|
||||||
dw $0620 ; prize1
|
|
||||||
dw $0080 ; prize2
|
|
||||||
dw $0D70
|
|
||||||
dw $0620
|
|
||||||
|
|
||||||
dw $00B0
|
|
||||||
dw $0103
|
|
||||||
dw $0780
|
|
||||||
dw $0CA0
|
|
||||||
|
|
||||||
dw $0DA0
|
|
||||||
dw $0ED0
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FFFF ; reserved - not used
|
|
||||||
dw $FFFF
|
|
||||||
dw $FFFF
|
|
||||||
|
|
||||||
org $8ABE36
|
|
||||||
WorldMapIcon_posx_located:
|
|
||||||
dw $FF00 ; prize1
|
|
||||||
dw $FF00 ; prize2
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FFFF ; reserved - not used
|
|
||||||
dw $FFFF
|
|
||||||
dw $FFFF
|
|
||||||
|
|
||||||
org $8ABE56
|
|
||||||
WorldMapIcon_posy_located:
|
|
||||||
dw $FF00 ; prize1
|
|
||||||
dw $FF00 ; prize2
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
dw $FF00
|
|
||||||
|
|
||||||
dw $FF00
|
|
||||||
dw $FFFF ; reserved - not used
|
|
||||||
dw $FFFF
|
|
||||||
dw $FFFF
|
|
||||||
|
|
||||||
org $8ABE76
|
|
||||||
WorldMapIcon_tile:
|
|
||||||
db $38, $62 ; green pendant ; Eastern Palace
|
|
||||||
db $32, $60 ; red pendant ; Hera
|
|
||||||
db $34, $60 ; blue pendant ; Desert
|
|
||||||
db $34, $64 ; crystal ; PoD
|
|
||||||
|
|
||||||
db $34, $64 ; crystal ; Skull Woods
|
|
||||||
db $34, $64 ; crystal ; Turtle Rock
|
|
||||||
db $34, $64 ; crystal ; Thieves Town
|
|
||||||
db $34, $64 ; crystal ; Misery Mire
|
|
||||||
|
|
||||||
db $34, $64 ; crystal ; Ice Palace
|
|
||||||
db $34, $64 ; crystal ; Swamp Palace
|
|
||||||
db $32, $66 ; skull looking thing
|
|
||||||
db $00, $00 ; red x
|
|
||||||
|
|
||||||
db $00, $00 ; red x
|
|
||||||
db $00, $00 ; unused red x's
|
|
||||||
db $00, $00
|
|
||||||
db $00, $00
|
|
||||||
|
|
||||||
org $8ABE96
|
|
||||||
CompassExists:
|
|
||||||
; dw $37FC ; todo: convert to two bytes with masks? so much extra code...
|
|
||||||
; eastern hera desert pod skull trock thieves mire ice swamp gt at escape
|
|
||||||
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00, $00
|
|
||||||
|
|
||||||
; 0 = light world, 1 = dark world
|
|
||||||
org $8ABEA6
|
|
||||||
WorldCompassMask:
|
|
||||||
; eastern desert hera pod skull trock thieves mire ice swamp gt at escape x1 x2 x3
|
|
||||||
db $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00, $00
|
|
||||||
|
|
||||||
; eastern desert hera pod skull trock thieves mire ice swamp gt at escape
|
|
||||||
MC_DungeonIdsForPrize:
|
|
||||||
db $02, $0A, $03, $06, $08, $0C, $0B, $07, $09, $05, $00, $04, $01
|
|
||||||
MC_SRAM_Offsets:
|
|
||||||
db $01, $00, $01, $01, $00, $00, $00, $01, $00, $01, $00, $01, $01
|
|
||||||
MC_Masks:
|
|
||||||
; EP TH DP PD SK TR TT MM
|
|
||||||
db $20, $20, $10, $02, $80, $08, $10, $01, $40, $04, $04, $08, $40
|
|
||||||
|
|
||||||
pullpc
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ ReloadPreviouslyLoadedSheets = $80D7C8
|
|||||||
Attract_DecompressStoryGfx = $80D84E
|
Attract_DecompressStoryGfx = $80D84E
|
||||||
InitializeTilesets = $80E1DB
|
InitializeTilesets = $80E1DB
|
||||||
LoadCommonSprites_long = $80E3C4
|
LoadCommonSprites_long = $80E3C4
|
||||||
|
Graphics_LoadChrHalfSlot = $80E43A
|
||||||
LoadSelectScreenGfx = $80E529
|
LoadSelectScreenGfx = $80E529
|
||||||
CopyFontToVRAM = $80E596
|
CopyFontToVRAM = $80E596
|
||||||
LoadCommonSprites_in_file_select = $80E784
|
LoadCommonSprites_in_file_select = $80E784
|
||||||
|
|||||||
Reference in New Issue
Block a user