backend-infra-engineer: Post v0.3.9-hotfix7 snapshot (build cleanup)

This commit is contained in:
scawful
2025-12-22 00:20:49 +00:00
parent 2934c82b75
commit 5c4cd57ff8
1259 changed files with 239160 additions and 43801 deletions

View File

@@ -0,0 +1,12 @@
;#ENABLED=False
;#PATCH_NAME=File fairy skin color fix
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Fixes the file select fairy's skin color
;#ENDPATCH_DESCRIPTION
pushpc
org $1BF02A
db $10
pullpc

View File

@@ -0,0 +1,69 @@
;#ENABLED=True
;#PATCH_NAME=Misc Small Patches
;#PATCH_AUTHOR=Zarby89
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Lots of small patches to do various things
;No Zelda Telepathy is removing the timed message that tell you to rescue her every minute
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Titlescreen forever (no intro)
;#type=bool
!TitleScreenForever = $00
;#name=Skip Ending (before credits)
;#type=bool
!SkipEnding = $00
;#name=Prevent S+Q to Dark World
;#type=bool
!NoDwSpan = $00
;#name=Disable Dungeon Map
;#type=bool
!NoDungeonMap = $00
;#name=Disable Oveworld Map
;#type=bool
!NoOWnMap = $00
;#name=No Zelda Telepathy
;#type=bool
!NoZeldaFollower = $00
;#DEFINE_END
if !TitleScreenForever = 1
org $0CC2E3
db $80
endif
if !SkipEnding = 1
org $0E9889
LDA #$20 : STA $11
RTS
endif
if !NoDwSpan = 1
org $028192
LDA #$00 : STA $7EF3CA ; Clear the DW address so game doesn't think we are in DW
JML $0281BD ; To the lightworld !
endif
if !NoDungeonMap = 1
org $0288FD ; Replace a BEQ by a BRA (dungeon map removed)
db $80
endif
if !NoOWnMap = 1
org $02A55E ; Replace a BEQ by a BRA (overworld map removed)
db $80
endif
if !NoZeldaFollower = 1
org $05DEF8
LDA.b #$00
endif

View File

@@ -0,0 +1,12 @@
;#ENABLED=True
;#PATCH_NAME=No sword beams
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Disables sword beams
;#ENDPATCH_DESCRIPTION
pushpc
org $079C70
JMP.w $079CA0
pullpc

View File

@@ -0,0 +1,11 @@
;#ENABLED=True
;#PATCH_NAME=No grass cutting
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Grass no longer gets cut by the sword
;#ENDPATCH_DESCRIPTION
pushpc
org $1BBE26
BRA + : NOP #3 : +
pullpc

View File

@@ -0,0 +1,80 @@
;#ENABLED=True
;#PATCH_NAME=AST Boots
;#PATCH_AUTHOR=Conn, Zarby89
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Copies the boots mechanics from Ancient Stone Tablets.
;DPad changes boots directions, and transitions can be
;optionally prevented from halting the dash
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Keep running after transition
;#type=bool
!KeepRunningTransition = $00
;#DEFINE_END
pushpc
org $87911D
JML AstBoots
if !KeepRunningTransition != 00
org $828B13
db $80
endif
pullpc
AstBoots:
BIT.b $F2
BPL .continue
LDA.b $F0
AND.b #$0F
BNE .pressing_direction
JML $879138
.pressing_direction
CMP.b #$0A ; up left
BEQ +
CMP.b #$05 ; down right
BEQ +
CMP.b #$09 ; down left
BEQ +
CMP.b #$06 ; up right
BNE ++
+ AND.b #$0C
++ CMP.b $26
BNE +
JML $879138
+ STA.b $26
STA.b $67
STA.w $0340
JSL $87E6A6
JML $879138
.continue
LDA.b #$12
STA.b $5D
LDA.b $3A
AND.b #$7F
STA.b $3A
STZ.b $3C
STZ.b $3D
LDA.b #$11
STA.w $0374
JML $87915E

View File

@@ -0,0 +1,44 @@
;#ENABLED=True
;#PATCH_NAME=Big Bomb requirement
;#PATCH_AUTHOR=Zarby89,kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Modify the crystal and dwarf requirements for the big bomb
;If SmithRequirement is set to 20, you will need to save the Smith first
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Crystals Required
;#type=bitfield
;#bit0=Crystal 6
;#bit1=Crystal 1
;#bit2=Crystal 5
;#bit3=Crystal 7
;#bit4=Crystal 2
;#bit5=Crystal 4
;#bit6=Crystal 3
!CrystalRequirement =$02
;#name=Required smith saved?
;#type=bool
;#uncheckedvalue=$00
;#checkedvalue=$20
!SmithRequirement =$00
;#DEFINE_END
pushpc
org $1EE16A
LDA.l $7EF37A : AND.b #!CrystalRequirement : CMP.b #!CrystalRequirement
skip 2
LDA.l $7EF3C9 : AND.b #!SmithRequirement
pullpc

View File

@@ -0,0 +1,41 @@
;#ENABLED=True
;#PATCH_NAME=Hole Overlay Fix
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Allow the floor collision of the hole overlay to work on every floor types
;#ENDPATCH_DESCRIPTION
pushpc
org $01B83E : JSL FigureOutFloor1
; change comparisons to our dynamic values
org $01FE6C : CMP.w $0318
org $01FE71 : CMP.w $031A
pullpc
;===================================================================================================
; Find floor 1 index and save its tiles
FigureOutFloor1:
REP #$30
LDX.w $046A ; read floor 1 index
; this reuses some memory related to conveyors
; the memory is very temporary so it should be safe
; databank is 0, so we can use abs,X
LDA.w $009B52+0,X ; find top tile
AND.w #$03FE ; isolate tile name
STA.w $0318 ; save tile
LDA.w $009B52+8,X ; find bottom tile
AND.w #$03FE ; isolate tile name
STA.w $031A ; save tile
LDA.b $BA ; vanilla code and return
RTL

View File

@@ -0,0 +1,13 @@
;#ENABLED=true
;#PATCH_NAME=Intro skip
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Skip the intro sooner
;#ENDPATCH_DESCRIPTION
pushpc
org $0CC123
db 4
pullpc

View File

@@ -0,0 +1,39 @@
;#ENABLED=True
;#PATCH_NAME=1.0 Glitches
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Restore the JP 1.0 glitches
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Mirror block erase
;#type=bool
!MirrorEraseBlock = $00
;#name=Spin speed and Item dash
;#type=bool
!SpinSpeedItemDash = $00
;#name=Fake flippers
;#type=bool
!FakeFlippers = $00
;#DEFINE_END
pushpc
if !MirrorEraseBlock == 1
org $07A969
JMP.w $07A970
endif
if !SpinSpeedItemDash == 1
org $0781C0
BRA + : NOP #4 : +
endif
if !FakeFlippers == 1
org $079665
JMP.w $07966C
endif
pullpc

View File

@@ -0,0 +1,39 @@
;#ENABLED=True
;#PATCH_NAME=Link Bed Starting Position
;#PATCH_AUTHOR=Zarby89, Jared_Brian_, kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Changes where Link spawns during the opening bed cutscene
;Positions can be found by temporarily moving the Link's house entrance to
;the desired location
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Link Y Position
;#type=word
!LinkYPosition = $2182
;#name=Link Y Position
;#type=word
!LinkXPosition = $095B
;#DEFINE_END
; Link sleep position changes
org $079A31
LDA.w #!LinkYPosition : STA.b $20 ; Y link position in bed
LDA.w #!LinkXPosition : STA.b $22 ; X link position in bed
org $05DE52 ; These values should be the same as the ones above
LDA.b #!LinkXPosition : STA.w $0FC2 ; X link position in bed
LDA.b #!LinkXPosition>>8 : STA.w $0FC3 ; X link position in bed
LDA.b #!LinkYPosition : STA.w $0FC4 ; Y link position in bed
LDA.b #!LinkYPosition>>8 : STA.w $0FC5 ; Y link position in bed
org $0980B7
LDA.w #(!LinkYPosition+8) : STA.b $00 ; Y link sheet in bed
LDA.w #(!LinkXPosition-8) : STA.b $02 ; X link sheet in bed
org $05DE8C
LDA.b #(!LinkYPosition-3) : STA.b $20 ; Y link position in bed when awoken
LDA.b #(!LinkYPosition-3)>>8 : STA.b $21 ; Y link position in bed when awoken

View File

@@ -0,0 +1,28 @@
;#ENABLED=True
;#PATCH_NAME=No Hardcoded Rocks
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Removes the 2 hardcoded rocks that get placed in area 33 and 2F.
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Remove rock in area 33.
;#type=bool
!RemoveRock1 = $01
;#name=Remove rock in area 2F.
;#type=bool
!RemoveRock2 = $01
;#DEFINE_END
pushpc
if !RemoveRock1 == 1
org $02EF33
NOP #4
endif
if !RemoveRock2 == 1
org $02EF3C
NOP #4
endif
pullpc

View File

@@ -0,0 +1,51 @@
;#ENABLED=True
;#PATCH_NAME=Rainstate Skip
;#PATCH_AUTHOR=Zarby89
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Skips over gamestates 0 and 1 (rain) straight to 2 (Zelda rescued)
;Setting BedIntro to 00 will keep the opening bed sequence
;#ENDPATCH_DESCRIPTION
lorom
;#DEFINE_START
;#name=Remove bed intro
;#type=bool
!BedIntro = $00
;#DEFINE_END
if !BedIntro == 00
pushpc
org $828356
JSL NewIntroRain
pullpc
NewIntroRain:
LDA.l $7EF3C5 : BNE +
LDA.b #$02 : STA.l $7EF3C5 ; Set Game mode on 2
PHX
JSL $80FC62 ; Sprite_LoadGfxProperties.justLightWorld
PLX
LDA.b #$00 ; will take care of the bed intro wether we are in game rainstate or not
+ RTL
else
pushpc
org $0CD8F6
JSL NewIntroRain
pullpc
NewIntroRain:
PHA
LDA.w #$1002
STA.l $7003C5, X
PLA
STA.l $7003D9, X
RTL
endif

View File

@@ -0,0 +1,30 @@
;#ENABLED=True
;#PATCH_NAME=Torch Tags
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Changes the number of torches required to open doors and chests when using the "Light_Torches_to_Open" and "Light_Torches_to_get_Chest" tags.
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=torches required to make a chest appear.
;#type=word
;#range=$01,$08
!ChestTorches =$01
;#name=torches required to open a door.
;#type=word
;#range=$01,$08
!DoorTorches =$08
;#DEFINE_END
pushpc
; Changes the amount of torches required to make a chest appear.
org $01C8CA
dw !ChestTorches
; Changes the amount of torches required to open a door.
org $01C645
dw !DoorTorches
pullpc

View File

@@ -0,0 +1,153 @@
;#ENABLED=True
;=========================
;TODO FINISH ADDING DEFINES
;INCOMPLETE PATCH
;==========================
;#PATCH_NAME=Weathervane Position
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Modify the position of where you need to use the flute to destroy weathervane and spawn bird
;#ENDPATCH_DESCRIPTION
!AREAID = $34
; Weather vane explosion changes:
; Let the flute work in special areas.
org $07A40A
NOP : NOP
org $07A418
JML NewVaneCheck
org $07A441
VanePassed:
org $07A44F
VaneFailed:
org $07A453
SpawnBird:
; Disable the area check for the weather vane sprite.
org $06C2EB
LDA $8A : CMP.b #!AREAID : BNE .outside_village
; Check if we have the flute activated already:
LDA $7EF34C : CMP.b #$03 : BNE .player_lacks_bird_enabled_flute
STZ $0DD0, X
.player_lacks_bird_enabled_flute
RTS
.outside_village
; What to do in an area outside of the village:
LDA $7EF34C : AND.b #$02 : BEQ .player_lacks_flute_completely
STZ $0DD0, X ; Suicide.
.player_lacks_flute_completely
RTS
warnpc $06C309
; Tile 1
org $1BC226
dw $06CA
; Tile 2
org $1BC232
dw $06CE
; Tile 3
org $1BC243
dw #$074C
; Bird coords
org $098DC1
LDA.w #$08C8 : STA $00
LDA.w #$0460 : STA $02
; Vane Debris coords
org $098CED
.y_coords
db $F4, $E7, $E4, $E6, $E4, $EC, $E4, $E4, $EC, $E5, $F4, $E4
.x_coords
db $7C, $5E, $6C, $60, $62, $64, $7C, $60, $64, $62, $60, $6C
; Debris Y high byte
org $098D65
db $08
; Debris X high byte
org $098D72
db $04
pullpc ; Continue extended space.
NewVaneCheck:
{
REP #$20
; Check if its the master sword area.
LDA $8A : CMP.w #!AREAID : BNE .not_weathervane_trigger2
LDA $20
CMP.w #$0068 : BCC .not_weathervane_trigger1
CMP.w #$00A0 : BCS .not_weathervane_trigger1
LDA $22
CMP.w #$0040 : BCC .not_weathervane_trigger1
CMP.w #$00A0 : BCS .not_weathervane_trigger1
SEP #$20
; Cancel other sounds
STZ $012E
STZ $012F
; Stop player input
INC InCutScene
; Trigger Zelda
INC $0642
JML VaneFailed
.not_weathervane_trigger2
SEP #$20
; Check if we already have the bird.
LDA $7EF34C : CMP.b #$02 : BNE .travel_bird_not_already_released
REP #$20
; Check the area for #$22.
LDA $8A : CMP.w #$0022 : BNE .not_weathervane_trigger1
LDA $20
CMP.w #$0900 : BCC .not_weathervane_trigger1
CMP.w #$0920 : BCS .not_weathervane_trigger1
LDA $22
CMP.w #$0450 : BCC .not_weathervane_trigger1
CMP.w #$0470 : BCS .not_weathervane_trigger1
SEP #$20
LDA $7EF2A2 : ORA.b #$20 : STA $7EF2A2
REP #$20
STZ FluteIndex
JML VanePassed
.not_weathervane_trigger1
JML VaneFailed
.travel_bird_not_already_released
JML SpawnBird
}
pushpc ; Pause expanded space.
; ==============================================================================

View File

@@ -0,0 +1,22 @@
;#ENABLED=True
;#PATCH_NAME=Lost Woods Exit Music
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Changes the room that plays the lost woods theme when exiting. Note: This only works for the first byte, so if you want to play music when leaving room 13, this will also cause room 113 to play the music. In vanilla this is used for room E1 Cave (Lost Woods HP).
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=The room number.
;#type=byte
!MusicRoomNumber = $E1
;#DEFINE_END
pushpc
org $02844F
db !MusicRoomNumber
pullpc

View File

@@ -0,0 +1,29 @@
;#ENABLED=True
;#PATCH_NAME=Bottle Vendor
;#PATCH_AUTHOR=Zarby89
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Modify the item and price of sold by the Kakariko bottle vendor
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Item Price
;#type=word
;#decimal=true
!ItemPrice = 100
;#name=Item ID
;#type=item
!ItemID = $16
;#DEFINE_END
pushpc
org $05EAF9
dw !BottlePrice
org $05EB34
dw !BottlePrice
org $05EB18
db !ItemID
pullpc

View File

@@ -0,0 +1,153 @@
;#ENABLED=false
;#PATCH_NAME=Overworld Tail Map Expansion
;#PATCH_AUTHOR=yaze
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Expands the overworld pointer tables from 160 to 192 entries,
;enabling support for Special World tail maps (0xA0-0xBF).
;
;IMPORTANT: This patch MUST be applied AFTER ZSCustomOverworld v3.
;If applied manually via Asar:
; 1. First apply ZSCustomOverworld v3 patch to your ROM
; 2. Then apply this patch: asar TailMapExpansion.asm your_rom.sfc
;
;If applied via yaze CLI:
; z3ed overworld-doctor --rom=your_rom.sfc --apply-tail-expansion
;
;Technical details:
; - Relocates Map32 pointer tables from $02:F94D to $28:A400
; - Adds 32 blank entries for maps 0xA0-0xBF pointing to $30:8000
; - Patches 8 code locations in bank $02 to use new table addresses
; - Writes detection marker 0xEA at $28:A3FF
;#ENDPATCH_DESCRIPTION
lorom
;==============================================================================
; Constants
;==============================================================================
!OldHighTable = $02F94D ; Vanilla high pointer table (160 entries)
!OldLowTable = $02FB2D ; Vanilla low pointer table (160 entries)
!NewHighTable = $28A400 ; New high pointer table (192 entries)
!NewLowTable = $28A640 ; New low pointer table (192 entries)
!BlankMapHigh = $308000 ; Blank map data for tail maps (high bytes)
!BlankMapLow = $309000 ; Blank map data for tail maps (low bytes)
!MarkerAddr = $28A3FF ; Detection marker location
!MarkerValue = $EA ; Detection marker value (NOP opcode = "expanded")
;==============================================================================
; PC address macros (for read3 function)
;==============================================================================
; LoROM: PC = (bank * $8000) + (addr - $8000)
; $02F94D -> PC = (2 * $8000) + ($F94D - $8000) = $10000 + $794D = $1794D
!OldHighTablePC = $01794D
!OldLowTablePC = $017B2D
;==============================================================================
; Detection marker - allows yaze to detect expanded tables
;==============================================================================
org !MarkerAddr
db !MarkerValue
;==============================================================================
; Blank map data for tail maps (0xA0-0xBF)
; Located in safe free space at bank $30
;==============================================================================
org !BlankMapHigh ; PC $180000
BlankMap32High:
fillbyte $00
fill 188 ; 0xBC bytes - compressed blank map32 high data
org !BlankMapLow ; PC $181000
BlankMap32Low:
fillbyte $00
fill 4 ; 0x04 bytes - compressed blank map32 low data
;==============================================================================
; New expanded High pointer table (192 entries x 3 bytes = 576 bytes)
; Copies existing 160 entries, adds 32 blank entries for tail maps
;==============================================================================
org !NewHighTable ; PC $142400
ExpandedMap32HPointers:
; Copy 160 vanilla entries (preserves any ZSCustomOverworld modifications)
; Using Asar's read1() to copy bytes from current ROM state
!n = 0
while !n < 160
db read1(!OldHighTablePC+(!n*3)+0)
db read1(!OldHighTablePC+(!n*3)+1)
db read1(!OldHighTablePC+(!n*3)+2)
!n #= !n+1
endwhile
; Add 32 blank entries for tail maps (0xA0-0xBF)
; Each entry is a 24-bit pointer to BlankMap32High ($30:8000)
!n = 0
while !n < 32
dl BlankMap32High
!n #= !n+1
endwhile
;==============================================================================
; New expanded Low pointer table (192 entries x 3 bytes = 576 bytes)
;==============================================================================
org !NewLowTable ; PC $142640
ExpandedMap32LPointers:
; Copy 160 vanilla entries (preserves any ZSCustomOverworld modifications)
!n = 0
while !n < 160
db read1(!OldLowTablePC+(!n*3)+0)
db read1(!OldLowTablePC+(!n*3)+1)
db read1(!OldLowTablePC+(!n*3)+2)
!n #= !n+1
endwhile
; Add 32 blank entries for tail maps (0xA0-0xBF)
!n = 0
while !n < 32
dl BlankMap32Low
!n #= !n+1
endwhile
;==============================================================================
; Patch game code to use new pointer tables
; Each LDA.l instruction is 4 bytes: AF xx xx xx (opcode + 24-bit address)
; We patch the 3 address bytes to point to the new tables
;==============================================================================
; Function 1: Overworld_DecompressAndDrawOneQuadrant
; Original at PC $1F59D: LDA.l $02F94D,X -> LDA.l $28A400,X
org $02F59E ; Address bytes of instruction at $02F59D
dl ExpandedMap32HPointers ; New high table address
org $02F5A4 ; Address bytes for +1 offset access
dl ExpandedMap32HPointers+1
; Original at PC $1F5C8: LDA.l $02FB2D,X -> LDA.l $28A640,X
org $02F5C9 ; Address bytes of instruction at $02F5C8
dl ExpandedMap32LPointers ; New low table address
org $02F5CF ; Address bytes for +1 offset access
dl ExpandedMap32LPointers+1
; Function 2: Secondary quadrant loader (parallel decompression path)
org $02F7E4
dl ExpandedMap32HPointers
org $02F7EA
dl ExpandedMap32HPointers+1
org $02F80F
dl ExpandedMap32LPointers
org $02F815
dl ExpandedMap32LPointers+1
;==============================================================================
; End of patch
;==============================================================================
print "Tail Map Expansion patch applied successfully."
print "- New High Table: $28:A400 (192 entries)"
print "- New Low Table: $28:A640 (192 entries)"
print "- Blank Map Data: $30:8000, $30:9000"
print "- Detection Marker: $28:A3FF = $EA"

View File

@@ -0,0 +1,19 @@
;#ENABLED=True
;#PATCH_NAME=Crystal Switch Conveyor
;#PATCH_AUTHOR=Zarby89
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Causes crystal switches to be moved by conveyors
;#ENDPATCH_DESCRIPTION
lorom
pushpc
org $06B8D0
JSL ConveyorSwitch
NOP
pullpc
ConveyorSwitch:
JSL $06E496 ; Sprite_CheckTileCollisionLong
LDA.w $0F50, X : AND.b #$F1
RTL

View File

@@ -0,0 +1,95 @@
;#ENABLED=True
;#PATCH_NAME=Elemental Trinexx
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Changes Trinexx's side heads to be both ice heads, both fire heads, or swapped.
;The heads will shoot the corrisponding beams and will also appear the correct color.
;The main head will appear the elemental color if you set that option but otherwise will be the default palette.
;You will still need to set the side heads to take damage from the appropriate elemental rod with the advanced damage editor.
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Changes the arrangement of side heads.
;#type=choice
;#choice0=Inverted Heads
;#choice1=Ice Heads Only
;#choice2=Fire Heads Only
!ElementType = $00
;#name=Changes the main head palette.
;#type=choice
;#choice0=Default Palette
;#choice1=Ice Palette
;#choice2=Fire Palette
!MainHeadPalette = $00
;#DEFINE_END
pushpc
if !ElementType == 0
; Change the palettes of the side heads to the inverted palette.
org $0DB425
db $0D, $0B
; Swap which head shows the apropriate particales when charging up.
org $1DBAD9
db $F0 ; Replace a BNE with a BEQ.
; Swap which head shoots what beam.
org $1DBAE8
LDA $0E20, X : CMP.b #$CC
; Another beam related thing.
org $1DBAF8
LDA.b #$CC
elseif !ElementType == 1
; Change the palettes of the side heads to the ice palette.
org $0DB425
db $0D, $0D
; Make the fire head show ice spakles when charging up.
org $1DBAD9
db $80 ; Replace a BNE with a BRA.
; Make the fire head shoot ice instead of fire.
org $1DBAE8
LDA.b #$CD : NOP #5
elseif !ElementType == 2
; Change the palettes of the side heads to the fire palette.
org $0DB425
db $0B, $0B
; Make the ice head show flames when charging up.
org $1DBAD9
NOP : NOP ; Remove the BNE and never branch.
; Make the ice head shoot fire instead of ice.
org $1DBAE8
LDA.b #$CC : NOP : NOP : NOP
db $80 ; Replace a BNE with a BRA.
endif
if !MainHeadPalette == 1
; Change the palette of all the main head to the ice.
org $0DB424
db $4D
; Change the snake trinexx palette to ice.
org $1DB033
db $0D
elseif !MainHeadPalette == 2
; Change the palette of all the main head to the fire.
org $0DB424
db $4B
; Change the snake trinexx palette to fire.
org $1DB033
db $0B
endif
pullpc

View File

@@ -0,0 +1,43 @@
;#PATCH_NAME=Eye Lasers Active
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Changes the wall eye lasers to always be active or always inactive reguardless of what X position they are placed on.
;Normally in vanilla every other X position is set to be inactive unless link is looking directly at them.
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Active?
;#type=bool
!EyeActive = $00
;#DEFINE_END
pushpc
if !EyeActive == $00
; Make it so the eye lazers are always inactive reguardless of what X position they are placed on.
org $1EA50B
; Replaced code:
; LDA $0D10, X : AND.b #$10 : EOR.b #$10 : STA !requires_facing, X
NOP #5 : LDA.b #$00 : STA $0EB0, X
org $1EA52C
; Replace code:
; LDA $0D00, X : AND.b #$10 : STA !requires_facing, X
NOP #3 : LDA.b #$00 : STA $0EB0, X
elseif !EyeActive == $01
; Make it so the eye lazers are always active reguardless of what X position they are placed on.
org $1EA50B
; Replaced code:
; LDA $0D10, X : AND.b #$10 : EOR.b #$10 : STA !requires_facing, X
NOP #5 : LDA.b #$01 : STA $0EB0, X
org $1EA52C
; Replace code:
; LDA $0D00, X : AND.b #$10 : STA !requires_facing, X
NOP #3 : LDA.b #$01 : STA $0EB0, X
endif
pullpc

View File

@@ -0,0 +1,56 @@
;#ENABLED=True
;#PATCH_NAME=Kholdstare Speeds
;#PATCH_AUTHOR=Jared_Brian_
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Changes the speeds at which kholdstare can move.
;By default he will move the same speed on the x and y axis in all 4 diagonal directions.
;Values above 0x80 are negative.
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=X Value 1
;#type=byte
!XValue1 = $0010
;#name=X Value 2
;#type=byte
!XValue2 = $0010
;#name=X Value 3
;#type=byte
!XValue3 = $00F0
;#name=X Value 4
;#type=byte
!XValue4 = $00F0
;#name=Y Value 1
;#type=byte
!YValue1 = $00F0
;#name=Y Value 2
;#type=byte
!YValue2 = $0010
;#name=Y Value 3
;#type=byte
!YValue3 = $0010
;#name=Y Value 4
;#type=byte
!YValue4 = $00F0
;#DEFINE_END
pushpc
; Speed chagnes.
org $1E95DD
.x_speed_limits
db !XValue1, !XValue2, !XValue3, !XValue4
.y_speed_limits
db !YValue1, !YValue2, !YValue3, !YValue4
pullpc

View File

@@ -0,0 +1,24 @@
;#ENABLED=True
;#PATCH_NAME=Spike damage
;#PATCH_AUTHOR=kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Allows mail upgrades to reduce sprite damage
;$08 = 1 heart, $04 = half heart, $10 = 2 heart, etc...
;#ENDPATCH_DESCRIPTION
;#DEFINE_START
;#name=Green Mail Damage
!GreenMailDamage = $08
;#name=Blue Mail Damage
!BlueMailDamage = $08
;#name=Red Mail Damage
!RedMailDamage = $08
;#DEFINE_END
pushpc
org $07BA07
db !GreenMailDamage
db !BlueMailDamage
db !RedMailDamage
pullpc

View File

@@ -0,0 +1,52 @@
;#ENABLED=True
;#PATCH_NAME=More spike directions
;#PATCH_AUTHOR=Zarby89,kan
;#PATCH_VERSION=1.0
;#PATCH_DESCRIPTION
;Allows more spike blocks Subtype (sprite property)
;Default Values : (00) = normal, (08) = normal vertical
;Values, ascending by speed
;00,01,02,03,04,05,06 = Horizontal
;08,09,0A,0B,0C,0D,0E = Vertical
;#ENDPATCH_DESCRIPTION
lorom
pushpc
org $0691D7 ; SpritePrep_SpikeBlock:
JSL NewSpikePrep
RTS
org $1EBD0E
JSL NewSpikeCollision
RTS
pullpc
speedValuesH:
db $20, $10, $18, $28, $30, $38, $40, $FF
db $00, $00, $00, $00, $00, $00, $00, $FF
speedValuesV:
db $00, $00, $00, $00, $00, $00, $00, $FF
db $20, $18, $20, $28, $30, $38, $40, $FF
NewSpikePrep:
TXY
LDX.w $0E30,Y
LDA.l speedValuesH,X : STA.w $0D50,Y
LDA.l speedValuesV,X : STA.w $0D40,Y
TYX
RTL
NewSpikeCollision:
LDA.b #$04 : STA.w $0DF0, X
LDA.w $0D50, X : EOR.b #$FF : INC A : STA.w $0D50, X
LDA.w $0D40, X : EOR.b #$FF : INC A : STA.w $0D40, X
LDA.b #$05 : JSL $0DBB7C ; Sound_SetSfx2PanLong
RTL

View File

@@ -0,0 +1 @@
0000