Document day_care.inc and related

This commit is contained in:
GriffinR
2019-09-25 14:48:22 -04:00
committed by huderlem
parent 1ae352bcb6
commit 801ca37f04
13 changed files with 350 additions and 318 deletions
+7 -5
View File
@@ -1,33 +1,35 @@
#include "constants/global.h" #include "constants/global.h"
#include "constants/battle.h"
#include "constants/battle_frontier.h" #include "constants/battle_frontier.h"
#include "constants/battle_setup.h" #include "constants/battle_setup.h"
#include "constants/berry.h" #include "constants/berry.h"
#include "constants/contest.h" #include "constants/contest.h"
#include "constants/daycare.h"
#include "constants/decorations.h"
#include "constants/easy_chat.h" #include "constants/easy_chat.h"
#include "constants/event_objects.h" #include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h" #include "constants/event_object_movement_constants.h"
#include "constants/field_effects.h" #include "constants/field_effects.h"
#include "constants/field_specials.h" #include "constants/field_specials.h"
#include "constants/flags.h" #include "constants/flags.h"
#include "constants/decorations.h" #include "constants/game_stat.h"
#include "constants/item.h" #include "constants/item.h"
#include "constants/items.h" #include "constants/items.h"
#include "constants/heal_locations.h" #include "constants/heal_locations.h"
#include "constants/layouts.h" #include "constants/layouts.h"
#include "constants/lilycove_lady.h"
#include "constants/map_scripts.h" #include "constants/map_scripts.h"
#include "constants/maps.h" #include "constants/maps.h"
#include "constants/metatile_labels.h"
#include "constants/moves.h" #include "constants/moves.h"
#include "constants/pokemon.h" #include "constants/pokemon.h"
#include "constants/script_menu.h" #include "constants/script_menu.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/species.h" #include "constants/species.h"
#include "constants/trainer_hill.h"
#include "constants/trainers.h" #include "constants/trainers.h"
#include "constants/vars.h" #include "constants/vars.h"
#include "constants/weather.h" #include "constants/weather.h"
#include "constants/trainer_hill.h"
#include "constants/lilycove_lady.h"
#include "constants/battle.h"
#include "constants/metatile_labels.h"
.include "asm/macros.inc" .include "asm/macros.inc"
.include "asm/macros/event.inc" .include "asm/macros/event.inc"
.include "constants/constants.inc" .include "constants/constants.inc"
+1 -1
View File
@@ -61,7 +61,7 @@
"movement_range_y": 0, "movement_range_y": 0,
"trainer_type": "0", "trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0", "trainer_sight_or_berry_tree_id": "0",
"script": "Route117_EventScript_291C18", "script": "Route117_EventScript_DaycareMan",
"flag": "0" "flag": "0"
}, },
{ {
+1 -1
View File
@@ -24,7 +24,7 @@
"movement_range_y": 0, "movement_range_y": 0,
"trainer_type": "0", "trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0", "trainer_sight_or_berry_tree_id": "0",
"script": "Route117_PokemonDayCare_EventScript_291D11", "script": "Route117_PokemonDayCare_EventScript_DaycareWoman",
"flag": "0" "flag": "0"
} }
], ],
+155 -152
View File
@@ -1,245 +1,245 @@
Route117_EventScript_291C18:: @ 8291C18 Route117_EventScript_DaycareMan:: @ 8291C18
lock lock
faceplayer faceplayer
special GetDaycareMonNicknames special GetDaycareMonNicknames
specialvar VAR_RESULT, GetDaycareState specialvar VAR_RESULT, GetDaycareState
compare VAR_RESULT, 1 compare VAR_RESULT, DAYCARE_EGG_WAITING
goto_if_eq Route117_EventScript_291C4D goto_if_eq Route117_EventScript_DaycareEggWaiting
compare VAR_RESULT, 2 compare VAR_RESULT, DAYCARE_ONE_MON
goto_if_eq Route117_EventScript_291CD1 goto_if_eq Route117_EventScript_CheckOnOneMon
compare VAR_RESULT, 3 compare VAR_RESULT, DAYCARE_TWO_MONS
goto_if_eq Route117_EventScript_291CE8 goto_if_eq Route117_EventScript_CheckOnTwoMons
msgbox Route117_Text_291FCF, MSGBOX_DEFAULT msgbox Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon, MSGBOX_DEFAULT
release release
end end
Route117_EventScript_291C4D:: @ 8291C4D Route117_EventScript_DaycareEggWaiting:: @ 8291C4D
msgbox Route117_Text_29205D, MSGBOX_YESNO msgbox Route117_Text_DoYouWantEgg, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_EventScript_291C83 goto_if_eq Route117_EventScript_DaycareAcceptEgg
msgbox Route117_Text_2922C6, MSGBOX_YESNO msgbox Route117_Text_IWillKeepDoYouWantIt, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_EventScript_291C83 goto_if_eq Route117_EventScript_DaycareAcceptEgg
msgbox Route117_Text_292149, MSGBOX_DEFAULT msgbox Route117_Text_IllKeepIt, MSGBOX_DEFAULT
clearflag FLAG_PENDING_DAYCARE_EGG clearflag FLAG_PENDING_DAYCARE_EGG
special RejectEggFromDayCare special RejectEggFromDayCare
release release
end end
Route117_EventScript_291C83:: @ 8291C83 Route117_EventScript_DaycareAcceptEgg:: @ 8291C83
specialvar VAR_RESULT, CalculatePlayerPartyCount specialvar VAR_RESULT, CalculatePlayerPartyCount
compare VAR_RESULT, 6 compare VAR_RESULT, PARTY_SIZE
goto_if_ne Route117_EventScript_291C9D goto_if_ne Route117_EventScript_DaycareReceiveEgg
msgbox Route117_Text_29216A, MSGBOX_DEFAULT msgbox Route117_Text_YouHaveNoRoomForIt, MSGBOX_DEFAULT
release release
end end
Route117_EventScript_291C9D:: @ 8291C9D Route117_EventScript_DaycareReceiveEgg:: @ 8291C9D
message Route117_Text_2921A4 message Route117_Text_ReceivedEgg
playfanfare MUS_FANFA1 playfanfare MUS_FANFA1
waitfanfare waitfanfare
waitbuttonpress waitbuttonpress
msgbox Route117_Text_2921CF, MSGBOX_DEFAULT msgbox Route117_Text_TakeGoodCareOfIt, MSGBOX_DEFAULT
special GiveEggFromDaycare special GiveEggFromDaycare
clearflag FLAG_PENDING_DAYCARE_EGG clearflag FLAG_PENDING_DAYCARE_EGG
release release
end end
Route117_EventScript_291CB7:: @ 8291CB7 Route117_EventScript_CheckMonReceivedMail:: @ 8291CB7
specialvar VAR_RESULT, sub_8071614 specialvar VAR_RESULT, CheckDaycareMonReceivedMail
compare VAR_RESULT, 1 compare VAR_RESULT, 1
call_if_eq Route117_EventScript_291CC8 call_if_eq Route117_EventScript_MonReceivedMail
return return
Route117_EventScript_291CC8:: @ 8291CC8 Route117_EventScript_MonReceivedMail:: @ 8291CC8
msgbox Route117_Text_2921E5, MSGBOX_DEFAULT msgbox Route117_Text_FriendlyWithOtherTrainersMon, MSGBOX_DEFAULT
return return
Route117_EventScript_291CD1:: @ 8291CD1 Route117_EventScript_CheckOnOneMon:: @ 8291CD1
special GetDaycareMonNicknames special GetDaycareMonNicknames
msgbox Route117_Text_292114, MSGBOX_DEFAULT msgbox Route117_Text_YourMonIsDoingFine, MSGBOX_DEFAULT
setvar VAR_0x8004, 0 setvar VAR_0x8004, EGG_MOTHER
call Route117_EventScript_291CB7 call Route117_EventScript_CheckMonReceivedMail
release release
end end
Route117_EventScript_291CE8:: @ 8291CE8 Route117_EventScript_CheckOnTwoMons:: @ 8291CE8
special GetDaycareMonNicknames special GetDaycareMonNicknames
msgbox Route117_Text_292299, MSGBOX_DEFAULT msgbox Route117_Text_YourMonsAreDoingFine, MSGBOX_DEFAULT
special SetDaycareCompatibilityString special SetDaycareCompatibilityString
special ShowFieldMessageStringVar4 special ShowFieldMessageStringVar4
waitmessage waitmessage
waitbuttonpress waitbuttonpress
setvar VAR_0x8004, 0 setvar VAR_0x8004, EGG_MOTHER
call Route117_EventScript_291CB7 call Route117_EventScript_CheckMonReceivedMail
setvar VAR_0x8004, 1 setvar VAR_0x8004, EGG_FATHER
call Route117_EventScript_291CB7 call Route117_EventScript_CheckMonReceivedMail
release release
end end
Route117_PokemonDayCare_EventScript_291D11:: @ 8291D11 Route117_PokemonDayCare_EventScript_DaycareWoman:: @ 8291D11
lock lock
faceplayer faceplayer
specialvar VAR_RESULT, GetDaycareState specialvar VAR_RESULT, GetDaycareState
compare VAR_RESULT, DAYCARE_EGG_WAITING
goto_if_eq Route117_PokemonDayCare_EventScript_EggWaiting
compare VAR_RESULT, DAYCARE_ONE_MON
goto_if_eq Route117_PokemonDayCare_EventScript_OneMonInDaycare
compare VAR_RESULT, DAYCARE_TWO_MONS
goto_if_eq Route117_PokemonDayCare_EventScript_TwoMonsInDaycare
msgbox Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291E0B goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise
compare VAR_RESULT, 2
goto_if_eq Route117_PokemonDayCare_EventScript_291E2F
compare VAR_RESULT, 3
goto_if_eq Route117_PokemonDayCare_EventScript_291F5C
msgbox Route117_PokemonDayCare_Text_2922F4, MSGBOX_YESNO
compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291D56
msgbox Route117_PokemonDayCare_Text_292416, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_292416, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291D56:: @ 8291D56 Route117_PokemonDayCare_EventScript_GiveMonToRaise:: @ 8291D56
specialvar VAR_RESULT, CountPartyNonEggMons specialvar VAR_RESULT, CountPartyNonEggMons
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291DED goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneMon
specialvar VAR_RESULT, sub_80722E0 specialvar VAR_RESULT, CountPartyAliveNonEggMons
compare VAR_RESULT, 2 compare VAR_RESULT, 2
goto_if_eq Route117_PokemonDayCare_EventScript_291E01 goto_if_eq Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons
msgbox Route117_PokemonDayCare_Text_292349, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_WhichMonShouldWeRaise, MSGBOX_DEFAULT
fadescreen 1 fadescreen 1
special ChooseSendDaycareMon special ChooseSendDaycareMon
waitstate waitstate
compare VAR_0x8004, 255 compare VAR_0x8004, 255
goto_if_eq Route117_PokemonDayCare_EventScript_291DCA goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain
specialvar VAR_RESULT, CountPartyAliveNonEggMons_IgnoreVar0x8004Slot specialvar VAR_RESULT, CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
compare VAR_RESULT, 0 compare VAR_RESULT, 0
goto_if_eq Route117_PokemonDayCare_EventScript_291DF7 goto_if_eq Route117_PokemonDayCare_EventScript_OnlyOneAliveMon
specialvar VAR_0x8005, GetSelectedMonNickAndSpecies specialvar VAR_0x8005, GetSelectedMonNickAndSpecies
waitse waitse
playmoncry VAR_0x8005, 0 playmoncry VAR_0x8005, 0
msgbox Route117_PokemonDayCare_Text_292370, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT
waitmoncry waitmoncry
special StoreSelectedPokemonInDaycare special StoreSelectedPokemonInDaycare
incrementgamestat 47 incrementgamestat GAME_STAT_USED_DAYCARE
specialvar VAR_RESULT, GetDaycareState specialvar VAR_RESULT, GetDaycareState
compare VAR_RESULT, 2 compare VAR_RESULT, DAYCARE_ONE_MON
goto_if_eq Route117_PokemonDayCare_EventScript_291DD4 goto_if_eq Route117_PokemonDayCare_EventScript_CanRaiseOneMore
release release
end end
Route117_PokemonDayCare_EventScript_291DCA:: @ 8291DCA Route117_PokemonDayCare_EventScript_ComeAgain:: @ 8291DCA
msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291DD4:: @ 8291DD4 Route117_PokemonDayCare_EventScript_CanRaiseOneMore:: @ 8291DD4
msgbox Route117_PokemonDayCare_Text_2923AF, MSGBOX_YESNO msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291D56 goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise
goto Route117_PokemonDayCare_EventScript_291DCA goto Route117_PokemonDayCare_EventScript_ComeAgain
end end
Route117_PokemonDayCare_EventScript_291DED:: @ 8291DED Route117_PokemonDayCare_EventScript_OnlyOneMon:: @ 8291DED
msgbox Route117_PokemonDayCare_Text_2925BB, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_YouHaveJustOneMon, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291DF7:: @ 8291DF7 Route117_PokemonDayCare_EventScript_OnlyOneAliveMon:: @ 8291DF7
msgbox Route117_PokemonDayCare_Text_292617, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_WhatWillYouBattleWith, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291E01:: @ 8291E01 Route117_PokemonDayCare_EventScript_OnlyTwoAliveMons:: @ 8291E01
msgbox Route117_PokemonDayCare_Text_29266D, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_YoullBeLeftWithJustOne, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291E0B:: @ 8291E0B Route117_PokemonDayCare_EventScript_EggWaiting:: @ 8291E0B
msgbox Route117_PokemonDayCare_Text_2923F6, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_HusbandWasLookingForYou, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291E15:: @ 8291E15 Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels:: @ 8291E15
msgbox Route117_PokemonDayCare_Text_2924CC, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_YourMonHasGrownXLevels, MSGBOX_DEFAULT
return return
Route117_PokemonDayCare_EventScript_291E1E:: @ 8291E1E Route117_PokemonDayCare_EventScript_DisplayLevelsGained:: @ 8291E1E
specialvar VAR_RESULT, GetNumLevelsGainedFromDaycare specialvar VAR_RESULT, GetNumLevelsGainedFromDaycare
compare VAR_RESULT, 0 compare VAR_RESULT, 0
call_if_ne Route117_PokemonDayCare_EventScript_291E15 call_if_ne Route117_PokemonDayCare_EventScript_YourMonHasGrownXLevels
return return
Route117_PokemonDayCare_EventScript_291E2F:: @ 8291E2F Route117_PokemonDayCare_EventScript_OneMonInDaycare:: @ 8291E2F
msgbox Route117_PokemonDayCare_Text_292488, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_GoodToSeeYou, MSGBOX_DEFAULT
setvar VAR_0x8004, 0 setvar VAR_0x8004, 0
call Route117_PokemonDayCare_EventScript_291E1E call Route117_PokemonDayCare_EventScript_DisplayLevelsGained
msgbox Route117_PokemonDayCare_Text_2923AF, MSGBOX_YESNO msgbox Route117_PokemonDayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291D56 goto_if_eq Route117_PokemonDayCare_EventScript_GiveMonToRaise
msgbox Route117_PokemonDayCare_Text_2925F6, MSGBOX_YESNO msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291E6D goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon
goto Route117_PokemonDayCare_EventScript_291DCA goto Route117_PokemonDayCare_EventScript_ComeAgain
end end
Route117_PokemonDayCare_EventScript_291E6D:: @ 8291E6D Route117_PokemonDayCare_EventScript_TryRetrieveMon:: @ 8291E6D
specialvar VAR_RESULT, CalculatePlayerPartyCount specialvar VAR_RESULT, CalculatePlayerPartyCount
compare VAR_RESULT, 6 compare VAR_RESULT, PARTY_SIZE
goto_if_eq Route117_PokemonDayCare_EventScript_291F3D goto_if_eq Route117_PokemonDayCare_EventScript_NoRoom
specialvar VAR_RESULT, GetDaycareState specialvar VAR_RESULT, GetDaycareState
setvar VAR_0x8004, 0 setvar VAR_0x8004, 0
compare VAR_RESULT, 2 compare VAR_RESULT, DAYCARE_ONE_MON
goto_if_eq Route117_PokemonDayCare_EventScript_291EAC goto_if_eq Route117_PokemonDayCare_EventScript_CostPrompt
special ShowDaycareLevelMenu special ShowDaycareLevelMenu
waitstate waitstate
copyvar VAR_0x8004, VAR_RESULT copyvar VAR_0x8004, VAR_RESULT
compare VAR_RESULT, 2 compare VAR_RESULT, DAYCARE_EXITED_LEVEL_MENU
goto_if_eq Route117_PokemonDayCare_EventScript_291DCA goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain
goto Route117_PokemonDayCare_EventScript_291EAC goto Route117_PokemonDayCare_EventScript_CostPrompt
end end
Route117_PokemonDayCare_EventScript_291EAC:: @ 8291EAC Route117_PokemonDayCare_EventScript_CostPrompt:: @ 8291EAC
special GetDaycareCost special GetDaycareCost
msgbox Route117_PokemonDayCare_Text_292549, MSGBOX_YESNO msgbox Route117_PokemonDayCare_Text_ItWillCostX, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291EC8 goto_if_eq Route117_PokemonDayCare_EventScript_CheckEnoughMoney
goto Route117_PokemonDayCare_EventScript_291DCA goto Route117_PokemonDayCare_EventScript_ComeAgain
end end
Route117_PokemonDayCare_EventScript_291EC8:: @ 8291EC8 Route117_PokemonDayCare_EventScript_CheckEnoughMoney:: @ 8291EC8
specialvar VAR_RESULT, IsEnoughForCostInVar0x8005 specialvar VAR_RESULT, IsEnoughForCostInVar0x8005
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291EE2 goto_if_eq Route117_PokemonDayCare_EventScript_RetrieveMon
msgbox Route117_PokemonDayCare_Text_292432, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_NotEnoughMoney, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_EventScript_291EE2:: @ 8291EE2 Route117_PokemonDayCare_EventScript_RetrieveMon:: @ 8291EE2
applymovement 1, Route117_PokemonDayCare_Movement_291F47 applymovement 1, Route117_PokemonDayCare_Movement_RetrieveDaycareMon
waitmovement 0 waitmovement 0
specialvar VAR_RESULT, TakePokemonFromDaycare specialvar VAR_RESULT, TakePokemonFromDaycare
special SubtractMoneyFromVar0x8005 special SubtractMoneyFromVar0x8005
playse SE_REGI playse SE_REGI
msgbox Route117_PokemonDayCare_Text_292575, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT
waitse waitse
playmoncry VAR_RESULT, 0 playmoncry VAR_RESULT, 0
msgbox Route117_PokemonDayCare_Text_292593, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_TookBackMon, MSGBOX_DEFAULT
waitmoncry waitmoncry
specialvar VAR_RESULT, GetDaycareState specialvar VAR_RESULT, GetDaycareState
compare VAR_RESULT, 2 compare VAR_RESULT, DAYCARE_ONE_MON
goto_if_eq Route117_PokemonDayCare_EventScript_291F24 goto_if_eq Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon
goto Route117_PokemonDayCare_EventScript_291DCA goto Route117_PokemonDayCare_EventScript_ComeAgain
end end
Route117_PokemonDayCare_EventScript_291F24:: @ 8291F24 Route117_PokemonDayCare_EventScript_AskRetrieveOtherMon:: @ 8291F24
msgbox Route117_PokemonDayCare_Text_29244F, MSGBOX_YESNO msgbox Route117_PokemonDayCare_Text_TakeOtherOneBackToo, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291E6D goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon
goto Route117_PokemonDayCare_EventScript_291DCA goto Route117_PokemonDayCare_EventScript_ComeAgain
end end
Route117_PokemonDayCare_EventScript_291F3D:: @ 8291F3D Route117_PokemonDayCare_EventScript_NoRoom:: @ 8291F3D
msgbox Route117_PokemonDayCare_Text_2924EF, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_YourTeamIsFull, MSGBOX_DEFAULT
release release
end end
Route117_PokemonDayCare_Movement_291F47: @ 8291F47 Route117_PokemonDayCare_Movement_RetrieveDaycareMon: @ 8291F47
delay_16 delay_16
delay_16 delay_16
face_left face_left
@@ -261,50 +261,52 @@ Route117_PokemonDayCare_Movement_291F47: @ 8291F47
walk_slow_down walk_slow_down
step_end step_end
@ Unused. Possibly a commented script, or a typo end added to the above Movement script
Route117_PokemonDayCare_EventScript_291F5B:: @ 8291F5B Route117_PokemonDayCare_EventScript_291F5B:: @ 8291F5B
end end
Route117_PokemonDayCare_EventScript_291F5C:: @ 8291F5C Route117_PokemonDayCare_EventScript_TwoMonsInDaycare:: @ 8291F5C
msgbox Route117_PokemonDayCare_Text_292488, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_GoodToSeeYou, MSGBOX_DEFAULT
setvar VAR_0x8004, 0 setvar VAR_0x8004, 0
call Route117_PokemonDayCare_EventScript_291E1E call Route117_PokemonDayCare_EventScript_DisplayLevelsGained
setvar VAR_0x8004, 1 setvar VAR_0x8004, 1
call Route117_PokemonDayCare_EventScript_291E1E call Route117_PokemonDayCare_EventScript_DisplayLevelsGained
msgbox Route117_PokemonDayCare_Text_2925F6, MSGBOX_YESNO msgbox Route117_PokemonDayCare_Text_TakeYourMonBack, MSGBOX_YESNO
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq Route117_PokemonDayCare_EventScript_291E6D goto_if_eq Route117_PokemonDayCare_EventScript_TryRetrieveMon
msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT
release release
end end
@ Unused
Route117_PokemonDayCare_EventScript_291F95:: @ 8291F95 Route117_PokemonDayCare_EventScript_291F95:: @ 8291F95
special ShowDaycareLevelMenu special ShowDaycareLevelMenu
waitstate waitstate
compare VAR_RESULT, 2 compare VAR_RESULT, 2
goto_if_eq Route117_PokemonDayCare_EventScript_291DCA goto_if_eq Route117_PokemonDayCare_EventScript_ComeAgain
copyvar VAR_0x8004, VAR_RESULT copyvar VAR_0x8004, VAR_RESULT
specialvar VAR_RESULT, TakePokemonFromDaycare specialvar VAR_RESULT, TakePokemonFromDaycare
msgbox Route117_PokemonDayCare_Text_292575, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_HeresYourMon, MSGBOX_DEFAULT
msgbox Route117_PokemonDayCare_Text_292476, MSGBOX_DEFAULT msgbox Route117_PokemonDayCare_Text_ComeAgain, MSGBOX_DEFAULT
release release
end end
EventScript_EggHatch:: @ 8291FC0 EventScript_EggHatch:: @ 8291FC0
lockall lockall
msgbox Text_292668, MSGBOX_DEFAULT msgbox Text_EggHatchHuh, MSGBOX_DEFAULT
special EggHatch special EggHatch
waitstate waitstate
releaseall releaseall
end end
Route117_Text_291FCF: @ 8291FCF Route117_Text_SeeWifeIfYoudLikeMeToRaiseMon: @ 8291FCF
.string "I'm the DAY-CARE MAN.\p" .string "I'm the DAY-CARE MAN.\p"
.string "I help take care of the precious\n" .string "I help take care of the precious\n"
.string "POKéMON of TRAINERS.\p" .string "POKéMON of TRAINERS.\p"
.string "If you'd like me to raise your POKéMON,\n" .string "If you'd like me to raise your POKéMON,\n"
.string "have a word with my wife.$" .string "have a word with my wife.$"
Route117_Text_29205D: @ 829205D Route117_Text_DoYouWantEgg: @ 829205D
.string "Ah, it's you!\p" .string "Ah, it's you!\p"
.string "We were raising your POKéMON,\n" .string "We were raising your POKéMON,\n"
.string "and my goodness, were we surprised!\p" .string "and my goodness, were we surprised!\p"
@@ -313,124 +315,125 @@ Route117_Text_29205D: @ 829205D
.string "but your POKéMON had it.\p" .string "but your POKéMON had it.\p"
.string "You do want it, yes?$" .string "You do want it, yes?$"
Route117_Text_292114: @ 8292114 Route117_Text_YourMonIsDoingFine: @ 8292114
.string "Ah, it's you! Good to see you.\n" .string "Ah, it's you! Good to see you.\n"
.string "Your {STR_VAR_1}'s doing fine.$" .string "Your {STR_VAR_1}'s doing fine.$"
Route117_Text_292149: @ 8292149 Route117_Text_IllKeepIt: @ 8292149
.string "Well then, I'll keep it.\n" .string "Well then, I'll keep it.\n"
.string "Thanks!$" .string "Thanks!$"
Route117_Text_29216A: @ 829216A Route117_Text_YouHaveNoRoomForIt: @ 829216A
.string "You have no room for it…\n" .string "You have no room for it…\n"
.string "Come back when you've made room.$" .string "Come back when you've made room.$"
Route117_Text_2921A4: @ 82921A4 Route117_Text_ReceivedEgg: @ 82921A4
.string "{PLAYER} received the EGG from\n" .string "{PLAYER} received the EGG from\n"
.string "the DAY-CARE MAN.$" .string "the DAY-CARE MAN.$"
Route117_Text_2921CF: @ 82921CF Route117_Text_TakeGoodCareOfIt: @ 82921CF
.string "Take good care of it.$" .string "Take good care of it.$"
Route117_Text_2921E5: @ 82921E5 Route117_Text_FriendlyWithOtherTrainersMon: @ 82921E5
.string "By the way, about your {STR_VAR_1},\n" .string "By the way, about your {STR_VAR_1},\n"
.string "it seemed to be friendly with\l" .string "it seemed to be friendly with\l"
.string "{STR_VAR_2}'s {STR_VAR_3}.\p" .string "{STR_VAR_2}'s {STR_VAR_3}.\p"
.string "I may even have seen it receiving\n" .string "I may even have seen it receiving\n"
.string "a piece of MAIL.$" .string "a piece of MAIL.$"
Route117_Text_29225A: @ 829225A @ Unused
Route117_Text_SeeWifeIfYouWantToPickUpMon: @ 829225A
.string "If you want to pick up your POKéMON,\n" .string "If you want to pick up your POKéMON,\n"
.string "have a word with my wife.$" .string "have a word with my wife.$"
Route117_Text_292299: @ 8292299 Route117_Text_YourMonsAreDoingFine: @ 8292299
.string "Ah, it's you! Your {STR_VAR_1} and\n" .string "Ah, it's you! Your {STR_VAR_1} and\n"
.string "{STR_VAR_2} are doing fine.$" .string "{STR_VAR_2} are doing fine.$"
Route117_Text_2922C6: @ 82922C6 Route117_Text_IWillKeepDoYouWantIt: @ 82922C6
.string "I really will keep it.\n" .string "I really will keep it.\n"
.string "You do want this, yes?$" .string "You do want this, yes?$"
Route117_PokemonDayCare_Text_2922F4: @ 82922F4 Route117_PokemonDayCare_Text_WouldYouLikeUsToRaiseAMon: @ 82922F4
.string "I'm the DAY-CARE LADY.\p" .string "I'm the DAY-CARE LADY.\p"
.string "We can raise POKéMON for you.\p" .string "We can raise POKéMON for you.\p"
.string "Would you like us to raise one?$" .string "Would you like us to raise one?$"
Route117_PokemonDayCare_Text_292349: @ 8292349 Route117_PokemonDayCare_Text_WhichMonShouldWeRaise: @ 8292349
.string "Which POKéMON should we raise for\n" .string "Which POKéMON should we raise for\n"
.string "you?$" .string "you?$"
Route117_PokemonDayCare_Text_292370: @ 8292370 Route117_PokemonDayCare_Text_WellRaiseYourMon: @ 8292370
.string "Fine, we'll raise your {STR_VAR_1}\n" .string "Fine, we'll raise your {STR_VAR_1}\n"
.string "for a while.\p" .string "for a while.\p"
.string "Come back for it later.$" .string "Come back for it later.$"
Route117_PokemonDayCare_Text_2923AF: @ 82923AF Route117_PokemonDayCare_Text_WeCanRaiseOneMore: @ 82923AF
.string "We can raise two of your POKéMON.\n" .string "We can raise two of your POKéMON.\n"
.string "Would you like us to raise one more?$" .string "Would you like us to raise one more?$"
Route117_PokemonDayCare_Text_2923F6: @ 82923F6 Route117_PokemonDayCare_Text_HusbandWasLookingForYou: @ 82923F6
.string "My husband was looking for you.$" .string "My husband was looking for you.$"
Route117_PokemonDayCare_Text_292416: @ 8292416 Route117_PokemonDayCare_Text_292416: @ 8292416
.string "Oh, fine, then.\n" .string "Oh, fine, then.\n"
.string "Come again.$" .string "Come again.$"
Route117_PokemonDayCare_Text_292432: @ 8292432 Route117_PokemonDayCare_Text_NotEnoughMoney: @ 8292432
.string "You don't have enough money…$" .string "You don't have enough money…$"
Route117_PokemonDayCare_Text_29244F: @ 829244F Route117_PokemonDayCare_Text_TakeOtherOneBackToo: @ 829244F
.string "Will you take back the other one,\n" .string "Will you take back the other one,\n"
.string "too?$" .string "too?$"
Route117_PokemonDayCare_Text_292476: @ 8292476 Route117_PokemonDayCare_Text_ComeAgain: @ 8292476
.string "Fine.\n" .string "Fine.\n"
.string "Come again.$" .string "Come again.$"
Route117_PokemonDayCare_Text_292488: @ 8292488 Route117_PokemonDayCare_Text_GoodToSeeYou: @ 8292488
.string "Ah, it's you! Good to see you.\n" .string "Ah, it's you! Good to see you.\n"
.string "Your POKéMON can only be doing good!$" .string "Your POKéMON can only be doing good!$"
Route117_PokemonDayCare_Text_2924CC: @ 82924CC Route117_PokemonDayCare_Text_YourMonHasGrownXLevels: @ 82924CC
.string "By level, your {STR_VAR_1} has\n" .string "By level, your {STR_VAR_1} has\n"
.string "grown by {STR_VAR_2}.$" .string "grown by {STR_VAR_2}.$"
Route117_PokemonDayCare_Text_2924EF: @ 82924EF Route117_PokemonDayCare_Text_YourTeamIsFull: @ 82924EF
.string "Your POKéMON team is full.\n" .string "Your POKéMON team is full.\n"
.string "Make room, then come see me.$" .string "Make room, then come see me.$"
Route117_PokemonDayCare_Text_292527: @ 8292527 Route117_PokemonDayCare_Text_292527: @ 8292527
.string "Which POKéMON will you take back?$" .string "Which POKéMON will you take back?$"
Route117_PokemonDayCare_Text_292549: @ 8292549 Route117_PokemonDayCare_Text_ItWillCostX: @ 8292549
.string "If you want your {STR_VAR_1} back,\n" .string "If you want your {STR_VAR_1} back,\n"
.string "it will cost ¥{STR_VAR_2}.$" .string "it will cost ¥{STR_VAR_2}.$"
Route117_PokemonDayCare_Text_292575: @ 8292575 Route117_PokemonDayCare_Text_HeresYourMon: @ 8292575
.string "Perfect!\n" .string "Perfect!\n"
.string "Here's your POKéMON.$" .string "Here's your POKéMON.$"
Route117_PokemonDayCare_Text_292593: @ 8292593 Route117_PokemonDayCare_Text_TookBackMon: @ 8292593
.string "{PLAYER} took back {STR_VAR_1} from\n" .string "{PLAYER} took back {STR_VAR_1} from\n"
.string "the DAY-CARE LADY.$" .string "the DAY-CARE LADY.$"
Route117_PokemonDayCare_Text_2925BB: @ 82925BB Route117_PokemonDayCare_Text_YouHaveJustOneMon: @ 82925BB
.string "Oh? But you have just one\n" .string "Oh? But you have just one\n"
.string "POKéMON.\p" .string "POKéMON.\p"
.string "Come back another time.$" .string "Come back another time.$"
Route117_PokemonDayCare_Text_2925F6: @ 82925F6 Route117_PokemonDayCare_Text_TakeYourMonBack: @ 82925F6
.string "Will you take your POKéMON back?$" .string "Will you take your POKéMON back?$"
Route117_PokemonDayCare_Text_292617: @ 8292617 Route117_PokemonDayCare_Text_WhatWillYouBattleWith: @ 8292617
.string "If you leave me that POKéMON,\n" .string "If you leave me that POKéMON,\n"
.string "what will you battle with?\p" .string "what will you battle with?\p"
.string "Come back another time.$" .string "Come back another time.$"
Text_292668: @ 8292668 Text_EggHatchHuh: @ 8292668
.string "Huh?$" .string "Huh?$"
Route117_PokemonDayCare_Text_29266D: @ 829266D Route117_PokemonDayCare_Text_YoullBeLeftWithJustOne: @ 829266D
.string "Huh?\n" .string "Huh?\n"
.string "Now, now.\p" .string "Now, now.\p"
.string "If you leave that POKéMON with\n" .string "If you leave that POKéMON with\n"
+2 -2
View File
@@ -206,7 +206,7 @@ gSpecials:: @ 81DBA64
def_special TakePokemonFromDaycare def_special TakePokemonFromDaycare
def_special ScriptHatchMon def_special ScriptHatchMon
def_special EggHatch def_special EggHatch
def_special sub_8071614 def_special CheckDaycareMonReceivedMail
def_special ShowLinkBattleRecords def_special ShowLinkBattleRecords
def_special IsEnoughForCostInVar0x8005 def_special IsEnoughForCostInVar0x8005
def_special SubtractMoneyFromVar0x8005 def_special SubtractMoneyFromVar0x8005
@@ -530,7 +530,7 @@ gSpecials:: @ 81DBA64
def_special sub_80B4808 def_special sub_80B4808
def_special ResetHealLocationFromDewford def_special ResetHealLocationFromDewford
def_special sub_81B9918 def_special sub_81B9918
def_special sub_80722E0 def_special CountPartyAliveNonEggMons
def_special TryPrepareSecondApproachingTrainer def_special TryPrepareSecondApproachingTrainer
def_special RemoveRecordsWindow def_special RemoveRecordsWindow
def_special CloseDeptStoreElevatorWindow def_special CloseDeptStoreElevatorWindow
+32
View File
@@ -0,0 +1,32 @@
#ifndef GUARD_DAYCARE_CONSTANTS_H
#define GUARD_DAYCARE_CONSTANTS_H
// Egg parents
#define EGG_MOTHER 0
#define EGG_FATHER 1
#define NEITHER_PARENT -1
// Parent compatability scores
#define PARENTS_INCOMPATIBLE 0
#define PARENTS_LOW_COMPATIBILITY 20
#define PARENTS_MED_COMPATABILITY 50
#define PARENTS_MAX_COMPATABILITY 70
// Daycare state
#define DAYCARE_NO_MONS 0
#define DAYCARE_EGG_WAITING 1
#define DAYCARE_ONE_MON 2
#define DAYCARE_TWO_MONS 3
#define INHERITED_IV_COUNT 3
#define EGG_HATCH_LEVEL 5
#define EGG_GENDER_MALE 0x8000 // used to create a male egg from a female-only parent species (e.g. Nidoran)
#define DAYCARE_LEVEL_MENU_EXIT 5
#define DAYCARE_EXITED_LEVEL_MENU 2 // would be redundant with above if GF had used the same value
// Array buffers
#define EGG_MOVES_ARRAY_COUNT 10
#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
#endif //GUARD_DAYCARE_CONSTANTS_H
+2
View File
@@ -51,6 +51,7 @@
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. #define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
#define TRAINER_ID_LENGTH 4 #define TRAINER_ID_LENGTH 4
#define PARTY_SIZE 6
#define MAX_MON_MOVES 4 #define MAX_MON_MOVES 4
// string lengths // string lengths
@@ -62,6 +63,7 @@
#define MALE 0 #define MALE 0
#define FEMALE 1 #define FEMALE 1
#define GENDER_COUNT 2
#define OPTIONS_BUTTON_MODE_NORMAL 0 #define OPTIONS_BUTTON_MODE_NORMAL 0
#define OPTIONS_BUTTON_MODE_LR 1 #define OPTIONS_BUTTON_MODE_LR 1
+2
View File
@@ -41,6 +41,8 @@
#define EGG_GROUP_DRAGON 14 #define EGG_GROUP_DRAGON 14
#define EGG_GROUP_UNDISCOVERED 15 #define EGG_GROUP_UNDISCOVERED 15
#define EGG_GROUPS_PER_MON 2
// Pokemon natures // Pokemon natures
#define NATURE_HARDY 0 #define NATURE_HARDY 0
#define NATURE_LONELY 1 #define NATURE_LONELY 1
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_DAYCARE_H #ifndef GUARD_DAYCARE_H
#define GUARD_DAYCARE_H #define GUARD_DAYCARE_H
#define EGG_HATCH_LEVEL 5 #include "constants/daycare.h"
u8 *GetMonNick(struct Pokemon *mon, u8 *dest); u8 *GetMonNick(struct Pokemon *mon, u8 *dest);
u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest); u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest);
+2 -2
View File
@@ -2,9 +2,9 @@
#define GUARD_EGG_HATCH_H #define GUARD_EGG_HATCH_H
void ScriptHatchMon(void); void ScriptHatchMon(void);
bool8 sub_8071614(void); bool8 CheckDaycareMonReceivedMail(void);
void EggHatch(void); void EggHatch(void);
u8 GetEggStepsToSubtract(void); u8 GetEggStepsToSubtract(void);
u16 sub_80722E0(void); u16 CountPartyAliveNonEggMons(void);
#endif // GUARD_EGG_HATCH_H #endif // GUARD_EGG_HATCH_H
-2
View File
@@ -63,8 +63,6 @@
// Converts a Q24.8 fixed-point format number to a regular integer // Converts a Q24.8 fixed-point format number to a regular integer
#define Q_24_8_TO_INT(n) ((int)((n) >> 8)) #define Q_24_8_TO_INT(n) ((int)((n) >> 8))
#define PARTY_SIZE 6
#define POKEMON_SLOTS_NUMBER 412 #define POKEMON_SLOTS_NUMBER 412
#define min(a, b) ((a) < (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b))
+138 -145
View File
@@ -3,14 +3,11 @@
#include "battle.h" #include "battle.h"
#include "daycare.h" #include "daycare.h"
#include "string_util.h" #include "string_util.h"
#include "constants/species.h"
#include "constants/items.h"
#include "mail.h" #include "mail.h"
#include "pokemon_storage_system.h" #include "pokemon_storage_system.h"
#include "event_data.h" #include "event_data.h"
#include "random.h" #include "random.h"
#include "main.h" #include "main.h"
#include "constants/moves.h"
#include "egg_hatch.h" #include "egg_hatch.h"
#include "text.h" #include "text.h"
#include "menu.h" #include "menu.h"
@@ -22,9 +19,10 @@
#include "party_menu.h" #include "party_menu.h"
#include "list_menu.h" #include "list_menu.h"
#include "overworld.h" #include "overworld.h"
#include "constants/items.h"
#define EGG_MOVES_ARRAY_COUNT 10 #include "constants/moves.h"
#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 #include "constants/region_map_sections.h"
#include "constants/species.h"
// this file's functions // this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail); static void ClearDaycareMonMail(struct DayCareMail *mail);
@@ -52,11 +50,13 @@ static const struct WindowTemplate sDaycareLevelMenuWindowTemplate =
.baseBlock = 8 .baseBlock = 8
}; };
// Indices here are assigned by Task_HandleDaycareLevelMenuInput to VAR_RESULT,
// which is copied to VAR_0x8004 and used as an index for GetDaycareCost
static const struct ListMenuItem sLevelMenuItems[] = static const struct ListMenuItem sLevelMenuItems[] =
{ {
{gExpandedPlaceholder_Empty, 0}, {gExpandedPlaceholder_Empty, EGG_MOTHER},
{gExpandedPlaceholder_Empty, 1}, {gExpandedPlaceholder_Empty, EGG_FATHER},
{gText_Exit, 5} {gText_Exit, DAYCARE_LEVEL_MENU_EXIT}
}; };
static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
@@ -202,16 +202,16 @@ void StoreSelectedPokemonInDaycare(void)
static void ShiftDaycareSlots(struct DayCare *daycare) static void ShiftDaycareSlots(struct DayCare *daycare)
{ {
// This condition is only satisfied when the player takes out the first pokemon from the daycare. // This condition is only satisfied when the player takes out the first pokemon from the daycare.
if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0 if (GetBoxMonData(&daycare->mons[EGG_FATHER].mon, MON_DATA_SPECIES) != SPECIES_NONE
&& GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == 0) && GetBoxMonData(&daycare->mons[EGG_MOTHER].mon, MON_DATA_SPECIES) == SPECIES_NONE)
{ {
daycare->mons[0].mon = daycare->mons[1].mon; daycare->mons[EGG_MOTHER].mon = daycare->mons[EGG_FATHER].mon;
ZeroBoxMonData(&daycare->mons[1].mon); ZeroBoxMonData(&daycare->mons[EGG_FATHER].mon);
daycare->mons[0].mail = daycare->mons[1].mail; daycare->mons[EGG_MOTHER].mail = daycare->mons[EGG_FATHER].mail;
daycare->mons[0].steps = daycare->mons[1].steps; daycare->mons[EGG_MOTHER].steps = daycare->mons[EGG_FATHER].steps;
daycare->mons[1].steps = 0; daycare->mons[EGG_FATHER].steps = 0;
ClearDaycareMonMail(&daycare->mons[1].mail); ClearDaycareMonMail(&daycare->mons[EGG_FATHER].mail);
} }
} }
@@ -341,8 +341,8 @@ void GetDaycareCost(void)
static void Debug_AddDaycareSteps(u16 numSteps) static void Debug_AddDaycareSteps(u16 numSteps)
{ {
gSaveBlock1Ptr->daycare.mons[0].steps += numSteps; gSaveBlock1Ptr->daycare.mons[EGG_MOTHER].steps += numSteps;
gSaveBlock1Ptr->daycare.mons[1].steps += numSteps; gSaveBlock1Ptr->daycare.mons[EGG_FATHER].steps += numSteps;
} }
u8 GetNumLevelsGainedFromDaycare(void) u8 GetNumLevelsGainedFromDaycare(void)
@@ -419,18 +419,18 @@ static u16 GetEggSpecies(u16 species)
return species; return species;
} }
static s32 GetSlotToInheritNature(struct DayCare *daycare) static s32 GetParentToInheritNature(struct DayCare *daycare)
{ {
u32 species[DAYCARE_MON_COUNT]; u32 species[DAYCARE_MON_COUNT];
s32 i; s32 i;
s32 dittoCount; s32 dittoCount;
s32 slot = -1; s32 parent = NEITHER_PARENT;
// search for female gender // search for female gender
for (i = 0; i < DAYCARE_MON_COUNT; i++) for (i = 0; i < DAYCARE_MON_COUNT; i++)
{ {
if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE) if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE)
slot = i; parent = i;
} }
// search for ditto // search for ditto
@@ -438,50 +438,52 @@ static s32 GetSlotToInheritNature(struct DayCare *daycare)
{ {
species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES); species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO) if (species[i] == SPECIES_DITTO)
dittoCount++, slot = i; dittoCount++, parent = i;
} }
// coin flip on ...two Dittos // coin flip on ...two Dittos
if (dittoCount == 2) if (dittoCount == DAYCARE_MON_COUNT)
{ {
if (Random() >= USHRT_MAX / 2) if (Random() >= USHRT_MAX / 2)
slot = 0; parent = EGG_MOTHER;
else else
slot = 1; parent = EGG_FATHER;
} }
// nature inheritance only if holds everstone // Don't inherit nature if not holding Everstone
if (GetBoxMonData(&daycare->mons[slot].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE if (GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE
|| Random() >= USHRT_MAX / 2) || Random() >= USHRT_MAX / 2)
{ {
return -1; return NEITHER_PARENT;
} }
return slot; return parent;
} }
static void _TriggerPendingDaycareEgg(struct DayCare *daycare) static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
{ {
s32 natureSlot; s32 parent;
s32 natureTries = 0; s32 natureTries = 0;
SeedRng2(gMain.vblankCounter2); SeedRng2(gMain.vblankCounter2);
natureSlot = GetSlotToInheritNature(daycare); parent = GetParentToInheritNature(daycare);
if (natureSlot < 0) // don't inherit nature
if (parent < 0)
{ {
daycare->offspringPersonality = (Random2() << 0x10) | ((Random() % 0xfffe) + 1); daycare->offspringPersonality = (Random2() << 16) | ((Random() % 0xfffe) + 1);
} }
// inherit nature
else else
{ {
u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[natureSlot].mon, MON_DATA_PERSONALITY, NULL)); u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_PERSONALITY, NULL));
u32 personality; u32 personality;
do do
{ {
personality = (Random2() << 0x10) | (Random()); personality = (Random2() << 16) | (Random());
if (wantedNature == GetNatureFromPersonality(personality) && personality != 0) if (wantedNature == GetNatureFromPersonality(personality) && personality != 0)
break; // we found a personality with the same nature break; // found a personality with the same nature
natureTries++; natureTries++;
} while (natureTries <= 2400); } while (natureTries <= 2400);
@@ -492,9 +494,10 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
FlagSet(FLAG_PENDING_DAYCARE_EGG); FlagSet(FLAG_PENDING_DAYCARE_EGG);
} }
// Functionally unused
static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare) static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare)
{ {
daycare->offspringPersonality = (Random()) | (0x8000); daycare->offspringPersonality = (Random()) | (EGG_GENDER_MALE);
FlagSet(FLAG_PENDING_DAYCARE_EGG); FlagSet(FLAG_PENDING_DAYCARE_EGG);
} }
@@ -503,6 +506,7 @@ void TriggerPendingDaycareEgg(void)
_TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare); _TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare);
} }
// Unused
static void TriggerPendingDaycareMaleEgg(void) static void TriggerPendingDaycareMaleEgg(void)
{ {
_TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare); _TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare);
@@ -532,9 +536,9 @@ static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv)
static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
{ {
u8 i; u8 i;
u8 selectedIvs[3]; u8 selectedIvs[INHERITED_IV_COUNT];
u8 availableIVs[NUM_STATS]; u8 availableIVs[NUM_STATS];
u8 whichParent[ARRAY_COUNT(selectedIvs)]; u8 whichParent[INHERITED_IV_COUNT];
u8 iv; u8 iv;
// Initialize a list of IV indices. // Initialize a list of IV indices.
@@ -544,23 +548,21 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
} }
// Select the 3 IVs that will be inherited. // Select the 3 IVs that will be inherited.
for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) for (i = 0; i < INHERITED_IV_COUNT; i++)
{ {
// Randomly pick an IV from the available list. // Randomly pick an IV from the available list and stop from being chosen again.
selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)];
// Remove the selected IV index from the available IV indices.
RemoveIVIndexFromList(availableIVs, i); RemoveIVIndexFromList(availableIVs, i);
} }
// Determine which parent each of the selected IVs should inherit from. // Determine which parent each of the selected IVs should inherit from.
for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) for (i = 0; i < INHERITED_IV_COUNT; i++)
{ {
whichParent[i] = Random() % 2; whichParent[i] = Random() % DAYCARE_MON_COUNT;
} }
// Set each of inherited IVs on the egg mon. // Set each of inherited IVs on the egg mon.
for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) for (i = 0; i < INHERITED_IV_COUNT; i++)
{ {
switch (selectedIvs[i]) switch (selectedIvs[i])
{ {
@@ -638,14 +640,14 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
numSharedParentMoves = 0; numSharedParentMoves = 0;
for (i = 0; i < MAX_MON_MOVES; i++) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
sHatchedEggMotherMoves[i] = 0; sHatchedEggMotherMoves[i] = MOVE_NONE;
sHatchedEggFatherMoves[i] = 0; sHatchedEggFatherMoves[i] = MOVE_NONE;
sHatchedEggFinalMoves[i] = 0; sHatchedEggFinalMoves[i] = MOVE_NONE;
} }
for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
sHatchedEggEggMoves[i] = 0; sHatchedEggEggMoves[i] = MOVE_NONE;
for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++) for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++)
sHatchedEggLevelUpMoves[i] = 0; sHatchedEggLevelUpMoves[i] = MOVE_NONE;
numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves); numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves);
for (i = 0; i < MAX_MON_MOVES; i++) for (i = 0; i < MAX_MON_MOVES; i++)
@@ -732,8 +734,8 @@ static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare
u16 motherItem, fatherItem; u16 motherItem, fatherItem;
if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL) if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL)
{ {
motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); motherItem = GetBoxMonData(&daycare->mons[EGG_MOTHER].mon, MON_DATA_HELD_ITEM);
fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); fatherItem = GetBoxMonData(&daycare->mons[EGG_FATHER].mon, MON_DATA_HELD_ITEM);
if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE) if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE)
{ {
*species = SPECIES_WOBBUFFET; *species = SPECIES_WOBBUFFET;
@@ -748,8 +750,8 @@ static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare
static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *daycare) static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *daycare)
{ {
u32 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); u32 motherItem = GetBoxMonData(&daycare->mons[EGG_MOTHER].mon, MON_DATA_HELD_ITEM);
u32 fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM); u32 fatherItem = GetBoxMonData(&daycare->mons[EGG_FATHER].mon, MON_DATA_HELD_ITEM);
if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL) if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL)
{ {
@@ -761,60 +763,57 @@ static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *dayca
static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots) static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots)
{ {
u16 i; u16 i;
u16 species[2]; u16 species[DAYCARE_MON_COUNT];
u16 eggSpecies; u16 eggSpecies;
// Determine which of the daycare mons is the mother and father of the egg. for (i = 0; i < DAYCARE_MON_COUNT; i++)
// The 0th index of the parentSlots array is considered the mother slot, and the
// 1st index is the father slot.
for (i = 0; i < 2; i++)
{ {
species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES); species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO) if (species[i] == SPECIES_DITTO)
{ {
parentSlots[0] = i ^ 1; parentSlots[EGG_MOTHER] = i ^ 1;
parentSlots[1] = i; parentSlots[EGG_FATHER] = i;
} }
else if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE) else if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE)
{ {
parentSlots[0] = i; parentSlots[EGG_MOTHER] = i;
parentSlots[1] = i ^ 1; parentSlots[EGG_FATHER] = i ^ 1;
} }
} }
eggSpecies = GetEggSpecies(species[parentSlots[0]]); eggSpecies = GetEggSpecies(species[parentSlots[EGG_MOTHER]]);
if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & 0x8000) if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE)
{ {
eggSpecies = SPECIES_NIDORAN_M; eggSpecies = SPECIES_NIDORAN_M;
} }
if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & 0x8000) if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE)
{ {
eggSpecies = SPECIES_VOLBEAT; eggSpecies = SPECIES_VOLBEAT;
} }
// Make Ditto the "mother" slot if the other daycare mon is male. // Make Ditto the "mother" slot if the other daycare mon is male.
if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE) if (species[parentSlots[EGG_FATHER]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[EGG_MOTHER]].mon) != MON_FEMALE)
{ {
u8 temp = parentSlots[1]; u8 ditto = parentSlots[EGG_FATHER];
parentSlots[1] = parentSlots[0]; parentSlots[EGG_FATHER] = parentSlots[EGG_MOTHER];
parentSlots[0] = temp; parentSlots[EGG_MOTHER] = ditto;
} }
return eggSpecies; return eggSpecies;
} }
static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg static void _GiveEggFromDaycare(struct DayCare *daycare)
{ {
struct Pokemon egg; struct Pokemon egg;
u16 species; u16 species;
u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father" u8 parentSlots[DAYCARE_MON_COUNT];
bool8 isEgg; bool8 isEgg;
species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots);
AlterEggSpeciesWithIncenseItem(&species, daycare); AlterEggSpeciesWithIncenseItem(&species, daycare);
SetInitialEggData(&egg, species, daycare); SetInitialEggData(&egg, species, daycare);
InheritIVs(&egg, daycare); InheritIVs(&egg, daycare);
BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon); BuildEggMoveset(&egg, &daycare->mons[parentSlots[EGG_FATHER]].mon, &daycare->mons[parentSlots[EGG_MOTHER]].mon);
if (species == SPECIES_PICHU) if (species == SPECIES_PICHU)
GiveVoltTackleIfLightBall(&egg, daycare); GiveVoltTackleIfLightBall(&egg, daycare);
@@ -835,7 +834,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
u8 metLocation; u8 metLocation;
u8 isEgg; u8 isEgg;
CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0);
metLevel = 0; metLevel = 0;
ball = ITEM_POKE_BALL; ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE; language = LANGUAGE_JAPANESE;
@@ -846,7 +845,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
SetMonData(mon, MON_DATA_LANGUAGE, &language); SetMonData(mon, MON_DATA_LANGUAGE, &language);
if (setHotSpringsLocation) if (setHotSpringsLocation)
{ {
metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo metLocation = METLOC_SPECIAL_EGG;
SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
} }
@@ -862,7 +861,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *
u8 language; u8 language;
personality = daycare->offspringPersonality; personality = daycare->offspringPersonality;
CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, TRUE, personality, OT_ID_PLAYER_ID, 0); CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0);
metLevel = 0; metLevel = 0;
ball = ITEM_POKE_BALL; ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE; language = LANGUAGE_JAPANESE;
@@ -889,7 +888,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
} }
// try to trigger poke sex // try to trigger poke sex
if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF) if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[EGG_FATHER].steps & 0xFF) == 0xFF)
{ {
u8 loveScore = GetDaycareCompatibilityScore(daycare); u8 loveScore = GetDaycareCompatibilityScore(daycare);
if (loveScore > (Random() * 100u) / USHRT_MAX) if (loveScore > (Random() * 100u) / USHRT_MAX)
@@ -945,16 +944,16 @@ static bool8 IsEggPending(struct DayCare *daycare)
static void _GetDaycareMonNicknames(struct DayCare *daycare) static void _GetDaycareMonNicknames(struct DayCare *daycare)
{ {
u8 text[12]; u8 text[12];
if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0) if (GetBoxMonData(&daycare->mons[EGG_MOTHER].mon, MON_DATA_SPECIES) != 0)
{ {
GetBoxMonNick(&daycare->mons[0].mon, gStringVar1); GetBoxMonNick(&daycare->mons[EGG_MOTHER].mon, gStringVar1);
GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text); GetBoxMonData(&daycare->mons[EGG_MOTHER].mon, MON_DATA_OT_NAME, text);
StringCopy(gStringVar3, text); StringCopy(gStringVar3, text);
} }
if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0) if (GetBoxMonData(&daycare->mons[EGG_FATHER].mon, MON_DATA_SPECIES) != 0)
{ {
GetBoxMonNick(&daycare->mons[1].mon, gStringVar2); GetBoxMonNick(&daycare->mons[EGG_FATHER].mon, gStringVar2);
} }
} }
@@ -971,26 +970,19 @@ void GetDaycareMonNicknames(void)
u8 GetDaycareState(void) u8 GetDaycareState(void)
{ {
// The daycare can be in 4 possible states:
// 0: default state--no deposited mons, no egg
// 1: there is an egg waiting for the player to pick it up
// 2: there is a single pokemon in the daycare
// 3: there are two pokemon in the daycare, no egg
u8 numMons; u8 numMons;
if (IsEggPending(&gSaveBlock1Ptr->daycare)) if (IsEggPending(&gSaveBlock1Ptr->daycare))
{ {
// There is an Egg waiting for the player. return DAYCARE_EGG_WAITING;
return 1;
} }
numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare); numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare);
if (numMons != 0) if (numMons != 0)
{ {
return numMons + 1; return numMons + 1; // DAYCARE_ONE_MON or DAYCARE_TWO_MONS
} }
return 0; return DAYCARE_NO_MONS;
} }
static u8 GetDaycarePokemonCount(void) static u8 GetDaycarePokemonCount(void)
@@ -1002,15 +994,15 @@ static u8 GetDaycarePokemonCount(void)
return 0; return 0;
} }
// Determine if the two given egg group lists contain any of the
// same egg groups.
static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
{ {
// Determine if the two given egg group lists contain any of the
// same egg groups.
s32 i, j; s32 i, j;
for (i = 0; i < 2; i++) for (i = 0; i < EGG_GROUPS_PER_MON; i++)
{ {
for (j = 0; j < 2; j++) for (j = 0; j < EGG_GROUPS_PER_MON; j++)
{ {
if (eggGroups1[i] == eggGroups2[j]) if (eggGroups1[i] == eggGroups2[j])
return TRUE; return TRUE;
@@ -1023,12 +1015,12 @@ static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
{ {
u32 i; u32 i;
u16 eggGroups[2][2]; u16 eggGroups[DAYCARE_MON_COUNT][EGG_GROUPS_PER_MON];
u16 species[2]; u16 species[DAYCARE_MON_COUNT];
u32 trainerIds[2]; u32 trainerIds[DAYCARE_MON_COUNT];
u32 genders[2]; u32 genders[DAYCARE_MON_COUNT];
for (i = 0; i < 2; i++) for (i = 0; i < DAYCARE_MON_COUNT; i++)
{ {
u32 personality; u32 personality;
@@ -1041,42 +1033,43 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
} }
// check unbreedable egg group // check unbreedable egg group
if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED) if (eggGroups[EGG_MOTHER][0] == EGG_GROUP_UNDISCOVERED || eggGroups[EGG_FATHER][0] == EGG_GROUP_UNDISCOVERED)
return 0; return PARENTS_INCOMPATIBLE;
// two Ditto can't breed // two Ditto can't breed
if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO) if (eggGroups[EGG_MOTHER][0] == EGG_GROUP_DITTO && eggGroups[EGG_FATHER][0] == EGG_GROUP_DITTO)
return 0; return PARENTS_INCOMPATIBLE;
// now that we checked, one ditto can breed with any other mon // one parent is Ditto
if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO) if (eggGroups[EGG_MOTHER][0] == EGG_GROUP_DITTO || eggGroups[EGG_FATHER][0] == EGG_GROUP_DITTO)
{ {
if (trainerIds[0] == trainerIds[1]) // same trainer if (trainerIds[EGG_MOTHER] == trainerIds[EGG_FATHER])
return 20; return PARENTS_LOW_COMPATIBILITY;
return 50; // different trainers, more chance of poke sex return PARENTS_MED_COMPATABILITY;
} }
// neither parent is Ditto
else else
{ {
if (genders[0] == genders[1]) // no homo if (genders[EGG_MOTHER] == genders[EGG_FATHER])
return 0; return PARENTS_INCOMPATIBLE;
if (genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS) if (genders[EGG_MOTHER] == MON_GENDERLESS || genders[EGG_FATHER] == MON_GENDERLESS)
return 0; return PARENTS_INCOMPATIBLE;
if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) // not compatible with each other if (!EggGroupsOverlap(eggGroups[EGG_MOTHER], eggGroups[EGG_FATHER]))
return 0; return PARENTS_INCOMPATIBLE;
if (species[0] == species[1]) // same species if (species[EGG_MOTHER] == species[EGG_FATHER])
{ {
if (trainerIds[0] == trainerIds[1]) // same species and trainer if (trainerIds[EGG_MOTHER] == trainerIds[EGG_FATHER])
return 50; return PARENTS_MED_COMPATABILITY; // same species, same trainer
return 70; // different trainers, same species return PARENTS_MAX_COMPATABILITY; // same species, different trainers
} }
else else
{ {
if (trainerIds[0] != trainerIds[1]) // different trainers, different species if (trainerIds[EGG_MOTHER] != trainerIds[EGG_FATHER])
return 50; return PARENTS_MED_COMPATABILITY; // different species, different trainers
return 20; // different species, same trainer return PARENTS_LOW_COMPATIBILITY; // different species, same trainer
} }
} }
} }
@@ -1093,13 +1086,13 @@ void SetDaycareCompatibilityString(void)
relationshipScore = GetDaycareCompatibilityScoreFromSave(); relationshipScore = GetDaycareCompatibilityScoreFromSave();
whichString = 0; whichString = 0;
if (relationshipScore == 0) if (relationshipScore == PARENTS_INCOMPATIBLE)
whichString = 3; whichString = 3;
if (relationshipScore == 20) if (relationshipScore == PARENTS_LOW_COMPATIBILITY)
whichString = 2; whichString = 2;
if (relationshipScore == 50) if (relationshipScore == PARENTS_MED_COMPATABILITY)
whichString = 1; whichString = 1;
if (relationshipScore == 70) if (relationshipScore == PARENTS_MAX_COMPATABILITY)
whichString = 0; whichString = 0;
StringCopy(gStringVar4, sCompatibilityMessages[whichString]); StringCopy(gStringVar4, sCompatibilityMessages[whichString]);
@@ -1108,20 +1101,20 @@ void SetDaycareCompatibilityString(void)
bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
{ {
u8 i; u8 i;
u8 symbolsCount[2]; // male, female u8 symbolsCount[GENDER_COUNT];
symbolsCount[0] = symbolsCount[1] = 0; symbolsCount[MALE] = symbolsCount[FEMALE] = 0;
for (i = 0; name[i] != EOS; i++) for (i = 0; name[i] != EOS; i++)
{ {
if (name[i] == CHAR_MALE) if (name[i] == CHAR_MALE)
symbolsCount[0]++; symbolsCount[MALE]++;
if (name[i] == CHAR_FEMALE) if (name[i] == CHAR_FEMALE)
symbolsCount[1]++; symbolsCount[FEMALE]++;
} }
if (genderRatio == MON_MALE && symbolsCount[0] != 0 && symbolsCount[1] == 0) if (genderRatio == MON_MALE && symbolsCount[MALE] != 0 && symbolsCount[FEMALE] == 0)
return TRUE; return TRUE;
if (genderRatio == MON_FEMALE && symbolsCount[1] != 0 && symbolsCount[0] == 0) if (genderRatio == MON_FEMALE && symbolsCount[FEMALE] != 0 && symbolsCount[MALE] == 0)
return TRUE; return TRUE;
return FALSE; return FALSE;
@@ -1150,19 +1143,19 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest)
{ {
u8 monNames[2][20]; u8 monNames[DAYCARE_MON_COUNT][20];
u8 i; u8 i;
*dest = EOS; *dest = EOS;
for (i = 0; i < 2; i++) for (i = 0; i < DAYCARE_MON_COUNT; i++)
{ {
GetBoxMonNick(&daycare->mons[i].mon, monNames[i]); GetBoxMonNick(&daycare->mons[i].mon, monNames[i]);
AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon); AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon);
} }
StringCopy(dest, monNames[0]); StringCopy(dest, monNames[EGG_MOTHER]);
StringAppend(dest, gText_NewLine2); StringAppend(dest, gText_NewLine2);
StringAppend(dest, monNames[1]); StringAppend(dest, monNames[EGG_FATHER]);
StringAppend(dest, gText_NewLine2); StringAppend(dest, gText_NewLine2);
StringAppend(dest, gText_Exit4); StringAppend(dest, gText_Exit4);
} }
@@ -1174,7 +1167,7 @@ static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest)
u8 text[20]; u8 text[20];
*dest = EOS; *dest = EOS;
for (i = 0; i < 2; i++) for (i = 0; i < DAYCARE_MON_COUNT; i++)
{ {
StringAppend(dest, gText_Lv); StringAppend(dest, gText_Lv);
level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps); level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps);
@@ -1250,12 +1243,12 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
{ {
switch (input) switch (input)
{ {
case 0: case EGG_MOTHER:
case 1: case EGG_FATHER:
gSpecialVar_Result = input; gSpecialVar_Result = input;
break; break;
case 5: case DAYCARE_LEVEL_MENU_EXIT:
gSpecialVar_Result = 2; gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU;
break; break;
} }
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
@@ -1266,7 +1259,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
} }
else if (gMain.newKeys & B_BUTTON) else if (gMain.newKeys & B_BUTTON)
{ {
gSpecialVar_Result = 2; gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU;
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId); RemoveWindow(gTasks[taskId].tWindowId);
+7 -7
View File
@@ -388,13 +388,13 @@ void ScriptHatchMon(void)
AddHatchedMonToParty(gSpecialVar_0x8004); AddHatchedMonToParty(gSpecialVar_0x8004);
} }
static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId) static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId)
{ {
u8 nick[0x20]; u8 nick[32];
struct DaycareMon *daycareMon = &daycare->mons[daycareId]; struct DaycareMon *daycareMon = &daycare->mons[daycareId];
GetBoxMonNick(&daycareMon->mon, nick); GetBoxMonNick(&daycareMon->mon, nick);
if (daycareMon->mail.message.itemId != 0 if (daycareMon->mail.message.itemId != ITEM_NONE
&& (StringCompareWithoutExtCtrlCodes(nick, daycareMon->mail.monName) != 0 && (StringCompareWithoutExtCtrlCodes(nick, daycareMon->mail.monName) != 0
|| StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) || StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
{ {
@@ -406,9 +406,9 @@ static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId)
return FALSE; return FALSE;
} }
bool8 sub_8071614(void) bool8 CheckDaycareMonReceivedMail(void)
{ {
return sub_807158C(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
} }
static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc) static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc)
@@ -880,9 +880,9 @@ u8 GetEggStepsToSubtract(void)
return 1; return 1;
} }
u16 sub_80722E0(void) u16 CountPartyAliveNonEggMons(void)
{ {
u16 aliveNonEggMonsCount = CountStorageNonEggMons(); u16 aliveNonEggMonsCount = CountStorageNonEggMons();
aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(6); aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(PARTY_SIZE);
return aliveNonEggMonsCount; return aliveNonEggMonsCount;
} }