summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/script_pokemon_util.s353
-rw-r--r--arm9/global.inc1
-rw-r--r--arm9/src/script_pokemon_util.c202
-rw-r--r--arm9/src/script_pokemon_util_c.c39
-rw-r--r--arm9/src/unk_02015CC0.c7
-rw-r--r--include/constants/map_sections.h226
-rw-r--r--include/constants/pokemon.h11
-rw-r--r--include/constants/script_pokemon_util.h8
-rw-r--r--include/module_05.h6
10 files changed, 346 insertions, 508 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 493af3c1..db5da323 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -185,7 +185,6 @@ Static arm9
Object unk_02048120.o
Object unk_020484A8.o
Object unk_02048904.o
- Object script_pokemon_util_c.o
Object script_pokemon_util.o
Object unk_0204A368.o
Object unk_0204A498.o
diff --git a/arm9/asm/script_pokemon_util.s b/arm9/asm/script_pokemon_util.s
deleted file mode 100644
index 90891e3f..00000000
--- a/arm9/asm/script_pokemon_util.s
+++ /dev/null
@@ -1,353 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start GiveEgg
-GiveEgg: ; 0x0204A0C8
- push {r4-r7, lr}
- sub sp, #0xc
- add r4, r1, #0x0
- add r0, r4, #0x0
- add r5, r2, #0x0
- add r7, r3, #0x0
- bl Sav2_PlayerData_GetProfileAddr
- str r0, [sp, #0x8]
- add r0, r4, #0x0
- bl SavArray_PlayerParty_get
- add r6, r0, #0x0
- mov r0, #0x20
- bl AllocMonZeroed
- add r4, r0, #0x0
- bl ZeroMonData
- ldr r0, [sp, #0x20]
- ldr r1, [sp, #0x24]
- bl FUN_02015CF8
- mov r1, #0x4
- str r1, [sp, #0x0]
- str r0, [sp, #0x4]
- ldr r3, [sp, #0x8]
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r7, #0x0
- bl MOD05_SetEggStats
- add r0, r6, #0x0
- add r1, r4, #0x0
- bl AddMonToParty
- add r5, r0, #0x0
- add r0, r4, #0x0
- bl FreeToHeap
- add r0, r5, #0x0
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start PartyMonSetMoveInSlot
-PartyMonSetMoveInSlot: ; 0x0204A120
- push {r3-r5, lr}
- add r5, r2, #0x0
- add r4, r3, #0x0
- bl GetPartyMonByIndex
- lsl r2, r5, #0x18
- add r1, r4, #0x0
- lsr r2, r2, #0x18
- bl MonSetMoveInSlot
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start GetIdxOfFirstPartyMonWithMove
-GetIdxOfFirstPartyMonWithMove: ; 0x0204A138
- push {r3-r7, lr}
- str r0, [sp, #0x0]
- add r5, r1, #0x0
- bl GetPartyCount
- add r7, r0, #0x0
- mov r6, #0x0
- cmp r7, #0x0
- ble _0204A1A2
-_0204A14A:
- ldr r0, [sp, #0x0]
- add r1, r6, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _0204A19C
- add r0, r4, #0x0
- mov r1, #0x36
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _0204A198
- add r0, r4, #0x0
- mov r1, #0x37
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _0204A198
- add r0, r4, #0x0
- mov r1, #0x38
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- beq _0204A198
- add r0, r4, #0x0
- mov r1, #0x39
- mov r2, #0x0
- bl GetMonData
- cmp r5, r0
- bne _0204A19C
-_0204A198:
- add r0, r6, #0x0
- pop {r3-r7, pc}
-_0204A19C:
- add r6, r6, #0x1
- cmp r6, r7
- blt _0204A14A
-_0204A1A2:
- mov r0, #0xff
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start CountAlivePokemon
-CountAlivePokemon: ; 0x0204A1A8
- push {r3-r7, lr}
- add r7, r0, #0x0
- bl GetPartyCount
- mov r5, #0x0
- add r6, r0, #0x0
- add r4, r5, #0x0
- cmp r6, #0x0
- ble _0204A1D2
-_0204A1BA:
- add r0, r7, #0x0
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- bl MonNotFaintedOrEgg
- cmp r0, #0x0
- beq _0204A1CC
- add r5, r5, #0x1
-_0204A1CC:
- add r4, r4, #0x1
- cmp r4, r6
- blt _0204A1BA
-_0204A1D2:
- add r0, r5, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start GetFirstAliveMonInParty_CrashIfNone
-GetFirstAliveMonInParty_CrashIfNone: ; 0x0204A1D8
- push {r3-r7, lr}
- add r6, r0, #0x0
- bl GetPartyCount
- add r5, r0, #0x0
- mov r4, #0x0
- cmp r5, #0x0
- ble _0204A204
-_0204A1E8:
- add r0, r6, #0x0
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- add r7, r0, #0x0
- bl MonNotFaintedOrEgg
- cmp r0, #0x0
- beq _0204A1FE
- add r0, r7, #0x0
- pop {r3-r7, pc}
-_0204A1FE:
- add r4, r4, #0x1
- cmp r4, r5
- blt _0204A1E8
-_0204A204:
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r7, pc}
-
- thumb_func_start GetFirstNonEggInParty
-GetFirstNonEggInParty: ; 0x0204A20C
- push {r3-r7, lr}
- add r6, r0, #0x0
- bl GetPartyCount
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- ldr r4, _0204A244 ; =0x00000000
- beq _0204A240
-_0204A21C:
- add r0, r6, #0x0
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r7, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _0204A236
- add r0, r7, #0x0
- pop {r3-r7, pc}
-_0204A236:
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- cmp r4, r5
- blo _0204A21C
-_0204A240:
- mov r0, #0x0
- pop {r3-r7, pc}
- .balign 4
-_0204A244: .word 0x00000000
-
- thumb_func_start HasEnoughAlivePokemonForDoubleBattle
-HasEnoughAlivePokemonForDoubleBattle: ; 0x0204A248
- push {r3, lr}
- bl CountAlivePokemon
- cmp r0, #0x2
- blt _0204A256
- mov r0, #0x1
- pop {r3, pc}
-_0204A256:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start GiveAllMonsTheSinnohChampRibbon
-GiveAllMonsTheSinnohChampRibbon: ; 0x0204A25C
- push {r3-r7, lr}
- mov r2, #0x1
- add r1, sp, #0x0
- add r7, r0, #0x0
- strb r2, [r1, #0x0]
- bl GetPartyCount
- add r6, r0, #0x0
- mov r5, #0x0
- cmp r6, #0x0
- ble _0204A298
-_0204A272:
- add r0, r7, #0x0
- add r1, r5, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x4c
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- cmp r0, #0x0
- bne _0204A292
- add r0, r4, #0x0
- mov r1, #0x19
- add r2, sp, #0x0
- bl SetMonData
-_0204A292:
- add r5, r5, #0x1
- cmp r5, r6
- blt _0204A272
-_0204A298:
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start ApplyPoisonStep
-ApplyPoisonStep: ; 0x0204A29C
- push {r3-r7, lr}
- sub sp, #0x10
- mov r7, #0x0
- str r0, [sp, #0x0]
- str r1, [sp, #0x4]
- add r6, r7, #0x0
- bl GetPartyCount
- add r4, r7, #0x0
- str r0, [sp, #0x8]
- cmp r0, #0x0
- ble _0204A310
-_0204A2B4:
- ldr r0, [sp, #0x0]
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- add r5, r0, #0x0
- bl MonNotFaintedOrEgg
- cmp r0, #0x0
- beq _0204A308
- add r0, r5, #0x0
- mov r1, #0x9f
- mov r2, #0x0
- bl GetMonData
- mov r1, #0x88
- tst r0, r1
- beq _0204A308
- add r0, r5, #0x0
- mov r1, #0xa2
- mov r2, #0x0
- bl GetMonData
- str r0, [sp, #0xc]
- cmp r0, #0x1
- bls _0204A2EA
- sub r0, r0, #0x1
- str r0, [sp, #0xc]
-_0204A2EA:
- add r0, r5, #0x0
- mov r1, #0xa2
- add r2, sp, #0xc
- bl SetMonData
- ldr r0, [sp, #0xc]
- cmp r0, #0x1
- bne _0204A306
- ldr r2, [sp, #0x4]
- add r0, r5, #0x0
- mov r1, #0x7
- add r6, r6, #0x1
- bl MonApplyFriendshipMod
-_0204A306:
- add r7, r7, #0x1
-_0204A308:
- ldr r0, [sp, #0x8]
- add r4, r4, #0x1
- cmp r4, r0
- blt _0204A2B4
-_0204A310:
- cmp r6, #0x0
- beq _0204A31A
- add sp, #0x10
- mov r0, #0x2
- pop {r3-r7, pc}
-_0204A31A:
- cmp r7, #0x0
- beq _0204A324
- add sp, #0x10
- mov r0, #0x1
- pop {r3-r7, pc}
-_0204A324:
- mov r0, #0x0
- add sp, #0x10
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start SurvivePoisoning
-SurvivePoisoning: ; 0x0204A32C
- push {r3-r4, lr}
- sub sp, #0x4
- mov r1, #0x9f
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- mov r1, #0x88
- tst r0, r1
- beq _0204A362
- add r0, r4, #0x0
- mov r1, #0xa2
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0x1
- bne _0204A362
- mov r0, #0x0
- str r0, [sp, #0x0]
- add r0, r4, #0x0
- mov r1, #0x9f
- add r2, sp, #0x0
- bl SetMonData
- add sp, #0x4
- mov r0, #0x1
- pop {r3-r4, pc}
-_0204A362:
- mov r0, #0x0
- add sp, #0x4
- pop {r3-r4, pc}
diff --git a/arm9/global.inc b/arm9/global.inc
index 787034d3..c8efac63 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8483,3 +8483,4 @@
.extern CARDi_IdentifyBackupCore
.extern CARDi_InitCommon
.extern MonNotFaintedOrEgg
+.extern CountAlivePokemon
diff --git a/arm9/src/script_pokemon_util.c b/arm9/src/script_pokemon_util.c
new file mode 100644
index 00000000..764ed98a
--- /dev/null
+++ b/arm9/src/script_pokemon_util.c
@@ -0,0 +1,202 @@
+#include "global.h"
+#include "heap.h"
+#include "party.h"
+#include "player_data.h"
+#include "pokemon.h"
+#include "save_block_2.h"
+#include "unk_02015CC0.h"
+#include "unk_0202C144.h"
+#include "module_05.h"
+#include "constants/items.h"
+#include "constants/script_pokemon_util.h"
+
+#pragma thumb on
+
+BOOL MonNotFaintedOrEgg(struct Pokemon * pokemon)
+{
+ if (GetMonData(pokemon, MON_DATA_HP, NULL) == 0)
+ return FALSE;
+ if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL))
+ return FALSE;
+ return TRUE;
+}
+
+BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u32 encounterType)
+{
+ u32 ptr;
+ struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
+ struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
+ struct Pokemon * mon = AllocMonZeroed(heap_id);
+ ZeroMonData(mon);
+ CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
+ FUN_0206A014(mon, data, ITEM_POKE_BALL, mapSec, encounterType, heap_id);
+ ptr = item;
+ SetMonData(mon, MON_DATA_HELD_ITEM, &ptr);
+ BOOL isAdded = AddMonToParty(party, mon);
+ if (isAdded)
+ {
+ FUN_0202C144(sav2, mon);
+ }
+ FreeToHeap(mon);
+ return isAdded;
+}
+
+/* Seems to have something to do with Manaphy Egg*/
+BOOL GiveEgg(u32 heapId, struct SaveBlock2 * sav2, u16 species, int level, int metLocIndex, int a3)
+{
+ struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
+ struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
+ struct Pokemon * mon = AllocMonZeroed(32);
+ ZeroMonData(mon);
+ MOD05_SetEggStats(mon, species, level, data, 4, FUN_02015CF8(metLocIndex, a3));
+ BOOL isAdded = AddMonToParty(party, mon);
+ FreeToHeap(mon);
+ return isAdded;
+}
+
+void PartyMonSetMoveInSlot(struct PlayerParty * party, int partySlot, int moveSlot, u16 move)
+{
+ struct Pokemon * mon = GetPartyMonByIndex(party, partySlot);
+ MonSetMoveInSlot(mon, move, moveSlot);
+}
+
+int GetIdxOfFirstPartyMonWithMove(struct PlayerParty * party, int move)
+{
+ int partyCount = GetPartyCount(party);
+
+ for (int i = 0; i < partyCount; i++)
+ {
+ struct Pokemon * mon = GetPartyMonByIndex(party, i);
+
+ if (GetMonData(mon, MON_DATA_IS_EGG, NULL))
+ continue;
+ if (GetMonData(mon, MON_DATA_MOVE1, NULL) == move
+ || GetMonData(mon, MON_DATA_MOVE2, NULL) == move
+ || GetMonData(mon, MON_DATA_MOVE3, NULL) == move
+ || GetMonData(mon, MON_DATA_MOVE4, NULL) == move)
+ return i;
+ }
+ return 0xFF;
+}
+
+int CountAlivePokemon(struct PlayerParty * party)
+{
+ int partyCount = GetPartyCount(party);
+ int i;
+ int aliveCount = 0;
+
+ for (i = 0; i < partyCount; i++)
+ {
+ struct Pokemon * mon = GetPartyMonByIndex(party, i);
+
+ if(MonNotFaintedOrEgg(mon))
+ aliveCount++;
+ }
+ return aliveCount;
+}
+
+struct Pokemon * GetFirstAliveMonInParty_CrashIfNone(struct PlayerParty * party)
+{
+ int i;
+ int partyCount = GetPartyCount(party);
+
+ for (i = 0; i < partyCount; i++)
+ {
+ struct Pokemon * mon = GetPartyMonByIndex(party, i);
+
+ if(MonNotFaintedOrEgg(mon))
+ return mon;
+ }
+ ErrorHandling();
+ return 0;
+}
+
+struct Pokemon * GetFirstNonEggInParty(struct PlayerParty * party)
+{
+ u16 i;
+ u16 partyCount = GetPartyCount(party);
+
+ for (i = 0; i < partyCount; i++)
+ {
+ struct Pokemon * mon = GetPartyMonByIndex(party, i);
+
+ if (!GetMonData(mon, MON_DATA_IS_EGG, NULL))
+ return mon;
+ }
+ return 0;
+}
+
+BOOL HasEnoughAlivePokemonForDoubleBattle(struct PlayerParty * party)
+{
+ return (CountAlivePokemon(party) >= 2);
+}
+
+void GiveAllMonsTheSinnohChampRibbon(struct PlayerParty * party)
+{
+ u8 var = 1;
+ int partyCount = GetPartyCount(party);
+
+
+ for (int i = 0; i < partyCount; i++)
+ {
+ struct Pokemon * mon = GetPartyMonByIndex(party, i);
+
+ if (GetMonData(mon, MON_DATA_IS_EGG, NULL))
+ continue;
+
+ SetMonData(mon, MON_DATA_SINNOH_CHAMP_RIBBON, &var);
+ }
+}
+
+int ApplyPoisonStep(struct PlayerParty * party, int location)
+{
+ u32 hp;
+ int numPoisoned = 0;
+ int numHealed = 0;
+ int partyCount = GetPartyCount(party);
+
+ for (int i = 0; i < partyCount; i++)
+ {
+ struct Pokemon * mon = GetPartyMonByIndex(party, i);
+
+ if(!MonNotFaintedOrEgg(mon))
+ continue;
+
+ if (!(GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88))
+ continue;
+
+ hp = GetMonData(mon, MON_DATA_HP, NULL);
+ if (hp > 1)
+ hp--;
+ SetMonData(mon, MON_DATA_HP, &hp);
+ if (hp == 1)
+ {
+ numHealed++;
+ MonApplyFriendshipMod(mon, FRIENDSHIP_EVENT_HEAL_FIELD_PSN, location);
+ }
+ numPoisoned++;
+ }
+
+ if (numHealed != 0)
+ return FLDPSN_HEAL;
+
+ if (numPoisoned != 0)
+ return FLDPSN_PSN;
+
+ return FLDPSN_NONE;
+}
+
+BOOL SurvivePoisoning(struct Pokemon * mon)
+{
+ int status;
+ if (GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88)
+ {
+ if (GetMonData(mon, MON_DATA_HP, NULL) == 1)
+ {
+ status = 0;
+ SetMonData(mon, MON_DATA_STATUS, &status);
+ return TRUE;
+ }
+ }
+ return FALSE;
+} \ No newline at end of file
diff --git a/arm9/src/script_pokemon_util_c.c b/arm9/src/script_pokemon_util_c.c
deleted file mode 100644
index 7ab52b67..00000000
--- a/arm9/src/script_pokemon_util_c.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "global.h"
-#include "heap.h"
-#include "party.h"
-#include "player_data.h"
-#include "pokemon.h"
-#include "save_block_2.h"
-#include "unk_0202C144.h"
-#include "constants/items.h"
-
-#pragma thumb on
-
-BOOL MonNotFaintedOrEgg(struct Pokemon * pokemon)
-{
- if (GetMonData(pokemon, MON_DATA_HP, NULL) == 0)
- return FALSE;
- if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL))
- return FALSE;
- return TRUE;
-}
-
-BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u32 encounterType)
-{
- u32 ptr;
- struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
- struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
- struct Pokemon * mon = AllocMonZeroed(heap_id);
- ZeroMonData(mon);
- CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
- FUN_0206A014(mon, data, ITEM_POKE_BALL, mapSec, encounterType, heap_id);
- ptr = item;
- SetMonData(mon, MON_DATA_HELD_ITEM, &ptr);
- BOOL isAdded = AddMonToParty(party, mon);
- if (isAdded)
- {
- FUN_0202C144(sav2, mon);
- }
- FreeToHeap(mon);
- return isAdded;
-}
diff --git a/arm9/src/unk_02015CC0.c b/arm9/src/unk_02015CC0.c
index 5da221d0..d068fd12 100644
--- a/arm9/src/unk_02015CC0.c
+++ b/arm9/src/unk_02015CC0.c
@@ -1,12 +1,13 @@
#include "global.h"
#include "unk_02015CC0.h"
+#include "constants/map_sections.h"
#pragma thumb on
const u16 UNK_020ED72C[] = {
- 0,
- 2000,
- 3000
+ 0,
+ METLOC_DAY_CARE_COUPLE,
+ METLOC_LOVELY_PLACE
};
int FUN_02015CC0(u16 a0)
diff --git a/include/constants/map_sections.h b/include/constants/map_sections.h
index 3cc9d597..462d49ee 100644
--- a/include/constants/map_sections.h
+++ b/include/constants/map_sections.h
@@ -1,117 +1,119 @@
#ifndef POKEDIAMOND_CONSTANTS_MAP_SECTIONS_H
#define POKEDIAMOND_CONSTANTS_MAP_SECTIONS_H
-#define MAPSEC_MYSTERY_ZONE 0
-#define MAPSEC_TWINLEAF_TOWN 1
-#define MAPSEC_SANDGEM_TOWN 2
-#define MAPSEC_FLOAROMA_TOWN 3
-#define MAPSEC_SOLACEON_TOWN 4
-#define MAPSEC_CELESTIC_TOWN 5
-#define MAPSEC_JUBILIFE_CITY 6
-#define MAPSEC_CANALAVE_CITY 7
-#define MAPSEC_OREBURGH_CITY 8
-#define MAPSEC_ETERNA_CITY 9
-#define MAPSEC_HEARTHOME_CITY 10
-#define MAPSEC_PASTORIA_CITY 11
-#define MAPSEC_VEILSTONE_CITY 12
-#define MAPSEC_SUNYSHORE_CITY 13
-#define MAPSEC_SNOWPOINT_CITY 14
-#define MAPSEC_POKEMON_LEAGUE 15
-#define MAPSEC_ROUTE_201 16
-#define MAPSEC_ROUTE_202 17
-#define MAPSEC_ROUTE_203 18
-#define MAPSEC_ROUTE_204 19
-#define MAPSEC_ROUTE_205 20
-#define MAPSEC_ROUTE_206 21
-#define MAPSEC_ROUTE_207 22
-#define MAPSEC_ROUTE_208 23
-#define MAPSEC_ROUTE_209 24
-#define MAPSEC_ROUTE_210 25
-#define MAPSEC_ROUTE_211 26
-#define MAPSEC_ROUTE_212 27
-#define MAPSEC_ROUTE_213 28
-#define MAPSEC_ROUTE_214 29
-#define MAPSEC_ROUTE_215 30
-#define MAPSEC_ROUTE_216 31
-#define MAPSEC_ROUTE_217 32
-#define MAPSEC_ROUTE_218 33
-#define MAPSEC_ROUTE_219 34
-#define MAPSEC_ROUTE_220 35
-#define MAPSEC_ROUTE_221 36
-#define MAPSEC_ROUTE_222 37
-#define MAPSEC_ROUTE_223 38
-#define MAPSEC_ROUTE_224 39
-#define MAPSEC_ROUTE_225 40
-#define MAPSEC_ROUTE_226 41
-#define MAPSEC_ROUTE_227 42
-#define MAPSEC_ROUTE_228 43
-#define MAPSEC_ROUTE_229 44
-#define MAPSEC_ROUTE_230 45
-#define MAPSEC_OREBURGH_MINE 46
-#define MAPSEC_VALLEY_WINDWORKS 47
-#define MAPSEC_ETERNA_FOREST 48
-#define MAPSEC_FUEGO_IRONWORKS 49
-#define MAPSEC_MT_CORONET 50
-#define MAPSEC_SPEAR_PILLAR 51
-#define MAPSEC_GREAT_MARSH 52
-#define MAPSEC_SOLACEON_RUINS 53
-#define MAPSEC_VICTORY_ROAD 54
-#define MAPSEC_PAL_PARK 55
-#define MAPSEC_AMITY_SQUARE 56
-#define MAPSEC_RAVAGED_PATH 57
-#define MAPSEC_FLOAROMA_MEADOW 58
-#define MAPSEC_OREBURGH_GATE 59
-#define MAPSEC_FULLMOON_ISLAND 60
-#define MAPSEC_SENDOFF_SPRING 61
-#define MAPSEC_TURNBACK_CAVE 62
-#define MAPSEC_FLOWER_PARADISE 63
-#define MAPSEC_SNOWPOINT_TEMPLE 64
-#define MAPSEC_WAYWARD_CAVE 65
-#define MAPSEC_RUIN_MANIAC_CAVE 66
-#define MAPSEC_MANIAC_TUNNEL 67
-#define MAPSEC_TROPHY_GARDEN 68
-#define MAPSEC_IRON_ISLAND 69
-#define MAPSEC_OLD_CHATEAU 70
-#define MAPSEC_GALACTIC_HQ 71
-#define MAPSEC_VERITY_LAKEFRONT 72
-#define MAPSEC_VALOR_LAKEFRONT 73
-#define MAPSEC_ACUITY_LAKEFRONT 74
-#define MAPSEC_SPRING_PATH 75
-#define MAPSEC_LAKE_VERITY 76
-#define MAPSEC_LAKE_VALOR 77
-#define MAPSEC_LAKE_ACUITY 78
-#define MAPSEC_NEWMOON_ISLAND 79
-#define MAPSEC_BATTLE_TOWER 80
-#define MAPSEC_FIGHT_AREA 81
-#define MAPSEC_SURVIVAL_AREA 82
-#define MAPSEC_RESORT_AREA 83
-#define MAPSEC_STARK_MOUNTAIN 84
-#define MAPSEC_SEABREAK_PATH 85
-#define MAPSEC_HALL_OF_ORIGIN 86
-#define MAPSEC_VERITY_CAVERN 87
-#define MAPSEC_VALOR_CAVERN 88
-#define MAPSEC_ACUITY_CAVERN 89
-#define MAPSEC_JUBILIFE_TV 90
-#define MAPSEC_POKETCH_CO 91
-#define MAPSEC_GTS 92
-#define MAPSEC_TRAINERS_SCHOOL 93
-#define MAPSEC_MINING_MUSEUM 94
-#define MAPSEC_FLOWER_SHOP 95
-#define MAPSEC_CYCLE_SHOP 96
-#define MAPSEC_CONTEST_HALL 97
-#define MAPSEC_POFFIN_HOUSE 98
-#define MAPSEC_FOREIGN_BUILDING 99
-#define MAPSEC_POKEMON_DAY_CARE 100
-#define MAPSEC_VEILSTONE_STORE 101
-#define MAPSEC_GAME_CORNER 102
-#define MAPSEC_CANALAVE_LIBRARY 103
-#define MAPSEC_VISTA_LIGHTHOUSE 104
-#define MAPSEC_SUNYSHORE_MARKET 105
-#define MAPSEC_POKEMON_MANSION 106
-#define MAPSEC_FOOTSTEP_HOUSE 107
-#define MAPSEC_CAFE 108
-#define MAPSEC_GRAND_LAKE 109
-#define MAPSEC_RESTAURANT 110
-#define MAPSEC_BATTLE_PARK 111
+#define MAPSEC_MYSTERY_ZONE 0
+#define MAPSEC_TWINLEAF_TOWN 1
+#define MAPSEC_SANDGEM_TOWN 2
+#define MAPSEC_FLOAROMA_TOWN 3
+#define MAPSEC_SOLACEON_TOWN 4
+#define MAPSEC_CELESTIC_TOWN 5
+#define MAPSEC_JUBILIFE_CITY 6
+#define MAPSEC_CANALAVE_CITY 7
+#define MAPSEC_OREBURGH_CITY 8
+#define MAPSEC_ETERNA_CITY 9
+#define MAPSEC_HEARTHOME_CITY 10
+#define MAPSEC_PASTORIA_CITY 11
+#define MAPSEC_VEILSTONE_CITY 12
+#define MAPSEC_SUNYSHORE_CITY 13
+#define MAPSEC_SNOWPOINT_CITY 14
+#define MAPSEC_POKEMON_LEAGUE 15
+#define MAPSEC_ROUTE_201 16
+#define MAPSEC_ROUTE_202 17
+#define MAPSEC_ROUTE_203 18
+#define MAPSEC_ROUTE_204 19
+#define MAPSEC_ROUTE_205 20
+#define MAPSEC_ROUTE_206 21
+#define MAPSEC_ROUTE_207 22
+#define MAPSEC_ROUTE_208 23
+#define MAPSEC_ROUTE_209 24
+#define MAPSEC_ROUTE_210 25
+#define MAPSEC_ROUTE_211 26
+#define MAPSEC_ROUTE_212 27
+#define MAPSEC_ROUTE_213 28
+#define MAPSEC_ROUTE_214 29
+#define MAPSEC_ROUTE_215 30
+#define MAPSEC_ROUTE_216 31
+#define MAPSEC_ROUTE_217 32
+#define MAPSEC_ROUTE_218 33
+#define MAPSEC_ROUTE_219 34
+#define MAPSEC_ROUTE_220 35
+#define MAPSEC_ROUTE_221 36
+#define MAPSEC_ROUTE_222 37
+#define MAPSEC_ROUTE_223 38
+#define MAPSEC_ROUTE_224 39
+#define MAPSEC_ROUTE_225 40
+#define MAPSEC_ROUTE_226 41
+#define MAPSEC_ROUTE_227 42
+#define MAPSEC_ROUTE_228 43
+#define MAPSEC_ROUTE_229 44
+#define MAPSEC_ROUTE_230 45
+#define MAPSEC_OREBURGH_MINE 46
+#define MAPSEC_VALLEY_WINDWORKS 47
+#define MAPSEC_ETERNA_FOREST 48
+#define MAPSEC_FUEGO_IRONWORKS 49
+#define MAPSEC_MT_CORONET 50
+#define MAPSEC_SPEAR_PILLAR 51
+#define MAPSEC_GREAT_MARSH 52
+#define MAPSEC_SOLACEON_RUINS 53
+#define MAPSEC_VICTORY_ROAD 54
+#define MAPSEC_PAL_PARK 55
+#define MAPSEC_AMITY_SQUARE 56
+#define MAPSEC_RAVAGED_PATH 57
+#define MAPSEC_FLOAROMA_MEADOW 58
+#define MAPSEC_OREBURGH_GATE 59
+#define MAPSEC_FULLMOON_ISLAND 60
+#define MAPSEC_SENDOFF_SPRING 61
+#define MAPSEC_TURNBACK_CAVE 62
+#define MAPSEC_FLOWER_PARADISE 63
+#define MAPSEC_SNOWPOINT_TEMPLE 64
+#define MAPSEC_WAYWARD_CAVE 65
+#define MAPSEC_RUIN_MANIAC_CAVE 66
+#define MAPSEC_MANIAC_TUNNEL 67
+#define MAPSEC_TROPHY_GARDEN 68
+#define MAPSEC_IRON_ISLAND 69
+#define MAPSEC_OLD_CHATEAU 70
+#define MAPSEC_GALACTIC_HQ 71
+#define MAPSEC_VERITY_LAKEFRONT 72
+#define MAPSEC_VALOR_LAKEFRONT 73
+#define MAPSEC_ACUITY_LAKEFRONT 74
+#define MAPSEC_SPRING_PATH 75
+#define MAPSEC_LAKE_VERITY 76
+#define MAPSEC_LAKE_VALOR 77
+#define MAPSEC_LAKE_ACUITY 78
+#define MAPSEC_NEWMOON_ISLAND 79
+#define MAPSEC_BATTLE_TOWER 80
+#define MAPSEC_FIGHT_AREA 81
+#define MAPSEC_SURVIVAL_AREA 82
+#define MAPSEC_RESORT_AREA 83
+#define MAPSEC_STARK_MOUNTAIN 84
+#define MAPSEC_SEABREAK_PATH 85
+#define MAPSEC_HALL_OF_ORIGIN 86
+#define MAPSEC_VERITY_CAVERN 87
+#define MAPSEC_VALOR_CAVERN 88
+#define MAPSEC_ACUITY_CAVERN 89
+#define MAPSEC_JUBILIFE_TV 90
+#define MAPSEC_POKETCH_CO 91
+#define MAPSEC_GTS 92
+#define MAPSEC_TRAINERS_SCHOOL 93
+#define MAPSEC_MINING_MUSEUM 94
+#define MAPSEC_FLOWER_SHOP 95
+#define MAPSEC_CYCLE_SHOP 96
+#define MAPSEC_CONTEST_HALL 97
+#define MAPSEC_POFFIN_HOUSE 98
+#define MAPSEC_FOREIGN_BUILDING 99
+#define MAPSEC_POKEMON_DAY_CARE 100
+#define MAPSEC_VEILSTONE_STORE 101
+#define MAPSEC_GAME_CORNER 102
+#define MAPSEC_CANALAVE_LIBRARY 103
+#define MAPSEC_VISTA_LIGHTHOUSE 104
+#define MAPSEC_SUNYSHORE_MARKET 105
+#define MAPSEC_POKEMON_MANSION 106
+#define MAPSEC_FOOTSTEP_HOUSE 107
+#define MAPSEC_CAFE 108
+#define MAPSEC_GRAND_LAKE 109
+#define MAPSEC_RESTAURANT 110
+#define MAPSEC_BATTLE_PARK 111
+#define METLOC_DAY_CARE_COUPLE 2000
+#define METLOC_LOVELY_PLACE 3000 // Used for event Pokémon
#endif //POKEDIAMOND_CONSTANTS_MAP_SECTIONS_H
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 2ae4964d..a6acb188 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -296,6 +296,17 @@ enum MonGender
MON_GENDERLESS = 2
};
+// Constants for AdjustFriendship
+#define FRIENDSHIP_EVENT_GROW_LEVEL 0
+#define FRIENDSHIP_EVENT_VITAMIN 1 // unused, handled by PokemonUseItemEffects
+#define FRIENDSHIP_EVENT_BATTLE_ITEM 2 // unused, handled by PokemonUseItemEffects
+#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 3
+#define FRIENDSHIP_EVENT_LEARN_TMHM 4
+#define FRIENDSHIP_EVENT_WALKING 5
+#define FRIENDSHIP_EVENT_FAINT_SMALL 6
+#define FRIENDSHIP_EVENT_HEAL_FIELD_PSN 7
+#define FRIENDSHIP_EVENT_FAINT_LARGE 8 // If opponent was >= 30 levels higher. See AdjustFriendshipOnBattleFaint
+
// TODO: Identify the rest of these
enum BaseStat {
BASE_HP = 0,
diff --git a/include/constants/script_pokemon_util.h b/include/constants/script_pokemon_util.h
new file mode 100644
index 00000000..54abf810
--- /dev/null
+++ b/include/constants/script_pokemon_util.h
@@ -0,0 +1,8 @@
+#ifndef POKEDIAMOND_SCRIPT_POKEMON_UTIL_H
+#define POKEDIAMOND_SCRIPT_POKEMON_UTIL_H
+
+#define FLDPSN_NONE 0
+#define FLDPSN_PSN 1
+#define FLDPSN_HEAL 2
+
+#endif //POKEDIAMOND_SCRIPT_POKEMON_UTIL_H \ No newline at end of file
diff --git a/include/module_05.h b/include/module_05.h
new file mode 100644
index 00000000..471dd146
--- /dev/null
+++ b/include/module_05.h
@@ -0,0 +1,6 @@
+#ifndef POKEDIAMOND_MODULE_05_H
+#define POKEDIAMOND_MODULE_05_H
+
+void MOD05_SetEggStats(struct Pokemon * mon, u16 species, int a1, struct PlayerData * data, int a2, int metLoc);
+
+#endif //POKEDIAMOND_MODULE_05_H \ No newline at end of file