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

View File

@@ -17,4 +17,14 @@ AllowSQ:
LDA !ITEM_BUSY : EOR #$01
.done
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 $02 : PHA
LDA.b #$01 : STA $7F5035 ; set flag
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
%CopyDialog(<address>)
PLA : STA $02
PLA : STA $01
PLA : STA $00
@@ -108,68 +94,114 @@ macro LoadDialogAddress(address)
PLY : PLX : PLA
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:
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 : +
PLA : PHA
LDA !ITEM_TEMPORARY
AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of...
%LoadDialogAddress(Notice_MapOf)
%CopyDialog(Notice_MapOf)
BRL .dungeon
+ : CMP.b #$80 : BNE + ; compass of...
%LoadDialogAddress(Notice_CompassOf)
%CopyDialog(Notice_CompassOf)
BRL .dungeon
+ : CMP.b #$90 : BNE + ; big key of...
%LoadDialogAddress(Notice_BigKeyOf)
%CopyDialog(Notice_BigKeyOf)
BRA .dungeon
+ : 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
+
.dungeon
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
PLA : PHA
LDA !ITEM_TEMPORARY
AND.b #$0F ; looking at high bits only
CMP.b #$00 : BNE + ; ...light world
%LoadDialogAddress(Notice_LightWorld)
%CopyDialog(Notice_LightWorld) : BRL .done
+ : CMP.b #$01 : BNE + ; ...dark world
%LoadDialogAddress(Notice_DarkWorld)
%CopyDialog(Notice_DarkWorld) : BRL .done
+ : CMP.b #$02 : BNE + ; ...ganon's tower
%LoadDialogAddress(Notice_GTower)
%CopyDialog(Notice_GTower) : BRL .done
+ : CMP.b #$03 : BNE + ; ...turtle rock
%LoadDialogAddress(Notice_TRock)
%CopyDialog(Notice_TRock) : BRL .done
+ : CMP.b #$04 : BNE + ; ...thieves' town
%LoadDialogAddress(Notice_Thieves)
%CopyDialog(Notice_Thieves) : BRL .done
+ : CMP.b #$05 : BNE + ; ...tower of hera
%LoadDialogAddress(Notice_Hera)
%CopyDialog(Notice_Hera) : BRL .done
+ : CMP.b #$06 : BNE + ; ...ice palace
%LoadDialogAddress(Notice_Ice)
%CopyDialog(Notice_Ice) : BRL .done
+ : CMP.b #$07 : BNE + ; ...skull woods
%LoadDialogAddress(Notice_Skull)
%CopyDialog(Notice_Skull) : BRL .done
+ : CMP.b #$08 : BNE + ; ...misery mire
%LoadDialogAddress(Notice_Mire)
%CopyDialog(Notice_Mire) : BRL .done
+ : CMP.b #$09 : BNE + ; ...dark palace
%LoadDialogAddress(Notice_PoD)
%CopyDialog(Notice_PoD) : BRL .done
+ : CMP.b #$0A : BNE + ; ...swamp palace
%LoadDialogAddress(Notice_Swamp)
%CopyDialog(Notice_Swamp) : BRL .done
+ : CMP.b #$0B : BNE + ; ...agahnim's tower
%LoadDialogAddress(Notice_AgaTower)
%CopyDialog(Notice_AgaTower) : BRL .done
+ : CMP.b #$0C : BNE + ; ...desert palace
%LoadDialogAddress(Notice_Desert)
%CopyDialog(Notice_Desert) : BRL .done
+ : CMP.b #$0D : BNE + ; ...eastern palace
%LoadDialogAddress(Notice_Eastern)
%CopyDialog(Notice_Eastern) : BRA .done
+ : CMP.b #$0E : BNE + ; ...hyrule castle
%LoadDialogAddress(Notice_Castle)
%CopyDialog(Notice_Castle) : BRA .done
+ : 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
RTL
.skip
PLA : PLX
;--------------------------------
PLA : STA $02
PLA : STA $01
PLA : STA $00
PLB
PLP
PLY : PLX : PLA
RTL
;--------------------------------------------------------------------------------
DialogBlind:

View File

@@ -311,7 +311,10 @@ org $1EE094 ; PC 0xF6094 - sprite_hylian_plaque.asm : 79 (JSL Sprite_ShowMessage
JSL.l DialogPedestal
;--------------------------------------------------------------------------------
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)
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
NOP
;--------------------------------------------------------------------------------
;================================================================================
@@ -983,7 +989,7 @@ LDX.b #$F1 : STX $012C
;================================================================================
org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA)
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)

View File

@@ -44,7 +44,7 @@ Notice_GTower:
; Turtle Rock
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
; Thieves Town

View File

@@ -644,15 +644,26 @@ Link_ReceiveItemAlternatesExpanded:
PLB
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:
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 $7EF340 : BNE +
LDA $7EF414 : AND.b #$40 : BEQ ++
LDA.b #$03
RTL
++
LDA $7EF340
+
LDA.w #$11CE : STA $00 ; thing we wrote over
RTL
;--------------------------------------------------------------------------------
!RNG_ITEM = "$7EF450"

View File

@@ -34,4 +34,79 @@ RTL
LDA.b #$00 ; give them money instead
+
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
;dd #$DDDDDDDD
;dd #$DDDDDDDD

View File

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