From ef2f73bcad60e86417ce077d610c1bcc932817f3 Mon Sep 17 00:00:00 2001 From: Kevin Cathcart Date: Tue, 11 Sep 2018 21:46:00 -0400 Subject: [PATCH] Inverted mode spawn logic --- darkworldspawn.asm | 41 +++++++++++++++++++++++++++++++++++++++++ events.asm | 2 +- sandbox.asm | 3 ++- tables.asm | 4 ++++ 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/darkworldspawn.asm b/darkworldspawn.asm index efd1de4..4453e06 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -8,6 +8,9 @@ DarkWorldSaveFix: RTL ;-------------------------------------------------------------------------------- DoWorldFix: + LDA InvertedMode : BEQ + + JMP DoWorldFix_Inverted + + LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check LDA $7EF353 : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point @@ -21,6 +24,9 @@ DoWorldFix: RTL ;-------------------------------------------------------------------------------- SetDeathWorldChecked: + LDA InvertedMode : BEQ + + JMP SetDeathWorldChecked_Inverted + + LDA $1B : BEQ .outdoors LDA $040C : CMP #$FF : BNE .dungeon LDA $A0 : BNE ++ @@ -38,6 +44,41 @@ JMP DoWorldFix_skip_mirror_check LDA $7EF3CC : CMP #$08 : BNE + : LDA.b #$07 : STA $7EF3CC : + ; convert dwarf to frog .done RTL +;================================================================================ +DoWorldFix_Inverted: + LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check + LDA $7EF353 : 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 + .aga1Alive + LDA #$40 : STA $7EF3CA ; set flag to dark world + LDA $7EF3CC : CMP #$08 : BNE + : LDA.b #$07 : STA $7EF3CC : + ; convert dwarf to frog + .done +RTL +;-------------------------------------------------------------------------------- +SetDeathWorldChecked_Inverted: + LDA $1B : BEQ .outdoors + LDA $040C : CMP #$FF : BNE .dungeon + LDA $A0 : BNE ++ + LDA GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon + ++ + .outdoors +JMP DoWorldFix + + .dungeon + LDA Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon +JMP DoWorldFix_Inverted_skip_mirror_check + + .castle + LDA #$00 : STA $7EF3CA ; set flag to dark world + LDA $7EF3CC : CMP #$07 : BNE + : LDA.b #$08 : STA $7EF3CC : + ; convert frog to dwarf + .done +RTL +;================================================================================ + + ;-------------------------------------------------------------------------------- FakeWorldFix: LDA FixFakeWorld : BEQ + diff --git a/events.asm b/events.asm index 186cc8c..f041e86 100644 --- a/events.asm +++ b/events.asm @@ -94,7 +94,7 @@ OnFileLoad: LDA.b #$FF : STA !FRESH_FILE_MARKER + LDA.w $010A : BNE + ; don't adjust the worlds for "continue" or "save-continue" - LDA.w $7EC011 : BNE + ; don't adjust worlds if mosiac is enabled (Read: mirroring in dungeon) + LDA.l $7EC011 : BNE + ; don't adjust worlds if mosiac is enabled (Read: mirroring in dungeon) JSL.l DoWorldFix + JSL.l MasterSwordFollowerClear diff --git a/sandbox.asm b/sandbox.asm index 2b5d2ed..d6b13d5 100644 --- a/sandbox.asm +++ b/sandbox.asm @@ -175,6 +175,8 @@ org $07AA3A : db $D0 ; residual portal? org $08D40C : db $D0 ; morph poof org $308174 : db $01 ; ER's Fix fake worlds fix. Currently needed for inverted +org $0280A6 : db $D0 + org $1FED31 : db $0E ; pre-open open TR bomb door org $1FED41 : db $0E ; pre-open open TR bomb door @@ -343,7 +345,6 @@ org $02E0CB+$37+$37 : dw $0000 org $02E169+$37+$37 : dw $0000 - ;org $02E849 ; Fly 1 to Sanctuary ;db #$13, #$00, #$16, #$00, #$18, #$00, #$2C, #$00, #$2F, #$00, #$30, #$00, #$3B, #$00, #$3F, #$00, #$5B, #$00, #$35, #$00, #$0F, #$00, #$15, #$00, #$33, #$00, #$12, #$00, #$3F, #$00, #$55, #$00, #$7F, #$00, #$1A, #$00, #$88, #$08, #$30, #$0B, #$88, #$05, #$98, #$07, #$80, #$18, #$9E, #$06, #$10, #$08, #$2E, #$00, #$42, #$12, #$80, #$06, #$12, #$01, #$9E, #$05, #$8E, #$04, #$80, #$02, #$12, #$01, #$80, #$02, #$00, #$04, #$16, #$05, #$59, #$07, #$B9, #$0A, #$FA, #$0A, #$1E, #$0F, #$DF, #$0E, #$05, #$0F, #$00, #$06, #$46, #$0E, #$C6, #$02, #$2A, #$04, #$BA, #$0C, #$9A, #$04, #$56, #$0E, #$2A, #$04, #$56, #$0E, #$D6, #$06, #$4E, #$0C, #$7E, #$01, #$40, #$08, #$B2, #$0E, #$00, #$00, #$F2, #$06, #$75, #$0E, #$78, #$07, #$0A, #$0C, #$06, #$0E, #$8A, #$0A, #$EA, #$06, #$62, #$04, #$00, #$0E, #$8A, #$0A, #$00, #$0E, #$68, #$04, #$78, #$05, #$B7, #$07, #$17, #$0B, #$58, #$0B, #$A8, #$0F, #$3D, #$0F, #$67, #$0F, #$5C, #$06, #$A8, #$0E, #$28, #$03, #$88, #$04, #$18, #$0D, #$F8, #$04, #$B8, #$0E, #$88, #$04, #$B8, #$0E, #$56, #$07, #$C8, #$0C, #$00, #$02, #$B8, #$08, #$30, #$0F, #$78, #$00, #$78, #$07, #$F3, #$0E, #$F0, #$07, #$90, #$0C, #$80, #$0E, #$10, #$0B, #$70, #$07, #$E8, #$04, #$68, #$0E, #$10, #$0B, #$68, #$0E, #$70, #$04, #$83, #$05, #$C6, #$07, #$26, #$0B, #$67, #$0B, #$8D, #$0F, #$4C, #$0F, #$72, #$0F, #$6D, #$06, #$B3, #$0E, #$33, #$03, #$97, #$04, #$27, #$0D, #$07, #$05, #$C3, #$0E, #$97, #$04, #$C3, #$0E, #$56, #$07, #$D3, #$0C, #$0B, #$02, #$BF, #$08, #$37, #$0F, #$8D, #$00, #$7F, #$07, #$FA, #$0E, #$F7, #$07, #$97, #$0C, #$8B, #$0E, #$17, #$0B, #$77, #$07, #$EF, #$04, #$85, #$0E, #$17, #$0B, #$85, #$0E, #$F6, #$FF, #$FA, #$FF, #$07, #$00, #$F7, #$FF, #$F6, #$FF, #$00, #$00, #$F1, #$FF, #$FB, #$FF, #$00, #$00, #$FA, #$FF, #$0A, #$00, #$F6, #$FF, #$F6, #$FF, #$F6, #$FF, #$FA, #$FF, #$F6, #$FF, #$FA, #$FF, #$F2, #$FF, #$F2, #$FF, #$02, #$00, #$00, #$00, #$0E, #$00, #$00, #$00, #$FE, #$FF, #$0B, #$00, #$F8, #$FF, #$06, #$00, #$FA, #$FF, #$FA, #$FF, #$06, #$00, #$0E, #$00, #$00, #$00, #$FA, #$FF, #$00, #$00 ; diff --git a/tables.asm b/tables.asm index 8539cbb..998d138 100644 --- a/tables.asm +++ b/tables.asm @@ -1312,6 +1312,10 @@ db $04 ;org $08D40C ; PC 0x4540C (ancilla_morph_poof.asm:48) (BEQ) ;db #$D0 ; #$F0 - Light Side (Default), #$D0 - Dark Side ;;-------------------------------------------------------------------------------- +;; Spawn +; org $0280a6 ; <- Bank02.asm : 257 (LDA $7EF3CA : BEQ .inLightWorld) +;db #$D0 ; #F0 - default to light (Default), #$D0 - Default to dark +;;-------------------------------------------------------------------------------- org $00886e ; <- Bank00.asm : 1050 (LDA Overworld_TileAttr, X) LDA Overworld_TileAttr, X ; use "JML InvertedTileAttributeLookup" for inverted Overworld_GetTileAttrAtLocation_continue: