pokecrystal-board/engine/events/fish.asm
mid-kid f98a95b8ee wWeeklyFlags -> wDailyFlags2
These are by far not always checked each week, and as such shouldn't be
called that.
Since they're almost always used through the `bit` instruction, it's
very inconvenient to just make wDailyFlags a `dw` instead.
2018-08-07 09:46:21 +02:00

128 lines
1.7 KiB
NASM

Fish:
; Using a fishing rod.
; Fish for monsters with rod e in encounter group d.
; Return monster e at level d.
push af
push bc
push hl
ld b, e
call GetFishGroupIndex
ld hl, FishGroups
rept FISHGROUP_DATA_LENGTH
add hl, de
endr
call .Fish
pop hl
pop bc
pop af
ret
.Fish:
; Fish for monsters with rod b from encounter data in FishGroup at hl.
; Return monster e at level d.
call Random
cp [hl]
jr nc, .no_bite
; Get encounter data by rod:
; 0: Old
; 1: Good
; 2: Super
inc hl
ld e, b
ld d, 0
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
; Compare the encounter chance to select a Pokemon.
call Random
.loop
cp [hl]
jr z, .ok
jr c, .ok
inc hl
inc hl
inc hl
jr .loop
.ok
inc hl
; Species 0 reads from a time-based encounter table.
ld a, [hli]
ld d, a
and a
call z, .TimeEncounter
ld e, [hl]
ret
.no_bite
ld de, 0
ret
.TimeEncounter:
; The level byte is repurposed as the index for the new table.
ld e, [hl]
ld d, 0
ld hl, TimeFishGroups
rept 4
add hl, de
endr
ld a, [wTimeOfDay]
maskbits NUM_DAYTIMES
cp NITE_F
jr c, .time_species
inc hl
inc hl
.time_species
ld d, [hl]
inc hl
ret
GetFishGroupIndex:
; Return the index of fishgroup d in de.
push hl
ld hl, wDailyFlags1
bit DAILYFLAGS1_FISH_SWARM_F, [hl]
pop hl
jr z, .done
ld a, d
cp FISHGROUP_QWILFISH
jr z, .qwilfish
cp FISHGROUP_REMORAID
jr z, .remoraid
.done
dec d
ld e, d
ld d, 0
ret
.qwilfish
ld a, [wFishingSwarmFlag]
cp FISHSWARM_QWILFISH
jr nz, .done
ld d, FISHGROUP_QWILFISH_SWARM
jr .done
.remoraid
ld a, [wFishingSwarmFlag]
cp FISHSWARM_REMORAID
jr nz, .done
ld d, FISHGROUP_REMORAID_SWARM
jr .done
INCLUDE "data/wild/fish.asm"