From a092e759020d0c8ec6fa728c1200c0c655881b32 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 30 Mar 2025 17:45:45 +0200 Subject: [PATCH] file split code 8041ad0 --- data/data_80F59C8_5.s | 150 +------- data/pksdir_0.s | 3 + ld_script.txt | 4 +- src/code_8041AD0.c | 787 ++++++++++++++++++++++++++++++++++++++++-- src/code_804267C.c | 426 ----------------------- src/code_8042B34.c | 203 +---------- 6 files changed, 766 insertions(+), 807 deletions(-) create mode 100644 data/pksdir_0.s delete mode 100644 src/code_804267C.c diff --git a/data/data_80F59C8_5.s b/data/data_80F59C8_5.s index e0600f28f..6afeff471 100644 --- a/data/data_80F59C8_5.s +++ b/data/data_80F59C8_5.s @@ -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 diff --git a/data/pksdir_0.s b/data/pksdir_0.s new file mode 100644 index 000000000..e05d752ca --- /dev/null +++ b/data/pksdir_0.s @@ -0,0 +1,3 @@ +.section .rodata + +.string "pksdir0\0" diff --git a/ld_script.txt b/ld_script.txt index 78f4d825c..bf90cdc59 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -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); diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index d6e398968..e49e16672 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -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); + } + } +} + + diff --git a/src/code_804267C.c b/src/code_804267C.c deleted file mode 100644 index 68303b9ca..000000000 --- a/src/code_804267C.c +++ /dev/null @@ -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); -} diff --git a/src/code_8042B34.c b/src/code_8042B34.c index 5fabd7f31..6b8fdb9d2 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -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);