file split code 8041ad0

This commit is contained in:
DizzyEggg
2025-03-30 17:45:45 +02:00
parent 96c74dbde7
commit a092e75902
6 changed files with 766 additions and 807 deletions

View File

@@ -1,152 +1,6 @@
#include "constants/status.h"
.section .rodata
#.incbin "baserom.gba", 0xF59C4, 0x4
.string "pksdir0\0"
.string "pksdir0\0"
.global gUnknown_80F6624
gUnknown_80F6624: @ 80F6624
@ replacing .incbin "baserom.gba", 0xF6624, 0x78
.byte 0x78, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x7b, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.byte 0x7d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0xb9, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
.byte 0xbb, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.global gStatusSpriteMasks_SleepClassStatus
gStatusSpriteMasks_SleepClassStatus: @ 80F669C
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_SLEEP @ STATUS_SLEEP
.4byte STATUS_SPRITE_SLEEPLESS @ STATUS_SLEEPLESS
.4byte STATUS_SPRITE_SLEEP @ STATUS_NIGHTMARE
.4byte 0 @ STATUS_YAWNING
.4byte STATUS_SPRITE_SLEEP @ STATUS_NAPPING
.global gStatusSpriteMasks_BurnClassStatus
gStatusSpriteMasks_BurnClassStatus: @ 80F66B4
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_BURNED @ STATUS_BURN
.4byte STATUS_SPRITE_POISONED @ STATUS_POISONED
.4byte STATUS_SPRITE_BADLY_POISONED @ STATUS_BADLY_POISONED
.4byte 0 @ STATUS_PARALYSIS
.global gStatusSpriteMasks_FrozenClassStatus
gStatusSpriteMasks_FrozenClassStatus: @ 80F66C8
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_FROZEN @ STATUS_FROZEN
.4byte 0 @ STATUS_SHADOW_HOLD
.4byte 0 @ STATUS_WRAP
.4byte 0 @ STATUS_WRAPPED
.4byte 0 @ STATUS_INGRAIN
.4byte 0 @ STATUS_PETRIFIED
.4byte 0 @ STATUS_CONSTRICTION
.global gStatusSpriteMasks_CringeClassStatus
gStatusSpriteMasks_CringeClassStatus: @ 80F66E8
.4byte 0 @ STATUS_NONE
.4byte 0 @ STATUS_CRINGE
.4byte STATUS_SPRITE_CONFUSED @ STATUS_CONFUSED
.4byte 0 @ STATUS_PAUSED
.4byte STATUS_SPRITE_COWERING @ STATUS_COWERING
.4byte STATUS_SPRITE_TAUNTED @ STATUS_TAUNTED
.4byte STATUS_SPRITE_ENCORE @ STATUS_ENCORE
.4byte 0 @ STATUS_INFATUATED
.global gStatusSpriteMasks_BideClassStatus
gStatusSpriteMasks_BideClassStatus: @ 80F6708
.4byte 0 @ STATUS_NONE
.4byte 0 @ STATUS_BIDE
.4byte 0 @ STATUS_SOLARBEAM
.4byte 0 @ STATUS_SKY_ATTACK
.4byte 0 @ STATUS_RAZOR_WIND
.4byte 0 @ STATUS_FOCUS_PUNCH
.4byte 0 @ STATUS_SKULL_BASH
.4byte 0 @ STATUS_FLYING
.4byte 0 @ STATUS_BOUNCING
.4byte 0 @ STATUS_DIVING
.4byte 0 @ STATUS_DIGGING
.4byte 0 @ STATUS_CHARGING
.4byte 0 @ STATUS_ENRAGED
.global gStatusSpriteMasks_ReflectClassStatus
gStatusSpriteMasks_ReflectClassStatus: @ 80F673C
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_SHIELD_BLUE @ STATUS_REFLECT
.4byte STATUS_SPRITE_SHIELD_RED @ STATUS_SAFEGUARD
.4byte STATUS_SPRITE_SHIELD_YELLOW @ STATUS_LIGHT_SCREEN
.4byte STATUS_SPRITE_SHIELD_BLUE @ STATUS_COUNTER
.4byte STATUS_SPRITE_SHIELD_YELLOW @ STATUS_MAGIC_COAT
.4byte 0 @ STATUS_WISH
.4byte STATUS_SPRITE_SHIELD_GREEN @ STATUS_PROTECT
.4byte STATUS_SPRITE_SHIELD_RED @ STATUS_MIRROR_COAT
.4byte STATUS_SPRITE_ENDURE @ STATUS_ENDURING
.4byte STATUS_SPRITE_SHIELD_BLUE @ STATUS_MINI_COUNTER
.4byte STATUS_SPRITE_SHIELD_GREEN @ STATUS_MIRROR_MOVE
.4byte 0 @ STATUS_CONVERSION2
.4byte STATUS_SPRITE_SHIELD_GREEN @ STATUS_VITAL_THROW
.4byte STATUS_SPRITE_SHIELD_BLUE @ STATUS_MIST
.global gStatusSpriteMasks_CurseClassStatus
gStatusSpriteMasks_CurseClassStatus: @ 80F6778
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_CURSED @ STATUS_CURSED
.4byte 0 @ STATUS_DECOY
.4byte STATUS_SPRITE_SNATCH @ STATUS_SNATCH
.global gStatusSpriteMasks_LeechSeedClassStatus
gStatusSpriteMasks_LeechSeedClassStatus: @ 80F6788
.4byte 0 @ STATUS_NONE
.4byte 0 @ STATUS_LEECH_SEED
.4byte 0 @ STATUS_DESTINY_BOND
.global gStatusSpriteMasks_SureShotClassStatus
gStatusSpriteMasks_SureShotClassStatus: @ 80F6794
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_SURE_SHOT @ STATUS_SURE_SHOT
.4byte STATUS_SPRITE_WHIFFER @ STATUS_WHIFFER
.4byte STATUS_SPRITE_SET_DAMAGE @ STATUS_SET_DAMAGE
.4byte STATUS_SPRITE_FOCUS_ENERGY @ STATUS_FOCUS_ENERGY
.global gStatusSpriteMasks_LongTossClassStatus
gStatusSpriteMasks_LongTossClassStatus: @ 80F67A8
.4byte 0 @ STATUS_NONE
.4byte 0 @ STATUS_LONG_TOSS
.4byte 0 @ STATUS_PIERCE
.global gStatusSpriteMasks_InvisibleClassStatus
gStatusSpriteMasks_InvisibleClassStatus: @ 80F67B4
.4byte 0 @ STATUS_NONE
.4byte 0 @ STATUS_INVISIBLE
.4byte 0 @ STATUS_TRANSFORMED
.4byte 0 @ STATUS_MOBILE
.global gStatusSpriteMasks_BlinkerClassStatus
gStatusSpriteMasks_BlinkerClassStatus: @ 80F67C4
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_BLINKER @ STATUS_BLINKER
.4byte STATUS_SPRITE_CROSS_EYED @ STATUS_CROSS_EYED
.4byte STATUS_SPRITE_EYEDROPS @ STATUS_EYEDROPS
.global gStatusSpriteMasks_MuzzledStatus
gStatusSpriteMasks_MuzzledStatus: @ 80F67D4
.4byte 0 @ STATUS_NONE
.4byte STATUS_SPRITE_MUZZLED @ STATUS_MUZZLED
.global gUnknown_80F67DC
gUnknown_80F67DC: @ 80F67DC
@ u16[4]. They are sound effect IDs
.byte 0xD8, 0x00, 0xD9, 0x00
.byte 0xD9, 0x00, 0x73, 0x01
.global gUnknown_80F67E4
gUnknown_80F67E4: @ 80F67E4
@ u16[4]. They are sound effect IDs
.byte 0xDA, 0x00, 0xDB, 0x00
.byte 0xDB, 0x00, 0x74, 0x01
.global gUnknown_80F67EC
gUnknown_80F67EC: @ 80F67EC
@@ -175,7 +29,9 @@ gUnknown_80F683C: @ 80F683C
gUnknown_80F6850: @ 80F6850
@ replacing .incbin "baserom.gba", 0xF6850, 0x10
.byte 0x9e, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, 0x01
.byte 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00
.string "pksdir0"
.align 2,0
.global gSpeedTurns
gSpeedTurns: @ 80F6860

3
data/pksdir_0.s Normal file
View File

@@ -0,0 +1,3 @@
.section .rodata
.string "pksdir0\0"

View File

@@ -203,7 +203,6 @@ SECTIONS {
src/dungeon_map.o(.text);
src/code_8040094_1.o(.text);
src/code_8041AD0.o(.text);
src/code_804267C.o(.text);
src/code_8042B34.o(.text);
src/dungeon_engine.o(.text);
src/dungeon_action.o(.text);
@@ -530,7 +529,6 @@ SECTIONS {
src/personality_test2.o(.rodata);
src/code_803D0D8.o(.rodata);
src/dungeon_util.o(.rodata);
src/dungeon_ai_movement.o(.rodata);
data/data_80F4D44.o(.rodata);
src/dungeon_config.o(.rodata);
data/data_80F59C8_1.o(.rodata);
@@ -540,6 +538,8 @@ SECTIONS {
data/data_80F59C8_0.o(.rodata);
src/dungeon_map.o(.rodata);
src/code_8040094_1.o(.rodata);
data/pksdir_0.o(.rodata);
src/code_8041AD0.o(.rodata);
data/data_80F59C8_5.o(.rodata);
src/dungeon_items.o(.rodata);
data/data_80F59C8_7.o(.rodata);

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "globaldata.h"
#include "constants/direction.h"
#include "constants/status.h"
#include "constants/type.h"
@@ -20,20 +21,24 @@
#include "items.h"
#include "math.h"
#include "sprite.h"
#include "code_803E668.h"
#include "dungeon.h"
#include "code_8042B34.h"
#include "dungeon_leader.h"
#include "dungeon_map.h"
#include "dungeon_message.h"
#include "dungeon_music.h"
#include "memory.h"
#include "random.h"
#include "dungeon_util_1.h"
#include "code_800E9E4.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[];
// Unknown dungeon file. File split is correct.
extern const s32 gUnknown_80F67EC[8];
extern const u32 gUnknown_80F680C[8];
extern const u16 gUnknown_80F682C[8];
extern const u8 *gPtrFeralFoundItemMessage[];
extern void sub_803ED30(u8, Entity *pokemon, u8, u8);
extern u32 sub_806F62C(u32);
@@ -47,11 +52,167 @@ extern s32 gDungeonBrightness;
extern void sub_800DBBC(void);
extern void sub_803EA10(void);
extern void sub_8042E98(void);
extern void sub_800EF28(u8);
extern u32 sub_800E448(u8, DungeonPos *);
extern void sub_80429A0(Entity *);
void sub_8042B34(s32 a0, s32 a1, s32 a2);
extern bool8 sub_8042CC0(void);
extern void sub_8042D7C(void);
extern u8 GetFloorType(void);
extern bool8 sub_8045888(Entity *);
extern s32 sub_80416E0(PixelPos*, u32, bool8);
extern u32 sub_8041764(unkStruct_80416E0 *, bool8);
extern u32 sub_800E49C();
extern void sub_800F15C(s32);
extern void sub_800EF40(u8 r0, u8 r1);
extern s32 sub_800E6D8(s32);
extern void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3, s32 param_4, s32 param_5);
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);
void sub_804178C(u8 param_1);
struct UnkStruct_80F6624
{
s16 unk0;
s32 unk4;
};
static const struct UnkStruct_80F6624 gUnknown_80F6624[][3] = {
{{0x178, 3}, {0x179, 1}, {0, 0}},
{{0x17A, 1}, {0x17B, 2}, {0x17C, 3}},
{{0x17D, 1}, {0x17E, 2}, {0, 0}},
{{0x17F, 2}, {0, 0}, {0, 0}},
{{0x1B9, 1}, {0x1BA, 2}, {0x1BB, 3}},
};
static const u32 sStatusSpriteMasks_SleepClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_SLEEP] = STATUS_SPRITE_SLEEP,
[STATUS_SLEEPLESS] = STATUS_SPRITE_SLEEPLESS,
[STATUS_NIGHTMARE] = STATUS_SPRITE_SLEEP,
[STATUS_YAWNING] = 0,
[STATUS_NAPPING] = STATUS_SPRITE_SLEEP,
};
static const u32 sStatusSpriteMasks_BurnClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_BURN] = STATUS_SPRITE_BURNED,
[STATUS_POISONED] = STATUS_SPRITE_POISONED,
[STATUS_BADLY_POISONED] = STATUS_SPRITE_BADLY_POISONED,
[STATUS_PARALYSIS] = 0,
};
static const u32 sStatusSpriteMasks_FrozenClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_FROZEN] = STATUS_SPRITE_FROZEN,
[STATUS_SHADOW_HOLD] = 0,
[STATUS_WRAP] = 0,
[STATUS_WRAPPED] = 0,
[STATUS_INGRAIN] = 0,
[STATUS_PETRIFIED] = 0,
[STATUS_CONSTRICTION] = 0,
};
static const u32 sStatusSpriteMasks_CringeClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_CRINGE] = 0,
[STATUS_CONFUSED] = STATUS_SPRITE_CONFUSED,
[STATUS_PAUSED] = 0,
[STATUS_COWERING] = STATUS_SPRITE_COWERING,
[STATUS_TAUNTED] = STATUS_SPRITE_TAUNTED,
[STATUS_ENCORE] = STATUS_SPRITE_ENCORE,
[STATUS_INFATUATED] = 0,
};
static const u32 sStatusSpriteMasks_BideClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_BIDE] = 0,
[STATUS_SOLARBEAM] = 0,
[STATUS_SKY_ATTACK] = 0,
[STATUS_RAZOR_WIND] = 0,
[STATUS_FOCUS_PUNCH] = 0,
[STATUS_SKULL_BASH] = 0,
[STATUS_FLYING] = 0,
[STATUS_BOUNCING] = 0,
[STATUS_DIVING] = 0,
[STATUS_DIGGING] = 0,
[STATUS_CHARGING] = 0,
[STATUS_ENRAGED] = 0,
};
static const u32 sStatusSpriteMasks_ReflectClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_REFLECT] = STATUS_SPRITE_SHIELD_BLUE,
[STATUS_SAFEGUARD] = STATUS_SPRITE_SHIELD_RED,
[STATUS_LIGHT_SCREEN] = STATUS_SPRITE_SHIELD_YELLOW,
[STATUS_COUNTER] = STATUS_SPRITE_SHIELD_BLUE,
[STATUS_MAGIC_COAT] = STATUS_SPRITE_SHIELD_YELLOW,
[STATUS_WISH] = 0,
[STATUS_PROTECT] = STATUS_SPRITE_SHIELD_GREEN,
[STATUS_MIRROR_COAT] = STATUS_SPRITE_SHIELD_RED,
[STATUS_ENDURING] = STATUS_SPRITE_ENDURE,
[STATUS_MINI_COUNTER] = STATUS_SPRITE_SHIELD_BLUE,
[STATUS_MIRROR_MOVE] = STATUS_SPRITE_SHIELD_GREEN,
[STATUS_CONVERSION2] = 0,
[STATUS_VITAL_THROW] = STATUS_SPRITE_SHIELD_GREEN,
[STATUS_MIST] = STATUS_SPRITE_SHIELD_BLUE,
};
static const u32 sStatusSpriteMasks_CurseClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_CURSED] = STATUS_SPRITE_CURSED,
[STATUS_DECOY] = 0,
[STATUS_SNATCH] = STATUS_SPRITE_SNATCH,
};
static const u32 sStatusSpriteMasks_LeechSeedClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_LEECH_SEED] = 0,
[STATUS_DESTINY_BOND] = 0,
};
static const u32 sStatusSpriteMasks_SureShotClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_SURE_SHOT] = STATUS_SPRITE_SURE_SHOT,
[STATUS_WHIFFER] = STATUS_SPRITE_WHIFFER,
[STATUS_SET_DAMAGE] = STATUS_SPRITE_SET_DAMAGE,
[STATUS_FOCUS_ENERGY] = STATUS_SPRITE_FOCUS_ENERGY,
};
static const u32 sStatusSpriteMasks_LongTossClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_LONG_TOSS] = 0,
[STATUS_PIERCE] = 0,
};
static const u32 sStatusSpriteMasks_InvisibleClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_INVISIBLE] = 0,
[STATUS_TRANSFORMED] = 0,
[STATUS_MOBILE] = 0,
};
static const u32 sStatusSpriteMasks_BlinkerClassStatus[] = {
[STATUS_NONE] = 0,
[STATUS_BLINKER] = STATUS_SPRITE_BLINKER,
[STATUS_CROSS_EYED] = STATUS_SPRITE_CROSS_EYED,
[STATUS_EYEDROPS] = STATUS_SPRITE_EYEDROPS,
};
static const u32 sStatusSpriteMasks_MuzzledStatus[] = {
[STATUS_NONE] = 0,
/*STATUS_MUZZLED not defined*/[1] = STATUS_SPRITE_MUZZLED,
};
static const u16 gUnknown_80F67DC[4] = {
0xD8, 0xD9, 0xD9, 0x173
};
static const u16 gUnknown_80F67E4[4] = {
0xDA, 0xDB, 0xDB, 0x174
};
s32 sub_804151C(Entity *entity, s32 r1, u8 r2)
{
@@ -258,21 +419,21 @@ void EntityUpdateStatusSprites(Entity *entity)
flag = (temp) != 0;
}
if (flag) {
spriteStatus = gStatusSpriteMasks_SleepClassStatus[entityInfo->sleepClassStatus.status];
spriteStatus = sStatusSpriteMasks_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];
sStatusSpriteMasks_BurnClassStatus[entityInfo->burnClassStatus.status] |
sStatusSpriteMasks_FrozenClassStatus[entityInfo->frozenClassStatus.status] |
sStatusSpriteMasks_CringeClassStatus[entityInfo->cringeClassStatus.status] |
sStatusSpriteMasks_BideClassStatus[entityInfo->bideClassStatus.status] |
sStatusSpriteMasks_ReflectClassStatus[entityInfo->reflectClassStatus.status] |
sStatusSpriteMasks_CurseClassStatus[entityInfo->curseClassStatus.status] |
sStatusSpriteMasks_LeechSeedClassStatus[entityInfo->leechSeedClassStatus.status] |
sStatusSpriteMasks_SureShotClassStatus[entityInfo->sureShotClassStatus.status] |
sStatusSpriteMasks_LongTossClassStatus[entityInfo->longTossClassStatus.status] |
sStatusSpriteMasks_InvisibleClassStatus[entityInfo->invisibleClassStatus.status] |
sStatusSpriteMasks_BlinkerClassStatus[entityInfo->blinkerClassStatus.status] |
sStatusSpriteMasks_MuzzledStatus[entityInfo->muzzled.muzzled];
if (entityInfo->grudge) {
spriteStatus = spriteStatus | STATUS_SPRITE_GRUDGE;
@@ -961,10 +1122,6 @@ void sub_8042238(Entity *pokemon, Entity *target)
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;
@@ -1014,3 +1171,571 @@ void sub_804225C(Entity *entity, DungeonPos *pos, u8 trapId)
break;
}
}
void sub_8042390(Entity *entity, Item *item)
{
s32 sVar1;
s32 counter;
u8 id;
u32 uVar6;
DungeonPos asStack_24[4];
DungeonPos local_14;
if (sub_8042768(entity)) {
id = !ItemSticky(item) ? item->id : ITEM_NOTHING;
sub_800EF40(id, 0);
sub_800EF64();
sub_803E708(4,0x42);
local_14.x = (entity->pixelPos).x / 256;
local_14.y = (entity->pixelPos).y / 256;
sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1;
sub_8005700(asStack_24,&entity->axObj);
uVar6 = sub_800E49C(id,&local_14,asStack_24,0,sVar1);
for (counter = 0; counter < 1000; counter++) {
DungeonRunFrameActions(0x42);
if (!sub_800E9A8(uVar6)) {
break;
}
}
}
}
void sub_804245C(Entity *entity, Item *item)
{
s32 sVar1;
s32 counter;
u8 id;
u32 uVar6;
DungeonPos asStack_24[4];
DungeonPos local_14;
if (sub_8042768(entity)) {
id = !ItemSticky(item) ? item->id : ITEM_NOTHING;
sub_800EF64();
sub_803E708(4,0x42);
local_14.x = (entity->pixelPos).x / 256;
local_14.y = (entity->pixelPos).y / 256;
sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1;
sub_8005700(asStack_24,&entity->axObj);
uVar6 = sub_800E49C(id,&local_14,asStack_24,1,sVar1);
for (counter = 0; counter < 1000; counter++) {
DungeonRunFrameActions(0x42);
if (!sub_800E9A8(uVar6)) {
break;
}
}
}
}
s32 sub_8042520(Entity *a0)
{
s32 i;
s32 uVar4;
DungeonPos pos;
u32 dir;
s32 iVar8;
unkStruct_80416E0 local_58;
unkStruct_2039DB0 u203; // Unused
PixelPos local_2c;
if (sub_8045888(a0)) {
dir = GetEntInfo(a0)->action.direction;
pos.x = a0->pixelPos.x / 0x100;
pos.y = a0->pixelPos.y / 0x100;
iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2;
local_58.unk0 = 357;
local_58.unk4 = 0;
local_58.dir = dir;
local_58.x = pos.x;
local_58.y = pos.y;
local_58.unk10 = 0;
local_58.unk12 = 0;
local_58.unk14 = -1;
local_58.unk18 = iVar8;
sub_8004E8C(&u203);
uVar4 = sub_8041764(&local_58, 0);
for (i = 0; i < 6; i++) {
sub_800E8AC(uVar4, &pos, 0, iVar8, 0);
DungeonRunFrameActions(66);
pos.x += gAdjacentTileOffsets[dir].x * 4;
pos.y += gAdjacentTileOffsets[dir].y * 4;
iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2;
}
sub_800DBBC();
local_2c.x = pos.x * 0x100;
local_2c.y = pos.y * 0x100;
uVar4 = sub_80416E0(&local_2c, 416, TRUE);
}
else
{
uVar4 = -1;
}
return uVar4;
}
// This func plays the appropriate ascend/descend SFX for stairs depending on the direction
void PlayStairsSound(void)
{
u32 songIndex;
songIndex = 997;
switch (GetFloorType()) {
case 0:
default:
songIndex = IsStairDirectionUp(gDungeon->unk644.dungeonLocation.id) ? 340 : 341;
break;
case 1:
case 2:
break;
}
PlaySoundEffect(songIndex);
}
void sub_80426C8(u32 a0, u32 a1)
{
if (a1 == 3)
DungeonStartNewBGM(0);
if (a0 != 4)
PlaySoundEffect(gUnknown_80F67DC[a1]);
else
PlaySoundEffect(gUnknown_80F67E4[a1]);
sub_8042B34(a0, a1, 0x80);
while (sub_8042CC0())
DungeonRunFrameActions(0x46);
sub_8042D7C();
LoadDungeonMapPalette();
sub_8052210(1);
}
void sub_8042730(Entity *a0, void *unused)
{
s32 i;
sub_806CDD4(a0, 8, 8);
for (i = 0; i < 100; i++) {
DungeonRunFrameActions(0x51);
if ((a0->axObj.axdata.sub1.unk10 & 3) != 0 || a0->axObj.unk43_animId2 != 8)
break;
}
}
bool8 sub_8042768(Entity* pokemon)
{
if (!pokemon->isVisible)
return FALSE;
if (gDungeon->unk181e8.blinded) {
if (gDungeon->unk181e8.cameraTarget == pokemon)
return TRUE;
else
return FALSE;
}
return sub_8045888(pokemon);
}
void sub_80427AC(void)
{
Entity *entity;
EntityInfo *enInfo;
s32 i;
for (i = 0; i < DUNGEON_MAX_POKEMON; i++) {
entity = gDungeon->activePokemon[i];
if (EntityIsValid(entity)) {
enInfo = GetEntInfo(entity);
if (enInfo->unkF3) {
enInfo->unkF3 = FALSE;
sub_80429A0(entity);
if (!enInfo->isNotTeamMember) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0);
DisplayDungeonLoggableMessageTrue(entity, *gPtrFeralFoundItemMessage);
}
}
}
}
}
void sub_8042818(u8 a0, bool8 a1)
{
Entity *en;
en = gDungeon->unk181e8.cameraTarget;
if (en == NULL)
en = GetLeader();
if (gUnknown_80F682C[a0] != 997)
sub_80421C0(en, gUnknown_80F682C[a0]);
if (gUnknown_80F67EC[a0] < 0)
return;
if (a1 && !IsBossFight())
sub_804151C(en, gUnknown_80F67EC[a0], 0);
else
sub_804151C(en, gUnknown_80F680C[a0], 0);
}
void sub_80428A0(Entity *r0)
{
sub_804151C(r0, 0x29, 1);
}
void sub_80428B0(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80428C4(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80428D8(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80428EC(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_8042900(Entity *r0)
{
sub_804151C(r0, 0xD4 << 1, 0);
}
void ShowVisualFlags(Entity *r0)
{
sub_804151C(r0, 0x29, 0);
}
void sub_8042920(Entity *r0)
{
sub_804151C(r0, 0x48, 0);
}
void sub_8042930(Entity *r0)
{
sub_804151C(r0, 0xD3 << 1, 1);
}
void sub_8042940(Entity *r0)
{
sub_804151C(r0, 0xC7 << 1, 0);
}
void sub_8042950(Entity *r0)
{
sub_804151C(r0, 0xD8 << 1, 1);
sub_803E708(0xA, 0x42);
}
void sub_8042968(Entity *r0)
{
sub_804151C(r0, 0xD4 << 1, 0);
}
void sub_8042978(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_804298C(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80429A0(Entity *r0)
{
sub_804151C(r0, 0x199, 0);
}
void sub_80429B4(Entity *r0)
{
sub_804151C(r0, 0x1ab, 0);
}
void sub_80429C8(Entity *r0)
{
sub_804151C(r0, 0x4, 1);
}
void sub_80429D8(Entity *r0)
{
sub_804151C(r0, 0x8F << 1, 1);
}
void sub_80429E8(Entity *r0)
{
sub_804151C(r0, 0x11d, 1);
}
void sub_80429FC(DungeonPos *r0)
{
sub_80416A4(r0, 0x19E, TRUE);
sub_80421C0(NULL, 0xD4);
}
void sub_8042A14(DungeonPos *r0)
{
sub_80416A4(r0, 0x36, TRUE);
}
void sub_8042A24(Entity *r0)
{
sub_804151C(r0, 0x15, 1);
}
void sub_8042A34(DungeonPos *r0)
{
sub_80416A4(r0, 0x13E, FALSE);
}
void sub_8042A44(Entity *r0)
{
sub_804151C(r0, 0xDA << 1, 1);
}
void sub_8042A54(DungeonPos *r0)
{
sub_80416A4(r0, 0x37, TRUE);
}
void sub_8042A64(DungeonPos *r0)
{
sub_80416A4(r0, 0x29, TRUE);
}
void sub_8042A74(Entity *r0)
{
sub_804151C(r0, 0x18, 1);
}
void sub_8042A84(s16 param_1, Entity *entity, u32 param_3)
{
s32 iVar3;
s32 r6;
s32 param_1_s16;
param_1_s16 = param_1;
r6 = IntToF248_2(2).raw;
if (sub_8042768(entity)) {
sub_804151C(entity,param_1_s16,0);
sub_803E708(param_3,0x42);
do {
if (entity->unk1C.raw > IntToF248_2(199.999).raw) break;
DungeonRunFrameActions(0x42);
entity->unk1C.raw += + r6;
r6 += IntToF248_2(1).raw;
iVar3 = (entity->pixelPos.y - entity->unk1C.raw) / 256;
} while (-8 <= iVar3 - gDungeon->unk181e8.cameraPixelPos.y);
entity->isVisible = 0;
sub_804178C(0);
}
}
void sub_8042B0C(Entity *entity)
{
sub_8042A84(0x13e, entity, 5);
}
void sub_8042B20(Entity *entity)
{
sub_8042A84(0x1BC, entity, 0xE);
}
struct UnkStruct_203B414
{
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC[16];
s32 unk4C[16];
struct DungeonPos unk8C[16];
};
extern struct UnkStruct_203B414 *sUnknown_203B414;
extern const unkStruct_2039DB0 gUnknown_80F683C;
void sub_8042B34(s32 a0, s32 a1, s32 a2)
{
unkStruct_80416E0 spStruct;
unkStruct_2039DB0 stack1C;
s32 i;
s32 r8 = 0;
Entity *leader = xxx_call_GetLeader();
sUnknown_203B414 = MemoryAlloc(sizeof(*sUnknown_203B414), 7);
sUnknown_203B414->unk0 = a0;
sUnknown_203B414->unk8 = (a1 + 1) * 4;
sub_800EE5C(gUnknown_80F6624[a0][0].unk0);
sub_800EF64();
DungeonRunFrameActions(0x46);
sUnknown_203B414->unk4 = a2;
for (i = 0; i < sUnknown_203B414->unk8; i++) {
s32 rnd;
spStruct.unk0 = gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk0;
spStruct.unk4 = i;
spStruct.dir = 0;
spStruct.x = leader->pixelPos.x / 256;
spStruct.y = leader->pixelPos.y / 256;
rnd = RandInt(2);
sUnknown_203B414->unk4C[i] = (gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk4 * 2) + rnd;
sUnknown_203B414->unk8C[i].x = RandInt(240) + 152;
sUnknown_203B414->unk8C[i].y = RandInt(8 + (i * 2)) - (((i - (i / 4 * 4)) * 40) - 24);
spStruct.unk10 = sUnknown_203B414->unk8C[i].x;
spStruct.unk12 = sUnknown_203B414->unk8C[i].y;
spStruct.unk14 = 4;
spStruct.unk18 = 0xFFFF;
stack1C = gUnknown_80F683C;
sUnknown_203B414->unkC[i] = sub_800E890(&spStruct);
r8++;
if (r8 >= 3 || gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk0 == 0) {
r8 = 0;
}
sub_800F15C(sub_800ECA4(spStruct.unk0)->effectId);
}
}
bool8 sub_8042CC0(void)
{
s32 i;
bool8 ret = FALSE;
if (sUnknown_203B414->unk4 != 0) {
ret = TRUE;
sUnknown_203B414->unk4--;
}
for (i = 0; i < sUnknown_203B414->unk8; i++) {
sUnknown_203B414->unk8C[i].x -= sUnknown_203B414->unk4C[i];
if (sUnknown_203B414->unk8C[i].x <= -152) {
if (sUnknown_203B414->unk4 > 0) {
sUnknown_203B414->unk8C[i].x = 152;
}
else {
sUnknown_203B414->unk8C[i].x = -152;
}
}
else {
ret = TRUE;
}
sub_800E8AC(sUnknown_203B414->unkC[i], NULL, &sUnknown_203B414->unk8C[i], 0, NULL);
}
sub_800E90C(&gDungeon->unk181e8.cameraPixelPos);
return ret;
}
void sub_8042D7C(void)
{
s32 i;
if (sUnknown_203B414 == NULL)
return;
for (i = 0; i < sUnknown_203B414->unk8; i++) {
if (sub_800E9A8(sUnknown_203B414->unkC[i])) {
sub_800DC14(sUnknown_203B414->unkC[i]);
}
}
sub_800DBBC();
MemoryFree(sUnknown_203B414);
sUnknown_203B414 = NULL;
}
void sub_8042DD4(s32 a0, Entity *a1, s32 a2)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 == -1) {
strPtr->unk0 = a0;
strPtr->unkC = a1;
strPtr->unk4 = a2;
strPtr->unk8 = sub_800E6D8(a0);
return;
}
}
}
static UNUSED bool32 sub_8042E1C(void)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 != -1 && sub_800E9A8(strPtr->unk0)) {
return TRUE;
}
}
return FALSE;
}
void sub_8042E5C(void)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 >= 0 && !sub_800E9A8(strPtr->unk0)) {
strPtr->unk0 = -1;
strPtr->unkC = NULL;
}
}
}
void sub_8042E98(void)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
strPtr->unk0 = -1;
strPtr->unk4 = 0;
strPtr->unkC = NULL;
}
}
void sub_8042EC8(Entity *a0, s32 a1)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 >= 0 && strPtr->unkC == a0) {
DungeonPos sp8 = {a0->pixelPos.x / 256, a0->pixelPos.y / 256};
DungeonPos sp4 = {0};
EntityInfo *entInfo = GetEntInfo(a0);
if (strPtr->unk8 != -1) {
sub_800569C(&sp4,
&a0->axObj,
strPtr->unk8);
}
sub_800EB24(strPtr->unk0, &sp8, &sp4,a1, entInfo->action.direction);
}
}
}

View File

@@ -1,426 +0,0 @@
#include "global.h"
#include "structs/str_dungeon.h"
#include "code_800DAC0.h"
#include "code_800ED38.h"
#include "code_803E46C.h"
#include "code_803E668.h"
#include "code_8041AD0.h"
#include "code_804267C.h"
#include "code_806CD90.h"
#include "dungeon.h"
#include "code_8042B34.h"
#include "dungeon_leader.h"
#include "dungeon_map.h"
#include "dungeon_message.h"
#include "dungeon_music.h"
#include "dungeon_util.h"
#include "items.h"
#include "sprite.h"
extern const u16 gUnknown_80F67DC[4];
extern const u16 gUnknown_80F67E4[4];
extern const s32 gUnknown_80F67EC[8];
extern const u32 gUnknown_80F680C[8];
extern const u16 gUnknown_80F682C[8];
extern const u8 *gPtrFeralFoundItemMessage[];
extern void sub_804151C(Entity *pokemon, u32 r1, u8 r2);
extern void sub_804178C(u32);
extern void sub_80416A4(DungeonPos *r0, u32 r1, bool8 r2);
extern void sub_80429A0(Entity *);
extern void sub_8042B34(u32, u32, u32);
extern bool8 sub_8042CC0(void);
extern void sub_8042D7C(void);
extern u8 GetFloorType(void);
extern bool8 sub_8045888(Entity *);
extern s32 sub_80416E0(PixelPos*, u32, bool8);
extern u32 sub_8041764(unkStruct_80416E0 *, bool8);
extern u32 sub_800E49C();
extern void sub_800EF40(u8 r0, u8 r1);
void sub_8042390(Entity *entity, Item *item)
{
s32 sVar1;
s32 counter;
u8 id;
u32 uVar6;
DungeonPos asStack_24[4];
DungeonPos local_14;
if (sub_8042768(entity)) {
id = !ItemSticky(item) ? item->id : ITEM_NOTHING;
sub_800EF40(id, 0);
sub_800EF64();
sub_803E708(4,0x42);
local_14.x = (entity->pixelPos).x / 256;
local_14.y = (entity->pixelPos).y / 256;
sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1;
sub_8005700(asStack_24,&entity->axObj);
uVar6 = sub_800E49C(id,&local_14,asStack_24,0,sVar1);
for (counter = 0; counter < 1000; counter++) {
DungeonRunFrameActions(0x42);
if (!sub_800E9A8(uVar6)) {
break;
}
}
}
}
void sub_804245C(Entity *entity, Item *item)
{
s32 sVar1;
s32 counter;
u8 id;
u32 uVar6;
DungeonPos asStack_24[4];
DungeonPos local_14;
if (sub_8042768(entity)) {
id = !ItemSticky(item) ? item->id : ITEM_NOTHING;
sub_800EF64();
sub_803E708(4,0x42);
local_14.x = (entity->pixelPos).x / 256;
local_14.y = (entity->pixelPos).y / 256;
sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1;
sub_8005700(asStack_24,&entity->axObj);
uVar6 = sub_800E49C(id,&local_14,asStack_24,1,sVar1);
for (counter = 0; counter < 1000; counter++) {
DungeonRunFrameActions(0x42);
if (!sub_800E9A8(uVar6)) {
break;
}
}
}
}
s32 sub_8042520(Entity *a0)
{
s32 i;
s32 uVar4;
DungeonPos pos;
u32 dir;
s32 iVar8;
unkStruct_80416E0 local_58;
unkStruct_2039DB0 u203; // Unused
PixelPos local_2c;
if (sub_8045888(a0)) {
dir = GetEntInfo(a0)->action.direction;
pos.x = a0->pixelPos.x / 0x100;
pos.y = a0->pixelPos.y / 0x100;
iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2;
local_58.unk0 = 357;
local_58.unk4 = 0;
local_58.dir = dir;
local_58.x = pos.x;
local_58.y = pos.y;
local_58.unk10 = 0;
local_58.unk12 = 0;
local_58.unk14 = -1;
local_58.unk18 = iVar8;
sub_8004E8C(&u203);
uVar4 = sub_8041764(&local_58, 0);
for (i = 0; i < 6; i++) {
sub_800E8AC(uVar4, &pos, 0, iVar8, 0);
DungeonRunFrameActions(66);
pos.x += gAdjacentTileOffsets[dir].x * 4;
pos.y += gAdjacentTileOffsets[dir].y * 4;
iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2;
}
sub_800DBBC();
local_2c.x = pos.x * 0x100;
local_2c.y = pos.y * 0x100;
uVar4 = sub_80416E0(&local_2c, 416, TRUE);
}
else
{
uVar4 = -1;
}
return uVar4;
}
// This func plays the appropriate ascend/descend SFX for stairs depending on the direction
void PlayStairsSound(void)
{
u32 songIndex;
songIndex = 997;
switch (GetFloorType()) {
case 0:
default:
songIndex = IsStairDirectionUp(gDungeon->unk644.dungeonLocation.id) ? 340 : 341;
break;
case 1:
case 2:
break;
}
PlaySoundEffect(songIndex);
}
void sub_80426C8(u32 a0, u32 a1)
{
if (a1 == 3)
DungeonStartNewBGM(0);
if (a0 != 4)
PlaySoundEffect(gUnknown_80F67DC[a1]);
else
PlaySoundEffect(gUnknown_80F67E4[a1]);
sub_8042B34(a0, a1, 0x80);
while (sub_8042CC0())
DungeonRunFrameActions(0x46);
sub_8042D7C();
LoadDungeonMapPalette();
sub_8052210(1);
}
void sub_8042730(Entity *a0, void *unused)
{
s32 i;
sub_806CDD4(a0, 8, 8);
for (i = 0; i < 100; i++) {
DungeonRunFrameActions(0x51);
if ((a0->axObj.axdata.sub1.unk10 & 3) != 0 || a0->axObj.unk43_animId2 != 8)
break;
}
}
bool8 sub_8042768(Entity* pokemon)
{
if (!pokemon->isVisible)
return FALSE;
if (gDungeon->unk181e8.blinded) {
if (gDungeon->unk181e8.cameraTarget == pokemon)
return TRUE;
else
return FALSE;
}
return sub_8045888(pokemon);
}
void sub_80427AC(void)
{
Entity *entity;
EntityInfo *enInfo;
s32 i;
for (i = 0; i < 20; i++) {
entity = gDungeon->activePokemon[i];
if (EntityIsValid(entity)) {
enInfo = GetEntInfo(entity);
if (enInfo->unkF3) {
enInfo->unkF3 = FALSE;
sub_80429A0(entity);
if (!enInfo->isNotTeamMember) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0);
DisplayDungeonLoggableMessageTrue(entity, *gPtrFeralFoundItemMessage);
}
}
}
}
}
void sub_8042818(u8 a0, bool8 a1)
{
Entity *en;
en = gDungeon->unk181e8.cameraTarget;
if (en == NULL)
en = GetLeader();
if (gUnknown_80F682C[a0] != 997)
sub_80421C0(en, gUnknown_80F682C[a0]);
if (gUnknown_80F67EC[a0] < 0)
return;
if (a1 && !IsBossFight())
sub_804151C(en, gUnknown_80F67EC[a0], 0);
else
sub_804151C(en, gUnknown_80F680C[a0], 0);
}
void sub_80428A0(Entity *r0)
{
sub_804151C(r0, 0x29, 1);
}
void sub_80428B0(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80428C4(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80428D8(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80428EC(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_8042900(Entity *r0)
{
sub_804151C(r0, 0xD4 << 1, 0);
}
void ShowVisualFlags(Entity *r0)
{
sub_804151C(r0, 0x29, 0);
}
void sub_8042920(Entity *r0)
{
sub_804151C(r0, 0x48, 0);
}
void sub_8042930(Entity *r0)
{
sub_804151C(r0, 0xD3 << 1, 1);
}
void sub_8042940(Entity *r0)
{
sub_804151C(r0, 0xC7 << 1, 0);
}
void sub_8042950(Entity *r0)
{
sub_804151C(r0, 0xD8 << 1, 1);
sub_803E708(0xA, 0x42);
}
void sub_8042968(Entity *r0)
{
sub_804151C(r0, 0xD4 << 1, 0);
}
void sub_8042978(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_804298C(Entity *r0)
{
sub_804151C(r0, 0x1a9, 0);
}
void sub_80429A0(Entity *r0)
{
sub_804151C(r0, 0x199, 0);
}
void sub_80429B4(Entity *r0)
{
sub_804151C(r0, 0x1ab, 0);
}
void sub_80429C8(Entity *r0)
{
sub_804151C(r0, 0x4, 1);
}
void sub_80429D8(Entity *r0)
{
sub_804151C(r0, 0x8F << 1, 1);
}
void sub_80429E8(Entity *r0)
{
sub_804151C(r0, 0x11d, 1);
}
void sub_80429FC(DungeonPos *r0)
{
sub_80416A4(r0, 0x19E, TRUE);
sub_80421C0(NULL, 0xD4);
}
void sub_8042A14(DungeonPos *r0)
{
sub_80416A4(r0, 0x36, TRUE);
}
void sub_8042A24(Entity *r0)
{
sub_804151C(r0, 0x15, 1);
}
void sub_8042A34(DungeonPos *r0)
{
sub_80416A4(r0, 0x13E, FALSE);
}
void sub_8042A44(Entity *r0)
{
sub_804151C(r0, 0xDA << 1, 1);
}
void sub_8042A54(DungeonPos *r0)
{
sub_80416A4(r0, 0x37, TRUE);
}
void sub_8042A64(DungeonPos *r0)
{
sub_80416A4(r0, 0x29, TRUE);
}
void sub_8042A74(Entity *r0)
{
sub_804151C(r0, 0x18, 1);
}
void sub_8042A84(s16 param_1, Entity *entity, u32 param_3)
{
s32 iVar3;
s32 r6;
s32 param_1_s16;
param_1_s16 = param_1;
r6 = IntToF248_2(2).raw;
if (sub_8042768(entity)) {
sub_804151C(entity,param_1_s16,0);
sub_803E708(param_3,0x42);
do {
if (entity->unk1C.raw > IntToF248_2(199.999).raw) break;
DungeonRunFrameActions(0x42);
entity->unk1C.raw += + r6;
r6 += IntToF248_2(1).raw;
iVar3 = (entity->pixelPos.y - entity->unk1C.raw) / 256;
} while (-8 <= iVar3 - gDungeon->unk181e8.cameraPixelPos.y);
entity->isVisible = 0;
sub_804178C(0);
}
}
void sub_8042B0C(Entity *entity)
{
sub_8042A84(0x13e, entity, 5);
}
void sub_8042B20(Entity *entity)
{
sub_8042A84(0x1BC, entity, 0xE);
}

View File

@@ -39,10 +39,8 @@
#include "dungeon_random.h"
#include "dungeon_serializer.h"
#include "dungeon_util.h"
#include "dungeon_util_1.h"
#include "exclusive_pokemon.h"
#include "file_system.h"
#include "memory.h"
#include "moves.h"
#include "pokemon.h"
#include "random.h"
@@ -51,210 +49,12 @@
#include "text_3.h"
#include "weather.h"
extern void sub_800F15C(s32);
struct UnkStruct_203B414
{
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC[16];
s32 unk4C[16];
struct DungeonPos unk8C[16];
};
EWRAM_INIT DungeonPos gPlayerDotMapPosition = {100, 100};
static EWRAM_INIT struct UnkStruct_203B414 *sUnknown_203B414 = NULL;
EWRAM_INIT void *sUnknown_203B414 = NULL; // TODO: fix location
EWRAM_INIT Dungeon *gDungeon = NULL;
EWRAM_INIT u8 *gSerializedData_203B41C = NULL;
struct UnkStruct_80F6624
{
s16 unk0;
s32 unk4;
};
extern const struct UnkStruct_80F6624 gUnknown_80F6624[][3];
extern const unkStruct_2039DB0 gUnknown_80F683C;
// These functions are not part of dungeon's overlay5
void sub_8042B34(s32 a0, s32 a1, s32 a2)
{
unkStruct_80416E0 spStruct;
unkStruct_2039DB0 stack1C;
s32 i;
s32 r8 = 0;
Entity *leader = xxx_call_GetLeader();
sUnknown_203B414 = MemoryAlloc(sizeof(*sUnknown_203B414), 7);
sUnknown_203B414->unk0 = a0;
sUnknown_203B414->unk8 = (a1 + 1) * 4;
sub_800EE5C(gUnknown_80F6624[a0][0].unk0);
sub_800EF64();
DungeonRunFrameActions(0x46);
sUnknown_203B414->unk4 = a2;
for (i = 0; i < sUnknown_203B414->unk8; i++) {
s32 rnd;
spStruct.unk0 = gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk0;
spStruct.unk4 = i;
spStruct.dir = 0;
spStruct.x = leader->pixelPos.x / 256;
spStruct.y = leader->pixelPos.y / 256;
rnd = RandInt(2);
sUnknown_203B414->unk4C[i] = (gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk4 * 2) + rnd;
sUnknown_203B414->unk8C[i].x = RandInt(240) + 152;
sUnknown_203B414->unk8C[i].y = RandInt(8 + (i * 2)) - (((i - (i / 4 * 4)) * 40) - 24);
spStruct.unk10 = sUnknown_203B414->unk8C[i].x;
spStruct.unk12 = sUnknown_203B414->unk8C[i].y;
spStruct.unk14 = 4;
spStruct.unk18 = 0xFFFF;
stack1C = gUnknown_80F683C;
sUnknown_203B414->unkC[i] = sub_800E890(&spStruct);
r8++;
if (r8 >= 3 || gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk0 == 0) {
r8 = 0;
}
sub_800F15C(sub_800ECA4(spStruct.unk0)->effectId);
}
}
bool8 sub_8042CC0(void)
{
s32 i;
bool8 ret = FALSE;
if (sUnknown_203B414->unk4 != 0) {
ret = TRUE;
sUnknown_203B414->unk4--;
}
for (i = 0; i < sUnknown_203B414->unk8; i++) {
sUnknown_203B414->unk8C[i].x -= sUnknown_203B414->unk4C[i];
if (sUnknown_203B414->unk8C[i].x <= -152) {
if (sUnknown_203B414->unk4 > 0) {
sUnknown_203B414->unk8C[i].x = 152;
}
else {
sUnknown_203B414->unk8C[i].x = -152;
}
}
else {
ret = TRUE;
}
sub_800E8AC(sUnknown_203B414->unkC[i], NULL, &sUnknown_203B414->unk8C[i], 0, NULL);
}
sub_800E90C(&gDungeon->unk181e8.cameraPixelPos);
return ret;
}
void sub_8042D7C(void)
{
s32 i;
if (sUnknown_203B414 == NULL)
return;
for (i = 0; i < sUnknown_203B414->unk8; i++) {
if (sub_800E9A8(sUnknown_203B414->unkC[i])) {
sub_800DC14(sUnknown_203B414->unkC[i]);
}
}
sub_800DBBC();
MemoryFree(sUnknown_203B414);
sUnknown_203B414 = NULL;
}
extern s32 sub_800E6D8(s32);
// TODO: Figure out if a new file should start here
void sub_8042DD4(s32 a0, Entity *a1, s32 a2)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 == -1) {
strPtr->unk0 = a0;
strPtr->unkC = a1;
strPtr->unk4 = a2;
strPtr->unk8 = sub_800E6D8(a0);
return;
}
}
}
UNUSED bool32 sub_8042E1C(void)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 != -1 && sub_800E9A8(strPtr->unk0)) {
return TRUE;
}
}
return FALSE;
}
void sub_8042E5C(void)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 >= 0 && !sub_800E9A8(strPtr->unk0)) {
strPtr->unk0 = -1;
strPtr->unkC = NULL;
}
}
}
void sub_8042E98(void)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
strPtr->unk0 = -1;
strPtr->unk4 = 0;
strPtr->unkC = NULL;
}
}
extern void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3,
s32 param_4, s32 param_5);
void sub_8042EC8(Entity *a0, s32 a1)
{
s32 i;
for (i = 0; i < 3; i++) {
struct unkStruct_Dungeon5C4_sub *strPtr = &gDungeon->unk5C4[i];
if (strPtr->unk0 >= 0 && strPtr->unkC == a0) {
DungeonPos sp8 = {a0->pixelPos.x / 256, a0->pixelPos.y / 256};
DungeonPos sp4 = {0};
EntityInfo *entInfo = GetEntInfo(a0);
if (strPtr->unk8 != -1) {
sub_800569C(&sp4,
&a0->axObj,
strPtr->unk8);
}
sub_800EB24(strPtr->unk0, &sp8, &sp4,a1, entInfo->action.direction);
}
}
}
extern u8 gUnknown_203B40C;
@@ -314,6 +114,7 @@ extern void sub_807FA18(void);
extern void sub_806A974(void);
extern void sub_806CF60(void);
extern void sub_8068F80(void);
extern void sub_8042E98(void);
extern bool8 sub_8044B28(void);
extern bool8 sub_8043ED0(bool8);
extern void sub_806A914(bool8 a0, bool8 a1, bool8 showRunAwayEffect);