mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-06-02 21:54:45 -05:00
Finish party.c
This commit is contained in:
parent
02398945c1
commit
bc0ff895db
372
asm/party_s.s
372
asm/party_s.s
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
1
main.lsf
1
main.lsf
|
|
@ -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
|
||||
|
|
|
|||
83
src/party.c
83
src/party.c
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user