Merge pull request #204 from Rainchus/master
Some checks failed
C/C++ CI / build (push) Has been cancelled

remove duplicate symbol name, label some dv/stat related code
This commit is contained in:
Revo 2025-08-15 22:29:43 -04:00 committed by GitHub
commit c57626d749
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 96 additions and 67 deletions

View File

@ -764,7 +764,7 @@ func_80022010 = 0x80022010; // type:func
func_80022084 = 0x80022084; // type:func
func_800220C4 = 0x800220C4; // type:func
func_800220CC = 0x800220CC; // type:func
func_80022170 = 0x80022170; // type:func
CalculateStatValue = 0x80022170; //
func_80022338 = 0x80022338; // type:func
func_8002240C = 0x8002240C; // type:func
func_800224B8 = 0x800224B8; // type:func
@ -2744,7 +2744,7 @@ func_86C01D2C = 0x86C01D2C; // type:func
miniGetCloser2Diglett = 0x86C01FAC; // type:func
func_86C021FC = 0x86C021FC; // type:func
miniEkansAnycontrols = 0x86C022D8; // type:func
miniEkansMinigameStateMachine = 0x86C02324; // type:func
//miniEkansMinigameStateMachine = 0x86C02324; // type:func
miniEkansPlayersUpdate = 0x86C02514; // type:func
func_86C02610 = 0x86C02610; // type:func
initDiglettHole = 0x86C026F0; // type:func

View File

@ -203,84 +203,88 @@ u16 func_80022084(u16 arg0) {
void func_800220C4(void) {
}
u16 func_800220CC(s32 arg0, u16 arg1) {
u16 sp6;
u16 GetPokemonDV(s32 statId, u16 dvBits) { //GetPokemonDV
u16 dvValue;
switch (arg0) {
case 1:
sp6 = ((arg1 & 0x1000) >> 9) | ((arg1 & 0x100) >> 6) | ((arg1 & 0x10) >> 3) | (arg1 & 1);
switch (statId) {
case STAT_HP: // HP DV (derived from the LSBs of other DVs)
dvValue = ((dvBits & 0x1000) >> 9) // Special DV bit 0 → HP DV bit 0
| ((dvBits & 0x0100) >> 6) // Speed DV bit 0 → HP DV bit 1
| ((dvBits & 0x0010) >> 3) // Defense DV bit 0 → HP DV bit 2
| (dvBits & 0x0001); // Attack DV bit 0 → HP DV bit 3
break;
case 2:
sp6 = (arg1 >> 0xC) & 0xF;
case STAT_SPECIAL: // Special DV
dvValue = (dvBits >> 12) & 0xF;
break;
case 3:
sp6 = (arg1 >> 8) & 0xF;
case STAT_SPEED: // Speed DV
dvValue = (dvBits >> 8) & 0xF;
break;
case 4:
sp6 = (arg1 >> 4) & 0xF;
case STAT_DEFENSE: // Defense DV
dvValue = (dvBits >> 4) & 0xF;
break;
case 5:
sp6 = arg1 & 0xF;
case STAT_ATTACK: // Attack DV
dvValue = dvBits & 0xF;
break;
}
return sp6;
return dvValue;
}
u32 func_80022170(s32 arg0, s32 arg1, u16 arg2, u16 arg3, u16 arg4) {
u16 sp1C;
u16 sp24;
u16 sp22;
u32 CalculateStatValue(s32 statId, s32 speciesId, u16 statModifier, u16 level, u16 dvBits) {
u16 statValue;
u16 baseStat;
u16 dvValue;
switch (arg0) {
case 1:
sp24 = D_80070F84[arg1].unk_06;
switch (statId) {
case STAT_HP:
baseStat = D_80070F84[speciesId].baseHP;
break;
case 2:
sp24 = D_80070F84[arg1].unk_07;
case STAT_SPECIAL:
baseStat = D_80070F84[speciesId].baseSpecial;
break;
case 3:
sp24 = D_80070F84[arg1].unk_08;
case STAT_SPEED:
baseStat = D_80070F84[speciesId].baseSpeed;
break;
case 4:
sp24 = D_80070F84[arg1].unk_09;
case STAT_DEFENSE:
baseStat = D_80070F84[speciesId].baseDefense;
break;
case 5:
sp24 = D_80070F84[arg1].unk_0A[0];
case STAT_ATTACK:
baseStat = D_80070F84[speciesId].baseAttack;
break;
}
sp22 = func_800220CC(arg0, arg4);
// Get the Pokémon's DV for the stat (or HP DV)
dvValue = GetPokemonDV(statId, dvBits);
sp1C = (((func_80022084(arg2) / 4) + ((sp24 + sp22) * 2)) * arg3) / 100;
if (arg0 == 1) {
sp1C += arg3 + 10;
// Compute the preliminary stat value
statValue = (((func_80022084(statModifier) / 4) + ((baseStat + dvValue) * 2)) * level) / 100;
// Add final adjustments
if (statId == STAT_HP) {
statValue += level + 10;
} else {
sp1C += 5;
statValue += 5;
}
if (sp1C > 999) {
sp1C = 999;
// Cap at 999
if (statValue > 999) {
statValue = 999;
}
return sp1C;
return statValue;
}
void func_80022338(unk_func_80026268_arg0* arg0) {
arg0->unk_24 = func_800226C0(arg0->unk_00.unk_00, arg0->unk_10);
arg0->unk_26 = func_80022170(1, arg0->unk_00.unk_00, arg0->unk_14, arg0->unk_24, arg0->unk_1E);
arg0->unk_28 = func_80022170(2, arg0->unk_00.unk_00, arg0->unk_16, arg0->unk_24, arg0->unk_1E);
arg0->unk_2A = func_80022170(3, arg0->unk_00.unk_00, arg0->unk_18, arg0->unk_24, arg0->unk_1E);
arg0->unk_2C = func_80022170(4, arg0->unk_00.unk_00, arg0->unk_1A, arg0->unk_24, arg0->unk_1E);
arg0->unk_2E = func_80022170(5, arg0->unk_00.unk_00, arg0->unk_1C, arg0->unk_24, arg0->unk_1E);
arg0->unk_26 = CalculateStatValue(1, arg0->unk_00.unk_00, arg0->unk_14, arg0->unk_24, arg0->unk_1E);
arg0->unk_28 = CalculateStatValue(2, arg0->unk_00.unk_00, arg0->unk_16, arg0->unk_24, arg0->unk_1E);
arg0->unk_2A = CalculateStatValue(3, arg0->unk_00.unk_00, arg0->unk_18, arg0->unk_24, arg0->unk_1E);
arg0->unk_2C = CalculateStatValue(4, arg0->unk_00.unk_00, arg0->unk_1A, arg0->unk_24, arg0->unk_1E);
arg0->unk_2E = CalculateStatValue(5, arg0->unk_00.unk_00, arg0->unk_1C, arg0->unk_24, arg0->unk_1E);
}
u16 func_8002240C(s32 arg0, s32 arg1, u16 arg2, u16 arg3, u16 arg4) {
@ -288,7 +292,7 @@ u16 func_8002240C(s32 arg0, s32 arg1, u16 arg2, u16 arg3, u16 arg4) {
s32 tmp;
for (i = 1; i < 0xFFFF; i += 2) {
tmp = func_80022170(arg0, arg1, i + 2, arg3, arg4);
tmp = CalculateStatValue(arg0, arg1, i + 2, arg3, arg4);
if (arg2 < tmp) {
break;
}

View File

@ -6,6 +6,31 @@
#include "29BA0.h"
#include "2D340.h"
#define STAT_HP 1
#define STAT_SPECIAL 2
#define STAT_SPEED 3
#define STAT_DEFENSE 4
#define STAT_ATTACK 5
typedef struct PokemonStats {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x02 */ u8 unk_02;
/* 0x03 */ u8 unk_03;
/* 0x04 */ u8 unk_04;
/* 0x05 */ u8 unk_05;
/* 0x06 */ u8 baseHP;
/* 0x07 */ u8 baseSpecial;
/* 0x08 */ u8 baseSpeed;
/* 0x09 */ u8 baseDefense;
/* 0x0A */ u8 baseAttack;
/* 0x0B */ char unk0B[0x4];
/* 0x0F */ u8 unk_0F[1];
/* 0x10 */ char unk10[0x3];
/* 0x13 */ u8 unk_13;
/* 0x14 */ char unk14[0x3];
} PokemonStats; // size = 0x17
typedef struct unk_D_80070F84 {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
@ -17,16 +42,16 @@ typedef struct unk_D_80070F84 {
/* 0x07 */ u8 unk_07;
/* 0x08 */ u8 unk_08;
/* 0x09 */ u8 unk_09;
/* 0x0A */ u8 unk_0A[1];
/* 0x0B */ char unk0B[0x4];
/* 0x0A */ u8 unk_0A[4];
/* 0x0E */ char unk0E[1];
/* 0x0F */ u8 unk_0F[1];
/* 0x10 */ char unk10[0x3];
/* 0x13 */ u8 unk_13;
/* 0x14 */ char unk14[0x3];
} unk_D_80070F84; // size = 0x17
extern unk_D_80070F84 D_80070F84[];
extern unk_D_80070F84 D_80070FA0[];
extern PokemonStats D_80070F84[];
extern unk_D_80070F84 D_80070FA0[]; //TODO: is this typed correctly?
typedef struct unk_D_80071D88 {
/* 0x00 */ char* type_name;
@ -204,7 +229,7 @@ void func_80022010(unk_func_88205880_00D0* arg0, unk_D_800AC910_050_9AC_008* arg
u16 func_80022084(u16 arg0);
void func_800220C4(void);
u16 func_800220CC(s32 arg0, u16 arg1);
u32 func_80022170(s32 arg0, s32 arg1, u16 arg2, u16 arg3, u16 arg4);
u32 CalculateStatValue(s32 statId, s32 speciesId, u16 statModifier, u16 level, u16 dvBits);
void func_80022338(unk_func_80026268_arg0* arg0);
u16 func_8002240C(s32 arg0, s32 arg1, u16 arg2, u16 arg3, u16 arg4);
u32 func_800224B8(s32 arg0, u16 arg1);

View File

@ -1700,7 +1700,7 @@ s32 func_883058C4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030
if (temp_s0->unk_14 >= 0x6401) {
temp_s0->unk_14 = 0x6400;
}
temp_s0->unk_26 = func_80022170(1, temp_s0->unk_00, temp_s0->unk_14, temp_s0->unk_24, temp_s0->unk_1E);
temp_s0->unk_26 = CalculateStatValue(STAT_HP, temp_s0->unk_00, temp_s0->unk_14, temp_s0->unk_24, temp_s0->unk_1E);
*arg3 = temp_s0->unk_26;
break;
@ -1711,7 +1711,7 @@ s32 func_883058C4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030
if (temp_s0->unk_16 >= 0x6401) {
temp_s0->unk_16 = 0x6400;
}
temp_s0->unk_28 = func_80022170(2, temp_s0->unk_00, temp_s0->unk_16, temp_s0->unk_24, temp_s0->unk_1E);
temp_s0->unk_28 = CalculateStatValue(STAT_SPECIAL, temp_s0->unk_00, temp_s0->unk_16, temp_s0->unk_24, temp_s0->unk_1E);
*arg3 = temp_s0->unk_28;
break;
@ -1722,7 +1722,7 @@ s32 func_883058C4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030
if (temp_s0->unk_18 >= 0x6401) {
temp_s0->unk_18 = 0x6400;
}
temp_s0->unk_2A = func_80022170(3, temp_s0->unk_00, temp_s0->unk_18, temp_s0->unk_24, temp_s0->unk_1E);
temp_s0->unk_2A = CalculateStatValue(STAT_SPEED, temp_s0->unk_00, temp_s0->unk_18, temp_s0->unk_24, temp_s0->unk_1E);
*arg3 = temp_s0->unk_2A;
break;
@ -1733,7 +1733,7 @@ s32 func_883058C4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030
if (temp_s0->unk_1A >= 0x6401) {
temp_s0->unk_1A = 0x6400;
}
temp_s0->unk_2C = func_80022170(4, temp_s0->unk_00, temp_s0->unk_1A, temp_s0->unk_24, temp_s0->unk_1E);
temp_s0->unk_2C = CalculateStatValue(STAT_DEFENSE, temp_s0->unk_00, temp_s0->unk_1A, temp_s0->unk_24, temp_s0->unk_1E);
*arg3 = temp_s0->unk_2C;
break;
@ -1744,7 +1744,7 @@ s32 func_883058C4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030
if (temp_s0->unk_1C >= 0x6401) {
temp_s0->unk_1C = 0x6400;
}
temp_s0->unk_2E = func_80022170(5, temp_s0->unk_00, temp_s0->unk_1C, temp_s0->unk_24, temp_s0->unk_1E);
temp_s0->unk_2E = CalculateStatValue(STAT_ATTACK, temp_s0->unk_00, temp_s0->unk_1C, temp_s0->unk_24, temp_s0->unk_1E);
*arg3 = temp_s0->unk_2E;
break;

View File

@ -2803,7 +2803,7 @@ void func_883112B0(unk_func_8830867C_04C* arg0, s32 arg1, s32 arg2, unk_func_880
}
s32 func_88311C64(s32 arg0, s32 arg1) {
static unk_D_80070F84 D_8831757C[] = {
static PokemonStats D_8831757C[] = {
{
0x06,
0x4E,
@ -3103,7 +3103,7 @@ s32 func_88311C64(s32 arg0, s32 arg1) {
},
};
unk_D_80070F84* var_v1;
PokemonStats* var_v1;
s32 i;
var_v1 = &D_80070FA0[arg0 - 1];

View File

@ -261,7 +261,7 @@ void func_843021E8(unk_D_84390010* arg0, u16 arg1, unk_D_84390010_94C* arg2, unk
s32 temp_v0_3;
s32 temp_v1_2;
u8 var_a0;
unk_D_80070F84* temp_s4;
unk_D_80070F84* temp_s4; //TODO: this is definitely typed wrong
unk_D_800FCB18* temp_s5;
temp_s5 = &arg0->unk_654.unk_38;
@ -270,7 +270,7 @@ void func_843021E8(unk_D_84390010* arg0, u16 arg1, unk_D_84390010_94C* arg2, unk
if (temp_s5->unk_1F[i] != 0) {
temp_s4 = &D_80070FA0[arg1];
for (j = 0; j < 4; j++) {
for (j = 0; j < ARRAY_COUNT(temp_s4->unk_0A); j++) {
if ((temp_s4->unk_0A[j] != 0) && (temp_s4->unk_0A[j] == temp_s5->unk_1F[i])) {
arg0->unk_654.unk_C1[i] = 0;
}

View File

@ -779,7 +779,7 @@ void func_84370B7C(unk_D_84390010* arg0) {
func_84370B0C(arg0);
func_84370B44(arg0);
sp24->unk_36 = D_80070F84[sp24->unk_0B].unk_06;
sp24->unk_36 = D_80070F84[sp24->unk_0B].baseHP;
sp24->unk_38 = sp34->unk_28;
sp24->unk_3A = sp34->unk_2A;
sp24->unk_3C = sp34->unk_2C;
@ -1204,9 +1204,9 @@ s32 func_84371C18(void) {
D_843C4DA5 = 0;
if (D_8438AC60[0] == 1) {
sp18 = (D_80070F84[D_843C5238->unk_0B].unk_09 + 0x4C) >> 2;
sp18 = (D_80070F84[D_843C5238->unk_0B].baseDefense + 0x4C) >> 2;
} else {
sp18 = D_80070F84[D_843C5238->unk_0B].unk_09 >> 1;
sp18 = D_80070F84[D_843C5238->unk_0B].baseDefense >> 1;
}
if (D_843C5238->unk_44.unk_02 == 0) {

View File

@ -3759,7 +3759,7 @@ void func_8437E974(unk_D_800AE540_0004* arg0, unk_D_800AE540_0004* arg1, unk_D_8
u8 i;
u8 var_v1;
u8 sp73;
unk_D_80070F84* sp6C;
PokemonStats* sp6C;
unk_func_80026268_arg0* sp64[2];
unk_func_80026268_arg0* temp_s7;