From c4452389bb17acf0ea906ef323d305dd01692988 Mon Sep 17 00:00:00 2001 From: Karkat Date: Thu, 1 Mar 2018 00:27:39 -0500 Subject: [PATCH] let's dev feb 28 2017 fixed boss swords incrementing the wrong sword when bossed drop swords quick swap support officially enabled and permitting in non-race modes in all generators --- LTTP_RND_GeneralBugfixes.asm | 2 +- framehook.asm | 25 +++++++++++++++++++++++++ heartpieces.asm | 1 + hooks.asm | 4 ++++ inventory.asm | 4 ++-- quickswap.asm | 4 ++++ shopkeeper.asm | 19 +++++++++++++++++-- tables.asm | 13 ++++++++++--- 8 files changed, 64 insertions(+), 8 deletions(-) diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 040fa16..a59f230 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -26,7 +26,7 @@ org $3FFFFF ; <- 1FFFFF db #$00 ; expand file to 2mb org $1FFFF8 ; <- FFFF8 timestamp rom -db #$20, #$18, #$02, #$27 ; year/month/day +db #$20, #$18, #$02, #$28 ; year/month/day ;================================================================================ diff --git a/framehook.asm b/framehook.asm index 9567028..36238c7 100644 --- a/framehook.asm +++ b/framehook.asm @@ -51,4 +51,29 @@ NMIHookAction: ++ JML.l NMIHookReturn +;-------------------------------------------------------------------------------- +!NMI_AUX = "$7F5044" +PostNMIHookAction: + LDA !NMI_AUX+2 : BEQ + + LDA $00 : PHA ; preserve DP ram + LDA $01 : PHA + LDA $02 : PHA + + LDA !NMI_AUX+2 : STA $02 ; set up jump pointer + LDA !NMI_AUX+1 : STA $01 + LDA !NMI_AUX+0 : STA $00 + + PHK : PER .return-1 ; push stack for RTL return + JMP [$0000] + + .return + LDA.b #$00 : STA !NMI_AUX+2 ; zero bank byte of NMI hook pointer + + PLA : STA $02 + PLA : STA $01 + PLA : STA $00 + + + + LDA $13 : STA $2100 ; thing we wrote over, turn screen back on +JML.l PostNMIHookReturn ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/heartpieces.asm b/heartpieces.asm index 37f7116..9d55e03 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -33,6 +33,7 @@ RTL ;-------------------------------------------------------------------------------- HeartContainerGet: PHX : PHY + JSL.l AddInventory_incrementBossSwordLong JSL.l LoadHeartContainerRoomValue : TAY ; load item value into Y register BRA HeartPieceGet_skipLoad diff --git a/hooks.asm b/hooks.asm index b2d057d..0ccb1bd 100644 --- a/hooks.asm +++ b/hooks.asm @@ -21,6 +21,10 @@ JML.l NMIHookAction org $0080D0 ; <- D0 - Bank00.asm : 164 (PHA : PHX : PHY : PHD : PHB) NMIHookReturn: ;-------------------------------------------------------------------------------- +;org $00821B ; <- 21B - Bank00.asm : 329 (LDA $13 : STA $2100) +;JML.l PostNMIHookAction : NOP +;PostNMIHookReturn: +;-------------------------------------------------------------------------------- ;================================================================================ ; Anti-ZSNES Hook diff --git a/inventory.asm b/inventory.asm index 366bc7b..d535b2f 100644 --- a/inventory.asm +++ b/inventory.asm @@ -621,7 +621,7 @@ RTS LDA $7EF429 : INC : AND #$03 : TAX LDA $7EF429 : AND #$FC : STA $7EF429 TXA : ORA $7EF429 : STA $7EF429 - JSR .incrementBossSword + ; JSR .incrementBossSword RTS .incrementCapacity @@ -642,7 +642,7 @@ RTS LDA $7EF422 : INC : AND #$07 : TAX LDA $7EF422 : AND #$F8 : STA $7EF422 TXA : ORA $7EF422 : STA $7EF422 - JSR .incrementBossSword + ; JSR .incrementBossSword RTS .incrementMail diff --git a/quickswap.asm b/quickswap.asm index 59adbf0..da04ddb 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -12,6 +12,10 @@ QuickSwap: LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items ;TODO add romtype and race rom checks here + LDA.l TournamentSeed : BEQ + + LDA.l GameType : AND.b #$02 : BNE + + BRA .done + + PHX XBA ; restore the stashed value diff --git a/shopkeeper.asm b/shopkeeper.asm index b86d2b4..a7686a6 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -132,6 +132,9 @@ RTS !SCRATCH_TEMP_X = "$7F5061" !SHOP_SRAM_INDEX = "$7F5062" !SHOP_MERCHANT = "$7F5063" +!SHOP_DMA_TIMER = "$7F5064" +;-------------------------------------------------------------------------------- +!NMI_AUX = "$7F5044" ;-------------------------------------------------------------------------------- .digit_properties dw $0230, $0231, $0202, $0203, $0212, $0213, $0222, $0223, $0232, $0233 @@ -141,6 +144,7 @@ dw 4, 0, -4, -8 ;-------------------------------------------------------------------------------- SpritePrep_ShopKeeper: PHX : PHY : PHP + REP #$30 ; set 16-bit accumulator & index registers ;LDA $A0 LDX.w #$0000 @@ -211,8 +215,9 @@ SpritePrep_ShopKeeper: .stop LDA #$80 : STA $2100 - JSR UploadVRAMTiles + JSR Shopkeeper_UploadVRAMTiles LDA #$0F : STA $2100 + ;JSR.w QueueItemDMA .done LDA.b #$00 : STA !SHOP_STATE @@ -230,6 +235,12 @@ dw $0000, $0000 dw $0080, $0000 dw $0100, $0000 ;-------------------------------------------------------------------------------- +QueueItemDMA: + LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA !NMI_AUX + LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA !NMI_AUX+1 + LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA !NMI_AUX+2 +RTS +;-------------------------------------------------------------------------------- ; X - Tile Buffer Offset ; Y - Item ID LoadTile: @@ -246,7 +257,10 @@ RTS ;-------------------------------------------------------------------------------- ;!SHOP_PURCHASE_COUNTS = "$7EF3A0" ;-------------------------------------------------------------------------------- -UploadVRAMTiles: +Shopkeeper_UploadVRAMTilesLong: + JSR.w Shopkeeper_UploadVRAMTiles +RTL +Shopkeeper_UploadVRAMTiles: LDA $4300 : PHA ; preserve DMA parameters LDA $4301 : PHA ; preserve DMA parameters LDA $4302 : PHA ; preserve DMA parameters @@ -314,6 +328,7 @@ Shopkepeer_CallOriginal: ;!SHOP_CAPACITY = "$7F5020" ;!SCRATCH_TEMP_X = "$7F5021" Sprite_ShopKeeper: + LDA.l !SHOP_TYPE : CMP.b #$FF : BNE + : JMP.w Shopkepeer_CallOriginal : + PHB : PHK : PLB diff --git a/tables.asm b/tables.asm index 4e24ffc..feaba89 100644 --- a/tables.asm +++ b/tables.asm @@ -802,7 +802,12 @@ db #$00 ; #$00 = Casual (default) - #$01 = Glitched - #$02 = Speedrunner - #$FF ;-------------------------------------------------------------------------------- org $308211 ; PC 0x180211 GameType: -db #$00 ; #$00 = Randomizer (default) - #$01 = Plandomizer - #$FF = Other Editors +;---- ridn +;r - room randomization +;i - item randomization +;d - door/entrance randomization +;n - enemy randomization +db #$00 ; #$00 = Not Randomized (default) ;-------------------------------------------------------------------------------- ;dgGe mutT ;d - Nonstandard Dungeon Configuration (Not Map/Compass/BigKey/SmallKeys in same quantity as vanilla) @@ -1329,7 +1334,8 @@ dw #9999 ; Rupee Limit ; $7F5041 - Unused ; $7F5042 - Tile Upload Offset Override (Low) ; $7F5043 - Tile Upload Offset Override (High) -; $7F5044 - $7F504F - Unused +; $7F5044 - $7F5046 - NMI Auxiliary Function +; $7F5047 - $7F504F - Unused ; $7F5050 - $7F506F - Shop Block ; $7F5070 - $7F507D - Unused ; $7F507E - Clock Status @@ -1462,7 +1468,8 @@ org $30C800 ; PC 0x184800 - 0x18487F - max 16 shops ShopTable: ;db [id][roomID-low][roomID-high][doorID][zero][shop_config][shopkeeper_config][sram_index] db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -db $01, $0F, $01, $57, $00, $03, $C1, $00 +db $01, $FF, $00, $00, $00, $43, $A0, $00 +;db $01, $0F, $01, $57, $00, $03, $C1, $00 db $02, $0F, $01, $60, $00, $03, $C1, $03 db $FF, $12, $01, $58, $00, $02, $E3, $06 db $02, $0F, $01, $57, $00, $03, $A0, $09