summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/cable_club.s4
-rw-r--r--asm/daycare.s458
-rw-r--r--asm/egg_hatch.s10
-rw-r--r--data/specials.inc2
-rw-r--r--include/asm.inc.h5
-rw-r--r--include/global.h10
-rw-r--r--include/pokemon.h1
-rw-r--r--include/record_mixing.h16
-rw-r--r--src/credits.c1175
-rw-r--r--src/daycare.c367
-rw-r--r--src/intro.c1
-rw-r--r--src/mori_debug_menu.c4
-rw-r--r--src/record_mixing.c188
13 files changed, 730 insertions, 1511 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s
index bd7a2bd5c..7e5d19c24 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -1515,7 +1515,7 @@ unref_sub_8083BB0: @ 8083BB0
bl CreateTask
lsls r0, 24
lsrs r0, 24
- ldr r2, _08083BD8 @ =sub_80B9484
+ ldr r2, _08083BD8 @ =Task_RecordMixing_Main
adds r1, r4, 0
bl SetTaskFuncWithFollowupFunc
bl ScriptContext1_Stop
@@ -1524,7 +1524,7 @@ unref_sub_8083BB0: @ 8083BB0
bx r0
.align 2, 0
_08083BD4: .4byte sub_80839DC
-_08083BD8: .4byte sub_80B9484
+_08083BD8: .4byte Task_RecordMixing_Main
thumb_func_end unref_sub_8083BB0
thumb_func_start sub_8083BDC
diff --git a/asm/daycare.s b/asm/daycare.s
index 47a84e8e0..2944f7565 100644
--- a/asm/daycare.s
+++ b/asm/daycare.s
@@ -6,446 +6,6 @@
.text
- thumb_func_start sub_8041324
-sub_8041324: @ 8041324
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- mov r10, r1
- movs r7, 0
- movs r5, 0
- mov r6, r10
- adds r6, 0x74
- movs r0, 0x1
- mov r8, r0
-_0804133E:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 4
- mov r1, r9
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _0804136E
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- movs r1, 0xC
- bl GetBoxMonData
- adds r1, r0, 0
- cmp r1, 0
- bne _0804136E
- lsls r0, r5, 1
- adds r0, r6, r0
- b _08041374
-_0804136E:
- lsls r0, r5, 1
- adds r0, r6, r0
- mov r1, r8
-_08041374:
- strh r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _0804133E
- mov r0, r10
- str r7, [r0, 0x70]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8041324
-
- thumb_func_start daycare_empty_slot
-daycare_empty_slot: @ 8041394
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r4, 0
-_0804139A:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- adds r0, r5, r0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _080413B2
- lsls r0, r4, 24
- asrs r0, 24
- b _080413C0
-_080413B2:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _0804139A
- movs r0, 0x1
- negs r0, r0
-_080413C0:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end daycare_empty_slot
-
- thumb_func_start sub_80413C8
-sub_80413C8: @ 80413C8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- mov r8, r1
- mov r0, r8
- bl daycare_empty_slot
- lsls r0, 24
- lsrs r4, r0, 24
- mov r9, r4
- adds r0, r7, 0
- bl MonHasMail
- lsls r0, 24
- cmp r0, 0
- beq _0804144A
- lsls r0, r4, 24
- asrs r0, 24
- lsls r4, r0, 3
- subs r4, r0
- lsls r4, 3
- adds r5, r4, 0
- adds r5, 0xA0
- add r5, r8
- adds r6, r5, 0
- adds r6, 0x24
- ldr r1, _08041490 @ =gSaveBlock2
- adds r0, r6, 0
- bl StringCopy
- adds r0, r6, 0
- movs r1, 0xFC
- bl PadNameString
- adds r6, 0x8
- adds r0, r7, 0
- adds r1, r6, 0
- bl pokemon_get_nick
- adds r0, r7, 0
- movs r1, 0x40
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- add r4, r8
- ldr r2, _08041494 @ =gSaveBlock1
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r4, 0xA0
- ldr r0, _08041498 @ =0x00002b4c
- adds r1, r0
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- adds r0, r7, 0
- bl TakeMailFromMon
-_0804144A:
- mov r2, r9
- lsls r4, r2, 24
- asrs r4, 24
- lsls r5, r4, 2
- adds r4, r5, r4
- lsls r4, 4
- add r4, r8
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- bl BoxMonRestorePP
- movs r0, 0x88
- lsls r0, 1
- add r0, r8
- adds r0, r5
- movs r1, 0
- str r1, [r0]
- adds r0, r7, 0
- bl ZeroMonData
- bl party_compaction
- bl CalculatePlayerPartyCount
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08041490: .4byte gSaveBlock2
-_08041494: .4byte gSaveBlock1
-_08041498: .4byte 0x00002b4c
- thumb_func_end sub_80413C8
-
- thumb_func_start daycare_send
-daycare_send: @ 804149C
- push {lr}
- ldr r0, _080414B4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080414B8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080414BC @ =gSaveBlock1 + 0x2F9C
- bl sub_80413C8
- pop {r0}
- bx r0
- .align 2, 0
-_080414B4: .4byte gLastFieldPokeMenuOpened
-_080414B8: .4byte gPlayerParty
-_080414BC: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end daycare_send
-
- thumb_func_start sub_80414C0
-sub_80414C0: @ 80414C0
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r5, 0
- adds r4, 0x50
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _08041516
- adds r0, r5, 0
- movs r1, 0xB
- bl GetBoxMonData
- adds r6, r0, 0
- cmp r6, 0
- bne _08041516
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- bl ZeroBoxMonData
- adds r0, r5, 0
- adds r0, 0xA0
- adds r4, 0x88
- adds r1, r4, 0
- movs r2, 0x38
- bl memcpy
- movs r0, 0x88
- lsls r0, 1
- adds r2, r5, r0
- adds r0, 0x4
- adds r1, r5, r0
- ldr r0, [r1]
- str r0, [r2]
- str r6, [r1]
- adds r0, r4, 0
- bl sub_80417F4
-_08041516:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80414C0
-
- thumb_func_start sub_804151C
-sub_804151C: @ 804151C
- push {r4-r7,lr}
- adds r4, r0, 0
- movs r5, 0
- ldr r7, _08041538 @ =0x0000ffff
-_08041524:
- adds r0, r4, 0
- bl TryIncrementMonLevel
- lsls r0, 24
- cmp r0, 0
- beq _08041560
- movs r6, 0x1
- adds r5, 0x1
- b _0804154C
- .align 2, 0
-_08041538: .4byte 0x0000ffff
-_0804153C:
- movs r6, 0
- cmp r0, r7
- bne _0804154C
- ldr r0, _0804156C @ =word_2024E82
- ldrh r1, [r0]
- adds r0, r4, 0
- bl DeleteFirstMoveAndGiveMoveToMon
-_0804154C:
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_803B7C8
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _0804153C
- cmp r5, 0x63
- ble _08041524
-_08041560:
- adds r0, r4, 0
- bl CalculateMonStats
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804156C: .4byte word_2024E82
- thumb_func_end sub_804151C
-
- thumb_func_start sub_8041570
-sub_8041570: @ 8041570
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x68
- adds r5, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r7, r4, 2
- adds r0, r7, r4
- lsls r0, 4
- adds r6, r5, r0
- ldr r1, _08041640 @ =gStringVar1
- adds r0, r6, 0
- bl pokemon_get_nick_
- adds r0, r6, 0
- movs r1, 0xB
- bl GetBoxMonData
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- adds r0, r6, 0
- mov r1, sp
- bl sub_803B4B4
- mov r0, sp
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _080415D8
- mov r0, sp
- movs r1, 0x19
- bl GetMonData
- movs r2, 0x88
- lsls r2, 1
- adds r1, r5, r2
- adds r1, r7
- ldr r1, [r1]
- adds r0, r1
- str r0, [sp, 0x64]
- add r2, sp, 0x64
- mov r0, sp
- movs r1, 0x19
- bl SetMonData
- mov r0, sp
- bl sub_804151C
-_080415D8:
- ldr r0, _08041644 @ =gPlayerParty
- movs r1, 0xFA
- lsls r1, 1
- adds r1, r0
- mov r8, r1
- mov r0, r8
- mov r1, sp
- movs r2, 0x64
- bl memcpy
- lsls r0, r4, 3
- subs r0, r4
- lsls r1, r0, 3
- adds r0, r5, r1
- adds r0, 0xC0
- ldrh r0, [r0]
- cmp r0, 0
- beq _08041610
- adds r4, r1, 0
- adds r4, 0xA0
- adds r4, r5, r4
- mov r0, r8
- adds r1, r4, 0
- bl GiveMailToMon2
- adds r0, r4, 0
- bl sub_80417F4
-_08041610:
- bl party_compaction
- adds r0, r6, 0
- bl ZeroBoxMonData
- movs r2, 0x88
- lsls r2, 1
- adds r0, r5, r2
- adds r0, r7
- movs r1, 0
- str r1, [r0]
- adds r0, r5, 0
- bl sub_80414C0
- bl CalculatePlayerPartyCount
- mov r0, r9
- add sp, 0x68
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08041640: .4byte gStringVar1
-_08041644: .4byte gPlayerParty
- thumb_func_end sub_8041570
-
- thumb_func_start sub_8041648
-sub_8041648: @ 8041648
- push {lr}
- ldr r0, _0804165C @ =gSaveBlock1 + 0x2F9C
- ldr r1, _08041660 @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl sub_8041570
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_0804165C: .4byte gSaveBlock1 + 0x2F9C
-_08041660: .4byte gSpecialVar_0x8004
- thumb_func_end sub_8041648
-
- thumb_func_start sub_8041664
-sub_8041664: @ 8041664
- push {r4,r5,lr}
- sub sp, 0x54
- adds r4, r0, 0
- adds r5, r1, 0
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- movs r1, 0x19
- bl GetBoxMonData
- adds r0, r5
- str r0, [sp, 0x50]
- add r2, sp, 0x50
- mov r0, sp
- movs r1, 0x19
- bl SetBoxMonData
- mov r0, sp
- bl GetLevelFromBoxMonExp
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x54
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8041664
-
thumb_func_start sub_80416A0
sub_80416A0: @ 80416A0
push {r4-r6,lr}
@@ -470,7 +30,7 @@ sub_80416A0: @ 80416A0
add r5, r8
ldr r1, [r5]
adds r0, r4, 0
- bl sub_8041664
+ bl Daycare_GetLevelAfterSteps
lsls r0, 24
lsrs r0, 24
subs r0, r6
@@ -500,7 +60,7 @@ sub_80416E8: @ 80416E8
adds r6, r0
ldr r1, _08041720 @ =gStringVar1
adds r0, r6, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
ldr r0, _08041724 @ =gStringVar2
adds r1, r5, 0
movs r2, 0
@@ -532,7 +92,7 @@ sub_8041728: @ 8041728
adds r6, r0
ldr r1, _08041768 @ =gStringVar1
adds r0, r6, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
movs r0, 0x64
adds r4, r5, 0
muls r4, r0
@@ -2065,7 +1625,7 @@ sub_80422C4: @ 80422C4
beq _080422FC
ldr r1, _0804231C @ =gStringVar1
adds r0, r6, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
adds r0, r6, 0
movs r1, 0x3
bl GetBoxMonData
@@ -2090,7 +1650,7 @@ _080422FC:
beq _08042314
ldr r1, _08042324 @ =gStringVar2
adds r0, r4, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
_08042314:
pop {r4-r6}
pop {r0}
@@ -2111,7 +1671,7 @@ sub_8042328: @ 8042328
ldr r4, _08042358 @ =gPlayerParty
adds r0, r4
ldr r1, _0804235C @ =gStringVar1
- bl pokemon_get_nick_
+ bl GetBoxMonNick
ldrb r0, [r6]
muls r0, r5
adds r0, r4
@@ -2154,7 +1714,7 @@ sp0B6_daycare: @ 8042370
_08042384: .4byte gSaveBlock1 + 0x2F9C
_08042388:
adds r0, r4, 0
- bl daycare_count_pokemon
+ bl Daycare_CountPokemon
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -2558,7 +2118,7 @@ _08042648:
adds r5, r1, r0
adds r0, r4, 0
adds r1, r5, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
adds r0, r5, 0
adds r1, r4, 0
bl MonAppendGenderSymbol
@@ -2618,7 +2178,7 @@ _080426C6:
adds r1, r6, r3
adds r1, r2
ldr r1, [r1]
- bl sub_8041664
+ bl Daycare_GetLevelAfterSteps
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
index 90ae6aaf7..2f11d4111 100644
--- a/asm/egg_hatch.s
+++ b/asm/egg_hatch.s
@@ -52,7 +52,7 @@ AddHatchedMonToParty: @ 80429EC
bl sub_8090D90
ldr r1, _08042AA4 @ =gStringVar1
adds r0, r5, 0
- bl pokemon_get_nick
+ bl GetMonNick
mov r2, sp
adds r2, 0xE
movs r0, 0x4
@@ -110,7 +110,7 @@ sub_8042ABC: @ 8042ABC
lsls r0, 4
adds r0, r5, r0
mov r1, sp
- bl pokemon_get_nick_
+ bl GetBoxMonNick
lsls r0, r4, 3
subs r0, r4
lsls r1, r0, 3
@@ -857,7 +857,7 @@ _08043124:
ldr r1, _08043150 @ =gPlayerParty
adds r0, r1
ldr r1, _08043154 @ =gStringVar1
- bl pokemon_get_nick
+ bl GetMonNick
ldr r4, _08043158 @ =gStringVar4
ldr r1, _0804315C @ =gOtherText_HatchedFromEgg
adds r0, r4, 0
@@ -898,7 +898,7 @@ _08043180:
ldr r1, _080431A8 @ =gPlayerParty
adds r0, r1
ldr r1, _080431AC @ =gStringVar1
- bl pokemon_get_nick
+ bl GetMonNick
ldr r4, _080431B0 @ =gStringVar4
ldr r1, _080431B4 @ =gOtherText_NickHatchPrompt
adds r0, r4, 0
@@ -957,7 +957,7 @@ _080431DA:
adds r0, r6
ldr r1, _08043280 @ =gStringVar3
mov r10, r1
- bl pokemon_get_nick
+ bl GetMonNick
mov r2, r9
ldr r0, [r2]
ldrb r0, [r0, 0x4]
diff --git a/data/specials.inc b/data/specials.inc
index bac45b91b..dd12775f5 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -187,7 +187,7 @@ gSpecials::
.4byte sp0B8_daycare
.4byte sp0B9_daycare_relationship_comment
.4byte sub_8042328
- .4byte daycare_send
+ .4byte Daycare_SendPokemon_Special
.4byte ChooseSendDaycareMon
.4byte ShowDaycareLevelMenu
.4byte sub_80417B8
diff --git a/include/asm.inc.h b/include/asm.inc.h
index f92017b46..3c1d52ffe 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -31,7 +31,7 @@ void StoreWordInTwoHalfwords(u16 *, u32);
void LoadWordFromTwoHalfwords(u16 *, u32 *);
// src/daycare.o
-u8 daycare_count_pokemon(u8 *);
+u8 Daycare_CountPokemon(struct BoxPokemon *);
// asm/daycare.o
void sub_8041324(struct BoxPokemon *, void *);
@@ -422,6 +422,9 @@ void sub_8134AC0(void *);
// src/player_pc.o
void NewGameInitPCItems(void);
+// asm/hall_of_fame.o
+void sub_8143648(u16 paletteTag, u8 arg1);
+
// src/diploma.o
void sub_8145D88(void);
diff --git a/include/global.h b/include/global.h
index 5edb3239f..34946c895 100644
--- a/include/global.h
+++ b/include/global.h
@@ -464,6 +464,10 @@ struct GabbyAndTyData {
u8 valB;
};
+struct RecordMixing_UnknownStruct {
+ u8 data[0x38];
+};
+
struct SaveBlock1 /* 0x02025734 */
{
/*0x00*/ struct Coords16 pos;
@@ -538,9 +542,9 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2DFC*/ u8 filler_2DFC[0x8];
/*0x2E04*/ SB_Struct sbStruct;
- /*0x2F9C*/ u8 filler_2F9C[0xA0];
- /*0x303C*/ u8 filler_303C[0x38];
- /*0x3074*/ u8 filler_3074[0x42];
+ /*0x2F9C*/ struct BoxPokemon daycareData[2];
+ /*0x303C*/ struct RecordMixing_UnknownStruct filler_303C[2];
+ /*0x30AC*/ u8 filler_30AC[0xA];
/*0x30B6*/ u8 filler_30B6;
/*0x30B7*/ u8 filler_30B7[1];
/*0x30B8*/ u8 linkBattleRecords[5][16];
diff --git a/include/pokemon.h b/include/pokemon.h
index ae02de8ca..15a028d6e 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -462,4 +462,5 @@ void MonRestorePP(struct Pokemon *);
u8 *sub_803F378(u16 itemId);
+u16 NationalPokedexNumToSpecies(u16 nationalNum);
#endif // GUARD_POKEMON_H
diff --git a/include/record_mixing.h b/include/record_mixing.h
index 39cf5bd43..72a089ca1 100644
--- a/include/record_mixing.h
+++ b/include/record_mixing.h
@@ -4,16 +4,16 @@
#include <stddef.h>
void sub_80B929C(void);
-void sub_80B92AC(void);
-void sub_80B93B0(u32 a);
-void sub_80B9450(u8 taskId);
-void sub_80B9484(u8 taskId);
+void RecordMixing_PrepareExchangePacket(void);
+void RecordMixing_ReceiveExchangePacket(u32 a);
+void Task_RecordMixing_SoundEffect(u8 taskId);
+void Task_RecordMixing_Main(u8 taskId);
void sub_80B95F0(u8 taskId);
-void sub_80B97DC(u8 taskId);
-void Task_CopyRecvBuffer(u8 taskId);
+void Task_RecordMixing_SendPacket(u8 taskId);
+void Task_RecordMixing_CopyReceiveBuffer(u8 taskId);
void sub_80B99B4(u8 taskId);
-void sub_80B99E8(u8 taskId);
-void sub_80B9A1C(u8 taskId);
+void Task_RecordMixing_ReceivePacket(u8 taskId);
+void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId);
void *LoadPtrFromTaskData(u16 *ptr);
void StorePtrInTaskData(void *ptr, u16 *data);
u8 GetMultiplayerId_(void);
diff --git a/src/credits.c b/src/credits.c
index 01af78bce..ca5553c2e 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1,12 +1,17 @@
#include "global.h"
#include "asm.h"
#include "decompress.h"
+#include "event_data.h"
#include "m4a.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
+#include "pokedex.h"
+#include "rng.h"
#include "songs.h"
#include "sound.h"
+#include "species.h"
+#include "starter_choose.h"
#include "trig.h"
asm(".set REG_BASE, 0x4000000");
@@ -15,8 +20,6 @@ asm(".set OFFSET_REG_BLDALPHA, 0x52");
asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT");
asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA");
-u32 NationalPokedexNumToSpecies(u16 nationalNum);
-
struct MonCoords
{
u8 x, y;
@@ -126,14 +129,17 @@ enum
TDE_TASK_A_ID = 2,
};
+#define POKEMON_TILE_COUNT 68
+
struct Unk201C000
{
- u16 unk0[8];
- u8 pad_10[0x78];
+ u16 unk0[POKEMON_TILE_COUNT];
u16 unk88;
u16 unk8A;
u16 unk8C;
u16 unk8E;
+ u16 unk90[386];
+ u16 unk394;
};
struct CreditsEntry
@@ -226,12 +232,12 @@ static u8 sub_8144454(u8 page, u8 taskIdA);
static void task_d_8144514(u8 taskIdD);
static bool8 sub_8144ECC(u8 data, u8 taskIdA);
static void sub_81450AC(u8 taskIdA);
-void sub_8145128(u16, u16, u16);
-static void sub_81452D0(u16 arg0, u16 arg1);
+static void sub_8145128(u16, u16, u16);
+static void sub_81452D0(u16 arg0, u16 palette);
static void spritecb_player_8145378(struct Sprite *sprite);
static void spritecb_rival_8145420(struct Sprite *sprite);
-u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3);
-void sub_81458DC(void);
+static u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 position);
+static void sub_81458DC(void);
static void vblank_8143948(void)
{
@@ -666,8 +672,7 @@ static void task_b_81441B8(u8 taskIdB)
for (i = 0; i < 5; i++)
{
- sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0,
- 9 + i * 2, 240);
+ sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0, 9 + i * 2, 240);
}
gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1;
@@ -816,8 +821,6 @@ static u8 sub_8144454(u8 page, u8 taskIdA)
return FALSE;
}
-#define UNK_DEFINE_44 (0x44)
-
static void task_d_8144514(u8 taskIdD)
{
struct Unk201C000 *r6 = &ewram1c000;
@@ -834,7 +837,7 @@ static void task_d_8144514(u8 taskIdD)
gTasks[taskIdD].data[TDD_STATE]++;
break;
case 2:
- if (r6->unk88 == UNK_DEFINE_44 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68)
+ if (r6->unk88 == POKEMON_TILE_COUNT || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68)
break;
r2 = sub_81456B4(r6->unk0[r6->unk8C], gUnknown_0840CA00[r6->unk8A][0], gUnknown_0840CA00[r6->unk8A][1], r6->unk8A);
if (r6->unk8C < r6->unk8E - 1)
@@ -866,83 +869,83 @@ static void task_d_8144514(u8 taskIdD)
void task_c_8144664(u8 taskIdC)
{
- switch (gTasks[taskIdC].data[0])
+ switch (gTasks[taskIdC].data[TDC_0])
{
case 0:
- gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12);
- gTasks[taskIdC].data[5]++;
+ gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[TDC_5]++;
break;
case 1:
if (gUnknown_0203935A != 0)
{
- gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12);
- gTasks[taskIdC].data[5]++;
+ gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[TDC_5]++;
}
else
{
- gSprites[gTasks[taskIdC].data[2]].data0 = 2;
- gTasks[taskIdC].data[5] = 0;
- gTasks[taskIdC].data[0]++;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 2;
+ gTasks[taskIdC].data[TDC_5] = 0;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 2:
- if (gTasks[taskIdC].data[5] < 64)
+ if (gTasks[taskIdC].data[TDC_5] < 64)
{
- gTasks[taskIdC].data[5]++;
- gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20);
+ gTasks[taskIdC].data[TDC_5]++;
+ gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
}
else
{
- gTasks[taskIdC].data[0]++;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 3:
- gSprites[gTasks[taskIdC].data[2]].data0 = 3;
- gSprites[gTasks[taskIdC].data[3]].data0 = 1;
- gTasks[taskIdC].data[4] = 120;
- gTasks[taskIdC].data[0]++;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 3;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 1;
+ gTasks[taskIdC].data[TDC_4] = 120;
+ gTasks[taskIdC].data[TDC_0]++;
break;
case 4:
- if (gTasks[taskIdC].data[4] != 0)
+ if (gTasks[taskIdC].data[TDC_4] != 0)
{
- gTasks[taskIdC].data[4]--;
+ gTasks[taskIdC].data[TDC_4]--;
}
else
{
- gTasks[taskIdC].data[5] = 64;
- gTasks[taskIdC].data[0]++;
+ gTasks[taskIdC].data[TDC_5] = 64;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 5:
- if (gTasks[taskIdC].data[5] > 0)
+ if (gTasks[taskIdC].data[TDC_5] > 0)
{
- gTasks[taskIdC].data[5]--;
- gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20);
+ gTasks[taskIdC].data[TDC_5]--;
+ gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
}
else
{
- gSprites[gTasks[taskIdC].data[2]].data0 = 1;
- gTasks[taskIdC].data[0]++;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 1;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 6:
- gTasks[taskIdC].data[0] = 50;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 10:
- gSprites[gTasks[taskIdC].data[3]].data0 = 2;
- gTasks[taskIdC].data[0] = 50;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 2;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 20:
- gSprites[gTasks[taskIdC].data[2]].data0 = 4;
- gTasks[taskIdC].data[0] = 50;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 4;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 30:
- gSprites[gTasks[taskIdC].data[2]].data0 = 5;
- gSprites[gTasks[taskIdC].data[3]].data0 = 3;
- gTasks[taskIdC].data[0] = 50;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 5;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 3;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 50:
- gTasks[taskIdC].data[0] = 0;
+ gTasks[taskIdC].data[TDC_0] = 0;
break;
}
}
@@ -1205,119 +1208,39 @@ static void sub_81450AC(u8 taskIdA)
gUnknown_0203935C = 1;
}
-__attribute__((naked))
-void sub_8145128(u16 arg0, u16 arg1, u16 arg2)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- adds r3, r0, 0\n\
- adds r4, r2, 0\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- lsls r1, 16\n\
- lsrs r7, r1, 16\n\
- lsls r4, 16\n\
- lsrs r5, r4, 16\n\
- ldr r0, _081451EC @ =gCreditsCopyrightEnd_Gfx\n\
- movs r6, 0xC0\n\
- lsls r6, 19\n\
- adds r3, r6\n\
- adds r1, r3, 0\n\
- bl LZ77UnCompVram\n\
- ldr r0, _081451F0 @ =gIntroCopyright_Pal\n\
- adds r1, r5, 0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- lsrs r4, 20\n\
- lsls r4, 28\n\
- lsrs r4, 16\n\
- movs r2, 0\n\
- adds r1, r4, 0x1\n\
- ldr r3, _081451F4 @ =0x000003ff\n\
-_0814515E:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r6\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, r3\n\
- bls _0814515E\n\
- movs r2, 0\n\
- adds r0, r4, 0x2\n\
- adds r6, r4, 0\n\
- adds r6, 0x17\n\
- movs r1, 0x2B\n\
- adds r1, r4\n\
- mov r12, r1\n\
- adds r4, 0x42\n\
- ldr r5, _081451F8 @ =0x060001c8\n\
- adds r3, r0, 0\n\
-_08145184:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r5\n\
- adds r1, r2, r3\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x14\n\
- bls _08145184\n\
- movs r2, 0\n\
- ldr r5, _081451FC @ =0x06000248\n\
- adds r3, r6, 0\n\
-_0814519E:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r5\n\
- adds r1, r2, r3\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x13\n\
- bls _0814519E\n\
- movs r2, 0\n\
- ldr r5, _08145200 @ =0x060002c8\n\
- mov r3, r12\n\
-_081451B8:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r5\n\
- adds r1, r2, r3\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x16\n\
- bls _081451B8\n\
- movs r2, 0\n\
- ldr r3, _08145204 @ =0x06000348\n\
-_081451D0:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r3\n\
- adds r1, r2, r4\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0xB\n\
- bls _081451D0\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_081451EC: .4byte gCreditsCopyrightEnd_Gfx\n\
-_081451F0: .4byte gIntroCopyright_Pal\n\
-_081451F4: .4byte 0x000003ff\n\
-_081451F8: .4byte 0x060001c8\n\
-_081451FC: .4byte 0x06000248\n\
-_08145200: .4byte 0x060002c8\n\
-_08145204: .4byte 0x06000348\n\
- .syntax divided\n");
+static void sub_8145128(u16 arg0, u16 arg1, u16 arg2) {
+ u16 baseTile;
+ u16 i;
+
+ LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *) (VRAM + arg0));
+ LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal));
+
+ baseTile = (arg2 / 16) << 12;
+
+ for (i = 0; i < 32 * 32; i++)
+ {
+ ((u16 *) (VRAM + arg1))[i] = baseTile + 1;
+ }
+
+ for (i = 0; i < 21; i++)
+ {
+ ((u16 *) (VRAM + arg1))[7 * 32 + 4 + i] = i + 2 + baseTile;
+ }
+
+ for (i = 0; i < 20; i++)
+ {
+ ((u16 *) (VRAM + arg1))[9 * 32 + 4 + i] = i + 23 + baseTile;
+ }
+
+ for (i = 0; i < 23; i++)
+ {
+ ((u16 *) (VRAM + arg1))[11 * 32 + 4 + i] = i + 43 + baseTile;
+ }
+
+ for (i = 0; i < 12; i++)
+ {
+ ((u16 *) (VRAM + arg1))[13 * 32 + 4 + i] = i + 66 + baseTile;
+ }
}
u16 sub_8145208(u8 arg0)
@@ -1332,106 +1255,45 @@ u16 sub_8145208(u8 arg0)
if (arg0 & (1 << 7))
{
- out |= 0x800;
+ out |= 1 << 11;
}
if (arg0 & (1 << 6))
{
- out |= 0x400;
+ out |= 1 << 10;
}
return out;
}
-__attribute__((naked))
-void sub_814524C(void *arg0, u8 arg1, u8 arg2, u16 arg3, int arg4)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0xC\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r10, r1\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r2, [sp, 0x4]\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- str r3, [sp, 0x8]\n\
- lsls r0, 16\n\
- lsrs r0, 20\n\
- lsls r0, 28\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- movs r5, 0\n\
-_0814527A:\n\
- movs r4, 0\n\
- lsls r7, r5, 1\n\
- ldr r1, [sp, 0x4]\n\
- adds r0, r1, r5\n\
- adds r2, r5, 0x1\n\
- mov r8, r2\n\
- lsls r0, 6\n\
- ldr r1, [sp, 0x8]\n\
- adds r6, r0, r1\n\
-_0814528C:\n\
- adds r0, r7, r5\n\
- adds r0, r4\n\
- ldr r2, [sp]\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- bl sub_8145208\n\
- mov r2, r10\n\
- adds r1, r2, r4\n\
- lsls r1, 1\n\
- adds r1, r6\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- adds r1, r2\n\
- add r0, r9\n\
- strh r0, [r1]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x2\n\
- bls _0814528C\n\
- mov r1, r8\n\
- lsls r0, r1, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x4\n\
- bls _0814527A\n\
- add sp, 0xC\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+void sub_814524C(u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette) {
+ u8 y, x;
+
+ const u16 tileOffset = (palette / 16) << 12;
+
+ for (y = 0; y < 5; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ ((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8145208(arg0[y * 3 + x]);
+ }
+ }
}
-static void sub_81452D0(u16 arg0, u16 arg1)
+static void sub_81452D0(u16 arg0, u16 palette)
{
- u16 i;
- u16 foo = arg1 / 16;
- u16 bar = foo * 4096;
-
- for (i = 0; i < 0x400; i++)
- ((u16 *)(VRAM + arg0))[i] = bar + 1;
-
- sub_814524C(&gUnknown_0840B83C, 3, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B84B, 7, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B85A, 11, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B85A, 16, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B869, 20, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B878, 24, 7, arg0, arg1);
+ u16 pos;
+ u16 baseTile = (palette / 16) << 12;
+
+ for (pos = 0; pos < 32 * 32; pos++)
+ ((u16 *) (VRAM + arg0))[pos] = baseTile + 1;
+
+ sub_814524C(gUnknown_0840B83C, 3, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B84B, 7, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B85A, 11, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B85A, 16, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B869, 20, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B878, 24, 7, arg0, palette);
}
static void spritecb_player_8145378(struct Sprite *sprite)
@@ -1538,268 +1400,121 @@ static void spritecb_rival_8145420(struct Sprite *sprite)
}
}
-__attribute__((naked))
-void spritecb_81454E0(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x4\n\
- adds r5, r0, 0\n\
- ldr r0, _081454F8 @ =gUnknown_0203935C\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- cmp r0, 0\n\
- beq _081454FC\n\
- adds r0, r5, 0\n\
- bl DestroySprite\n\
- b _081456A6\n\
- .align 2, 0\n\
-_081454F8: .4byte gUnknown_0203935C\n\
-_081454FC:\n\
- ldrh r0, [r5, 0x3C]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x3C]\n\
- movs r2, 0x2E\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0xA\n\
- bhi _08145544\n\
- lsls r0, 2\n\
- ldr r1, _08145514 @ =_08145518\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08145514: .4byte _08145518\n\
- .align 2, 0\n\
-_08145518:\n\
- .4byte _08145544\n\
- .4byte _0814559E\n\
- .4byte _08145620\n\
- .4byte _08145660\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145696\n\
-_08145544:\n\
- ldrb r1, [r5, 0x1]\n\
- movs r0, 0x4\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x1]\n\
- movs r0, 0x30\n\
- ldrsh r1, [r5, r0]\n\
- movs r0, 0x1F\n\
- ands r1, r0\n\
- lsls r1, 1\n\
- ldrb r2, [r5, 0x3]\n\
- movs r0, 0x3F\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x3]\n\
- movs r0, 0x10\n\
- strh r0, [r5, 0x32]\n\
- ldrh r4, [r5, 0x30]\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x80\n\
- lsls r0, 9\n\
- movs r1, 0x10\n\
- bl __divsi3\n\
- adds r1, r0, 0\n\
- str r1, [sp]\n\
- adds r0, r4, 0\n\
- movs r2, 0\n\
- movs r3, 0\n\
- bl SetOamMatrix\n\
- adds r2, r5, 0\n\
- adds r2, 0x3E\n\
- ldrb r1, [r2]\n\
- movs r0, 0x5\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- movs r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _081456A6\n\
-_0814559E:\n\
- ldrh r1, [r5, 0x32]\n\
- movs r2, 0x32\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0xFF\n\
- bgt _081455D4\n\
- adds r0, r1, 0\n\
- adds r0, 0x8\n\
- strh r0, [r5, 0x32]\n\
- ldrh r4, [r5, 0x30]\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x32\n\
- ldrsh r1, [r5, r0]\n\
- movs r0, 0x80\n\
- lsls r0, 9\n\
- bl __divsi3\n\
- adds r1, r0, 0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- str r1, [sp]\n\
- adds r0, r4, 0\n\
- movs r2, 0\n\
- movs r3, 0\n\
- bl SetOamMatrix\n\
- b _081455DA\n\
-_081455D4:\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
-_081455DA:\n\
- movs r2, 0x30\n\
- ldrsh r1, [r5, r2]\n\
- cmp r1, 0x2\n\
- beq _081456A6\n\
- cmp r1, 0x2\n\
- bgt _081455EC\n\
- cmp r1, 0x1\n\
- beq _081455F2\n\
- b _081456A6\n\
-_081455EC:\n\
- cmp r1, 0x3\n\
- beq _0814560A\n\
- b _081456A6\n\
-_081455F2:\n\
- ldrh r1, [r5, 0x3C]\n\
- movs r0, 0x3\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08145602\n\
- ldrh r0, [r5, 0x22]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x22]\n\
-_08145602:\n\
- ldrh r0, [r5, 0x20]\n\
- subs r0, 0x2\n\
- strh r0, [r5, 0x20]\n\
- b _081456A6\n\
-_0814560A:\n\
- ldrh r0, [r5, 0x3C]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _08145618\n\
- ldrh r0, [r5, 0x22]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x22]\n\
-_08145618:\n\
- ldrh r0, [r5, 0x20]\n\
- adds r0, 0x2\n\
- strh r0, [r5, 0x20]\n\
- b _081456A6\n\
-_08145620:\n\
- ldrh r1, [r5, 0x34]\n\
- movs r2, 0x34\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0\n\
- beq _08145630\n\
- subs r0, r1, 0x1\n\
- strh r0, [r5, 0x34]\n\
- b _081456A6\n\
-_08145630:\n\
- ldr r1, _0814565C @ =REG_BLDCNT\n\
- movs r2, 0xF4\n\
- lsls r2, 4\n\
- adds r0, r2, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- movs r0, 0x10\n\
- strh r0, [r1]\n\
- ldrb r1, [r5, 0x1]\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x1]\n\
- movs r0, 0x10\n\
- strh r0, [r5, 0x34]\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _081456A6\n\
- .align 2, 0\n\
-_0814565C: .4byte REG_BLDCNT\n\
-_08145660:\n\
- ldrh r1, [r5, 0x34]\n\
- movs r2, 0x34\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0\n\
- beq _08145684\n\
- subs r1, 0x1\n\
- strh r1, [r5, 0x34]\n\
- ldr r3, _08145680 @ =REG_BLDALPHA\n\
- movs r0, 0x34\n\
- ldrsh r2, [r5, r0]\n\
- movs r0, 0x10\n\
- subs r0, r2\n\
- lsls r0, 8\n\
- adds r1, r0\n\
- strh r1, [r3]\n\
- b _081456A6\n\
- .align 2, 0\n\
-_08145680: .4byte REG_BLDALPHA\n\
-_08145684:\n\
- adds r2, r5, 0\n\
- adds r2, 0x3E\n\
- ldrb r0, [r2]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- movs r0, 0xA\n\
- strh r0, [r5, 0x2E]\n\
- b _081456A6\n\
-_08145696:\n\
- ldr r0, _081456B0 @ =REG_BLDCNT\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, r5, 0\n\
- bl DestroySprite\n\
-_081456A6:\n\
- add sp, 0x4\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_081456B0: .4byte REG_BLDCNT\n\
- .syntax divided\n");
+void spritecb_81454E0(struct Sprite *sprite) {
+ if (gUnknown_0203935C)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ sprite->data7 += 1;
+ switch (sprite->data0)
+ {
+ case 0:
+ default:
+ sprite->oam.affineMode = 1;
+ sprite->oam.matrixNum = sprite->data1;
+ sprite->data2 = 16;
+ SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2);
+ sprite->invisible = FALSE;
+ sprite->data0 = 1;
+ break;
+
+ case 1:
+ if (sprite->data2 < 256)
+ {
+ sprite->data2 += 8;
+ SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2);
+ }
+ else
+ {
+ sprite->data0 += 1;
+ }
+ switch (sprite->data1)
+ {
+ case 1:
+ if ((sprite->data7 & 3) == 0)
+ {
+ sprite->pos1.y += 1;
+ }
+ sprite->pos1.x -= 2;
+ break;
+ case 2:
+ break;
+ case 3:
+ if ((sprite->data7 & 3) == 0)
+ {
+ sprite->pos1.y += 1;
+ }
+ sprite->pos1.x += 2;
+ break;
+ }
+ break;
+
+ case 2:
+ if (sprite->data3 != 0)
+ {
+ sprite->data3 -= 1;
+ }
+ else
+ {
+ REG_BLDCNT = 0xF40;
+ REG_BLDALPHA = 0x10;
+ sprite->oam.objMode = 1;
+ sprite->data3 = 16;
+ sprite->data0 += 1;
+ }
+ break;
+
+ case 3:
+ if (sprite->data3 != 0)
+ {
+ int data3;
+ vu16 *reg;
+
+ sprite->data3 -= 1;
+
+ reg = &REG_BLDALPHA;
+ data3 = 16 - sprite->data3;
+ *reg = (data3 << 8) + sprite->data3;
+ }
+ else
+ {
+ sprite->invisible = TRUE;
+ sprite->data0 = 10;
+ }
+ break;
+
+ case 10:
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroySprite(sprite);
+ break;
+
+ }
}
-#ifdef NONMATCHING
-u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3)
+static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position)
{
- u32 species;
u32 personality;
void *palette;
u8 spriteId;
u8 spriteId2;
- species = NationalPokedexNumToSpecies(nationalNum);
+ species = NationalPokedexNumToSpecies(species);
+
switch (species)
{
- case SPECIES_UNOWN:
- personality = gSaveBlock2.pokedex.unownPersonality;
+ default:
+ personality = 0;
break;
case SPECIES_SPINDA:
personality = gSaveBlock2.pokedex.spindaPersonality;
break;
- default:
- personality = 0;
+ case SPECIES_UNOWN:
+ personality = gSaveBlock2.pokedex.unownPersonality;
break;
}
@@ -1808,196 +1523,30 @@ u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3)
gMonFrontPicCoords[species].x,
gMonFrontPicCoords[species].y,
0x2000000,
- gUnknown_0840B5A0[arg3],
+ gUnknown_0840B5A0[position],
species,
personality,
1
);
palette = species_and_otid_get_pal(species, 0, 0xFFFF);
- LoadCompressedPalette(palette, 0x100 + (arg3 * 16), 0x20);
- sub_8143648(arg3, arg3);
+ LoadCompressedPalette(palette, 0x100 + (position * 16), 0x20);
+ sub_8143648(position, position);
spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
- gSprites[spriteId].oam.paletteNum = arg3;
+ gSprites[spriteId].oam.paletteNum = position;
gSprites[spriteId].oam.priority = 1;
- gSprites[spriteId].data1 = arg3 + 1;
+ gSprites[spriteId].data1 = position + 1;
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].callback = spritecb_81454E0;
spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1);
gSprites[spriteId2].data0 = spriteId;
- StartSpriteAnimIfDifferent(&gSprites[spriteId2], arg3);
+ StartSpriteAnimIfDifferent(&gSprites[spriteId2], position);
return spriteId;
}
-#else
-__attribute__((naked))
-u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x14\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r10, r1\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- str r2, [sp, 0x10]\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- mov r9, r3\n\
- adds r0, r6, 0\n\
- bl NationalPokedexNumToSpecies\n\
- adds r6, r0, 0\n\
- cmp r6, 0xC9\n\
- beq _081456F8\n\
- movs r0, 0x9A\n\
- lsls r0, 1\n\
- cmp r6, r0\n\
- beq _081456EE\n\
- movs r7, 0\n\
- b _081456FC\n\
-_081456EE:\n\
- ldr r0, _081456F4 @ =gSaveBlock2\n\
- ldr r7, [r0, 0x20]\n\
- b _081456FC\n\
- .align 2, 0\n\
-_081456F4: .4byte gSaveBlock2\n\
-_081456F8:\n\
- ldr r0, _081457E8 @ =gSaveBlock2\n\
- ldr r7, [r0, 0x1C]\n\
-_081456FC:\n\
- lsls r0, r6, 3\n\
- ldr r1, _081457EC @ =gMonFrontPicTable\n\
- adds r0, r1\n\
- ldr r1, _081457F0 @ =gMonFrontPicCoords\n\
- lsls r2, r6, 2\n\
- adds r2, r1\n\
- ldrb r1, [r2]\n\
- ldrb r2, [r2, 0x1]\n\
- movs r3, 0x80\n\
- lsls r3, 18\n\
- ldr r4, _081457F4 @ =gUnknown_0840B5A0\n\
- mov r8, r4\n\
- mov r5, r9\n\
- lsls r4, r5, 2\n\
- add r4, r8\n\
- ldr r4, [r4]\n\
- str r4, [sp]\n\
- str r6, [sp, 0x4]\n\
- str r7, [sp, 0x8]\n\
- movs r4, 0x1\n\
- str r4, [sp, 0xC]\n\
- bl LoadSpecialPokePic\n\
- ldr r2, _081457F8 @ =0x0000ffff\n\
- adds r0, r6, 0\n\
- movs r1, 0\n\
- bl species_and_otid_get_pal\n\
- lsls r5, 4\n\
- mov r8, r5\n\
- movs r1, 0x80\n\
- lsls r1, 1\n\
- add r1, r8\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
- mov r7, r9\n\
- lsls r6, r7, 24\n\
- lsrs r6, 24\n\
- mov r0, r9\n\
- adds r1, r6, 0\n\
- bl sub_8143648\n\
- ldr r0, _081457FC @ =gUnknown_02024E8C\n\
- mov r2, r10\n\
- lsls r1, r2, 16\n\
- asrs r1, 16\n\
- ldr r3, [sp, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r2, 16\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- ldr r5, _08145800 @ =gSprites\n\
- lsls r2, r4, 4\n\
- adds r2, r4\n\
- lsls r2, 2\n\
- adds r3, r2, r5\n\
- ldrb r1, [r3, 0x5]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- mov r7, r8\n\
- orrs r0, r7\n\
- movs r1, 0xD\n\
- negs r1, r1\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r3, 0x5]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0x30]\n\
- movs r0, 0x3E\n\
- adds r0, r3\n\
- mov r8, r0\n\
- ldrb r0, [r0]\n\
- orrs r0, r1\n\
- mov r1, r8\n\
- strb r0, [r1]\n\
- adds r0, r5, 0\n\
- adds r0, 0x1C\n\
- adds r2, r0\n\
- ldr r0, _08145804 @ =spritecb_81454E0\n\
- str r0, [r2]\n\
- ldr r0, _08145808 @ =gSpriteTemplate_840CAEC\n\
- movs r2, 0x20\n\
- ldrsh r1, [r3, r2]\n\
- movs r7, 0x22\n\
- ldrsh r2, [r3, r7]\n\
- movs r3, 0x1\n\
- bl CreateSprite\n\
- adds r1, r0, 0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- strh r4, [r0, 0x2E]\n\
- adds r1, r6, 0\n\
- bl StartSpriteAnimIfDifferent\n\
- adds r0, r4, 0\n\
- add sp, 0x14\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_081457E8: .4byte gSaveBlock2\n\
-_081457EC: .4byte gMonFrontPicTable\n\
-_081457F0: .4byte gMonFrontPicCoords\n\
-_081457F4: .4byte gUnknown_0840B5A0\n\
-_081457F8: .4byte 0x0000ffff\n\
-_081457FC: .4byte gUnknown_02024E8C\n\
-_08145800: .4byte gSprites\n\
-_08145804: .4byte spritecb_81454E0\n\
-_08145808: .4byte gSpriteTemplate_840CAEC\n\
- .syntax divided\n");
-}
-#endif
void spritecb_814580C(struct Sprite *sprite)
{
@@ -2015,223 +1564,79 @@ void spritecb_814580C(struct Sprite *sprite)
sprite->pos1.y = gSprites[sprite->data0].pos1.y;
}
-__attribute__((naked))
-void sub_81458DC(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- ldr r7, _0814597C @ =0x0201c000\n\
- ldr r0, _08145980 @ =0x00004023\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl GetStarterPokemon\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl SpeciesToNationalPokedexNum\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r10, r0\n\
- movs r4, 0x1\n\
- movs r5, 0\n\
- ldr r0, _08145984 @ =0x00000181\n\
- mov r8, r0\n\
-_0814590E:\n\
- adds r0, r4, 0\n\
- movs r1, 0x1\n\
- bl sub_8090D90\n\
- lsls r0, 24\n\
- adds r6, r7, 0\n\
- adds r6, 0x90\n\
- cmp r0, 0\n\
- beq _0814592C\n\
- lsls r0, r5, 1\n\
- adds r0, r6, r0\n\
- strh r4, [r0]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
-_0814592C:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, r8\n\
- bls _0814590E\n\
- adds r4, r5, 0\n\
- ldr r0, _08145984 @ =0x00000181\n\
- lsls r1, r4, 16\n\
- mov r9, r1\n\
- movs r2, 0x8E\n\
- adds r2, r7\n\
- mov r8, r2\n\
- adds r1, r7, 0\n\
- adds r1, 0x86\n\
- str r1, [sp]\n\
- cmp r4, r0\n\
- bhi _08145964\n\
- adds r1, r6, 0\n\
- movs r3, 0\n\
- adds r2, r0, 0\n\
-_08145954:\n\
- lsls r0, r4, 1\n\
- adds r0, r1, r0\n\
- strh r3, [r0]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, r2\n\
- bls _08145954\n\
-_08145964:\n\
- movs r2, 0xE5\n\
- lsls r2, 2\n\
- adds r0, r7, r2\n\
- strh r5, [r0]\n\
- mov r1, r9\n\
- lsrs r0, r1, 16\n\
- cmp r0, 0x43\n\
- bhi _08145988\n\
- mov r2, r8\n\
- strh r5, [r2]\n\
- b _0814598E\n\
- .align 2, 0\n\
-_0814597C: .4byte 0x0201c000\n\
-_08145980: .4byte 0x00004023\n\
-_08145984: .4byte 0x00000181\n\
-_08145988:\n\
- movs r0, 0x44\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
-_0814598E:\n\
- movs r5, 0\n\
- movs r2, 0xE5\n\
- lsls r2, 2\n\
- adds r4, r7, r2\n\
- mov r9, r5\n\
- b _0814599E\n\
-_0814599A:\n\
- cmp r5, 0x43\n\
- bhi _081459EE\n\
-_0814599E:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- ldrh r1, [r4]\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- lsls r1, r5, 1\n\
- adds r1, r7, r1\n\
- lsls r0, r2, 1\n\
- adds r3, r6, r0\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- mov r0, r9\n\
- strh r0, [r3]\n\
- ldrh r0, [r4]\n\
- subs r0, 0x1\n\
- strh r0, [r4]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r2, r0\n\
- beq _081459E8\n\
- ldrh r0, [r4]\n\
- lsls r0, 1\n\
- adds r0, r6, r0\n\
- ldrh r0, [r0]\n\
- strh r0, [r3]\n\
- ldrh r0, [r4]\n\
- lsls r0, 1\n\
- adds r0, r6, r0\n\
- mov r1, r9\n\
- strh r1, [r0]\n\
-_081459E8:\n\
- ldrh r0, [r4]\n\
- cmp r0, 0\n\
- bne _0814599A\n\
-_081459EE:\n\
- mov r2, r8\n\
- ldrh r0, [r2]\n\
- cmp r0, 0x43\n\
- bhi _08145A26\n\
- adds r5, r0, 0\n\
- movs r2, 0\n\
- cmp r5, 0x43\n\
- bhi _08145A5C\n\
- mov r3, r8\n\
-_08145A00:\n\
- lsls r1, r5, 1\n\
- adds r1, r7, r1\n\
- lsls r0, r2, 1\n\
- adds r0, r7, r0\n\
- ldrh r0, [r0]\n\
- strh r0, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- ldrh r0, [r3]\n\
- cmp r2, r0\n\
- bne _08145A1A\n\
- movs r2, 0\n\
-_08145A1A:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- cmp r5, 0x43\n\
- bls _08145A00\n\
- b _08145A5C\n\
-_08145A26:\n\
- movs r4, 0\n\
- ldrh r0, [r7]\n\
- cmp r0, r10\n\
- beq _08145A42\n\
-_08145A2E:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- lsls r0, r4, 1\n\
- adds r0, r7, r0\n\
- ldrh r0, [r0]\n\
- cmp r0, r10\n\
- beq _08145A42\n\
- cmp r4, 0x43\n\
- bls _08145A2E\n\
-_08145A42:\n\
- mov r1, r8\n\
- ldrh r0, [r1]\n\
- subs r0, 0x1\n\
- cmp r4, r0\n\
- bge _08145A5C\n\
- lsls r0, r4, 1\n\
- adds r0, r7, r0\n\
- ldr r2, [sp]\n\
- ldrh r1, [r2]\n\
- strh r1, [r0]\n\
- mov r0, r10\n\
- strh r0, [r2]\n\
- b _08145A62\n\
-_08145A5C:\n\
- mov r2, r10\n\
- ldr r1, [sp]\n\
- strh r2, [r1]\n\
-_08145A62:\n\
- movs r0, 0x44\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+static void sub_81458DC(void) {
+ struct Unk201C000 *unk201C000 = &ewram1c000;
+ u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_FIRST_POKE)));
+ u16 seenTypesCount;
+ u16 page;
+ u16 dexNum;
+ u16 j;
+
+ for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++)
+ {
+ if (sub_8090D90(dexNum, 1))
+ {
+ unk201C000->unk90[seenTypesCount] = dexNum;
+ seenTypesCount++;
+ }
+ }
+
+ for (dexNum = seenTypesCount; dexNum < 386; dexNum++)
+ {
+ unk201C000->unk90[dexNum] = 0;
+ }
+
+ unk201C000->unk394 = seenTypesCount;
+ if (unk201C000->unk394 < POKEMON_TILE_COUNT)
+ {
+ unk201C000->unk8E = seenTypesCount;
+ }
+ else
+ {
+ unk201C000->unk8E = POKEMON_TILE_COUNT;
+ }
+
+ j = 0;
+ do
+ {
+ page = Random() % unk201C000->unk394;
+ unk201C000->unk0[j] = unk201C000->unk90[page];
+
+ j++;
+ unk201C000->unk90[page] = 0;
+ unk201C000->unk394--;
+ if (page != unk201C000->unk394)
+ {
+ unk201C000->unk90[page] = unk201C000->unk90[unk201C000->unk394];
+ unk201C000->unk90[unk201C000->unk394] = 0;
+ }
+ }
+ while (unk201C000->unk394 != 0 && j < POKEMON_TILE_COUNT);
+
+ if (unk201C000->unk8E < POKEMON_TILE_COUNT)
+ {
+ for (j = unk201C000->unk8E, page = 0; j < POKEMON_TILE_COUNT; j++)
+ {
+ unk201C000->unk0[j] = unk201C000->unk0[page];
+
+ page++;
+ if (page == unk201C000->unk8E)
+ page = 0;
+ }
+ unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
+ }
+ else
+ {
+
+ for (dexNum = 0; unk201C000->unk0[dexNum] != starter && dexNum < POKEMON_TILE_COUNT; dexNum++);
+
+ if (dexNum < unk201C000->unk8E - 1)
+ {
+ unk201C000->unk0[dexNum] = unk201C000->unk0[POKEMON_TILE_COUNT - 1];
+ unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
+ }
+ else
+ unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
+ }
+ unk201C000->unk8E = POKEMON_TILE_COUNT;
}
diff --git a/src/daycare.c b/src/daycare.c
index 1729efb2a..92be45cfa 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,8 +1,11 @@
#include "global.h"
#include "pokemon.h"
#include "string_util.h"
+#include "asm.h"
-u8 *pokemon_get_nick(struct Pokemon *mon, u8 *dest)
+extern u8 gLastFieldPokeMenuOpened;
+
+u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
{
s8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -10,7 +13,7 @@ u8 *pokemon_get_nick(struct Pokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 *pokemon_get_nick_(struct BoxPokemon *mon, u8 *dest)
+u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
{
s8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -18,14 +21,368 @@ u8 *pokemon_get_nick_(struct BoxPokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 daycare_count_pokemon(struct BoxPokemon *daycare_data)
+u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data)
{
u8 i, count;
count = 0;
- for (i = 0; i <= 1; i++)
- if (GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0)
+ for(i = 0;i <= 1;i++)
+ if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0)
count++;
return count;
}
+
+#ifndef ASDF
+__attribute__((naked))
+void sub_8041324(struct BoxPokemon * box_pokemon, void * void_pointer)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ mov r9, r0\n\
+ mov r10, r1\n\
+ movs r7, 0\n\
+ movs r5, 0\n\
+ mov r6, r10\n\
+ adds r6, 0x74\n\
+ movs r0, 0x1\n\
+ mov r8, r0\n\
+_0804133E:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 4\n\
+ mov r1, r9\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetBoxMonData\n\
+ cmp r0, 0\n\
+ beq _0804136E\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xC\n\
+ bl GetBoxMonData\n\
+ adds r1, r0, 0\n\
+ cmp r1, 0\n\
+ bne _0804136E\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6, r0\n\
+ b _08041374\n\
+_0804136E:\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6, r0\n\
+ mov r1, r8\n\
+_08041374:\n\
+ strh r1, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x1\n\
+ bls _0804133E\n\
+ mov r0, r10\n\
+ str r7, [r0, 0x70]\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
+{
+ u8 i;
+
+ for(i = 0;i <= 1;i++)
+ if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0)
+ return i;
+
+ return -1;
+}
+
+/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished
+ s8 empty_slot;
+
+ empty_slot = Daycare_FindEmptySpot(daycare_data);
+ if(MonHasMail(mon) != 0){ // if the mon holds a mail?
+ u8 empty_slot_times_56 = empty_slot * 56;
+ u8 * something2 = ((u8 *) (daycare_data + 2)) + empty_slot_times_56 + 36;
+ StringCopy(something2, gSaveBlock2.playerName);
+ PadNameString(something2, 0xFC);
+ something2 += 8;
+ GetMonNick(mon, something2);
+ u8 pokerus = GetMonData(mon, MON_DATA_64);
+ something1 += (u8 * daycare_data)
+}*/
+
+__attribute__((naked))
+void Daycare_SendPokemon()
+{
+ // strange stack usage - happens because THUMB ARM only allows R0-R7 to be pushed/popped:
+ // all registers in reglist must be Lo registers, except that PUSH can include the LR, and POP can include the PC
+ // the ldm/stm section probably copies some struct, but I'm not sure how the code would look
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ adds r7, r0, 0\n\
+ mov r8, r1\n\
+ mov r0, r8\n\
+ bl Daycare_FindEmptySpot\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ mov r9, r4\n\
+ adds r0, r7, 0\n\
+ bl MonHasMail\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0804144A\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ lsls r4, r0, 3\n\
+ subs r4, r0\n\
+ lsls r4, 3\n\
+ adds r5, r4, 0\n\
+ adds r5, 0xA0\n\
+ add r5, r8\n\
+ adds r6, r5, 0\n\
+ adds r6, 0x24\n\
+ ldr r1, _08041490 @ =gSaveBlock2\n\
+ adds r0, r6, 0\n\
+ bl StringCopy\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xFC\n\
+ bl PadNameString\n\
+ adds r6, 0x8\n\
+ adds r0, r7, 0\n\
+ adds r1, r6, 0\n\
+ bl GetMonNick\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x40\n\
+ bl GetMonData\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ add r4, r8\n\
+ ldr r2, _08041494 @ =gSaveBlock1\n\
+ lsls r1, r0, 3\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ adds r4, 0xA0\n\
+ ldr r0, _08041498 @ =0x00002b4c\n\
+ adds r1, r0\n\
+ ldm r1!, {r0,r2,r3}\n\
+ stm r4!, {r0,r2,r3}\n\
+ ldm r1!, {r0,r2,r3}\n\
+ stm r4!, {r0,r2,r3}\n\
+ ldm r1!, {r0,r2,r3}\n\
+ stm r4!, {r0,r2,r3}\n\
+ adds r0, r7, 0\n\
+ bl TakeMailFromMon\n\
+_0804144A:\n\
+ mov r2, r9\n\
+ lsls r4, r2, 24\n\
+ asrs r4, 24\n\
+ lsls r5, r4, 2\n\
+ adds r4, r5, r4\n\
+ lsls r4, 4\n\
+ add r4, r8\n\
+ adds r0, r4, 0\n\
+ adds r1, r7, 0\n\
+ movs r2, 0x50\n\
+ bl memcpy\n\
+ adds r0, r4, 0\n\
+ bl BoxMonRestorePP\n\
+ movs r0, 0x88\n\
+ lsls r0, 1\n\
+ add r0, r8\n\
+ adds r0, r5\n\
+ movs r1, 0\n\
+ str r1, [r0]\n\
+ adds r0, r7, 0\n\
+ bl ZeroMonData\n\
+ bl party_compaction\n\
+ bl CalculatePlayerPartyCount\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08041490: .4byte gSaveBlock2\n\
+_08041494: .4byte gSaveBlock1\n\
+_08041498: .4byte 0x00002b4c\n\
+ .syntax divided\n");
+}
+
+void Daycare_SendPokemon_Special()
+{
+ Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData);
+}
+
+void sub_80417F4(u8 *);
+
+void sub_80414C0(struct BoxPokemon * daycare_data)
+{
+ u32 second_species;
+ if((GetBoxMonData(&daycare_data[1], MON_DATA_SPECIES) != 0) && ((second_species = GetBoxMonData(&daycare_data[0], MON_DATA_SPECIES)) == 0)){
+ daycare_data[0] = daycare_data[1];
+ ZeroBoxMonData(&daycare_data[1]);
+ memcpy(daycare_data + 2, (u8 *) (daycare_data + 1) + 0x88, 0x38);
+ *((u32 *)(daycare_data) + 68) = *((u32 *)(daycare_data) + 69);
+ *((u32 *)(daycare_data) + 69) = second_species;
+ sub_80417F4((u8 *) (daycare_data + 1) + 0x88);
+ }
+}
+
+u8 TryIncrementMonLevel(struct Pokemon *);
+extern u16 word_2024E82;
+
+void sub_804151C(struct Pokemon * mon)
+{
+ s32 i;
+ u8 r6;
+ u16 temp;
+
+ for(i = 0; i < 100; i++){
+ if(TryIncrementMonLevel(mon) == FALSE) goto end;
+
+ r6 = 1;
+ while((temp = sub_803B7C8(mon, r6)) != 0){
+ r6 = 0;
+ if(temp == 0xffff){
+ DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82);
+ }
+ }
+ }
+
+ end:
+
+ CalculateMonStats(mon);
+}
+
+__attribute__((naked))
+u16 sub_8041570(struct BoxPokemon * daycare_data, u8 a2){
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x68\n\
+ adds r5, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r4, r1, 24\n\
+ lsls r7, r4, 2\n\
+ adds r0, r7, r4\n\
+ lsls r0, 4\n\
+ adds r6, r5, r0\n\
+ ldr r1, _08041640 @ =gStringVar1\n\
+ adds r0, r6, 0\n\
+ bl GetBoxMonNick\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xB\n\
+ bl GetBoxMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r9, r0\n\
+ adds r0, r6, 0\n\
+ mov r1, sp\n\
+ bl sub_803B4B4\n\
+ mov r0, sp\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x64\n\
+ beq _080415D8\n\
+ mov r0, sp\n\
+ movs r1, 0x19\n\
+ bl GetMonData\n\
+ movs r2, 0x88\n\
+ lsls r2, 1\n\
+ adds r1, r5, r2\n\
+ adds r1, r7\n\
+ ldr r1, [r1]\n\
+ adds r0, r1\n\
+ str r0, [sp, 0x64]\n\
+ add r2, sp, 0x64\n\
+ mov r0, sp\n\
+ movs r1, 0x19\n\
+ bl SetMonData\n\
+ mov r0, sp\n\
+ bl sub_804151C\n\
+_080415D8:\n\
+ ldr r0, _08041644 @ =gPlayerParty\n\
+ movs r1, 0xFA\n\
+ lsls r1, 1\n\
+ adds r1, r0\n\
+ mov r8, r1\n\
+ mov r0, r8\n\
+ mov r1, sp\n\
+ movs r2, 0x64\n\
+ bl memcpy\n\
+ lsls r0, r4, 3\n\
+ subs r0, r4\n\
+ lsls r1, r0, 3\n\
+ adds r0, r5, r1\n\
+ adds r0, 0xC0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08041610\n\
+ adds r4, r1, 0\n\
+ adds r4, 0xA0\n\
+ adds r4, r5, r4\n\
+ mov r0, r8\n\
+ adds r1, r4, 0\n\
+ bl GiveMailToMon2\n\
+ adds r0, r4, 0\n\
+ bl sub_80417F4\n\
+_08041610:\n\
+ bl party_compaction\n\
+ adds r0, r6, 0\n\
+ bl ZeroBoxMonData\n\
+ movs r2, 0x88\n\
+ lsls r2, 1\n\
+ adds r0, r5, r2\n\
+ adds r0, r7\n\
+ movs r1, 0\n\
+ str r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl sub_80414C0\n\
+ bl CalculatePlayerPartyCount\n\
+ mov r0, r9\n\
+ add sp, 0x68\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_08041640: .4byte gStringVar1\n\
+_08041644: .4byte gPlayerParty\n\
+ .syntax divided");
+}
+
+extern u8 gSpecialVar_0x8004;
+
+u16 sub_8041648()
+{
+ return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004);
+}
+
+u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
+ struct BoxPokemon temp = *mon;
+ u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps;
+ SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp);
+ return GetLevelFromBoxMonExp(&temp);
+}
diff --git a/src/intro.c b/src/intro.c
index ea6edba3d..2a62892ba 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -19,7 +19,6 @@
#include "trig.h"
extern void *species_and_otid_get_pal(/*TODO: arg types*/);
-extern void sub_8143648(int, u8);
extern void sub_8143680(int, u8);
struct MonCoords
diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c
index 9f586dcb9..fd0ad773b 100644
--- a/src/mori_debug_menu.c
+++ b/src/mori_debug_menu.c
@@ -65,7 +65,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
s8 MoriDebugMenu_Egg(void)
{
- if ( daycare_count_pokemon(gSaveBlock1.filler_2F9C) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041940();
CloseMenu();
@@ -74,7 +74,7 @@ s8 MoriDebugMenu_Egg(void)
s8 MoriDebugMenu_MaleEgg(void)
{
- if ( daycare_count_pokemon(gSaveBlock1.filler_2F9C) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041950();
CloseMenu();
diff --git a/src/record_mixing.c b/src/record_mixing.c
index ddf9a5376..58722010f 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -23,7 +23,7 @@ extern u8 gUnknown_083D0288[2];
extern u8 gUnknown_083D028A[2][3];
extern u8 gUnknown_083D0290[9][4];
-extern u8 gUnknown_02038738[]; //Don't know what type this points to
+extern struct RecordMixing_UnknownStruct gUnknown_02038738[2]; //Don't know what type this points to
extern u16 gSpecialVar_0x8005;
extern u32 gUnknown_03005D2C;
extern u8 gUnknown_03000718;
@@ -36,7 +36,7 @@ extern bool8 gReceivedRemoteLinkPlayers;
void sub_80B929C(void)
{
- sub_8083A84(sub_80B9484);
+ sub_8083A84(Task_RecordMixing_Main);
}
struct PlayerRecords {
@@ -53,8 +53,10 @@ struct PlayerRecords {
extern struct PlayerRecords unk_2008000;
extern struct PlayerRecords unk_2018000;
-#ifdef NONMATCHING
-void sub_80B92AC(void)
+void sub_80BC300();
+void sub_80C045C();
+
+void RecordMixing_PrepareExchangePacket(void)
{
sub_80BC300();
sub_80C045C();
@@ -64,125 +66,17 @@ void sub_80B92AC(void)
memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40);
memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40);
memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28);
- memcpy(gUnknown_02038738, gSaveBlock1.filler_303C, 0x38);
- memcpy(gUnknown_02038738 + 0x38, gSaveBlock1.filler_3074, 0x38);
- sub_8041324(gSaveBlock1.filler_2F9C, gUnknown_02038738);
+ gUnknown_02038738[0] = gSaveBlock1.filler_303C[0];
+ gUnknown_02038738[1] = gSaveBlock1.filler_303C[1];
+ sub_8041324(gSaveBlock1.daycareData, gUnknown_02038738);
memcpy(unk_2018000.filler10AC, gUnknown_083D0280, 0x78);
memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4);
if (GetMultiplayerId() == 0)
unk_2018000.filler11C8[0] = sub_8126338();
}
-#else
-__attribute__((naked))
-void sub_80B92AC(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- bl sub_80BC300\n\
- bl sub_80C045C\n\
- ldr r6, _080B9364 @ =0x02018000\n\
- ldr r0, _080B9368 @ =recordMixingSecretBases\n\
- ldr r1, [r0]\n\
- movs r2, 0xC8\n\
- lsls r2, 4\n\
- adds r0, r6, 0\n\
- bl memcpy\n\
- movs r1, 0xC8\n\
- lsls r1, 4\n\
- adds r0, r6, r1\n\
- ldr r1, _080B936C @ =recordMixingTvShows\n\
- ldr r1, [r1]\n\
- movs r2, 0xE1\n\
- lsls r2, 2\n\
- bl memcpy\n\
- ldr r2, _080B9370 @ =0x00001004\n\
- adds r0, r6, r2\n\
- ldr r1, _080B9374 @ =gUnknown_083D0274\n\
- ldr r1, [r1]\n\
- movs r2, 0x40\n\
- bl memcpy\n\
- ldr r1, _080B9378 @ =0x00001044\n\
- adds r0, r6, r1\n\
- ldr r1, _080B937C @ =gUnknown_083D0278\n\
- ldr r1, [r1]\n\
- movs r2, 0x40\n\
- bl memcpy\n\
- ldr r2, _080B9380 @ =0x00001084\n\
- adds r0, r6, r2\n\
- ldr r1, _080B9384 @ =recordMixingEasyChatPairs\n\
- ldr r1, [r1]\n\
- movs r2, 0x28\n\
- bl memcpy\n\
- ldr r5, _080B9388 @ =gUnknown_02038738\n\
- ldr r4, _080B938C @ =gSaveBlock1\n\
- ldr r0, _080B9390 @ =0x0000303c\n\
- adds r1, r4, r0\n\
- adds r0, r5, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r2, _080B9394 @ =0x00003074\n\
- adds r1, r4, r2\n\
- adds r0, r5, 0\n\
- adds r0, 0x38\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r0, _080B9398 @ =0x00002f9c\n\
- adds r4, r0\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_8041324\n\
- ldr r1, _080B939C @ =0x000010ac\n\
- adds r0, r6, r1\n\
- ldr r1, _080B93A0 @ =gUnknown_083D0280\n\
- ldr r1, [r1]\n\
- movs r2, 0x78\n\
- bl memcpy\n\
- ldr r2, _080B93A4 @ =0x00001124\n\
- adds r0, r6, r2\n\
- ldr r1, _080B93A8 @ =gUnknown_083D0284\n\
- ldr r1, [r1]\n\
- movs r2, 0xA4\n\
- bl memcpy\n\
- bl GetMultiplayerId\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080B935C\n\
- bl sub_8126338\n\
- ldr r2, _080B93AC @ =0x000011c8\n\
- adds r1, r6, r2\n\
- strh r0, [r1]\n\
-_080B935C:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080B9364: .4byte 0x02018000\n\
-_080B9368: .4byte recordMixingSecretBases\n\
-_080B936C: .4byte recordMixingTvShows\n\
-_080B9370: .4byte 0x00001004\n\
-_080B9374: .4byte gUnknown_083D0274\n\
-_080B9378: .4byte 0x00001044\n\
-_080B937C: .4byte gUnknown_083D0278\n\
-_080B9380: .4byte 0x00001084\n\
-_080B9384: .4byte recordMixingEasyChatPairs\n\
-_080B9388: .4byte gUnknown_02038738\n\
-_080B938C: .4byte gSaveBlock1\n\
-_080B9390: .4byte 0x0000303c\n\
-_080B9394: .4byte 0x00003074\n\
-_080B9398: .4byte 0x00002f9c\n\
-_080B939C: .4byte 0x000010ac\n\
-_080B93A0: .4byte gUnknown_083D0280\n\
-_080B93A4: .4byte 0x00001124\n\
-_080B93A8: .4byte gUnknown_083D0284\n\
-_080B93AC: .4byte 0x000011c8\n\
- .syntax divided\n");
-}
-#endif
-#undef NONMATCHING
-
-void sub_80B93B0(u32 a)
+void RecordMixing_ReceiveExchangePacket(u32 a)
{
sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a);
sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
@@ -195,7 +89,7 @@ void sub_80B93B0(u32 a)
sub_80B9F3C(unk_2008000.filler11C8, a);
}
-void sub_80B9450(u8 taskId)
+void Task_RecordMixing_SoundEffect(u8 taskId)
{
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 50)
@@ -206,24 +100,23 @@ void sub_80B9450(u8 taskId)
}
#define TD_STATE 0
-
-void sub_80B9484(u8 taskId)
+void Task_RecordMixing_Main(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
switch (taskData[TD_STATE])
{
- case 0:
+ case 0: // init
sub_8007270(gSpecialVar_0x8005);
VarSet(0x4000, 1);
gUnknown_03000718 = 0;
- sub_80B92AC();
+ RecordMixing_PrepareExchangePacket();
CreateRecordMixingSprite();
taskData[TD_STATE] = 1;
taskData[10] = CreateTask(sub_80B95F0, 0x50);
- taskData[15] = CreateTask(sub_80B9450, 0x51);
+ taskData[15] = CreateTask(Task_RecordMixing_SoundEffect, 0x51);
break;
- case 1:
+ case 1: // wait for sub_80B95F0
if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 2;
@@ -237,7 +130,7 @@ void sub_80B9484(u8 taskId)
taskData[TD_STATE] = 3;
PlaySE(SE_W226);
break;
- case 3:
+ case 3: // wait for sub_80BA00C
if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 4;
@@ -247,7 +140,7 @@ void sub_80B9484(u8 taskId)
taskData[8] = 0;
}
break;
- case 4:
+ case 4: // wait 60 frames
taskData[8]++;
if (taskData[8] > 60)
taskData[TD_STATE] = 5;
@@ -275,10 +168,10 @@ void sub_80B95F0(u8 taskId)
MenuDisplayMessageBox();
MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15);
task->data[8] = 0x708;
- task->data[TD_STATE] = 0x190;
+ task->data[TD_STATE] = 400;
ClearLinkCallback_2();
break;
- case 100:
+ case 100: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
@@ -320,7 +213,7 @@ void sub_80B95F0(u8 taskId)
if (sub_800820C() == GetLinkPlayerCount_2())
task->data[TD_STATE] = 1;
break;
- case 400:
+ case 400: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
@@ -328,7 +221,7 @@ void sub_80B95F0(u8 taskId)
task->data[12] = 0;
}
break;
- case 1:
+ case 1: // wait for handshake
if (gReceivedRemoteLinkPlayers)
{
ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
@@ -342,16 +235,16 @@ void sub_80B95F0(u8 taskId)
task->data[6] = GetLinkPlayerCount_2();
task->data[TD_STATE] = 0;
task->data[5] = GetMultiplayerId_();
- task->func = sub_80B97DC;
+ task->func = Task_RecordMixing_SendPacket;
StorePtrInTaskData(&unk_2018000, &task->data[2]);
- subTaskId = CreateTask(Task_CopyRecvBuffer, 0x50);
+ subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50);
task->data[10] = subTaskId;
gTasks[subTaskId].data[0] = taskId;
//StorePtrInTaskData((void*)0x2008000, &gTasks[subTaskId].data[5]);
StorePtrInTaskData((u8 *)&unk_2018000 - 0x10000, &gTasks[subTaskId].data[5]);
break;
}
- case 5:
+ case 5: // wait 60 frames
task->data[10]++;
if (task->data[10] > 60)
{
@@ -362,9 +255,10 @@ void sub_80B95F0(u8 taskId)
}
}
-void sub_80B97DC(u8 taskId)
+void Task_RecordMixing_SendPacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
+ // does this send the data 24 times?
switch (task->data[TD_STATE])
{
@@ -392,15 +286,15 @@ void sub_80B97DC(u8 taskId)
break;
case 4:
if (!gTasks[task->data[10]].isActive)
- task->func = sub_80B9A1C;
+ task->func = Task_RecordMixing_SendPacket_SwitchToReceive;
}
}
-void Task_CopyRecvBuffer(u8 taskId)
+void Task_RecordMixing_CopyReceiveBuffer(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s32 recvStatus = GetBlockReceivedStatus();
- u32 sp8 = 0;
+ u8 handledPlayers = 0;
if (recvStatus == sub_8008198())
{
@@ -408,32 +302,27 @@ void Task_CopyRecvBuffer(u8 taskId)
for (player = 0; player < GetLinkPlayerCount(); player++)
{
- //_080B98D4
- u8 *ptr;
void *src;
u8 *dst;
if ((recvStatus >> player) & 1)
{
- ptr = LoadPtrFromTaskData(&task->data[5]);
- dst = ptr + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
+ dst = LoadPtrFromTaskData(&task->data[5]) + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
src = GetPlayerRecvBuffer(player);
- if ((u32)(task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
+ if ((task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
memcpy(dst, src, sizeof(struct PlayerRecords) - task->data[player + 1] * BUFFER_CHUNK_SIZE);
else
memcpy(dst, src, BUFFER_CHUNK_SIZE);
- //_080B993C
ResetBlockReceivedFlag(player);
task->data[player + 1]++;
if ((u16)task->data[player + 1] == 0x18)
- sp8 = (u8)(sp8 + 1);
+ handledPlayers++;
}
}
- //line 828
gTasks[task->data[0]].data[0]++;
}
//_080B998A
- if (sp8 == GetLinkPlayerCount())
+ if (handledPlayers == GetLinkPlayerCount())
DestroyTask(taskId);
}
@@ -445,18 +334,18 @@ void sub_80B99B4(u8 taskId)
DestroyTask(taskId);
}
-void sub_80B99E8(u8 taskId)
+void Task_RecordMixing_ReceivePacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->func = sub_80B99B4;
if (gUnknown_03000718 == 1)
- sub_80B93B0(task->data[5]);
+ RecordMixing_ReceiveExchangePacket(task->data[5]);
}
-void sub_80B9A1C(u8 taskId)
+void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId)
{
- gTasks[taskId].func = sub_80B99E8;
+ gTasks[taskId].func = Task_RecordMixing_ReceivePacket;
gUnknown_03000718 = 1;
}
@@ -537,6 +426,7 @@ u8 sub_80B9BBC(u16 *a)
return a[16];
}
+#undef NONMATCHING
#ifdef NONMATCHING
void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)