Evolution mode documentation

This commit is contained in:
Marcus Huderle 2023-01-07 11:54:05 -06:00
parent 19e432cb6d
commit d9882dc49a
12 changed files with 344 additions and 329 deletions

View File

@ -1,153 +1,160 @@
Data_1298b: ; 0x1298b
; This has to do with which indicators will need to be hit to evolve the pokemon.
db $01 ; BULBASAUR
db $02 ; IVYSAUR
db $03 ; VENUSAUR
db $01 ; CHARMANDER
db $02 ; CHARMELEON
db $03 ; CHARIZARD
db $01 ; SQUIRTLE
db $02 ; WARTORTLE
db $03 ; BLASTOISE
db $01 ; CATERPIE
db $02 ; METAPOD
db $03 ; BUTTERFREE
db $01 ; WEEDLE
db $02 ; KAKUNA
db $03 ; BEEDRILL
db $01 ; PIDGEY
db $02 ; PIDGEOTTO
db $03 ; PIDGEOT
db $01 ; RATTATA
db $03 ; RATICATE
db $01 ; SPEAROW
db $03 ; FEAROW
db $01 ; EKANS
db $03 ; ARBOK
db $01 ; PIKACHU
db $03 ; RAICHU
db $01 ; SANDSHREW
db $03 ; SANDSLASH
db $01 ; NIDORAN_F
db $02 ; NIDORINA
db $04 ; NIDOQUEEN
db $01 ; NIDORAN_M
db $02 ; NIDORINO
db $04 ; NIDOKING
db $02 ; CLEFAIRY
db $03 ; CLEFABLE
db $02 ; VULPIX
db $03 ; NINETALES
db $02 ; JIGGLYPUFF
db $03 ; WIGGLYTUFF
db $02 ; ZUBAT
db $03 ; GOLBAT
db $01 ; ODDISH
db $02 ; GLOOM
db $04 ; VILEPLUME
db $02 ; PARAS
db $03 ; PARASECT
db $02 ; VENONAT
db $03 ; VENOMOTH
db $02 ; DIGLETT
db $03 ; DUGTRIO
db $02 ; MEOWTH
db $03 ; PERSIAN
db $02 ; PSYDUCK
db $03 ; GOLDUCK
db $02 ; MANKEY
db $03 ; PRIMEAPE
db $02 ; GROWLITHE
db $03 ; ARCANINE
db $01 ; POLIWAG
db $02 ; POLIWHIRL
db $04 ; POLIWRATH
db $01 ; ABRA
db $02 ; KADABRA
db $04 ; ALAKAZAM
db $01 ; MACHOP
db $02 ; MACHOKE
db $04 ; MACHAMP
db $01 ; BELLSPROUT
db $02 ; WEEPINBELL
db $04 ; VICTREEBEL
db $02 ; TENTACOOL
db $03 ; TENTACRUEL
db $01 ; GEODUDE
db $02 ; GRAVELER
db $04 ; GOLEM
db $02 ; PONYTA
db $03 ; RAPIDASH
db $02 ; SLOWPOKE
db $03 ; SLOWBRO
db $02 ; MAGNEMITE
db $03 ; MAGNETON
db $04 ; FARFETCH_D
db $02 ; DODUO
db $03 ; DODRIO
db $02 ; SEEL
db $03 ; DEWGONG
db $02 ; GRIMER
db $03 ; MUK
db $02 ; SHELLDER
db $03 ; CLOYSTER
db $01 ; GASTLY
db $02 ; HAUNTER
db $04 ; GENGAR
db $04 ; ONIX
db $02 ; DROWZEE
db $03 ; HYPNO
db $02 ; KRABBY
db $03 ; KINGLER
db $02 ; VOLTORB
db $03 ; ELECTRODE
db $02 ; EXEGGCUTE
db $03 ; EXEGGUTOR
db $02 ; CUBONE
db $03 ; MAROWAK
db $04 ; HITMONLEE
db $04 ; HITMONCHAN
db $04 ; LICKITUNG
db $02 ; KOFFING
db $03 ; WEEZING
db $02 ; RHYHORN
db $03 ; RHYDON
db $04 ; CHANSEY
db $04 ; TANGELA
db $04 ; KANGASKHAN
db $04 ; HORSEA
db $04 ; SEADRA
db $02 ; GOLDEEN
db $03 ; SEAKING
db $02 ; STARYU
db $03 ; STARMIE
db $04 ; MR_MIME
db $04 ; SCYTHER
db $04 ; JYNX
db $04 ; ELECTABUZZ
db $04 ; MAGMAR
db $04 ; PINSIR
db $04 ; TAUROS
db $02 ; MAGIKARP
db $03 ; GYARADOS
db $04 ; LAPRAS
db $04 ; DITTO
db $02 ; EEVEE
db $03 ; VAPOREON
db $03 ; JOLTEON
db $03 ; FLAREON
db $04 ; PORYGON
db $02 ; OMANYTE
db $03 ; OMASTAR
db $02 ; KABUTO
db $03 ; KABUTOPS
db $04 ; AERODACTYL
db $04 ; SNORLAX
db $04 ; ARTICUNO
db $04 ; ZAPDOS
db $04 ; MOLTRES
db $01 ; DRATINI
db $02 ; DRAGONAIR
db $04 ; DRAGONITE
db $04 ; MEWTWO
db $06 ; MEW
MonEvolutionObjectCounts: ; 0x1298b
; See wNumPossibleEvolutionObjects
; The values in this table are effectively 3 less than the actual number of
; possible evolution objects that can produce trinkets. For example, IVYSAUR
; specifies a value of 2 in this table. This means that a total of 5 field
; objects are candidates that could produce an evolution trinket when hit with
; the pinball.
;
; There are some unused values in this table, which have functional support: 0, 5, and 7.
db 1 ; BULBASAUR
db 2 ; IVYSAUR
db 3 ; VENUSAUR
db 1 ; CHARMANDER
db 2 ; CHARMELEON
db 3 ; CHARIZARD
db 1 ; SQUIRTLE
db 2 ; WARTORTLE
db 3 ; BLASTOISE
db 1 ; CATERPIE
db 2 ; METAPOD
db 3 ; BUTTERFREE
db 1 ; WEEDLE
db 2 ; KAKUNA
db 3 ; BEEDRILL
db 1 ; PIDGEY
db 2 ; PIDGEOTTO
db 3 ; PIDGEOT
db 1 ; RATTATA
db 3 ; RATICATE
db 1 ; SPEAROW
db 3 ; FEAROW
db 1 ; EKANS
db 3 ; ARBOK
db 1 ; PIKACHU
db 3 ; RAICHU
db 1 ; SANDSHREW
db 3 ; SANDSLASH
db 1 ; NIDORAN_F
db 2 ; NIDORINA
db 4 ; NIDOQUEEN
db 1 ; NIDORAN_M
db 2 ; NIDORINO
db 4 ; NIDOKING
db 2 ; CLEFAIRY
db 3 ; CLEFABLE
db 2 ; VULPIX
db 3 ; NINETALES
db 2 ; JIGGLYPUFF
db 3 ; WIGGLYTUFF
db 2 ; ZUBAT
db 3 ; GOLBAT
db 1 ; ODDISH
db 2 ; GLOOM
db 4 ; VILEPLUME
db 2 ; PARAS
db 3 ; PARASECT
db 2 ; VENONAT
db 3 ; VENOMOTH
db 2 ; DIGLETT
db 3 ; DUGTRIO
db 2 ; MEOWTH
db 3 ; PERSIAN
db 2 ; PSYDUCK
db 3 ; GOLDUCK
db 2 ; MANKEY
db 3 ; PRIMEAPE
db 2 ; GROWLITHE
db 3 ; ARCANINE
db 1 ; POLIWAG
db 2 ; POLIWHIRL
db 4 ; POLIWRATH
db 1 ; ABRA
db 2 ; KADABRA
db 4 ; ALAKAZAM
db 1 ; MACHOP
db 2 ; MACHOKE
db 4 ; MACHAMP
db 1 ; BELLSPROUT
db 2 ; WEEPINBELL
db 4 ; VICTREEBEL
db 2 ; TENTACOOL
db 3 ; TENTACRUEL
db 1 ; GEODUDE
db 2 ; GRAVELER
db 4 ; GOLEM
db 2 ; PONYTA
db 3 ; RAPIDASH
db 2 ; SLOWPOKE
db 3 ; SLOWBRO
db 2 ; MAGNEMITE
db 3 ; MAGNETON
db 4 ; FARFETCH_D
db 2 ; DODUO
db 3 ; DODRIO
db 2 ; SEEL
db 3 ; DEWGONG
db 2 ; GRIMER
db 3 ; MUK
db 2 ; SHELLDER
db 3 ; CLOYSTER
db 1 ; GASTLY
db 2 ; HAUNTER
db 4 ; GENGAR
db 4 ; ONIX
db 2 ; DROWZEE
db 3 ; HYPNO
db 2 ; KRABBY
db 3 ; KINGLER
db 2 ; VOLTORB
db 3 ; ELECTRODE
db 2 ; EXEGGCUTE
db 3 ; EXEGGUTOR
db 2 ; CUBONE
db 3 ; MAROWAK
db 4 ; HITMONLEE
db 4 ; HITMONCHAN
db 4 ; LICKITUNG
db 2 ; KOFFING
db 3 ; WEEZING
db 2 ; RHYHORN
db 3 ; RHYDON
db 4 ; CHANSEY
db 4 ; TANGELA
db 4 ; KANGASKHAN
db 4 ; HORSEA
db 4 ; SEADRA
db 2 ; GOLDEEN
db 3 ; SEAKING
db 2 ; STARYU
db 3 ; STARMIE
db 4 ; MR_MIME
db 4 ; SCYTHER
db 4 ; JYNX
db 4 ; ELECTABUZZ
db 4 ; MAGMAR
db 4 ; PINSIR
db 4 ; TAUROS
db 2 ; MAGIKARP
db 3 ; GYARADOS
db 4 ; LAPRAS
db 4 ; DITTO
db 2 ; EEVEE
db 3 ; VAPOREON
db 3 ; JOLTEON
db 3 ; FLAREON
db 4 ; PORYGON
db 2 ; OMANYTE
db 3 ; OMASTAR
db 2 ; KABUTO
db 3 ; KABUTOPS
db 4 ; AERODACTYL
db 4 ; SNORLAX
db 4 ; ARTICUNO
db 4 ; ZAPDOS
db 4 ; MOLTRES
db 1 ; DRATINI
db 2 ; DRAGONAIR
db 4 ; DRAGONITE
db 4 ; MEWTWO
db 6 ; MEW

View File

@ -1114,7 +1114,7 @@ ResetIndicatorStates: ; 0x107a5
jr nz, .loop
ret
Func_107b0: ; 0x107b0
CloseSlotCave_: ; 0x107b0
xor a
ld [wSlotIsOpen], a
ld [wIndicatorStates + 4], a
@ -1249,7 +1249,7 @@ Func_10871: ; 0x10871
jr nz, .loop
xor a
ld [wRightAlleyCount], a
call Func_107b0
call CloseSlotCave_
ld a, $4
ld [wd7ad], a
ld de, MUSIC_CATCH_EM_BLUE ; This is either MUSIC_CATCH_EM_BLUE or MUSIC_CATCH_EM_RED. They happen to have the same id in their respective audio Banks.

View File

@ -284,7 +284,7 @@ DrawEvolutionTrinket_BlueFieldTop: ; 0x1f4f8
ld a, [wEvolutionObjectsDisabled]
and a
ret z
ld de, wd566
ld de, wActiveEvolutionTrinkets
ld hl, EvolutionTrinketOAMOffsets_BlueFieldTop
ld b, $c
ld c, $47
@ -294,7 +294,7 @@ DrawEvolutionTrinket_BlueFieldBottom: ; 0x1f509
ld a, [wEvolutionObjectsDisabled]
and a
ret z
ld de, wd572
ld de, wActiveEvolutionTrinkets + 12
ld hl, EvolutionTrinketOAMOffsets_BlueFieldBottom
ld b, $6
ld c, $40

View File

@ -476,7 +476,7 @@ DrawEvolutionTrinket_RedFieldTop: ; 0x17f64
ld a, [wEvolutionObjectsDisabled]
and a
ret z
ld de, wd566
ld de, wActiveEvolutionTrinkets
ld hl, EvolutionTrinketOAMOffsets_RedFieldTop
ld b, $c
ld c, $39
@ -486,7 +486,7 @@ DrawEvolutionTrinket_RedFieldBottom: ; 0x17f75
ld a, [wEvolutionObjectsDisabled]
and a
ret z
ld de, wd572
ld de, wActiveEvolutionTrinkets + 12
ld hl, EvolutionTrinketOAMOffsets_RedFieldBottom
ld b, $6
ld c, $40

View File

@ -389,18 +389,18 @@ InitEvolutionModeForMon: ; 0x10d1d
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
ld hl, Data_1298b
ld hl, MonEvolutionObjectCounts
add hl, bc
ld a, [hl]
add $2
ld [wd555], a
add 2
ld [wNumPossibleEvolutionObjects], a
xor a
ld hl, wd566
ld b, $13
.asm_10d40
ld hl, wActiveEvolutionTrinkets
ld b, 18 + 1 ; This goes out of bounds by 1--it's supposed to be 18. Doesn't result in any bad behavior, though.
.clearEvoTrinketsLoop
ld [hli], a
dec b
jr nz, .asm_10d40
jr nz, .clearEvoTrinketsLoop
ld a, [wCurrentCatchEmMon]
ld c, a
ld b, $0
@ -432,17 +432,17 @@ InitEvolutionModeForMon: ; 0x10d1d
.countMonEvolutionsLoop
ld a, [hli]
and a
jr z, .noEvolution
jr z, .nextEvolution
inc c
.noEvolution
.nextEvolution
inc hl
dec b
jr nz, .countMonEvolutionsLoop
ld a, c
cp $ff
jr nz, .asm_10d8a
jr nz, .chooseEvolution
xor a
.asm_10d8a
.chooseEvolution
call RandomRange
sla a
ld c, a
@ -451,37 +451,40 @@ InitEvolutionModeForMon: ; 0x10d1d
ld a, [hli] ; a = mon id of evolution
dec a
ld [wCurrentEvolutionMon], a
ld a, [hl] ; a = evoluion type id
ld a, [hl] ; a = evolution type id
ld [wCurrentEvolutionType], a
xor a
ld [wNumEvolutionTrinkets], a
ld [wEvolutionTrinketCooldownFrames], a
ld [wEvolutionTrinketCooldownFrames + 1], a
ld hl, wd55c
ld a, $1
ld b, $3
.asm_10dac
; Randomly set three entries in wEvolutionObjectStates to $1.
; Each mon has a specified range of which entries can be set to $1.
; The idea is that rarer mons can have harder-to-hit objects.
ld hl, wEvolutionObjectStates
ld a, 1
ld b, 3
.initLoop1
ld [hli], a
dec b
jr nz, .asm_10dac
jr nz, .initLoop1
xor a
ld b, $7
.asm_10db3
ld b, 7
.initLoop2
ld [hli], a
dec b
jr nz, .asm_10db3
ld de, wd55c
ld a, [wd555]
jr nz, .initLoop2
ld de, wEvolutionObjectStates
ld a, [wNumPossibleEvolutionObjects]
ld c, a
inc a
ld b, a
.asm_10dc0
.shuffleLoop
push bc
ld a, c
call RandomRange
ld c, a
ld b, $0
ld hl, wd55c
ld hl, wEvolutionObjectStates
add hl, bc
ld c, [hl]
ld a, [de]
@ -491,7 +494,7 @@ InitEvolutionModeForMon: ; 0x10d1d
pop bc
inc de
dec b
jr nz, .asm_10dc0
jr nz, .shuffleLoop
callba InitBallSaverForCatchEmMode
call ShowStartEvolutionModeText
call Func_3579
@ -609,11 +612,11 @@ StartEvolutionMode_RedField: ; 0x10ebb
ret z
call SelectPokemonToEvolve
call InitEvolutionModeForMon
ld a, [wd555]
sub $2
ld a, [wNumPossibleEvolutionObjects]
sub 2
ld c, a
sla c
ld hl, IndicatorStatesPointerTable_10f3b
ld hl, InitialIndicatorStates_RedField
add hl, bc
ld a, [hli]
ld h, [hl]
@ -628,7 +631,7 @@ StartEvolutionMode_RedField: ; 0x10ebb
jr nz, .loop
xor a
ld [wLeftAlleyCount], a
call Func_107b0
call CloseSlotCave_
ld a, $2
ld [wd7ad], a
ld de, MUSIC_CATCH_EM_BLUE ; Either MUSIC_CATCH_EM_BLUE or MUSIC_CATCH_EM_RED. They have the same id in their respective audio Banks.
@ -657,38 +660,38 @@ StartEvolutionMode_RedField: ; 0x10ebb
callba nz, Func_102bc
ret
IndicatorStatesPointerTable_10f3b: ; 0x10f3b
dw IndicatorStates_10f4b
dw IndicatorStates_10f5e
dw IndicatorStates_10f71
dw IndicatorStates_10f84
dw IndicatorStates_10f97
dw IndicatorStates_10faa
dw IndicatorStates_10fbd
dw IndicatorStates_10fd0
InitialIndicatorStates_RedField: ; 0x10f3b
dw InitialIndicatorStates0_RedField
dw InitialIndicatorStates1_RedField
dw InitialIndicatorStates2_RedField
dw InitialIndicatorStates3_RedField
dw InitialIndicatorStates4_RedField
dw InitialIndicatorStates5_RedField
dw InitialIndicatorStates6_RedField
dw InitialIndicatorStates7_RedField
IndicatorStates_10f4b: ; 0x10f4b
InitialIndicatorStates0_RedField: ; 0x10f4b
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_10f5e: ; 0x10f5e
InitialIndicatorStates1_RedField: ; 0x10f5e
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_10f71: ; 0x10f71
InitialIndicatorStates2_RedField: ; 0x10f71
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10f84: ; 0x10f84
InitialIndicatorStates3_RedField: ; 0x10f84
db $00, $00, $00, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10f97: ; 0x10f97
InitialIndicatorStates4_RedField: ; 0x10f97
db $00, $00, $00, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10faa: ; 0x10faa
InitialIndicatorStates5_RedField: ; 0x10faa
db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10fbd: ; 0x10fbd
InitialIndicatorStates6_RedField: ; 0x10fbd
db $00, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_10fd0: ; 0x10fd0
InitialIndicatorStates7_RedField: ; 0x10fd0
db $00, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
ConcludeEvolutionMode_RedField: ; 0x10fe3
@ -745,11 +748,11 @@ StartEvolutionMode_BlueField: ; 0x11061
call InitEvolutionModeForMon
ld a, $1
ld [wd643], a
ld a, [wd555]
sub $2
ld a, [wNumPossibleEvolutionObjects]
sub 2
ld c, a
sla c
ld hl, IndicatorStatesPointerTable_110ed
ld hl, InitialIndicatorStates_BlueField
add hl, bc
ld a, [hli]
ld h, [hl]
@ -793,38 +796,38 @@ StartEvolutionMode_BlueField: ; 0x11061
callba nz, Func_102bc
ret
IndicatorStatesPointerTable_110ed: ; 0x110ed
dw IndicatorStates_110fd
dw IndicatorStates_11110
dw IndicatorStates_11123
dw IndicatorStates_11136
dw IndicatorStates_11149
dw IndicatorStates_1115c
dw IndicatorStates_1116f
dw IndicatorStates_11182
InitialIndicatorStates_BlueField: ; 0x110ed
dw InitialIndicatorStates0_BlueField
dw InitialIndicatorStates1_BlueField
dw InitialIndicatorStates2_BlueField
dw InitialIndicatorStates3_BlueField
dw InitialIndicatorStates4_BlueField
dw InitialIndicatorStates5_BlueField
dw InitialIndicatorStates6_BlueField
dw InitialIndicatorStates7_BlueField
IndicatorStates_110fd: ; 0x110fd
InitialIndicatorStates0_BlueField: ; 0x110fd
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_11110: ; 0x11110
InitialIndicatorStates1_BlueField: ; 0x11110
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
IndicatorStates_11123: ; 0x11123
InitialIndicatorStates2_BlueField: ; 0x11123
db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_11136: ; 0x11136
InitialIndicatorStates3_BlueField: ; 0x11136
db $00, $00, $80, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_11149: ; 0x11149
InitialIndicatorStates4_BlueField: ; 0x11149
db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_1115c: ; 0x1115c
InitialIndicatorStates5_BlueField: ; 0x1115c
db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_1116f: ; 0x1116f
InitialIndicatorStates6_BlueField: ; 0x1116f
db $80, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
IndicatorStates_11182: ; 0x11182
InitialIndicatorStates7_BlueField: ; 0x11182
db $80, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
ConcludeEvolutionMode_BlueField: ; 0x11195

View File

@ -46,12 +46,12 @@ HandleEvolutionMode_BlueField: ; 0x20c08
ret z
dec a
bit 0, b
jr z, .asm_20c18
add $c
.asm_20c18
jr z, .checkTrinketActive
add 12
.checkTrinketActive
ld c, a
ld b, $0
ld hl, wd566
ld hl, wActiveEvolutionTrinkets
add hl, bc
ld a, [hl]
and a
@ -274,10 +274,10 @@ HandleShellderCollision_EvolutionMode: ; 0x20e34
jr z, .disabled
xor a
ld [wIndicatorStates + 9], a
ld a, [wd55c]
ld a, [wEvolutionObjectStates + 0]
and a
ld a, $0
ld [wd55c], a
ld [wEvolutionObjectStates + 0], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -295,10 +295,10 @@ HandleCloysterCollision_EvolutionMode: ; 0x20e5e
xor a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wd562]
ld a, [wEvolutionObjectStates + 6]
and a
ld a, $0
ld [wd562], a
ld [wEvolutionObjectStates + 6], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -316,10 +316,10 @@ HandleSlowpokeCollision_EvolutionMode: ; 0x20e82
xor a
ld [wIndicatorStates + 8], a
ld [wIndicatorStates + 2], a
ld a, [wd561]
ld a, [wEvolutionObjectStates + 5]
and a
ld a, $0
ld [wd561], a
ld [wEvolutionObjectStates + 5], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -336,10 +336,10 @@ HandlePoliwagCollision_EvolutionMode: ; 0x20ea6
jr z, .disabled
xor a
ld [wIndicatorStates + 13], a
ld a, [wd55d]
ld a, [wEvolutionObjectStates + 1]
and a
ld a, $0
ld [wd55d], a
ld [wEvolutionObjectStates + 1], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -356,10 +356,10 @@ HandlePsyduckCollision_EvolutionMode: ; 0x20ec7
jr z, .disabled
xor a
ld [wIndicatorStates + 14], a
ld a, [wd55e]
ld a, [wEvolutionObjectStates + 2]
and a
ld a, $0
ld [wd55e], a
ld [wEvolutionObjectStates + 2], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -376,10 +376,10 @@ HandleLeftBonusMultiplierCollision_EvolutionMode_BlueField: ; 0x20ee8
jr z, .disabled
xor a
ld [wIndicatorStates + 11], a
ld a, [wd55f]
ld a, [wEvolutionObjectStates + 3]
and a
ld a, $0
ld [wd55f], a
ld [wEvolutionObjectStates + 3], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -396,10 +396,10 @@ HandleRightBonusMultiplierCollision_EvolutionMode_BlueField: ; 0x20f09
jr z, .disabled
xor a
ld [wIndicatorStates + 12], a
ld a, [wd560]
ld a, [wEvolutionObjectStates + 4]
and a
ld a, $0
ld [wd560], a
ld [wEvolutionObjectStates + 4], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -416,10 +416,10 @@ HandleBallUpgradeCollision_EvolutionMode_BlueField: ; 0x20f2a
jr z, .disabled
xor a
ld [wIndicatorStates + 6], a
ld a, [wd565]
ld a, [wEvolutionObjectStates + 9]
and a
ld a, $0
ld [wd565], a
ld [wEvolutionObjectStates + 9], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -439,10 +439,10 @@ HandleSpinnerCollision_EvolutionMode_BlueField: ; 0x20f4b
jr z, .disabled
xor a
ld [wIndicatorStates + 7], a
ld a, [wd564]
ld a, [wEvolutionObjectStates + 8]
and a
ld a, $0
ld [wd564], a
ld [wEvolutionObjectStates + 8], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -578,10 +578,10 @@ HandleLeftTriggerCollision_EvolutionMode_BlueField: ; 0x21089
jr z, .asm_210a8
xor a
ld [wIndicatorStates], a
ld a, [wd563]
ld a, [wEvolutionObjectStates + 7]
and a
ld a, $0
ld [wd563], a
ld [wEvolutionObjectStates + 7], a
jp nz, CreateEvolutionTrinket_BlueField
jp EvolutionTrinketNotFound_BlueField
@ -640,11 +640,11 @@ RecoverPokemon_BlueField:
ret
ChooseNextEvolutionTrinketLocation_BlueField: ; 0x2111d
ld a, $11
ld a, 17
call RandomRange
ld c, a
ld b, $0
ld hl, wd566
ld hl, wActiveEvolutionTrinkets
add hl, bc
ret

View File

@ -48,12 +48,12 @@ HandleEvolutionMode_RedField: ; 0x205e0
ret z
dec a
bit 0, b
jr z, .asm_205f0
add $c
.asm_205f0
jr z, .checkTrinketActive
add 12
.checkTrinketActive
ld c, a
ld b, $0
ld hl, wd566
ld hl, wActiveEvolutionTrinkets
add hl, bc
ld a, [hl]
and a
@ -277,10 +277,10 @@ HandleVoltorbCollision_EvolutionMode: ; 0x2080f
jr z, .disabled
xor a
ld [wIndicatorStates + 9], a
ld a, [wd55c]
ld a, [wEvolutionObjectStates + 0]
and a
ld a, $0
ld [wd55c], a
ld [wEvolutionObjectStates + 0], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -297,10 +297,10 @@ HandleStaryuAlleyTriggerCollision_EvolutionMode: ; 0x20839
jr z, .disabled
xor a
ld [wIndicatorStates + 2], a
ld a, [wd563]
ld a, [wEvolutionObjectStates + 7]
and a
ld a, $0
ld [wd563], a
ld [wEvolutionObjectStates + 7], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -321,10 +321,10 @@ HandleBellsproutCollision_EvolutionMode: ; 0x2085a
xor a
ld [wIndicatorStates + 3], a
ld [wIndicatorStates + 10], a
ld a, [wd562]
ld a, [wEvolutionObjectStates + 6]
and a
ld a, $0
ld [wd562], a
ld [wEvolutionObjectStates + 6], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -341,10 +341,10 @@ HandleStaryuCollision_EvolutionMode: ; 0x20887
jr z, .disabled
xor a
ld [wIndicatorStates + 8], a
ld a, [wd561]
ld a, [wEvolutionObjectStates + 5]
and a
ld a, $0
ld [wd561], a
ld [wEvolutionObjectStates + 5], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -361,10 +361,10 @@ HandleLeftDiglettCollision_EvolutionMode: ; 0x208a8
jr z, .disabled
xor a
ld [wIndicatorStates + 13], a ;flick off indicator
ld a, [wd55d]
ld a, [wEvolutionObjectStates + 1]
and a
ld a, $0
ld [wd55d], a ;make ??? 0
ld [wEvolutionObjectStates + 1], a ;make ??? 0
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -381,10 +381,10 @@ HandleRightDiglettCollision_EvolutionMode: ; 0x208c9
jr z, .disabled
xor a
ld [wIndicatorStates + 14], a
ld a, [wd55e]
ld a, [wEvolutionObjectStates + 2]
and a
ld a, $0
ld [wd55e], a
ld [wEvolutionObjectStates + 2], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -401,10 +401,10 @@ HandleLeftBonusMultiplierCollision_EvolutionMode_RedField: ; 0x208ea
jr z, .disabled
xor a
ld [wIndicatorStates + 11], a
ld a, [wd55f]
ld a, [wEvolutionObjectStates + 3]
and a
ld a, $0
ld [wd55f], a
ld [wEvolutionObjectStates + 3], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -421,10 +421,10 @@ HandleRightBonusMultiplierCollision_EvolutionMode_RedField: ; 0x2090b
jr z, .disabled
xor a
ld [wIndicatorStates + 12], a
ld a, [wd560]
ld a, [wEvolutionObjectStates + 4]
and a
ld a, $0
ld [wd560], a
ld [wEvolutionObjectStates + 4], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -441,10 +441,10 @@ HandleBallUpgradeCollision_EvolutionMode_RedField: ; 0x2092c
jr z, .disabled
xor a
ld [wIndicatorStates + 6], a
ld a, [wd565]
ld a, [wEvolutionObjectStates + 9]
and a
ld a, $0
ld [wd565], a
ld [wEvolutionObjectStates + 9], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -464,10 +464,10 @@ HandleSpinnerCollision_EvolutionMode_RedField: ; 0x2094d
jr z, .disabled
xor a
ld [wIndicatorStates + 7], a
ld a, [wd564]
ld a, [wEvolutionObjectStates + 8]
and a
ld a, $0
ld [wd564], a
ld [wEvolutionObjectStates + 8], a
jp nz, CreateEvolutionTrinket_RedField
jp EvolutionTrinketNotFound_RedField
@ -639,11 +639,11 @@ RecoverPokemon_RedField:
ret
ChooseNextEvolutionTrinketLocation_RedField: ; 0x20af5
ld a, $11
ld a, 17
call RandomRange
ld c, a
ld b, $0
ld hl, wd566
ld hl, wActiveEvolutionTrinkets
add hl, bc
ret

View File

@ -117,7 +117,7 @@ Func_311b4: ; 0x311b4
ld [wStageCollisionMap + $e3], a
ld a, $67
ld [wStageCollisionMap + $103], a
callba Func_107b0
callba CloseSlotCave_
ld a, $4
ld [wd7ad], a
ld de, MUSIC_HURRY_UP_BLUE ; Either MUSIC_HURRY_UP_BLUE or MUSIC_HURRY_UP_RED. They have the same id in their respective audio Banks.

View File

@ -435,7 +435,7 @@ HitRightDiglett3Times: ; 0x14920
ld hl, wNumDugtrioTriples
call Increment_Max100
jr nc, .asm_14937
ld c, $a
ld c, 10
call Modulo_C
callba z, AddExtraBall
.asm_14937
@ -448,7 +448,7 @@ HitLeftDiglett3Times: ; 0x14947
ld hl, wNumDugtrioTriples
call Increment_Max100
jr nc, .asm_1495e
ld c, $a
ld c, 10
call Modulo_C
callba z, AddExtraBall
.asm_1495e
@ -1580,7 +1580,7 @@ ResolveBellsproutCollision: ; 0x15e93
ld hl, wNumBellsproutEntries
call Increment_Max100
ret nc
ld c, $19
ld c, 25
call Modulo_C
callba z, AddExtraBall
ret
@ -2406,7 +2406,7 @@ UpdatePikachuSaverAnimation_RedField: ; 0x1669e
ld hl, wNumPikachuSaves
call Increment_Max100
jr nc, .asm_166f0
ld c, $a
ld c, 10
call Modulo_C
callba z, AddExtraBall
.asm_166f0
@ -2731,7 +2731,7 @@ ResolveRedStageBonusMultiplierCollision: ; 016d9d
.asm_16e10
ld [wCurBonusMultiplier], a
jr nc, .asm_16e24
ld c, $19
ld c, 25
call Modulo_C
callba z, AddExtraBall
.asm_16e24

View File

@ -8,7 +8,7 @@ DoSlotRewardRoulette: ; 0xed8e
ld a, [wBallType]
ld c, a
ld b, $0
ld hl, BallTypeMultipliers
ld hl, BallTypeIncreases
add hl, bc
ld a, [hl]
ld [wSlotBallIncrease], a
@ -235,14 +235,13 @@ IsRightOrLeftFlipperKeyPressed: ; 0xef1e
pop bc
ret
BallTypeMultipliers: ; 0xef2f
; Score multiplier for each ball type.
db $00 ; POKE_BALL
db $00
db $01 ; GREAT_BALL
db $02 ; ULTRA_BALL
db $02
db $02 ; MASTER_BALL
BallTypeIncreases: ; 0xef2f
db 0 ; POKE_BALL
db 0
db 1 ; GREAT_BALL
db 2 ; ULTRA_BALL
db 2
db 2 ; MASTER_BALL
INCLUDE "engine/pinball_game/ball_saver/ball_saver_30.asm"
INCLUDE "engine/pinball_game/ball_saver/ball_saver_60.asm"

View File

@ -110,7 +110,7 @@ UpdateRNG: ; 0x9fa
ret
RandomRange: ; 0xa21
; Random value 0 <= x < a
; Random value 0 <= x <= a
push bc
push hl
ld c, a

View File

@ -543,7 +543,7 @@ wCollidedAlleyTriggers:: ; 0xd521
ds $6 ; free space
wIndicatorStates:: ; 0xd52f 0 = evo arrows, 1 = catch arrows, 2 = left small alley, 3 = bellsprout, 4 = slot. bit 7 controls if enabled and flashing, bit 1 and 2 control is solid (set = solid), +9 is the arrow pointing to voltorb on red evo mode
wIndicatorStates:: ; 0xd52f
ds $13
wLeftAlleyTrigger:: ; 0xd542
@ -611,7 +611,11 @@ wCurrentEvolutionType:: ; 0xd553
wNumEvolutionTrinkets:: ; 0xd554
ds $1
wd555:: ; 0xd555
wNumPossibleEvolutionObjects:: ; 0xd555
; Each mon has a different number of possible field objects that can produce trinkets.
; This number is used to randomly choose objects that fall within that set, which will
; produce trinkets when hit with the pinball. This also corresponds to the blinking
; arrows that are displayed when the player is trying to hit one of the objects.
ds $1
wEvolutionTrinketCooldownFrames:: ; 0xd556
@ -634,41 +638,43 @@ wMapMoveDirection:: ; 0xd55a
wRareMonsFlag:: ; 0xd55b
ds $1
wd55c:: ; 0xd55c
ds $1
wEvolutionObjectStates:: ; 0xd55c
; There are 10 possible objects to hit that can spawn an evolution trinket. However, only three
; will actually spawn the trinket. The rest are "duds". This list of states keeps track of which
; ones will spawn the trinket. $1 = spawn trinket, $0 otherwise.
; The indexes in this list correspond to the following objects:
; Blue Field:
; 0: Any of the 3 Shellder bumpers
; 1: Poliwag
; 2: Psyduck
; 3: Left Bonus Multiplier railing
; 4: Right Bonus Multiplier railing
; 5: Slowpoke
; 6: Cloyster
; 7: Left alley trigger point
; 8: Spinner
; 9: Any of the 3 Ball Upgrade lights
; Red Field:
; 0: Any of the 3 Voltorb bumpers
; 1: Left Diglett
; 2: Right Diglett
; 3: Left Bonus Multiplier railing
; 4: Right Bonus Multiplier railing
; 5: Staryu
; 6: Bellsprout
; 7: Staryu alley trigger point
; 8: Spinner
; 9: Any of the 3 Ball Upgrade lights
ds 10
wd55d:: ; 0xd55d
ds $1
wd55e:: ; 0xd55e
ds $1
wd55f:: ; 0xd55f
ds $1
wd560:: ; 0xd560
ds $1
wd561:: ; 0xd561
ds $1
wd562:: ; 0xd562
ds $1
wd563:: ; 0xd563
ds $1
wd564:: ; 0xd564
ds $1
wd565:: ; 0xd565
ds $1
wd566:: ; 0xd566
ds $c
wd572:: ; 0xd572
ds $6
wActiveEvolutionTrinkets:: ; 0xd566
; There are 18 different positions that an evolution trinket can exist.
; Each entry in this list corresponds to one of those positions. The values
; in this list are evolution type constants, and $0 if the trinket is inactive.
; (See constants/evolution_type_constants.asm)
; During gameplay, only one of these trinkets is ever active at a given time.
; However, the game logic perfectly supports multiple being active.
ds 18
wCollidedPointIndex:: ; 0xd578
; Stores the result of the PinballCollidesWithPoints function.