ref: ad5337863ddbb7b821f57a0c8af2c767cc767f19
dir: /engine/events/daycare.asm/
; PrintDayCareText.TextTable indexes const_def const DAYCARETEXT_MAN_INTRO const DAYCARETEXT_MAN_EGG const DAYCARETEXT_LADY_INTRO const DAYCARETEXT_LADY_EGG const DAYCARETEXT_WHICH_ONE const DAYCARETEXT_DEPOSIT const DAYCARETEXT_CANT_BREED_EGG const DAYCARETEXT_LAST_MON const DAYCARETEXT_LAST_ALIVE_MON const DAYCARETEXT_COME_BACK_LATER const DAYCARETEXT_REMOVE_MAIL const DAYCARETEXT_GENIUSES const DAYCARETEXT_ASK_WITHDRAW const DAYCARETEXT_WITHDRAW const DAYCARETEXT_GOT_BACK const DAYCARETEXT_TOO_SOON const DAYCARETEXT_PARTY_FULL const DAYCARETEXT_NOT_ENOUGH_MONEY const DAYCARETEXT_OH_FINE const DAYCARETEXT_COME_AGAIN DayCareMan: ; 166d6 ld hl, wDayCareMan bit DAYCAREMAN_HAS_MON_F, [hl] jr nz, .AskWithdrawMon ld hl, wDayCareMan ld a, DAYCARETEXT_MAN_INTRO call DayCareManIntroText jr c, .cancel call DayCareAskDepositPokemon jr c, .print_text farcall DepositMonWithDayCareMan ld hl, wDayCareMan set DAYCAREMAN_HAS_MON_F, [hl] call DayCare_DepositPokemonText call DayCare_InitBreeding ret .AskWithdrawMon: farcall GetBreedMon1LevelGrowth ld hl, wBreedMon1Nick call GetPriceToRetrieveBreedmon call DayCare_AskWithdrawBreedMon jr c, .print_text farcall RetrieveMonFromDayCareMan call DayCare_GetBackMonForMoney ld hl, wDayCareMan res DAYCAREMAN_HAS_MON_F, [hl] res DAYCAREMAN_MONS_COMPATIBLE_F, [hl] jr .cancel .print_text call PrintDayCareText .cancel ld a, DAYCARETEXT_COME_AGAIN call PrintDayCareText ret ; 1672a DayCareLady: ; 1672a ld hl, wDayCareLady bit DAYCARELADY_HAS_MON_F, [hl] jr nz, .AskWithdrawMon ld hl, wDayCareLady ld a, DAYCARETEXT_LADY_INTRO call DayCareLadyIntroText jr c, .cancel call DayCareAskDepositPokemon jr c, .print_text farcall DepositMonWithDayCareLady ld hl, wDayCareLady set DAYCARELADY_HAS_MON_F, [hl] call DayCare_DepositPokemonText call DayCare_InitBreeding ret .AskWithdrawMon: farcall GetBreedMon2LevelGrowth ld hl, wBreedMon2Nick call GetPriceToRetrieveBreedmon call DayCare_AskWithdrawBreedMon jr c, .print_text farcall RetrieveMonFromDayCareLady call DayCare_GetBackMonForMoney ld hl, wDayCareLady res DAYCARELADY_HAS_MON_F, [hl] ld hl, wDayCareMan res DAYCAREMAN_MONS_COMPATIBLE_F, [hl] jr .cancel .print_text call PrintDayCareText .cancel ld a, DAYCARETEXT_COME_AGAIN call PrintDayCareText ret ; 16781 DayCareLadyIntroText: ; 16781 bit DAYCARELADY_ACTIVE_F, [hl] jr nz, .okay set DAYCARELADY_ACTIVE_F, [hl] inc a .okay call PrintDayCareText call YesNoBox ret ; 1678f DayCareManIntroText: ; 1678f set DAYCAREMAN_ACTIVE_F, [hl] call PrintDayCareText call YesNoBox ret ; 16798 DayCareAskDepositPokemon: ; 16798 ld a, [wPartyCount] cp 2 jr c, .OnlyOneMon ld a, DAYCARETEXT_WHICH_ONE call PrintDayCareText ld b, PARTYMENUACTION_GIVE_MON farcall SelectTradeOrDayCareMon jr c, .Declined ld a, [wCurPartySpecies] cp EGG jr z, .Egg farcall CheckCurPartyMonFainted jr c, .OutOfUsableMons ld hl, wPartyMon1Item ld bc, PARTYMON_STRUCT_LENGTH ld a, [wCurPartyMon] call AddNTimes ld d, [hl] farcall ItemIsMail jr c, .HoldingMail ld hl, wPartyMonNicknames ld a, [wCurPartyMon] call GetNick and a ret .Declined: ld a, DAYCARETEXT_OH_FINE scf ret .Egg: ld a, DAYCARETEXT_CANT_BREED_EGG scf ret .OnlyOneMon: ld a, DAYCARETEXT_LAST_MON scf ret .OutOfUsableMons: ld a, DAYCARETEXT_LAST_ALIVE_MON scf ret .HoldingMail: ld a, DAYCARETEXT_REMOVE_MAIL scf ret ; 167f1 .DummyText: ; 0x167f1 ; text_jump UnknownText_0x1bdaa7 db "@" ; 0x167f6 DayCare_DepositPokemonText: ; 167f6 ld a, DAYCARETEXT_DEPOSIT call PrintDayCareText ld a, [wCurPartySpecies] call PlayMonCry ld a, DAYCARETEXT_COME_BACK_LATER call PrintDayCareText ret ; 16807 DayCare_AskWithdrawBreedMon: ; 16807 ld a, [wStringBuffer2 + 1] and a jr nz, .grew_at_least_one_level ld a, DAYCARETEXT_TOO_SOON call PrintDayCareText call YesNoBox jr c, .refused jr .check_money .grew_at_least_one_level ld a, DAYCARETEXT_GENIUSES call PrintDayCareText call YesNoBox jr c, .refused ld a, DAYCARETEXT_ASK_WITHDRAW call PrintDayCareText call YesNoBox jr c, .refused .check_money ld de, wMoney ld bc, wStringBuffer2 + 2 farcall CompareMoney jr c, .not_enough_money ld a, [wPartyCount] cp PARTY_LENGTH jr nc, .PartyFull and a ret .refused ld a, DAYCARETEXT_OH_FINE scf ret .not_enough_money ld a, DAYCARETEXT_NOT_ENOUGH_MONEY scf ret .PartyFull: ld a, DAYCARETEXT_PARTY_FULL scf ret ; 16850 DayCare_GetBackMonForMoney: ; 16850 ld bc, wStringBuffer2 + 2 ld de, wMoney farcall TakeMoney ld a, DAYCARETEXT_WITHDRAW call PrintDayCareText ld a, [wCurPartySpecies] call PlayMonCry ld a, DAYCARETEXT_GOT_BACK call PrintDayCareText ret ; 1686d GetPriceToRetrieveBreedmon: ; 1686d ld a, b ld [wStringBuffer2], a ld a, d ld [wStringBuffer2 + 1], a ld de, wStringBuffer1 ld bc, NAME_LENGTH call CopyBytes ld hl, 0 ld bc, 100 ld a, [wStringBuffer2 + 1] call AddNTimes ld de, 100 add hl, de xor a ld [wStringBuffer2 + 2], a ld a, h ld [wStringBuffer2 + 3], a ld a, l ld [wStringBuffer2 + 4], a ret ; 1689b PrintDayCareText: ; 1689b ld e, a ld d, 0 ld hl, .TextTable add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a call PrintText ret ; 168aa .TextTable: ; 168aa ; entries correspond to DAYCARETEXT_* constants dw .DayCareManIntro ; 00 dw .DayCareManOddEgg ; 01 dw .DayCareLadyIntro ; 02 dw .DayCareLadyOddEgg ; 03 dw .WhichOne ; 04 dw .OkayIllRaiseYourMon ; 05 dw .CantAcceptEgg ; 06 dw .JustOneMon ; 07 dw .LastHealthyMon ; 08 dw .ComeBackForItLater ; 09 dw .RemoveMail ; 0a dw .AreWeGeniusesOrWhat ; 0b dw .AskRetrieveMon ; 0c dw .PerfectHeresYourMon ; 0d dw .GotBackMon ; 0e dw .ImmediatelyWithdrawMon ; 0f dw .PartyFull ; 10 dw .NotEnoughMoney ; 11 dw .OhFineThen ; 12 dw .ComeAgain ; 13 ; 168d2 .DayCareManIntro: ; 0x168d2 ; I'm the DAY-CARE MAN. Want me to raise a #MON? text_jump UnknownText_0x1bdaa9 db "@" ; 0x168d7 .DayCareManOddEgg: ; 0x168d7 ; I'm the DAY-CARE MAN. Do you know about EGGS? I was raising #MON with my wife, you see. We were shocked to find an EGG! How incredible is that? So, want me to raise a #MON? text_jump UnknownText_0x1bdad8 db "@" ; 0x168dc .DayCareLadyIntro: ; 0x168dc ; I'm the DAY-CARE LADY. Should I raise a #MON for you? text_jump UnknownText_0x1bdb85 db "@" ; 0x168e1 .DayCareLadyOddEgg: ; 0x168e1 ; I'm the DAY-CARE LADY. Do you know about EGGS? My husband and I were raising some #MON, you see. We were shocked to find an EGG! How incredible could that be? Should I raise a #MON for you? text_jump UnknownText_0x1bdbbb db "@" ; 0x168e6 .WhichOne: ; 0x168e6 ; What should I raise for you? text_jump UnknownText_0x1bdc79 db "@" ; 0x168eb .JustOneMon: ; 0x168eb ; Oh? But you have just one #MON. text_jump UnknownText_0x1bdc97 db "@" ; 0x168f0 .CantAcceptEgg: ; 0x168f0 ; Sorry, but I can't accept an EGG. text_jump UnknownText_0x1bdcb8 db "@" ; 0x168f5 .RemoveMail: ; 0x168f5 ; Remove MAIL before you come see me. text_jump UnknownText_0x1bdcda db "@" ; 0x168fa .LastHealthyMon: ; 0x168fa ; If you give me that, what will you battle with? text_jump UnknownText_0x1bdcff db "@" ; 0x168ff .OkayIllRaiseYourMon: ; 0x168ff ; OK. I'll raise your @ . text_jump UnknownText_0x1bdd30 db "@" ; 0x16904 .ComeBackForItLater: ; 0x16904 ; Come back for it later. text_jump UnknownText_0x1bdd4b db "@" ; 0x16909 .AreWeGeniusesOrWhat: ; 0x16909 ; Are we geniuses or what? Want to see your @ ? text_jump UnknownText_0x1bdd64 db "@" ; 0x1690e .AskRetrieveMon: ; 0x1690e ; Your @ has grown a lot. By level, it's grown by @ . If you want your #MON back, it will cost ¥@ . text_jump UnknownText_0x1bdd96 db "@" ; 0x16913 .PerfectHeresYourMon: ; 0x16913 ; Perfect! Here's your #MON. text_jump UnknownText_0x1bde04 db "@" ; 0x16918 .GotBackMon: ; 0x16918 ; got back @ . text_jump UnknownText_0x1bde1f db "@" ; 0x1691d .ImmediatelyWithdrawMon: ; 0x1691d ; Huh? Back already? Your @ needs a little more time with us. If you want your #MON back, it will cost ¥100. text_jump UnknownText_0x1bde32 db "@" ; 0x16922 .PartyFull: ; 0x16922 ; You have no room for it. text_jump UnknownText_0x1bdea2 db "@" ; 0x16927 .NotEnoughMoney: ; 0x16927 ; You don't have enough money. text_jump UnknownText_0x1bdebc db "@" ; 0x1692c .OhFineThen: ; 0x1692c ; Oh, fine then. text_jump UnknownText_0x1bded9 db "@" ; 0x16931 .ComeAgain: ; 0x16931 ; Come again. text_jump UnknownText_0x1bdee9 db "@" ; 0x16936 DayCareManOutside: ; 16936 ld hl, wDayCareMan bit DAYCAREMAN_HAS_EGG_F, [hl] jr nz, .AskGiveEgg ld hl, .NotYet call PrintText ret .NotYet: ; 0x16944 ; Not yet… text_jump UnknownText_0x1bdef6 db "@" ; 0x16949 .AskGiveEgg: ; 16949 ld hl, .IntroText call PrintText call YesNoBox jr c, .Declined ld a, [wPartyCount] cp PARTY_LENGTH jr nc, .PartyFull call DayCare_GiveEgg ld hl, wDayCareMan res DAYCAREMAN_HAS_EGG_F, [hl] call DayCare_InitBreeding ld hl, .GotEggText call PrintText ld de, SFX_GET_EGG_FROM_DAY_CARE_LADY call PlaySFX ld c, 120 call DelayFrames ld hl, .TakeGoodCareOfItText jr .Load0 .Declined: ld hl, .IllKeepItThanksText .Load0: call PrintText xor a ; FALSE ld [wScriptVar], a ret .PartyFull: ld hl, .PartyFullText call PrintText ld a, TRUE ld [wScriptVar], a ret ; 16993 .IntroText: ; 0x16993 ; Ah, it's you! We were raising your #MON, and my goodness, were we surprised! Your #MON had an EGG! We don't know how it got there, but your #MON had it. You want it? text_jump UnknownText_0x1bdf00 db "@" ; 0x16998 .GotEggText: ; 0x16998 ; received the EGG! text_jump UnknownText_0x1bdfa5 db "@" ; 0x1699d .TakeGoodCareOfItText: ; 0x1699d ; Take good care of it. text_jump UnknownText_0x1bdfba db "@" ; 0x169a2 .IllKeepItThanksText: ; 0x169a2 ; Well then, I'll keep it. Thanks! text_jump UnknownText_0x1bdfd1 db "@" ; 0x169a7 .PartyFullText: ; 0x169a7 ; You have no room in your party. Come back later. text_jump UnknownText_0x1bdff2 db "@" ; 0x169ac DayCare_GiveEgg: ; 169ac ld a, [wEggMonLevel] ld [wCurPartyLevel], a ld hl, wPartyCount ld a, [hl] cp PARTY_LENGTH jr nc, .PartyFull inc a ld [hl], a ld c, a ld b, 0 add hl, bc ld a, EGG ld [hli], a ld a, [wEggMonSpecies] ld [wCurSpecies], a ld [wCurPartySpecies], a ld a, -1 ld [hl], a ld hl, wPartyMonNicknames ld bc, MON_NAME_LENGTH call DayCare_GetCurrentPartyMember ld hl, wEggNick call CopyBytes ld hl, wPartyMonOT ld bc, NAME_LENGTH call DayCare_GetCurrentPartyMember ld hl, wEggOT call CopyBytes ld hl, wPartyMon1 ld bc, PARTYMON_STRUCT_LENGTH call DayCare_GetCurrentPartyMember ld hl, wEggMon ld bc, wEggMonEnd - wEggMon call CopyBytes call GetBaseData ld a, [wPartyCount] dec a ld hl, wPartyMon1 ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld b, h ld c, l ld hl, MON_ID + 1 add hl, bc push hl ld hl, MON_MAXHP add hl, bc ld d, h ld e, l pop hl push bc ld b, FALSE predef CalcMonStats pop bc ld hl, MON_HP add hl, bc xor a ld [hli], a ld [hl], a and a ret .PartyFull: scf ret ; 16a31 DayCare_GetCurrentPartyMember: ; 16a31 ld a, [wPartyCount] dec a call AddNTimes ld d, h ld e, l ret ; 16a3b DayCare_InitBreeding: ; 16a3b ld a, [wDayCareLady] bit DAYCARELADY_HAS_MON_F, a ret z ld a, [wDayCareMan] bit DAYCAREMAN_HAS_MON_F, a ret z callfar CheckBreedmonCompatibility ld a, [wd265] and a ret z inc a ret z ld hl, wDayCareMan set DAYCAREMAN_MONS_COMPATIBLE_F, [hl] .loop call Random cp 150 jr c, .loop ld [wStepsToEgg], a jp .UselessJump ; 16a66 .UselessJump: ; 16a66 xor a ld hl, wEggMon ld bc, wEggMonEnd - wEggMon call ByteFill ld hl, wEggNick ld bc, MON_NAME_LENGTH call ByteFill ld hl, wEggOT ld bc, NAME_LENGTH call ByteFill ld a, [wBreedMon1DVs] ld [wTempMonDVs], a ld a, [wBreedMon1DVs + 1] ld [wTempMonDVs + 1], a ld a, [wBreedMon1Species] ld [wCurPartySpecies], a ld a, $3 ld [wMonType], a ld a, [wBreedMon1Species] cp DITTO ld a, $1 jr z, .LoadWhichBreedmonIsTheMother ld a, [wBreedMon2Species] cp DITTO ld a, $0 jr z, .LoadWhichBreedmonIsTheMother farcall GetGender ld a, $0 jr z, .LoadWhichBreedmonIsTheMother inc a .LoadWhichBreedmonIsTheMother: ld [wBreedMotherOrNonDitto], a and a ld a, [wBreedMon1Species] jr z, .GotMother ld a, [wBreedMon2Species] .GotMother: ld [wCurPartySpecies], a callfar GetPreEvolution callfar GetPreEvolution ld a, EGG_LEVEL ld [wCurPartyLevel], a ; Nidoran♀ can give birth to either gender of Nidoran ld a, [wCurPartySpecies] cp NIDORAN_F jr nz, .GotEggSpecies call Random cp 50 percent + 1 ld a, NIDORAN_F jr c, .GotEggSpecies ld a, NIDORAN_M .GotEggSpecies: ld [wCurPartySpecies], a ld [wCurSpecies], a ld [wEggMonSpecies], a call GetBaseData ld hl, wEggNick ld de, .String_EGG call CopyName2 ld hl, wPlayerName ld de, wEggOT ld bc, NAME_LENGTH call CopyBytes xor a ld [wEggMonItem], a ld de, wEggMonMoves xor a ld [wBuffer1], a predef FillMoves farcall InitEggMoves ld hl, wEggMonID ld a, [wPlayerID] ld [hli], a ld a, [wPlayerID + 1] ld [hl], a ld a, [wCurPartyLevel] ld d, a callfar CalcExpAtLevel ld hl, wEggMonExp ld a, [hMultiplicand] ld [hli], a ld a, [hMultiplicand + 1] ld [hli], a ld a, [hMultiplicand + 2] ld [hl], a xor a ld b, wEggMonDVs - wEggMonStatExp ld hl, wEggMonStatExp .loop2 ld [hli], a dec b jr nz, .loop2 ld hl, wEggMonDVs call Random ld [hli], a ld [wTempMonDVs], a call Random ld [hld], a ld [wTempMonDVs + 1], a ld de, wBreedMon1DVs ld a, [wBreedMon1Species] cp DITTO jr z, .GotDVs ld de, wBreedMon2DVs ld a, [wBreedMon2Species] cp DITTO jr z, .GotDVs ld a, TEMPMON ld [wMonType], a push hl farcall GetGender pop hl ld de, wBreedMon1DVs ld bc, wBreedMon2DVs jr c, .SkipDVs jr z, .ParentCheck2 ld a, [wBreedMotherOrNonDitto] and a jr z, .GotDVs ld d, b ld e, c jr .GotDVs .ParentCheck2: ld a, [wBreedMotherOrNonDitto] and a jr nz, .GotDVs ld d, b ld e, c .GotDVs: ld a, [de] inc de and $f ld b, a ld a, [hl] and $f0 add b ld [hli], a ld a, [de] and $7 ld b, a ld a, [hl] and $f8 add b ld [hl], a .SkipDVs: ld hl, wStringBuffer1 ld de, wMonOrItemNameBuffer ld bc, NAME_LENGTH call CopyBytes ld hl, wEggMonMoves ld de, wEggMonPP predef FillPP ld hl, wMonOrItemNameBuffer ld de, wStringBuffer1 ld bc, NAME_LENGTH call CopyBytes ld a, [wBaseEggSteps] ld hl, wEggMonHappiness ld [hli], a xor a ld [hli], a ld [hli], a ld [hl], a ld a, [wCurPartyLevel] ld [wEggMonLevel], a ret ; 16be0 .String_EGG: ; 16be0 db "EGG@" ; 16be4