From bc0f39627533ad79ffb012b4c68d00d5dbe04ef1 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sun, 18 May 2025 00:59:34 -0500 Subject: [PATCH] Challenge modes: OHKO and Gloom --- data/c2e3e.bin | Bin 2048 -> 2048 bytes data/c2e3e.gfx | Bin 1581 -> 1561 bytes events.asm | 26 +++++++++++++++- newhud.asm | 83 ++++++++++++++++++++++++++++++++----------------- tables.asm | 26 ++++++++++++++-- timer.asm | 1 + 6 files changed, 104 insertions(+), 32 deletions(-) diff --git a/data/c2e3e.bin b/data/c2e3e.bin index 5d75fdd855e1aca978fcb4ed795731f574089337..af6aebae840f2bd51e1d5a6a4085bb696906b128 100644 GIT binary patch delta 79 zcmZn=Xb_mNK#xUM%3jDE1XXM$B^el|?47z_=-<`<)Amo~ckN-|0eGMgtb6|e#TXwMtG delta 66 zcmZn=Xb_mNK#$Yfv|c4&6$m}6jg1)?G^@4hRQ{~`r(3UCU0uzp3$L^n@m%4P)s4_g_W diff --git a/data/c2e3e.gfx b/data/c2e3e.gfx index 811afe1625f3ec2d1e08c205619642180a0b600a..fc8e82f09843fde2683dcae7f05f25988ff5cec8 100644 GIT binary patch delta 719 zcmWkrTSydP82$da>}qZ(N*86*+*K({!iQQJWKV6r)mi-T>h0hy@&-iFiOtRu^A{CGCk-{1Nu&8dL7LBk5V z>70ULi+@t^lZF&@x?5+qi={C5R<=a)wK9QMFn6(n+j<9+hQaZ`ud}+djI{sSEvB7k z+80ITVO5q^E5t7^N-9`+$W81{EYtSpKCTl~JbIkN=R_(T%Og13?ak{jWf!d^{hOdZnC2rj-{ zDpW5V6-6_&@LF3;{ufdMr4 zef2TPO$^j1FBvl#>b4mW4}A+uSKrvsu<@n z_T3&k8JM@N(@x6)iGP;XsCvHWh>k@A(ZrbDKxH5%mr#NV Ox@je7@;%|EyzU9xd@1epZ7@oE2RDybo z5;gm>5Zz+2!x&wD6Pt~7eH~K$l#S7v4HEPP8u&qF7m-~Ev~a9|lL}uZ#cIsyCs-wa)FmS>U=CrZFF2C|>v)|t7Q7nU7%kMsI2ulAM+9{zX8^^SzJyhV zCGeO%=PT_V5N&}EObZ+VY5O2(uLZFU?s=S4bxM^9%}gY=N!XiDaOV=wXJTvbR5Qt1 z1g#L*DWOoTjfc!}<`;?&)`cIEa2-e)v{!-?By+owH_RabD-_%R=tMfY8d>aH=}kP) z72fEMo*s!@3$B!_*Tqt37WQ5!Q?$FBIgyH_f+2 diff --git a/events.asm b/events.asm index 0f3b39c..a62655d 100644 --- a/events.asm +++ b/events.asm @@ -208,18 +208,37 @@ OnInitFileSelect: JSL EnableForceBlank RTL ;-------------------------------------------------------------------------------- +OnGloomDamage: + LDA.b #$01 + STA.l UpdateHUDFlag + LDA.l MaximumHealth + SEC : SBC.b #$08 + STA.l CurrentHealth + BEQ + + STA.l MaximumHealth ++ RTL +;-------------------------------------------------------------------------------- OnLinkDamaged: JSL IncrementDamageTakenCounter_Arb + LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom JML OHKOTimer +.gloom + STZ.b $00 + JML OnGloomDamage ;-------------------------------------------------------------------------------- ;OnEnterWater: ; JSL UnequipCapeQuiet ; what we wrote over ;RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPit: + LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom JSL OHKOTimer + BRA + +.gloom + JSL OnGloomDamage + CLC : ADC.b #$08 : STA.l CurrentHealth - LDA.l AllowAccidentalMajorGlitch ++ LDA.l AllowAccidentalMajorGlitch BEQ ++ -- LDA.b #$14 : STA.b GameSubMode ; thing we wrote over @@ -231,7 +250,12 @@ OnLinkDamagedFromPit: RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPitOutdoors: + LDA.l ChallengeModes : AND.b #$03 : CMP.b #$02 : BEQ .gloom JML OHKOTimer ; make sure this is last +.gloom + JSL OnGloomDamage + CLC : ADC.b #$08 + RTL ;-------------------------------------------------------------------------------- OnOWTransition: JSL FloodGateReset diff --git a/newhud.asm b/newhud.asm index fd703eb..34d2a5d 100644 --- a/newhud.asm +++ b/newhud.asm @@ -451,6 +451,15 @@ HUDHex4Digit_Long: REP #$20 RTL +;================================================================================ +ClearHearts: + LDA.w #!BlankTile + LDX.b #$14 +- STA.l HUDTileMapBuffer+$066, X + STA.l HUDTileMapBuffer+$0A6, X + DEX #2 + BPL - + RTS ;================================================================================ UpdateHearts: PHB @@ -461,6 +470,22 @@ UpdateHearts: PHX PLB + ; OHKO mode + LDA.l ChallengeModes : AND.w #$0003 : CMP.w #$0001 : BNE + + LDA.w #$240A + STA.l HUDTileMapBuffer+$068 + INC + STA.l HUDTileMapBuffer+$06A + INC + STA.l HUDTileMapBuffer+$06C + JMP .skip_partial ++ + + ; Gloom mode + LDA.l ChallengeModes : AND.w #$0003 : CMP.w #$0002 : BNE + + JSR ClearHearts ++ + LDA.w MaximumHealth LSR LSR @@ -480,11 +505,11 @@ UpdateHearts: CPX.b #$01 BMI .done_hearts - PHX - LDA.l HUDHeartColors_index : ASL : TAX - LDA.l HUDHeartColors_masks_game_hud,X - PLX - ORA.w #$20A0 + PHX + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + PLX + ORA.l HeartIcon CPY.b #$01 BPL .add_heart @@ -526,16 +551,16 @@ UpdateHearts: CMP.w #$0005 BCS .more_than_half - LDA.l HUDHeartColors_index : ASL : TAX - LDA.l HUDHeartColors_masks_game_hud,X - ORA.w #$20A1 + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + ORA.l HalfHeartIcon STA.b (Scrap09) - BRA .skip_partial + BRA .skip_partial .more_than_half - LDA.l HUDHeartColors_index : ASL : TAX - LDA.l HUDHeartColors_masks_game_hud,X - ORA.w #$20A0 + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + ORA.l HeartIcon STA.b (Scrap09) .skip_partial @@ -545,29 +570,29 @@ UpdateHearts: RTL CheckHeartPaletteFileSelect: - LDA.l HUDHeartColors_index : ASL : TAX - LDA.l HUDHeartColors_masks_file_select,X - ORA.w #$0200 - LDX.w #$000A + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_file_select,X + ORA.w #$0200 + LDX.w #$000A RTL CheckHeartPalette: - PHX - LDA.l HUDHeartColors_index : ASL : TAX - LDA.l HUDHeartColors_masks_game_hud,X - ORA.w #$20A0 - PLX + PHX + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + ORA.l HeartIcon + PLX RTS ColorAnimatedHearts: - PHX - REP #$20 - LDA.l HUDHeartColors_index : ASL : TAX - LDA.l HUDHeartColors_masks_game_hud,X - PLX - ORA.l HeartFramesBaseTiles,X - STA.b [Scrap00],Y - SEP #$20 + PHX + REP #$20 + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + PLX + ORA.l HeartFramesBaseTiles,X + STA.b [Scrap00],Y + SEP #$20 RTL HeartFramesBaseTiles: diff --git a/tables.asm b/tables.asm index 4e8888c..139bc13 100644 --- a/tables.asm +++ b/tables.asm @@ -91,7 +91,23 @@ SmithSword: db $02 ; #$02 = Tempered Sword (default) ;-------------------------------------------------------------------------------- -; 0x18002B- 0x180030 (Unused) +; 0x18002B (Unused) +;-------------------------------------------------------------------------------- +; 0x18002C (Reserved for Allowed Item on B) +;-------------------------------------------------------------------------------- +org $B0802D +ChallengeModes: +; p--- mmdd +; p - permadeath +; m - movement modes (0 - normal, 1 - permanent ice physics) +; d - damage modes (0 - normal, 1 - ohko, 2 - gloom) +db $00 +;-------------------------------------------------------------------------------- +; 0x18002E (Reserved for Ganon Vulnerability Item) +;-------------------------------------------------------------------------------- +; 0x18002F (Reserved for Special Weapons) +;-------------------------------------------------------------------------------- +; 0x180030 (Unused) ;-------------------------------------------------------------------------------- org $B08031 ; PC 0x180031 EnableEasterEggs: @@ -2628,8 +2644,14 @@ org $B0F032 ; PC 0x187032 RomSpeed: db $01 ; $01 = FastROM (default) | $00 = SlowROM +org $B0F033 ; PC 0x187033 +HeartIcon: +dw $20A0 +HalfHeartIcon: +dw $20A1 + ;-------------------------------------------------------------------------------- -; 0x187033 - 18703F (unused) +; 0x187037 - 18703F (unused) ;-------------------------------------------------------------------------------- org $B0F040 ; PC 0x187040 diff --git a/timer.asm b/timer.asm index 28efcb4..b1b31ad 100644 --- a/timer.asm +++ b/timer.asm @@ -163,6 +163,7 @@ RTL ;-------------------------------------------------------------------------------- OHKOTimer: LDA.l OHKOFlag : BNE .kill + LDA.l ChallengeModes : AND.b #$03 : CMP.b #$01 : BEQ .kill LDA.l TimeoutBehavior : CMP.b #$02 : BNE + LDA.l ClockStatus : AND.b #$02 : BEQ + .kill