Merge branch 'OWMain' of github.com:codemann8/z3randomizer into overworld_kara

This commit is contained in:
2021-10-02 20:46:14 -07:00
14 changed files with 394 additions and 503 deletions

View File

@@ -114,8 +114,12 @@ function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<
!MULTIWORLD_SPRITEITEM_PLAYER_ID = "$7EC099"
!MULTIWORLD_HUD_TIMER = "$7EC09A"
!MULTIWORLD_HUD_DELAY = "#120"
!MULTIWORLD_ITEM_ID = "$7EC09B" ; for lua scripts?
!Dungeon_ChestData = "$01E96C"
!FLAG_OW_MIXED = $04
!FLAG_OW_CROSSED = $02
incsrc hooks.asm
incsrc treekid.asm
incsrc spriteswap.asm

View File

@@ -582,6 +582,8 @@ dw $00bc, $00a2, $00a3, $00c2, $001a, $0049, $0014, $008c
dw $009f, $0066, $005d, $00a8, $00a9, $00aa, $00b9, $0052
; HC West Hall, TR Dash Bridge, TR Hub, Pod Arena, GT Petting Zoo, Ice Spike Cross
dw $0050, $00c5, $00c6, $0009, $0003, $002a, $007d, $005e
; Sewer Drop, Mire Cross, GT Crystal Circles
dw $0011, $00b2, $003d
dw $ffff
; dungeon tables

View File

@@ -216,7 +216,7 @@ RTL
AnimatedEntranceFix: ;when an entrance animation tries to start
PHA : PHX
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
LDA.l OWMode+1 : CMP #$01 : BEQ + ;If we are in Mixed OW shuffle mode
LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE + ;If we are in Mixed OW shuffle mode
LDA $8A : AND #$40 : BNE + ;and in the light world
PLX : PLA
STZ $04C6 ; skip it.

View File

@@ -61,7 +61,7 @@ FluteBoy:
JML.l FluteBoy_Continue
;--------------------------------------------------------------------------------
FreeDuckCheck:
LDA.l OWMode+1 : CMP.b #$01 : BEQ .skipInvertedCheck
LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE .skipInvertedCheck
LDA.l InvertedMode : BEQ .done
.skipInvertedCheck

View File

@@ -2483,7 +2483,7 @@ JSL BirdTravel_LoadTargetAreaMusic
BRA + : NOP #14 : +
;--------------------------------------------------------------------------------
org $02B027 ; <- Bank02.asm:7535-7541
JSL Overworld_DetermineMusicSFX
JSL Overworld_DetermineMusic
BRA + : NOP #42 : +
;================================================================================

View File

@@ -26,7 +26,7 @@ HudAdditions:
++
LDX $1B : BNE + ; if outdoors
lda.l OWMode : and #$0300 : bne ++ : rts ; Skip if vanilla ow rando
lda.l OWMode : and.w #((!FLAG_OW_CROSSED+!FLAG_OW_MIXED)<<8)+$ff : bne ++ : rts ; Skip if vanilla ow rando
++ lda $7ef36d : and #$00ff : beq ++
lda $7ef3ca : and #$00ff : beq +++
lda #$2d60 : bra .owdisplay

View File

@@ -93,7 +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.l OWMode : AND #$00FF : BEQ .return
LDA $2BE0 : STA $38B4 ;adding convenient WDM portal in OW Shuffle
.return
RTS
@@ -969,7 +969,7 @@ LDA.l OWTileMapAlt+$43 : AND #$0001 : BEQ .owshuffle
LDA #$0212 : STA $2BE0 ; portal
.owshuffle
LDA.l OWTileMapAlt+$43 : AND #$0002 : BEQ .return
LDA.l OWMode : AND #$00FF : BEQ .return
LDA.l OWMode : AND #$00FF : BEQ .return
LDA $2BE0 : STA $38B4 ; adding convenient WDM portal in OW Shuffle
.return
RTS

View File

@@ -76,7 +76,7 @@
;
; Additional tracks
;
; 60 - Light World OW (after ped pull)
; 60 - Light World OW (after aga kill)
; 61 - Dark World OW (with all crystals)
;
;=======================================
@@ -250,7 +250,8 @@ CheckMusicLoadRequest:
BRA .check_fallback-3
.lightworld
PHA
LDA $7EF300 : AND.b #$40 : BEQ +
;LDA $7EF300 : AND.b #$40 : BEQ + ; ped pull
LDA $7EF3C5 : CMP.b #03 : BNE + ; aga1 killed
PLA
LDA.b #60 : BRA .check_fallback-3
+

View File

@@ -16,7 +16,7 @@ PreOverworld_LoadProperties_ChooseMusic:
; if we are in the light world go ahead and set chosen selection
;LDA $7EF3CA : BEQ .checkInverted+4
+ JSL Overworld_DetermineMusicSFX
+ JSL Overworld_DetermineMusic
.lastCheck
LDA $0132 : CMP.b #$F2 : BNE +
@@ -57,7 +57,8 @@ Overworld_FinishMirrorWarp:
LDA.b #$80 : STA $9B
JSL Overworld_DetermineMusicSFX
JSL Overworld_DetermineAmbientSFX
JSL Overworld_DetermineMusic
.done
STX $012C
@@ -74,14 +75,15 @@ Overworld_FinishMirrorWarp:
;--------------------------------------------------------------------------------
BirdTravel_LoadTargetAreaMusic:
JSL Overworld_DetermineMusicSFX
JSL Overworld_DetermineAmbientSFX
JSL Overworld_DetermineMusic
STZ $04C8 ; Clear peg puzzle count
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
;X to be set to music track to load
;$012D to be set to any ambient SFX for the area
Overworld_DetermineMusicSFX:
Overworld_DetermineMusic:
LDA $7EF3C5 : CMP.b #$02 : !BGE +
LDX.b #$03 ; If phase < 2, play the rain music
BRA .done
@@ -91,7 +93,6 @@ Overworld_DetermineMusicSFX:
CMP.b #$47 : BEQ .darkMountain
LDX.b #$02 ; hyrule field theme
LDA.b #$05 : STA $012D
LDA $7EF3CA : BEQ +
LDX.b #$09 ; default dark world theme
@@ -113,15 +114,7 @@ Overworld_DetermineMusicSFX:
LDX #$0F ; dark woods theme
BRA .bunny
; Misery Mire rain SFX
+ CMP.b #$70 : BNE .bunny
LDA $7EF2F0 : AND.b #$20 : BNE .bunny
LDA.b #$01 : CMP $0131 : BEQ +
STA $012D : BRA .bunny
+ STZ $012D : BRA .bunny
.darkMountain
LDA.b #$09 : STA $012D ; set storm ambient SFX
LDX.b #$0D ; dark mountain theme
.bunny
@@ -134,6 +127,36 @@ Overworld_DetermineMusicSFX:
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
;$012D to be set to any ambient SFX for the area
Overworld_DetermineAmbientSFX:
LDA $7EF3C5 : CMP.b #$02 : !BGE +
BRA .done ; rain state sfx handled elsewhere
+ LDA $8A : CMP.b #$43 : BEQ .darkMountain
CMP.b #$45 : BEQ .darkMountain
CMP.b #$47 : BEQ .darkMountain
CMP.b #$70 : BEQ .mire
LDA.b #$05 : BRA .setSfx ; silence
.mire
LDA $7EF2F0 : AND.b #$20 : BNE .done
LDA.b #$01 : BRA .setSfx ; Misery Mire rain SFX
.darkMountain
LDA.b #$09 : BRA .setSfx ; set storm ambient SFX
.setSfx
CMP $0131 : BEQ +
STA $012D
+ STZ $012D
.done
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
;0 = Is Kakariko Overworld
;1 = Not Kakariko Overworld

View File

@@ -8,9 +8,6 @@ SEP #$30
LDA !INFINITE_BOMBS : BNE .infinite_bombs
.finite_bombs
LDA.l SpecialWeapons : CMP #$01 : BNE .normal
LDA.l !BOMB_LEVEL : BEQ .no_bombs
.normal
LDA.l $7EF343 ; bombs
JSR HudHexToDec2Digit ;requires 8 bit registers!
REP #$20
@@ -18,12 +15,6 @@ SEP #$30
LDX.b $07 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; Draw bombs 1 digit
BRA +
.no_bombs
REP #$20
LDA.w #$207F : STA !BOMBCOUNT_DRAW_ADDRESS
STA !BOMBCOUNT_DRAW_ADDRESS+2
BRA +
.infinite_bombs
REP #$20
LDA.w #$2431 : STA !BOMBCOUNT_DRAW_ADDRESS ; infinity (left half)
@@ -161,9 +152,8 @@ SEP #$30
LDA $10 : CMP #$12 : BEQ .noprize
REP #$20
LDA.l MapMode
REP #$20
BEQ .drawprize
LDA.l $7EF368

View File

@@ -468,6 +468,7 @@ AddReceivedItemExpanded:
JSR IncrementItemCounters
+
LDA $02D8 ; Item Value
STA !MULTIWORLD_ITEM_ID
CMP.b #$16 : BEQ .bottle ; Bottle
CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle

View File

@@ -35,11 +35,7 @@ rtl
OnFileLoadOverride:
jsl OnFileLoad ; what I wrote over
lda.l DRFlags : and #$80 : beq + ;flag is off
lda $7ef086 : ora #$80 : sta $7ef086
+ lda.l DRFlags : and #$40 : beq + ;flag is off
lda $7ef036 : ora #$80 : sta $7ef036
+ lda.l DRFlags : and #$02 : beq +
+ lda.l DRFlags : and #$02 : beq + ; Mirror Scroll
lda $7ef353 : bne +
lda #$01 : sta $7ef353
+ rtl

View File

@@ -338,23 +338,27 @@ OWNewDestination:
sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700
; crossed OW shuffle
lda.l OWMode+1 : and #$ff : cmp #$02 : bne .return
ldx $05 : lda.l OWTileWorldAssoc,x : sta.l $7ef3ca ; change world
LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : beq .return
ldx $05 : lda.l OWTileWorldAssoc,x : cmp.l $7ef3ca : beq .return
sta.l $7ef3ca ; change world
lda #$38 : sta $012f ; play sfx - #$3b is an alternative
; toggle bunny mode
lda $7ef357 : bne .nobunny
+ 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 $5d : cmp #$04 : beq + ; if swimming, continue
lda #$17 : sta $5d
lda #$01 : sta $02e0
+ lda #$01 : sta $02e0 : sta $56
bra .return
.nobunny
lda $5d : cmp #$17 : bne .return
stz $5d : stz $2e0
lda $5d : cmp #$17 : bne + ; retain current state unless bunny
stz $5d
+ stz $02e0 : stz $56
.return
lda $05 : sta $8a

View File

@@ -15,9 +15,6 @@ LoadRoomHook:
dl IcePalaceBombosNE ; 03
dl CastleEastEntrance ; 04
dl CastleWestEntrance ; 05
dl PoDFallingBridge ; 06
dl PoDArena ; 07
dl MireBKPond ; 08
NoCallback:
RTL
@@ -92,138 +89,11 @@ CastleEastEntrance: ; new solution (see Rain Prevention)
CastleWestEntrance: ; new solution (see Rain Prevention)
RTL
PoDFallingBridge:
LDA.l DRFlags : AND #$10 : BNE + : RTL : +
REP #$20 ; 16 A
LDA.w #$08e1 ; square peg
%writeTileAt(5,7,0,1)
%writeTileAt(11,7,0,1)
INC ;horizontal rail
%writeTileAt(6,7,0,1)
%writeTileAt(7,7,0,1)
%writeTileAt(8,7,0,1)
%writeTileAt(9,7,0,1)
%writeTileAt(10,7,0,1)
SEP #$20 ; 8 A
REP #$20 ; 16 A
LDA.w #$08e0 ; corner top left
%writeTileAt(5,6,0,1)
%writeTileAt(10,6,0,1)
LDA.w #$48e0 ; corner top right
%writeTileAt(6,6,0,1)
%writeTileAt(11,6,0,1)
LDA.w #$08f4 ; top mid
%writeTileAt(7,6,0,1)
%writeTileAt(8,6,0,1)
%writeTileAt(9,6,0,1)
LDA.w #$08f1 ; corner mid left
%writeTileAt(5,7,0,1)
%writeTileAt(10,7,0,1)
LDA.w #$48f1 ; corner mid right
%writeTileAt(6,7,0,1)
%writeTileAt(11,7,0,1)
LDA.w #$08f2 ; mid mid
%writeTileAt(7,7,0,1)
%writeTileAt(8,7,0,1)
%writeTileAt(9,7,0,1)
LDA.w #$08e4 ; corner lower left
%writeTileAt(5,8,0,1)
%writeTileAt(10,8,0,1)
LDA.w #$48e4 ; corner lower right
%writeTileAt(6,8,0,1)
%writeTileAt(11,8,0,1)
LDA.w #$08e5 ; lower mid
%writeTileAt(7,8,0,1)
%writeTileAt(8,8,0,1)
%writeTileAt(9,8,0,1)
SEP #$20 ; 8 A
RTL
;08e0 48e0 08f4 08f4 08e0 48e0
;08f1 48f1 08f2 08f2 08f1 48f1
;08e4 48e4 08e5 08e5 08e4 48e4
;
;(54,42) 22,10,1,1 42 85 2720 2742 156C
;(54,43) 22,11,1,1 43 87 2784 2806 15EC
;(54,44) 22,12,1,1 44 89 2848 2870 166C
PoDArena:
LDA.l DRFlags : AND #$10 : BNE + : RTL : +
REP #$20 ; 16 A
LDA.w #$08e0 ; corner top left
%writeTileAt(22,10,1,1)
%writeTileAt(25,10,1,1)
LDA.w #$48e0 ; corner top right
%writeTileAt(23,10,1,1)
%writeTileAt(26,10,1,1)
LDA.w #$08f4 ; top mid
%writeTileAt(24,10,1,1)
LDA.w #$08f1 ; corner mid left
%writeTileAt(22,11,1,1)
%writeTileAt(25,11,1,1)
LDA.w #$48f1 ; corner mid right
%writeTileAt(23,11,1,1)
%writeTileAt(26,11,1,1)
LDA.w #$08f2 ; mid mid
%writeTileAt(24,11,1,1)
LDA.w #$08e4 ; corner lower left
%writeTileAt(22,12,1,1)
%writeTileAt(25,12,1,1)
LDA.w #$48e4 ; corner lower right
%writeTileAt(23,12,1,1)
%writeTileAt(26,12,1,1)
LDA.w #$08e5 ; lower mid
%writeTileAt(24,12,1,1)
SEP #$20 ; 8 A
RTL
MireBKPond:
LDA.l DRFlags : AND #$10 : BNE + : RTL : +
REP #$20 ; 16 A
LDA.w #$08e0 ; corner top left
%writeTileAt(13,11,1,1)
%writeTileAt(17,11,1,1)
LDA.w #$48e0 ; corner top right
%writeTileAt(14,11,1,1)
%writeTileAt(18,11,1,1)
LDA.w #$08f4 ; top mid
%writeTileAt(15,11,1,1)
%writeTileAt(16,11,1,1)
LDA.w #$08f1 ; corner mid left
%writeTileAt(13,12,1,1)
%writeTileAt(17,12,1,1)
LDA.w #$48f1 ; corner mid right
%writeTileAt(14,12,1,1)
%writeTileAt(18,12,1,1)
LDA.w #$08f2 ; mid mid
%writeTileAt(15,12,1,1)
%writeTileAt(16,12,1,1)
LDA.w #$08e4 ; corner lower left
%writeTileAt(13,13,1,1)
%writeTileAt(17,13,1,1)
LDA.w #$48e4 ; corner lower right
%writeTileAt(14,13,1,1)
%writeTileAt(18,13,1,1)
LDA.w #$08e5 ; lower mid
%writeTileAt(15,13,1,1)
%writeTileAt(16,13,1,1)
SEP #$20 ; 8 A
RTL
RoomCallbackTable:
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00 ; 00x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $06, $00, $00, $00, $00, $00 ; 01x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $00 ; 02x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 01x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 02x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 03x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 04x
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 05x
@@ -234,7 +104,7 @@ RoomCallbackTable:
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Ax
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Bx
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Cx
db $00, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $00 ; 0Dx
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $00 ; 0Dx
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Ex
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Fx
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; 0Fx