Compare commits
61 Commits
fix_credit
...
bombos_onl
| Author | SHA1 | Date | |
|---|---|---|---|
| a5b068b15f | |||
| bfc361ad3e | |||
| f7070dd30f | |||
| 9d485e86cd | |||
| ba660409bf | |||
| 3d93b0160f | |||
| bb35409bc8 | |||
| ffdb5e837a | |||
| 4d4ae6b894 | |||
| 4f4f46352d | |||
| 103c41ae94 | |||
| 90a4c50a01 | |||
| 3acc2a3f45 | |||
| 5fd285c767 | |||
| 7f551ad1a4 | |||
|
|
96e3427868 | ||
| f629bcb15a | |||
| 02ea894a40 | |||
| ac81fcbf0f | |||
| 265089cedb | |||
| 6279f32fe3 | |||
| 843f1cad6f | |||
| c23b4ad5b2 | |||
| 22b9c17f09 | |||
| e210c85710 | |||
| e50641db11 | |||
| 1ec9f22cea | |||
| 18a2214b23 | |||
| f2a0cfc098 | |||
| 6565fbfd65 | |||
| ae0a5c685a | |||
| c323a71340 | |||
| f3e0def5a2 | |||
| 1fcde00d09 | |||
| 123dcddc94 | |||
| 7c8ef3afce | |||
| 74e2f96e0a | |||
| dafef001be | |||
| 3f4db583f5 | |||
| 44f3f10bc1 | |||
| 2bb5ec87b0 | |||
| 86a1f82d23 | |||
| 1071b834cd | |||
| 2693e73a21 | |||
| 6d52427696 | |||
| 374abe7e88 | |||
| 1b698808c3 | |||
| 62c81f2cf3 | |||
| 08166fe669 | |||
| 70ec318204 | |||
| 081411a448 | |||
| 55fd818f55 | |||
| 37b90894e3 | |||
| f6983cee35 | |||
| 642205bc68 | |||
| a8bc95bd1f | |||
| 0dcef701df | |||
| 1dafb620b0 | |||
| 828a9df7d9 | |||
| ea72d70b1b | |||
| bf953e7953 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,3 @@
|
||||
tournament.asm
|
||||
/build
|
||||
/.idea
|
||||
/.idea
|
||||
|
||||
0
data/99ff1_bombos.gfx → 99ff1_bombos.gfx
Normal file → Executable file
0
data/99ff1_bombos.gfx → 99ff1_bombos.gfx
Normal file → Executable file
0
data/99ff1_quake.gfx → 99ff1_quake.gfx
Normal file → Executable file
0
data/99ff1_quake.gfx → 99ff1_quake.gfx
Normal file → Executable file
@@ -3,67 +3,92 @@
|
||||
;================================================================================
|
||||
lorom
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
; THIS NEEDS TO BE THE FIRST INCLUDE BECAUSE IT CHANGES THINGS EVERYWHERE
|
||||
; If this were to be included later, it would almost certainly overwrite other changes
|
||||
incsrc "fastrom.asm"
|
||||
|
||||
;================================================================================
|
||||
|
||||
;org $80FFC0 ; <- 7FC0 - Bank00.asm : 9173 (db "THE LEGEND OF ZELDA " ; 21 bytes)
|
||||
;db $23, $4E
|
||||
;org $00FFC0 ; <- 7FC0 - Bank00.asm : 9173 (db "THE LEGEND OF ZELDA " ; 21 bytes)
|
||||
;db #$23, $4E
|
||||
|
||||
org $80FFD5 ; <- 7FD5 - Bank00.asm : 9175 (db $20 ; rom layout)
|
||||
db $30 ; set fast lorom
|
||||
org $00FFD5 ; <- 7FD5 - Bank00.asm : 9175 (db $20 ; rom layout)
|
||||
db #$30 ; set fast lorom
|
||||
|
||||
;org $80FFD6 ; <- 7FD6 - Bank00.asm : 9176 (db $02 ; cartridge type)
|
||||
;db $55 ; enable S-RTC
|
||||
;org $00FFD6 ; <- 7FD6 - Bank00.asm : 9176 (db $02 ; cartridge type)
|
||||
;db #$55 ; enable S-RTC
|
||||
|
||||
org $80FFD7 ; <- 7FD7 - Bank00.asm : 9177 (db $0A ; rom size)
|
||||
db $0B ; mark rom as 16mbit
|
||||
org $00FFD7 ; <- 7FD7 - Bank00.asm : 9177 (db $0A ; rom size)
|
||||
db #$0B ; mark rom as 16mbit
|
||||
|
||||
org $80FFD8 ; <- 7FD8 - Bank00.asm : 9178 (db $03 ; ram size (sram size))
|
||||
db $05 ; mark sram as 32k
|
||||
org $00FFD8 ; <- 7FD8 - Bank00.asm : 9178 (db $03 ; ram size (sram size))
|
||||
db #$05 ; mark sram as 32k
|
||||
|
||||
org $BFFFFF ; <- 1FFFFF
|
||||
db $00 ; expand file to 2mb
|
||||
org $3FFFFF ; <- 1FFFFF
|
||||
db #$00 ; expand file to 2mb
|
||||
|
||||
org $9FFFF8 ; <- FFFF8 timestamp rom
|
||||
db $20, $19, $08, $31 ; year/month/day
|
||||
org $1FFFF8 ; <- FFFF8 timestamp rom
|
||||
db #$20, #$19, #$08, #$31 ; year/month/day
|
||||
|
||||
;================================================================================
|
||||
!ROM_VERSION_LOW ?= 1 ; ROM version (two 16-bit integers)
|
||||
!ROM_VERSION_HIGH ?= 4 ;
|
||||
!ROM_VERSION_HIGH ?= 2 ;
|
||||
|
||||
org $80FFE0 ; Unused hardware vector
|
||||
org $00FFE0 ; Unused hardware vector
|
||||
RomVersion:
|
||||
dw !ROM_VERSION_LOW
|
||||
dw !ROM_VERSION_HIGH
|
||||
|
||||
;================================================================================
|
||||
|
||||
!ADD = "CLC : ADC"
|
||||
!SUB = "SEC : SBC"
|
||||
!BLT = "BCC"
|
||||
!BGE = "BCS"
|
||||
|
||||
!MS_GOT = "$7F5031"
|
||||
|
||||
!REDRAW = "$7F5000"
|
||||
!GANON_WARP_CHAIN = "$7F5032";
|
||||
|
||||
!TILE_UPLOAD_BUFFER = "$7EA180";
|
||||
|
||||
!FORCE_HEART_SPAWN = "$7F5033";
|
||||
!SKIP_HEART_SAVE = "$7F5034";
|
||||
|
||||
; MSU-1
|
||||
!REG_MSU_FALLBACK_TABLE = $7F50A0 ; 8 bytes
|
||||
!REG_MSU_DELAYED_COMMAND = $7F50A9
|
||||
!REG_MSU_PACK_COUNT = $7F50AA
|
||||
!REG_MSU_PACK_CURRENT = $7F50AB
|
||||
!REG_MSU_PACK_REQUEST = $7F50AC
|
||||
!REG_MSU_LOADED_TRACK = $7F50AD ; 2 bytes
|
||||
!REG_SPC_LOADING = $7F50AF
|
||||
!MSU_LOADED_TRACK = $7F5400
|
||||
!MSU_RESUME_TRACK = $7F5401
|
||||
!MSU_RESUME_TIME = $7F5402 ; 4 bytes
|
||||
!MSU_RESUME_CONTROL = $7F5406
|
||||
!REG_MUSIC_CONTROL = $012B
|
||||
;!REG_MUSIC_CONTROL = $012C
|
||||
!REG_MUSIC_CONTROL_REQUEST = $012C
|
||||
|
||||
!ONEMIND_ID = $7F5072
|
||||
!ONEMIND_TIMER = $7F5073
|
||||
|
||||
function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<0))
|
||||
|
||||
; Feature flags, run asar with -DFEATURE_X=1 to enable
|
||||
!FEATURE_NEW_TEXT ?= 0
|
||||
|
||||
;================================================================================
|
||||
|
||||
incsrc hooks.asm
|
||||
incsrc treekid.asm
|
||||
incsrc spriteswap.asm
|
||||
incsrc hashalphabethooks.asm
|
||||
incsrc sharedplayerpalettefix.asm
|
||||
incsrc ram.asm
|
||||
incsrc sram.asm
|
||||
incsrc registers.asm
|
||||
incsrc vanillalabels.asm
|
||||
incsrc overworldmap.asm ; Overwrites some code in bank $8A
|
||||
|
||||
org $A08000 ; bank $20
|
||||
;org $208000 ; bank #$20
|
||||
org $A08000 ; bank #$A0
|
||||
incsrc newitems.asm ; LEAVE THIS AS FIRST
|
||||
incsrc itemdowngrade.asm
|
||||
incsrc bugfixes.asm
|
||||
incsrc darkworldspawn.asm
|
||||
@@ -71,6 +96,7 @@ incsrc lampmantlecone.asm
|
||||
incsrc floodgatesoftlock.asm
|
||||
incsrc heartpieces.asm
|
||||
incsrc npcitems.asm
|
||||
incsrc utilities.asm
|
||||
incsrc flipperkill.asm
|
||||
incsrc pendantcrystalhud.asm
|
||||
incsrc potions.asm
|
||||
@@ -81,15 +107,23 @@ incsrc tablets.asm
|
||||
incsrc fairyfixes.asm
|
||||
incsrc rngfixes.asm
|
||||
incsrc medallions.asm
|
||||
incsrc inventory.asm
|
||||
incsrc ganonfixes.asm
|
||||
incsrc zelda.asm
|
||||
incsrc maidencrystals.asm
|
||||
incsrc zoraking.asm
|
||||
incsrc catfish.asm
|
||||
incsrc flute.asm
|
||||
incsrc dungeondrops.asm
|
||||
incsrc halfmagicbat.asm
|
||||
incsrc mantle.asm
|
||||
incsrc swordswap.asm
|
||||
incsrc stats.asm
|
||||
incsrc scratchpad.asm
|
||||
incsrc map.asm
|
||||
incsrc dialog.asm
|
||||
incsrc entrances.asm
|
||||
incsrc clock.asm
|
||||
incsrc accessibility.asm
|
||||
incsrc heartbeep.asm
|
||||
incsrc capacityupgrades.asm
|
||||
@@ -98,11 +132,12 @@ incsrc doorframefixes.asm
|
||||
incsrc music.asm
|
||||
incsrc roomloading.asm
|
||||
incsrc icepalacegraphics.asm
|
||||
incsrc firebarlayer.asm
|
||||
warnpc $A18000
|
||||
|
||||
org $9C8000 ; text tables for translation
|
||||
incbin "data/i18n_en.bin"
|
||||
warnpc $9CF356
|
||||
org $1C8000 ; text tables for translation
|
||||
incbin i18n_en.bin
|
||||
warnpc $1CF356
|
||||
|
||||
org $A18000 ; static mapping area
|
||||
incsrc framehook.asm
|
||||
@@ -113,7 +148,7 @@ incsrc hud.asm
|
||||
warnpc $A18800
|
||||
|
||||
org $A18800 ; static mapping area
|
||||
|
||||
incsrc zsnes.asm
|
||||
warnpc $A19000
|
||||
|
||||
org $A1A000 ; static mapping area. Referenced by front end. Do not move.
|
||||
@@ -133,7 +168,9 @@ incsrc glitched.asm
|
||||
incsrc hardmode.asm
|
||||
incsrc goalitem.asm
|
||||
incsrc quickswap.asm
|
||||
incsrc endingsequence.asm
|
||||
incsrc cuccostorm.asm
|
||||
incsrc compression.asm
|
||||
incsrc retro.asm
|
||||
incsrc controllerjank.asm
|
||||
incsrc boots.asm
|
||||
@@ -145,6 +182,7 @@ incsrc hashalphabet.asm
|
||||
incsrc inverted.asm
|
||||
incsrc invertedmaps.asm
|
||||
incsrc newhud.asm
|
||||
incsrc compasses.asm
|
||||
incsrc save.asm
|
||||
incsrc password.asm
|
||||
incsrc enemy_adjustments.asm
|
||||
@@ -152,135 +190,134 @@ incsrc hudtext.asm
|
||||
incsrc servicerequest.asm
|
||||
incsrc elder.asm
|
||||
incsrc toast.asm
|
||||
incsrc darkroomitems.asm
|
||||
incsrc fastcredits.asm
|
||||
incsrc msu.asm
|
||||
incsrc dungeonmap.asm
|
||||
incsrc hextodec.asm
|
||||
incsrc textrenderer.asm
|
||||
incsrc special_weapons.asm
|
||||
incsrc variable_ganon_vulnerability.asm
|
||||
if !FEATURE_NEW_TEXT
|
||||
incsrc textrenderer.asm
|
||||
endif
|
||||
warnpc $A58000
|
||||
|
||||
org $A28000
|
||||
ItemReceiptGraphicsROM:
|
||||
; we need some empty space here so that 0000 can mean nothing
|
||||
fillbyte $00 : fill 32
|
||||
incbin "data/customitems.4bpp"
|
||||
warnpc $A2B000
|
||||
org $A2B000
|
||||
incsrc itemdatatables.asm ; Statically mapped
|
||||
incsrc decompresseditemgraphics.asm
|
||||
incsrc newitems.asm
|
||||
incsrc utilities.asm
|
||||
incsrc inventory.asm
|
||||
;org $228000 ; contrib area
|
||||
org $A28000 ; contrib area
|
||||
incsrc contrib.asm
|
||||
|
||||
org $A38000
|
||||
incsrc stats/credits.asm ; Statically mapped
|
||||
incsrc stats/main.asm
|
||||
incsrc stats/statConfig.asm
|
||||
FontTable:
|
||||
incsrc stats/fonttable.asm
|
||||
|
||||
org $B08000 ; bank $30
|
||||
org $308000 ; bank #$30
|
||||
incsrc tables.asm
|
||||
|
||||
org $B48000
|
||||
org $348000
|
||||
incsrc spc.asm
|
||||
|
||||
org $B18000 ; bank $31
|
||||
; uncomment for inverted adjustments
|
||||
;incsrc sandbox.asm
|
||||
|
||||
org $318000 ; bank #$31
|
||||
GFX_Mire_Bombos:
|
||||
incbin "data/99ff1_bombos.gfx"
|
||||
warnpc $B18800
|
||||
incbin 99ff1_bombos.gfx
|
||||
warnpc $318800
|
||||
|
||||
org $B18800
|
||||
org $318800
|
||||
GFX_Mire_Quake:
|
||||
incbin "data/99ff1_quake.gfx"
|
||||
warnpc $B19000
|
||||
incbin 99ff1_quake.gfx
|
||||
warnpc $319000
|
||||
|
||||
org $B19000
|
||||
org $319000
|
||||
GFX_TRock_Bombos:
|
||||
incbin "data/a6fc4_bombos.gfx"
|
||||
warnpc $B19800
|
||||
incbin a6fc4_bombos.gfx
|
||||
warnpc $319800
|
||||
|
||||
org $B19800
|
||||
org $319800
|
||||
GFX_TRock_Ether:
|
||||
incbin "data/a6fc4_ether.gfx"
|
||||
warnpc $B1A000
|
||||
incbin a6fc4_ether.gfx
|
||||
warnpc $31A000
|
||||
|
||||
org $B1A000
|
||||
org $31A000
|
||||
GFX_HUD_Items:
|
||||
incbin "data/c2807_v4.gfx"
|
||||
warnpc $B1A800
|
||||
incbin c2807_v4.gfx
|
||||
warnpc $31A800
|
||||
|
||||
org $B1A800
|
||||
org $31A800
|
||||
GFX_New_Items:
|
||||
incbin newitems.gfx
|
||||
;incbin eventitems.gfx ; *EVENT*
|
||||
warnpc $31B000
|
||||
|
||||
warnpc $B1B000
|
||||
|
||||
org $B1B000
|
||||
org $31B000
|
||||
GFX_HUD_Main:
|
||||
incbin "data/c2e3e.gfx"
|
||||
warnpc $B1B800
|
||||
incbin c2e3e.gfx
|
||||
warnpc $31B800
|
||||
|
||||
org $B1C000
|
||||
org $31C000
|
||||
IcePalaceFloorGfx:
|
||||
incbin "data/ice_palace_floor.bin"
|
||||
warnpc $B1C801
|
||||
incbin ice_palace_floor.bin
|
||||
warnpc $31C801
|
||||
|
||||
org $B1C800
|
||||
Damage_Table:
|
||||
incbin "data/damage_table.bin"
|
||||
warnpc $B1D001
|
||||
org $31C800
|
||||
Damage_Table_Bombos:
|
||||
incbin damage_table_bombos.bin
|
||||
warnpc $31D001
|
||||
|
||||
org $B1D000
|
||||
org $31D000
|
||||
FileSelectNewGraphics:
|
||||
incbin "data/fileselectgfx.2bpp"
|
||||
warnpc $B1E001
|
||||
incbin fileselect.chr.gfx
|
||||
warnpc $31E001
|
||||
|
||||
org $B1E000
|
||||
org $31E000
|
||||
InvertedCastleHole: ;address used by front end. DO NOT MOVE!
|
||||
incbin "data/sheet73.gfx"
|
||||
warnpc $B1E501
|
||||
incbin sheet73.gfx
|
||||
warnpc $31E501
|
||||
|
||||
org $B38000
|
||||
org $31E800
|
||||
Damage_Table_Bombs:
|
||||
incbin damage_table_sword_bombs.bin
|
||||
warnpc $31F000
|
||||
|
||||
org $31F000
|
||||
Damage_Table_Pseudo:
|
||||
incbin damage_table_pseudo_sword.bin
|
||||
warnpc $31F800
|
||||
|
||||
org $338000
|
||||
GFX_HUD_Palette:
|
||||
incbin "data/hudpalette.pal"
|
||||
warnpc $B38041
|
||||
incbin hudpalette.pal
|
||||
warnpc $338041
|
||||
|
||||
org $B39000
|
||||
ExpandedTrinexx:
|
||||
incbin "data/sheet178.gfx"
|
||||
warnpc $B39600
|
||||
org $339000
|
||||
incbin sheet178.gfx
|
||||
warnpc $339600
|
||||
|
||||
org $B39600
|
||||
org $339600
|
||||
BossMapIconGFX:
|
||||
incbin "data/bossicons.4bpp"
|
||||
incbin bossicons.4bpp
|
||||
|
||||
org $B39C00
|
||||
NewFont:
|
||||
incbin "data/newfont.bin"
|
||||
NewFontInverted:
|
||||
incbin "data/newfont_inverted.bin"
|
||||
SmallCharacters:
|
||||
incbin "data/smallchars.2bpp"
|
||||
org $8CD7DF
|
||||
incsrc data/playernamecharmap.asm
|
||||
org $8CE73D
|
||||
incbin data/playernamestripes_1.bin
|
||||
org $8CE911
|
||||
incbin data/playernamestripes_2.bin
|
||||
incsrc data/kanjireplacements.asm ; Overwrites text gfx data and masks in bank $8E
|
||||
if !FEATURE_NEW_TEXT
|
||||
org $339C00
|
||||
NewFont:
|
||||
incbin newfont.bin
|
||||
NewFontInverted:
|
||||
incbin newfont_inverted.bin
|
||||
|
||||
org $B28000
|
||||
org $0CD7DF
|
||||
incbin text_unscramble1.bin
|
||||
org $0CE4D5
|
||||
incbin text_unscramble2.bin
|
||||
endif
|
||||
|
||||
org $328000
|
||||
Extra_Text_Table:
|
||||
incsrc itemtext.asm
|
||||
|
||||
incsrc externalhooks.asm
|
||||
;================================================================================
|
||||
org $919100 ; PC 0x89100
|
||||
incbin "data/map_icons.gfx"
|
||||
warnpc $919401
|
||||
;================================================================================
|
||||
org $9BB1E0
|
||||
incsrc custompalettes.asm
|
||||
warnpc $9BB880
|
||||
org $119100 ; PC 0x89100
|
||||
incbin map_icons.gfx
|
||||
warnpc $119401
|
||||
;================================================================================
|
||||
org $AF8000 ; PC 0x178000
|
||||
Static_RNG: ; each line below is 512 bytes of rng
|
||||
@@ -295,7 +332,7 @@ warnpc $B08000
|
||||
;Bank Map
|
||||
;$20 Code Bank
|
||||
;$21 Reserved (Frame Hook & Init)
|
||||
;$22 Unused
|
||||
;$22 Contrib Code
|
||||
;$23 Stats & Credits
|
||||
;$24 Code Bank
|
||||
;$29 External hooks (rest of bank not used)
|
||||
@@ -311,18 +348,18 @@ warnpc $B08000
|
||||
;$3F reserved for internal debugging
|
||||
;================================================================================
|
||||
;RAM
|
||||
;See ram.asm for label assignments
|
||||
;$7EC900[0x1F00]: BigRAM buffer
|
||||
;$7E021B[0x1]: Used by race game instead of $0ABF to avoid witch item conflict
|
||||
;$7EC900[0x1F00]: BIGRAM buffer
|
||||
;$7EF000[0x500]: SRAM mirror First 0x500 bytes of SRAM
|
||||
; See sram.asm for labels and assignments
|
||||
;$7F5000[0x800]: Rando's main free ram region
|
||||
; See ram.asm for specific assignments
|
||||
; See tables.asm for specific assignments
|
||||
;$7F6000[0x1000]: SRAM buffer mapped to vanilla save slots 1 and 2
|
||||
; See sram.asm for labels and assignments
|
||||
;$7F7667[0x6719] - free ram
|
||||
;================================================================================
|
||||
;SRAM Map
|
||||
;See sram.asm for label assignments and documentation
|
||||
;See sram.asm for rando-specific assignments
|
||||
;$70:0000 (5K) Game state
|
||||
; 0000-04FF Vanilla Slot 1 (mirrored at $7EF000)
|
||||
; 0500-14FF Ext Slot 1 (mirrored at $7F6000)
|
||||
@@ -330,19 +367,371 @@ warnpc $B08000
|
||||
;$70:3000 (0x16) Password
|
||||
;$70:6000 (8K) Scratch buffers
|
||||
;================================================================================
|
||||
;org $0080DC ; <- 0xDC - Bank00.asm:179 - Kill Music
|
||||
;db #$A9, #$00, #$EA
|
||||
;LDA.b #$00 : NOP
|
||||
;================================================================================
|
||||
;org $0AC53E ; <- 5453E - Bank0A.asm:1103 - (LDA $0AC51F, X) - i have no idea what this is for anymore
|
||||
;LDA.b #$7F
|
||||
;NOP #2
|
||||
;================================================================================
|
||||
;org $05DF8B ; <- 2DF8B - Bank05.asm : 2483
|
||||
;AND.w #$0100 ; allow Sprite_DrawMultiple to access lower half of sprite tiles
|
||||
;================================================================================
|
||||
;org $0DF8F1 ; this is required for the X-indicator in the HUD except not anymore obviously
|
||||
;
|
||||
;;red pendant
|
||||
;db $2B, $31, $2C, $31, $3D, $31, $2E, $31
|
||||
;db $2B, $25, $2C, $25, $2D, $25, $2E, $25
|
||||
;
|
||||
;;blue pendant
|
||||
;db $2B, $31, $2C, $31, $3D, $31, $2E, $31
|
||||
;db $2B, $2D, $2C, $2D, $2D, $2D, $2E, $2D
|
||||
;
|
||||
;;green pendant
|
||||
;db $2B, $31, $2C, $31, $3D, $31, $2E, $31
|
||||
;db $2B, $3D, $2C, $3D, $2D, $3D, $2E, $3D
|
||||
;================================================================================
|
||||
;org $00CFF2 ; 0x4FF2 - Mire H
|
||||
;db GFX_Mire_Bombos>>16
|
||||
;org $00D0D1 ; 0x50D1 - Mire M
|
||||
;db GFX_Mire_Bombos>>8
|
||||
;org $00D1B0 ; 0x51B0 - Mire L
|
||||
;db GFX_Mire_Bombos
|
||||
|
||||
org $80D09C ; 0x509C - HUD Items H
|
||||
;org $00D020 ; 0x5020 - Trock H
|
||||
;db GFX_TRock_Bombos>>16
|
||||
;org $00D0FF ; 0x50FF - Trock M
|
||||
;db GFX_TRock_Bombos>>8
|
||||
;org $00D1DE ; 0x51DE - Trock L
|
||||
;db GFX_TRock_Bombos
|
||||
|
||||
org $00D09C ; 0x509C - HUD Items H
|
||||
db GFX_HUD_Items>>16
|
||||
org $80D17B ; 0x517B - HUD Items M
|
||||
org $00D17B ; 0x517B - HUD Items M
|
||||
db GFX_HUD_Items>>8
|
||||
org $80D25A ; 0x525A - HUD Items L
|
||||
org $00D25A ; 0x525A - HUD Items L
|
||||
db GFX_HUD_Items
|
||||
|
||||
org $80D09D ; 0x509D - HUD Main H
|
||||
db GFX_HUD_Main>>16
|
||||
org $80D17C ; 0x517C - HUD Main M
|
||||
db GFX_HUD_Main>>8
|
||||
org $80D25B ; 0x525B - HUD Main L
|
||||
db GFX_HUD_Main
|
||||
; this used to be a pointer to a dummy file
|
||||
org $00D065 ; 005065 - New Items H
|
||||
db GFX_New_Items>>16
|
||||
org $00D144 ; 005114 - New Items M
|
||||
db GFX_New_Items>>8
|
||||
org $00D223 ; 005223 - New Items L
|
||||
db GFX_New_Items
|
||||
|
||||
org $00D09D ; 0x509D - HUD Main H
|
||||
db GFX_HUD_Main>>16
|
||||
org $00D17C ; 0x517C - HUD Main M
|
||||
db GFX_HUD_Main>>8
|
||||
org $00D25B ; 0x525B - HUD Main L
|
||||
db GFX_HUD_Main
|
||||
;================================================================================
|
||||
org $008781
|
||||
UseImplicitRegIndexedLocalJumpTable:
|
||||
|
||||
org $00879c
|
||||
UseImplicitRegIndexedLongJumpTable:
|
||||
|
||||
org $008333
|
||||
Vram_EraseTilemaps_triforce:
|
||||
|
||||
org $008913
|
||||
Sound_LoadLightWorldSongBank:
|
||||
org $00891D
|
||||
.do_load
|
||||
|
||||
org $00893D
|
||||
EnableForceBlank:
|
||||
|
||||
DungeonMask = $0098C0
|
||||
|
||||
org $00D308
|
||||
DecompSwordGfx:
|
||||
|
||||
org $00D348
|
||||
DecompShieldGfx:
|
||||
|
||||
org $00D463
|
||||
Tagalong_LoadGfx:
|
||||
|
||||
org $00D51B
|
||||
GetAnimatedSpriteTile:
|
||||
|
||||
org $00D52D
|
||||
GetAnimatedSpriteTile_variable:
|
||||
|
||||
org $00D84E
|
||||
Attract_DecompressStoryGfx:
|
||||
|
||||
org $00E529
|
||||
LoadSelectScreenGfx:
|
||||
|
||||
org $00F945
|
||||
PrepDungeonExit:
|
||||
|
||||
org $00FDEE
|
||||
Mirror_InitHdmaSettings:
|
||||
|
||||
org $01873A
|
||||
Dungeon_LoadRoom:
|
||||
|
||||
org $02821E
|
||||
Module_PreDungeon:
|
||||
org $028296
|
||||
.setAmbientSfx
|
||||
|
||||
org $02A0A8
|
||||
Dungeon_SaveRoomData:
|
||||
|
||||
org $02A0BE
|
||||
Dungeon_SaveRoomData_justKeys:
|
||||
|
||||
org $02B861
|
||||
Dungeon_SaveRoomQuadrantData:
|
||||
|
||||
org $02FD8A ; 17D8A - Bank0E.asm: 3732 Note: Different bank
|
||||
LoadGearPalettes_bunny:
|
||||
|
||||
org $02FD95 ; 17D95 - Bank0E.asm: 3742 Note: Different bank
|
||||
LoadGearPalettes_variable:
|
||||
|
||||
org $02FEAB
|
||||
Filter_Majorly_Whiten_Color:
|
||||
|
||||
org $05A51D
|
||||
Sprite_SpawnFallingItem:
|
||||
|
||||
org $05DF6C ; 02DF6C - Bank05.asm : 2445
|
||||
Sprite_DrawMultiple:
|
||||
|
||||
org $05DF70 ; 02DF70 - Bank05.asm : 2454
|
||||
Sprite_DrawMultiple_quantity_preset:
|
||||
|
||||
org $05DF75 ; 02DF75 - Bank05.asm : 2461
|
||||
Sprite_DrawMultiple_player_deferred:
|
||||
|
||||
org $05E1A7 ; 02E1A7 - Bank05.asm : 2592
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing:
|
||||
|
||||
org $05E1F0
|
||||
Sprite_ShowMessageFromPlayerContact:
|
||||
|
||||
org $05E219
|
||||
Sprite_ShowMessageUnconditional:
|
||||
|
||||
org $05EC96
|
||||
Sprite_ZeldaLong:
|
||||
|
||||
org $0680FA
|
||||
Player_ApplyRumbleToSprites:
|
||||
|
||||
org $0683E6
|
||||
Utility_CheckIfHitBoxesOverlapLong:
|
||||
|
||||
org $06A7DB
|
||||
Chicken_SpawnAvengerChicken: ; returns short
|
||||
|
||||
org $06DC5C
|
||||
Sprite_DrawShadowLong:
|
||||
|
||||
org $06DD40
|
||||
DashKey_Draw:
|
||||
|
||||
org $06DBF8
|
||||
Sprite_PrepAndDrawSingleLargeLong:
|
||||
|
||||
org $06DC00
|
||||
Sprite_PrepAndDrawSingleSmallLong:
|
||||
|
||||
org $06EA18
|
||||
Sprite_ApplySpeedTowardsPlayerLong:
|
||||
|
||||
org $06EAA6
|
||||
Sprite_DirectionToFacePlayerLong:
|
||||
|
||||
org $06F12F
|
||||
Sprite_CheckDamageToPlayerSameLayerLong:
|
||||
|
||||
org $06F86A
|
||||
OAM_AllocateDeferToPlayerLong:
|
||||
|
||||
org $0791B3
|
||||
Player_HaltDashAttackLong:
|
||||
|
||||
org $07999D
|
||||
Link_ReceiveItem:
|
||||
|
||||
org $07E68F
|
||||
Unknown_Method_0: ; In US version disassembly simply called "$3E6A6 IN ROM"
|
||||
|
||||
org $07F4AA
|
||||
Sprite_CheckIfPlayerPreoccupied:
|
||||
|
||||
org $08C3AE
|
||||
Ancilla_ReceiveItem:
|
||||
|
||||
org $08CE93
|
||||
Ancilla_BreakTowerSeal_draw_single_crystal:
|
||||
|
||||
org $08CEC3
|
||||
Ancilla_BreakTowerSeal_stop_spawning_sparkles:
|
||||
|
||||
org $08CF59
|
||||
BreakTowerSeal_ExecuteSparkles:
|
||||
|
||||
org $08F710
|
||||
Ancilla_SetOam_XY_Long:
|
||||
|
||||
org $0985E2 ; (break on $0985E4)
|
||||
AddReceivedItem:
|
||||
|
||||
org $098BAD
|
||||
AddPendantOrCrystal:
|
||||
|
||||
org $098CFD
|
||||
AddWeathervaneExplosion:
|
||||
|
||||
org $0993DF
|
||||
AddDashTremor:
|
||||
|
||||
org $099D04
|
||||
AddAncillaLong:
|
||||
|
||||
org $099D1A
|
||||
Ancilla_CheckIfAlreadyExistsLong:
|
||||
|
||||
org $09AE64
|
||||
Sprite_SetSpawnedCoords:
|
||||
|
||||
org $09AD58
|
||||
GiveRupeeGift:
|
||||
|
||||
org $0ABA4F
|
||||
OverworldMap_InitGfx:
|
||||
|
||||
org $0ABA99
|
||||
OverworldMap_DarkWorldTilemap:
|
||||
|
||||
org $0ABAB9
|
||||
OverworldMap_LoadSprGfx:
|
||||
|
||||
org $0CD7D1
|
||||
NameFile_MakeScreenVisible:
|
||||
org $0CDB3E
|
||||
InitializeSaveFile:
|
||||
org $0CDBC0
|
||||
InitializeSaveFile_build_checksum:
|
||||
|
||||
org $0DBA71
|
||||
GetRandomInt:
|
||||
|
||||
org $0DBA80
|
||||
OAM_AllocateFromRegionA:
|
||||
org $0DBA84
|
||||
OAM_AllocateFromRegionB:
|
||||
org $0DBA88
|
||||
OAM_AllocateFromRegionC:
|
||||
org $0DBA8C
|
||||
OAM_AllocateFromRegionD:
|
||||
org $0DBA90
|
||||
OAM_AllocateFromRegionE:
|
||||
org $0DBA94
|
||||
OAM_AllocateFromRegionF:
|
||||
|
||||
org $0DBB67
|
||||
Sound_SetSfxPanWithPlayerCoords:
|
||||
|
||||
org $0DBB6E
|
||||
Sound_SetSfx1PanLong:
|
||||
|
||||
org $0DBB7C
|
||||
Sound_SetSfx2PanLong:
|
||||
|
||||
org $0DBB8A
|
||||
Sound_SetSfx3PanLong:
|
||||
|
||||
org $0DDB7F
|
||||
HUD_RefreshIconLong:
|
||||
|
||||
org $0DDD32
|
||||
Equipment_UpdateEquippedItemLong:
|
||||
|
||||
org $0DE01E ; 6E10E - equipment.asm : 787
|
||||
BottleMenu_movingOn:
|
||||
|
||||
org $0DE346
|
||||
RestoreNormalMenu:
|
||||
|
||||
org $0DE395
|
||||
Equipment_SearchForEquippedItemLong:
|
||||
|
||||
org $0DE9C8
|
||||
DrawProgressIcons: ; this returns short
|
||||
|
||||
org $0DED29
|
||||
DrawEquipment: ; this returns short
|
||||
|
||||
org $0DFA78
|
||||
HUD_RebuildLong:
|
||||
|
||||
org $0DFA88
|
||||
HUD_RebuildIndoor_Palace:
|
||||
|
||||
org $0DFA88
|
||||
HUD_RebuildLong2:
|
||||
|
||||
org $0EEE10
|
||||
Messaging_Text:
|
||||
|
||||
org $0FFD94
|
||||
Overworld_TileAttr:
|
||||
|
||||
org $1BC97C
|
||||
Overworld_DrawPersistentMap16:
|
||||
|
||||
org $1BED03
|
||||
Palette_Sword:
|
||||
|
||||
org $1BED29
|
||||
Palette_Shield:
|
||||
|
||||
org $1BEDF9
|
||||
Palette_ArmorAndGloves:
|
||||
|
||||
org $1BEE52
|
||||
Palette_Hud:
|
||||
|
||||
org $1BEF96
|
||||
Palette_SelectScreen:
|
||||
|
||||
org $1CFAAA
|
||||
ShopKeeper_RapidTerminateReceiveItem:
|
||||
|
||||
org $1CF500
|
||||
Sprite_NullifyHookshotDrag:
|
||||
|
||||
org $1CF537
|
||||
Ancilla_CheckForAvailableSlot:
|
||||
|
||||
org $1DE9B6
|
||||
Filter_MajorWhitenMain:
|
||||
|
||||
org $1DF65D
|
||||
Sprite_SpawnDynamically:
|
||||
|
||||
org $1DF65F
|
||||
Sprite_SpawnDynamically_arbitrary:
|
||||
|
||||
org $1DFD4B
|
||||
DiggingGameGuy_AttemptPrizeSpawn:
|
||||
|
||||
org $1EDE28
|
||||
Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm
|
||||
|
||||
org $1EF4E7
|
||||
Sprite_PlayerCantPassThrough:
|
||||
;================================================================================
|
||||
|
||||
incsrc bombos_only.asm
|
||||
|
||||
0
data/a6fc4_bombos.gfx → a6fc4_bombos.gfx
Normal file → Executable file
0
data/a6fc4_bombos.gfx → a6fc4_bombos.gfx
Normal file → Executable file
0
data/a6fc4_ether.gfx → a6fc4_ether.gfx
Normal file → Executable file
0
data/a6fc4_ether.gfx → a6fc4_ether.gfx
Normal file → Executable file
@@ -1,118 +1,127 @@
|
||||
;================================================================================
|
||||
; Accessibility Fixes
|
||||
;================================================================================
|
||||
FlipGreenPendant:
|
||||
LDA $0C : CMP #$38 : BNE + ; check if we have green pendant
|
||||
ORA #$40 : STA $0C ; flip it
|
||||
+
|
||||
|
||||
LDA $0D : STA $0802, X ; stuff we wrote over "Set CHR, palette, and priority of the sprite"
|
||||
LDA $0C : STA $0803, X
|
||||
RTL
|
||||
;================================================================================
|
||||
ConditionalLightning:
|
||||
CMP.b #$05 : BEQ ++
|
||||
CMP.b #$2C : BEQ ++
|
||||
CMP.b #$5A : BEQ ++
|
||||
LDA.l DisableFlashing : BNE ++
|
||||
LDA.b #$32 : STA.w CGADSUBQ
|
||||
LDA.b #$32 : STA.w $9A
|
||||
RTL
|
||||
++
|
||||
LDA.b #$72
|
||||
STA.b CGADSUBQ
|
||||
STA $9A
|
||||
RTL
|
||||
;================================================================================
|
||||
ConditionalWhitenBg:
|
||||
LDX.b #$00
|
||||
LDA.l DisableFlashing : REP #$20 : BNE +
|
||||
LDA.b Scrap00,X
|
||||
LDA $00,X
|
||||
JSR WhitenLoopReal
|
||||
RTL
|
||||
+
|
||||
LDA.b Scrap00
|
||||
LDA $00
|
||||
JSR WhitenLoopDummy
|
||||
RTL
|
||||
;================================================================================
|
||||
WhitenLoopReal:
|
||||
-
|
||||
LDA.l PaletteBufferAux+$40, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$40, X
|
||||
LDA.l PaletteBufferAux+$50, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$50, X
|
||||
LDA.l PaletteBufferAux+$60, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$60, X
|
||||
LDA.l PaletteBufferAux+$70, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$70, X
|
||||
LDA.l PaletteBufferAux+$80, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$80, X
|
||||
LDA.l PaletteBufferAux+$90, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$90, X
|
||||
LDA.l PaletteBufferAux+$A0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$A0, X
|
||||
LDA.l PaletteBufferAux+$B0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$B0, X
|
||||
LDA.l PaletteBufferAux+$C0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$C0, X
|
||||
LDA.l PaletteBufferAux+$D0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$D0, X
|
||||
LDA.l PaletteBufferAux+$E0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$E0, X
|
||||
LDA $7EC340, X : JSL Filter_Majorly_Whiten_Color : STA $7EC540, X
|
||||
LDA $7EC350, X : JSL Filter_Majorly_Whiten_Color : STA $7EC550, X
|
||||
LDA $7EC360, X : JSL Filter_Majorly_Whiten_Color : STA $7EC560, X
|
||||
LDA $7EC370, X : JSL Filter_Majorly_Whiten_Color : STA $7EC570, X
|
||||
LDA $7EC380, X : JSL Filter_Majorly_Whiten_Color : STA $7EC580, X
|
||||
LDA $7EC390, X : JSL Filter_Majorly_Whiten_Color : STA $7EC590, X
|
||||
LDA $7EC3A0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5A0, X
|
||||
LDA $7EC3B0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5B0, X
|
||||
LDA $7EC3C0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5C0, X
|
||||
LDA $7EC3D0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5D0, X
|
||||
LDA $7EC3E0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5E0, X
|
||||
INX #2 : CPX.b #$10 : BEQ +
|
||||
JMP -
|
||||
+
|
||||
LDA.l PaletteBufferAux+$F0 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F0
|
||||
LDA.l PaletteBufferAux+$F2 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F2
|
||||
LDA.l PaletteBufferAux+$F4 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F4
|
||||
LDA.b GameMode : CMP.w #$0007 : BNE +
|
||||
LDA.b RoomIndex
|
||||
CMP.w #$003C : BEQ ++
|
||||
CMP.w #$009D : BEQ ++
|
||||
CMP.w #$009C : BEQ ++
|
||||
CMP.w #$00A5 : BEQ ++
|
||||
LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F0
|
||||
LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F2
|
||||
LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F4
|
||||
LDA $10 : CMP.w #$07 : BNE +
|
||||
LDA $048E
|
||||
CMP.w #$3C : BEQ ++
|
||||
CMP.w #$9D : BEQ ++
|
||||
CMP.w #$9C : BEQ ++
|
||||
CMP.w #$A5 : BEQ ++
|
||||
+
|
||||
LDA.l PaletteBufferAux+$F6 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F6
|
||||
LDA.l PaletteBufferAux+$F8 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F8
|
||||
LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6
|
||||
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
|
||||
BRA +++
|
||||
++
|
||||
LDA.l PaletteBuffer+$F6 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F6
|
||||
LDA.l PaletteBuffer+$F8 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F8
|
||||
LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6
|
||||
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
|
||||
BRA +++
|
||||
+++
|
||||
LDA.l PaletteBufferAux+$FA : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$FA
|
||||
LDA.l PaletteBufferAux+$FC : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$FC
|
||||
LDA.l PaletteBufferAux+$FE : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$FE
|
||||
LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : STA $7EC5FA
|
||||
LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : STA $7EC5FC
|
||||
LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : STA $7EC5FE
|
||||
REP #$10
|
||||
LDA.l PaletteBuffer+$40 : TAY
|
||||
LDA.l PaletteBufferAux : BNE +
|
||||
LDA $7EC540 : TAY
|
||||
LDA $7EC300 : BNE +
|
||||
TAY
|
||||
+
|
||||
TYA : STA.l PaletteBuffer
|
||||
TYA : STA $7EC500
|
||||
SEP #$30
|
||||
RTS
|
||||
;================================================================================
|
||||
WhitenLoopDummy:
|
||||
-
|
||||
LDA.l PaletteBufferAux+$40, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$40, X
|
||||
LDA.l PaletteBufferAux+$50, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$50, X
|
||||
LDA.l PaletteBufferAux+$60, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$60, X
|
||||
LDA.l PaletteBufferAux+$70, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$70, X
|
||||
LDA.l PaletteBufferAux+$80, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$80, X
|
||||
LDA.l PaletteBufferAux+$90, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$90, X
|
||||
LDA.l PaletteBufferAux+$A0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$A0, X
|
||||
LDA.l PaletteBufferAux+$B0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$B0, X
|
||||
LDA.l PaletteBufferAux+$C0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$C0, X
|
||||
LDA.l PaletteBufferAux+$D0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$D0, X
|
||||
LDA.l PaletteBufferAux+$E0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$E0, X
|
||||
LDA $7EC340, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC540, X
|
||||
LDA $7EC350, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC550, X
|
||||
LDA $7EC360, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC560, X
|
||||
LDA $7EC370, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC570, X
|
||||
LDA $7EC380, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC580, X
|
||||
LDA $7EC390, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC590, X
|
||||
LDA $7EC3A0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5A0, X
|
||||
LDA $7EC3B0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5B0, X
|
||||
LDA $7EC3C0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5C0, X
|
||||
LDA $7EC3D0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5D0, X
|
||||
LDA $7EC3E0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5E0, X
|
||||
INX #2 : CPX.b #$10 : BEQ +
|
||||
JMP -
|
||||
+
|
||||
LDA.l PaletteBufferAux+$F0 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F0
|
||||
LDA.l PaletteBufferAux+$F2 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F2
|
||||
LDA.l PaletteBufferAux+$F4 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F4
|
||||
LDA.b GameMode : CMP.w #$0007 : BNE + ; only light invisifloor if we're in dungeon submodule
|
||||
LDA.b RoomIndex
|
||||
CMP.w #$003C : BEQ ++ ; hookshot cave
|
||||
CMP.w #$009D : BEQ ++ ; gt right
|
||||
CMP.w #$009C : BEQ ++ ; gt big room
|
||||
CMP.w #$00A5 : BEQ ++ ; wizzrobes 1
|
||||
LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F0
|
||||
LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F2
|
||||
LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F4
|
||||
LDA $10 : CMP.w #$07 : BNE + ; only light invisifloor if we're in dungeon submodule
|
||||
LDA $048E
|
||||
CMP.w #$3C : BEQ ++ ; hookshot cave
|
||||
CMP.w #$9D : BEQ ++ ; gt right
|
||||
CMP.w #$9C : BEQ ++ ; gt big room
|
||||
CMP.w #$A5 : BEQ ++ ; wizzrobes 1
|
||||
+
|
||||
LDA.l PaletteBufferAux+$F6 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F6
|
||||
LDA.l PaletteBufferAux+$F8 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F8
|
||||
LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F6
|
||||
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F8
|
||||
BRA +++
|
||||
++
|
||||
LDA.l PaletteBufferAux+$F6 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F6
|
||||
LDA.l PaletteBufferAux+$F8 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F8
|
||||
LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6
|
||||
LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8
|
||||
BRA +++
|
||||
+++
|
||||
LDA.l PaletteBufferAux+$FA : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$FA
|
||||
LDA.l PaletteBufferAux+$FC : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$FC
|
||||
LDA.l PaletteBufferAux+$FE : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$FE
|
||||
LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : LDA $7EC5FA
|
||||
LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : LDA $7EC5FC
|
||||
LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : LDA $7EC5FE
|
||||
REP #$10
|
||||
LDA.l PaletteBuffer+$40 : TAY
|
||||
LDA.l PaletteBufferAux : BNE +
|
||||
LDA $7EC540 : TAY
|
||||
LDA $7EC300 : BNE +
|
||||
TAY
|
||||
+
|
||||
TYA : STA.l PaletteBuffer
|
||||
TYA : STA $7EC500
|
||||
SEP #$30
|
||||
RTS
|
||||
;================================================================================
|
||||
@@ -120,144 +129,144 @@ RestoreBgEther:
|
||||
LDX.b #$00
|
||||
LDA.l DisableFlashing : REP #$20 : BNE +
|
||||
-
|
||||
LDA.b Scrap00,X
|
||||
LDA.l PaletteBufferAux+$40, X : STA.l PaletteBuffer+$40, X
|
||||
LDA.l PaletteBufferAux+$50, X : STA.l PaletteBuffer+$50, X
|
||||
LDA.l PaletteBufferAux+$60, X : STA.l PaletteBuffer+$60, X
|
||||
LDA.l PaletteBufferAux+$70, X : STA.l PaletteBuffer+$70, X
|
||||
LDA.l PaletteBufferAux+$80, X : STA.l PaletteBuffer+$80, X
|
||||
LDA.l PaletteBufferAux+$90, X : STA.l PaletteBuffer+$90, X
|
||||
LDA.l PaletteBufferAux+$A0, X : STA.l PaletteBuffer+$A0, X
|
||||
LDA.l PaletteBufferAux+$B0, X : STA.l PaletteBuffer+$B0, X
|
||||
LDA.l PaletteBufferAux+$C0, X : STA.l PaletteBuffer+$C0, X
|
||||
LDA.l PaletteBufferAux+$D0, X : STA.l PaletteBuffer+$D0, X
|
||||
LDA.l PaletteBufferAux+$E0, X : STA.l PaletteBuffer+$E0, X
|
||||
LDA.l PaletteBufferAux+$F0, X : STA.l PaletteBuffer+$F0, X
|
||||
LDA $00,X
|
||||
LDA $7EC340, X : STA $7EC540, X
|
||||
LDA $7EC350, X : STA $7EC550, X
|
||||
LDA $7EC360, X : STA $7EC560, X
|
||||
LDA $7EC370, X : STA $7EC570, X
|
||||
LDA $7EC380, X : STA $7EC580, X
|
||||
LDA $7EC390, X : STA $7EC590, X
|
||||
LDA $7EC3A0, X : STA $7EC5A0, X
|
||||
LDA $7EC3B0, X : STA $7EC5B0, X
|
||||
LDA $7EC3C0, X : STA $7EC5C0, X
|
||||
LDA $7EC3D0, X : STA $7EC5D0, X
|
||||
LDA $7EC3E0, X : STA $7EC5E0, X
|
||||
LDA $7EC3F0, X : STA $7EC5F0, X
|
||||
INX #2 : CPX.b #$10 : BNE -
|
||||
BRA ++
|
||||
+
|
||||
-
|
||||
LDA.b Scrap00
|
||||
LDA.l PaletteBufferAux+$40, X : LDA.l PaletteBuffer+$40, X
|
||||
LDA.l PaletteBufferAux+$50, X : LDA.l PaletteBuffer+$50, X
|
||||
LDA.l PaletteBufferAux+$60, X : LDA.l PaletteBuffer+$60, X
|
||||
LDA.l PaletteBufferAux+$70, X : LDA.l PaletteBuffer+$70, X
|
||||
LDA.l PaletteBufferAux+$80, X : LDA.l PaletteBuffer+$80, X
|
||||
LDA.l PaletteBufferAux+$90, X : LDA.l PaletteBuffer+$90, X
|
||||
LDA.l PaletteBufferAux+$A0, X : LDA.l PaletteBuffer+$A0, X
|
||||
LDA.l PaletteBufferAux+$B0, X : LDA.l PaletteBuffer+$B0, X
|
||||
LDA.l PaletteBufferAux+$C0, X : LDA.l PaletteBuffer+$C0, X
|
||||
LDA.l PaletteBufferAux+$D0, X : LDA.l PaletteBuffer+$D0, X
|
||||
LDA.l PaletteBufferAux+$E0, X : LDA.l PaletteBuffer+$E0, X
|
||||
LDA.l PaletteBufferAux+$F0, X : LDA.l PaletteBuffer+$F0, X
|
||||
LDA $00
|
||||
LDA $7EC340, X : LDA $7EC540, X
|
||||
LDA $7EC350, X : LDA $7EC550, X
|
||||
LDA $7EC360, X : LDA $7EC560, X
|
||||
LDA $7EC370, X : LDA $7EC570, X
|
||||
LDA $7EC380, X : LDA $7EC580, X
|
||||
LDA $7EC390, X : LDA $7EC590, X
|
||||
LDA $7EC3A0, X : LDA $7EC5A0, X
|
||||
LDA $7EC3B0, X : LDA $7EC5B0, X
|
||||
LDA $7EC3C0, X : LDA $7EC5C0, X
|
||||
LDA $7EC3D0, X : LDA $7EC5D0, X
|
||||
LDA $7EC3E0, X : LDA $7EC5E0, X
|
||||
LDA $7EC3F0, X : LDA $7EC5F0, X
|
||||
INX #2 : CPX.b #$10 : BNE -
|
||||
BRA ++
|
||||
++
|
||||
JML $82FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs
|
||||
JML $02FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs
|
||||
;================================================================================
|
||||
DDMConditionalLightning:
|
||||
LDA.l DisableFlashing
|
||||
REP #$20
|
||||
BNE +
|
||||
LDA.w Scrap
|
||||
LDA.w $0000
|
||||
LDX.b #$02
|
||||
JML $87FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00
|
||||
JML $07FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00
|
||||
+
|
||||
LDA.b Scrap00 : LDX.b #$02 : LDY.b #$00
|
||||
LDA.b $00 : LDX.b #$02 : LDY #$00
|
||||
-
|
||||
LDA.w $F4EB, Y : LDA.l PaletteBuffer+$60, X
|
||||
LDA.w $F4F9, Y : LDA.l PaletteBuffer+$70, X
|
||||
LDA.w $F507, Y : LDA.l PaletteBuffer+$90, X
|
||||
LDA.w $F515, Y : LDA.l PaletteBuffer+$E0, X
|
||||
LDA.w $F523, Y : LDA.l PaletteBuffer+$F0, X
|
||||
LDA $F4EB, Y : LDA $7EC560, X
|
||||
LDA $F4F9, Y : LDA $7EC570, X
|
||||
LDA $F507, Y : LDA $7EC590, X
|
||||
LDA $F515, Y : LDA $7EC5E0, X
|
||||
LDA $F523, Y : LDA $7EC5F0, X
|
||||
INY #2
|
||||
INX #2 : CPX.b #$10 : BNE -
|
||||
JML $87FAAC ; Bank0E.asm : 4754 both branches converge here
|
||||
JML $07FAAC ; Bank0E.asm : 4754 both branches converge here
|
||||
;================================================================================
|
||||
ConditionalGTFlash:
|
||||
LDA.l DisableFlashing : REP #$20 : BNE +
|
||||
LDA.w Scrap
|
||||
LDA $0000
|
||||
-
|
||||
LDA.w $F9C1, Y : STA.l PaletteBuffer+$D0, X
|
||||
LDA $F9C1, Y : STA $7EC5D0, X
|
||||
INY #2
|
||||
INX #2 : CPX.b #$10 : BNE -
|
||||
RTL
|
||||
+
|
||||
LDA.b Scrap00
|
||||
LDA $00
|
||||
-
|
||||
LDA.w $F9C1, Y : LDA.l PaletteBuffer+$D0, X
|
||||
LDA $F9C1, Y : LDA $7EC5D0, X
|
||||
INY #2
|
||||
INX #2 : CPX.b #$10 : BNE -
|
||||
RTL
|
||||
;================================================================================
|
||||
ConditionalRedFlash:
|
||||
LDA.l DisableFlashing : REP #$20 : BNE +
|
||||
LDA.b Scrap,X
|
||||
LDA.w #$1D59 : STA.l PaletteBuffer+$DA
|
||||
LDA.w #$25FF : STA.l PaletteBuffer+$DC
|
||||
LDA $00,X
|
||||
LDA.w #$1D59 : STA $7EC5DA
|
||||
LDA.w #$25FF : STA $7EC5DC
|
||||
LDA.w #$001A
|
||||
RTL
|
||||
+
|
||||
LDA.b Scrap00
|
||||
LDA.w #$1D59 : LDA.l PaletteBuffer+$DA
|
||||
LDA.w #$25FF : LDA.l PaletteBuffer+$DC
|
||||
LDA $00
|
||||
LDA.w #$1D59 : LDA $7EC5DA
|
||||
LDA.w #$25FF : LDA $7EC5DC
|
||||
LDA.w #$0000
|
||||
RTL
|
||||
;================================================================================
|
||||
ConditionalPedAncilla:
|
||||
LDA.l DisableFlashing : REP #$20 : BNE +
|
||||
LDA.b Scrap,X
|
||||
LDA.b Scrap00 : STA.b Scrap04
|
||||
LDA.b Scrap02 : STA.b Scrap06
|
||||
LDA $00,X
|
||||
LDA $00 : STA $04
|
||||
LDA $02 : STA $06
|
||||
RTL
|
||||
+
|
||||
LDA.b Scrap
|
||||
LDA.b Scrap00 : LDA.b Scrap04
|
||||
LDA.b Scrap02 : LDA.b Scrap06
|
||||
LDA $00
|
||||
LDA $00 : LDA $04
|
||||
LDA $02 : LDA $06
|
||||
RTL
|
||||
;================================================================================
|
||||
LoadElectroPalette:
|
||||
REP #$20
|
||||
LDA.w #$0202 : STA.b Scrap0C
|
||||
LDA.w #$0404 : STA.b Scrap0E
|
||||
LDA.w #$001B : STA.b Scrap02
|
||||
LDA.w #$0202 : STA $0C
|
||||
LDA.w #$0404 : STA $0E
|
||||
LDA.w #$001B : STA $02
|
||||
SEP #$10
|
||||
LDX.b Scrap0C : LDA.l $9BEBB4, X : AND.w #$00FF : ADC.w #$D630
|
||||
LDX $0C : LDA $1BEBB4, X : AND.w #$00FF : ADC #$D630
|
||||
REP #$10 : LDX.w #$01B2 : LDY.w #$0002
|
||||
JSR ConditionalLoadGearPalette
|
||||
SEP #$10
|
||||
LDX.b Scrap0D
|
||||
LDA.l $9BEBC1, X : AND.w #$00FF : ADC.w #$D648
|
||||
LDX $0D
|
||||
LDA $1BEBC1, X : AND.w #$00FF : ADC #$D648
|
||||
REP #$10 : LDX.w #$01B8 : LDY.w #$0003
|
||||
JSR ConditionalLoadGearPalette
|
||||
SEP #$10
|
||||
LDX.b Scrap0E
|
||||
LDA.l $9BEC06, X : AND.w #$00FF : ASL A : ADC.w #$D308
|
||||
LDX $0E
|
||||
LDA $1BEC06, X : AND.w #$00FF : ASL A : ADC #$D308
|
||||
REP #$10 : LDX.w #$01E2 : LDY.w #$000E
|
||||
JSR ConditionalLoadGearPalette
|
||||
SEP #$30
|
||||
INC.b NMICGRAM
|
||||
INC $15
|
||||
RTL
|
||||
;================================================================================
|
||||
ConditionalLoadGearPalette:
|
||||
STA.b Scrap00
|
||||
STA $00
|
||||
SEP #$20
|
||||
LDA.l DisableFlashing : REP #$20 : BNE +
|
||||
LDA.b Scrap,X
|
||||
LDA $00,X
|
||||
-
|
||||
LDA.b [Scrap00]
|
||||
STA.l PaletteBuffer, X
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
LDA [$00]
|
||||
STA $7EC500, X
|
||||
INC $00 : INC $00
|
||||
INX #2
|
||||
DEY
|
||||
BPL -
|
||||
RTS
|
||||
+
|
||||
LDA.b Scrap
|
||||
LDA $00
|
||||
-
|
||||
LDA.b [Scrap00]
|
||||
LDA.l PaletteBuffer, X
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
LDA [$00]
|
||||
LDA $7EC500, X
|
||||
INC $00 : INC $00
|
||||
INX #2
|
||||
DEY
|
||||
BPL -
|
||||
@@ -272,13 +281,13 @@ RestoreElectroPalette:
|
||||
LDX.w #$01E2 : LDY.w #$000E
|
||||
JSR FillPaletteBufferFromAux
|
||||
SEP #$30
|
||||
INC.b NMICGRAM
|
||||
INC $15
|
||||
RTL
|
||||
;================================================================================
|
||||
FillPaletteBufferFromAux:
|
||||
-
|
||||
LDA.l PaletteBufferAux, X
|
||||
STA.l PaletteBuffer, X
|
||||
LDA $7EC300, X
|
||||
STA $7EC500, X
|
||||
INX #2
|
||||
DEY
|
||||
BPL -
|
||||
|
||||
BIN
bin/linux/asar
BIN
bin/linux/asar
Binary file not shown.
BIN
bin/macos/asar
BIN
bin/macos/asar
Binary file not shown.
Binary file not shown.
203
bombos_only.asm
Normal file
203
bombos_only.asm
Normal file
@@ -0,0 +1,203 @@
|
||||
!ITEMCOUNT = $F0
|
||||
|
||||
; ============== Replace all picked up item icons with bombos =================
|
||||
org AddReceivedItemExpanded_y_offsets
|
||||
fillbyte -4
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org AddReceivedItemExpanded_x_offsets
|
||||
fillbyte 0
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org AddReceivedItemExpanded_item_graphics_indices
|
||||
fillbyte $1B
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org AddReceivedItemExpanded_wide_item_flag
|
||||
fillbyte $02
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org AddReceivedItemExpanded_properties
|
||||
fillbyte 4
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org GetSpriteID_gfxSlots
|
||||
fillbyte $1B
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org GetSpritePalette_gfxPalettes
|
||||
fillbyte $08
|
||||
fill !ITEMCOUNT
|
||||
|
||||
org IsNarrowSprite_smallSprites
|
||||
padbyte $FF
|
||||
pad PrepDynamicTile
|
||||
; =============================================================================
|
||||
|
||||
; ===================== Remove attempt to animate rupees ======================
|
||||
org $08C672
|
||||
LDA.b #$0F : NOP
|
||||
; =============================================================================
|
||||
|
||||
|
||||
; ===================== Replace all menu icons with bombos ====================
|
||||
macro bombos_icon()
|
||||
dw $287D, $287E, $E87E, $E87D ; Bombos
|
||||
endmacro
|
||||
|
||||
macro empty_icon()
|
||||
dw $20F5, $20F5, $20F5, $20F5 ; No bombos
|
||||
endmacro
|
||||
|
||||
org $0DF649
|
||||
%empty_icon() ; No bow
|
||||
%bombos_icon() ; Empty bow
|
||||
%bombos_icon() ; Bow and arrows
|
||||
%bombos_icon() ; Empty silvers bow
|
||||
%bombos_icon() ; Silver bow and arrows
|
||||
|
||||
%empty_icon() ; No boomerang
|
||||
%bombos_icon() ; Blue boomerang
|
||||
%bombos_icon() ; Red boomerang
|
||||
|
||||
%empty_icon() ; No hookshot
|
||||
%bombos_icon() ; Hookshot
|
||||
|
||||
%empty_icon() ; No bombs
|
||||
%bombos_icon() ; Bombs
|
||||
|
||||
%empty_icon() ; No powder
|
||||
%bombos_icon() ; Mushroom
|
||||
%bombos_icon() ; Powder
|
||||
|
||||
%empty_icon() ; No fire rod
|
||||
%bombos_icon() ; Fire rod
|
||||
|
||||
%empty_icon() ; No ice rod
|
||||
%bombos_icon() ; Ice rod
|
||||
|
||||
%empty_icon() ; No bombos
|
||||
%bombos_icon() ; Bombos
|
||||
|
||||
%empty_icon() ; No ether
|
||||
%bombos_icon() ; Ether
|
||||
|
||||
%empty_icon() ; No quake
|
||||
%bombos_icon() ; Quake
|
||||
|
||||
%empty_icon() ; No lamp
|
||||
%bombos_icon() ; Lamp
|
||||
|
||||
%empty_icon() ; No hammer
|
||||
%bombos_icon() ; Hammer
|
||||
|
||||
%empty_icon() ; No flute
|
||||
%bombos_icon() ; Shovel
|
||||
%bombos_icon() ; Flute (inactive)
|
||||
%bombos_icon() ; Flute (active)
|
||||
|
||||
%empty_icon() ; No net
|
||||
%bombos_icon() ; Net
|
||||
|
||||
%empty_icon() ; No book
|
||||
%bombos_icon() ; Book of Mudora
|
||||
|
||||
%empty_icon() ; No bottle
|
||||
%bombos_icon() ; Mushroom
|
||||
%bombos_icon() ; Empty bottle
|
||||
%bombos_icon() ; Red potion
|
||||
%bombos_icon() ; Green potion
|
||||
%bombos_icon() ; Blue potion
|
||||
%bombos_icon() ; Fairy
|
||||
%bombos_icon() ; Bee
|
||||
%bombos_icon() ; Good bee
|
||||
|
||||
%empty_icon() ; No somaria
|
||||
%bombos_icon() ; Cane of Somaria
|
||||
|
||||
%empty_icon() ; No byrna
|
||||
%bombos_icon() ; Cane of Byrna
|
||||
|
||||
%empty_icon() ; No cape
|
||||
%bombos_icon() ; Cape
|
||||
|
||||
%empty_icon() ; No mirror
|
||||
%bombos_icon() ; Map
|
||||
%bombos_icon() ; Mirror
|
||||
%bombos_icon() ; Triforce (displays as arrows and bombs)
|
||||
|
||||
%empty_icon() ; No glove
|
||||
%bombos_icon() ; Power glove
|
||||
%bombos_icon() ; Titan's mitt
|
||||
|
||||
%empty_icon() ; No boots
|
||||
%bombos_icon() ; Pegasus boots
|
||||
|
||||
%empty_icon() ; No flippers
|
||||
%bombos_icon() ; Flippers
|
||||
|
||||
%empty_icon() ; No pearl
|
||||
%bombos_icon() ; Moon pearl
|
||||
|
||||
%empty_icon() ; Nothing
|
||||
|
||||
%empty_icon() ; No sword
|
||||
%bombos_icon() ; Fighter sword
|
||||
%bombos_icon() ; Master sword
|
||||
%bombos_icon() ; Tempered sword
|
||||
%bombos_icon() ; Gold sword
|
||||
|
||||
%empty_icon() ; No shield
|
||||
%bombos_icon() ; Fighter shield
|
||||
%bombos_icon() ; Fire shield
|
||||
%bombos_icon() ; Mirror shield
|
||||
|
||||
%bombos_icon() ; Green mail
|
||||
%bombos_icon() ; Blue mail
|
||||
%bombos_icon() ; Red mail
|
||||
|
||||
%empty_icon() ; No compass
|
||||
%bombos_icon() ; Compass
|
||||
|
||||
%empty_icon() ; No big key
|
||||
%bombos_icon() ; Big key
|
||||
%bombos_icon() ; Big key and chest
|
||||
|
||||
%empty_icon() ; No map
|
||||
%bombos_icon() ; Map
|
||||
|
||||
%empty_icon() ; No red pendant
|
||||
%bombos_icon() ; Red pendant
|
||||
|
||||
%empty_icon() ; No blue pendant
|
||||
%bombos_icon() ; Blue pendant
|
||||
|
||||
%empty_icon() ; No green pendant
|
||||
%bombos_icon() ; Green pendant
|
||||
|
||||
%empty_icon() ; No white glove?
|
||||
%bombos_icon() ; White glove?
|
||||
|
||||
%empty_icon() ; 0 heart pieces
|
||||
dw $287D, $20F5, $20F5, $20F5 ; 1 heart piece
|
||||
dw $287D, $20F5, $E87E, $20F5 ; 2 heart pieces
|
||||
dw $287D, $287E, $E87E, $20F5 ; 3 heart pieces
|
||||
; =============================================================================
|
||||
|
||||
; ===================== Replace menu pendants with bombos =====================
|
||||
org DrawPendantCrystalDiagram_row0
|
||||
dw $28FB, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $68FB
|
||||
dw $28FC, $24F5, $24F5, $24F5, $307D, $307E, $24F5, $24F5, $24F5, $68FC
|
||||
dw $28FC, $24F5, $24F5, $24F5, $F07E, $F07D, $24F5, $24F5, $24F5, $68FC
|
||||
dw $28FC, $24F5, $307D, $307E, $24F5, $24F5, $307D, $307E, $24F5, $68FC
|
||||
dw $28FC, $24F5, $F07E, $F07D, $24F5, $24F5, $F07E, $F07D, $24F5, $68FC
|
||||
dw $28FC, $24F5, $24F5, $24F5, $307D, $307E, $24F5, $24F5, $24F5, $68FC
|
||||
dw $28FC, $24F5, $307D, $307E, $307D, $307E, $307D, $307E, $24F5, $68FC
|
||||
dw $28FC, $24F5, $F07E, $F07D, $F07E, $F07D, $F07E, $F07D, $24F5, $68FC
|
||||
dw $A8FB, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $E8FB
|
||||
; =============================================================================
|
||||
|
||||
; ===================== Replace menu pendants with bombos =====================
|
||||
org $308022
|
||||
db $00
|
||||
; =============================================================================
|
||||
@@ -2,23 +2,21 @@
|
||||
; Randomize Book of Mudora
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadLibraryItemGFX:
|
||||
%GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues)
|
||||
JSL.l AttemptItemSubstitution
|
||||
JSL.l ResolveLootIDLong
|
||||
STA.w SpriteID, X
|
||||
JSL.l PrepDynamicTile_loot_resolved
|
||||
%GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues)
|
||||
STA $0E80, X ; Store item type
|
||||
JSL.l PrepDynamicTile
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawLibraryItemGFX:
|
||||
PHA
|
||||
LDA.w SpriteID, X
|
||||
JSL.l DrawDynamicTile
|
||||
PLA
|
||||
PHA
|
||||
LDA $0E80, X ; Retrieve stored item type
|
||||
JSL.l DrawDynamicTile
|
||||
PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetLibraryItem:
|
||||
LDY.w SpriteID, X
|
||||
JSL.l ItemSet_Library ; contains thing we wrote over
|
||||
LDY $0E80, X ; Retrieve stored item type
|
||||
JSL.l ItemSet_Library ; contains thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -26,76 +24,54 @@ RTL
|
||||
;================================================================================
|
||||
; Randomize Bonk Keys
|
||||
;--------------------------------------------------------------------------------
|
||||
!REDRAW = "$7F5000"
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadBonkItemGFX:
|
||||
LDA.b #$08 : STA.w SpriteOAMProp, X ; thing we wrote over
|
||||
LDA.b #$08 : STA $0F50, X ; thing we wrote over
|
||||
LoadBonkItemGFX_inner:
|
||||
LDA.b #$00 : STA.l RedrawFlag
|
||||
LDA.b #$00 : STA !REDRAW
|
||||
JSR LoadBonkItem
|
||||
JSL.l AttemptItemSubstitution
|
||||
JSL.l ResolveLootIDLong
|
||||
STA.w SpriteItemType, X
|
||||
STA.w SpriteID, X
|
||||
JSL.l PrepDynamicTile
|
||||
PHA : PHX
|
||||
LDA.w SpriteID,X : TAX
|
||||
LDA.l SpriteProperties_standing_width,X : BNE +
|
||||
LDA.b #$00 : STA.l SpriteOAM : STA.l SpriteOAM+8
|
||||
+
|
||||
PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawBonkItemGFX:
|
||||
PHA
|
||||
LDA.l RedrawFlag : BEQ .skipInit
|
||||
JSL.l LoadBonkItemGFX_inner
|
||||
BRA .done ; don't draw on the init frame
|
||||
|
||||
PHA
|
||||
LDA !REDRAW : BEQ .skipInit ; skip init if already ready
|
||||
JSL.l LoadBonkItemGFX_inner
|
||||
BRA .done ; don't draw on the init frame
|
||||
|
||||
.skipInit
|
||||
LDA.w SpriteID,X
|
||||
JSL.l DrawDynamicTileNoShadow
|
||||
|
||||
.done
|
||||
PLA
|
||||
|
||||
JSR LoadBonkItem
|
||||
JSL.l DrawDynamicTileNoShadow
|
||||
|
||||
.done
|
||||
PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GiveBonkItem:
|
||||
JSR LoadBonkItem
|
||||
JSR.w AbsorbKeyCheck : BCC .notKey
|
||||
CMP #$24 : BNE .notKey
|
||||
.key
|
||||
PHY : LDY.b #$24 : JSL.l AddInventory : PLY ; do inventory processing for a small key
|
||||
LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys
|
||||
LDA CurrentSmallKeys : INC A : STA CurrentSmallKeys
|
||||
LDA.b #$2F : JSL.l Sound_SetSfx3PanLong
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
JSL CountBonkItem
|
||||
RTL
|
||||
.notKey
|
||||
PHY : TAY : JSL.l Link_ReceiveItem : PLY
|
||||
JSL CountBonkItem
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadBonkItem:
|
||||
LDA.b RoomIndex ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte
|
||||
CMP.b #115 : BNE + ; Desert Bonk Key
|
||||
LDA $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte
|
||||
CMP #115 : BNE + ; Desert Bonk Key
|
||||
LDA.l BonkKey_Desert
|
||||
BRA ++
|
||||
+ : CMP.b #140 : BNE + ; GTower Bonk Key
|
||||
+ : CMP #140 : BNE + ; GTower Bonk Key
|
||||
LDA.l BonkKey_GTower
|
||||
BRA ++
|
||||
+
|
||||
LDA.b #$24 ; default to small key
|
||||
++
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
AbsorbKeyCheck:
|
||||
PHA
|
||||
CMP.b #$24 : BEQ .key
|
||||
CMP.b #$A0 : BCC .not_key
|
||||
CMP.b #$B0 : BCS .not_key
|
||||
AND.b #$0F : ASL
|
||||
CMP.w DungeonID : BNE .not_key
|
||||
.key
|
||||
PLA
|
||||
SEC
|
||||
RTS
|
||||
.not_key
|
||||
PLA
|
||||
CLC
|
||||
RTS
|
||||
|
||||
56
boots.asm
56
boots.asm
@@ -3,25 +3,25 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
ModifyBoots:
|
||||
PHA
|
||||
LDA.l BootsModifier : CMP.b #$01 : BNE +
|
||||
PLA : AND.l AbilityFlags : ORA.b #$04 : RTL ; yes boots
|
||||
LDA BootsModifier : CMP.b #$01 : BNE +
|
||||
PLA : AND AbilityFlags : ORA.b #$04 : RTL ; yes boots
|
||||
+ : CMP.b #$02 : BNE +
|
||||
PLA : AND.l AbilityFlags : AND.b #$FB : RTL ; no boots
|
||||
+ : LDA.l FakeBoots : CMP.b #$01 : BNE +
|
||||
LDA.b LinkSlipping : BEQ ++ : LDA.b $59 : BNE + ; hover check
|
||||
++ : PLA : AND.l AbilityFlags : ORA.b #$04 : RTL ; yes boots, not hovering
|
||||
PLA : AND AbilityFlags : AND.b #$FB : RTL ; no boots
|
||||
+ : LDA FakeBoots : CMP.b #$01 : BNE +
|
||||
LDA $5B : BEQ ++ : LDA $59 : BNE + ; hover check
|
||||
++ : PLA : AND AbilityFlags : ORA.b #$04 : RTL ; yes boots, not hovering
|
||||
+
|
||||
PLA
|
||||
AND.l AbilityFlags ; regular boots
|
||||
AND AbilityFlags ; regular boots
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
AddBonkTremors:
|
||||
PHA
|
||||
LDA.b $46 : BNE + ; Check for incapacitated Link
|
||||
LDA $46 : BNE + ; Check for incapacitated Link
|
||||
JSL.l IncrementBonkCounter
|
||||
+
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||
LDA BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA BootsEquipment : BNE + ; Check for Boots
|
||||
PLA : RTL
|
||||
+
|
||||
PLA
|
||||
@@ -31,46 +31,46 @@ RTL
|
||||
BonkBreakableWall:
|
||||
PHX : PHP
|
||||
SEP #$30 ; set 8-bit accumulator and index registers
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||
LDA BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA BootsEquipment : BNE + ; Check for Boots
|
||||
PLP : PLX : LDA.w #$0000 : RTL
|
||||
+
|
||||
PLP : PLX
|
||||
LDA.w $0372 : AND.w #$00FF ; things we wrote over
|
||||
LDA $0372 : AND.w #$00FF ; things we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
BonkRockPile:
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||
LDA BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA BootsEquipment : BNE + ; Check for Boots
|
||||
LDA.b #$00 : RTL
|
||||
+
|
||||
LDA.w TileActBE : AND.b #$70 ; things we wrote over
|
||||
LDA $02EF : AND.b #$70 ; things we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GravestoneHook:
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BEQ .done ; Check for Boots
|
||||
LDA BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA BootsEquipment : BEQ .done ; Check for Boots
|
||||
+
|
||||
LDA.w $0372 : BEQ .done ; things we wrote over
|
||||
LDA $0372 : BEQ .done ; things we wrote over
|
||||
JML.l moveGravestone
|
||||
.done
|
||||
JML.l GravestoneHook_continue
|
||||
;--------------------------------------------------------------------------------
|
||||
JumpDownLedge:
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||
LDA BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA BootsEquipment : BNE + ; Check for Boots
|
||||
; Disarm Waterwalk
|
||||
LDA.b LinkSlipping : CMP.b #$01 : BNE +
|
||||
STZ.b LinkSlipping
|
||||
LDA $5B : CMP.b #$01 : BNE +
|
||||
STZ $5B
|
||||
+
|
||||
LDA.b IndoorsFlag : BNE .done : LDA.b #$02 : STA.b LinkLayer ; things we wrote over
|
||||
LDA $1B : BNE .done : LDA.b #$02 : STA $EE ; things we wrote over
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
BonkRecoil:
|
||||
LDA.l BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA.l BootsEquipment : BNE + ; Check for Boots
|
||||
LDA.b #$16 : STA.b LinkRecoilZ : RTL
|
||||
LDA BootsModifier : CMP.b #$01 : BEQ +
|
||||
LDA BootsEquipment : BNE + ; Check for Boots
|
||||
LDA.b #$16 : STA $29 : RTL
|
||||
+
|
||||
LDA.b #$24 : STA.b LinkRecoilZ ; things we wrote over
|
||||
LDA.b #$24 : STA $29 ; things we wrote over
|
||||
RTL
|
||||
|
||||
142
bugfixes.asm
142
bugfixes.asm
@@ -2,8 +2,8 @@
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
AssignKiki:
|
||||
LDA.b #$00 : STA.l FollowerDropped ; defuse bomb
|
||||
LDA.b #$0A : STA.l FollowerIndicator ; assign kiki as follower
|
||||
LDA.b #$00 : STA FollowerDropped ; defuse bomb
|
||||
LDA.b #$0A : STA FollowerIndicator ; assign kiki as follower
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -11,9 +11,10 @@ RTL
|
||||
; Name: AllowSQ
|
||||
; Returns: Accumulator = 0 if S&Q is disallowed, 1 if allowed
|
||||
;--------------------------------------------------------------------------------
|
||||
!ITEM_BUSY = "$7F5091"
|
||||
AllowSQ:
|
||||
LDA.l ProgressIndicator : BEQ .done ; thing we overwrote - check if link is in his bed
|
||||
LDA.l BusyItem : EOR.b #$01
|
||||
LDA ProgressIndicator : BEQ .done ; thing we overwrote - check if link is in his bed
|
||||
LDA !ITEM_BUSY : EOR #$01
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -22,8 +23,8 @@ RTL
|
||||
;0 = Reset Music
|
||||
;1 = Don't Reset Music
|
||||
MSMusicReset:
|
||||
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||
LDA.b LinkPosX+1
|
||||
LDA $8A : CMP.b #$80 : BNE +
|
||||
LDA $23
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -31,11 +32,11 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
;0 = Become (Perma)bunny
|
||||
DecideIfBunny:
|
||||
LDA.l MoonPearlEquipment : BNE .done
|
||||
LDA.l CurrentWorld : AND.b #$40
|
||||
LDA MoonPearlEquipment : BNE .done
|
||||
LDA CurrentWorld : AND.b #$40
|
||||
PHA : LDA.l InvertedMode : BNE .inverted
|
||||
.normal
|
||||
PLA : EOR.b #$40
|
||||
PLA : EOR #$40
|
||||
BRA .done
|
||||
.inverted
|
||||
PLA
|
||||
@@ -46,9 +47,9 @@ RTL
|
||||
DecideIfBunnyByScreenIndex:
|
||||
; If indoors we don't have a screen index. Return non-bunny to make mirror-based
|
||||
; superbunny work
|
||||
LDA.b IndoorsFlag : BNE .done
|
||||
LDA.l MoonPearlEquipment : BNE .done
|
||||
LDA.b OverworldIndex : AND.b #$40 : PHA
|
||||
LDA $1B : BNE .done
|
||||
LDA MoonPearlEquipment : BNE .done
|
||||
LDA $8A : AND.b #$40 : PHA
|
||||
LDA.l InvertedMode : BNE .inverted
|
||||
.normal
|
||||
PLA : EOR #$40
|
||||
@@ -57,14 +58,23 @@ DecideIfBunnyByScreenIndex:
|
||||
PLA
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
;ReadInventoryPond:
|
||||
; CPX.b #$1B : BNE + : LDA.b #$01 : RTL : +
|
||||
; LDA EquipmentWRAM, X
|
||||
;RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
FixBunnyOnExitToLightWorld:
|
||||
LDA.w BunnyFlag : BEQ +
|
||||
LDA.w $02E0 : BEQ +
|
||||
JSL.l DecideIfBunny : BEQ +
|
||||
STZ.b LinkState ; set player mode to Normal
|
||||
STZ.w BunnyFlag : STZ.b BunnyFlagDP ; return player graphics to normal
|
||||
STZ $5D ; set player mode to Normal
|
||||
STZ $02E0 : STZ $56 ; return player graphics to normal
|
||||
+
|
||||
RTL
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -73,17 +83,17 @@ RTL
|
||||
FixAga2Bunny:
|
||||
LDA.l FixFakeWorld : BEQ + ; Only use this fix is fakeworld fix is in use
|
||||
LDA.l InvertedMode : BEQ +++
|
||||
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
||||
LDA.b #$00 : STA CurrentWorld ; Switch to light world
|
||||
BRA ++
|
||||
+++
|
||||
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
||||
LDA.b #$40 : STA CurrentWorld ; Switch to dark world
|
||||
++
|
||||
JSL DecideIfBunny : BNE +
|
||||
JSR MakeBunny
|
||||
LDA.b #$04 : STA.w MusicControlRequest ; play bunny music
|
||||
LDA.b #$04 : STA.w $012C ; play bunny music
|
||||
BRA .done
|
||||
+
|
||||
LDA.b #$09 : STA.w MusicControlRequest ; what we wrote over
|
||||
LDA.b #$09 : STA.w $012C ; what we wrote over
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -91,8 +101,8 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MakeBunny:
|
||||
PHX : PHY
|
||||
LDA.b #$17 : STA.b LinkState ; set player mode to permabunny
|
||||
LDA.b #$01 : STA.w BunnyFlag : STA.b BunnyFlagDP ; make player look like bunny
|
||||
LDA.b #$17 : STA $5D ; set player mode to permabunny
|
||||
LDA.b #$01 : STA $02E0 : STA $56 ; make player look like bunny
|
||||
JSL LoadGearPalettes_bunny
|
||||
PLY : PLX
|
||||
RTS
|
||||
@@ -120,27 +130,27 @@ RTS
|
||||
; Fix for SQ jumping causing accidental Exploration Glitch
|
||||
SQEGFix:
|
||||
LDA.l Bugfix_PodEG : BEQ ++
|
||||
STZ.w LayerAdjustment ; disarm exploration glitch
|
||||
STZ.w $047A ; disarm exploration glitch
|
||||
++ RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix crystal not spawning when using somaria vs boss
|
||||
TryToSpawnCrystalUntilSuccess:
|
||||
STX.w ItemReceiptID ; what we overwrote
|
||||
STX $02D8 ; what we overwrote
|
||||
JSL AddAncillaLong : BCS .failed ; a clear carry flag indicates success
|
||||
.spawned
|
||||
STZ.b RoomTag ; the "trying to spawn crystal" flag
|
||||
STZ.b RoomTag+1 ; the "trying to spawn pendant" flag
|
||||
STZ $AE ; the "trying to spawn crystal" flag
|
||||
STZ $AF ; the "trying to spawn pendant" flag
|
||||
.failed
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix crystal not spawning when using somaria vs boss
|
||||
WallmasterCameraFix:
|
||||
STZ.b CameraBoundV ; disable vertical camera scrolling for current room
|
||||
STZ $A7 ; disable vertical camera scrolling for current room
|
||||
REP #$20
|
||||
STZ.w CameraScrollN ; something about scrolling, setting these to 0 tricks the game
|
||||
STZ.w CameraScrollS ; into thinking we're at the edge of the room so it doesn't scroll.
|
||||
STZ $0618 ; something about scrolling, setting these to 0 tricks the game
|
||||
STZ $061A ; into thinking we're at the edge of the room so it doesn't scroll.
|
||||
SEP #$20
|
||||
JML Sound_SetSfx3PanLong ; what we wrote over, also this will RTL
|
||||
|
||||
@@ -148,8 +158,8 @@ WallmasterCameraFix:
|
||||
; Fix losing glove colors
|
||||
LoadActualGearPalettesWithGloves:
|
||||
REP #$20
|
||||
LDA.l SwordEquipment : STA.b Scrap0C
|
||||
LDA.l ArmorEquipment : AND.w #$00FF
|
||||
LDA SwordEquipment : STA $0C
|
||||
LDA ArmorEquipment : AND.w #$00FF
|
||||
JSL LoadGearPalettes_variable
|
||||
JSL SpriteSwap_Palette_ArmorAndGloves_part_two
|
||||
RTL
|
||||
@@ -157,24 +167,24 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix Bunny Palette Map Bug
|
||||
LoadGearPalette_safe_for_bunny:
|
||||
LDA.b GameMode
|
||||
LDA $10
|
||||
CMP.w #$030E : BEQ .new ; opening dungeon map
|
||||
CMP.w #$070E : BEQ .new ; opening overworld map
|
||||
.original
|
||||
-
|
||||
LDA.b [Scrap00]
|
||||
STA.l PaletteBufferAux, X
|
||||
STA.l PaletteBuffer, X
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
LDA [$00]
|
||||
STA $7EC300, X
|
||||
STA $7EC500, X
|
||||
INC $00 : INC $00
|
||||
INX #2
|
||||
DEY
|
||||
BPL -
|
||||
RTL
|
||||
.new
|
||||
-
|
||||
LDA.b [Scrap00]
|
||||
STA.l PaletteBuffer, X
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
LDA [$00]
|
||||
STA $7EC500, X
|
||||
INC $00 : INC $00
|
||||
INX #2
|
||||
DEY
|
||||
BPL -
|
||||
@@ -183,16 +193,16 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix pedestal pull overlay
|
||||
PedestalPullOverlayFix:
|
||||
LDA.b #$09 : STA.w AncillaGeneral, X ; the thing we wrote over
|
||||
LDA.b IndoorsFlag : BNE +
|
||||
LDA.b OverworldIndex : CMP.b #$80 : BNE +
|
||||
LDA.b OverlayID : CMP.b #$97
|
||||
LDA.b #$09 : STA $039F, X ; the thing we wrote over
|
||||
LDA $1B : BNE +
|
||||
LDA $8A : CMP.b #$80 : BNE +
|
||||
LDA $8C : CMP.b #$97
|
||||
+
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
FixJingleGlitch:
|
||||
LDA.b GameSubMode
|
||||
LDA.b $11
|
||||
BEQ .set_doors
|
||||
|
||||
LDA.l AllowAccidentalMajorGlitch
|
||||
@@ -200,7 +210,7 @@ FixJingleGlitch:
|
||||
|
||||
.set_doors
|
||||
LDA.b #$05
|
||||
STA.b GameSubMode
|
||||
STA.b $11
|
||||
|
||||
.exit
|
||||
RTL
|
||||
@@ -212,43 +222,7 @@ pushpc
|
||||
pullpc
|
||||
;--------------------------------------------------------------------------------
|
||||
SetOverworldTransitionFlags:
|
||||
LDA.b #$01
|
||||
STA.w OWTransitionFlag
|
||||
STA.w RaceGameFlag
|
||||
LDA #$01
|
||||
STA $0ABF ; used by witch
|
||||
STA $021B ; used by race game
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ParadoxCaveGfxFix:
|
||||
; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF)
|
||||
LDA.b IndoorsFlag : BEQ .uploadLine
|
||||
LDX.b RoomIndex : CPX.w #$00FF : BNE .uploadLine
|
||||
LDX.b PreviousRoom : CPX.w #$00EF : BNE .uploadLine
|
||||
|
||||
;Ignore uploading four specific lines of tiles to VRAM
|
||||
LDX.w VRAMUploadAddress
|
||||
; Line 1
|
||||
CPX.w #$1800 : BEQ .skipMostOfLine
|
||||
; Line 2
|
||||
CPX.w #$1A00 : BEQ .skipMostOfLine
|
||||
; Line 3
|
||||
CPX.w #$1C00 : BEQ .uploadLine
|
||||
; Line 4
|
||||
CPX.w #$1E00 : BEQ .uploadLine
|
||||
|
||||
.uploadLine
|
||||
LDA.b #$01 : STA.w MDMAEN
|
||||
|
||||
.skipLine
|
||||
RTL
|
||||
|
||||
.skipMostOfLine
|
||||
; Set line length to 192 bytes (the first 6 8x8 tiles in the line)
|
||||
LDX.w #$00C0 : STX.w DAS0L
|
||||
BRA .uploadLine
|
||||
;--------------------------------------------------------------------------------
|
||||
SetItemRiseTimer:
|
||||
LDA.w ItemReceiptMethod : CMP #$01 : BNE .not_from_chest
|
||||
LDA.b #$38 : STA.w AncillaTimer, X
|
||||
RTL
|
||||
.not_from_chest
|
||||
TYA : STA.w AncillaTimer, X ; What we wrote over
|
||||
RTL
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
del ..\working.sfc
|
||||
copy ..\alttp.sfc ..\working.sfc
|
||||
%~dp0bin\windows\asar.exe LTTP_RND_GeneralBugfixes.asm ..\working.sfc
|
||||
cmd /k
|
||||
xkas.exe LTTP_RND_GeneralBugfixes.asm ..\working.sfc
|
||||
cmd /k
|
||||
2
build.sh
2
build.sh
@@ -2,4 +2,4 @@
|
||||
|
||||
rm ../working.sfc
|
||||
cp ../alttp.sfc ../working.sfc
|
||||
./bin/macos/asar LTTP_RND_GeneralBugfixes.asm ../working.sfc
|
||||
./asar LTTP_RND_GeneralBugfixes.asm ../working.sfc
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
rm ../working.sfc
|
||||
cp ../alttp.sfc ../working.sfc
|
||||
./bin/linux/asar -DFEATURE_PATREON_SUPPORTERS=1 LTTP_RND_GeneralBugfixes.asm ../working.sfc
|
||||
asar LTTP_RND_GeneralBugfixes.asm ../working.sfc
|
||||
|
||||
0
data/c2807_v3.gfx → c2807_v3.gfx
Normal file → Executable file
0
data/c2807_v3.gfx → c2807_v3.gfx
Normal file → Executable file
@@ -2,26 +2,36 @@
|
||||
; Capacity Logic
|
||||
;================================================================================
|
||||
IncrementBombs:
|
||||
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
|
||||
+
|
||||
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
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
IncrementArrows:
|
||||
LDA.l ArrowCapacity : DEC
|
||||
CMP.l CurrentArrows : !BLT +
|
||||
LDA.l CurrentArrows
|
||||
CMP.b #99 : !BGE +
|
||||
INC : STA.l CurrentArrows
|
||||
+
|
||||
LDA ArrowCapacityUpgrades ; get arrow upgrades
|
||||
!ADD.l StartingMaxArrows : DEC
|
||||
|
||||
CMP CurrentArrows
|
||||
|
||||
!BLT +
|
||||
LDA CurrentArrows
|
||||
CMP.b #99 : !BGE +
|
||||
INC : STA CurrentArrows
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CompareBombsToMax:
|
||||
LDA.l BombCapacity
|
||||
CMP.l BombsEquipment
|
||||
LDA BombCapacityUpgrades ; get bomb upgrades
|
||||
!ADD.l StartingMaxBombs
|
||||
|
||||
CMP BombsEquipment
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
34
catfish.asm
Normal file
34
catfish.asm
Normal file
@@ -0,0 +1,34 @@
|
||||
;================================================================================
|
||||
; Randomize Catfish
|
||||
;--------------------------------------------------------------------------------
|
||||
!HEART_REDRAW = "$7F5000"
|
||||
LoadCatfishItemGFX:
|
||||
LDA.l $1DE185 ; location randomizer writes catfish item to
|
||||
JML PrepDynamicTile
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawThrownItem:
|
||||
LDA $8A : CMP.b #$81 : BNE .catfish
|
||||
|
||||
.zora
|
||||
LDA.b #$01 : STA !HEART_REDRAW
|
||||
LDA.l $1DE1C3 ; location randomizer writes zora item to
|
||||
BRA .draw
|
||||
|
||||
.catfish
|
||||
LDA.l $1DE185 ; location randomizer writes catfish item to
|
||||
|
||||
.draw
|
||||
JML DrawDynamicTile
|
||||
;--------------------------------------------------------------------------------
|
||||
MarkThrownItem:
|
||||
JSL Link_ReceiveItem ; thing we wrote over
|
||||
|
||||
LDA $8A : CMP.b #$81 : BNE .catfish
|
||||
|
||||
.zora
|
||||
JML ItemSet_ZoraKing
|
||||
|
||||
.catfish
|
||||
JML ItemSet_Catfish
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
248
clock.asm
Normal file
248
clock.asm
Normal file
@@ -0,0 +1,248 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
; http://problemkaputt.de/fullsnes.htm
|
||||
; 2800h-2801h S-RTC Real Time Clock I/O Ports
|
||||
; cartridge type change from #$02 to #$55 to enable S-RTC
|
||||
; SNES Cart S-RTC (Realtime Clock) (1 game)
|
||||
;
|
||||
; PCB "SHVC-LJ3R-01" with 24pin "Sharp S-RTC" chip. Used only by one japanese game:
|
||||
; Dai Kaiju Monogatari 2 (1996) Birthday/Hudson Soft (JP)
|
||||
;
|
||||
; S-RTC I/O Ports
|
||||
; 002800h S-RTC Read (R)
|
||||
; 002801h S-RTC Write (W)
|
||||
; Both registers are 4bits wide. When writing: Upper 4bit should be zero. When reading: Upper 4bit should be masked-off (they do possibly contain garbage, eg. open-bus).
|
||||
;
|
||||
; S-RTC Communication
|
||||
; The sequence for setting, and then reading the time is:
|
||||
; Send <0Eh,04h,0Dh,0Eh,00h,Timestamp(12 digits),0Dh> to [002801h]
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; etc.
|
||||
; The exact meaning of the bytes is unknown. 0Eh/0Dh seems to invoke/terminate commands, 04h might be some configuration stuff (like setting 24-hour mode). 00h is apparently the set-time command. There might be further commands (such like setting interrupts, alarm, 12-hour mode, reading battery low & error flags, etc.). When reading, 0Fh seems to indicate sth like "time available".
|
||||
; The 12/13-digit "SSMMHHDDMYYY(D)" Timestamps are having the following format:
|
||||
; Seconds.lo (BCD, 0..9)
|
||||
; Seconds.hi (BCD, 0..5)
|
||||
; Minutes.lo (BCD, 0..9)
|
||||
; Minutes.hi (BCD, 0..5)
|
||||
; Hours.lo (BCD, 0..9)
|
||||
; Hours.hi (BCD, 0..2)
|
||||
; Day.lo (BCD, 0..9)
|
||||
; Day.hi (BCD, 0..3)
|
||||
; Month (HEX, 01h..0Ch)
|
||||
; Year.lo (BCD, 0..9)
|
||||
; Year.hi (BCD, 0..9)
|
||||
; Century (HEX, 09h..0Ah for 19xx..20xx)
|
||||
; When READING the time, there is one final extra digit (the existing software doesn't transmit that extra digit on WRITING, though maybe it's possible to do writing, too):
|
||||
; Day of Week? (0..6) (unknown if RTC assigns sth like 0=Sunday or 0=Monday)
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
macro A_x10()
|
||||
ASL #1 : PHA
|
||||
ASL #2 : !ADD 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro A_x24()
|
||||
ASL #3 : PHA
|
||||
ASL #1 : !ADD 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro A_x60()
|
||||
ASL #2 : PHA
|
||||
ASL #4 : !SUB 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro Clock_ReadBCD()
|
||||
LDA $002800 : PHA
|
||||
LDA $002800 : %A_x10() : !ADD 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
Clock_Test:
|
||||
JSL.l Clock_Init
|
||||
JML.l Clock_IsSupported
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_Init
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_Init:
|
||||
LDA.b #$0E : STA $002801
|
||||
LDA.b #$04 : STA $002801
|
||||
LDA.b #$0D : STA $002801
|
||||
LDA.b #$0E : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$01 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$01 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$0A : STA $002801
|
||||
|
||||
LDA.b #$0D : STA $002801
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_IsSupported
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input: None (8-bit accumulator)
|
||||
;--------------------------------------------------------------------------------
|
||||
; Output:
|
||||
; Carry - unset if unsupported, set if supported
|
||||
; Zero - Undefined
|
||||
;--------------------------------------------------------------------------------
|
||||
; Side Effects:
|
||||
; S-RTC is ready for reading upon exit if supported
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_IsSupported:
|
||||
PHA : PHX
|
||||
LDX #$00;
|
||||
-
|
||||
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .done ; check for clock chip ready signal
|
||||
CPX.b #$0E : BCC ++ : CLC : BRA .done ; if we've read 14 bytes with no success, unset carry and exit
|
||||
++ INX
|
||||
BRA -
|
||||
.done
|
||||
PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_QuickStamp
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input: None
|
||||
;--------------------------------------------------------------------------------
|
||||
; Output:
|
||||
; $00.b - 24-bit timestamp (low)
|
||||
; $01.b - 24-bit timestamp (mid)
|
||||
; $02.b - 24-bit timestamp (high)
|
||||
; $03.b - zero
|
||||
; Carry - Unset if error, Set if success
|
||||
; Zero - Undefined
|
||||
;--------------------------------------------------------------------------------
|
||||
; Side Effects:
|
||||
; Requires Mode-7 Matrix Registers
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_QuickStamp:
|
||||
PHA : PHX : PHP
|
||||
SEP #$30 ; set 8-bit accumulator and index registers
|
||||
LDX #$00;
|
||||
-
|
||||
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal
|
||||
CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
|
||||
INX
|
||||
BRA -
|
||||
SEC ; indicate success
|
||||
|
||||
.ready
|
||||
%Clock_ReadBCD() : STA $00 ; seconds
|
||||
%Clock_ReadBCD() : STA $01 ; minutes
|
||||
%Clock_ReadBCD() : STA $02 ; hours
|
||||
%Clock_ReadBCD() : STA $03 ; days
|
||||
|
||||
REP $20 ; set 16-bit accumulator
|
||||
LDA $01 : AND #$00FF : %A_x60() ; convert minutes to seconds
|
||||
STZ $01 : !ADD $00 : STA $00 ; store running total seconds to $00
|
||||
|
||||
LDA $03 : AND #$00FF : %A_x24() ; convert days to hours
|
||||
STZ $03 : !ADD $02 ; get total hours
|
||||
%A_x60() ; get total minutes
|
||||
|
||||
LDY #$60
|
||||
JSL.l Multiply_A16Y8
|
||||
STY $02 : STZ $03
|
||||
!ADD $00 : BCC + : INC $02 : +
|
||||
|
||||
.done
|
||||
PLP : PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Multiply_A16Y8:
|
||||
;--------------------------------------------------------------------------------
|
||||
; Expects:
|
||||
; Accumulator - 16-bit
|
||||
; Index Registers - 8-bit
|
||||
;--------------------------------------------------------------------------------
|
||||
; Notes:
|
||||
; Found a (wrong) version of this on wikibooks. This is cleaned up and fixed.
|
||||
;--------------------------------------------------------------------------------
|
||||
Multiply_A16Y8:
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
STY $4202
|
||||
STA $4203
|
||||
NOP #4
|
||||
LDA $4216
|
||||
LDY $4217
|
||||
XBA
|
||||
STA $4203
|
||||
NOP #2
|
||||
TYA
|
||||
CLC
|
||||
ADC $4216
|
||||
LDY $4217
|
||||
BCC .carry_bit
|
||||
INY
|
||||
.carry_bit:
|
||||
XBA
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_GetTime
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input: None
|
||||
;--------------------------------------------------------------------------------
|
||||
; Output:
|
||||
; $00.b - Seconds
|
||||
; $01.b - Minutes
|
||||
; $02.b - Hours
|
||||
; $03.b - Days
|
||||
; $04.b - Months
|
||||
; $05.w - Years
|
||||
; Carry - Unset if error, Set if success
|
||||
; Zero - Undefined
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_GetTime:
|
||||
PHA : PHX : PHY : PHP
|
||||
SEP #$30 ; set 8-bit accumulator and index registers
|
||||
LDX #$00;
|
||||
-
|
||||
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal
|
||||
CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
|
||||
INX
|
||||
BRA -
|
||||
SEC ; indicate success
|
||||
|
||||
.ready
|
||||
%Clock_ReadBCD() : STA $00 ; seconds
|
||||
%Clock_ReadBCD() : STA $01 ; minutes
|
||||
%Clock_ReadBCD() : STA $02 ; hours
|
||||
%Clock_ReadBCD() : STA $03 ; days
|
||||
LDA $002800 : STA $04 ; months
|
||||
%Clock_ReadBCD() : STA $05 ; years
|
||||
LDA $002800 : STA $06 ; century
|
||||
|
||||
REP $20 ; set 16-bit accumulator
|
||||
STA $06 : AND #$00FF : %A_x10() : %A_x10() : !ADD #1000 ; multiply century digit by 100 and add 1000
|
||||
STZ $06 : !ADD $05 : STA $05 ; add lower 2 digits of the year and store
|
||||
|
||||
.done
|
||||
PLP : PLY : PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
56
compasses.asm
Normal file
56
compasses.asm
Normal file
@@ -0,0 +1,56 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
; $7F5010 - Scratch Space
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
DrawDungeonCompassCounts:
|
||||
LDX $1B : BNE + : RTL : + ; Skip if outdoors
|
||||
|
||||
; extra hard safeties for getting dungeon ID to prevent crashes
|
||||
PHA
|
||||
LDA.w $040C : AND.w #$00FE : TAX ; force dungeon ID to be multiple of 2
|
||||
PLA
|
||||
|
||||
CPX.b #$1B : BCS .done ; Skip if not in a valid dungeon ID
|
||||
|
||||
BIT.w #$0002 : BNE ++ ; if CompassMode==2, we don't check for the compass
|
||||
LDA CompassField : AND.l DungeonItemMasks, X ; Load compass values to A, mask with dungeon item masks
|
||||
BEQ .done ; skip if we don't have compass
|
||||
++
|
||||
|
||||
TXA : LSR : TAX
|
||||
BNE +
|
||||
INC
|
||||
+
|
||||
LDA.l CompassTotalsWRAM, X : AND #$00FF
|
||||
SEP #$20
|
||||
JSR HudHexToDec2Digit
|
||||
REP #$20
|
||||
PHX
|
||||
LDX.b $06 : TXA : ORA #$2400 : STA $7EC79A
|
||||
LDX.b $07 : TXA : ORA #$2400 : STA $7EC79C
|
||||
PLX
|
||||
|
||||
LDA DungeonLocationsChecked, X : AND #$00FF
|
||||
SEP #$20
|
||||
JSR HudHexToDec2Digit
|
||||
REP #$20
|
||||
LDX.b $06 : TXA : ORA #$2400 : STA $7EC794 ; Draw the item count
|
||||
LDX.b $07 : TXA : ORA #$2400 : STA $7EC796
|
||||
|
||||
LDA.w #$2830 : STA $7EC798 ; draw the slash
|
||||
|
||||
.done
|
||||
RTL
|
||||
|
||||
DungeonItemMasks: ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc
|
||||
dw $8000, $4000, $2000, $1000, $0800, $0400, $0200, $0100
|
||||
dw $0080, $0040, $0020, $0010, $0008, $0004
|
||||
;--------------------------------------------------------------------------------
|
||||
InitCompassTotalsRAM:
|
||||
LDX #$00
|
||||
-
|
||||
LDA CompassTotalsROM, X : STA CompassTotalsWRAM, X
|
||||
INX
|
||||
CPX #$0F : !BLT -
|
||||
RTL
|
||||
|
||||
29
compression.asm
Normal file
29
compression.asm
Normal file
@@ -0,0 +1,29 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
ParadoxCaveGfxFix:
|
||||
; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF)
|
||||
LDA $1B : BEQ .uploadLine
|
||||
LDX $A0 : CPX #$00FF : BNE .uploadLine
|
||||
LDX $A2 : CPX #$00EF : BNE .uploadLine
|
||||
|
||||
;Ignore uploading four specific lines of tiles to VRAM
|
||||
LDX $0118
|
||||
; Line 1
|
||||
CPX #$1800 : BEQ .skipMostOfLine
|
||||
; Line 2
|
||||
CPX #$1A00 : BEQ .skipMostOfLine
|
||||
; Line 3
|
||||
CPX #$1C00 : BEQ .uploadLine
|
||||
; Line 4
|
||||
CPX #$1E00 : BEQ .uploadLine
|
||||
|
||||
.uploadLine
|
||||
LDA.b #$01 : STA $420B
|
||||
|
||||
.skipLine
|
||||
RTL
|
||||
|
||||
.skipMostOfLine
|
||||
; Set line length to 192 bytes (the first 6 8x8 tiles in the line)
|
||||
LDX.w #$00C0 : STX $4305
|
||||
BRA .uploadLine
|
||||
;--------------------------------------------------------------------------------
|
||||
182
contrib.asm
Normal file
182
contrib.asm
Normal file
@@ -0,0 +1,182 @@
|
||||
;================================================================
|
||||
; Contributor: Myramong
|
||||
;================================================================
|
||||
;Sprite_ShowMessageFromPlayerContact_Edit:
|
||||
;{
|
||||
; STZ $1CE8
|
||||
; JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC .dont_show
|
||||
;
|
||||
; LDA $4D : CMP.b #$02 : BEQ .dont_show
|
||||
;
|
||||
; JSL.l Sprite_DirectionToFacePlayerLong : TYA : EOR.b #$03
|
||||
; SEC
|
||||
;RTL
|
||||
;.dont_show
|
||||
; LDA $0DE0, X
|
||||
; CLC
|
||||
;RTL
|
||||
;}
|
||||
;================================================================
|
||||
;Sprite_ShowSolicitedMessageIfPlayerFacing_Edit:
|
||||
;{
|
||||
; JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
; JSL.l Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
; LDA $F6 : BPL .alpha
|
||||
; LDA $0F10, X : BNE .alpha
|
||||
;
|
||||
; LDA $4D : CMP.b #$02 : BEQ .alpha
|
||||
;
|
||||
; STZ $1CE8 ; set text choice to 1st option (usually yes/confirm/etc)
|
||||
; JSL.l Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
;
|
||||
; ; Make sure that the sprite is facing towards the player, otherwise
|
||||
; ; talking can't happen. (What sprites actually use this???)
|
||||
; LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other
|
||||
; PHY
|
||||
; LDA.b #$40 : STA $0F10, X
|
||||
; PLA : EOR.b #$03
|
||||
; SEC
|
||||
;RTL
|
||||
;.not_facing_each_other
|
||||
;.alpha
|
||||
; LDA $0DE0, X
|
||||
; CLC
|
||||
;RTL
|
||||
;}
|
||||
;================================================================
|
||||
;OldMountainMan_TransitionFromTagalong_Edit:
|
||||
;{
|
||||
; PHA
|
||||
;
|
||||
; LDA.b #$AD : JSL Sprite_SpawnDynamically
|
||||
;
|
||||
; PLA : PHX : TAX
|
||||
;
|
||||
; LDA $1A64, X : AND.b #$03 : STA $0EB0, Y
|
||||
; STA $0DE0, Y
|
||||
;
|
||||
; LDA $1A00, X : CLC : ADC.b #$02 : STA $0D00, Y
|
||||
; LDA $1A14, X : ADC.b #$00 : STA $0D20, Y
|
||||
;
|
||||
; LDA $1A28, X : CLC : ADC.b #$02 : STA $0D10, Y
|
||||
; LDA $1A3C, X : ADC.b #$00 : STA $0D30, Y
|
||||
;
|
||||
; LDA $EE : STA $0F20, Y
|
||||
;
|
||||
; LDA.b #$01 : STA $0BA0, Y
|
||||
; STA $0E80, Y
|
||||
;
|
||||
; LDA.b #$01 : STA $02E4 ; OldMountainMan_FreezePlayer
|
||||
; STA $037B ; ^
|
||||
;
|
||||
; PLX
|
||||
;
|
||||
; LDA.b #$00 : STA FollowerIndicator
|
||||
;
|
||||
; STZ $5E
|
||||
;
|
||||
; JML $09A6B6 ; <- 4A6B6 tagalong.asm:1194 (SEP #$30 : RTS)
|
||||
;}
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
|
||||
{
|
||||
STA $1CF0
|
||||
STY $1CF1
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA $F6 : BPL .alpha
|
||||
LDA $0F10, X : BNE .alpha
|
||||
LDA $4D : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other
|
||||
|
||||
PHY
|
||||
|
||||
LDA $1CF0
|
||||
LDY $1CF1
|
||||
|
||||
; Check what room we're in so we know which npc we're talking to
|
||||
LDA.b $A0 : CMP #$05 : BEQ .SahasrahlaDialogs
|
||||
CMP #$1C : BEQ .BombShopGuyDialog
|
||||
BRA .SayNothing
|
||||
|
||||
.SahasrahlaDialogs
|
||||
REP #$20 : LDA.l MapReveal_Sahasrahla : ORA MapOverlay : STA MapOverlay : SEP #$20
|
||||
JSL DialogSahasrahla : BRA .SayNothing
|
||||
|
||||
.BombShopGuyDialog
|
||||
REP #$20 : LDA.l MapReveal_BombShop : ORA MapOverlay : STA MapOverlay : SEP #$20
|
||||
JSL DialogBombShopGuy
|
||||
|
||||
.SayNothing
|
||||
|
||||
LDA.b #$40 : STA $0F10, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
|
||||
LDA $0DE0, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage:
|
||||
{
|
||||
PHY
|
||||
PHA
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA $F6 : BPL .alpha
|
||||
LDA $0F10, X : BNE .alpha
|
||||
LDA $4D : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other
|
||||
|
||||
PLA : XBA : PLA
|
||||
|
||||
PHY
|
||||
|
||||
TAY : XBA
|
||||
|
||||
JSL Sprite_ShowMessageUnconditional
|
||||
|
||||
LDA.b #$40 : STA $0F10, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
PLY
|
||||
PLA
|
||||
|
||||
LDA $0DE0, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
;================================================================
|
||||
@@ -8,24 +8,24 @@
|
||||
InvertDPad:
|
||||
LDA.l OneMindPlayerCount : BEQ .crowd_control
|
||||
|
||||
LDA.l OneMindId
|
||||
LDA.l !ONEMIND_ID
|
||||
AND.b #$03
|
||||
TAX
|
||||
LDA.l .onemind_controller_offset, X
|
||||
TAX
|
||||
|
||||
LDA.w JOY1L,X : STA.w Scrap00
|
||||
LDA.w JOY1H,X : STA.w Scrap01
|
||||
LDA.w $4218,X : STA.w $00
|
||||
LDA.w $4219,X : STA.w $01
|
||||
|
||||
LDA.b #$80 : STA.w WRIO ; reset this so latch can read it, otherwise RNG breaks
|
||||
LDA #$80 : STA $4201 ; reset this so latch can read it, otherwise RNG breaks
|
||||
|
||||
JML.l InvertDPadReturn
|
||||
|
||||
.crowd_control
|
||||
LDA.l ControllerInverter : BNE +
|
||||
LDA InvertDPadModifier : BNE +
|
||||
|
||||
LDA.w JOY1L : STA.b Scrap00
|
||||
LDA.w JOY1H : STA.b Scrap01
|
||||
LDA $4218 : STA $00
|
||||
LDA $4219 : STA $01
|
||||
JML.l InvertDPadReturn
|
||||
|
||||
+ DEC : BEQ .dpadOnly
|
||||
@@ -33,47 +33,47 @@ InvertDPad:
|
||||
DEC : BEQ .invertBoth
|
||||
.swapSides
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.w JOY1L
|
||||
LDA $4218
|
||||
BIT.w #$0840 : BEQ + : EOR.w #$0840 : + ; swap X/up
|
||||
BIT.w #$0180 : BEQ + : EOR.w #$0180 : + ; swap A/right
|
||||
BIT.w #$4200 : BEQ + : EOR.w #$4200 : + ; swap Y/left
|
||||
BIT.w #$8400 : BEQ + : EOR.w #$8400 : + ; swap B/down
|
||||
STA.b Scrap00
|
||||
STA $00
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
JML.l InvertDPadReturn
|
||||
.invertBoth
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.w JOY1L
|
||||
LDA $4218
|
||||
BIT.w #$8040 : BEQ + : EOR.w #$8040 : + ; swap X/B
|
||||
BIT.w #$4080 : BEQ + : EOR.w #$4080 : + ; swap Y/A
|
||||
BIT.w #$0C00 : BEQ + : EOR.w #$0C00 : + ; swap up/down
|
||||
BIT.w #$0300 : BEQ + : EOR.w #$0300 : + ; swap left/right
|
||||
STA.b Scrap00
|
||||
STA $00
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
JML.l InvertDPadReturn
|
||||
.buttonsOnly
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.w JOY1L
|
||||
LDA $4218
|
||||
BIT.w #$8040 : BEQ + : EOR.w #$8040 : + ; swap X/B
|
||||
BIT.w #$4080 : BEQ + : EOR.w #$4080 : + ; swap Y/A
|
||||
STA.b Scrap00
|
||||
STA $00
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
JML.l InvertDPadReturn
|
||||
.dpadOnly
|
||||
LDA.w JOY1L : STA.b Scrap00
|
||||
LDA.w JOY1H
|
||||
LDA $4218 : STA $00
|
||||
LDA $4219
|
||||
BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down
|
||||
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
|
||||
STA.b Scrap01
|
||||
STA $01
|
||||
JML.l InvertDPadReturn
|
||||
|
||||
.onemind_controller_offset
|
||||
db 0 ; player 0 - JOY1L - joy1d1
|
||||
db 0 ; player 1 - JOY1L - joy1d1
|
||||
db 2 ; player 2 - JOY2L - joy2d1
|
||||
db 6 ; player 3 - JOY4L - joy2d2
|
||||
db 2 ; player 4 - JOY2L - joy2d1
|
||||
db 6 ; player 5 - JOY4L - joy2d2
|
||||
db 0 ; player 0 - $4218 - joy1d1
|
||||
db 0 ; player 1 - $4218 - joy1d1
|
||||
db 2 ; player 2 - $421A - joy2d1
|
||||
db 6 ; player 3 - $421E - joy2d2
|
||||
db 2 ; player 4 - $421A - joy2d1
|
||||
db 6 ; player 5 - $421E - joy2d2
|
||||
|
||||
|
||||
|
||||
@@ -85,12 +85,12 @@ HandleOneMindController:
|
||||
|
||||
REP #$20
|
||||
|
||||
LDA.l OneMindTimerRAM
|
||||
LDA.l !ONEMIND_TIMER
|
||||
DEC
|
||||
BPL .no_switch
|
||||
|
||||
SEP #$20
|
||||
LDA.l OneMindId
|
||||
LDA.l !ONEMIND_ID
|
||||
INC
|
||||
CMP.l OneMindPlayerCount
|
||||
BCC .no_wrap
|
||||
@@ -98,26 +98,29 @@ HandleOneMindController:
|
||||
LDA.b #$01 ; reset to player 1
|
||||
|
||||
.no_wrap
|
||||
STA.l OneMindId
|
||||
STA.l !ONEMIND_ID
|
||||
|
||||
REP #$20
|
||||
LDA.l OneMindTimerInit
|
||||
LDA.l OneMindTimer
|
||||
|
||||
.no_switch
|
||||
STA.l OneMindTimerRAM
|
||||
STA.l !ONEMIND_TIMER
|
||||
|
||||
SEP #$20
|
||||
LDA.l OneMindId
|
||||
LDA.l !ONEMIND_ID
|
||||
|
||||
CMP.b #$04 ; is it player 4 or 5?
|
||||
BCC .no_multitap_switch
|
||||
|
||||
STZ.w WRIO
|
||||
STZ.w $4201
|
||||
|
||||
.no_multitap_switch
|
||||
|
||||
.no_onemind
|
||||
STZ.b NMIDoneFlag
|
||||
STZ.b $12
|
||||
|
||||
JML $008034 ; reset frame loop
|
||||
|
||||
|
||||
|
||||
JML $808034 ; reset frame loop
|
||||
|
||||
|
||||
42
creditscharmapbighi.txt
Normal file
42
creditscharmapbighi.txt
Normal file
@@ -0,0 +1,42 @@
|
||||
=9F
|
||||
0=53
|
||||
1=54
|
||||
2=55
|
||||
3=56
|
||||
4=57
|
||||
5=58
|
||||
6=59
|
||||
7=5A
|
||||
8=5B
|
||||
9=5C
|
||||
A=5D
|
||||
B=5E
|
||||
C=5F
|
||||
D=60
|
||||
E=61
|
||||
F=62
|
||||
G=63
|
||||
H=64
|
||||
I=65
|
||||
J=66
|
||||
K=67
|
||||
L=68
|
||||
M=69
|
||||
N=6A
|
||||
O=6B
|
||||
P=6C
|
||||
Q=6D
|
||||
R=6E
|
||||
S=6F
|
||||
T=70
|
||||
U=71
|
||||
V=72
|
||||
W=73
|
||||
X=74
|
||||
Y=75
|
||||
Z=76
|
||||
'=77
|
||||
.=A0
|
||||
/=A2
|
||||
:=A3
|
||||
_=A6
|
||||
42
creditscharmapbiglo.txt
Normal file
42
creditscharmapbiglo.txt
Normal file
@@ -0,0 +1,42 @@
|
||||
=9F
|
||||
0=79
|
||||
1=7A
|
||||
2=7B
|
||||
3=7C
|
||||
4=7D
|
||||
5=7E
|
||||
6=7F
|
||||
7=80
|
||||
8=81
|
||||
9=82
|
||||
A=83
|
||||
B=84
|
||||
C=85
|
||||
D=86
|
||||
E=87
|
||||
F=88
|
||||
G=89
|
||||
H=8A
|
||||
I=8B
|
||||
J=8C
|
||||
K=8D
|
||||
L=8E
|
||||
M=8F
|
||||
N=90
|
||||
O=91
|
||||
P=92
|
||||
Q=93
|
||||
R=94
|
||||
S=95
|
||||
T=96
|
||||
U=97
|
||||
V=98
|
||||
W=99
|
||||
X=9A
|
||||
Y=9B
|
||||
Z=9C
|
||||
'=9d
|
||||
.=C0
|
||||
/=C2
|
||||
:=C3
|
||||
_=C6
|
||||
@@ -24,5 +24,4 @@ V=4D
|
||||
W=4E
|
||||
X=4F
|
||||
Y=50
|
||||
Z=51
|
||||
.=52
|
||||
Z=51
|
||||
@@ -24,8 +24,4 @@ V=2F
|
||||
W=30
|
||||
X=31
|
||||
Y=32
|
||||
Z=33
|
||||
,=34
|
||||
'=35
|
||||
-=36
|
||||
.=37
|
||||
Z=33
|
||||
235
crypto.asm
235
crypto.asm
@@ -1,6 +1,21 @@
|
||||
; Scrap04 used for n
|
||||
; Scrap06 used for rounds
|
||||
; Scrap08 use for dpScratch/MXResult (lower 32 of dpScratch)
|
||||
; $7F50D0 - $7F50FF - Block Cypher Parameters
|
||||
; $7F5100 - $7F51FF - Block Cypher Buffer
|
||||
!v = "$7F5100"
|
||||
!n = "$04"
|
||||
!MXResult = "$08" ; an alternate name for the lower 32 bits of dpScratch
|
||||
!dpScratch = "$08"
|
||||
!keyBase = "$7F50D0"
|
||||
|
||||
|
||||
!y = "$7F50E0"
|
||||
!z = "$7F50E4"
|
||||
!sum = "$7F50E8"
|
||||
|
||||
!p = "$7F50EC"
|
||||
!rounds = "$06"
|
||||
!e = "$7F50F0"
|
||||
|
||||
!upperScratch = "$7F50F2"
|
||||
|
||||
CryptoDelta:
|
||||
dd #$9e3779b9
|
||||
@@ -20,144 +35,164 @@ macro ASL32Single(value)
|
||||
; ROL handles the carry from the lower byte for us
|
||||
endmacro
|
||||
|
||||
;macro LSR32(value,k)
|
||||
; LDX.b <k>
|
||||
; ?loop:
|
||||
; %LSR32Single(<value>,<k>)
|
||||
; DEX : CPX.b #$00 : BNE ?loop
|
||||
;endmacro
|
||||
|
||||
;macro ASL32(value,k)
|
||||
; LDX.b <k>
|
||||
; ?loop:
|
||||
; %LSR32Single(<value>,<k>)
|
||||
; DEX : CPX.b #$00 : BNE ?loop
|
||||
;endmacro
|
||||
|
||||
CryptoMX:
|
||||
PHX
|
||||
|
||||
; upperScratch = (z>>5 ^ y <<2)
|
||||
LDA.w z : STA.b Scrap08
|
||||
LDA.w z+2 : STA.b Scrap08+2
|
||||
%LSR32Single(Scrap08)
|
||||
%LSR32Single(Scrap08)
|
||||
%LSR32Single(Scrap08)
|
||||
%LSR32Single(Scrap08)
|
||||
%LSR32Single(Scrap08)
|
||||
;%LSR32(Scrap08,#$05)
|
||||
LDA.w !z : STA.b !dpScratch
|
||||
LDA.w !z+2 : STA.b !dpScratch+2
|
||||
%LSR32Single(!dpScratch)
|
||||
%LSR32Single(!dpScratch)
|
||||
%LSR32Single(!dpScratch)
|
||||
%LSR32Single(!dpScratch)
|
||||
%LSR32Single(!dpScratch)
|
||||
;%LSR32(!dpScratch,#$05)
|
||||
|
||||
LDA.w y : STA.b Scrap08+4
|
||||
LDA.w y+2 : STA.b Scrap08+6
|
||||
%ASL32Single(Scrap08+4)
|
||||
%ASL32Single(Scrap08+4)
|
||||
;%ASL32(Scrap08+4,#$02)
|
||||
LDA.w !y : STA.b !dpScratch+4
|
||||
LDA.w !y+2 : STA.b !dpScratch+6
|
||||
%ASL32Single(!dpScratch+4)
|
||||
%ASL32Single(!dpScratch+4)
|
||||
;%ASL32(!dpScratch+4,#$02)
|
||||
|
||||
LDA.b Scrap08 : EOR.b Scrap08+4 : STA.w CryptoScratch
|
||||
LDA.b Scrap08+2 : EOR.b Scrap08+6 : STA.w CryptoScratch+2
|
||||
LDA.b !dpScratch : EOR.b !dpScratch+4 : STA.w !upperScratch
|
||||
LDA.b !dpScratch+2 : EOR.b !dpScratch+6 : STA.w !upperScratch+2
|
||||
|
||||
;================================
|
||||
; upperscratch2 = (y>>3^z<<4)
|
||||
|
||||
LDA.w z : STA.b Scrap08
|
||||
LDA.w z+2 : STA.b Scrap08+2
|
||||
%ASL32Single(Scrap08)
|
||||
%ASL32Single(Scrap08)
|
||||
%ASL32Single(Scrap08)
|
||||
%ASL32Single(Scrap08)
|
||||
;%ASL32(Scrap08,#$04)
|
||||
LDA.w !z : STA.b !dpScratch
|
||||
LDA.w !z+2 : STA.b !dpScratch+2
|
||||
%ASL32Single(!dpScratch)
|
||||
%ASL32Single(!dpScratch)
|
||||
%ASL32Single(!dpScratch)
|
||||
%ASL32Single(!dpScratch)
|
||||
;%ASL32(!dpScratch,#$04)
|
||||
|
||||
LDA.w y : STA.b Scrap08+4
|
||||
LDA.w y+2 : STA.b Scrap08+6
|
||||
%LSR32Single(Scrap08+4)
|
||||
%LSR32Single(Scrap08+4)
|
||||
%LSR32Single(Scrap08+4)
|
||||
;%LSR32(Scrap08+4,#$03)
|
||||
LDA.w !y : STA.b !dpScratch+4
|
||||
LDA.w !y+2 : STA.b !dpScratch+6
|
||||
%LSR32Single(!dpScratch+4)
|
||||
%LSR32Single(!dpScratch+4)
|
||||
%LSR32Single(!dpScratch+4)
|
||||
;%LSR32(!dpScratch+4,#$03)
|
||||
|
||||
LDA.b Scrap08 : EOR.b Scrap08+4 : STA.w CryptoScratch+4
|
||||
LDA.b Scrap08+2 : EOR.b Scrap08+6 : STA.w CryptoScratch+6
|
||||
LDA.b !dpScratch : EOR.b !dpScratch+4 : STA.w !upperScratch+4
|
||||
LDA.b !dpScratch+2 : EOR.b !dpScratch+6 : STA.w !upperScratch+6
|
||||
|
||||
;================================
|
||||
; upperscratch = upperscratch + upperscratch2 ( == (z>>5^y<<2) + (y>>3^z<<4) )
|
||||
|
||||
LDA.w CryptoScratch : !ADD.w CryptoScratch+4 : STA.w CryptoScratch
|
||||
LDA.w CryptoScratch+2 : ADC.w CryptoScratch+6 : STA.w CryptoScratch+2
|
||||
LDA.w !upperScratch : !ADD.w !upperScratch+4 : STA.w !upperScratch
|
||||
LDA.w !upperScratch+2 : ADC.w !upperScratch+6 : STA.w !upperScratch+2
|
||||
|
||||
;================================
|
||||
; dpscratch = sum^y
|
||||
|
||||
LDA.w Sum : EOR.w y : STA.b Scrap08
|
||||
LDA.w Sum+2 : EOR.w y+2 : STA.b Scrap08+2
|
||||
LDA.w !sum : EOR.w !y : STA.b !dpScratch
|
||||
LDA.w !sum+2 : EOR.w !y+2 : STA.b !dpScratch+2
|
||||
|
||||
;================================
|
||||
; dpscratch2 = (k[p&3^e]^z)
|
||||
|
||||
LDA.w p : AND.w #$0003 : EOR.w e : ASL #2 : TAX ; put (p&3)^e into X
|
||||
LDA.w KeyBase, X : EOR.w z : STA.b Scrap08+4
|
||||
LDA.w KeyBase+2, X : EOR.w z+2 : STA.b Scrap08+6
|
||||
LDA.w !p : AND.w #$0003 : EOR.w !e : ASL #2 : TAX ; put (p&3)^e into X
|
||||
LDA.w !keyBase, X : EOR.w !z : STA.b !dpScratch+4
|
||||
LDA.w !keyBase+2, X : EOR.w !z+2 : STA.b !dpScratch+6
|
||||
|
||||
;================================
|
||||
; upperscratch2 = dpscratch + dpscratch2 (== (sum^y) + (k[p&3^e]^z))
|
||||
LDA.b Scrap08 : !ADD.b Scrap08+4 : STA.w CryptoScratch+4
|
||||
LDA.b Scrap08+2 : ADC.b Scrap08+6 : STA.w CryptoScratch+6
|
||||
LDA.b !dpScratch : !ADD.b !dpScratch+4 : STA.w !upperScratch+4
|
||||
LDA.b !dpScratch+2 : ADC.b !dpScratch+6 : STA.w !upperScratch+6
|
||||
|
||||
;================================
|
||||
; MXResult = uppserscratch ^ upperscratch2
|
||||
|
||||
LDA.w CryptoScratch : EOR.w CryptoScratch+4 : STA.b Scrap08
|
||||
LDA.w CryptoScratch+2 : EOR.w CryptoScratch+6 : STA.b Scrap08+2
|
||||
LDA.w !upperScratch : EOR.w !upperScratch+4 : STA.b !MXResult
|
||||
LDA.w !upperScratch+2 : EOR.w !upperScratch+6 : STA.b !MXResult+2
|
||||
PLX
|
||||
RTS
|
||||
|
||||
;!DIVIDEND_LOW = $4204
|
||||
;!DIVIDEND_HIGH = $4205
|
||||
;!DIVISOR = $4206
|
||||
;!QUOTIENT_LOW = $4214
|
||||
;!QUOTIENT_HIGH = $4215
|
||||
|
||||
XXTEA_Decode:
|
||||
PHP : PHB
|
||||
SEP #$30 ; set 8-bit accumulator and index
|
||||
|
||||
LDA.b #$7F : PHA : PLB
|
||||
|
||||
STZ.b Scrap04+1 ; set upper byte of n to be zero, so it can safely be accessed in 16-bit mode
|
||||
STZ.b !n+1 ; set upper byte of n to be zero, so it can safely be accessed in 16-bit mode
|
||||
|
||||
; search for lookup table index to avoid division and multiplication
|
||||
LDX.b #0
|
||||
-
|
||||
LDA.l .n_lookup, X
|
||||
CMP.b Scrap04 : !BLT +
|
||||
CMP.b !n : !BLT +
|
||||
INX
|
||||
BRA -
|
||||
+
|
||||
; rounds = 6 + 52/n;
|
||||
LDA.l .round_counts, X : STA.b Scrap06 : STZ.b Scrap06+1
|
||||
LDA.l .round_counts, X : STA.b !rounds : STZ.b !rounds+1
|
||||
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
|
||||
; sum = rounds*DELTA;
|
||||
TXA : ASL #2 : TAX
|
||||
LDA.l .initial_sums, X : STA.w Sum
|
||||
LDA.l .initial_sums+2, X : STA.w Sum+2
|
||||
LDA.l .initial_sums, X : STA.w !sum
|
||||
LDA.l .initial_sums+2, X : STA.w !sum+2
|
||||
|
||||
; y = v[0];
|
||||
LDA.w v : STA.w y
|
||||
LDA.w v+2 : STA.w y+2
|
||||
LDA.w !v : STA.w !y
|
||||
LDA.w !v+2 : STA.w !y+2
|
||||
---
|
||||
LDA.w Sum : LSR #2 : AND.w #$0003 : STA.w e ; e = (sum >> 2) & 3;
|
||||
LDA.w !sum : LSR #2 : AND.w #$0003 : STA.w !e ; e = (sum >> 2) & 3;
|
||||
|
||||
LDA.b Scrap04 : DEC : STA.w p
|
||||
LDA.b !n : DEC : STA.w !p
|
||||
-- BEQ + ; for (p=n-1; p>0; p--) {
|
||||
; z = v[p-1];
|
||||
ASL #2 : TAX
|
||||
LDA.w v-4, X : STA.w z
|
||||
LDA.w v-4+2, X : STA.w z+2
|
||||
LDA.w !v-4, X : STA.w !z
|
||||
LDA.w !v-4+2, X : STA.w !z+2
|
||||
|
||||
; y = v[p] -= MX;
|
||||
JSR CryptoMX
|
||||
LDA.w p : ASL #2 : TAX
|
||||
LDA.w v, X : !SUB.b Scrap08 : STA.w v, X : STA.w y
|
||||
LDA.w v+2, X : SBC.b Scrap08+2 : STA.w v+2, X : STA.w y+2
|
||||
LDA.w !p : ASL #2 : TAX
|
||||
LDA.w !v, X : !SUB.b !MXResult : STA.w !v, X : STA.w !y
|
||||
LDA.w !v+2, X : SBC.b !MXResult+2 : STA.w !v+2, X : STA.w !y+2
|
||||
|
||||
LDA.w p : DEC : STA.w p : BRA -- ; }
|
||||
LDA.w !p : DEC : STA.w !p : BRA -- ; }
|
||||
+
|
||||
|
||||
; z = v[n-1];
|
||||
LDA.b Scrap04 : DEC : ASL #2 : TAX
|
||||
LDA.w v, X : STA.w z
|
||||
LDA.w v+2, X : STA.w z+2
|
||||
LDA.b !n : DEC : ASL #2 : TAX
|
||||
LDA.w !v, X : STA.w !z
|
||||
LDA.w !v+2, X : STA.w !z+2
|
||||
|
||||
; y = v[0] -= MX;
|
||||
JSR CryptoMX
|
||||
LDA.w v : !SUB.b Scrap08 : STA.w v : STA.w y
|
||||
LDA.w v+2 : SBC.b Scrap08+2 : STA.w v+2 : STA.w y+2
|
||||
LDA.w !v : !SUB.b !MXResult : STA.w !v : STA.w !y
|
||||
LDA.w !v+2 : SBC.b !MXResult+2 : STA.w !v+2 : STA.w !y+2
|
||||
|
||||
; sum -= DELTA;
|
||||
LDA.w Sum : !SUB.l CryptoDelta : STA.w Sum
|
||||
LDA.w Sum+2 : SBC.l CryptoDelta+2 : STA.w Sum+2
|
||||
LDA.w !sum : !SUB.l CryptoDelta : STA.w !sum
|
||||
LDA.w !sum+2 : SBC.l CryptoDelta+2 : STA.w !sum+2
|
||||
|
||||
DEC.b Scrap06 : BEQ + : JMP --- : + ; } while (--rounds);
|
||||
DEC !rounds : BEQ + : JMP --- : + ; } while (--rounds);
|
||||
PLB : PLP
|
||||
RTL
|
||||
|
||||
@@ -208,3 +243,69 @@ db 32 ; n is 2
|
||||
;dd (23*$9e3779b9)&$ffffffff ; n is 3
|
||||
dd (32*$9e3779b9)&$ffffffff ; n is 2
|
||||
|
||||
;void btea(uint32_t *v, int n, uint32_t const key[4]) {
|
||||
; uint32_t y, z, sum;
|
||||
; unsigned p, rounds, e;
|
||||
|
||||
; } else if (n < -1) { /* Decoding Part */
|
||||
; n = -n;
|
||||
; rounds = 6 + 52/n;
|
||||
; sum = rounds*DELTA;
|
||||
; y = v[0];
|
||||
; do {
|
||||
; e = (sum >> 2) & 3;
|
||||
; for (p=n-1; p>0; p--) {
|
||||
; z = v[p-1];
|
||||
; y = v[p] -= MX;
|
||||
; }
|
||||
; z = v[n-1];
|
||||
; y = v[0] -= MX;
|
||||
; sum -= DELTA;
|
||||
; } while (--rounds);
|
||||
; }
|
||||
|
||||
;BTEA will encode or decode n words as a single block where n > 1
|
||||
;
|
||||
;v is the n word data vector
|
||||
;k is the 4 word key
|
||||
;n is negative for decoding
|
||||
;if n is zero result is 1 and no coding or decoding takes place, otherwise the result is zero
|
||||
;assumes 32 bit 'long' and same endian coding and decoding
|
||||
;#include <stdint.h>
|
||||
;#define DELTA 0x9e3779b9
|
||||
;#define MX ((((z>>5)^(y<<2)) + ((y>>3)^(z<<4))) ^ ((sum^y) + (key[(p&3)^e] ^ z)))
|
||||
;
|
||||
;void btea(uint32_t *v, int n, uint32_t const key[4]) {
|
||||
; uint32_t y, z, sum;
|
||||
; unsigned p, rounds, e;
|
||||
; if (n > 1) { /* Coding Part */
|
||||
; rounds = 6 + 52/n;
|
||||
; sum = 0;
|
||||
; z = v[n-1];
|
||||
; do {
|
||||
; sum += DELTA;
|
||||
; e = (sum >> 2) & 3;
|
||||
; for (p=0; p<n-1; p++) {
|
||||
; y = v[p+1];
|
||||
; z = v[p] += MX;
|
||||
; }
|
||||
; y = v[0];
|
||||
; z = v[n-1] += MX;
|
||||
; } while (--rounds);
|
||||
; } else if (n < -1) { /* Decoding Part */
|
||||
; n = -n;
|
||||
; rounds = 6 + 52/n;
|
||||
; sum = rounds*DELTA;
|
||||
; y = v[0];
|
||||
; do {
|
||||
; e = (sum >> 2) & 3;
|
||||
; for (p=n-1; p>0; p--) {
|
||||
; z = v[p-1];
|
||||
; y = v[p] -= MX;
|
||||
; }
|
||||
; z = v[n-1];
|
||||
; y = v[0] -= MX;
|
||||
; sum -= DELTA;
|
||||
; } while (--rounds);
|
||||
; }
|
||||
;}
|
||||
|
||||
@@ -1,35 +1,48 @@
|
||||
;================================================================================
|
||||
!CUCCO = $0B
|
||||
!INERT = $00
|
||||
!INIT = $08
|
||||
!ALIVE = $09
|
||||
!CUCCO_ENRAGED = $23
|
||||
|
||||
!IS_INDOORS = "$7E001B"
|
||||
!ENEMY_STATE_TABLE = "$7E0DD0"
|
||||
!ENEMY_TYPE_TABLE = "$7E0E20"
|
||||
!ENEMY_AUX1_TABLE = "$7E0DA0"
|
||||
!ENEMY_AUX2_TABLE = "$7E0DB0"
|
||||
!ENEMY_DIRECTION_TABLE = "$7E0EB0"
|
||||
!CUCCO = "#$0B"
|
||||
!INERT = "#$00"
|
||||
!INIT = "#$08"
|
||||
!ALIVE = "#$09"
|
||||
!CUCCO_ENRAGED = "#$23"
|
||||
!LINK_POS_Y_LOW = "$20"
|
||||
!LINK_POS_Y_HIGH = "$21"
|
||||
!LINK_POS_X_LOW = "$22"
|
||||
!LINK_POS_X_HIGH = "$23"
|
||||
!ENEMY_POS_Y_LOW = "$7E0D00"
|
||||
!ENEMY_POS_X_LOW = "$7E0D10"
|
||||
!ENEMY_POS_Y_HIGH = "$7E0D20"
|
||||
!ENEMY_POS_X_HIGH = "$7E0D30"
|
||||
CuccoStorm:
|
||||
|
||||
|
||||
SEP #$30 ; set 8-bit accumulator index registers
|
||||
LDA.l CuccoStormer : BEQ + ; only if storm is on
|
||||
LDA.b GameMode : CMP.b #$09 : BNE + ; only if outdoors
|
||||
LDA.l CuccoStormModifier : BEQ + ; only if storm is on
|
||||
LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors
|
||||
LDA.l LoopFrames : AND.b #$7F : BNE + ; check every 128 frames
|
||||
|
||||
|
||||
-
|
||||
;==== Find a Cucco
|
||||
|
||||
|
||||
LDY.b #$FF : PHY ; push "cucco not found"
|
||||
|
||||
|
||||
LDX.b #$00 : -- : CPX.b #$10 : !BGE .ldone
|
||||
LDA.w SpriteAITable, X : CMP.b #!ALIVE : BEQ +++
|
||||
LDA.w !ENEMY_STATE_TABLE, X : CMP.b !ALIVE : BEQ +++
|
||||
; enemy not found
|
||||
CMP.b #!INERT : BNE ++
|
||||
CMP.b !INERT : BNE ++
|
||||
; log inert enemy slot
|
||||
PLA : PHX
|
||||
BRA ++
|
||||
+++
|
||||
; found an enemy
|
||||
LDA.l SpriteTypeTable, X : CMP.b #!CUCCO : BNE ++
|
||||
LDA.l !ENEMY_TYPE_TABLE, X : CMP.b !CUCCO : BNE ++
|
||||
; it's a cucco
|
||||
TXY ; record where we found the living cucco in case we don't find any angry ones
|
||||
LDA.w SpriteAuxTable, X : CMP.b #!CUCCO_ENRAGED : !BLT ++
|
||||
LDA.w !ENEMY_AUX1_TABLE, X : CMP.b !CUCCO_ENRAGED : !BLT ++
|
||||
PLA : BRA + ; we found an angry cucco, done
|
||||
++ : INX : BRA -- : .ldone
|
||||
|
||||
@@ -39,22 +52,22 @@ CuccoStorm:
|
||||
; we didn't find a cucco, so try to create one
|
||||
PLY
|
||||
CPY.b #$FF : BEQ + ; fail if no slots found
|
||||
LDA.b #!CUCCO : STA.w SpriteTypeTable, Y
|
||||
LDA.b #!INIT : STA.w SpriteAITable, Y
|
||||
LDA.b LinkPosY : STA.w SpritePosYLow, Y
|
||||
LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y
|
||||
LDA.b LinkPosX : STA.w SpritePosXLow, Y
|
||||
LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y
|
||||
LDA.b !CUCCO : STA.w !ENEMY_TYPE_TABLE, Y
|
||||
LDA.b !INIT : STA.w !ENEMY_STATE_TABLE, Y
|
||||
LDA.b !LINK_POS_Y_LOW : STA.w !ENEMY_POS_Y_LOW, Y
|
||||
LDA.b !LINK_POS_Y_HIGH : STA.w !ENEMY_POS_Y_HIGH, Y
|
||||
LDA.b !LINK_POS_X_LOW : STA.w !ENEMY_POS_X_LOW, Y
|
||||
LDA.b !LINK_POS_X_HIGH : STA.w !ENEMY_POS_X_HIGH, Y
|
||||
BRA +++
|
||||
++
|
||||
PLA
|
||||
+++
|
||||
|
||||
|
||||
;==== Enrage a Cucco
|
||||
|
||||
LDA.b #!CUCCO_ENRAGED : STA.w SpriteAuxTable, Y ; enrage the cucco
|
||||
LDA.b #$00 : STA.w SpriteAuxTable+$10, Y : STA.w SpriteDirectionTable, Y
|
||||
|
||||
|
||||
LDA.b !CUCCO_ENRAGED : STA.w !ENEMY_AUX1_TABLE, Y ; enrage the cucco
|
||||
LDA.b #$00 : STA.w !ENEMY_AUX2_TABLE, Y : STA.w !ENEMY_DIRECTION_TABLE, Y
|
||||
|
||||
;====
|
||||
+
|
||||
RTL
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
PalettesCustom:
|
||||
.master_sword
|
||||
dw $0000, $7E4E, $6FF4, $1CF5, $7FFF, $1CE7, $7A10, $64A5
|
||||
.tempered_sword
|
||||
dw $7FFF, $093B, $169F, $7E8D, $7FFF, $1CE7, $7A10, $64A5
|
||||
.golden_sword
|
||||
dw $0000, $033F, $7FFF, $2640, $7FFF, $1CE7, $7A10, $64A5
|
||||
.fighter_shield
|
||||
dw $0000, $7FFF, $27FF, $5E2D, $7FFF, $1CE7, $7A10, $64A5
|
||||
.red_shield
|
||||
dw $0000, $7FFF, $27FF, $5E2D, $4F5F, $1CE7, $2E9C, $14B6
|
||||
.mirror_shield
|
||||
dw $0000, $7E4E, $6F44, $1CF5, $7399, $1CE7, $02F9, $0233
|
||||
.crystal
|
||||
dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672
|
||||
.off_black
|
||||
dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5
|
||||
BIN
damage_table_bombos.bin
Normal file
BIN
damage_table_bombos.bin
Normal file
Binary file not shown.
BIN
damage_table_pseudo_sword.bin
Normal file
BIN
damage_table_pseudo_sword.bin
Normal file
Binary file not shown.
BIN
damage_table_sword_bombs.bin
Normal file
BIN
damage_table_sword_bombs.bin
Normal file
Binary file not shown.
27
darkroomitems.asm
Normal file
27
darkroomitems.asm
Normal file
@@ -0,0 +1,27 @@
|
||||
CheckReceivedItemPropertiesBeforeLoad:
|
||||
LDA $A0 : BEQ .normalCode
|
||||
LDA $7EC005 : BNE .lightOff
|
||||
.normalCode
|
||||
JSL LoadReceivedItemExpandedProperties ; get palette
|
||||
RTL
|
||||
|
||||
.lightOff
|
||||
PHX : PHY : PHB
|
||||
JSL LoadReceivedItemExpandedProperties ; get palette
|
||||
|
||||
REP #$30
|
||||
AND #$0007 ; mask out palette
|
||||
ASL #5 ; multiply by 32
|
||||
ADC #$C610 ; offset to latter half
|
||||
|
||||
TAX ; give to destination
|
||||
LDY #$C610 ; target palette SP0 colors 8-F
|
||||
|
||||
LDA #$000F ; 16 bytes
|
||||
MVN $7E, $7E ; move palette
|
||||
|
||||
SEP #$30
|
||||
PLB : PLY : PLX
|
||||
INC $15
|
||||
LDA #$00
|
||||
RTL
|
||||
@@ -7,81 +7,76 @@ DarkWorldSaveFix:
|
||||
JML.l StatSaveCounter
|
||||
;--------------------------------------------------------------------------------
|
||||
DoWorldFix:
|
||||
LDA.l InvertedMode : BEQ +
|
||||
LDA InvertedMode : BEQ +
|
||||
JMP DoWorldFix_Inverted
|
||||
+
|
||||
LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check
|
||||
LDA.l FollowerIndicator : CMP.b #$04 : BEQ .setLightWorld ; check if old man is following
|
||||
LDA.l MirrorEquipment : BEQ .noMirror ; check if we have the mirror
|
||||
LDA MirrorEquipment : BEQ .noMirror ; check if we have the mirror
|
||||
.skip_mirror_check ; alt entrance point
|
||||
LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
|
||||
.setLightWorld
|
||||
LDA.b #$00
|
||||
LDA ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
|
||||
.aga1Alive
|
||||
LDA #$00
|
||||
.noMirror
|
||||
STA.l CurrentWorld ; set flag to light world
|
||||
LDA.l FollowerIndicator : CMP.b #$07 : BNE .done : INC : STA.l FollowerIndicator ; convert frog to dwarf
|
||||
STA CurrentWorld ; set flag to light world
|
||||
LDA FollowerIndicator : CMP #$07 : BNE .done : INC : STA FollowerIndicator ; convert frog to dwarf
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetDeathWorldChecked:
|
||||
LDA.l InvertedMode : BEQ +
|
||||
LDA InvertedMode : BEQ +
|
||||
JMP SetDeathWorldChecked_Inverted
|
||||
+
|
||||
LDA.b IndoorsFlag : BEQ .outdoors
|
||||
LDA.w DungeonID : CMP.b #$FF : BNE .dungeon
|
||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++
|
||||
LDA.l GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon
|
||||
LDA $1B : BEQ .outdoors
|
||||
LDA $040C : CMP #$FF : BNE .dungeon
|
||||
LDA $A0 : ORA $A1 : BNE ++
|
||||
LDA GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon
|
||||
++
|
||||
.outdoors
|
||||
JMP DoWorldFix
|
||||
|
||||
.dungeon
|
||||
LDA.l MosaicLevel : BNE .dontfix ; this is a sanc & quit
|
||||
LDA.l Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon
|
||||
.dontfix
|
||||
JMP DoWorldFix_skip_mirror_check
|
||||
LDA Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon
|
||||
JMP DoWorldFix_skip_mirror_check
|
||||
|
||||
.pyramid
|
||||
LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world
|
||||
LDA.l FollowerIndicator : CMP.b #$08 : BNE .done : DEC : STA.l FollowerIndicator : + ; convert dwarf to frog
|
||||
LDA #$40 : STA CurrentWorld ; set flag to dark world
|
||||
LDA FollowerIndicator : CMP #$08 : BNE .done : DEC : STA FollowerIndicator : + ; convert dwarf to frog
|
||||
.done
|
||||
RTL
|
||||
;================================================================================
|
||||
DoWorldFix_Inverted:
|
||||
LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check
|
||||
LDA.l FollowerIndicator : CMP.b #$04 : BEQ .setDarkWorld ; check if old man is following
|
||||
LDA.l MirrorEquipment : BEQ .setDarkWorld ; check if we have the mirror
|
||||
LDA MirrorEquipment : BEQ .noMirror ; check if we have the mirror
|
||||
.skip_mirror_check ; alt entrance point
|
||||
LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
|
||||
.setDarkWorld
|
||||
LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world
|
||||
LDA.l FollowerIndicator
|
||||
CMP.b #$07 : BEQ .clear ; clear frog
|
||||
CMP.b #$08 : BEQ .clear ; clear dwarf - consider flute implications
|
||||
LDA ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
|
||||
.noMirror
|
||||
.aga1Alive
|
||||
LDA #$40 : STA CurrentWorld ; set flag to dark world
|
||||
LDA FollowerIndicator
|
||||
CMP #$07 : BEQ .clear ; clear frog
|
||||
CMP #$08 : BEQ .clear ; clear dwarf - consider flute implications
|
||||
BRA .done
|
||||
.clear
|
||||
LDA.b #$00 : STA.l FollowerIndicator ; clear follower
|
||||
LDA.b #$00 : STA FollowerIndicator ; clear follower
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetDeathWorldChecked_Inverted:
|
||||
LDA.b IndoorsFlag : BEQ .outdoors
|
||||
LDA.w DungeonID : CMP.b #$FF : BNE .dungeon
|
||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++
|
||||
LDA.l GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon
|
||||
LDA $1B : BEQ .outdoors
|
||||
LDA $040C : CMP #$FF : BNE .dungeon
|
||||
LDA $A0 : ORA $A1 : BNE ++
|
||||
LDA GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon
|
||||
++
|
||||
.outdoors
|
||||
JMP DoWorldFix
|
||||
|
||||
.dungeon
|
||||
LDA.l MosaicLevel : BNE .dontfix ; this is a sanc & quit
|
||||
LDA.l Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon
|
||||
.dontfix
|
||||
JMP DoWorldFix_Inverted_skip_mirror_check
|
||||
LDA Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon
|
||||
JMP DoWorldFix_Inverted_skip_mirror_check
|
||||
|
||||
.castle
|
||||
LDA.b #$00 : STA.l CurrentWorld ; set flag to dark world
|
||||
LDA.l FollowerIndicator : CMP.b #$07 : BNE + : LDA.b #$08 : STA.l FollowerIndicator : + ; convert frog to dwarf
|
||||
LDA #$00 : STA CurrentWorld ; set flag to dark world
|
||||
LDA FollowerIndicator : CMP #$07 : BNE + : LDA.b #$08 : STA FollowerIndicator : + ; convert frog to dwarf
|
||||
.done
|
||||
RTL
|
||||
;================================================================================
|
||||
@@ -89,20 +84,20 @@ RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
FakeWorldFix:
|
||||
LDA.l FixFakeWorld : BEQ +
|
||||
LDA.b OverworldIndex : AND.b #$40 : STA.l CurrentWorld
|
||||
LDA FixFakeWorld : BEQ +
|
||||
LDA $8A : AND.b #$40 : STA CurrentWorld
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MasterSwordFollowerClear:
|
||||
LDA.l FollowerIndicator
|
||||
CMP.b #$0E : BNE .exit ; clear master sword follower
|
||||
LDA.b #$00 : STA.l FollowerIndicator ; clear follower
|
||||
LDA FollowerIndicator
|
||||
CMP #$0E : BNE .exit ; clear master sword follower
|
||||
LDA.b #$00 : STA FollowerIndicator ; clear follower
|
||||
.exit
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FixAgahnimFollowers:
|
||||
LDA.b #$00 : STA.l FollowerIndicator ; clear follower
|
||||
LDA.b #$00 : STA FollowerIndicator ; clear follower
|
||||
JML PrepDungeonExit ; thing we wrote over
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -112,10 +107,10 @@ macro SetMinimum(base,filler,compare)
|
||||
?done:
|
||||
endmacro
|
||||
RefreshRainAmmo:
|
||||
LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state
|
||||
LDA ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state
|
||||
RTL
|
||||
.rain
|
||||
LDA.l StartingEntrance
|
||||
LDA StartingEntrance
|
||||
+ CMP.b #$03 : BNE + ; Uncle
|
||||
%SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle)
|
||||
%SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle)
|
||||
@@ -135,24 +130,30 @@ RefreshRainAmmo:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetEscapeAssist:
|
||||
LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
|
||||
LDA ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
|
||||
.rain
|
||||
LDA.l EscapeAssist
|
||||
BIT.b #$04 : BEQ + : STA.l InfiniteArrows : +
|
||||
BIT.b #$02 : BEQ + : STA.l InfiniteBombs : +
|
||||
BIT.b #$01 : BEQ + : STA.l InfiniteArrows : +
|
||||
BIT.b #$04 : BEQ + : STA InfiniteMagicModifier : +
|
||||
BIT.b #$02 : BEQ + : STA InfiniteBombsModifier : +
|
||||
BIT.b #$01 : BEQ + : STA InfiniteArrowsModifier : +
|
||||
BRA ++
|
||||
.no_train ; choo choo
|
||||
LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA.l InfiniteMagic : +
|
||||
LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA.l InfiniteBombs : +
|
||||
LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : +
|
||||
LDA.l EscapeAssist
|
||||
BIT.b #$40 : BEQ + : STA InfiniteMagicModifier : +
|
||||
BIT.b #$20 : BEQ + : STA InfiniteBombsModifier : +
|
||||
BIT.b #$10 : BEQ + : STA InfiniteArrowsModifier : +
|
||||
++
|
||||
|
||||
LDA.l SpecialWeapons : CMP #$01 : BNE +
|
||||
LDA.l SpecialWeaponLevel : BEQ +
|
||||
LDA #$01 : STA InfiniteBombsModifier
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetSilverBowMode:
|
||||
LDA.l SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode
|
||||
LDA.l BowEquipment : CMP.b #$3 : BCC +
|
||||
SBC.b #$02 : STA.l BowEquipment
|
||||
LDA SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode
|
||||
LDA BowEquipment : CMP.b #$3 : BCC +
|
||||
SBC.b #$02 : STA BowEquipment
|
||||
+
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
=9F
|
||||
0=53
|
||||
1=54
|
||||
2=55
|
||||
3=56
|
||||
4=57
|
||||
5=58
|
||||
6=59
|
||||
7=5A
|
||||
8=5B
|
||||
9=5C
|
||||
A=5D
|
||||
B=5E
|
||||
C=5F
|
||||
D=60
|
||||
E=61
|
||||
F=62
|
||||
G=63
|
||||
H=64
|
||||
I=65
|
||||
J=66
|
||||
K=67
|
||||
L=68
|
||||
M=69
|
||||
N=6A
|
||||
O=6B
|
||||
P=6C
|
||||
Q=6D
|
||||
R=6E
|
||||
S=6F
|
||||
T=70
|
||||
U=71
|
||||
V=72
|
||||
W=73
|
||||
X=74
|
||||
Y=75
|
||||
Z=76
|
||||
a=A0
|
||||
b=A1
|
||||
c=A2
|
||||
d=A3
|
||||
e=A4
|
||||
f=A5
|
||||
g=A6
|
||||
h=A7
|
||||
i=A8
|
||||
j=A9
|
||||
k=AA
|
||||
l=AB
|
||||
m=AC
|
||||
n=AD
|
||||
o=AE
|
||||
p=AF
|
||||
q=B0
|
||||
r=B1
|
||||
s=B2
|
||||
t=B3
|
||||
u=B4
|
||||
v=B5
|
||||
w=B6
|
||||
x=B7
|
||||
y=B8
|
||||
z=B9
|
||||
'=D9
|
||||
"=DA
|
||||
/=DB
|
||||
.=DC
|
||||
:=DD
|
||||
_=DE
|
||||
^=DF
|
||||
&=E0
|
||||
#=E1
|
||||
@=E2
|
||||
>=E3
|
||||
?=E4
|
||||
!=E5
|
||||
~=E6
|
||||
,=E7
|
||||
-=E8
|
||||
@@ -1,79 +0,0 @@
|
||||
=9F
|
||||
0=79
|
||||
1=7A
|
||||
2=7B
|
||||
3=7C
|
||||
4=7D
|
||||
5=7E
|
||||
6=7F
|
||||
7=80
|
||||
8=81
|
||||
9=82
|
||||
A=83
|
||||
B=84
|
||||
C=85
|
||||
D=86
|
||||
E=87
|
||||
F=88
|
||||
G=89
|
||||
H=8A
|
||||
I=8B
|
||||
J=8C
|
||||
K=8D
|
||||
L=8E
|
||||
M=8F
|
||||
N=90
|
||||
O=91
|
||||
P=92
|
||||
Q=93
|
||||
R=94
|
||||
S=95
|
||||
T=96
|
||||
U=97
|
||||
V=98
|
||||
W=99
|
||||
X=9A
|
||||
Y=9B
|
||||
Z=9C
|
||||
a=BB
|
||||
b=BC
|
||||
c=BD
|
||||
d=BE
|
||||
e=BF
|
||||
f=C0
|
||||
g=C1
|
||||
h=C2
|
||||
i=C3
|
||||
j=C4
|
||||
k=C5
|
||||
l=C6
|
||||
m=C7
|
||||
n=C8
|
||||
o=C9
|
||||
p=CA
|
||||
q=CB
|
||||
r=CC
|
||||
s=CD
|
||||
t=CE
|
||||
u=CF
|
||||
v=D0
|
||||
w=D1
|
||||
x=D2
|
||||
y=D3
|
||||
z=D4
|
||||
'=EC
|
||||
"=ED
|
||||
/=EE
|
||||
.=EF
|
||||
:=F0
|
||||
_=F1
|
||||
^=F2
|
||||
&=F3
|
||||
#=F4
|
||||
@=F5
|
||||
>=F6
|
||||
?=F7
|
||||
!=F8
|
||||
~=F9
|
||||
,=FA
|
||||
-=FB
|
||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB |
@@ -1,55 +0,0 @@
|
||||
; Kanji replacement characters
|
||||
|
||||
org $8E9AC9
|
||||
;.charDD ; 𓄿
|
||||
db $FB, $8C, $73, $CB, $30, $4B, $30, $54
|
||||
db $2B, $5B, $24, $2D, $12, $13, $61, $1E
|
||||
db $36, $09, $1B, $04, $14, $0B, $15, $0A
|
||||
db $15, $0A, $21, $1E, $1E, $48, $30, $38
|
||||
;.charDE ; ☥
|
||||
db $1E, $33, $0C, $2D, $12, $2D, $12, $2D
|
||||
db $12, $F3, $0C, $01, $01, $BF, $40, $C0
|
||||
db $3F, $BF, $40, $F2, $0C, $12, $0C, $12
|
||||
db $0C, $12, $0C, $1E, $50, $A0, $F0
|
||||
;.charDF ; ≈
|
||||
db $01, $3B, $6E, $11, $C4, $3B, $91, $6E
|
||||
db $BB, $44, $26, $18, $3C, $E7, $3B, $6E
|
||||
db $11, $C4, $3B, $91, $6E, $BB, $44, $EE
|
||||
db $98, $60, $F0
|
||||
;.charE0 ; 🡅
|
||||
db $0C, $12, $0C, $21, $1E, $40, $3F, $80
|
||||
db $7F, $02, $01, $01, $E1, $1E, $21, $1E
|
||||
db $21, $1E, $21, $1E, $21, $1E, $21, $1E
|
||||
db $21, $1E, $3F, $80, $80
|
||||
;.charE1 ; 🡇
|
||||
db $3F, $21, $1E, $21, $1E, $21, $1E, $21
|
||||
db $1E, $21, $1E, $21, $1E, $E1, $1E, $80
|
||||
db $7F, $40, $3F, $21, $1E, $12, $0C, $0C
|
||||
db $28, $10, $30
|
||||
;.charE2 ; 🡆
|
||||
db $18, $14, $08, $12, $0C, $F1, $0E, $80
|
||||
db $7F, $01, $80, $7F, $80, $7F, $80, $7F
|
||||
db $F1, $0E, $12, $0C, $14, $08, $18, $20
|
||||
db $C0, $C0
|
||||
;.charE3 ; 🡄
|
||||
db $06, $0A, $04, $12, $0C, $23, $1C, $40
|
||||
db $3F, $02, $01, $03, $80, $7F, $80, $7F
|
||||
db $40, $3F, $23, $1C, $12, $0C, $0A, $04
|
||||
db $06, $10, $E0, $F0
|
||||
|
||||
|
||||
org $8EBD94
|
||||
;.charDD ; 𓄿
|
||||
db $BF, $FE, $3F, $FF, $B8 ; 10111111 11111110 00111111 11111111 10111000
|
||||
;.charDE ; ☥
|
||||
db $BF, $FA, $3F, $FF, $B8 ; 10111111 11111010 00111111 11111111 10111000
|
||||
;.charDF ; ≈
|
||||
db $AF, $FE, $2B, $FE, $38 ; 10101111 11111110 00101011 11111110 00111000
|
||||
;.charE0 ; 🡅
|
||||
db $2F, $FE, $3F, $FF, $A8 ; 00101111 11111110 00111111 11111111 10101000
|
||||
;.charE1 ; 🡇
|
||||
db $2F, $F0, $3F, $FF, $B8 ; 00101111 11110000 00111111 11111111 10111000
|
||||
;.charE2 ; 🡆
|
||||
db $2F, $F8, $3F, $FE, $38 ; 00101111 11111000 00111111 11111110 00111000
|
||||
;.charE3 ; 🡄
|
||||
db $2F, $FE, $3F, $FE, $38 ; 00101111 11111110 00111111 11111110 00111000
|
||||
@@ -1,59 +0,0 @@
|
||||
db $00, $01, $02, $03, $04, $CC, $CC ; あ い う え お ⎵ ⎵
|
||||
db $15, $16, $17, $1D, $1E, $CC ; が ぎ ぐ げ ご ⎵
|
||||
db $50, $51, $52, $53, $54, $CC, $CC ; ア イ ウ エ オ ⎵ ⎵
|
||||
db $D0, $D1, $D2, $D3, $D4, $CC ; a b c d e ⎵
|
||||
db $AA, $AB, $AC, $AD, $CC, $CC ; A B C D ⎵ ⎵
|
||||
|
||||
db $08, $09, $0A, $0B, $0C, $CC, $CC ; か き く け こ ⎵ ⎵
|
||||
db $1F, $25, $26, $27, $2D, $CC ; ざ じ ず ぜ ぞ ⎵
|
||||
db $58, $59, $5A, $5B, $5C, $CC, $CC ; カ キ ク ケ コ ⎵ ⎵
|
||||
db $D5, $D6, $D7, $D8, $D9, $CC ; ザ ジ ズ ゼ ゾ ⎵
|
||||
db $AE, $AF, $B0, $B1, $CC, $CC ; E F G H ⎵ ⎵
|
||||
|
||||
db $10, $11, $12, $13, $14, $CC, $CC ; さ し す せ そ ⎵ ⎵
|
||||
db $2E, $2F, $35, $36, $37, $CC ; だ ぢ づ で ど ⎵
|
||||
db $60, $61, $62, $63, $64, $CC, $CC ; サ シ ス セ ソ ⎵ ⎵
|
||||
db $DA, $DB, $DC, $DD, $DE, $CC ; ダ ヂ ヅ デ ド ⎵
|
||||
db $B2, $B3, $B4, $B5, $CC, $CC ; I J K L ⎵ ⎵
|
||||
|
||||
db $18, $19, $1A, $1B, $1C, $CC, $CC ; た ち つ て と ⎵ ⎵
|
||||
db $3D, $3E, $3F, $40, $41, $CC ; ば び ぶ べ ぼ ⎵
|
||||
db $68, $69, $6A, $6B, $6C, $CC, $CC ; タ チ ツ テ ト ⎵ ⎵
|
||||
db $DF, $E0, $E1, $E2, $E3, $CC ; バ ビ ブ ベ ボ ⎵
|
||||
db $B6, $B7, $B8, $B9, $CC, $CC ; M N O P ⎵ ⎵
|
||||
|
||||
db $20, $21, $22, $23, $24, $CC, $CC ; な に ぬ ね の ⎵ ⎵
|
||||
db $42, $43, $44, $45, $46, $CC ; ぱ ぴ ぷ ぺ ぽ ⎵
|
||||
db $70, $71, $72, $73, $74, $CC, $CC ; ナ ニ ヌ ネ ノ ⎵ ⎵
|
||||
db $E4, $E5, $E6, $E7, $E8, $CC ; パ ピ プ ペ ポ ⎵
|
||||
db $BA, $BB, $BC, $BD, $CC, $CC ; Q R S T ⎵ ⎵
|
||||
|
||||
db $28, $29, $2A, $2B, $2C, $CC, $CC ; は ひ ふ へ ほ ⎵ ⎵
|
||||
db $65, $66, $67, $6D, $6E, $CC
|
||||
db $78, $79, $7A, $7B, $7C, $CC, $CC ; ハ ヒ フ ヘ ホ ⎵ ⎵
|
||||
db $E9, $EA, $EB, $EC, $C6, $CC ; ァ ィ ゥ ェ ォ ⎵
|
||||
db $BE, $BF, $C0, $C1, $CC, $CC ; U V W X ⎵ ⎵
|
||||
|
||||
db $30, $31, $32, $33, $34, $CC, $CC ; ま み む め も ⎵ ⎵
|
||||
db $6F, $75, $76, $77, $7D, $CC ; ザ ジ ズ ゼ ゾ ⎵
|
||||
db $80, $81, $82, $83, $84, $CC, $CC ; マ ミ ム メ モ ⎵ ⎵
|
||||
db $CC, $CC, $CC, $CC, $9A, $CC ; ャ ュ ョ ⎵ ッ ⎵
|
||||
db $C2, $C3, $C9, $CE, $CC, $CC ; Y Z - 〜 ⎵ ⎵
|
||||
|
||||
db $05, $CC, $06, $CC, $07, $CC, $CC ; や ⎵ ゆ ⎵ よ ⎵ ⎵
|
||||
db $7E, $7F, $85, $86, $87, $CC ; ダ ヂ ヅ デ ド ⎵
|
||||
db $55, $CC, $56, $CC, $57, $CC, $CC ; ヤ ⎵ ユ ⎵ ヨ ⎵ ⎵
|
||||
db $A0, $A1, $A2, $A3, $A4, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
|
||||
db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
|
||||
|
||||
db $38, $39, $3A, $3B, $3C, $CC, $CC ; ら り る れ ろ ⎵ ⎵
|
||||
db $8D, $8E, $8F, $90, $91, $CC ; バ ビ ブ ベ ボ ⎵
|
||||
db $88, $89, $8A, $8B, $8C, $CC, $CC ; ラ リ ル レ ロ ⎵ ⎵
|
||||
db $A5, $A6, $A7, $A8, $A9, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
|
||||
db $CA, $CB, $CD, $CD, $CC, $CC ; 🡄 🡆 END ⎵ ⎵
|
||||
|
||||
db $0D, $0E, $0F, $CC, $C9, $CC, $CC ; わ を ん ⎵ - ⎵ ⎵
|
||||
db $92, $93, $94, $95, $96, $CC ; パ ピ プ ペ ポ ⎵
|
||||
db $5D, $5E, $5F, $CC, $C9, $CC, $CC ; ワ ヲ ン ⎵ - ⎵ ⎵
|
||||
db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
|
||||
db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,72 +0,0 @@
|
||||
dw $E164, $3900 ; VRAM $C9C2 | 58 bytes | Horizontal
|
||||
dw $1CA2, $0188, $1CA3, $0188, $1CA4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DA0, $0188, $1DA1, $0188, $1DA2, $0188
|
||||
dw $1DA3, $0188, $1DA4, $0188, $0188, $0188, $1D4A, $0188
|
||||
dw $1D4B, $0188, $1D4C, $0188, $1D4D
|
||||
|
||||
dw $0165, $3900 ; VRAM $CA02 | 58 bytes | Horizontal
|
||||
dw $1CB2, $0188, $1CB3, $0188, $1CB4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DB0, $0188, $1DB1, $0188, $1DB2, $0188
|
||||
dw $1DB3, $0188, $1DB4, $0188, $0188, $0188, $1D5A, $0188
|
||||
dw $1D5B, $0188, $1D5C, $0188, $1D5D
|
||||
|
||||
dw $2165, $3900 ; VRAM $CA42 | 58 bytes | Horizontal
|
||||
dw $1CAA, $0188, $1CAB, $0188, $1CAC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DA5, $0188, $1DA6, $0188, $1DA7, $0188
|
||||
dw $1DA8, $0188, $1DA9, $0188, $0188, $0188, $1D4E, $0188
|
||||
dw $1D4F, $0188, $1D60, $0188, $1D61
|
||||
|
||||
dw $4165, $3900 ; VRAM $CA82 | 58 bytes | Horizontal
|
||||
dw $1CBA, $0188, $1CBB, $0188, $1CBC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DB5, $0188, $1DB6, $0188, $1DB7, $0188
|
||||
dw $1DB8, $0188, $1DB9, $0188, $0188, $0188, $1D5E, $0188
|
||||
dw $1D5F, $0188, $1D70, $0188, $1D71
|
||||
|
||||
dw $6165, $3900 ; VRAM $CAC2 | 58 bytes | Horizontal
|
||||
dw $1CC2, $0188, $1CC3, $0188, $1CC4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DAA, $0188, $1DAB, $0188, $1DAC, $0188
|
||||
dw $1DAD, $0188, $1DAE, $0188, $0188, $0188, $1D62, $0188
|
||||
dw $1D63, $0188, $1D64, $0188, $1D65
|
||||
|
||||
dw $8165, $3900 ; VRAM $CB02 | 58 bytes | Horizontal
|
||||
dw $1CD2, $0188, $1CD3, $0188, $1CD4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DBA, $0188, $1DBB, $0188, $1DBC, $0188
|
||||
dw $1DBD, $0188, $1DBE, $0188, $0188, $0188, $1D72, $0188
|
||||
dw $1D73, $0188, $1D74, $0188, $1D75
|
||||
|
||||
dw $A165, $3900 ; VRAM $CB42 | 58 bytes | Horizontal
|
||||
dw $1CCA, $0188, $1CCB, $0188, $1CCC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DAF, $0188, $1DC0, $0188, $1DC1, $0188
|
||||
dw $1DC2, $0188, $1DC3, $0188, $0188, $0188, $1D66, $0188
|
||||
dw $1D67, $0188, $1D68, $0188, $1D69
|
||||
|
||||
dw $C165, $3900 ; VRAM $CB82 | 58 bytes | Horizontal
|
||||
dw $1CDA, $0188, $1CDB, $0188, $1CDC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DBF, $0188, $1DD0, $0188, $1DD1, $0188
|
||||
dw $1DD2, $0188, $1DD3, $0188, $0188, $0188, $1D76, $0188
|
||||
dw $1D77, $0188, $1D78, $0188, $1D79
|
||||
|
||||
dw $E165, $3900 ; VRAM $CBC2 | 58 bytes | Horizontal
|
||||
dw $1CE2, $0188, $1CE3, $0188, $1CE4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DC4, $0188, $1DC5, $0188, $1DC6, $0188
|
||||
dw $1DC7, $0188, $1DC8, $0188, $0188, $0188, $1D6A, $0188
|
||||
dw $1D6B, $0188, $1D6C, $0188, $1D6D
|
||||
|
||||
dw $0166, $3900 ; VRAM $CC02 | 58 bytes | Horizontal
|
||||
dw $1CF2, $0188, $1CF3, $0188, $1CF4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DD4, $0188, $1DD5, $0188, $1DD6, $0188
|
||||
dw $1DD7, $0188, $1DD8, $0188, $0188, $0188, $1D7A, $0188
|
||||
dw $1D7B, $0188, $1D7C, $0188, $1D7D
|
||||
|
||||
; dw $2166, $3900 ; VRAM $CC42 | 58 bytes | Horizontal
|
||||
; dw $1CEA, $0188, $1CEB, $0188, $1CEC, $0188, $0188, $0188
|
||||
; dw $0188, $0188, $1DC9, $0188, $1DCA, $0188, $1DCB, $0188
|
||||
; dw $1DCC, $0188, $1D86, $0188, $0188, $0188, $1D6E, $0188
|
||||
; dw $1D6F, $0188, $1D80, $0188, $1D81
|
||||
;
|
||||
; dw $4166, $3900 ; VRAM $CC82 | 58 bytes | Horizontal
|
||||
; dw $1CFA, $0188, $1CFB, $0188, $1CFC, $0188, $0188, $0188
|
||||
; dw $0188, $0188, $1DD9, $0188, $1DDA, $0188, $1DDB, $0188
|
||||
; dw $1DDC, $0188, $1D96, $0188, $0188, $0188, $1D7E, $0188
|
||||
; dw $1D7F, $0188, $1D90, $0188, $1D91
|
||||
|
||||
Binary file not shown.
@@ -1,72 +0,0 @@
|
||||
dw $E164, $3900 ; VRAM $C9C2 | 58 bytes | Horizontal
|
||||
dw $1CA2, $0188, $1CA3, $0188, $1CA4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DA0, $0188, $1DA1, $0188, $1DA2, $0188
|
||||
dw $1DA3, $0188, $1DA4, $0188, $0188, $0188, $1D4A, $0188
|
||||
dw $1D4B, $0188, $1D4C, $0188, $1D4D
|
||||
|
||||
dw $0165, $3900 ; VRAM $CA02 | 58 bytes | Horizontal
|
||||
dw $1CB2, $0188, $1CB3, $0188, $1CB4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DB0, $0188, $1DB1, $0188, $1DB2, $0188
|
||||
dw $1DB3, $0188, $1DB4, $0188, $0188, $0188, $1D5A, $0188
|
||||
dw $1D5B, $0188, $1D5C, $0188, $1D5D
|
||||
|
||||
dw $2165, $3900 ; VRAM $CA42 | 58 bytes | Horizontal
|
||||
dw $1CAA, $0188, $1CAB, $0188, $1CAC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DA5, $0188, $1DA6, $0188, $1DA7, $0188
|
||||
dw $1DA8, $0188, $1DA9, $0188, $0188, $0188, $1D4E, $0188
|
||||
dw $1D4F, $0188, $1D60, $0188, $1D61
|
||||
|
||||
dw $4165, $3900 ; VRAM $CA82 | 58 bytes | Horizontal
|
||||
dw $1CBA, $0188, $1CBB, $0188, $1CBC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DB5, $0188, $1DB6, $0188, $1DB7, $0188
|
||||
dw $1DB8, $0188, $1DB9, $0188, $0188, $0188, $1D5E, $0188
|
||||
dw $1D5F, $0188, $1D70, $0188, $1D71
|
||||
|
||||
dw $6165, $3900 ; VRAM $CAC2 | 58 bytes | Horizontal
|
||||
dw $1CC2, $0188, $1CC3, $0188, $1CC4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DAA, $0188, $1DAB, $0188, $1DAC, $0188
|
||||
dw $1DAD, $0188, $1DAE, $0188, $0188, $0188, $1D62, $0188
|
||||
dw $1D63, $0188, $1D64, $0188, $1D65
|
||||
|
||||
dw $8165, $3900 ; VRAM $CB02 | 58 bytes | Horizontal
|
||||
dw $1CD2, $0188, $1CD3, $0188, $1CD4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DBA, $0188, $1DBB, $0188, $1DBC, $0188
|
||||
dw $1DBD, $0188, $1DBE, $0188, $0188, $0188, $1D72, $0188
|
||||
dw $1D73, $0188, $1D74, $0188, $1D75
|
||||
|
||||
dw $A165, $3900 ; VRAM $CB42 | 58 bytes | Horizontal
|
||||
dw $1CCA, $0188, $1CCB, $0188, $1CCC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DAF, $0188, $1DC0, $0188, $1DC1, $0188
|
||||
dw $1DC2, $0188, $1DC3, $0188, $0188, $0188, $1D66, $0188
|
||||
dw $1D67, $0188, $1D68, $0188, $1D69
|
||||
|
||||
dw $C165, $3900 ; VRAM $CB82 | 58 bytes | Horizontal
|
||||
dw $1CDA, $0188, $1CDB, $0188, $1CDC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DBF, $0188, $1DD0, $0188, $1DD1, $0188
|
||||
dw $1DD2, $0188, $1DD3, $0188, $0188, $0188, $1D76, $0188
|
||||
dw $1D77, $0188, $1D78, $0188, $1D79
|
||||
|
||||
dw $E165, $3900 ; VRAM $CBC2 | 58 bytes | Horizontal
|
||||
dw $1CE2, $0188, $1CE3, $0188, $1CE4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DC4, $0188, $1DC5, $0188, $1DC6, $0188
|
||||
dw $1DC7, $0188, $1DC8, $0188, $0188, $0188, $1D6A, $0188
|
||||
dw $1D6B, $0188, $1D6C, $0188, $1D6D
|
||||
|
||||
dw $0166, $3900 ; VRAM $CC02 | 58 bytes | Horizontal
|
||||
dw $1CF2, $0188, $1CF3, $0188, $1CF4, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DD4, $0188, $1DD5, $0188, $1DD6, $0188
|
||||
dw $1DD7, $0188, $1DD8, $0188, $0188, $0188, $1D7A, $0188
|
||||
dw $1D7B, $0188, $1D7C, $0188, $1D7D
|
||||
|
||||
dw $2166, $3900 ; VRAM $CC42 | 58 bytes | Horizontal
|
||||
dw $1CEA, $0188, $1CEB, $0188, $1CEC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DC9, $0188, $1DCA, $0188, $1DCB, $0188
|
||||
dw $1DCC, $0188, $1D86, $0188, $0188, $0188, $1D6E, $0188
|
||||
dw $1D6F, $0188, $1D80, $0188, $1D81
|
||||
|
||||
dw $4166, $3900 ; VRAM $CC82 | 58 bytes | Horizontal
|
||||
dw $1CFA, $0188, $1CFB, $0188, $1CFC, $0188, $0188, $0188
|
||||
dw $0188, $0188, $1DD9, $0188, $1DDA, $0188, $1DDB, $0188
|
||||
dw $1DDC, $0188, $1D96, $0188, $0188, $0188, $1D7E, $0188
|
||||
dw $1D7F, $0188, $1D90, $0188, $1D91
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
dw $2362, $3900 ; VRAM $C446 | 58 bytes | Horizontal
|
||||
dw $1C48, $0188, $1C49, $0188, $1C4A, $0188, $1C4B, $0188
|
||||
dw $1C4C, $0188, $0188, $0188, $0188, $0188, $1CC5, $0188
|
||||
dw $1CC6, $0188, $1CC7, $0188, $1CCD, $0188, $1CCE, $0188
|
||||
dw $0188, $0188, $1CE8, $0188, $1CE9
|
||||
|
||||
dw $4362, $3900 ; VRAM $C486 | 58 bytes | Horizontal
|
||||
dw $1C58, $0188, $1C59, $0188, $1C5A, $0188, $1C5B, $0188
|
||||
dw $1C5C, $0188, $0188, $0188, $0188, $0188, $1CD5, $0188
|
||||
dw $1CD6, $0188, $1CD7, $0188, $1CDD, $0188, $1CDE, $0188
|
||||
dw $0188, $0188, $1CF8, $0188, $1CF9
|
||||
|
||||
dw $6362, $3900 ; VRAM $C4C6 | 58 bytes | Horizontal
|
||||
dw $1C60, $0188, $1C61, $0188, $1C62, $0188, $1C63, $0188
|
||||
dw $1C64, $0188, $0188, $0188, $0188, $0188, $1CCF, $0188
|
||||
dw $1CE5, $0188, $1CE6, $0188, $1CE7, $0188, $1CED, $0188
|
||||
dw $0188, $0188, $1D00, $0188, $1D01
|
||||
|
||||
|
||||
dw $8362, $3900 ; VRAM $C506 | 58 bytes | Horizontal
|
||||
dw $1C70, $0188, $1C71, $0188, $1C72, $0188, $1C73, $0188
|
||||
dw $1C74, $0188, $0188, $0188, $0188, $0188, $1CDF, $0188
|
||||
dw $1CF5, $0188, $1CF6, $0188, $1CF7, $0188, $1CFD, $0188
|
||||
dw $0188, $0188, $1D10, $0188, $1D11
|
||||
|
||||
Binary file not shown.
@@ -1,61 +0,0 @@
|
||||
'=9D
|
||||
A=AA
|
||||
B=AB
|
||||
C=AC
|
||||
D=AD
|
||||
E=AE
|
||||
F=AF
|
||||
G=B0
|
||||
H=B1
|
||||
I=B2
|
||||
J=B3
|
||||
K=B4
|
||||
L=B5
|
||||
M=B6
|
||||
N=B7
|
||||
O=B8
|
||||
P=B9
|
||||
Q=BA
|
||||
R=BB
|
||||
S=BC
|
||||
T=BD
|
||||
U=BE
|
||||
V=BF
|
||||
W=C0
|
||||
X=C1
|
||||
Y=C2
|
||||
Z=C3
|
||||
?=C6
|
||||
!=C7
|
||||
,=C8
|
||||
-=C9
|
||||
.=CD
|
||||
~=CE
|
||||
a=D0
|
||||
b=D1
|
||||
c=D2
|
||||
d=D3
|
||||
e=D4
|
||||
f=D5
|
||||
g=D6
|
||||
h=D7
|
||||
i=D8
|
||||
j=D9
|
||||
k=DA
|
||||
l=DB
|
||||
m=DC
|
||||
n=DD
|
||||
o=DE
|
||||
p=DF
|
||||
q=E0
|
||||
r=E1
|
||||
s=E2
|
||||
t=E3
|
||||
u=E4
|
||||
v=E5
|
||||
w=E6
|
||||
x=E7
|
||||
y=E8
|
||||
z=E9
|
||||
:=EA
|
||||
=FF
|
||||
@@ -1,61 +0,0 @@
|
||||
'=9D00
|
||||
A=AA00
|
||||
B=AB00
|
||||
C=AC00
|
||||
D=AD00
|
||||
E=AE00
|
||||
F=AF00
|
||||
G=B000
|
||||
H=B100
|
||||
I=B200
|
||||
J=B300
|
||||
K=B400
|
||||
L=B500
|
||||
M=B600
|
||||
N=B700
|
||||
O=B800
|
||||
P=B900
|
||||
Q=BA00
|
||||
R=BB00
|
||||
S=BC00
|
||||
T=BD00
|
||||
U=BE00
|
||||
V=BF00
|
||||
W=C000
|
||||
X=C100
|
||||
Y=C200
|
||||
Z=C300
|
||||
?=C600
|
||||
!=C700
|
||||
,=C800
|
||||
-=C900
|
||||
.=CD00
|
||||
~=CE00
|
||||
a=D000
|
||||
b=D100
|
||||
c=D200
|
||||
d=D300
|
||||
e=D400
|
||||
f=D500
|
||||
g=D600
|
||||
h=D700
|
||||
i=D800
|
||||
j=D900
|
||||
k=DA00
|
||||
l=DB00
|
||||
m=DC00
|
||||
n=DD00
|
||||
o=DE00
|
||||
p=DF00
|
||||
q=E000
|
||||
r=E100
|
||||
s=E200
|
||||
t=E300
|
||||
u=E400
|
||||
v=E500
|
||||
w=E600
|
||||
x=E700
|
||||
y=E800
|
||||
z=E900
|
||||
:=EA00
|
||||
=FF00
|
||||
@@ -1,539 +0,0 @@
|
||||
;===================================================================================================
|
||||
; Get the item's graphic from WRAM/ROM
|
||||
; Bit 7 set indicates an explicit WRAM address
|
||||
; Bit 7 reset indicates an offset into the ROM buffer
|
||||
;===================================================================================================
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
; Enters with A for parameter
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
TransferItemReceiptToBuffer_using_GraphicsID:
|
||||
PHP
|
||||
PHB
|
||||
|
||||
REP #$30
|
||||
PHX
|
||||
PHY
|
||||
|
||||
SEP #$30
|
||||
LDX.b #$00
|
||||
|
||||
.find_reverse
|
||||
CMP.l ItemReceipts_graphics,X
|
||||
BEQ .found
|
||||
|
||||
INX
|
||||
BNE .find_reverse
|
||||
|
||||
.found
|
||||
TXA
|
||||
REP #$30
|
||||
BRA ++
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
TransferRupeesProperly:
|
||||
PHP
|
||||
PHB
|
||||
|
||||
REP #$31
|
||||
PHX
|
||||
PHY
|
||||
|
||||
AND.w #$00FF
|
||||
SBC.w #$0023
|
||||
|
||||
XBA
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
ADC.w #BigDecompressionBuffer+$800
|
||||
|
||||
BRA TransferItemReceiptToBuffer_using_ExplicitBufferAddress
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
TransferItemReceiptToBuffer_using_ReceiptID:
|
||||
PHP : PHB
|
||||
|
||||
REP #$30
|
||||
PHX : PHY
|
||||
|
||||
++ AND.w #$00FF
|
||||
ASL : TAX
|
||||
|
||||
LDA.l BusyItem : BNE +
|
||||
LDA.l StandingItemGraphicsOffsets,X
|
||||
BRA .have_address
|
||||
+
|
||||
LDA.l ItemReceiptGraphicsOffsets,X
|
||||
.have_address
|
||||
BMI TransferItemReceiptToBuffer_using_ExplicitBufferAddress
|
||||
|
||||
.rom_address
|
||||
ADC.w #ItemReceiptGraphicsROM
|
||||
PHK
|
||||
BRA .continue
|
||||
|
||||
#TransferItemReceiptToBuffer_using_ExplicitBufferAddress:
|
||||
PEA.w $7F7F
|
||||
PLB
|
||||
|
||||
.continue
|
||||
PLB
|
||||
TAY
|
||||
LDX.w #62
|
||||
|
||||
.next_write
|
||||
LDA.w $003E,Y
|
||||
STA.l ItemGetGFX+$00,X
|
||||
|
||||
LDA.w $023E,Y
|
||||
STA.l ItemGetGFX+$40,X
|
||||
|
||||
DEY
|
||||
DEY
|
||||
DEX
|
||||
DEX
|
||||
BPL .next_write
|
||||
|
||||
|
||||
REP #$30
|
||||
PLY
|
||||
PLX
|
||||
PLB
|
||||
PLP
|
||||
RTL
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
TransferItemToVRAM:
|
||||
REP #$21
|
||||
SEP #$10
|
||||
|
||||
LDA.w ItemGFXPtr
|
||||
BEQ .exit
|
||||
BMI .wram_address
|
||||
|
||||
.rom_address
|
||||
ADC.w #ItemReceiptGraphicsROM
|
||||
|
||||
LDX.b #ItemReceiptGraphicsROM>>16
|
||||
|
||||
.set_address
|
||||
STA.w $4302
|
||||
ADC.w #$0200
|
||||
STA.w $4312
|
||||
|
||||
STX.w $4304
|
||||
STX.w $4314
|
||||
|
||||
LDX.b #$80
|
||||
STX.w $2115
|
||||
|
||||
LDA.w #$1801
|
||||
STA.w $4300
|
||||
STA.w $4310
|
||||
|
||||
LDA.w #$0040
|
||||
STA.w $4305
|
||||
STA.w $4315
|
||||
|
||||
LDA.w ItemGFXTarget
|
||||
STA.w $2116
|
||||
|
||||
LDX.b #$01
|
||||
STX.w $420B
|
||||
|
||||
ADC.w #$0100
|
||||
STA.w $2116
|
||||
|
||||
INX
|
||||
STX.w $420B
|
||||
|
||||
STZ.w ItemGFXPtr
|
||||
STZ.w ItemGFXTarget
|
||||
|
||||
.exit
|
||||
RTL
|
||||
|
||||
.wram_address
|
||||
LDX.b #$7F
|
||||
BRA .set_address
|
||||
|
||||
;===================================================================================================
|
||||
; Decompress everything at the start of the game
|
||||
;===================================================================================================
|
||||
DecompBufferOffset = $18
|
||||
DecompTestByte = $04
|
||||
DecompCommand = $02
|
||||
DecompSize = $00
|
||||
DecompTileCount = $1A
|
||||
DecompSaveY = $1A
|
||||
Decomp3BPPScratch = $20
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
DecompressAllItemGraphics:
|
||||
PHP
|
||||
PHB
|
||||
PHD
|
||||
|
||||
REP #$38
|
||||
|
||||
; Stack change for safety
|
||||
TSX
|
||||
|
||||
LDA.w #$1400
|
||||
TCS
|
||||
|
||||
PHX
|
||||
|
||||
; direct page change for speed
|
||||
LDA.w #$1200
|
||||
TCD
|
||||
|
||||
STZ.b DecompBufferOffset
|
||||
|
||||
SEP #$34
|
||||
|
||||
STA.l $4200 ; already 0 from the LDA above
|
||||
|
||||
LDX.b #$5D+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5C+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5B+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5A+$73 : JSR FastSpriteDecomp
|
||||
|
||||
REP #$30
|
||||
PLX
|
||||
TXS
|
||||
|
||||
SEP #$20
|
||||
|
||||
LDA.b #$81
|
||||
STA.l $4200
|
||||
|
||||
|
||||
PLD
|
||||
PLB
|
||||
PLP
|
||||
|
||||
RTL
|
||||
|
||||
;===================================================================================================
|
||||
; I normally hate macros like this... but I don't feel like constantly rewriting this
|
||||
;===================================================================================================
|
||||
macro GetNextByte()
|
||||
LDA.w $0000,Y
|
||||
INY
|
||||
BNE ?++
|
||||
|
||||
; Y pulls more than it needs, but that's fine
|
||||
; the high byte should only be affected if we somehow have FF as our bank
|
||||
; and if that happens, we have other problems
|
||||
PHB
|
||||
PLY
|
||||
INY
|
||||
PHY
|
||||
PLB
|
||||
|
||||
LDY.w #$8000
|
||||
|
||||
?++
|
||||
endmacro
|
||||
|
||||
;===================================================================================================
|
||||
; There's no long vanilla routine, and we're going to make heavy use of this
|
||||
; so might as well rewrite it to be fast
|
||||
;===================================================================================================
|
||||
FastSpriteDecomp:
|
||||
SEP #$30
|
||||
|
||||
LDA.l $80CFC0,X : PHA : PLB ; bank
|
||||
LDA.l $80D09F,X : XBA ; high
|
||||
LDA.l $80D17E,X ; low
|
||||
|
||||
REP #$10
|
||||
|
||||
TAY
|
||||
|
||||
LDX.w #$0000
|
||||
|
||||
.next_command
|
||||
%GetNextByte()
|
||||
|
||||
CMP.b #$FF
|
||||
BNE .continue
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
JMP Unrolled3BPPConvert
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
.continue
|
||||
CMP.b #$E0
|
||||
BCS .expanded
|
||||
|
||||
STA.b DecompTestByte
|
||||
|
||||
REP #$20
|
||||
|
||||
AND.w #$001F
|
||||
|
||||
BRA .normal
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
; Putting some commands up here for branch distance
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
.nonrepeating
|
||||
REP #$21
|
||||
TYA
|
||||
ADC.b DecompSize
|
||||
ORA.w #$8000
|
||||
STA.b DecompSize
|
||||
|
||||
SEP #$20
|
||||
|
||||
.next_nonrepeating
|
||||
%GetNextByte()
|
||||
|
||||
STA.l DecompBuffer2,X
|
||||
|
||||
INX
|
||||
|
||||
CPY.b DecompSize
|
||||
BNE .next_nonrepeating
|
||||
|
||||
BRA .next_command
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
.repeating
|
||||
%GetNextByte()
|
||||
|
||||
STY.b DecompSaveY
|
||||
|
||||
LDY.b DecompSize
|
||||
|
||||
.next_repeating
|
||||
STA.l DecompBuffer2,X
|
||||
|
||||
INX
|
||||
DEY
|
||||
BNE .next_repeating
|
||||
|
||||
LDY.b DecompSaveY
|
||||
BRA .next_command
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
; Rest of command handling
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
.expanded
|
||||
STA.b DecompCommand
|
||||
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
STA.b DecompTestByte
|
||||
|
||||
LDA.b DecompCommand
|
||||
AND.b #$03
|
||||
XBA
|
||||
|
||||
%GetNextByte()
|
||||
|
||||
REP #$20
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
.normal
|
||||
INC
|
||||
STA.b DecompSize
|
||||
|
||||
SEP #$20
|
||||
|
||||
LDA.b DecompTestByte
|
||||
|
||||
AND.b #$E0
|
||||
BEQ .nonrepeating
|
||||
BMI .copy
|
||||
|
||||
ASL
|
||||
BPL .repeating
|
||||
|
||||
ASL
|
||||
BPL .repeating_word
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
.incremental
|
||||
%GetNextByte()
|
||||
|
||||
STY.b DecompSaveY
|
||||
|
||||
LDY.b DecompSize
|
||||
|
||||
.next_incremental
|
||||
STA.l DecompBuffer2,X
|
||||
|
||||
INC
|
||||
INX
|
||||
|
||||
DEY
|
||||
BNE .next_incremental
|
||||
|
||||
LDY.b DecompSaveY
|
||||
JMP .next_command
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
.repeating_word
|
||||
JSR .get_next_word
|
||||
REP #$20
|
||||
|
||||
STY.b DecompSaveY
|
||||
|
||||
LDY.b DecompSize
|
||||
DEY
|
||||
|
||||
.next_word
|
||||
STA.l DecompBuffer2,X
|
||||
|
||||
INX
|
||||
INX
|
||||
|
||||
DEY
|
||||
DEY
|
||||
BPL .next_word
|
||||
|
||||
INY
|
||||
BEQ .not_too_far
|
||||
|
||||
DEX
|
||||
|
||||
.not_too_far
|
||||
SEP #$20
|
||||
|
||||
LDY.b DecompSaveY
|
||||
|
||||
JMP .next_command
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
.copy
|
||||
JSR .get_next_word
|
||||
|
||||
STY.b DecompSaveY
|
||||
|
||||
TAY
|
||||
|
||||
LDA.b DecompSize
|
||||
BNE ++
|
||||
|
||||
DEC.b DecompSize+1
|
||||
|
||||
++ PHB
|
||||
LDA.b #$7F
|
||||
PHA
|
||||
PLB
|
||||
|
||||
.next_copy
|
||||
LDA.w DecompBuffer2,Y
|
||||
STA.w DecompBuffer2,X
|
||||
|
||||
INX
|
||||
INY
|
||||
|
||||
DEC.b DecompSize+0
|
||||
BNE .next_copy
|
||||
|
||||
DEC.b DecompSize+1
|
||||
BPL .next_copy
|
||||
|
||||
PLB
|
||||
|
||||
LDY.b DecompSaveY
|
||||
|
||||
JMP .next_command
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
; These are only used once per command, so I'm fine with letting them be a JSR I guess
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
.get_next_word
|
||||
%GetNextByte()
|
||||
XBA
|
||||
|
||||
%GetNextByte()
|
||||
XBA
|
||||
|
||||
RTS
|
||||
|
||||
;===================================================================================================
|
||||
; More macros, because lazy
|
||||
;===================================================================================================
|
||||
|
||||
macro DoPlanesA(offset)
|
||||
LDA.w DecompBuffer2+<offset>+<offset>,Y
|
||||
STA.w BigDecompressionBuffer+<offset>+<offset>,X
|
||||
|
||||
ORA.w DecompBuffer2+<offset>+<offset>-1,Y
|
||||
AND.w #$FF00
|
||||
STA.b Decomp3BPPScratch
|
||||
|
||||
LDA.w DecompBuffer2+$10+<offset>,Y
|
||||
AND.w #$00FF
|
||||
TSB.b Decomp3BPPScratch
|
||||
|
||||
XBA
|
||||
ORA.b Decomp3BPPScratch
|
||||
STA.w BigDecompressionBuffer+$10+<offset>+<offset>,X
|
||||
|
||||
endmacro
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
Unrolled3BPPConvert:
|
||||
LDA.b #$7F
|
||||
PHA
|
||||
PLB
|
||||
|
||||
REP #$21
|
||||
|
||||
LDY.w #$0000
|
||||
LDX.b DecompBufferOffset
|
||||
|
||||
.next_3bpp_tile
|
||||
%DoPlanesA(0) ; 8 times
|
||||
%DoPlanesA(1)
|
||||
%DoPlanesA(2)
|
||||
%DoPlanesA(3)
|
||||
%DoPlanesA(4)
|
||||
%DoPlanesA(5)
|
||||
%DoPlanesA(6)
|
||||
%DoPlanesA(7)
|
||||
|
||||
; carry will always be clear
|
||||
; don't worry
|
||||
TXA
|
||||
ADC.w #32
|
||||
TAX
|
||||
|
||||
; just trust me
|
||||
TYA
|
||||
ADC.w #24
|
||||
TAY
|
||||
|
||||
CMP.w #24*64
|
||||
BCS .done
|
||||
|
||||
JMP .next_3bpp_tile
|
||||
|
||||
.done
|
||||
STX.b DecompBufferOffset
|
||||
SEP #$30
|
||||
|
||||
RTS
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
|
||||
!CryptoBuffer = "$7F5100"
|
||||
;!keyBase = "$7F50D0"
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadStaticDecryptionKey:
|
||||
PHB : PHA : PHX : PHY : PHP
|
||||
REP #$30 ; set 16-bit accumulator & index registers
|
||||
LDX.w #StaticDecryptionKey ; Source
|
||||
LDY.w #KeyBase ; Target
|
||||
LDY.w #!keyBase ; Target
|
||||
LDA.w #$000F ; Length
|
||||
MVN $307F
|
||||
|
||||
@@ -20,63 +23,65 @@ RetrieveValueFromEncryptedTable:
|
||||
;Returns result in A
|
||||
PHX : PHY
|
||||
PHA
|
||||
LDY.b Scrap04 : PHY : LDY.b Scrap06 : PHY : LDY.b Scrap08 : PHY
|
||||
LDY.b Scrap0A : PHY : LDY.b Scrap0C : PHY : LDY.b Scrap0E : PHY
|
||||
LDY $04 : PHY : LDY $06 : PHY : LDY $08 : PHY
|
||||
LDY $0A : PHY : LDY $0C : PHY : LDY $0E : PHY
|
||||
|
||||
AND.w #$FFF8 : TAY
|
||||
LDA.b [$00], Y : STA.l CryptoBuffer : INY #2
|
||||
LDA.b [$00], Y : STA.l CryptoBuffer+2 : INY #2
|
||||
LDA.b [$00], Y : STA.l CryptoBuffer+4 : INY #2
|
||||
LDA.b [$00], Y : STA.l CryptoBuffer+6
|
||||
LDA [$00], Y : STA.l !CryptoBuffer : INY #2
|
||||
LDA [$00], Y : STA.l !CryptoBuffer+2 : INY #2
|
||||
LDA [$00], Y : STA.l !CryptoBuffer+4 : INY #2
|
||||
LDA [$00], Y : STA.l !CryptoBuffer+6
|
||||
|
||||
LDA.w #$0002 : STA.b Scrap04 ;set block size
|
||||
LDA.w #$0002 : STA $04 ;set block size
|
||||
|
||||
JSL.l XXTEA_Decode
|
||||
|
||||
PLA : STA.b Scrap0E : PLA : STA.b Scrap0C : PLA : STA.b Scrap0A
|
||||
PLA : STA.b Scrap08 : PLA : STA.b Scrap06 : PLA : STA.b Scrap04
|
||||
PLA : STA $0E : PLA : STA $0C : PLA : STA $0A
|
||||
PLA : STA $08 : PLA : STA $06 : PLA : STA $04
|
||||
PLA : AND.w #$0007 : TAX
|
||||
LDA.l CryptoBuffer, X
|
||||
LDA.l !CryptoBuffer, X
|
||||
PHA
|
||||
LDA.w #$0000
|
||||
STA.l CryptoBuffer
|
||||
STA.l CryptoBuffer+2
|
||||
STA.l CryptoBuffer+4
|
||||
STA.l CryptoBuffer+6
|
||||
STA.l !CryptoBuffer
|
||||
STA.l !CryptoBuffer+2
|
||||
STA.l !CryptoBuffer+4
|
||||
STA.l !CryptoBuffer+6
|
||||
PLA
|
||||
PLY : PLX
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ChestData = $01E96C
|
||||
ChestDataPayload = $01EABC ; ChestData+$0150
|
||||
|
||||
!ChestData = "$01E96C"
|
||||
!ChestData_Payload = "$1EABC" ; !ChestData+$0150
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
GetChestData:
|
||||
LDA.l IsEncrypted : BNE .encrypted
|
||||
INC.b Scrap0E : LDX.w #$FFFD ; what we wrote over
|
||||
INC $0E : LDX.w #$FFFD ; what we wrote over
|
||||
JML.l Dungeon_OpenKeyedObject_nextChest
|
||||
|
||||
.encrypted
|
||||
INC.b Scrap0E : LDX.w #$FFFE
|
||||
INC $0E : LDX.w #$FFFE
|
||||
|
||||
.nextChest
|
||||
|
||||
INX #2 : CPX.w #$0150 : BEQ .couldntFindChest
|
||||
LDA.l ChestData, X : AND.w #$7FFF : CMP.b RoomIndex : BNE .nextChest
|
||||
LDA !ChestData, X : AND.w #$7FFF : CMP $A0 : BNE .nextChest
|
||||
|
||||
DEC.b Scrap0E : BNE .nextChest
|
||||
DEC $0E : BNE .nextChest
|
||||
|
||||
LDA.b Scrap00 : PHA : LDA.b Scrap02 : PHA
|
||||
LDA $00 : PHA : LDA $02 : PHA
|
||||
|
||||
LDA.w #ChestDataPayload : STA.b Scrap00
|
||||
LDA.w #ChestDataPayload>>16 : STA.b Scrap02
|
||||
LDA.w #!ChestData_Payload : STA $00
|
||||
LDA.w #!ChestData_Payload>>16 : STA $02
|
||||
|
||||
TXA : LSR
|
||||
JSL RetrieveValueFromEncryptedTable
|
||||
STA.b Scrap0C
|
||||
STA $0C
|
||||
|
||||
PLA : STA.b Scrap02 : PLA : STA.b Scrap00
|
||||
PLA : STA $02 : PLA : STA $00
|
||||
|
||||
LDA.l ChestData, X : ASL A : BCC .smallChest
|
||||
LDA !ChestData, X : ASL A : BCC .smallChest
|
||||
|
||||
JML.l Dungeon_OpenKeyedObject_bigChest ;(bank01.asm line #13783)
|
||||
|
||||
|
||||
543
dialog.asm
543
dialog.asm
@@ -2,157 +2,200 @@
|
||||
; Dialog Pointer Override
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogOverride:
|
||||
LDA.l AltTextFlag : BEQ .skip
|
||||
LDA.l DialogBuffer, X ; use alternate buffer
|
||||
LDA $7F5035 : BEQ .skip
|
||||
LDA $7F5700, X ; use alternate buffer
|
||||
RTL
|
||||
.skip
|
||||
LDA.l DecompressionBuffer+$1200, X
|
||||
LDA $7F1200, X
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; $7F5035 - Alternate Text Pointer Flag ; 0=Disable
|
||||
; $7F5036 - Padding Byte (Must be Zero)
|
||||
; $7F5700 - $7F57FF - Dialog Buffer
|
||||
;--------------------------------------------------------------------------------
|
||||
ResetDialogPointer:
|
||||
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||
LDA.b #$00 : STA.l AltTextFlag ; zero out the alternate flag
|
||||
LDA.b #$1C : STA.w DelayTimer ; thing we wrote over
|
||||
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
|
||||
LDA.b #$00 : STA $7F5035 ; zero out the alternate flag
|
||||
LDA.b #$1C : STA $1CE9 ; thing we wrote over
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
;macro LoadDialog(index,table)
|
||||
; PHA : PHX : PHY
|
||||
; PHB : PHK : PLB
|
||||
; LDA $00 : PHA
|
||||
; LDA $01 : PHA
|
||||
; LDA $02 : PHA
|
||||
; LDA.b #$01 : STA $7F5035 ; set flag
|
||||
;
|
||||
; LDA <index> : ASL : !ADD.l <index> : TAX ; get quote offset *3, move to X
|
||||
; LDA <table>, X : STA $00 ; write pointer to direct page
|
||||
; LDA <table>+1, X : STA $01
|
||||
; LDA <table>+2, X : STA $02
|
||||
;
|
||||
; LDX.b #$00 : LDY.b #$00
|
||||
; -
|
||||
; LDA [$00], Y ; load the next character from the pointer
|
||||
; STA $7F5700, X ; write to the buffer
|
||||
; INX : INY
|
||||
; CMP.b #$7F : BNE -
|
||||
; PLA : STA $02
|
||||
; PLA : STA $01
|
||||
; PLA : STA $00
|
||||
; PLB
|
||||
; PLY : PLX : PLA
|
||||
;endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
;macro LoadDialogAddress(address)
|
||||
; PHA : PHX : PHY
|
||||
; PHP
|
||||
; PHB : PHK : PLB
|
||||
; SEP #$30 ; set 8-bit accumulator and index registers
|
||||
; LDA $00 : PHA
|
||||
; LDA $01 : PHA
|
||||
; LDA $02 : PHA
|
||||
; LDA.b #$01 : STA $7F5035 ; set flag
|
||||
;
|
||||
; LDA.b #<address> : STA $00 ; write pointer to direct page
|
||||
; LDA.b #<address>>>8 : STA $01
|
||||
; LDA.b #<address>>>16 : STA $02
|
||||
;
|
||||
; LDX.b #$00 : LDY.b #$00
|
||||
; -
|
||||
; LDA [$00], Y ; load the next character from the pointer
|
||||
; STA $7F5700, X ; write to the buffer
|
||||
; INX : INY
|
||||
; CMP.b #$7F : BNE -
|
||||
; PLA : STA $02
|
||||
; PLA : STA $01
|
||||
; PLA : STA $00
|
||||
; PLB
|
||||
; PLP
|
||||
; PLY : PLX : PLA
|
||||
;endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
!OFFSET_POINTER = "$7F5094"
|
||||
!OFFSET_RETURN = "$7F5096"
|
||||
!DIALOG_BUFFER = "$7F5700"
|
||||
macro LoadDialogAddress(address)
|
||||
PHA : PHX : PHY
|
||||
PHP
|
||||
PHB : PHK : PLB
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
REP #$10 ; set 16-bit index registers
|
||||
PEI.b ($00)
|
||||
LDA.b Scrap02 : PHA
|
||||
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA.l AltTextFlag ; set flag
|
||||
PEI ($00)
|
||||
LDA $02 : PHA
|
||||
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA $7F5035 ; set flag
|
||||
%CopyDialog(<address>)
|
||||
PLA : STA.b Scrap02
|
||||
PLA : STA $02
|
||||
REP #$20
|
||||
PLA : STA.b Scrap00
|
||||
PLA : STA $00
|
||||
PLB
|
||||
PLP
|
||||
PLY : PLX : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro CopyDialog(address)
|
||||
LDA.b #<address> : STA.b Scrap00 ; write pointer to direct page
|
||||
LDA.b #<address>>>8 : STA.b Scrap01
|
||||
LDA.b #<address>>>16 : STA.b Scrap02
|
||||
LDA.b #<address> : STA $00 ; write pointer to direct page
|
||||
LDA.b #<address>>>8 : STA $01
|
||||
LDA.b #<address>>>16 : STA $02
|
||||
%CopyDialogIndirect()
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro CopyDialogIndirect()
|
||||
REP #$20 : LDA.l DialogOffsetPointer : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0
|
||||
REP #$20 : LDA !OFFSET_POINTER : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0
|
||||
?loop:
|
||||
LDA.b [$00], Y ; load the next character from the pointer
|
||||
STA.l DialogBuffer, X ; write to the buffer
|
||||
LDA [$00], Y ; load the next character from the pointer
|
||||
STA !DIALOG_BUFFER, X ; write to the buffer
|
||||
INX : INY
|
||||
CMP.b #$7F : BNE ?loop
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
TXA : INC : STA.l DialogReturnPointer ; copy out X into
|
||||
LDA.w #$0000 : STA.l DialogOffsetPointer
|
||||
TXA : INC : STA !OFFSET_RETURN ; copy out X into
|
||||
LDA.w #$0000 : STA !OFFSET_POINTER
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadDialogAddressIndirect:
|
||||
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA.l AltTextFlag ; set flag
|
||||
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA $7F5035 ; set flag
|
||||
%CopyDialogIndirect()
|
||||
;%LoadDialogAddress(UncleText)
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
!ITEM_TEMPORARY = "$7F5040"
|
||||
FreeDungeonItemNotice:
|
||||
STA.l ScratchBufferV
|
||||
STA !ITEM_TEMPORARY
|
||||
|
||||
PHA : PHX : PHY
|
||||
PHP
|
||||
PHB : PHK : PLB
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
REP #$10 ; set 16-bit index registers
|
||||
PEI.b (Scrap00)
|
||||
LDA.b Scrap02 : PHA
|
||||
LDA.l ScratchBufferNV : PHA
|
||||
LDA.l ScratchBufferNV+1 : PHA
|
||||
PHA : PHX : PHY
|
||||
PHP
|
||||
PHB : PHK : PLB
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
REP #$10 ; set 16-bit index registers
|
||||
PEI ($00)
|
||||
LDA $02 : PHA
|
||||
;--------------------------------
|
||||
|
||||
LDA.l FreeItemText : BNE + : JMP .skip : +
|
||||
|
||||
LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch
|
||||
LDA #$00 : STA $7F5010 ; initialize scratch
|
||||
LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key
|
||||
LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
|
||||
LDA !ITEM_TEMPORARY : CMP.b #$24 : BNE + ; general small key
|
||||
%CopyDialog(Notice_SmallKeyOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass
|
||||
LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass
|
||||
LDA !ITEM_TEMPORARY : CMP.b #$25 : BNE + ; general compass
|
||||
%CopyDialog(Notice_CompassOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+ : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map
|
||||
LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map
|
||||
LDA !ITEM_TEMPORARY : CMP.b #$33 : BNE + ; general map
|
||||
%CopyDialog(Notice_MapOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key
|
||||
LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key
|
||||
LDA !ITEM_TEMPORARY : CMP.b #$32 : BNE + ; general big key
|
||||
%CopyDialog(Notice_BigKeyOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+
|
||||
LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map
|
||||
LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only
|
||||
LDA !ITEM_TEMPORARY : AND.b #$F0 ; looking at high bits only
|
||||
CMP.b #$70 : BNE + ; map of...
|
||||
%CopyDialog(Notice_MapOf)
|
||||
JMP .dungeon
|
||||
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
|
||||
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
|
||||
%CopyDialog(Notice_CompassOf)
|
||||
JMP .dungeon
|
||||
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
|
||||
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
|
||||
%CopyDialog(Notice_BigKeyOf)
|
||||
JMP .dungeon
|
||||
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
|
||||
LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
||||
%CopyDialog(Notice_SmallKeyOf)
|
||||
LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys
|
||||
BRA .dungeon
|
||||
+ : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal
|
||||
LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
|
||||
CMP.b #$B7 : !BGE +
|
||||
%CopyDialog(Notice_Crystal)
|
||||
JMP .crystal
|
||||
+
|
||||
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
|
||||
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
|
||||
LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
||||
%CopyDialog(Notice_SmallKeyOf)
|
||||
PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA
|
||||
LDA #$01 : STA $7F5010 ; set up a flip for small keys
|
||||
BRA .dungeon
|
||||
+
|
||||
JMP .skip ; it's not something we are going to give a notice for
|
||||
|
||||
.dungeon
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA.l ScratchBufferV
|
||||
AND.b #$0F
|
||||
STA.l ScratchBufferNV+1
|
||||
LDA.l ScratchBufferNV : BEQ +
|
||||
LDA.l ScratchBufferNV
|
||||
LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys
|
||||
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
|
||||
LDA !ITEM_TEMPORARY
|
||||
AND.b #$0F ; looking at low bits only
|
||||
STA $7F5011
|
||||
LDA $7F5010 : BEQ +
|
||||
LDA $7F5010
|
||||
LDA #$0F : !SUB $7F5011 : STA $7F5011 ; flip the values for small keys
|
||||
+
|
||||
LDA.l ScratchBufferNV+1
|
||||
ASL : TAX
|
||||
REP #$20
|
||||
LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers
|
||||
CMP.w DungeonID : BNE +
|
||||
BRA .self_notice
|
||||
.hc_sewers
|
||||
LDA.w DungeonID : CMP.w #$0003 : BCS +
|
||||
.self_notice
|
||||
SEP #$20
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP.w .done
|
||||
+
|
||||
SEP #$20
|
||||
LDA.l ScratchBufferNV+1
|
||||
LDA $7F5011
|
||||
CMP.b #$00 : BNE + ; ...light world
|
||||
%CopyDialog(Notice_LightWorld) : JMP .done
|
||||
+ : CMP.b #$01 : BNE + ; ...dark world
|
||||
@@ -180,61 +223,38 @@ FreeDungeonItemNotice:
|
||||
+ : CMP.b #$0C : BNE + ; ...desert palace
|
||||
%CopyDialog(Notice_Desert) : JMP .done
|
||||
+ : CMP.b #$0D : BNE + ; ...eastern palace
|
||||
%CopyDialog(Notice_Eastern) : JMP .done
|
||||
%CopyDialog(Notice_Eastern) : BRA .done
|
||||
+ : CMP.b #$0E : BNE + ; ...hyrule castle
|
||||
%CopyDialog(Notice_Castle) : JMP .done
|
||||
%CopyDialog(Notice_Castle) : BRA .done
|
||||
+ : CMP.b #$0F : BNE + ; ...sewers
|
||||
%CopyDialog(Notice_Sewers)
|
||||
+
|
||||
JMP .done
|
||||
|
||||
.crystal
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA.l ScratchBufferV
|
||||
AND.b #$0F ; looking at low bits only
|
||||
CMP.b #$00 : BNE +
|
||||
%CopyDialog(Notice_Six) : JMP .done
|
||||
+ : CMP.b #$01 : BNE +
|
||||
%CopyDialog(Notice_One) : JMP .done
|
||||
+ : CMP.b #$02 : BNE +
|
||||
%CopyDialog(Notice_Five) : JMP .done
|
||||
+ : CMP.b #$03 : BNE +
|
||||
%CopyDialog(Notice_Seven) : JMP .done
|
||||
+ : CMP.b #$04 : BNE +
|
||||
%CopyDialog(Notice_Two) : JMP .done
|
||||
+ : CMP.b #$05 : BNE +
|
||||
%CopyDialog(Notice_Four) : JMP .done
|
||||
+ : CMP.b #$06 : BNE +
|
||||
%CopyDialog(Notice_Three) : JMP .done
|
||||
+
|
||||
|
||||
.done
|
||||
|
||||
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA.l AltTextFlag ; set alternate dialog flag
|
||||
STA.l TextBoxDefer
|
||||
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA $7F5035 ; set alternate dialog flag
|
||||
STA $7F509F
|
||||
|
||||
;--------------------------------
|
||||
.skip
|
||||
PLA : STA.l ScratchBufferNV+1
|
||||
PLA : STA.l ScratchBufferNV
|
||||
PLA : STA.b Scrap02
|
||||
REP #$20
|
||||
PLA : STA.b Scrap00
|
||||
PLB
|
||||
PLP
|
||||
PLY : PLX : PLA
|
||||
PLA : STA $02
|
||||
REP #$20
|
||||
PLA : STA $00
|
||||
PLB
|
||||
PLP
|
||||
PLY : PLX : PLA
|
||||
;JSL.l Main_ShowTextMessage_Alt ; .skip can be here so long as this line remains commented out
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogResetSelectionIndex:
|
||||
JSL.l Attract_DecompressStoryGfx ; what we wrote over
|
||||
STZ.w MessageCursor
|
||||
STZ $1CE8
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogItemReceive:
|
||||
BCS .nomessage ; if doubling the item value overflowed it must be a rando item
|
||||
CPY.b #$98 : BCC ++ ;if the item is $4C or greater it must be a rando item
|
||||
CPY #$98 : BCC ++ ;if the item is $4C or greater it must be a rando item
|
||||
.nomessage
|
||||
LDA.w #$FFFF
|
||||
|
||||
@@ -247,11 +267,11 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogFairyThrow:
|
||||
LDA.l Restrict_Ponds : BEQ .normal
|
||||
LDA.l BottleContentsOne
|
||||
ORA.l BottleContentsTwo : ORA.l BottleContentsThree : ORA.l BottleContentsFour : BNE .normal
|
||||
|
||||
LDA BottleContentsOne
|
||||
ORA BottleContentsTwo : ORA BottleContentsThree : ORA BottleContentsFour : BNE .normal
|
||||
|
||||
.noInventory
|
||||
LDA.w SpriteActivity, X : !ADD #$08 : STA.w SpriteActivity, X
|
||||
LDA $0D80, X : !ADD #$08 : STA $0D80, X
|
||||
LDA.b #$51
|
||||
LDY.b #$01
|
||||
RTL
|
||||
@@ -266,7 +286,7 @@ DialogGanon1:
|
||||
LDA.w #$018C
|
||||
BCC +
|
||||
LDA.w #$016D
|
||||
+ STA.w TextID
|
||||
+ STA $1CF0
|
||||
SEP #$20
|
||||
JSL.l Sprite_ShowMessageMinimal_Alt
|
||||
RTL
|
||||
@@ -280,45 +300,75 @@ RTL
|
||||
; s = silver arrow bow
|
||||
; p = 2nd progressive bow
|
||||
DialogGanon2:
|
||||
JSL.l CheckGanonVulnerability
|
||||
JSL.l CheckGanonVulnerability
|
||||
|
||||
REP #$20
|
||||
BCS +
|
||||
LDA.w #$018D : BRA ++
|
||||
+
|
||||
LDA.l BowTracking
|
||||
REP #$20
|
||||
BCS +
|
||||
LDA.w #$018D : JMP .done
|
||||
+
|
||||
LDA.l GanonVulnerabilityItem : AND #$00FF : BNE .special_item
|
||||
LDA.l SpecialWeapons : AND.w #$00FF
|
||||
CMP.w #$0001 : BEQ .bombs ; bombs if special bomb mode
|
||||
.silver_arrows
|
||||
LDA.l BowTracking
|
||||
|
||||
BIT.w #$0080 : BNE + ; branch if bow
|
||||
LDA.w #$0192 : BRA ++
|
||||
+
|
||||
BIT.w #$0040 : BEQ + ; branch if no silvers
|
||||
LDA.w #$0195 : BRA ++
|
||||
+
|
||||
BIT.w #$0020 : BNE + ; branch if p bow
|
||||
LDA.w #$0194 : BRA ++
|
||||
+
|
||||
BIT.w #$0080 : BEQ + ; branch if no bow
|
||||
LDA.w #$0193 : BRA ++
|
||||
+
|
||||
LDA.w #$016E
|
||||
++
|
||||
STA.w TextID
|
||||
SEP #$20
|
||||
JSL.l Sprite_ShowMessageMinimal_Alt
|
||||
BIT.w #$0080 : BNE + ; branch if bow
|
||||
LDA.w #$0192 : JMP .done
|
||||
+
|
||||
BIT.w #$0040 : BEQ + ; branch if no silvers
|
||||
LDA.w #$0195 : JMP .done
|
||||
+
|
||||
BIT.w #$0020 : BNE + ; branch if p bow
|
||||
LDA.w #$0194 : JMP .done
|
||||
+
|
||||
BIT.w #$0080 : BEQ + ; branch if no bow
|
||||
LDA.w #$0193 : JMP .done
|
||||
+
|
||||
LDA.w #$016E : JMP .done
|
||||
.special_item
|
||||
CMP.w #$0001 : BEQ .silver_arrows
|
||||
CMP.w #$0004 : BEQ .bombs
|
||||
CMP.w #$0005 : BEQ .powder
|
||||
CMP.w #$0010 : BEQ .bee
|
||||
PHX : TAX
|
||||
LDA.l EquipmentWRAM-1, X : PLX : AND #$00FF : BNE +
|
||||
LDA.w #$0192 : JMP .done
|
||||
+
|
||||
LDA.w #$0195 : BRA .done
|
||||
.bombs
|
||||
LDA.l BombsEquipment : AND #$00FF : BNE +
|
||||
LDA.l InfiniteBombsModifier : AND #$00FF : BNE + ; check for infinite bombs
|
||||
LDA.w #$0192 : BRA .done
|
||||
+
|
||||
LDA.w #$0195 : BRA .done
|
||||
.powder
|
||||
LDA.l InventoryTracking : AND #$0010 : BNE + ; check for powder
|
||||
LDA.w #$0192 : BRA .done
|
||||
+
|
||||
LDA.w #$0195 : BRA .done
|
||||
.bee
|
||||
LDA.l BottleContentsOne : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
|
||||
LDA.l BottleContentsTwo : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
|
||||
LDA.l BottleContentsThree : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
|
||||
LDA.l BottleContentsFour : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
|
||||
LDA.w #$0192 : BRA .done
|
||||
+
|
||||
LDA.w #$0195 : BRA .done
|
||||
.done
|
||||
STA $1CF0
|
||||
SEP #$20
|
||||
JSL.l Sprite_ShowMessageMinimal_Alt
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogEtherTablet:
|
||||
PHA
|
||||
LDA.w ItemCursor : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
||||
LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
||||
-
|
||||
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
||||
+
|
||||
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
|
||||
LDA.l AllowHammerTablets : BEQ ++
|
||||
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
||||
++
|
||||
LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText
|
||||
;++
|
||||
BIT $F4 : BVC - ; Show normal text if Y is not pressed
|
||||
JSL CheckTabletSword : BMI .yesText
|
||||
CMP.b #$02 : !BGE .noText
|
||||
.yesText
|
||||
PLA
|
||||
LDA.b #$0C
|
||||
@@ -331,18 +381,15 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogBombosTablet:
|
||||
PHA
|
||||
LDA.w ItemCursor : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
||||
LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
|
||||
-
|
||||
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
||||
+
|
||||
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
|
||||
LDA.l AllowHammerTablets : BEQ ++
|
||||
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
||||
++
|
||||
LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText
|
||||
;++
|
||||
BIT $F4 : BVC - ; Show normal text if Y is not pressed
|
||||
JSL CheckTabletSword : BMI .yesText
|
||||
CMP.b #$02 : !BGE .noText
|
||||
.yesText
|
||||
PLA
|
||||
PLA
|
||||
LDA.b #$0D
|
||||
LDY.b #$01
|
||||
JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm)
|
||||
@@ -352,16 +399,16 @@ DialogBombosTablet:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogSahasrahla:
|
||||
LDA.l PendantsField : AND.b #$04 : BEQ + ;Check if player has green pendant
|
||||
LDA.l PendantsField : AND #$04 : BEQ + ;Check if player has green pendant
|
||||
LDA.b #$2F
|
||||
LDY.b #$00
|
||||
LDY.b #$00
|
||||
JML Sprite_ShowMessageUnconditional
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DialogBombShopGuy:
|
||||
LDY.b #$15
|
||||
LDA.l CrystalsField : AND.b #$05 : CMP.b #$05 : BNE + ;Check if player has crystals 5 & 6
|
||||
LDA.l CrystalsField : AND #$05 : CMP #$05 : BNE + ;Check if player has crystals 5 & 6
|
||||
INY ; from 15 to 16
|
||||
+
|
||||
TYA
|
||||
@@ -371,7 +418,7 @@ RTL
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
AgahnimAsksAboutPed:
|
||||
LDA.l GanonVulnerableMode
|
||||
LDA.l InvincibleGanon
|
||||
CMP.b #$06 : BNE .vanilla
|
||||
|
||||
LDA.l OverworldEventDataWRAM+$80 ; check ped flag
|
||||
@@ -379,54 +426,54 @@ AgahnimAsksAboutPed:
|
||||
BNE .vanilla
|
||||
|
||||
LDA.b #$8C ; message 018C for no ped
|
||||
STA.w TextID
|
||||
STA.w $1CF0
|
||||
|
||||
.vanilla
|
||||
JML $85FA8E ; Sprite_ShowMessageMinimal
|
||||
JML $05FA8E ; Sprite_ShowMessageMinimal
|
||||
;--------------------------------------------------------------------------------
|
||||
Main_ShowTextMessage_Alt:
|
||||
; Are we in text mode? If so then end the routine.
|
||||
LDA.b GameMode : CMP.b #$0E : BEQ .already_in_text_mode
|
||||
LDA $10 : CMP.b #$0E : BEQ .already_in_text_mode
|
||||
Sprite_ShowMessageMinimal_Alt:
|
||||
STZ.b GameSubMode
|
||||
STZ $11
|
||||
|
||||
PHX : PHY
|
||||
PEI.b (Scrap00)
|
||||
LDA.b Scrap02 : PHA
|
||||
PEI ($00)
|
||||
LDA.b $02 : PHA
|
||||
|
||||
LDA.b #$1C : STA.b Scrap02
|
||||
LDA.b #$1C : STA.b $02
|
||||
REP #$30
|
||||
LDA.w TextID : ASL : TAX
|
||||
LDA.w $1CF0 : ASL : TAX
|
||||
LDA.l $7F71C0, X
|
||||
STA.b Scrap00
|
||||
STA.b $00
|
||||
SEP #$30
|
||||
|
||||
LDY.b #$00
|
||||
LDA.b [Scrap00], Y : CMP.b #$FE : BNE +
|
||||
INY : LDA.b [Scrap00], Y : CMP.b #$6E : BNE +
|
||||
INY : LDA.b [Scrap00], Y : : BNE +
|
||||
INY : LDA.b [Scrap00], Y : CMP.b #$FE : BNE +
|
||||
INY : LDA.b [Scrap00], Y : CMP.b #$6B : BNE +
|
||||
INY : LDA.b [Scrap00], Y : CMP.b #$04 : BNE +
|
||||
STZ.w MessageCursor
|
||||
LDA [$00], Y : CMP.b #$FE : BNE +
|
||||
INY : LDA [$00], Y : CMP.b #$6E : BNE +
|
||||
INY : LDA [$00], Y : : BNE +
|
||||
INY : LDA [$00], Y : CMP.b #$FE : BNE +
|
||||
INY : LDA [$00], Y : CMP.b #$6B : BNE +
|
||||
INY : LDA [$00], Y : CMP.b #$04 : BNE +
|
||||
STZ $1CE8
|
||||
JMP .end
|
||||
+
|
||||
|
||||
STZ.w MessageJunk ; Otherwise set it so we are in text mode.
|
||||
STZ.w MessageSubModule
|
||||
STZ $0223 ; Otherwise set it so we are in text mode.
|
||||
STZ $1CD8 ; Initialize the step in the submodule
|
||||
|
||||
; Go to text display mode (as opposed to maps, etc)
|
||||
LDA.b #$02 : STA.b GameSubMode
|
||||
LDA.b #$02 : STA $11
|
||||
|
||||
; Store the current module in the temporary location.
|
||||
LDA.b GameMode : STA.w GameModeCache
|
||||
LDA $10 : STA $010C
|
||||
|
||||
; Switch the main module ($10) to text mode.
|
||||
LDA.b #$0E : STA.b GameMode
|
||||
LDA.b #$0E : STA $10
|
||||
.end
|
||||
PLA : STA.b Scrap02
|
||||
PLA : STA.b Scrap01
|
||||
PLA : STA.b Scrap00
|
||||
PLA : STA.b $02
|
||||
PLA : STA.b $01
|
||||
PLA : STA.b $00
|
||||
PLY : PLX
|
||||
|
||||
Main_ShowTextMessage_Alt_already_in_text_mode:
|
||||
@@ -435,132 +482,26 @@ RTL
|
||||
CalculateSignIndex:
|
||||
; for the big 1024x1024 screens we are calculating link's effective
|
||||
; screen area, as though the screen was 4 different 512x512 screens.
|
||||
; And we do this in a way that will likely give the right value even
|
||||
; And we do this in a way that will likely give the right value even
|
||||
; with major glitches.
|
||||
|
||||
LDA.b OverworldIndex : ASL A : TAY ;what we wrote over
|
||||
LDA $8A : ASL A : TAY ;what we wrote over
|
||||
|
||||
LDA.w OWScreenSize : BEQ .done ; If a small map, we can skip these calculations.
|
||||
LDA $0712 : BEQ .done ; If a small map, we can skip these calculations.
|
||||
|
||||
LDA.b LinkPosY+1 : AND.w #$0002 : ASL #2 : EOR.b OverworldIndex : AND.w #$0008 : BEQ +
|
||||
LDA $21 : AND.w #$0002 : ASL #2 : EOR $8A : AND.w #$0008 : BEQ +
|
||||
TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen.
|
||||
+
|
||||
+
|
||||
|
||||
LDA.b LinkPosX+1 : AND.w #$0002 : LSR : EOR.b OverworldIndex : AND.w #$0001 : BEQ +
|
||||
LDA $23 : AND.w #$0002 : LSR : EOR $8A : AND.w #$0001 : BEQ +
|
||||
TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen.
|
||||
+
|
||||
; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash:
|
||||
TYA : AND.w #$00FF : TAY
|
||||
TYA : AND.w #$00FF : TAY
|
||||
|
||||
.done
|
||||
RTL
|
||||
|
||||
;================================================================
|
||||
; Contributor: Myramong
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
|
||||
{
|
||||
STA.w TextID
|
||||
STY.w TextID+1
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA.b Joy1B_New : BPL .alpha
|
||||
LDA.w SpriteTimerE, X : BNE .alpha
|
||||
LDA.b LinkJumping : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA.l $85E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other
|
||||
|
||||
PHY
|
||||
|
||||
LDA.w TextID
|
||||
LDY.w TextID+1
|
||||
|
||||
; Check what room we're in so we know which npc we're talking to
|
||||
LDA.b RoomIndex
|
||||
CMP.b #$05 : BEQ .SahasrahlaDialogs
|
||||
CMP.b #$1C : BEQ .BombShopGuyDialog
|
||||
BRA .SayNothing
|
||||
|
||||
.SahasrahlaDialogs
|
||||
REP #$20 : LDA.l MapReveal_Sahasrahla : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20
|
||||
JSL DialogSahasrahla : BRA .SayNothing
|
||||
|
||||
.BombShopGuyDialog
|
||||
REP #$20 : LDA.l MapReveal_BombShop : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20
|
||||
JSL DialogBombShopGuy
|
||||
|
||||
.SayNothing
|
||||
|
||||
LDA.b #$40 : STA.w SpriteTimerE, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
|
||||
LDA.w SpriteMoveDirection, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage:
|
||||
{
|
||||
PHY
|
||||
PHA
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA.b Joy1B_New : BPL .alpha
|
||||
LDA.w SpriteTimerE, X : BNE .alpha
|
||||
LDA.b LinkJumping : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA.l $85E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other
|
||||
|
||||
PLA : XBA : PLA
|
||||
|
||||
PHY
|
||||
|
||||
TAY : XBA
|
||||
|
||||
JSL Sprite_ShowMessageUnconditional
|
||||
|
||||
LDA.b #$40 : STA.w SpriteTimerE, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
PLY
|
||||
PLA
|
||||
|
||||
LDA.w SpriteMoveDirection, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; A0 - A9 - 0 - 9
|
||||
; AA - C3 - A - Z
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
StoreLastOverworldDoorID:
|
||||
TXA : INC
|
||||
STA.l PreviousOverworldDoor
|
||||
LDA.l $9BBB73, X : STA.w EntranceIndex
|
||||
STA $7F5099
|
||||
LDA $1BBB73, X : STA $010E
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -16,14 +16,14 @@ RTL
|
||||
; CacheDoorFrameData
|
||||
;--------------------------------------------------------------------------------
|
||||
CacheDoorFrameData:
|
||||
LDA.l PreviousOverworldDoor : BEQ .originalBehaviour
|
||||
LDA $7F5099 : BEQ .originalBehaviour
|
||||
DEC : ASL : TAX
|
||||
LDA.l EntranceDoorFrameTable, X : STA.w TileMapEntranceDoors
|
||||
LDA.l EntranceAltDoorFrameTable, X : STA.w TileMapTile32
|
||||
LDA EntranceDoorFrameTable, X : STA $0696
|
||||
LDA EntranceAltDoorFrameTable, X : STA $0698
|
||||
BRA .done
|
||||
.originalBehaviour
|
||||
LDA.w $D724, X : STA.w TileMapEntranceDoors
|
||||
STZ.w TileMapTile32
|
||||
LDA $D724, X : STA $0696
|
||||
STZ $0698
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -32,8 +32,8 @@ RTL
|
||||
; WalkDownIntoTavern
|
||||
;--------------------------------------------------------------------------------
|
||||
WalkDownIntoTavern:
|
||||
LDA.l PreviousOverworldDoor
|
||||
LDA $7F5099
|
||||
; tavern door has index 0x42 (saved off value is incremented by one)
|
||||
CMP.b #$43
|
||||
CMP #$43
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
330
dungeondrops.asm
330
dungeondrops.asm
@@ -1,329 +1,9 @@
|
||||
;================================================================================
|
||||
; Dungeon & Boss Drop Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnDungeonPrize:
|
||||
PHX : PHB
|
||||
TAX
|
||||
LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index
|
||||
TXA
|
||||
JSL.l AttemptItemSubstitution
|
||||
JSL.l ResolveLootIDLong
|
||||
STA.w ItemReceiptID
|
||||
TAX
|
||||
LDA.b #$29 : LDY.b #$06
|
||||
|
||||
JSL.l AddAncillaLong
|
||||
BCS .failed_spawn
|
||||
LDA.w ItemReceiptID
|
||||
STA.w AncillaGet,X : STA.w SpriteID,X
|
||||
JSR.w AddDungeonPrizeAncilla
|
||||
LDX.b ScrapBuffer72 : STZ.b RoomTag,X
|
||||
.failed_spawn
|
||||
PLB : PLX
|
||||
DropSafeDungeon:
|
||||
LDA $040C : CMP #$08 : BEQ +
|
||||
LDA $01C6FC, X : JML Sprite_SpawnFallingItem
|
||||
+
|
||||
RTL
|
||||
|
||||
AddDungeonPrizeAncilla:
|
||||
LDY.w ItemReceiptID
|
||||
STZ.w AncillaVelocityY,X
|
||||
STZ.w AncillaVelocityX,X
|
||||
STZ.w AncillaGeneral,X
|
||||
STZ.w $0385,X
|
||||
STZ.w $0C54,X
|
||||
|
||||
LDA.b #$D0 : STA.w AncillaVelocityZ,X
|
||||
LDA.b #$80 : STA.w AncillaZCoord,X
|
||||
LDA.b #$09 : STA.w AncillaTimer,X
|
||||
LDA.b #$00 : STA.w $0394,X
|
||||
LDA.w AncillaGet,X : STA.w ItemReceiptID
|
||||
LDA.w DungeonID : CMP.b #$14 : BNE .not_hera
|
||||
LDA.b LinkAbsoluteY+1 : AND.b #$FE
|
||||
INC A
|
||||
STA.b Scrap01
|
||||
STZ.b Scrap00
|
||||
LDA.b LinkAbsoluteX+1 : AND.b #$FE
|
||||
INC A
|
||||
STA.b Scrap03
|
||||
STZ.b Scrap02
|
||||
BRA .set_coords_exit
|
||||
.not_hera
|
||||
TYA : ASL : TAY
|
||||
REP #$20
|
||||
LDA.w #$0078
|
||||
CLC : ADC.b BG2V
|
||||
STA.b Scrap00
|
||||
LDA.w #$0078
|
||||
CLC : ADC.b BG2H
|
||||
STA.b Scrap02
|
||||
SEP #$20
|
||||
|
||||
.set_coords_exit
|
||||
LDA.b Scrap00 : STA.w AncillaCoordYLow,X
|
||||
LDA.b Scrap01 : STA.w AncillaCoordYHigh,X
|
||||
LDA.b Scrap02 : STA.w AncillaCoordXLow,X
|
||||
LDA.b Scrap03 : STA.w AncillaCoordXHigh,X
|
||||
RTS
|
||||
|
||||
PrepPrizeTile:
|
||||
PHA : PHX : PHY
|
||||
LDA.w AncillaGet, X
|
||||
JSL.l AttemptItemSubstitution
|
||||
JSL.l ResolveLootIDLong
|
||||
STA.w SpriteID,X
|
||||
JSL.l TransferItemReceiptToBuffer_using_ReceiptID
|
||||
PLY : PLX : PLA
|
||||
RTL
|
||||
|
||||
SetItemPose:
|
||||
PHA
|
||||
LDA.w DungeonID : BMI .one_handed
|
||||
LDA.w RoomItemsTaken : BIT.b #$80 : BNE +
|
||||
.one_handed
|
||||
PLA
|
||||
JML $8799F2
|
||||
+
|
||||
JSR.w CrystalOrPendantBehavior : BCC .one_handed
|
||||
.two_handed
|
||||
PLA
|
||||
JML $8799EE ; cool pose
|
||||
|
||||
SetPrizeCoords:
|
||||
PHX : PHY
|
||||
STZ.b Scrap03
|
||||
LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ +
|
||||
.regular_coords
|
||||
PLY : PLX
|
||||
LDY.w AncillaGet,X
|
||||
RTL
|
||||
+
|
||||
JSR.w CrystalOrPendantBehavior : BCC .regular_coords
|
||||
PLY : PLX
|
||||
LDY.b #$20 ; Treat as crystal
|
||||
RTL
|
||||
|
||||
SetCutsceneFlag:
|
||||
; Out: c - Cutscene flag $02 if set, $01 if unset.
|
||||
PHX
|
||||
LDY.b #$01 ; wrote over
|
||||
LDA.w DungeonID : BMI .no_cutscene
|
||||
LDA.w RoomItemsTaken : BIT #$80 : BNE .dungeon_prize
|
||||
.no_cutscene
|
||||
SEP #$30
|
||||
PLX
|
||||
CLC
|
||||
RTL
|
||||
.dungeon_prize
|
||||
LDA.w ItemReceiptMethod : CMP.b #$03 : BCC .no_cutscene
|
||||
JSR.w SetDungeonCompleted
|
||||
LDA.w ItemReceiptID
|
||||
REP #$30
|
||||
AND.w #$00FF : ASL : TAX
|
||||
LDA.l InventoryTable_properties,X : BIT.w #$0080 : BEQ .no_cutscene
|
||||
SEP #$31
|
||||
PLX
|
||||
RTL
|
||||
|
||||
AnimatePrizeCutscene:
|
||||
LDA.w ItemReceiptMethod : CMP.b #$03 : BNE +
|
||||
JSR.w CrystalOrPendantBehavior : BCC +
|
||||
LDA.w DungeonID : BMI +
|
||||
LDA.w RoomItemsTaken : BIT #$80 : BEQ +
|
||||
SEC
|
||||
RTL
|
||||
+
|
||||
CLC
|
||||
RTL
|
||||
|
||||
PrizeDropSparkle:
|
||||
LDA.w AncillaID,X : CMP.b #$29 : BNE .no_sparkle
|
||||
JSR.w CrystalOrPendantBehavior : BCC .no_sparkle
|
||||
SEC
|
||||
RTL
|
||||
.no_sparkle
|
||||
CLC
|
||||
RTL
|
||||
|
||||
HandleDropSFX:
|
||||
LDA.w RoomItemsTaken : BIT #$80 : BEQ .no_sound
|
||||
JSR.w CrystalOrPendantBehavior : BCC .no_sound
|
||||
SEC
|
||||
RTL
|
||||
.no_sound
|
||||
CLC
|
||||
RTL
|
||||
|
||||
HandleCrystalsField:
|
||||
TAX
|
||||
LDA.w ItemReceiptID : CMP.b #$20 : BNE .not_crystal
|
||||
TXA
|
||||
STA.l CrystalsField
|
||||
RTL
|
||||
.not_crystal
|
||||
RTL
|
||||
|
||||
MaybeKeepLootID:
|
||||
PHA
|
||||
LDA.w DungeonID : BMI .no_prize
|
||||
LDA.w RoomItemsTaken : BIT #$80 : BNE .prize
|
||||
.no_prize
|
||||
STZ.w ItemReceiptID
|
||||
STZ.w ItemReceiptPose
|
||||
PLA
|
||||
RTL
|
||||
.prize
|
||||
STZ.w ItemReceiptPose
|
||||
PLA
|
||||
RTL
|
||||
|
||||
CheckSpawnPrize:
|
||||
; In: A - DungeonID
|
||||
; Out: c - Spawn prize if set
|
||||
REP #$20
|
||||
LDX.w DungeonID
|
||||
LDA.l DungeonItemMasks,X : AND.l DungeonsCompleted : BEQ .spawn
|
||||
SEP #$20
|
||||
CLC
|
||||
RTL
|
||||
.spawn
|
||||
SEP #$21
|
||||
RTL
|
||||
|
||||
CheckDungeonCompletion:
|
||||
LDX.w DungeonID
|
||||
REP #$20
|
||||
LDA.l DungeonItemMasks,X : AND.l DungeonsCompleted
|
||||
SEP #$20
|
||||
RTL
|
||||
|
||||
PendantMusicCheck:
|
||||
; In: A - Item receipt ID
|
||||
PHX
|
||||
TAY
|
||||
LDA.w ItemReceiptMethod : CMP.b #$03 : BNE .dont_wait
|
||||
TYA
|
||||
REP #$30
|
||||
AND.w #$00FF : ASL : TAX
|
||||
LDA.l InventoryTable_properties,X : BIT.w #$0080 : BNE .dont_wait
|
||||
SEP #$31
|
||||
PLX
|
||||
RTL
|
||||
.dont_wait
|
||||
SEP #$30
|
||||
PLX
|
||||
CLC
|
||||
RTL
|
||||
|
||||
PrepPrizeOAMCoordinates:
|
||||
PHX : PHY
|
||||
LDY.w AncillaLayer,X
|
||||
|
||||
LDA.w $F67F,Y : STA.b $65
|
||||
STZ.b $64
|
||||
|
||||
LDA.w AncillaCoordYLow,X : STA.b Scrap00
|
||||
LDA.w AncillaCoordYHigh,X : STA.b Scrap01
|
||||
LDA.w AncillaCoordXLow,X : STA.b Scrap02
|
||||
LDA.w AncillaCoordXHigh,X : STA.b Scrap03
|
||||
|
||||
REP #$20
|
||||
LDA.b Scrap00
|
||||
SEC : SBC.w $0122
|
||||
STA.b Scrap00
|
||||
|
||||
LDA.b Scrap02
|
||||
SEC : SBC.w $011E
|
||||
STA.b Scrap02
|
||||
STA.b Scrap04
|
||||
|
||||
REP #$20
|
||||
LDA.w $029E,X
|
||||
AND.w #$00FF
|
||||
STA.b $72
|
||||
|
||||
LDA.b $00
|
||||
STA.b $06
|
||||
SEC
|
||||
SBC.b $72
|
||||
STA.b $00
|
||||
|
||||
SEP #$20
|
||||
TXY
|
||||
LDA.w AncillaGet,X : TAX
|
||||
LDA.l SpriteProperties_chest_width,X : BNE .wide
|
||||
TYX
|
||||
LDA.w AncillaID,X : CMP.b #$3E : BEQ .rising_crystal
|
||||
REP #$20
|
||||
LDA.b Scrap00
|
||||
CLC : ADC.w #$0008
|
||||
STA.b Scrap08
|
||||
LDA.b Scrap02
|
||||
CLC : ADC.w #$0004
|
||||
STA.b Scrap02 : STA.b Scrap0A
|
||||
BRA .wide
|
||||
.rising_crystal
|
||||
REP #$20
|
||||
LDA.b Scrap00
|
||||
CLC : ADC.w #$0008 : STA.b Scrap08
|
||||
LDA.b Scrap02 : STA.b Scrap0A
|
||||
.wide
|
||||
SEP #$20
|
||||
PLY : PLX
|
||||
RTL
|
||||
|
||||
PrepPrizeShadow:
|
||||
PHX
|
||||
LDA.w ItemReceiptID : TAX
|
||||
LDA.l SpriteProperties_standing_width,X : BNE .wide
|
||||
LDA.b Scrap02
|
||||
SEC : SBC.b #$04
|
||||
STA.b Scrap02
|
||||
.wide
|
||||
LDA.b #$20 : STA.b Scrap04 ; What we wrote over
|
||||
PLX
|
||||
RTL
|
||||
|
||||
CheckPoseItemCoordinates:
|
||||
PHX
|
||||
LDA.w ItemReceiptPose : BEQ .done
|
||||
BIT.b #$02 : BEQ .done
|
||||
LDA.w AncillaGet,X : TAX
|
||||
LDA.l SpriteProperties_chest_width,X : BNE .done
|
||||
LDA.b Scrap02
|
||||
CLC : ADC.b #$04
|
||||
STA.b Scrap02
|
||||
.done
|
||||
PLX
|
||||
LDA.w AncillaGet,X
|
||||
TAX
|
||||
RTL
|
||||
|
||||
CrystalOrPendantBehavior:
|
||||
; Out: c - Crystal Behavior if set, pendant if unset
|
||||
PHA : PHX
|
||||
LDA.w AncillaGet,X
|
||||
REP #$31
|
||||
AND.w #$00FF : ASL : TAX
|
||||
LDA.l InventoryTable_properties,X : BIT.w #$0080 : BNE .crystal_behavior
|
||||
SEP #$30
|
||||
PLX : PLA
|
||||
RTS
|
||||
.crystal_behavior
|
||||
SEP #$31
|
||||
PLX : PLA
|
||||
RTS
|
||||
|
||||
CheckDungeonWorld:
|
||||
; Maintain vanilla door opening behavior with dungeon prizes
|
||||
TXA : CMP.b #$05 : BCS .dark_world
|
||||
REP #$02
|
||||
RTL
|
||||
.dark_world
|
||||
SEP #$02
|
||||
RTL
|
||||
|
||||
SetDungeonCompleted:
|
||||
LDX.w DungeonID : BMI +
|
||||
REP #$20
|
||||
LDA.l DungeonItemMasks, X : ORA.l DungeonsCompleted : STA.l DungeonsCompleted
|
||||
SEP #$20
|
||||
+
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -1,16 +1,24 @@
|
||||
DoDungeonMapBossIcon:
|
||||
LDA.b NMISTRIPES
|
||||
LDA.b $14
|
||||
CMP.b #$09
|
||||
BEQ .dungeonmap
|
||||
|
||||
.cave
|
||||
CMP.b #$01
|
||||
RTL
|
||||
|
||||
.dungeonmap
|
||||
|
||||
LDX.w DungeonID
|
||||
LDX.w $040C
|
||||
BMI .cave
|
||||
|
||||
; LDA.l DungeonMapIcons
|
||||
; AND.b #$01
|
||||
; BNE ++
|
||||
;
|
||||
; INC ; so it's not equal to $01
|
||||
; BRA .cave
|
||||
|
||||
; get dungeon boss room
|
||||
++ REP #$30
|
||||
LDA.l $8AE817,X
|
||||
@@ -49,7 +57,7 @@ DoDungeonMapBossIcon:
|
||||
|
||||
.match
|
||||
LDA.b #$80
|
||||
STA.w CGADD
|
||||
STA.w $2121
|
||||
|
||||
REP #$30
|
||||
|
||||
@@ -66,14 +74,14 @@ DoDungeonMapBossIcon:
|
||||
ASL ; x128 for graphics
|
||||
ASL
|
||||
ADC.w #BossMapIconGFX
|
||||
STA.w A1T1L
|
||||
STA.w $4312
|
||||
|
||||
PHY
|
||||
LDY.w #32
|
||||
|
||||
SEP #$20
|
||||
-- LDA.l .boss_palettes,X
|
||||
STA.w CGDATA
|
||||
STA.w $2122
|
||||
INX
|
||||
DEY
|
||||
BNE --
|
||||
@@ -86,24 +94,24 @@ DoDungeonMapBossIcon:
|
||||
SEP #$10
|
||||
|
||||
LDA.w #$1801
|
||||
STA.w DMAP1
|
||||
STA.w $4310
|
||||
|
||||
LDX.b #BossMapIconGFX>>16
|
||||
STX.w A1B1
|
||||
STX.w $4314
|
||||
|
||||
LDA.w #$A060>>1
|
||||
STA.w VMADDL
|
||||
STA.w $2116
|
||||
LDA.w #$0040
|
||||
STA.w DAS1L
|
||||
STA.w $4315
|
||||
|
||||
LDX.b #$02
|
||||
STX.w MDMAEN
|
||||
STX.w $420B
|
||||
|
||||
STA.w DAS1L
|
||||
STA.w $4315
|
||||
LDA.w #$A260>>1
|
||||
STA.w VMADDL
|
||||
STA.w $2116
|
||||
|
||||
STX.w MDMAEN
|
||||
STX.w $420B
|
||||
|
||||
; done
|
||||
SEP #$30
|
||||
|
||||
22
elder.asm
22
elder.asm
@@ -1,11 +1,11 @@
|
||||
NewElderCode:
|
||||
{
|
||||
LDA.b OverworldIndex : CMP.b #$1B : BEQ .newCodeContinue
|
||||
LDA $8A : CMP #$1B : BEQ .newCodeContinue
|
||||
;Restore Jump we can keep the RTL so JML
|
||||
JML $85F0CD
|
||||
JML $05F0CD
|
||||
.newCodeContinue
|
||||
PHB : PHK : PLB
|
||||
LDA.b #$07 : STA.w SpriteOAMProp, X ; Palette
|
||||
LDA.b #$07 : STA $0F50, X ;Palette
|
||||
JSR Elder_Draw
|
||||
JSL Sprite_PlayerCantPassThrough
|
||||
JSR Elder_Code
|
||||
@@ -17,12 +17,12 @@ RTL
|
||||
Elder_Draw:
|
||||
{
|
||||
|
||||
LDA.b #$02 : STA.b Scrap06 : STZ.b Scrap07 ;Number of Tiles
|
||||
LDA.b #$02 : STA $06 : STZ $07 ;Number of Tiles
|
||||
|
||||
LDA.w SpriteGFXControl, X : ASL #04
|
||||
LDA $0DC0, X : ASL #04
|
||||
|
||||
ADC.b #.animation_states : STA.b Scrap08
|
||||
LDA.b #.animation_states>>8 : ADC.b #$00 : STA.b Scrap09
|
||||
ADC.b #.animation_states : STA $08
|
||||
LDA.b #.animation_states>>8 : ADC.b #$00 : STA $09
|
||||
|
||||
JSL Sprite_DrawMultiple_player_deferred
|
||||
JSL Sprite_DrawShadowLong
|
||||
@@ -42,15 +42,15 @@ RTL
|
||||
{
|
||||
REP #$20
|
||||
LDA.l GoalItemRequirement : BEQ .despawn
|
||||
LDA.l GanonVulnerableMode : AND.w #$00FF : CMP.w #$0005 : BEQ .despawn
|
||||
LDA.l InvincibleGanon : AND.w #$00FF : CMP.w #$0005 : BEQ .despawn
|
||||
LDA.l TurnInGoalItems : AND.w #$00FF : BNE +
|
||||
.despawn
|
||||
SEP #$20
|
||||
STZ.w SpriteAITable, X ; despawn self
|
||||
STZ $0DD0, X ; despawn self
|
||||
RTS
|
||||
+
|
||||
SEP #$20
|
||||
LDA.b GameSubMode
|
||||
LDA.b $11
|
||||
BNE .done
|
||||
LDA.b #$96
|
||||
LDY.b #$01
|
||||
@@ -66,6 +66,6 @@ RTL
|
||||
|
||||
.done
|
||||
SEP #$20
|
||||
LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X
|
||||
LDA.b $1A : LSR #5 : AND.b #$01 : STA.w $0DC0, X
|
||||
RTS
|
||||
}
|
||||
|
||||
22
endingsequence.asm
Normal file
22
endingsequence.asm
Normal file
@@ -0,0 +1,22 @@
|
||||
;================================================================================
|
||||
; Dialog Pointer Override
|
||||
;--------------------------------------------------------------------------------
|
||||
EndingSequenceTableOverride:
|
||||
PHY
|
||||
PHX
|
||||
TYX
|
||||
LDA.l EndingSequenceText, X
|
||||
PLX
|
||||
STA $1008, X
|
||||
PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
EndingSequenceTableLookupOverride:
|
||||
PHY
|
||||
PHX
|
||||
TYX
|
||||
LDA.l EndingSequenceText, X : AND #$00FF
|
||||
PLX
|
||||
PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -3,25 +3,21 @@
|
||||
; make sure bats always load LW stats
|
||||
;--------------------------------------------------------------------------------
|
||||
NewBatInit:
|
||||
CPY.b #$00 : BEQ .light_world
|
||||
CPY #$00 : BEQ .light_world
|
||||
;check if map id == 240 or 241
|
||||
LDA.b RoomIndex : CMP.b #$F0 : BEQ .light_world ;oldman cave1
|
||||
CMP.b #$F1 : BEQ .light_world ;oldman cave2
|
||||
CMP.b #$B0 : BEQ .light_world ;agahnim statue keese
|
||||
CMP.b #$D0 : BEQ .light_world ;agahnim darkmaze
|
||||
LDA $A0 : CMP #$F0 : BEQ .light_world ;oldman cave1
|
||||
CMP #$F1 : BEQ .light_world ;oldman cave2
|
||||
CMP #$B0 : BEQ .light_world ;agahnim statue keese
|
||||
CMP #$D0 : BEQ .light_world ;agahnim darkmaze
|
||||
|
||||
|
||||
LDA.b #$85 : STA.w SpriteBump, X
|
||||
LDA.b #$04 : STA.w SpriteHitPoints, X
|
||||
LDA.b #$85 : STA $0CD2, X
|
||||
LDA.b #$04 : STA $0E50, X
|
||||
RTL
|
||||
|
||||
.light_world
|
||||
LDA.b #$80 : STA.w SpriteBump, X
|
||||
LDA.b #$01 : STA.w SpriteHitPoints, X
|
||||
LDA.b #$80 : STA $0CD2, X
|
||||
LDA.b #$01 : STA $0E50, X
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
NewFireBarDamage:
|
||||
LDA.b LinkLayer : CMP.w SpriteLayer, X : BNE .NotSameLayer
|
||||
JSL Sprite_AttemptDamageToPlayerPlusRecoilLong
|
||||
RTL
|
||||
.NotSameLayer
|
||||
RTL
|
||||
|
||||
|
||||
127
entrances.asm
127
entrances.asm
@@ -8,30 +8,30 @@ LockAgahnimDoors:
|
||||
;#$0 = Never Locked
|
||||
LDA.w #$0000 : RTL
|
||||
+ : CMP.w #$0001 : BNE +
|
||||
LDA.l ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||
LDA ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||
JSR.w LockAgahnimDoorsCore : RTL
|
||||
+ : CMP.w #$0002 : BNE +
|
||||
JSR.w LockAgahnimDoorsCore : BEQ .unlock
|
||||
PHX : PHY
|
||||
SEP #$30
|
||||
JSL.l CheckTowerOpen
|
||||
JSL.l CheckEnoughCrystalsForTower
|
||||
REP #$30
|
||||
PLY : PLX
|
||||
!BGE .crystalOrUnlock
|
||||
LDA.w #$0001 : RTL
|
||||
LDA #$0001 : RTL
|
||||
.crystalOrUnlock
|
||||
LDA.l InvertedMode : AND.w #$00FF : BEQ .unlock
|
||||
LDA InvertedMode : AND.w #$00FF : BEQ .unlock
|
||||
|
||||
LDA.l OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not
|
||||
LDA.w AButtonAct : AND.w #$0080 : BEQ ++ ;If we are holding an item
|
||||
LDA OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not
|
||||
LDA $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item
|
||||
|
||||
.locked
|
||||
LDA.w #$0001 : RTL ;Keep the door locked
|
||||
LDA #$0001 : RTL ;Keep the door locked
|
||||
++
|
||||
SEP #$30
|
||||
JSL $899B6F ;Add tower break seal
|
||||
JSL $099B6F ;Add tower break seal
|
||||
REP #$30
|
||||
LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy
|
||||
LDA #$0001 ;Prevent door from opening that frame otherwise it glitchy
|
||||
RTL
|
||||
|
||||
+
|
||||
@@ -44,18 +44,18 @@ RTL
|
||||
FlagAgahnimDoor:
|
||||
LDA.l InvertedMode : BEQ .vanilla
|
||||
|
||||
LDA.l OverworldEventDataWRAM+$43 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$43 ; activate GT overlay
|
||||
LDA OverworldEventDataWRAM+$43 : ORA #$20 : STA OverworldEventDataWRAM+$43 ; activate GT overlay
|
||||
|
||||
.vanilla
|
||||
LDA.b #$28 : STA.b ScrapBuffer72
|
||||
LDA.b #$28 : STA.b $72
|
||||
RTL
|
||||
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
LockAgahnimDoorsCore:
|
||||
LDA.b LinkPosX : CMP.w #1992 : !BLT + ; door too far left, skip
|
||||
LDA $22 : CMP.w #1992 : !BLT + ; door too far left, skip
|
||||
CMP.w #2088 : !BGE + ; door too rat right, skip
|
||||
LDA.b LinkPosY : CMP.w #1720 : !BGE + ; door too low, skip
|
||||
LDA $20 : CMP.w #1720 : !BGE + ; door too low, skip
|
||||
LDA.w #$0001
|
||||
RTS
|
||||
+
|
||||
@@ -77,7 +77,7 @@ JML.l Overworld_Entrance_BRANCH_RHO
|
||||
AllowStartFromSingleEntranceCave:
|
||||
; 16 Bit A, 16 bit XY
|
||||
; do not need to preserve A or X or Y
|
||||
LDA.l StartingEntrance : AND.w #$00FF ; What we wrote over
|
||||
LDA StartingEntrance : AND.w #$00FF ; What we wrote over
|
||||
PHA
|
||||
TAX
|
||||
LDA.l StartingAreaExitOffset, X
|
||||
@@ -86,45 +86,46 @@ AllowStartFromSingleEntranceCave:
|
||||
BNE +
|
||||
JMP .done
|
||||
+
|
||||
|
||||
DEC
|
||||
STA.b Scrap00
|
||||
ASL #2 : !ADD Scrap00 : ASL #2 ; mult by 20
|
||||
STA $00
|
||||
ASL #2 : !ADD $00 : ASL #2 ; mult by 20
|
||||
TAX
|
||||
|
||||
LDA.w #$0016 : STA.l EN_MAINDESQ ; Cache the main screen designation
|
||||
LDA.l StartingAreaExitTable+$05, X : STA.l EN_BG2VERT ; Cache BG1 V scroll
|
||||
LDA.l StartingAreaExitTable+$07, X : STA.l EN_BG2HORZ ; Cache BG1 H scroll
|
||||
LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA.l EN_POSY ; Cache Link's Y coordinate
|
||||
LDA.l StartingAreaExitTable+$0B, X : STA.l EN_POSX ; Cache Link's X coordinate
|
||||
LDA.l StartingAreaExitTable+$0D, X : STA.l EN_SCROLLATN ; Cache Camera Y coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$0F, X : STA.l EN_SCROLLATW ; Cache Camera X coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$03, X : STA.l EN_OWTMAPI ; Cache Link VRAM Location
|
||||
LDA #$0016 : STA $7EC142 ; Cache the main screen designation
|
||||
LDA.l StartingAreaExitTable+$05, X : STA $7EC144 ; Cache BG1 V scroll
|
||||
LDA.l StartingAreaExitTable+$07, X : STA $7EC146 ; Cache BG1 H scroll
|
||||
LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA $7EC148 ; Cache Link's Y coordinate
|
||||
LDA.l StartingAreaExitTable+$0B, X : STA $7EC14A ; Cache Link's X coordinate
|
||||
LDA.l StartingAreaExitTable+$0D, X : STA $7EC150 ; Cache Camera Y coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$0F, X : STA $7EC152 ; Cache Camera X coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$03, X : STA $7EC14E ; Cache Link VRAM Location
|
||||
|
||||
; Handle the 2 "unknown" bytes, which control what area of the backgound
|
||||
; relative to the camera? gets loaded with new tile data as the player moves around
|
||||
; (because some overworld areas like Kak are too big for a single VRAM tilemap)
|
||||
|
||||
LDA.l StartingAreaExitTable+$11, X : AND.w #$00FF
|
||||
BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend
|
||||
STA.l EN_SCRMODYA
|
||||
BIT.w #$0080 : BEQ + : ORA #$FF00 : + ; Sign extend
|
||||
STA.l $7EC16A
|
||||
|
||||
LDA.l StartingAreaExitTable+$12, X : AND.w #$00FF
|
||||
BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend
|
||||
STA.l EN_SCRMODXA
|
||||
BIT.w #$0080 : BEQ + : ORA #$FF00 : + ; Sign extend
|
||||
STA.l $7EC16E
|
||||
|
||||
LDA.w #$0000 : !SUB.l EN_SCRMODYA : STA.l EN_SCRMODYB
|
||||
LDA.w #$0000 : !SUB.l EN_SCRMODXA : STA.l EN_SCRMODXB
|
||||
LDA.w #$0000 : !SUB.l $7EC16A : STA $7EC16C
|
||||
LDA.w #$0000 : !SUB.l $7EC16E : STA $7EC170
|
||||
|
||||
LDA.l StartingAreaExitTable+$02, X : AND.w #$00FF
|
||||
STA.l EN_OWSCR ; Cache the overworld area number
|
||||
STA.l EN_OWSCR2 ; Cache the aux overworld area number
|
||||
STA $7EC14C ; Cache the overworld area number
|
||||
STA $7EC140 ; Cache the aux overworld area number
|
||||
|
||||
STZ.w TileMapTile32 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ.w TileMapTile32+1 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ $0698 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ $0699 ;zero out door overlays in case starting overworld door is not set
|
||||
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.l StartingEntrance : TAX
|
||||
LDA.l StartingAreaOverworldDoor, X : STA.l PreviousOverworldDoor ;Load overworld door
|
||||
LDA StartingEntrance : TAX
|
||||
LDA.l StartingAreaOverworldDoor, X : STA.l $7F5099 ;Load overworld door
|
||||
REP #$20 ; reset 16-bit accumulator
|
||||
JSL.l CacheDoorFrameData
|
||||
|
||||
@@ -134,7 +135,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
AllowStartFromExit:
|
||||
|
||||
LDX.w MessageCursor
|
||||
LDX $1CE8
|
||||
LDA.l ShouldStartatExit, X : BNE .doStart
|
||||
|
||||
LDA.l StartingEntrance ; what we wrote over
|
||||
@@ -142,42 +143,42 @@ JML.l AllowStartFromExitReturn
|
||||
|
||||
.doStart
|
||||
|
||||
LDA.l $828481, X ;Module_LocationMenu_starting_points
|
||||
LDA.l $028481, X ;Module_LocationMenu_starting_points
|
||||
ASL : TAX
|
||||
|
||||
LDA.l $82D8D2, X : STA.b RoomIndex
|
||||
LDA.l $82D8D3, X : STA.b RoomIndex+1
|
||||
LDA.l $02D8D2, X : STA $A0
|
||||
LDA.l $02D8D3, X : STA $A1
|
||||
|
||||
; Go to pre-overworld mode
|
||||
LDA.b #$08 : STA.b GameMode
|
||||
LDA.b #$08 : STA $10
|
||||
|
||||
STZ.b GameSubMode
|
||||
STZ.b SubSubModule
|
||||
STZ.w DeathReloadFlag
|
||||
STZ.w RespawnFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
STZ $11
|
||||
STZ $B0
|
||||
|
||||
STZ $010A
|
||||
|
||||
STZ $04AA
|
||||
JSL Equipment_SearchForEquippedItemLong
|
||||
JSL HUD_RebuildLong2
|
||||
JSL Equipment_UpdateEquippedItemLong
|
||||
JSL $0DDD32 ; Equipment_UpdateEquippedItemLong
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckHole:
|
||||
LDX.w #$0024
|
||||
.nextHoleClassic
|
||||
LDA.b Scrap00 : CMP.l $9BB800, X
|
||||
LDA.b $00 : CMP.l $1BB800, X
|
||||
BNE .wrongMap16Classic
|
||||
LDA.b OverworldIndex : CMP.l $9BB826, X
|
||||
LDA.w $040A : CMP.l $1BB826, X
|
||||
BEQ .matchedHoleClassic
|
||||
.wrongMap16Classic
|
||||
DEX #2 : BPL .nextHoleClassic
|
||||
|
||||
LDX.w #$001E
|
||||
.nextHoleExtra
|
||||
LDA.b Scrap00 : CMP.l ExtraHole_Map16, X
|
||||
LDA.b $00 : CMP.l ExtraHole_Map16, X
|
||||
BNE .wrongMap16Extra
|
||||
LDA.b OverworldIndex : CMP.l ExtraHole_Area, X
|
||||
LDA.w $040A : CMP.l ExtraHole_Area, X
|
||||
BEQ .matchedHoleExtra
|
||||
.wrongMap16Extra
|
||||
DEX #2 : BPL .nextHoleExtra
|
||||
@@ -188,14 +189,14 @@ CheckHole:
|
||||
.matchedHoleExtra
|
||||
SEP #$30
|
||||
TXA : LSR A : TAX
|
||||
LDA.l ExtraHole_Entrance, X : STA.w EntranceIndex : STZ.w EntranceIndex+1
|
||||
LDA.l ExtraHole_Entrance, X : STA.w $010E : STZ.w $010F
|
||||
JML Overworld_Hole_End
|
||||
;--------------------------------------------------------------------------------
|
||||
PreventEnterOnBonk:
|
||||
STA.b Scrap00 ; part of what we wrote over
|
||||
STA $00 ; part of what we wrote over
|
||||
LDA.l InvertedMode : AND.w #$00FF : BEQ .done
|
||||
LDA.b LinkState : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
||||
LDA.b OverworldIndex : AND.w #$0040 : CMP.b WorldCache : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||
LDA.l $5D : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
||||
LDA.b $8A : AND.w #$0040 : CMP $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||
|
||||
; If in inverted, are in mirror mode, and are bonking then do not enter
|
||||
JML.l PreventEnterOnBonk_BRANCH_IX
|
||||
@@ -205,8 +206,8 @@ PreventEnterOnBonk:
|
||||
JML.l PreventEnterOnBonk_return
|
||||
;--------------------------------------------------------------------------------
|
||||
TurtleRockEntranceFix:
|
||||
LDA.l TurtleRockAutoOpenFix : BEQ .done
|
||||
LDA.b OverworldIndex : CMP.b #$47 : BNE .done
|
||||
LDA TurtleRockAutoOpenFix : BEQ .done
|
||||
LDA $8A : CMP.b #$47 : BNE .done
|
||||
;If exiting to turtle rock ensure the entrance is open
|
||||
LDA.l OverworldEventDataWRAM+$47 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$47
|
||||
.done
|
||||
@@ -215,14 +216,14 @@ RTL
|
||||
AnimatedEntranceFix: ;when an entrance animation tries to start
|
||||
PHA
|
||||
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
||||
LDA.b OverworldIndex : AND.b #$40 : BNE + ;and in the light world
|
||||
LDA $8A : AND.b #$40 : BNE + ;and in the light world
|
||||
PLA
|
||||
STZ.w OWEntranceCutscene ; skip it.
|
||||
LDA.b #$00
|
||||
STZ $04C6 ; skip it.
|
||||
LDA #$00
|
||||
RTL
|
||||
+
|
||||
PLA
|
||||
STA.w CutsceneFlag ;what we wrote over
|
||||
STA.w FreezeSprites ;what we wrote over
|
||||
STA.w SkipOAM ;what we wrote over
|
||||
STA $02E4 ;what we wrote over
|
||||
STA $0FC1 ;what we wrote over
|
||||
STA $0710 ;what we wrote over
|
||||
RTL
|
||||
|
||||
286
events.asm
286
events.asm
@@ -1,15 +1,17 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
; OnLoadOW
|
||||
;--------------------------------------------------------------------------------
|
||||
;OnLoadMap:
|
||||
; LDA OverworldEventDataWRAM+$5B ; thing we wrote over
|
||||
;RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnPrepFileSelect:
|
||||
LDA.b GameSubMode : CMP.b #$03 : BNE +
|
||||
LDA.b #$06 : STA.b NMISTRIPES ; thing we wrote over
|
||||
RTL
|
||||
+
|
||||
PHA : PHX
|
||||
REP #$10
|
||||
JSL.l LoadAlphabetTilemap
|
||||
JSL.l LoadFullItemTiles
|
||||
SEP #$10
|
||||
PLX : PLA
|
||||
RTL
|
||||
LDA $11 : CMP.b #$03 : BNE +
|
||||
LDA.b #$06 : STA $14 ; thing we wrote over
|
||||
RTL
|
||||
+
|
||||
JSL.l LoadAlphabetTilemap
|
||||
JML.l LoadFullItemTiles
|
||||
;--------------------------------------------------------------------------------
|
||||
OnDrawHud:
|
||||
JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter
|
||||
@@ -20,13 +22,8 @@ OnDrawHud:
|
||||
JML.l ReturnFromOnDrawHud
|
||||
;--------------------------------------------------------------------------------
|
||||
OnDungeonEntrance:
|
||||
STA.l PegColor ; thing we wrote over
|
||||
JSL MaybeFlagDungeonTotalsEntrance
|
||||
LDA.w #$0001 : STA.l UpdateHUDFlag
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnDungeonBossExit:
|
||||
JSL.l StatTransitionCounter
|
||||
STA $7EC172 ; thing we wrote over
|
||||
JSL MaybeFlagCompassTotalEntrance
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnPlayerDead:
|
||||
@@ -38,34 +35,33 @@ OnPlayerDead:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnDungeonExit:
|
||||
PHA : PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
JSL.l SQEGFix
|
||||
PLP : PLA
|
||||
PHA : PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
JSL.l SQEGFix
|
||||
PLP : PLA
|
||||
|
||||
STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over
|
||||
STA $040C : STZ $04AC ; thing we wrote over
|
||||
|
||||
PHA : PHP
|
||||
LDA.w #$0001 : STA.l UpdateHUDFlag
|
||||
JSL.l HUD_RebuildLong
|
||||
JSL.l FloodGateResetInner
|
||||
JSL.l SetSilverBowMode
|
||||
PLP : PLA
|
||||
PHA : PHP
|
||||
JSL.l HUD_RebuildLong
|
||||
JSL.l FloodGateResetInner
|
||||
JSL.l SetSilverBowMode
|
||||
PLP : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnQuit:
|
||||
JSL.l SQEGFix
|
||||
LDA.b #$00 : STA.l AltTextFlag ; bandaid patch bug with mirroring away from text
|
||||
LDA.b #$10 : STA.b MAINDESQ ; thing we wrote over
|
||||
LDA.b #$00 : STA $7F5035 ; bandaid patch bug with mirroring away from text
|
||||
LDA.b #$10 : STA $1C ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnUncleItemGet:
|
||||
PHA
|
||||
|
||||
LDA.l EscapeAssist
|
||||
BIT.b #$04 : BEQ + : STA.l InfiniteMagic : +
|
||||
BIT.b #$02 : BEQ + : STA.l InfiniteBombs : +
|
||||
BIT.b #$01 : BEQ + : STA.l InfiniteArrows : +
|
||||
BIT.b #$04 : BEQ + : STA InfiniteMagicModifier : +
|
||||
BIT.b #$02 : BEQ + : STA InfiniteBombsModifier : +
|
||||
BIT.b #$01 : BEQ + : STA InfiniteArrowsModifier : +
|
||||
|
||||
PLA
|
||||
JSL.l Link_ReceiveItem
|
||||
@@ -81,80 +77,66 @@ OnUncleItemGet:
|
||||
LDA.l CurrentRupees : !ADD.l FreeUncleItemAmount : STA.l CurrentRupees ; rupee arrows, so also give the player some money to start
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
+
|
||||
LDA.l ProgressIndicator : BNE +
|
||||
LDA.b #$01 : STA.l ProgressIndicator ; handle rain state
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnAga1Defeated:
|
||||
STA.l ProgressIndicator ; vanilla game state stuff we overwrote
|
||||
LDA.l GanonVulnerableMode
|
||||
CMP.b #$06 : BNE +
|
||||
.light_speed
|
||||
REP #$20
|
||||
LDA.w #$0019 : STA.b GameMode
|
||||
SEP #$20
|
||||
+
|
||||
LDA.b #$08 : CMP.w DungeonID : BNE +
|
||||
ORA.l DungeonsCompleted+1 : STA.l DungeonsCompleted+1
|
||||
+
|
||||
.exit
|
||||
LDA.l ProgressIndicator : BNE +
|
||||
LDA.b #$01 : STA.l ProgressIndicator ; handle rain state
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnAga2Defeated:
|
||||
JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first
|
||||
LDA.b #$01 : STA.l Aga2Duck
|
||||
LDA.w DungeonID : CMP.b #$1A : BNE +
|
||||
LDA.l DungeonsCompleted : ORA.b #$04 : STA.l DungeonsCompleted
|
||||
+
|
||||
LDA.b #$FF : STA.w DungeonID
|
||||
JML.l IncrementAgahnim2Sword
|
||||
JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first
|
||||
LDA.b #$01 : STA.l Aga2Duck
|
||||
JML.l IncrementAgahnim2Sword
|
||||
;--------------------------------------------------------------------------------
|
||||
OnFileCreation:
|
||||
PHB
|
||||
LDA.w #$03D7
|
||||
LDX.w #$B000
|
||||
LDY.w #$0000
|
||||
MVN CartridgeSRAM>>16, InitSRAMTable>>16
|
||||
; Skip file name and validity value
|
||||
LDA.w #$010C
|
||||
LDX.w #$B3E3
|
||||
LDY.w #$03E3
|
||||
MVN CartridgeSRAM>>16, InitSRAMTable>>16
|
||||
PLB
|
||||
; Copy initial SRAM state from ROM to cart SRAM
|
||||
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 ; /
|
||||
PLB
|
||||
|
||||
; Resolve instant post-aga if standard
|
||||
SEP #$20
|
||||
LDA.l InitProgressIndicator : BIT #$80 : BEQ +
|
||||
LDA.b #$00 : STA.l ProgressIndicatorSRAM ; set post-aga after zelda rescue
|
||||
LDA.b #$00 : STA.l OverworldEventDataSRAM+$02 ; keep rain state vanilla
|
||||
+
|
||||
REP #$20
|
||||
; resolve instant post-aga if standard
|
||||
SEP #$20
|
||||
LDA.l InitProgressIndicator : BIT #$80 : BEQ +
|
||||
LDA.b #$00 : STA.l ProgressIndicatorSRAM ; set post-aga after zelda rescue
|
||||
LDA.b #$00 : STA.l OverworldEventDataSRAM+$02 ; keep rain state vanilla
|
||||
+
|
||||
REP #$20
|
||||
|
||||
; Set validity value and do some cleanup. Jump to checksum done.
|
||||
LDA.w #$55AA : STA.l FileValiditySRAM
|
||||
JSL.l WriteSaveChecksumAndBackup
|
||||
STZ.b Scrap00
|
||||
STZ.b Scrap01
|
||||
; Set validity value and do some cleanup. Jump to checksum.
|
||||
LDA.w #$55AA : STA.l $7003E1
|
||||
STZ $00
|
||||
STZ $01
|
||||
LDX.b $00
|
||||
LDY.w #$0000
|
||||
TYA
|
||||
|
||||
JML.l InitializeSaveFile_checksum_done
|
||||
JML.l InitializeSaveFile_build_checksum
|
||||
;--------------------------------------------------------------------------------
|
||||
!RNG_ITEM_LOCK_IN = "$7F5090"
|
||||
OnFileLoad:
|
||||
REP #$10 ; set 16 bit index registers
|
||||
JSL.l EnableForceBlank ; what we wrote over
|
||||
|
||||
LDA.b #$07 : STA.w BG34NBA ; Restore screen 3 to normal tile area
|
||||
LDA.b #$07 : STA $210C ; Restore screen 3 to normal tile area
|
||||
|
||||
LDA.l FileMarker : BNE +
|
||||
JSL.l OnNewFile
|
||||
LDA.b #$FF : STA.l FileMarker
|
||||
+
|
||||
LDA.w DeathReloadFlag : BNE + ; don't adjust the worlds for "continue" or "save-continue"
|
||||
LDA.l MosaicLevel : BNE + ; don't adjust worlds if mosiac is enabled (Read: mirroring in dungeon)
|
||||
LDA.w $010A : BNE + ; don't adjust the worlds for "continue" or "save-continue"
|
||||
LDA.l $7EC011 : BNE + ; don't adjust worlds if mosiac is enabled (Read: mirroring in dungeon)
|
||||
JSL.l DoWorldFix
|
||||
+
|
||||
JSL.l MasterSwordFollowerClear
|
||||
LDA.b #$FF : STA.l RNGLockIn ; reset rng item lock-in
|
||||
LDA.b #$FF : STA !RNG_ITEM_LOCK_IN ; reset rng item lock-in
|
||||
LDA.b #$00 : STA $7F5001 ; mark fake flipper softlock as impossible
|
||||
LDA.l GenericKeys : BEQ +
|
||||
LDA.l CurrentGenericKeys : STA.l CurrentSmallKeys ; copy generic keys to key counter
|
||||
+
|
||||
@@ -169,128 +151,106 @@ OnFileLoad:
|
||||
SEP #$10 ; restore 8 bit index registers
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
!RNG_ITEM_LOCK_IN = "$7F5090"
|
||||
OnNewFile:
|
||||
PHX : PHP
|
||||
; reset some values on new file that are otherwise only reset on hard reset
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
STZ.w AncillaSearch
|
||||
STZ.w LayerAdjustment ; EG
|
||||
STZ.w ArcVariable : STZ.w ArcVariable+1
|
||||
STZ.w TreePullKills
|
||||
STZ.w TreePullHits
|
||||
STZ.w PrizePackIndexes
|
||||
STZ.w PrizePackIndexes+1
|
||||
STZ.w PrizePackIndexes+2
|
||||
STZ.w PrizePackIndexes+3
|
||||
STZ.w PrizePackIndexes+4
|
||||
STZ.w PrizePackIndexes+5
|
||||
STZ.w PrizePackIndexes+6
|
||||
LDA.b #$00 : STA.l MosaicLevel
|
||||
JSL InitRNGPointerTable
|
||||
STZ $03C4 ; ancilla slot index
|
||||
STZ $047A ; EG
|
||||
STZ $0B08 : STZ $0B09 ; arc variable
|
||||
STZ $0CFB ; enemies killed (pull trees)
|
||||
STZ $0CFC ; times taken damage (pull trees)
|
||||
STZ $0FC7 : STZ $0FC8 : STZ $0FC9 : STZ $0FCA : STZ $0FCB : STZ $0FCC : STZ $0FCD ; prize packs
|
||||
LDA #$00 : STA $7EC011 ; mosaic
|
||||
JSL InitRNGPointerTable ; boss RNG
|
||||
PLP : PLX
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnInitFileSelect:
|
||||
LDA.b #$51 : STA.w $0AA2 ;<-- Line missing from JP1.0, needed to ensure "extra" copy of naming screen graphics are loaded.
|
||||
; LDA.b #$10 : STA $BC ; init sprite pointer - does nothing unless spriteswap.asm is included
|
||||
; JSL.l SpriteSwap_SetSprite
|
||||
LDA.b #$51 : STA $0AA2 ;<-- Line missing from JP1.0, needed to ensure "extra" copy of naming screen graphics are loaded.
|
||||
JSL.l EnableForceBlank
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLinkDamaged:
|
||||
JSL.l IncrementDamageTakenCounter_Arb
|
||||
;JSL.l FlipperKill
|
||||
JML.l OHKOTimer
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
;OnEnterWater:
|
||||
; JSL.l UnequipCapeQuiet ; what we wrote over
|
||||
;RTL
|
||||
OnEnterWater:
|
||||
JSL.l RegisterWaterEntryScreen
|
||||
|
||||
JSL.l MysteryWaterFunction
|
||||
LDX.b #$04
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLinkDamagedFromPit:
|
||||
JSL.l OHKOTimer
|
||||
|
||||
LDA.l AllowAccidentalMajorGlitch
|
||||
BEQ ++
|
||||
-- LDA.b #$14 : STA.b GameSubMode ; thing we wrote over
|
||||
-- LDA.b #$14 : STA $11 ; thing we wrote over
|
||||
|
||||
RTL
|
||||
|
||||
++ LDA.b GameMode : CMP.b #$12 : BNE --
|
||||
++ LDA.b $10 : CMP.b #$12 : BNE --
|
||||
|
||||
STZ.b GameSubMode
|
||||
STZ.b $11
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLinkDamagedFromPitOutdoors:
|
||||
JML.l OHKOTimer ; make sure this is last
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
!RNG_ITEM_LOCK_IN = "$7F5090"
|
||||
OnOWTransition:
|
||||
JSL.l FloodGateReset
|
||||
JSL.l StatTransitionCounter
|
||||
PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
PLP
|
||||
JSL.l FloodGateReset
|
||||
JSL.l FlipperFlag
|
||||
JSL.l StatTransitionCounter
|
||||
PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$FF : STA !RNG_ITEM_LOCK_IN ; clear lock-in
|
||||
PLP
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
!DARK_DUCK_TEMP = "$7F509C"
|
||||
OnLoadDuckMap:
|
||||
LDA.l DuckMapFlag
|
||||
LDA !DARK_DUCK_TEMP
|
||||
BNE +
|
||||
INC : STA.l DuckMapFlag
|
||||
JSL OverworldMap_InitGfx : DEC.w SubModuleInterface
|
||||
INC : STA !DARK_DUCK_TEMP
|
||||
JSL OverworldMap_InitGfx : DEC $0200
|
||||
|
||||
RTL
|
||||
+
|
||||
LDA.b #$00 : STA.l DuckMapFlag
|
||||
LDA.b #$00 : STA !DARK_DUCK_TEMP
|
||||
JML OverworldMap_DarkWorldTilemap
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
PreItemGet:
|
||||
LDA.b #$01 : STA.l BusyItem ; mark item as busy
|
||||
LDA.b #$01 : STA !ITEM_BUSY ; mark item as busy
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
PostItemGet:
|
||||
STZ.w ShopPurchaseFlag
|
||||
LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ +
|
||||
LDX.w CurrentSpriteSlot
|
||||
STZ.w SpriteMetaData,X
|
||||
+
|
||||
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
PostItemAnimation:
|
||||
PHB
|
||||
LDA.b #$00 : STA.l BusyItem ; mark item as finished
|
||||
LDA.l TextBoxDefer : BEQ +
|
||||
STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer
|
||||
JSL.l Main_ShowTextMessage_Alt
|
||||
LDA.b #$00 : STA.l TextBoxDefer
|
||||
+
|
||||
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE +
|
||||
LDA.b LinkDirection : BEQ +
|
||||
JSL.l IncrementChestTurnCounter
|
||||
+
|
||||
REP #$20
|
||||
PEA.w $7E00
|
||||
PLB : PLB
|
||||
LDA.w TransparencyFlag : BNE .SP05
|
||||
LDA.l PalettesCustom_off_black+$00 : STA.w PaletteBuffer+$0170 : STA.w PaletteBufferAux+$0170
|
||||
LDA.l PalettesCustom_off_black+$02 : STA.w PaletteBuffer+$0172 : STA.w PaletteBufferAux+$0172
|
||||
STA.w PaletteBuffer+$0174 : STA.w PaletteBufferAux+$0174
|
||||
STA.w PaletteBuffer+$0176 : STA.w PaletteBufferAux+$0176
|
||||
STA.w PaletteBuffer+$0178 : STA.w PaletteBufferAux+$0178
|
||||
STA.w PaletteBuffer+$017A : STA.w PaletteBufferAux+$017A
|
||||
STA.w PaletteBuffer+$017C : STA.w PaletteBufferAux+$017C
|
||||
STA.w PaletteBuffer+$017E : STA.w PaletteBufferAux+$017E
|
||||
BRA .done
|
||||
.SP05
|
||||
LDA.l PalettesCustom_off_black+$00 : STA.w PaletteBuffer+$01B0 : STA.w PaletteBufferAux+$01B0
|
||||
LDA.l PalettesCustom_off_black+$02 : STA.w PaletteBuffer+$01B2 : STA.w PaletteBufferAux+$01B2
|
||||
STA.w PaletteBuffer+$01B4 : STA.w PaletteBufferAux+$01B4
|
||||
STA.w PaletteBuffer+$01B6 : STA.w PaletteBufferAux+$01B6
|
||||
STA.w PaletteBuffer+$01B8 : STA.w PaletteBufferAux+$01B8
|
||||
STA.w PaletteBuffer+$01BA : STA.w PaletteBufferAux+$01BA
|
||||
STA.w PaletteBuffer+$01BC : STA.w PaletteBufferAux+$01BC
|
||||
STA.w PaletteBuffer+$01BE : STA.w PaletteBufferAux+$01BE
|
||||
.done
|
||||
INC.b NMICGRAM
|
||||
SEP #$20
|
||||
LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished
|
||||
|
||||
STZ.w ItemReceiptMethod : LDA.w AncillaGet, X ; thing we wrote over to get here
|
||||
PLB
|
||||
LDA $7F509F : BEQ +
|
||||
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
|
||||
JSL.l Main_ShowTextMessage_Alt
|
||||
LDA.b #$00 : STA $7F509F
|
||||
+
|
||||
|
||||
LDA.w $02E9 : CMP.b #$01 : BNE +
|
||||
LDA.b $2F : BEQ +
|
||||
JSL.l IncrementChestTurnCounter
|
||||
+
|
||||
|
||||
STZ $02E9 : LDA $0C5E, X ; thing we wrote over to get here
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
org $A98000 ; 0x148000
|
||||
org $298000 ; 0x148000
|
||||
Ext_OnFileCreate: ;x
|
||||
RTL : RTL : RTL : RTL : RTL
|
||||
Ext_OnFileLoad: ;x immediately after load
|
||||
|
||||
173
failure.asm
173
failure.asm
@@ -1,24 +1,9 @@
|
||||
CheckZSNES:
|
||||
SEP #$28
|
||||
LDA.b #$FF
|
||||
CLC
|
||||
ADC.b #$FF
|
||||
CMP.b #$64
|
||||
REP #$28
|
||||
BEQ .zsnes
|
||||
LDA.w #$01FF : TCS ; thing we wrote over - initialize stack
|
||||
JML ReturnCheckZSNES
|
||||
.zsnes
|
||||
JML DontUseZSNES
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
pushtable
|
||||
|
||||
table "data/bsodencode.txt"
|
||||
table "bsodencode.txt"
|
||||
|
||||
; Uncomment this to force a crash to test message
|
||||
; pushpc : org $008132 : db 0 : pullpc
|
||||
;pushpc : org $008132 : db 0 : pullpc
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
@@ -26,29 +11,29 @@ DontUseZSNES:
|
||||
SEP #$35 ; sets carry and I flag too
|
||||
|
||||
LDA.b #$00
|
||||
STA.l NMITIMEN ; disable NMI and IRQ
|
||||
STA.l HDMAEN ; disable HDMA
|
||||
STA.l $4200 ; disable NMI and IRQ
|
||||
STA.l $420C ; disable HDMA
|
||||
|
||||
ROR ; A = 0x80 from carry
|
||||
STA.l INIDISP
|
||||
STA.l VMAIN
|
||||
STA.l $2100
|
||||
STA.l $2115
|
||||
|
||||
; Empty VRAM
|
||||
LDA.b #AllZeros>>16 : STA.l A1B0
|
||||
LDA.b #AllZeros>>16 : STA.l $4304
|
||||
|
||||
REP #$20
|
||||
|
||||
LDA.w #AllZeros
|
||||
STA.l A1T0L
|
||||
STA.l $4302
|
||||
|
||||
LDA.w #$1809
|
||||
STA.l DMAP0
|
||||
STA.l $4300
|
||||
|
||||
LDA.w #$0000
|
||||
STA.l DAS0L
|
||||
STA.l $4305
|
||||
|
||||
LDA.w #$0001
|
||||
STA.l MDMAEN
|
||||
STA.l $420B
|
||||
|
||||
JSR ConfigurePPUForFailureReport
|
||||
JSR ConfigureBSODVWF
|
||||
@@ -58,7 +43,7 @@ DontUseZSNES:
|
||||
JSR DrawVWFMessage
|
||||
|
||||
LDA.w #$0F0F
|
||||
STA.w INIDISP
|
||||
STA.w $2100
|
||||
|
||||
-- BRA --
|
||||
|
||||
@@ -92,29 +77,29 @@ Crashed:
|
||||
SEP #$35 ; sets carry and I flag too
|
||||
|
||||
LDA.b #$00
|
||||
STA.l NMITIMEN ; disable NMI and IRQ
|
||||
STA.l HDMAEN ; disable HDMA
|
||||
STA.l $4200 ; disable NMI and IRQ
|
||||
STA.l $420C ; disable HDMA
|
||||
|
||||
ROR ; A = 0x80 from carry
|
||||
STA.l INIDISP
|
||||
STA.l VMAIN
|
||||
STA.l $2100
|
||||
STA.l $2115
|
||||
|
||||
; Empty VRAM
|
||||
LDA.b #AllZeros>>16 : STA.l A1B0
|
||||
LDA.b #AllZeros>>16 : STA.l $4304
|
||||
|
||||
REP #$38
|
||||
|
||||
LDA.w #AllZeros
|
||||
STA.l A1T0L
|
||||
STA.l $4302
|
||||
|
||||
LDA.w #$1809
|
||||
STA.l DMAP0
|
||||
STA.l $4300
|
||||
|
||||
LDA.w #$0000
|
||||
STA.l DAS0L
|
||||
STA.l $4305
|
||||
|
||||
LDA.w #$0001
|
||||
STA.l MDMAEN
|
||||
STA.l $420B
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
@@ -128,32 +113,32 @@ Crashed:
|
||||
|
||||
; stack pointer
|
||||
LDA.w #$0C38>>1
|
||||
STA.b VMADDL
|
||||
STA.b $2116
|
||||
|
||||
TSC
|
||||
XBA
|
||||
AND.w #$00FF
|
||||
ORA.w #$0100
|
||||
STA.b VMDATAL
|
||||
STA.b $2118
|
||||
|
||||
TSC
|
||||
AND.w #$00FF
|
||||
ORA.w #$0100
|
||||
STA.l VMDATAL
|
||||
STA.l $2118
|
||||
|
||||
; game module
|
||||
LDA.w #$0C78>>1
|
||||
STA.b VMADDL
|
||||
STA.b $2116
|
||||
|
||||
LDA.l GameMode
|
||||
LDA.l $10
|
||||
AND.w #$00FF
|
||||
ORA.w #$0100
|
||||
STA.b VMDATAL
|
||||
STA.b $2118
|
||||
|
||||
LDA.l GameSubMode
|
||||
LDA.l $11
|
||||
AND.w #$00FF
|
||||
ORA.w #$0100
|
||||
STA.b VMDATAL
|
||||
STA.b $2118
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -191,7 +176,7 @@ Crashed:
|
||||
|
||||
.next_row
|
||||
STA.l $7F0004
|
||||
STA.b VMADDL
|
||||
STA.b $2116
|
||||
|
||||
LDY.w #20
|
||||
|
||||
@@ -209,7 +194,7 @@ Crashed:
|
||||
AND.w #$01FF
|
||||
|
||||
.in_stack
|
||||
STA.b VMDATAL
|
||||
STA.b $2118
|
||||
|
||||
DEX
|
||||
TXA
|
||||
@@ -250,10 +235,16 @@ Crashed:
|
||||
JSR DrawVWFMessage
|
||||
|
||||
LDA.w #$0F0F
|
||||
STA.w INIDISP
|
||||
STA.w $2100
|
||||
|
||||
-- BRA --
|
||||
|
||||
; LDA.w #$0000
|
||||
; TCD
|
||||
;
|
||||
; TSC
|
||||
|
||||
|
||||
BSODMessage:
|
||||
db "A fatal error has occurred and resulted in an", $80
|
||||
db "unrecoverable crash. ?", $80
|
||||
@@ -269,11 +260,11 @@ BSODMessage:
|
||||
;===================================================================================================
|
||||
|
||||
DrawVWFMessage:
|
||||
STA.b Scrap06
|
||||
STA.b $06
|
||||
|
||||
.next
|
||||
LDA.b (Scrap06)
|
||||
INC.b Scrap06
|
||||
LDA.b ($06)
|
||||
INC.b $06
|
||||
AND.w #$00FF
|
||||
CMP.w #$0080
|
||||
BEQ .done_row
|
||||
@@ -293,26 +284,26 @@ DrawVWFMessage:
|
||||
ASL
|
||||
TAX
|
||||
LDA.w .row_offset,X
|
||||
STA.w VMADDL
|
||||
STA.w $2116
|
||||
|
||||
INC.b VWFR
|
||||
|
||||
LDA.w #$1800
|
||||
STA.w DMAP0
|
||||
STA.w $4300
|
||||
|
||||
LDA.w #20*16
|
||||
STA.w DAS0L
|
||||
STA.w $4305
|
||||
|
||||
LDA.w #$1000
|
||||
STA.w A1T0L
|
||||
STA.w $4302
|
||||
|
||||
SEP #$20
|
||||
|
||||
STZ.w VMAIN
|
||||
STZ.w A1B0
|
||||
STZ.w $2115
|
||||
STZ.w $4304
|
||||
|
||||
LDA.b #$01
|
||||
STA.w MDMAEN
|
||||
STA.w $420B
|
||||
|
||||
REP #$20
|
||||
|
||||
@@ -356,7 +347,7 @@ DrawFailureVWFChar:
|
||||
ASL
|
||||
ASL
|
||||
ADC.w #BSODFontGFX
|
||||
STA.b Scrap08
|
||||
STA.b $08
|
||||
|
||||
LDA.b VWFP
|
||||
AND.w #$FFF8
|
||||
@@ -411,23 +402,23 @@ LoadBSODHexFont:
|
||||
REP #$20
|
||||
|
||||
LDA.w #BSODHex
|
||||
STA.w A1T0L
|
||||
STA.w $4302
|
||||
|
||||
LDA.w #$1801
|
||||
STA.w DMAP0
|
||||
STA.w $4300
|
||||
|
||||
LDA.w #$1000
|
||||
STA.w DAS0L
|
||||
STA.w $4305
|
||||
|
||||
LDA.w #$2800
|
||||
STA.w VMADDL
|
||||
STA.w $2116
|
||||
|
||||
SEP #$20
|
||||
LDA.b #BSODHex>>16
|
||||
STA.w A1B0
|
||||
STA.w $4304
|
||||
|
||||
LDA.b #$01
|
||||
STA.w MDMAEN
|
||||
STA.w $420B
|
||||
|
||||
REP #$30
|
||||
|
||||
@@ -446,21 +437,21 @@ ConfigureBSODVWF:
|
||||
LDX.b #$FF
|
||||
LDY.b #$7F
|
||||
|
||||
STZ.b CGADD
|
||||
STZ.b CGDATA : STZ.b CGDATA
|
||||
STZ.b $2121
|
||||
STZ.b $2122 : STZ.b $2122
|
||||
|
||||
STX.b CGDATA : STY.b CGDATA
|
||||
STX.b $2122 : STY.b $2122
|
||||
|
||||
LDA.b #$05
|
||||
STA.b CGADD
|
||||
STA.b $2121
|
||||
|
||||
LDA.b #$11 : STA.b CGDATA : STY.b CGDATA
|
||||
LDA.b #$11 : STA.b $2122 : STY.b $2122
|
||||
|
||||
LDA.b #$21 : STA.b CGADD
|
||||
STX.b CGDATA : STY.b CGDATA
|
||||
LDA.b #$21 : STA.b $2121
|
||||
STX.b $2122 : STY.b $2122
|
||||
|
||||
LDA.b #$25 : STA.b CGADD
|
||||
LDA.b #$11 : STA.b CGDATA : STY.b CGDATA
|
||||
LDA.b #$25 : STA.b $2121
|
||||
LDA.b #$11 : STA.b $2122 : STY.b $2122
|
||||
|
||||
REP #$30
|
||||
|
||||
@@ -482,14 +473,14 @@ ConfigureBSODVWF:
|
||||
|
||||
.start
|
||||
STA.w $20
|
||||
STA.b VMADDL
|
||||
STA.b $2116
|
||||
|
||||
PLA
|
||||
|
||||
LDY.w #30
|
||||
|
||||
.next_char
|
||||
STA.b VMDATAL
|
||||
STA.b $2118
|
||||
INC
|
||||
DEY
|
||||
BNE .next_char
|
||||
@@ -525,39 +516,39 @@ ConfigurePPUForFailureReport:
|
||||
PHK
|
||||
PLB
|
||||
|
||||
STZ.w BGMODE ; BG mode 0
|
||||
STZ.w MOSAIC ; no mosaic
|
||||
STZ.w BG1SC ; BG1 tilemap to $0000
|
||||
STZ.w TS
|
||||
STZ.w $2105 ; BG mode 0
|
||||
STZ.w $2106 ; no mosaic
|
||||
STZ.w $2107 ; BG1 tilemap to $0000
|
||||
STZ.w $212D
|
||||
|
||||
STZ.w BG1HOFS : STZ.w BG1HOFS
|
||||
STZ.w BG1VOFS : STZ.w BG1VOFS
|
||||
STZ.w BG2HOFS : STZ.w BG2HOFS
|
||||
STZ.w BG2VOFS : STZ.w BG2VOFS
|
||||
STZ.w $210D : STZ.w $210D
|
||||
STZ.w $210E : STZ.w $210E
|
||||
STZ.w $210F : STZ.w $210F
|
||||
STZ.w $2110 : STZ.w $2110
|
||||
|
||||
|
||||
STZ.w W12SEL
|
||||
STZ.w CGADSUB
|
||||
STZ.w SETINI
|
||||
STZ.w $2123
|
||||
STZ.w $2131
|
||||
STZ.w $2133
|
||||
|
||||
LDA.b #$04
|
||||
STA.w BG2SC ; BG1 tilemap to $0800
|
||||
STA.w $2108 ; BG1 tilemap to $0800
|
||||
|
||||
LDA.b #$21
|
||||
STA.w BG12NBA
|
||||
STA.w $210B
|
||||
|
||||
LDA.b #$03
|
||||
STA.w TM
|
||||
STA.w $212C
|
||||
|
||||
RTS
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
BSODHex:
|
||||
incbin "data/bsodhex.2bpp"
|
||||
incbin "bsodhex.2bpp"
|
||||
|
||||
BSODFontGFX:
|
||||
incbin "data/bsodfont.1bpp"
|
||||
incbin "bsodfont.1bpp"
|
||||
|
||||
BSODCharWidths:
|
||||
; [space]
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
; Fairy Changes & Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
RefillHealthPlusMagic:
|
||||
LDA.l BigFairyHealth : STA.l HeartsFiller
|
||||
LDA BigFairyHealth : STA HeartsFiller
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
RefillHealthPlusMagic8bit:
|
||||
LDA.l BigFairyHealth : STA.l HeartsFiller
|
||||
LDA.l BigFairyMagic : STA.l MagicFiller
|
||||
LDA BigFairyHealth : STA HeartsFiller
|
||||
LDA BigFairyMagic : STA MagicFiller
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckFullHealth:
|
||||
LDA.l BigFairyHealth : BEQ +
|
||||
LDA.l CurrentHealth : CMP.l MaximumHealth : BNE .player_hp_not_full_yet
|
||||
LDA BigFairyHealth : BEQ +
|
||||
LDA CurrentHealth : CMP MaximumHealth : BNE .player_hp_not_full_yet
|
||||
+
|
||||
LDA.l BigFairyMagic : BEQ +
|
||||
LDA.l CurrentMagic : CMP.b #$80 : BNE .player_mp_not_full_yet
|
||||
LDA BigFairyMagic : BEQ +
|
||||
LDA CurrentMagic : CMP.b #$80 : BNE .player_mp_not_full_yet
|
||||
+
|
||||
LDA.b #$00
|
||||
RTL
|
||||
@@ -30,56 +30,57 @@ FairyPond_Init:
|
||||
JML.l Sprite_ShowMessageFromPlayerContact
|
||||
+
|
||||
PHY : JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC +
|
||||
LDA.l BottleContentsOne : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsTwo : CMP.b #$02 : BNE ++ : LDA.b #$1D : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsOne : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsTwo : CMP.b #$02 : BNE ++ : LDA.b #$1D : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++
|
||||
.noInventory
|
||||
LDA.b #$0A : STA.w SpriteActivity, X
|
||||
LDA.b #$0A : STA $0D80, X
|
||||
LDA.b #$51
|
||||
LDY.b #$01
|
||||
JSL.l Sprite_ShowMessageFromPlayerContact
|
||||
JMP .cleanup
|
||||
|
||||
.emptyBottle
|
||||
LDA.b #$02 : STA.w SpriteActivity, X
|
||||
STZ.b LinkDirection
|
||||
LDA.b #$01 : STA.w CutsceneFlag
|
||||
PLA : STA.w MessageCursor
|
||||
LDA.b #$02 : STA $0D80, X
|
||||
;JSL Player_ResetState ; If we continue to have issues, add this in too. (After determining the address for it)
|
||||
STZ $2F
|
||||
LDA.b #$01 : STA $02E4
|
||||
PLA : STA $1CE8
|
||||
.cleanup
|
||||
STZ.w SpriteDirectionTable, X ; Clear the sprite's item-given variable
|
||||
STZ $0EB0, X ; Clear the sprite's item-given variable
|
||||
CLC ; skip rest of original function
|
||||
+ : PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
HappinessPond_Check:
|
||||
LDA.b RoomIndex : CMP.b #$15 ;what we wrote over
|
||||
LDA $A0 : CMP.b #$15 ;what we wrote over
|
||||
BNE .done
|
||||
PHP
|
||||
|
||||
LDA.b #$72
|
||||
JSL Sprite_SpawnDynamically
|
||||
|
||||
LDA.w SpriteCoordCacheX : STA.w SpritePosXLow, Y
|
||||
LDA.w SpriteCoordCacheX+1 : STA.w SpritePosXHigh, Y
|
||||
LDA $0FD8 : STA $0D10, Y
|
||||
LDA $0FD9 : STA $0D30, Y
|
||||
|
||||
LDA.w SpriteCoordCacheY : !SUB.b #$40 : STA.w SpritePosYLow, Y
|
||||
LDA.w SpriteCoordCacheY+1 : SBC.b #$00 : STA.w SpritePosYHigh, Y
|
||||
LDA $0FDA : !SUB.b #$40 : STA $0D00, Y
|
||||
LDA $0FDB : SBC.b #$00 : STA $0D20, Y
|
||||
|
||||
LDA.b #$01 : STA.w SpriteAuxTable, Y
|
||||
LDA.b #$01 : STA $0DA0, Y
|
||||
|
||||
LDA.b #$BB
|
||||
JSL Sprite_SpawnDynamically
|
||||
|
||||
LDA.b #$08 : STA.w SpriteAITable, Y ; ensure we run prep for the shopkeeper
|
||||
LDA.b #$08 : STA $0DD0, Y ; ensure we run prep for the shopkeeper
|
||||
|
||||
LDA.w SpriteCoordCacheX : STA.w SpritePosXLow, Y
|
||||
LDA.w SpriteCoordCacheX+1 : STA.w SpritePosXHigh, Y
|
||||
LDA $0FD8 : STA $0D10, Y
|
||||
LDA $0FD9 : STA $0D30, Y
|
||||
|
||||
LDA.w SpriteCoordCacheY : !SUB.b #$20 : STA.w SpritePosYLow, Y
|
||||
LDA.w SpriteCoordCacheY+1 : SBC.b #$00 : STA.w SpritePosYHigh, Y
|
||||
LDA $0FDA : !SUB.b #$20 : STA $0D00, Y
|
||||
LDA $0FDB : SBC.b #$00 : STA $0D20, Y
|
||||
|
||||
STZ.w SpriteAITable, X ; self terminate
|
||||
STZ $0DD0, X ; self terminate
|
||||
|
||||
PLP
|
||||
.done
|
||||
|
||||
@@ -1,51 +1,21 @@
|
||||
FastCreditsActive = $50
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
|
||||
FlagFastCredits:
|
||||
LDA.b #$40
|
||||
TRB.b FastCreditsActive
|
||||
|
||||
AND.b Joy1B_All
|
||||
TSB.b FastCreditsActive
|
||||
|
||||
LDA.b #$20
|
||||
AND.b Joy1A_New
|
||||
EOR.b FastCreditsActive
|
||||
STA.b FastCreditsActive
|
||||
|
||||
LDA.b FastCreditsActive
|
||||
AND.b #$60
|
||||
BEQ .slow
|
||||
|
||||
LDA.b #$01
|
||||
TSB.b FastCreditsActive
|
||||
|
||||
.slow
|
||||
LDA.b $11
|
||||
ASL
|
||||
TAX
|
||||
|
||||
RTL
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
FastCreditsCutsceneTimer:
|
||||
LDA.b ScrapBufferBD+$0B
|
||||
INC
|
||||
BIT.b $F2-1 : BVC .slow
|
||||
|
||||
JSR IsFastCredits
|
||||
BCC .slow
|
||||
|
||||
INC
|
||||
INC
|
||||
INC
|
||||
LDA.w #$0001 : STA.b $50
|
||||
|
||||
LDA.b $C8
|
||||
CLC
|
||||
ADC.w #$0004
|
||||
AND.w #$FFFE
|
||||
STA.b $C8
|
||||
SEP #$20
|
||||
RTL
|
||||
|
||||
|
||||
.slow
|
||||
STA.b ScrapBufferBD+$0B
|
||||
INC.b $C8
|
||||
|
||||
SEP #$20
|
||||
RTL
|
||||
@@ -79,20 +49,18 @@ FastCreditsCutsceneScrollY:
|
||||
|
||||
FastCreditsCutsceneScroll:
|
||||
LDA.w $00E2,Y
|
||||
CMP.l $8EC308,X ; compare to target
|
||||
CMP.l $0EC308,X ; compare to target
|
||||
|
||||
ROL.b Scrap00 ; put carry in here
|
||||
LDA.l $8EC348,X ; get movement
|
||||
ROL.b $00 ; put carry in here
|
||||
LDA.l $0EC348,X ; get movement
|
||||
BPL ++ ; if positive, leave saved carry alone
|
||||
INC.b Scrap00 ; otherwise, flip it
|
||||
++ ROR.b Scrap00 ; recover carry
|
||||
INC.b $00 ; otherwise, flip it
|
||||
++ ROR.b $00 ; recover carry
|
||||
|
||||
BCC ++ ; scroll if carry not set
|
||||
|
||||
LDA.w #$0000
|
||||
|
||||
++ JSR IsFastCredits
|
||||
BCC .slow
|
||||
++ BIT.b $F2-1 : BVC .slow ; check for X held
|
||||
|
||||
AND.w #$FFFF ; get sign of A
|
||||
BPL .positive
|
||||
@@ -109,14 +77,21 @@ FastCreditsCutsceneScroll:
|
||||
ASL
|
||||
ASL
|
||||
|
||||
|
||||
|
||||
.slow
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
FastCreditsCutsceneUnderworldX:
|
||||
JSR FastCreditsCutsceneScrollX
|
||||
CLC
|
||||
ADC.b BG2H
|
||||
STA.b BG2H
|
||||
ADC.b $E2
|
||||
STA.b $E2
|
||||
|
||||
RTL
|
||||
|
||||
@@ -124,34 +99,26 @@ FastCreditsCutsceneUnderworldX:
|
||||
FastCreditsCutsceneUnderworldY:
|
||||
JSR FastCreditsCutsceneScrollY
|
||||
CLC
|
||||
ADC.b BG2V
|
||||
STA.b BG2V
|
||||
ADC.b $E8
|
||||
STA.b $E8
|
||||
|
||||
RTL
|
||||
|
||||
|
||||
FastTextScroll:
|
||||
LDA.b FrameCounter
|
||||
SEP #$10
|
||||
JSR IsFastCredits
|
||||
BCC .slow
|
||||
LDA.b $1A
|
||||
BIT.b $F2-1 : BVC .slow
|
||||
|
||||
AND.w #$0000
|
||||
REP #$10
|
||||
RTL
|
||||
|
||||
.slow
|
||||
AND.w #$0003
|
||||
REP #$10
|
||||
RTL
|
||||
|
||||
DumbFlagForMSU:
|
||||
STA.l CurrentWorld
|
||||
STZ.b FastCreditsActive
|
||||
STZ.b $50
|
||||
RTL
|
||||
|
||||
IsFastCredits:
|
||||
LDY.b FastCreditsActive
|
||||
CPY.b #$20
|
||||
RTS
|
||||
|
||||
|
||||
6591
fastrom.asm
6591
fastrom.asm
File diff suppressed because it is too large
Load Diff
850
fileselect.asm
850
fileselect.asm
File diff suppressed because it is too large
Load Diff
BIN
data/fileselectgfx.2bpp → fileselect.chr.gfx
Normal file → Executable file
BIN
data/fileselectgfx.2bpp → fileselect.chr.gfx
Normal file → Executable file
Binary file not shown.
8
firebarlayer.asm
Normal file
8
firebarlayer.asm
Normal file
@@ -0,0 +1,8 @@
|
||||
NewFireBarDamage:
|
||||
{
|
||||
LDA $00EE : CMP $0F20, X : BNE .NotSameLayer
|
||||
JSL Sprite_AttemptDamageToPlayerPlusRecoilLong
|
||||
RTL
|
||||
.NotSameLayer
|
||||
RTL
|
||||
}
|
||||
104
flipperkill.asm
104
flipperkill.asm
@@ -1,14 +1,78 @@
|
||||
;================================================================================
|
||||
; Fake Flippers Softlock Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
; Written over and used by OnEnterWater hook.
|
||||
UnequipCapeQuiet:
|
||||
LDA.b #$20 : STA.w PoofTimer
|
||||
STZ.w NoDamage
|
||||
STZ.b CapeOn
|
||||
STZ.w LinkZap
|
||||
FlipperKill:
|
||||
PHP
|
||||
LDA $5D : CMP #$04 : BNE .done ; skip if we're not swimming
|
||||
LDA FlippersEquipment : BNE .done ; skip if we have the flippers
|
||||
LDA $7F5001 : BEQ .done ; skip if we're not marked in danger for softlock
|
||||
LDA $8A : CMP $7F5098 : BEQ .done ; skip if we're on the same screen we entered the water on
|
||||
;JSL.l KillFairies ; take away fairies
|
||||
LDA IgnoreFaeries : ORA.b #$04 : STA IgnoreFaeries
|
||||
LDA.b #$00 : STA CurrentHealth ; kill link
|
||||
LDA.b #$00 : STA $7F5001 ; mark fake flipper softlock as impossible
|
||||
.done
|
||||
PLP
|
||||
LDA CurrentHealth ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
IgnoreFairyCheck:
|
||||
LDX.b #$00 ; thing we wrote over
|
||||
LDA IgnoreFaeries : BIT.b #$04 : BEQ .normal
|
||||
|
||||
AND.b #$FB : STA IgnoreFaeries ; clear ignore fairy flag
|
||||
LDA.b #$F0 ; set check to invalid entry
|
||||
RTL
|
||||
.normal
|
||||
LDA.b #$06 ; set check to fairy
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
;KillFairies:
|
||||
; LDA BottleContentsOne : CMP #$06 : BNE +
|
||||
; LDA #$02 : STA BottleContentsOne
|
||||
; + LDA BottleContentsTwo : CMP #$06 : BNE +
|
||||
; LDA #$02 : STA BottleContentsTwo
|
||||
; + LDA BottleContentsThree : CMP #$06 : BNE +
|
||||
; LDA #$02 : STA BottleContentsThree
|
||||
; + LDA BottleContentsFour : CMP #$06 : BNE +
|
||||
; LDA #$02 : STA BottleContentsFour
|
||||
; +
|
||||
;RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FlipperReset:
|
||||
JSL $0998E8 ; AddTransitionSplash
|
||||
LDA #$00 : STA $7F5001 ; mark fake flipper softlock as impossible
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FlipperFlag:
|
||||
LDA $5D : CMP #$04 : BNE .done ; skip if we're not swimming
|
||||
LDA FlippersEquipment : BNE .safe ; skip if we have the flippers
|
||||
LDA #$01 : STA $7F5001 ; mark fake flipper softlock as possible
|
||||
BRA .done
|
||||
.safe
|
||||
LDA #$00 : STA $7F5001 ; mark fake flipper softlock as impossible
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
RegisterWaterEntryScreen:
|
||||
PHA
|
||||
LDA $8A : STA $7F5098 ; store ow index
|
||||
PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MysteryWaterFunction: ; *$3AE54 ALTERNATE ENTRY POINT
|
||||
LDA.b #$20 : STA $02E2
|
||||
STZ $037B
|
||||
STZ $55
|
||||
STZ $0360
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
;===================================================================================================
|
||||
; More elegant solution
|
||||
;===================================================================================================
|
||||
|
||||
protectff:
|
||||
LDA.l AllowAccidentalMajorGlitch
|
||||
@@ -19,16 +83,16 @@ protectff:
|
||||
.yes_protect
|
||||
REP #$30
|
||||
|
||||
LDA.b LinkPosY
|
||||
LDA.b $20
|
||||
AND.w #$1E00
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
STA.b Scrap06
|
||||
STA.b $06
|
||||
|
||||
LDA.b LinkPosX
|
||||
LDA.b $22
|
||||
AND.w #$1E00
|
||||
ORA.b Scrap06
|
||||
ORA.b $06
|
||||
|
||||
XBA
|
||||
LSR
|
||||
@@ -39,26 +103,26 @@ protectff:
|
||||
; Remove dark world bit
|
||||
; in game table that converts coordinates to actual screen ID
|
||||
; special case for other areas
|
||||
LDA.b OverworldIndex
|
||||
LDA.b $8A
|
||||
BMI .special_overworld
|
||||
|
||||
AND.b #$3F
|
||||
CMP.l $82A4E3,X
|
||||
CMP.l $02A4E3,X
|
||||
BEQ ++
|
||||
|
||||
.protect
|
||||
LDA.b #$15
|
||||
STA.b LinkState
|
||||
STA.b $5D
|
||||
|
||||
STZ.b LinkAnimationStep
|
||||
STZ.b LinkWalkDirection
|
||||
STZ.b $2E
|
||||
STZ.b $67
|
||||
|
||||
LDA.b #$02
|
||||
STA.b LinkDirection
|
||||
STA.b $2F
|
||||
|
||||
STZ.w MedallionFlag
|
||||
STZ.w CutsceneFlag
|
||||
STZ.w NoMenu
|
||||
STZ.w $0112
|
||||
STZ.w $02E4
|
||||
STZ.w $0FFC
|
||||
|
||||
++ RTL
|
||||
|
||||
|
||||
@@ -5,21 +5,21 @@ FloodGateAndMasterSwordFollowerReset:
|
||||
JSL.l MasterSwordFollowerClear
|
||||
FloodGateReset:
|
||||
LDA.l PersistentFloodgate : BNE +
|
||||
LDA.l OverworldEventDataWRAM+$3B : AND.b #$DF : STA.l OverworldEventDataWRAM+$3B ; reset water outside floodgate
|
||||
LDA.l OverworldEventDataWRAM+$7B : AND.b #$DF : STA.l OverworldEventDataWRAM+$7B ; reset water outside swamp palace
|
||||
LDA.l RoomDataWRAM[$010B].low : AND.b #$7F : STA.l RoomDataWRAM[$010B].low ; clear water inside floodgate
|
||||
LDA.l RoomDataWRAM[$28].high : AND.b #$FE : STA.l RoomDataWRAM[$28].high ; clear water front room (room 40)
|
||||
LDA OverworldEventDataWRAM+$3B : AND.b #$DF : STA OverworldEventDataWRAM+$3B ; reset water outside floodgate
|
||||
LDA OverworldEventDataWRAM+$7B : AND.b #$DF : STA OverworldEventDataWRAM+$7B ; reset water outside swamp palace
|
||||
LDA RoomDataWRAM[$010B].low : AND.b #$7F : STA RoomDataWRAM[$010B].low ; clear water inside floodgate
|
||||
LDA RoomDataWRAM[$28].high : AND.b #$FE : STA RoomDataWRAM[$28].high ; clear water front room (room 40)
|
||||
+
|
||||
FloodGateResetInner:
|
||||
LDA.l Bugfix_SwampWaterLevel : BEQ +++
|
||||
LDA.l RoomDataWRAM[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected.
|
||||
LDA.l FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset.
|
||||
LDA RoomDataWRAM[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected.
|
||||
LDA FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset.
|
||||
+
|
||||
LDA.l RoomDataWRAM[$37].low : AND.b #$7F : STA.l RoomDataWRAM[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches
|
||||
LDA RoomDataWRAM[$37].low : AND.b #$7F : STA RoomDataWRAM[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches
|
||||
++
|
||||
LDA.l RoomDataWRAM[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected.
|
||||
LDA RoomDataWRAM[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected.
|
||||
; no need to check for flippers on the inner room, as you can't get to the west door no matter what, without flippers.
|
||||
LDA.l RoomDataWRAM[$35].low : AND.b #$7F : STA.l RoomDataWRAM[$35].low ; clear water room 53 - inner room with the easy key flood softlock
|
||||
LDA RoomDataWRAM[$35].low : AND.b #$7F : STA RoomDataWRAM[$35].low ; clear water room 53 - inner room with the easy key flood softlock
|
||||
+++
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
57
flute.asm
57
flute.asm
@@ -2,35 +2,38 @@
|
||||
; Randomize Flute Dig Item
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnHauntedGroveItem:
|
||||
LDA.b OverworldIndex : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
|
||||
LDA.b IndoorsFlag : BEQ + : RTL : + ; Skip if indoors
|
||||
LDA $8A : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
|
||||
LDA $1B : BEQ + : RTL : + ; Skip if indoors
|
||||
|
||||
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
||||
JSL.l PrepDynamicTile
|
||||
|
||||
LDA.b #$EB
|
||||
STA.l MiniGameTime
|
||||
STA $7FFE00
|
||||
JSL Sprite_SpawnDynamically
|
||||
|
||||
LDX.b #$00
|
||||
LDA.b LinkDirection : CMP.b #$04 : BEQ + : INX : +
|
||||
LDA $2F : CMP.b #$04 : BEQ + : INX : +
|
||||
|
||||
LDA.l .x_speeds, X : STA.w SpriteVelocityX, Y
|
||||
LDA.l .x_speeds, X : STA $0D50, Y
|
||||
|
||||
LDA.b #$00 : STA.w SpriteVelocityY, Y
|
||||
LDA.b #$18 : STA.w SpriteVelocityZ, Y
|
||||
LDA.b #$FF : STA.w EnemyStunTimer, Y
|
||||
LDA.b #$30 : STA.w SpriteTimerE, Y
|
||||
LDA.b #$00 : STA $0D40, Y
|
||||
LDA.b #$18 : STA $0F80, Y
|
||||
LDA.b #$FF : STA $0B58, Y
|
||||
LDA.b #$30 : STA $0F10, Y
|
||||
|
||||
LDA.b LinkPosX : !ADD.l .x_offsets, X
|
||||
AND.b #$F0 : STA.w SpritePosXLow, Y
|
||||
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh, Y
|
||||
LDA $22 : !ADD.l .x_offsets, X
|
||||
AND.b #$F0 : STA $0D10, Y
|
||||
LDA $23 : ADC.b #$00 : STA $0D30, Y
|
||||
|
||||
LDA.b LinkPosY : !ADD.b #$16 : AND.b #$F0 : STA.w SpritePosYLow, Y
|
||||
LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh, Y
|
||||
LDA $20 : !ADD.b #$16 : AND.b #$F0 : STA $0D00, Y
|
||||
LDA $21 : ADC.b #$00 : STA $0D20, Y
|
||||
|
||||
LDA.b #$00 : STA.w SpriteLayer, Y
|
||||
LDA.b #$00 : STA $0F20, Y
|
||||
TYX
|
||||
|
||||
LDX.b OverworldIndex ; haunted grove (208D0A)
|
||||
LDA.l OverworldEventDataWRAM, X : AND.b #$40 : BNE +
|
||||
LDX $8A ; haunted grove (208D0A)
|
||||
LDA OverworldEventDataWRAM, X : AND.b #$40 : BNE +
|
||||
LDA.b #$1B : JSL Sound_SetSfx3PanLong
|
||||
+
|
||||
RTL
|
||||
@@ -49,30 +52,30 @@ RTL
|
||||
}
|
||||
;--------------------------------------------------------------------------------
|
||||
FluteBoy:
|
||||
LDA.b GameMode : CMP.b #$1A : BEQ +
|
||||
LDA.b #$01 : STA.w $0FDD
|
||||
LDA $10 : CMP.b #$1A : BEQ +
|
||||
LDA.b #$01 : STA $0FDD
|
||||
JML.l FluteBoy_Abort
|
||||
+
|
||||
LDA.w SpriteActivity, X : CMP.b #$03 ; thing we wrote over
|
||||
LDA $0D80, X : CMP.b #$03 ; thing we wrote over
|
||||
JML.l FluteBoy_Continue
|
||||
;--------------------------------------------------------------------------------
|
||||
FreeDuckCheck:
|
||||
LDA.l InvertedMode : BEQ .done
|
||||
LDA.l FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active
|
||||
LDA FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active
|
||||
|
||||
; check the area, is it #$18 = 30?
|
||||
LDA.b OverworldIndex : CMP.b #$18 : BNE .done
|
||||
LDA $8A : CMP.b #$18 : BNE .done
|
||||
|
||||
REP #$20
|
||||
|
||||
; Y coordinate boundaries for setting it off.
|
||||
LDA.b LinkPosY
|
||||
LDA $20
|
||||
|
||||
CMP.w #$0760 : BCC .done
|
||||
CMP.w #$07E0 : BCS .done
|
||||
|
||||
; do if( (Ycoord >= 0x0760) && (Ycoord < 0x07e0
|
||||
LDA.b LinkPosX
|
||||
LDA $22
|
||||
|
||||
CMP.w #$01CF : BCC .done
|
||||
CMP.w #$0230 : BCS .done
|
||||
@@ -81,7 +84,7 @@ FreeDuckCheck:
|
||||
SEP #$20
|
||||
|
||||
; Apparently a special Overworld mode for doing this?
|
||||
LDA.b #$2D : STA.b GameSubMode
|
||||
LDA.b #$2D : STA $11
|
||||
|
||||
; Trigger the sequence to start the weathervane explosion.
|
||||
LDY.b #$00
|
||||
@@ -91,12 +94,12 @@ FreeDuckCheck:
|
||||
BRA .skipSong
|
||||
.done
|
||||
SEP #$20
|
||||
LDA.b #$80 : STA.w FluteTimer ; thing we wrote over
|
||||
LDA.b #$80 : STA $03F0 ; thing we wrote over, load flute timer
|
||||
LDA.b #$13
|
||||
RTL
|
||||
.skipSong
|
||||
SEP #$20
|
||||
LDA.b #$80 : STA.w FluteTimer ; thing we wrote over
|
||||
LDA.b #$80 : STA $03F0 ; thing we wrote over, load flute timer
|
||||
LDA.b #$00
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
100
framehook.asm
100
framehook.asm
@@ -2,64 +2,58 @@
|
||||
; Frame Hook
|
||||
;--------------------------------------------------------------------------------
|
||||
FrameHookAction:
|
||||
JSL $8080B5 ; Module_MainRouting
|
||||
JSL CheckMusicLoadRequest
|
||||
PHP : REP #$30 : PHA
|
||||
SEP #$20
|
||||
LDA.l StatsLocked : BNE ++
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.l LoopFrames : INC : STA.l LoopFrames : BNE +
|
||||
LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2
|
||||
+
|
||||
LDA.l GameMode : CMP.w #$010E : BNE ++ ; move this to nmi hook?
|
||||
LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++
|
||||
LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2
|
||||
++
|
||||
REP #$30 : PLA : PLP
|
||||
|
||||
JSL $0080B5 ; Module_MainRouting
|
||||
JSL CheckMusicLoadRequest
|
||||
PHP : REP #$30 : PHA
|
||||
|
||||
SEP #$20
|
||||
|
||||
LDA StatsLocked : BNE ++
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA LoopFrames : INC : STA LoopFrames : BNE +
|
||||
LDA LoopFrames+2 : INC : STA LoopFrames+2
|
||||
+
|
||||
LDA $10 : CMP.w #$010E : BNE + ; move this to nmi hook?
|
||||
LDA MenuFrames : INC : STA MenuFrames : BNE +
|
||||
LDA MenuFrames+2 : INC : STA MenuFrames+2
|
||||
+
|
||||
++
|
||||
REP #$30 : PLA : PLP
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
NMIHookAction:
|
||||
PHA : PHX : PHY : PHD ; thing we wrote over, push stuff
|
||||
LDA.l StatsLocked : AND.w #$00FF : BNE +
|
||||
LDA.l NMIFrames : INC : STA.l NMIFrames : BNE +
|
||||
LDA.l NMIFrames+2 : INC : STA.l NMIFrames+2
|
||||
+
|
||||
|
||||
PHA : PHX : PHY : PHD ; thing we wrote over, push stuff
|
||||
|
||||
LDA StatsLocked : AND.w #$00FF : BNE ++
|
||||
LDA NMIFrames : INC : STA NMIFrames : BNE +
|
||||
LDA NMIFrames+2 : INC : STA NMIFrames+2
|
||||
+
|
||||
++
|
||||
|
||||
JML.l NMIHookReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
!NMI_AUX = "$7F5044"
|
||||
PostNMIHookAction:
|
||||
LDA.w NMIAux : BEQ +
|
||||
PHK : PEA .return-1 ; push stack for RTL return
|
||||
JMP.w [NMIAux]
|
||||
.return
|
||||
STZ.w NMIAux ; zero bank byte of NMI hook pointer
|
||||
+
|
||||
JSR.w TransferItemGFX
|
||||
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
|
||||
|
||||
LDA !NMI_AUX : BEQ +
|
||||
LDA $00 : PHA ; preserve DP ram
|
||||
LDA $01 : PHA
|
||||
LDA $02 : PHA
|
||||
|
||||
LDA !NMI_AUX+2 : STA $02 ; set up jump pointer
|
||||
LDA !NMI_AUX+1 : STA $01
|
||||
LDA !NMI_AUX+0 : STA $00
|
||||
|
||||
PHK : PER .return-1 ; push stack for RTL return
|
||||
JMP [$0000]
|
||||
|
||||
.return
|
||||
LDA.b #$00 : STA !NMI_AUX ; zero bank byte of NMI hook pointer
|
||||
|
||||
PLA : STA $02
|
||||
PLA : STA $01
|
||||
PLA : STA $00
|
||||
+
|
||||
|
||||
LDA $13 : STA $2100 ; thing we wrote over, turn screen back on
|
||||
JML.l PostNMIHookReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
TransferItemGFX:
|
||||
; Only used for shops now but could be used for anything. We should look at how door rando does this
|
||||
; and try to unify one approach.
|
||||
REP #$30
|
||||
LDX.w ItemStackPtr : BEQ .done
|
||||
TXA : BIT #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.)
|
||||
DEX #2
|
||||
-
|
||||
LDA.l ItemGFXStack,X : STA.w ItemGFXPtr
|
||||
LDA.l ItemTargetStack,X : STA.w ItemGFXTarget
|
||||
PHX
|
||||
JSL.l TransferItemToVRAM
|
||||
REP #$10
|
||||
PLX
|
||||
DEX #2
|
||||
BPL -
|
||||
|
||||
STZ.w ItemStackPtr
|
||||
.done
|
||||
SEP #$30
|
||||
RTS
|
||||
.fail
|
||||
BRK #$00
|
||||
|
||||
16
ganonfixes.asm
Normal file
16
ganonfixes.asm
Normal file
@@ -0,0 +1,16 @@
|
||||
;================================================================================
|
||||
; Ganon Fixes
|
||||
;================================================================================
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; GanonWarpRNG
|
||||
; out: Accumulator - #$00 or #01 randomly, with no repeated #$01s
|
||||
;--------------------------------------------------------------------------------
|
||||
;GanonWarpRNG:
|
||||
; JSL GetRandomInt : AND.b #$01 : BEQ .zero
|
||||
; LDA !GANON_WARP_CHAIN : EOR #$01 : STA !GANON_WARP_CHAIN
|
||||
;RTL
|
||||
; .zero
|
||||
; STA !GANON_WARP_CHAIN
|
||||
;RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
74
generate_bomb_table.rb
Normal file
74
generate_bomb_table.rb
Normal file
@@ -0,0 +1,74 @@
|
||||
def process_values(sprite, values)
|
||||
ret = values.clone
|
||||
if [1, 2].include?(ret[0]) # boomerang
|
||||
if sprite == 0x53 # armos knight
|
||||
ret[0] = 0 # do nothing
|
||||
else
|
||||
ret[0] = 5 # stun very briefly instead of damage
|
||||
end
|
||||
end
|
||||
if ret[6] > 0 && sprite != 0x84 # bow and not red eyegore/mimic
|
||||
ret[6] = 0
|
||||
end
|
||||
if ret[7] == 2 # hookshot
|
||||
ret[7] = 1 # still want to stun
|
||||
end
|
||||
if [1, 2, 7].include?(ret[8]) && sprite != 0x92 # bomb and not helmasaur king
|
||||
ret[8] = 0
|
||||
end
|
||||
if ret[9] > 0 && sprite != 0x84 # silver bow and not red eyegore/mimic
|
||||
ret[9] = 0
|
||||
end
|
||||
if ret[10] == 4 # powder
|
||||
ret[10] = 0
|
||||
end
|
||||
if ret[11] > 0 && ![0xA1, 0xA3, 0xCD].include?(sprite) # fire rod
|
||||
ret[11] = 0
|
||||
end
|
||||
if ret[12] != 3 && sprite != 0xCC # ice rod
|
||||
ret[12] = 0
|
||||
end
|
||||
if ret[13] > 0 && ![0xA3, 0xA1].include?(sprite) # bombos
|
||||
ret[13] = 0
|
||||
end
|
||||
if ret[14] != 1 # ether
|
||||
ret[14] = 0
|
||||
end
|
||||
if [1, 2].include?(ret[15]) # quake
|
||||
ret[15] = 0
|
||||
end
|
||||
if sprite == 0x53 and ret[2] == 3
|
||||
ret[2] = 1 # armos knight? let's make class 2 not suck
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def split_value(byte)
|
||||
return [byte >> 4, byte & 0x0F]
|
||||
end
|
||||
|
||||
def join_values(value1, value2)
|
||||
return (value1 & 0x0F) << 4 | (value2 & 0x0F)
|
||||
end
|
||||
|
||||
File.open("damage_table.bin") do |input|
|
||||
File.open("damage_table_sword_bombs.bin", "w") do |output|
|
||||
i_enum = input.each_byte
|
||||
(0...0xD7).each do |sprite|
|
||||
values = []
|
||||
(0...8).each do
|
||||
values += split_value(i_enum.next)
|
||||
end
|
||||
v_enum = process_values(sprite, values).to_enum
|
||||
(0...8).each do
|
||||
output.putc(join_values(v_enum.next, v_enum.next))
|
||||
end
|
||||
end
|
||||
begin
|
||||
while true
|
||||
output.putc(i_enum.next)
|
||||
end
|
||||
rescue StopIteration
|
||||
end
|
||||
end
|
||||
end
|
||||
51
generate_bombos_table.rb
Normal file
51
generate_bombos_table.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
def process_values(sprite, values)
|
||||
ret = values.clone
|
||||
case sprite
|
||||
when 0x09, 0x53, 0x54, 0x88 # moldorm, armos knights, lanmola, mothula
|
||||
ret[13] = 1 # bombos - 16 damage
|
||||
when 0x83, 0x84, 0x91, 0xC3 # green and red eyegores, stalfos knight, gibo
|
||||
ret[13] = 1 # bombos - 16 damage
|
||||
when 0x8C, 0x92 # arrghus, helmasaur king
|
||||
ret[13] = 2 # bombos - 64 damage
|
||||
when 0xBD # vitreous big eye
|
||||
ret[13] = 2 # bombos - 64 damage
|
||||
when 0x8D, 0xBE, 0xA2 # arrghus puff, vitreous small eye, kholdstare puffs
|
||||
ret[13] = 1 # bombos - 16 damage
|
||||
when 0xCB, 0xCC, 0xCD # trinexx, firenexx, icenexx
|
||||
ret[13] = 2 # bombos - 64 damage
|
||||
when 0xD0 # lynel
|
||||
ret[13] = 1 # bombos - 16 damage
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def split_value(byte)
|
||||
return [byte >> 4, byte & 0x0F]
|
||||
end
|
||||
|
||||
def join_values(value1, value2)
|
||||
return (value1 & 0x0F) << 4 | (value2 & 0x0F)
|
||||
end
|
||||
|
||||
File.open("damage_table.bin") do |input|
|
||||
File.open("damage_table_bombos.bin", "w") do |output|
|
||||
i_enum = input.each_byte
|
||||
(0...0xD7).each do |sprite|
|
||||
values = []
|
||||
(0...8).each do
|
||||
values += split_value(i_enum.next)
|
||||
end
|
||||
v_enum = process_values(sprite, values).to_enum
|
||||
(0...8).each do
|
||||
output.putc(join_values(v_enum.next, v_enum.next))
|
||||
end
|
||||
end
|
||||
begin
|
||||
while true
|
||||
output.putc(i_enum.next)
|
||||
end
|
||||
rescue StopIteration
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
38
generate_pseudo_sword_table.rb
Normal file
38
generate_pseudo_sword_table.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
def process_values(sprite, values)
|
||||
ret = values.clone
|
||||
if (ret[1] == 0 && sprite != 0x40) || sprite == 0xCE
|
||||
# fighter sword does no damage and it's not the evil barrier, or it's Blind
|
||||
ret[5] = 0
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def split_value(byte)
|
||||
return [byte >> 4, byte & 0x0F]
|
||||
end
|
||||
|
||||
def join_values(value1, value2)
|
||||
return (value1 & 0x0F) << 4 | (value2 & 0x0F)
|
||||
end
|
||||
|
||||
File.open("damage_table.bin") do |input|
|
||||
File.open("damage_table_pseudo_sword.bin", "w") do |output|
|
||||
i_enum = input.each_byte
|
||||
(0...0xD7).each do |sprite|
|
||||
values = []
|
||||
(0...8).each do
|
||||
values += split_value(i_enum.next)
|
||||
end
|
||||
v_enum = process_values(sprite, values).to_enum
|
||||
(0...8).each do
|
||||
output.putc(join_values(v_enum.next, v_enum.next))
|
||||
end
|
||||
end
|
||||
begin
|
||||
while true
|
||||
output.putc(i_enum.next)
|
||||
end
|
||||
rescue StopIteration
|
||||
end
|
||||
end
|
||||
end
|
||||
30
glitched.asm
30
glitched.asm
@@ -2,7 +2,7 @@
|
||||
; Glitched Mode Fixes
|
||||
;================================================================================
|
||||
GetAgahnimPalette:
|
||||
LDA.b RoomIndex ; get room id
|
||||
LDA $A0 ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$07 ; Use Agahnim 2
|
||||
RTL
|
||||
@@ -11,25 +11,25 @@ GetAgahnimPalette:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimDeath:
|
||||
STA.w $0BA0, X ; thing we wrote over
|
||||
LDA.b RoomIndex ; get room id
|
||||
STA $0BA0, X ; thing we wrote over
|
||||
LDA $A0 ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++
|
||||
LDA.l InvertedMode : BEQ +++
|
||||
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
||||
LDA.b #$00 : STA CurrentWorld ; Switch to light world
|
||||
BRA ++
|
||||
+++
|
||||
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
||||
LDA.b #$40 : STA CurrentWorld ; Switch to dark world
|
||||
++
|
||||
LDA.b #$01 ; Use Agahnim 2
|
||||
RTL
|
||||
+ ; Elsewhere
|
||||
LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++
|
||||
LDA.l InvertedMode : BEQ +++
|
||||
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
||||
LDA.b #$40 : STA CurrentWorld ; Switch to dark world
|
||||
BRA ++
|
||||
+++
|
||||
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
||||
LDA.b #$00 : STA CurrentWorld ; Switch to light world
|
||||
; (This will later get flipped to DW when Agahnim 1
|
||||
; warps us to the pyramid)
|
||||
++
|
||||
@@ -37,7 +37,7 @@ GetAgahnimDeath:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimType:
|
||||
LDA.b RoomIndex ; get room id
|
||||
LDA $A0 ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$0006 ; Use Agahnim 2
|
||||
BRA .done
|
||||
@@ -48,7 +48,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimSlot:
|
||||
PHX ; thing we wrote over
|
||||
LDA.b RoomIndex ; get room id
|
||||
LDA $A0 ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$01 ; Use Agahnim 2
|
||||
JML.l GetAgahnimSlotReturn
|
||||
@@ -57,8 +57,8 @@ GetAgahnimSlot:
|
||||
JML.l GetAgahnimSlotReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimLightning:
|
||||
INC.w SpriteAux, X ; thing we wrote over
|
||||
LDA.b RoomIndex ; get room id
|
||||
INC $0E30, X ; thing we wrote over
|
||||
LDA $A0 ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$01 ; Use Agahnim 2
|
||||
RTL
|
||||
@@ -69,11 +69,11 @@ GetAgahnimLightning:
|
||||
;0 = Allow
|
||||
;1 = Forbid
|
||||
AllowJoypadInput:
|
||||
LDA.l PermitSQFromBosses : BEQ .fullCheck
|
||||
LDA.w RoomItemsTaken : AND.b #$80 : BEQ .fullCheck
|
||||
LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check
|
||||
LDA PermitSQFromBosses : BEQ .fullCheck
|
||||
LDA $0403 : AND.b #$80 : BEQ .fullCheck
|
||||
LDA $0112 : ORA $02E4 ; we have heart container, do short check
|
||||
RTL
|
||||
.fullCheck
|
||||
LDA.w MedallionFlag : ORA.w CutsceneFlag : ORA.w NoMenu
|
||||
LDA $0112 : ORA $02E4 : ORA $0FFC
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
152
goalitem.asm
152
goalitem.asm
@@ -1,21 +1,28 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
; $7F5010 - Scratch Space (Callee Preserved)
|
||||
;--------------------------------------------------------------------------------
|
||||
!GOAL_DRAW_ADDRESS = "$7EC72A"
|
||||
;--------------------------------------------------------------------------------
|
||||
; DrawGoalIndicator moved to newhud.asm
|
||||
;--------------------------------------------------------------------------------
|
||||
GoalItemGanonCheck:
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
||||
LDA $0E20, X : CMP.b #$D6 : BNE .success ; skip if not ganon
|
||||
JSL.l CheckGanonVulnerability
|
||||
BCS .success
|
||||
|
||||
.fail
|
||||
LDA.w SpriteActivity, X : CMP.b #17 : !BLT .success ; decmial 17 because Acmlm's chart is decimal
|
||||
LDA $0D80, X : CMP.b #17 : !BLT .success ; decmial 17 because Acmlm's chart is decimal
|
||||
LDA.b #$00
|
||||
RTL
|
||||
.success
|
||||
LDA.b OAMOffsetY : CMP.b #$80 ; thing we wrote over
|
||||
LDA $44 : CMP.b #$80 ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
;Carry clear = ganon invincible
|
||||
;Carry set = ganon vulnerable
|
||||
CheckGanonVulnerability:
|
||||
PHX
|
||||
LDA.l GanonVulnerableMode
|
||||
LDA.l InvincibleGanon
|
||||
ASL
|
||||
TAX
|
||||
|
||||
@@ -39,8 +46,6 @@ CheckGanonVulnerability:
|
||||
dw .crystals_and_bosses
|
||||
dw .bosses_only
|
||||
dw .all_dungeons_no_agahnim
|
||||
dw .all_items
|
||||
dw .completionist
|
||||
|
||||
; 00 = always vulnerable
|
||||
.vulnerable
|
||||
@@ -94,99 +99,80 @@ CheckGanonVulnerability:
|
||||
.bosses_only
|
||||
JMP CheckForCrystalBossesDefeated
|
||||
|
||||
; 09 = 100% item collection rate
|
||||
.all_items
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : CMP.l TotalItemCount
|
||||
SEP #$20
|
||||
RTS
|
||||
|
||||
; 0A = 100% item collection rate and all dungeons
|
||||
.completionist
|
||||
REP #$20
|
||||
LDA.l TotalItemCounter : CMP.l TotalItemCount
|
||||
SEP #$20
|
||||
BCC .fail
|
||||
BRA .all_dungeons
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
GetRequiredCrystalsForTower:
|
||||
BEQ + : JSL.l BreakTowerSeal_ExecuteSparkles : + ; thing we wrote over
|
||||
LDA.l GanonsTowerOpenTarget : CMP.b #$00 : BNE + : JML.l Ancilla_BreakTowerSeal_stop_spawning_sparkles : +
|
||||
LDA.l GanonsTowerOpenTarget : CMP.b #$01 : BNE + : JML.l Ancilla_BreakTowerSeal_draw_single_crystal : +
|
||||
LDA.l GanonsTowerOpenTarget : DEC #2 : TAX
|
||||
LDA.l NumberOfCrystalsRequiredForTower : CMP.b #$00 : BNE + : JML.l Ancilla_BreakTowerSeal_stop_spawning_sparkles : +
|
||||
LDA.l NumberOfCrystalsRequiredForTower : CMP.b #$01 : BNE + : JML.l Ancilla_BreakTowerSeal_draw_single_crystal : +
|
||||
LDA.l NumberOfCrystalsRequiredForTower : DEC #2 : TAX
|
||||
JML.l GetRequiredCrystalsForTower_continue
|
||||
;--------------------------------------------------------------------------------
|
||||
GetRequiredCrystalsInX:
|
||||
LDA.l GanonsTowerOpenTarget : CMP.b #$00 : BNE +
|
||||
LDA.l NumberOfCrystalsRequiredForTower : CMP.b #$00 : BNE +
|
||||
TAX
|
||||
RTL
|
||||
+
|
||||
|
||||
TXA
|
||||
|
||||
- CMP.l GanonsTowerOpenTarget : BCC +
|
||||
SBC.l GanonsTowerOpenTarget ; carry guaranteed set
|
||||
- CMP.l NumberOfCrystalsRequiredForTower : BCC +
|
||||
SBC.l NumberOfCrystalsRequiredForTower ; carry guaranteed set
|
||||
BRA -
|
||||
|
||||
+ INC : CMP.l GanonsTowerOpenTarget : BNE +
|
||||
+ INC : CMP.l NumberOfCrystalsRequiredForTower : BNE +
|
||||
LDA.b #$08
|
||||
+ : DEC : TAX
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckEnoughCrystalsForGanon:
|
||||
REP #$20
|
||||
LDA.l CrystalCounter
|
||||
CMP.l GanonVulnerableTarget
|
||||
SEP #$20
|
||||
LDA CrystalCounter
|
||||
CMP.l NumberOfCrystalsRequiredForGanon
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckTowerOpen:
|
||||
LDA.l GanonsTowerOpenMode : ASL : TAX
|
||||
JSR.w (.tower_open_modes,X)
|
||||
CheckEnoughCrystalsForTower:
|
||||
LDA CrystalCounter
|
||||
CMP.l NumberOfCrystalsRequiredForTower
|
||||
RTL
|
||||
.tower_open_modes
|
||||
dw .vanilla
|
||||
dw .arbitrary_cmp
|
||||
|
||||
.vanilla
|
||||
LDA.l CrystalsField
|
||||
AND.b #$7F : CMP.b #$7F
|
||||
RTS
|
||||
|
||||
.arbitrary_cmp
|
||||
REP #$30
|
||||
LDA.l GanonsTowerOpenAddress : TAX
|
||||
LDA.l $7E0000,X
|
||||
CMP.l GanonsTowerOpenTarget
|
||||
SEP #$30
|
||||
RTS
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
CheckAgaForPed:
|
||||
REP #$20
|
||||
LDA.l GanonVulnerableMode
|
||||
CMP.w #$0006 : BNE .vanilla
|
||||
LDA.l InvincibleGanon
|
||||
CMP.b #$06 : BNE .vanilla
|
||||
|
||||
.light_speed
|
||||
SEP #$20
|
||||
LDA.l OverworldEventDataWRAM+$80 ; check ped flag
|
||||
AND.b #$40
|
||||
BEQ .force_blue_ball
|
||||
LDA.l OverworldEventDataWRAM+$80 ; check ped flag
|
||||
AND.b #$40
|
||||
BEQ .force_blue_ball
|
||||
|
||||
.vanilla ; run vanilla check for phase
|
||||
SEP #$20
|
||||
LDA.w SpriteAux, X
|
||||
CMP.b #$02
|
||||
RTL
|
||||
LDA.w $0E30, X
|
||||
CMP.b #$02
|
||||
RTL
|
||||
|
||||
.force_blue_ball
|
||||
LDA.b #$01 : STA.w SpriteAuxTable, Y
|
||||
LDA.b #$20 : STA.w SpriteTimer, Y
|
||||
CLC ; skip the RNG check
|
||||
RTL
|
||||
LDA.b #$01 : STA.w $0DA0, Y
|
||||
LDA.b #$20 : STA.w $0DF0, Y
|
||||
CLC ; skip the RNG check
|
||||
RTL
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
KillGanon:
|
||||
STA.l ProgressIndicator ; vanilla game state stuff we overwrote
|
||||
|
||||
LDA.l InvincibleGanon
|
||||
CMP.b #$06 : BNE .exit
|
||||
|
||||
.light_speed
|
||||
LDA.l OverworldEventDataWRAM+$5B : ORA.b #$20 : STA.l OverworldEventDataWRAM+$5B ; pyramid hole
|
||||
LDA.b #$08 : STA.l RoomDataWRAM[$00].high ; kill ganon
|
||||
LDA.b #$02 : STA.l MoonPearlEquipment ; pearl but invisible in menu
|
||||
|
||||
.exit
|
||||
RTL
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
CheckForCrystalBossesDefeated:
|
||||
PHB : PHX : PHY
|
||||
|
||||
@@ -196,7 +182,7 @@ CheckForCrystalBossesDefeated:
|
||||
REP #$30
|
||||
|
||||
; count of number of bosses killed
|
||||
STZ.b Scrap00
|
||||
STZ.b $00
|
||||
|
||||
LDY.w #10
|
||||
|
||||
@@ -216,7 +202,7 @@ CheckForCrystalBossesDefeated:
|
||||
AND.w #$0800
|
||||
BEQ ++
|
||||
|
||||
INC.b Scrap00
|
||||
INC.b $00
|
||||
|
||||
++ DEY
|
||||
BPL .next_check
|
||||
@@ -224,36 +210,8 @@ CheckForCrystalBossesDefeated:
|
||||
SEP #$30
|
||||
PLY : PLX : PLB
|
||||
|
||||
LDA.b Scrap00 : CMP.l GanonVulnerableTarget
|
||||
LDA.b $00 : CMP.l NumberOfCrystalsRequiredForGanon
|
||||
|
||||
|
||||
RTS
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
CheckPedestalPull:
|
||||
; Out: c - Successful ped pull if set, do nothing if unset.
|
||||
PHX
|
||||
LDA.l PedCheckMode : ASL : TAX
|
||||
JSR.w (.pedestal_modes,X)
|
||||
PLX
|
||||
RTL
|
||||
|
||||
.pedestal_modes
|
||||
dw .vanilla
|
||||
dw .arbitrary_cmp
|
||||
|
||||
.vanilla
|
||||
LDA.l PendantsField
|
||||
AND.b #$07 : CMP.b #$07 : BNE ..nopull
|
||||
SEC
|
||||
RTS
|
||||
..nopull
|
||||
CLC
|
||||
RTS
|
||||
|
||||
.arbitrary_cmp
|
||||
REP #$30
|
||||
LDA.l PedPullAddress : TAX
|
||||
LDA.l $7E0000,X
|
||||
CMP.l PedPullTarget
|
||||
SEP #$30
|
||||
RTS
|
||||
|
||||
@@ -6,10 +6,10 @@ GetMagicBatItem:
|
||||
%GetPossiblyEncryptedItem(MagicBatItem, SpriteItemValues)
|
||||
CMP.b #$FF : BEQ .normalLogic
|
||||
TAY
|
||||
STZ.b ItemReceiptMethod ; 0 = Receiving item from an NPC or message
|
||||
STZ $02E9 ; 0 = Receiving item from an NPC or message
|
||||
JML.l Link_ReceiveItem
|
||||
.normalLogic
|
||||
LDA.l HalfMagic
|
||||
STA.l MagicConsumption
|
||||
LDA HalfMagic
|
||||
STA MagicConsumption
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
60
hardmode.asm
60
hardmode.asm
@@ -3,22 +3,22 @@
|
||||
;================================================================================
|
||||
CalculateSpikeFloorDamage:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
LDA $A0 ; these are all decimal because i got them that way
|
||||
CMP.w #279
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
BNE +
|
||||
LDA.l ByrnaCaveSpikeDamage
|
||||
STA.w DamageReceived
|
||||
STA $0373
|
||||
RTL
|
||||
+
|
||||
LDA.w $D055, Y
|
||||
STA.w DamageReceived
|
||||
LDA $D055, Y
|
||||
STA $0373
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CalculateByrnaUsage:
|
||||
LDA.b IndoorsFlag : BEQ ++
|
||||
LDA $1B : BEQ ++
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
LDA $A0 ; these are all decimal because i got them that way
|
||||
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
||||
CMP.w #172 : BEQ + ; Blind Boss Room
|
||||
CMP.w #179 : BEQ + ; Room in Misery Mire
|
||||
@@ -29,16 +29,16 @@ CalculateByrnaUsage:
|
||||
+
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
PHX : TYX
|
||||
LDA.l HardModeExclusionCaneOfByrnaUsage, X : STA.b Scrap00
|
||||
LDA.l HardModeExclusionCaneOfByrnaUsage, X : STA $00
|
||||
PLX
|
||||
++
|
||||
LDA.l CurrentMagic ; thing we wrote over
|
||||
LDA CurrentMagic ; thing we wrote over
|
||||
JML IncrementMagicUseCounterByrna
|
||||
;--------------------------------------------------------------------------------
|
||||
CalculateCapeUsage:
|
||||
LDA.b IndoorsFlag : BEQ ++
|
||||
LDA $1B : BEQ ++
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
LDA $A0 ; these are all decimal because i got them that way
|
||||
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
||||
CMP.w #179 : BEQ + ; Room in Misery Mire
|
||||
CMP.w #213 : BEQ + ; Laser Bridge
|
||||
@@ -48,15 +48,15 @@ CalculateCapeUsage:
|
||||
+
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
PHX : TYX
|
||||
LDA.l HardModeExclusionCapeUsage, X : STA.b CapeTimer ; set cape decrement timer
|
||||
LDA.l HardModeExclusionCapeUsage, X : STA $4C ; set cape decrement timer
|
||||
PLX
|
||||
++
|
||||
JML IncrementMagicUseCounterOne
|
||||
;--------------------------------------------------------------------------------
|
||||
ActivateInvulnerabilityOrDont:
|
||||
LDA.b IndoorsFlag : BEQ .nowhere_special
|
||||
LDA $1B : BEQ .nowhere_special
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
LDA $A0 ; these are all decimal because i got them that way
|
||||
CMP.w #95 : BEQ .somewhere_cool ; Ice Palace Spike Room
|
||||
CMP.w #179 : BEQ .somewhere_cool ; Room in Misery Mire
|
||||
CMP.w #213 : BEQ .somewhere_cool ; Laser Bridge
|
||||
@@ -66,9 +66,9 @@ ActivateInvulnerabilityOrDont:
|
||||
BRA .nowhere_special
|
||||
.somewhere_cool
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$01 : STA.w NoDamage : RTL
|
||||
LDA.b #$01 : STA $037B : RTL
|
||||
.nowhere_special
|
||||
LDA.l ByrnaInvulnerability : STA.w NoDamage
|
||||
LDA.l ByrnaInvulnerability : STA $037B
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetItemDamageValue:
|
||||
@@ -76,18 +76,24 @@ GetItemDamageValue:
|
||||
CPX.b #$04 : BEQ .boomerang
|
||||
CPX.b #$05 : BEQ .boomerang
|
||||
CPX.b #$39 : BEQ .hookshot
|
||||
CPX.b #$3b : BEQ .hookshot
|
||||
CPX.b #$3c : BEQ .hookshot
|
||||
CPX.b #$3d : BEQ .hookshot
|
||||
CPX.b #$3B : BEQ .hookshot
|
||||
CPX.b #$3C : BEQ .hookshot
|
||||
CPX.b #$3D : BEQ .hookshot
|
||||
|
||||
LDA.l SpecialWeapons : CMP #$02 : BNE .normal
|
||||
TXA : AND #$78 : CMP #$28 : BNE .normal
|
||||
LDA $0DB8F1, X : BEQ .noDamage
|
||||
LDA #$01
|
||||
RTL
|
||||
|
||||
.normal
|
||||
LDA.l $8DB8F1,x ;what we wrote over
|
||||
LDA $0DB8F1, X ; what we wrote over
|
||||
RTL
|
||||
.boomerang
|
||||
LDA.l StunItemAction : AND.b #$01 : BNE .normal
|
||||
LDA.l StunItemAction : AND #$01 : BNE .normal
|
||||
BRA .noDamage
|
||||
.hookshot
|
||||
LDA.l StunItemAction : AND.b #$02 : BNE .normal
|
||||
LDA.l StunItemAction : AND #$02 : BNE .normal
|
||||
.noDamage
|
||||
LDA.b #$00
|
||||
RTL
|
||||
@@ -95,17 +101,17 @@ RTL
|
||||
;Argument : A = id we want to find return 00 if none found, 01 if found
|
||||
SearchAncilla:
|
||||
{
|
||||
STA.b Scrap05
|
||||
STA $05
|
||||
PHX
|
||||
LDX.b #$00
|
||||
LDX #$00
|
||||
.loop
|
||||
LDA.w AncillaID, X
|
||||
LDA $0C4A, X
|
||||
INX : CPX #$0A : BEQ .notFound
|
||||
CMP.b Scrap05 : BNE .loop
|
||||
LDA.b #$01
|
||||
CMP $05 : BNE .loop
|
||||
LDA #$01
|
||||
BRA .return
|
||||
.notFound
|
||||
LDA.b #$00
|
||||
LDA #$00
|
||||
.return
|
||||
PLX
|
||||
RTS
|
||||
|
||||
194
hashalphabet.asm
194
hashalphabet.asm
@@ -1,39 +1,41 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
; Hash Alphabet
|
||||
; ALPHA_BOW = $0000
|
||||
; ALPHA_BOOM = $0001
|
||||
; ALPHA_HOOK = $0002
|
||||
; ALPHA_BOMB = $0003
|
||||
; ALPHA_SHROOM = $0004
|
||||
; ALPHA_POWDER = $0005
|
||||
; ALPHA_ROD = $0006
|
||||
; ALPHA_PENDANT = $0007
|
||||
; ALPHA_BOMBOS = $0008
|
||||
; ALPHA_ETHER = $0009
|
||||
; ALPHA_QUAKE = $000A
|
||||
; ALPHA_LAMP = $000B
|
||||
; ALPHA_HAMMER = $000C
|
||||
; ALPHA_SHOVEL = $000D
|
||||
; ALPHA_FLUTE = $000E
|
||||
; ALPHA_NET = $000F
|
||||
; ALPHA_BOOK = $0010
|
||||
; ALPHA_BOTTLE = $0011
|
||||
; ALPHA_POTION = $0012
|
||||
; ALPHA_CANE = $0013
|
||||
; ALPHA_CAPE = $0014
|
||||
; ALPHA_MIRROR = $0015
|
||||
; ALPHA_BOOTS = $0016
|
||||
; ALPHA_GLOVES = $0017
|
||||
; ALPHA_FLIPPERS = $0018
|
||||
; ALPHA_PEARL = $0019
|
||||
; ALPHA_SHIELD = $001A
|
||||
; ALPHA_TUNIC = $001B
|
||||
; ALPHA_HEART = $001C
|
||||
; ALPHA_MAP = $001D
|
||||
; ALPHA_COMPASS = $001E
|
||||
; ALPHA_KEY = $001F
|
||||
;Hash Alphabet
|
||||
!ALPHA_BOW = "#$0000"
|
||||
!ALPHA_BOOM = "#$0001"
|
||||
!ALPHA_HOOK = "#$0002"
|
||||
!ALPHA_BOMB = "#$0003"
|
||||
!ALPHA_SHROOM = "#$0004"
|
||||
!ALPHA_POWDER = "#$0005"
|
||||
!ALPHA_ROD = "#$0006"
|
||||
!ALPHA_PENDANT = "#$0007"
|
||||
!ALPHA_BOMBOS = "#$0008"
|
||||
!ALPHA_ETHER = "#$0009"
|
||||
!ALPHA_QUAKE = "#$000A"
|
||||
!ALPHA_LAMP = "#$000B"
|
||||
!ALPHA_HAMMER = "#$000C"
|
||||
!ALPHA_SHOVEL = "#$000D"
|
||||
!ALPHA_FLUTE = "#$000E"
|
||||
!ALPHA_NET = "#$000F"
|
||||
!ALPHA_BOOK = "#$0010"
|
||||
!ALPHA_BOTTLE = "#$0011"
|
||||
!ALPHA_POTION = "#$0012"
|
||||
!ALPHA_CANE = "#$0013"
|
||||
!ALPHA_CAPE = "#$0014"
|
||||
!ALPHA_MIRROR = "#$0015"
|
||||
!ALPHA_BOOTS = "#$0016"
|
||||
!ALPHA_GLOVES = "#$0017"
|
||||
!ALPHA_FLIPPERS = "#$0018"
|
||||
!ALPHA_PEARL = "#$0019"
|
||||
!ALPHA_SHIELD = "#$001A"
|
||||
!ALPHA_TUNIC = "#$001B"
|
||||
!ALPHA_HEART = "#$001C"
|
||||
!ALPHA_MAP = "#$001D"
|
||||
!ALPHA_COMPASS = "#$001E"
|
||||
!ALPHA_KEY = "#$001F"
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
!BIGRAM = "$7EC900";
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadAlphabetTilemap:
|
||||
PHB : PHA : PHX : PHY : PHP
|
||||
@@ -43,9 +45,9 @@ LoadAlphabetTilemap:
|
||||
|
||||
LDX.b #$00 : -
|
||||
LDA.w FileSelect_PlayerSelectText_Top, X
|
||||
STA.l BigRAM, X
|
||||
STA !BIGRAM, X
|
||||
INX #2
|
||||
CPX.b #128 : !BLT -
|
||||
CPX #128 : !BLT -
|
||||
|
||||
LDY.b #00
|
||||
LDX.b #$00 : -
|
||||
@@ -53,12 +55,12 @@ LoadAlphabetTilemap:
|
||||
AND.w #$001F ; mask to alphabet of 32
|
||||
|
||||
ASL #3 : PHY : TAY
|
||||
LDA.w HashAlphabetTiles,Y : STA.l BigRAM+24, X
|
||||
LDA.w HashAlphabetTiles+2,Y : STA.l BigRAM+24+2, X
|
||||
LDA.w HashAlphabetTiles+4,Y : STA.l BigRAM+24+64, X
|
||||
LDA.w HashAlphabetTiles+6,Y : STA.l BigRAM+24+64+2, X
|
||||
LDA.w HashAlphabetTiles,Y : STA !BIGRAM+24, X
|
||||
LDA.w HashAlphabetTiles+2,Y : STA !BIGRAM+24+2, X
|
||||
LDA.w HashAlphabetTiles+4,Y : STA !BIGRAM+24+64, X
|
||||
LDA.w HashAlphabetTiles+6,Y : STA !BIGRAM+24+64+2, X
|
||||
PLY : INX #6 : INY
|
||||
CPX.b #25 : !BLT -
|
||||
CPX #25 : !BLT -
|
||||
|
||||
SEP #$20 ; 8-bit accumulator
|
||||
|
||||
@@ -69,88 +71,110 @@ RTL
|
||||
; DMAAlphabetTilemap:
|
||||
;--------------------------------------------------------------------------------
|
||||
DMAAlphabetTilemap:
|
||||
PHA : PHX
|
||||
REP #$10
|
||||
LDA.b #$01 : STA.w DMAP0
|
||||
LDA.b #$80 : STA.w VMAIN
|
||||
LDA.b #$18 : STA.w BBAD0
|
||||
LDX.w #$6060 : STX.w VMADDL
|
||||
LDA.b #BigRAM>>16 : STA.w A1B0
|
||||
LDX.w #BigRAM : STX.w A1T0L
|
||||
LDX.w #$0080 : STX.w DAS0L
|
||||
LDA.b #$01 : STA.w MDMAEN
|
||||
SEP #$10
|
||||
PLX : PLA
|
||||
PHA : PHX
|
||||
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.b #$01 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode
|
||||
LDA.b #$80 : STA $2115 ; write read increment on $2119
|
||||
LDA.b #$18 : STA $4301 ; set bus B destination to VRAM register
|
||||
|
||||
LDA.b #$60 : STA $2116 ; write VRAM destination address
|
||||
STA $2117 ; write VRAM destination address
|
||||
|
||||
LDA.b #!BIGRAM : STA $4302 ; set bus A source address to WRAM
|
||||
LDA.b #!BIGRAM>>8 : STA $4303 ; set bus A source address to WRAM
|
||||
LDA.b #!BIGRAM>>16 : STA $4304 ; set bus A source bank
|
||||
|
||||
LDA.b #$80 : STA $4305 : STZ $4306 ; set transfer size to 0x40
|
||||
|
||||
LDA $2100 : PHA : LDA.b #$80 : STA $2100 ; save screen state & turn screen off
|
||||
LDA #$01 : STA $420B ; begin DMA transfer
|
||||
PLA : STA $2100 ; put screen back however it was before
|
||||
;--------------------------------------------------------------------------------
|
||||
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
|
||||
PLX : PLA
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
HashAlphabetTilesWithBlank:
|
||||
;BLANK
|
||||
dw #$0188, #$0188, #$0188, #$0188
|
||||
dw #$0186|!FS_COLOR_BW, #$0186|!FS_COLOR_BW, #$0196|!FS_COLOR_BW, #$0196|!FS_COLOR_BW
|
||||
HashAlphabetTiles:
|
||||
;BOW
|
||||
dw #$0241|!FS_COLOR_YELLOW, #$0242|!FS_COLOR_YELLOW, #$0251|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW
|
||||
dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW, #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW
|
||||
;BOOM
|
||||
dw #$0245|!FS_COLOR_BLUE, #$0246|!FS_COLOR_BLUE, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_BLUE
|
||||
dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE
|
||||
;HOOK
|
||||
dw #$0240|!FS_COLOR_RED, #$0255|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0240|!FS_COLOR_BW
|
||||
dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW
|
||||
;BOMB
|
||||
dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE|!FS_HFLIP
|
||||
dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE|!FS_HFLIP
|
||||
;SHROOM
|
||||
dw #$02A2|!FS_COLOR_RED, #$02A3|!FS_COLOR_RED, #$02B2|!FS_COLOR_RED, #$02B3|!FS_COLOR_RED
|
||||
dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED, #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED
|
||||
;POWDER
|
||||
dw #$024A|!FS_COLOR_BROWN, #$024B|!FS_COLOR_BROWN, #$025A|!FS_COLOR_BROWN, #$025B|!FS_COLOR_BROWN
|
||||
dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN, #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN
|
||||
;ROD
|
||||
dw #$0260|!FS_COLOR_BLUE, #$0261|!FS_COLOR_BLUE, #$0270|!FS_COLOR_BLUE, #$0271|!FS_COLOR_BLUE
|
||||
dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE, #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE
|
||||
;PENDANT
|
||||
dw #$02C5|!FS_COLOR_GREEN, #$02C6|!FS_COLOR_GREEN, #$02D5|!FS_COLOR_GREEN, #$02D6|!FS_COLOR_GREEN
|
||||
dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN, #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN
|
||||
;BOMBOS
|
||||
dw #$0247|!FS_COLOR_YELLOW, #$0257|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0257|!FS_COLOR_YELLOW, #$0247|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
|
||||
dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
|
||||
;ETHER
|
||||
dw #$0248|!FS_COLOR_YELLOW, #$0258|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0258|!FS_COLOR_YELLOW, #$0248|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
|
||||
dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
|
||||
;QUAKE
|
||||
dw #$0249|!FS_COLOR_YELLOW, #$0259|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0259|!FS_COLOR_YELLOW, #$0249|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
|
||||
dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP
|
||||
;LAMP
|
||||
dw #$026C|!FS_COLOR_RED, #$026C|!FS_COLOR_RED|!FS_HFLIP, #$027C|!FS_COLOR_RED, #$027D|!FS_COLOR_RED
|
||||
dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP, #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED
|
||||
;HAMMER
|
||||
dw #$0262|!FS_COLOR_BROWN, #$0263|!FS_COLOR_BROWN, #$0272|!FS_COLOR_BROWN, #$0273|!FS_COLOR_BROWN
|
||||
dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN, #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN
|
||||
;SHOVEL
|
||||
dw #$0264|!FS_COLOR_BROWN, #$0265|!FS_COLOR_BROWN, #$0274|!FS_COLOR_BROWN, #$0275|!FS_COLOR_BROWN
|
||||
dw #$0224|!FS_COLOR_BROWN, #$0225|!FS_COLOR_BROWN, #$0234|!FS_COLOR_BROWN, #$0235|!FS_COLOR_BROWN
|
||||
;FLUTE
|
||||
dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE
|
||||
dw #$0226|!FS_COLOR_BLUE, #$0227|!FS_COLOR_BLUE, #$0236|!FS_COLOR_BLUE, #$0237|!FS_COLOR_BLUE
|
||||
;NET
|
||||
dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_YELLOW, #$0279|!FS_COLOR_YELLOW
|
||||
dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW, #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW
|
||||
;BOOK
|
||||
dw #$026A|!FS_COLOR_GREEN, #$026B|!FS_COLOR_GREEN, #$027A|!FS_COLOR_GREEN, #$027B|!FS_COLOR_GREEN
|
||||
dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN, #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN
|
||||
;BOTTLE
|
||||
dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0290|!FS_COLOR_BW, #$0291|!FS_COLOR_BW
|
||||
dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0250|!FS_COLOR_BW, #$0251|!FS_COLOR_BW
|
||||
;POTION
|
||||
dw #$0282|!FS_COLOR_GREEN, #$0282|!FS_COLOR_GREEN|!FS_HFLIP, #$0292|!FS_COLOR_GREEN, #$0293|!FS_COLOR_GREEN
|
||||
dw #$0242|!FS_COLOR_GREEN, #$0242|!FS_COLOR_GREEN|!FS_HFLIP, #$0252|!FS_COLOR_GREEN, #$0253|!FS_COLOR_GREEN
|
||||
;CANE
|
||||
dw #$025D|!FS_COLOR_RED, #$025E|!FS_COLOR_RED, #$026D|!FS_COLOR_RED, #$026E|!FS_COLOR_RED
|
||||
dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED, #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED
|
||||
;CAPE
|
||||
dw #$0288|!FS_COLOR_RED, #$0289|!FS_COLOR_RED, #$0298|!FS_COLOR_RED, #$0299|!FS_COLOR_RED
|
||||
dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED, #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED
|
||||
;MIRROR
|
||||
dw #$028A|!FS_COLOR_BLUE, #$028B|!FS_COLOR_BLUE, #$029A|!FS_COLOR_BLUE, #$029B|!FS_COLOR_BLUE
|
||||
dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE, #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE
|
||||
;BOOTS
|
||||
dw #$028C|!FS_COLOR_BOOTS, #$028D|!FS_COLOR_BOOTS, #$029C|!FS_COLOR_BOOTS, #$029D|!FS_COLOR_BOOTS
|
||||
dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS, #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS
|
||||
;GLOVES
|
||||
dw #$028E|!FS_COLOR_BROWN, #$028F|!FS_COLOR_BROWN, #$029E|!FS_COLOR_BROWN, #$029F|!FS_COLOR_BROWN
|
||||
dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN, #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN
|
||||
;FLIPPERS
|
||||
dw #$024E|!FS_COLOR_BLUE, #$024F|!FS_COLOR_BLUE, #$025F|!FS_COLOR_BLUE|!FS_HFLIP, #$025F|!FS_COLOR_BLUE
|
||||
dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE, #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE
|
||||
;PEARL
|
||||
dw #$02A4|!FS_COLOR_RED, #$02A5|!FS_COLOR_RED, #$02B4|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED
|
||||
dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED, #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED
|
||||
;SHIELD
|
||||
dw #$02AD|!FS_COLOR_YELLOW, #$02AE|!FS_COLOR_YELLOW, #$02BD|!FS_COLOR_YELLOW, #$02BE|!FS_COLOR_YELLOW
|
||||
dw #$026D|!FS_COLOR_YELLOW, #$026E|!FS_COLOR_YELLOW, #$027D|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW
|
||||
;TUNIC
|
||||
dw #$02AF|!FS_COLOR_GREEN, #$02AF|!FS_COLOR_GREEN|!FS_HFLIP, #$02BF|!FS_COLOR_GREEN, #$02BF|!FS_COLOR_GREEN|!FS_HFLIP
|
||||
dw #$026F|!FS_COLOR_GREEN, #$026F|!FS_COLOR_GREEN|!FS_HFLIP, #$027F|!FS_COLOR_GREEN, #$027F|!FS_COLOR_GREEN|!FS_HFLIP
|
||||
;HEART
|
||||
dw #$02C1|!FS_COLOR_RED, #$02C1|!FS_COLOR_RED|!FS_HFLIP, #$02D1|!FS_COLOR_RED, #$02D1|!FS_COLOR_RED|!FS_HFLIP
|
||||
dw #$0281|!FS_COLOR_RED, #$0281|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0291|!FS_COLOR_RED|!FS_HFLIP
|
||||
;MAP
|
||||
dw #$02C2|!FS_COLOR_YELLOW, #$02C3|!FS_COLOR_YELLOW, #$02D2|!FS_COLOR_YELLOW, #$02D3|!FS_COLOR_YELLOW
|
||||
dw #$0282|!FS_COLOR_YELLOW, #$0283|!FS_COLOR_YELLOW, #$0292|!FS_COLOR_YELLOW, #$0293|!FS_COLOR_YELLOW
|
||||
;COMPASS
|
||||
dw #$02C4|!FS_COLOR_RED, #$02C4|!FS_COLOR_RED|!FS_HFLIP, #$02D4|!FS_COLOR_RED, #$02D4|!FS_COLOR_RED|!FS_HFLIP
|
||||
dw #$0284|!FS_COLOR_RED, #$0284|!FS_COLOR_RED|!FS_HFLIP, #$0294|!FS_COLOR_RED, #$0294|!FS_COLOR_RED|!FS_HFLIP
|
||||
;KEY
|
||||
dw #$026F|!FS_COLOR_YELLOW|!FS_HFLIP, #$026F|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW, #$027F|!FS_COLOR_YELLOW
|
||||
dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW, #$023E|!FS_COLOR_YELLOW, #$023F|!FS_COLOR_YELLOW
|
||||
;--------------------------------------------------------------------------------
|
||||
FileSelect_PlayerSelectText_Top:
|
||||
;db $60, $62, $00, $37
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user