xxx_dungeon_8042F6C matched

This commit is contained in:
DizzyEggg 2024-10-11 12:35:26 +02:00
parent 26ca0efd5c
commit 854680fe7f
8 changed files with 825 additions and 1566 deletions

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@ void sub_8097FD0(u8 param_1);
void sub_8097FF8(void);
void sub_8098044(u8 param_1);
void sub_8098080(void);
u32 sub_80980A4(void);
u8 sub_80980A4(void);
void sub_80980B4(s16 pokeID);
bool8 sub_8098100(u8 param_1);
bool8 sub_8098134(s16 pokeID);

View File

@ -106,8 +106,8 @@ typedef struct UnkDungeonGlobal_unk181E8_sub
u8 unk18215;
u8 fill18216;
u8 unk18217;
u8 fill18218;
u8 fill18219;
u8 unk18218;
u8 unk18219;
u8 unk1821A;
u8 unk1821B;
u8 unk1821C;
@ -199,6 +199,12 @@ struct unkStruct_Dungeon5C4_sub
Entity *unkC;
};
struct unkStruct_Dungeon64C
{
u8 unk0;
u32 unk4;
};
// size: 0x1CEDC
typedef struct Dungeon
{
@ -207,10 +213,13 @@ typedef struct Dungeon
u8 unk2;
u8 unk3;
u8 unk4;
u8 fill5[0x7 - 0x5];
u8 unk5;
u8 unk6;
u8 unk7;
u8 unk8;
u8 fill9[0xC - 0x9];
u8 unk9;
u8 unkA;
u8 unkB;
u8 unkC;
u8 unkD;
u8 unkE;
@ -231,9 +240,14 @@ typedef struct Dungeon
u8 fill5F4[0x644 - 0x5f4];
/* 0x644 */ DungeonLocation dungeonLocation;
/* 0x648 */ DungeonLocation dungeonLocation2;
u8 fill64C[0x654 - 0x64C];
struct unkStruct_Dungeon64C unk64C;
u8 unk654;
u8 fill655[0x65B - 0x655];
u8 fill655;
u8 fill656;
u8 fill657;
u8 unk658;
u8 unk659;
u8 unk65A;
u8 unk65B;
u8 unk65C;
u8 unk65D;
@ -259,7 +273,9 @@ typedef struct Dungeon
u8 unk678;
u8 unk679;
u8 unk67A;
u8 unk67B[0x684 - 0x67B];
s8 unk67B;
u32 unk67C;
u32 unk680;
s16 unk684;
s16 unk686;
s16 unk688;
@ -268,7 +284,7 @@ typedef struct Dungeon
s32 unk68C;
s32 unk690;
s32 unk694;
u8 fill698;
u8 unk698;
u8 unk699;
u8 fill69A[0x69C - 0x69A];
EntityInfo unk69C[4];
@ -286,9 +302,9 @@ typedef struct Dungeon
/* 0x37F8 */ bool8 plusIsActive[2]; // Index 0: Enemy , Index 1: Team
/* 0x37FA */ bool8 minusIsActive[2]; // Index 0: Enemy , Index 1: Team
/* 0x37FC */ bool8 decoyActive;
u8 fill37FD;
/* 0x37FD */ u8 unk37FD;
/* 0x37FE */ bool8 deoxysDefeat; // Flag set for deoxys in Meteor Cave
u8 fill37FF;
/* 0x37FE */ u8 unk37FF;
s16 unk3800;
u8 fill3802[0x3904 - 0x3802];
/* 0x3904 */ s16 unk3904;
@ -357,7 +373,9 @@ typedef struct Dungeon
/* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX];
/* 0x181E4 */ OpenedFile *paletFile;
/* 0x181E8 */ UnkDungeonGlobal_unk181E8_sub unk181e8;
u8 fill18220[0x1C06C - 0x18220];
u8 fill18220[0x1C05E - 0x18220];
u8 unk1C05E;
u8 fill1C05F[0x1C06C - 0x1C05F];
u32 unk1C06C;
u8 fill1C070[0x1C570 - 0x1C070];
/* 0x1C570 */ DungeonLocation unk1C570;

View File

@ -1,12 +1,31 @@
#include "global.h"
#include "dungeon_util_1.h"
#include "memory.h"
#include "structs/rgb.h"
#include "code_803E46C.h"
#include "code_800E9E4.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "dungeon_util.h"
#include "bg_control.h"
#include "random.h"
#include "file_system.h"
#include "dungeon_leader.h"
#include "dungeon.h"
#include "dungeon_ai.h"
#include "pokemon.h"
#include "cpu.h"
#include "dungeon_music.h"
#include "dungeon_random.h"
#include "text1.h"
#include "code_805D8C8.h"
#include "code_803E668.h"
#include "dungeon_engine.h"
#include "weather.h"
#include "code_8094F88.h"
#include "bg_palette_buffer.h"
#include "exclusive_pokemon.h"
#include "constants/dungeon.h"
extern void sub_800EE5C(s32);
extern void sub_800EF64(void);
@ -211,3 +230,744 @@ void sub_8042EC8(Entity *a0, s32 a1)
}
}
}
extern u8 gUnknown_203B40C;
extern u16 gUnknown_203B410;
extern u8 *gSerializedData_203B41C;
struct Substruct_xxx_dungeon_8042F6C
{
DungeonLocation a0;
u32 a4;
};
struct UnkStruct_xxx_dungeon_8042F6C
{
u8 unk0;
DungeonLocation unk4;
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
u8 unkC;
u8 unkD;
u8 unkE;
u8 unkF;
u8 unk10;
u8 unk11;
struct unkStruct_Dungeon64C unk14;
PokemonStruct1 unk1C;
u8 *unk74;
Dungeon *unk78;
s16 unk7C;
u8 unk7E;
DungeonLocation unk80;
struct Substruct_xxx_dungeon_8042F6C unk84;
};
extern void sub_8040094(u8 r0);
extern void sub_8068BDC(u8 r0);
extern s16 GetTurnLimit(u8 dungeon);
extern void sub_8041888(u8 param_1);
extern void sub_8040150(bool8 param_1);
extern void sub_8052210(u32);
extern void sub_80526D0(u32);
extern void sub_8052740(u32);
extern void sub_803D4AC(void);
extern void sub_804513C(void);
extern void sub_8043CD8(void);
extern void sub_80495E4(void);
extern void sub_803E250(void);
extern void sub_8040130(void);
extern void sub_8040124(void);
extern void sub_803E830(void);
extern void sub_8049820(void);
extern void sub_803E214(void);
extern void nullsub_56(void);
extern void sub_806863C(void);
extern void sub_8040218(void);
extern void sub_8047104(void);
extern void sub_8068F28(void);
extern void sub_806C1D8(void);
extern void sub_804700C(void);
extern void sub_8097810(void);
extern void sub_803E13C(void);
extern void sub_80841EC(void);
extern void sub_8084424(void);
extern void sub_8086130(void);
extern void FreeDungeonPokemonSprites(void);
extern void sub_803DF60(void);
extern void sub_803E02C(void);
extern void sub_8049840(void);
extern void sub_80847D4(void);
extern void sub_804AFAC(void);
extern void sub_8043D60(void);
extern void sub_806890C(void);
extern void sub_8068614(void);
extern void sub_80840A4(void);
extern void sub_803E178(void);
extern void sub_80848F0(void);
extern void sub_8097890(void);
extern void sub_806AB2C(void);
extern void sub_8052DD0(void);
extern void DisplayPreFightDialogue(void);
extern void sub_8071DA4(Entity *);
extern void sub_803E748(void);
extern void sub_8083D68(void);
extern void sub_8052F80(void);
extern void sub_803E7C8(void);
extern void sub_8040A84(void);
extern void sub_807E5AC(void);
extern void TriggerWeatherAbilities(void);
extern void sub_807E88C(void);
extern void InitDungeonPokemonSprites(void);
extern void nullsub_16(void);
extern void sub_80521D0(void);
extern void sub_80531A8(void);
extern void sub_803F27C(u8);
extern void sub_807E7FC(u8);
extern void sub_80095CC(u32, u32);
extern void sub_8081BF4(u8 *r0, u32 r1);
extern void PrintFieldMessage(u32, const u8 *, u32);
extern bool8 IsLevelResetTo1(u8 dungeon);
extern u8 sub_8099394(u8 *);
extern void sub_8068A84(PokemonStruct1 *pokemon);
extern void sub_807EAA0(u32, u32);
extern void sub_803D4D0(void);
extern void sub_80842F0(void);
extern void sub_8082B40(void);
extern void sub_80427AC(void);
extern void sub_806AA70(void);
extern void sub_803D8F0(void);
extern void sub_806AD3C(void);
extern void sub_806C42C(void);
extern void sub_804AAD4(void);
extern void sub_8049B8C(void);
extern void sub_806B678(void);
extern void sub_806C3C0(void);
extern void sub_806B168(void);
extern void sub_806B6C4(void);
extern void sub_806A338(void);
extern void sub_804AAAC(void);
extern void sub_8051E3C(void);
extern void sub_8045CB0(void);
extern void sub_807FA18(void);
extern void sub_806A974(void);
extern void sub_806CF60(void);
extern void sub_8049ED4(void);
extern void sub_8049884(void);
extern void sub_8068F80(void);
extern bool8 sub_8044B28(void);
extern bool8 sub_8083C24(void);
extern bool8 sub_8083C88(u8 param_1);
extern bool8 sub_8043ED0(u8);
extern u8 sub_8043D10(void);
extern void LoadDungeonTilesetAssets(void);
extern void LoadDungeonPokemonSprites(void);
extern void ShowDungeonNameBanner(void);
extern void sub_803EAF0(u32, u32);
extern void sub_806A914(u8 a0, u8 a1, u8 a2);
extern void sub_803F4A0(Entity *a0);
extern void sub_8083AB0(s16 param_0, Entity * target, Entity * entity);
extern void sub_8080B30(u8 *param_1,u32 param_2);
extern void sub_8046F84(s32 itemFlag);
extern bool8 sub_8083C50(void);
extern s16 gUnknown_2026E4E;
extern u8 gUnknown_202F32C;
extern s32 gFormatData_202DE30;
extern s32 gUnknown_202EDC8;
extern Entity *gLeaderPointer;
void sub_8044124(void);
void sub_8043FD0(void);
void sub_806B404(void);
extern const u8 *gUnknown_80FEC48;
extern const u8 *gUnknown_80FEC7C;
extern const u8 *gUnknown_81002B8;
extern const u8 *gPtrFinalChanceMessage;
extern const u8 *gPtrClientFaintedMessage;
extern const s16 gUnknown_80F6850[];
extern const s16 gDungeonMusic[];
extern OpenedFile *gDungeonNameBannerPalette;
void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
{
bool8 check;
Entity *leader;
u8 *dungeonPtr;
s32 i;
bool8 r6;
bool8 r9;
bool8 r10;
u8 sp;
RGB colorArray;
gUnknown_203B40C = 0;
r6 = r8->unk8;
r9 = r8->unk11;
r10 = r8->unk10;
gSerializedData_203B41C = r8->unk74;
gDungeon = r8->unk78;
if (!r6) {
*gSerializedData_203B41C = 0;
}
// Why not use memset?
dungeonPtr = (u8 *)(gDungeon);
for (i = 0; i < sizeof(Dungeon); i++) {
dungeonPtr[i] = 0;
}
gUnknown_203B410 = 0; // Needed to match
gUnknown_203B410 = 100;
if (!r6) {
gDungeon->unk678 = r8->unkF;
gDungeon->unk64C = r8->unk14;
gDungeon->windTurns = GetTurnLimit(r8->unk4.id);
gDungeon->unk67A = 0;
gDungeon->unk67B = GetRescuesAllowed(r8->unk4.id);
}
gDungeon->unk698 = 0;
gDungeon->unk699 = 0;
gDungeon->unk65C = r8->unk9;
gDungeon->unk65A = r8->unkC;
gDungeon->unk658 = r8->unkA;
gDungeon->unk659 = r8->unkB;
gDungeon->unk65B = r8->unkD;
gDungeon->unk65D = r8->unkE;
StopDungeonBGM();
sub_803D4AC();
sub_804513C();
sub_8043CD8();
sub_80495E4();
sub_803E250();
sub_8040130();
sub_8040124();
sub_803F27C(1);
gUnknown_2026E4E = 2056;
sub_80095CC(1, 0x14);
sub_800DAC0(0);
UpdateFadeInTile(1);
sub_803DF60();
sub_803E02C();
sub_8042E98();
gUnknown_202F32C = 0;
if (r6) {
sub_8081BF4(gSerializedData_203B41C, 0x4800);
sub_8049840();
}
if (r9) {
sub_8043D60();
}
if (!r6) {
gDungeon->unk181e8.unk1820B = 1;
gDungeon->unk181e8.unk1820C = 1;
if (gDungeon->unk678 == 1) {
gDungeon->dungeonLocation.id = r8->unk14.unk0;
gDungeon->dungeonLocation.floor = 1;
}
else {
gDungeon->dungeonLocation = r8->unk4;
}
gDungeon->unk674 = 0;
sub_8044124();
}
if (!r6) {
if (gDungeon->unk678 == 1) {
gDungeon->unk67C = r8->unk14.unk4;
}
else {
gDungeon->unk67C = Rand32Bit() & 0xFFFFFF;
}
sub_808408C(gDungeon->unk67C);
}
if (!r6) {
if (!sub_80980A4() && gDungeon->dungeonLocation.id == DUNGEON_TINY_WOODS) {
sub_8043FD0();
}
sub_806890C();
}
if (r9) {
gFormatData_202DE30 = gDungeon->unk67B;
if (gFormatData_202DE30 != 0) {
PrintFieldMessage(0, gUnknown_80FEC48, 1);
}
else {
PrintFieldMessage(0, gUnknown_80FEC7C, 1);
}
}
if (r10) {
r8->unk1C.heldItem.id = 0;
if (IsLevelResetTo1(gDungeon->dungeonLocation.id)) {
sub_808D0D8(&r8->unk1C);
}
sub_8068A84(&r8->unk1C);
if (r6) {
sub_806B404();
}
}
sub_8068614();
if (!r6 && gDungeon->unk678 == 1) {
if (sub_8099394(&sp)) {
unkStruct_203B480 *mailStr = GetMailatIndex(sp);
if (mailStr->rescuesAllowed) {
gFormatData_202DE30 = mailStr->rescuesAllowed;
PrintFieldMessage(0, gUnknown_81002B8, 1);
}
else {
PrintFieldMessage(0, gPtrFinalChanceMessage, 1);
}
}
}
while (1) {
sub_8098080();
nullsub_16();
sub_80521D0();
sub_80531A8();
InitDungeonPokemonSprites();
if (!r6) {
sub_804513C();
}
gLeaderPointer = NULL;
gDungeon->unk0 = 0;
if (!r6) {
gDungeon->unk680 = YetAnotherRandom24();
gDungeon->unk668 = 10;
InitDungeonRNG(gDungeon->unk680);
}
gDungeon->unk37EC = 0;
if (!r6) {
s32 rnd;
gDungeon->decoyActive = FALSE;
rnd = DungeonRandInt(4);
gDungeon->unk37FD = 0;
gDungeon->deoxysDefeat = FALSE;
gDungeon->unk3800 = gUnknown_80F6850[rnd];
gDungeon->unk37FF = 0;
gDungeon->unk675 = 0;
}
sub_803D4D0();
gDungeon->unk1 = 0;
gDungeon->unk10 = 0;
gDungeon->unk2 = 0;
gDungeon->unk4 = 0;
gDungeon->unk11 = 0;
gDungeon->unk8 = 0;
gDungeon->unk3 = 0;
gDungeon->unk6 = 0;
gDungeon->noActionInProgress = FALSE;
gDungeon->unk5C0 = -1;
gDungeon->unk7 = 0;
gDungeon->unk9 = 0;
gDungeon->unkA = 0;
gDungeon->unkB = 1;
gDungeon->unkD = 1;
gDungeon->unkE = 0;
gDungeon->unk1C05E = 0;
if (!r6) {
gDungeon->unk679 = 0;
gDungeon->unk68C = 0;
gDungeon->unk690 = 0;
gDungeon->unk694 = 0;
gDungeon->fractionalTurn = 0;
gDungeon->unk662 = 0;
gDungeon->unk66E = 0;
gDungeon->unk66F = 0;
gDungeon->unk670 = 0;
gDungeon->itemHoldersIdentified = 0;
gDungeon->monsterHouseTriggered = 0;
gDungeon->monsterHouseTriggeredEvent = 0;
gDungeon->bossSongIndex = 999;
gDungeon->unk688 = 0;
gDungeon->unk68A = 0;
gDungeon->unk684 = 99;
gDungeon->unk686 = 99;
gDungeon->weather.weather = 0;
gDungeon->tileset = gDungeon->unk1C574.unk2;
gDungeon->unk3A10 = gDungeon->unk1C574.unk3;
gDungeon->bossBattleIndex = gDungeon->unk1C574.unk12;
sub_807E5E4(0);
sub_80842F0();
}
sub_803D8F0();
LoadDungeonPokemonSprites();
if (!r6) {
sub_80687AC();
}
else {
sub_8068768();
sub_8082B40();
}
sub_806C42C();
sub_806AD3C();
if (!r6) {
DungeonStartNewBGM(gDungeonMusic[gDungeon->unk3A10]);
sub_80847D4();
}
sub_8049840();
sub_803E178();
gUnknown_202EDC8 = 0;
sub_8040124();
sub_803EAF0(4, 0);
sub_8052210(0);
sub_803F27C(r6);
ShowDungeonNameBanner();
if (!r6) {
sub_804AFAC();
gDungeon->windTurns = GetTurnLimit(gDungeon->dungeonLocation.id);
gDungeon->unk67A = 0;
}
sub_804AAD4();
sub_8049B8C();
LoadDungeonTilesetAssets();
if (!r6) {
sub_806B168();
sub_806C3C0();
sub_806B6C4();
}
else {
sub_806B678();
}
gDungeon->lightningRodPokemon = NULL;
gDungeon->unk17B38 = 0;
gDungeon->snatchPokemon = NULL;
gDungeon->unk17B3C = 0;
gDungeon->unk17B34 = NULL;
gDungeon->unk17B40 = 0;
if (!r6) {
sub_807FA18();
sub_8045CB0();
gDungeon->unk694 = gDungeon->unk68C;
gDungeon->unk690 = 0;
sub_8051E3C();
sub_804AAAC();
}
else {
sub_806A338();
}
sub_8068F80();
sub_8049884();
sub_8049ED4();
if (!r6) {
sub_806A914(1, 0, 0);
}
else {
sub_806CF60();
sub_806A974();
}
sub_8041888(1);
if (!r6) {
sub_80848F0();
sub_8097890();
}
gUnknown_203B40C = 1;
if (r6) {
sub_807E88C();
sub_806AB2C();
}
if (gDungeon->unk7 == 0) {
sub_803E748();
}
else {
sub_803E7C8();
}
sub_8040094(0);
sub_803EAF0(0, 0);
sub_8040150(r6);
sub_8040A84();
gDungeon->unkB8 = NULL;
gDungeon->unk66C = 0;
gDungeon->unk66D = 0;
gDungeon->unk12 = 99;
gDungeon->unk0 = 1;
if (!r6) {
sub_8052DD0();
if (gDungeon->unk9 != 0) {
gDungeon->unk9 = 0;
sub_8083D68();
sub_8052F80();
}
}
gLeaderPointer = NULL;
gDungeon->unk5 = 0;
if (!r6) {
DisplayPreFightDialogue();
if (gDungeon->unk4 != 0 || gDungeon->unk2 != 0) {
gDungeon->unk5 = 1;
}
else {
sub_803F4A0(GetLeader());
sub_8040A84();
}
}
if (!r6) {
if (gDungeon->unk5 == 0) {
sub_807E5AC();
if (GetApparentWeather(NULL) != 0) {
sub_807E7FC(1);
}
}
}
else {
TriggerWeatherAbilities();
}
if (r6) {
r6 = FALSE;
}
else {
sub_80427AC();
sub_8075900(GetLeader(), gDungeon->unk3A08);
sub_807EAA0(1, 0);
}
nullsub_16();
if (gDungeon->unk5 == 0) {
bool8 param = TRUE;
gDungeon->unk654 = 0;
gDungeon->unk181e8.unk18218 = 0;
gDungeon->unk181e8.unk18219 = 1;
do {
RunFractionalTurn(param);
param = FALSE;
} while (!sub_8044B28());
}
leader = GetLeader();
if (EntityExists(leader)) {
sub_8071DA4(leader);
}
if (gDungeon->unk654 != 1) {
if (sub_8043ED0(1)) {
gDungeon->unk654 = 1;
}
}
if (gDungeon->unk654 == 1 || gDungeon->unk11 != 0) {
if (gDungeon->unk6 == 0) {
sub_806AA70();
}
}
if (EntityExists(GetLeader())) {
sub_80526D0(0x4F);
sub_8052740(0x4F);
}
sub_8040124();
sub_803EAF0(1, 0);
gDungeon->unk181e8.unk18219 = 0;
gDungeon->unk181e8.unk18218 = 1;
if (gDungeon->unk3 == 0
&& gDungeon->unk6 == 0
&& gDungeon->musPlayer.queuedSongIndex == 0x72
&& gDungeon->dungeonLocation.id == DUNGEON_BURIED_RELIC)
{
DungeonFadeOutBGM(60);
}
sub_803E708(4, 0x4F);
if (gDungeon->unk7 == 0) {
sub_803E830();
}
SetBGOBJEnableFlags(0);
colorArray.unk0 = 0x60;
colorArray.unk1 = 0x80;
colorArray.unk2 = 0xF8;
SetBGPaletteBufferColorRGB(253, (void*) &colorArray, gUnknown_202EDC8, 0); // Todo: Fix SetBGPaletteBufferColorRGB to take RGB*
sub_8040094(1);
gDungeon->unk181e8.unk18218 = 1;
if ((gDungeon->unk10 == 2 || gDungeon->unk10 == 3) && gDungeon->unk6 != 0) {
leader = GetLeader();
PrintFieldMessage(0, gPtrClientFaintedMessage, 1);
gDungeon->unk6 = 0;
sub_8083AB0(0x222, leader, leader);
}
CloseAllSpriteFiles();
sub_8049820();
CloseFile(gDungeonNameBannerPalette);
FreeDungeonPokemonSprites();
gUnknown_203B40C = 0;
if (gDungeon->unk3 != 0) {
sub_8080B30(gSerializedData_203B41C, 0x4800);
r8->unk7C = 3;
r8->unk80 = gDungeon->dungeonLocation;
check = FALSE;
}
else
{
s16 var;
if (gDungeon->unk6 != 0) {
sub_8080B30(gSerializedData_203B41C, 0x4800);
}
else {
sub_8046F84(ITEM_FLAG_IN_SHOP);
}
sub_806C1D8();
if (gDungeon->unk654 == 1) {
if (gDungeon->unk66E != 0) {
sub_804700C();
}
check = TRUE;
}
else if (gDungeon->unk11 == 1) {
sub_8083AB0(0x226, NULL, GetLeader());
check = TRUE;
}
else if (gDungeon->unk11 == 2) {
sub_8083AB0(0x229, NULL, GetLeader());
if (gDungeon->unk66E != 0) {
sub_8097810();
}
check = TRUE;
}
else if (gDungeon->unk11 == 3) {
sub_8083AB0(0x22A, NULL, GetLeader());
if (gDungeon->unk66E != 0) {
sub_8097810();
}
check = TRUE;
}
else if (gDungeon->unk11 == 4) {
var = 0x227;
sub_8083AB0(var, NULL, GetLeader());
check = TRUE;
}
else if (gDungeon->unk678 == 1 && sub_8043D10() == 2 && gDungeon->unk654 == 2) {
sub_8083AB0(0x228, NULL, GetLeader());
if (gDungeon->unk66E != 0) {
sub_8097810();
}
check = TRUE;
}
else {
if (gDungeon->unk66E != 0) {
sub_8097810();
}
if (gDungeon->dungeonLocation.floor + 1 < gDungeon->unk1CEC8) {
gDungeon->dungeonLocation.floor++;
if (gDungeon->dungeonLocation.id == DUNGEON_FROSTY_FOREST
&& gDungeon->dungeonLocation.floor == 6
&& !sub_8098100(0x1F))
{
sub_8097FA8(0x1F);
sub_8086130();
sub_8097FF8();
}
// We go back to the loop's start.
continue;
}
else {
var = 0x227;
sub_8083AB0(var, NULL, GetLeader());
check = TRUE;
// This goto is a fakematch I had to create in order to generating matching code.
// It has no real effect, because the control flow is the same without it(since check is TRUE).
// Feel free to remove it.
goto FAKEMATCH;
}
}
}
break;
}
if (check) {
// See comment above
FAKEMATCH:
gUnknown_203B40C = 0;
r8->unk7E = 0;
sub_8097FF8();
sub_80095CC(1, 0x14);
sub_803E13C();
sub_800CDA8(4);
if (gDungeon->unk6 == 0 && sub_8083C88(gDungeon->unk678)) {
sub_80841EC();
}
if (sub_8083C24()) {
if (gDungeon->unk6 != 0) {
r8->unk7C = -2;
memset(&r8->unk84, 0, sizeof(r8->unk84));
r8->unk80 = gDungeon->dungeonLocation;
r8->unk84.a0 = gDungeon->dungeonLocation;
r8->unk84.a4 = gDungeon->unk67C;
}
else {
r8->unk7C = -1;
}
}
else if (sub_8083C50()) {
if (gDungeon->unk678 == 1) {
r8->unk7C = 4;
}
else if (gDungeon->unk678 == 0) {
r8->unk7C = 1;
sub_8084424();
}
else {
r8->unk7C = 1;
sub_8084424();
}
r8->unk7E = gDungeon->unk674;
}
else {
r8->unk7C = 2;
sub_8084424();
}
}
sub_806863C();
sub_803E214();
nullsub_56();
sub_8040218();
if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) {
sub_8047104();
}
if (r8->unk7C == 1 || r8->unk7C == -2 || r8->unk7C == 4 || r8->unk7C == -1 || r8->unk7C == 2) {
if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) {
sub_8068BDC(1);
}
else if (r8->unk7C == -2) {
sub_8068BDC(0);
}
else {
sub_8068F28();
sub_8068BDC(0);
}
}
sub_800DB7C();
gDungeon = NULL;
gSerializedData_203B41C = 0;
nullsub_16();
}
//

View File

@ -101,7 +101,7 @@ u8 sub_806F4A4(Entity *pokemon, u8 type) {
EntityInfo *info = pokemon->info;
s32 index;
if(MonsterIsType(pokemon, TYPE_GHOST))
{
if(type == TYPE_NORMAL || type == TYPE_FIGHTING)
@ -176,7 +176,7 @@ void sub_806F63C(Entity *param_1)
{
UnkDungeonGlobal_unk181E8_sub *temp;
temp = &gDungeon->unk181e8;
temp = &gDungeon->unk181e8;
if (temp->cameraTarget == param_1) {
sub_803F508(temp->cameraTarget);
@ -259,7 +259,7 @@ bool8 sub_806F660(Entity *pokemon,Entity *target)
}
recruitRate += gUnknown_80F5700[pokemonInfo->level];
if (iVar4 < recruitRate) {
for (index = 0; index <= (6 - size); index++)
for (index = 0; index <= (6 - size); index++)
{
for(uVar6 = 0; uVar6 < size; uVar6++)
{
@ -694,7 +694,7 @@ bool8 sub_806F9BC(s16 species)
unkStruct_8092638 auStack_18;
id = species;
if (((gDungeon->fill655[3] == 0) || (sub_808529C(id) == 0)) ||
if (((gDungeon->unk658 == 0) || (sub_808529C(id) == 0)) ||
((id == MONSTER_MEW && (gDungeon->unk678 == 1)))) {
return FALSE;
}
@ -751,7 +751,7 @@ bool8 sub_806FA5C(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *pa
if (sub_8052B8C(0,*gUnknown_80F9FE8,1) == 0) {
if (param_3->id != MONSTER_JIRACHI) {
SendMessage(entity1,*gUnknown_80FA004);
SendMessage(entity1,*gUnknown_80FA004);
}
return 0;
}
@ -759,7 +759,7 @@ bool8 sub_806FA5C(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *pa
{
for(pokeIndex = 0; pokeIndex < MAX_TEAM_MEMBERS; pokeIndex++)
{
if (((u8)(pokeIndex[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0)
if (((u8)(pokeIndex[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0)
break;
}
@ -831,11 +831,11 @@ bool8 sub_806FA5C(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *pa
}
}
return TRUE;
}
}
}
}
// https://decomp.me/scratch/LByEy (93.86% matching - Seth)
// https://decomp.me/scratch/LByEy (93.86% matching - Seth)
#ifdef NONMATCHING
bool8 sub_806FD18(Entity *param_1)
@ -845,7 +845,7 @@ bool8 sub_806FD18(Entity *param_1)
int iVar4;
EntityInfo *info;
int index;
info = param_1->info;
iVar4 = -1;
size = GetBodySize((int)info->apparentID);
@ -865,7 +865,7 @@ bool8 sub_806FD18(Entity *param_1)
{
if (((u8)(index[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0) break;
}
if (index != 4) {
for(index = 0; index < 4; index++)
{
@ -1027,7 +1027,7 @@ bool8 sub_806FDF4(Entity *entity1,Entity *entity2,Entity **entityPtr)
{
if (((u8)(index[gRecruitedPokemonRef->pokemon2].unk0) & 1) == 0) break;
}
if (index == MAX_TEAM_MEMBERS) {
return FALSE;
}
@ -1055,10 +1055,10 @@ bool8 sub_806FDF4(Entity *entity1,Entity *entity2,Entity **entityPtr)
pokeStruct2->offense.att[index2] = local_74.offense.att[index2];
pokeStruct2->offense.def[index2] = local_74.offense.def[index2];
}
pokeStruct2->currExp = local_74.exp;
pokeStruct2->moves = local_74.moves;
pokeStruct2->itemSlot = local_74.heldItem;
buffer = pokeStruct2->name;
BoundedCopyStringtoBuffer(buffer,GetMonSpecies(local_74.id), POKEMON_NAME_LENGTH);

View File

@ -91,7 +91,7 @@ void sub_8071B48(void)
entityPtr = NULL;
dungeon = gDungeon;
if ((dungeon->unk664 != 0) &&
((dungeon->dungeonLocation.id != DUNGEON_METEOR_CAVE || (dungeon->fill37FD == 0)))) {
((dungeon->dungeonLocation.id != DUNGEON_METEOR_CAVE || (dungeon->unk37FD == 0)))) {
dungeon->unk662++;
if (dungeon->unk66E == 0) {
if ( dungeon->unk662 < gUnknown_80F4DAA) {
@ -596,7 +596,7 @@ void sub_807218C(Entity *pokemon)
{
if(gDungeon->unk65C == 0)
r3 = 1;
}
}
sub_806A3D4(buffer, r1, 3, r3);
}
else
@ -653,7 +653,7 @@ void LevelDownTarget(Entity *pokemon, Entity *target, u32 level)
u8 flag;
s32 newLevel;
LevelData leveldata;
if(EntityExists(target))
{
flag = FALSE;
@ -690,7 +690,7 @@ bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
s32 id;
s32 level;
s32 exp;
if(!EntityExists(target)) return FALSE;
info = target->info;
id = info->id;
@ -709,15 +709,15 @@ bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
info->exp = exp;
if(param_3)
{
{
if(!info->isNotTeamMember)
{
sub_806A2BC(target, 0);
sub_806A2BC(target, 0);
if(!flag)
sub_8083D58();
gFormatData_202DE30[0] = level;
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
sub_80528F4(target, *gUnknown_80F9E80);
}
else
@ -725,7 +725,7 @@ bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
if(!flag)
sub_8083D58();
gFormatData_202DE30[0] = level;
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
sub_805239C(target, *gUnknown_80F9E80);
}
}
@ -746,7 +746,7 @@ bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
gUnknown_202F31C[1] = info->spAtk;
gUnknown_202F324[0] = info->def;
gUnknown_202F324[1] = info->spDef;
gUnknown_202F31C[0] += leveldata.gainAtt;
gUnknown_202F31C[1] += leveldata.gainSPAtt;
gUnknown_202F324[0] += leveldata.gainDef;
@ -863,7 +863,7 @@ bool8 sub_80725A4(Entity *pokemon, Entity *target)
info->spAtk = gUnknown_202F31C[1];
info->def = gUnknown_202F324[0];
info->spDef = gUnknown_202F324[1];
}
}
}

View File

@ -17,11 +17,11 @@ const struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON] = {
BLUE_EXCLUSIVE(MONSTER_AIPOM),
};
const u8 filler_ex0[8] =
const u8 filler_ex0[8] =
{
'p', 'k', 's', 'd', 'i', 'r', '0', 0
};
const u8 filler_ex1[8] =
const u8 filler_ex1[8] =
{
'p', 'k', 's', 'd', 'i', 'r', '0', 0
};
@ -50,12 +50,12 @@ void InitializeExclusivePokemon(void)
}
void sub_8097FA8(u8 param_1)
{
{
gUnknown_203B498->unk48[param_1 >> 5] |= 1 << ((param_1 & 0x1f));
}
void sub_8097FD0(u8 param_1)
{
{
gUnknown_203B498->unk3C[param_1 >> 5] |= 1 << ((param_1 & 0x1f));
}
@ -98,7 +98,7 @@ void sub_8098080(void)
}
}
u32 sub_80980A4(void)
u8 sub_80980A4(void)
{
u32 temp = gUnknown_203B498->unk0;
gUnknown_203B498->unk0 = 1;
@ -167,7 +167,7 @@ void sub_8098170(s32 param_1)
{
s32 index;
struct ExclusivePokemonData *ptr;
ptr = gUnknown_203B498;
if (param_1 < 0) {
index = param_1 + 0x1f;
@ -184,7 +184,7 @@ bool32 sub_80981A0(s32 param_1)
s32 index;
bool32 flag;
struct ExclusivePokemonData *ptr;
if (param_1 > 0x1e) {
return FALSE;
}
@ -251,7 +251,7 @@ void WriteExclusivePokemon(struct unkStruct_8094924 *r0)
SaveIntegerBits(r0, gUnknown_203B498, 1);
for(index = 0; index < MONSTER_MAX; index++)
{
{
stack_0 = sub_8098134(index);
SaveIntegerBits(r0, &stack_0, 1);
}

View File

@ -239,9 +239,9 @@ void sub_8080CF0(unkStruct_8094924 *param_1)
sub_80830B4(param_1,gDungeon->minusIsActive[0]);
sub_80830B4(param_1,gDungeon->minusIsActive[1]);
sub_80830B4(param_1,gDungeon->decoyActive);
sub_80830B4(param_1,gDungeon->fill37FD);
sub_80830B4(param_1,gDungeon->unk37FD);
sub_80830B4(param_1,gDungeon->deoxysDefeat);
sub_80830B4(param_1,gDungeon->fill37FF);
sub_80830B4(param_1,gDungeon->unk37FF);
sub_8083030(param_1,gDungeon->unk3800);
for(counter = 0; counter < MAX_TEAM_MEMBERS; counter++)
{
@ -985,9 +985,9 @@ void sub_808217C(unkStruct_8094924 *param_1)
gDungeon->minusIsActive[0] = sub_80831DC(param_1);
gDungeon->minusIsActive[1] = sub_80831DC(param_1);
gDungeon->decoyActive = sub_80831DC(param_1);
gDungeon->fill37FD = sub_80831DC(param_1);
gDungeon->unk37FD = sub_80831DC(param_1);
gDungeon->deoxysDefeat = sub_80831DC(param_1);
gDungeon->fill37FF = sub_80831DC(param_1);
gDungeon->unk37FF = sub_80831DC(param_1);
gDungeon->unk3800 = sub_8083158(param_1);
for(counter = 0; counter < MAX_TEAM_MEMBERS; counter++)
{