mirror of
https://github.com/pret/pokeheartgold.git
synced 2025-02-26 08:09:06 +00:00
Finish unk_020557E0.c
This commit is contained in:
parent
563b4393b6
commit
ab8036814b
@ -1,255 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "unk_020557E0.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern _021D4178
|
||||
.extern sub_02055900
|
||||
.extern sub_020559B4
|
||||
.extern sub_020559D0
|
||||
.extern sub_02055A00
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_02055A48
|
||||
sub_02055A48: ; 0x02055A48
|
||||
push {r4, r5, r6, lr}
|
||||
add r5, r1, #0
|
||||
add r1, r2, #0
|
||||
add r2, r3, #0
|
||||
mov r6, #0
|
||||
bl sub_02055A00
|
||||
add r4, r0, #0
|
||||
bne _02055A5E
|
||||
add r0, r6, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
_02055A5E:
|
||||
add r0, r6, #0
|
||||
add r1, r5, #0
|
||||
_02055A62:
|
||||
add r2, r5, r0
|
||||
add r2, #0x30
|
||||
ldrb r2, [r2]
|
||||
cmp r2, #0
|
||||
bne _02055A76
|
||||
ldrb r2, [r1, #2]
|
||||
cmp r4, r2
|
||||
bne _02055A76
|
||||
ldrb r2, [r1, #3]
|
||||
add r6, r6, r2
|
||||
_02055A76:
|
||||
add r0, r0, #1
|
||||
add r1, #8
|
||||
cmp r0, #6
|
||||
blt _02055A62
|
||||
cmp r6, #0
|
||||
bne _02055A86
|
||||
mov r0, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
_02055A86:
|
||||
add r0, r6, #0
|
||||
add r0, #0x14
|
||||
lsl r0, r0, #0x10
|
||||
lsr r0, r0, #0x10
|
||||
bne _02055A94
|
||||
bl GF_AssertFail
|
||||
_02055A94:
|
||||
add r0, r6, #0
|
||||
add r0, #0x14
|
||||
lsl r0, r0, #0x10
|
||||
lsr r0, r0, #0x10
|
||||
cmp r0, #1
|
||||
bhi _02055AA4
|
||||
mov r0, #0
|
||||
b _02055AB6
|
||||
_02055AA4:
|
||||
bl LCRandom
|
||||
add r6, #0x14
|
||||
lsl r1, r6, #0x10
|
||||
lsr r1, r1, #0x10
|
||||
bl _s32_div_f
|
||||
lsl r0, r1, #0x10
|
||||
lsr r0, r0, #0x10
|
||||
_02055AB6:
|
||||
cmp r0, #0x14
|
||||
bge _02055ABE
|
||||
mov r0, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
_02055ABE:
|
||||
sub r0, #0x14
|
||||
mov r2, #0
|
||||
add r1, r5, #0
|
||||
_02055AC4:
|
||||
add r3, r5, r2
|
||||
add r3, #0x30
|
||||
ldrb r3, [r3]
|
||||
cmp r3, #0
|
||||
bne _02055AE2
|
||||
ldrb r3, [r1, #2]
|
||||
cmp r4, r3
|
||||
bne _02055AE2
|
||||
ldrb r3, [r1, #3]
|
||||
cmp r0, r3
|
||||
bge _02055AE0
|
||||
str r2, [r5, #0x3c]
|
||||
mov r0, #1
|
||||
pop {r4, r5, r6, pc}
|
||||
_02055AE0:
|
||||
sub r0, r0, r3
|
||||
_02055AE2:
|
||||
add r2, r2, #1
|
||||
add r1, #8
|
||||
cmp r2, #6
|
||||
blt _02055AC4
|
||||
bl GF_AssertFail
|
||||
mov r0, #0
|
||||
pop {r4, r5, r6, pc}
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_02055A48
|
||||
|
||||
thumb_func_start sub_02055AF4
|
||||
sub_02055AF4: ; 0x02055AF4
|
||||
push {r4, lr}
|
||||
ldr r0, [r1, #0x14]
|
||||
add r4, r2, #0
|
||||
cmp r0, #4
|
||||
beq _02055B04
|
||||
cmp r0, #5
|
||||
beq _02055B1A
|
||||
b _02055B16
|
||||
_02055B04:
|
||||
add r0, r4, #0
|
||||
bl sub_020559B4
|
||||
add r1, r0, #1
|
||||
ldr r0, [r4, #0x3c]
|
||||
add r0, r4, r0
|
||||
add r0, #0x30
|
||||
strb r1, [r0]
|
||||
pop {r4, pc}
|
||||
_02055B16:
|
||||
bl GF_AssertFail
|
||||
_02055B1A:
|
||||
pop {r4, pc}
|
||||
thumb_func_end sub_02055AF4
|
||||
|
||||
thumb_func_start sub_02055B1C
|
||||
sub_02055B1C: ; 0x02055B1C
|
||||
push {r3, r4, r5, r6, r7, lr}
|
||||
add r5, r0, #0
|
||||
mov r0, #0x20
|
||||
add r6, r1, #0
|
||||
bl AllocMonZeroed
|
||||
add r4, r0, #0
|
||||
ldr r0, [r5, #0xc]
|
||||
bl sub_020270F8
|
||||
str r0, [sp]
|
||||
add r0, r5, #0
|
||||
bl sub_020558BC
|
||||
add r1, r0, #0
|
||||
mov r0, #0xb
|
||||
bl sub_02051A98
|
||||
add r1, r5, #0
|
||||
add r7, r0, #0
|
||||
bl BattleSetup_InitFromFsys
|
||||
ldr r0, [sp]
|
||||
ldr r1, [r6, #0x3c]
|
||||
add r2, r4, #0
|
||||
bl sub_0202EC70
|
||||
add r0, r7, #0
|
||||
add r1, r4, #0
|
||||
mov r2, #1
|
||||
bl sub_02051C9C
|
||||
add r0, r4, #0
|
||||
bl FreeToHeap
|
||||
add r0, r7, #0
|
||||
pop {r3, r4, r5, r6, r7, pc}
|
||||
.balign 4, 0
|
||||
thumb_func_end sub_02055B1C
|
||||
|
||||
thumb_func_start sub_02055B68
|
||||
sub_02055B68: ; 0x02055B68
|
||||
mov r3, #0
|
||||
add r2, r3, #0
|
||||
_02055B6C:
|
||||
ldrh r1, [r0, #4]
|
||||
add r2, r2, #1
|
||||
add r0, #8
|
||||
add r3, r3, r1
|
||||
cmp r2, #6
|
||||
blt _02055B6C
|
||||
add r0, r3, #0
|
||||
bx lr
|
||||
thumb_func_end sub_02055B68
|
||||
|
||||
thumb_func_start sub_02055B7C
|
||||
sub_02055B7C: ; 0x02055B7C
|
||||
push {r4, r5, r6, r7}
|
||||
mov r3, #0
|
||||
add r5, r0, #0
|
||||
add r4, r3, #0
|
||||
mov r0, #1
|
||||
_02055B86:
|
||||
mov r1, #0
|
||||
_02055B88:
|
||||
add r2, r5, r1
|
||||
add r2, #0x30
|
||||
ldrb r2, [r2]
|
||||
cmp r0, r2
|
||||
bne _02055BC8
|
||||
lsl r1, r1, #3
|
||||
add r2, r5, r1
|
||||
ldrb r1, [r2, #6]
|
||||
ldrb r2, [r2, #7]
|
||||
cmp r0, #1
|
||||
beq _02055BB4
|
||||
mov r6, ip
|
||||
cmp r6, r1
|
||||
beq _02055BB4
|
||||
mov r6, ip
|
||||
cmp r6, r2
|
||||
beq _02055BB4
|
||||
cmp r7, r1
|
||||
beq _02055BB4
|
||||
cmp r7, r2
|
||||
beq _02055BB4
|
||||
add r4, #0xc8
|
||||
_02055BB4:
|
||||
mov r6, #1
|
||||
mov ip, r1
|
||||
lsl r6, r1
|
||||
add r1, r3, #0
|
||||
mov r3, #1
|
||||
lsl r3, r2
|
||||
orr r1, r6
|
||||
add r7, r2, #0
|
||||
orr r3, r1
|
||||
b _02055BCE
|
||||
_02055BC8:
|
||||
add r1, r1, #1
|
||||
cmp r1, #6
|
||||
blt _02055B88
|
||||
_02055BCE:
|
||||
add r0, r0, #1
|
||||
cmp r0, #7
|
||||
blt _02055B86
|
||||
cmp r3, #0
|
||||
beq _02055BE6
|
||||
mov r0, #1
|
||||
_02055BDA:
|
||||
add r1, r3, #0
|
||||
tst r1, r0
|
||||
beq _02055BE2
|
||||
add r4, #0x32
|
||||
_02055BE2:
|
||||
lsr r3, r3, #1
|
||||
bne _02055BDA
|
||||
_02055BE6:
|
||||
add r0, r4, #0
|
||||
pop {r4, r5, r6, r7}
|
||||
bx lr
|
||||
thumb_func_end sub_02055B7C
|
||||
|
||||
thumb_func_start sub_02055BEC
|
||||
sub_02055BEC: ; 0x02055BEC
|
||||
ldr r0, [r0, #0x48]
|
||||
bx lr
|
||||
thumb_func_end sub_02055BEC
|
@ -76,5 +76,6 @@ void sub_020522F0(BATTLE_SETUP *setup, FieldSystem *fsys, void *a1);
|
||||
void sub_02051F2C(BATTLE_SETUP *setup, FieldSystem *fsys, int level);
|
||||
void sub_020520B0(BATTLE_SETUP *setup, FieldSystem *fsys, PARTY *party, void *a4);
|
||||
BATTLE_SETUP* sub_02051A98(HeapID heapId, int a1);
|
||||
void sub_02051C9C(BATTLE_SETUP* setup, Pokemon* mon, int a2);
|
||||
|
||||
#endif //POKEHEARTGOLD_BATTLE_SETUP_H
|
||||
|
@ -31,7 +31,8 @@ static inline u16 LCRandRange(const u16 maximum) {
|
||||
if (maximum <= 1) {
|
||||
return 0;
|
||||
} else {
|
||||
return LCRandom() % maximum;
|
||||
u16 result = LCRandom() % maximum;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ void sub_02055828(FieldSystem *fsys);
|
||||
void sub_0202EC70(struct UnkStruct_0202EB30 *a0, int i, Pokemon *mon);
|
||||
int sub_020558D0(FieldSystem *fsys);
|
||||
int sub_020558E0(FieldSystem *fsys);
|
||||
int sub_020558F0(FieldSystem *fsys);
|
||||
u32 sub_020558F0(FieldSystem *fsys);
|
||||
BOOL sub_02055874(FieldSystem* fsys, int x, int y);
|
||||
BATTLE_SETUP* sub_0205589C(FieldSystem* fsys);
|
||||
void sub_020558AC(FieldSystem *fsys, BATTLE_SETUP *setup);
|
||||
|
3
main.lsf
3
main.lsf
@ -198,8 +198,7 @@ Static main
|
||||
Object asm/unk_020551B8.o
|
||||
Object asm/unk_02055244.o
|
||||
Object src/unk_02055418.o
|
||||
Object src/unk_020557E0_c.o
|
||||
Object asm/unk_020557E0.o
|
||||
Object src/unk_020557E0.o
|
||||
Object asm/unk_02055BF0_data.o
|
||||
Object src/unk_02055BF0.o
|
||||
Object asm/unk_02056680.o
|
||||
|
278
src/unk_020557E0.c
Normal file
278
src/unk_020557E0.c
Normal file
@ -0,0 +1,278 @@
|
||||
#include "global.h"
|
||||
#include "field_system.h"
|
||||
#include "gf_rtc.h"
|
||||
#include "game_stats.h"
|
||||
#include "save_arrays.h"
|
||||
#include "math_util.h"
|
||||
#include "battle_setup.h"
|
||||
#include "unk_02054648.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "unk_020557E0.h"
|
||||
|
||||
struct PalParkMon {
|
||||
u16 species;
|
||||
u8 encounter_tile;
|
||||
u8 encounter_rate;
|
||||
u16 score;
|
||||
u8 type1;
|
||||
u8 type2;
|
||||
};
|
||||
|
||||
struct PalParkLocal {
|
||||
struct PalParkMon mons[PARTY_SIZE];
|
||||
u8 caught_order[PARTY_SIZE];
|
||||
s32 unk_38;
|
||||
s32 encounter_index;
|
||||
s64 timestamp; // 40
|
||||
int unk_48;
|
||||
};
|
||||
|
||||
typedef enum UnkEnum_02055A00 {
|
||||
UNK_02055A00_0,
|
||||
UNK_02055A00_1,
|
||||
UNK_02055A00_2,
|
||||
UNK_02055A00_3,
|
||||
UNK_02055A00_4,
|
||||
UNK_02055A00_5,
|
||||
UNK_02055A00_6,
|
||||
UNK_02055A00_7,
|
||||
UNK_02055A00_8,
|
||||
} UnkEnum_02055A00;
|
||||
|
||||
struct PalParkLocal _021D4178;
|
||||
|
||||
void sub_02055900(u16 species, u8* dest);
|
||||
void sub_0205592C(FieldSystem* fsys, struct PalParkLocal* palpark);
|
||||
int sub_020559B4(struct PalParkLocal* palpark);
|
||||
void sub_020559D0(struct PalParkLocal* palpark);
|
||||
BOOL sub_020559E8(struct PalParkLocal* palpark);
|
||||
UnkEnum_02055A00 sub_02055A00(FieldSystem* fsys, int x, int y);
|
||||
BOOL sub_02055A48(FieldSystem* fsys, struct PalParkLocal* palpark, int x, int y);
|
||||
BATTLE_SETUP* sub_02055B1C(FieldSystem* fsys, struct PalParkLocal* palpark);
|
||||
void sub_02055AF4(FieldSystem *fsys, BATTLE_SETUP *setup, struct PalParkLocal* palpark);
|
||||
int sub_02055B68(struct PalParkLocal* palpark);
|
||||
u32 sub_02055B7C(struct PalParkLocal* palpark);
|
||||
int sub_02055BEC(struct PalParkLocal* palpark);
|
||||
|
||||
void sub_020557E0(FieldSystem* fsys) {
|
||||
s32 i;
|
||||
struct PalParkLocal* local = &_021D4178;
|
||||
for (i = 0; i < PARTY_SIZE; ++i) {
|
||||
local->caught_order[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_020557F8(FieldSystem* fsys) {
|
||||
MI_CpuClearFast(&_021D4178, sizeof _021D4178);
|
||||
sub_0205592C(fsys, &_021D4178);
|
||||
sub_020559D0(&_021D4178);
|
||||
_021D4178.timestamp = GF_RTC_DateTimeToSec();
|
||||
}
|
||||
|
||||
void sub_02055828(FieldSystem* fsys) {
|
||||
struct PalParkLocal* local = &_021D4178;
|
||||
GAME_STATS* stats = Save_GameStats_Get(fsys->savedata);
|
||||
s64 elapsed = GF_RTC_TimeDelta(local->timestamp, GF_RTC_DateTimeToSec());
|
||||
if (elapsed < 1000) {
|
||||
local->unk_48 = 2 * (1000 - elapsed);
|
||||
} else {
|
||||
local->unk_48 = 0;
|
||||
}
|
||||
GameStats_AddSpecial(stats, GAME_STAT_UNK17);
|
||||
}
|
||||
|
||||
BOOL sub_02055874(FieldSystem* fsys, int x, int y) {
|
||||
if (sub_020559E8(&_021D4178) == TRUE) {
|
||||
return sub_02055A48(fsys, &_021D4178, x, y);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BATTLE_SETUP* sub_0205589C(FieldSystem* fsys) {
|
||||
return sub_02055B1C(fsys, &_021D4178);
|
||||
}
|
||||
|
||||
void sub_020558AC(FieldSystem *fsys, BATTLE_SETUP *setup) {
|
||||
return sub_02055AF4(fsys, setup, &_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558BC(FieldSystem* fsys) {
|
||||
return 6 - sub_020559B4(&_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558D0(FieldSystem* fsys) {
|
||||
return sub_02055B68(&_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558E0(FieldSystem *fsys) {
|
||||
return sub_02055BEC(&_021D4178);
|
||||
}
|
||||
|
||||
u32 sub_020558F0(FieldSystem *fsys) {
|
||||
return sub_02055B7C(&_021D4178);
|
||||
}
|
||||
|
||||
void sub_02055900(u16 species, u8* dest) {
|
||||
GF_ASSERT(species != SPECIES_NONE && species <= SPECIES_ARCEUS);
|
||||
ReadFromNarcMemberByIdPair(dest, NARC_a_1_2_5, 0, (species - 1) * 6, 6);
|
||||
}
|
||||
|
||||
void sub_0205592C(FieldSystem* fsys, struct PalParkLocal* palpark) {
|
||||
struct UnkStruct_0202EB30* sp4 = sub_020270F8(fsys->savedata);
|
||||
Pokemon* mon = AllocMonZeroed(HEAP_ID_4);
|
||||
u8 narc_data[6];
|
||||
u16 species;
|
||||
for (int i = 0; i < PARTY_SIZE; ++i) {
|
||||
palpark->caught_order[i] = 0;
|
||||
sub_0202EC70(sp4, i, mon);
|
||||
palpark->mons[i].species = species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
sub_02055900(species, narc_data);
|
||||
if (narc_data[0] != 0) {
|
||||
palpark->mons[i].encounter_tile = narc_data[0];
|
||||
} else {
|
||||
palpark->mons[i].encounter_tile = narc_data[1] + 4;
|
||||
}
|
||||
palpark->mons[i].encounter_rate = narc_data[3];
|
||||
palpark->mons[i].score = narc_data[2];
|
||||
palpark->mons[i].type1 = GetMonData(mon, MON_DATA_TYPE_1, NULL);
|
||||
palpark->mons[i].type2 = GetMonData(mon, MON_DATA_TYPE_2, NULL);
|
||||
}
|
||||
FreeToHeap(mon);
|
||||
}
|
||||
|
||||
int sub_020559B4(struct PalParkLocal* palpark) {
|
||||
int i;
|
||||
int total = 0;
|
||||
for (i = 0; i < PARTY_SIZE; ++i) {
|
||||
if (palpark->caught_order[i] != 0) {
|
||||
++total;
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
void sub_020559D0(struct PalParkLocal* palpark) {
|
||||
u16 rnd = LCRandom() % 10;
|
||||
palpark->unk_38 = rnd + 5;
|
||||
}
|
||||
|
||||
BOOL sub_020559E8(struct PalParkLocal* palpark) {
|
||||
if (--palpark->unk_38 == 0) {
|
||||
sub_020559D0(palpark);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
UnkEnum_02055A00 sub_02055A00(FieldSystem* fsys, int x, int y) {
|
||||
int behavior = GetMetatileBehaviorAt(fsys, x, y);
|
||||
int r5 = (x >= 32 ? 1 : 0);
|
||||
r5 += (y < 32 ? 0 : 2);
|
||||
if (sub_0205B6E8(behavior)) {
|
||||
return (UnkEnum_02055A00)(r5 + UNK_02055A00_1);
|
||||
}
|
||||
if (sub_0205B778(behavior)) {
|
||||
return (UnkEnum_02055A00)(r5 + UNK_02055A00_5);
|
||||
}
|
||||
return UNK_02055A00_0;
|
||||
}
|
||||
|
||||
BOOL sub_02055A48(FieldSystem* fsys, struct PalParkLocal* palpark, int x, int y) {
|
||||
int i;
|
||||
int rnd, total_rate = 0;
|
||||
UnkEnum_02055A00 standing_tile = sub_02055A00(fsys, x, y);
|
||||
|
||||
if (standing_tile == UNK_02055A00_0) {
|
||||
return FALSE;
|
||||
}
|
||||
for (i = 0; i < PARTY_SIZE; ++i) {
|
||||
if (palpark->caught_order[i] == 0 && palpark->mons[i].encounter_tile == standing_tile) {
|
||||
total_rate += palpark->mons[i].encounter_rate;
|
||||
}
|
||||
}
|
||||
if (total_rate == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
rnd = LCRandRange(total_rate + 20);
|
||||
if (rnd < 20) {
|
||||
return FALSE;
|
||||
}
|
||||
rnd -= 20;
|
||||
for (i = 0; i < PARTY_SIZE; ++i) {
|
||||
if (palpark->caught_order[i] == 0 && palpark->mons[i].encounter_tile == standing_tile) {
|
||||
if (rnd < palpark->mons[i].encounter_rate) {
|
||||
palpark->encounter_index = i;
|
||||
return TRUE;
|
||||
} else {
|
||||
rnd -= palpark->mons[i].encounter_rate;
|
||||
}
|
||||
}
|
||||
}
|
||||
GF_ASSERT(0);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_02055AF4(FieldSystem *fsys, BATTLE_SETUP *setup, struct PalParkLocal* palpark) {
|
||||
switch (setup->winFlag) {
|
||||
case 4:
|
||||
palpark->caught_order[palpark->encounter_index] = sub_020559B4(palpark) + 1;
|
||||
break;
|
||||
case 5:
|
||||
break;
|
||||
default:
|
||||
GF_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
BATTLE_SETUP* sub_02055B1C(FieldSystem* fsys, struct PalParkLocal* palpark) {
|
||||
Pokemon* mon = AllocMonZeroed(HEAP_ID_32);
|
||||
struct UnkStruct_0202EB30* migratedMons = sub_020270F8(fsys->savedata);
|
||||
BATTLE_SETUP* ret = sub_02051A98(HEAP_ID_FIELD, sub_020558BC(fsys));
|
||||
BattleSetup_InitFromFsys(ret, fsys);
|
||||
sub_0202EC70(migratedMons, palpark->encounter_index, mon);
|
||||
sub_02051C9C(ret, mon, 1);
|
||||
FreeToHeap(mon);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int sub_02055B68(struct PalParkLocal* palpark) {
|
||||
int i, score = 0;
|
||||
for (i = 0; i < PARTY_SIZE; ++i) {
|
||||
score += palpark->mons[i].score;
|
||||
}
|
||||
return score;
|
||||
}
|
||||
|
||||
u32 sub_02055B7C(struct PalParkLocal* palpark) {
|
||||
int j, i;
|
||||
u8 type1, type2, last_type1, last_type2;
|
||||
u32 seen_types = 0, score = 0;
|
||||
for (i = 1; i < PARTY_SIZE + 1; ++i) {
|
||||
for (j = 0; j < PARTY_SIZE; ++j) {
|
||||
if (palpark->caught_order[j] == i) {
|
||||
type1 = palpark->mons[j].type1;
|
||||
type2 = palpark->mons[j].type2;
|
||||
if (i != 1 && last_type1 != type1 && last_type1 != type2 && last_type2 != type1 && last_type2 != type2) {
|
||||
score += 200;
|
||||
}
|
||||
last_type1 = type1;
|
||||
last_type2 = type2;
|
||||
seen_types |= 1 << type1;
|
||||
seen_types |= 1 << type2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (seen_types != 0) {
|
||||
if (seen_types & 1) {
|
||||
score += 50;
|
||||
}
|
||||
seen_types >>= 1;
|
||||
}
|
||||
return score;
|
||||
}
|
||||
|
||||
int sub_02055BEC(struct PalParkLocal* palpark) {
|
||||
return palpark->unk_48;
|
||||
}
|
@ -1,168 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "field_system.h"
|
||||
#include "gf_rtc.h"
|
||||
#include "game_stats.h"
|
||||
#include "save_arrays.h"
|
||||
#include "math_util.h"
|
||||
#include "battle_setup.h"
|
||||
#include "unk_02054648.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "unk_020557E0.h"
|
||||
|
||||
struct UnkStruct_021D4178_sub {
|
||||
u16 species;
|
||||
u8 unk_2;
|
||||
u8 unk_3;
|
||||
u16 unk_4;
|
||||
u8 type1;
|
||||
u8 type2;
|
||||
};
|
||||
|
||||
struct UnkStruct_021D4178 {
|
||||
struct UnkStruct_021D4178_sub unk_00[PARTY_SIZE];
|
||||
u8 unk_30[PARTY_SIZE];
|
||||
u8 filler_36[2];
|
||||
s32 unk_38;
|
||||
s32 unk_3C;
|
||||
s64 timestamp; // 40
|
||||
int unk_48;
|
||||
};
|
||||
|
||||
struct UnkStruct_021D4178 _021D4178;
|
||||
|
||||
void sub_02055900(u16 species, u8* dest);
|
||||
void sub_0205592C(FieldSystem* fsys, struct UnkStruct_021D4178* unk);
|
||||
int sub_020559B4(struct UnkStruct_021D4178* unk);
|
||||
void sub_020559D0(struct UnkStruct_021D4178* unk);
|
||||
BOOL sub_020559E8(struct UnkStruct_021D4178* unk);
|
||||
int sub_02055A00(FieldSystem* fsys, int x, int y);
|
||||
BOOL sub_02055A48(FieldSystem* fsys, struct UnkStruct_021D4178* unk, int x, int y);
|
||||
BATTLE_SETUP* sub_02055B1C(FieldSystem* fsys, struct UnkStruct_021D4178* unk);
|
||||
void sub_02055AF4(FieldSystem *fsys, BATTLE_SETUP *setup, struct UnkStruct_021D4178* unk);
|
||||
int sub_02055B68(struct UnkStruct_021D4178* unk);
|
||||
int sub_02055BEC(struct UnkStruct_021D4178* unk);
|
||||
int sub_02055B7C(struct UnkStruct_021D4178* unk);
|
||||
|
||||
void sub_020557E0(FieldSystem* fsys) {
|
||||
s32 i;
|
||||
struct UnkStruct_021D4178* r3 = &_021D4178;
|
||||
for (i = 0; i < 6; ++i) {
|
||||
r3->unk_30[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_020557F8(FieldSystem* fsys) {
|
||||
MI_CpuClearFast(&_021D4178, sizeof _021D4178);
|
||||
sub_0205592C(fsys, &_021D4178);
|
||||
sub_020559D0(&_021D4178);
|
||||
_021D4178.timestamp = GF_RTC_DateTimeToSec();
|
||||
}
|
||||
|
||||
void sub_02055828(FieldSystem* fsys) {
|
||||
struct UnkStruct_021D4178* r4 = &_021D4178;
|
||||
GAME_STATS* stats = Save_GameStats_Get(fsys->savedata);
|
||||
s64 elapsed = GF_RTC_TimeDelta(r4->timestamp, GF_RTC_DateTimeToSec());
|
||||
if (elapsed < 1000) {
|
||||
r4->unk_48 = 2 * (1000 - elapsed);
|
||||
} else {
|
||||
r4->unk_48 = 0;
|
||||
}
|
||||
GameStats_AddSpecial(stats, GAME_STAT_UNK17);
|
||||
}
|
||||
|
||||
BOOL sub_02055874(FieldSystem* fsys, int x, int y) {
|
||||
if (sub_020559E8(&_021D4178) == TRUE) {
|
||||
return sub_02055A48(fsys, &_021D4178, x, y);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BATTLE_SETUP* sub_0205589C(FieldSystem* fsys) {
|
||||
return sub_02055B1C(fsys, &_021D4178);
|
||||
}
|
||||
|
||||
void sub_020558AC(FieldSystem *fsys, BATTLE_SETUP *setup) {
|
||||
return sub_02055AF4(fsys, setup, &_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558BC(FieldSystem* fsys) {
|
||||
return 6 - sub_020559B4(&_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558D0(FieldSystem* fsys) {
|
||||
return sub_02055B68(&_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558E0(FieldSystem *fsys) {
|
||||
return sub_02055BEC(&_021D4178);
|
||||
}
|
||||
|
||||
int sub_020558F0(FieldSystem *fsys) {
|
||||
return sub_02055B7C(&_021D4178);
|
||||
}
|
||||
|
||||
void sub_02055900(u16 species, u8* dest) {
|
||||
GF_ASSERT(species != SPECIES_NONE && species <= SPECIES_ARCEUS);
|
||||
ReadFromNarcMemberByIdPair(dest, NARC_a_1_2_5, 0, (species - 1) * 6, 6);
|
||||
}
|
||||
|
||||
void sub_0205592C(FieldSystem* fsys, struct UnkStruct_021D4178* unk) {
|
||||
struct UnkStruct_0202EB30* sp4 = sub_020270F8(fsys->savedata);
|
||||
Pokemon* mon = AllocMonZeroed(HEAP_ID_4); // r4
|
||||
u8 sp8[6];
|
||||
u16 species;
|
||||
for (int i = 0; i < PARTY_SIZE; ++i) {
|
||||
unk->unk_30[i] = 0;
|
||||
sub_0202EC70(sp4, i, mon);
|
||||
unk->unk_00[i].species = species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
sub_02055900(species, sp8);
|
||||
if (sp8[0] != 0) {
|
||||
unk->unk_00[i].unk_2 = sp8[0];
|
||||
} else {
|
||||
unk->unk_00[i].unk_2 = sp8[1] + 4;
|
||||
}
|
||||
unk->unk_00[i].unk_3 = sp8[3];
|
||||
unk->unk_00[i].unk_4 = sp8[2];
|
||||
unk->unk_00[i].type1 = GetMonData(mon, MON_DATA_TYPE_1, NULL);
|
||||
unk->unk_00[i].type2 = GetMonData(mon, MON_DATA_TYPE_2, NULL);
|
||||
}
|
||||
FreeToHeap(mon);
|
||||
}
|
||||
|
||||
int sub_020559B4(struct UnkStruct_021D4178* unk) {
|
||||
int i;
|
||||
int total = 0;
|
||||
for (i = 0; i < PARTY_SIZE; ++i) {
|
||||
if (unk->unk_30[i]) {
|
||||
++total;
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
void sub_020559D0(struct UnkStruct_021D4178* unk) {
|
||||
u16 rnd = LCRandom() % 10;
|
||||
unk->unk_38 = rnd + 5;
|
||||
}
|
||||
|
||||
BOOL sub_020559E8(struct UnkStruct_021D4178* unk) {
|
||||
if (--unk->unk_38 == 0) {
|
||||
sub_020559D0(unk);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int sub_02055A00(FieldSystem* fsys, int x, int y) {
|
||||
int behavior = GetMetatileBehaviorAt(fsys, x, y);
|
||||
int r5 = (x >= 32 ? 1 : 0);
|
||||
r5 += (y < 32 ? 0 : 2);
|
||||
if (sub_0205B6E8(behavior)) {
|
||||
return r5 + 1;
|
||||
}
|
||||
if (sub_0205B778(behavior)) {
|
||||
return r5 + 5;
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user