From 8b7e2e324e23ee91072e4ebf310f64f3fcef0620 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 12 Oct 2024 21:08:16 +0200 Subject: [PATCH] sub_8044124 --- asm/code_8042B34.s | 650 ---------------------------------- include/items.h | 7 + include/moves.h | 5 + include/pokemon.h | 17 + include/structs/str_dungeon.h | 3 +- include/structs/str_pokemon.h | 2 +- src/code_8042B34.c | 253 ++++++++++++- src/code_806CD90.c | 7 - 8 files changed, 277 insertions(+), 667 deletions(-) diff --git a/asm/code_8042B34.s b/asm/code_8042B34.s index 8934312fa..2eb629c0e 100644 --- a/asm/code_8042B34.s +++ b/asm/code_8042B34.s @@ -6,654 +6,4 @@ .text - thumb_func_start sub_8043CD8 -sub_8043CD8: - push {lr} - bl vram_related_8009804 - pop {r0} - bx r0 - thumb_func_end sub_8043CD8 - - thumb_func_start sub_8043CE4 -sub_8043CE4: - push {lr} - adds r1, r0, 0 - ldr r0, _08043CF4 - ldrb r0, [r0] - cmp r0, 0 - beq _08043CF8 - movs r0, 0x1 - b _08043D08 - .align 2, 0 -_08043CF4: .4byte gUnknown_202F1A8 -_08043CF8: - movs r2, 0 - ldr r0, _08043D0C - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08043D06 - movs r2, 0x1 -_08043D06: - adds r0, r2, 0 -_08043D08: - pop {r1} - bx r1 - .align 2, 0 -_08043D0C: .4byte gDungeonWaterType - thumb_func_end sub_8043CE4 - - thumb_func_start sub_8043D10 -sub_8043D10: - push {lr} - ldr r0, _08043D38 - ldr r1, [r0] - movs r2, 0xCF - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08043D3C - subs r2, 0x2B - adds r0, r1, r2 - subs r2, 0x8 - adds r1, r2 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bne _08043D3C - movs r0, 0x2 - b _08043D4C - .align 2, 0 -_08043D38: .4byte gDungeon -_08043D3C: - bl IsBossFight - lsls r0, 24 - cmp r0, 0 - bne _08043D4A - movs r0, 0 - b _08043D4C -_08043D4A: - movs r0, 0x1 -_08043D4C: - pop {r1} - bx r1 - thumb_func_end sub_8043D10 - - thumb_func_start sub_8043D50 -sub_8043D50: - ldr r2, _08043D5C - str r2, [r1] - movs r1, 0x90 - lsls r1, 7 - str r1, [r0] - bx lr - .align 2, 0 -_08043D5C: .4byte 0x0001cedc - thumb_func_end sub_8043D50 - - thumb_func_start sub_8043D60 -sub_8043D60: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r5, 0 -_08043D6A: - ldr r0, _08043DA4 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08043DA8 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08043DCE - ldr r2, [r4, 0x70] - movs r1, 0x1 - ldrb r0, [r2, 0x8] - eors r0, r1 - negs r1, r0 - orrs r1, r0 - lsrs r1, 31 - adds r0, r2, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _08043DA0 - cmp r0, 0x47 - bne _08043DAC -_08043DA0: - movs r0, 0x1 - b _08043DAE - .align 2, 0 -_08043DA4: .4byte gDungeon -_08043DA8: .4byte 0x0001358c -_08043DAC: - movs r0, 0 -_08043DAE: - cmp r0, 0 - beq _08043DB4 - movs r1, 0 -_08043DB4: - adds r0, r2, 0 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08043DC0 - movs r1, 0 -_08043DC0: - cmp r1, 0 - beq _08043DCE - adds r0, r4, 0 - ldr r1, _08043EC0 - adds r2, r4, 0 - bl sub_8068FE0 -_08043DCE: - adds r5, 0x1 - cmp r5, 0xF - ble _08043D6A - movs r5, 0 - ldr r0, _08043EC4 - mov r9, r0 - mov r8, r5 -_08043DDC: - mov r1, r9 - ldr r0, [r1] - lsls r1, r5, 2 - ldr r2, _08043EC8 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - adds r7, r5, 0x1 - cmp r0, 0 - beq _08043E62 - adds r0, r4, 0 - adds r0, 0x22 - mov r1, r8 - strb r1, [r0] - adds r1, r4, 0 - adds r1, 0x20 - movs r0, 0x1 - strb r0, [r1] - ldr r4, [r4, 0x70] - ldrh r0, [r4, 0x10] - strh r0, [r4, 0xE] - movs r2, 0x9E - lsls r2, 1 - adds r1, r4, r2 - adds r2, 0x4 - adds r0, r4, r2 - ldr r0, [r0] - str r0, [r1] - mov r1, r9 - ldr r0, [r1] - ldr r2, _08043ECC - adds r0, r2 - mov r1, r8 - strb r1, [r0] - adds r0, r4, 0 - movs r1, 0 - bl sub_806BFC0 - ldrh r0, [r4, 0x2] - strh r0, [r4, 0x4] - adds r0, r4, 0 - adds r0, 0xFD - mov r2, r8 - strb r2, [r0] - movs r0, 0x8C - lsls r0, 1 - adds r5, r4, r0 - adds r4, r5, 0 - movs r6, 0x3 -_08043E46: - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08043E58 - adds r0, r5, 0 - bl GetMoveBasePP - strb r0, [r4, 0x4] -_08043E58: - adds r4, 0x8 - adds r5, 0x8 - subs r6, 0x1 - cmp r6, 0 - bge _08043E46 -_08043E62: - adds r5, r7, 0 - cmp r5, 0x3 - ble _08043DDC - movs r6, 0 -_08043E6A: - movs r5, 0 - adds r7, r6, 0x1 -_08043E6E: - adds r0, r5, 0 - adds r1, r6, 0 - bl GetTileSafe - ldr r4, [r0, 0x14] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08043EA0 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x2 - bne _08043EA0 - adds r0, r4, 0 - bl GetTrapData - adds r1, r0, 0 - ldrb r0, [r1] - cmp r0, 0x1B - bne _08043EA0 - movs r0, 0x5 - strb r0, [r1] -_08043EA0: - adds r5, 0x1 - cmp r5, 0x37 - ble _08043E6E - adds r6, r7, 0 - cmp r6, 0x1F - ble _08043E6A - movs r0, 0x2 - bl sub_8046F84 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08043EC0: .4byte 0x00000207 -_08043EC4: .4byte gDungeon -_08043EC8: .4byte 0x0001357c -_08043ECC: .4byte 0x00000676 - thumb_func_end sub_8043D60 - - thumb_func_start sub_8043ED0 -sub_8043ED0: - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r7, 0 - cmp r5, 0 - bne _08043EEA - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - beq _08043EEA - movs r0, 0 - b _08043FB8 -_08043EEA: - ldr r6, _08043F2C - ldr r0, [r6] - ldrb r0, [r0, 0x10] - cmp r0, 0x1 - bne _08043F40 - bl GetLeader - adds r4, r0, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08043FB6 - cmp r5, 0 - bne _08043F20 - ldr r0, _08043F30 - ldr r1, [r6] - ldr r2, _08043F34 - adds r1, r2 - bl strcpy - ldr r0, _08043F38 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage -_08043F20: - adds r0, r4, 0 - bl sub_8042B0C - ldr r1, _08043F3C - b _08043FAC - .align 2, 0 -_08043F2C: .4byte gDungeon -_08043F30: .4byte gAvailablePokemonNames -_08043F34: .4byte 0x000005f4 -_08043F38: .4byte gUnknown_80F89B4 -_08043F3C: .4byte 0x0000021f -_08043F40: - cmp r0, 0x2 - bne _08043F74 - bl GetLeader - adds r4, r0, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08043FB6 - cmp r5, 0 - bne _08043FA4 - ldr r0, _08043F68 - ldr r1, [r6] - ldr r2, _08043F6C - adds r1, r2 - bl strcpy - ldr r0, _08043F70 - b _08043F9A - .align 2, 0 -_08043F68: .4byte gAvailablePokemonNames -_08043F6C: .4byte 0x000005f4 -_08043F70: .4byte gUnknown_80F89D4 -_08043F74: - cmp r0, 0x3 - bne _08043FB6 - bl GetLeader - adds r4, r0, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08043FB6 - cmp r5, 0 - bne _08043FA4 - ldr r0, _08043FC0 - ldr r1, [r6] - ldr r2, _08043FC4 - adds r1, r2 - bl strcpy - ldr r0, _08043FC8 -_08043F9A: - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage -_08043FA4: - adds r0, r4, 0 - bl sub_8042B0C - ldr r1, _08043FCC -_08043FAC: - adds r0, r4, 0 - adds r2, r4, 0 - bl sub_8068FE0 - movs r7, 0x1 -_08043FB6: - adds r0, r7, 0 -_08043FB8: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08043FC0: .4byte gAvailablePokemonNames -_08043FC4: .4byte 0x000005f4 -_08043FC8: .4byte gUnknown_80F89D8 -_08043FCC: .4byte 0x00000222 - thumb_func_end sub_8043ED0 - - thumb_func_start sub_8043FD0 -sub_8043FD0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x44 - movs r0, 0x2 - mov r9, r0 - movs r1, 0x1 - mov r10, r1 - movs r0, 0xFF - mov r8, r0 -_08043FE8: - movs r3, 0 - mov r1, r9 - adds r1, 0x1 - str r1, [sp, 0x3C] -_08043FF0: - ldr r2, _080440E4 - movs r0, 0x58 - adds r1, r3, 0 - muls r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - ldrh r1, [r4] - mov r0, r10 - ands r0, r1 - adds r3, 0x1 - str r3, [sp, 0x40] - cmp r0, 0 - beq _080440FE - lsrs r0, r1, 1 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - beq _080440FE - add r5, sp, 0x20 - movs r0, 0x8 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - mov r2, r9 - bl GetPokemonLevelData - mov r1, r9 - strb r1, [r4, 0x3] - ldr r0, [sp, 0x20] - str r0, [r4, 0x1C] - ldrh r0, [r5, 0x4] - ldrh r1, [r4, 0x16] - adds r0, r1 - movs r2, 0 - strh r0, [r4, 0x16] - lsls r0, 16 - ldr r1, _080440E8 - cmp r0, r1 - ble _08044040 - ldr r0, _080440EC - strh r0, [r4, 0x16] -_08044040: - ldrb r0, [r4, 0x18] - str r0, [sp, 0x2C] - ldrb r0, [r4, 0x19] - str r0, [sp, 0x30] - ldrb r0, [r4, 0x1A] - str r0, [sp, 0x34] - ldrb r0, [r4, 0x1B] - str r0, [sp, 0x38] - ldrb r1, [r5, 0x6] - ldr r0, [sp, 0x2C] - adds r0, r1 - str r0, [sp, 0x2C] - ldrb r1, [r5, 0x7] - ldr r0, [sp, 0x30] - adds r0, r1 - str r0, [sp, 0x30] - ldrb r1, [r5, 0x8] - ldr r0, [sp, 0x34] - adds r0, r1 - str r0, [sp, 0x34] - ldrb r1, [r5, 0x9] - ldr r0, [sp, 0x38] - adds r0, r1 - str r0, [sp, 0x38] - ldr r0, [sp, 0x2C] - cmp r0, 0xFE - ble _0804407A - mov r0, r8 - str r0, [sp, 0x2C] -_0804407A: - ldr r0, [sp, 0x30] - cmp r0, 0xFE - ble _08044084 - mov r1, r8 - str r1, [sp, 0x30] -_08044084: - ldr r0, [sp, 0x34] - cmp r0, 0xFE - ble _0804408E - mov r0, r8 - str r0, [sp, 0x34] -_0804408E: - ldr r0, [sp, 0x38] - cmp r0, 0xFE - ble _08044098 - mov r1, r8 - str r1, [sp, 0x38] -_08044098: - ldr r0, [sp, 0x2C] - strb r0, [r4, 0x18] - ldr r0, [sp, 0x30] - strb r0, [r4, 0x19] - ldr r0, [sp, 0x34] - strb r0, [r4, 0x1A] - ldr r0, [sp, 0x38] - strb r0, [r4, 0x1B] - movs r0, 0x8 - ldrsh r1, [r4, r0] - ldrb r2, [r4, 0x3] - mov r0, sp - ldr r3, _080440EC - bl sub_808E0AC - adds r6, r0, 0 - cmp r6, 0 - beq _080440FE - movs r0, 0 - cmp r0, r6 - bge _080440FE -_080440C2: - movs r3, 0 - adds r7, r0, 0x1 - lsls r0, 1 - mov r1, sp - adds r5, r1, r0 - adds r2, r4, 0 - adds r2, 0x2C -_080440D0: - ldrb r1, [r2] - mov r0, r10 - ands r0, r1 - cmp r0, 0 - bne _080440F0 - ldrh r1, [r5] - adds r0, r2, 0 - bl InitZeroedPPPokemonMove - b _080440F8 - .align 2, 0 -_080440E4: .4byte gRecruitedPokemonRef -_080440E8: .4byte 0x03e60000 -_080440EC: .4byte 0x000003e7 -_080440F0: - adds r2, 0x8 - adds r3, 0x1 - cmp r3, 0x3 - ble _080440D0 -_080440F8: - adds r0, r7, 0 - cmp r0, r6 - blt _080440C2 -_080440FE: - ldr r3, [sp, 0x40] - movs r0, 0xCE - lsls r0, 1 - cmp r3, r0 - bgt _0804410A - b _08043FF0 -_0804410A: - ldr r0, [sp, 0x3C] - mov r9, r0 - cmp r0, 0x5 - bgt _08044114 - b _08043FE8 -_08044114: - add sp, 0x44 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8043FD0 - - thumb_func_start sub_8044124 -sub_8044124: - push {r4,r5,lr} - ldr r0, _080441AC - ldr r0, [r0] - ldr r1, _080441B0 - adds r0, r1 - ldrb r0, [r0] - bl GetMaxItemsAllowed - cmp r0, 0 - bne _08044182 - movs r3, 0 - ldr r4, _080441B4 - movs r2, 0 -_0804413E: - lsls r1, r3, 2 - ldr r0, [r4] - adds r1, r0 - strb r2, [r1, 0x2] - strb r2, [r1, 0x1] - strb r2, [r1] - adds r3, 0x1 - cmp r3, 0x13 - ble _0804413E - movs r3, 0 - ldr r5, _080441B8 - movs r4, 0x1 -_08044156: - movs r0, 0x58 - adds r1, r3, 0 - muls r1, r0 - ldr r0, [r5] - adds r1, r0, r1 - ldrh r2, [r1] - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _08044178 - lsrs r0, r2, 1 - ands r0, r4 - cmp r0, 0 - beq _08044178 - adds r1, 0x28 - movs r0, 0 - strb r0, [r1] -_08044178: - adds r3, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r3, r0 - ble _08044156 -_08044182: - ldr r0, _080441AC - ldr r0, [r0] - ldr r2, _080441B0 - adds r0, r2 - ldrb r0, [r0] - bl IsKeepMoney - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080441A4 - ldr r0, _080441B4 - ldr r0, [r0] - movs r2, 0x98 - lsls r2, 2 - adds r0, r2 - str r1, [r0] -_080441A4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080441AC: .4byte gDungeon -_080441B0: .4byte 0x00000644 -_080441B4: .4byte gTeamInventoryRef -_080441B8: .4byte gRecruitedPokemonRef - thumb_func_end sub_8044124 - .align 2, 0 diff --git a/include/items.h b/include/items.h index 0ef9d1b67..a502374d5 100644 --- a/include/items.h +++ b/include/items.h @@ -91,4 +91,11 @@ u32 sub_80913E0(Item *slot, u32, struct subStruct_203B240 **); UNUSED Item *item = &gTeamInventoryRef->teamItems[id]; \ } +static inline void ZeroOutItem(Item *item) +{ + item->id = 0; + item->quantity = 0; + item->flags = 0; +} + #endif // GUARD_ITEMS_H diff --git a/include/moves.h b/include/moves.h index f8cb09d1c..95f69a5ae 100644 --- a/include/moves.h +++ b/include/moves.h @@ -89,4 +89,9 @@ void sub_8094060(Move *srcMoves, Move *destMoves); void sub_8094184(struct unkStruct_8094924 *, struct Moves *); void sub_80941FC(struct unkStruct_8094924 *, struct Moves *); +static inline bool8 MoveFlagExists(Move *move) +{ + return (move->moveFlags & MOVE_FLAG_EXISTS); +} + #endif // GUARD_MOVES_H diff --git a/include/pokemon.h b/include/pokemon.h index 0f689cd30..b5282086d 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -98,4 +98,21 @@ extern PokemonStruct1 *sub_808D3F8(void); extern s32 GetUnitSum_808D544(u32); extern s32 sub_808D580(s32 *); +static inline bool8 PokemonFlag1(PokemonStruct1 *mon) +{ + return ((mon->unk0 & 1)); +} + +static inline bool8 PokemonFlag2(PokemonStruct1 *mon) +{ + return (((mon->unk0 >> 1) & 1)); +} + +#include "constants/dungeon.h" + +static inline bool8 IsMonPartner(PokemonStruct1 *mon) +{ + return (mon->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER); +} + #endif // GUARD_POKEMON_H diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 13749a948..943a42e42 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -202,6 +202,7 @@ struct unkStruct_Dungeon5C4_sub struct unkStruct_Dungeon64C { u8 unk0; + u8 unk1; u32 unk4; }; @@ -237,7 +238,7 @@ typedef struct Dungeon /* 0x57C */ u8 fill57C[0x5C0 - 0x57c]; /* 0x5C0 */ s32 unk5C0; /* 0x5C4 */ struct unkStruct_Dungeon5C4_sub unk5C4[3]; - u8 fill5F4[0x644 - 0x5f4]; + /* 0x5F4 */ u8 faintStringBuffer[80]; /* 0x644 */ DungeonLocation dungeonLocation; /* 0x648 */ DungeonLocation dungeonLocation2; struct unkStruct_Dungeon64C unk64C; diff --git a/include/structs/str_pokemon.h b/include/structs/str_pokemon.h index ec30e81b0..9f601e689 100644 --- a/include/structs/str_pokemon.h +++ b/include/structs/str_pokemon.h @@ -30,7 +30,7 @@ typedef struct PokemonStruct1 /* 0x8 */ s16 speciesNum; unkPokeSubStruct_C unkC[2]; /* 0x14 */ s16 IQ; - /* 0x16 */ u16 pokeHP; + /* 0x16 */ s16 pokeHP; /* 0x18 */ Offense offense; /* 0x1C */ u32 currExp; /* 0x20 */ u32 IQSkills; diff --git a/src/code_8042B34.c b/src/code_8042B34.c index 34192adbd..d81f56dce 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -17,15 +17,22 @@ #include "cpu.h" #include "dungeon_music.h" #include "dungeon_random.h" +#include "code_8009804.h" +#include "tile_types.h" #include "text1.h" #include "code_805D8C8.h" #include "code_803E668.h" #include "dungeon_engine.h" +#include "dungeon_map_access.h" +#include "pokemon_mid.h" #include "weather.h" +#include "moves.h" #include "code_8094F88.h" #include "bg_palette_buffer.h" #include "exclusive_pokemon.h" #include "constants/dungeon.h" +#include "constants/monster.h" +#include "constants/trap.h" extern void sub_800EE5C(s32); extern void sub_800EF64(void); @@ -360,8 +367,7 @@ 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 bool8 sub_8043ED0(bool8); extern void LoadDungeonTilesetAssets(void); extern void LoadDungeonPokemonSprites(void); extern void ShowDungeonNameBanner(void); @@ -372,9 +378,16 @@ 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 void sub_8068FE0(Entity *, u32, Entity *r2); +extern void sub_806BFC0(EntityInfo *, u32); +extern s32 sub_808E0AC(u16* a1, s16 species, s32 a3, s32 IQPoints); +extern s32 sub_808E0AC(u16* a1, s16 species, s32 a3, s32 IQPoints); +extern bool8 IsKeepMoney(u8 dungeon); +extern void sub_8042B0C(Entity *); extern s16 gUnknown_2026E4E; extern u8 gUnknown_202F32C; +extern u8 gUnknown_202F1A8; extern s32 gFormatData_202DE30; extern s32 gUnknown_202EDC8; extern Entity *gLeaderPointer; @@ -382,19 +395,23 @@ extern Entity *gLeaderPointer; void sub_8044124(void); void sub_8043FD0(void); void sub_806B404(void); +u8 sub_8043D10(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 u8 *const gUnknown_80F89B4; +extern const u8 *const gUnknown_80F89D4; +extern const u8 *const gUnknown_80F89D8; extern const s16 gUnknown_80F6850[]; extern const s16 gDungeonMusic[]; +extern u8 gAvailablePokemonNames[]; extern OpenedFile *gDungeonNameBannerPalette; - void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) { bool8 check; @@ -762,7 +779,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) } if (gDungeon->unk654 != 1) { - if (sub_8043ED0(1)) { + if (sub_8043ED0(TRUE)) { gDungeon->unk654 = 1; } } @@ -888,8 +905,8 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) 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). + // This goto is a fakematch I had to create in order to generate matching code. + // It has no real effect, because the control flow is the same without it(since check is TRUE). Unfortunately agbcc is blind and goto is needed. // Feel free to remove it. goto FAKEMATCH; } @@ -944,7 +961,6 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) } } - sub_806863C(); sub_803E214(); nullsub_56(); @@ -970,4 +986,225 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) nullsub_16(); } -// +void sub_8043CD8(void) +{ + vram_related_8009804(); +} + +bool8 sub_8043CE4(s32 dungeonId) +{ + if (gUnknown_202F1A8) + return TRUE; + + return (gDungeonWaterType[dungeonId] == 2); +} + +u8 sub_8043D10(void) +{ + if (gDungeon->unk678 == 1 && gDungeon->unk64C.unk1 == gDungeon->dungeonLocation.floor) + return 2; + else if (IsBossFight()) + return 1; + else + return 0; +} + +void sub_8043D50(s32 *a0, s32 *a1) +{ + *a1 = sizeof(Dungeon); + *a0 = 0x4800; // Hmmm +} + +void sub_8043D60(void) +{ + s32 x, y, monId; + + for (monId = 0; monId < DUNGEON_MAX_WILD_POKEMON; monId++) { + Entity *mon = gDungeon->wildPokemon[monId]; + if (EntityExists(mon)) { + EntityInfo *monInfo = GetEntInfo(mon); + bool32 unk = TRUE; + + if (monInfo->shopkeeper == TRUE) + unk = FALSE; + if (IsClientOrTeamBase(monInfo->joinedAt.joinedAt)) + unk = FALSE; + if (monInfo->clientType == CLIENT_TYPE_CLIENT) + unk = FALSE; + + if (unk) { + sub_8068FE0(mon, 0x207, mon); + } + } + } + + for (monId = 0; monId < MAX_TEAM_MEMBERS; monId++) { + Entity *mon = gDungeon->teamPokemon[monId]; + if (EntityExists(mon)) { + s32 i; + EntityInfo *monInfo; + + mon->unk22 = 0; + mon->isVisible = TRUE; + monInfo = GetEntInfo(mon); + monInfo->HP = monInfo->maxHPStat; + monInfo->belly = monInfo->maxBelly; + gDungeon->itemHoldersIdentified = FALSE; + sub_806BFC0(monInfo, 0); + monInfo->apparentID = monInfo->id; + monInfo->perishSongTurns = 0; + for (i = 0; i < MAX_MON_MOVES; i++) { + Move *move = &monInfo->moves.moves[i]; + if (move->moveFlags & MOVE_FLAG_EXISTS) { + move->PP = GetMoveBasePP(move); + } + } + } + } + + for (y = 0; y < 32; y++) { + for (x = 0; x < 56; x++) { + Entity *object = GetTileSafe(x, y)->object; + if (EntityExists(object) && GetEntityType(object) == ENTITY_TRAP) { + Trap *trapData = GetTrapData(object); + if (trapData->id == 27) { + trapData->id = TRAP_PITFALL_TRAP; + } + } + } + } + + sub_8046F84(ITEM_FLAG_IN_SHOP); +} + +bool8 sub_8043ED0(bool8 a0) +{ + bool8 ret = FALSE; + + if (!a0 && sub_8044B28()) + return FALSE; + + if (gDungeon->unk10 == 1) { + Entity *leader = GetLeader(); + if (EntityExists(leader)) { + if (!a0) { + strcpy(gAvailablePokemonNames, gDungeon->faintStringBuffer); + PrintFieldMessage(0, gUnknown_80F89B4, 1); + } + sub_8042B0C(leader); + sub_8068FE0(leader, 0x21F, leader); + ret = TRUE; + } + } + else if (gDungeon->unk10 == 2) { + Entity *leader = GetLeader(); + if (EntityExists(leader)) { + if (!a0) { + strcpy(gAvailablePokemonNames, gDungeon->faintStringBuffer); + PrintFieldMessage(0, gUnknown_80F89D4, 1); + } + sub_8042B0C(leader); + sub_8068FE0(leader, 0x222, leader); + ret = TRUE; + } + } + else if (gDungeon->unk10 == 3) { + Entity *leader = GetLeader(); + if (EntityExists(leader)) { + if (!a0) { + strcpy(gAvailablePokemonNames, gDungeon->faintStringBuffer); + PrintFieldMessage(0, gUnknown_80F89D8, 1); + } + sub_8042B0C(leader); + sub_8068FE0(leader, 0x222, leader); + ret = TRUE; + } + } + + return ret; +} + +void sub_8043FD0(void) +{ + s32 level; + for (level = 2; level < 6; level++) { + s32 i, monId, movesCount; + for (monId = 0; monId < NUM_MONSTERS; monId++) { + PokemonStruct1 *monStruct = &gRecruitedPokemonRef->pokemon[monId]; + if (PokemonFlag1(monStruct) && PokemonFlag2(monStruct)) { + u16 learnedMoves[16]; + LevelData levelData; + // I have to make the variables volatile to get matching code. I'm sure there's a solution for this, but keeping it like that for now. + #ifdef NONMATCHING + s32 atk, spAtk, def, spDef; + #else + vs32 atk, spAtk, def, spDef; + #endif // NONMATCHING + + GetPokemonLevelData(&levelData, monStruct->speciesNum, level); + monStruct->level = level; + monStruct->currExp = levelData.expRequired; + monStruct->pokeHP += levelData.gainHP; + if (monStruct->pokeHP >= 999) // TODO: Make this a max hp define + monStruct->pokeHP = 999; + + atk = monStruct->offense.att[0]; + spAtk = monStruct->offense.att[1]; + def = monStruct->offense.def[0]; + spDef = monStruct->offense.def[1]; + + atk += levelData.gainAtt; + spAtk += levelData.gainSPAtt; + def += levelData.gainDef; + spDef += levelData.gainSPDef; + + // TODO: Make 255 max define for stats + if (atk >= 255) {atk = 255;} + if (spAtk >= 255) {spAtk = 255;} + if (def >= 255) {def = 255;} + if (spDef >= 255) {spDef = 255;} + + monStruct->offense.att[0] = atk; + monStruct->offense.att[1] = spAtk; + monStruct->offense.def[0] = def; + monStruct->offense.def[1] = spDef; + + movesCount = sub_808E0AC(learnedMoves, monStruct->speciesNum, monStruct->level, 999); + if (movesCount == 0) + continue; + + for (i = 0; i < movesCount; i++) { + s32 moveSlot; + for (moveSlot = 0; moveSlot < MAX_MON_MOVES; moveSlot++) { + if (!MoveFlagExists(&monStruct->moves[moveSlot])) { + InitZeroedPPPokemonMove(&monStruct->moves[moveSlot], learnedMoves[i]); + break; + } + } + } + } + } + } +} + +void sub_8044124(void) +{ + s32 i; + + if (GetMaxItemsAllowed(gDungeon->dungeonLocation.id) == 0) + { + for (i = 0; i < INVENTORY_SIZE; i++) { + ZeroOutItem(&gTeamInventoryRef->teamItems[i]); + } + for (i = 0; i < NUM_MONSTERS; i++) { + PokemonStruct1 *mon = (&gRecruitedPokemonRef->pokemon[i]); + if (PokemonFlag1(mon) && PokemonFlag2(mon)) { + mon->heldItem.id = 0; + } + } + } + + if (!IsKeepMoney(gDungeon->dungeonLocation.id)) { + gTeamInventoryRef->teamMoney = 0; + } +} diff --git a/src/code_806CD90.c b/src/code_806CD90.c index ce33a5e3e..8a8513dba 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -489,13 +489,6 @@ void HandleDealingDamage(Entity *attacker, Entity *target, struct DamageStruct * } } -static inline void ZeroOutItem(Item *item) -{ - item->id = 0; - item->quantity = 0; - item->flags = 0; -} - static inline bool8 ItemSticky(Item *item) { return (item->flags & ITEM_FLAG_STICKY);