diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 95c9ad4..81e678f 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -112,6 +112,7 @@ incsrc sharedplayerpalettefix.asm ;org $208000 ; bank #$20 org $A08000 ; bank #$A0 +incsrc newitems.asm ; LEAVE THIS AS FIRST incsrc itemdowngrade.asm incsrc bugfixes.asm incsrc darkworldspawn.asm @@ -140,7 +141,6 @@ incsrc catfish.asm incsrc flute.asm incsrc dungeondrops.asm incsrc halfmagicbat.asm -incsrc newitems.asm incsrc mantle.asm incsrc swordswap.asm incsrc scratchpad.asm @@ -149,7 +149,7 @@ incsrc msu.asm incsrc dialog.asm incsrc entrances.asm incsrc clock.asm -incsrc accessability.asm +incsrc accessibility.asm incsrc heartbeep.asm incsrc capacityupgrades.asm warnpc $A18000 @@ -183,6 +183,7 @@ incsrc doorframefixes.asm incsrc music.asm incsrc roomloading.asm incsrc icepalacegraphics.asm +incsrc firebarlayer.asm incsrc glitched.asm incsrc hardmode.asm incsrc goalitem.asm @@ -492,6 +493,9 @@ LoadGearPalettes_bunny: org $02FD95 ; 17D95 - Bank0E.asm: 3742 Note: Different bank LoadGearPalettes_variable: +org $02FEAB +Filter_Majorly_Whiten_Color: + org $05A51D Sprite_SpawnFallingItem: diff --git a/accessability.asm b/accessability.asm deleted file mode 100644 index 46dba25..0000000 --- a/accessability.asm +++ /dev/null @@ -1,36 +0,0 @@ -;================================================================================ -; Accessability 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 -;================================================================================ -!EPILEPSY_TIMER = "$7F5041" -SetEtherFlicker: - LDA.l Seizure_Safety : BNE + - LDA $031D : CMP.b #$0B : RTL - + - LDA !EPILEPSY_TIMER : INC : STA !EPILEPSY_TIMER - - LDA.l Seizure_Safety : CMP !EPILEPSY_TIMER : BNE +++ - LDA.b #$00 : STA !EPILEPSY_TIMER : BRA ++ - +++ - LSR : CMP !EPILEPSY_TIMER : !BLT ++ - SEP #$02 : RTL - ++ - REP #$02 - + -RTL -;================================================================================ -SetAttractMaidenFlicker: - LDA.l Seizure_Safety : BNE + - JSL.l Filter_MajorWhitenMain : LDA $5F : RTL - + - LDA #$00 -RTL -;================================================================================ \ No newline at end of file diff --git a/accessibility.asm b/accessibility.asm new file mode 100644 index 0000000..3504a12 --- /dev/null +++ b/accessibility.asm @@ -0,0 +1,263 @@ +;================================================================================ +; 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 $9A + RTL + ++ + LDA.b #$72 + STA $9A +RTL +;================================================================================ +ConditionalWhitenBg: + LDX.b #$00 + LDA.l DisableFlashing + REP #$20 : BNE + + LDA $00,X + JSR WhitenLoopReal + RTL + + + LDA $00 + JSR WhitenLoopDummy + RTL +;================================================================================ +WhitenLoopReal: + - + 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 $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 ++ ; hookshot cave + CMP.w #$9D : BEQ ++ ; gt right + CMP.w #$9C : BEQ ++ ; gt big room + CMP.w #$A5 : BEQ ++ ; wizzrobes 1 + + + LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 + LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 + BRA +++ + ++ + LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 + LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 + BRA +++ + +++ + + 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 $7EC540 : TAY + LDA $7EC300 : BNE + + TAY + + + TYA : STA $7EC500 + SEP #$30 +RTS +;================================================================================ +WhitenLoopDummy: + - + 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 $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 $7EC3F6 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F6 + LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F8 + BRA +++ + ++ + LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 + LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 + BRA +++ + +++ + 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 $7EC540 : TAY + LDA $7EC300 : BNE + + TAY + + + TYA : STA $7EC500 + SEP #$30 +RTS +;================================================================================ +RestoreBgEther: + LDX.b #$00 + LDA.l DisableFlashing : REP #$20 : BNE + + - + 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 $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 $02FF51 +;================================================================================ +DDMConditionalLightning: + LDA.l DisableFlashing + REP #$20 + BNE + + LDA.w $0000 + LDX.b #$02 + JML $07FA7F + + + LDA.b $00 : LDX.b #$02 : LDY #$00 + - + 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 $07FAAC +;================================================================================ +ConditionalGTFlash: + LDA.l DisableFlashing + REP #$20 + BNE + + LDA $0000 + - + LDA $F9C1, Y : STA $7EC5D0, X + INY #2 + INX #2 : CPX.b #$10 : BNE - + RTL + + + LDA $00 + - + LDA $F9C1, Y : LDA $7EC5D0, X + INY #2 + INX #2 : CPX.b #$10 : BNE - +RTL +;================================================================================ +ConditionalRedFlash: + LDA.l DisableFlashing + REP #$20 : BNE + + LDA $00,X + LDA.w #$1D59 : STA $7EC5DA + LDA.w #$25FF : STA $7EC5DC + LDA.w #$001A + RTL + + + + LDA $00 + LDA.w #$1D59 : LDA $7EC5DA + LDA.w #$25FF : LDA $7EC5DC + LDA.w #$0000 +RTL +;================================================================================ +ConditionalPedAncilla: + LDA.l DisableFlashing + REP #$20 : BNE + + LDA $00,X + LDA $00 : STA $04 + LDA $02 : STA $06 + RTL + + + LDA $00 + LDA $00 : LDA $04 + LDA $02 : LDA $06 +RTL +;================================================================================ +ConditionalChangeGearPalette: + PHY + STA $00 + SEP #$20 + LDA.l DisableFlashing : REP #$20 : BNE + + LDA $00,X + - + LDA [$00] : STA $7EC300, X : STA $7EC500, X + INC $00 : INC $00 + INX #2 + DEY : BPL - + BRA ++ + + + LDA $00 + - + LDA [$00] : LDA $7EC300, X : LDA $7EC500, X + INC $00 : INC $00 + INX #2 + DEY : BPL - + BRA ++ + ++ + PLY ; use what was in Y register to determine which p flags to set + CPY #$000E : BNE + + SEP #$20 + + + SEP #$10 +RTL diff --git a/bookofmudora.asm b/bookofmudora.asm index 84b9610..d5ca495 100644 --- a/bookofmudora.asm +++ b/bookofmudora.asm @@ -16,9 +16,7 @@ DrawLibraryItemGFX: RTL ;-------------------------------------------------------------------------------- SetLibraryItem: - PHA LDY $0E80, X ; Retrieve stored item type - PLA JSL.l ItemSet_Library ; contains thing we wrote over RTL ;-------------------------------------------------------------------------------- diff --git a/bugfixes.asm b/bugfixes.asm index 18cbe2d..4a2dcba 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -32,7 +32,7 @@ RTL ;-------------------------------------------------------------------------------- ;0 = Become (Perma)bunny DecideIfBunny: - LDA $7EF357 : BEQ + : RTL : + + LDA $7EF357 : BNE .done LDA $7EF3CA : AND.b #$40 PHA : LDA.l InvertedMode : BNE .inverted .normal @@ -47,8 +47,8 @@ RTL DecideIfBunnyByScreenIndex: ; If indoors we don't have a screen index. Return non-bunny to make mirror-based ; superbunny work - LDA $1B : BEQ + : RTL : + - LDA $7EF357 : BEQ + : RTL : + + LDA $1B : BNE .done + LDA $7EF357 : BNE .done LDA $8A : AND.b #$40 : PHA LDA.l InvertedMode : BNE .inverted .normal @@ -114,12 +114,13 @@ RTS FixFrogSmith: LDA.l $7EF3CA : BNE .darkWorld LDA.l $7EF3CC : CMP.b #$07 : BNE .done - LDA.b #$08 : STA.l $7EF3CC ; make frog into smith in light world + LDA.b #$08 ; make frog into smith in light world BRA .loadgfx .darkWorld LDA.l $7EF3CC : CMP.b #$08 : BNE .done - LDA.b #$07 : STA.l $7EF3CC ; make smith into frog in dark world + LDA.b #$07 ; make smith into frog in dark world .loadgfx + STA.l $7EF3CC JSL Tagalong_LoadGfx .done RTL @@ -137,12 +138,11 @@ RTL ; Fix crystal not spawning when using somaria vs boss TryToSpawnCrystalUntilSuccess: STX $02D8 ; what we overwrote - JSL AddAncillaLong : BCC .spawned ; a clear carry flag indicates success - .failed - RTL - .spawned + JSL AddAncillaLong : BCS .failed ; a clear carry flag indicates success +.spawned STZ $AE ; the "trying to spawn crystal" flag STZ $AF ; the "trying to spawn pendant" flag +.failed RTL ;-------------------------------------------------------------------------------- @@ -173,22 +173,22 @@ CMP.w #$030E : BEQ .new ; opening dungeon map CMP.w #$070E : BEQ .new ; opening overworld map .original - - lda [$00] - sta $7ec300, x - sta $7ec500, x - inc $00 : inc $00 - inx #2 - dey - bpl - + LDA [$00] + STA $7EC300, X + STA $7EC500, X + INC $00 : INC $00 + INX #2 + DEY + BPL - RTL .new - - lda [$00] - sta $7ec500, x - inc $00 : inc $00 - inx #2 - dey - bpl - + LDA [$00] + STA $7EC500, X + INC $00 : INC $00 + INX #2 + DEY + BPL - RTL ;-------------------------------------------------------------------------------- diff --git a/build_linux.sh b/build_linux.sh new file mode 100755 index 0000000..1b6c338 --- /dev/null +++ b/build_linux.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +rm ../working.sfc +cp ../alttp.sfc ../working.sfc +asar LTTP_RND_GeneralBugfixes.asm ../working.sfc diff --git a/c2e3e.bin b/c2e3e.bin index 9675a12..5d75fdd 100644 Binary files a/c2e3e.bin and b/c2e3e.bin differ diff --git a/c2e3e.gfx b/c2e3e.gfx index 1298f28..811afe1 100644 Binary files a/c2e3e.gfx and b/c2e3e.gfx differ diff --git a/capacityupgrades.asm b/capacityupgrades.asm index 59e4693..cdd343f 100644 --- a/capacityupgrades.asm +++ b/capacityupgrades.asm @@ -6,7 +6,8 @@ ;-------------------------------------------------------------------------------- IncrementBombs: LDA !BOMB_UPGRADES ; get bomb upgrades - !ADD.l StartingMaxBombs : DEC + !ADD.l StartingMaxBombs : BEQ + ; Skip if we can't have bombs + DEC CMP !BOMB_CURRENT diff --git a/catfish.asm b/catfish.asm index f58d9f1..ee55c48 100644 --- a/catfish.asm +++ b/catfish.asm @@ -5,8 +5,7 @@ LoadCatfishItemGFX: LDA.l CatfishItem_Player : STA !MULTIWORLD_SPRITEITEM_PLAYER_ID LDA.l $1DE185 ; location randomizer writes catfish item to - JSL.l PrepDynamicTile -RTL + JML PrepDynamicTile ;-------------------------------------------------------------------------------- DrawThrownItem: LDA $8A : CMP.b #$81 : BNE .catfish @@ -20,8 +19,7 @@ DrawThrownItem: LDA.l $1DE185 ; location randomizer writes catfish item to .draw - JSL.l DrawDynamicTile -RTL + JML DrawDynamicTile ;-------------------------------------------------------------------------------- MarkThrownItem: PHA diff --git a/clock.asm b/clock.asm index 8fa0c3e..4e853d1 100644 --- a/clock.asm +++ b/clock.asm @@ -66,8 +66,7 @@ endmacro Clock_Test: JSL.l Clock_Init - JSL.l Clock_IsSupported -RTL + JML.l Clock_IsSupported ;-------------------------------------------------------------------------------- ; Clock_Init @@ -112,11 +111,10 @@ Clock_IsSupported: PHA : PHX LDX #$00; - - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ + ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : BRA .done : ++ ; if we've read 14 bytes with no success, unset carry and exit - INX - BRA - : + - SEC ; found a clock chip + 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 @@ -144,7 +142,7 @@ Clock_QuickStamp: LDX #$00; - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : BRL .done : ++ ; if we've read 14 bytes with no success, unset carry and exit + 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 @@ -197,9 +195,9 @@ Multiply_A16Y8: CLC ADC $4216 LDY $4217 - BCC carry_bit + BCC .carry_bit INY - carry_bit: +.carry_bit: XBA REP #$20 ; set 16-bit accumulator RTL @@ -226,7 +224,7 @@ Clock_GetTime: LDX #$00; - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : BRL .done : ++ ; if we've read 14 bytes with no success, unset carry and exit + 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 diff --git a/compasses.asm b/compasses.asm index 845b4eb..d9fae57 100644 --- a/compasses.asm +++ b/compasses.asm @@ -4,11 +4,11 @@ DrawDungeonCompassCounts: LDX $1B : BNE + : RTL : + ; Skip if outdoors - LDX $040C : CPX.b #$FF : BNE + : RTL : + ; Skip if not in a dungeon + LDX $040C : CPX.b #$FF : BEQ .done ; Skip if not in a dungeon CMP.w #$0002 : BEQ ++ ; if CompassMode==2, we don't check for the compass LDA $7EF364 : AND.l .item_masks, X ; Load compass values to A, mask with dungeon item masks - BNE + : RTL : + ; skip if we don't have compass + BEQ .done ; skip if we don't have compass ++ LDA $040C : LSR diff --git a/creditscharmapbighi.txt b/creditscharmapbighi.txt new file mode 100644 index 0000000..e7f81bc --- /dev/null +++ b/creditscharmapbighi.txt @@ -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 \ No newline at end of file diff --git a/creditscharmapbiglo.txt b/creditscharmapbiglo.txt new file mode 100644 index 0000000..6e70494 --- /dev/null +++ b/creditscharmapbiglo.txt @@ -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 \ No newline at end of file diff --git a/creditscharmapsmall_green.txt b/creditscharmapsmall_green.txt new file mode 100644 index 0000000..e86db3d --- /dev/null +++ b/creditscharmapsmall_green.txt @@ -0,0 +1,27 @@ + =9F +A=38 +B=39 +C=3A +D=3B +E=3C +F=3D +G=3E +H=3F +I=40 +J=41 +K=42 +L=43 +M=44 +N=45 +O=46 +P=47 +Q=48 +R=49 +S=4A +T=4B +U=4C +V=4D +W=4E +X=4F +Y=50 +Z=51 \ No newline at end of file diff --git a/creditscharmapsmall_red.txt b/creditscharmapsmall_red.txt new file mode 100644 index 0000000..72c3092 --- /dev/null +++ b/creditscharmapsmall_red.txt @@ -0,0 +1,27 @@ + =9F +A=00 +B=01 +C=02 +D=03 +E=04 +F=05 +G=06 +H=07 +I=08 +J=09 +K=0A +L=0B +M=0C +N=0D +O=0E +P=0F +Q=10 +R=11 +S=12 +T=13 +U=14 +V=15 +W=16 +X=17 +Y=18 +Z=19 \ No newline at end of file diff --git a/creditscharmapsmall_yellow.txt b/creditscharmapsmall_yellow.txt new file mode 100644 index 0000000..ee3714d --- /dev/null +++ b/creditscharmapsmall_yellow.txt @@ -0,0 +1,27 @@ + =9F +A=1A +B=1B +C=1C +D=1D +E=1E +F=1F +G=20 +H=21 +I=22 +J=23 +K=24 +L=25 +M=26 +N=27 +O=28 +P=29 +Q=2A +R=2B +S=2C +T=2D +U=2E +V=2F +W=30 +X=31 +Y=32 +Z=33 \ No newline at end of file diff --git a/crypto.asm b/crypto.asm index e28580a..120344f 100644 --- a/crypto.asm +++ b/crypto.asm @@ -192,7 +192,7 @@ XXTEA_Decode: LDA.w !sum : !SUB.l CryptoDelta : STA.w !sum LDA.w !sum+2 : SBC.l CryptoDelta+2 : STA.w !sum+2 - DEC !rounds : BEQ + : BRL --- : + ; } while (--rounds); + DEC !rounds : BEQ + : JMP --- : + ; } while (--rounds); PLB : PLP RTL diff --git a/darkworldspawn.asm b/darkworldspawn.asm index 70e177c..693bab6 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -4,8 +4,7 @@ DarkWorldSaveFix: LDA.b #$70 : PHA : PLB ; thing we wrote over - data bank change JSL.l MasterSwordFollowerClear - JSL.l StatSaveCounter -RTL + JML.l StatSaveCounter ;-------------------------------------------------------------------------------- DoWorldFix: LDA InvertedMode : BEQ + @@ -14,12 +13,12 @@ DoWorldFix: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA $7EF353 : AND #$02 : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point - LDA $7EF3C5 : CMP.b #$03 : !BLT .aga1Alive ; check if agahnim 1 is alive - BRA .done - .noMirror + LDA $7EF3C5 : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .aga1Alive - LDA #$00 : STA $7EF3CA ; set flag to light world - LDA $7EF3CC : CMP #$07 : BNE + : LDA.b #$08 : STA $7EF3CC : + ; convert frog to dwarf + LDA #$00 + .noMirror + STA $7EF3CA ; set flag to light world + LDA $7EF3CC : CMP #$07 : BNE .done : INC : STA $7EF3CC ; convert frog to dwarf .done RTL ;-------------------------------------------------------------------------------- @@ -29,8 +28,7 @@ SetDeathWorldChecked: + LDA $1B : BEQ .outdoors LDA $040C : CMP #$FF : BNE .dungeon - LDA $A0 : BNE ++ - LDA $A1 : BNE ++ ; Prevent cheesing your way to top of pyramid by bombing yourself at High stakes chest game. + LDA $A0 : ORA $A1 : BNE ++ LDA GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors @@ -42,7 +40,7 @@ JMP DoWorldFix_skip_mirror_check .pyramid LDA #$40 : STA $7EF3CA ; set flag to dark world - LDA $7EF3CC : CMP #$08 : BNE + : LDA.b #$07 : STA $7EF3CC : + ; convert dwarf to frog + LDA $7EF3CC : CMP #$08 : BNE .done : DEC : STA $7EF3CC : + ; convert dwarf to frog .done RTL ;================================================================================ @@ -50,15 +48,13 @@ DoWorldFix_Inverted: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA $7EF353 : AND #$02 : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point - LDA $7EF3C5 : CMP.b #$03 : !BLT .aga1Alive ; check if agahnim 1 is alive - BRA .done + LDA $7EF3C5 : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .noMirror .aga1Alive LDA #$40 : STA $7EF3CA ; set flag to dark world LDA $7EF3CC - CMP #$07 : BEQ .clear ; clear frog - CMP #$08 : BEQ .clear ; clear dwarf - consider flute implications - BRA .done + CMP #$07 : BNE .done ; clear frog + CMP #$08 : BNE .done ; clear dwarf - consider flute implications .clear LDA.b #$00 : STA $7EF3CC ; clear follower .done @@ -67,8 +63,7 @@ RTL SetDeathWorldChecked_Inverted: LDA $1B : BEQ .outdoors LDA $040C : CMP #$FF : BNE .dungeon - LDA $A0 : BNE ++ - LDA $A1 : BNE ++ ; Prevent cheesing your way to top of castle by bombing yourself at High stakes chest game. + LDA $A0 : ORA $A1 : BNE ++ LDA GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors @@ -95,16 +90,15 @@ RTL ;-------------------------------------------------------------------------------- MasterSwordFollowerClear: LDA $7EF3CC - CMP #$0E : BEQ .clear ; clear master sword follower -RTL - .clear + CMP #$0E : BNE .exit ; clear master sword follower LDA.b #$00 : STA $7EF3CC ; clear follower -RTL +.exit + RTL ;-------------------------------------------------------------------------------- FixAgahnimFollowers: LDA.b #$00 : STA $7EF3CC ; clear follower - JSL PrepDungeonExit ; thing we wrote over -RTL + JML PrepDungeonExit ; thing we wrote over + ;-------------------------------------------------------------------------------- macro SetMinimum(base,filler,compare) LDA.l : !SUB.l : !BLT ?done @@ -112,7 +106,8 @@ macro SetMinimum(base,filler,compare) ?done: endmacro RefreshRainAmmo: - LDA $7EF3C5 : CMP.b #$01 : BEQ + : RTL : + ; check if we're in rain state + LDA $7EF3C5 : CMP.b #$01 : BEQ .rain ; check if we're in rain state + RTL .rain LDA $7EF3C8 + CMP.b #$03 : BNE + ; Uncle @@ -137,14 +132,14 @@ RTL !INFINITE_BOMBS = "$7F50C9" !INFINITE_MAGIC = "$7F50CA" SetEscapeAssist: - LDA $7EF3C5 : CMP.b #$01 : BNE .notrain ; check if we're in rain state + LDA $7EF3C5 : CMP.b #$01 : BNE .no_train ; check if we're in rain state .rain LDA.l EscapeAssist BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + BRA ++ - .notrain + .no_train ; choo choo LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA !INFINITE_BOMBS : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : + @@ -153,8 +148,8 @@ RTL ;-------------------------------------------------------------------------------- SetSilverBowMode: LDA SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode - LDA $7EF340 : CMP.b #$3 : !BLT + - !SUB.b #$02 : STA $7EF340 + LDA $7EF340 : CMP.b #$3 : BCC + + SBC.b #$02 : STA $7EF340 + RTL ;================================================================================ diff --git a/dialog.asm b/dialog.asm index 3216fe0..28962ba 100644 --- a/dialog.asm +++ b/dialog.asm @@ -82,14 +82,13 @@ macro LoadDialogAddress(address) PHB : PHK : PLB SEP #$20 ; set 8-bit accumulator REP #$10 ; set 16-bit index registers - LDA $00 : PHA - LDA $01 : PHA + PEI ($00) LDA $02 : PHA STZ $1CF0 : STZ $1CF1 ; reset decompression buffer LDA.b #$01 : STA $7F5035 ; set flag %CopyDialog(
) PLA : STA $02 - PLA : STA $01 + REP #$20 PLA : STA $00 PLB PLP @@ -132,61 +131,60 @@ FreeDungeonItemNotice: PHB : PHK : PLB SEP #$20 ; set 8-bit accumulator REP #$10 ; set 16-bit index registers - LDA $00 : PHA - LDA $01 : PHA + PEI ($00) LDA $02 : PHA ;-------------------------------- - LDA.l FreeItemText : BNE + : BRL .skip : + + LDA.l FreeItemText : BNE + : JMP .skip : + LDA #$00 : STA $7F5010 ; initialize scratch - LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for general small key + LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key LDA !ITEM_TEMPORARY : CMP.b #$24 : BNE + ; general small key %CopyDialog(Notice_SmallKeyOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done - + : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for general compass + JMP .done + + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass LDA !ITEM_TEMPORARY : CMP.b #$25 : BNE + ; general compass %CopyDialog(Notice_CompassOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done - + : LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; show message for general map + JMP .done + + : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map LDA !ITEM_TEMPORARY : CMP.b #$33 : BNE + ; general map %CopyDialog(Notice_MapOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done - + : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for general big key + JMP .done + + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key LDA !ITEM_TEMPORARY : CMP.b #$32 : BNE + ; general big key %CopyDialog(Notice_BigKeyOf) LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER %CopyDialog(Notice_Self) - BRL .done + JMP .done + - LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; show message for dungeon map + LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map LDA !ITEM_TEMPORARY : AND.b #$F0 ; looking at high bits only CMP.b #$70 : BNE + ; map of... %CopyDialog(Notice_MapOf) - BRL .dungeon - + : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for dungeon compass + JMP .dungeon + + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... %CopyDialog(Notice_CompassOf) - BRL .dungeon - + : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for dungeon big key + JMP .dungeon + + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) BRA .dungeon - + : LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for dungeon small key + + : 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 ++ : BRL .skip : ++ + 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 + - BRL .skip ; it's not something we are going to give a notice for + JMP .skip ; it's not something we are going to give a notice for .dungeon LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER @@ -199,31 +197,31 @@ FreeDungeonItemNotice: + LDA $7F5011 CMP.b #$00 : BNE + ; ...light world - %CopyDialog(Notice_LightWorld) : BRL .done + %CopyDialog(Notice_LightWorld) : JMP .done + : CMP.b #$01 : BNE + ; ...dark world - %CopyDialog(Notice_DarkWorld) : BRL .done + %CopyDialog(Notice_DarkWorld) : JMP .done + : CMP.b #$02 : BNE + ; ...ganon's tower - %CopyDialog(Notice_GTower) : BRL .done + %CopyDialog(Notice_GTower) : JMP .done + : CMP.b #$03 : BNE + ; ...turtle rock - %CopyDialog(Notice_TRock) : BRL .done + %CopyDialog(Notice_TRock) : JMP .done + : CMP.b #$04 : BNE + ; ...thieves' town - %CopyDialog(Notice_Thieves) : BRL .done + %CopyDialog(Notice_Thieves) : JMP .done + : CMP.b #$05 : BNE + ; ...tower of hera - %CopyDialog(Notice_Hera) : BRL .done + %CopyDialog(Notice_Hera) : JMP .done + : CMP.b #$06 : BNE + ; ...ice palace - %CopyDialog(Notice_Ice) : BRL .done + %CopyDialog(Notice_Ice) : JMP .done + : CMP.b #$07 : BNE + ; ...skull woods - %CopyDialog(Notice_Skull) : BRL .done + %CopyDialog(Notice_Skull) : JMP .done + : CMP.b #$08 : BNE + ; ...misery mire - %CopyDialog(Notice_Mire) : BRL .done + %CopyDialog(Notice_Mire) : JMP .done + : CMP.b #$09 : BNE + ; ...dark palace - %CopyDialog(Notice_PoD) : BRL .done + %CopyDialog(Notice_PoD) : JMP .done + : CMP.b #$0A : BNE + ; ...swamp palace - %CopyDialog(Notice_Swamp) : BRL .done + %CopyDialog(Notice_Swamp) : JMP .done + : CMP.b #$0B : BNE + ; ...agahnim's tower - %CopyDialog(Notice_AgaTower) : BRL .done + %CopyDialog(Notice_AgaTower) : JMP .done + : CMP.b #$0C : BNE + ; ...desert palace - %CopyDialog(Notice_Desert) : BRL .done + %CopyDialog(Notice_Desert) : JMP .done + : CMP.b #$0D : BNE + ; ...eastern palace %CopyDialog(Notice_Eastern) : BRA .done + : CMP.b #$0E : BNE + ; ...hyrule castle @@ -235,27 +233,19 @@ FreeDungeonItemNotice: STZ $1CF0 : STZ $1CF1 ; reset decompression buffer LDA.b #$01 : STA $7F5035 ; set alternate dialog flag - LDA.b #$01 : STA $7F509F + STA $7F509F ;-------------------------------- - PLA : STA $02 - PLA : STA $01 - PLA : STA $00 - PLB - PLP - PLY : PLX : PLA - ;JSL.l Main_ShowTextMessage_Alt -RTL - .skip - ;-------------------------------- PLA : STA $02 - PLA : STA $01 + 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 @@ -263,13 +253,14 @@ DialogResetSelectionIndex: RTL ;-------------------------------------------------------------------------------- DialogItemReceive: - BCS .noMessage ; if doubling the item value overflowed it must be a rando item - CPY #$98 : !BLT + ;if the item is $4C or greater it must be a rando item - .noMessage - LDA.w #$FFFF - BRA .done - + - LDA.w Ancilla_ReceiveItem_item_messages, Y + BCS .nomessage ; if doubling the item value overflowed 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 + + BRA .done + +++ LDA.w Ancilla_ReceiveItem_item_messages, Y .done CMP.w #$FFFF RTL @@ -289,12 +280,13 @@ RTL RTL ;-------------------------------------------------------------------------------- DialogGanon1: - JSL.l CheckGanonVulnerability : BCS + - REP #$20 : LDA.w #$018C : STA $1CF0 : SEP #$20 - BRA ++ - + - REP #$20 : LDA.w #$016D : STA $1CF0 : SEP #$20 - ++ + JSL.l CheckGanonVulnerability + REP #$20 + LDA.w #$018C + BCC + + LDA.w #$016D ++ STA $1CF0 + SEP #$20 JSL.l Sprite_ShowMessageMinimal_Alt RTL ;-------------------------------------------------------------------------------- @@ -307,28 +299,30 @@ RTL ; s = silver arrow bow ; p = 2nd progressive bow DialogGanon2: - JSL.l CheckGanonVulnerability : BCS + - REP #$20 : LDA.w #$018D : STA $1CF0 : SEP #$20 - BRA ++ + JSL.l CheckGanonVulnerability + + REP #$20 + BCS + + LDA.w #$018D : BRA ++ + - LDA.l $7EF38E : AND #$80 : BNE + ; branch if bow - REP #$20 : LDA.w #$0192 : STA $1CF0 : SEP #$20 ; no bow - BRA ++ + LDA.l $7EF38E + + BIT.w #$0080 : BNE + ; branch if bow + LDA.w #$0192 : BRA ++ + - LDA.l $7EF38E : AND #$40 : BEQ + ; branch if no silvers - REP #$20 : LDA.w #$0195 : STA $1CF0 : SEP #$20 ;has silvers - BRA ++ + BIT.w #$0040 : BEQ + ; branch if no silvers + LDA.w #$0195 : BRA ++ + - LDA.l $7EF38E : AND #$20 : BNE + ; branch if p bow - REP #$20 : LDA.w #$0194 : STA $1CF0 : SEP #$20 ; bow, no-silvers, no-p-bow - BRA ++ + BIT.w #$0020 : BNE + ; branch if p bow + LDA.w #$0194 : BRA ++ + - LDA.l $7EF38E : AND #$80 : BEQ + ; branch if no bow - REP #$20 : LDA.w #$0193 : STA $1CF0 : SEP #$20 ; bow, no-silvers, p-bow - BRA ++ + BIT.w #$0080 : BEQ + ; branch if no bow + LDA.w #$0193 : BRA ++ + - REP #$20 : LDA.w #$016E : STA $1CF0 : SEP #$20 ; both bow and no bow. impossible. + LDA.w #$016E ++ + STA $1CF0 + SEP #$20 JSL.l Sprite_ShowMessageMinimal_Alt RTL ;-------------------------------------------------------------------------------- @@ -336,21 +330,20 @@ DialogEtherTablet: PHA LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped - - PLA : JSL Sprite_ShowMessageUnconditional ; Wacky Hylian Text -RTL + PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text + BIT $F4 : BVC - ; Show normal text if Y is not pressed LDA.l AllowHammerTablets : BEQ ++ LDA $7EF34B : BEQ .yesText : BRA .noText ++ - LDA $7EF359 : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText + LDA $7EF359 : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText ;++ .yesText PLA - LDA.b #$0c + LDA.b #$0C LDY.b #$01 - JSL Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) -RTL + JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) + .noText PLA RTL @@ -359,8 +352,7 @@ DialogBombosTablet: PHA LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped - - PLA : JSL Sprite_ShowMessageUnconditional ; Wacky Hylian Text -RTL + PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text + BIT $F4 : BVC - ; Show normal text if Y is not pressed LDA.l AllowHammerTablets : BEQ ++ @@ -372,8 +364,8 @@ RTL PLA LDA.b #$0D LDY.b #$01 - JSL Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) -RTL + JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) + .noText PLA RTL @@ -382,21 +374,34 @@ DialogSahasrahla: LDA.l $7EF374 : AND #$04 : BEQ + ;Check if player has green pendant LDA.b #$2F LDY.b #$00 - JSL.l Sprite_ShowMessageUnconditional + JML Sprite_ShowMessageUnconditional + RTL ;-------------------------------------------------------------------------------- DialogBombShopGuy: - LDA.l $7EF37A : AND #$05 : CMP #$05 : BEQ + ;Check if player has crystals 5 & 6 - LDA.b #$15 - LDY.b #$01 - JSL.l Sprite_ShowMessageUnconditional - RTL + LDY.b #$15 + LDA.l $7EF37A : AND #$05 : CMP #$05 : BNE + ;Check if player has crystals 5 & 6 + INY ; from 15 to 16 + - LDA.b #$16 - LDY.b #$01 + TYA + LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional RTL + +;--------------------------------------------------------------------------------------------------- +AgahnimAsksAboutPed: + LDA.l InvincibleGanon + CMP.b #$06 : BNE .vanilla + + LDA.l $7EF300 ; check ped flag + AND.b #$40 + BNE .vanilla + + LDA.b #$8C ; message 018C for no ped + STA.w $1CF0 + +.vanilla + JML $05FA8E ; Sprite_ShowMessageMinimal ;-------------------------------------------------------------------------------- Main_ShowTextMessage_Alt: ; Are we in text mode? If so then end the routine. @@ -405,26 +410,25 @@ Sprite_ShowMessageMinimal_Alt: STZ $11 PHX : PHY - LDA.b $00 : PHA - LDA.b $01 : PHA + PEI ($00) LDA.b $02 : PHA LDA.b #$1C : STA.b $02 REP #$30 LDA.w $1CF0 : ASL : TAX - LDA.l $7f71c0, X + LDA.l $7F71C0, X STA.b $00 SEP #$30 LDY.b #$00 - LDA [$00], Y : CMP.b #$fe : BNE + - INY : LDA [$00], Y : CMP.b #$6e : BNE + + 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 #$FE : BNE + + INY : LDA [$00], Y : CMP.b #$6B : BNE + INY : LDA [$00], Y : CMP.b #$04 : BNE + STZ $1CE8 - BRL .end + JMP .end + STZ $0223 ; Otherwise set it so we are in text mode. diff --git a/dpadinvert.asm b/dpadinvert.asm index 130455f..e030526 100644 --- a/dpadinvert.asm +++ b/dpadinvert.asm @@ -6,7 +6,7 @@ ; Filtered Joypad 1 Register: [BYST | udlr] [AXLR | ????] !INVERT_DPAD = "$7F50CB" InvertDPad: - LDA !INVERT_DPAD : BNE + : BRL .normal : + + LDA !INVERT_DPAD : BNE + : JMP .normal : + DEC : BEQ .dpadOnly DEC : BEQ .buttonsOnly DEC : BEQ .invertBoth diff --git a/dr_lobby.asm b/dr_lobby.asm index cf3ed69..2c1b9c8 100644 --- a/dr_lobby.asm +++ b/dr_lobby.asm @@ -1,7 +1,7 @@ CheckDarkWorldSanc: STA $A0 : STA $048E ; what we wrote over - LDA.l InvertedMode : BNE + - LDA.l SancDarkWorldFlag : BEQ + + LDA.l InvertedMode : AND #$00FF : BNE + + LDA.l SancDarkWorldFlag : AND #$00FF : BEQ + SEP #$30 LDA $A0 : CMP #$12 : BNE ++ LDA.l $7EF357 : BNE ++ ; moon pearl? diff --git a/dungeondrops.asm b/dungeondrops.asm index ac40e11..c33e1cc 100644 --- a/dungeondrops.asm +++ b/dungeondrops.asm @@ -3,7 +3,7 @@ ;-------------------------------------------------------------------------------- DropSafeDungeon: LDA $040C : CMP #$08 : BEQ + - LDA $01C6FC, X : JSL Sprite_SpawnFallingItem + LDA $01C6FC, X : JML Sprite_SpawnFallingItem + RTL ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/enemy_adjustments.asm b/enemy_adjustments.asm index a0206f2..ec0411f 100644 --- a/enemy_adjustments.asm +++ b/enemy_adjustments.asm @@ -3,21 +3,14 @@ ; make sure bats always load LW stats ;-------------------------------------------------------------------------------- NewBatInit: - ;check if map id == 240 or 241 - LDA $A0 : CMP #$F0 : BNE + ;oldman cave1 - BRA .light_world - + - CMP #$F1 : BNE + ;oldman cave2 - BRA .light_world - + - CMP #$B0 : BNE + ;agahnim statue keese - BRA .light_world - + - CMP #$D0 : BNE + ;agahnim darkmaze - BRA .light_world - + - CPY #$00 : BEQ .light_world + ;check if map id == 240 or 241 + 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 $0CD2, X LDA.b #$04 : STA $0E50, X RTL diff --git a/entrances.asm b/entrances.asm index 9ffd45b..a76ae17 100644 --- a/entrances.asm +++ b/entrances.asm @@ -4,9 +4,7 @@ ;-------------------------------------------------------------------------------- LockAgahnimDoors: LDA.l AgahnimDoorStyle : AND.w #$00FF - BNE + - ;#$0 = Never Locked - LDA.w #$0000 : RTL + BEQ .exit ; don't need to load 0, because we'd have it if we reached here + : CMP.w #$0001 : BNE + LDA $7EF3C5 : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip JSR.w LockAgahnimDoorsCore : RTL @@ -37,7 +35,7 @@ LockAgahnimDoors: .unlock LDA.w #$0000 ; fallback to never locked - +.exit RTL ;-------------------------------------------------------------------------------- LockAgahnimDoorsCore: @@ -72,7 +70,7 @@ AllowStartFromSingleEntranceCave: LDA.l StartingAreaExitOffset, X BNE + - BRL .done + JMP .done + DEC @@ -204,14 +202,14 @@ RTL AnimatedEntranceFix: ;when an entrance animation tries to start PHA LDA.l InvertedMode : BEQ + ;If we are in inverted mode - LDA $8A : AND.b #$40 : BNE + ;and in the light world - PLA + PLA + BIT $8A : BVS ++ ; and in the light world STZ $04C6 ; skip it. LDA #$00 RTL + PLA - STA $02E4 ;what we wrote over +++ STA $02E4 ;what we wrote over STA $0FC1 ;what we wrote over STA $0710 ;what we wrote over RTL diff --git a/events.asm b/events.asm index 5cdb884..e630da7 100644 --- a/events.asm +++ b/events.asm @@ -11,8 +11,7 @@ OnPrepFileSelect: RTL + JSL.l LoadAlphabetTilemap - JSL.l LoadFullItemTiles -RTL + JML.l LoadFullItemTiles ;-------------------------------------------------------------------------------- OnDrawHud: JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter @@ -81,7 +80,12 @@ RTL ;-------------------------------------------------------------------------------- OnAga2Defeated: JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first - JSL.l IncrementAgahnim2Sword + JML.l IncrementAgahnim2Sword +;-------------------------------------------------------------------------------- +OnFileCreation: + TAX ; what we wrote over + LDA StartingEquipment+$4C : STA $700340+$4C ; copy starting equipment swaps to file select screen + LDA StartingEquipment+$4E : STA $700340+$4E RTL ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" @@ -91,7 +95,7 @@ OnFileLoad: REP #$20 : LDA.l $30F010 : STA.l $7EF33E : SEP #$20 LDA MultiClientFlags : STA.l $7EF33D - LDA.b #$07 : STA $210c ; Restore screen 3 to normal tile area + LDA.b #$07 : STA $210C ; Restore screen 3 to normal tile area LDA !FRESH_FILE_MARKER : BNE + JSL.l OnNewFile @@ -158,8 +162,16 @@ OnNewFile: + LDA StartingSword : STA $7EF359 ; set starting sword type - LDA !INVENTORY_SWAP : STA $70038C ; copy starting equipment swaps to file select screen - LDA !INVENTORY_SWAP_2 : STA $70038E + + ; reset some values on new file that are otherwise only reset on hard reset + 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 ;-------------------------------------------------------------------------------- @@ -172,8 +184,8 @@ RTL ;-------------------------------------------------------------------------------- OnLinkDamaged: JSL.l FlipperKill - JSL.l OHKOTimer -RTL + JML.l OHKOTimer + ;-------------------------------------------------------------------------------- OnEnterWater: JSL.l RegisterWaterEntryScreen @@ -188,8 +200,8 @@ OnLinkDamagedFromPit: RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPitOutdoors: - JSL.l OHKOTimer ; make sure this is last -RTL + JML.l OHKOTimer ; make sure this is last + ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" OnOWTransition: @@ -212,16 +224,16 @@ OnLoadDuckMap: RTL + LDA.b #$00 : STA !DARK_DUCK_TEMP - JSL OverworldMap_DarkWorldTilemap -RTL + JML OverworldMap_DarkWorldTilemap + ;-------------------------------------------------------------------------------- PreItemGet: LDA.b #$01 : STA !ITEM_BUSY ; mark item as busy RTL ;-------------------------------------------------------------------------------- PostItemGet: - JSL.l MaybeWriteSRAMTrace -RTL + JML.l MaybeWriteSRAMTrace + ;-------------------------------------------------------------------------------- PostItemAnimation: LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished diff --git a/fairyfixes.asm b/fairyfixes.asm index c62ea3a..5364376 100644 --- a/fairyfixes.asm +++ b/fairyfixes.asm @@ -27,8 +27,7 @@ RTL FairyPond_Init: LDA.l Restrict_Ponds : BNE + LDA.b #$48 - JSL.l Sprite_ShowMessageFromPlayerContact - RTL + JML.l Sprite_ShowMessageFromPlayerContact + PHY : JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC + LDA $7EF35C : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++ @@ -56,8 +55,8 @@ RTL ;-------------------------------------------------------------------------------- HappinessPond_Check: LDA $A0 : CMP.b #$15 ;what we wrote over - PHP BNE .done + PHP LDA.b #$72 JSL Sprite_SpawnDynamically @@ -83,6 +82,6 @@ HappinessPond_Check: STZ $0DD0, X ; self terminate - .done PLP + .done RTL diff --git a/fileselect.asm b/fileselect.asm index 3d9f551..a494226 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -113,7 +113,7 @@ JMP DrawItem DrawPlayerFile: - LDA $1A : AND.w #$0001 : BEQ + : BRA .normal : + + LDA $1A : AND.w #$0001 : BNE .normal JSR DrawPlayerFileShared INC $0710 ; Suppress animated tile updates for this frame @@ -633,15 +633,15 @@ AltBufferTable: STA $1104 ;file 2 top row STA $1144 ;file 2 bottom row STA $1184 ;gap row top - STA $11c4 ;gap row bottom + STA $11C4 ;gap row bottom STA $1204 ;file 3 top row STA $1244 ;file 3 bottom row STA $1284 ;extra gap row top - STA $12c4 ;extra gap row bottom + STA $12C4 ;extra gap row bottom STA $1304 ;extra gap row top STA $1344 ;extra gap row bottom STA $1384 ;extra gap row top - STA $13c4 ;extra gap row bottom + STA $13C4 ;extra gap row bottom ; Set last packet marker LDA.w #$00FF : STA $1402 diff --git a/firebarlayer.asm b/firebarlayer.asm new file mode 100644 index 0000000..f7118b2 --- /dev/null +++ b/firebarlayer.asm @@ -0,0 +1,8 @@ +NewFireBarDamage: +{ + LDA $00EE : CMP $0F20, X : BNE .NotSameLayer + JSL Sprite_AttemptDamageToPlayerPlusRecoilLong + RTL + .NotSameLayer + RTL +} \ No newline at end of file diff --git a/goalitem.asm b/goalitem.asm index 9b5f0df..81351ab 100644 --- a/goalitem.asm +++ b/goalitem.asm @@ -22,33 +22,79 @@ RTL ;Carry clear = ganon invincible ;Carry set = ganon vulnerable CheckGanonVulnerability: - LDA InvincibleGanon : BEQ .success - ;#$00 = Off - + : CMP #$01 : BEQ .fail - ;#$01 = On - + : CMP #$02 : BNE + - ;#$02 = Require All Dungeons - LDA $7EF374 : AND.b #$07 : CMP #$07 : BNE .fail ; require all pendants - LDA $7EF37A : AND.b #$7F : CMP #$7F : BNE .fail ; require all crystals - LDA $7EF3C5 : CMP.b #$03 : !BLT .fail ; require post-aga world state - LDA $7EF2DB : AND.b #$20 : CMP #$20 : BNE .fail ; require aga2 defeated (pyramid hole open) - BRA .success - + : CMP #$04 : BNE + - ;#$04 = Require Crystals - JSL CheckEnoughCrystalsForGanon : !BLT .fail ; require specified number of crystals - BRA .success - + : CMP #$03 : BNE + - ;#$03 = Require Crystals and Aga 2 - JSL CheckEnoughCrystalsForGanon : !BLT .fail ; require specified number of crystals - LDA $7EF2DB : AND.b #$20 : CMP #$20 : BNE .fail ; require aga2 defeated (pyramid hole open) - BRA .success - + : CMP #$05 : BNE + - ;#$05 = Require Goal Items - LDA.l !GOAL_COUNTER : CMP GoalItemRequirement : !BLT .fail ; require specified number of goal items - BRA .success - + -.fail : CLC : RTL -.success : SEC : RTL + PHX + LDA.l InvincibleGanon + ASL + TAX + + ; Carry + ; 0 - invulnerable + ; 1 - vulnerable + JSR (.goals, X) + + PLX + RTL + + +.goals + dw .vulnerable + dw .invulnerable + dw .all_dungeons + dw .crystals_and_aga + dw .crystals + dw .goal_item + dw .light_speed + dw .crystals_and_bosses + dw .bosses_only + +; 00 = always vulnerable +.vulnerable +.success + SEC + RTS + +; 01 = always invulnerable +.invulnerable +.fail + CLC + RTS + +; 02 = All dungeons +.all_dungeons + LDA.l $7EF374 : AND.b #$07 : CMP.b #$07 : BNE .fail ; require all pendants + LDA.l $7EF37A : AND.b #$7F : CMP.b #$7F : BNE .fail ; require all crystals + LDA.l $7EF3C5 : CMP.b #$03 : BCC .fail ; require post-aga world state + LDA.l $7EF2DB : AND.b #$20 : CMP.b #$20 : BNE .fail ; require aga2 defeated (pyramid hole open) + BRA .success + +; 03 = crystals and aga 2 +.crystals_and_aga + LDA.l $7EF2DB : AND.b #$20 : BEQ .fail ; check aga2 first then bleed in + +; 04 = crystals only +.crystals + JSL CheckEnoughCrystalsForGanon + RTS + +; 05 = require goal item +.goal_item + LDA.l !GOAL_COUNTER : CMP GoalItemRequirement + RTS + +; 06 = light speed +.light_speed + BRA .fail + +; 07 = Crystals and bosses +.crystals_and_bosses + JSL CheckEnoughCrystalsForGanon ; check crystals first then bleed in to next + BCC .fail + +; 08 = Crystal bosses but no crystals +.bosses_only + ;LDA.l $7EF2DDB : AND.b #$20 : BEQ .fail ; check aga2 + JMP CheckForCrystalBossesDefeated + ;-------------------------------------------------------------------------------- GetRequiredCrystalsForTower: BEQ + : JSL.l BreakTowerSeal_ExecuteSparkles : + ; thing we wrote over @@ -63,23 +109,105 @@ GetRequiredCrystalsInX: RTL + - TXA : - : CMP.l NumberOfCrystalsRequiredForTower : !BLT + : !SUB.l NumberOfCrystalsRequiredForTower : BRA - : + + TXA - INC : CMP.l NumberOfCrystalsRequiredForTower : BNE + +- CMP.l NumberOfCrystalsRequiredForTower : BCC + + SBC.l NumberOfCrystalsRequiredForTower ; carry guaranteed set + BRA - + + + INC : CMP.l NumberOfCrystalsRequiredForTower : BNE + LDA.b #$08 + : DEC : TAX RTL ;-------------------------------------------------------------------------------- CheckEnoughCrystalsForGanon: - PHX : PHY LDA $7EF37A : JSL CountBits ; the comparison is against 1 less - PLY : PLX CMP.l NumberOfCrystalsRequiredForGanon RTL ;-------------------------------------------------------------------------------- CheckEnoughCrystalsForTower: - PHX : PHY LDA $7EF37A : JSL CountBits ; the comparison is against 1 less - PLY : PLX CMP.l NumberOfCrystalsRequiredForTower RTL + +;--------------------------------------------------------------------------------------------------- +CheckAgaForPed: + LDA.l InvincibleGanon + CMP.b #$06 : BNE .vanilla + +.light_speed + LDA.l $7EF300 ; check ped flag + AND.b #$40 + BEQ .force_blue_ball + +.vanilla ; run vanilla check for phase + LDA.w $0E30, X + CMP.b #$02 + RTL + +.force_blue_ball + LDA.b #$01 : STA.w $0DA0, Y + LDA.b #$20 : STA.w $0DF0, Y + CLC ; skip the RNG check + RTL + +;--------------------------------------------------------------------------------------------------- + +KillGanon: + STA.l $7EF3C5 ; vanilla game state stuff we overwrote + + LDA.l InvincibleGanon + CMP.b #$06 : BNE .exit + +.light_speed + LDA.l $7EF2DB : ORA.b #$20 : STA.l $7EF2DB ; pyramid hole + LDA.b #$08 : STA.l $7EF001 ; kill ganon + LDA.b #$02 : STA.l $7EF357 ; pearl but invisible in menu + +.exit + RTL + +;--------------------------------------------------------------------------------------------------- + +CheckForCrystalBossesDefeated: + PHB : PHX : PHY + + LDA.b #CrystalPendantFlags_2>>16 + PHA : PLB + + REP #$30 + + ; count of number of bosses killed + STZ.b $00 + + LDY.w #10 + +.next_check + LDA.w CrystalPendantFlags_2-2,Y + BIT.w #$0040 + BEQ ++ + + TYA + ASL + TAX + + LDA.l DrawHUDDungeonItems_boss_room_ids-4,X + TAX + LDA.l $7EF000,X + + AND.w #$0800 + BEQ ++ + + INC.b $00 + +++ DEY + BPL .next_check + + SEP #$30 + PLY : PLX : PLB + + LDA.b $00 : CMP.l NumberOfCrystalsRequiredForGanon + + + RTS + diff --git a/halfmagicbat.asm b/halfmagicbat.asm index afca011..0315582 100644 --- a/halfmagicbat.asm +++ b/halfmagicbat.asm @@ -8,8 +8,7 @@ GetMagicBatItem: TAY PHA : LDA MagicBatItem_Player : STA !MULTIWORLD_ITEM_PLAYER_ID : PLA STZ $02E9 ; 0 = Receiving item from an NPC or message - JSL.l Link_ReceiveItem -RTL + JML.l Link_ReceiveItem .normalLogic LDA HalfMagic STA $7EF37B diff --git a/heartpieces.asm b/heartpieces.asm index edee15e..3aa9e79 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -27,7 +27,7 @@ HeartPieceGet: JSL.l $0791B3 ; Player_HaltDashAttackLong JSL.l Link_ReceiveItem CLC ; return false - BRL .done ; finished + JMP .done ; finished .unfinished_heart SEC ; return true @@ -57,7 +57,7 @@ DrawHeartPieceGFX: PHA : PHY LDA !REDRAW : BEQ .skipInit ; skip init if already ready JSL.l HeartPieceSpritePrep - BRL .done ; don't draw on the init frame + JMP .done ; don't draw on the init frame .skipInit LDA $0E80, X ; Retrieve stored item type @@ -185,7 +185,7 @@ LoadHeartPieceRoomValue: LDA $1B : BEQ .outdoors ; check if we're indoors or outdoors .indoors JSL.l LoadIndoorValue - BRL .done + JMP .done .outdoors JSL.l LoadOutdoorValue .done @@ -240,30 +240,30 @@ LoadIndoorValue: LDA $A0 ; these are all decimal because i got them that way CMP.w #225 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Forest_Thieves, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #226 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Lumberjack_Tree, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #234 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Spectacle_Cave, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #283 : BNE + LDA $22 : XBA : AND.w #$0001 ; figure out where link is BNE ++ %GetPossiblyEncryptedItem(HeartPiece_Circle_Bushes, HeartPieceIndoorValues) - BRL .done + JMP .done ++ %GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #294 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #295 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Smith_Pegs, HeartPieceIndoorValues) - BRL .done + JMP .done + CMP.w #135 : BNE + LDA StandingKey_Hera - BRL .done + JMP .done + LDA.w #$0017 ; default to a normal hp .done @@ -286,47 +286,47 @@ LoadOutdoorValue: CMP.w #$03 : BNE + LDA $22 : CMP.w #1890 : !BLT ++ %GetPossiblyEncryptedItem(HeartPiece_Spectacle, HeartPieceOutdoorValues) - BRL .done + JMP .done ++ %GetPossiblyEncryptedItem(EtherItem, SpriteItemValues) - BRL .done + JMP .done + CMP.w #$05 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Mountain_Warp, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$28 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$2A : BNE + %GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$30 : BNE + LDA $22 : CMP.w #512 : !BGE ++ %GetPossiblyEncryptedItem(HeartPiece_Desert, HeartPieceOutdoorValues) - BRL .done + JMP .done ++ %GetPossiblyEncryptedItem(BombosItem, SpriteItemValues) - BRL .done + JMP .done + CMP.w #$35 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$3B : BNE + %GetPossiblyEncryptedItem(HeartPiece_Swamp, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$42 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$4A : BNE + %GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$5B : BNE + %GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$68 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues) - BRL .done + JMP .done + CMP.w #$81 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues) - BRL .done + JMP .done + LDA.w #$0017 ; default to a normal hp .done @@ -353,34 +353,34 @@ LoadBossValue: LDA $A0 ; these are all decimal because i got them that way CMP.w #200 : BNE + %GetPossiblyEncryptedItem(HeartContainer_ArmosKnights, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #51 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Lanmolas, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #7 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Moldorm, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #90 : BNE + %GetPossiblyEncryptedItem(HeartContainer_HelmasaurKing, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #6 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Arrghus, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #41 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Mothula, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #172 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Blind, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #222 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Kholdstare, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #144 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Vitreous, HeartContainerBossValues) - BRL .done + JMP .done + CMP.w #164 : BNE + %GetPossiblyEncryptedItem(HeartContainer_Trinexx, HeartContainerBossValues) - BRL .done + JMP .done + LDA.w #$003E ; default to a normal boss heart .done @@ -394,30 +394,19 @@ CheckIfBossRoom: ;-------------------------------------------------------------------------------- REP #$20 ; set 16-bit accumulator LDA $A0 ; these are all decimal because i got them that way - CMP.w #200 : BNE + - SEC : BRL .done - + CMP.w #51 : BNE + - SEC : BRL .done - + CMP.w #7 : BNE + - SEC : BRL .done - + CMP.w #90 : BNE + - SEC : BRL .done - + CMP.w #6 : BNE + - SEC : BRL .done - + CMP.w #41 : BNE + - SEC : BRL .done - + CMP.w #172 : BNE + - SEC : BRL .done - + CMP.w #222 : BNE + - SEC : BRL .done - + CMP.w #144 : BNE + - SEC : BRL .done - + CMP.w #164 : BNE + - SEC : BRL .done - + + CMP.w #200 : BEQ .done + CMP.w #51 : BEQ .done + CMP.w #7 : BEQ .done + CMP.w #90 : BEQ .done + CMP.w #6 : BEQ .done + CMP.w #41 : BEQ .done + CMP.w #172 : BEQ .done + CMP.w #222 : BEQ .done + CMP.w #144 : BEQ .done + CMP.w #164 : BEQ .done CLC .done - SEP #$20 ; set 8-bit accumulator ++ SEP #$20 ; set 8-bit accumulator RTL ;-------------------------------------------------------------------------------- ;#200 - Eastern Palace - Armos Knights diff --git a/hooks.asm b/hooks.asm index 26c0654..6e5532a 100755 --- a/hooks.asm +++ b/hooks.asm @@ -268,7 +268,9 @@ org $0CCE85 ; <- Bank0C.asm : 1953 (LDA $C8 : ASL A : INC #2 : STA $701FFE) NOP #4 ;-------------------------------------------------------------------------------- org $0CDB4C ; <- Bank0C.asm : 3655 (LDA $C8 : ASL A : INC #2 : STA $701FFE : TAX) -NOP #4 +JSL OnFileCreation +NOP +;Additionally, display inventory swap starting equipment on file select ;-------------------------------------------------------------------------------- org $09F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2) LDA.w #$0002 : NOP @@ -437,10 +439,24 @@ JSL.l OnPrepFileSelect ;-------------------------------------------------------------------------------- ;================================================================================ -; Agahnim 0bb +; Light speed ;-------------------------------------------------------------------------------- -;org $1ED6EF ; <- F56EF - sprite_agahnim.asm : 636 (JSL GetRandomInt : AND.b #$01 : BNE BRANCH_GAMMA) -;NOP #18 + +; Message +org $1ED4FF +JSL AgahnimAsksAboutPed + +; Spam blue balls if ped not pulled +org $1ED6E8 +JSL CheckAgaForPed : NOP + + +; kill ganon when aga dies in light speed +org $00F970 +JSL KillGanon + + + ;-------------------------------------------------------------------------------- ;================================================================================ @@ -725,19 +741,49 @@ dw $0000, $0002, $0004, $0032, $0004, $0006, $0030 ;-------------------------------------------------------------------------------- ;================================================================================ -; Accessability +; Accessibility ;-------------------------------------------------------------------------------- ;org $0AC574 ; <- 54574 - Bank0A.asm : 1797 (LDA $0D : STA $0802, X) ;JSL FlipGreenPendant ;NOP #6 ;-------------------------------------------------------------------------------- -org $08AAE1 ; <- 42AE1 - ancilla_ether_spell.asm : 28 (LDA $031D : CMP.b #$0B) -JSL.l SetEtherFlicker : NOP +org $08AAF9 ; -< 42AF9 - ancilla_ether_spell.asm : 46 (JSL Palette_Restore_BG_From_Flash) +JSL.l RestoreBgEther ;-------------------------------------------------------------------------------- -org $0CF37B ; <- 6737B - Bank0C.asm : 5055 (JSL Filter_MajorWhitenMain) -JSL.l SetAttractMaidenFlicker : NOP #2 +org $02A3F4 ; <- 123F4 - Bank02.asm : 6222 (LDA.b #$72 : BRA .setBrightness) +BRA + : NOP #2 : + +org $02A3FD ; <- 123FD - Bank02.asm : 6233 (LDA.b #$32 : STA $9a) +JSL.l ConditionalLightning ;-------------------------------------------------------------------------------- - +org $1DE9CD ; <- EE9CD - Bank1D.asm : 568 (JSL Filter_Majorly_Whiten_Bg) +JSL.l ConditionalWhitenBg +;-------------------------------------------------------------------------------- +org $08AAED ; <- 42AED - ancilla_ether_spell.asm : 35 (JSL Filter_Majorly_Whiten_Bg) +JSL.l ConditionalWhitenBg +;-------------------------------------------------------------------------------- +org $02FEE6 ; <- 17EE6 - Bank0E.asm : 3907 (RTS) +RTL ; the whiten color routine is only JSL-ed to +;-------------------------------------------------------------------------------- +org $07FA7B ; <- 3FA7B - Bank0E.asm : 4735 (REP #$20 : LDX.b #$02) +JML DDMConditionalLightning +;-------------------------------------------------------------------------------- +org $07FACB ; <- 3FACB - Bank0E.asm : 4773 (REP #$20 : LDA #$F531, Y) +JSL.l ConditionalGTFlash : BRA + : NOP #11 : + +;-------------------------------------------------------------------------------- +org $0AFF48 ; <- 57F48 - Bank0A.asm : 4935 (REP #$20 : LDA $7EC3DA) +JSL.l ConditionalRedFlash : BRA + : NOP #13 : + +;-------------------------------------------------------------------------------- +org $08C2A1 ; <- 442A3 - ancilla_sword_ceremony.asm : 54 (REP #$20) +JSL.l ConditionalPedAncilla : BRA + : NOP #4 : + +;-------------------------------------------------------------------------------- +org $02FDB1 ; <- 17DB1 - Bank0E.asm : 3760 (JSL LoadGearPalette) +JSL.l ConditionalChangeGearPalette : NOP +;-------------------------------------------------------------------------------- +org $02FDCB ; <- 17DCB - Bank0E.asm : 3775 (JSL LoadGearPalette) +JSL.l ConditionalChangeGearPalette : NOP +;-------------------------------------------------------------------------------- +org $02FDE6 ; <- 17DE6 - Bank0E.asm : 3789 (JSL LoadGearPalette) +JSL.l ConditionalChangeGearPalette : NOP ;================================================================================ ; Ice Floor Toggle ;-------------------------------------------------------------------------------- @@ -1692,7 +1738,7 @@ JSL.l ShowDungeonItems : NOP #5 ;================================================================================ org $0DEA5F ; <- 6EA5F - equipment.asm:1679 - (SEP #$30) ;NOP #5 -;BRL .skipCrystalInit +;JMP .skipCrystalInit ;org $0DEAA4 ; <- 6EAA4 - equipment.asm:1706 - (LDA $7EF37A : AND.w #$0001) ;.skipCrystalInit ;================================================================================ @@ -2615,6 +2661,22 @@ CheckIfReading: RTS ;================================================================================ +org $0DB4CA : db $40, $40 ; fire bar statis +org $0DB4A9 : db $50, $50, $6E, $6E ; roller statis +org $0DB4B2 : db $40, $40, $40, $40 ; cannon statis +org $0DB4C3 : db $C0 ; anti fairy statis +org $0DB516 : db $40 ; chain chomp statis + +;-------------------------------------------------------------------------------- +; Keep Firebar Damage on Same Layer +;-------------------------------------------------------------------------------- +org $06F425 +Sprite_AttemptDamageToPlayerPlusRecoilLong: + +org $1ED1B6 +JSL NewFireBarDamage +;================================================================================ + ;================================================================================ ; Terrorpin AI fix ;-------------------------------------------------------------------------------- diff --git a/hudadditions.asm b/hudadditions.asm index 4568b12..f5e4a11 100644 --- a/hudadditions.asm +++ b/hudadditions.asm @@ -82,8 +82,8 @@ DrHudDungeonItemsAdditions: - sta $1704, x : sta $170e, x : sta $1718, x inx #2 : cpx #$0008 : !blt - - lda !HUD_FLAG : and.w #$0020 : beq + : brl ++ : + - lda HUDDungeonItems : and.w #$0007 : bne + : brl ++ : + + lda !HUD_FLAG : and.w #$0020 : beq + : JMP ++ : + + lda HUDDungeonItems : and.w #$0007 : bne + : JMP ++ : + ; bk symbols lda.w #$2811 : sta $1606 : sta $1610 : sta $161a : sta $1624 ; sm symbols @@ -125,10 +125,10 @@ DrHudDungeonItemsAdditions: lda.w #$24f5 : sta $1644, y + ldx $00 - + inx #2 : cpx #$001b : bcs ++ : brl - + + inx #2 : cpx #$001b : bcs ++ : JMP - ++ - lda !HUD_FLAG : and.w #$0020 : bne + : brl ++ : + - lda HUDDungeonItems : and.w #$000c : bne + : brl ++ : + + lda !HUD_FLAG : and.w #$0020 : bne + : JMP ++ : + + lda HUDDungeonItems : and.w #$000c : bne + : JMP ++ : + ; map symbols (do I want these) ; note compass symbol is 2c20 lda.w #$2821 : sta $1606 : sta $1610 : sta $161a : sta $1624 ; blank out a couple thing from old hud @@ -159,7 +159,7 @@ DrHudDungeonItemsAdditions: .skipBlanks iny #2 cpx #$001a : beq + lda.w #$24f5 : sta $1644, y ; blank out spot - + inx #2 : cpx #$001b : !bge ++ : brl - + + inx #2 : cpx #$001b : !bge ++ : JMP - ++ plp : ply : plx : rtl } diff --git a/icepalacegraphics.asm b/icepalacegraphics.asm index 8d2677f..22d5903 100644 --- a/icepalacegraphics.asm +++ b/icepalacegraphics.asm @@ -9,7 +9,7 @@ ShouldOverrideFileLoad: .no CLC : RTS .yes - SEC : RTS + RTS BgGraphicsLoading: ; Instructions overwritten diff --git a/init.asm b/init.asm index 8da91a0..47a5726 100644 --- a/init.asm +++ b/init.asm @@ -56,5 +56,6 @@ RTL Init_PostRAMClear: JSL MSUInit + JSL InitRNGPointerTable JML $00D463 ; The original target of the jump table that we hijacked \ No newline at end of file diff --git a/inventory.asm b/inventory.asm index 041d61d..48a6109 100644 --- a/inventory.asm +++ b/inventory.asm @@ -60,7 +60,7 @@ RTL LDA !INVENTORY_SWAP : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both boomerangs LDA $7EF341 : EOR #$03 : STA $7EF341 ; swap blue & red boomerang LDA.b #$20 : STA $012F ; menu select sound - BRL .captured + JMP .captured + CMP #$01 : BNE + ; bow LDA !INVENTORY_SWAP_2 : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both bows PHX : LDX.b #$00 ; scan ancilla table for arrows @@ -77,7 +77,7 @@ RTL ++ LDA $7EF340 : !SUB #$01 : EOR #$02 : !ADD #$01 : STA $7EF340 ; swap bows LDA.b #$20 : STA $012F ; menu select sound - BRL .captured + JMP .captured + BRA + .errorJump BRA .errorJump2 @@ -85,7 +85,7 @@ RTL LDA !INVENTORY_SWAP : AND #$30 : CMP #$30 : BNE .errorJump ; make sure we have mushroom & magic powder LDA $7EF344 : EOR #$03 : STA $7EF344 ; swap mushroom & magic powder LDA.b #$20 : STA $012F ; menu select sound - BRL .captured + JMP .captured + BRA + .errorJump2 BRA .error @@ -124,7 +124,9 @@ RTL ;ProcessBottleMenu: ;-------------------------------------------------------------------------------- ProcessBottleMenu: - LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down +; LDA $F6 : AND #$30 : CMP.b #$30 : BEQ .double_shoulder_pressed +; LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down +; .double_shoulder_pressed LDA $7EF34F ; check bottle state BEQ .no_bottles ; skip if we have no bottles PHX @@ -137,9 +139,9 @@ ProcessBottleMenu: .no_bottles LDA #$00 ; pretend like the controller state was 0 from the overridden load RTL - .y_not_pressed - LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state -RTL +; .y_not_pressed +; LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state +;RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- @@ -208,67 +210,68 @@ AddInventory: CPY.b #$0C : BNE + ; Blue Boomerang LDA !INVENTORY_SWAP : ORA #$80 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$2A : BNE + ; Red Boomerang LDA !INVENTORY_SWAP : ORA #$40 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$29 : BNE + ; Mushroom LDA !INVENTORY_SWAP : ORA #$28 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$0D : BNE + ; Magic Powder LDA !INVENTORY_SWAP : ORA #$10 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$13 : BNE + ; Shovel LDA !INVENTORY_SWAP : ORA #$04 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$14 : BNE + ; Flute (Inactive) LDA !INVENTORY_SWAP : ORA #$02 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$4A : BNE + ; Flute (Active) LDA !INVENTORY_SWAP : ORA #$01 : STA !INVENTORY_SWAP - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$0B : BNE + ; Bow LDA ArrowMode : BNE +++ LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 +++ - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$3A : BNE + ; Bow & Arrows LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$3B : BNE + ; Bow & Silver Arrows LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 LDA ArrowMode : BNE +++ LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; activate wood arrows when not in rupee bow +++ - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$43 : BNE + ; Single arrow LDA ArrowMode : BEQ +++ LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; activate wood arrows in quick-swap +++ - BRL .incrementCounts + JMP .incrementCounts + CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 + .incrementCounts - LDA !LOCK_STATS : BEQ + : BRL .done : + - + LDA !LOCK_STATS : BEQ + : JMP .done : + + LDA !MULTIWORLD_ITEM_PLAYER_ID : BEQ + BRL .dungeonCounts + + ; don't count any of this stuff - CPY.b #$20 : BNE + : BRL .itemCounts : + ; Crystal - CPY.b #$26 : BNE + : BRL .itemCounts : + ; Heart Piece Completion Heart + CPY.b #$20 : BNE + : JMP .itemCounts : + ; Crystal + CPY.b #$26 : BNE + : JMP .itemCounts : + ; Heart Piece Completion Heart LDA.l !SHOP_ENABLE_COUNT : BNE ++ - CPY.b #$2E : BNE + : BRL .itemCounts : + ; Red Potion (Refill) - CPY.b #$2F : BNE + : BRL .itemCounts : + ; Green Potion (Refill) - CPY.b #$30 : BNE + : BRL .itemCounts : + ; Blue Potion (Refill) + CPY.b #$2E : BNE + : JMP .itemCounts : + ; Red Potion (Refill) + CPY.b #$2F : BNE + : JMP .itemCounts : + ; Green Potion (Refill) + CPY.b #$30 : BNE + : JMP .itemCounts : + ; Blue Potion (Refill) ++ - CPY.b #$37 : BNE + : BRL .itemCounts : + ; Pendant - CPY.b #$38 : BNE + : BRL .itemCounts : + ; Pendant - CPY.b #$39 : BNE + : BRL .itemCounts : + ; Pendant - CPY.b #$00 : BNE + : BRL .itemCounts : + ; Uncle Sword & Shield + CPY.b #$37 : BNE + : JMP .itemCounts : + ; Pendant + CPY.b #$38 : BNE + : JMP .itemCounts : + ; Pendant + CPY.b #$39 : BNE + : JMP .itemCounts : + ; Pendant + CPY.b #$00 : BNE + : JMP .itemCounts : + ; Uncle Sword & Shield CPY.b #$04 : !BLT .isSword ; Swords - Skip Shop/Fairy Check for Swords CPY.b #$49 : BEQ .isSword @@ -276,38 +279,38 @@ AddInventory: CPY.b #$5E : BEQ .isSword BRA + .isSword - BRL .dungeonCounts + JMP .dungeonCounts + - CPY.b #$3B : BNE + : BRL .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow + CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow LDA $1B : BEQ ++ ; skip shop check if outdoors LDA $02E9 : CMP.b #$01 : BEQ ++ ; skip shop check for chests PHP : REP #$20 ; set 16-bit accumulator LDA $048E - CMP.w #274 : BNE + : BRL .shop : + ; dark world death mountain shop, ornamental shield shop - CMP.w #271 : BNE + : BRL .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop - CMP.w #272 : BNE + : BRL .shop : + ; red shield shop - CMP.w #284 : BNE + : BRL .shop : + ; bomb shop - CMP.w #265 : BNE + : BRL .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted - CMP.w #287 : BNE + : BRL .shop : + ; kakariko shop - CMP.w #255 : BNE + : BRL .shop : + ; light world death mountain shop - CMP.w #276 : BNE + : BRL .shop : + ; waterfall fairy - CMP.w #277 : BNE + : BRL .shop : + ; upgrade fairy (shop) - CMP.w #278 : BNE + : BRL .shop : + ; pyramid fairy + CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop + CMP.w #271 : BNE + : JMP .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop + CMP.w #272 : BNE + : JMP .shop : + ; red shield shop + CMP.w #284 : BNE + : JMP .shop : + ; bomb shop + CMP.w #265 : BNE + : JMP .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted + CMP.w #287 : BNE + : JMP .shop : + ; kakariko shop + CMP.w #255 : BNE + : JMP .shop : + ; light world death mountain shop + CMP.w #276 : BNE + : JMP .shop : + ; waterfall fairy + CMP.w #277 : BNE + : JMP .shop : + ; upgrade fairy (shop) + CMP.w #278 : BNE + : JMP .shop : + ; pyramid fairy PLP : BRA ++ .shop PLP LDA.l !SHOP_ENABLE_COUNT : BNE ++ - BRL .done + JMP .done ++ .dungeonCounts - + LDA !MULTIWORLD_RECEIVING_ITEM : CMP #$01 : BNE + - BRL .fullItemCounts + JMP .fullItemCounts + - LDA $1B : BNE + : BRL .fullItemCounts : + + LDA $1B : BNE + : JMP .fullItemCounts : + ; ==BEGIN INDOOR-ONLY SECTION ;REP #$20 ; Set 16-bit Accumulator @@ -325,7 +328,7 @@ AddInventory: CMP.l BallNChainDungeon : BNE + CPY.b #$32 : BNE + - BRL .done + JMP .done + LSR : TAX : LDA $7EF4BF, X : INC : STA $7EF4BF, X CPX.b #$0D : BNE + LDA $7EF366 : AND #$04 : BNE ++ @@ -367,180 +370,180 @@ AddInventory: CPY.b #$00 : BNE + ; Fighter's Sword & Fighter's Shield JSR .incrementSword JSR .incrementShield - BRL .done + JMP .done + CPY.b #$01 : BNE + ; Master Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$02 : BNE + ; Tempered Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$03 : BNE + ; Golden Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$04 : BNE + ; Fighter's Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$05 : BNE + ; Red Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$06 : BNE + ; Mirror Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$07 : !BLT + ; Items $07 - $0D CPY.b #$0E : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$14 : BNE + ; Flute (Inactive) - LEAVE THIS ABOVE THE 0F-16 CONDITION - kkat JSR .stampFlute JSR .incrementY - BRL .done + JMP .done + CPY.b #$0F : !BLT + ; Items $0F - $16 CPY.b #$17 : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$17 : BNE + ; Heart Piece JSR .incrementHeartPiece - BRL .done + JMP .done + CPY.b #$18 : !BLT + ; Items $18 - $19 CPY.b #$1A : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$1A : BNE + ; Magic Mirror JSR .stampMirror JSR .incrementY - BRL .done + JMP .done + CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat JSR .incrementY - BRL .done + JMP .done + CPY.b #$1B : !BLT + ; Items $1B - $1F CPY.b #$20 : !BGE + JSR .incrementA - BRL .done + JMP .done + CPY.b #$20 : BNE + ; Crystal JSR .incrementCrystal JSR .setDungeonCompletion - BRL .done + JMP .done + CPY.b #$21 : BNE + ; Bug Net JSR .incrementY - BRL .done + JMP .done + CPY.b #$22 : !BLT + ; Items $22 - $23 CPY.b #$24 : !BGE + JSR .incrementMail - BRL .done + JMP .done + CPY.b #$24 : BNE + ; Small Key JSR .incrementKey - BRL .done + JMP .done + CPY.b #$25 : BNE + ; Compass JSR .incrementCompass - BRL .done + JMP .done + CPY.b #$26 : BNE + ; Liar Heart (Container) ;JSR .incrementHeartContainer - BRL .done + JMP .done + CPY.b #$27 : BNE + ; 1 Bomb JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$28 : BNE + ; 3 Bombs JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$29 : BNE + ; Musoroom JSR .incrementY - BRL .done + JMP .done + CPY.b #$2A : !BLT + ; Items $2A - $2D CPY.b #$2E : !BGE + JSR .incrementY - BRL .done + JMP .done + CPY.b #$31 : BNE + ; 10 Bombs JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$32 : BNE + ; Big Key JSR .incrementBigKey - BRL .done + JMP .done + CPY.b #$33 : BNE + ; Map JSR .incrementMap - BRL .done + JMP .done + CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants CPY.b #$3A : !BGE + JSR .incrementPendant JSR .setDungeonCompletion - BRL .done + JMP .done + CPY.b #$3A : !BLT + ; Items $3A - $3B - Bow & Silver Arrows CPY.b #$3C : !BGE + JSR .incrementBow - BRL .done + JMP .done + CPY.b #$3C : BNE + ; Bottle w/Bee JSR .incrementY - BRL .done + JMP .done + CPY.b #$3D : BNE + ; Bottle w/Fairy JSR .incrementY - BRL .done + JMP .done + CPY.b #$3E : !BLT + ; Items $3E - $3F - Heart Containers CPY.b #$40 : !BGE + JSR .incrementHeartContainer - BRL .done + JMP .done + CPY.b #$48 : BNE + ; Bottle w/Gold Bee JSR .incrementY - BRL .done + JMP .done + CPY.b #$49 : BNE + ; Fighter's Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$4A : BNE + ; Flute (Active) JSR .stampFlute JSR .incrementY - BRL .done + JMP .done + CPY.b #$4B : BNE + ; Pegasus Boots JSR .stampBoots JSR .incrementA - BRL .done + JMP .done + CPY.b #$4C : BNE + ; Bomb Capacity Upgrade JSR .incrementCapacity JSR .maybeIncrementBombs - BRL .done + JMP .done + CPY.b #$4D : !BLT + ; Items $4D - $4F - Capacity Upgrades CPY.b #$50 : !BGE + JSR .incrementCapacity - BRL .done + JMP .done + CPY.b #$50 : BNE + ; Master Sword (Safe) JSR .incrementSword - BRL .done + JMP .done + CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades CPY.b #$55 : !BGE + JSR .incrementCapacity - BRL .done + JMP .done + CPY.b #$58 : BNE + ; Upgrade-Only Sivler Arrows JSR .incrementBow - BRL .done + JMP .done + CPY.b #$5E : BNE + ; Progressive Sword JSR .incrementSword - BRL .done + JMP .done + CPY.b #$5F : BNE + ; Progressive Shield JSR .incrementShield - BRL .done + JMP .done + CPY.b #$60 : BNE + ; Progressive Armor JSR .incrementMail - BRL .done + JMP .done + CPY.b #$61 : BNE + ; Progressive Lifting Glove JSR .incrementA - BRL .done + JMP .done + CPY.b #$64 : !BLT + ; Items $64 & $65 - Progressive Bow CPY.b #$66 : !BGE + JSR .incrementBow - BRL .done + JMP .done + CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps CPY.b #$80 : !BGE + JSR .incrementMap - BRL .done + JMP .done + CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses CPY.b #$90 : !BGE + JSR .incrementCompass - BRL .done + JMP .done + CPY.b #$90 : !BLT + ; Items $90 - $9F - Free Big Keys CPY.b #$A0 : !BGE + JSR .incrementBigKey - BRL .done + JMP .done + CPY.b #$A0 : !BLT + ; Items $A0 - $AF - Free Small Keys CPY.b #$B0 : !BGE + JSR .incrementKey - BRL .done + JMP .done + .done PLP : PLX : PLA @@ -755,6 +758,7 @@ RTS Link_ReceiveItem_HUDRefresh: LDA $7EF343 : BNE + ; skip if we have bombs LDA $7EF375 : BEQ + ; skip if we are filling no bombs + LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs DEC : STA $7EF375 ; decrease bomb fill count LDA.b #$01 : STA $7EF343 ; increase actual bomb count + @@ -770,6 +774,7 @@ RTL HandleBombAbsorbtion: STA $7EF375 ; thing we wrote over LDA $0303 : BNE + ; skip if we already have some item selected + LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs LDA.b #$04 : STA $0202 ; set selected item to bombs LDA.b #$01 : STA $0303 ; set selected item to bombs JSL.l HUD_RebuildLong @@ -1145,10 +1150,10 @@ SpawnShovelItem: LDA $03FC : BEQ + JSL DiggingGameGuy_AttemptPrizeSpawn - BRL .skip + JMP .skip + - LDA $035B : AND.b #$01 : BNE + : BRL .skip : + ; corner dig fix + LDA $035B : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix PHY : PHP PHB : PHK : PLB diff --git a/inverted.asm b/inverted.asm index 1e05ee1..b60085d 100644 --- a/inverted.asm +++ b/inverted.asm @@ -4,7 +4,7 @@ ; after Ganon slams into it in bat form? Overworld_CreatePyramidHoleModified: LDA.l InvertedMode : BNE + - BRL .originalBehaviour + JMP .originalBehaviour + .invertedBehavior REP #$30 @@ -37,7 +37,7 @@ Overworld_CreatePyramidHoleModified: LDA.w #$FFFF : STA $1012, Y - BRL .ending + JMP .ending .originalBehaviour REP #$30 diff --git a/itemdowngrade.asm b/itemdowngrade.asm index aab1763..9d08af2 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -66,8 +66,8 @@ RTS INC : CMP !HIGHEST_SWORD_LEVEL : !BGE + ; skip if highest is lower (this is an upgrade) LDA !HIGHEST_SWORD_LEVEL : DEC ; convert to item id TAY : PLA : LDA !HIGHEST_SWORD_LEVEL ; put sword id into the thing to write - BRL .done + JMP .done + PLA -BRL .done +JMP .done ;================================================================================ \ No newline at end of file diff --git a/keydropshuffle.asm b/keydropshuffle.asm index 70e8004..253753a 100644 --- a/keydropshuffle.asm +++ b/keydropshuffle.asm @@ -173,7 +173,7 @@ KeyGetPlayer: LoadProperties_PreserveItemMaybe: { lda.l ShuffleKeyDrops : bne + - jsl Sprite_LoadProperties : rtl + JML Sprite_LoadProperties + lda $0e80, x : pha jsl Sprite_LoadProperties pla : sta $0e80, x diff --git a/msu.asm b/msu.asm index 4af1caf..3118f01 100644 --- a/msu.asm +++ b/msu.asm @@ -185,11 +185,11 @@ CheckMusicLoadRequest: LDA !REG_MUSIC_CONTROL_REQUEST : CMP #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE LDA NoBGM : BNE + LDA !REG_MSU_PACK_CURRENT : CMP #$FE : BNE ++ - + : BRL .mute + + : JMP .mute ++ LDX !REG_MSU_ID_01 : CPX !VAL_MSU_ID_01 : BEQ + - - : BRL .unmute + - : JMP .unmute + LDX !REG_MSU_ID_23 : CPX !VAL_MSU_ID_23 : BNE - LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE - @@ -277,7 +277,7 @@ CheckMusicLoadRequest: PLY : STY $00 : SEP #$10 : PLB TAX : LDA MusicShuffleTable-1,X STA !REG_MUSIC_CONTROL_REQUEST - BRL .check_fallback + JMP .check_fallback .unmute LDA.b !VAL_COMMAND_UNMUTE_SPC @@ -481,7 +481,7 @@ MSUMain: LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu SEP #$30 LDX !REG_MUSIC_CONTROL : BEQ + - BRL .command_ff + JMP .command_ff + LDA !REG_MSU_DELAYED_COMMAND : BEQ .do_fade diff --git a/newhud.asm b/newhud.asm index e4aef54..f41ed75 100644 --- a/newhud.asm +++ b/newhud.asm @@ -63,7 +63,7 @@ SEP #$30 ;================================================================================ SEP #$20 - LDA.l GoalItemRequirement : BNE + : BRL .done : + ; Star Meter + LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter LDA.l !GOAL_COUNTER JSR HudHexToDec3Digit @@ -144,13 +144,13 @@ SEP #$30 AND #$FFF8 TAX ; end of crap - LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : BRL .green : + + LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : JMP .green : + SEP #$20 : LDA.b #$80 : STA $7EF36E : REP #$30 ; set magic to max LDX.w #$0080 ; load full magic meter graphics LDA $1A : AND.w #$000C : LSR #2 BEQ .red CMP.w #0001 : BEQ .yellow - CMP.w #0002 : BNE + : BRL .green : + + CMP.w #0002 : BNE + : JMP .green : + .blue LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA $7EC746 LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA $7EC786 diff --git a/newitems.asm b/newitems.asm index 1d7f492..c7d275a 100755 --- a/newitems.asm +++ b/newitems.asm @@ -196,7 +196,7 @@ AddReceivedItemExpandedGetItem: ; ;JSL.l Main_ShowTextMessage_Alt ; LDA !GOAL_COUNTER : INC : STA !GOAL_COUNTER ; LDA.b #$01 : STA $7F50XX - ; BRL .done + ; JMP .done ;++ ;STA $FFFFFF LDA $02D8 ; check inventory @@ -214,7 +214,7 @@ AddReceivedItemExpandedGetItem: LDA.l SilverArrowsUseRestriction : BNE ++ LDA.b #03 : STA $7EF340 ; set bow to silver ++ - BRL .done + JMP .done + CMP.b #$3B : BNE + ; Silver Bow LDA.l SilverArrowsUseRestriction : BNE .noequip LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip @@ -226,56 +226,56 @@ AddReceivedItemExpandedGetItem: STA $7EF340 .noequip LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 ; mark silver bow on y-toggle - BRL .done + JMP .done + CMP.b #$4C : BNE + ; 50 bombs ;LDA.b #$07 : STA $7EF370 ; upgrade bombs LDA.b #50 : !SUB.l StartingMaxBombs : STA $7EF370 ; upgrade bombs LDA.b #50 : STA $7EF375 ; fill bombs - BRL .done + JMP .done + CMP.b #$4D : BNE + ; 70 arrows ;LDA #$07 : STA $7EF371 ; upgrade arrows LDA.b #70 : !SUB.l StartingMaxArrows : STA $7EF371 ; upgrade arrows LDA.b #70 : STA $7EF376 ; fill arrows - BRL .done + JMP .done + CMP.b #$4E : BNE + ; 1/2 magic LDA $7EF37B : CMP #$02 : !BGE ++ INC : STA $7EF37B ; upgrade magic ++ LDA.b #$80 : STA $7EF373 ; fill magic - BRL .done + JMP .done + CMP.b #$4F : BNE + ; 1/4 magic LDA.b #$02 : STA $7EF37B ; upgrade magic LDA.b #$80 : STA $7EF373 ; fill magic - BRL .done + JMP .done + CMP.b #$50 : BNE + ; Master Sword (Safe) LDA $7EF359 : CMP.b #$02 : !BGE + ; skip if we have a better sword LDA.b #$02 : STA $7EF359 ; set master sword - BRL .done + JMP .done + CMP.b #$51 : BNE + ; +5 Bombs LDA $7EF370 : !ADD.b #$05 : STA $7EF370 ; upgrade bombs +5 LDA.l Upgrade5BombsRefill : STA $7EF375 ; fill bombs - BRL .done + JMP .done + CMP.b #$52 : BNE + ; +10 Bombs LDA $7EF370 : !ADD.b #$0A : STA $7EF370 ; upgrade bombs +10 LDA.l Upgrade10BombsRefill : STA $7EF375 ; fill bombs - BRL .done + JMP .done + CMP.b #$53 : BNE + ; +5 Arrows LDA $7EF371 : !ADD.b #$05 : STA $7EF371 ; upgrade arrows +5 LDA.l Upgrade5ArrowsRefill : STA $7EF376 ; fill arrows - BRL .done + JMP .done + CMP.b #$54 : BNE + ; +10 Arrows LDA $7EF371 : !ADD.b #$0A : STA $7EF371 ; upgrade arrows +10 LDA.l Upgrade10ArrowsRefill : STA $7EF376 ; fill arrows - BRL .done + JMP .done + CMP.b #$55 : BNE + ; Programmable Object 1 %ProgrammableItemLogic(1) - BRL .done + JMP .done + CMP.b #$56 : BNE + ; Programmable Object 2 %ProgrammableItemLogic(2) - BRL .done + JMP .done + CMP.b #$57 : BNE + ; Programmable Object 3 %ProgrammableItemLogic(3) - BRL .done + JMP .done + CMP.b #$58 : BNE + ; Upgrade-Only Sivler Arrows LDA.l SilverArrowsUseRestriction : BNE +++ LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ +++ @@ -288,46 +288,46 @@ AddReceivedItemExpandedGetItem: ++ + CMP.b #$59 : BNE + ; 1 Rupoor REP #$20 : LDA $7EF360 : !SUB RupoorDeduction : STA $7EF360 : SEP #$20 ; Take 1 rupee - BRL .done + JMP .done + CMP.b #$5A : BNE + ; Null Item - BRL .done + JMP .done + CMP.b #$5B : BNE + ; Red Clock REP #$20 ; set 16-bit accumulator LDA !CHALLENGE_TIMER : !ADD.l RedClockAmount : STA !CHALLENGE_TIMER LDA !CHALLENGE_TIMER+2 : ADC.l RedClockAmount+2 : STA !CHALLENGE_TIMER+2 SEP #$20 ; set 8-bit accumulator - BRL .done + JMP .done + CMP.b #$5C : BNE + ; Blue Clock REP #$20 ; set 16-bit accumulator LDA !CHALLENGE_TIMER : !ADD.l BlueClockAmount : STA !CHALLENGE_TIMER LDA !CHALLENGE_TIMER+2 : ADC.l BlueClockAmount+2 : STA !CHALLENGE_TIMER+2 SEP #$20 ; set 8-bit accumulator - BRL .done + JMP .done + CMP.b #$5D : BNE + ; Green Clock REP #$20 ; set 16-bit accumulator LDA !CHALLENGE_TIMER : !ADD.l GreenClockAmount : STA !CHALLENGE_TIMER LDA !CHALLENGE_TIMER+2 : ADC.l GreenClockAmount+2 : STA !CHALLENGE_TIMER+2 SEP #$20 ; set 8-bit accumulator - BRL .done + JMP .done + CMP.b #$5E : BNE + ; Progressive Sword - BRL .done + JMP .done + CMP.b #$5F : BNE + ; Progressive Shield - BRL .done + JMP .done + CMP.b #$60 : BNE + ; Progressive Armor - BRL .done + JMP .done + CMP.b #$61 : BNE + ; Progressive Lifting Glove - BRL .done + JMP .done + CMP.b #$62 : BNE + ; RNG Pool Item (Single) - BRL .done + JMP .done + CMP.b #$63 : BNE + ; RNG Pool Item (Multi) - BRL .done + JMP .done + CMP.b #$64 : BNE + ; Progressive Bow - BRL .done + JMP .done + CMP.b #$65 : BNE + ; Progressive Bow - BRL .done + JMP .done + CMP.b #$6A : BNE + ; Goal Collectable (Single/Triforce) JSL.l ActivateGoal - BRL .done + JMP .done + CMP.b #$6B : BNE + ; Goal Collectable (Multi/Power Star) BRA .multi_collect + CMP.b #$6C : BNE + ; Goal Collectable (Multi/Power Star) Alternate Graphic @@ -338,52 +338,52 @@ AddReceivedItemExpandedGetItem: LDA TurnInGoalItems : BNE ++ JSL.l ActivateGoal ++ - BRL .done + JMP .done + CMP.b #$6D : BNE + ; Server Request F0 JSL.l ItemGetServiceRequest_F0 - BRL .done + JMP .done + CMP.b #$6E : BNE + ; Server Request F1 JSL.l ItemGetServiceRequest_F1 - BRL .done + JMP .done + CMP.b #$6F : BNE + ; Server Request F2 JSL.l ItemGetServiceRequest_F2 - BRL .done + JMP .done ;+ CMP.b #$FE : BNE + ; Server Request (Null Chest) ; JSL.l ItemGetServiceRequest - ; BRL .done + ; JMP .done + CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map AND #$0F : CMP #$08 : !BGE ++ %ValueShift() ORA $7EF368 : STA $7EF368 ; Map 1 - BRL .done + JMP .done ++ !SUB #$08 %ValueShift() BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA $7EF369 : STA $7EF369 ; Map 2 - BRL .done + JMP .done + CMP.b #$80 : !BLT + : CMP.b #$90 : !BGE + ; Free Compass AND #$0F : CMP #$08 : !BGE ++ %ValueShift() ORA $7EF364 : STA $7EF364 ; Compass 1 - BRL .done + JMP .done ++ !SUB #$08 %ValueShift() BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA $7EF365 : STA $7EF365 ; Compass 2 - BRL .done + JMP .done + CMP.b #$90 : !BLT + : CMP.b #$A0 : !BGE + ; Free Big Key AND #$0F : CMP #$08 : !BGE ++ %ValueShift() ORA $7EF366 : STA $7EF366 ; Big Key 1 - BRL .done + JMP .done ++ !SUB #$08 %ValueShift() BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA $7EF367 : STA $7EF367 ; Big Key 2 - BRL .done + JMP .done + CMP.b #$A0 : !BLT + : CMP.b #$B0 : !BGE + ; Free Small Key AND #$0F : TAX LDA $7EF37C, X : INC : STA $7EF37C, X ; Increment Key Count @@ -397,12 +397,12 @@ AddReceivedItemExpandedGetItem: LDA.l GenericKeys : BEQ + .generic LDA $7EF36F : INC : STA $7EF36F - BRL .done + JMP .done .normal TXA : ASL : CMP $040C : BNE ++ LDA $7EF36F : INC : STA $7EF36F ++ - BRL .done + JMP .done + CMP.b #$B0 : BNE + ; Bee Trap LDA.b #$79 : JSL Sprite_SpawnDynamically : BMI + ; DashBeeHive_SpawnBee LDA $22 : STA $0D10, Y : LDA $23 : STA $0D30, Y ; from enemizer's Spawn_Bees @@ -445,7 +445,7 @@ AddReceivedItemExpanded: PHY : LDY.b #$00 : JSL AddInventory : PLY PLX : PLA : RTL + - + JSL.l PreItemGet LDA !MULTIWORLD_ITEM_PLAYER_ID : BNE + @@ -456,7 +456,7 @@ AddReceivedItemExpanded: JSR IncrementItemCounters + LDA $02D8 ; Item Value - + CMP.b #$16 : BEQ .bottle ; Bottle CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle @@ -469,38 +469,38 @@ AddReceivedItemExpanded: JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ LDA !MULTIWORLD_ITEM_PLAYER_ID : BNE +++ LDA.l BottleLimitReplacement : STA $02D8 - +++ : BRL .done + +++ : JMP .done .notBottle ++ : CMP.b #$4E : BNE ++ ; Progressive Magic LDA $7EF37B : BEQ +++ LDA.b #$4F : STA $02D8 - +++ : BRL .done + +++ : JMP .done ++ : CMP.b #$5E : BNE ++ ; Progressive Sword LDA !MULTIWORLD_ITEM_PLAYER_ID : BNE + LDA $7EF359 : CMP.l ProgressiveSwordLimit : !BLT + - LDA.l ProgressiveSwordReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveSwordReplacement : STA $02D8 : JMP .done + LDA $7EF359 : CMP.b #$FF : BNE + ; Swordless - LDA.b #$49 : STA $02D8 : BRL .done + LDA.b #$49 : STA $02D8 : JMP .done + : CMP.b #$00 : BNE + ; No Sword - LDA.b #$49 : STA $02D8 : BRL .done + LDA.b #$49 : STA $02D8 : JMP .done + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$50 : STA $02D8 : BRL .done + LDA.b #$50 : STA $02D8 : JMP .done + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$02 : STA $02D8 : BRL .done + LDA.b #$02 : STA $02D8 : JMP .done + ; Everything Else - LDA.b #$03 : STA $02D8 : BRL .done + LDA.b #$03 : STA $02D8 : JMP .done ++ : CMP.b #$5F : BNE ++ ; Progressive Shield LDA !MULTIWORLD_ITEM_PLAYER_ID : BEQ + LDA !PROGRESSIVE_SHIELD : AND.b #$C0 : BNE +++ ; No Shield - LDA.b #$04 : STA $02D8 : BRL .done + LDA.b #$04 : STA $02D8 : JMP .done +++ : CMP.b #$40 : BNE +++ ; Fighter Shield - LDA.b #$05 : STA $02D8 : BRL .done + LDA.b #$05 : STA $02D8 : JMP .done +++ ; Everything Else - LDA.b #$06 : STA $02D8 : BRL .done + LDA.b #$06 : STA $02D8 : JMP .done + LDA !PROGRESSIVE_SHIELD : LSR #6 : CMP.l ProgressiveShieldLimit : !BLT + - LDA.l ProgressiveShieldReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveShieldReplacement : STA $02D8 : JMP .done + LDA !PROGRESSIVE_SHIELD : AND.b #$C0 : BNE + ; No Shield LDA.b #$04 : BRA .shielddone @@ -509,27 +509,26 @@ AddReceivedItemExpanded: + ; Everything Else LDA.b #$06 .shielddone : STA $02D8 - LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done + LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done ++ : CMP.b #$60 : BNE ++ ; Progressive Armor LDA !MULTIWORLD_ITEM_PLAYER_ID : BNE + LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT + - LDA.l ProgressiveArmorReplacement : STA $02D8 : BRL .done + LDA.l ProgressiveArmorReplacement : STA $02D8 : JMP .done + LDA $7EF35B : CMP.b #$00 : BNE + ; No Armor - LDA.b #$22 : STA $02D8 : BRL .done + LDA.b #$22 : STA $02D8 : JMP .done + ; Everything Else - LDA.b #$23 : STA $02D8 : BRL .done + LDA.b #$23 : STA $02D8 : JMP .done ++ : CMP.b #$61 : BNE ++ ; Progressive Lifting Glove LDA $7EF354 : BNE + ; No Lift - LDA.b #$1B : STA $02D8 : BRL .done + LDA.b #$1B : STA $02D8 : JMP .done + ; Everything Else - LDA.b #$1C : STA $02D8 : BRL .done + LDA.b #$1C : STA $02D8 : JMP .done ++ : CMP.b #$64 : BNE ++ : -- ; Progressive Bow LDA !MULTIWORLD_ITEM_PLAYER_ID : BNE + LDA $7EF340 : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement : STA $02D8 : BRL .done - + - LDA $7EF340 : INC : LSR : CMP.b #$00 : BNE + ; No Bow + LDA.l ProgressiveBowReplacement : STA $02D8 : JMP .done + + LDA $7EF340 : INC : LSR : CMP.b #$00 : BNE + ; No Bow LDA.b #$3A : STA $02D8 : BRA .done + ; Any Bow LDA.b #$3B : STA $02D8 : BRA .done @@ -563,6 +562,8 @@ AddReceivedItemExpanded: ;-------------------------------------------------------------------------------- ;DATA AddReceivedItemExpanded { +; This is a temporary measure for Fish to have consistent addresses +org $A08800 .y_offsets db -5, -5, -5, -5, -5, -4, -4, -5 @@ -876,7 +877,8 @@ AddReceivedItemExpanded: ;0x1A - Ganon's Tower .item_masks ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc - dw $8000, $4000, $2000, $1000, $0800, $0400, $0200, $0100 + ; sewers and castle get 2 bits active so that they can share their items elegantly + dw $C000, $C000, $2000, $1000, $0800, $0400, $0200, $0100 dw $0080, $0040, $0020, $0010, $0008, $0004, $0000, $0000 dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 diff --git a/normal.asm b/normal.asm index 56fee90..a8ab959 100644 --- a/normal.asm +++ b/normal.asm @@ -399,8 +399,7 @@ StraightStairsTrapDoor: lda #$05 : sta $11 inc $0468 : stz $068e : stz $0690 ++ rtl - + jsl Dungeon_ApproachFixedColor ; what we wrote over - rtl + + JML Dungeon_ApproachFixedColor ; what we wrote over } InroomStairsTrapDoor: diff --git a/openmode.asm b/openmode.asm index 53ff4cb..4bf907c 100644 --- a/openmode.asm +++ b/openmode.asm @@ -12,11 +12,18 @@ RTL InitOpenMode: LDA.l OpenMode : BEQ + ; Skip if not open mode LDA $7EF3C5 : CMP #$02 : !BGE + ; Skip if already past escape - LDA.b #02 : STA $7EF3C5 ; Go to post-escape phase (pre aga1) + LDA.b #$02 : STA $7EF3C5 ; Go to post-escape phase (pre aga1) LDA $7EF3C6 : ORA #$14 : STA $7EF3C6 ; remove uncle LDA $7EF3C8 : CMP #$05 : BEQ ++ : LDA.b #$01 : ++ : STA $7EF3C8 ; set spawn points to house+sanc unless already house+sanc+mountain LDA $7EF29B : ORA.b #$20 : STA $7EF29B ; open castle gate - RTL + JSL MaybeSetPostAgaWorldState + + +RTL +;-------------------------------------------------------------------------------- +MaybeSetPostAgaWorldState: + LDA.l InstantPostAgaWorldState : BEQ + ; Skip if not enabled + LDA.b #$03 : STA $7EF3C5 ; Go to post-aga phase + LDA $7EF282 : ORA.b #$20 : STA $7EF282 ; make lumberjack tree accessible + RTL ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/overrides.asm b/overrides.asm index 28eb7f9..8f78bb5 100644 --- a/overrides.asm +++ b/overrides.asm @@ -64,8 +64,7 @@ FixShopCode: VitreousKeyReset: lda.l DRMode : beq + stz $0cba, x - + jsl $0db818 ;restore old code - rtl + + JML $0db818 ;restore old code GuruguruFix: lda $a0 : cmp #$df : !bge + @@ -134,7 +133,7 @@ RainPrevention: LDA.l $7EF3CC : AND #$00FF : CMP #$0001 : BEQ .done ; zelda is following LDA $00 : CMP #$02A1 : BNE .done PLA : LDA #$0008 : RTL - + LDA.l BlockCastleDoorsInRain : BEQ .done ;flagged + + LDA.l BlockCastleDoorsInRain : AND #$00FF : BEQ .done ;flagged LDX #$FFFE - INX #2 : LDA.l RemoveRainDoorsRoom, X : CMP #$FFFF : BEQ .done CMP $A0 : BNE - diff --git a/password.asm b/password.asm index 7ead174..595d1cd 100644 --- a/password.asm +++ b/password.asm @@ -167,7 +167,7 @@ ValidatePassword: LDX #$0F - LDA.l !PASSWORD_SRAM, X : BNE + - BRL .incorrect + JMP .incorrect + DEX : BPL - diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index be4eedb..ceaaacd 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -56,7 +56,7 @@ RTL !MAP_OVERLAY = "$7EF414" ; [2] OverworldMap_CheckObject: PHX - ;CPX.b #$01 : BNE + : BRL ++ : + : BRL .fail + ;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail LDA $7EF3CA : AND.b #$40 : BNE + ;LW Map LDA.l MapMode : BEQ +++ @@ -66,7 +66,7 @@ OverworldMap_CheckObject: LDA !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X PLX AND.l .lw_map_masks, X : BNE +++ - BRL .fail + JMP .fail +++ LDA.l .lw_offsets, X BPL +++ : CLC : BRA .done : +++ ; don't display master sword @@ -80,7 +80,7 @@ OverworldMap_CheckObject: LDA.l !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X PLX AND.l .dw_map_masks, X : BNE +++ - BRL .fail + JMP .fail +++ LDA.l .dw_offsets, X TAX : BRA ++ @@ -265,194 +265,262 @@ DrawMoonPearlInMenuLocation: RTL ;-------------------------------------------------------------------------------- DrawHUDDungeonItems: - LDA.l HUDDungeonItems : BNE + : RTL : + - + LDA.l HUDDungeonItems : BNE .continue + + RTL + +.dungeon_positions + dw 0 ; Hyrule Castle + dw 2 ; Agahnims Tower + dw 6 ; Eastern + dw 8 ; Desert + dw 10 ; Hera + dw 14 ; PoD + dw 16 ; Swamp + dw 18 ; Skull Woods + dw 20 ; Thieves Town + dw 22 ; Ice + dw 24 ; Mire + dw 26 ; Turtle Rock + dw 30 ; Ganon's Tower + +.small_key_x_offset + dw $7EF37D-$7EF37D ; Hyrule Castle + dw $7EF380-$7EF37D ; Agahnims Tower + dw $7EF37E-$7EF37D ; Eastern + dw $7EF37F-$7EF37D ; Desert + dw $7EF386-$7EF37D ; Hera + dw $7EF382-$7EF37D ; PoD + dw $7EF381-$7EF37D ; Swamp + dw $7EF384-$7EF37D ; Skull Woods + dw $7EF387-$7EF37D ; Thieves Town + dw $7EF385-$7EF37D ; Ice + dw $7EF383-$7EF37D ; Mire + dw $7EF388-$7EF37D ; Turtle Rock + dw $7EF389-$7EF37D ; Ganon's Tower + + +.dungeon_bitmasks + dw $4000 ; Hyrule Castle + dw $0800 ; Agahnims Tower + dw $2000 ; Eastern + dw $1000 ; Desert + dw $0020 ; Hera + dw $0200 ; PoD + dw $0400 ; Swamp + dw $0080 ; Skull Woods + dw $0010 ; Thieves Town + dw $0040 ; Ice + dw $0100 ; Mire + dw $0008 ; Turtle Rock + dw $0004 ; Ganon's Tower + +.boss_room_ids + dw $80*2 ; ; Hyrule Castle (BNC) + dw $20*2 ; ; Agahnim + dw $C8*2 ; ; Eastern + dw $33*2 ; ; Desert + dw $07*2 ; ; Hera + dw $5A*2 ; ; PoD + dw $06*2 ; ; Swamp + dw $29*2 ; ; Skull Woods + dw $AC*2 ; ; Thieves Town + dw $DE*2 ; ; Ice + dw $90*2 ; ; Mire + dw $A4*2 ; ; Turtle Rock + dw $0D*2 ; ; Ganon's Tower + +.continue PHP - REP #$30 ; set 16-bit accumulator & index registers - + + PHB + PHK + PLB + + REP #$30 + +;------------------------------------------------------------------------------- ; dungeon names - LDA.w #$2D50 : STA $1646 ; sewers - LDA.w #$2D54 : STA $1648 ; Agahnims Tower + LDA.w #$2D50 - LDA.w #$2D51 : STA $164C ; Eastern - LDA.w #$2D52 : STA $164E ; Desert - LDA.w #$2D53 : STA $1650 ; Hera + LDY.w #0 - LDA.w #$2D55 : STA $1654 ; PoD - LDA.w #$2D56 : STA $1656 ; Swamp - LDA.w #$2D57 : STA $1658 ; Skull Woods - LDA.w #$2D58 : STA $165A ; Thieves Town - LDA.w #$2D59 : STA $165C ; Ice - LDA.w #$2D5A : STA $165E ; Mire - LDA.w #$2D5B : STA $1660 ; Turtle Rock - - LDA.w #$2D5C : STA $1664 ; Ganon's Tower + +.next_dungeon_name + LDX.w .dungeon_positions,Y + STA.w $1646,X + + INC + + INY : INY + CPY.w #26 : BCC .next_dungeon_name ; write black - LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals - - - LDA #$24F5 : STA $1686, X : STA $16C6, X - INX #2 : CPX.w #$0020 : BCC - + LDX.w #$001E + LDA.w #$24F5 - LDA !HUD_FLAG : AND.w #$0020 : BEQ + : BRL +++ : + - LDA HUDDungeonItems : AND.w #$0001 : BNE + : BRL ++ : + +-- STA.w $1686,X + STA.w $16C6,X + STA.w $1706,X + + DEX : DEX : BPL -- + + + LDA.l !HUD_FLAG : AND.w #$0020 : BEQ + + + JMP .maps_and_compasses + ++ +;------------------------------------------------------------------------------- + + LDA HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys + +.draw_small_keys LDA.w #$2810 : STA $1684 ; small keys icon - SEP #$20 ; set 8-bit accumulator - ; Small Keys - LDA.b #$16 : !ADD $7EF37D : STA $1686 : LDA.b #$28 : ADC #$00 : sta.w $1686+1 ; Hyrule Castle - LDA.b #$16 : !ADD $7EF380 : STA $1688 : LDA.b #$28 : ADC #$00 : sta.w $1688+1 ; Agahnims Tower - LDA.b #$16 : !ADD $7EF37E : STA $168C : LDA.b #$28 : ADC #$00 : sta.w $168C+1 ; Eastern - LDA.b #$16 : !ADD $7EF37F : STA $168E : LDA.b #$28 : ADC #$00 : sta.w $168E+1 ; Desert - LDA.b #$16 : !ADD $7EF386 : STA $1690 : LDA.b #$28 : ADC #$00 : sta.w $1690+1 ; Hera + LDY.w #0 - LDA.b #$16 : !ADD $7EF382 : STA $1694 : LDA.b #$28 : ADC #$00 : sta.w $1694+1 ; PoD - LDA.b #$16 : !ADD $7EF381 : STA $1696 : LDA.b #$28 : ADC #$00 : sta.w $1696+1 ; Swamp - LDA.b #$16 : !ADD $7EF384 : STA $1698 : LDA.b #$28 : ADC #$00 : sta.w $1698+1 ; Skull Woods - LDA.b #$16 : !ADD $7EF387 : STA $169A : LDA.b #$28 : ADC #$00 : sta.w $169A+1 ; Thieves Town - LDA.b #$16 : !ADD $7EF385 : STA $169C : LDA.b #$28 : ADC #$00 : sta.w $169C+1 ; Ice - LDA.b #$16 : !ADD $7EF383 : STA $169E : LDA.b #$28 : ADC #$00 : sta.w $169E+1 ; Mire - LDA.b #$16 : !ADD $7EF388 : STA $16A0 : LDA.b #$28 : ADC #$00 : sta.w $16A0+1 ; Turtle Rock + ; Clear the carry only once + ; it will be cleared by looping condition afterwards + CLC - LDA.b #$16 : !ADD $7EF389 : STA $16A4 : LDA.b #$28 : ADC #$00 : sta.w $16A4+1 ; Ganon's Tower +.next_small_key + LDX.w .small_key_x_offset,Y + LDA.l $7EF37D,X + AND.w #$00FF - REP #$20 ; set 16-bit accumulator - ++ + LDX.w .dungeon_positions,Y + ADC.w #$2816 + STA.w $1686,X + + INY : INY + CPY.w #26 : BCC .next_small_key + +;------------------------------------------------------------------------------- + +.skip_small_keys ; Big Keys - LDA HUDDungeonItems : AND.w #$0002 : BNE + : BRL ++ : + + LDA HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys + + LDA.w #$2811 : STA $16C4 ; big key icon - LDA $7EF367 : AND.w #$0040 : BEQ + ; Hyrule Castle - LDA.w #$2826 : STA $16C6 - + - LDA $7EF367 : AND.w #$0008 : BEQ + ; Agahnims Tower - LDA.w #$2826 : STA $16C8 - + - LDA $7EF367 : AND.w #$0020 : BEQ + ; Eastern - LDA.w #$2826 : STA $16CC - + - LDA $7EF367 : AND.w #$0010 : BEQ + ; Desert - LDA.w #$2826 : STA $16CE - + - LDA $7EF366 : AND.w #$0020 : BEQ + ; Hera - LDA.w #$2826 : STA $16D0 - + - LDA $7EF367 : AND.w #$0002 : BEQ + ; PoD - LDA.w #$2826 : STA $16D4 - + - LDA $7EF367 : AND.w #$0004 : BEQ + ; Swamp - LDA.w #$2826 : STA $16D6 - + - LDA $7EF366 : AND.w #$0080 : BEQ + ; Skull Woods - LDA.w #$2826 : STA $16D8 - + - LDA $7EF366 : AND.w #$0010 : BEQ + ; Thieves Town - LDA.w #$2826 : STA $16DA - + - LDA $7EF366 : AND.w #$0040 : BEQ + ; Ice - LDA.w #$2826 : STA $16DC - + - LDA $7EF367 : AND.w #$0001 : BEQ + ; Mire - LDA.w #$2826 : STA $16DE - + - LDA $7EF366 : AND.w #$0008 : BEQ + ; Turtle Rock - LDA.w #$2826 : STA $16E0 - + - LDA $7EF366 : AND.w #$0004 : BEQ + ; Ganon's Tower - LDA.w #$2826 : STA $16E4 - + - ++ + + ; use X so we can BIT + LDX.w #0 + + ; load once and test multiple times + LDA.l $7EF366 + +.next_big_key + BIT.w .dungeon_bitmasks,X + BEQ ..skip_key + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w $16C6,Y + + ; reload + LDA.l $7EF366 + +..skip_key + INX : INX + CPX.w #26 : BCC .next_big_key + +;------------------------------------------------------------------------------- + +.skip_big_keys + + LDA HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills + + LDA.w #$280F : STA $1704 ; skull icon + + LDY.w #0 + +.next_boss_kill + LDX.w .boss_room_ids,Y + LDA.l $7EF000,X + AND.w #$0800 + BEQ ..skip_boss_kill + + LDA.w #$2826 + LDX.w .dungeon_positions,Y + STA.w $1706,Y + +..skip_boss_kill + INY : INY + CPY.w #26 : BCC .next_boss_kill + +;------------------------------------------------------------------------------- + +.skip_boss_kills + JMP .exit + +;------------------------------------------------------------------------------- ; This should only display if select is pressed in hud - +++ - LDA !HUD_FLAG : AND.w #$0020 : BNE + : BRL +++ : + + .maps_and_compasses + ; Maps - LDA HUDDungeonItems : AND.w #$0004 : BNE + : BRL ++ : + + LDA HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps LDA.w #$2821 : STA $1684 ; map icon - LDA $7EF369 : AND.w #$0040 : BEQ + ; Hyrule Castle - LDA.w #$2826 : STA $1686 - + - LDA $7EF369 : AND.w #$0008 : BEQ + ; Agahnims Tower - LDA.w #$2826 : STA $1688 - + - LDA $7EF369 : AND.w #$0020 : BEQ + ; Eastern - LDA.w #$2826 : STA $168C - + - LDA $7EF369 : AND.w #$0010 : BEQ + ; Desert - LDA.w #$2826 : STA $168E - + - LDA $7EF368 : AND.w #$0020 : BEQ + ; Hera - LDA.w #$2826 : STA $1690 - + - LDA $7EF369 : AND.w #$0002 : BEQ + ; PoD - LDA.w #$2826 : STA $1694 - + - LDA $7EF369 : AND.w #$0004 : BEQ + ; Swamp - LDA.w #$2826 : STA $1696 - + - LDA $7EF368 : AND.w #$0080 : BEQ + ; Skull Woods - LDA.w #$2826 : STA $1698 - + - LDA $7EF368 : AND.w #$0010 : BEQ + ; Thieves Town - LDA.w #$2826 : STA $169A - + - LDA $7EF368 : AND.w #$0040 : BEQ + ; Ice - LDA.w #$2826 : STA $169C - + - LDA $7EF369 : AND.w #$0001 : BEQ + ; Mire - LDA.w #$2826 : STA $169E - + - LDA $7EF368 : AND.w #$0008 : BEQ + ; Turtle Rock - LDA.w #$2826 : STA $16A0 - + - LDA $7EF368 : AND.w #$0004 : BEQ + ; Ganon's Tower - LDA.w #$2826 : STA $16A4 - + - ++ + + ; use X so we can BIT + LDX.w #0 + + ; load once and test multiple times + LDA.l $7EF368 + +.next_map + BIT.w .dungeon_bitmasks,X + BEQ ..skip_map + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w $1686,Y + + ; reload + LDA.l $7EF368 + +..skip_map + INX : INX + CPX.w #26 : BCC .next_map + +;------------------------------------------------------------------------------- + +.skip_maps ; Compasses - LDA HUDDungeonItems : AND.w #$0008 : BNE + : BRL ++ : + + LDA HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses LDA.w #$2C20 : STA $16C4 ; compass icon - LDA $7EF365 : AND.w #$0040 : BEQ + ; Hyrule Castle - LDA.w #$2C26 : STA $16C6 - + - LDA $7EF365 : AND.w #$0008 : BEQ + ; Agahnims Tower - LDA.w #$2C26 : STA $16C8 - + - LDA $7EF365 : AND.w #$0020 : BEQ + ; Eastern - LDA.w #$2C26 : STA $16CC - + - LDA $7EF365 : AND.w #$0010 : BEQ + ; Desert - LDA.w #$2C26 : STA $16CE - + - LDA $7EF364 : AND.w #$0020 : BEQ + ; Hera - LDA.w #$2C26 : STA $16D0 - + - LDA $7EF365 : AND.w #$0002 : BEQ + ; PoD - LDA.w #$2C26 : STA $16D4 - + - LDA $7EF365 : AND.w #$0004 : BEQ + ; Swamp - LDA.w #$2C26 : STA $16D6 - + - LDA $7EF364 : AND.w #$0080 : BEQ + ; Skull Woods - LDA.w #$2C26 : STA $16D8 - + - LDA $7EF364 : AND.w #$0010 : BEQ + ; Thieves Town - LDA.w #$2C26 : STA $16DA - + - LDA $7EF364 : AND.w #$0040 : BEQ + ; Ice - LDA.w #$2C26 : STA $16DC - + - LDA $7EF365 : AND.w #$0001 : BEQ + ; Mire - LDA.w #$2C26 : STA $16DE - + - LDA $7EF364 : AND.w #$0008 : BEQ + ; Turtle Rock - LDA.w #$2C26 : STA $16E0 - + - LDA $7EF364 : AND.w #$0004 : BEQ + ; Ganon's Tower - LDA.w #$2C26 : STA $16E4 - + - ++ : +++ + + ; use X so we can BIT + LDX.w #0 + + ; load once and test multiple times + LDA.l $7EF364 + +.next_compass + BIT.w .dungeon_bitmasks,X + BEQ ..skip_compass + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w $16C6,Y + + ; reload + LDA.l $7EF364 + +..skip_compass + INX : INX + CPX.w #26 : BCC .next_compass + +;------------------------------------------------------------------------------- + +.skip_compasses + +.exit + PLB PLP RTL ;-------------------------------------------------------------------------------- @@ -462,58 +530,77 @@ DrawPendantCrystalDiagram: REP #$30 ; Set 16-bit accumulator & index registers LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals - - LDA.l .row0, X : STA $12EA, X - LDA.l .row1, X : STA $132A, X - LDA.l .row2, X : STA $136A, X - LDA.l .row3, X : STA $13AA, X - LDA.l .row4, X : STA $13EA, X - LDA.l .row5, X : STA $142A, X - LDA.l .row6, X : STA $146A, X - LDA.l .row7, X : STA $14AA, X - LDA.l .row8, X : STA $14EA, X + LDA.l .row0, X : STA $12EA, X + LDA.l .row1, X : STA $132A, X + LDA.l .row2, X : STA $136A, X + LDA.l .row3, X : STA $13AA, X + LDA.l .row4, X : STA $13EA, X + LDA.l .row5, X : STA $142A, X + LDA.l .row6, X : STA $146A, X + LDA.l .row7, X : STA $14AA, X + LDA.l .row8, X : STA $14EA, X INX #2 : CPX.w #$0014 : BCC - - ;pendants - LDA $7EF374 : AND.w #$0004 : BEQ + ; pendant of courage (green) - LDA.w #$3D2B : STA $1332 - LDA.w #$3D2C : STA $1334 - LDA.w #$3D2D : STA $1372 - LDA.w #$3D2E : STA $1374 - + LDA $7EF374 : AND.w #$0002 : BEQ + ; pendant of power (blue) - LDA.w #$2D2B : STA $13AE - LDA.w #$2D2C : STA $13B0 - LDA.w #$2D2D : STA $13EE - LDA.w #$2D2E : STA $13F0 - + LDA $7EF374 : AND.w #$0001 : BEQ + ; pendant of wisdom (red) - LDA.w #$252B : STA $13B6 - LDA.w #$252C : STA $13B8 - LDA.w #$252D : STA $13F6 - LDA.w #$252E : STA $13F8 + ; pendants + LDA $7EF374 + + LSR : BCC + ; pendant of wisdom (red) + LDX.w #$252B + STX.w $13B6 + INX : STX.w $13B8 + INX : STX.w $13F6 + INX : STX.w $13F8 + + + LSR : BCC + ; pendant of power (blue) + LDX.w #$2D2B + STX.w $13AE + INX : STX.w $13B0 + INX : STX.w $13EE + INX : STX.w $13F0 + + + LSR : BCC + ; pendant of courage (green) + LDX.w #$3D2B + STX.w $1332 + INX : STX.w $1334 + INX : STX.w $1372 + INX : STX.w $1374 + - - ;crystals - LDA $7EF37A : AND.w #$0002 : BEQ + ; crystal 1 - LDA.w #$2D44 : STA $14AC - LDA.w #$2D45 : STA $14AE - + LDA $7EF37A : AND.w #$0010 : BEQ + ; crystal 2 - LDA.w #$2D44 : STA $146E - LDA.w #$2D45 : STA $1470 - + LDA $7EF37A : AND.w #$0040 : BEQ + ; crystal 3 - LDA.w #$2D44 : STA $14B0 - LDA.w #$2D45 : STA $14B2 - + LDA $7EF37A : AND.w #$0020 : BEQ + ; crystal 4 - LDA.w #$2D44 : STA $1472 - LDA.w #$2D45 : STA $1474 - + LDA $7EF37A : AND.w #$0004 : BEQ + ; crystal 5 - LDA.w #$2544 : STA $14B4 - LDA.w #$2545 : STA $14B6 - + LDA $7EF37A : AND.w #$0001 : BEQ + ; crystal 6 - LDA.w #$2544 : STA $1476 - LDA.w #$2545 : STA $1478 - + LDA $7EF37A : AND.w #$0008 : BEQ + ; crystal 7 - LDA.w #$2D44 : STA $14B8 - LDA.w #$2D45 : STA $14BA + + + + ; crystals + LDA $7EF37A + LDX.w #$2D44 + LDY.w #$2D45 + + BIT.w #$0002 : BEQ + ; crystal 1 + STX.w $14AC + STY.w $14AE + + BIT.w #$0010 : BEQ + ; crystal 2 + STX.w $146E + STY.w $1470 + + BIT.w #$0040 : BEQ + ; crystal 3 + STX.w $14B0 + STY.w $14B2 + + BIT.w #$0020 : BEQ + ; crystal 4 + STX.w $1472 + STY.w $1474 + + BIT.w #$0008 : BEQ + ; crystal 7 + STX.w $14B8 + STY.w $14BA + + + LDX.w #$2544 + LDY.w #$2545 + + BIT.w #$0004 : BEQ + ; crystal 5 + STX.w $14B4 + STY.w $14B6 + + BIT.w #$0001 : BEQ + ; crystal 6 + STX.w $1476 + STY.w $1478 + + + PLB : PLP RTL ;================================================================================ diff --git a/quickswap.asm b/quickswap.asm index da04ddb..96f5d0d 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -11,12 +11,6 @@ QuickSwap: LDA.l QuickSwapFlag : BEQ .done LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items - ;TODO add romtype and race rom checks here - LDA.l TournamentSeed : BEQ + - LDA.l GameType : AND.b #$02 : BNE + - BRA .done - + - PHX XBA ; restore the stashed value CMP.b #$30 : BNE + @@ -38,6 +32,7 @@ QuickSwap: CPX.b #$01 : BEQ + ; bow CPX.b #$05 : BEQ + ; powder CPX.b #$0D : BEQ + ; flute + CPX.b #$10 : BEQ + ; bottle BRA .store + STX $0202 : JSL ProcessMenuButtons_y_pressed @@ -54,20 +49,20 @@ RTL RCode: LDA.w $0202 : TAX - - CPX.b #$0F : BNE + ; incrementing into bottle - LDX.b #$00 : BRA ++ - + CPX.b #$10 : BNE + ; incrementing bottle - LDA.l $7EF34F : TAX - -- : ++ - CPX.b #$04 : BEQ .noMoreBottles - INX - LDA.l $7EF35B,X : BEQ -- - TXA : STA.l $7EF34F - LDX #$10 - RTS - .noMoreBottles - LDX #$11 - BRA .nextItem +; CPX.b #$0F : BNE + ; incrementing into bottle +; LDX.b #$00 : BRA ++ +; + CPX.b #$10 : BNE + ; incrementing bottle +; LDA.l $7EF34F : TAX +; -- : ++ +; CPX.b #$04 : BEQ .noMoreBottles +; INX +; LDA.l $7EF35B,X : BEQ -- +; TXA : STA.l $7EF34F +; LDX #$10 +; RTS +; .noMoreBottles +; LDX #$11 +; BRA .nextItem + CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1 + INX .nextItem @@ -77,19 +72,19 @@ RTS LCode: LDA.w $0202 : TAX - - CPX.b #$11 : BNE + ; decrementing into bottle - LDX.b #$05 : BRA ++ - + CPX.b #$10 : BNE + ; decrementing bottle - LDA.l $7EF34F : TAX - -- : ++ - CPX.b #$01 : BEQ .noMoreBottles - DEX - LDA.l $7EF35B,X : BEQ -- - TXA : STA.l $7EF34F - LDX.b #$10 - RTS - .noMoreBottles - LDX.b #$0F : BRA .nextItem +; CPX.b #$11 : BNE + ; decrementing into bottle +; LDX.b #$05 : BRA ++ +; + CPX.b #$10 : BNE + ; decrementing bottle +; LDA.l $7EF34F : TAX +; -- : ++ +; CPX.b #$01 : BEQ .noMoreBottles +; DEX +; LDA.l $7EF35B,X : BEQ -- +; TXA : STA.l $7EF34F +; LDX.b #$10 +; RTS +; .noMoreBottles +; LDX.b #$0F : BRA .nextItem + CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14 + DEX .nextItem diff --git a/rngfixes.asm b/rngfixes.asm index 4ad56a0..983ffec 100644 --- a/rngfixes.asm +++ b/rngfixes.asm @@ -108,9 +108,9 @@ RTL !RNG_POINTERS = "$7F5200" GetStaticRNG: PHX : PHP - REP #$20 ; set 16-bit accumulator and index registers - AND.w #$007F - ASL : TAX : LDA !RNG_POINTERS, X : INC : AND.w #$03FF : STA !RNG_POINTERS, X : TAX : ASL ; increment pointer and move value to X + REP #$30 ; set 16-bit accumulator and index registers + AND.w #$000F + ASL : TAX : LDA !RNG_POINTERS, X : INC : AND.w #$03FF : STA !RNG_POINTERS, X : TAX ; increment pointer and move value to X LDA Static_RNG, X ; load RNG value PLP : PLX RTL @@ -124,7 +124,7 @@ InitRNGPointerTable: LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2 - CPX.w #$007F : !BLT - + CPX.w #$001F : !BLT - PLP : PLX RTL .rngDefaults diff --git a/save.asm b/save.asm index f1add73..1b41061 100644 --- a/save.asm +++ b/save.asm @@ -1,5 +1,13 @@ ;-------------------------------------------------------------------------------- Validate_SRAM: + REP #$30 ; vanilla behavior from $0CCD45, includes prize pack reset after save and quit + LDX #$00FE : - + STZ $0D00, X + STZ $0E00, X + STZ $0F00, X + DEX #2 + BPL - + SEP #$30 RTL ;-------------------------------------------------------------------------------- ClearExtendedSaveFile: diff --git a/scroll.asm b/scroll.asm index 8ee6e31..f66918c 100644 --- a/scroll.asm +++ b/scroll.asm @@ -209,12 +209,10 @@ QuadrantLoadOrderBeforeScroll: lda $045f : beq .end lda #$08 : sta $045c ; start with opposite quadrant row .end - jsl $0091c4 ; what we overwrote - rtl + JML $0091c4 ; what we overwrote QuadrantLoadOrderAfterScroll: lda $045f : beq .end stz $045c : stz $045f ; draw other row and clear flag .end - jsl $0091c4 ; what we overwrote - rtl \ No newline at end of file + JML $0091c4 ; what we overwrote \ No newline at end of file diff --git a/shopkeeper.asm b/shopkeeper.asm index 526ac26..daa060c 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -72,10 +72,10 @@ DrawPrice: LDY.b #$FF LDX #$00 ; clear bigram pointer - LDA $0C : CMP.w #1000 : !BLT + : BRL .len4 : + - CMP.w #100 : !BLT + : BRL .len3 : + - CMP.w #10 : !BLT + : BRL .len2 : + - CMP.w #1 : !BLT + : BRL .len1 : + + LDA $0C : CMP.w #1000 : !BLT + : JMP .len4 : + + CMP.w #100 : !BLT + : JMP .len3 : + + CMP.w #10 : !BLT + : JMP .len2 : + + CMP.w #1 : !BLT + : JMP .len1 : + .len4 %DrawDigit(#1000,#6) @@ -167,7 +167,7 @@ SpritePrep_ShopKeeper: .fail SEP #$20 ; set 8-bit accumulator LDA.b #$FF : STA !SHOP_TYPE ; $FF = error condition - BRL .done + JMP .done .success SEP #$20 ; set 8-bit accumulator @@ -175,10 +175,10 @@ SpritePrep_ShopKeeper: LDX.w #$0000 LDY.w #$0000 - - TYA : CMP !SHOP_CAPACITY : !BLT ++ : BRL .stop : ++ - LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : BRL .stop : ++ + TYA : CMP !SHOP_CAPACITY : !BLT ++ : JMP .stop : ++ + LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .stop : ++ - LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : BRL .next : ++ + LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : JMP .next : ++ LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l !SHOP_INVENTORY, X : PLX LDA.l ShopContentsTable+2, X : PHX : TYX : STA.l !SHOP_INVENTORY+1, X : PLX LDA.l ShopContentsTable+3, X : PHX : TYX : STA.l !SHOP_INVENTORY+2, X : PLX @@ -221,7 +221,7 @@ SpritePrep_ShopKeeper: .next INX #9 - BRL - + JMP - .stop LDA $A0 : CMP.b #$FF : BNE .normal @@ -321,7 +321,7 @@ Shopkeeper_UploadVRAMTiles: LDA #$7E : STA $4304 LDA !SHOP_TYPE : AND.b #$10 : BNE .special - BRL .normal + JMP .normal .special @@ -354,7 +354,7 @@ Shopkeeper_UploadVRAMTiles: LDA #$80 : STA $2116 ; set VRAM register destination address LDA #$5B : STA $2117 LDA #$01 : STA $420B ; begin DMA transfer - BRL .end + JMP .end .normal LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40 @@ -523,9 +523,9 @@ endmacro Shopkeeper_DrawMerchant: LDA.l !SHOP_MERCHANT : AND.b #$07 BEQ Shopkeeper_DrawMerchant_Type0 - CMP.b #$01 : BNE + : BRL Shopkeeper_DrawMerchant_Type1 : + - CMP.b #$02 : BNE + : BRL Shopkeeper_DrawMerchant_Type2 : + - CMP.b #$03 : BNE + : BRL Shopkeeper_DrawMerchant_Type3 : + + CMP.b #$01 : BNE + : JMP Shopkeeper_DrawMerchant_Type1 : + + CMP.b #$02 : BNE + : JMP Shopkeeper_DrawMerchant_Type2 : + + CMP.b #$03 : BNE + : JMP Shopkeeper_DrawMerchant_Type3 : + CMP.b #$04 : BNE + : RTS : + ;-------------------------------------------------------------------------------- Shopkeeper_DrawMerchant_Type0: @@ -618,13 +618,13 @@ Shopkeeper_BuyItem: LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound - BRL .done + JMP .done .full_bottles LDA.b #$6B LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional LDA.b #$3C : STA $012E ; error sound - BRL .done + JMP .done .buy LDA !SHOP_TYPE : AND.b #$80 : BNE ++ ; don't charge if this is a take-any REP #$20 : LDA $7EF360 : !SUB !SHOP_INVENTORY+1, X : STA $7EF360 : SEP #$20 ; Take price away @@ -639,7 +639,7 @@ Shopkeeper_BuyItem: LDA.l !SHOP_INVENTORY, X : TAY : JSL.l Link_ReceiveItem LDA.l !SHOP_INVENTORY+3, X : INC : STA.l !SHOP_INVENTORY+3, X LDA.b #0 : STA.l !SHOP_ENABLE_COUNT - + TXA : LSR #2 : TAX LDA !SHOP_TYPE : BIT.b #$80 : BNE + LDA !SHOP_KEEP_REFILL : BNE +++ @@ -806,7 +806,7 @@ RTS ;-------------------------------------------------------------------------------- Shopkeeper_DrawNextItem: - LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : BRL .next : + + LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : JMP .next : + PHY diff --git a/spiral.asm b/spiral.asm index 2dd2ab8..e73b5e1 100644 --- a/spiral.asm +++ b/spiral.asm @@ -182,7 +182,7 @@ InroomStairsWarp: { sta $02 stz $07 lda $01 : and #$10 : lsr #4 - brl .layer + JMP .layer .notEdge lda $01 : and #$03 : cmp #$03 : bne .normal txa : and #$06 : sta $07 diff --git a/stats/creditsnew.asm b/stats/creditsnew.asm new file mode 100644 index 0000000..106ffd1 --- /dev/null +++ b/stats/creditsnew.asm @@ -0,0 +1,744 @@ +;=================================================================================================== +; LEAVE THIS HERE FOR PHP WRITES +;=================================================================================================== +YourSpriteCreditsHi: +db 2 +db 55 +db " " ; $238002 + +YourSpriteCreditsLo: +db 2 +db 55 +db " " ; $238020 + +;=================================================================================================== + +CreditsLineTable: + fillword CreditsLineBlank : fill 800 + +;=================================================================================================== + +!CLINE = -1 + +;--------------------------------------------------------------------------------------------------- + +macro smallcredits(text, color) + !CLINE #= !CLINE+1 + table "creditscharmapsmall_.txt" + + ?line: + db (32-(?end-?text))/2 + db 2*(?end-?text)-1 + ?text: + db "" + ?end: + + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw ?line + pullpc + +endmacro + +;--------------------------------------------------------------------------------------------------- +macro bigcredits(text) + !CLINE #= !CLINE+1 + table "creditscharmapbighi.txt" + + ?line_top: + db (32-(?end-?text))/2 + db 2*(?end-?text)-1 + ?text: + db "" + ?end: + + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw ?line_top + pullpc + + + table "creditscharmapbiglo.txt" + ?line_bottom: + db (32-(?end-?text))/2 + db 2*(?end-?text)-1 + db "" + + + !CLINE #= !CLINE+1 + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw ?line_bottom + pullpc + +endmacro + +;--------------------------------------------------------------------------------------------------- + +macro bigcreditsleft(text) + !CLINE #= !CLINE+1 + table "creditscharmapbighi.txt" + + ?line_top: + db 2 + db 2*(?end-?text)-1 + ?text: + db "" + ?end: + + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw ?line_top + pullpc + + + table "creditscharmapbiglo.txt" + ?line_bottom: + db 2 + db 2*(?end-?text)-1 + db "" + + + !CLINE #= !CLINE+1 + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw ?line_bottom + pullpc + +endmacro + +;--------------------------------------------------------------------------------------------------- + +macro emptyline() + !CLINE #= !CLINE+1 + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw CreditsEmptyLine + pullpc +endmacro + +macro blankline() + !CLINE #= !CLINE+1 + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw CreditsLineBlank + pullpc +endmacro + +macro addarbline(l) + !CLINE #= !CLINE+1 + pushpc + org CreditsLineTable+!CLINE+!CLINE : dw + pullpc +endmacro + +;=================================================================================================== + +CreditsEmptyLine: + db $00, $01, $9F + +CreditsLineBlank: + db $FF + +;--------------------------------------------------------------------------------------------------- + +%emptyline() +%smallcredits("ORIGINAL GAME STAFF", "yellow") + +%blankline() +%blankline() + +%smallcredits("EXECUTIVE PRODUCER", "green") + +%blankline() + +%bigcredits("HIROSHI YAMAUCHI") + +%blankline() +%blankline() + +%smallcredits("PRODUCER", "yellow") + +%blankline() + +%bigcredits("SHIGERU MIYAMOTO") + +%blankline() +%blankline() + +%smallcredits("DIRECTOR", "red") + +%blankline() + +%bigcredits("TAKASHI TEZUKA") + +%blankline() +%blankline() + +%smallcredits("SCRIPT WRITER", "green") + +%blankline() + +%bigcredits("KENSUKE TANABE") + +%blankline() +%blankline() + +%smallcredits("ASSISTANT DIRECTORS", "yellow") + +%blankline() + +%bigcredits("YASUHISA YAMAMURA") + +%blankline() + +%bigcredits("YOICHI YAMADA") + +%blankline() +%blankline() + +%smallcredits("SCREEN GRAPHICS DESIGNERS", "green") + +%emptyline() +%emptyline() + +%smallcredits("OBJECT DESIGNERS", "yellow") + +%blankline() + +%bigcredits("SOICHIRO TOMITA") + +%blankline() + +%bigcredits("TAKAYA IMAMURA") + +%blankline() +%blankline() + +%smallcredits("BACK GROUND DESIGNERS", "yellow") + +%blankline() + +%bigcredits("MASANAO ARIMOTO") + +%blankline() + +%bigcredits("TSUYOSHI WATANABE") + +%blankline() +%blankline() + +%smallcredits("PROGRAM DIRECTOR", "red") + +%blankline() + +%bigcredits("TOSHIHIKO NAKAGO") + +%blankline() +%blankline() + +%smallcredits("MAIN PROGRAMMER", "yellow") + +%blankline() + +%bigcredits("YASUNARI SOEJIMA") + +%blankline() +%blankline() + +%smallcredits("OBJECT PROGRAMMER", "green") + +%blankline() + +%bigcredits("KAZUAKI MORITA") + +%blankline() +%blankline() + +%smallcredits("PROGRAMMERS", "yellow") + +%blankline() + +%bigcredits("TATSUO NISHIYAMA") + +%blankline() + +%bigcredits("YUICHI YAMAMOTO") + +%blankline() + +%bigcredits("YOSHIHIRO NOMOTO") + +%blankline() + +%bigcredits("EIJI NOTO") + +%blankline() + +%bigcredits("SATORU TAKAHATA") + +%blankline() + +%bigcredits("TOSHIO IWAWAKI") + +%blankline() + +%bigcredits("SHIGEHIRO KASAMATSU") + +%blankline() + +%bigcredits("YASUNARI NISHIDA") + +%blankline() +%blankline() + +%smallcredits("SOUND COMPOSER", "red") + +%blankline() + +%bigcredits("KOJI KONDO") + +%blankline() +%blankline() + +%smallcredits("COORDINATORS", "green") + +%blankline() + +%bigcredits("KEIZO KATO") + +%blankline() + +%bigcredits("TAKAO SHIMIZU") + +%blankline() +%blankline() + +%smallcredits("PRINTED ART WORK", "yellow") + +%blankline() + +%bigcredits("YOICHI KOTABE") + +%blankline() + +%bigcredits("HIDEKI FUJII") + +%blankline() + +%bigcredits("YOSHIAKI KOIZUMI") + +%blankline() + +%bigcredits("YASUHIRO SAKAI") + +%blankline() + +%bigcredits("TOMOAKI KUROUME") + +%blankline() +%blankline() + +%smallcredits("SPECIAL THANKS TO", "red") + +%blankline() + +%bigcredits("NOBUO OKAJIMA") + +%blankline() + +%bigcredits("YASUNORI TAKETANI") + +%blankline() + +%bigcredits("KIYOSHI KODA") + +%blankline() + +%bigcredits("TAKAMITSU KUZUHARA") + +%blankline() + +%bigcredits("HIRONOBU KAKUI") + +%blankline() + +%bigcredits("SHIGEKI YAMASHIRO") + +%blankline() + +%emptyline() +%emptyline() +%emptyline() +%emptyline() + +;--------------------------------------------------------------------------------------------------- + +%smallcredits("RANDOMIZER CONTRIBUTORS", "red") + +%blankline() +%blankline() + +%smallcredits("ITEM RANDOMIZER", "yellow") + +%blankline() + +%bigcredits("KATDEVSGAMES VEETORP") + +%blankline() + +%bigcredits("CHRISTOSOWEN DESSYREQT") + +%blankline() + +%bigcredits("SMALLHACKER SYNACK") + +%blankline() +%blankline() + +%smallcredits("ENTRANCE RANDOMIZER", "green") + +%blankline() + +%bigcredits("AMAZINGAMPHAROS LLCOOLDAVE") + +%blankline() + +%bigcredits("KEVINCATHCART CASSIDYMOEN") + +%blankline() +%blankline() + +%smallcredits("ENEMY RANDOMIZER", "yellow") + +%blankline() + +%bigcredits("ZARBY89 SOSUKE3") + +%blankline() + +%bigcredits("ENDEROFGAMES") + +%blankline() +%blankline() + +%smallcredits("DOOR RANDOMIZER", "green") + +%blankline() + +%bigcredits("AERINON COMPILING") + +%blankline() +%blankline() + +%smallcredits("FESTIVE RANDOMIZER", "yellow") + +%blankline() + +%bigcredits("KAN TOTAL") + +%blankline() + +%bigcredits("CATOBAT DINSAPHIR") + +%blankline() +%blankline() + +%smallcredits("SPRITE DEVELOPMENT", "green") + +%blankline() + +%bigcredits("MIKETRETHEWEY IBAZLY") + +%blankline() +%bigcredits("FISH_WAFFLE64 KRELBEL") + +%blankline() + +%bigcredits("ACHY ARTHEAU") + +%blankline() + +%bigcredits("GLAN TWROXAS") + +%blankline() + +%bigcredits("PLAGUEDONE TARTHORON") + +%blankline() +%blankline() + +%smallcredits("YOUR SPRITE BY", "yellow") + +%addarbline(YourSpriteCreditsHi) +%addarbline(YourSpriteCreditsLo) + +%blankline() +%blankline() + +%smallcredits("MSU SUPPORT", "green") + +%blankline() + +%bigcredits("QWERTYMODO") + +%blankline() +%blankline() + +%smallcredits("PALETTE SHUFFLER", "yellow") + +%blankline() + +%bigcredits("NELSON AKA SWR") + +%blankline() +%blankline() + +%smallcredits("SPECIAL THANKS", "red") + +%blankline() + +%bigcredits("SUPERSKUJ EVILASH25") + +%blankline() + +%bigcredits("MYRAMONG JOSHRTA") + +%blankline() + +%bigcredits("WALKINGEYE MATHONNAPKINS") + +%blankline() + +%bigcredits("MICHAELK FOUTON") + +%blankline() + +%bigcredits("SAKURATSUBASA") + +%blankline() + +%bigcredits("AND...") + +%blankline() + +%bigcredits("THE ALTTP RANDOMIZER COMMUNITY") + +%blankline() +%blankline() + +%smallcredits("COMMUNITY DISCORD", "green") + +%blankline() + +%bigcredits("HTTPS://ALTTPR.COM/DISCORD") + +%blankline() + +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() + +;=================================================================================================== + +print "Line number: !CLINE | Expected: 302" + +if !CLINE > 302 + error "Too many credits lines. !CLINE > 302" + +elseif !CLINE < 302 + warn "Too few credits lines. !CLINE < 302; Adding additional empties for alignment." + +endif + + +; Set line always to line up with stats +!CLINE #= 302 + +;=================================================================================================== + +%smallcredits("THE IMPORTANT STUFF", "yellow") + +%blankline() +%blankline() + +%emptyline() +%smallcredits("TIME FOUND", "green") + +%blankline() +%blankline() + +%bigcreditsleft("FIRST SWORD") + +%blankline() + +%bigcreditsleft("PEGASUS BOOTS") + +%blankline() + +%bigcreditsleft("FLUTE") + +%blankline() + +%bigcreditsleft("MIRROR") + +%blankline() +%blankline() + +%emptyline() +%smallcredits("BOSS KILLS", "yellow") + +%blankline() +%blankline() + +%bigcreditsleft("SWORDLESS /13") + +%blankline() + +%bigcreditsleft("FIGHTER'S SWORD /13") + +%blankline() + +%bigcreditsleft("MASTER SWORD /13") + +%blankline() + +%bigcreditsleft("TEMPERED SWORD /13") + +%blankline() + +%bigcreditsleft("GOLD SWORD /13") + +%blankline() +%blankline() + +%smallcredits("GAME STATS", "red") + +%blankline() +%blankline() + +print "GT Big Key Credit Start: ", pc +%bigcreditsleft("GT BIG KEY /22") + +%blankline() + +%bigcreditsleft("BONKS") + +%blankline() + +%bigcreditsleft("SAVE AND QUITS") + +%blankline() + +%bigcreditsleft("DEATHS") + +%blankline() + +%bigcreditsleft("FAERIE REVIVALS") + +%blankline() + +%bigcreditsleft("TOTAL MENU TIME") + +%blankline() + +%bigcreditsleft("TOTAL LAG TIME") + +%blankline() +%blankline() + + +%blankline() +%blankline() + + +%blankline() +%blankline() + + +%blankline() +%blankline() + + +%blankline() + +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +print "Collection Rate Credit Start: ", pc +%bigcreditsleft("COLLECTION RATE /216") + +%blankline() + +%bigcreditsleft("TOTAL TIME") + +%blankline() + +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() +%emptyline() + +;--------------------------------------------------------------------------------------------------- + +!FIRST_SWORD_X = 19 +!FIRST_SWORD_Y = 310 +!PEGASUS_BOOTS_X = 19 +!PEGASUS_BOOTS_Y = 313 +!FLUTE_X = 19 +!FLUTE_Y = 316 +!MIRROR_X = 19 +!MIRROR_Y = 319 +!SWORDLESS_X = 23 +!SWORDLESS_Y = 327 +!FIGHTERS_SWORD_X = 23 +!FIGHTERS_SWORD_Y = 330 +!MASTER_SWORD_X = 23 +!MASTER_SWORD_Y = 333 +!TEMPERED_SWORD_X = 23 +!TEMPERED_SWORD_Y = 336 +!GOLD_SWORD_X = 23 +!GOLD_SWORD_Y = 339 +!GT_BIG_KEY_X = 23 +!GT_BIG_KEY_Y = 346 +!BONKS_X = 26 +!BONKS_Y = 349 +!SAVE_AND_QUITS_X = 26 +!SAVE_AND_QUITS_Y = 352 +!DEATHS_X = 26 +!DEATHS_Y = 355 +!FAERIE_REVIVALS_X = 26 +!FAERIE_REVIVALS_Y = 358 +!TOTAL_MENU_TIME_X = 19 +!TOTAL_MENU_TIME_Y = 361 +!TOTAL_LAG_TIME_X = 19 +!TOTAL_LAG_TIME_Y = 364 +!COLLECTION_RATE_X = 22 +!COLLECTION_RATE_Y = 380 +!TOTAL_TIME_X = 19 +!TOTAL_TIME_Y = 383 diff --git a/stats/main.asm b/stats/main.asm index b78b459..0a666ad 100755 --- a/stats/main.asm +++ b/stats/main.asm @@ -6,7 +6,7 @@ lorom !BGE = "BCS" org $238000 -incsrc stats/credits.asm +incsrc stats/creditsnew.asm FontGfx: incbin stats/font.gb @@ -226,7 +226,7 @@ RenderCreditsStatCounter: JSR FindLine BCS + - BRL .endStats + JMP .endStats + ; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA @@ -237,7 +237,7 @@ RenderCreditsStatCounter: AND #$0003 ; TT CMP.w #$0000 BEQ .normalStat - BRL .timeStat + JMP .timeStat .normalStat ; == Write Stripe header (VRAM address, i.e. tile coordinates) == @@ -491,7 +491,7 @@ RenderCreditsStatCounter: %StripeTile() %StripeEnd() - BRL .endStats + JMP .endStats RenderLineNumber: diff --git a/swordswap.asm b/swordswap.asm index 106f5d8..fe3774f 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -167,7 +167,7 @@ GetSmithSword: ;================================================================================ CheckMedallionSword: PHB : PHX : PHY - LDA.l AllowSwordlessMedallionUse : BNE +++ : BRL + : +++ + LDA.l AllowSwordlessMedallionUse : BNE +++ : JMP + : +++ LDA $1B : BEQ .outdoors .indoors REP #$20 ; set 16-bit accumulator @@ -175,11 +175,11 @@ CheckMedallionSword: CMP.w #$000E : BNE ++ : .freezor1 LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord - BRL .permit + JMP .permit ++ : CMP.w #$007E : BNE ++ : .freezor2 LDA $22 : AND.w #$01FF : CMP.w #112-8 : !BLT .normal : CMP.w #112+32-8 : !BGE .normal ; check x-coord LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord - BRL .permit + JMP .permit ++ : CMP.w #$00DE : BNE ++ : .kholdstare LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord LDA $20 : AND.w #$01FF : CMP.w #144-22 : !BLT .normal : CMP.w #144+32-22 : !BGE .normal ; check y-coord diff --git a/tables.asm b/tables.asm index 2dbd0c0..51f9cae 100644 --- a/tables.asm +++ b/tables.asm @@ -153,6 +153,9 @@ db #$00 ; #$03 = Require "NumberOfCrystalsRequiredForGanon" Crystals and Aga2 ; #$04 = Require "NumberOfCrystalsRequiredForGanon" Crystals ; #$05 = Require "GoalItemRequirement" Goal Items +; #$06 = Light Speed +; #$07 = Require All Crystals and Crystal Bosses +; #$08 = Require All Crystal Bosses only ;-------------------------------------------------------------------------------- org $30803F ; PC 0x18003F HammerableGanon: @@ -184,7 +187,8 @@ db #$00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- org $308045 ; PC 0x180045 HUDDungeonItems: -db #$00 ; display ----dcba a: Small Keys, b: Big Key, c: Map, d: Compass + ; display ---edcba a: Small Keys, b: Big Key, c: Map, d: Compass, e: Bosses +db #$00 ;-------------------------------------------------------------------------------- org $308046 ; PC 0x180046 Link's starting equipment LinkStartingRupees: @@ -380,7 +384,11 @@ org $30808C ; PC 0x18008C PreopenGanonsTower: db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -; 0x18008D - 0x18008F (unused) +org $30808D ; PC 0x18008D +InstantPostAgaWorldState: +db $00 ; #$00 = Off (default) - #$01 = On +;-------------------------------------------------------------------------------- +; 0x18008E - 0x18008F (unused) ;-------------------------------------------------------------------------------- org $308090 ; PC 0x180090 - 0x180097 ProgressiveSwordLimit: @@ -865,8 +873,8 @@ Restrict_Ponds: db #$01 ; #$00 = Original Behavior - #$01 - Restrict to Bottles (Default) ;================================================================================ org $30817F ; PC 0x18017F -Seizure_Safety: -db #$00 ; #$00 = Off (Default) - #$xx = Limit Certain Effects +DisableFlashing: +db #$00 ; #$00 = Flashing Enabled (Default) - #$01 = Flashing Disabled ;================================================================================ ;---- --hb ;h - Hookshot diff --git a/tablets.asm b/tablets.asm index 338bef7..1ac1742 100644 --- a/tablets.asm +++ b/tablets.asm @@ -79,13 +79,13 @@ IsMedallion: CMP.w #$03 : BNE + ; Death Mountain LDA $22 : CMP.w #1890 : !BGE ++ SEC - BRL .done + JMP .done ++ BRA .false + CMP.w #$30 : BNE + ; Desert LDA $22 : CMP.w #512 : !BLT ++ SEC - BRL .done + JMP .done ++ + .false diff --git a/utilities.asm b/utilities.asm index b08b67b..b61baf5 100644 --- a/utilities.asm +++ b/utilities.asm @@ -320,7 +320,7 @@ IsNarrowSprite: JSR.w CountBottles : CMP.l BottleLimit : !BLT + LDA.l BottleLimitReplacement JSL.l IsNarrowSprite - BRL .done + JMP .done + : BRA .continue .notBottle CMP.b #$5E : BNE ++ ; Progressive Sword @@ -686,16 +686,17 @@ RTL ; caller is responsible for setting 8-bit mode and preserving X and Y ;-------------------------------------------------------------------------------- CountBits: - PHB : PHK : PLB - TAX ; Save a copy of value - LSR #4 ; Shift down hi nybble, Leave <3> in C - TAY ; And save <7:4> in Y - TXA ; Recover value - AND.b #$07 ; Put out <2:0> in X - TAX ; And save in X - LDA NybbleBitCounts, Y; Fetch count for Y - ADC.l NybbleBitCounts, X; Add count for X & C - PLB + PHX + TAX ; Save a copy of value + LSR #4 ; Shift down hi nybble, Leave <3> in C + PHA ; And save <7:4> in Stack + TXA ; Recover value + AND.b #$07 ; Put out <2:0> in X + TAX ; And save in X + LDA.l NybbleBitCounts, X ; Fetch count for <2:0> + PLX ; get <7:4> + ADC.l NybbleBitCounts, X ; Add count for S & C + PLX RTL ; Look up table of bit counts in the values $00-$0F diff --git a/zelda.asm b/zelda.asm index f03a4ba..358d7e8 100644 --- a/zelda.asm +++ b/zelda.asm @@ -5,15 +5,14 @@ SpawnZelda: LDA.l $7EF3CC : CMP #$08 : BEQ + ; don't spawn if dwarf is present CMP #$07 : BEQ + ; don't spawn if frog is present CMP #$0C : BEQ + ; don't spawn if purple chest is present - CLC : RTL - + - SEC -RTL + CLC + + RTL ;-------------------------------------------------------------------------------- EndRainState: LDA $7EF3C5 : CMP.b #$02 : !BGE + ; skip if past escape already LDA.b #$00 : STA !INFINITE_ARROWS : STA !INFINITE_BOMBS : STA !INFINITE_MAGIC LDA.b #$02 : STA $7EF3C5 ; end rain state + JSL MaybeSetPostAgaWorldState + RTL ;-------------------------------------------------------------------------------- diff --git a/zoraking.asm b/zoraking.asm index 0faef03..020d805 100644 --- a/zoraking.asm +++ b/zoraking.asm @@ -4,8 +4,7 @@ LoadZoraKingItemGFX: LDA.l ZoraItem_Player : STA !MULTIWORLD_SPRITEITEM_PLAYER_ID LDA.l $1DE1C3 ; location randomizer writes zora item to - JSL.l PrepDynamicTile -RTL + JML.l PrepDynamicTile ;-------------------------------------------------------------------------------- JumpToSplashItemTarget: LDA $0D90, X