From 17eb8073ab0bd2adda804f58928342067296512e Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 23 Jun 2021 03:05:13 -0500 Subject: [PATCH] Initial Mixed/Crossed OW shuffle implementation --- entrances.asm | 5 ++-- flute.asm | 3 +++ hudadditions.asm | 2 +- inverted.asm | 10 ++++---- invertedmaps.asm | 63 +++++++++++++++++++++++++----------------------- multiworld.asm | 3 +-- owrando.asm | 29 +++++++++++++++++++--- 7 files changed, 72 insertions(+), 43 deletions(-) diff --git a/entrances.asm b/entrances.asm index f0f94cf..72c6d24 100644 --- a/entrances.asm +++ b/entrances.asm @@ -182,7 +182,7 @@ JML Overworld_Hole_End ;-------------------------------------------------------------------------------- PreventEnterOnBonk: STA $00 ; part of what we wrote over - LDA.l InvertedMode : AND.w #$00FF : BEQ .done + LDA.b $8A : TAX : LDA.l OWTileMapAlt, X : AND.w #$0001 : BEQ .done LDA.l $5D : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode? LDA.b $8A : TAX : LDA.l OWTileWorldAssoc, X : AND.w #$00FF : CMP $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch? @@ -204,7 +204,8 @@ RTL AnimatedEntranceFix: ;when an entrance animation tries to start PHA : PHX LDA.l InvertedMode : BEQ + ;If we are in inverted mode - LDX $8A : LDA.l OWTileWorldAssoc, X : BNE + ;and in the light world + LDA.l OWMode+1 : CMP #$01 : BEQ + ;If we are in Mixed OW shuffle mode + LDA $8A : AND #$40 : BNE + ;and in the light world PLX : PLA STZ $04C6 ; skip it. LDA #$00 diff --git a/flute.asm b/flute.asm index 2068316..ac4bea9 100644 --- a/flute.asm +++ b/flute.asm @@ -61,7 +61,10 @@ FluteBoy: JML.l FluteBoy_Continue ;-------------------------------------------------------------------------------- FreeDuckCheck: + LDA.l OWMode+1 : CMP.b #$01 : BEQ .skipInvertedCheck LDA.l InvertedMode : BEQ .done + .skipInvertedCheck + LDA $7EF34C : CMP.b #$03 : BEQ .done ; flute is already active ; check the area, is it #$18 = 30? diff --git a/hudadditions.asm b/hudadditions.asm index e9a215b..eb223e3 100644 --- a/hudadditions.asm +++ b/hudadditions.asm @@ -26,7 +26,7 @@ HudAdditions: ++ LDX $1B : BNE + ; if outdoors - lda.l OWMode : and #$0100 : bne ++ : rts ; Skip if not mixed ow rando + lda.l OWMode : and #$0300 : bne ++ : rts ; Skip if vanilla ow rando ++ lda $7ef36d : and #$00ff : beq ++ lda $7ef3ca : and #$00ff : beq +++ lda #$2d60 : bra .owdisplay diff --git a/inverted.asm b/inverted.asm index 75d1aaa..b3beb3b 100644 --- a/inverted.asm +++ b/inverted.asm @@ -3,7 +3,7 @@ ; Does tile modification for... the pyramid of power hole ; after Ganon slams into it in bat form? Overworld_CreatePyramidHoleModified: - LDA.l InvertedMode : BNE + + PHX : LDX $8A : LDA.l OWTileMapAlt, X : PLX : AND.b #$01 : BNE + JMP .originalBehaviour + .invertedBehavior @@ -80,7 +80,7 @@ Overworld_CreatePyramidHoleModified: RTL ;------------------------------------------------------------------------------ Draw_PyramidOverlay: - LDA.l InvertedMode : AND.w #$00FF : BNE .done + PHX : LDA $8A : AND.w #$00FF : TAX : LDA.l OWTileMapAlt, X : PLX : AND.w #$0001 : BNE .done .normal LDA.w #$0E39 : STA $23BC INC A : STA $23BE @@ -174,7 +174,7 @@ GanonTowerInvertedCheck: ;Hard coded rock removed in LW for Inverted mode HardcodedRocks: - LDA InvertedMode : AND.w #$00FF : BEQ .normalrocks + LDA $8A : AND.w #$00FF : TAX : LDA.l OWTileMapAlt, X : AND.w #$0001 : BEQ .normalrocks BRA .noRock2 .normalrocks LDA.w #$020F : LDX $8A : CPX.w #$0033 : BNE .noRock @@ -186,7 +186,7 @@ HardcodedRocks: RTL TurtleRockPegSolved: - LDA.l InvertedMode : AND.w #$00FF : BNE + + PHX : LDA $8A : AND.w #$00FF : TAX : LDA.l OWTileMapAlt, X : PLX : AND.w #$0001 : BNE + LDA.l $7ef287 ; What we wrote over (reading flags for this screen) RTL + @@ -195,7 +195,7 @@ RTL MirrorBonk: ; must preserve X/Y, and must preserve $00-$0F - LDA.l InvertedMode : BEQ .normal + PHX : LDX $8A : LDA.l OWTileMapAlt, X : PLX : AND.b #$01 : BEQ .normal ; Goal: use $20 and $22 to decide to force a bonk ; if we want to bonk branch to .forceBonk diff --git a/invertedmaps.asm b/invertedmaps.asm index f50a6d0..1a89e3f 100644 --- a/invertedmaps.asm +++ b/invertedmaps.asm @@ -93,6 +93,7 @@ LDA.l OWTileMapAlt+3 : AND #$0001 : BEQ .notInverted LDA #$0034 : STA $2BE0 .notInverted LDA.l OWTileMapAlt+3 : AND #$0002 : BEQ .return +LDA.l OWMode : AND #$00FF : BEQ .return LDA $2BE0 : STA $38B4 ;adding convenient WDM portal in OW Shuffle .return RTS @@ -268,10 +269,10 @@ LDA #$009A : STA $2EAC LDA #$009B : STA $2EAE LDA #$009C : STA $2EB0 LDA #$0095 : STA $2EB2 ++ LDA.l OWTileMapAlt+$1B : AND #$0001 : BEQ + LDA #$0034 : STA $3028 : STA $302C LDA #$0035 : STA $302A : STA $3032 LDA #$00DA : STA $302E -+ LDA.l OWTileMapAlt+$1B : AND #$0001 : BEQ + LDA #$00E2 : STA $3030 ;removing original castle ledge drop @@ -965,10 +966,11 @@ LDA.l OWTileMapAlt+$43 : AND #$0001 : BEQ .owshuffle STA $285E LDA #$0185 : STA $27E0 STA $2860 - LDA #$0212 : STA $2BE0 + LDA #$0212 : STA $2BE0 ; portal .owshuffle LDA.l OWTileMapAlt+$43 : AND #$0002 : BEQ .return - LDA $2BE0 : STA $38B4 ;adding convenient WDM portal in OW Shuffle +LDA.l OWMode : AND #$00FF : BEQ .return + LDA $2BE0 : STA $38B4 ; adding convenient WDM portal in OW Shuffle .return RTS } @@ -1020,6 +1022,33 @@ RTS map091: ;Pyramid { LDA.l OWTileMapAlt+$5B : AND #$0001 : BEQ + +LDA #$0A06 : STA $2E1C ; cover up entrance +LDA #$0A0E : STA $2E1E + +;Added Pegs on pyramid map +;{ +;STA $321C +;STA $329C +;STA $32A0 + +;LDA #$0071 : STA $321E +;;LDA #$00DA : STA $3220 +;STA $329A +;LDA #$00E1 : STA $329E +;LDA #$0382 : STA $3318 +;LDA #$037C : STA $3322 + +;LDA #$021B : STA $3218 +;STA $3222 +;STA $3298 +;STA $32A2 +;STA $331A +;STA $331C +;STA $331E +;STA $3320 +;LDA #$00E2 : STA $321A +;} + LDA #$0323 : STA $39B6 LDA #$0324 : STA $39B8 STA $39BA @@ -1039,6 +1068,7 @@ LDA #$0233 : STA $3AB8 STA $3ABA STA $3ABC STA $3ABE ++ LDA.l OWTileMapAlt+$5B : AND #$0001 : BEQ + LDA #$03A2 : STA $3B32 LDA #$0235 : STA $3B36 STA $3BB4 @@ -1046,7 +1076,6 @@ LDA #$046A : STA $3B38 LDA #$0333 : STA $3B3A STA $3B3C STA $3B3E -+ LDA.l OWTileMapAlt+$5B : AND #$0001 : BEQ + LDA #$0034 : STA $3BB6 STA $3BBA STA $3BBC @@ -1054,34 +1083,9 @@ STA $3C3A STA $3C3C STA $3C3E -;Added Pegs on pyramid map -;{ -STA $321C -STA $329C -STA $32A0 - -LDA #$0071 : STA $321E -LDA #$00DA : STA $3220 -STA $329A -LDA #$00E1 : STA $329E -LDA #$0382 : STA $3318 -LDA #$037C : STA $3322 - -LDA #$021B : STA $3218 -STA $3222 -STA $3298 -STA $32A2 -STA $331A -STA $331C -STA $331E -STA $3320 -LDA #$00E2 : STA $321A -;} - LDA #$00F2 : STA $3BB8 LDA #$0108 : STA $3C38 - + LDA.l OWTileMapAlt+$5B : AND #$0001 : BEQ + ;Warp Tile agah defeated LDA #$0034 : STA $3BBE ;Tile when no warp @@ -1089,7 +1093,6 @@ LDA $7EF3C5 : AND #$00FF : CMP #$0003 : BNE .agahnimAlive LDA #$0212 : STA $3BBE ;warp .agahnimAlive - LDA #$0324 : STA $39C0 STA $39C2 STA $39C4 diff --git a/multiworld.asm b/multiworld.asm index 6a4abf9..f1f6990 100644 --- a/multiworld.asm +++ b/multiworld.asm @@ -270,8 +270,7 @@ Multiworld_Ancilla_ReceiveItem_stillInMotion: Multiworld_ConsumingFire_TransmuteToSkullWoodsFire: { - ;LDA $8A : AND.b #$40 : BEQ .failed ; things we wrote over - PHX : LDX $8A : LDA.l OWTileWorldAssoc, X : PLX : AND.b #$FF : BEQ .failed + LDA $8A : AND.b #$40 : BEQ .failed ; things we wrote over LDA $0C4A : CMP #$22 : BEQ .failed LDA $0C4B : CMP #$22 : BEQ .failed LDA $0C4C : CMP #$22 : BEQ .failed diff --git a/owrando.asm b/owrando.asm index 962ed00..d744099 100644 --- a/owrando.asm +++ b/owrando.asm @@ -27,7 +27,7 @@ org $02c40a ; < ? - Bank02.asm 10547 () jsl.l OWWorldCheck org $05afd9 ; < ? - sprite_warp_vortex.asm 60 () jsl.l OWWorldCheck -org $07a3f0 ; < ? - Bank07.asm 5772 () +org $07a3f0 ; < ? - Bank07.asm 5772 () ; flute activation/use jsl.l OWWorldCheck org $07a967 ; < ? - Bank07.asm 6578 () jsl.l OWWorldCheck @@ -54,6 +54,9 @@ jsl.l OWWorldCheck16 : nop org $1bed95 ; < ? - palettes.asm 748 () jsl.l OWWorldCheck16 : nop +org $02b16e ; AND #$3F : ORA 7EF3CA +and #$7f : eor #$40 : nop #2 + ;Code org $aa8800 OWCoordIndex: ; Horizontal 1st @@ -94,7 +97,7 @@ org $aa9000 OWEdgeTransition: { php : phy - lda.l OWMode : beq + + lda.l OWMode : ora.l OWMode+1 : beq + jsl OWShuffle : bra .return + jsl OWVanilla .return @@ -270,7 +273,27 @@ OWNewDestination: lda $418 : asl : tax : lda $610,x : !add 1,s : sta $610,x : pla sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700 - sep #$20 : lda $05 : sta $8a ;: and #$40 : sta.l $7ef3ca ;removed setting DW flag + + lda.l OWMode+1 : and #$ff : cmp #$02 : bne .return + ldx $05 : lda.l OWTileWorldAssoc,x : sta.l $7ef3ca ; change world + + ; toggle bunny mode + lda $7ef357 : bne .nobunny + lda.l InvertedMode : bne .inverted + lda $7ef3ca : and.b #$40 : bra + + .inverted lda $7ef3ca : and.b #$40 : eor #$40 + ++ cmp #$40 : bne .nobunny + ; turn into bunny + lda $5d : cmp #$17 : beq .return + lda #$17 : sta $5d + lda #$01 : sta $02e0 + bra .return + .nobunny + lda $5d : cmp #$17 : bne .return + stz $5d : stz $2e0 + + .return + lda $05 : sta $8a rep #$30 : rts }