;================================================================================ ; RNG Fixes ;-------------------------------------------------------------------------------- RigDigRNG: LDA.l MiniGameTime+1 : CMP.l DiggingGameRNG : !BGE .forceHeart .normalItem JML GetRandomInt .forceHeart LDA.l MiniGameTime : BNE .normalItem LDA.b #$04 RTL ;-------------------------------------------------------------------------------- RigChestRNG: JSL DecrementChestCounter LDA.w $04C4 : CMP.l ChestGameRNG : BEQ .forceHeart .normalItem JSL GetRandomInt AND.b #$07 ; restrict values to 0-7 CMP.b #$07 : BEQ .notHeart JSL DecrementItemCounter RTL .forceHeart LDA.b #$33 : STA.b ScrapBufferBD+$0B ; assure the correct state if player talked to shopkeeper LDA.w RoomItemsTaken : AND.b #$40 : BNE .notHeart LDA.l ChestGameItem_Player : STA.l !MULTIWORLD_ITEM_PLAYER_ID LDA.b #$07 ; give prize item RTL .notHeart JSL DecrementItemCounter JSL GetRandomInt ; spam RNG until we stop getting the prize item AND.b #$07 ; restrict values to 0-7 CMP.b #$07 : BNE + ; player got prize item AGAIN LDA.b #$00 ; give them money instead + RTL ;-------------------------------------------------------------------------------- FixChestCounterForChestGame: JSL DecrementItemCounter JML GetRandomInt ;-------------------------------------------------------------------------------- RNG_Lanmolas1: LDA.b #$00 : BRA _rng_done RNG_Moldorm1: LDA.b #$01 : BRA _rng_done RNG_Agahnim1: LDA.b RoomIndex : CMP.b #$20 : BNE RNG_Agahnim2 ; Agah 1 and 2 use the same code, check which agah we're fighting and branch LDA.b #$02 JSL GetStaticRNG : PHA LDA.l GanonAgahRNG : BEQ + ; check if blue balls are disabled PLA ORA.b #$01 ; guarantee no blue ball RTL + PLA RTL RNG_Helmasaur: LDA.b #$03 : BRA _rng_done RNG_Arrghus: LDA.b #$04 : BRA _rng_done RNG_Mothula: LDA.b #$05 : BRA _rng_done RNG_Kholdstare: LDA.b #$06 : BRA _rng_done RNG_Vitreous: LDA.b #$07 : BRA _rng_done RNG_Trinexx: LDA.b #$08 : BRA _rng_done RNG_Lanmolas2:;x LDA.b #$09 : BRA _rng_done RNG_Moldorm2:;x LDA.b #$0A : BRA _rng_done RNG_Agahnim2: LDA.b #$0B JSL GetStaticRNG : PHA LDA.l GanonAgahRNG : BEQ + ; check if blue balls are disabled PLA ORA.b #$01 ; guarantee no blue ball RTL + PLA RTL RNG_Agahnim2Phantoms:;x LDA.b #$0C : BRA _rng_done RNG_Ganon: LDA.b #$0D : BRA _rng_done RNG_Ganon_Extra_Warp: LDA.b #$0E JSL GetStaticRNG : PHA LDA.l GanonAgahRNG : BEQ + ; check if warps are disabled PLA AND.b #$FE ; set least significant bit to 0 to prevent teleport RTL + PLA RTL RNG_Enemy_Drops: LDA.l ProgressIndicator : CMP.b #$01 : BEQ + ; drops are static after uncle pickup & before rescuing zelda JML GetRandomInt + LDA.b #$0F _rng_done: JSL GetStaticRNG RTL ;-------------------------------------------------------------------------------- ; In: A = RNG Index ; Out: A = RNG Result ;-------------------------------------------------------------------------------- GetStaticRNG: PHX : PHP REP #$30 ; set 16-bit accumulator and index registers AND.w #$000F ASL : TAX : LDA.l RNGPointers, X : INC : AND.w #$03FF : STA.l RNGPointers, X : TAX ; increment pointer and move value to X LDA.l Static_RNG, X ; load RNG value PLP : PLX RTL ;-------------------------------------------------------------------------------- InitRNGPointerTable: PHX : PHP REP #$30 ; set 16-bit accumulator & index registers LDX.w #$0000 - LDA.l .rngDefaults, X : STA.l RNGPointers, X : INX #2 LDA.l .rngDefaults, X : STA.l RNGPointers, X : INX #2 LDA.l .rngDefaults, X : STA.l RNGPointers, X : INX #2 LDA.l .rngDefaults, X : STA.l RNGPointers, X : INX #2 CPX.w #$001F : !BLT - PLP : PLX RTL .rngDefaults dw $0000 ; 00 = Lanmolas 1 dw $0040 ; 01 = Moldorm 1 dw $0080 ; 02 = Agahnim 1 dw $00C0 ; 03 = Helmasaur dw $0100 ; 04 = Arrghus dw $0140 ; 05 = Mothula dw $0180 ; 06 = Kholdstare dw $01C0 ; 07 = Vitreous dw $0200 ; 08 = Trinexx dw $0240 ; 09 = Lanmolas 2 dw $0280 ; 10 = Moldorm 2 dw $02C0 ; 11 = Agahnim 2 dw $0300 ; 12 = Agahnim 2 Phantoms dw $0340 ; 13 = Ganon dw $0380 ; 14 = Ganon Extra Warp dw $03C0 ; 15 = Standard Escape Enemy Drops ;--------------------------------------------------------------------------------