mirror of
https://github.com/pret/pokestadium.git
synced 2026-08-28 05:44:22 -05:00
Merge pull request #249 from dplewis/frag1-various-functions
Some checks are pending
C/C++ CI / build (push) Waiting to run
Some checks are pending
C/C++ CI / build (push) Waiting to run
Match fragment1 functions
This commit is contained in:
@@ -71,6 +71,7 @@ gSIEventMesgBuf = 0x800A73F8;
|
||||
gEepromMesgQueue = 0x800A7400;
|
||||
gEepromMesgBuf = 0x800A73FC;
|
||||
.L8120A860 = 0x8120A860;
|
||||
hdwrBugFlag = 0x8120EA50; // defined:true size:0x4
|
||||
D_8780FA30 = 0x8780FA30; // size:0x8
|
||||
miniShowHUB = 0x87906044;
|
||||
D_87906048 = 0x87906048;
|
||||
|
||||
@@ -278,8 +278,84 @@ s32 func_812005D8(unk_D_8122B2C0* arg0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 func_812006AC(unk_D_8122B2C0* arg0);
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_7F9A0/func_812006AC.s")
|
||||
s32 func_812006AC(unk_D_8122B2C0* arg0) {
|
||||
s32 var_s1 = 0;
|
||||
s32 var_s2;
|
||||
s32 var_s2_2;
|
||||
s32 var_s4;
|
||||
s32 var_v1;
|
||||
u32 var_s3;
|
||||
u8* var_s0;
|
||||
u32 offset;
|
||||
s32 i;
|
||||
u32 temp;
|
||||
var_v1 = func_812005D8(arg0);
|
||||
var_s0 = arg0->transferBuffer;
|
||||
var_s3 = arg0->gbAddress;
|
||||
var_s4 = arg0->transferSize;
|
||||
|
||||
if (var_v1 == 0 && var_s3 < 0x4000U) {
|
||||
temp = var_s3;
|
||||
temp += var_s4;
|
||||
if (temp >= 0x4001U) {
|
||||
var_s2 = 0x4000 - var_s3;
|
||||
} else {
|
||||
var_s2 = var_s4;
|
||||
}
|
||||
|
||||
var_v1 = osGbpakReadWrite(&arg0->pfs, 0, var_s3, var_s0, var_s2);
|
||||
|
||||
if (var_v1 == 0) {
|
||||
var_v1 = var_s2;
|
||||
|
||||
while (var_v1 != 0) {
|
||||
var_s1 += *var_s0;
|
||||
var_s0++;
|
||||
var_v1--;
|
||||
}
|
||||
var_s4 -= var_s2;
|
||||
var_s3 = 0x4000;
|
||||
}
|
||||
}
|
||||
|
||||
while (var_v1 == 0 && var_s4 != 0) {
|
||||
var_v1 = func_812001E4(arg0, var_s3 >> 14);
|
||||
if (var_v1 == 0) {
|
||||
offset = var_s3 & 0x3FFF;
|
||||
temp = offset;
|
||||
temp += var_s4;
|
||||
if (temp >= 0x4001U) {
|
||||
var_s2_2 = 0x4000 - offset;
|
||||
} else {
|
||||
var_s2_2 = var_s4;
|
||||
}
|
||||
|
||||
var_v1 = osGbpakReadWrite(&arg0->pfs, 0, (offset | 0x4000), var_s0, var_s2_2);
|
||||
|
||||
if (var_v1 == 0) {
|
||||
var_v1 = var_s2_2;
|
||||
|
||||
while (var_v1 != 0) {
|
||||
var_s1 += *var_s0;
|
||||
var_s0++;
|
||||
var_v1--;
|
||||
}
|
||||
|
||||
var_s4 -= var_s2_2;
|
||||
var_s3 = (var_s3 + 0x4000) & ~0x3FFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (var_v1 == 0) {
|
||||
var_v1 = func_8120019C(arg0);
|
||||
if (var_v1 == 0) {
|
||||
arg0->unk_5D70[0] += var_s1;
|
||||
}
|
||||
}
|
||||
|
||||
return var_v1;
|
||||
}
|
||||
|
||||
s32 func_812008C8(unk_D_8122B2C0* arg0, s32 arg1) {
|
||||
s32 temp_v0;
|
||||
@@ -384,7 +460,26 @@ void func_812015EC(u16* dst, u16* src, s32 mode, s32 width, s32 height) {
|
||||
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_7F9A0/func_812016DC.s")
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
void func_812018C0(u16* arg0, s32 arg1, u16* arg2, s32 arg3, s32 arg4) {
|
||||
s32 r = arg1 & 0xF800;
|
||||
s32 g = arg1 & 0x7C0;
|
||||
s32 b = arg1 & 0x3E;
|
||||
s32 x;
|
||||
s32 y;
|
||||
|
||||
for (y = 0; y < arg4; y++) {
|
||||
u16* dst = &arg0[y * 160];
|
||||
u16* src = &arg2[y * arg3];
|
||||
for (x = 0; x < arg3; x++) {
|
||||
s32 intensity = (s32) (src[x] & 0x3E) >> 1;
|
||||
dst[x] = (((r * intensity) / 31) & 0xF800) | (((g * intensity) / 31) & 0x7C0) | (((b * intensity) / 31) & 0x3E);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_7F9A0/func_812018C0.s")
|
||||
#endif
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
void func_81201DDC(u16* dst, u8* alpha_map, s32 color, s32 width, s32 height, u32 alpha_stride) {
|
||||
@@ -532,7 +627,7 @@ void func_8120241C(void);
|
||||
void func_812029B0(u8*, u16 (*)[6][0x640], s32, s32);
|
||||
void func_812070A0(void);
|
||||
void func_8120735C(s32);
|
||||
void func_81208C08(s32, s32, s32);
|
||||
void func_81208C08(u16, u8, u16);
|
||||
void func_81208D7C(void);
|
||||
void func_81208E28(unk_D_8122B2F8*);
|
||||
void func_81208F94(void);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#include "global.h"
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
s32 osGbSetNextBuffer(void* bufPtr, u32 size) {
|
||||
static u8 hdwrBugFlag = FALSE;
|
||||
char* bptr;
|
||||
@@ -50,6 +49,3 @@ s32 osGbSetNextBuffer(void* bufPtr, u32 size) {
|
||||
IO_WRITE(AI_LEN_REG, size);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_86C30/osGbSetNextBuffer.s")
|
||||
#endif
|
||||
|
||||
@@ -22,7 +22,13 @@ typedef struct unk_func_81208D7C {
|
||||
/* 0x2C */ char unk2C[0x1];
|
||||
/* 0x2D */ u8 unk_2D;
|
||||
/* 0x2E */ u8 unk_2E;
|
||||
/* 0x2F */ char unk2F[0xD];
|
||||
/* 0x2F */ char unk2F[0x1];
|
||||
/* 0x30 */ u32 unk_30;
|
||||
/* 0x34 */ u32 unk_34;
|
||||
/* 0x38 */ u8 unk_38;
|
||||
/* 0x39 */ u8 unk_39;
|
||||
/* 0x3A */ u8 unk_3A;
|
||||
/* 0x3B */ u8 unk_3B;
|
||||
/* 0x3C */ u8 unk_3C;
|
||||
/* 0x3D */ char unk3D[0x3];
|
||||
/* 0x40 */ u32 unk_40;
|
||||
@@ -51,6 +57,8 @@ extern s32 D_8120EACC;
|
||||
extern s32 D_8120EAC4;
|
||||
extern s32 D_8120EA60;
|
||||
extern u32 D_8120EA80;
|
||||
extern s32 D_8120EAD0;
|
||||
extern u8 D_8120EB14[];
|
||||
extern s32 D_8120EB78;
|
||||
extern s32 D_8120EB7C;
|
||||
|
||||
@@ -162,9 +170,168 @@ s32 func_81207698(u32, s32);
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_86CB0/func_81207698.s")
|
||||
#endif
|
||||
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_86CB0/func_81207774.s")
|
||||
u16 func_81207774(void) {
|
||||
u16 var_t0;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_86CB0/func_81207A60.s")
|
||||
if (D_8122C798.unk_00 == 0) {
|
||||
if (D_8122C798.unk_3C == 0) {
|
||||
return 0U;
|
||||
}
|
||||
D_8122C798.unk_3C--;
|
||||
D_8122C798.unk_20 = D_8122C798.unk_3C;
|
||||
D_8122C798.unk_0C = (s32) D_8122C798.unk_40;
|
||||
}
|
||||
if ((s32) D_8122C798.unk_10 <= 0) {
|
||||
D_8122C798.unk_4C = 1U;
|
||||
} else if (((s32) D_8122C798.unk_10 >= 0x7FF) && (D_8122C798.unk_39 == 0)) {
|
||||
D_8122C798.unk_4C = 1U;
|
||||
} else {
|
||||
D_8122C798.unk_4C = 0U;
|
||||
}
|
||||
{
|
||||
s32 temp_v0 = func_81207698(D_8122C798.unk_3B, D_8122C798.unk_08.unk_00);
|
||||
D_8122C798.unk_08.unk_02 += D_8122C798.unk_0C;
|
||||
D_8122C798.unk_08.unk_02 &= 0x1FFFFF;
|
||||
if (D_8122C798.unk_4C == 1) {
|
||||
if (D_8122C798.unk_3C != 0) {
|
||||
D_8122C798.unk_3C--;
|
||||
}
|
||||
var_t0 = ((temp_v0 & 0xFFFF) * D_8122C798.unk_3C);
|
||||
} else {
|
||||
D_8122C798.unk_40 = (s32) D_8122C798.unk_0C;
|
||||
D_8122C798.unk_3C = (u8) D_8122C798.unk_20;
|
||||
var_t0 = ((temp_v0 & 0xFFFF) * D_8122C798.unk_20);
|
||||
}
|
||||
}
|
||||
if ((D_8122C798.unk_3A != 0) && (((++D_8122C798.unk_30 % (u32) D_8122C798.unk_34) == 0))) {
|
||||
s32 temp_a2 = ((s32) D_8122C798.unk_10 >> D_8122C798.unk_38) & 0xFFFF;
|
||||
switch (D_8122C798.unk_39) {
|
||||
case 0:
|
||||
D_8122C798.unk_10 += temp_a2;
|
||||
break;
|
||||
case 1:
|
||||
D_8122C798.unk_10 = (D_8122C798.unk_10 - temp_a2) - 1;;
|
||||
break;
|
||||
}
|
||||
if (D_8122C798.unk_10 <= 0) {
|
||||
D_8122C798.unk_00 = 0U;
|
||||
return var_t0;
|
||||
} else {
|
||||
if ((D_8122C798.unk_10 >= 0x800) && (D_8122C798.unk_39 == 0)) {
|
||||
D_8122C798.unk_10 = 0x7FFU;
|
||||
D_8122C798.unk_00 = 0U;
|
||||
}
|
||||
D_8122C798.unk_0C = func_812075C0(D_8122C798.unk_10);
|
||||
}
|
||||
}
|
||||
if (D_8122C798.unk_28 != 0) {
|
||||
D_8122C798.unk_24++;
|
||||
if ((D_8122C798.unk_24 % (u32) D_8122C798.unk_28) == 0) {
|
||||
switch (D_8122C798.unk_2E) {
|
||||
case 0:
|
||||
if (D_8122C798.unk_2D != 0) {
|
||||
D_8122C798.unk_2D--;
|
||||
}
|
||||
if (!D_8122C798.unk_2D) {
|
||||
D_8122C798.unk_00 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (D_8122C798.unk_2D < 0xF) {
|
||||
D_8122C798.unk_2D++;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
D_8122C798.unk_20 = D_8120EB14[D_8122C798.unk_2D];
|
||||
}
|
||||
} else {
|
||||
D_8122C798.unk_20 = D_8120EB14[D_8122C798.unk_2D];
|
||||
}
|
||||
if (D_8122C798.unk_18 == 1U) {
|
||||
if (D_8122C798.unk_14 != 0) {
|
||||
D_8122C798.unk_14--;
|
||||
}
|
||||
if (D_8122C798.unk_14 == 0) {
|
||||
D_8122C798.unk_00 = 0U;
|
||||
}
|
||||
}
|
||||
return var_t0;
|
||||
}
|
||||
|
||||
s32 func_81207A60(void) {
|
||||
s32 temp_v0;
|
||||
s32 var_a3;
|
||||
u8 var_v0;
|
||||
|
||||
if (D_8122C7E8.unk_00 == 0) {
|
||||
if (D_8122C7E8.unk_3C == 0) {
|
||||
return 0;
|
||||
}
|
||||
D_8122C7E8.unk_3C--;
|
||||
D_8122C7E8.unk_20 = D_8122C7E8.unk_3C;
|
||||
D_8122C7E8.unk_0C = (s32) D_8122C7E8.unk_40;
|
||||
}
|
||||
if ((s32) D_8122C7E8.unk_10 >= 0x7FF) {
|
||||
D_8122C7E8.unk_4C = 1U;
|
||||
} else {
|
||||
D_8122C7E8.unk_4C = 0U;
|
||||
}
|
||||
temp_v0 = func_81207698(D_8122C7E8.unk_3B, D_8122C7E8.unk_08.unk_00);
|
||||
D_8122C7E8.unk_08.unk_02 += D_8122C7E8.unk_0C;
|
||||
D_8122C7E8.unk_08.unk_02 &= 0x1FFFFF;
|
||||
if (D_8122C7E8.unk_4C == 1) {
|
||||
if (D_8122C7E8.unk_3C != 0) {
|
||||
D_8122C7E8.unk_3C--;
|
||||
}
|
||||
var_a3 = ((temp_v0 & 0xFFFF) * D_8122C7E8.unk_3C) & 0xFFFF;
|
||||
} else {
|
||||
if (D_8122C7E8.unk_20 != D_8122C7E8.unk_3C) {
|
||||
D_8122C7E8.unk_3C = (u8) D_8122C7E8.unk_20;
|
||||
}
|
||||
D_8122C7E8.unk_40 = (s32) D_8122C7E8.unk_0C;
|
||||
var_a3 = ((temp_v0 & 0xFFFF) * D_8122C7E8.unk_20) & 0xFFFF;
|
||||
}
|
||||
if (D_8122C7E8.unk_28 != 0) {
|
||||
D_8122C7E8.unk_24++;
|
||||
if ((D_8122C7E8.unk_24 % (u32) D_8122C7E8.unk_28) == 0) {
|
||||
switch (D_8122C7E8.unk_2E) {
|
||||
case 0:
|
||||
if (D_8122C7E8.unk_2D != 0) {
|
||||
D_8122C7E8.unk_2D--;
|
||||
}
|
||||
if (!D_8122C7E8.unk_2D) {
|
||||
D_8122C7E8.unk_00 = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (D_8122C7E8.unk_2D < 0xF) {
|
||||
D_8122C7E8.unk_2D++;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
D_8122C7E8.unk_20 = D_8120EB14[D_8122C7E8.unk_2D];
|
||||
}
|
||||
} else {
|
||||
D_8122C7E8.unk_20 = D_8120EB14[D_8122C7E8.unk_2D];
|
||||
}
|
||||
if (D_8122C7E8.unk_18 == 1U) {
|
||||
if (D_8122C7E8.unk_14 != 0) {
|
||||
D_8122C7E8.unk_14--;
|
||||
}
|
||||
if (D_8122C7E8.unk_14 == 0) {
|
||||
D_8122C7E8.unk_00 = 0U;
|
||||
}
|
||||
}
|
||||
return var_a3;
|
||||
}
|
||||
|
||||
u16 func_81207C5C(void) {
|
||||
u16 temp_v0;
|
||||
@@ -319,7 +486,65 @@ void func_8120806C(u16, u8);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_86CB0/func_81208828.s")
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// Matching needs rodata mapping
|
||||
void func_81208C08(u16 arg0, u8 arg1, u16 arg2) {
|
||||
s32 temp_v1;
|
||||
|
||||
temp_v1 = arg0 + 0xFFFF0100;
|
||||
osSendMesg(&D_8122EEB0, (temp_v1 << 0x18) | (arg1 << 0x10) | arg2, 0);
|
||||
D_8120EAD0 = (s32) arg2;
|
||||
switch (temp_v1) {
|
||||
case 20:
|
||||
if (arg1 & 0x80) {
|
||||
D_8122EEA8.unk_00 = 2;
|
||||
return;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
case 25:
|
||||
if (arg1 & 0x80) {
|
||||
D_8122EEA8.unk_01 = 2;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 30:
|
||||
if (arg1 & 0x80) {
|
||||
D_8122EEA8.unk_02 = 2;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 35:
|
||||
if (arg1 & 0x80) {
|
||||
D_8122EEA8.unk_03 = 2;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 38:
|
||||
if (!(arg1 & 1)) {
|
||||
D_8122EEA8.unk_00 = 1;
|
||||
}
|
||||
if (!(arg1 & 2)) {
|
||||
D_8122EEA8.unk_01 = 1;
|
||||
}
|
||||
if (!(arg1 & 4)) {
|
||||
D_8122EEA8.unk_02 = 1;
|
||||
}
|
||||
if (!(arg1 & 8)) {
|
||||
D_8122EEA8.unk_03 = 1;
|
||||
}
|
||||
if (!(arg1 & 0x80)) {
|
||||
D_8122EEA8.unk_00 = 1;
|
||||
D_8122EEA8.unk_01 = 1;
|
||||
D_8122EEA8.unk_02 = 1;
|
||||
D_8122EEA8.unk_03 = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_86CB0/func_81208C08.s")
|
||||
#endif
|
||||
|
||||
void func_81208D7C(void) {
|
||||
s32 pad[6];
|
||||
|
||||
@@ -605,6 +605,8 @@
|
||||
- [0x86CB0, c, fragments/1/fragment1_86CB0]
|
||||
- [0x89020, hasm, fragments/1/fragment1_code_asm]
|
||||
- [0x8D1A0, data, fragments/1/fragment1_data_8D1A0]
|
||||
- [0x8E3D0, .data, fragments/1/fragment1_86C30]
|
||||
- [0x8E3E0, data, fragments/1/fragment1_data_8E3E0]
|
||||
- [0xA8020, data, fragments/1/fragment1_data_A8020]
|
||||
- [0xA80F0, data, fragments/1/fragment1_data_asm]
|
||||
- [0xA8E80, rodata, fragments/1/fragment1_rodata_A8E80]
|
||||
|
||||
Reference in New Issue
Block a user