mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-03 17:11:31 -05:00
1019 lines
19 KiB
C
1019 lines
19 KiB
C
#include "global.h"
|
|
#include "math.h"
|
|
#include "code_800E9A8.h"
|
|
#include "code_803E46C.h"
|
|
#include "code_803E724.h"
|
|
#include "code_804267C.h"
|
|
#include "code_806CD90.h"
|
|
#include "code_8041AD0.h"
|
|
#include "code_800DAC0.h"
|
|
#include "dungeon_config.h"
|
|
#include "constants/direction.h"
|
|
#include "constants/status.h"
|
|
#include "constants/type.h"
|
|
#include "dungeon_pokemon_attributes.h"
|
|
#include "dungeon_util.h"
|
|
#include "items.h"
|
|
#include "structs/dungeon_entity.h"
|
|
#include "structs/sprite_oam.h"
|
|
#include "structs/str_dungeon.h"
|
|
|
|
extern u32 gStatusSpriteMasks_SleepClassStatus[];
|
|
extern u32 gStatusSpriteMasks_BurnClassStatus[];
|
|
extern u32 gStatusSpriteMasks_FrozenClassStatus[];
|
|
extern u32 gStatusSpriteMasks_CringeClassStatus[];
|
|
extern u32 gStatusSpriteMasks_BideClassStatus[];
|
|
extern u32 gStatusSpriteMasks_ReflectClassStatus[];
|
|
extern u32 gStatusSpriteMasks_CurseClassStatus[];
|
|
extern u32 gStatusSpriteMasks_LeechSeedClassStatus[];
|
|
extern u32 gStatusSpriteMasks_SureShotClassStatus[];
|
|
extern u32 gStatusSpriteMasks_LongTossClassStatus[];
|
|
extern u32 gStatusSpriteMasks_InvisibleClassStatus[];
|
|
extern u32 gStatusSpriteMasks_BlinkerClassStatus[];
|
|
extern u32 gStatusSpriteMasks_MuzzledStatus[];
|
|
|
|
extern void sub_803ED30(u8, Entity *pokemon, u8, u8);
|
|
extern u32 sub_806F62C(u32);
|
|
extern u32 sub_800DC9C(s32 a0);
|
|
extern void sub_800569C(DungeonPos *, axdata *, u8);
|
|
extern void PlaySoundEffect(u32);
|
|
|
|
void EntityUpdateStatusSprites(Entity *entity);
|
|
|
|
extern s32 gDungeonBrightness;
|
|
extern u8 gUnknown_203B40D;
|
|
extern s16 gUnknown_2026E4E;
|
|
|
|
extern void sub_800DBBC(void);
|
|
extern void sub_803EA10(void);
|
|
extern void sub_8042E98(void);
|
|
extern void sub_800EE5C(u32);
|
|
extern void sub_800EF64(void);
|
|
|
|
void sub_804178C(u8 param_1);
|
|
u32 sub_8041764(unkStruct_80416E0 *param_1, bool8 param_2);
|
|
s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3);
|
|
s32 sub_8041550(Entity *entity, s32 a1, u8 a2, u8 a3, s32 a4, u8 a5);
|
|
|
|
s32 sub_804151C(Entity *entity, s32 r1, u8 r2)
|
|
{
|
|
u8 r3 = sub_800DC9C(r1);
|
|
return sub_8041550(entity, r1, r2, r3, 2, 0);
|
|
}
|
|
|
|
s32 sub_8041550(Entity *entity, s32 a1, u8 a2, u8 a3, s32 a4, u8 a5)
|
|
{
|
|
s32 i;
|
|
EntityInfo *entInfo;
|
|
DungeonPos pos;
|
|
unkStruct_80416E0 sp;
|
|
unkStruct_2039DB0 unkStruct;
|
|
PixelPos pixelPos;
|
|
s32 var;
|
|
s32 r4;
|
|
|
|
if (!EntityIsValid(entity))
|
|
return -1;
|
|
entInfo = GetEntInfo(entity);
|
|
if (!sub_8042768(entity))
|
|
return -1;
|
|
if (!a5 && entInfo->unkFF == 2)
|
|
return -1;
|
|
|
|
if (a4 != 0) {
|
|
sub_804178C(a4 == 2);
|
|
}
|
|
|
|
sub_800569C(&pos, &entity->axObj.axdata, a3);
|
|
if (pos.x != 99 && pos.y != 99) {
|
|
pixelPos.x = entity->pixelPos.x + (pos.x << 8);
|
|
pixelPos.y = (entity->pixelPos.y + (pos.y << 8)) - entInfo->unk174.raw;
|
|
}
|
|
else {
|
|
pixelPos.x = entity->pixelPos.x;
|
|
pixelPos.y = entity->pixelPos.y - entInfo->unk174.raw;
|
|
}
|
|
|
|
var = entity->pixelPos.y / 256;
|
|
var -= gDungeon->unk181e8.cameraPixelPos.y;
|
|
var /= 2;
|
|
var++;
|
|
|
|
sp.unk0 = a1;
|
|
sp.unk4 = 0;
|
|
sp.dir = -1;
|
|
sp.x = pixelPos.x / 256;
|
|
sp.y = pixelPos.y / 256;
|
|
sp.unk14 = -1;
|
|
sp.unk10 = 0;
|
|
sp.unk12 = 0;
|
|
sp.unk18 = var;
|
|
|
|
sub_8004E8C(&unkStruct);
|
|
r4 = sub_8041764(&sp, FALSE);
|
|
if (a2) {
|
|
for (i = 0; i < 100; i++) {
|
|
if (!sub_800E9A8(r4)) {
|
|
break;
|
|
}
|
|
DungeonRunFrameActions(0x42);
|
|
}
|
|
r4 = -1;
|
|
}
|
|
return r4;
|
|
}
|
|
|
|
s32 sub_80416A4(DungeonPos *pos_1, u32 param_2, bool8 param_3)
|
|
{
|
|
PixelPos pos;
|
|
|
|
pos.x = X_POS_TO_PIXELPOS(pos_1->x);
|
|
pos.y = Y_POS_TO_PIXELPOS(pos_1->y);
|
|
return sub_80416E0(&pos, param_2, param_3);
|
|
}
|
|
|
|
s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3)
|
|
{
|
|
int counter;
|
|
s32 ret;
|
|
unkStruct_80416E0 auStack_10;
|
|
unkStruct_2039DB0 stack1C;
|
|
|
|
auStack_10.unk0 = param_2;
|
|
auStack_10.unk4 = 0;
|
|
auStack_10.dir = -1;
|
|
|
|
auStack_10.x = pos->x / 256;
|
|
auStack_10.y = pos->y / 256;
|
|
|
|
auStack_10.unk14 = -1;
|
|
auStack_10.unk10 = 0;
|
|
auStack_10.unk12 = 0;
|
|
auStack_10.unk18 = 0xffff;
|
|
sub_8004E8C(&stack1C);
|
|
ret = sub_8041764(&auStack_10, FALSE);
|
|
if (param_3) {
|
|
counter = 0;
|
|
while ((counter < 100 && (sub_800E9A8(ret)))) {
|
|
DungeonRunFrameActions(0x42);
|
|
counter++;
|
|
}
|
|
ret = -1;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
u32 sub_8041764(unkStruct_80416E0 *param_1, bool8 param_2)
|
|
{
|
|
sub_800EE5C(param_1->unk0);
|
|
sub_800EF64();
|
|
if(param_2)
|
|
DungeonRunFrameActions(0x42);
|
|
return sub_800E890(param_1);
|
|
}
|
|
|
|
void sub_804178C(u8 param_1)
|
|
{
|
|
u32 temp;
|
|
s32 counter;
|
|
|
|
counter = 0;
|
|
gDungeon->unk181e8.unk18204 = 0;
|
|
if (sub_800E9FC(param_1) != 0) {
|
|
while ((counter < 1000 && (sub_800E9FC(param_1) != 0))) {
|
|
DungeonRunFrameActions(0x4a);
|
|
counter++;
|
|
}
|
|
DungeonRunFrameActions(0x4a);
|
|
DungeonRunFrameActions(0x4a);
|
|
}
|
|
if ((counter == 1000) || (param_1 != 0)) {
|
|
sub_800DBBC();
|
|
}
|
|
if (gDungeonBrightness < 0x1f) {
|
|
temp = gUnknown_203B40D;
|
|
gUnknown_203B40D = 1;
|
|
for(counter = 0; counter < 1000; counter++)
|
|
{
|
|
if (gDungeonBrightness < 0x1f) {
|
|
gDungeonBrightness += 4;
|
|
if (gUnknown_2026E4E != 0x808) {
|
|
gUnknown_2026E4E -= 0x101;
|
|
}
|
|
}
|
|
else {
|
|
gDungeonBrightness = 0x1f;
|
|
}
|
|
sub_803EA10();
|
|
DungeonRunFrameActions(0x4a);
|
|
if(gDungeonBrightness == 0x1f) break;
|
|
};
|
|
gUnknown_2026E4E = 0x808;
|
|
gUnknown_203B40D = temp;
|
|
}
|
|
sub_8042E98();
|
|
}
|
|
|
|
u32 EntityGetStatusSprites(Entity *entity)
|
|
{
|
|
return GetEntInfo(entity)->statusIcons;
|
|
}
|
|
|
|
void sub_8041888(u8 param_1)
|
|
{
|
|
s32 index;
|
|
Entity *entity;
|
|
EntityInfo *entityInfo;
|
|
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
|
|
{
|
|
entity = gDungeon->activePokemon[index];
|
|
if(EntityIsValid(entity))
|
|
{
|
|
entityInfo = GetEntInfo(entity);
|
|
if(param_1)
|
|
{
|
|
entityInfo->unk14C = 1;
|
|
}
|
|
EntityUpdateStatusSprites(entity);
|
|
}
|
|
}
|
|
}
|
|
|
|
void EntityUpdateStatusSprites(Entity *entity)
|
|
{
|
|
bool32 flag;
|
|
s32 HP;
|
|
EntityInfo *entityInfo;
|
|
u32 spriteStatus;
|
|
u8 temp;
|
|
|
|
if (EntityIsValid(entity)) {
|
|
entityInfo = GetEntInfo(entity);
|
|
spriteStatus = 0;
|
|
flag = TRUE;
|
|
|
|
if (entityInfo->id == 0xb9) {
|
|
// NOTE: clean this up sometime
|
|
temp = entityInfo->sleepClassStatus.turns;
|
|
flag = 0x7f;
|
|
temp ^= flag;
|
|
flag = (temp) != 0;
|
|
}
|
|
if (flag) {
|
|
spriteStatus = gStatusSpriteMasks_SleepClassStatus[entityInfo->sleepClassStatus.status];
|
|
}
|
|
spriteStatus = spriteStatus |
|
|
gStatusSpriteMasks_BurnClassStatus[entityInfo->burnClassStatus.status] |
|
|
gStatusSpriteMasks_FrozenClassStatus[entityInfo->frozenClassStatus.status] |
|
|
gStatusSpriteMasks_CringeClassStatus[entityInfo->cringeClassStatus.status] |
|
|
gStatusSpriteMasks_BideClassStatus[entityInfo->bideClassStatus.status] |
|
|
gStatusSpriteMasks_ReflectClassStatus[entityInfo->reflectClassStatus.status] |
|
|
gStatusSpriteMasks_CurseClassStatus[entityInfo->curseClassStatus.status] |
|
|
gStatusSpriteMasks_LeechSeedClassStatus[entityInfo->leechSeedClassStatus.status] |
|
|
gStatusSpriteMasks_SureShotClassStatus[entityInfo->sureShotClassStatus.status] |
|
|
gStatusSpriteMasks_LongTossClassStatus[entityInfo->longTossClassStatus.status] |
|
|
gStatusSpriteMasks_InvisibleClassStatus[entityInfo->invisibleClassStatus.status] |
|
|
gStatusSpriteMasks_BlinkerClassStatus[entityInfo->blinkerClassStatus.status] |
|
|
gStatusSpriteMasks_MuzzledStatus[entityInfo->muzzled.muzzled];
|
|
|
|
if (entityInfo->grudge) {
|
|
spriteStatus = spriteStatus | STATUS_SPRITE_GRUDGE;
|
|
}
|
|
if (entityInfo->exposed) {
|
|
spriteStatus = spriteStatus | STATUS_SPRITE_EXPOSED;
|
|
}
|
|
if (!entityInfo->isNotTeamMember) {
|
|
HP = entityInfo->maxHPStat;
|
|
if (HP < 0) {
|
|
HP += 3;
|
|
}
|
|
HP >>= 2;
|
|
if (HP > entityInfo->HP) {
|
|
spriteStatus = spriteStatus | STATUS_SPRITE_LOWHP;
|
|
}
|
|
}
|
|
if ((gDungeon->unk644.itemHoldersIdentified) && (entityInfo->heldItem.flags & ITEM_FLAG_EXISTS)) {
|
|
spriteStatus = spriteStatus | STATUS_SPRITE_LOWHP;
|
|
}
|
|
if ((F248LessThanInt(entityInfo->offensiveMultipliers[0], 1)) ||
|
|
(F248LessThanInt(entityInfo->offensiveMultipliers[1], 1)) ||
|
|
(F248LessThanInt(entityInfo->defensiveMultipliers[0], 1)) ||
|
|
(F248LessThanInt(entityInfo->defensiveMultipliers[1], 1)) ||
|
|
(entityInfo->offensiveStages[0] < DEFAULT_STAT_STAGE) ||
|
|
(entityInfo->offensiveStages[1] < DEFAULT_STAT_STAGE) ||
|
|
(entityInfo->defensiveStages[0] < DEFAULT_STAT_STAGE) ||
|
|
(entityInfo->defensiveStages[1] < DEFAULT_STAT_STAGE) ||
|
|
(entityInfo->hitChanceStages[0]) < DEFAULT_STAT_STAGE ||
|
|
(entityInfo->hitChanceStages[1] < DEFAULT_STAT_STAGE)) {
|
|
spriteStatus = spriteStatus | STATUS_SPRITE_STAT_DOWN;
|
|
}
|
|
entityInfo->statusIcons = spriteStatus;
|
|
}
|
|
}
|
|
|
|
void sub_8041AD0(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 324, 1);
|
|
}
|
|
|
|
void sub_8041AE0(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 323, 1);
|
|
}
|
|
|
|
void sub_8041AF4(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 37, 1);
|
|
sub_80421C0(pokemon, 407);
|
|
}
|
|
|
|
void nullsub_57(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041B18(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 321, 1);
|
|
}
|
|
|
|
void nullsub_58(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_59(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041B34(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 7, 1);
|
|
}
|
|
|
|
void nullsub_60(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041B48(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 4, 0);
|
|
}
|
|
|
|
void nullsub_61(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041B5C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 369, 1);
|
|
}
|
|
|
|
void nullsub_62(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void sub_8041B74(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 369, 0);
|
|
}
|
|
|
|
void nullsub_63(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_64(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041B90(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 428, 0);
|
|
}
|
|
|
|
void nullsub_65(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_66(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041BA8(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 4, 1);
|
|
}
|
|
|
|
void nullsub_67(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041BBC(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 424, 1);
|
|
}
|
|
|
|
void nullsub_68(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041BD0(Entity *pokemon, u8 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
return;
|
|
}
|
|
sub_80421C0(pokemon, 421);
|
|
}
|
|
|
|
void sub_8041BE8(Entity *pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 406);
|
|
}
|
|
|
|
void sub_8041BF8(Entity *pokemon)
|
|
{
|
|
sub_806CDD4(pokemon, 0xA, NUM_DIRECTIONS);
|
|
}
|
|
|
|
void sub_8041C08(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 423, 1);
|
|
}
|
|
|
|
void sub_8041C1C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 423, 1);
|
|
}
|
|
|
|
void nullsub_69(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041C34(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x4C, 1);
|
|
}
|
|
|
|
void nullsub_70(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_71(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041C4C(Entity *pokemon, u32 r1)
|
|
{
|
|
sub_804151C(pokemon, r1, 1);
|
|
}
|
|
|
|
void sub_8041C58(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x1a9, 1);
|
|
}
|
|
|
|
void sub_8041C6C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x9D << 1, 1);
|
|
}
|
|
|
|
void sub_8041C7C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x9D << 1, 1);
|
|
}
|
|
|
|
void nullsub_72(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_73(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041C94(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x171, 1);
|
|
}
|
|
|
|
void sub_8041CA8(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 7, 1);
|
|
}
|
|
|
|
void sub_8041CB8(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x18b, 1);
|
|
}
|
|
|
|
void sub_8041CCC(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0xC5 << 1, 1);
|
|
}
|
|
|
|
void sub_8041CDC(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 5, 1);
|
|
}
|
|
|
|
void sub_8041CEC(Entity *pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 0x19d);
|
|
}
|
|
|
|
void nullsub_74(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041D00(Entity *pokemon, Entity *target)
|
|
{
|
|
sub_804151C(target, 0x2F, 1);
|
|
sub_804151C(pokemon, 0x30, 1);
|
|
}
|
|
|
|
void nullsub_75(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void nullsub_76(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void nullsub_77(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void nullsub_78(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void nullsub_79(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void nullsub_80(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void sub_8041D38(Entity * pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x21, 1);
|
|
}
|
|
|
|
void sub_8041D48(Entity * pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 0x191);
|
|
}
|
|
|
|
void nullsub_81(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041D5C(Entity *pokemon)
|
|
{
|
|
if (!sub_8042768(pokemon))
|
|
return;
|
|
|
|
sub_803ED30(GetEntInfo(pokemon)->stockpileStage, pokemon, 1, 11);
|
|
}
|
|
|
|
void sub_8041D84(Entity *pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 0x19f);
|
|
}
|
|
|
|
void nullsub_82(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_83(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041D9C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x131, 1);
|
|
}
|
|
|
|
void sub_8041DB0(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x30, 1);
|
|
}
|
|
|
|
void nullsub_84(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_85(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_204(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_86(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_87(void)
|
|
{
|
|
}
|
|
|
|
void nullsub_88(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041DD8(Entity *pokemon, s16 r1)
|
|
{
|
|
u32 temp;
|
|
temp = r1;
|
|
|
|
if(MonsterIsType(pokemon, TYPE_GHOST) != 0)
|
|
sub_804151C(pokemon, temp, 1);
|
|
else
|
|
sub_804151C(pokemon, TYPE_GHOST, 1);
|
|
}
|
|
|
|
void nullsub_89(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041E0C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x41, 1);
|
|
}
|
|
|
|
void sub_8041E1C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x8F << 1, 1);
|
|
sub_80421C0(pokemon, 0xCE << 1);
|
|
}
|
|
|
|
void sub_8041E3C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0xD7 << 1, 1);
|
|
}
|
|
|
|
void sub_8041E4C(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x1b1, 1);
|
|
}
|
|
|
|
void sub_8041E60(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x1a9, 1);
|
|
}
|
|
|
|
void sub_8041E74(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0xC9 << 1, 1);
|
|
}
|
|
|
|
void sub_8041E84(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0xC7 << 1, 1);
|
|
}
|
|
|
|
void sub_8041E94(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0xC8 << 1, 1);
|
|
}
|
|
|
|
void sub_8041EA4(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x15, 1);
|
|
}
|
|
|
|
void sub_8041EB4(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x171, 1);
|
|
}
|
|
|
|
void sub_8041EC8(Entity *pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 0x197);
|
|
}
|
|
|
|
void sub_8041ED8(Entity *pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 0x197);
|
|
}
|
|
|
|
void sub_8041EE8(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0x15, 1);
|
|
}
|
|
|
|
void sub_8041EF8(Entity *pokemon)
|
|
{
|
|
sub_804151C(pokemon, 0xF, 1);
|
|
}
|
|
|
|
void sub_8041F08(Entity *pokemon)
|
|
{
|
|
sub_8041550(pokemon, 0x15, 1, 3, 2, 0);
|
|
}
|
|
|
|
void nullsub_90(void)
|
|
{
|
|
}
|
|
|
|
void sub_8041F28(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0xCA << 1, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0x193, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8041F4C(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0x18f, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0x191, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8041F70(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0x1a9, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xC9 << 1, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8041F94(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0xC7 << 1, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xC8 << 1, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8041FB4(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0x1a9, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xC9 << 1, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8041FD8(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0xCA << 1, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0x193, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8041FFC(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0xC7 << 1, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xC8 << 1, 1);
|
|
}
|
|
}
|
|
|
|
void sub_804201C(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0x18f, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0x191, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8042040(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0xC6 << 1, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xD, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8042060(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0x18d, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xE, 1);
|
|
}
|
|
}
|
|
|
|
void sub_8042080(Entity *pokemon, u32 r1)
|
|
{
|
|
if(r1 == 0)
|
|
{
|
|
sub_804151C(pokemon, 0xC6 << 1, 1);
|
|
}
|
|
else
|
|
{
|
|
sub_804151C(pokemon, 0xD, 1);
|
|
}
|
|
}
|
|
|
|
void sub_80420A0(Entity *pokemon, u32 r1)
|
|
{
|
|
sub_804151C(pokemon, 0x143, 1);
|
|
}
|
|
|
|
void nullsub_91(void)
|
|
{
|
|
}
|
|
|
|
void sub_80420B8(Entity *pokemon, u32 r1)
|
|
{
|
|
sub_804151C(pokemon, 0x19, 1);
|
|
}
|
|
|
|
void sub_80420C8(Entity *pokemon)
|
|
{
|
|
sub_8041550(pokemon, 0x15, 1, 3, 2, 0);
|
|
}
|
|
|
|
void nullsub_92(Entity *pokemon)
|
|
{
|
|
}
|
|
|
|
void sub_80420E8(Entity *pokemon, struct DamageStruct *dmgStruct)
|
|
{
|
|
u32 typeEffectiveness;
|
|
u32 arg;
|
|
typeEffectiveness = dmgStruct->typeEffectiveness;
|
|
if(gDungeon->unk134.unk16D != 0)
|
|
typeEffectiveness = sub_806F62C(dmgStruct->typeEffectiveness);
|
|
switch(typeEffectiveness)
|
|
{
|
|
default:
|
|
case EFFECTIVENESS_IMMUNE:
|
|
arg = 8;
|
|
break;
|
|
case EFFECTIVENESS_RESIST:
|
|
arg = 9;
|
|
break;
|
|
case EFFECTIVENESS_NEUTRAL:
|
|
arg = 10;
|
|
break;
|
|
case EFFECTIVENESS_SUPER:
|
|
arg = 11;
|
|
break;
|
|
}
|
|
sub_8041550(pokemon, arg, 1, 3, 0, 1);
|
|
}
|
|
|
|
void sub_8042148(Entity *pokemon)
|
|
{
|
|
sub_80421C0(pokemon, 0x1a7);
|
|
sub_804151C(pokemon, 0x9F << 1, 1);
|
|
}
|
|
|
|
void nullsub_93()
|
|
{
|
|
}
|
|
|
|
void sub_804216C(Entity *pokemon, Entity *target, u32 r2)
|
|
{
|
|
if(r2 == 1)
|
|
sub_804151C(target, 0xF8, 1);
|
|
else
|
|
sub_804151C(target, 0xF9, 1);
|
|
}
|
|
|
|
void sub_804218C(Entity *pokemon, Entity *target)
|
|
{
|
|
sub_804151C(target, 0x2A, 1);
|
|
}
|
|
|
|
void sub_804219C(PixelPos *pos)
|
|
{
|
|
sub_80416E0(pos, 0x90, TRUE);
|
|
}
|
|
|
|
void sub_80421AC(Entity *pokemon, Entity * target)
|
|
{
|
|
sub_804151C(target, 0x167, 1);
|
|
}
|
|
|
|
void sub_80421C0(Entity *pokemon, u16 r1)
|
|
{
|
|
if (pokemon == NULL)
|
|
PlaySoundEffect(r1);
|
|
else if (sub_8042768(pokemon))
|
|
PlaySoundEffect(r1);
|
|
}
|
|
|
|
void sub_80421EC(DungeonPos *pos, u16 r1)
|
|
{
|
|
if(sub_803F428(pos))
|
|
PlaySoundEffect(r1);
|
|
}
|
|
|
|
void sub_8042208(Entity *pokemon, u8 r1)
|
|
{
|
|
if(r1 == 0)
|
|
PlaySoundEffect(0x152);
|
|
else if(r1 == 1)
|
|
PlaySoundEffect(0x151);
|
|
else
|
|
PlaySoundEffect(0x150);
|
|
}
|
|
|
|
void sub_8042238(Entity *pokemon, Entity *target)
|
|
{
|
|
if(GetEntInfo(target)->isNotTeamMember)
|
|
PlaySoundEffect(0x157);
|
|
else
|
|
PlaySoundEffect(0x156);
|
|
}
|
|
|
|
extern void sub_800EF28(u8);
|
|
extern void sub_803E708(u32, u32);
|
|
extern u32 sub_800E448(u8, DungeonPos *);
|
|
|
|
void sub_804225C(Entity *entity, DungeonPos *pos, u8 trapId)
|
|
{
|
|
s32 uVar6;
|
|
DungeonPos newPos;
|
|
s32 i, x, y;
|
|
|
|
if (trapId == TRAP_WONDER_TILE)
|
|
return;
|
|
if (!sub_803F428(pos))
|
|
return;
|
|
|
|
sub_800EF28(trapId);
|
|
sub_800EF64();
|
|
sub_803E708(4,0x42);
|
|
|
|
x = X_POS_TO_PIXELPOS(pos->x);
|
|
newPos.x = x / 256;
|
|
|
|
y = Y_POS_TO_PIXELPOS(pos->y);
|
|
newPos.y = y / 256;
|
|
|
|
uVar6 = sub_800E448(trapId,&newPos);
|
|
if (trapId == TRAP_SUMMON_TRAP) {
|
|
sub_80421C0(0,0x193);
|
|
sub_803E708(0x28,0x33);
|
|
}
|
|
else if (trapId == TRAP_SPIN_TRAP) {
|
|
EntityInfo *info = GetEntInfo(entity);
|
|
s32 direction = info->action.direction;
|
|
for (i = 0; i < 1000; i += 2) {
|
|
direction--;
|
|
direction &= DIRECTION_MASK;
|
|
sub_806CDD4(entity,0,direction);
|
|
sub_803E708(2,0x33);
|
|
if (!sub_800E9A8(uVar6))
|
|
break;
|
|
}
|
|
info->action.direction = direction & DIRECTION_MASK;
|
|
}
|
|
else {
|
|
sub_803E708(0x28,0x33);
|
|
}
|
|
|
|
for (i = 0; i < 1000; i++) {
|
|
DungeonRunFrameActions(0x42);
|
|
if (!sub_800E9A8(uVar6))
|
|
break;
|
|
}
|
|
}
|