diff options
author | scnorton <scnorton@biociphers.org> | 2017-08-30 12:39:29 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-08-30 12:39:29 -0400 |
commit | 562454400bf37a5a9bd945969ef43d8c416bef12 (patch) | |
tree | 0bfa1a212aac7d5d8325e82f885dc607d7493b4d | |
parent | d5840cf101fb6fd3720c525003b891d50611b9b0 (diff) |
Nearly-matching pokemon_get_eggmoves
-rw-r--r-- | asm/daycare.s | 88 | ||||
-rw-r--r-- | src/daycare.c | 114 |
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 |