pokecrystal-board/engine/pokemon/breeding.asm

943 lines
14 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
CheckBreedmonCompatibility:
2015-12-09 15:25:44 -08:00
call .CheckBreedingGroupCompatibility
ld c, $0
2015-12-09 15:25:44 -08:00
jp nc, .done
ld a, [wBreedMon1Species]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, [wBreedMon1DVs]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs], a
ld a, [wBreedMon1DVs + 1]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs + 1], a
2016-05-11 14:16:03 -07:00
ld a, TEMPMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
predef GetGender
2015-12-09 15:25:44 -08:00
jr c, .genderless
ld b, $1
2015-12-09 15:25:44 -08:00
jr nz, .breedmon2
inc b
2015-12-09 15:25:44 -08:00
.breedmon2
push bc
ld a, [wBreedMon2Species]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, [wBreedMon2DVs]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs], a
ld a, [wBreedMon2DVs + 1]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs + 1], a
ld a, TEMPMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
predef GetGender
pop bc
2015-12-09 15:25:44 -08:00
jr c, .genderless
ld a, $1
2015-12-09 15:25:44 -08:00
jr nz, .compare_gender
inc a
2015-12-09 15:25:44 -08:00
.compare_gender
cp b
2015-12-09 15:25:44 -08:00
jr nz, .compute
2015-12-09 15:25:44 -08:00
.genderless
ld c, $0
ld a, [wBreedMon1Species]
cp DITTO
2015-12-09 15:25:44 -08:00
jr z, .ditto1
ld a, [wBreedMon2Species]
cp DITTO
2015-12-09 15:25:44 -08:00
jr nz, .done
jr .compute
2015-12-09 15:25:44 -08:00
.ditto1
ld a, [wBreedMon2Species]
cp DITTO
2015-12-09 15:25:44 -08:00
jr z, .done
2015-12-09 15:25:44 -08:00
.compute
call .CheckDVs
ld c, 255
jp z, .done
ld a, [wBreedMon2Species]
ld b, a
ld a, [wBreedMon1Species]
cp b
2015-12-09 15:25:44 -08:00
ld c, 254
jr z, .compare_ids
ld c, 128
.compare_ids
; Speed up
ld a, [wBreedMon1ID]
ld b, a
ld a, [wBreedMon2ID]
cp b
2015-12-09 15:25:44 -08:00
jr nz, .done
ld a, [wBreedMon1ID + 1]
ld b, a
ld a, [wBreedMon2ID + 1]
cp b
2015-12-09 15:25:44 -08:00
jr nz, .done
ld a, c
2015-12-09 15:25:44 -08:00
sub 77
ld c, a
2015-12-09 15:25:44 -08:00
.done
ld a, c
ld [wBreedingCompatibility], a
ret
2018-06-24 07:09:41 -07:00
.CheckDVs:
2015-12-09 15:25:44 -08:00
; If Defense DVs match and the lower 3 bits of the Special DVs match,
; avoid breeding
ld a, [wBreedMon1DVs]
2015-12-09 15:25:44 -08:00
and %1111
ld b, a
ld a, [wBreedMon2DVs]
2015-12-09 15:25:44 -08:00
and %1111
cp b
ret nz
ld a, [wBreedMon1DVs + 1]
2015-12-09 15:25:44 -08:00
and %111
ld b, a
ld a, [wBreedMon2DVs + 1]
2015-12-09 15:25:44 -08:00
and %111
cp b
ret
2018-06-24 07:09:41 -07:00
.CheckBreedingGroupCompatibility:
2015-12-09 15:25:44 -08:00
; If either mon is in the No Eggs group,
; they are not compatible.
ld a, [wBreedMon2Species]
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
call GetBaseData
2018-01-23 14:39:09 -08:00
ld a, [wBaseEggGroups]
cp EGG_NONE * $11
2015-12-09 15:25:44 -08:00
jr z, .Incompatible
ld a, [wBreedMon1Species]
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
call GetBaseData
2018-01-23 14:39:09 -08:00
ld a, [wBaseEggGroups]
cp EGG_NONE * $11
2015-12-09 15:25:44 -08:00
jr z, .Incompatible
; Ditto is automatically compatible with everything.
; If not Ditto, load the breeding groups into b/c and d/e.
ld a, [wBreedMon2Species]
cp DITTO
2015-12-09 15:25:44 -08:00
jr z, .Compatible
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
call GetBaseData
2018-01-23 14:39:09 -08:00
ld a, [wBaseEggGroups]
push af
and $f
ld b, a
pop af
and $f0
swap a
ld c, a
2015-12-09 15:25:44 -08:00
ld a, [wBreedMon1Species]
cp DITTO
2015-12-09 15:25:44 -08:00
jr z, .Compatible
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
push bc
call GetBaseData
pop bc
2018-01-23 14:39:09 -08:00
ld a, [wBaseEggGroups]
push af
and $f
ld d, a
pop af
and $f0
swap a
ld e, a
2015-12-09 15:25:44 -08:00
ld a, d
cp b
2015-12-09 15:25:44 -08:00
jr z, .Compatible
cp c
2015-12-09 15:25:44 -08:00
jr z, .Compatible
ld a, e
cp b
2015-12-09 15:25:44 -08:00
jr z, .Compatible
cp c
2015-12-09 15:25:44 -08:00
jr z, .Compatible
.Incompatible:
and a
ret
.Compatible:
scf
ret
2018-06-24 07:09:41 -07:00
DoEggStep::
2018-01-23 14:39:09 -08:00
ld de, wPartySpecies
ld hl, wPartyMon1Happiness
ld c, 0
.loop
ld a, [de]
inc de
cp -1
ret z
cp EGG
jr nz, .next
dec [hl]
jr nz, .next
ld a, 1
and a
ret
.next
push de
ld de, PARTYMON_STRUCT_LENGTH
add hl, de
pop de
jr .loop
2018-06-24 07:09:41 -07:00
OverworldHatchEgg::
call RefreshScreen
call LoadStandardMenuHeader
call HatchEggs
2015-11-17 14:56:49 -08:00
call ExitAllMenus
call RestartMapMusic
2015-11-25 07:16:29 -08:00
jp CloseText
2018-06-24 07:09:41 -07:00
HatchEggs:
2018-01-23 14:39:09 -08:00
ld de, wPartySpecies
ld hl, wPartyMon1Happiness
xor a
2018-01-23 14:39:09 -08:00
ld [wCurPartyMon], a
2018-06-24 07:09:41 -07:00
.loop
ld a, [de]
inc de
cp -1
jp z, .done
push de
push hl
cp EGG
jp nz, .next
ld a, [hl]
and a
jp nz, .next
ld [hl], $78
push de
2017-12-24 09:47:30 -08:00
farcall SetEggMonCaughtData
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
ld hl, wPartyMon1Species
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
dec a
call SetSeenAndCaughtMon
pop de
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
dec de
ld [de], a
ld [wNamedObjectIndex], a
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
call GetPokemonName
xor a
2019-04-19 08:35:27 -07:00
ld [wUnusedEggHatchFlag], a
call GetBaseData
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
ld hl, wPartyMon1
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
push hl
ld bc, MON_MAXHP
add hl, bc
ld d, h
ld e, l
pop hl
push hl
ld bc, MON_LEVEL
add hl, bc
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
pop hl
push hl
ld bc, MON_STATUS
add hl, bc
xor a
ld [hli], a
ld [hl], a
pop hl
push hl
2015-12-21 11:10:16 -08:00
ld bc, MON_STAT_EXP - 1
add hl, bc
2018-01-22 10:18:23 -08:00
ld b, FALSE
predef CalcMonStats
pop bc
ld hl, MON_MAXHP
add hl, bc
ld d, h
ld e, l
ld hl, MON_HP
add hl, bc
ld a, [de]
inc de
ld [hli], a
ld a, [de]
ld [hl], a
ld hl, MON_ID
add hl, bc
2018-01-23 14:39:09 -08:00
ld a, [wPlayerID]
ld [hli], a
2018-01-23 14:39:09 -08:00
ld a, [wPlayerID + 1]
ld [hl], a
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
ld hl, wPartyMonOTs
ld bc, NAME_LENGTH
call AddNTimes
ld d, h
ld e, l
2018-01-23 14:39:09 -08:00
ld hl, wPlayerName
call CopyBytes
ld hl, .Text_HatchEgg
call PrintText1bpp
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
ld hl, wPartyMonNicknames
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
call AddNTimes
ld d, h
ld e, l
push de
ld hl, .BreedAskNicknameText
call PrintText1bpp
call YesNoBox
pop de
jr c, .nonickname
2019-04-19 08:35:27 -07:00
ld a, TRUE
ld [wUnusedEggHatchFlag], a
xor a
2018-01-23 14:39:09 -08:00
ld [wMonType], a
push de
2018-09-16 13:02:58 -07:00
ld b, NAME_MON
2017-12-24 09:47:30 -08:00
farcall NamingScreen
pop hl
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
call InitName
jr .next
.nonickname
2018-01-23 14:39:09 -08:00
ld hl, wStringBuffer1
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
call CopyBytes
2018-06-24 07:09:41 -07:00
.next
2018-01-23 14:39:09 -08:00
ld hl, wCurPartyMon
inc [hl]
pop hl
ld de, PARTYMON_STRUCT_LENGTH
add hl, de
pop de
jp .loop
2018-06-24 07:09:41 -07:00
.done
ret
.Text_HatchEgg:
; Huh? @ @
text_far Text_BreedHuh
text_asm
ld hl, wStateFlags
res 0, [hl]
push hl
push de
push bc
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
push af
call EggHatch_AnimationSequence
ld hl, .BreedClearboxText
call PrintText1bpp
pop af
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
pop bc
pop de
pop hl
ld hl, .BreedEggHatchText
ret
.BreedClearboxText:
text_far _BreedClearboxText
text_end
.BreedEggHatchText:
text_far _BreedEggHatchText
text_end
.BreedAskNicknameText:
text_far _BreedAskNicknameText
text_end
2018-06-24 07:09:41 -07:00
InitEggMoves:
call GetHeritableMoves
ld d, h
ld e, l
ld b, NUM_MOVES
.loop
ld a, [de]
and a
jr z, .done
ld hl, wEggMonMoves
ld c, NUM_MOVES
.next
ld a, [de]
cp [hl]
jr z, .skip
inc hl
dec c
jr nz, .next
call GetEggMove
jr nc, .skip
call LoadEggMove
.skip
inc de
dec b
jr nz, .loop
.done
ret
2018-06-24 07:09:41 -07:00
GetEggMove:
push bc
ld a, [wEggMonSpecies]
dec a
ld c, a
ld b, 0
ld hl, EggMovePointers
add hl, bc
add hl, bc
ld a, BANK(EggMovePointers)
call GetFarWord
.loop
ld a, BANK("Egg Moves")
call GetFarByte
cp -1
jr z, .reached_end
ld b, a
ld a, [de]
cp b
jr z, .done_carry
inc hl
jr .loop
.reached_end
2015-12-09 15:25:44 -08:00
call GetBreedmonMovePointer
ld b, NUM_MOVES
.loop2
ld a, [de]
cp [hl]
jr z, .found_eggmove
inc hl
dec b
jr z, .inherit_tmhm
jr .loop2
.found_eggmove
ld a, [wEggMonSpecies]
dec a
ld c, a
ld b, 0
ld hl, EvosAttacksPointers
add hl, bc
add hl, bc
ld a, BANK(EvosAttacksPointers)
call GetFarWord
.loop3
ld a, BANK("Evolutions and Attacks")
call GetFarByte
inc hl
and a
jr nz, .loop3
.loop4
ld a, BANK("Evolutions and Attacks")
call GetFarByte
and a
jr z, .inherit_tmhm
inc hl
ld a, BANK("Evolutions and Attacks")
call GetFarByte
ld b, a
ld a, [de]
cp b
jr z, .done_carry
inc hl
jr .loop4
.inherit_tmhm
ld hl, TMHMMoves
.loop5
ld a, BANK(TMHMMoves)
call GetFarByte
inc hl
and a
jr z, .done
ld b, a
ld a, [de]
cp b
jr nz, .loop5
ld [wPutativeTMHMMove], a
predef CanLearnTMHMMove
ld a, c
and a
jr z, .done
.done_carry
pop bc
scf
ret
.done
pop bc
and a
ret
2018-06-24 07:09:41 -07:00
LoadEggMove:
push de
push bc
ld a, [de]
ld b, a
ld hl, wEggMonMoves
ld c, NUM_MOVES
.loop
ld a, [hli]
and a
jr z, .done
dec c
jr nz, .loop
ld de, wEggMonMoves
ld hl, wEggMonMoves + 1
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
.done
dec hl
ld [hl], b
ld hl, wEggMonMoves
ld de, wEggMonPP
predef FillPP
pop bc
pop de
ret
2018-06-24 07:09:41 -07:00
GetHeritableMoves:
ld hl, wBreedMon2Moves
ld a, [wBreedMon1Species]
cp DITTO
jr z, .ditto1
ld a, [wBreedMon2Species]
cp DITTO
jr z, .ditto2
2015-12-18 17:07:09 -08:00
ld a, [wBreedMotherOrNonDitto]
and a
ret z
ld hl, wBreedMon1Moves
ret
.ditto1
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
push af
ld a, [wBreedMon2Species]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, [wBreedMon2DVs]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs], a
ld a, [wBreedMon2DVs + 1]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs + 1], a
2016-05-11 14:16:03 -07:00
ld a, TEMPMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
predef GetGender
jr c, .inherit_mon2_moves
jr nz, .inherit_mon2_moves
jr .inherit_mon1_moves
.ditto2
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
push af
ld a, [wBreedMon1Species]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, [wBreedMon1DVs]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs], a
ld a, [wBreedMon1DVs + 1]
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs + 1], a
2016-05-11 14:16:03 -07:00
ld a, TEMPMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
predef GetGender
jr c, .inherit_mon1_moves
jr nz, .inherit_mon1_moves
.inherit_mon2_moves
ld hl, wBreedMon2Moves
pop af
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ret
.inherit_mon1_moves
ld hl, wBreedMon1Moves
pop af
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ret
2018-06-24 07:09:41 -07:00
GetBreedmonMovePointer:
ld hl, wBreedMon1Moves
ld a, [wBreedMon1Species]
cp DITTO
ret z
ld a, [wBreedMon2Species]
cp DITTO
jr z, .ditto
2015-12-18 17:07:09 -08:00
ld a, [wBreedMotherOrNonDitto]
and a
ret z
.ditto
ld hl, wBreedMon2Moves
ret
2018-06-24 07:09:41 -07:00
GetEggFrontpic:
; BUG: A hatching Unown egg would not show the right letter (see docs/bugs_and_glitches.md)
push de
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld [wCurSpecies], a
call GetBaseData
2018-01-23 14:39:09 -08:00
ld hl, wBattleMonDVs
predef GetUnownLetter
pop de
predef_jump GetMonFrontpic
2018-06-24 07:09:41 -07:00
GetHatchlingFrontpic:
push de
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld [wCurSpecies], a
call GetBaseData
2018-01-23 14:39:09 -08:00
ld hl, wBattleMonDVs
predef GetUnownLetter
pop de
predef_jump GetAnimatedFrontpic
2018-06-24 07:09:41 -07:00
Hatch_UpdateFrontpicBGMapCenter:
push af
call WaitTop
push hl
push bc
hlcoord 0, 0
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, " "
call ByteFill
pop bc
pop hl
ld a, b
ldh [hBGMapAddress + 1], a
ld a, c
ldh [hGraphicStartTile], a
lb bc, 7, 7
predef PlaceGraphic
pop af
2015-12-10 19:26:31 -08:00
call Hatch_LoadFrontpicPal
2024-02-10 15:16:00 -08:00
call SetDefaultBGPAndOBP
jp WaitBGMap
2023-09-24 06:06:19 -07:00
EggHatch_DoSpriteAnimFrame:
push hl
push de
push bc
2017-12-24 09:47:30 -08:00
callfar PlaySpriteAnimations
call DelayFrame
pop bc
pop de
pop hl
ret
2018-06-24 07:09:41 -07:00
EggHatch_AnimationSequence:
ld a, [wNamedObjectIndex]
ld [wJumptableIndex], a
2018-01-23 14:39:09 -08:00
ld a, [wCurSpecies]
push af
ld de, MUSIC_NONE
call PlayMusic
2017-12-24 09:47:30 -08:00
farcall BlankScreen
call DisableLCD
ld hl, EggHatchGFX
2017-12-28 04:32:33 -08:00
ld de, vTiles0 tile $00
2018-01-22 10:18:23 -08:00
ld bc, 2 tiles
ld a, BANK(EggHatchGFX)
call FarCopyBytes
2017-12-24 09:47:30 -08:00
farcall ClearSpriteAnims
2017-12-28 04:32:33 -08:00
ld de, vTiles2 tile $00
ld a, [wJumptableIndex]
2015-12-09 15:25:44 -08:00
call GetHatchlingFrontpic
2017-12-28 04:32:33 -08:00
ld de, vTiles2 tile $31
ld a, EGG
2015-12-09 15:25:44 -08:00
call GetEggFrontpic
ld de, MUSIC_EVOLUTION
call PlayMusic
call EnableLCD
hlcoord 7, 4
2017-12-28 04:32:33 -08:00
ld b, HIGH(vBGMap0)
2015-12-10 19:26:31 -08:00
ld c, $31 ; Egg tiles start here
ld a, EGG
2015-12-10 19:26:31 -08:00
call Hatch_UpdateFrontpicBGMapCenter
ld c, 80
call DelayFrames
xor a
2018-01-11 12:36:11 -08:00
ld [wFrameCounter], a
ldh a, [hSCX]
ld b, a
.outerloop
2018-01-11 12:36:11 -08:00
ld hl, wFrameCounter
ld a, [hl]
inc [hl]
cp 8
jr nc, .done
ld e, [hl]
.loop
; wobble e times
ld a, 2
ldh [hSCX], a
ld a, -2
2015-12-02 14:59:05 -08:00
ld [wGlobalAnimXOffset], a
2023-09-24 06:06:19 -07:00
call EggHatch_DoSpriteAnimFrame
ld c, 2
call DelayFrames
ld a, -2
ldh [hSCX], a
ld a, 2
2015-12-02 14:59:05 -08:00
ld [wGlobalAnimXOffset], a
2023-09-24 06:06:19 -07:00
call EggHatch_DoSpriteAnimFrame
ld c, 2
call DelayFrames
dec e
jr nz, .loop
ld c, 16
call DelayFrames
call EggHatch_CrackShell
jr .outerloop
.done
ld de, SFX_EGG_HATCH
call PlaySFX
xor a
ldh [hSCX], a
2015-12-02 14:59:05 -08:00
ld [wGlobalAnimXOffset], a
call ClearSprites
2015-12-10 19:26:31 -08:00
call Hatch_InitShellFragments
hlcoord 6, 3
2017-12-28 04:32:33 -08:00
ld b, HIGH(vBGMap0)
2015-12-10 19:26:31 -08:00
ld c, $00 ; Hatchling tiles start here
ld a, [wJumptableIndex]
2015-12-10 19:26:31 -08:00
call Hatch_UpdateFrontpicBGMapCenter
call Hatch_ShellFragmentLoop
call WaitSFX
ld a, [wJumptableIndex]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
hlcoord 6, 3
ld d, $0
ld e, ANIM_MON_HATCH
predef AnimateFrontpic
pop af
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
ret
2018-06-24 07:09:41 -07:00
Hatch_LoadFrontpicPal:
2018-01-23 14:39:09 -08:00
ld [wPlayerHPPal], a
ld b, CGB_EVOLUTION
ld c, $0
jp GetCGBLayout
2018-06-24 07:09:41 -07:00
EggHatch_CrackShell:
2018-01-11 12:36:11 -08:00
ld a, [wFrameCounter]
dec a
and $7
cp $7
ret z
srl a
ret nc
swap a
srl a
2023-07-26 17:50:16 -07:00
add 9 * TILE_WIDTH + 4
ld d, a
2023-07-26 17:50:16 -07:00
ld e, 11 * TILE_WIDTH
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_EGG_CRACK
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $0
ld de, SFX_EGG_CRACK
jp PlaySFX
2018-06-24 07:09:41 -07:00
EggHatchGFX:
INCBIN "gfx/evo/egg_hatch.2bpp"
2018-06-24 07:09:41 -07:00
Hatch_InitShellFragments:
2017-12-24 09:47:30 -08:00
farcall ClearSpriteAnims
ld hl, .SpriteData
.loop
ld a, [hli]
cp -1
jr z, .done
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld c, a
ld a, [hli]
ld b, a
push hl
push bc
2015-12-10 19:26:31 -08:00
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_EGG_HATCH
call InitSpriteAnimStruct
2015-12-10 19:26:31 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], $0
2015-12-10 19:26:31 -08:00
pop de
ld a, e
2015-12-05 12:38:25 -08:00
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
add hl, bc
add [hl]
ld [hl], a
2015-12-10 19:26:31 -08:00
2016-05-13 22:11:01 -07:00
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
add hl, bc
ld [hl], d
2015-12-10 19:26:31 -08:00
pop hl
jr .loop
.done
ld de, SFX_EGG_HATCH
call PlaySFX
2023-09-24 06:06:19 -07:00
call EggHatch_DoSpriteAnimFrame
ret
MACRO shell_fragment
2018-01-02 11:50:04 -08:00
; y tile, y pxl, x tile, x pxl, frameset offset, ???
2023-07-26 17:50:16 -07:00
db (\1 * TILE_WIDTH) % $100 + \2, (\3 * TILE_WIDTH) % $100 + \4, \5 - SPRITE_ANIM_FRAMESET_EGG_HATCH_1, \6
ENDM
2018-06-24 07:09:41 -07:00
.SpriteData:
shell_fragment 10, 4, 9, 0, SPRITE_ANIM_FRAMESET_EGG_HATCH_1, $3c
shell_fragment 11, 4, 9, 0, SPRITE_ANIM_FRAMESET_EGG_HATCH_2, $04
shell_fragment 10, 4, 10, 0, SPRITE_ANIM_FRAMESET_EGG_HATCH_1, $30
shell_fragment 11, 4, 10, 0, SPRITE_ANIM_FRAMESET_EGG_HATCH_2, $10
shell_fragment 10, 4, 11, 0, SPRITE_ANIM_FRAMESET_EGG_HATCH_3, $24
shell_fragment 11, 4, 11, 0, SPRITE_ANIM_FRAMESET_EGG_HATCH_4, $1c
shell_fragment 10, 0, 9, 4, SPRITE_ANIM_FRAMESET_EGG_HATCH_1, $36
shell_fragment 12, 0, 9, 4, SPRITE_ANIM_FRAMESET_EGG_HATCH_2, $0a
shell_fragment 10, 0, 10, 4, SPRITE_ANIM_FRAMESET_EGG_HATCH_3, $2a
shell_fragment 12, 0, 10, 4, SPRITE_ANIM_FRAMESET_EGG_HATCH_4, $16
db -1
2018-06-24 07:09:41 -07:00
Hatch_ShellFragmentLoop:
2015-12-10 19:26:31 -08:00
ld c, 129
.loop
2023-09-24 06:06:19 -07:00
call EggHatch_DoSpriteAnimFrame
dec c
2015-12-10 19:26:31 -08:00
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
DayCareMon1:
ld hl, LeftWithDayCareManText
call PrintText1bpp
ld a, [wBreedMon1Species]
call PlayMonCry
ld a, [wDayCareLady]
2018-01-22 10:18:23 -08:00
bit DAYCARELADY_HAS_MON_F, a
2015-12-10 19:26:31 -08:00
jr z, DayCareMonCursor
2019-11-03 09:48:54 -08:00
call PromptButton
ld hl, wBreedMon2Nickname
2015-12-10 19:26:31 -08:00
call DayCareMonCompatibilityText
jp PrintText1bpp
2018-06-24 07:09:41 -07:00
DayCareMon2:
ld hl, LeftWithDayCareLadyText
call PrintText1bpp
ld a, [wBreedMon2Species]
call PlayMonCry
ld a, [wDayCareMan]
2018-01-22 10:18:23 -08:00
bit DAYCAREMAN_HAS_MON_F, a
2015-12-10 19:26:31 -08:00
jr z, DayCareMonCursor
2019-11-03 09:48:54 -08:00
call PromptButton
ld hl, wBreedMon1Nickname
2015-12-10 19:26:31 -08:00
call DayCareMonCompatibilityText
jp PrintText1bpp
2018-06-24 07:09:41 -07:00
DayCareMonCursor:
jp WaitPressAorB_BlinkCursor
LeftWithDayCareLadyText:
text_far _LeftWithDayCareLadyText
text_end
LeftWithDayCareManText:
text_far _LeftWithDayCareManText
text_end
2018-06-24 07:09:41 -07:00
DayCareMonCompatibilityText:
push bc
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
ld bc, NAME_LENGTH
call CopyBytes
2015-12-09 15:25:44 -08:00
call CheckBreedmonCompatibility
pop bc
ld a, [wBreedingCompatibility]
ld hl, .BreedBrimmingWithEnergyText
2015-12-10 19:26:31 -08:00
cp -1
jr z, .done
ld hl, .BreedNoInterestText
and a
2015-12-10 19:26:31 -08:00
jr z, .done
ld hl, .BreedAppearsToCareForText
cp 230
2015-12-10 19:26:31 -08:00
jr nc, .done
cp 70
ld hl, .BreedFriendlyText
2015-12-10 19:26:31 -08:00
jr nc, .done
ld hl, .BreedShowsInterestText
2015-12-10 19:26:31 -08:00
.done
ret
.BreedBrimmingWithEnergyText:
text_far _BreedBrimmingWithEnergyText
text_end
.BreedNoInterestText:
text_far _BreedNoInterestText
text_end
.BreedAppearsToCareForText:
text_far _BreedAppearsToCareForText
text_end
.BreedFriendlyText:
text_far _BreedFriendlyText
text_end
.BreedShowsInterestText:
text_far _BreedShowsInterestText
text_end
DayCareMonPrintEmptyString: ; unreferenced
2015-12-10 19:26:31 -08:00
ld hl, .string
ret
2018-06-24 07:09:41 -07:00
.string
db "@"