Initial Mixed/Crossed OW shuffle implementation

This commit is contained in:
codemann8
2021-06-23 03:05:13 -05:00
parent b03283efd2
commit 17eb8073ab
7 changed files with 72 additions and 43 deletions

View File

@@ -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

View File

@@ -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?

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
}