From 9e5e9a17eda97a584a7be0353ee0f02ff2330c65 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Tue, 5 Jul 2022 12:49:00 -0400 Subject: [PATCH 001/176] Check submodule during goal NPC interaction to prevent it from firing when menu is open (via kan) --- elder.asm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/elder.asm b/elder.asm index 87f25a1..5c4a6a6 100644 --- a/elder.asm +++ b/elder.asm @@ -50,6 +50,8 @@ RTL RTS + SEP #$20 + LDA.b $11 + BNE .done LDA.b #$96 LDY.b #$01 From 10079a539b240ee665b5bacbc4c795ddd5e9b602 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Mon, 25 Jul 2022 22:19:06 -0400 Subject: [PATCH 002/176] Compute checksum for extended SRAM Validate SRAM on file screen load and delete if checksum incorrect --- hooks.asm | 11 ++++++++--- save.asm | 50 +++++++++++++++++++++++++++++++++++++++++--------- sram.asm | 13 +++++++------ 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/hooks.asm b/hooks.asm index 21c9b24..250201f 100755 --- a/hooks.asm +++ b/hooks.asm @@ -188,7 +188,7 @@ JSL.l AltBufferTable : NOP #8 ; Delete screen ;-------------------------------------------------------------------------------- org $0CCCCC ;<- 64CCC - Bank0C.asm : 1628 (JSL Intro_ValidateSram) / Bank02.asm : 75 (REP #$30) ; Explanation: In JP 1.0 the code for Intro_ValidateSram was inline in Bank 0C -JML.l Validate_SRAM ;(Return via RTL. Original code JML'd to Intro_LoadSpriteStats which returns with RTL, but we want to skip that) +JML.l ValidateSRAM ;(Return via RTL. Original code JML'd to Intro_LoadSpriteStats which returns with RTL, but we want to skip that) org $0CCD57 ;<- 64D57 - Bank0C.asm : RTL ;Just in case anybody ever removes the previous hook ;-------------------------------------------------------------------------------- @@ -299,12 +299,17 @@ BRA + ;================================================================================ ; Extended SRAM Save file ;-------------------------------------------------------------------------------- -org $0ccf08 ; <- Bank0C.asm : 2036 (LDA.w #$0007 : STA $7EC00D : STA $7EC013) +org $0CCF08 ; <- Bank0C.asm : 2036 (LDA.w #$0007 : STA $7EC00D : STA $7EC013) JSL CopyExtendedSaveFileToWRAM ;-------------------------------------------------------------------------------- org $008998 ; <- Bank00.asm : 1296 (LDX.w #$0000) JSL CopyExtendedWRAMSaveFileToSRAM ;-------------------------------------------------------------------------------- +org $00899C ; <- bank_00.asm : #_00899C (CLC) +JSL WriteSaveChecksum +LDA.w #$01F3 : TCS : SEP #$30 : PLB : RTL ; Get the stack and data bank correct +padbyte $FF : pad $0089C2 ; Fill adjacent free rom forward. See bank_00.asm: #_0089C2 +;-------------------------------------------------------------------------------- org $0CD7AB ; <- Bank0C.asm : 3342 (STA $700400, X) JSL.l ClearExtendedSaveFile ;-------------------------------------------------------------------------------- @@ -2807,4 +2812,4 @@ if !FEATURE_NEW_TEXT JSL RenderCharSetColorExtended_init org $0EF285 JSL RenderCharSetColorExtended_close : NOP -endif \ No newline at end of file +endif diff --git a/save.asm b/save.asm index 1aab65d..8c6f049 100644 --- a/save.asm +++ b/save.asm @@ -1,12 +1,40 @@ ;-------------------------------------------------------------------------------- -Validate_SRAM: - REP #$30 ; vanilla behavior from $0CCD45, includes prize pack reset after save and quit - LDX #$00FE : - - STZ $0D00, X - STZ $0E00, X - STZ $0F00, X - DEX #2 - BPL - +WriteSaveChecksum: + LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes + CLC : ADC.l SaveDataWRAM, X + INX #2 + CPX #$04FE : BNE - + LDX.w #$0000 : - ; Checksum extended save data + CLC : ADC.l ExtendedFileNameWRAM, X + INX #2 + CPX #$0FFE : BNE - + STA.b $00 + LDA.w #$5A5A + SEC : SBC.b $00 + STA.l $7004FE +RTL +;-------------------------------------------------------------------------------- +ValidateSRAM: + REP #$30 + LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes + CLC : ADC.l CartridgeSRAM,X + INX #2 + CPX.w #$04FE : BNE - + LDX.w #$0000 : - ; Checksum extended save data + CLC : ADC.l ExtendedFileNameSRAM, X + INX #2 + CPX #$0FFE : BNE - + STA.b $00 + LDA.w #$5A5A + SEC : SBC.b $00 + CMP.l InverseChecksumSRAM : BEQ + + TDC : STA.l FileValiditySRAM : + ; Delete save by way of zeroing validity marker + LDX.w #$00FE : - ; includes prize pack reset after save and quit + STZ $0D00, X + STZ $0E00, X + STZ $0F00, X + DEX #2 + BPL - SEP #$30 RTL ;-------------------------------------------------------------------------------- @@ -23,6 +51,11 @@ ClearExtendedSaveFile: STA $700D00, X STA $700E00, X STA $700F00, X + STA $701000, X + STA $701100, X + STA $701200, X + STA $701300, X + STA $701400, X RTL ;-------------------------------------------------------------------------------- ClearExtendedWRAMSaveFile: @@ -125,5 +158,4 @@ CopyExtendedWRAMSaveFileToSRAM: REP #$30 PLB PLA - LDX.w #$0000 : TXA ; what we wrote over RTL diff --git a/sram.asm b/sram.asm index 07a2283..687e6ba 100644 --- a/sram.asm +++ b/sram.asm @@ -10,6 +10,7 @@ ;-------------------------------------------------------------------------------- pushpc org 0 ; This module writes no bytes. Asar gives bank cross errors without this. +SaveDataWRAM = $7EF000 ;================================================================================ ; Room Data ($7EF000 - $7EF27F @@ -366,7 +367,7 @@ GTCollectedKeys: skip 1 ; / Ganon's Tower skip 2 ; Reserved for previous table FileMarker: skip 1 ; $FF = Active save file | $00 = Inactive save file skip 13 ; Unused -InverseChecksum: skip 2 ; Vanilla Inverse Checksum. Don't write unless computing checksum. +InverseChecksumWRAM: skip 2 ; Vanilla Inverse Checksum. Don't write unless computing checksum. ;================================================================================ ; Expanded SRAM ($7F6000 - $7F6FFF) @@ -379,8 +380,7 @@ ExtendedFileNameWRAM: skip 24 ; File name, 12 word-length characters. RoomPotData: skip 592 ; Table for expanded pot shuffle. One word per room. SpritePotData: skip 592 ; Table for expanded pot shuffle. One word per room. PurchaseCounts: skip 96 ; Keeps track of shop purchases -PrivateBlock: skip 512 ; Reserved for 3rd party developers -DummyValue: skip 1 ; $01 if you're a real dummy +PrivateBlock: skip 513 ; Reserved for 3rd party developers ;================================================================================ ; Direct SRAM Assignments ($700000 - $7080000) @@ -403,7 +403,8 @@ ProgressIndicatorSRAM: skip 1 ; skip 19 ; FileNameVanillaSRAM: skip 8 ; First four characters of file name FileValiditySRAM: skip 2 ; -skip 285 ; +skip 283 ; +InverseChecksumSRAM: skip 2 ; ExtendedFileNameSRAM: skip 24 ; We read and write the file name directly from and to SRAM (24 bytes) skip $1AE4 ; RomVersionSRAM: skip 4 ; ALTTPR ROM version. Low byte is the version, high byte writes @@ -515,7 +516,7 @@ endmacro %assertSRAM(FollowerDropped, $7EF3D3) %assertSRAM(FileNameVanillaWRAM, $7EF3D9) %assertSRAM(FileValidity, $7EF3E1) -%assertSRAM(InverseChecksum, $7EF4FE) +%assertSRAM(InverseChecksumWRAM, $7EF4FE) ;================================================================================ ; Randomizer Assertions @@ -640,7 +641,6 @@ endmacro %assertSRAM(SpritePotData, $7F6268) %assertSRAM(PurchaseCounts, $7F64B8) %assertSRAM(PrivateBlock, $7F6518) -%assertSRAM(DummyValue, $7F6718) ;================================================================================ ; Direct SRAM Assertions @@ -654,6 +654,7 @@ endmacro %assertSRAM(ProgressIndicatorSRAM, $7003C5) %assertSRAM(FileNameVanillaSRAM, $7003D9) %assertSRAM(FileValiditySRAM, $7003E1) +%assertSRAM(InverseChecksumSRAM, $7004FE) %assertSRAM(ExtendedFileNameSRAM, $700500) %assertSRAM(RomNameSRAM, $702000) %assertSRAM(RomVersionSRAM, $701FFC) From d8846a4ba9888c1ba31c32873e95bc8dec60763d Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Fri, 29 Jul 2022 20:57:54 -0400 Subject: [PATCH 003/176] Add backup save that gets checked and loaded if main save is corrupt Add suffixes to instructions in save.asm Disable HDMA, NMI, and joypad during extended save DMA --- hooks.asm | 2 +- save.asm | 279 ++++++++++++++++++++++++++++++++---------------------- sram.asm | 10 +- 3 files changed, 175 insertions(+), 116 deletions(-) diff --git a/hooks.asm b/hooks.asm index 250201f..ede0106 100755 --- a/hooks.asm +++ b/hooks.asm @@ -306,7 +306,7 @@ org $008998 ; <- Bank00.asm : 1296 (LDX.w #$0000) JSL CopyExtendedWRAMSaveFileToSRAM ;-------------------------------------------------------------------------------- org $00899C ; <- bank_00.asm : #_00899C (CLC) -JSL WriteSaveChecksum +JSL WriteSaveChecksumAndBackup LDA.w #$01F3 : TCS : SEP #$30 : PLB : RTL ; Get the stack and data bank correct padbyte $FF : pad $0089C2 ; Fill adjacent free rom forward. See bank_00.asm: #_0089C2 ;-------------------------------------------------------------------------------- diff --git a/save.asm b/save.asm index 8c6f049..f2723be 100644 --- a/save.asm +++ b/save.asm @@ -1,161 +1,218 @@ ;-------------------------------------------------------------------------------- -WriteSaveChecksum: +WriteSaveChecksumAndBackup: LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes CLC : ADC.l SaveDataWRAM, X INX #2 - CPX #$04FE : BNE - + CPX.w #$04FE : BNE - LDX.w #$0000 : - ; Checksum extended save data CLC : ADC.l ExtendedFileNameWRAM, X INX #2 - CPX #$0FFE : BNE - + CPX.w #$0FFE : BNE - STA.b $00 LDA.w #$5A5A SEC : SBC.b $00 - STA.l $7004FE + STA.l InverseChecksumSRAM + + PHB + LDA.w #$14FF ; \ + LDX.w #$0000 ; | Copies $1500 bytes from beginning of cart SRAM to + LDY.w #$4000 ; | $704000 + MVN $70, $70 ; / + PLB + RTL ;-------------------------------------------------------------------------------- ValidateSRAM: REP #$30 LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes - CLC : ADC.l CartridgeSRAM,X + CLC : ADC.l CartridgeSRAM, X INX #2 CPX.w #$04FE : BNE - LDX.w #$0000 : - ; Checksum extended save data CLC : ADC.l ExtendedFileNameSRAM, X INX #2 - CPX #$0FFE : BNE - + CPX.w #$0FFE : BNE - STA.b $00 LDA.w #$5A5A SEC : SBC.b $00 - CMP.l InverseChecksumSRAM : BEQ + - TDC : STA.l FileValiditySRAM : + ; Delete save by way of zeroing validity marker + CMP.l InverseChecksumSRAM : BEQ .goodchecksum + LDX.w #$0000 : TXA : - ; Do the same for the backup save + CLC : ADC.l SaveBackupSRAM, X + INX #2 + CPX.w #$04FE : BNE - + LDX.w #$0000 : - + CLC : ADC.l SaveBackupSRAM+$500, X + INX #2 + CPX.w #$0FFE : BNE - + STA.b $00 + LDA.w #$5A5A + SEC : SBC.b $00 + CMP.l SaveBackupSRAM+$4FE : BEQ + + TDC : STA.l FileValiditySRAM ; Delete save by way of zeroing validity marker + BRA .goodchecksum : + + PHB + LDA.w #$14FF ; \ + LDX.w #$4000 ; | Copies $1500 bytes from backup on cart SRAM to + LDY.w #$0000 ; | main save location at $700000 + MVN $70, $70 ; / + PLB + + .goodchecksum LDX.w #$00FE : - ; includes prize pack reset after save and quit - STZ $0D00, X - STZ $0E00, X - STZ $0F00, X + STZ.w $0D00, X + STZ.w $0E00, X + STZ.w $0F00, X DEX #2 BPL - SEP #$30 RTL ;-------------------------------------------------------------------------------- ClearExtendedSaveFile: - STA $700400, X ; what we wrote over - STA $700500, X - STA $700600, X - STA $700700, X - STA $700800, X - STA $700900, X - STA $700A00, X - STA $700B00, X - STA $700C00, X - STA $700D00, X - STA $700E00, X - STA $700F00, X - STA $701000, X - STA $701100, X - STA $701200, X - STA $701300, X - STA $701400, X + STA.l $700400, X ; what we wrote over + STA.l $700500, X + STA.l $700600, X + STA.l $700700, X + STA.l $700800, X + STA.l $700900, X + STA.l $700A00, X + STA.l $700B00, X + STA.l $700C00, X + STA.l $700D00, X + STA.l $700E00, X + STA.l $700F00, X + STA.l $701000, X + STA.l $701100, X + STA.l $701200, X + STA.l $701300, X + STA.l $701400, X + ; Clear backup save + STA.l $704000, X + STA.l $704100, X + STA.l $704200, X + STA.l $704300, X + STA.l $704400, X + STA.l $704500, X + STA.l $704600, X + STA.l $704700, X + STA.l $704800, X + STA.l $704900, X + STA.l $704A00, X + STA.l $704B00, X + STA.l $704C00, X + STA.l $704D00, X + STA.l $704E00, X + STA.l $704F00, X + STA.l $705000, X + STA.l $705100, X + STA.l $705200, X + STA.l $705300, X + STA.l $705400, X RTL ;-------------------------------------------------------------------------------- ClearExtendedWRAMSaveFile: - STA $7EF400, X ; what we wrote over - STA $7F6000, X - STA $7F6100, X - STA $7F6200, X - STA $7F6300, X - STA $7F6400, X - STA $7F6500, X - STA $7F6600, X - STA $7F6700, X - STA $7F6800, X - STA $7F6900, X - STA $7F6A00, X - STA $7F6B00, X - STA $7F6C00, X - STA $7F6D00, X - STA $7F6E00, X - STA $7F6F00, X + STA.l $7EF400, X ; what we wrote over + STA.l $7F6000, X + STA.l $7F6100, X + STA.l $7F6200, X + STA.l $7F6300, X + STA.l $7F6400, X + STA.l $7F6500, X + STA.l $7F6600, X + STA.l $7F6700, X + STA.l $7F6800, X + STA.l $7F6900, X + STA.l $7F6A00, X + STA.l $7F6B00, X + STA.l $7F6C00, X + STA.l $7F6D00, X + STA.l $7F6E00, X + STA.l $7F6F00, X RTL ;-------------------------------------------------------------------------------- CopyExtendedSaveFileToWRAM: - PHA - SEP #$30 - LDA $4300 : PHA ; preserve DMA parameters - LDA $4301 : PHA ; preserve DMA parameters - LDA $4302 : PHA ; preserve DMA parameters - LDA $4303 : PHA ; preserve DMA parameters - LDA $4304 : PHA ; preserve DMA parameters - LDA $4305 : PHA ; preserve DMA parameters - LDA $4306 : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - LDA #$00 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode + PHA + SEP #$30 + LDA.w $4300 : PHA ; preserve DMA parameters + LDA.w $4301 : PHA ; preserve DMA parameters + LDA.w $4302 : PHA ; preserve DMA parameters + LDA.w $4303 : PHA ; preserve DMA parameters + LDA.w $4304 : PHA ; preserve DMA parameters + LDA.w $4305 : PHA ; preserve DMA parameters + LDA.w $4306 : PHA ; preserve DMA parameters + ;-------------------------------------------------------------------------------- + STZ.w $4200 ; Disable NMI, V/H, joypad + STZ.w $420C ; Disable HDMA + LDA.b #$00 : STA.w $4300 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode - LDA #$80 : STA $4301 ; set bus B source to WRAM register + LDA.b #$80 : STA.w $4301 ; set bus B source to WRAM register - LDA #$00 : STA $2181 ; set WRAM register source address - LDA #$60 : STA $2182 - LDA #$7F : STA $2183 + LDA.b #$00 : STA.w $2181 ; set WRAM register source address + LDA.b #$60 : STA.w $2182 + LDA.b #$7F : STA.w $2183 - STZ $4302 ; set bus A destination address to SRAM - LDA #$05 : STA $4303 - LDA #$70 : STA $4304 + STZ.w $4302 ; set bus A destination address to SRAM + LDA.b #$05 : STA.w $4303 + LDA.b #$70 : STA.w $4304 - LDA #$00 : STA $4305 ; set transfer size to 0x1000 - LDA #$10 : STA $4306 ; STZ $4307 + LDA.b #$00 : STA.w $4305 ; set transfer size to 0x1000 + LDA.b #$10 : STA.w $4306 ; STZ $4307 - LDA #$01 : STA $420B ; begin DMA transfer - ;-------------------------------------------------------------------------------- - PLA : STA $4306 ; restore DMA parameters - PLA : STA $4305 ; restore DMA parameters - PLA : STA $4304 ; restore DMA parameters - PLA : STA $4303 ; restore DMA parameters - PLA : STA $4302 ; restore DMA parameters - PLA : STA $4301 ; restore DMA parameters - PLA : STA $4300 ; restore DMA parameters - REP #$30 - PLA - STA $7EC00D ; what we wrote over + LDA.b #$01 : STA.w $420B ; begin DMA transfer + LDA.b #$81 : STA.w $4200 ; Re-enable NMI and joypad + ;-------------------------------------------------------------------------------- + PLA : STA.w $4306 ; restore DMA parameters + PLA : STA.w $4305 ; restore DMA parameters + PLA : STA.w $4304 ; restore DMA parameters + PLA : STA.w $4303 ; restore DMA parameters + PLA : STA.w $4302 ; restore DMA parameters + PLA : STA.w $4301 ; restore DMA parameters + PLA : STA.w $4300 ; restore DMA parameters + REP #$30 + PLA + STA $7EC00D ; what we wrote over RTL ;-------------------------------------------------------------------------------- CopyExtendedWRAMSaveFileToSRAM: - PHA - PHB - SEP #$30 - LDA #$00 : PHA : PLB - LDA $4300 : PHA ; preserve DMA parameters - LDA $4301 : PHA ; preserve DMA parameters - LDA $4302 : PHA ; preserve DMA parameters - LDA $4303 : PHA ; preserve DMA parameters - LDA $4304 : PHA ; preserve DMA parameters - LDA $4305 : PHA ; preserve DMA parameters - LDA $4306 : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - LDA #$80 : STA $4300 ; set DMA transfer direction B -> A, bus A auto increment, single-byte mode + PHA + PHB + SEP #$30 + LDA #$00 : PHA : PLB + LDA.w $4300 : PHA ; preserve DMA parameters + LDA.w $4301 : PHA ; preserve DMA parameters + LDA.w $4302 : PHA ; preserve DMA parameters + LDA.w $4303 : PHA ; preserve DMA parameters + LDA.w $4304 : PHA ; preserve DMA parameters + LDA.w $4305 : PHA ; preserve DMA parameters + LDA.w $4306 : PHA ; preserve DMA parameters + ;-------------------------------------------------------------------------------- + STZ.w $4200 ; Disable NMI, V/H, joypad + STZ.w $420C ; Disable HDMA + LDA.b #$80 : STA.w $4300 ; set DMA transfer direction B -> A, bus A auto increment, single-byte mode - STA $4301 ; set bus B source to WRAM register + STA.w $4301 ; set bus B source to WRAM register - LDA #$00 : STA $2181 ; set WRAM register source address - LDA #$60 : STA $2182 - LDA #$7F : STA $2183 + LDA.b #$00 : STA.w $2181 ; set WRAM register source address + LDA.b #$60 : STA.w $2182 + LDA.b #$7F : STA.w $2183 - STZ $4302 ; set bus A destination address to SRAM - LDA #$05 : STA $4303 - LDA #$70 : STA $4304 + STZ.w $4302 ; set bus A destination address to SRAM + LDA.b #$05 : STA.w $4303 + LDA.b #$70 : STA.w $4304 - LDA #$10 : STA $4305 ; set transfer size to 0xB00 - LDA #$0B : STA $4306 ; STZ $4307 + LDA.b #$10 : STA.w $4305 ; set transfer size to 0xB00 + LDA.b #$0B : STA.w $4306 ; STZ $4307 - LDA #$01 : STA $420B ; begin DMA transfer - ;-------------------------------------------------------------------------------- - PLA : STA $4306 ; restore DMA parameters - PLA : STA $4305 ; restore DMA parameters - PLA : STA $4304 ; restore DMA parameters - PLA : STA $4303 ; restore DMA parameters - PLA : STA $4302 ; restore DMA parameters - PLA : STA $4301 ; restore DMA parameters - PLA : STA $4300 ; restore DMA parameters - REP #$30 - PLB - PLA + LDA.b #$01 : STA.w $420B ; begin DMA transfer + LDA.b #$81 : STA.w $4200 ; Re-enable NMI and joypad + ;-------------------------------------------------------------------------------- + PLA : STA.w $4306 ; restore DMA parameters + PLA : STA.w $4305 ; restore DMA parameters + PLA : STA.w $4304 ; restore DMA parameters + PLA : STA.w $4303 ; restore DMA parameters + PLA : STA.w $4302 ; restore DMA parameters + PLA : STA.w $4301 ; restore DMA parameters + PLA : STA.w $4300 ; restore DMA parameters + REP #$30 + PLB + PLA RTL diff --git a/sram.asm b/sram.asm index 687e6ba..54ec69f 100644 --- a/sram.asm +++ b/sram.asm @@ -411,9 +411,10 @@ RomVersionSRAM: skip 4 ; ALTTPR ROM version. Low byte is the version, h ; $01 for now (32-bits total) RomNameSRAM: skip 21 ; ROM name from $FFC0, burned in during init (21 bytes) ; If value in the ROM doesn't match SRAM, save is cleared. -skip 4075 ; PasswordSRAM: skip 16 ; Password value (16 bytes) - +skip 8155 ; +SaveBackupSRAM: ; Backup copy of save ram. Game will attempt to use this if + ; checksum on file select screen load fails. base off ;================================================================================ @@ -656,8 +657,9 @@ endmacro %assertSRAM(FileValiditySRAM, $7003E1) %assertSRAM(InverseChecksumSRAM, $7004FE) %assertSRAM(ExtendedFileNameSRAM, $700500) -%assertSRAM(RomNameSRAM, $702000) %assertSRAM(RomVersionSRAM, $701FFC) -%assertSRAM(PasswordSRAM, $703000) +%assertSRAM(RomNameSRAM, $702000) +%assertSRAM(PasswordSRAM, $702015) +%assertSRAM(SaveBackupSRAM, $704000) pullpc From 95ee31f7c9668ee2785a7b2b04887264c8258c5b Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Fri, 29 Jul 2022 22:04:13 -0400 Subject: [PATCH 004/176] Remove some hard coded addresses for MVN instructions --- events.asm | 19 ++++++++++--------- initsramtable.asm | 1 + save.asm | 16 ++++++++-------- sram.asm | 9 +++++++++ 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/events.asm b/events.asm index 1a729eb..e2988ff 100644 --- a/events.asm +++ b/events.asm @@ -89,16 +89,17 @@ OnAga2Defeated: ;-------------------------------------------------------------------------------- OnFileCreation: ; Copy initial SRAM state from ROM to cart SRAM + ; If the inital SRAM table is move these addresses must be changed PHB - LDA.w #$03D7 ; \ - LDX.w #$B000 ; | Copies from beginning of inital sram table up to file name - LDY.w #$0000 ; | (exclusively) - MVN $70, $30 ; / - ; Skip file name and validity value - LDA.w #$010C ; \ - LDX.w #$B3E3 ; | Rando-Specific Assignments & Game Stats block - LDY.w #$03E3 ; | - MVN $70, $30 ; / + LDA.w #$03D7 ; \ + LDX.w #$B000 ; | Copies from beginning of inital sram table up to file name + LDY.w #$0000 ; | (exclusively) + MVN SRAMBank, SRAMTableBank ; / + ; Skip file name and validity value + LDA.w #$010C ; \ + LDX.w #$B3E3 ; | Rando-Specific Assignments & Game Stats block + LDY.w #$03E3 ; | + MVN SRAMBank, SRAMTableBank ; / PLB ; resolve instant post-aga if standard diff --git a/initsramtable.asm b/initsramtable.asm index a93d0c1..00e80d7 100644 --- a/initsramtable.asm +++ b/initsramtable.asm @@ -15,6 +15,7 @@ fillword $0000 ; Zero out the table fill $500 ; org $30B000 ; PC 0x183000 +InitSRAMTable: InitRoomDataWRAM: org $30B060 ; PC 0x183060 InitATAltarRoom: dw $0000 ; aga curtains diff --git a/save.asm b/save.asm index f2723be..5dd1285 100644 --- a/save.asm +++ b/save.asm @@ -14,10 +14,10 @@ WriteSaveChecksumAndBackup: STA.l InverseChecksumSRAM PHB - LDA.w #$14FF ; \ - LDX.w #$0000 ; | Copies $1500 bytes from beginning of cart SRAM to - LDY.w #$4000 ; | $704000 - MVN $70, $70 ; / + LDA.w #$14FF ; \ + LDX.w #CartridgeSRAM&$FFFF ; | Copies $1500 bytes from beginning of cart SRAM to + LDY.w #SaveBackupSRAM&$FFFF ; | $704000 + MVN SRAMBank, SRAMBank ; / PLB RTL @@ -51,10 +51,10 @@ ValidateSRAM: TDC : STA.l FileValiditySRAM ; Delete save by way of zeroing validity marker BRA .goodchecksum : + PHB - LDA.w #$14FF ; \ - LDX.w #$4000 ; | Copies $1500 bytes from backup on cart SRAM to - LDY.w #$0000 ; | main save location at $700000 - MVN $70, $70 ; / + LDA.w #$14FF ; \ + LDX.w #SaveBackupSRAM&$FFFF ; | Copies $1500 bytes from backup on cart SRAM to + LDY.w #CartridgeSRAM&$FFFF ; | main save location at $700000 + MVN SRAMBank, SRAMBank ; / PLB .goodchecksum diff --git a/sram.asm b/sram.asm index 54ec69f..26f2171 100644 --- a/sram.asm +++ b/sram.asm @@ -417,6 +417,15 @@ SaveBackupSRAM: ; Backup copy of save ram. Game will attempt to ; checksum on file select screen load fails. base off +;================================================================================ +; Bank Definitions +;-------------------------------------------------------------------------------- +; If these move (most likely by placing initsramtable.asm somewhere else) these +; bank definitions need to be changed as well. +;================================================================================ +SRAMBank = $70 +SRAMTableBank = $30|$80 + ;================================================================================ ; Assertions ;================================================================================ From 031e3965b29ce825381deeb4e8fd6e3412a89df9 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Mon, 8 Aug 2022 13:42:19 -0400 Subject: [PATCH 005/176] Requires frontend changes Change SRAM ammo capacity upgrades to flatly represent max capacity --- capacityupgrades.asm | 40 +++++++++++++++------------------------- initsramtable.asm | 4 ++-- inventory.asm | 4 ++-- newitems.asm | 14 ++++++-------- sram.asm | 8 ++++---- tables.asm | 16 ++++++---------- 6 files changed, 35 insertions(+), 51 deletions(-) diff --git a/capacityupgrades.asm b/capacityupgrades.asm index 73b3c26..f763b7a 100644 --- a/capacityupgrades.asm +++ b/capacityupgrades.asm @@ -2,36 +2,26 @@ ; Capacity Logic ;================================================================================ IncrementBombs: - LDA BombCapacityUpgrades ; get bomb upgrades - !ADD.l StartingMaxBombs : BEQ + ; Skip if we can't have bombs - DEC - - CMP BombsEquipment - - !BLT + - LDA BombsEquipment - CMP.b #99 : !BGE + - INC : STA BombsEquipment - + + LDA.l BombCapacity : BEQ + ; Skip if we can't have bombs + DEC + CMP.l BombsEquipment : !BLT + + LDA.l BombsEquipment + CMP.b #99 : !BGE + + INC : STA.l BombsEquipment + + RTL ;-------------------------------------------------------------------------------- IncrementArrows: - LDA ArrowCapacityUpgrades ; get arrow upgrades - !ADD.l StartingMaxArrows : DEC - - CMP CurrentArrows - - !BLT + - LDA CurrentArrows - CMP.b #99 : !BGE + - INC : STA CurrentArrows - + + LDA.l ArrowCapacity : DEC + CMP.l CurrentArrows : !BLT + + LDA.l CurrentArrows + CMP.b #99 : !BGE + + INC : STA.l CurrentArrows + + RTL ;-------------------------------------------------------------------------------- CompareBombsToMax: - LDA BombCapacityUpgrades ; get bomb upgrades - !ADD.l StartingMaxBombs - - CMP BombsEquipment + LDA.l BombCapacity + CMP.l BombsEquipment RTL ;-------------------------------------------------------------------------------- diff --git a/initsramtable.asm b/initsramtable.asm index 00e80d7..db09b08 100644 --- a/initsramtable.asm +++ b/initsramtable.asm @@ -82,8 +82,8 @@ StartingHealth: db $18 ; PC 0x18336C StartingMaximumHealth: db $18 ; PC 0x18336D StartingMagic: skip 1 ; PC 0x18336E StartingSmallKeys: db $FF ; PC 0x18336F -StartingBombCapacityUpgrade: skip 1 ; PC 0x183370 -StartingArrowCapacityUpgrade: skip 1 ; PC 0x183371 +StartingBombCapacity: db $0A ; PC 0x183370 +StartingArrowCapacity: db $1E ; PC 0x183371 InitHeartsFiller: skip 1 ; PC 0x183372 InitMagicFiller: skip 1 ; PC 0x183373 StartingPendants: skip 1 ; PC 0x183374 diff --git a/inventory.asm b/inventory.asm index eb4ac00..2c0a3ad 100644 --- a/inventory.asm +++ b/inventory.asm @@ -695,7 +695,7 @@ RTS ;-------------------------------------------------------------------------------- Link_ReceiveItem_HUDRefresh: LDA BombsEquipment : BNE + ; skip if we have bombs - LDA BombCapacityUpgrades : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs + LDA BombCapacity : BEQ + ; skip if we can't have bombs LDA BombsFiller : BEQ + ; skip if we are filling no bombs DEC : STA BombsFiller ; decrease bomb fill count LDA.b #$01 : STA BombsEquipment ; increase actual bomb count @@ -712,7 +712,7 @@ RTL HandleBombAbsorbtion: STA BombsFiller ; thing we wrote over LDA $0303 : BNE + ; skip if we already have some item selected - LDA BombCapacityUpgrades : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs + LDA BombCapacity : BEQ + ; skip if we can't have bombs LDA.b #$04 : STA $0202 ; set selected item to bombs LDA.b #$01 : STA $0303 ; set selected item to bombs JSL.l HUD_RebuildLong diff --git a/newitems.asm b/newitems.asm index b38ce57..4492761 100755 --- a/newitems.asm +++ b/newitems.asm @@ -208,13 +208,11 @@ AddReceivedItemExpandedGetItem: LDA BowTracking : ORA #$40 : STA BowTracking ; mark silver bow on y-toggle JMP .done + CMP.b #$4C : BNE + ; 50 bombs - ;LDA.b #$07 : STA BombCapacityUpgrades ; upgrade bombs - LDA.b #50 : !SUB.l StartingMaxBombs : STA BombCapacityUpgrades ; upgrade bombs + LDA.b #50 : STA BombCapacity ; upgrade bombs LDA.b #50 : STA BombsFiller ; fill bombs JMP .done + CMP.b #$4D : BNE + ; 70 arrows - ;LDA #$07 : STA ArrowCapacityUpgrades ; upgrade arrows - LDA.b #70 : !SUB.l StartingMaxArrows : STA ArrowCapacityUpgrades ; upgrade arrows + LDA.b #70 : STA ArrowCapacity ; upgrade arrows LDA.b #70 : STA ArrowsFiller ; fill arrows JMP .done + CMP.b #$4E : BNE + ; 1/2 magic @@ -232,19 +230,19 @@ AddReceivedItemExpandedGetItem: LDA.b #$02 : STA SwordEquipment ; set master sword JMP .done + CMP.b #$51 : BNE + ; +5 Bombs - LDA BombCapacityUpgrades : !ADD.b #$05 : STA BombCapacityUpgrades ; upgrade bombs +5 + LDA BombCapacity : !ADD.b #$05 : STA BombCapacity ; upgrade bombs +5 LDA.l Upgrade5BombsRefill : STA BombsFiller ; fill bombs JMP .done + CMP.b #$52 : BNE + ; +10 Bombs - LDA BombCapacityUpgrades : !ADD.b #$0A : STA BombCapacityUpgrades ; upgrade bombs +10 + LDA BombCapacity : !ADD.b #$0A : STA BombCapacity ; upgrade bombs +10 LDA.l Upgrade10BombsRefill : STA BombsFiller ; fill bombs JMP .done + CMP.b #$53 : BNE + ; +5 Arrows - LDA ArrowCapacityUpgrades : !ADD.b #$05 : STA ArrowCapacityUpgrades ; upgrade arrows +5 + LDA ArrowCapacity : !ADD.b #$05 : STA ArrowCapacity ; upgrade arrows +5 LDA.l Upgrade5ArrowsRefill : STA ArrowsFiller ; fill arrows JMP .done + CMP.b #$54 : BNE + ; +10 Arrows - LDA ArrowCapacityUpgrades : !ADD.b #$0A : STA ArrowCapacityUpgrades ; upgrade arrows +10 + LDA ArrowCapacity : !ADD.b #$0A : STA ArrowCapacity ; upgrade arrows +10 LDA.l Upgrade10ArrowsRefill : STA ArrowsFiller ; fill arrows JMP .done + CMP.b #$55 : BNE + ; Programmable Object 1 diff --git a/sram.asm b/sram.asm index 26f2171..9ca097e 100644 --- a/sram.asm +++ b/sram.asm @@ -126,8 +126,8 @@ MaximumHealth: skip 1 ; \ Max Health & Current Health CurrentHealth: skip 1 ; / Max value for both is $A0 | $04 = half heart | $08 = heart CurrentMagic: skip 1 ; Current magic | Max value is $80 CurrentSmallKeys: skip 1 ; Number of small keys held for current dungeon (integer) -BombCapacityUpgrades: skip 1 ; \ Bomb & Arrow Capacity Upgrades -ArrowCapacityUpgrades: skip 1 ; / Indicates flatly how many can be held above vanilla max (integers) +BombCapacity: skip 1 ; \ Bomb & Arrow Capacity Upgrades +ArrowCapacity: skip 1 ; / Indicates flatly how many can be held (integers) HeartsFiller: skip 1 ; Hearts collected yet to be filled. Write in multiples of $08 MagicFiller: skip 1 ; Magic collected yet to be filled PendantsField: skip 1 ; - - - - - g b r (bitfield) @@ -483,8 +483,8 @@ endmacro %assertSRAM(CurrentHealth, $7EF36D) %assertSRAM(CurrentMagic, $7EF36E) %assertSRAM(CurrentSmallKeys, $7EF36F) -%assertSRAM(BombCapacityUpgrades, $7EF370) -%assertSRAM(ArrowCapacityUpgrades, $7EF371) +%assertSRAM(BombCapacity, $7EF370) +%assertSRAM(ArrowCapacity, $7EF371) %assertSRAM(HeartsFiller, $7EF372) %assertSRAM(MagicFiller, $7EF373) %assertSRAM(PendantsField, $7EF374) diff --git a/tables.asm b/tables.asm index 0a6c3c2..86f4664 100644 --- a/tables.asm +++ b/tables.asm @@ -110,11 +110,7 @@ org $308033 ; PC 0x180033 HeartBeep: db #$20 ; #$00 = Off - #$20 = Normal (default) - #$40 = Half Speed - #$80 = Quarter Speed ;-------------------------------------------------------------------------------- -org $308034 ; PC 0x180034 - 0x180035 -StartingMaxBombs: -db #10 ; #10 = Default (10 decimal) -StartingMaxArrows: -db #30 ; #30 = Default (30 decimal) +; 0x180034 - 0x180035 (Unused) ;-------------------------------------------------------------------------------- org $308036 ; PC 0x180036 - 0x180037 RupoorDeduction: @@ -332,15 +328,15 @@ db $00 ; ;Warp BL : 7A ;Warp BR : 7B ;-------------------------------------------------------------------------------- -org $308080 ; PC 0x180080 - 0x180083 +org $308080 ; PC 0x180080 - 0x180083 ; Default to fill on upgrade. Can be set to 0 to not fill. Upgrade5BombsRefill: -db #$00 +db #$32 Upgrade10BombsRefill: -db #$00 +db #$32 Upgrade5ArrowsRefill: -db #$00 +db #$46 Upgrade10ArrowsRefill: -db #$00 +db #$46 ;-------------------------------------------------------------------------------- org $308084 ; PC 0x180084 - 0x180085 PotionHealthRefill: From f8d9be201a71ec239c8a0dba9d29bf294d7b5016 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Fri, 9 Sep 2022 19:30:16 -0400 Subject: [PATCH 006/176] tables.asm: Add GFX pointer to table in utilities.asm --- tables.asm | 8 +++++++- utilities.asm | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tables.asm b/tables.asm index 86f4664..02f66fd 100644 --- a/tables.asm +++ b/tables.asm @@ -1064,8 +1064,14 @@ db $00, $00, $00 org $308358 AllowAccidentalMajorGlitch: db $00 +;-------------------------------------------------------------------------------- +; GFX pointer (0x180359 - 0x18035B) +; For 3rd party sprite stuff +;-------------------------------------------------------------------------------- +org $308359 +dl GfxPalettes ;================================================================================ -; 0x180359 - 0x1814FF (unused) +; 0x18035C - 0x1814FF (unused) ;================================================================================ ; $309500 (0x181500) - $309FFF (0x181FFF) original 0x39C bytes ; Replacement Ending Sequence Text Data diff --git a/utilities.asm b/utilities.asm index 87a69e4..1611e82 100644 --- a/utilities.asm +++ b/utilities.asm @@ -175,7 +175,7 @@ GetSpritePalette: PHX PHB : PHK : PLB ;-------- - TAX : LDA.l .gfxPalettes, X ; look up item gfx + TAX : LDA.l GfxPalettes, X ; look up item gfx PLB : PLX CMP.b #$F8 : !BGE .specialHandling RTL @@ -236,7 +236,7 @@ RTL ;DATA - Loot Identifier to Sprite Palette { - .gfxPalettes +GfxPalettes: db $00, $04, $02, $08, $04, $02, $08, $02 db $04, $02, $02, $02, $04, $04, $04, $08 From 5e93e59727507a9e4155c6be3967494e091c8728 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 20 Sep 2022 16:38:20 -0600 Subject: [PATCH 007/176] Enemizer migration --- enemizer/DMA.asm | 72 +++++ enemizer/NMI.asm | 53 ++++ enemizer/bossdrop.asm | 23 ++ enemizer/bosses_moved.asm | 304 ++++++++++++++++++++++ enemizer/bushes.asm | 68 +++++ enemizer/bushes_table.asm | 13 + enemizer/damage.asm | 11 + enemizer/enemizer_info_table.asm | 3 + enemizer/enemizerflags.asm | 44 ++++ enemizer/hooks.asm | 22 +- enemizer/hooks/NMI_hook.asm | 9 + enemizer/{ => hooks}/blindboss_hooks.asm | 0 enemizer/hooks/blinddoor_hooks.asm | 11 + enemizer/hooks/bossdrop_hooks.asm | 6 + enemizer/hooks/bosses_hooks.asm | 210 +++++++++++++++ enemizer/hooks/bushes_hooks.asm | 8 + enemizer/hooks/damage_hooks.asm | 12 + enemizer/hooks/kodongo_fixes.asm | 9 + enemizer/hooks/kodongo_hooks.asm | 3 + enemizer/hooks/mimic_hooks.asm | 39 +++ enemizer/hooks/moldorm_hooks.asm | 20 ++ enemizer/hooks/overworld_sprite_hooks.asm | 54 ++++ enemizer/main.asm | 42 ++- enemizer/mimic_fixes.asm | 68 +++++ enemizer/moldorm.asm | 14 + enemizer/overworld_sprites.asm | 8 + enemizer/special_action.asm | 12 + 27 files changed, 1133 insertions(+), 5 deletions(-) create mode 100644 enemizer/DMA.asm create mode 100644 enemizer/NMI.asm create mode 100644 enemizer/bossdrop.asm create mode 100644 enemizer/bosses_moved.asm create mode 100644 enemizer/bushes.asm create mode 100644 enemizer/bushes_table.asm create mode 100644 enemizer/damage.asm create mode 100644 enemizer/enemizer_info_table.asm create mode 100644 enemizer/enemizerflags.asm create mode 100644 enemizer/hooks/NMI_hook.asm rename enemizer/{ => hooks}/blindboss_hooks.asm (100%) create mode 100644 enemizer/hooks/blinddoor_hooks.asm create mode 100644 enemizer/hooks/bossdrop_hooks.asm create mode 100644 enemizer/hooks/bosses_hooks.asm create mode 100644 enemizer/hooks/bushes_hooks.asm create mode 100644 enemizer/hooks/damage_hooks.asm create mode 100644 enemizer/hooks/kodongo_fixes.asm create mode 100644 enemizer/hooks/kodongo_hooks.asm create mode 100644 enemizer/hooks/mimic_hooks.asm create mode 100644 enemizer/hooks/moldorm_hooks.asm create mode 100644 enemizer/hooks/overworld_sprite_hooks.asm create mode 100644 enemizer/mimic_fixes.asm create mode 100644 enemizer/moldorm.asm create mode 100644 enemizer/overworld_sprites.asm create mode 100644 enemizer/special_action.asm diff --git a/enemizer/DMA.asm b/enemizer/DMA.asm new file mode 100644 index 0000000..2b8df35 --- /dev/null +++ b/enemizer/DMA.asm @@ -0,0 +1,72 @@ +!DISP_REG = $2100 ; Screen Display Register +!VMAIN_REG = $2115 ; Video Port Control Register +!VRAM_LOW_REG = $2116 ; VRAM Address Registers (Low) +!VRAM_HIGH_REG = $2117 ; VRAM Address Registers (High) +!VRAM_WRITE_REG = #$18 ; VRAM Data Write Registers (Low) (you always store it to the dest register so no need for the actual address) + +!DMA0_REG = $4300 ; DMA Control Register - channel 0 +!DMA0_DEST_REG = $4301 ; DMA Destination Register +!DMA0_SRC_LOW_REG = $4302 ; DMA Source Address Register (Low) +!DMA0_SRC_HIGH_REG = $4303 ; DMA Source Address Register (High) +!DMA0_SRC_BANK_REG = $4304 ; DMA Source Address Register (Bank) +!DMA0_SIZE_LOW_REG = $4305 ; DMA Size Registers (Low) +!DMA0_SIZE_HIGH_REG = $4306 ; DMA Size Registers (Low) + +!DMA_ENABLE_REG = $420B ; DMA Enable Register + +macro DMA_VRAM(VRAM_HIGH,VRAM_LOW,SRC_BANK,SRC_HIGH,SRC_LOW,LENGTH_HIGH,LENGTH_LOW) + PHA + ; --- preserve DMA registers ---------------------------------------------------- + LDA !DMA0_REG : PHA + LDA !DMA0_DEST_REG : PHA + LDA !DMA0_SRC_LOW_REG : PHA + LDA !DMA0_SRC_HIGH_REG : PHA + LDA !DMA0_SRC_BANK_REG : PHA + LDA !DMA0_SIZE_LOW_REG : PHA + LDA !DMA0_SIZE_HIGH_REG : PHA + ; ------------------------------------------------------------------------------- + + ;LDA.b #$80 : STA !DISP_REG ; force vblank + LDA #$80 : STA !VMAIN_REG + + ; write to vram at $ + LDA : STA !VRAM_LOW_REG ; Set VRAM destination address low byte + LDA : STA !VRAM_HIGH_REG ; Set VRAM destination address high byte + + ; Set DMA0 to write a word at a time. + LDA #$01 + STA !DMA0_REG + + ; Write to $2118 & $2119 - VRAM Data Write Registers (Low) & VRAM Data Write Registers (High) + ; setting word write mode on DMA0_REG causes a write to $2118 and then $2119 + ; $21xx is assumed + LDA #$18 + STA !DMA0_DEST_REG + + ; Read from $:. + LDA.b + STA !DMA0_SRC_LOW_REG ; set src address low byte + LDA.b + STA !DMA0_SRC_HIGH_REG ; set src address high byte + LDA.b + STA !DMA0_SRC_BANK_REG ; set src address bank byte + + ; total bytes to copy: #$1000 bytes. + LDA : STA $4305 ; length low byte + LDA : STA $4306 ; length high byte + + ; start DMA on channel 0 + LDA #$01 ; channel select bitmask + STA !DMA_ENABLE_REG + + ; --- restore DMA registers ----------------------------------------------------- + PLA : STA !DMA0_SIZE_HIGH_REG + PLA : STA !DMA0_SIZE_LOW_REG + PLA : STA !DMA0_SRC_BANK_REG + PLA : STA !DMA0_SRC_HIGH_REG + PLA : STA !DMA0_SRC_LOW_REG + PLA : STA !DMA0_DEST_REG + PLA : STA !DMA0_REG + ; ------------------------------------------------------------------------------- + PLA +endmacro diff --git a/enemizer/NMI.asm b/enemizer/NMI.asm new file mode 100644 index 0000000..607a508 --- /dev/null +++ b/enemizer/NMI.asm @@ -0,0 +1,53 @@ +;------------- +NMIHookAction: +{ + ;----------------------------------------- + ; do our shell stuff + PHA + PHP + + SEP #$20 ; get into 8-bit mode + + LDA !SHELL_DMA_FLAG : BEQ .return ; check our draw flag + AND #$01 : BNE .loadKholdstare + LDA !SHELL_DMA_FLAG : AND #$02 : BNE .loadTrinexx + BRA .return ; just in case + ;BIT #$01 : BEQ .loadKholdstare + ;BIT #$02 : BEQ .loadTrinexx + +.loadKholdstare + JSL DMAKholdstare + LDA #$00 : STA !SHELL_DMA_FLAG ; clear our draw flag + BRA .return + +.loadTrinexx + JSL DMATrinexx + LDA #$00 : STA !SHELL_DMA_FLAG ; clear our draw flag + +.return + PLP + PLA + ;----------------------------------------- + ; restore code Bank00.asm (164-167) + PHB + ; Sets DP to $0000 + LDA.w #$0000 : TCD + +JML.l NMIHookReturn +} + +DMAKholdstare: +{ + ;#GFX_Kholdstare_Shell>>16 + %DMA_VRAM(#$34,#$00,#GFX_Kholdstare_Shell>>16&$FF,#GFX_Kholdstare_Shell>>8&$FF,#GFX_Kholdstare_Shell&$FF,#$10,#$00) + RTL +} + +DMATrinexx: +{ + ; TODO: change this to trinexx gfx + %DMA_VRAM(#$34,#$00,#GFX_Trinexx_Shell>>16,#GFX_Trinexx_Shell>>8&$FF,#GFX_Trinexx_Shell&$FF,#$08,#$00) + %DMA_VRAM(#$3A,#$A0,#GFX_Trinexx_Shell2>>16,#GFX_Trinexx_Shell2>>8&$FF,#GFX_Trinexx_Shell2&$FF,#$00,#$C0) + + RTL +} diff --git a/enemizer/bossdrop.asm b/enemizer/bossdrop.asm new file mode 100644 index 0000000..a2353e3 --- /dev/null +++ b/enemizer/bossdrop.asm @@ -0,0 +1,23 @@ +;================================================================================ +; Fix boss item drop position to 'center' of screen +;================================================================================ +change_heartcontainer_position: +{ + PHA + LDA.l !CENTER_BOSS_DROP_FLAG : BEQ .not_moldorm_room + LDA.b #$78 : STA $0D10, X + STA $0D00, X + + LDA $23 : STA $0D30, X + LDA $21 : STA $0D20, X + + LDA $A0 : CMP #$07 : BNE .not_moldorm_room ; not moldorm room + LDA $22 : STA $0D10, X + LDA $20 : STA $0D00, X + + .not_moldorm_room + + PLA + JSL Sprite_Get16BitCoords_long + RTL +} \ No newline at end of file diff --git a/enemizer/bosses_moved.asm b/enemizer/bosses_moved.asm new file mode 100644 index 0000000..1d159e1 --- /dev/null +++ b/enemizer/bosses_moved.asm @@ -0,0 +1,304 @@ +;================================================================================ +; Move the bosses to the right screen location depending on the room +;-------------------------------------------------------------------------------- +boss_move: +{ + ; TODO: should probably double check that we don't need to preserve registers (A,X)... + + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + LDA $A0 ; load room index (low byte) + LDX $A1 ; (high byte) + + CMP #7 : BNE + ; Is is Hera Tower Boss Room + CPX #$00 : BNE + + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_middle + + + + CMP #200 : BNE + ; Is is Eastern Palace Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_right + + + + CMP #41 : BNE + ; Is is Skull Woods Boss Room + ; TODO: Add moving floor sprite + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + LDA #$07 : STA $0B00;Spawn the moving floor sprite + STZ $0B28 + INC $0B08 + BRL .move_to_bottom_right + + + + CMP #51 : BNE + ; Is is Desert Palace Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_left + + + + CMP #90 : BNE + ; Is is Palace of darkness Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_right + + + + CMP #144 : BNE + ; Is is Misery Mire Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_left + + + + CMP #172 : BNE + ; Is is Thieve Town Boss Room + ; IF MAIDEN IS NOT RESCUED -> DO NOTHING + ; IF MAIDEN IS ALREADY RESCUED -> spawn sprites normally + JSL Sprite_ResetAll ; removes sprites in thieve town boss room + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + ;Close the door if !BLIND_DOOR_FLAG == 1 + LDA !BLIND_DOOR_FLAG : BEQ .no_blind_door + INC $0468 ; $0468[0x02] - Flag that is set when trap doors are down. + STZ $068E ; $068E[0x02] - (Dungeon) ???? related to trap doors and if they are open ; possibly bomb doors too? Update: module 0x07.0x4 probably uses this to know whether it's a key door or big key door to open. + STZ $0690 ; $0690[0x02] - (Overworld) Generally is used as an animation step indicator, only for doors that animate when they open, such as the Santuary and Hyrule Castle doors. This variable is incremented up to a value of 3, at which point a logic check kicks in and stops animating the opening of a door. + INC $0CF3 ; $0CF3[0x01] - free ram + ; ;That must be called after the room load! + .no_blind_door + BRL .move_to_bottom_right + + + + CMP #6 : BNE + ; Is is Swamp Palace Boss Room + CPX #$00 : BNE + + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_left + + + + CMP #222 : BNE + ; Is is Ice Palace Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_top_right + + + + CMP #164 : BNE + ; Is is Turtle Rock Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_left + + + + CMP #28 : BNE + ; Is is Gtower (Armos2) Boss Room + CPX #$00 : BNE + + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_right + + + + CMP #108 : BNE + ; Is is Gtower (Lanmo2) Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_bottom_left + + + + CMP #77 : BNE + ; Is is Gtower (Moldorm2) Boss Room + JSL Sprite_ResetAll ; reset sprites twice in that room for some reasons (fix bug with kholdstare) + JSL Dungeon_ResetSprites ; Restore the dungeon_resetsprites + BRL .move_to_middle + + + + BRL .return + +; $0D00[0x10] - The lower byte of a sprite's Y - coordinate. +; $0D10[0x10] - The lower byte of a sprite's X - coordinate. + +; $0D20[0x10] - The high byte of a sprite's Y - coordinate. +; $0D30[0x10] - The high byte of a sprite's X - coordinate. + +; $0B08[0x08] - (Overlord) X coordinate low byte. +; $0B18[0x08] - (Overlord) Y coordinate low byte. + +; $0B10[0x08] - (Overlord) X coordinate high byte. +; $0B20[0x08] - (Overlord) Y coordinate high byte. + + .move_to_middle + ;load all sprite of that room and overlord + LDX #$00 + + .loop_middle ; move sprites + LDA $0E20, X + CMP #$E3 : BNE + ;is it a fairy?? if not check next + BRA .no_change + + + CMP #$D1 : BNE + ;is it a bunny changer + BRA .no_change + + + CMP #$C5 : BNE + ;is it a medusa head + BRA .no_change + + + LDA $0D10, X : !ADD #$68 : STA $0D10, X + LDA $0D00, X : !ADD #$68 : STA $0D00, X + + .no_change + INX : CPX #$10 : BNE .loop_middle + LDX #$00 + + .loop_middle2 ; move overlords + LDA $0B00, X + CMP #$E3 : BNE + ;is it moving floor? + BRA .no_change_ov + + + LDA $0B08, X : !ADD #$68 : STA $0B08, X + LDA $0B18, X : !ADD #$68 : STA $0B18, X + + .no_change_ov + INX : CPX #$08 : BNE .loop_middle2 + BRL .return + + + .move_to_top_right + LDX #$00 + + .loop_top_right ; move sprites + LDA $0E20, X + CMP #$E3 : BNE + ;is it a fairy?? if not check next + BRA .no_change2 + + + CMP #$D1 : BNE + ;is it a bunny changer + BRA .no_change2 + + + CMP #$C5 : BNE + ;is it a medusa head + BRA .no_change2 + + + LDA $0D20, X : !ADD #$00 : STA $0D20, X + LDA $0D30, X : !ADD #$01 : STA $0D30, X + + .no_change2 + INX : CPX #$10 : BNE .loop_top_right + LDX #$00 + + .loop_top_right2 ; move overlords + LDA $0B00, X + CMP #$E3 : BNE + ;is it moving floor? + BRA .no_change_ov2 + + + LDA $0B10, X : !ADD #$01 : STA $0B10, X + LDA $0B20, X : !ADD #$00 : STA $0B20, X + + .no_change_ov2 + INX : CPX #$08 : BNE .loop_top_right2 + BRL .return + + + .move_to_bottom_right + LDX #$00 + + .loop_bottom_right ; move sprites + LDA $0E20, X + CMP #$E3 : BNE + ;is it a fairy?? if not check next + BRA .no_change3 + + + CMP #$D1 : BNE + ;is it a bunny changer + BRA .no_change3 + + + CMP #$C5 : BNE + ;is it a medusa head + BRA .no_change3 + + + LDA $0D20, X : !ADD #$01 : STA $0D20, X + LDA $0D30, X : !ADD #$01 : STA $0D30, X + + .no_change3 + INX : CPX #$10 : BNE .loop_bottom_right + LDX #$00 + + .loop_bottom_right2 ; move overlords + LDA $0B00, X + CMP #$E3 : BNE + ;is it moving floor? + BRA .no_change_ov3 + + + LDA $0B10, X : !ADD #$01 : STA $0B10, X + LDA $0B20, X : !ADD #$01 : STA $0B20, X + + .no_change_ov3 + INX : CPX #$08 : BNE .loop_bottom_right2 + BRL .return + + + .move_to_bottom_left + LDX #$00 + + .loop_bottom_left ; move sprites + LDA $0E20, X + CMP #$E3 : BNE + ;is it a fairy?? if not check next + BRA .no_change4 + + + CMP #$D1 : BNE + ;is it a bunny changer + BRA .no_change4 + + + CMP #$C5 : BNE + ;is it a medusa head + BRA .no_change4 + + + LDA $0D20, X : !ADD #$01 : STA $0D20, X + LDA $0D30, X : !ADD #$00 : STA $0D30, X + + .no_change4 + INX : CPX #$10 : BNE .loop_bottom_left + LDX #$00 + + .loop_bottom_left2 ; move overlords + LDA $0B00, X + CMP #$E3 : BNE + ;is it moving floor? + BRA .no_change_ov4 + + + LDA $0B10, X : !ADD #$00 : STA $0B10, X + LDA $0B20, X : !ADD #$01 : STA $0B20, X + + .no_change_ov4 + INX : CPX #$08 : BNE .loop_bottom_left2 + BRL .return + + +.return + RTL +} + +;================================================================================ +; Fix the gibdo key drop in skull woods before the boss room - USELESS CODE +;-------------------------------------------------------------------------------- +;gibdo_drop_key: +; LDA $A0 : CMP #$39 : BNE .no_key_drop ; Check if the room id is skullwoods before boss +; LDA $0DD0, X : CMP #$09 : BNE .no_key_drop ; Check if the sprite is alive +; LDA #$01 : STA $0CBA, X;set key +; +;.no_key_drop +; JSL $06DC5C ;Restore draw shadow +; RTL +;-------------------------------------------------------------------------------- + +;================================================================================ +; Set a flag to draw kholdstare shell on next NMI +;-------------------------------------------------------------------------------- +new_kholdstare_code: + LDA $0CBA : BNE .already_iced + LDA #$01 : STA $0CBA + + LDA #$01 : STA !SHELL_DMA_FLAG ; tell our NMI to draw the shell + +.already_iced + ; restore code + JSL Kholdstare_Draw ; sprite_kholdstare.asm (154) : JSL Kholdstare_Draw + RTL +;-------------------------------------------------------------------------------- + +;================================================================================ +; Set a flag to draw trinexx shell on next NMI +;-------------------------------------------------------------------------------- +new_trinexx_code: + LDA $0CBA : BNE .already_rocked + LDA #$01 : STA $0CBA + + LDA #$02 : STA !SHELL_DMA_FLAG ; tell our NMI to draw the shell + +.already_rocked + ; restore code + LDA.b #$03 : STA $0DC0, X ; sprite_trinexx.asm (62) : LDA.b #$03 : STA $0DC0, X + + RTL +;-------------------------------------------------------------------------------- diff --git a/enemizer/bushes.asm b/enemizer/bushes.asm new file mode 100644 index 0000000..8de86d3 --- /dev/null +++ b/enemizer/bushes.asm @@ -0,0 +1,68 @@ +; this is set inside randomizer application +; org $1AFBBB ;Increases chance of getting enemies under random bush +; db $01, $0F, $0F, $0F, $0F, $0F, $0F, $12 +; db $0F, $01, $0F, $0F, $11, $0F, $0F, $03 + +; sprite_bush_spawn_table: +; { +; ; SPRITE DATA TABLE GENERATED BY ENEMIZER +; .overworld +; ; Skip 0x80(overworld) + 0x128 (dungeons) +; skip #$80 +; .dungeons +; skip #$128 + +; ;Old sprite table - Could be changed as well (for the item id 04) +; .random_sprites ; if item == 04 +; db #$00, #$D8, #$E3, #$D8 +; } + +sprite_bush_spawn: +{ + STY $0D ; restored code + LDA !BUSHES_FLAG ; That byte is the flag to activate random enemies under bush + BNE .continue + CPY.b #$04 : BNE .not_random_old + JSL GetRandomInt : AND.b #$03 : !ADD.b #$13 : TAY + + .not_random_old + LDA $81F3, Y;restored code + RTL + + .continue + PHX : PHY ; save x,y just to be safe + PHB : PHK : PLB ; setbank to 40 + + CPY.b #$04 : BNE .not_random + JSL GetRandomInt : AND.b #$03 : TAY + LDA.w sprite_bush_spawn_table_random_sprites, Y + BRL .return + + .item_table + db #$00, #$D9, #$3E, #$79, #$D9, #$DC, #$D8, #$DA, #$E4, #$E1, #$DC + db #$D8, #$DF, #$E0, #$0B, #$42, #$D3, #$41, #$D4, #$D9, #$E3, #$D8 + + .not_random + + CPY.b #$0F : BEQ .newSpriteSpawn + CPY.b #$11 : BEQ .newSpriteSpawn + CPY.b #$10 : BEQ .newSpriteSpawn + ;CPY.b #$0E : BEQ .newSpriteSpawn + + LDA .item_table, Y + BRA .return + + .newSpriteSpawn + LDA $7E040A : TAY ; load the area ID + LDA $7EF3C5 : CMP.b #$03 : !BLT .dontGoPhase2 ; check if agahnim 1 is alive + ; aga1 is dead + LDA $7E040A : CMP.b #$40 : !BGE .dontGoPhase2 ; check if we are in DW, if so we can skip shifting table index + !ADD #$90 : TAY ; agahnim 1 is dead, so we need to go to the 2nd phase table for LW + .dontGoPhase2 + LDA sprite_bush_spawn_table_overworld, Y ;LDA 408000 + area id + + .return + PLB ; restore bank to where it was + PLY : PLX ; restore x,y + RTL +} \ No newline at end of file diff --git a/enemizer/bushes_table.asm b/enemizer/bushes_table.asm new file mode 100644 index 0000000..a05da38 --- /dev/null +++ b/enemizer/bushes_table.asm @@ -0,0 +1,13 @@ +sprite_bush_spawn_table: +{ + ; SPRITE DATA TABLE GENERATED BY ENEMIZER + .overworld + ; Skip 0x128(overworld [way overkill]) + 0x128 (dungeons) + skip $128 + .dungeons + skip $128 + + ;Old sprite table - Could be changed as well (for the item id 04) + .random_sprites ; if item == 04 + db #$00, #$D8, #$E3, #$D8 +} diff --git a/enemizer/damage.asm b/enemizer/damage.asm new file mode 100644 index 0000000..b93e625 --- /dev/null +++ b/enemizer/damage.asm @@ -0,0 +1,11 @@ +CheckIfLinkShouldDie: + ; before this we should have: + ; LDA $7EF36D - this gets hooked, but we should have LDA at the end of it + + CMP $00 : BCC .dead + SEC : SBC $00 + BRA .done + .dead + LDA #$00 +.done +RTL diff --git a/enemizer/enemizer_info_table.asm b/enemizer/enemizer_info_table.asm new file mode 100644 index 0000000..c74d285 --- /dev/null +++ b/enemizer/enemizer_info_table.asm @@ -0,0 +1,3 @@ +enemizer_info_table: +skip $100 +; contains information about settings and enemizer version used to generate rom \ No newline at end of file diff --git a/enemizer/enemizerflags.asm b/enemizer/enemizerflags.asm new file mode 100644 index 0000000..5852c49 --- /dev/null +++ b/enemizer/enemizerflags.asm @@ -0,0 +1,44 @@ +; ;Enemizer Flags +EnemizerFlags: +.randomize_bushes +db #$00 ;408100 : 200100 ; Enable random enemy under bushes +.close_blind_door +db #$00 ;408101 : 200101 ; Enable blind's door closing for other bosses +.moldorm_eye_count +db #$01 ;408102 : 200102 ; Moldorm eye count, default to 2 eyes (1) +.randomize_sprites +db #$00 ;408103 : 200103 ; Randomize Sprites. +.agahnim_fun_balls +db #$00 ;408104 : 200104 ; make Agahnim balls deflect back +.enable_mimic_override +db #$00 ;408105 : 200105 ; toggle mimic code between new and old +.enable_terrorpin_ai_fix +db #$00 ;408106 : 200106 ; toggle to turn on terrorpin ai "fix" +.center_boss_drops +db #$00 ;368107 + +db #$00 ;408107 : 200107 +db #$00 ;408108 : 200108 +db #$00 ;408109 : 200109 +db #$00 ;40810A : 20010A +db #$00 ;40810B : 20010B +db #$00 ;40810C : 20010C +db #$00 ;40810D : 20010D +db #$00 ;40810E : 20010E +db #$00 ;40810F : 20010F +db #$00 ;408110 : 200110 +db #$00 ;408111 : 200111 +db #$00 ;408112 : 200112 +db #$00 ;408113 : 200113 +db #$00 ;408114 : 200114 +db #$00 ;408115 : 200115 +db #$00 ;408116 : 200116 +db #$00 ;408117 : 200117 +db #$00 ;408118 : 200118 +db #$00 ;408119 : 200119 +db #$00 ;40811A : 20011A +db #$00 ;40811B : 20011B +db #$00 ;40811C : 20011C +db #$00 ;40811D : 20011D +db #$00 ;40811E : 20011E +db #$00 ;40811F : 20011F diff --git a/enemizer/hooks.asm b/enemizer/hooks.asm index 4cb43b4..540fd6c 100644 --- a/enemizer/hooks.asm +++ b/enemizer/hooks.asm @@ -1 +1,21 @@ -incsrc blindboss_hooks.asm \ No newline at end of file +incsrc hooks/NMI_hook.asm + +incsrc hooks/bushes_hooks.asm + +incsrc hooks/bossdrop_hooks.asm + +incsrc hooks/blinddoor_hooks.asm + +incsrc hooks/bosses_hooks.asm + +incsrc hooks/moldorm_hooks.asm + +incsrc hooks/kodongo_hooks.asm + +incsrc hooks/mimic_hooks.asm + +incsrc hooks/damage_hooks.asm + +incsrc hooks/overworld_sprite_hooks.asm + +incsrc hooks/blindboss_hooks.asm \ No newline at end of file diff --git a/enemizer/hooks/NMI_hook.asm b/enemizer/hooks/NMI_hook.asm new file mode 100644 index 0000000..b17aa8c --- /dev/null +++ b/enemizer/hooks/NMI_hook.asm @@ -0,0 +1,9 @@ +;================================================================================ +; NMI Hook +;-------------------------------------------------------------------------------- +; rando already hooks the Bank00.asm : 164 (PHA : PHX : PHY : PHD : PHB) so we have to hook after that +org $0080D0 ; <- D0 - Bank00.asm : 164-167 (PHB, LDA.w #$0000) +JML.l NMIHookAction +org $0080D5 ; <- D5 - Bank00.asm : 164-167 (PHB, LDA.w #$0000) +NMIHookReturn: +;-------------------------------------------------------------------------------- diff --git a/enemizer/blindboss_hooks.asm b/enemizer/hooks/blindboss_hooks.asm similarity index 100% rename from enemizer/blindboss_hooks.asm rename to enemizer/hooks/blindboss_hooks.asm diff --git a/enemizer/hooks/blinddoor_hooks.asm b/enemizer/hooks/blinddoor_hooks.asm new file mode 100644 index 0000000..2d7eb45 --- /dev/null +++ b/enemizer/hooks/blinddoor_hooks.asm @@ -0,0 +1,11 @@ +;================================================================================ +; Blind door close +;-------------------------------------------------------------------------------- +; +org $028849 ; Bank02.asm(1588) - original code : JSL $078000 //Hook on player main when transition are over execute player code +JSL check_special_action ;using the variable 7E0CF3 if it not 00 then trap the player in that room +;could be changed easily to support more than only 1 function +;-------------------------------------------------------------------------------- + +org $078000 +Player_Main: diff --git a/enemizer/hooks/bossdrop_hooks.asm b/enemizer/hooks/bossdrop_hooks.asm new file mode 100644 index 0000000..145f3df --- /dev/null +++ b/enemizer/hooks/bossdrop_hooks.asm @@ -0,0 +1,6 @@ +;================================================================================ +; Change heart container drop location +;-------------------------------------------------------------------------------- +org $05EF62 +JSL change_heartcontainer_position +;-------------------------------------------------------------------------------- diff --git a/enemizer/hooks/bosses_hooks.asm b/enemizer/hooks/bosses_hooks.asm new file mode 100644 index 0000000..c71c121 --- /dev/null +++ b/enemizer/hooks/bosses_hooks.asm @@ -0,0 +1,210 @@ +; ;================================================================================ +; ; insert kholdstare & trinexx shell gfx file +; ;-------------------------------------------------------------------------------- +; ; pc file address = 0x123000 +; org $24B000 +; GFX_Kholdstare_Shell: +; incbin shell.gfx +; warnpc $24C001 ; should have written 0x1000 bytes and apparently we need to go 1 past that or it'll yell at us + +; org $24C000 +; GFX_Trinexx_Shell: +; incbin rocks.gfx +; warnpc $24C801 + +; GFX_Trinexx_Shell2: +; incbin rocks2.gfx +; warnpc $24C8C1 +; ;-------------------------------------------------------------------------------- + + ; ; *$4C290-$4C2D4 LOCAL + ; Dungeon_LoadSprites: + +; *$4C114-$4C174 LONG +org $9C114 +Dungeon_ResetSprites: ; Bank09.asm(822) + +; *$4C44E-$4C498 LONG +org $9C44E +Sprite_ResetAll: ; Bank09.asm(1344) + +;================================================================================ +; fix skull woods gibdo key drop +;-------------------------------------------------------------------------------- +;Gibdo key drop hardcoded in skullwoods to fix problems +;some bosses are dropping a key when there's a key drop avaiable in +;the previous room + +; org $09DD74 ; Gibdo draw code (JSL Sprite_DrawShadowLong) +; db #$00, #$00 ; Remove key drop in skull woods + +; org $1EBB37 ; Gibdo draw code (JSL Sprite_DrawShadowLong) +; JSL gibdo_drop_key +;-------------------------------------------------------------------------------- +; todo make the boss data change dynamic +;================================================================================ +; Move All Bosses Sprites in Top Left Quadrant +;-------------------------------------------------------------------------------- +; sprite values for rooms, with coordinates changed +;Trinexx +org $09E5BA ; 0x4E5BA ; [0xB] +db $00 ; "Sort Spr" in Hyrule Magic +db $05, $07, $CB ; trinexx body? ; 15 07 CB +db $05, $07, $CC ; trinexx ice head? ; 15 07 CC +db $05, $07, $CD ; trinexx fire head? ; 15 07 CD +db $FF ; terminator + +;Armos - Eastern +org $09E887 ; 0x4E887 ; [0x17] +db $00 ; "Sort Spr" in Hyrule Magic +db $05, $04, $53 ; armos ;15 14 53 +db $05, $07, $53 ; armos ;15 17 53 +db $05, $0A, $53 ; armos ;15 1A 53 +db $08, $0A, $53 ; armos ;18 1A 53 +db $08, $07, $53 ; armos ;18 17 53 +db $08, $04, $53 ; armos ;18 14 53 +db $08, $E7, $19 ; armos overlord ;18 F7 19 +db $FF ; terminator + +;Kholdstare +org $09EA01 ; 0x4EA01 ; [0xB] +db $00 ; "Sort Spr" in Hyrule Magic +db $05, $07, $A3 ; kholdstare shell ;05 17 A3 +db $05, $07, $A4 ; fallling ice ;05 17 A4 +db $05, $07, $A2 ; kholdstare ;05 17 A2 +db $FF ; terminator + +;Arrghus +org $09D997 ; 0x4D997 ; [0x2C] +db $00 ; "Sort Spr" in Hyrule Magic +db $07, $07, $8C ; arrghus ;17 07 8C +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $07, $07, $8D ; spawn ;17 07 8D +db $FF ; terminator + +;Moldorm - ToH +org $09D9C3 ; 0x4D9C3 ; [0x5] +db $00 ; "Sort Spr" in Hyrule Magic +db $09, $09, $09 ; moldorm ;0E 12 09 +db $FF ; terminator + +;Mothula +org $09DC31 ; 0x4DC31 ; [0x5] (really [0x8]) +db $00 ; "Sort Spr" in Hyrule Magic +db $06, $08, $88 ; mothula ;16 18 88 +; truncated moving floor overlord ;16 E7 07 +db $FF ; terminator + +;Lanmolas - Desert +org $09DCCB ; 0x4DCCB ; [0xB] +db $00 ; "Sort Spr" in Hyrule Magic +db $07, $06, $54 ; lanmolas ;17 06 54 +db $07, $09, $54 ; lanmolas ;17 09 54 +db $09, $07, $54 ; lanmolas ;19 07 54 +db $FF ; terminator + +;Helmasaure +org $09E049 ; 0x4E049 ; [0x5] +db $00 ; "Sort Spr" in Hyrule Magic +db $06, $07, $92 ; helmasaur ;16 17 92 +db $FF ; terminator + +;Vitreous +org $09E457 ; 0x4E457 ; [0x5] +db $00 ; "Sort Spr" in Hyrule Magic +db $05, $07, $BD ; vitreous ;15 07 BD +db $FF ; terminator + +;Blind +org $09E654 ; 0x4E654 ; [0x5] +db $00 ; "Sort Spr" in Hyrule Magic +db $05, $09, $CE ; blind ;15 19 CE +db $FF ; terminator + +; Armos - GT ; this shouldn't get used unless boss randomization is turned off +org $09DB23 ; 0x4DB23 ; [0x23] // need 0x38 to fit arrghus+spawn and fairies (use 0x4D87E-) +db $00 +db $05, $04, $53 ; armos ;15 14 53 +db $05, $07, $53 ; armos ;15 17 53 +db $05, $0A, $53 ; armos ;15 1A 53 +db $08, $0A, $53 ; armos ;18 1A 53 +db $08, $07, $53 ; armos ;18 17 53 +db $08, $04, $53 ; armos ;18 14 53 +db $08, $E7, $19 ; armos overlord ;18 F7 19 +db $07, $07, $E3 ; fairy ;07 07 E3 +db $07, $08, $E3 ; fairy ;07 08 E3 +db $08, $07, $E3 ; fairy ;08 07 E3 +db $08, $08, $E3 ; fairy ;08 08 E3 +db $FF + +; Lanmola - GT ; this shouldn't get used unless boss randomization is turned off +org $09E1BE ; 0x4E1BE ; [0x11] // need 0x32 to fit arrghus+spawn and bunny beam+medusa (use 0x4D8B6-) +db $00 +db $07, $06, $54 ; lanmolas ;17 06 54 +db $07, $09, $54 ; lanmolas ;17 09 54 +db $09, $07, $54 ; lanmolas ;19 07 54 +db $18, $17, $D1 ; bunny beam ;18 17 D1 +db $1C, $03, $C5 ; medusa ;1C 03 C5 +db $FF + +; Moldorm - GT ; this shouldn't get used unless boss randomization is turned off +org $09DF1E ; 0x4DF1E ; [0x5] +db $00 ; "Sort Spr" in Hyrule Magic +db $09, $09, $09 ; moldorm ;0E 12 09 +db $FF ; terminator + +;-------------------------------------------------------------------------------- + +;================================================================================ +; On Room Transition -> Move Sprite depending on the room loaded +;-------------------------------------------------------------------------------- +org $028979 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114 +JSL boss_move +org $028C16 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114 +JSL boss_move +org $029338 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114 +JSL boss_move +org $028256 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) original jsl : $09C114 +JSL boss_move +;-------------------------------------------------------------------------------- + +; todo make arghuss room change dynamic + +;================================================================================ +; water tiles removed in arrghus room +;-------------------------------------------------------------------------------- +org $1FA15C +db $FF, $FF, $FF, $FF, $F0, $FF, $61, $18, $FF, $FF + +; Arrghus can stand on ground +org $0DB6BE +db $00 +;-------------------------------------------------------------------------------- + +;================================================================================ +; Draw kholdstare shell +;-------------------------------------------------------------------------------- +org $0DD97F ; jump point +Kholdstare_Draw: + +org $1E9518 ; sprite_kholdstare.asm (154) : JSL Kholdstare_Draw +JSL new_kholdstare_code ; Write new gfx in the vram +;-------------------------------------------------------------------------------- + +;================================================================================ +; Draw trinexx shell +;-------------------------------------------------------------------------------- +org $1DAD67 ; sprite_trinexx.asm (62) : LDA.b #$03 : STA $0DC0, X +JSL new_trinexx_code +;-------------------------------------------------------------------------------- diff --git a/enemizer/hooks/bushes_hooks.asm b/enemizer/hooks/bushes_hooks.asm new file mode 100644 index 0000000..42f937d --- /dev/null +++ b/enemizer/hooks/bushes_hooks.asm @@ -0,0 +1,8 @@ +;================================================================================ +; New bush mob randomization +;-------------------------------------------------------------------------------- +org $068279 +NOP #$0A +JSL sprite_bush_spawn +NOP ; we keep the branch +;-------------------------------------------------------------------------------- diff --git a/enemizer/hooks/damage_hooks.asm b/enemizer/hooks/damage_hooks.asm new file mode 100644 index 0000000..95b8176 --- /dev/null +++ b/enemizer/hooks/damage_hooks.asm @@ -0,0 +1,12 @@ +org $780CA ; Bank07.asm(179) +JSL CheckIfLinkShouldDie : NOP : NOP : NOP +;SEC : SBC.b $00 : CMP #$00 : BEQ .linkIsDead ; Bank07.asm(179) - + +org $780D1 +BNE linkNotDead : NOP : NOP ; Bank07.asm(183) - CMP.b #$A8 : BCC .linkNotDead + +org $780D5 +linkIsDead: + +org $780F7 +linkNotDead: diff --git a/enemizer/hooks/kodongo_fixes.asm b/enemizer/hooks/kodongo_fixes.asm new file mode 100644 index 0000000..5f8fd48 --- /dev/null +++ b/enemizer/hooks/kodongo_fixes.asm @@ -0,0 +1,9 @@ +newKodongoCollision: +{ + LDA $0DE0, X : INC A : AND.b #$03 : STA $0DE0, X + ;If they collide more than 32time then kill them ! + LDA $0DA0, X : INC A : STA $0DA0, X : CMP #$20 : BCC .continue + STZ $0DD0, X +.continue +RTL +} \ No newline at end of file diff --git a/enemizer/hooks/kodongo_hooks.asm b/enemizer/hooks/kodongo_hooks.asm new file mode 100644 index 0000000..8888027 --- /dev/null +++ b/enemizer/hooks/kodongo_hooks.asm @@ -0,0 +1,3 @@ +org $1EC147 +JSL newKodongoCollision +NOP #$05 diff --git a/enemizer/hooks/mimic_hooks.asm b/enemizer/hooks/mimic_hooks.asm new file mode 100644 index 0000000..7ecd89e --- /dev/null +++ b/enemizer/hooks/mimic_hooks.asm @@ -0,0 +1,39 @@ +;Hooks +; sprite_prep.asm (2466) -> SpritePrep_EyegoreTrampoline: +org $0691B6 ; 0311B6 1E:C6FA? ; SpriteActive3_Transfer? + JSL SpritePrep_EyegoreNew ;set eyegore to be only eyegore + + +; sprite_prep.asm (203) -> dw SpritePrep_DoNothing ; 0xB8 - Dialogue Testing Sprite +org $0687CB ; 0307CB replace debugged sprite create by eyegore + dw #$91B6 ; SpritePrep_Eyegore jump table + + +; Bank1E.asm (140) -> dw Sprite_DialogueTester ; 0xB8 - debug artifact, dialogue tester +org $1E8BB1 + dw #$C795 ;Sprite_Eyegore jump table + +; table starts at 6B8F1 +org $0DB9A9 +db $00 ; sprite B8 needs a damage type + +org $06EC08 ; Bank06.asm (4593) - damage calcs +{ + JSL resetSprite_Mimic + NOP +} + +org $06EDA6 ; Bank06.asm (4876) - .notItemSprite +{ + ; original + ; REP #$20 : ASL #4 : ORA $0CF2 : PHX : REP #$10 : TAX ;C2 20 : 0A 0A 0A 0A : 0D F2 0C : DA : C2 10 : AA + ; SEP #$20 ;E2 20 + ; LDA $7F6000, X : STA $02 ;BF 00 60 7F : 85 02 + ; SEP #$10 + + JSL notItemSprite_Mimic ; C2 20 : 0A 0A + ;NOP : NOP : NOP : NOP : NOP : NOP : NOP : NOP : NOP ; 0A 0A : 0D F2 0C : DA : C2 10 : AA + ;NOP : NOP ; E2 20 + ;NOP : NOP : NOP : NOP : NOP : NOP ; BF 00 60 7F : 85 02 + ;NOP ; +} diff --git a/enemizer/hooks/moldorm_hooks.asm b/enemizer/hooks/moldorm_hooks.asm new file mode 100644 index 0000000..a443913 --- /dev/null +++ b/enemizer/hooks/moldorm_hooks.asm @@ -0,0 +1,20 @@ +; adjust oam position after drawing eyes +;ED88E +org $1DD88E +{ + ; original: GiantMoldorm_Draw+5lines (sprite_giant_moldorm.asm) + ; lda $90 : add.w #$0008 : sta $90 + ; INC $92 : INC $92 + + JSL Moldorm_UpdateOamPosition + NOP #08 +} + +; set number of eyes +org $1DDBB2 ;$0EDBB2 +{ + ; LDX.b #$01 + ; number of eyes (-1) + ;0EDBB2 0EDBB3 + LDX.b #$07 +} diff --git a/enemizer/hooks/overworld_sprite_hooks.asm b/enemizer/hooks/overworld_sprite_hooks.asm new file mode 100644 index 0000000..7de8890 --- /dev/null +++ b/enemizer/hooks/overworld_sprite_hooks.asm @@ -0,0 +1,54 @@ +org $9C50B ; 0x4C50B +{ + ; .loadData + ; ; $4C50B- + ; STA $01 ; 85 01 + ; ; $4C50D- + ; LDY.w #$0000 ; A0 00 00 + JSL LoadOverworldSprites + NOP +} + +org $9C510 ; 0x4C510 +LDA [$00], Y ; replace LDA ($00), Y +; CMP.b #$FF : BEQ .stopLoading +; INY #2 +org $9C518 ; 0x4C518 +LDA [$00], Y ; replace LDA ($00), Y +; DEY #2 : CMP.b #$F4 : BNE .notFallingRocks +; INC $0FFD +; INY #3 +; BRA .nextSprite +; .notFallingRocks ; Anything other than falling rocks. +org $9C528 ; 0x4C528 +LDA [$00], Y ; replace LDA ($00), Y +; PHA : LSR #4 : ASL #2 : +org $9C531 ; 0x4C531 +STA $0A ; STA $02 +; INY +org $9C534 ; 0x4C534 +LDA [$00], Y ; replace LDA ($00), Y +; LSR #4 : CLC +org $9C53B ; 0x4C53B +ADC $0A ; ADC $02 +; STA $06 +; PLA : ASL #4 : STA $07 +org $9C546 ; 0x4C546 +LDA [$00], Y ; replace LDA ($00), Y +; AND.b #$0F : ORA $07 : STA $05 +; INY +org $9C54F ; 0x4C54F +LDA [$00], Y ; replace LDA ($00), Y +; LDX $05 : INC A : STA $7FDF80, X + + ; ; $4C558- + ; ; Move on to the next sprite / overlord. + ; INY ; C8 + ; ; $4C559- + ; BRA .nextSprite ; 80 B5 + + ; .stopLoading + ; ; $4C55B- + ; SEP #$10 ; E2 10 + ; ; $4C55D- + ; RTS ; 60 diff --git a/enemizer/main.asm b/enemizer/main.asm index b24bef1..d7335af 100644 --- a/enemizer/main.asm +++ b/enemizer/main.asm @@ -17,7 +17,8 @@ lorom !RANDOM_SPRITE_FLAG = "$368103" !AGAHNIM_FUN_BALLS = "$368104" !ENABLE_MIMIC_OVERRIDE = "$368105" -!ENABLE_TERRORPIN_AI_FIX = "$368106" +;!ENABLE_TERRORPIN_AI_FIX = "$368106" # moved to baserom already +!CENTER_BOSS_DROP_FLAG = "$368107" ; Enemizer reserved memory ; $7F50B0 - $7F50BF - Downstream Reserved (Enemizer) @@ -26,10 +27,43 @@ lorom ;================================================================================ incsrc hooks.asm +incsrc DMA.asm -org $B78000 ; the original org is 368000, but I'm putting this here for migration purposes, and I think B6 is the same bank but fastrom +org $B68000 ; the original org is 368000 and B6 is the same bank but fastrom EnemizerTablesStart: -;none migrated yet +incsrc enemizer_info_table.asm +incsrc enemizerflags.asm +incsrc bushes_table.asm +; todo: room header table EnemizerCodeStart: -incsrc blindboss.asm \ No newline at end of file +incsrc bushes.asm +incsrc NMI.asm +incsrc special_action.asm +incsrc bosses_moved.asm +incsrc damage.asm +incsrc bossdrop.asm +incsrc moldorm.asm +incsrc kodongo_fixes.asm +incsrc mimic_fixes.asm +; todo: vitreous key fix for boss shuffle + +incsrc overworld_sprites.asm + +incsrc blindboss.asm +warnpc $B6FFFF ;if we hit this we need to split stuff by bank + +org $0684BD +Sprite_Get16BitCoords_long: + +org $0DBA71 +GetRandomInt: + +org $0DBB67 +Sound_SetSfxPanWithPlayerCoords: + +org $0DBB8A +Sound_SetSfx3PanLong: + +org $1EC6FA ;F46FA +SpritePrep_Eyegore: \ No newline at end of file diff --git a/enemizer/mimic_fixes.asm b/enemizer/mimic_fixes.asm new file mode 100644 index 0000000..91c081e --- /dev/null +++ b/enemizer/mimic_fixes.asm @@ -0,0 +1,68 @@ +; replace SpritePrep_Eyegore if flag is on +SpritePrep_EyegoreNew: +{ + LDA !ENABLE_MIMIC_OVERRIDE : BNE .new + ; old + JSL SpritePrep_Eyegore + RTL + + .new + LDA $0E20, X : CMP.b #$B8 : BEQ .mimic ;If sprite id == debugger sprite + JSL $1EC71A ; 0xF471A set eyegore to be only eyegore (.not_goriya?) + RTL + .mimic + LDA #$83 : STA $0E20, X : JSL $0DB818 ; 0x6B818 Sprite_LoadProperties of green eyegore + LDA #$B8 : STA $0E20, X ; set the sprite back to mimic + LDA $0CAA, X : AND #$FB : ORA #$80 : STA $0CAA, X ; STZ $0CAA, X + ;INC $0DA0, X + JSL $1EC70D ;0xF470D set eyegore to be mimic (.is_goriya?) +RTL +} + +resetSprite_Mimic: +{ + LDA !ENABLE_MIMIC_OVERRIDE : BEQ .notMimic ; skip to what it would have done normally + + LDA $0E20, X + CMP.b #$B8 : BNE .notMimic + LDA #$83 : STA $0E20, X ; overwrite the sprite id with green eyegore id + +.notMimic + ; restore code + LDA $0E20, X + + CMP.b #$7A + +RTL +} + +notItemSprite_Mimic: +{ ; don't change this unless you go update SetKillableThief in c# side since it assumes +4 bytes to update the value on the CMP from B8 to C4 + ; if we set killable thief we want to update the sprite id so it can be killed + LDA $0E20, X + CMP.b #$B8 : BEQ .changeSpriteId ; thief #$C4 + + ; if we don't have mimic code turned on we want to skip, but we also need to reload the sprite id because we just smoked it with this LDA + LDA !ENABLE_MIMIC_OVERRIDE : BEQ .reloadSpriteIdAndSkipMimic ; skip to what it would have done normally + + LDA $0E20, X ; I hate assembly + CMP.b #$B8 : BNE .continue ; "mimic" (dialogue test sprite we hijacked). skip to vanilla behavior if it's not a "mimic" + +.changeSpriteId + LDA #$83 ; load green eyegore sprite id so we can kill the thing + JMP .continue + +.reloadSpriteIdAndSkipMimic + LDA $0E20, X + +.continue + + ; restore code + REP #$20 : ASL #2 + ;REP #$20 : ASL #4 : ORA $0CF2 : PHX : REP #$10 : TAX + ;SEP #$20 + ;LDA $7F6000, X : STA $02 + ;SEP #$10 + +RTL +} \ No newline at end of file diff --git a/enemizer/moldorm.asm b/enemizer/moldorm.asm new file mode 100644 index 0000000..125cf4b --- /dev/null +++ b/enemizer/moldorm.asm @@ -0,0 +1,14 @@ +Moldorm_UpdateOamPosition: +{ + PHX + + LDA !MOLDORM_EYES_FLAG : TAX + .more_eyes + LDA $90 : CLC : ADC.w #$0004 : STA $90 + LDA $92 : CLC : ADC.w #$0001 : STA $92 + DEX : BPL .more_eyes ; X >= 0 + + PLX + + RTL +} diff --git a/enemizer/overworld_sprites.asm b/enemizer/overworld_sprites.asm new file mode 100644 index 0000000..38d4f68 --- /dev/null +++ b/enemizer/overworld_sprites.asm @@ -0,0 +1,8 @@ +LoadOverworldSprites: + ; restore code + STA $01 ; 85 01 + LDY.w #$0000 ; A0 00 00 + + ; set bank + LDA #$09 : STA $02 ; default is bank 9 +RTL \ No newline at end of file diff --git a/enemizer/special_action.asm b/enemizer/special_action.asm new file mode 100644 index 0000000..dcc3004 --- /dev/null +++ b/enemizer/special_action.asm @@ -0,0 +1,12 @@ +;================================================================================ +; Special action +;================================================================================ +check_special_action: +{ + LDA $7E0CF3 : BEQ .no_special_action + LDA.b #$05 : STA $11 ; $11[0x01] - (Main) Submodule Index (See $B0) + STZ $0CF3 ; $0CF3[0x01] - free ram + .no_special_action + JSL Player_Main +RTL +} \ No newline at end of file From 3fdf95a3640d7dc4a37be8013f1d36c3a55dae56 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 27 Sep 2022 14:38:28 -0600 Subject: [PATCH 008/176] UW Sprites new home Enemizer asm refinement --- LTTP_RND_GeneralBugfixes.asm | 4 +- enemizer/NMI.asm | 4 +- enemizer/gfx/rocks.gfx | Bin 0 -> 2048 bytes enemizer/gfx/rocks2.gfx | Bin 0 -> 192 bytes enemizer/gfx/shell.gfx | Bin 0 -> 4096 bytes enemizer/hooks.asm | 2 + enemizer/hooks/NMI_hook.asm | 4 +- enemizer/hooks/kodongo_hooks.asm | 2 +- enemizer/hooks/underworld_sprite_hooks.asm | 67 ++ enemizer/{hooks => }/kodongo_fixes.asm | 2 +- enemizer/main.asm | 12 +- enemizer/shell_gfx.asm | 12 + enemizer/underworld_sprites.asm | 6 + hooks.asm | 8 +- keydrop/standing_items.asm | 49 +- multi/multiworld.asm | 0 tables.asm | 1048 ++++++++++++++++++-- 17 files changed, 1108 insertions(+), 112 deletions(-) create mode 100644 enemizer/gfx/rocks.gfx create mode 100644 enemizer/gfx/rocks2.gfx create mode 100644 enemizer/gfx/shell.gfx create mode 100644 enemizer/hooks/underworld_sprite_hooks.asm rename enemizer/{hooks => }/kodongo_fixes.asm (90%) create mode 100644 enemizer/shell_gfx.asm create mode 100644 enemizer/underworld_sprites.asm create mode 100644 multi/multiworld.asm diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 56dd2bf..7455ab1 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -359,11 +359,12 @@ warnpc $B08000 ;$22 Contrib Code ;$23 Stats & Credits ;$24 Code Bank +;$26 Multiworld data ;$27 DR Code Bank ;$28 Keydrop / Standing Items Code bank ;$29 External hooks (rest of bank not used) ;$2A Reserved for OWR -;$2B Room Data migration +;$2B Reserved for "outlet data" ~5.8k ;$2E Reserved for Tournament Use ;$2F Static RNG (rest is reserved for tournament use) ;$30 Main Configuration Table @@ -371,6 +372,7 @@ warnpc $B08000 ;$32 Text Bank ;$33 Graphics Bank ;$36 reserved for Enemizer +;$37 Room data if needed for DR/Pottery/Enemizer ;$3A reserved for downstream use ;$3B reserved for downstream use ;$3F reserved for internal debugging diff --git a/enemizer/NMI.asm b/enemizer/NMI.asm index 607a508..567ecf9 100644 --- a/enemizer/NMI.asm +++ b/enemizer/NMI.asm @@ -1,5 +1,5 @@ ;------------- -NMIHookAction: +NMIHookActionEnemizer: { ;----------------------------------------- ; do our shell stuff @@ -33,7 +33,7 @@ NMIHookAction: ; Sets DP to $0000 LDA.w #$0000 : TCD -JML.l NMIHookReturn +JML.l NMIHookReturnEnemizer } DMAKholdstare: diff --git a/enemizer/gfx/rocks.gfx b/enemizer/gfx/rocks.gfx new file mode 100644 index 0000000000000000000000000000000000000000..dfb0454c7b1b6a123db4532534681b9a7470f553 GIT binary patch literal 2048 zcmY*adr(wm6hC)&j$2qI{}T@@*7G!sW5R(5rElgbBwsHkPEN|8V|tVvDBN@!eg4SY@H6KTqeBCccLF0Qf*cXz+ecNYx5-`vOdo%@}0zVkch zTmS$$gvgYN(P634DGHq8VCWhsAzqp_fI&M&RkPz#R-Q^)01Mz6OhLICl7~Qz;`ku| za3tGjTdj1L)oP#ZNTxeXKoBN;qxu=N6vl8Y$MRefN9Qa=LMS2%ag$ea51f5OBmv^b z%L_gj17Q$>-welV#vh}c+0Ny6g!YTQm5(aC8qk0lK`lsN-JFXHFi+=$>jTeyrrpNx zi!Y{M*L3qI7sNXI;1P7fU2vftif}fZ9VS;GWDJAeatKy}96bf9#Y_sEivvrY^E&5v zasX`?z-yp|Y*+$WC~p`3Ru{V3+Z!6r*sr$&Mox}8c=S^ZFTl>yk%|o5(*cbbRSRqa z@fi26W`m|!D+{;ul6{wX(zlzcG0D{2&J@ejhDBQAB zOoHUO0geHUA(c_2C{m+Ghba{yGP$Hb9$61T59!(H$WvX)s@X9`WzaTA^LS+4fM>8s zv*3+@6+woqn2_Dzuq&*u?j6??(xG&O5}?CEZQ?auWtc(TAd=k8ls$hj6_kf4PtH{701&jZoo(>K?ZbswH6Wwrt%oCZ2P>5;n~ zYdTh6)_o-t;3$7+RSd+!D9FG(FrbzMsB6+2>(g)S?A8(8BE4SEU>-EVTFinv30LiH zjVGl20P-%ZNacTISF{nsD&!d%>c1^14DaF`9h z`Hh>3OS~n96&Z}}_UCtGPzvRUFL8eoBo45M{eTIPD_L5fbTA;3qLYO0ER?{b^+%m? zB$;5D;oJn3$YO9X(9DSJN8I5r&bO}V-P+5bbu}D-xAC5cr&J;5uS7-2~ zLF-q8mU#(@plK}H@7Z|K6XB_Jm-kh8F^7;@T7@==g?41Uft(MN`ZtTAp35%}^6NpC zDAa<aPc*sFP>5i|w01+}Ry2Ug{N z6RbSiVQD1H*Z?gU|7+wNKCJ<+he37(lnh4LWObOTO+T4FHSIFlO(y&k(B3cz?5EiG zlei>SE!RM7WHd*arQFjjptX)Q@8a9jn%#V#W}o>pGeO-HZs>!Xa39>9hx;~nk}z3# zD0B($*9KYlBa4*hjo|Tm2_d)0DIybbFxCMJLPiYJpt{YH zg`k~-q!C$9^%15&u{$%%W_v1gLJIwxD-ftlL8DzrhFrJZQ~$zOD5W zkH~s^6(a4C4WN=rqX(;#{y%1Pzu8uOLY1d|or#g9P*F10=zjPax}Xi^ft*0jVj}y& za(LoeW0SNMZwp~D?1Xd(?+txCvg^ga=AS;3c~x^Elb%V0CvY3#!WjAFM^+ron{{E! XzUt#+?;U&ySea2U4f4=NJih%0N8j7P literal 0 HcmV?d00001 diff --git a/enemizer/gfx/rocks2.gfx b/enemizer/gfx/rocks2.gfx new file mode 100644 index 0000000000000000000000000000000000000000..9ce92b6793b151ea335cda122f02f2886b8e6ca9 GIT binary patch literal 192 zcmZQzzz_B~mvCFLvcnbqXQ*eeXF%{7{!9Gl{Kxe7xuhH;BT&_UF#HE3G!n+q7iSD;uwfeZnp(b;qJ|SKIp`SWaNgF4EIbno4@@ zRO?i$jy@2sh+n~0jM_j9Yq*CY?yZ-(}d2Q8wdG!OiM|9qi4 z6bSfyM~{7ahTypfpDggMkn-rE;IU&bNOnkd&=Hczj9D+&nxy-(I*pMkkK=Hz-@@lQ zV6%)`s2#ZT_v%j5Y18Q;`!e55FBdmyhngq{EDjn@q(F0 zmY@Gqw?@Bse8yd zg;y6w@A_)_JmlN~aw_DYk3I`WE<`TIr1+h!f3Ljs>O^JNXyKiW<^ZRL4X>?lQ0U6^c_qy|6#A@~rnLcdV&?yu11xRXP;{?4+A0U1tLnPsQhfIil;Kaf; zEnkm%ujISMw_UpB%(8~R)uO^~gAXU@G}Xh;*}li;?OE}{y*uySbN8WNy|Kbh(`g*# zDkMO$SCW{hnU?P@vFGj{>r)KHQNt20UV$Ox|C%ebp~ls8Yt$8W5%ND6a_Mvj-AFf( zt(CkY+ZNX)a#=l_yO~gzdeql0x(iQVLqj+gVT_7U%uYr!Av!)DhL3A#3}rS8YzHzg zc}FEC%HxB}X}A)unP#9qJ#-?lJp4)NSEbJ^dFA0p-fFj55I^rsc}f-NNi_aTF6l1m zzSMossXsjb!@^KMx>jV!M~9Dw<0B#uZ~n)ieA{e~!^3SGXd7KajaPu~_LP@z+N2TF z*-RFWA3j>4?5j9mrVM#$*Rrl<->#HbMi#`D^euCstIbMQ0I!2Y;i?(UTifO@YHIPt zN*>rR0J&LYMcULc>Fn*FHnjyU^A9aMP~3DmKRJyY>aj*gdoLWmw%k)R^RGL8IzLhI zZ86f=vk}jC~YMTq;)j?RKpjsXU|M)*s!>L zZ?k?H$5)F8d7p5g3jEd+w&1Fei@BM%#m=Bpk1Gcr+QBE}r?1f7Uf13Bo5pFJ2zs-C zu@=?KNiT}1K0(lMb3M8dTJQy2+pvFl9y}F6&r_a#p6#B>na7rSDhN6Io`_5}wpX&A z$#_qHLA)Yx^YF|7?HXY3gY^}2CXE|8RaW#iA``E8lGRZ26i<20u09&~JiX3D+XO*5Al{ zZ2JZBX|@u4%fT$qvPQY*$(ihFre}-&xf1}1BF7my3K!Z+Lay-IaPiZ{Z;cNZ_io_R zyuJ+RQ3gDhRaLS1>|lA-ygx4Wn}W8a7?4j{O3nNqci#MxgXf>`5k4%I)kSmOvGoDc zC-H_1NZ?kY%Y?z*T+sJrVv;{1$4a*p%=FT6x`{r7Z)&9i&ptuXf*SD!0t|8U_f&?7 zuFt=UeTs_+#U$wjL8mhqIR1K&5vMHQWx5_ir>VyIptO|+p)n3KAhVrRjTeoA6a9#m z3U9+@wH^CL(5U9g!E_HsJ;$qJ$5rlpjcI_^Cy~uCt&gSR8PFcXKOC8KCo0)_HBe!go@%i?A8uXTc7p(+V#@oG<+-O2IE{^ zjSk44vMm`#J#SJ_ElCblaDWd(NIzNhEbjo!h!J-JAqjkW=3V{BA`poj?A@OG36XMhk9BB{>UNlGi;MT{S+|bs&&3x&D?O{!D2Z8x;y8r* z6pT%v32{26WQOO)0>T%OQIbs`n?Ag${^pnG-^u?K719PO!n)(YY3FaNw$DB~>xea! z78ku#m#R;WUI6FN$~!0K{{HDx3%eTKt9%LSH6wb?bHEEd_L9i5*!1Xv%X>O(t>16 - -; $2800 bytes reserved for sprites - -; temporary pot table until sprites get moved: -org $A88000 +org $09D87E UWPotsPointers: ; 0x250 bytes for 0x128 rooms' 16-bit pointers -org $A88250 -UWPotsData: +org $09DACE +UWPotsData: ; variable number of bytes (max 0x11D1) for all pots data + +org $A88000 +UWSpritesData: ; variable number of bytes (max 0x2800) for all sprites and sprite drop data +; First $2800 bytes of this bank (28) is reserved for the sprite tables + +; $2800 bytes reserved for sprites org $A8A800 ;tables: @@ -290,7 +275,7 @@ IncrementCountsForSubstitute: RTS ClearSpriteData: - STZ.b $02 : STZ.b $03 ; what we overrode + STZ.b $03 ; what we overrode # we no longer need STZ $02 see underworld_sprite_hooks PHX LDA #$00 : LDX #$00 .loop @@ -303,20 +288,20 @@ ClearSpriteData: ; Runs during sprite load of the room LoadSpriteData: INY : INY - LDA.b ($00), Y + LDA.b [$00], Y CMP #$F3 : BCC .normal PHA - DEC.b $02 ; standing items shouldn't consume a sprite slot - LDX.b $02 + DEC.b $03 ; standing items shouldn't consume a sprite slot + LDX.b $03 ; these were changed to $03, for moved sprites CMP #$F9 : BNE .not_multiworld - DEY : LDA.b ($00), Y : STA.l SprItemMWPlayer, X + DEY : LDA.b [$00], Y : STA.l SprItemMWPlayer, X LDA.b #$02 : STA.l SprDropsItem, X : BRA .common .not_multiworld LDA.b #$00 : STA.l SprItemMWPlayer, X LDA.b #$01 : STA.l SprDropsItem, X DEY .common - DEY : LDA.b ($00), Y : STA.l SprItemReceipt, X + DEY : LDA.b [$00], Y : STA.l SprItemReceipt, X INY : INY PLA PLA : PLA ; remove the JSL return lower 16 bits diff --git a/multi/multiworld.asm b/multi/multiworld.asm new file mode 100644 index 0000000..e69de29 diff --git a/tables.asm b/tables.asm index 3f667c4..5c77707 100644 --- a/tables.asm +++ b/tables.asm @@ -1713,17 +1713,942 @@ dw $0000 dw $0000 ;-------------------------------------------------------------------------------- -; 0x185920 - 1859FF (Reserved) +; 0x30D920 - 30D9FF (Reserved) ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- -; 0x185A00 - 0x18613F (unused) +; 0x30DA00 - 30EBFF (room headers) ;-------------------------------------------------------------------------------- +; BG2PROP +; PALETTE +; BLKSET +; SPRSET +; BGMOVE +; EFFECT1 +; EFFECT2 +; PLANES1 +; PLANES2 +; WARP +; STAIRS1 +; STAIRS2 +; STAIRS3 +; STAIRS4 +;-------------------------------------------------------------------------------- +RoomHeaders: +org $30DA00 : RoomHeader_0000: ; pc 0x185A00 +db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04 + +org $30DA0E : RoomHeader_0001: ; pc 0x185A0E +db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $72, $00, $50, $52 + +org $30DA1C : RoomHeader_0002: ; pc 0x185A1C +db $C0, $1D, $04, $06, $00, $14, $00, $00, $00, $00, $11, $00, $18, $0D + +org $30DA2A : RoomHeader_0003: ; pc 0x185A2A +db $C0, $07, $06, $19, $00, $00, $00, $00, $0C, $02, $12, $00, $00, $00 + +org $30DA38 : RoomHeader_0004: ; pc 0x185A38 +db $00, $18, $0D, $26, $00, $26, $14, $00, $00, $00, $B5, $00, $08, $08 + +org $30DA46 : RoomHeader_0005: ; pc 0x185A46 +db $00, $08, $08, $14, $00, $25, $00, $20, $06, $05, $0C, $00, $25, $00 + +org $30DA54 : RoomHeader_0006: ; pc 0x185A54 +db $00, $08, $08, $14, $00, $25, $00, $20, $06, $05, $0C, $00, $25, $00 + +org $30DA62 : RoomHeader_0007: ; pc 0x185A62 +db $20, $06, $05, $0C, $00, $25, $00, $00, $00, $17, $17, $C0, $07, $06 + +org $30DA70 : RoomHeader_0008: ; pc 0x185A70 +db $C0, $07, $06, $07, $00, $00, $00, $00, $0F, $07, $19, $00, $27, $00 + +org $30DA7E : RoomHeader_0009: ; pc 0x185A7E +db $00, $0F, $07, $19, $00, $27, $00, $00, $00, $4B, $4A, $4A, $00, $0F + +org $30DA8C : RoomHeader_000A: ; pc 0x185A8C +db $00, $0F, $07, $19, $00, $27, $00, $00, $00, $09, $3A, $01, $0F, $07 + +org $30DA9A : RoomHeader_000B: ; pc 0x185A9A +db $01, $0F, $07, $19, $00, $03, $00, $00, $00, $6A, $1B, $C0, $28, $0E + +org $30DAA8 : RoomHeader_000C: ; pc 0x185AA8 +db $C0, $28, $0E, $13, $00, $00, $00, $00, $00, $00, $6B, $8C, $8C, $40 + +org $30DAB6 : RoomHeader_000D: ; pc 0x185AB6 +db $40, $1B, $0E, $18, $05, $38, $00, $00, $13, $0B, $1C, $00, $08, $00 + +org $30DAC4 : RoomHeader_000E: ; pc 0x185AC4 +db $00, $13, $0B, $1C, $00, $08, $00, $00, $00, $00, $1E, $00, $21, $13 + +org $30DAD2 : RoomHeader_000F: ; pc 0x185AD2 +db $00, $21, $13, $22, $00, $00, $00, $00, $01, $01, $01, $00, $00, $00 + +org $30DAE0 : RoomHeader_0010: ; pc 0x185AE0 +db $00, $21, $13, $22, $00, $00, $00, $00, $01, $01, $01, $00, $00, $00 + +org $30DAEE : RoomHeader_0011: ; pc 0x185AEE +db $00, $01, $01, $01, $00, $00, $00, $08, $00, $00, $02, $C0, $1D, $04 + +org $30DAFC : RoomHeader_0012: ; pc 0x185AFC +db $C0, $1D, $04, $06, $00, $00, $00, $00, $18, $0D, $26, $00, $00, $00 + +org $30DB0A : RoomHeader_0013: ; pc 0x185B0A +db $00, $18, $0D, $26, $00, $00, $00, $00, $18, $0D, $1E, $00, $00, $00 + +org $30DB18 : RoomHeader_0014: ; pc 0x185B18 +db $20, $18, $0D, $26, $00, $00, $00, $C0, $18, $0D, $26, $00, $00, $00 + +org $30DB26 : RoomHeader_0015: ; pc 0x185B26 +db $C0, $18, $0D, $26, $00, $00, $00, $00, $00, $00, $B6, $90, $08, $08 + +org $30DB34 : RoomHeader_0016: ; pc 0x185B34 +db $90, $08, $08, $11, $03, $00, $00, $00, $00, $00, $66, $20, $06, $05 + +org $30DB42 : RoomHeader_0017: ; pc 0x185B42 +db $20, $06, $05, $19, $00, $35, $00, $00, $00, $27, $07, $27, $01, $0F + +org $30DB50 : RoomHeader_0018: ; pc 0x185B50 +db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 + +org $30DB5E : RoomHeader_0019: ; pc 0x185B5E +db $01, $0F, $07, $19, $00, $00, $00, $00, $0F, $07, $19, $00, $16, $00 + +org $30DB6C : RoomHeader_001A: ; pc 0x185B6C +db $00, $0F, $07, $19, $00, $16, $00, $00, $00, $00, $6A, $6A, $68, $0F + +org $30DB7A : RoomHeader_001B: ; pc 0x185B7A +db $68, $0F, $07, $08, $00, $03, $1C, $00, $00, $00, $0B, $00, $1A, $0E + +org $30DB88 : RoomHeader_001C: ; pc 0x185B88 +db $00, $1A, $0E, $09, $00, $04, $3F, $00, $00, $00, $8C, $00, $1B, $0E + +org $30DB96 : RoomHeader_001D: ; pc 0x185B96 +db $00, $1B, $0E, $18, $00, $00, $00, $00, $00, $00, $4C, $20, $13, $0B + +org $30DBA4 : RoomHeader_001E: ; pc 0x185BA4 +db $20, $13, $0B, $1C, $00, $17, $00, $00, $00, $3E, $0E, $00, $13, $0B + +org $30DBB2 : RoomHeader_001F: ; pc 0x185BB2 +db $00, $13, $0B, $29, $00, $17, $00, $00, $00, $00, $3F, $20, $0C, $02 + +org $30DBC0 : RoomHeader_0020: ; pc 0x185BC0 +db $20, $0C, $02, $12, $00, $15, $25, $01, $01, $01, $01, $00, $00, $00 + +org $30DBCE : RoomHeader_0021: ; pc 0x185BCE +db $01, $01, $01, $01, $00, $00, $00, $00, $18, $0D, $26, $00, $01, $00 + +org $30DBDC : RoomHeader_0022: ; pc 0x185BDC +db $01, $01, $01, $01, $00, $00, $00, $00, $18, $0D, $26, $00, $01, $00 + +org $30DBEA : RoomHeader_0023: ; pc 0x185BEA +db $00, $18, $0D, $26, $00, $00, $00, $00, $18, $0D, $1E, $00, $00, $00 + +org $30DBF8 : RoomHeader_0024: ; pc 0x185BF8 +db $00, $18, $0D, $26, $00, $01, $00, $00, $0A, $08, $11, $00, $16, $00 + +org $30DC06 : RoomHeader_0025: ; pc 0x185C06 +db $00, $0A, $08, $11, $00, $16, $00, $00, $00, $00, $76, $76, $76, $20 + +org $30DC14 : RoomHeader_0026: ; pc 0x185C14 +db $00, $0A, $08, $11, $00, $16, $00, $00, $00, $00, $76, $76, $76, $20 + +org $30DC22 : RoomHeader_0027: ; pc 0x185C22 +db $20, $06, $05, $19, $00, $36, $00, $00, $00, $31, $17, $31, $80, $0A + +org $30DC30 : RoomHeader_0028: ; pc 0x185C30 +db $80, $0A, $08, $11, $00, $32, $1B, $00, $00, $00, $38, $CC, $0E, $09 + +org $30DC3E : RoomHeader_0029: ; pc 0x185C3E +db $CC, $0E, $09, $1A, $02, $25, $00, $00, $0F, $07, $19, $00, $00, $00 + +org $30DC4C : RoomHeader_002A: ; pc 0x185C4C +db $00, $0F, $07, $19, $00, $00, $00, $C0, $0F, $07, $2B, $00, $16, $00 + +org $30DC5A : RoomHeader_002B: ; pc 0x185C5A +db $C0, $0F, $07, $2B, $00, $16, $00, $00, $00, $00, $3B, $00, $13, $0B + +org $30DC68 : RoomHeader_002C: ; pc 0x185C68 +db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 + +org $30DC76 : RoomHeader_002D: ; pc 0x185C76 +db $00, $13, $0B, $1C, $00, $2A, $00, $C0, $07, $06, $19, $00, $00, $00 + +org $30DC84 : RoomHeader_002E: ; pc 0x185C84 +db $00, $13, $0B, $1C, $00, $2A, $00, $C0, $07, $06, $19, $00, $00, $00 + +org $30DC92 : RoomHeader_002F: ; pc 0x185C92 +db $C0, $07, $06, $19, $00, $00, $00, $00, $0C, $02, $12, $00, $00, $00 + +org $30DCA0 : RoomHeader_0030: ; pc 0x185CA0 +db $00, $0C, $02, $12, $00, $00, $00, $00, $00, $00, $40, $20, $06, $05 + +org $30DCAE : RoomHeader_0031: ; pc 0x185CAE +db $20, $06, $05, $19, $00, $37, $04, $22, $00, $77, $27, $77, $01, $01 + +org $30DCBC : RoomHeader_0032: ; pc 0x185CBC +db $01, $01, $01, $01, $00, $00, $00, $00, $00, $00, $42, $00, $04, $05 + +org $30DCCA : RoomHeader_0033: ; pc 0x185CCA +db $00, $04, $05, $0B, $00, $15, $25, $80, $0A, $08, $11, $00, $00, $00 + +org $30DCD8 : RoomHeader_0034: ; pc 0x185CD8 +db $80, $0A, $08, $11, $00, $00, $00, $00, $00, $00, $54, $80, $0A, $08 + +org $30DCE6 : RoomHeader_0035: ; pc 0x185CE6 +db $80, $0A, $08, $11, $00, $00, $19, $80, $0A, $08, $11, $00, $00, $00 + +org $30DCF4 : RoomHeader_0036: ; pc 0x185CF4 +db $80, $0A, $08, $11, $00, $00, $00, $80, $0A, $08, $11, $00, $00, $00 + +org $30DD02 : RoomHeader_0037: ; pc 0x185D02 +db $80, $0A, $08, $11, $00, $00, $19, $80, $0A, $08, $11, $00, $00, $00 + +org $30DD10 : RoomHeader_0038: ; pc 0x185D10 +db $80, $0A, $08, $11, $00, $00, $00, $00, $00, $00, $28, $20, $0D, $09 + +org $30DD1E : RoomHeader_0039: ; pc 0x185D1E +db $20, $0D, $09, $13, $00, $00, $00, $00, $00, $29, $20, $0F, $07, $19 + +org $30DD2C : RoomHeader_003A: ; pc 0x185D2C +db $20, $0F, $07, $19, $00, $00, $00, $00, $00, $0A, $0A, $00, $0F, $07 + +org $30DD3A : RoomHeader_003B: ; pc 0x185D3A +db $00, $0F, $07, $08, $00, $00, $00, $00, $00, $00, $2B, $00, $07, $06 + +org $30DD48 : RoomHeader_003C: ; pc 0x185D48 +db $00, $07, $06, $13, $00, $00, $00, $20, $1A, $0E, $0C, $00, $33, $00 + +org $30DD56 : RoomHeader_003D: ; pc 0x185D56 +db $20, $1A, $0E, $0C, $00, $33, $00, $00, $00, $96, $96, $CC, $13, $0B + +org $30DD64 : RoomHeader_003E: ; pc 0x185D64 +db $CC, $13, $0B, $29, $02, $02, $00, $00, $00, $00, $1E, $00, $13, $0B + +org $30DD72 : RoomHeader_003F: ; pc 0x185D72 +db $00, $13, $0B, $29, $00, $27, $14, $00, $00, $00, $1F, $5F, $C0, $00 + +org $30DD80 : RoomHeader_0040: ; pc 0x185D80 +db $C0, $00, $02, $27, $00, $00, $00, $00, $00, $00, $30, $B0, $01, $00 + +org $30DD8E : RoomHeader_0041: ; pc 0x185D8E +db $01, $00, $00, $02, $00, $13, $00, $00, $00, $00, $42, $01, $01, $01 + +org $30DD9C : RoomHeader_0042: ; pc 0x185D9C +db $01, $01, $01, $01, $00, $00, $00, $00, $00, $00, $41, $32, $68, $04 + +org $30DDAA : RoomHeader_0043: ; pc 0x185DAA +db $68, $04, $05, $0A, $00, $00, $1D, $00, $17, $0A, $1B, $00, $01, $00 + +org $30DDB8 : RoomHeader_0044: ; pc 0x185DB8 +db $00, $17, $0A, $1B, $00, $01, $00, $60, $17, $0A, $1B, $00, $01, $00 + +org $30DDC6 : RoomHeader_0045: ; pc 0x185DC6 +db $60, $17, $0A, $1B, $00, $01, $00, $00, $00, $00, $BC, $00, $0A, $08 + +org $30DDD4 : RoomHeader_0046: ; pc 0x185DD4 +db $00, $0A, $08, $11, $00, $3C, $00, $00, $0D, $09, $13, $00, $33, $34 + +org $30DDE2 : RoomHeader_0047: ; pc 0x185DE2 +db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 + +org $30DDF0 : RoomHeader_0048: ; pc 0x185DF0 +db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 + +org $30DDFE : RoomHeader_0049: ; pc 0x185DFE +db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 + +org $30DE0C : RoomHeader_004A: ; pc 0x185E0C +db $00, $0F, $07, $19, $00, $17, $00, $00, $00, $00, $09, $09, $00, $0F + +org $30DE1A : RoomHeader_004B: ; pc 0x185E1A +db $00, $0F, $07, $08, $00, $01, $00, $00, $00, $09, $00, $1A, $0E, $0C + +org $30DE28 : RoomHeader_004C: ; pc 0x185E28 +db $00, $1A, $0E, $0C, $00, $00, $00, $00, $00, $00, $1D, $20, $1A, $0E + +org $30DE36 : RoomHeader_004D: ; pc 0x185E36 +db $20, $1A, $0E, $0C, $00, $32, $3F, $00, $00, $A6, $A6, $00, $13, $0B + +org $30DE44 : RoomHeader_004E: ; pc 0x185E44 +db $00, $13, $0B, $29, $00, $17, $00, $00, $00, $00, $6E, $00, $13, $0B + +org $30DE52 : RoomHeader_004F: ; pc 0x185E52 +db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $BE, $C0, $00, $00, $04 + +org $30DE60 : RoomHeader_0050: ; pc 0x185E60 +db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $01, $01 + +org $30DE6E : RoomHeader_0051: ; pc 0x185E6E +db $C0, $00, $00, $03, $00, $00, $00, $00, $00, $00, $61, $C0, $00, $00 + +org $30DE7C : RoomHeader_0052: ; pc 0x185E7C +db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $01, $01 + +org $30DE8A : RoomHeader_0053: ; pc 0x185E8A +db $C0, $04, $05, $0A, $00, $03, $00, $00, $00, $00, $63, $20, $0A, $08 + +org $30DE98 : RoomHeader_0054: ; pc 0x185E98 +db $20, $0A, $08, $11, $00, $00, $00, $00, $00, $34, $34, $01, $01, $10 + +org $30DEA6 : RoomHeader_0055: ; pc 0x185EA6 +db $01, $01, $10, $0D, $00, $00, $00, $00, $0D, $09, $13, $00, $23, $00 + +org $30DEB4 : RoomHeader_0056: ; pc 0x185EB4 +db $00, $0D, $09, $13, $00, $23, $00, $00, $0D, $09, $13, $00, $16, $00 + +org $30DEC2 : RoomHeader_0057: ; pc 0x185EC2 +db $00, $0D, $09, $13, $00, $16, $00, $00, $0D, $09, $13, $00, $21, $28 + +org $30DED0 : RoomHeader_0058: ; pc 0x185ED0 +db $00, $0D, $09, $13, $00, $21, $28, $C0, $0D, $09, $13, $00, $00, $00 + +org $30DEDE : RoomHeader_0059: ; pc 0x185EDE +db $C0, $0D, $09, $13, $00, $00, $00, $00, $10, $07, $15, $00, $25, $00 + +org $30DEEC : RoomHeader_005A: ; pc 0x185EEC +db $00, $10, $07, $15, $00, $25, $00, $C0, $1B, $0E, $0A, $00, $17, $00 + +org $30DEFA : RoomHeader_005B: ; pc 0x185EFA +db $C0, $1B, $0E, $0A, $00, $17, $00, $00, $1B, $0E, $0A, $00, $00, $00 + +org $30DF08 : RoomHeader_005C: ; pc 0x185F08 +db $00, $1B, $0E, $0A, $00, $00, $00, $00, $00, $00, $5D, $00, $24, $0E + +org $30DF16 : RoomHeader_005D: ; pc 0x185F16 +db $00, $24, $0E, $23, $00, $09, $00, $00, $00, $00, $5C, $20, $13, $0B + +org $30DF24 : RoomHeader_005E: ; pc 0x185F24 +db $20, $13, $0B, $1C, $00, $00, $00, $00, $00, $7E, $7E, $00, $13, $0B + +org $30DF32 : RoomHeader_005F: ; pc 0x185F32 +db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $3F, $7F, $C0, $00 + +org $30DF40 : RoomHeader_0060: ; pc 0x185F40 +db $C0, $00, $00, $04, $00, $00, $00, $C0, $00, $00, $04, $00, $00, $00 + +org $30DF4E : RoomHeader_0061: ; pc 0x185F4E +db $C0, $00, $00, $04, $00, $00, $00, $08, $00, $00, $51, $00, $09, $05 + +org $30DF5C : RoomHeader_0062: ; pc 0x185F5C +db $C0, $00, $00, $04, $00, $00, $00, $C0, $00, $00, $04, $00, $00, $00 + +org $30DF6A : RoomHeader_0063: ; pc 0x185F6A +db $00, $09, $05, $0A, $00, $0D, $00, $00, $00, $00, $53, $E0, $23, $0A + +org $30DF78 : RoomHeader_0064: ; pc 0x185F78 +db $E0, $23, $0A, $21, $00, $17, $00, $00, $00, $00, $AB, $E0, $23, $0A + +org $30DF86 : RoomHeader_0065: ; pc 0x185F86 +db $E0, $23, $0A, $21, $00, $00, $00, $00, $00, $AC, $C0, $0A, $08, $11 + +org $30DF94 : RoomHeader_0066: ; pc 0x185F94 +db $C0, $0A, $08, $11, $00, $3C, $00, $00, $00, $00, $16, $00, $0D, $09 + +org $30DFA2 : RoomHeader_0067: ; pc 0x185FA2 +db $00, $0D, $09, $13, $00, $22, $00, $00, $0D, $09, $13, $00, $00, $00 + +org $30DFB0 : RoomHeader_0068: ; pc 0x185FB0 +db $00, $0D, $09, $13, $00, $00, $00, $01, $0F, $07, $19, $00, $00, $00 + +org $30DFBE : RoomHeader_0069: ; pc 0x185FBE +db $01, $0F, $07, $19, $00, $00, $00, $00, $00, $00, $1A, $1A, $00, $1B + +org $30DFCC : RoomHeader_006A: ; pc 0x185FCC +db $01, $0F, $07, $19, $00, $00, $00, $00, $00, $00, $1A, $1A, $00, $1B + +org $30DFDA : RoomHeader_006B: ; pc 0x185FDA +db $00, $1B, $0E, $0A, $00, $08, $0B, $00, $00, $00, $0C, $00, $24, $0E + +org $30DFE8 : RoomHeader_006C: ; pc 0x185FE8 +db $00, $24, $0E, $23, $00, $03, $3F, $00, $00, $00, $A5, $00, $24, $0E + +org $30DFF6 : RoomHeader_006D: ; pc 0x185FF6 +db $00, $24, $0E, $23, $00, $05, $00, $00, $13, $0B, $1C, $00, $02, $00 + +org $30E004 : RoomHeader_006E: ; pc 0x186004 +db $00, $13, $0B, $1C, $00, $02, $00, $00, $00, $00, $4E, $00, $01, $01 + +org $30E012 : RoomHeader_006F: ; pc 0x186012 +db $00, $01, $01, $04, $00, $00, $00, $08, $00, $00, $71, $80, $C0, $01 + +org $30E020 : RoomHeader_0070: ; pc 0x186020 +db $00, $01, $01, $04, $00, $00, $00, $08, $00, $00, $71, $80, $C0, $01 + +org $30E02E : RoomHeader_0071: ; pc 0x18602E +db $C0, $01, $01, $04, $00, $08, $00, $00, $00, $00, $70, $C0, $01, $01 + +org $30E03C : RoomHeader_0072: ; pc 0x18603C +db $C0, $01, $01, $04, $00, $00, $00, $08, $00, $00, $01, $00, $09, $05 + +org $30E04A : RoomHeader_0073: ; pc 0x18604A +db $00, $09, $05, $0A, $00, $17, $00, $00, $09, $05, $0A, $00, $27, $00 + +org $30E058 : RoomHeader_0074: ; pc 0x186058 +db $00, $09, $05, $0A, $00, $27, $00, $00, $09, $05, $0A, $00, $01, $00 + +org $30E066 : RoomHeader_0075: ; pc 0x186066 +db $00, $09, $05, $0A, $00, $01, $00, $80, $0A, $08, $11, $00, $00, $18 + +org $30E074 : RoomHeader_0076: ; pc 0x186074 +db $80, $0A, $08, $11, $00, $00, $18, $00, $00, $00, $26, $26, $26, $C0 + +org $30E082 : RoomHeader_0077: ; pc 0x186082 +db $C0, $06, $05, $19, $00, $00, $00, $00, $00, $A7, $31, $87, $87, $00 + +org $30E090 : RoomHeader_0078: ; pc 0x186090 +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E09E : RoomHeader_0079: ; pc 0x18609E +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E0AC : RoomHeader_007A: ; pc 0x1860AC +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E0BA : RoomHeader_007B: ; pc 0x1860BA +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E0C8 : RoomHeader_007C: ; pc 0x1860C8 +db $00, $28, $0E, $13, $00, $20, $00, $00, $28, $0E, $13, $00, $04, $3C + +org $30E0D6 : RoomHeader_007D: ; pc 0x1860D6 +db $00, $28, $0E, $13, $00, $04, $3C, $00, $00, $9B, $20, $13, $0B, $1C + +org $30E0E4 : RoomHeader_007E: ; pc 0x1860E4 +db $20, $13, $0B, $1C, $00, $2B, $17, $00, $00, $9E, $5E, $00, $13, $0B + +org $30E0F2 : RoomHeader_007F: ; pc 0x1860F2 +db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $00, $5F, $60, $01, $01 + +org $30E100 : RoomHeader_0080: ; pc 0x186100 +db $60, $01, $01, $04, $00, $00, $00, $00, $00, $00, $70, $C0, $01, $01 + +org $30E10E : RoomHeader_0081: ; pc 0x18610E +db $C0, $01, $01, $04, $00, $00, $00, $00, $09, $05, $0A, $00, $0D, $00 + +org $30E11C : RoomHeader_0082: ; pc 0x18611C +db $C0, $01, $01, $04, $00, $00, $00, $00, $09, $05, $0A, $00, $0D, $00 + +org $30E12A : RoomHeader_0083: ; pc 0x18612A +db $00, $09, $05, $0A, $00, $0D, $00, $00, $09, $05, $0A, $00, $00, $00 + +org $30E138 : RoomHeader_0084: ; pc 0x186138 +db $00, $09, $05, $0A, $00, $00, $00, $00, $09, $05, $0A, $00, $02, $00 + +org $30E146 : RoomHeader_0085: ; pc 0x186146 +db $00, $09, $05, $0A, $00, $02, $00, $00, $06, $05, $19, $00, $3E, $01 + +org $30E154 : RoomHeader_0086: ; pc 0x186154 +db $00, $06, $05, $19, $00, $3E, $01, $28, $00, $00, $77, $77, $00, $0B + +org $30E162 : RoomHeader_0087: ; pc 0x186162 +db $00, $06, $05, $19, $00, $3E, $01, $28, $00, $00, $77, $77, $00, $0B + +org $30E170 : RoomHeader_0088: ; pc 0x186170 +db $00, $0B, $05, $08, $00, $00, $00, $02, $00, $A9, $00, $28, $0E, $13 + +org $30E17E : RoomHeader_0089: ; pc 0x18617E +db $00, $0B, $05, $08, $00, $00, $00, $02, $00, $A9, $00, $28, $0E, $13 + +org $30E18C : RoomHeader_008A: ; pc 0x18618C +db $00, $28, $0E, $13, $00, $3A, $0C, $20, $28, $0E, $13, $00, $16, $00 + +org $30E19A : RoomHeader_008B: ; pc 0x18619A +db $00, $28, $0E, $13, $00, $3A, $0C, $20, $28, $0E, $13, $00, $16, $00 + +org $30E1A8 : RoomHeader_008C: ; pc 0x1861A8 +db $20, $28, $0E, $13, $00, $16, $00, $28, $00, $1C, $0C, $0C, $1C, $00 + +org $30E1B6 : RoomHeader_008D: ; pc 0x1861B6 +db $00, $28, $0E, $13, $00, $33, $29, $00, $13, $0B, $1C, $00, $00, $00 + +org $30E1C4 : RoomHeader_008E: ; pc 0x1861C4 +db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $00, $AE, $80, $12, $0C + +org $30E1D2 : RoomHeader_008F: ; pc 0x1861D2 +db $80, $12, $0C, $16, $00, $25, $00, $00, $11, $0C, $1C, $00, $00, $00 + +org $30E1E0 : RoomHeader_0090: ; pc 0x1861E0 +db $80, $12, $0C, $16, $00, $25, $00, $00, $11, $0C, $1C, $00, $00, $00 + +org $30E1EE : RoomHeader_0091: ; pc 0x1861EE +db $00, $11, $0C, $1C, $00, $00, $00, $00, $00, $00, $A0, $01, $11, $0C + +org $30E1FC : RoomHeader_0092: ; pc 0x1861FC +db $01, $11, $0C, $1C, $00, $00, $00, $01, $11, $0C, $1C, $00, $16, $00 + +org $30E20A : RoomHeader_0093: ; pc 0x18620A +db $01, $11, $0C, $1C, $00, $16, $00, $08, $00, $00, $A2, $00, $25, $0E + +org $30E218 : RoomHeader_0094: ; pc 0x186218 +db $00, $25, $0E, $24, $00, $00, $00, $00, $25, $0E, $24, $00, $33, $00 + +org $30E226 : RoomHeader_0095: ; pc 0x186226 +db $00, $25, $0E, $24, $00, $00, $00, $00, $25, $0E, $24, $00, $33, $00 + +org $30E234 : RoomHeader_0096: ; pc 0x186234 +db $00, $25, $0E, $24, $00, $33, $00, $00, $00, $00, $3D, $68, $11, $0C + +org $30E242 : RoomHeader_0097: ; pc 0x186242 +db $68, $11, $0C, $1D, $00, $1C, $00, $00, $00, $D1, $D1, $00, $11, $0C + +org $30E250 : RoomHeader_0098: ; pc 0x186250 +db $00, $11, $0C, $1C, $00, $00, $00, $00, $00, $00, $D2, $01, $0B, $05 + +org $30E25E : RoomHeader_0099: ; pc 0x18625E +db $01, $0B, $05, $08, $00, $00, $00, $00, $00, $00, $DA, $00, $28, $0E + +org $30E26C : RoomHeader_009A: ; pc 0x18626C +db $00, $28, $0E, $13, $00, $00, $00, $00, $00, $7D, $00, $28, $0E, $13 + +org $30E27A : RoomHeader_009B: ; pc 0x18627A +db $00, $28, $0E, $13, $00, $00, $00, $00, $00, $7D, $00, $28, $0E, $13 + +org $30E288 : RoomHeader_009C: ; pc 0x186288 +db $00, $28, $0E, $13, $06, $00, $00, $00, $28, $0E, $13, $06, $00, $3B + +org $30E296 : RoomHeader_009D: ; pc 0x186296 +db $00, $28, $0E, $13, $06, $00, $3B, $00, $00, $7B, $20, $13, $0B, $1C + +org $30E2A4 : RoomHeader_009E: ; pc 0x1862A4 +db $20, $13, $0B, $1C, $00, $00, $00, $00, $00, $BE, $BE, $00, $13, $0B + +org $30E2B2 : RoomHeader_009F: ; pc 0x1862B2 +db $00, $13, $0B, $1C, $00, $17, $00, $00, $12, $0C, $1D, $00, $00, $00 + +org $30E2C0 : RoomHeader_00A0: ; pc 0x1862C0 +db $00, $12, $0C, $1D, $00, $00, $00, $00, $00, $00, $91, $00, $11, $0C + +org $30E2CE : RoomHeader_00A1: ; pc 0x1862CE +db $00, $11, $0C, $1D, $00, $00, $00, $C0, $11, $0C, $1D, $00, $00, $00 + +org $30E2DC : RoomHeader_00A2: ; pc 0x1862DC +db $C0, $11, $0C, $1D, $00, $00, $00, $00, $00, $00, $93, $60, $19, $0D + +org $30E2EA : RoomHeader_00A3: ; pc 0x1862EA +db $00, $11, $0C, $1D, $00, $00, $00, $C0, $11, $0C, $1D, $00, $00, $00 + +org $30E2F8 : RoomHeader_00A4: ; pc 0x1862F8 +db $60, $19, $0D, $17, $04, $25, $00, $00, $25, $0E, $24, $00, $07, $00 + +org $30E306 : RoomHeader_00A5: ; pc 0x186306 +db $00, $25, $0E, $24, $00, $07, $00, $00, $00, $00, $6C, $00, $25, $0E + +org $30E314 : RoomHeader_00A6: ; pc 0x186314 +db $00, $25, $0E, $24, $00, $00, $00, $00, $00, $00, $4D, $00, $06, $05 + +org $30E322 : RoomHeader_00A7: ; pc 0x186322 +db $00, $06, $05, $19, $00, $00, $00, $00, $00, $17, $C0, $0B, $05, $08 + +org $30E330 : RoomHeader_00A8: ; pc 0x186330 +db $C0, $0B, $05, $08, $00, $03, $00, $C0, $0B, $05, $08, $00, $17, $00 + +org $30E33E : RoomHeader_00A9: ; pc 0x18633E +db $C0, $0B, $05, $08, $00, $17, $00, $00, $00, $89, $C0, $0B, $05, $08 + +org $30E34C : RoomHeader_00AA: ; pc 0x18634C +db $C0, $0B, $05, $08, $00, $17, $00, $00, $17, $0A, $1B, $00, $00, $00 + +org $30E35A : RoomHeader_00AB: ; pc 0x18635A +db $00, $17, $0A, $1B, $00, $00, $00, $00, $00, $00, $64, $E0, $17, $0A + +org $30E368 : RoomHeader_00AC: ; pc 0x186368 +db $E0, $17, $0A, $20, $00, $25, $00, $00, $13, $0B, $1C, $00, $27, $00 + +org $30E376 : RoomHeader_00AD: ; pc 0x186376 +db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $8E, $00, $13, $0B + +org $30E384 : RoomHeader_00AE: ; pc 0x186384 +db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $8E, $00, $13, $0B + +org $30E392 : RoomHeader_00AF: ; pc 0x186392 +db $00, $13, $0B, $1C, $00, $00, $00, $00, $26, $02, $21, $00, $05, $02 + +org $30E3A0 : RoomHeader_00B0: ; pc 0x1863A0 +db $00, $26, $02, $21, $00, $05, $02, $08, $00, $00, $40, $C0, $00, $11 + +org $30E3AE : RoomHeader_00B1: ; pc 0x1863AE +db $00, $11, $0C, $1D, $00, $00, $00, $02, $00, $B2, $C0, $11, $0C, $1D + +org $30E3BC : RoomHeader_00B2: ; pc 0x1863BC +db $C0, $11, $0C, $1D, $00, $03, $0E, $C0, $11, $0C, $1D, $00, $27, $00 + +org $30E3CA : RoomHeader_00B3: ; pc 0x1863CA +db $C0, $11, $0C, $1D, $00, $27, $00, $00, $19, $0D, $17, $00, $00, $00 + +org $30E3D8 : RoomHeader_00B4: ; pc 0x1863D8 +db $00, $19, $0D, $17, $00, $00, $00, $00, $00, $00, $C4, $01, $18, $0D + +org $30E3E6 : RoomHeader_00B5: ; pc 0x1863E6 +db $01, $18, $0D, $25, $00, $17, $00, $00, $00, $00, $04, $00, $18, $0D + +org $30E3F4 : RoomHeader_00B6: ; pc 0x1863F4 +db $00, $18, $0D, $1E, $00, $04, $3C, $00, $00, $00, $15, $00, $0B, $05 + +org $30E402 : RoomHeader_00B7: ; pc 0x186402 +db $00, $18, $0D, $1E, $00, $00, $00, $20, $18, $0D, $26, $00, $00, $00 + +org $30E410 : RoomHeader_00B8: ; pc 0x186410 +db $00, $0B, $05, $08, $00, $27, $00, $C0, $0B, $05, $08, $00, $00, $00 + +org $30E41E : RoomHeader_00B9: ; pc 0x18641E +db $C0, $0B, $05, $08, $00, $00, $00, $01, $0B, $05, $08, $00, $17, $00 + +org $30E42C : RoomHeader_00BA: ; pc 0x18642C +db $01, $0B, $05, $08, $00, $17, $00, $40, $17, $0A, $1B, $00, $00, $00 + +org $30E43A : RoomHeader_00BB: ; pc 0x18643A +db $40, $17, $0A, $1B, $00, $00, $00, $00, $17, $0A, $1B, $00, $17, $00 + +org $30E448 : RoomHeader_00BC: ; pc 0x186448 +db $00, $17, $0A, $1B, $00, $17, $00, $00, $00, $00, $45, $00, $13, $0B + +org $30E456 : RoomHeader_00BD: ; pc 0x186456 +db $00, $13, $0B, $29, $00, $16, $00, $00, $00, $4F, $9E, $00, $13, $0B + +org $30E464 : RoomHeader_00BE: ; pc 0x186464 +db $00, $13, $0B, $29, $00, $16, $00, $00, $00, $4F, $9E, $00, $13, $0B + +org $30E472 : RoomHeader_00BF: ; pc 0x186472 +db $00, $13, $0B, $29, $00, $00, $00, $01, $00, $02, $27, $00, $02, $0F + +org $30E480 : RoomHeader_00C0: ; pc 0x186480 +db $01, $00, $02, $27, $00, $02, $0F, $00, $00, $00, $B0, $D0, $00, $11 + +org $30E48E : RoomHeader_00C1: ; pc 0x18648E +db $00, $11, $0C, $1D, $00, $33, $00, $C0, $11, $0C, $1D, $00, $27, $00 + +org $30E49C : RoomHeader_00C2: ; pc 0x18649C +db $C0, $11, $0C, $1D, $00, $27, $00, $C0, $11, $0C, $1D, $00, $00, $00 + +org $30E4AA : RoomHeader_00C3: ; pc 0x1864AA +db $C0, $11, $0C, $1D, $00, $00, $00, $00, $18, $0D, $25, $00, $00, $00 + +org $30E4B8 : RoomHeader_00C4: ; pc 0x1864B8 +db $00, $18, $0D, $25, $00, $00, $00, $00, $00, $00, $B4, $00, $18, $0D + +org $30E4C6 : RoomHeader_00C5: ; pc 0x1864C6 +db $00, $18, $0D, $25, $00, $00, $00, $00, $18, $0D, $1E, $00, $33, $00 + +org $30E4D4 : RoomHeader_00C6: ; pc 0x1864D4 +db $00, $18, $0D, $1E, $00, $00, $00, $20, $18, $0D, $26, $00, $00, $00 + +org $30E4E2 : RoomHeader_00C7: ; pc 0x1864E2 +db $00, $18, $0D, $1E, $00, $33, $00, $00, $0B, $05, $09, $00, $15, $25 + +org $30E4F0 : RoomHeader_00C8: ; pc 0x1864F0 +db $00, $0B, $05, $09, $00, $15, $25, $00, $0B, $05, $08, $00, $17, $00 + +org $30E4FE : RoomHeader_00C9: ; pc 0x1864FE +db $00, $0B, $05, $08, $00, $17, $00, $C0, $17, $0A, $1B, $00, $00, $00 + +org $30E50C : RoomHeader_00CA: ; pc 0x18650C +db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 + +org $30E51A : RoomHeader_00CB: ; pc 0x18651A +db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 + +org $30E528 : RoomHeader_00CC: ; pc 0x186528 +db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 + +org $30E536 : RoomHeader_00CD: ; pc 0x186536 +db $20, $13, $0B, $29, $00, $14, $00, $00, $00, $DE, $01, $00, $02, $21 + +org $30E544 : RoomHeader_00CE: ; pc 0x186544 +db $20, $13, $0B, $29, $00, $14, $00, $00, $00, $DE, $01, $00, $02, $21 + +org $30E552 : RoomHeader_00CF: ; pc 0x186552 +db $01, $00, $02, $21, $00, $0F, $00, $00, $00, $00, $C0, $E0, $00, $11 + +org $30E560 : RoomHeader_00D0: ; pc 0x186560 +db $01, $00, $02, $21, $00, $0F, $00, $00, $00, $00, $C0, $E0, $00, $11 + +org $30E56E : RoomHeader_00D1: ; pc 0x18656E +db $00, $11, $0C, $1D, $00, $00, $00, $00, $00, $B1, $97, $00, $11, $0C + +org $30E57C : RoomHeader_00D2: ; pc 0x18657C +db $00, $11, $0C, $1D, $00, $0A, $00, $00, $00, $00, $98, $00, $0B, $05 + +org $30E58A : RoomHeader_00D3: ; pc 0x18658A +db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 + +org $30E598 : RoomHeader_00D4: ; pc 0x186598 +db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 + +org $30E5A6 : RoomHeader_00D5: ; pc 0x1865A6 +db $00, $18, $0D, $25, $00, $00, $00, $00, $18, $0D, $1E, $00, $33, $00 + +org $30E5B4 : RoomHeader_00D6: ; pc 0x1865B4 +db $00, $18, $0D, $1E, $00, $00, $00, $20, $18, $0D, $26, $00, $00, $00 + +org $30E5C2 : RoomHeader_00D7: ; pc 0x1865C2 +db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 + +org $30E5D0 : RoomHeader_00D8: ; pc 0x1865D0 +db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 + +org $30E5DE : RoomHeader_00D9: ; pc 0x1865DE +db $00, $0B, $05, $08, $00, $17, $00, $00, $0B, $05, $08, $00, $17, $00 + +org $30E5EC : RoomHeader_00DA: ; pc 0x1865EC +db $00, $0B, $05, $08, $00, $17, $00, $00, $00, $00, $99, $E0, $14, $0B + +org $30E5FA : RoomHeader_00DB: ; pc 0x1865FA +db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 + +org $30E608 : RoomHeader_00DC: ; pc 0x186608 +db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 + +org $30E616 : RoomHeader_00DD: ; pc 0x186616 +db $E0, $14, $0B, $16, $00, $25, $00, $C0, $20, $06, $13, $00, $00, $00 + +org $30E624 : RoomHeader_00DE: ; pc 0x186624 +db $E0, $14, $0B, $16, $00, $25, $00, $C0, $20, $06, $13, $00, $00, $00 + +org $30E632 : RoomHeader_00DF: ; pc 0x186632 +db $C0, $20, $06, $13, $00, $00, $00, $00, $00, $00, $EF, $00, $26, $02 + +org $30E640 : RoomHeader_00E0: ; pc 0x186640 +db $00, $26, $02, $21, $00, $01, $2A, $00, $00, $00, $D0, $C0, $07, $06 + +org $30E64E : RoomHeader_00E1: ; pc 0x18664E +db $C0, $07, $06, $28, $00, $00, $00, $00, $20, $06, $13, $00, $00, $00 + +org $30E65C : RoomHeader_00E2: ; pc 0x18665C +db $00, $20, $06, $13, $00, $00, $00, $C0, $20, $06, $09, $00, $00, $00 + +org $30E66A : RoomHeader_00E3: ; pc 0x18666A +db $C0, $20, $06, $09, $00, $00, $00, $01, $07, $14, $01, $00, $00, $00 + +org $30E678 : RoomHeader_00E4: ; pc 0x186678 +db $01, $07, $14, $01, $00, $00, $00, $01, $07, $06, $01, $00, $00, $00 + +org $30E686 : RoomHeader_00E5: ; pc 0x186686 +db $01, $07, $14, $01, $00, $00, $00, $01, $07, $06, $01, $00, $00, $00 + +org $30E694 : RoomHeader_00E6: ; pc 0x186694 +db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 + +org $30E6A2 : RoomHeader_00E7: ; pc 0x1866A2 +db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 + +org $30E6B0 : RoomHeader_00E8: ; pc 0x1866B0 +db $20, $07, $06, $13, $00, $00, $00, $00, $00, $F8, $F8, $F8, $F8, $F8 + +org $30E6BE : RoomHeader_00E9: ; pc 0x1866BE +db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FA, $FA, $20, $07, $06 + +org $30E6CC : RoomHeader_00EA: ; pc 0x1866CC +db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FA, $FA, $20, $07, $06 + +org $30E6DA : RoomHeader_00EB: ; pc 0x1866DA +db $20, $07, $06, $19, $00, $00, $00, $00, $00, $FB, $FB, $20, $20, $06 + +org $30E6E8 : RoomHeader_00EC: ; pc 0x1866E8 +db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FD, $FD, $FD, $20, $20 + +org $30E6F6 : RoomHeader_00ED: ; pc 0x1866F6 +db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FD, $FD, $FD, $20, $20 + +org $30E704 : RoomHeader_00EE: ; pc 0x186704 +db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FE, $20, $20, $06, $13 + +org $30E712 : RoomHeader_00EF: ; pc 0x186712 +db $20, $20, $06, $13, $00, $02, $00, $08, $00, $FF, $DF, $FF, $00, $02 + +org $30E720 : RoomHeader_00F0: ; pc 0x186720 +db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 + +org $30E72E : RoomHeader_00F1: ; pc 0x18672E +db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 + +org $30E73C : RoomHeader_00F2: ; pc 0x18673C +db $00, $02, $03, $05, $00, $00, $02, $03, $0F, $00, $00, $00, $00, $07 + +org $30E74A : RoomHeader_00F3: ; pc 0x18674A +db $00, $02, $03, $05, $00, $00, $02, $03, $0F, $00, $00, $00, $00, $07 + +org $30E758 : RoomHeader_00F4: ; pc 0x186758 +db $00, $02, $03, $0F, $00, $00, $00, $00, $07, $06, $13, $00, $00, $00 + +org $30E766 : RoomHeader_00F5: ; pc 0x186766 +db $00, $02, $03, $0F, $00, $00, $00, $00, $07, $06, $13, $00, $00, $00 + +org $30E774 : RoomHeader_00F6: ; pc 0x186774 +db $00, $07, $06, $13, $00, $00, $00, $00, $00, $00, $E8, $E8, $E8, $E8 + +org $30E782 : RoomHeader_00F7: ; pc 0x186782 +db $00, $07, $06, $13, $00, $00, $00, $00, $00, $00, $E8, $E8, $E8, $E8 + +org $30E790 : RoomHeader_00F8: ; pc 0x186790 +db $00, $07, $06, $13, $00, $00, $00, $00, $00, $00, $E8, $E8, $E8, $E8 + +org $30E79E : RoomHeader_00F9: ; pc 0x18679E +db $00, $20, $06, $13, $00, $00, $00, $C0, $20, $06, $13, $00, $00, $00 + +org $30E7AC : RoomHeader_00FA: ; pc 0x1867AC +db $C0, $20, $06, $13, $00, $00, $00, $00, $00, $00, $EA, $00, $07, $06 + +org $30E7BA : RoomHeader_00FB: ; pc 0x1867BA +db $00, $07, $06, $19, $00, $00, $00, $00, $00, $00, $EB, $00, $20, $06 + +org $30E7C8 : RoomHeader_00FC: ; pc 0x1867C8 +db $00, $20, $06, $13, $00, $00, $00, $00, $00, $00, $ED, $ED, $00, $07 + +org $30E7D6 : RoomHeader_00FD: ; pc 0x1867D6 +db $00, $20, $06, $13, $00, $00, $00, $00, $00, $00, $ED, $ED, $00, $07 + +org $30E7E4 : RoomHeader_00FE: ; pc 0x1867E4 +db $00, $20, $06, $13, $00, $00, $00, $C0, $20, $06, $13, $00, $00, $00 + +org $30E7F2 : RoomHeader_00FF: ; pc 0x1867F2 +db $00, $07, $06, $05, $00, $00, $00, $00, $00, $00, $EF, $00, $05, $03 + +org $30E800 : RoomHeader_0100: ; pc 0x186800 +db $00, $05, $03, $28, $00, $00, $00, $00, $1F, $03, $05, $00, $00, $00 + +org $30E80E : RoomHeader_0101: ; pc 0x18680E +db $00, $02, $03, $0F, $00, $00, $00, $00, $15, $03, $0D, $00, $00, $00 + +org $30E81C : RoomHeader_0102: ; pc 0x18681C +db $00, $15, $03, $0D, $00, $00, $00, $00, $05, $03, $0F, $00, $00, $00 + +org $30E82A : RoomHeader_0103: ; pc 0x18682A +db $00, $05, $03, $0F, $00, $00, $00, $01, $15, $03, $0D, $00, $00, $00 + +org $30E838 : RoomHeader_0104: ; pc 0x186838 +db $01, $15, $03, $0D, $00, $00, $00, $00, $1C, $0F, $10, $00, $00, $00 + +org $30E846 : RoomHeader_0105: ; pc 0x186846 +db $00, $1C, $0F, $10, $00, $00, $00, $00, $1F, $03, $0F, $00, $00, $00 + +org $30E854 : RoomHeader_0106: ; pc 0x186854 +db $00, $1F, $03, $0F, $00, $00, $00, $00, $02, $03, $01, $00, $00, $00 + +org $30E862 : RoomHeader_0107: ; pc 0x186862 +db $00, $02, $03, $01, $00, $00, $00, $00, $02, $03, $0E, $00, $00, $00 + +org $30E870 : RoomHeader_0108: ; pc 0x186870 +db $00, $02, $03, $0E, $00, $00, $00, $01, $05, $03, $05, $00, $00, $00 + +org $30E87E : RoomHeader_0109: ; pc 0x18687E +db $01, $05, $03, $05, $00, $00, $00, $01, $07, $06, $10, $00, $00, $00 + +org $30E88C : RoomHeader_010A: ; pc 0x18688C +db $01, $07, $06, $10, $00, $00, $00, $80, $0A, $08, $08, $00, $00, $1A + +org $30E89A : RoomHeader_010B: ; pc 0x18689A +db $80, $0A, $08, $08, $00, $00, $1A, $00, $27, $06, $08, $00, $03, $00 + +org $30E8A8 : RoomHeader_010C: ; pc 0x1868A8 +db $00, $27, $06, $08, $00, $03, $00, $00, $0A, $08, $11, $00, $00, $00 + +org $30E8B6 : RoomHeader_010D: ; pc 0x1868B6 +db $00, $0A, $08, $11, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 + +org $30E8C4 : RoomHeader_010E: ; pc 0x1868C4 +db $00, $07, $14, $05, $00, $00, $00, $00, $1E, $11, $05, $00, $00, $00 + +org $30E8D2 : RoomHeader_010F: ; pc 0x1868D2 +db $00, $1F, $03, $05, $00, $00, $00, $00, $02, $03, $0F, $00, $00, $00 + +org $30E8E0 : RoomHeader_0110: ; pc 0x1868E0 +db $00, $1F, $03, $05, $00, $00, $00, $00, $02, $03, $0F, $00, $00, $00 + +org $30E8EE : RoomHeader_0111: ; pc 0x1868EE +db $00, $1E, $11, $05, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 + +org $30E8FC : RoomHeader_0112: ; pc 0x1868FC +db $00, $07, $14, $05, $00, $00, $00, $00, $03, $10, $08, $00, $00, $00 + +org $30E90A : RoomHeader_0113: ; pc 0x18690A +db $00, $03, $10, $08, $00, $00, $00, $00, $07, $06, $07, $00, $00, $00 + +org $30E918 : RoomHeader_0114: ; pc 0x186918 +db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 + +org $30E926 : RoomHeader_0115: ; pc 0x186926 +db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 + +org $30E934 : RoomHeader_0116: ; pc 0x186934 +db $00, $22, $12, $07, $00, $00, $00, $00, $20, $14, $05, $00, $00, $00 + +org $30E942 : RoomHeader_0117: ; pc 0x186942 +db $00, $20, $14, $05, $00, $00, $00, $E0, $23, $0A, $0F, $00, $00, $00 + +org $30E950 : RoomHeader_0118: ; pc 0x186950 +db $00, $05, $03, $0F, $00, $00, $00, $01, $15, $03, $0D, $00, $00, $00 + +org $30E95E : RoomHeader_0119: ; pc 0x18695E +db $E0, $23, $0A, $0F, $00, $00, $00, $00, $00, $00, $1D, $00, $1C, $0F + +org $30E96C : RoomHeader_011A: ; pc 0x18696C +db $00, $1C, $0F, $05, $00, $00, $00, $C0, $07, $06, $08, $00, $00, $00 + +org $30E97A : RoomHeader_011B: ; pc 0x18697A +db $C0, $07, $06, $08, $00, $00, $00, $00, $23, $0A, $0F, $00, $00, $00 + +org $30E988 : RoomHeader_011C: ; pc 0x186988 +db $00, $1F, $03, $05, $00, $00, $00, $00, $02, $03, $0F, $00, $00, $00 + +org $30E996 : RoomHeader_011D: ; pc 0x186996 +db $00, $23, $0A, $0F, $00, $00, $00, $00, $00, $00, $19, $00, $20, $06 + +org $30E9A4 : RoomHeader_011E: ; pc 0x1869A4 +db $00, $20, $06, $2A, $00, $00, $00, $00, $05, $03, $05, $00, $00, $00 + +org $30E9B2 : RoomHeader_011F: ; pc 0x1869B2 +db $00, $05, $03, $05, $00, $00, $00, $00, $13, $06, $13, $00, $00, $00 + +org $30E9C0 : RoomHeader_0120: ; pc 0x1869C0 +db $00, $13, $06, $13, $00, $00, $00, $00, $07, $06, $28, $00, $03, $00 + +org $30E9CE : RoomHeader_0121: ; pc 0x1869CE +db $00, $1E, $11, $05, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 + +org $30E9DC : RoomHeader_0122: ; pc 0x1869DC +db $00, $1E, $11, $05, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 + +org $30E9EA : RoomHeader_0123: ; pc 0x1869EA +db $00, $07, $06, $28, $00, $03, $00, $00, $07, $06, $28, $00, $00, $00 + +org $30E9F8 : RoomHeader_0124: ; pc 0x1869F8 +db $00, $07, $06, $28, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA06 : RoomHeader_0125: ; pc 0x186A06 +db $00, $07, $06, $28, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA14 : RoomHeader_0126: ; pc 0x186A14 +db $00, $07, $06, $28, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA22 : RoomHeader_0127: ; pc 0x186A22 +db $00, $20, $06, $2A, $00, $00, $00, $00, $05, $03, $05, $00, $00, $00 + +org $30EA30 : RoomHeader_0128: ; pc 0x186A30 +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA3E : RoomHeader_0129: ; pc 0x186A3E +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA4C : RoomHeader_012A: ; pc 0x186A4C +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA5A : RoomHeader_012B: ; pc 0x186A5A +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA68 : RoomHeader_012C: ; pc 0x186A68 +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA76 : RoomHeader_012D: ; pc 0x186A76 +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + +org $30EA84 : RoomHeader_012E: ; pc 0x186A84 +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF + ;-------------------------------------------------------------------------------- -; 0x186140 - 0x18636B Multiworld Item's PlayerID +; 0x30EC00 - 0x30EE2B Multiworld Item's PlayerID ;-------------------------------------------------------------------------------- -org $30E140 ; PC 0x186140 - 0x186337 +org $30EC00 ChestData_Player: dl $000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000 dl $000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000 @@ -1746,124 +2671,121 @@ dl $000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000 dl $000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000 dl $000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000 dl $000000, $000000, $000000, $000000, $000000, $000000, $000000, $000000 -MushroomItem_Player: ; 0x186338 +MushroomItem_Player: ; EDF8 db #$00 -BottleMerchant_Player: ; 0x186339 +BottleMerchant_Player: ; EDF9 db #$00 -StandingKey_Hera_Player: ; 0x18633A +StandingKey_Hera_Player: ; EDFA db #$00 -EtherItem_Player: ; 0x18633B +EtherItem_Player: ; EDFB db #$00 -BombosItem_Player: ; 0x18633C +BombosItem_Player: ; EDFC db #$00 -HauntedGroveItem_Player: ; 0x18633D +HauntedGroveItem_Player: ; EDFD db #$00 -HeartContainer_ArmosKnights_Player: ; 0x18633E +HeartContainer_ArmosKnights_Player: ; EDFE db #$00 -HeartContainer_Lanmolas_Player: ; 0x18633F +HeartContainer_Lanmolas_Player: ; EDFF db #$00 -HeartContainer_Moldorm_Player: ; 0x186340 +HeartContainer_Moldorm_Player: ; EE00 db #$00 -HeartContainer_HelmasaurKing_Player: ; 0x186341 +HeartContainer_HelmasaurKing_Player: ; EE01 db #$00 -HeartContainer_Arrghus_Player: ; 0x186342 +HeartContainer_Arrghus_Player: ; EE02 db #$00 -HeartContainer_Mothula_Player: ; 0x186343 +HeartContainer_Mothula_Player: ; EE03 db #$00 -HeartContainer_Blind_Player: ; 0x186344 +HeartContainer_Blind_Player: ; EE04 db #$00 -HeartContainer_Kholdstare_Player: ; 0x186345 +HeartContainer_Kholdstare_Player: ; EE05 db #$00 -HeartContainer_Vitreous_Player: ; 0x186346 +HeartContainer_Vitreous_Player: ; EE06 db #$00 -HeartContainer_Trinexx_Player: ; 0x186347 +HeartContainer_Trinexx_Player: ; EE07 db #$00 -HeartPiece_Forest_Thieves_Player: ; 0x186348 +HeartPiece_Forest_Thieves_Player: ; EE08 db #$00 -HeartPiece_Lumberjack_Tree_Player: ; 0x186349 +HeartPiece_Lumberjack_Tree_Player: ; EE09 db #$00 -HeartPiece_Spectacle_Cave_Player: ; 0x18634A +HeartPiece_Spectacle_Cave_Player: ; EE0A db #$00 -HeartPiece_Circle_Bushes_Player: ; 0x18634B +HeartPiece_Circle_Bushes_Player: ; EE0B db #$00 -HeartPiece_Graveyard_Warp_Player: ; 0x18634C +HeartPiece_Graveyard_Warp_Player: ; EE0C db #$00 -HeartPiece_Mire_Warp_Player: ; 0x18634D +HeartPiece_Mire_Warp_Player: ; EE0D db #$00 -HeartPiece_Smith_Pegs_Player: ; 0x18634E +HeartPiece_Smith_Pegs_Player: ; EE0E db #$00 -HeartPiece_Spectacle_Player: ; 0x18634F +HeartPiece_Spectacle_Player: ; EE0F db #$00 -HeartPiece_Mountain_Warp_Player: ; 0x186350 +HeartPiece_Mountain_Warp_Player: ; EE10 db #$00 -HeartPiece_Maze_Player: ; 0x186351 +HeartPiece_Maze_Player: ; EE11 db #$00 -HeartPiece_Desert_Player: ; 0x186352 +HeartPiece_Desert_Player: ; EE12 db #$00 -HeartPiece_Lake_Player: ; 0x186353 +HeartPiece_Lake_Player: ; EE13 db #$00 -HeartPiece_Swamp_Player: ; 0x186354 +HeartPiece_Swamp_Player: ; EE14 db #$00 -HeartPiece_Cliffside_Player: ; 0x186355 +HeartPiece_Cliffside_Player: ; EE15 db #$00 -HeartPiece_Pyramid_Player: ; 0x186356 +HeartPiece_Pyramid_Player: ; EE16 db #$00 -HeartPiece_Digging_Player: ; 0x186357 +HeartPiece_Digging_Player: ; EE17 db #$00 -HeartPiece_Zora_Player: ; 0x186358 +HeartPiece_Zora_Player: ; EE18 db #$00 -PurpleChest_Item_Player: ; 0x186359 +PurpleChest_Item_Player: ; EE19 db #$00 -RupeeNPC_MoldormCave_Player: ; 0x18635A +RupeeNPC_MoldormCave_Player: ; EE1A db #$00 -RupeeNPC_NortheastDarkSwampCave_Player: ; 0x18635B +RupeeNPC_NortheastDarkSwampCave_Player: ; EE1B db #$00 -LibraryItem_Player: ; 0x18635C +LibraryItem_Player: ; EE1C db #$00 -WitchItem_Player: ; 0x18635D +WitchItem_Player: ; EE1D db #$00 -MagicBatItem_Player: ; 0x18635E +MagicBatItem_Player: ; EE1E db #$00 -UncleItem_Player: ; 0x18635F +UncleItem_Player: ; EE1F db #$00 -ZoraItem_Player: ; 0x186360 +ZoraItem_Player: ; EE20 db #$00 -CatfishItem_Player: ; 0x186361 +CatfishItem_Player: ; EE21 db #$00 -BonkKey_Desert_Player: ; 0x186362 +BonkKey_Desert_Player: ; EE262 db #$00 -BonkKey_GTower_Player: ; 0x186363 +BonkKey_GTower_Player: ; EE23 db #$00 -OldManItem_Player: ; 0x186364 +OldManItem_Player: ; EE24 db #$00 -SahasralaItem_Player: ; 0x186365 +SahasralaItem_Player: ; EE25 db #$00 -SmithItem_Player: ; 0x186366 +SmithItem_Player: ; EE26 db #$00 -SickKidItem_Player: ; 0x186367 +SickKidItem_Player: ; EE27 db #$00 -HoboItem_Player: ; 0x186368 +HoboItem_Player: ; EE28 db #$00 -PedestalSword_Player: ; 0x186369 +PedestalSword_Player: ; EE29 db #$00 -TreeKidItem_Player: ; 0x18636A +TreeKidItem_Player: ; EE2A db #$00 -ChestGameItem_Player: ; 0x18636B +ChestGameItem_Player: ; EE2B db #$00 ;-------------------------------------------------------------------------------- -org $30E36C ; PC 0x18636C +org $30EE30 ; PC 0x18636C RemoteItems: db #$00 ; $00 = off; $01 = on (default: off) -org $30E36D ; PC 0x18636D -;BerserkerMulti.world Seed GUID -db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00 -org $30E37D ; PC 0x18637D +org $30EE31 ; PC 0x18637D Enable_TerrorPin_AI_Fix: db #$00 ;Shop slot count as check -org $30E560 ; PC 0x186560 +org $30EE40 ; EnableShopItemCount: db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00 db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00 @@ -1871,7 +2793,7 @@ db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00 ;-------------------------------------------------------------------------------- -; 0x186C00 - 186FFE (unused) +; 0x30EE80 - 30EFFE (unused) ;-------------------------------------------------------------------------------- org $30EFFF ; PC 0x186FFF BallNChainDungeon: From 895074a4cb642b440dfdbb47c56b0c173a35eb75 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 30 Sep 2022 15:28:38 -0600 Subject: [PATCH 009/176] Support for new items Support for static enemy drops Bug fix for wrong sprites dead --- enemizer/hooks/underworld_sprite_hooks.asm | 2 +- enemizer/underworld_sprites.asm | 5 ++ keydrop/standing_items.asm | 65 +++++++++++++-- newitems.asm | 96 +++++++++++++++++++--- utilities.asm | 16 +++- 5 files changed, 159 insertions(+), 25 deletions(-) diff --git a/enemizer/hooks/underworld_sprite_hooks.asm b/enemizer/hooks/underworld_sprite_hooks.asm index 9febb1a..4c4dc47 100644 --- a/enemizer/hooks/underworld_sprite_hooks.asm +++ b/enemizer/hooks/underworld_sprite_hooks.asm @@ -30,7 +30,7 @@ org $09C35A DEC.b $03 org $09C36E -LDA.b $03 +JSL GetSpriteSlot16Bit ; depended on high bit being zero, which it isn't anymore org $09C383 LDX.b $03 diff --git a/enemizer/underworld_sprites.asm b/enemizer/underworld_sprites.asm index 331c3d7..2d860e1 100644 --- a/enemizer/underworld_sprites.asm +++ b/enemizer/underworld_sprites.asm @@ -4,3 +4,8 @@ LoadUnderworldSprites: LDA.w $048E RTL +GetSpriteSlot16Bit: + LDA.b $03 : AND #$00FF + ASL A + TAY +RTL \ No newline at end of file diff --git a/keydrop/standing_items.asm b/keydrop/standing_items.asm index 081e6dc..01f6c90 100644 --- a/keydrop/standing_items.asm +++ b/keydrop/standing_items.asm @@ -318,10 +318,21 @@ RevealSpriteDrop: LDA.l SprItemReceipt, X : STA SpawnedItemID LDA.l SprItemMWPlayer, X : STA SpawnedItemMWPlayer LDY.b #$01 ; trigger the small key routines - LDA SpawnedItemID : CMP #$32 : BNE + + LDA.w SpawnedItemID : STA.b $00 : CMP #$32 : BNE + LDA.l StandingItemsOn : BNE + INY ; big key routine - + RTL ; unstun if stunned + + + PHX : LDX.b #$00 + - CPX.b #$1A : BCS .done + LDA.l MinorForcedDrops, X + CMP.b $00 : BNE + + INX : LDA.l MinorForcedDrops, X : STA.b $00 + PLX : PLA : PLA : PEA.w $06F9D7-1 ; change call stack for PrepareEnemyDrop + JSR IncrementCountForMinor + LDA.b $00 : RTL + + INX #2 : BRA - + .done PLX + RTL ; unstun if stunned .normal LDY.w $0CBA, X : BEQ .no_forced_drop RTL @@ -341,6 +352,41 @@ RevealSpriteDrop2: PEA.w $06E3CE-1 ; change return address to .no_forced_drop of (Sprite_DoTheDeath) RTL +MinorForcedDrops: +; Item ID -> Sprite ID +db $27, $DC ; BOMB REFILL 1 +db $28, $DD ; BOMB REFILL 4 +db $31, $DE ; BOMB REFILL 8 +db $34, $D9 ; GREEN RUPEE ($34) +db $35, $DA ; BLUE RUPEE ($35) +db $36, $DB ; RED RUPEE ($36) +db $42, $D8 ; HEART ($42) +db $44, $E2 ; ARROW REFILL 10 ($44) +db $45, $DF ; SMALL MAGIC DECANTER ($45) +db $B2, $E3 ; FAERIE ($B2) +db $B3, $0B ; CUCCO ($B3) +db $B4, $E0 ; LARGE MAGIC DECANTER ($B4) +db $B5, $E1 ; ARROW REFILL 5 (x??) + + +IncrementCountForMinor: + PHX : REP #$30 + LDA.w SpawnedItemIndex : ASL : TAX : LDA.l BitFieldMasks, X : STA $0A + LDA.b $A0 : ASL : TAX + LDA.l SpritePotData, X : BIT $0A : BNE .obtained + ORA $0A : STA SpritePotData, X + SEP #$30 + LDA $040C : CMP #$FF : BEQ + + BNE ++ + INC #2 ; treat sewers as HC + ++ LSR : TAX : LDA DungeonLocationsChecked, X : INC : STA DungeonLocationsChecked, X + ; Could increment GT Tower Pre Big Key but we aren't showing that stat right now + + REP #$30 + LDA TotalItemCounter : INC : STA TotalItemCounter ; Increment Item Total + .obtained + SEP #$30 : PLX +RTS + BitFieldMasks: dw $8000, $4000, $2000, $1000, $0800, $0400, $0200, $0100 dw $0080, $0040, $0020, $0010, $0008, $0004, $0002, $0001 @@ -348,6 +394,7 @@ dw $0080, $0040, $0020, $0010, $0008, $0004, $0002, $0001 ; Runs during Sprite_E4_SmallKey and duning Sprite_E5_BigKey spawns ShouldSpawnItem: LDA $048E : CMP.b #$87 : BNE + ; check for hera basement cage + CPX #$0A : BNE + ; the hera basement key is always sprite 0x0A LDA $A8 : AND.b #$03 : CMP.b #$02 : BNE + ; we're not in that quadrant LDA.w $0403 : AND.w KeyRoomFlagMasks,Y : RTL + @@ -372,8 +419,9 @@ ShouldSpawnItem: MarkSRAMForItem: LDA $048E : CMP.b #$87 : BNE + ; check for hera basement cage - LDA $A8 : AND.b #$03 : CMP.b #$02 : BNE + - LDA.w $0403 : ORA.w KeyRoomFlagMasks, Y : RTL + CPX #$0A : BNE + ; the hera basement key is always sprite 0x0A + LDA $A8 : AND.b #$03 : CMP.b #$02 : BNE + + LDA.w $0403 : ORA.w KeyRoomFlagMasks, Y : RTL + PHX : PHY : REP #$30 LDA.b $A0 : ASL : TAY LDA.l SpawnedItemIndex : ASL @@ -391,10 +439,11 @@ SpriteKeyPrep: LDA.w $0B9B : STA.w $0CBA, X ; what we wrote over PHA LDA $A0 : CMP #$87 : BNE .continue - LDA $A9 : ORA $AA : AND #$03 : CMP #$02 : BNE .continue - LDA #$00 : STA.w SpawnedItemFlag : STA SprItemFlags, X - LDA #$24 : STA $0E80, X - BRA + + CPX #$0A : BNE .continue ; the hera basement key is always sprite 0x0A + LDA $A9 : ORA $AA : AND #$03 : CMP #$02 : BNE .continue + LDA #$00 : STA.w SpawnedItemFlag : STA SprItemFlags, X + LDA #$24 : STA $0E80, X + BRA + .continue LDA.w SpawnedItemIndex : STA SprItemIndex, X LDA.w SpawnedItemMWPlayer : STA SprItemMWPlayer, X diff --git a/newitems.asm b/newitems.asm index df62be5..38b7bf8 100755 --- a/newitems.asm +++ b/newitems.asm @@ -40,6 +40,9 @@ ; #$90 - Big Keys ; #$A0 - Small Keys ; #$B0 - Bee Trap +; #$B2 - Fairy +; #$B3 - Chicken +; #$B4 - Big Magic ; #$FE - Server Request (Asychronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- @@ -395,10 +398,13 @@ AddReceivedItemExpandedGetItem: ++ JMP .done + CMP.b #$B0 : BNE + ; Bee Trap - LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee - LDA $22 : STA $0D10, Y : LDA $23 : STA $0D30, Y ; from enemizer's Spawn_Bees + LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI ++ ; DashBeeHive_SpawnBee + LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y + LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8 LDA $20 : STA $0D00, Y : LDA $21 : STA $0D20, Y - + + LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link + ++ JMP .done + + JSR NewItemsChecks .done PLX LDA $02E9 : CMP.b #$01 ; thing we wrote over @@ -553,6 +559,7 @@ AddReceivedItemExpanded: ;DATA AddReceivedItemExpanded { ; This is a temporary measure for Fish to have consistent addresses +warnpc $A08800 org $A08800 .y_offsets @@ -590,7 +597,12 @@ org $A08800 db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Big Key db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Small Key db -4 ; Bee Trap - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused + db -4 ; Apples + db -4 ; Fairy + db -4 ; Chicken + db -4 ; Big Magic + db -4 ; 5 Arrows + db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused @@ -631,7 +643,12 @@ org $A08800 ;db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; *EVENT* db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key db 0 ; Bee Trap - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused + db 0 ; Apples + db 0 ; Fairy + db 0 ; Chicken + db 4 ; Big Magic + db 0 ; 5 Arrows + db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused @@ -677,7 +694,12 @@ org $A08800 ;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT* db $47 ; Bee Trap - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused + db $47 ; Apples + db $47 ; Fairy + db $47 ; Chicken + db $3B ; Big Magic + db $02 ; 5 Arrows + db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused @@ -717,8 +739,12 @@ org $A08800 db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Free Big Key db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; Free Small Key db $02 ; Bee Trap - - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused + db $02 ; Apples + db $02 ; Fairy + db $02 ; Chicken + db $00 ; Big Magic + db $02 ; 5 Arrows + db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused @@ -759,7 +785,12 @@ org $A08800 db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Big Key db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key db 1 ; Bee Trap - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused + db 1 ; Apples + db 1 ; Fairy + db 1 ; Chicken + db 4 ; Big Magic + db 2 ; 5 Arrows + db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused @@ -801,7 +832,12 @@ org $A08800 dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Big Key dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Small Key dw $F36A ; Bee Trap - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused + dw $F36A ; Apples + dw $F36A ; Fairy + dw $F36A ; Chicken + dw $F373 ; Big Magic + dw $F376 ; 5 Arrows + dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused @@ -845,7 +881,12 @@ org $A08800 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Big Key db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Small Key db $FF ; Bee Trap - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused + db $FF ; Apples + db $FF ; Fairy + db $FF ; Chicken + db $80 ; Big Magic + db $05 ; 5 Arrows + db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused @@ -930,8 +971,12 @@ Link_ReceiveItemAlternatesExpanded: db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Compass db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Big Key db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Small Key - db -1 ; Bee Trap - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused + db -1 ; Apples + db -1 ; Fairy + db -1 ; Chicken + db -1 ; Big Magic + db -1 ; 5 Arrows + db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused @@ -1213,3 +1258,28 @@ MaybeFlagCompassTotalEntrance: .done RTL ;-------------------------------------------------------------------------------- + +NewItemsChecks: + CMP.b #$B2 : BNE + ; Fairy + LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI .done + LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y + LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8 + LDA.b $20 : SEC : SBC.b #$10 : STA.w $0D00,Y + LDA.b $21 : SBC.b #$00 : STA.w $0D20,Y ; move up 16 pixels + LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link + LDA.b #$FF : STA.w $0B58,Y ; allows them to expire + BRA .done + + CMP.b #$B3 : BNE + ; Chicken + LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI .done + LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y + LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8 + LDA.b $20 : SEC : SBC.b #$08 : STA.w $0D00,Y + LDA.b $21 : SBC.b #$00 : STA.w $0D20,Y ; move up 8 pixels + LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link + BRA .done + + CMP.b #$B4 : BNE .done ; Big Magic + LDA.b #$80 : STA MagicFiller ; fill magic + .done +RTS + + diff --git a/utilities.asm b/utilities.asm index 988fd5e..eb6b52e 100644 --- a/utilities.asm +++ b/utilities.asm @@ -154,7 +154,12 @@ RTL db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F ; Free Small Key db $2C ; Bee Trap - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused + db $4A ; Apples + db $4A ; Fairy + db $4A ; Chicken + db $3B ; Big Magic + db $02 ; 5 Arrows + db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused @@ -284,7 +289,12 @@ RTL db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Big Key db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Small Key db $04 ; Bee Trap - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused + db $08 ; Apples + db $08 ; Fairy + db $08 ; Chicken + db $08 ; Big Magic + db $04 ; 5 Arrows + db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused @@ -375,7 +385,7 @@ RTL db $15, $18, $24, $2A, $34, $35, $36, $42 db $43, $45, $59, $A0, $A1, $A2, $A3, $A4 db $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC - db $AD, $AE, $AF, $FF, $FF, $FF, $FF, $FF + db $AD, $AE, $AF, $B4, $FF, $FF, $FF, $FF } ;-------------------------------------------------------------------------------- From d6f50525a171664f9b7bf8cfc19ca2d25f6c5e4e Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 30 Sep 2022 15:28:45 -0600 Subject: [PATCH 010/176] Big key door fix --- doorrando/overrides.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doorrando/overrides.asm b/doorrando/overrides.asm index 3f3fbf7..90cddb9 100644 --- a/doorrando/overrides.asm +++ b/doorrando/overrides.asm @@ -163,5 +163,5 @@ BigKeyDoorCheck: CPY.w #$001E : BNE + ; skip if it isn't a BK door LDA.l DRFlags : AND #$0400 : BNE + ; skip if the flag is set - bk doors can be double-sided PLA : PEA.w RoomDraw_OneSidedShutters_South_onesided_shutter_or_big_key_door-1 -+ RTL ++ LDA.w #$0000 : RTL From 8e20d6280ce89927ff00ad940ff8cf1b91e987b4 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 6 Oct 2022 14:16:47 -0600 Subject: [PATCH 011/176] Enemizer Cleanup --- dungeonmap.asm | 10 +- enemizer/blindboss.asm | 4 +- enemizer/bushes.asm | 6 +- enemizer/bushes_table.asm | 8 ++ enemizer/enemizerflags.asm | 1 - enemizer/hooks/blindboss_hooks.asm | 2 - enemizer/hooks/bosses_hooks.asm | 147 ----------------------------- enemizer/hooks/moldorm_hooks.asm | 8 +- enemizer/main.asm | 1 - 9 files changed, 21 insertions(+), 166 deletions(-) diff --git a/dungeonmap.asm b/dungeonmap.asm index 39b4624..6c97932 100644 --- a/dungeonmap.asm +++ b/dungeonmap.asm @@ -27,12 +27,13 @@ DoDungeonMapBossIcon: ; get sprite pointer for room LDA.l $89D62E,X - INC ; to skip the "sort" - TAX + STA.b $00 ; pointer in $00 + LDA.w #$0028 : STA.b $02 ; set the bank to 28 for now + LDY.w #$0001 ; to skip the "sort" ; get first byte to make sure it isn't an empty room SEP #$20 - LDA.l $890000,X + LDA.b [$00], Y CMP.b #$FF BNE ++ @@ -40,7 +41,8 @@ DoDungeonMapBossIcon: BRA .cave ; check first sprite -++ LDA.l $890002,X +++ INY #2 + LDA.b [$00], Y SEP #$10 ; match boss id diff --git a/enemizer/blindboss.asm b/enemizer/blindboss.asm index 7e860b5..4e495dc 100644 --- a/enemizer/blindboss.asm +++ b/enemizer/blindboss.asm @@ -5,8 +5,8 @@ print "Blind Spawn Code Check: ", pc check_blind_boss_room: LDA $A0 ; load room index (low byte) - CMP #172 : BNE + ; Is is Thieve Town Boss Room - LDA $09DE81 : BEQ + ; Blind maiden does not need rescuing + CMP #172 : BNE + ; Is is Thieves Town Boss Room + LDA !BLIND_DOOR_FLAG : BNE + ; Blind maiden does not need rescuing LDA FollowerIndicator : JML Check_for_Blind_Fight + diff --git a/enemizer/bushes.asm b/enemizer/bushes.asm index 8de86d3..7ec7080 100644 --- a/enemizer/bushes.asm +++ b/enemizer/bushes.asm @@ -38,10 +38,6 @@ sprite_bush_spawn: LDA.w sprite_bush_spawn_table_random_sprites, Y BRL .return - .item_table - db #$00, #$D9, #$3E, #$79, #$D9, #$DC, #$D8, #$DA, #$E4, #$E1, #$DC - db #$D8, #$DF, #$E0, #$0B, #$42, #$D3, #$41, #$D4, #$D9, #$E3, #$D8 - .not_random CPY.b #$0F : BEQ .newSpriteSpawn @@ -49,7 +45,7 @@ sprite_bush_spawn: CPY.b #$10 : BEQ .newSpriteSpawn ;CPY.b #$0E : BEQ .newSpriteSpawn - LDA .item_table, Y + LDA.w item_drop_table_override, Y BRA .return .newSpriteSpawn diff --git a/enemizer/bushes_table.asm b/enemizer/bushes_table.asm index a05da38..41f75e5 100644 --- a/enemizer/bushes_table.asm +++ b/enemizer/bushes_table.asm @@ -11,3 +11,11 @@ sprite_bush_spawn_table: .random_sprites ; if item == 04 db #$00, #$D8, #$E3, #$D8 } + +warnpc $B68374 +; the drop table has $E1 at B6837D which needs to be #$DA with retro bow +item_drop_table_override: +db #$00, #$D9, #$3E, #$79, #$D9, #$DC, #$D8, #$DA, #$E4, #$E1, #$DC +db #$D8, #$DF, #$E0, #$0B, #$42, #$D3, #$41, #$D4, #$D9, #$E3, #$D8 + + diff --git a/enemizer/enemizerflags.asm b/enemizer/enemizerflags.asm index 5852c49..6c7db3f 100644 --- a/enemizer/enemizerflags.asm +++ b/enemizer/enemizerflags.asm @@ -17,7 +17,6 @@ db #$00 ;408106 : 200106 ; toggle to turn on terrorpin ai "fix" .center_boss_drops db #$00 ;368107 -db #$00 ;408107 : 200107 db #$00 ;408108 : 200108 db #$00 ;408109 : 200109 db #$00 ;40810A : 20010A diff --git a/enemizer/hooks/blindboss_hooks.asm b/enemizer/hooks/blindboss_hooks.asm index 3ed2538..9871abe 100644 --- a/enemizer/hooks/blindboss_hooks.asm +++ b/enemizer/hooks/blindboss_hooks.asm @@ -7,7 +7,5 @@ org $1DA081 ; Original Code JML check_blind_boss_room Check_for_Blind_Fight: - - org $1DA090 Initialize_Blind_Fight: \ No newline at end of file diff --git a/enemizer/hooks/bosses_hooks.asm b/enemizer/hooks/bosses_hooks.asm index c71c121..d4c4425 100644 --- a/enemizer/hooks/bosses_hooks.asm +++ b/enemizer/hooks/bosses_hooks.asm @@ -28,142 +28,6 @@ Dungeon_ResetSprites: ; Bank09.asm(822) org $9C44E Sprite_ResetAll: ; Bank09.asm(1344) -;================================================================================ -; fix skull woods gibdo key drop -;-------------------------------------------------------------------------------- -;Gibdo key drop hardcoded in skullwoods to fix problems -;some bosses are dropping a key when there's a key drop avaiable in -;the previous room - -; org $09DD74 ; Gibdo draw code (JSL Sprite_DrawShadowLong) -; db #$00, #$00 ; Remove key drop in skull woods - -; org $1EBB37 ; Gibdo draw code (JSL Sprite_DrawShadowLong) -; JSL gibdo_drop_key -;-------------------------------------------------------------------------------- -; todo make the boss data change dynamic -;================================================================================ -; Move All Bosses Sprites in Top Left Quadrant -;-------------------------------------------------------------------------------- -; sprite values for rooms, with coordinates changed -;Trinexx -org $09E5BA ; 0x4E5BA ; [0xB] -db $00 ; "Sort Spr" in Hyrule Magic -db $05, $07, $CB ; trinexx body? ; 15 07 CB -db $05, $07, $CC ; trinexx ice head? ; 15 07 CC -db $05, $07, $CD ; trinexx fire head? ; 15 07 CD -db $FF ; terminator - -;Armos - Eastern -org $09E887 ; 0x4E887 ; [0x17] -db $00 ; "Sort Spr" in Hyrule Magic -db $05, $04, $53 ; armos ;15 14 53 -db $05, $07, $53 ; armos ;15 17 53 -db $05, $0A, $53 ; armos ;15 1A 53 -db $08, $0A, $53 ; armos ;18 1A 53 -db $08, $07, $53 ; armos ;18 17 53 -db $08, $04, $53 ; armos ;18 14 53 -db $08, $E7, $19 ; armos overlord ;18 F7 19 -db $FF ; terminator - -;Kholdstare -org $09EA01 ; 0x4EA01 ; [0xB] -db $00 ; "Sort Spr" in Hyrule Magic -db $05, $07, $A3 ; kholdstare shell ;05 17 A3 -db $05, $07, $A4 ; fallling ice ;05 17 A4 -db $05, $07, $A2 ; kholdstare ;05 17 A2 -db $FF ; terminator - -;Arrghus -org $09D997 ; 0x4D997 ; [0x2C] -db $00 ; "Sort Spr" in Hyrule Magic -db $07, $07, $8C ; arrghus ;17 07 8C -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $07, $07, $8D ; spawn ;17 07 8D -db $FF ; terminator - -;Moldorm - ToH -org $09D9C3 ; 0x4D9C3 ; [0x5] -db $00 ; "Sort Spr" in Hyrule Magic -db $09, $09, $09 ; moldorm ;0E 12 09 -db $FF ; terminator - -;Mothula -org $09DC31 ; 0x4DC31 ; [0x5] (really [0x8]) -db $00 ; "Sort Spr" in Hyrule Magic -db $06, $08, $88 ; mothula ;16 18 88 -; truncated moving floor overlord ;16 E7 07 -db $FF ; terminator - -;Lanmolas - Desert -org $09DCCB ; 0x4DCCB ; [0xB] -db $00 ; "Sort Spr" in Hyrule Magic -db $07, $06, $54 ; lanmolas ;17 06 54 -db $07, $09, $54 ; lanmolas ;17 09 54 -db $09, $07, $54 ; lanmolas ;19 07 54 -db $FF ; terminator - -;Helmasaure -org $09E049 ; 0x4E049 ; [0x5] -db $00 ; "Sort Spr" in Hyrule Magic -db $06, $07, $92 ; helmasaur ;16 17 92 -db $FF ; terminator - -;Vitreous -org $09E457 ; 0x4E457 ; [0x5] -db $00 ; "Sort Spr" in Hyrule Magic -db $05, $07, $BD ; vitreous ;15 07 BD -db $FF ; terminator - -;Blind -org $09E654 ; 0x4E654 ; [0x5] -db $00 ; "Sort Spr" in Hyrule Magic -db $05, $09, $CE ; blind ;15 19 CE -db $FF ; terminator - -; Armos - GT ; this shouldn't get used unless boss randomization is turned off -org $09DB23 ; 0x4DB23 ; [0x23] // need 0x38 to fit arrghus+spawn and fairies (use 0x4D87E-) -db $00 -db $05, $04, $53 ; armos ;15 14 53 -db $05, $07, $53 ; armos ;15 17 53 -db $05, $0A, $53 ; armos ;15 1A 53 -db $08, $0A, $53 ; armos ;18 1A 53 -db $08, $07, $53 ; armos ;18 17 53 -db $08, $04, $53 ; armos ;18 14 53 -db $08, $E7, $19 ; armos overlord ;18 F7 19 -db $07, $07, $E3 ; fairy ;07 07 E3 -db $07, $08, $E3 ; fairy ;07 08 E3 -db $08, $07, $E3 ; fairy ;08 07 E3 -db $08, $08, $E3 ; fairy ;08 08 E3 -db $FF - -; Lanmola - GT ; this shouldn't get used unless boss randomization is turned off -org $09E1BE ; 0x4E1BE ; [0x11] // need 0x32 to fit arrghus+spawn and bunny beam+medusa (use 0x4D8B6-) -db $00 -db $07, $06, $54 ; lanmolas ;17 06 54 -db $07, $09, $54 ; lanmolas ;17 09 54 -db $09, $07, $54 ; lanmolas ;19 07 54 -db $18, $17, $D1 ; bunny beam ;18 17 D1 -db $1C, $03, $C5 ; medusa ;1C 03 C5 -db $FF - -; Moldorm - GT ; this shouldn't get used unless boss randomization is turned off -org $09DF1E ; 0x4DF1E ; [0x5] -db $00 ; "Sort Spr" in Hyrule Magic -db $09, $09, $09 ; moldorm ;0E 12 09 -db $FF ; terminator - ;-------------------------------------------------------------------------------- ;================================================================================ @@ -179,17 +43,6 @@ org $028256 ; JSL Dungeon_ResetSprites ; REPLACE THAT (Sprite initialization) o JSL boss_move ;-------------------------------------------------------------------------------- -; todo make arghuss room change dynamic - -;================================================================================ -; water tiles removed in arrghus room -;-------------------------------------------------------------------------------- -org $1FA15C -db $FF, $FF, $FF, $FF, $F0, $FF, $61, $18, $FF, $FF - -; Arrghus can stand on ground -org $0DB6BE -db $00 ;-------------------------------------------------------------------------------- ;================================================================================ diff --git a/enemizer/hooks/moldorm_hooks.asm b/enemizer/hooks/moldorm_hooks.asm index a443913..976a7b7 100644 --- a/enemizer/hooks/moldorm_hooks.asm +++ b/enemizer/hooks/moldorm_hooks.asm @@ -11,10 +11,10 @@ org $1DD88E } ; set number of eyes -org $1DDBB2 ;$0EDBB2 -{ +;org $1DDBB2 ;$0EDBB2 +;{ ; LDX.b #$01 ; number of eyes (-1) ;0EDBB2 0EDBB3 - LDX.b #$07 -} +; LDX.b #$01 +;} diff --git a/enemizer/main.asm b/enemizer/main.asm index c12d982..e2487ef 100644 --- a/enemizer/main.asm +++ b/enemizer/main.asm @@ -34,7 +34,6 @@ EnemizerTablesStart: incsrc enemizer_info_table.asm incsrc enemizerflags.asm incsrc bushes_table.asm -; todo: room header table EnemizerCodeStart: incsrc bushes.asm From 651d00d32058c8e35f0bc6f747fce531330c35a8 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Sun, 9 Oct 2022 17:09:43 -0400 Subject: [PATCH 012/176] Progressive shields, swords, and mail use highest item level to determine upgrade --- newitems.asm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/newitems.asm b/newitems.asm index 4492761..2891759 100755 --- a/newitems.asm +++ b/newitems.asm @@ -449,7 +449,7 @@ AddReceivedItemExpanded: LDA.b #$4F : STA $02D8 +++ : JMP .done ++ : CMP.b #$5E : BNE ++ ; Progressive Sword - LDA SwordEquipment : CMP.l ProgressiveSwordLimit : !BLT + + LDA HighestSword : CMP.l ProgressiveSwordLimit : !BLT + LDA.l ProgressiveSwordReplacement : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Sword LDA.b #$49 : STA $02D8 : JMP .done @@ -460,7 +460,7 @@ AddReceivedItemExpanded: + ; Everything Else LDA.b #$03 : STA $02D8 : JMP .done ++ : CMP.b #$5F : BNE ++ ; Progressive Shield - LDA ShieldEquipment : CMP.l ProgressiveShieldLimit : !BLT + + LDA HighestShield : CMP.l ProgressiveShieldLimit : !BLT + LDA.l ProgressiveShieldReplacement : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Shield LDA.b #$04 : STA $02D8 : JMP .done @@ -469,7 +469,7 @@ AddReceivedItemExpanded: + ; Everything Else LDA.b #$06 : STA $02D8 : JMP .done ++ : CMP.b #$60 : BNE ++ ; Progressive Armor - LDA ArmorEquipment : CMP.l ProgressiveArmorLimit : !BLT + + LDA HighestMail : CMP.l ProgressiveArmorLimit : !BLT + LDA.l ProgressiveArmorReplacement : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Armor LDA.b #$22 : STA $02D8 : JMP .done From dbf674c9fd376b5fe4f6552a40ad1fcaf371f1a9 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Thu, 20 Oct 2022 14:47:04 -0400 Subject: [PATCH 013/176] darkworldspawn: Add check for old man to fix post-aga spawn bug --- darkworldspawn.asm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/darkworldspawn.asm b/darkworldspawn.asm index 637dd52..3ec0293 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -11,10 +11,11 @@ DoWorldFix: JMP DoWorldFix_Inverted + LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check + LDA.l FollowerIndicator : CMP #$04 : BEQ .setLightWorld ; check if old man is following LDA MirrorEquipment : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point LDA ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive - .aga1Alive + .setLightWorld LDA #$00 .noMirror STA CurrentWorld ; set flag to light world @@ -46,11 +47,11 @@ RTL ;================================================================================ DoWorldFix_Inverted: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check - LDA MirrorEquipment : BEQ .noMirror ; check if we have the mirror + LDA.l FollowerIndicator : CMP #$04 : BEQ .setDarkWorld ; check if old man is following + LDA MirrorEquipment : BEQ .setDarkWorld ; check if we have the mirror .skip_mirror_check ; alt entrance point LDA ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive - .noMirror - .aga1Alive + .setDarkWorld LDA #$40 : STA CurrentWorld ; set flag to dark world LDA FollowerIndicator CMP #$07 : BEQ .clear ; clear frog From cafb0908a05fb3fc963e40e3d7be2c5b801f1364 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Sun, 23 Oct 2022 22:02:36 -0400 Subject: [PATCH 014/176] Introduce bound to QS loop to prevent infinite loop on last bomb loss Move !INFINITE_BOMB define to ram.asm, replace with labels --- darkworldspawn.asm | 5 ++--- events.asm | 2 +- newhud.asm | 3 +-- quickswap.asm | 14 ++++++++++++++ ram.asm | 2 ++ retro.asm | 45 ++++++++++++++++++--------------------------- 6 files changed, 38 insertions(+), 33 deletions(-) diff --git a/darkworldspawn.asm b/darkworldspawn.asm index 3ec0293..f83a094 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -131,19 +131,18 @@ RefreshRainAmmo: RTL ;-------------------------------------------------------------------------------- !INFINITE_ARROWS = "$7F50C8" -!INFINITE_BOMBS = "$7F50C9" !INFINITE_MAGIC = "$7F50CA" SetEscapeAssist: LDA ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state .rain LDA.l EscapeAssist BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + - BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + + BIT.b #$02 : BEQ + : STA InfiniteBombs : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + BRA ++ .no_train ; choo choo LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : + - LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA !INFINITE_BOMBS : + + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA InfiniteBombs : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : + ++ RTL diff --git a/events.asm b/events.asm index e2988ff..7d9f6a6 100644 --- a/events.asm +++ b/events.asm @@ -60,7 +60,7 @@ OnUncleItemGet: LDA.l EscapeAssist BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + - BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + + BIT.b #$02 : BEQ + : STA InfiniteBombs : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + PLA diff --git a/newhud.asm b/newhud.asm index 6b78fa8..db4d144 100644 --- a/newhud.asm +++ b/newhud.asm @@ -3,10 +3,9 @@ SEP #$30 ;================================================================================ ; Draw bomb count !BOMBCOUNT_DRAW_ADDRESS = "$7EC75A" -!INFINITE_BOMBS = "$7F50C9" ;================================================================================ - LDA !INFINITE_BOMBS : BNE .infinite_bombs + LDA.l InfiniteBombs : BNE .infinite_bombs .finite_bombs LDA.l BombsEquipment ; bombs JSR HudHexToDec2Digit ;requires 8 bit registers! diff --git a/quickswap.asm b/quickswap.asm index 1331614..a69f7ce 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -11,6 +11,7 @@ QuickSwap: LDA.l QuickSwapFlag : BEQ .done LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items + LDY.b #$14 PHX XBA ; restore the stashed value CMP.b #$30 : BNE + @@ -58,8 +59,10 @@ RCode: - + CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1 + INX + DEY : BEQ + .nextItem JSL.l IsItemAvailable : BEQ - + + RTS LCode: @@ -73,6 +76,17 @@ LCode: - + CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14 + DEX + DEY : BEQ + .nextItem JSL.l IsItemAvailable : BEQ - + + RTS + +IsItemAvailable: + LDA.l InfiniteBombs : BEQ .finite + .infinite + CPX.b #$04 : BNE .finite + LDA.b #$01 : RTL + .finite + LDA.l EquipmentWRAM-1, X +RTL diff --git a/ram.asm b/ram.asm index 3510b8f..efaa68b 100644 --- a/ram.asm +++ b/ram.asm @@ -6,6 +6,7 @@ ;-------------------------------------------------------------------------------- ; Placeholder and for compass item max count allocations, still WIP ;-------------------------------------------------------------------------------- +InfiniteBombs = $7F50C9 CompassTotalsWRAM = $7F5410 ;================================================================================ @@ -15,4 +16,5 @@ macro assertRAM(label, address) assert