let's dev 6/10/17

fixed hobo music reset
fixed (maybe) freeroaming dungeon item text loader
cleaned up regular text loader
removed silver arrow indicator from item menu
added silver arrow indicator to hud for bowless silver state
added framework for static boss RNG
This commit is contained in:
Karkat
2017-06-10 00:20:47 -04:00
parent ab666264ca
commit bacbf1c58a
9 changed files with 262 additions and 59 deletions

View File

@@ -26,7 +26,7 @@ org $3FFFFF ; <- 1FFFFF
db #$00 ; expand file to 2mb db #$00 ; expand file to 2mb
org $1FFFF8 ; timestamp rom org $1FFFF8 ; timestamp rom
dl #$20170606 dl #$20170610
;================================================================================ ;================================================================================
@@ -189,15 +189,15 @@ GFX_HUD_Palette:
incbin hudpalette.pal incbin hudpalette.pal
warnpc $348000 warnpc $348000
org $320000 org $328000
Extra_Text_Table: Extra_Text_Table:
incsrc itemtext.asm incsrc itemtext.asm
incsrc externalhooks.asm incsrc externalhooks.asm
;================================================================================ ;================================================================================
org $2F8000 ; PC 0x178000 org $AF8000 ; PC 0x178000
Static_RNG: Static_RNG:
warnpc $2F8400 warnpc $AF8400
;================================================================================ ;================================================================================
;bank $3A reserved for downstream use (Plandomizer) ;bank $3A reserved for downstream use (Plandomizer)
;bank $3B reserved for downstream use (Plandomizer) ;bank $3B reserved for downstream use (Plandomizer)

View File

@@ -17,4 +17,14 @@ AllowSQ:
LDA !ITEM_BUSY : EOR #$01 LDA !ITEM_BUSY : EOR #$01
.done .done
RTL RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
;0 = Reset Music
;1 = Don't Reset Music
MSMusicReset:
LDA $8A : CMP.b #$80 : BNE +
LDA $23
+
RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -85,21 +85,7 @@ macro LoadDialogAddress(address)
LDA $01 : PHA LDA $01 : PHA
LDA $02 : PHA LDA $02 : PHA
LDA.b #$01 : STA $7F5035 ; set flag LDA.b #$01 : STA $7F5035 ; set flag
%CopyDialog(<address>)
LDA.b #<address> : STA $00 ; write pointer to direct page
LDA.b #<address>>>8 : STA $01
LDA.b #<address>>>16 : STA $02
REP #$20 : LDA !OFFSET_POINTER : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0
?loop:
LDA [$00], Y ; load the next character from the pointer
STA !DIALOG_BUFFER, X ; write to the buffer
INX : INY
CMP.b #$7F : BNE ?loop
REP #$20 ; set 16-bit accumulator
TXA : INC : STA !OFFSET_RETURN ; copy out X into
LDA.w #$0000 : STA !OFFSET_POINTER
SEP #$20 ; set 8-bit accumulator
PLA : STA $02 PLA : STA $02
PLA : STA $01 PLA : STA $01
PLA : STA $00 PLA : STA $00
@@ -108,68 +94,114 @@ macro LoadDialogAddress(address)
PLY : PLX : PLA PLY : PLX : PLA
endmacro endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
macro CopyDialog(address)
LDA.b #<address> : STA $00 ; write pointer to direct page
LDA.b #<address>>>8 : STA $01
LDA.b #<address>>>16 : STA $02
REP #$20 : LDA !OFFSET_POINTER : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0
?loop:
LDA [$00], Y ; load the next character from the pointer
STA !DIALOG_BUFFER, X ; write to the buffer
INX : INY
CMP.b #$7F : BNE ?loop
REP #$20 ; set 16-bit accumulator
TXA : INC : STA !OFFSET_RETURN ; copy out X into
LDA.w #$0000 : STA !OFFSET_POINTER
SEP #$20 ; set 8-bit accumulator
endmacro
;--------------------------------------------------------------------------------
!ITEM_TEMPORARY = "$7F5040"
FreeDungeonItemNotice: FreeDungeonItemNotice:
PHX : PHA STA !ITEM_TEMPORARY
PHA : PHX : PHY
PHP
PHB : PHK : PLB
SEP #$20 ; set 8-bit accumulator
REP #$10 ; set 16-bit index registers
LDA $00 : PHA
LDA $01 : PHA
LDA $02 : PHA
;--------------------------------
LDA.l FreeItemText : BNE + : BRL .skip : + LDA.l FreeItemText : BNE + : BRL .skip : +
PLA : PHA LDA !ITEM_TEMPORARY
AND.b #$F0 ; looking at high bits only AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of... CMP.b #$70 : BNE + ; map of...
%LoadDialogAddress(Notice_MapOf) %CopyDialog(Notice_MapOf)
BRL .dungeon BRL .dungeon
+ : CMP.b #$80 : BNE + ; compass of... + : CMP.b #$80 : BNE + ; compass of...
%LoadDialogAddress(Notice_CompassOf) %CopyDialog(Notice_CompassOf)
BRL .dungeon BRL .dungeon
+ : CMP.b #$90 : BNE + ; big key of... + : CMP.b #$90 : BNE + ; big key of...
%LoadDialogAddress(Notice_BigKeyOf) %CopyDialog(Notice_BigKeyOf)
BRA .dungeon BRA .dungeon
+ : CMP.b #$A0 : BNE + ; small key of... + : CMP.b #$A0 : BNE + ; small key of...
%LoadDialogAddress(Notice_SmallKeyOf) %CopyDialog(Notice_SmallKeyOf)
PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA
+ +
.dungeon .dungeon
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
PLA : PHA LDA !ITEM_TEMPORARY
AND.b #$0F ; looking at high bits only AND.b #$0F ; looking at high bits only
CMP.b #$00 : BNE + ; ...light world CMP.b #$00 : BNE + ; ...light world
%LoadDialogAddress(Notice_LightWorld) %CopyDialog(Notice_LightWorld) : BRL .done
+ : CMP.b #$01 : BNE + ; ...dark world + : CMP.b #$01 : BNE + ; ...dark world
%LoadDialogAddress(Notice_DarkWorld) %CopyDialog(Notice_DarkWorld) : BRL .done
+ : CMP.b #$02 : BNE + ; ...ganon's tower + : CMP.b #$02 : BNE + ; ...ganon's tower
%LoadDialogAddress(Notice_GTower) %CopyDialog(Notice_GTower) : BRL .done
+ : CMP.b #$03 : BNE + ; ...turtle rock + : CMP.b #$03 : BNE + ; ...turtle rock
%LoadDialogAddress(Notice_TRock) %CopyDialog(Notice_TRock) : BRL .done
+ : CMP.b #$04 : BNE + ; ...thieves' town + : CMP.b #$04 : BNE + ; ...thieves' town
%LoadDialogAddress(Notice_Thieves) %CopyDialog(Notice_Thieves) : BRL .done
+ : CMP.b #$05 : BNE + ; ...tower of hera + : CMP.b #$05 : BNE + ; ...tower of hera
%LoadDialogAddress(Notice_Hera) %CopyDialog(Notice_Hera) : BRL .done
+ : CMP.b #$06 : BNE + ; ...ice palace + : CMP.b #$06 : BNE + ; ...ice palace
%LoadDialogAddress(Notice_Ice) %CopyDialog(Notice_Ice) : BRL .done
+ : CMP.b #$07 : BNE + ; ...skull woods + : CMP.b #$07 : BNE + ; ...skull woods
%LoadDialogAddress(Notice_Skull) %CopyDialog(Notice_Skull) : BRL .done
+ : CMP.b #$08 : BNE + ; ...misery mire + : CMP.b #$08 : BNE + ; ...misery mire
%LoadDialogAddress(Notice_Mire) %CopyDialog(Notice_Mire) : BRL .done
+ : CMP.b #$09 : BNE + ; ...dark palace + : CMP.b #$09 : BNE + ; ...dark palace
%LoadDialogAddress(Notice_PoD) %CopyDialog(Notice_PoD) : BRL .done
+ : CMP.b #$0A : BNE + ; ...swamp palace + : CMP.b #$0A : BNE + ; ...swamp palace
%LoadDialogAddress(Notice_Swamp) %CopyDialog(Notice_Swamp) : BRL .done
+ : CMP.b #$0B : BNE + ; ...agahnim's tower + : CMP.b #$0B : BNE + ; ...agahnim's tower
%LoadDialogAddress(Notice_AgaTower) %CopyDialog(Notice_AgaTower) : BRL .done
+ : CMP.b #$0C : BNE + ; ...desert palace + : CMP.b #$0C : BNE + ; ...desert palace
%LoadDialogAddress(Notice_Desert) %CopyDialog(Notice_Desert) : BRL .done
+ : CMP.b #$0D : BNE + ; ...eastern palace + : CMP.b #$0D : BNE + ; ...eastern palace
%LoadDialogAddress(Notice_Eastern) %CopyDialog(Notice_Eastern) : BRA .done
+ : CMP.b #$0E : BNE + ; ...hyrule castle + : CMP.b #$0E : BNE + ; ...hyrule castle
%LoadDialogAddress(Notice_Castle) %CopyDialog(Notice_Castle) : BRA .done
+ : CMP.b #$0F : BNE + ; ...sewers + : CMP.b #$0F : BNE + ; ...sewers
%LoadDialogAddress(Notice_Sewers) %CopyDialog(Notice_Sewers)
+ +
.done
;LDA.b #$01 : STA $7F5035 ; set alternate dialog flag LDA.b #$01 : STA $7F5035 ; set alternate dialog flag
;--------------------------------
PLA : STA $02
PLA : STA $01
PLA : STA $00
PLB
PLP
PLY : PLX : PLA
JSL.l Sprite_ShowMessageMinimal JSL.l Sprite_ShowMessageMinimal
RTL
.skip .skip
PLA : PLX ;--------------------------------
PLA : STA $02
PLA : STA $01
PLA : STA $00
PLB
PLP
PLY : PLX : PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DialogBlind: DialogBlind:

View File

@@ -311,7 +311,10 @@ org $1EE094 ; PC 0xF6094 - sprite_hylian_plaque.asm : 79 (JSL Sprite_ShowMessage
JSL.l DialogPedestal JSL.l DialogPedestal
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $08C431 ; <- 44431 - ancilla_receive_item.asm : 125 (LDA $0C5E, X : CMP.b #$01 : BNE .notMasterSword2) org $08C431 ; <- 44431 - ancilla_receive_item.asm : 125 (LDA $0C5E, X : CMP.b #$01 : BNE .notMasterSword2)
LDA $8A : CMP.b #$80 : NOP JSL.l MSMusicReset : NOP
;LDA $8A : CMP.b #$80 : NOP
; $22 = $0000 - $00FF - MS Pedestal
; $22 = $0100 - $00FF - Hobo
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
@@ -790,9 +793,12 @@ LDX.w #HUD_TileMap
org $0DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700) org $0DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700)
MVN $207E MVN $207E
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $0DE48E ; <- 6E48E - equipment.asm : 1233 (LDA.w #$11CE : STA $00) ;org $0DE48E ; <- 6E48E - equipment.asm : 1233 (LDA.w #$11CE : STA $00) - HOOK HERE TO DRAW ON THE ITEM SCREEN
;JSL.l DrawHUDSilverArrows
;NOP
;--------------------------------------------------------------------------------
org $0DFB1F ; 6FB1F - headsup_display.asm : 681 (LDA $7EF340 : BEQ .hastNoBow)
JSL.l DrawHUDSilverArrows JSL.l DrawHUDSilverArrows
NOP
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
@@ -983,7 +989,7 @@ LDX.b #$F1 : STX $012C
;================================================================================ ;================================================================================
org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA) org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA)
JSL.l CheckHeraObject : BNE + : NOP JSL.l CheckHeraObject : BNE + : NOP
STX $012C STX $012C ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS
+ +
;================================================================================ ;================================================================================
org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA) org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA)

View File

@@ -44,7 +44,7 @@ Notice_GTower:
; Turtle Rock ; Turtle Rock
Notice_TRock: Notice_TRock:
db #76, $00, $BD, $00, $BE, $00, $BB, $00, $BD, $00, $B5, $00, $AE, $00, $FF, $00, $BB, $00, $B8, $00, $AC, $00, $B4 db $76, $00, $BD, $00, $BE, $00, $BB, $00, $BD, $00, $B5, $00, $AE, $00, $FF, $00, $BB, $00, $B8, $00, $AC, $00, $B4
dw #$7F7F dw #$7F7F
; Thieves Town ; Thieves Town

View File

@@ -644,15 +644,26 @@ Link_ReceiveItemAlternatesExpanded:
PLB PLB
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;DrawHUDSilverArrows:
; LDA $7EF340 : AND.w #$00FF : BNE +
; LDA $7EF414 : AND.w #$0040 : BEQ +
; LDA.w #$2810 : STA $11C8
; LDA.w #$2811 : STA $11CA
; LDA.w #$2820 : STA $1208
; LDA.w #$2821 : STA $120A
; +
; LDA.w #$11CE : STA $00 ; thing we wrote over
;RTL
;--------------------------------------------------------------------------------
;Return $7EF340 unless no bow and silvers, then return 3
DrawHUDSilverArrows: DrawHUDSilverArrows:
LDA $7EF340 : AND.w #$00FF : BNE + LDA $7EF340 : BNE +
LDA $7EF414 : AND.w #$0040 : BEQ + LDA $7EF414 : AND.b #$40 : BEQ ++
LDA.w #$2810 : STA $11C8 LDA.b #$03
LDA.w #$2811 : STA $11CA RTL
LDA.w #$2820 : STA $1208 ++
LDA.w #$2821 : STA $120A LDA $7EF340
+ +
LDA.w #$11CE : STA $00 ; thing we wrote over
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
!RNG_ITEM = "$7EF450" !RNG_ITEM = "$7EF450"

View File

@@ -34,4 +34,79 @@ RTL
LDA.b #$00 ; give them money instead LDA.b #$00 ; give them money instead
+ +
RTL RTL
;--------------------------------------------------------------------------------
RNG_Lanmolas1:
LDA.b #$00 : BRA _rng_done
RNG_Moldorm1:
LDA.b #$01 : BRA _rng_done
RNG_Agahnim1:
LDA.b #$02 : BRA _rng_done
RNG_Helmasaur:
LDA.b #$03 : BRA _rng_done
RNG_Arrghus:
LDA.b #$04 : BRA _rng_done
RNG_Mothula:
LDA.b #$05 : BRA _rng_done
RNG_Kholdstare:
LDA.b #$06 : BRA _rng_done
RNG_Vitreous:
LDA.b #$07 : BRA _rng_done
RNG_Trinexx:
LDA.b #$08 : BRA _rng_done
RNG_Lanmolas2:
LDA.b #$09 : BRA _rng_done
RNG_Moldorm2:
LDA.b #$0A : BRA _rng_done
RNG_Agahnim2:
LDA.b #$0B : BRA _rng_done
RNG_Agahnim2Phantoms:
LDA.b #$0C : BRA _rng_done
RNG_Ganon:
LDA.b #$0D
_rng_done:
JSL.l GetStaticRNG
RTL
;--------------------------------------------------------------------------------
; In: A = RNG Index
; Out: A = RNG Result
;--------------------------------------------------------------------------------
!RNG_POINTERS = "$7F5200"
GetStaticRNG:
PHX : PHP
REP #$20 ; set 16-bit accumulator and index registers
AND.w #$007F
ASL : TAX : LDA !RNG_POINTERS, X : INC : STA !RNG_POINTERS, X : TAX : ASL ; increment pointer and move value to X
LDA Static_RNG, X ; load RNG value
PLP : PLX
RTL
;--------------------------------------------------------------------------------
InitRNGPointerTable:
PHX : PHP
REP #$30 ; set 16-bit accumulator & index registers
LDX.w #$0000
-
LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
LDA .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
CPX.w #$007F : !BLT -
PLP : PLX
RTL
.rngDefaults
dw #$0000 ; 00 = Lanmolas 1
dw #$0040 ; 01 = Moldorm 1
dw #$0080 ; 02 = Agahnim 1
dw #$00C0 ; 03 = Helmasaur
dw #$0100 ; 04 = Arrghus
dw #$0140 ; 05 = Mothula
dw #$0180 ; 06 = Kholdstare
dw #$01C0 ; 07 = Vitreous
dw #$0200 ; 08 = Trinexx
dw #$0240 ; 09 = Lanmolas 2
dw #$0280 ; 10 = Moldorm 2
dw #$02C0 ; 11 = Agahnim 2
dw #$0300 ; 12 = Agahnim 2 Phantoms
dw #$0340 ; 13 = Ganon
dw #$0380 ; 14 = Unused
dw #$03C0 ; 15 = Unused
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -1,3 +1,70 @@
;--------------------------------------------------------------------------------
;Dungeon Music
;org $02D592 ; PC 0x15592
;11 - Pendant Dungeon
;16 - Crystal Dungeon
;
;org $02D592+$08
;Music_Eastern:
;db $11
;
;org $02D592+$09
;Music_Desert:
;db $16, $16, $16, $16
;
;org $02D592+$33
;Music_Hera:
;db $16
;org $02907A ; 0x1107A - Bank02.asm:3089 (#$11)
;Music_Hera2:
;db $16
;org $028B8C ; 0x10B8C - Bank02.asm:2231 (#$11)
;Music_Hera3:
;db $16
;
;org $02D592+$26
;Music_Darkness:
;db $11
;
;org $02D592+$25
;Music_Swamp:
;db $16
;
;org $02D592+$28
;Music_Skull:
;db $11, $11, $11, $11
;
;org $02D592+$76
;Music_Skul_Drop:
;db $11, $11, $11, $11
;
;org $02D592+$34
;Music_Thieves:
;db $11
;
;org $02D592+$2D
;Music_Ice:
;db $16
;
;org $02D592+$27
;Music_Mire:
;db $11
;
;org $02D592+$35
;Music_TRock:
;db $11
;org $02D592+$15
;Music_TRock2:
;db $11
;org $02D592+$18
;Music_TRock3:
;db $11, $11
;
;org $02D592+$37
;Music_GTower:
;db $11
;--------------------------------------------------------------------------------
;org $06FA78 ; set all prize packs to bombs ;org $06FA78 ; set all prize packs to bombs
;dd #$DDDDDDDD ;dd #$DDDDDDDD
;dd #$DDDDDDDD ;dd #$DDDDDDDD

View File

@@ -75,7 +75,7 @@ PedestalMusicCheck:
;db #$01 ; #$01 = Master Sword (default) ;db #$01 ; #$01 = Master Sword (default)
org $0589B0 ; PC 0x289B0 ; sprite_master_sword.asm : 179 org $0589B0 ; PC 0x289B0 ; sprite_master_sword.asm : 179
PedestalSword: PedestalSword:
db #$6A ; #$01 = Master Sword (default) db #$01 ; #$01 = Master Sword (default)
org $308029 ; PC 0x180029 org $308029 ; PC 0x180029
SmithItemMode: SmithItemMode:
@@ -1065,7 +1065,8 @@ dw #9999 ; Rupee Limit
; $7F503D - Stats Rupee Total ; $7F503D - Stats Rupee Total
; $7F503E - Stats Item Total ; $7F503E - Stats Item Total
; $7F503F - Bonk Repeat ; $7F503F - Bonk Repeat
; $7F5040 - $7F507E - Unused ; $7F5040 - Free Item Dialog Temporary
; $7F5041 - $7F507E - Unused
; $7F507E - Clock Status ; $7F507E - Clock Status
; $7F507F - Always Zero ; $7F507F - Always Zero
; $7F5080 - $7F5083 - Clock Hours ; $7F5080 - $7F5083 - Clock Hours
@@ -1082,6 +1083,7 @@ dw #9999 ; Rupee Limit
; $7F5097 - Dialog Offset Pointer Return (High) ; $7F5097 - Dialog Offset Pointer Return (High)
; $7F50D0 - $7F50FF - Block Cypher Parameters ; $7F50D0 - $7F50FF - Block Cypher Parameters
; $7F5100 - $7F51FF - Block Cypher Buffer ; $7F5100 - $7F51FF - Block Cypher Buffer
; $7F5200 - $7F52FF - RNG Pointer Block
; ;
; $7F5700 - $7F57FF - Dialog Buffer ; $7F5700 - $7F57FF - Dialog Buffer
;================================================================================ ;================================================================================