mirror of https://github.com/pret/pokeemerald.git
more of daycare done
This commit is contained in:
parent
95949c772e
commit
0310be3007
141
asm/daycare.s
141
asm/daycare.s
|
@ -7,137 +7,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
thumb_func_start sub_8070AC4
|
|
||||||
sub_8070AC4: @ 8070AC4
|
|
||||||
push {r4-r7,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
adds r6, r0, 0
|
|
||||||
movs r7, 0
|
|
||||||
movs r5, 0
|
|
||||||
_08070ACE:
|
|
||||||
movs r0, 0x8C
|
|
||||||
adds r4, r5, 0
|
|
||||||
muls r4, r0
|
|
||||||
adds r0, r6, r4
|
|
||||||
movs r1, 0x5
|
|
||||||
bl GetBoxMonData
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08070AEE
|
|
||||||
adds r1, r6, 0
|
|
||||||
adds r1, 0x88
|
|
||||||
adds r1, r4
|
|
||||||
ldr r0, [r1]
|
|
||||||
adds r0, 0x1
|
|
||||||
str r0, [r1]
|
|
||||||
adds r7, 0x1
|
|
||||||
_08070AEE:
|
|
||||||
adds r5, 0x1
|
|
||||||
cmp r5, 0x1
|
|
||||||
bls _08070ACE
|
|
||||||
movs r1, 0x8C
|
|
||||||
lsls r1, 1
|
|
||||||
adds r0, r6, r1
|
|
||||||
ldr r0, [r0]
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08070B34
|
|
||||||
cmp r7, 0x2
|
|
||||||
bne _08070B34
|
|
||||||
subs r1, 0x4
|
|
||||||
adds r0, r6, r1
|
|
||||||
ldrb r0, [r0]
|
|
||||||
cmp r0, 0xFF
|
|
||||||
bne _08070B34
|
|
||||||
adds r0, r6, 0
|
|
||||||
bl daycare_relationship_score
|
|
||||||
adds r4, r0, 0
|
|
||||||
lsls r4, 24
|
|
||||||
lsrs r4, 24
|
|
||||||
bl Random
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
movs r1, 0x64
|
|
||||||
muls r0, r1
|
|
||||||
ldr r1, =0x0000ffff
|
|
||||||
bl __udivsi3
|
|
||||||
cmp r4, r0
|
|
||||||
bls _08070B34
|
|
||||||
bl TriggerPendingDaycareEgg
|
|
||||||
_08070B34:
|
|
||||||
movs r0, 0x8E
|
|
||||||
lsls r0, 1
|
|
||||||
adds r1, r6, r0
|
|
||||||
ldrb r0, [r1]
|
|
||||||
adds r0, 0x1
|
|
||||||
strb r0, [r1]
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
cmp r0, 0xFF
|
|
||||||
bne _08070BC0
|
|
||||||
bl GetEggStepsToSubtract
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r6, r0, 24
|
|
||||||
movs r5, 0
|
|
||||||
ldr r0, =gPlayerPartyCount
|
|
||||||
ldrb r0, [r0]
|
|
||||||
cmp r5, r0
|
|
||||||
bcs _08070BC0
|
|
||||||
ldr r4, =gPlayerParty
|
|
||||||
_08070B5C:
|
|
||||||
adds r0, r4, 0
|
|
||||||
movs r1, 0x2D
|
|
||||||
bl GetMonData
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08070BB4
|
|
||||||
adds r0, r4, 0
|
|
||||||
movs r1, 0x4
|
|
||||||
bl GetMonData
|
|
||||||
cmp r0, 0
|
|
||||||
bne _08070BB4
|
|
||||||
adds r0, r4, 0
|
|
||||||
movs r1, 0x20
|
|
||||||
bl GetMonData
|
|
||||||
adds r1, r0, 0
|
|
||||||
str r1, [sp]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08070BA8
|
|
||||||
cmp r0, r6
|
|
||||||
bcc _08070B98
|
|
||||||
subs r0, r6
|
|
||||||
b _08070B9A
|
|
||||||
.pool
|
|
||||||
_08070B98:
|
|
||||||
subs r0, r1, 0x1
|
|
||||||
_08070B9A:
|
|
||||||
str r0, [sp]
|
|
||||||
adds r0, r4, 0
|
|
||||||
movs r1, 0x20
|
|
||||||
mov r2, sp
|
|
||||||
bl SetMonData
|
|
||||||
b _08070BB4
|
|
||||||
_08070BA8:
|
|
||||||
ldr r0, =gSpecialVar_0x8004
|
|
||||||
strh r5, [r0]
|
|
||||||
movs r0, 0x1
|
|
||||||
b _08070BC2
|
|
||||||
.pool
|
|
||||||
_08070BB4:
|
|
||||||
adds r4, 0x64
|
|
||||||
adds r5, 0x1
|
|
||||||
ldr r0, =gPlayerPartyCount
|
|
||||||
ldrb r0, [r0]
|
|
||||||
cmp r5, r0
|
|
||||||
bcc _08070B5C
|
|
||||||
_08070BC0:
|
|
||||||
movs r0, 0
|
|
||||||
_08070BC2:
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_8070AC4
|
|
||||||
|
|
||||||
thumb_func_start sub_8070BD0
|
thumb_func_start sub_8070BD0
|
||||||
sub_8070BD0: @ 8070BD0
|
sub_8070BD0: @ 8070BD0
|
||||||
push {lr}
|
push {lr}
|
||||||
|
@ -145,7 +14,7 @@ sub_8070BD0: @ 8070BD0
|
||||||
ldr r0, [r0]
|
ldr r0, [r0]
|
||||||
ldr r1, =0x00003030
|
ldr r1, =0x00003030
|
||||||
adds r0, r1
|
adds r0, r1
|
||||||
bl sub_8070AC4
|
bl _DoEggActions_CheckHatch
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
pop {r1}
|
pop {r1}
|
||||||
|
@ -332,8 +201,8 @@ _08070D46:
|
||||||
bx r1
|
bx r1
|
||||||
thumb_func_end sub_8070D1C
|
thumb_func_end sub_8070D1C
|
||||||
|
|
||||||
thumb_func_start daycare_relationship_score
|
thumb_func_start GetDaycareCompatibilityScore
|
||||||
daycare_relationship_score: @ 8070D4C
|
GetDaycareCompatibilityScore: @ 8070D4C
|
||||||
push {r4-r7,lr}
|
push {r4-r7,lr}
|
||||||
mov r7, r10
|
mov r7, r10
|
||||||
mov r6, r9
|
mov r6, r9
|
||||||
|
@ -481,7 +350,7 @@ _08070E5C:
|
||||||
pop {r4-r7}
|
pop {r4-r7}
|
||||||
pop {r1}
|
pop {r1}
|
||||||
bx r1
|
bx r1
|
||||||
thumb_func_end daycare_relationship_score
|
thumb_func_end GetDaycareCompatibilityScore
|
||||||
|
|
||||||
thumb_func_start daycare_relationship_score_from_savegame
|
thumb_func_start daycare_relationship_score_from_savegame
|
||||||
daycare_relationship_score_from_savegame: @ 8070E6C
|
daycare_relationship_score_from_savegame: @ 8070E6C
|
||||||
|
@ -490,7 +359,7 @@ daycare_relationship_score_from_savegame: @ 8070E6C
|
||||||
ldr r0, [r0]
|
ldr r0, [r0]
|
||||||
ldr r1, =0x00003030
|
ldr r1, =0x00003030
|
||||||
adds r0, r1
|
adds r0, r1
|
||||||
bl daycare_relationship_score
|
bl GetDaycareCompatibilityScore
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
pop {r1}
|
pop {r1}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef GUARD_DAYCARE
|
#ifndef GUARD_DAYCARE_H
|
||||||
#define GUARD_DAYCARE
|
#define GUARD_DAYCARE_H
|
||||||
|
|
||||||
#define EGG_HATCH_LEVEL 5
|
#define EGG_HATCH_LEVEL 5
|
||||||
|
|
||||||
#endif // GUARD_DAYCARE
|
#endif // GUARD_DAYCARE_H
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef GUARD_EGG_HATCH_H
|
||||||
|
#define GUARD_EGG_HATCH_H
|
||||||
|
|
||||||
|
void ScriptHatchMon(void);
|
||||||
|
bool8 sub_8071614(void);
|
||||||
|
void EggHatch(void);
|
||||||
|
u8 GetEggStepsToSubtract(void);
|
||||||
|
u16 sub_80722E0(void);
|
||||||
|
|
||||||
|
#endif // GUARD_EGG_HATCH_H
|
|
@ -10,6 +10,7 @@
|
||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "moves.h"
|
#include "moves.h"
|
||||||
|
#include "egg_hatch.h"
|
||||||
|
|
||||||
#define EGG_MOVES_ARRAY_COUNT 10
|
#define EGG_MOVES_ARRAY_COUNT 10
|
||||||
#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
|
#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
|
||||||
|
@ -22,6 +23,7 @@ extern u16 ItemIdToBattleMoveId(u16);
|
||||||
// this file's functions
|
// this file's functions
|
||||||
static void ClearDaycareMonMisc(struct DaycareMiscMon *misc);
|
static void ClearDaycareMonMisc(struct DaycareMiscMon *misc);
|
||||||
void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
|
void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
|
||||||
|
u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
|
||||||
|
|
||||||
// RAM buffers used to assist with BuildEggMoveset()
|
// RAM buffers used to assist with BuildEggMoveset()
|
||||||
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
|
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
|
||||||
|
@ -818,3 +820,54 @@ void GiveEggFromDaycare(void)
|
||||||
{
|
{
|
||||||
_GiveEggFromDaycare(&gSaveBlock1Ptr->daycare);
|
_GiveEggFromDaycare(&gSaveBlock1Ptr->daycare);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
|
||||||
|
{
|
||||||
|
u32 i, validEggs = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < DAYCARE_MON_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SANITY_BIT2))
|
||||||
|
daycare->mons[i].steps++, validEggs++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// try to trigger poke sex
|
||||||
|
if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF)
|
||||||
|
{
|
||||||
|
u8 loveScore = GetDaycareCompatibilityScore(daycare);
|
||||||
|
if (loveScore > (Random() * 100u) / USHRT_MAX)
|
||||||
|
TriggerPendingDaycareEgg();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (++daycare->stepCounter == 255) // hatch an egg
|
||||||
|
{
|
||||||
|
u32 steps;
|
||||||
|
u8 toSub = GetEggStepsToSubtract();
|
||||||
|
|
||||||
|
for (i = 0; i < gPlayerPartyCount; i++)
|
||||||
|
{
|
||||||
|
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
|
||||||
|
continue;
|
||||||
|
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT1))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
|
||||||
|
if (steps != 0) // subtract needed steps
|
||||||
|
{
|
||||||
|
if (steps >= toSub)
|
||||||
|
steps -= toSub;
|
||||||
|
else
|
||||||
|
steps -= 1;
|
||||||
|
|
||||||
|
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);
|
||||||
|
}
|
||||||
|
else // hatch the egg
|
||||||
|
{
|
||||||
|
gSpecialVar_0x8004 = i;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE; // no hatching
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "pokemon.h"
|
#include "pokemon.h"
|
||||||
|
#include "egg_hatch.h"
|
||||||
#include "pokedex.h"
|
#include "pokedex.h"
|
||||||
#include "items.h"
|
#include "items.h"
|
||||||
#include "script.h"
|
#include "script.h"
|
||||||
|
|
Loading…
Reference in New Issue