mirror of
https://github.com/pret/pokestadium.git
synced 2026-03-21 17:24:20 -05:00
Merge pull request #204 from Rainchus/master
Some checks failed
C/C++ CI / build (push) Has been cancelled
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:
commit
c57626d749
|
|
@ -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
|
||||
|
|
|
|||
98
src/22630.c
98
src/22630.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
35
src/22630.h
35
src/22630.h
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user