Finish party.c

This commit is contained in:
PikalaxALT 2021-11-11 19:58:14 -05:00
parent 02398945c1
commit bc0ff895db
4 changed files with 76 additions and 392 deletions

View File

@ -1,372 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start sub_02074670
sub_02074670: ; 0x02074670
push {r4, r5, r6, lr}
add r5, r0, #0
add r4, r1, #0
add r6, r2, #0
bpl _0207467E
bl GF_AssertFail
_0207467E:
ldr r0, [r5, #4]
cmp r6, r0
blt _02074688
bl GF_AssertFail
_02074688:
ldr r0, [r5]
cmp r6, r0
blt _02074692
bl GF_AssertFail
_02074692:
lsl r0, r6, #2
add r0, r6, r0
mov r1, #0x59
add r0, r5, r0
lsl r1, r1, #4
ldrb r2, [r0, r1]
strb r2, [r4]
add r2, r1, #1
ldrb r2, [r0, r2]
strb r2, [r4, #1]
add r2, r1, #2
ldrb r2, [r0, r2]
strb r2, [r4, #2]
add r2, r1, #3
ldrb r2, [r0, r2]
add r1, r1, #4
strb r2, [r4, #3]
ldrb r0, [r0, r1]
strb r0, [r4, #4]
pop {r4, r5, r6, pc}
.balign 4, 0
thumb_func_end sub_02074670
thumb_func_start sub_020746BC
sub_020746BC: ; 0x020746BC
push {r4, r5, r6, lr}
add r5, r0, #0
add r4, r1, #0
add r6, r2, #0
bpl _020746CA
bl GF_AssertFail
_020746CA:
ldr r0, [r5, #4]
cmp r6, r0
blt _020746D4
bl GF_AssertFail
_020746D4:
ldr r0, [r5]
cmp r6, r0
blt _020746DE
bl GF_AssertFail
_020746DE:
lsl r0, r6, #2
add r0, r6, r0
mov r1, #0x59
ldrb r2, [r4]
add r0, r5, r0
lsl r1, r1, #4
strb r2, [r0, r1]
ldrb r3, [r4, #1]
add r2, r1, #1
strb r3, [r0, r2]
ldrb r3, [r4, #2]
add r2, r1, #2
strb r3, [r0, r2]
add r2, r1, #3
ldrb r3, [r4, #3]
add r1, r1, #4
strb r3, [r0, r2]
ldrb r2, [r4, #4]
strb r2, [r0, r1]
pop {r4, r5, r6, pc}
.balign 4, 0
thumb_func_end sub_020746BC
thumb_func_start sub_02074708
sub_02074708: ; 0x02074708
push {r3, r4, r5, lr}
add r5, r0, #0
add r4, r1, #0
bpl _02074714
bl GF_AssertFail
_02074714:
ldr r0, [r5, #4]
cmp r4, r0
blt _0207471E
bl GF_AssertFail
_0207471E:
ldr r0, [r5]
cmp r4, r0
blt _02074728
bl GF_AssertFail
_02074728:
mov r0, #0x59
lsl r0, r0, #4
add r1, r5, r0
lsl r0, r4, #2
add r0, r4, r0
add r0, r1, r0
mov r1, #0
mov r2, #5
bl MI_CpuFill8
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_end sub_02074708
thumb_func_start sub_02074740
sub_02074740: ; 0x02074740
push {r3, r4, r5, r6, r7, lr}
sub sp, #8
add r4, r1, #0
add r5, r0, #0
add r6, r2, #0
cmp r4, #0
bge _02074752
bl GF_AssertFail
_02074752:
ldr r0, [r5, #4]
cmp r4, r0
blt _0207475C
bl GF_AssertFail
_0207475C:
ldr r0, [r5]
cmp r4, r0
blt _02074766
bl GF_AssertFail
_02074766:
add r1, r5, #0
mov r0, #0xec
add r1, #8
mul r0, r4
add r7, r1, r0
add r0, r7, #0
mov r1, #0xac
mov r2, #0
bl GetMonData
str r0, [sp, #4]
add r0, r6, #0
mov r1, #0xac
mov r2, #0
bl GetMonData
ldr r1, [sp, #4]
mov r2, #0x1d
sub r0, r1, r0
str r0, [sp]
_0207478E:
ldmia r6!, {r0, r1}
stmia r7!, {r0, r1}
sub r2, r2, #1
bne _0207478E
ldr r0, [r6]
mov r2, #5
str r0, [r7]
mov r0, #0x59
lsl r0, r0, #4
add r1, r5, r0
lsl r0, r4, #2
add r0, r4, r0
add r0, r1, r0
mov r1, #0
bl MI_CpuFill8
ldr r1, [r5, #4]
ldr r0, [sp]
add r0, r1, r0
str r0, [r5, #4]
add sp, #8
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_end sub_02074740
thumb_func_start sub_020747BC
sub_020747BC: ; 0x020747BC
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x10
add r5, r1, #0
add r4, r0, #0
add r6, r2, #0
cmp r5, #0
bge _020747CE
bl GF_AssertFail
_020747CE:
ldr r0, [r4, #4]
cmp r5, r0
blt _020747D8
bl GF_AssertFail
_020747D8:
ldr r0, [r4]
cmp r5, r0
blt _020747E2
bl GF_AssertFail
_020747E2:
cmp r6, #0
bge _020747EA
bl GF_AssertFail
_020747EA:
ldr r0, [r4, #4]
cmp r6, r0
blt _020747F4
bl GF_AssertFail
_020747F4:
ldr r0, [r4]
cmp r6, r0
blt _020747FE
bl GF_AssertFail
_020747FE:
mov r0, #0
mov r1, #0xec
bl AllocFromHeap
mov ip, r0
add r1, r4, #0
mov r0, #0xec
add r1, #8
mul r0, r5
add r2, r1, r0
str r2, [sp]
mov r3, ip
mov r7, #0x1d
_02074818:
ldmia r2!, {r0, r1}
stmia r3!, {r0, r1}
sub r7, r7, #1
bne _02074818
ldr r0, [r2]
add r1, r4, #0
str r0, [r3]
mov r0, #0xec
add r1, #8
mul r0, r6
add r7, r1, r0
mov r0, #0x1d
add r3, r7, #0
str r0, [sp, #4]
_02074834:
ldr r2, [sp]
ldmia r3!, {r0, r1}
stmia r2!, {r0, r1}
ldr r0, [sp, #4]
str r2, [sp]
sub r0, r0, #1
str r0, [sp, #4]
bne _02074834
ldr r1, [r3]
add r0, r2, #0
str r1, [r0]
mov r2, ip
mov r3, #0x1d
_0207484E:
ldmia r2!, {r0, r1}
stmia r7!, {r0, r1}
sub r3, r3, #1
bne _0207484E
ldr r0, [r2]
str r0, [r7]
mov r0, ip
bl FreeToHeap
mov r0, #0x59
lsl r0, r0, #4
add r3, r4, r0
lsl r0, r5, #2
add r2, r5, r0
ldrb r0, [r3, r2]
add r5, sp, #8
add r4, r3, r2
strb r0, [r5]
ldrb r0, [r4, #1]
strb r0, [r5, #1]
ldrb r0, [r4, #2]
strb r0, [r5, #2]
ldrb r0, [r4, #3]
strb r0, [r5, #3]
ldrb r0, [r4, #4]
strb r0, [r5, #4]
lsl r0, r6, #2
add r0, r6, r0
ldrb r6, [r3, r0]
add r1, r3, r0
strb r6, [r3, r2]
ldrb r2, [r1, #1]
strb r2, [r4, #1]
ldrb r2, [r1, #2]
strb r2, [r4, #2]
ldrb r2, [r1, #3]
strb r2, [r4, #3]
ldrb r2, [r1, #4]
strb r2, [r4, #4]
ldrb r2, [r5]
strb r2, [r3, r0]
ldrb r0, [r5, #1]
strb r0, [r1, #1]
ldrb r0, [r5, #2]
strb r0, [r1, #2]
ldrb r0, [r5, #3]
strb r0, [r1, #3]
ldrb r0, [r5, #4]
strb r0, [r1, #4]
mov r0, #0
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_end sub_020747BC
thumb_func_start sub_020748B8
sub_020748B8: ; 0x020748B8
push {r3, r4}
add r4, r0, #0
add r3, r1, #0
mov r2, #0xb6
_020748C0:
ldmia r4!, {r0, r1}
stmia r3!, {r0, r1}
sub r2, r2, #1
bne _020748C0
pop {r3, r4}
bx lr
thumb_func_end sub_020748B8
thumb_func_start sub_020748CC
sub_020748CC: ; 0x020748CC
push {r3, r4, r5, r6, r7, lr}
add r6, r0, #0
ldr r0, [r6, #4]
add r7, r1, #0
mov r4, #0
cmp r0, #0
ble _020748F6
add r5, r6, #0
add r5, #8
_020748DE:
add r0, r5, #0
mov r1, #0xae
mov r2, #0
bl GetMonData
cmp r7, r0
beq _020748F6
ldr r0, [r6, #4]
add r4, r4, #1
add r5, #0xec
cmp r4, r0
blt _020748DE
_020748F6:
ldr r0, [r6, #4]
cmp r4, r0
beq _02074900
mov r0, #1
pop {r3, r4, r5, r6, r7, pc}
_02074900:
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
thumb_func_end sub_020748CC
thumb_func_start SavArray_PlayerParty_get
SavArray_PlayerParty_get: ; 0x02074904
ldr r3, _0207490C ; =SavArray_get
mov r1, #2
bx r3
nop
_0207490C: .word SavArray_get
thumb_func_end SavArray_PlayerParty_get

View File

@ -3,8 +3,12 @@
#include "pokemon.h"
typedef struct PARTY_EXTRA_SUB {
u8 unk_00[5];
} PARTY_EXTRA_SUB;
typedef struct PARTY_EXTRA {
u8 unk_00[PARTY_SIZE][5];
PARTY_EXTRA_SUB unk_00[PARTY_SIZE];
} PARTY_EXTRA;
typedef struct SAVE_PARTY_T {
@ -22,11 +26,11 @@ BOOL RemoveMonFromParty(SAVE_PARTY_T *party, int slot);
int GetPartyMaxCount(const SAVE_PARTY_T *party);
int GetPartyCount(const SAVE_PARTY_T *party);
POKEMON *GetPartyMonByIndex(SAVE_PARTY_T *party, int slot);
void sub_02074670(const SAVE_PARTY_T *party, u8 *dest, int slot);
void sub_020746BC(SAVE_PARTY_T *party, const u8 *src, int slot);
void sub_02074670(const SAVE_PARTY_T *party, PARTY_EXTRA_SUB *dest, int slot);
void sub_020746BC(SAVE_PARTY_T *party, const PARTY_EXTRA_SUB *src, int slot);
void sub_02074708(SAVE_PARTY_T *party, int slot);
void sub_02074740(SAVE_PARTY_T *party, int slot, const POKEMON *src);
void sub_020747BC(SAVE_PARTY_T *party, int slotA, int slotB);
BOOL sub_020747BC(SAVE_PARTY_T *party, int slotA, int slotB);
void sub_020748B8(const SAVE_PARTY_T *src, SAVE_PARTY_T *dest);
BOOL sub_020748CC(const SAVE_PARTY_T *party, u16 species);
SAVE_PARTY_T *SavArray_PlayerParty_get(SAVEDATA *saveData);

View File

@ -215,7 +215,6 @@ Static main
Object pokemon_storage_system.o
Object unk_02074120.o
Object party.o
Object party_s.o
Object unk_02074910.o
Object unk_02074944.o
Object unk_02074E5C.o

View File

@ -45,7 +45,7 @@ BOOL AddMonToParty(SAVE_PARTY_T *party, const POKEMON *pokemon) {
return FALSE;
}
party->party.mons[party->party.curCount] = *pokemon;
MI_CpuFill8(party->extra.unk_00[party->party.curCount], 0, 5);
MI_CpuFill8(&party->extra.unk_00[party->party.curCount], 0, sizeof(PARTY_EXTRA_SUB));
party->party.curCount++;
return TRUE;
}
@ -55,14 +55,10 @@ BOOL RemoveMonFromParty(SAVE_PARTY_T *party, int slot) {
GF_ASSERT(party->party.curCount > 0);
for (; slot < party->party.curCount - 1; slot++) {
party->party.mons[slot] = party->party.mons[slot + 1];
party->extra.unk_00[slot][0] = party->extra.unk_00[slot + 1][0];
party->extra.unk_00[slot][1] = party->extra.unk_00[slot + 1][1];
party->extra.unk_00[slot][2] = party->extra.unk_00[slot + 1][2];
party->extra.unk_00[slot][3] = party->extra.unk_00[slot + 1][3];
party->extra.unk_00[slot][4] = party->extra.unk_00[slot + 1][4];
party->extra.unk_00[slot] = party->extra.unk_00[slot + 1];
}
ZeroMonData(&party->party.mons[slot]);
MI_CpuFill8(party->extra.unk_00[slot], 0, 5);
MI_CpuFill8(&party->extra.unk_00[slot], 0, sizeof(PARTY_EXTRA_SUB));
party->party.curCount--;
return TRUE;
}
@ -80,11 +76,68 @@ POKEMON *GetPartyMonByIndex(SAVE_PARTY_T *party, int slot) {
return &party->party.mons[slot];
}
void sub_02074670(const SAVE_PARTY_T *party, u8 *dest, int slot);
void sub_020746BC(SAVE_PARTY_T *party, const u8 *src, int slot);
void sub_02074708(SAVE_PARTY_T *party, int slot);
void sub_02074740(SAVE_PARTY_T *party, int slot, const POKEMON *src);
void sub_020747BC(SAVE_PARTY_T *party, int slotA, int slotB);
void sub_020748B8(const SAVE_PARTY_T *src, SAVE_PARTY_T *dest);
BOOL sub_020748CC(const SAVE_PARTY_T *party, u16 species);
SAVE_PARTY_T *SavArray_PlayerParty_get(SAVEDATA *saveData);
void sub_02074670(const SAVE_PARTY_T *party, PARTY_EXTRA_SUB *dest, int slot) {
PARTY_ASSERT_SLOT(party, slot);
*dest = party->extra.unk_00[slot];
}
void sub_020746BC(SAVE_PARTY_T *party, const PARTY_EXTRA_SUB *src, int slot) {
PARTY_ASSERT_SLOT(party, slot);
party->extra.unk_00[slot] = *src;
}
void sub_02074708(SAVE_PARTY_T *party, int slot) {
PARTY_ASSERT_SLOT(party, slot);
MI_CpuFill8(&party->extra.unk_00[slot], 0, sizeof(PARTY_EXTRA_SUB));
}
void sub_02074740(SAVE_PARTY_T *party, int slot, const POKEMON *src) {
PARTY_ASSERT_SLOT(party, slot);
{
BOOL valid = GetMonData(&party->party.mons[slot], MON_DATA_SPECIES_EXISTS, NULL) - GetMonData(src, MON_DATA_SPECIES_EXISTS, NULL);
party->party.mons[slot] = *src;
MI_CpuFill8(&party->extra.unk_00[slot], 0, sizeof(PARTY_EXTRA_SUB));
party->party.curCount += valid;
}
}
BOOL sub_020747BC(SAVE_PARTY_T *party, int slotA, int slotB) {
PARTY_ASSERT_SLOT(party, slotA);
PARTY_ASSERT_SLOT(party, slotB);
{
PARTY_EXTRA_SUB tmp_PARTY_EXTRA_SUB;
POKEMON *tmp_POKEMON;
u8 *r5;
tmp_POKEMON = AllocFromHeap(0, sizeof(POKEMON));
*tmp_POKEMON = party->party.mons[slotA];
party->party.mons[slotA] = party->party.mons[slotB];
party->party.mons[slotB] = *tmp_POKEMON;
FreeToHeap(tmp_POKEMON);
tmp_PARTY_EXTRA_SUB = party->extra.unk_00[slotA];
party->extra.unk_00[slotA] = party->extra.unk_00[slotB];
party->extra.unk_00[slotB] = tmp_PARTY_EXTRA_SUB;
}
return FALSE;
}
void sub_020748B8(const SAVE_PARTY_T *src, SAVE_PARTY_T *dest) {
*dest = *src;
}
BOOL sub_020748CC(const SAVE_PARTY_T *party, u16 species) {
int i;
for (i = 0; i < party->party.curCount; i++) {
if (species == GetMonData(&party->party.mons[i], MON_DATA_SPECIES2, NULL)) {
break;
}
}
return (i != party->party.curCount);
}
SAVE_PARTY_T *SavArray_PlayerParty_get(SAVEDATA *saveData) {
return (SAVE_PARTY_T *) SavArray_get(saveData, SAVE_PARTY);
}