diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s deleted file mode 100644 index 11d163910..000000000 --- a/asm/dungeon_2.s +++ /dev/null @@ -1,600 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - - thumb_func_start sub_809034C -sub_809034C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xF8 - adds r7, r2, 0 - ldr r2, [sp, 0x118] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - asrs r1, 16 - str r1, [sp, 0xE0] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0xE4] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xE8] - bl GetNumberOfFilledInventorySlots - str r0, [sp, 0xEC] - movs r5, 0 - movs r0, 0 - str r0, [sp, 0xF4] - mov r8, r0 - add r4, sp, 0xC8 - movs r0, 0xA - strb r0, [r4] - add r1, sp, 0xF4 - ldrb r1, [r1] - strb r1, [r4, 0x1] - ldr r1, _0809040C - adds r0, r7, 0 - bl strcpy - movs r2, 0 - str r2, [sp, 0xF0] - movs r3, 0 - ldr r0, _08090410 - ldr r6, [r0] - movs r4, 0x1 -_080903A2: - movs r0, 0x58 - muls r0, r3 - adds r2, r6, r0 - ldrh r1, [r2] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080903D0 - lsrs r0, r1, 1 - ands r0, r4 - cmp r0, 0 - beq _080903D0 - adds r0, r2, 0 - adds r0, 0x28 - ldrb r0, [r0] - cmp r0, 0 - beq _080903CA - ldr r0, [sp, 0xF0] - adds r0, 0x1 - str r0, [sp, 0xF0] -_080903CA: - adds r5, 0x1 - cmp r5, 0x4 - beq _080903DA -_080903D0: - adds r3, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r3, r0 - ble _080903A2 -_080903DA: - ldr r0, _08090414 - mov r2, r9 - lsls r1, r2, 4 - adds r0, r1, r0 - ldrb r0, [r0, 0x5] - mov r9, r1 - ldr r1, [sp, 0xE4] - cmp r1, 0 - bne _080903F2 - cmp r0, 0x3 - ble _080903F2 - movs r0, 0x3 -_080903F2: - cmp r5, r0 - ble _0809043C - cmp r0, 0x1 - bne _0809041C - ldr r0, _08090418 - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString - b _08090430 - .align 2, 0 -_0809040C: .4byte gUnknown_8108F40 -_08090410: .4byte gRecruitedPokemonRef -_08090414: .4byte gDungeons -_08090418: .4byte gUnknown_8115A2C -_0809041C: - ldr r1, _08090464 - subs r0, r5, r0 - str r0, [r1] - ldr r0, _08090468 - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString -_08090430: - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r2, 0x1 - mov r8, r2 -_0809043C: - ldr r0, _0809046C - mov r2, r9 - adds r1, r2, r0 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _0809048E - ldr r1, [sp, 0xEC] - cmp r0, r1 - bge _0809048E - ldr r1, _08090464 - str r0, [r1] - ldr r2, [sp, 0xEC] - subs r0, r2, r0 - str r0, [r1, 0x4] - mov r0, r8 - cmp r0, 0 - bne _08090474 - ldr r0, _08090470 - b _08090476 - .align 2, 0 -_08090464: .4byte gFormatArgs -_08090468: .4byte gUnknown_81159DC -_0809046C: .4byte gDungeons -_08090470: .4byte gUnknown_8115A80 -_08090474: - ldr r0, _080904AC -_08090476: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_0809048E: - ldr r2, [sp, 0xE0] - cmp r2, 0 - beq _0809054E - ldr r0, _080904B0 - adds r1, r2, 0 - bl CopyCyanMonsterNametoBuffer - cmp r5, 0x3 - ble _080904D2 - mov r0, r8 - cmp r0, 0 - bne _080904B8 - ldr r0, _080904B4 - b _080904BA - .align 2, 0 -_080904AC: .4byte gUnknown_8115ADC -_080904B0: .4byte gFormatBuffer_Monsters -_080904B4: .4byte gUnknown_8115B3C -_080904B8: - ldr r0, _08090528 -_080904BA: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_080904D2: - ldr r0, [sp, 0xE0] - bl GetBodySize - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r2, _0809052C - mov r10, r2 - movs r6, 0x1 -_080904E4: - movs r0, 0x58 - adds r1, r4, 0 - muls r1, r0 - mov r2, r10 - ldr r0, [r2] - adds r2, r0, r1 - ldrh r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08090510 - lsrs r0, r1, 1 - ands r0, r6 - cmp r0, 0 - beq _08090510 - movs r1, 0x8 - ldrsh r0, [r2, r1] - bl GetBodySize - lsls r0, 24 - lsrs r0, 24 - adds r5, r0 -_08090510: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _080904E4 - cmp r5, 0x6 - ble _0809054E - mov r2, r8 - cmp r2, 0 - bne _08090534 - ldr r0, _08090530 - b _08090536 - .align 2, 0 -_08090528: .4byte gUnknown_8115BA4 -_0809052C: .4byte gRecruitedPokemonRef -_08090530: .4byte gUnknown_8115BF4 -_08090534: - ldr r0, _080905D0 -_08090536: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r0, 0x1 - mov r8, r0 -_0809054E: - ldr r1, [sp, 0xE4] - cmp r1, 0 - beq _08090602 - add r5, sp, 0xCC - ldr r1, _080905D4 - adds r0, r5, 0 - movs r2, 0x8 - bl memcpy - add r4, sp, 0xD4 - ldr r1, _080905D8 - adds r0, r4, 0 - movs r2, 0x4 - bl memcpy - movs r6, 0 - mov r10, r4 - ldr r0, _080905DC - add r0, r9 - ldrb r5, [r0, 0xB] - add r4, sp, 0xCC -_08090578: - adds r0, r5, 0 - asrs r0, r6 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809059E - ldrh r0, [r4] - bl sub_8090820 - lsls r0, 24 - cmp r0, 0 - bne _0809059E - mov r2, r10 - adds r0, r2, r6 - ldrb r0, [r0] - bl GetItemPossessionCount - cmp r0, 0 - beq _080905A6 -_0809059E: - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _08090578 -_080905A6: - cmp r6, 0x3 - bgt _08090602 - add r4, sp, 0xD8 - lsls r0, r6, 1 - add r0, sp - adds r0, 0xCC - ldrh r1, [r0] - adds r0, r4, 0 - bl InitPokemonMove - ldr r0, _080905E0 - adds r1, r4, 0 - movs r2, 0 - bl BufferMoveName - mov r0, r8 - cmp r0, 0 - bne _080905E8 - ldr r0, _080905E4 - b _080905EA - .align 2, 0 -_080905D0: .4byte gUnknown_8115C4C -_080905D4: .4byte gUnknown_8108F42 -_080905D8: .4byte gUnknown_8108F4A -_080905DC: .4byte gDungeons -_080905E0: .4byte gFormatBuffer_Items -_080905E4: .4byte gUnknown_8115CB8 -_080905E8: - ldr r0, _080906A0 -_080905EA: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_08090602: - ldr r0, _080906A4 - add r0, r9 - ldrb r1, [r0, 0xB] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080906CE - ldr r5, _080906A8 - ldr r2, [sp, 0xE0] - cmp r2, 0 - beq _0809063A - adds r0, r2, 0 - movs r1, 0 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08090638 - ldr r0, [sp, 0xE0] - movs r1, 0x1 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0809063A -_08090638: - movs r5, 0 -_0809063A: - ldr r0, _080906A8 - cmp r5, r0 - bne _080906CE - movs r5, 0 - movs r6, 0x1 -_08090644: - ldr r2, _080906AC - movs r0, 0x58 - adds r1, r5, 0 - muls r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - ldrh r1, [r4] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08090686 - lsrs r0, r1, 1 - ands r0, r6 - cmp r0, 0 - beq _08090686 - movs r1, 0x8 - ldrsh r0, [r4, r1] - movs r1, 0 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08090690 - movs r2, 0x8 - ldrsh r0, [r4, r2] - movs r1, 0x1 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08090690 -_08090686: - adds r5, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - ble _08090644 -_08090690: - ldr r0, _080906A8 - cmp r5, r0 - bne _080906CE - mov r0, r8 - cmp r0, 0 - bne _080906B4 - ldr r0, _080906B0 - b _080906B6 - .align 2, 0 -_080906A0: .4byte gUnknown_8115D14 -_080906A4: .4byte gDungeons -_080906A8: .4byte 0x0000019d -_080906AC: .4byte gRecruitedPokemonRef -_080906B0: .4byte gUnknown_8115D5C -_080906B4: - ldr r0, _080906D8 -_080906B6: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl FormatString - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_080906CE: - mov r2, r8 - cmp r2, 0 - beq _080906DC - movs r0, 0x1 - b _0809080E - .align 2, 0 -_080906D8: .4byte gUnknown_8115D94 -_080906DC: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0xA] - cmp r0, 0 - beq _080906EC - ldr r0, [sp, 0xE8] - cmp r0, 0 - beq _0809071A -_080906EC: - ldr r1, [sp, 0xF4] - cmp r1, 0 - bne _08090708 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r2, 0x1 - str r2, [sp, 0xF4] -_08090708: - ldr r0, _080907F4 - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_0809071A: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0x6] - cmp r0, 0 - beq _08090752 - ldr r0, [sp, 0xF4] - cmp r0, 0 - bne _08090740 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r1, 0x1 - str r1, [sp, 0xF4] -_08090740: - ldr r0, _080907F8 - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_08090752: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _08090792 - ldr r2, [sp, 0xEC] - ldr r0, [sp, 0xF0] - cmn r2, r0 - beq _08090792 - ldr r1, [sp, 0xF4] - cmp r1, 0 - bne _08090780 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r2, 0x1 - str r2, [sp, 0xF4] -_08090780: - ldr r0, _080907FC - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_08090792: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _080907DA - ldr r0, _08090800 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _080907DA - ldr r2, [sp, 0xF4] - cmp r2, 0 - bne _080907C8 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r0, 0x1 - str r0, [sp, 0xF4] -_080907C8: - ldr r0, _08090804 - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_080907DA: - ldr r1, [sp, 0xF4] - cmp r1, 0 - bne _0809080C - ldr r1, _08090808 - adds r0, r7, 0 - bl sprintfStatic - movs r0, 0 - b _0809080E - .align 2, 0 -_080907EC: .4byte gDungeons -_080907F0: .4byte gUnknown_8115DD4 -_080907F4: .4byte gUnknown_8115E00 -_080907F8: .4byte gUnknown_8115E28 -_080907FC: .4byte gUnknown_8115E54 -_08090800: .4byte gTeamInventoryRef -_08090804: .4byte gUnknown_8115E80 -_08090808: .4byte gUnknown_8108F50 -_0809080C: - movs r0, 0x2 -_0809080E: - add sp, 0xF8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809034C - - .align 2,0 diff --git a/data/data_810AE24.s b/data/data_810AE24.s index 5a050f881..ecfa2eb13 100644 --- a/data/data_810AE24.s +++ b/data/data_810AE24.s @@ -6230,6 +6230,4 @@ DungeonMoneyLostEnter_Text: @ Text .global gUnknown_8115E80 gUnknown_8115E80: @ 8115E80 .4byte DungeonMoneyLostEnter_Text -.string "pksdir0\0" -.string "pksdir0\0" .align 2,0 diff --git a/data/data_810AE24_2.s b/data/data_810AE24_2.s new file mode 100644 index 000000000..245fcac63 --- /dev/null +++ b/data/data_810AE24_2.s @@ -0,0 +1,5 @@ +.section .rodata + +.string "pksdir0\0" +.string "pksdir0\0" +.align 2,0 diff --git a/include/constants/dungeon.h b/include/constants/dungeon.h index c43042b25..982f4aa26 100644 --- a/include/constants/dungeon.h +++ b/include/constants/dungeon.h @@ -1,10 +1,6 @@ #ifndef GUARD_CONSTANTS_DUNGEON_H #define GUARD_CONSTANTS_DUNGEON_H -#define NUM_DUNGEON_MAZE (NUM_DUNGEONS - DUNGEON_NORMAL_MAZE_2) - -#define NUM_BASIC_DUNGEON_MAZE (DUNGEON_STEEL_MAZE - DUNGEON_NORMAL_MAZE_2 + 1) - enum DungeonID { DUNGEON_TINY_WOODS = 0, @@ -108,6 +104,14 @@ enum DungeonID NUM_DUNGEONS }; +#define DUNGEON_FIRST_MAZE DUNGEON_NORMAL_MAZE_2 +#define DUNGEON_LAST_MAZE DUNGEON_RESCUE_TEAM_MAZE +#define DUNGEON_LAST_BASIC_MAZE DUNGEON_STEEL_MAZE + +#define NUM_DUNGEON_MAZE (DUNGEON_LAST_MAZE - DUNGEON_FIRST_MAZE + 1) +#define NUM_BASIC_DUNGEON_MAZE (DUNGEON_LAST_BASIC_MAZE - DUNGEON_FIRST_MAZE + 1) +#define DUNGEON_IS_MAZE(id)((id) >= DUNGEON_FIRST_MAZE && (id) <= DUNGEON_LAST_MAZE) + static inline bool8 IsExperienceLocked(s32 joinedDungeon) { if (joinedDungeon == DUNGEON_JOIN_LOCATION_CLIENT_POKEMON || joinedDungeon == DUNGEON_RESCUE_TEAM_BASE) diff --git a/include/dungeon.h b/include/dungeon.h index 28726de73..a6138569a 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -33,8 +33,8 @@ typedef struct DungeonDataEntry /* 0xE */ s16 randomMovementChance; } DungeonDataEntry; -extern DungeonDataEntry gDungeons[]; -extern DungeonName gDungeonNames[]; +extern const DungeonDataEntry gDungeons[]; +extern const DungeonName gDungeonNames[]; s32 GetDungeonFloorCount(u8 dungeon); const u8 *GetDungeonName1(u8 dungeon); diff --git a/ld_script.txt b/ld_script.txt index d9813a59a..0b1a98be6 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -288,8 +288,6 @@ SECTIONS { src/pokemon.o(.text); src/pokemon_3.o(.text); src/dungeon.o(.text); - asm/dungeon_2.o(.text); - src/dungeon_2_1.o(.text); src/items.o(.text); src/rescue_team_info.o(.text); src/text_util.o(.text); @@ -569,6 +567,7 @@ SECTIONS { src/rescue_team_info.o(.rodata); src/text_util.o(.rodata); data/data_810AE24.o(.rodata); + data/data_810AE24_2.o(.rodata); src/position_util.o(.rodata); data/data_8115EB8.o(.rodata); src/ground_main.o(.rodata); diff --git a/src/dungeon.c b/src/dungeon.c index cb29437dd..2595455cb 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -2,18 +2,51 @@ #include "dungeon.h" #include "code_800D090.h" #include "pokemon.h" +#include "moves.h" +#include "random.h" #include "code_8092334.h" +#include "pokemon_mid.h" +#include "string_format.h" #include "constants/dungeon.h" - +#include "constants/type.h" +#include "constants/monster.h" extern const char gUnknown_8108F10[]; extern const char gUnknown_8108F18[]; extern const char gUnknown_8108F2C[]; +extern u8 gInvalidDungeonIDs[]; +extern u8 gDungeonFloorCount[]; +extern const u8 *const gUnknown_8108084[]; extern DungeonLocation gUnknown_8107828[]; extern u8 gDungeonFloorCount[]; extern u8 gUnknown_81077E8[]; +extern u8 gUnknown_8108F40[]; +extern u8 *gUnknown_8115DD4[]; +extern u8 *gUnknown_8115E54[]; +extern u8 *gUnknown_8115A2C[]; +extern u8 *gUnknown_81159DC[]; +extern u8 *gUnknown_8115E00[]; +extern u16 gUnknown_8108F42[]; +extern u8 gUnknown_8108F4A[4]; +extern u8 *gUnknown_8115ADC[]; +extern u8 *gUnknown_8115A80[]; +extern u8 *gUnknown_8115BA4[]; +extern u8 *gUnknown_8115B3C[]; +extern u8 *gUnknown_8115C4C[]; +extern u8 *gUnknown_8115BF4[]; +extern u8 *gUnknown_8115D14[]; +extern u8 *gUnknown_8115CB8[]; +extern u8 *gUnknown_8115D5C[]; +extern u8 *gUnknown_8115D94[]; +extern u8 *gUnknown_8115E28[]; +extern u8 *gUnknown_8115E80[]; +extern u8 gUnknown_8108F50[]; void sub_80901D8(DungeonLocation *param_1,DungeonLocation *param_2); +s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c +void sub_8090888(u8 *param_1, u8 *param_2); +bool8 sub_8090820(u16 moveID); +s32 GetItemPossessionCount(u8 id); const u8 *GetDungeonName1(u8 dungeon) { @@ -80,7 +113,8 @@ s16 GetRandomMovementChance(u8 dungeon) return gDungeons[dungeon].randomMovementChance; } -bool8 sub_809017C(DungeonLocation* a1) { +bool8 sub_809017C(DungeonLocation* a1) +{ DungeonLocation location; int i; sub_80901D8(&location, a1); @@ -94,8 +128,8 @@ bool8 sub_809017C(DungeonLocation* a1) { } void sub_80901D8(DungeonLocation *param_1,DungeonLocation *param_2) -{ - if ((u8)(param_2->id - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) { +{ + if (DUNGEON_IS_MAZE(param_2->id)) { param_1->id = DUNGEON_NORMAL_MAZE; param_1->floor = (param_2->id - DUNGEON_NORMAL_MAZE_2) * 3 + param_2->floor; } @@ -127,7 +161,7 @@ void CopyDungeonName1toBuffer(u8 *buffer, DungeonLocation *dungeonLocation) s32 GetDungeonFloorCount(u8 dungeon) { - if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) + if (DUNGEON_IS_MAZE(dungeon)) return 4; else if(dungeon > DUNGEON_PURITY_FOREST) return 1; @@ -137,7 +171,7 @@ s32 GetDungeonFloorCount(u8 dungeon) u8 sub_80902C8(u8 dungeon) { - if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) + if (DUNGEON_IS_MAZE(dungeon)) return 0; else if(dungeon > DUNGEON_PURITY_FOREST) return 0; @@ -163,3 +197,270 @@ bool8 DoEnemiesEvolveWhenKOed(u8 dungeon) { return gDungeons[dungeon].enemiesEvolveWhenKOed; } + +// Needed to match. +static inline void AddNewLine(const u8 *str, u8 *buffer, u8 *newLine) +{ + FormatString(str, buffer, newLine, 0); +} + +u32 sub_809034C(u8 dungeonIndex, s32 speciesId_, u8 *buffer, bool32 param_4_, bool32 param_5_) +{ + s32 maxPartyMembers, i; + + s32 speciesId = (s16) speciesId_; + bool32 param_4 = (bool8) (param_4_); + bool32 param_5 = (bool8) (param_5_); + + s32 numInvSlots = GetNumberOfFilledInventorySlots(); + s32 counter = 0; + s32 sp_0xf0; + bool8 sp_0xf4 = FALSE; + bool8 r8 = FALSE; + u8 text[200]; + u8 newLine[2]; + + newLine[0] = '\n'; + newLine[1] = 0; + + strcpy(buffer,gUnknown_8108F40); + sp_0xf0 = 0; + + for (i = 0; i < NUM_MONSTERS; i++) { + struct PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[i]; + if (PokemonFlag1(mon) && PokemonFlag2(mon)) { + if (mon->heldItem.id != 0) { + sp_0xf0++; + } + if (++counter == 4) break; + } + } + + maxPartyMembers = gDungeons[dungeonIndex].maxPartyMembers; + if (!param_4 && maxPartyMembers > 3) { + maxPartyMembers = 3; + } + if (counter > maxPartyMembers) { + if (maxPartyMembers == 1) { + AddNewLine(*gUnknown_8115A2C,text,newLine); + } + else { + gFormatArgs[0] = counter - maxPartyMembers; + AddNewLine(*gUnknown_81159DC,text,newLine); + } + sub_8090888(buffer,text); + r8 = TRUE; + } + + if (gDungeons[dungeonIndex].maxItemsAllowed != 0 && gDungeons[dungeonIndex].maxItemsAllowed < numInvSlots) { + gFormatArgs[0] = gDungeons[dungeonIndex].maxItemsAllowed; + gFormatArgs[1] = numInvSlots - gDungeons[dungeonIndex].maxItemsAllowed; + AddNewLine((!r8) ? *gUnknown_8115A80 : *gUnknown_8115ADC, text, newLine); + sub_8090888(buffer,text); + r8 = TRUE; + } + + if (speciesId != MONSTER_NONE) { + s32 i, bodySize; + + CopyCyanMonsterNametoBuffer(gFormatBuffer_Monsters[0],speciesId); + if (counter > 3) { + AddNewLine((!r8) ? *gUnknown_8115B3C : *gUnknown_8115BA4, text,newLine); + sub_8090888(buffer,text); + r8 = TRUE; + } + bodySize = GetBodySize(speciesId); + for (i = 0; i < NUM_MONSTERS; i++) { + struct PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[i]; + + if (PokemonFlag1(mon) && PokemonFlag2(mon)){ + bodySize += GetBodySize(mon->speciesNum); + } + } + if (bodySize > 6) { + AddNewLine((!r8) ? *gUnknown_8115BF4 : *gUnknown_8115C4C, text,newLine); + sub_8090888(buffer,text); + r8 = TRUE; + } + } + if (param_4) { + s32 i; + //u16 local_4c[4] = {0x99, 0x9C, 0x9b, 0xdb}; + //u8 local_44[4] = {0xe1, 0xe7, 0xe6, 0xe2}; + u16 local_4c[4]; + u8 local_44[4]; + memcpy(local_4c,gUnknown_8108F42,8); + memcpy(local_44,gUnknown_8108F4A,4); + + for (i = 0; i < 4; i++) { + if ((((gDungeons[dungeonIndex].HMMask >> (i) & 1) != 0) && !sub_8090820(local_4c[i])) && GetItemPossessionCount(local_44[i]) == 0) { + break; + } + } + + if (i < 4) { + struct Move move; + + InitPokemonMove(&move,local_4c[i]); + BufferMoveName(gFormatBuffer_Items[0],&move,0); + AddNewLine((!r8) ? *gUnknown_8115CB8 : *gUnknown_8115D14, text,newLine); + sub_8090888(buffer,text); + r8 = TRUE; + } + } + + if (gDungeons[dungeonIndex].HMMask & 0x10) { + s32 otherSpeciesId = NUM_MONSTERS; + + if (speciesId != MONSTER_NONE && (GetPokemonType(speciesId,0) == TYPE_WATER || (GetPokemonType(speciesId,1) == TYPE_WATER))) { + otherSpeciesId = 0; + } + + if (otherSpeciesId == NUM_MONSTERS) { + for (otherSpeciesId = 0; otherSpeciesId < NUM_MONSTERS; otherSpeciesId++) { + struct PokemonStruct1 *mon = &gRecruitedPokemonRef->pokemon[otherSpeciesId]; + + if (PokemonFlag1(mon) && PokemonFlag2(mon) + && (GetPokemonType(mon->speciesNum,0) == TYPE_WATER || GetPokemonType(mon->speciesNum,1) == TYPE_WATER)) + { + break; + } + } + if (otherSpeciesId == NUM_MONSTERS) { + AddNewLine((!r8) ? *gUnknown_8115D5C : *gUnknown_8115D94, text,newLine); + sub_8090888(buffer,text); + r8 = TRUE; + } + } + } + + if (r8) { + return 1; + } + + if ((!gDungeons[dungeonIndex].enterWithoutGameSave) || (param_5)) { + if (!sp_0xf4) { + strcpy(buffer,*gUnknown_8115DD4); + strcat(buffer,newLine); + sp_0xf4 = TRUE; + } + strcat(buffer,*gUnknown_8115E00); + strcat(buffer,newLine); + } + if (gDungeons[dungeonIndex].levelResetTo1) { + if (!sp_0xf4) { + strcpy(buffer,*gUnknown_8115DD4); + strcat(buffer,newLine); + sp_0xf4 = TRUE; + } + strcat(buffer,*gUnknown_8115E28); + strcat(buffer,newLine); + } + if ((gDungeons[dungeonIndex].maxItemsAllowed == 0) && (numInvSlots + sp_0xf0 != 0)) { + if (!sp_0xf4) { + strcpy(buffer,*gUnknown_8115DD4); + strcat(buffer,newLine); + sp_0xf4 = TRUE; + } + strcat(buffer,*gUnknown_8115E54); + strcat(buffer,newLine); + } + if ((!gDungeons[dungeonIndex].keepMoney) && (gTeamInventoryRef->teamMoney != 0)) { + if (!sp_0xf4) { + strcpy(buffer,*gUnknown_8115DD4); + strcat(buffer,newLine); + sp_0xf4 = TRUE; + } + strcat(buffer, *gUnknown_8115E80); + strcat(buffer,newLine); + } + + if (sp_0xf4) { + return 2; + } + else { + sprintfStatic(buffer,gUnknown_8108F50); + return 0; + } +} + +bool8 sub_8090820(u16 moveID) +{ + s32 speciesId, moveIndex; + + for (speciesId = 0; speciesId < NUM_MONSTERS; speciesId++) { + PokemonStruct1 *pokeStruct = &gRecruitedPokemonRef->pokemon[speciesId]; + if (PokemonFlag1(pokeStruct) && PokemonFlag2(pokeStruct)) { + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { + Move *move = &pokeStruct->moves[moveIndex]; + if (MoveFlagExists(move) && move->id == moveID) { + return TRUE; + } + } + } + } + return FALSE; +} + +void sub_8090888(u8 *param_1, u8 *param_2) +{ + s32 iVar3 = 0; + + while (*param_1 != '\0') { + switch (*param_1) { + case '\n': + iVar3++; + break; + } + param_1++; + } + + while (iVar3 % 3) { + *param_1++ = '\n'; + iVar3++; + } + + while (*param_2 != '\0') { + *param_1++ = *param_2; + param_2++; + } + + *param_1 = '\0'; +} + +u32 sub_80908D8(DungeonLocation *dungeon) +{ + if (dungeon->id < DUNGEON_OUT_ON_RESCUE && dungeon->floor < gDungeonFloorCount[dungeon->id]) { + return gUnknown_8108084[dungeon->id][dungeon->floor]; + } + else { + return 1; + } +} + +u8 sub_8090910(DungeonLocation *dungeon, u32 param_2) +{ + s32 rand1 = RandInt(9999); + s32 rand2 = RandInt(9999); + if (dungeon->id < DUNGEON_OUT_ON_RESCUE && dungeon->floor < gDungeonFloorCount[dungeon->id]) { + return sub_8091E94(param_2, rand1, rand2); + } + else { + return 0x46; + } +} + +bool8 IsNotValidDungeon(u8 dungeon) +{ + if (dungeon >= DUNGEON_OUT_ON_RESCUE) { + return TRUE; + } + else { + s32 i; + for (i = 0; gInvalidDungeonIDs[i] != DUNGEON_OUT_ON_RESCUE; i++) { + if (gInvalidDungeonIDs[i] == dungeon) + return TRUE; + } + return FALSE; + } +} diff --git a/src/dungeon_2_1.c b/src/dungeon_2_1.c deleted file mode 100644 index 68e03df1a..000000000 --- a/src/dungeon_2_1.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "dungeon.h" -#include "constants/dungeon.h" -#include "code_800D090.h" -#include "pokemon.h" -#include "random.h" -#include "code_8092334.h" - -extern u8 gInvalidDungeonIDs[]; -extern u8 gDungeonFloorCount[]; -extern u8 *gUnknown_8108084[]; - -s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c - - -bool8 sub_8090820(u16 moveID) -{ - PokemonStruct1 *pokeStruct; - Move *move; - s32 moveIndex; - s32 index; - s32 one; - - for(index = 0; index < 0x19d; index++) - { - pokeStruct = &gRecruitedPokemonRef->pokemon[index]; - one = 1; - if (pokeStruct->unk0 & 1) - { - if(pokeStruct->unk0 >> 1 & one){ - for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) - { - move = &pokeStruct->moves[moveIndex]; - if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->id == moveID)) { - return TRUE; - } - } - } - } - } - return FALSE; -} - -void sub_8090888(u8 *param_1, u8 *param_2) -{ - s32 iVar3; - - iVar3 = 0; - - if(*param_1 != 0) - { - do { - if (*param_1 == 0xA) { - iVar3++; - } - param_1++; - } while (*param_1 != 0); - } - - while (iVar3 % 3) { - *param_1 = 0xA; - param_1++; - iVar3++; - } - - while (*param_2 != 0) { - *param_1 = *param_2; - param_1++; - param_2++; - } - - *param_1 = 0; -} - -u32 sub_80908D8(DungeonLocation *dungeon) -{ - if ((dungeon->id < DUNGEON_OUT_ON_RESCUE) && (dungeon->floor < gDungeonFloorCount[dungeon->id])) { - return gUnknown_8108084[dungeon->id][dungeon->floor]; - } - else { - return 1; - } -} - -u8 sub_8090910(DungeonLocation *dungeon, u32 param_2) -{ - u32 rand1; - u32 rand2; - - rand1 = RandInt(9999); - rand2 = RandInt(9999); - if ((dungeon->id < DUNGEON_OUT_ON_RESCUE) && (dungeon->floor < gDungeonFloorCount[dungeon->id])) { - return sub_8091E94(param_2, rand1, rand2); - } - else { - return 0x46; - } -} - -bool8 IsNotValidDungeon(u8 dungeon) -{ - s32 counter; - - if (dungeon >= DUNGEON_OUT_ON_RESCUE) { - return TRUE; - } - else - { - counter = 0; - if (gInvalidDungeonIDs[0] != DUNGEON_OUT_ON_RESCUE) { - for(; gInvalidDungeonIDs[counter] != DUNGEON_OUT_ON_RESCUE; counter++) - { - if (gInvalidDungeonIDs[counter] == dungeon) return TRUE; - } - } - return FALSE; - } -} diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 22e352926..686853216 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -52,7 +52,7 @@ bool8 IsCurrentFixedRoomBossFight() bool8 IsMakuhitaTrainingMaze(void) { - if( (u8)(gDungeon->unk644.dungeonLocation.id - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) + if (DUNGEON_IS_MAZE(gDungeon->unk644.dungeonLocation.id)) return TRUE; else return FALSE;