Merge branch 'main' into overworld_kara

This commit is contained in:
2021-07-01 23:02:23 -07:00
12 changed files with 228 additions and 71 deletions

View File

@@ -55,7 +55,7 @@ db #$20, #$19, #$08, #$31 ; year/month/day
!SRAM_SINK = "$7EF41E" ; <- change this (conflicts with Programmable item 3)
;$7EF418 - Goal Item Counter
;$7EF419 - Service Sequence
;$7EF420 - $7EF466 - Stat Tracking Bank 1 (overlaps with RNG Item Flags)
;$7EF420 - $7EF46D - Stat Tracking Bank 1 (overlaps with RNG Item Flags)
;$7EF450 - $7EF45F - RNG Item (Single) Flags
;$7EF4A0 - $7EF4A7 - Service Request Block
!PROGRESSIVE_BOMBS = "$7EF4A8"
@@ -92,6 +92,9 @@ db #$20, #$19, #$08, #$31 ; year/month/day
;!REG_MUSIC_CONTROL = $012C
!REG_MUSIC_CONTROL_REQUEST = $012C
!ONEMIND_ID = $7F5072
!ONEMIND_TIMER = $7F5073
;================================================================================
!MULTIWORLD_ITEM = "$7EF4D2"
@@ -198,7 +201,7 @@ incsrc endingsequence.asm
incsrc cuccostorm.asm
incsrc compression.asm
incsrc retro.asm
incsrc dpadinvert.asm
incsrc controllerjank.asm
incsrc boots.asm
incsrc events.asm
incsrc fileselect.asm
@@ -617,6 +620,9 @@ AddDashTremor:
org $099D04
AddAncillaLong:
org $099D1A
Ancilla_CheckIfAlreadyExistsLong:
org $09AE64
Sprite_SetSpawnedCoords:

View File

@@ -5,9 +5,31 @@
; Filtered Joypad 1 Register: [AXLR | ????]
; Filtered Joypad 1 Register: [BYST | udlr] [AXLR | ????]
!INVERT_DPAD = "$7F50CB"
InvertDPad:
LDA !INVERT_DPAD : BNE + : JMP .normal : +
DEC : BEQ .dpadOnly
LDA.l OneMindPlayerCount : BEQ .crowd_control
LDA.l !ONEMIND_ID
AND.b #$03
TAX
LDA.l .onemind_controller_offset, X
TAX
LDA.w $4218,X : STA.w $00
LDA.w $4219,X : STA.w $01
LDA #$80 : STA $4201 ; reset this so latch can read it, otherwise RNG breaks
JML.l InvertDPadReturn
.crowd_control
LDA !INVERT_DPAD : BNE +
LDA $4218 : STA $00
LDA $4219 : STA $01
JML.l InvertDPadReturn
+ DEC : BEQ .dpadOnly
DEC : BEQ .buttonsOnly
DEC : BEQ .invertBoth
.swapSides
@@ -45,8 +67,61 @@ JML.l InvertDPadReturn
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
STA $01
JML.l InvertDPadReturn
.normal
LDA $4218 : STA $00
LDA $4219 : STA $01
JML.l InvertDPadReturn
;--------------------------------------------------------------------------------
.onemind_controller_offset
db 0 ; player 0 - $4218 - joy1d1
db 0 ; player 1 - $4218 - joy1d1
db 2 ; player 2 - $421A - joy2d1
db 6 ; player 3 - $421E - joy2d2
db 2 ; player 4 - $421A - joy2d1
db 6 ; player 5 - $421E - joy2d2
;--------------------------------------------------------------------------------
HandleOneMindController:
LDA.l OneMindPlayerCount
BEQ .no_onemind
REP #$20
LDA.l !ONEMIND_TIMER
DEC
BPL .no_switch
SEP #$20
LDA.l !ONEMIND_ID
INC
CMP.l OneMindPlayerCount
BCC .no_wrap
LDA.b #$01 ; reset to player 1
.no_wrap
STA.l !ONEMIND_ID
REP #$20
LDA.l OneMindTimer
.no_switch
STA.l !ONEMIND_TIMER
SEP #$20
LDA.l !ONEMIND_ID
CMP.b #$04 ; is it player 4 or 5?
BCC .no_multitap_switch
STZ.w $4201
.no_multitap_switch
.no_onemind
STZ.b $12
JML $008034 ; reset frame loop

View File

@@ -57,6 +57,7 @@ RTL
;--------------------------------------------------------------------------------
OnUncleItemGet:
PHA
LDA.l EscapeAssist
BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : +
BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : +
@@ -69,13 +70,13 @@ OnUncleItemGet:
LDA.l UncleRefill : BIT.b #$04 : BEQ + : LDA.b #$80 : STA $7EF373 : + ; refill magic
LDA.l UncleRefill : BIT.b #$02 : BEQ + : LDA.b #50 : STA $7EF375 : + ; refill bombs
LDA.l UncleRefill : BIT.b #$01 : BEQ + ; refill arrows
LDA.b #70 : STA $7EF376
LDA.b #70 : STA $7EF376
LDA.l ArrowMode : BEQ +
LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; enable bow toggle
REP #$20 ; set 16-bit accumulator
LDA $7EF360 : !ADD.l FreeUncleItemAmount : STA $7EF360 ; rupee arrows, so also give the player some money to start
SEP #$20 ; set 8-bit accumulator
LDA.l ArrowMode : BEQ +
LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; enable bow toggle
REP #$20 ; set 16-bit accumulator
LDA $7EF360 : !ADD.l FreeUncleItemAmount : STA $7EF360 ; rupee arrows, so also give the player some money to start
SEP #$20 ; set 8-bit accumulator
+
RTL
;--------------------------------------------------------------------------------
@@ -250,6 +251,11 @@ PostItemAnimation:
LDA $0403 : STA !MULTIWORLD_ROOMDATA
+
LDA.w $02E9 : CMP.b #$01 : BNE +
LDA.b $2F : BEQ +
JSL.l IncrementChestTurnCounter
+
LDA !MULTIWORLD_ITEM_PLAYER_ID : BEQ +
STZ $02E9
LDA #$00 : STA !MULTIWORLD_ITEM_PLAYER_ID

View File

@@ -21,6 +21,8 @@ dl Init_PostRAMClear
org $008056 ; <- 56 - Bank00.asm : 77
JSL.l FrameHookAction
;--------------------------------------------------------------------------------
org $00805D
JML HandleOneMindController
;================================================================================
; NMI Hook
@@ -55,8 +57,8 @@ ReturnCheckZSNES:
;--------------------------------------------------------------------------------
;org $0083D9 ; <- 3D9 - Bank00.asm : 611 (LDA $4219 : STA $01)
;JSL.l InvertDPad : NOP
org $0083D4 ; <- 3D4 - Bank00.asm : 610 (LDA $4218 : STA $00)
JML.l InvertDPad : SKIP 6
org $0083D1 ; <- 3D1 - Bank00.asm (STZ.w JOYPAD - useless instruction here)
JML.l InvertDPad : SKIP 9
InvertDPadReturn:
;--------------------------------------------------------------------------------
@@ -2711,6 +2713,14 @@ JSL FastCreditsCutsceneTimer
org $0EE773
JSL FastTextScroll : NOP
;================================================================================
org $01FFEE : JSL IncrementDamageTakenCounter_Eight ; overworld pit
org $079506 : JSL IncrementDamageTakenCounter_Eight ; underworld pit
org $0780C6 : JSL IncrementDamageTakenCounter_Arb
org $07B0B1 : JSL IncrementMagicUseCounter
;================================================================================
; Terrorpin AI fix
;--------------------------------------------------------------------------------

View File

@@ -40,8 +40,13 @@ Init_Primary:
INX
CPX #$15 : !BLT -
.done
REP #$20
LDA.l OneMindTimer : STA.l !ONEMIND_TIMER
SEP #$20
LDA.b #$01 : STA $420D ; enable fastrom access on upper banks
STA.l !ONEMIND_ID
LDA.b #$10 : STA $BC ; set default player sprite bank

View File

@@ -23,7 +23,7 @@
; -
; -
; -
; -
; q = quickswap lock
;--------------------------------------------------------------------------------
; ProcessMenuButtons:
; out: Carry - 0 = No Button, 1 = Yes Button

View File

@@ -28,6 +28,7 @@ QuickSwap:
BRA .store
.special_swap
LDA !INVENTORY_SWAP_2 : ORA #$01 : STA !INVENTORY_SWAP_2
CPX.b #$02 : BEQ + ; boomerang
CPX.b #$01 : BEQ + ; bow
CPX.b #$05 : BEQ + ; powder
@@ -47,22 +48,14 @@ QuickSwap:
LDA.b $F6 : AND.b #$40 ;what we wrote over
RTL
RCode:
LDA.w $0202 : TAX
LDX.w $0202
LDA.b $F2 : BIT #$20 : BNE ++ ; Still holding L from a previous frame
LDA !INVENTORY_SWAP_2 : AND #$FE : STA !INVENTORY_SWAP_2
BRA +
++
LDA !INVENTORY_SWAP_2 : BIT #$01 : BEQ +
RTS
-
; CPX.b #$0F : BNE + ; incrementing into bottle
; LDX.b #$00 : BRA ++
; + CPX.b #$10 : BNE + ; incrementing bottle
; LDA.l $7EF34F : TAX
; -- : ++
; CPX.b #$04 : BEQ .noMoreBottles
; INX
; LDA.l $7EF35B,X : BEQ --
; TXA : STA.l $7EF34F
; LDX #$10
; RTS
; .noMoreBottles
; LDX #$11
; BRA .nextItem
+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
+ INX
.nextItem
@@ -70,21 +63,14 @@ RCode:
RTS
LCode:
LDA.w $0202 : TAX
LDX.w $0202
LDA.b $F2 : BIT #$10 : BNE ++ ; Still holding R from a previous frame
LDA !INVENTORY_SWAP_2 : AND #$FE : STA !INVENTORY_SWAP_2
BRA +
++
LDA !INVENTORY_SWAP_2 : BIT #$01 : BEQ +
RTS
-
; CPX.b #$11 : BNE + ; decrementing into bottle
; LDX.b #$05 : BRA ++
; + CPX.b #$10 : BNE + ; decrementing bottle
; LDA.l $7EF34F : TAX
; -- : ++
; CPX.b #$01 : BEQ .noMoreBottles
; DEX
; LDA.l $7EF35B,X : BEQ --
; TXA : STA.l $7EF34F
; LDX.b #$10
; RTS
; .noMoreBottles
; LDX.b #$0F : BRA .nextItem
+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
+ DEX
.nextItem

View File

@@ -1,7 +1,7 @@
;================================================================================
; Stat Tracking
;================================================================================
; $7EF420 - $7EF466 - Stat Tracking
; $7EF420 - $7EF46D - Stat Tracking
;--------------------------------------------------------------------------------
; $7EF420 - bonk counter
;--------------------------------------------------------------------------------
@@ -116,7 +116,9 @@
;--------------------------------------------------------------------------------
; $7EF46Bw[2] - Dungeon prizes collected by dungeon location.
;--------------------------------------------------------------------------------
; $7EF46D - 7EF49F - Free space
; $7EF46D - chest turn counter
;--------------------------------------------------------------------------------
; $7EF46E - 7EF49F - Free space
;--------------------------------------------------------------------------------
; $7EF4A0 - 7EF4A7 - Service Request
;--------------------------------------------------------------------------------
@@ -136,7 +138,7 @@
;--------------------------------------------------------------------------------
; $7EF4F1 - 7EF4FD - Free space
;--------------------------------------------------------------------------------
; 7EF4FEw[2] - Save Checksum
; $7EF4FEw[2] - Save Checksum
;--------------------------------------------------------------------------------
@@ -144,17 +146,14 @@
!LOCK_STATS = "$7EF443"
;--------------------------------------------------------------------------------
!BONK_COUNTER = "$7EF420"
!BONK_REPEAT = "$7F503F"
!LOOP_FRAMES_LOW = "$7EF42E"
StatBonkCounter:
PHA
JSL Ancilla_CheckIfAlreadyExistsLong : BCS +
LDA !LOCK_STATS : BNE +
LDA !LOOP_FRAMES_LOW : !SUB !BONK_REPEAT : CMP #30 : !BLT +
LDA !LOOP_FRAMES_LOW : STA !BONK_REPEAT
LDA !BONK_COUNTER : INC
CMP.b #100 : BEQ + ; decimal 100
STA !BONK_COUNTER
+
+
PLA
JSL.l AddDashTremor ; thing we wrote over
RTL
@@ -269,7 +268,7 @@ CountChestKey: ; called by neighbor functions
CPY #$24 : BEQ + ; small key for this dungeon - use $040C
CPY #$A0 : !BLT .end ; Ignore most items
CPY #$AE : !BGE .end ; Ignore reserved key and generic key
TYA : AND.B #$0F : BNE ++ ; If this is a sewers key, instead count it as an HC key
TYA : AND.B #$0F : BNE ++ ; If this is an HC key, instead count it as a sewers key
INC
++ TAX : BRA .count ; use Key id instead of $040C (Keysanity)
+ LDA $040C : LSR
@@ -326,6 +325,15 @@ IncrementFairyRevivalCounter:
PLA
RTL
;--------------------------------------------------------------------------------
!CHESTTURN_COUNTER = "$7EF46D"
IncrementChestTurnCounter:
PHA
LDA !LOCK_STATS : BNE +
LDA !CHESTTURN_COUNTER : INC : STA !CHESTTURN_COUNTER
+
PLA
RTL
;--------------------------------------------------------------------------------
!CHEST_COUNTER = "$7EF442"
IncrementChestCounter:
LDA.b #$01 : STA $02E9 ; thing we wrote over
@@ -364,6 +372,47 @@ IncrementBigChestCounter:
+
PLA
RTL
;--------------------------------------------------------------------------------
!DAMAGE_COUNTER = "$FFFFFF"
!MAGIC_COUNTER = "$FFFFFF"
IncrementDamageTakenCounter_Eight:
STA.l $7EF36D
PHA : PHP
LDA !LOCK_STATS : BNE +
REP #$21
LDA.l !DAMAGE_COUNTER
ADC.w #$0008
STA.l !DAMAGE_COUNTER
+ PLP
PLA
RTL
IncrementDamageTakenCounter_Arb:
PHP
LDA !LOCK_STATS : BNE +
REP #$21
LDA.b $00
AND.w #$00FF
ADC.l !DAMAGE_COUNTER
STA.l !DAMAGE_COUNTER
+ PLP
LDA.l $7EF36D
RTL
IncrementMagicUseCounter:
STA.l $7EF36E
PHA : PHP
LDA !LOCK_STATS : BNE +
REP #$21
LDA.b $00
AND.w #$00FF
ADC.l !MAGIC_COUNTER
STA.l !MAGIC_COUNTER
+ PLP : PLA
RTL
;--------------------------------------------------------------------------------
!OW_MIRROR_COUNTER = "$7EF43A"
IncrementOWMirror:

View File

@@ -644,6 +644,10 @@ print "GT Big Key Credit Start: ", pc
%blankline()
%bigcreditsleft("CHEST TURNS")
%blankline()
%bigcreditsleft("BONKS")
%blankline()
@@ -684,9 +688,6 @@ print "GT Big Key Credit Start: ", pc
%blankline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
%emptyline()
print "Collection Rate Credit Start: ", pc
@@ -727,18 +728,20 @@ print "Collection Rate Credit Start: ", pc
!GOLD_SWORD_Y = 339
!GT_BIG_KEY_X = 23
!GT_BIG_KEY_Y = 346
!CHEST_TURNS_X = 26
!CHEST_TURNS_Y = 349
!BONKS_X = 26
!BONKS_Y = 349
!BONKS_Y = 352
!SAVE_AND_QUITS_X = 26
!SAVE_AND_QUITS_Y = 352
!SAVE_AND_QUITS_Y = 355
!DEATHS_X = 26
!DEATHS_Y = 355
!DEATHS_Y = 358
!FAERIE_REVIVALS_X = 26
!FAERIE_REVIVALS_Y = 358
!FAERIE_REVIVALS_Y = 361
!TOTAL_MENU_TIME_X = 19
!TOTAL_MENU_TIME_Y = 361
!TOTAL_MENU_TIME_Y = 364
!TOTAL_LAG_TIME_X = 19
!TOTAL_LAG_TIME_Y = 364
!TOTAL_LAG_TIME_Y = 367
!COLLECTION_RATE_X = 22
!COLLECTION_RATE_Y = 380
!TOTAL_TIME_X = 19

View File

@@ -10,6 +10,7 @@
%AddStat($7EF426, 0, 4, 04, 2, !TEMPERED_SWORD_X, !TEMPERED_SWORD_Y)
%AddStat($7EF426, 0, 0, 04, 2, !GOLD_SWORD_X, !GOLD_SWORD_Y)
%AddStat($7EF42A, 0, 0, 05, 2, !GT_BIG_KEY_X, !GT_BIG_KEY_Y)
%AddStat($7EF46D, 0, 0, 08, 3, !CHEST_TURNS_X, !CHEST_TURNS_Y)
%AddStat($7EF420, 0, 0, 08, 3, !BONKS_X, !BONKS_Y)
%AddStat($7EF42D, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y)
%AddStat($7EF449, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y)
@@ -17,4 +18,4 @@
%AddStat($7EF444, 1, 8, 32, 4, !TOTAL_MENU_TIME_X, !TOTAL_MENU_TIME_Y)
%AddStat($7F5038, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y)
%AddStat($7EF423, 0, 0, 10, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y)
%AddStat($7EF43E, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y)
%AddStat($7EF43E, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y)

View File

@@ -423,7 +423,16 @@ db #$02 ; #$02 - 2 Bows (default)
ProgressiveBowReplacement:
db #$47 ; #$47 - 20 Rupees (default)
;--------------------------------------------------------------------------------
; 0x18009A - 0x18009F (unused)
; 0x18009A - 0x18009C one mind
;--------------------------------------------------------------------------------
org $30809A ; PC 0x18009A
OneMindPlayerCount:
db 0
org $30809B ; PC 0x18009B - 0x18009C
OneMindTimer:
dw 0
;--------------------------------------------------------------------------------
; 0x18009D - 0x18009F (unused)
;--------------------------------------------------------------------------------
org $3080A0 ; PC 0x1800A0 - 0x1800A4
Bugfix_MirrorlessSQToLW:
@@ -1489,7 +1498,7 @@ dw #9999 ; Rupee Limit
; $7F503C - Stats Rupee Total
; $7F503D - Stats Rupee Total
; $7F503E - Stats Item Total
; $7F503F - Bonk Repeat
; $7F503F - Unused
; $7F5040 - Free Item Dialog Temporary
; $7F5041 - Epilepsy Safety Timer
; $7F5042 - Tile Upload Offset Override (Low)
@@ -1499,7 +1508,9 @@ dw #9999 ; Rupee Limit
; $7F504F - $7F506F - Shop Block
; $7F5070 - Reserved for OneMind
; $7F5071 - Reserved for OneMind
; $7F5072 - $7F507D - Unused
; $7F5072 - OneMind player ID
; $7F5073 - $7F5074 - OneMind timer
; $7F5075 - $7F507D - Unused
; $7F507E - Clock Status
; $7F507F - Always Zero
; $7F5080 - $7F5083 - Clock Hours

View File

@@ -243,7 +243,12 @@ RTL
+ ; Everything Else
LDA.b #$08 : RTL
++ : CMP.b #$F8 : BNE ++ ; Progressive Bow
LDA $7EF354 : BNE + ; No Bow
LDA $7EF340 : INC : LSR
CMP.l ProgressiveBowLimit : !BLT +
LDA.l ProgressiveBowReplacement
JSL.l GetSpritePalette
RTL
+ : CMP.b #$00 : BNE + ; No Bow
LDA.b #$08 : RTL
+ ; Any Bow
LDA.b #$02 : RTL