summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-08-30 12:39:29 -0400
committerscnorton <scnorton@biociphers.org>2017-08-30 12:39:29 -0400
commit562454400bf37a5a9bd945969ef43d8c416bef12 (patch)
tree0bfa1a212aac7d5d8325e82f885dc607d7493b4d
parentd5840cf101fb6fd3720c525003b891d50611b9b0 (diff)
Nearly-matching pokemon_get_eggmoves
-rw-r--r--asm/daycare.s88
-rw-r--r--src/daycare.c114
2 files changed, 113 insertions, 89 deletions
diff --git a/asm/daycare.s b/asm/daycare.s
index 7d4be18d3..9cc8c54a8 100644
--- a/asm/daycare.s
+++ b/asm/daycare.s
@@ -6,94 +6,6 @@
.text
- thumb_func_start pokemon_get_eggmoves
-pokemon_get_eggmoves: @ 8041B1C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r1
- movs r6, 0
- movs r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r5, _08041B44 @ =gEggMoves
- ldrh r1, [r5]
- ldr r7, _08041B48 @ =0x00004e20
- adds r0, r3, r7
- cmp r1, r0
- bne _08041B4C
- movs r4, 0x1
- b _08041B6E
- .align 2, 0
-_08041B44: .4byte gEggMoves
-_08041B48: .4byte 0x00004e20
-_08041B4C:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _08041BB8 @ =0x00000471
- ldr r5, _08041BBC @ =gEggMoves
- cmp r2, r0
- bhi _08041B6E
- lsls r0, r2, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r7, _08041BC0 @ =0x00004e20
- adds r0, r3, r7
- cmp r1, r0
- bne _08041B4C
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
-_08041B6E:
- movs r2, 0
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- ldr r1, _08041BC0 @ =0x00004e20
- cmp r0, r1
- bhi _08041BAA
- adds r7, r5, 0
- adds r3, r1, 0
-_08041B80:
- lsls r1, r2, 1
- add r1, r8
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bhi _08041BAA
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, r3
- bls _08041B80
-_08041BAA:
- lsls r0, r6, 24
- lsrs r0, 24
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08041BB8: .4byte 0x00000471
-_08041BBC: .4byte gEggMoves
-_08041BC0: .4byte 0x00004e20
- thumb_func_end pokemon_get_eggmoves
-
thumb_func_start daycare_build_child_moveset
daycare_build_child_moveset: @ 8041BC4
push {r4-r7,lr}
diff --git a/src/daycare.c b/src/daycare.c
index 641b8d68d..129fbeb6d 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -324,7 +324,7 @@ void sub_8041950(void)
sub_804191C(&gSaveBlock1.daycareData);
}
-void sub_8041960(u8 *data, u8 idx)
+static void sub_8041960(u8 *data, u8 idx)
{
int i, j;
u8 temp[6];
@@ -384,3 +384,115 @@ void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData)
}
}
}
+
+#ifdef NONMATCHING
+u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10])
+{
+ u16 i, j;
+ u16 nEggMoves = 0;
+ u16 offset = 0;
+ u16 species = GetMonData(egg, MON_DATA_SPECIES);
+ for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++)
+ if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
+ {
+ offset = i + 1;
+ break;
+ }
+ // Register differences incurred here due to cryptic duplication of gEggMoves pointer
+ for (j = 0; j < 10 && gEggMoves[offset + j] <= EGG_MOVES_SPECIES_OFFSET; j ++)
+ {
+ buffer[j] = gEggMoves[offset + j];
+ nEggMoves ++;
+ }
+ return nEggMoves;
+}
+#else
+__attribute__((naked))
+u8 pokemon_get_eggmoves(struct Pokemon *egg, u16 buffer[10])
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r8\n"
+ "\tpush {r7}\n"
+ "\tmov r8, r1\n"
+ "\tmovs r6, 0\n"
+ "\tmovs r4, 0\n"
+ "\tmovs r1, 0xB\n"
+ "\tbl GetMonData\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r3, r0, 16\n"
+ "\tmovs r2, 0\n"
+ "\tldr r5, _08041B44 @ =gEggMoves\n"
+ "\tldrh r1, [r5]\n"
+ "\tldr r7, _08041B48 @ =0x00004e20\n"
+ "\tadds r0, r3, r7\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08041B4C\n"
+ "\tmovs r4, 0x1\n"
+ "\tb _08041B6E\n"
+ "\t.align 2, 0\n"
+ "_08041B44: .4byte gEggMoves\n"
+ "_08041B48: .4byte 0x00004e20\n"
+ "_08041B4C:\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r2, r0, 16\n"
+ "\tldr r0, _08041BB8 @ =0x00000471\n"
+ "\tldr r5, _08041BBC @ =gEggMoves\n"
+ "\tcmp r2, r0\n"
+ "\tbhi _08041B6E\n"
+ "\tlsls r0, r2, 1\n"
+ "\tadds r0, r5\n"
+ "\tldrh r1, [r0]\n"
+ "\tldr r7, _08041BC0 @ =0x00004e20\n"
+ "\tadds r0, r3, r7\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08041B4C\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "_08041B6E:\n"
+ "\tmovs r2, 0\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r0, r5\n"
+ "\tldrh r0, [r0]\n"
+ "\tldr r1, _08041BC0 @ =0x00004e20\n"
+ "\tcmp r0, r1\n"
+ "\tbhi _08041BAA\n"
+ "\tadds r7, r5, 0\n"
+ "\tadds r3, r1, 0\n"
+ "_08041B80:\n"
+ "\tlsls r1, r2, 1\n"
+ "\tadd r1, r8\n"
+ "\tadds r0, r4, r2\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r7\n"
+ "\tldrh r0, [r0]\n"
+ "\tstrh r0, [r1]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tadds r0, r2, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r2, r0, 16\n"
+ "\tcmp r2, 0x9\n"
+ "\tbhi _08041BAA\n"
+ "\tadds r0, r4, r2\n"
+ "\tlsls r0, 1\n"
+ "\tadds r0, r5\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r3\n"
+ "\tbls _08041B80\n"
+ "_08041BAA:\n"
+ "\tlsls r0, r6, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_08041BB8: .4byte 0x00000471\n"
+ "_08041BBC: .4byte gEggMoves\n"
+ "_08041BC0: .4byte 0x00004e20");
+}
+#endif