Create constant files for dungeon exit reasons and residual damage types, label some magic numbers, misc fixes

This commit is contained in:
Electro 2025-09-05 19:28:02 +01:00
parent 333be4720d
commit 675aea42d9
58 changed files with 312 additions and 224 deletions

View File

@ -0,0 +1,72 @@
#ifndef GUARD_CONSTANTS_DUNGEON_EXIT_H
#define GUARD_CONSTANTS_DUNGEON_EXIT_H
// constants start at this value
#define DUNGEON_EXIT_REASON_START 500
// reasons after this value are considered successful exits
#define DUNGEON_EXIT_REASON_SUCCESS 550
enum DungeonExitReason
{
DUNGEON_EXIT_TRANSFORMED_INTO_FRIEND = DUNGEON_EXIT_REASON_START,
DUNGEON_EXIT_LEFT_WITHOUT_BEING_BEFRIENDED,
DUNGEON_EXIT_FAINTED_FROM_DEBUG_ATTACK,
DUNGEON_EXIT_MISSED_JUMP_KICK,
DUNGEON_EXIT_MISSED_HI_JUMP_KICK,
DUNGEON_EXIT_FAINTED_FROM_DESTINY_BOND,
DUNGEON_EXIT_FAINTED_COVERED_IN_SLUDGE,
DUNGEON_EXIT_UNUSED_507,
DUNGEON_EXIT_UNUSED_508,
DUNGEON_EXIT_FAINTED_FROM_RECOIL,
DUNGEON_EXIT_FAINTED_FROM_DAMAGE_BOUNCING,
DUNGEON_EXIT_DEFEATED_PENT_UP_ENERGY,
DUNGEON_EXIT_UNUSED_512,
DUNGEON_EXIT_UNUSED_513,
DUNGEON_EXIT_UNUSED_514,
DUNGEON_EXIT_UNUSED_515,
DUNGEON_EXIT_UNUSED_516,
DUNGEON_EXIT_UNUSED_517,
DUNGEON_EXIT_FAINTED_FROM_SPIKES,
DUNGEON_EXIT_DEBUG_DAMAGE,
DUNGEON_EXIT_FAINTED_FROM_BURN,
DUNGEON_EXIT_FAINTED_FROM_CONSTRICTION,
DUNGEON_EXIT_FAINTED_FROM_POISON,
DUNGEON_EXIT_FAINTED_FROM_WRAP,
DUNGEON_EXIT_FELLED_BY_CURSE,
DUNGEON_EXIT_DRAINED_BY_LEECH_SEED,
DUNGEON_EXIT_FAINTED_FROM_PERISH_SONG,
DUNGEON_EXIT_FAINTED_WHILE_IN_NIGHTMARE,
DUNGEON_EXIT_FELLED_BY_THROWN_ROCK,
DUNGEON_EXIT_FAINTED_FROM_HUNGER,
DUNGEON_EXIT_DISAPPEARED_IN_EXPLOSION,
DUNGEON_EXIT_TRIPPED_CHESTNUT_TRAP,
DUNGEON_EXIT_FAINTED_DUE_TO_TRAP,
DUNGEON_EXIT_FELL_INTO_PITFALL,
DUNGEON_EXIT_DEFEATED_BLAST_SEED,
DUNGEON_EXIT_FELLED_BY_THROWN_ITEM,
DUNGEON_EXIT_TRANSFORMED_INTO_ITEM,
DUNGEON_EXIT_FAINTED_FROM_BEING_KNOCKED,
DUNGEON_EXIT_FELLED_BY_POKEMON_FLYING,
DUNGEON_EXIT_GAVE_UP_EXPLORATION,
DUNGEON_EXIT_DELETED_FOR_EVENT,
DUNGEON_EXIT_WENT_AWAY,
DUNGEON_EXIT_BLOWN_OUT_UNSEEN_FORCE,
DUNGEON_EXIT_RETURNED_WITH_FALLEN_PARTNER,
DUNGEON_EXIT_FAINTED_DUE_TO_WEATHER,
DUNGEON_EXIT_WAS_POSSESSED,
DUNGEON_EXIT_FAILED_TO_PROTECT_CLIENT,
DUNGEON_EXIT_FAINTED_FROM_WONDER_ORB,
DUNGEON_EXIT_FAINTED_FROM_ITEM,
DUNGEON_EXIT_UNUSED_549,
DUNGEON_EXIT_ESCAPED_MIDDLE_OF_EXPLORATION = DUNGEON_EXIT_REASON_SUCCESS,
DUNGEON_EXIT_CLEARED_DUNGEON,
DUNGEON_EXIT_SUCCEEDED_IN_RESCUE_MISSION,
DUNGEON_EXIT_IMPRESSIVELY_COMPLETED_MISSION,
DUNGEON_EXIT_BEFRIENDED_MEW,
};
#define NUM_DUNGEON_EXIT_REASONS 55
#endif

View File

@ -0,0 +1,31 @@
#ifndef GUARD_CONSTANTS_RESIDUAL_DAMAGE_H
#define GUARD_CONSTANTS_RESIDUAL_DAMAGE_H
enum ResidualDamageType
{
RESIDUAL_DAMAGE_REGULAR,
RESIDUAL_DAMAGE_BURN,
RESIDUAL_DAMAGE_CONSTRICT,
RESIDUAL_DAMAGE_POISON,
RESIDUAL_DAMAGE_UNUSED_4,
RESIDUAL_DAMAGE_WRAP,
RESIDUAL_DAMAGE_COUNTERATTACK,
RESIDUAL_DAMAGE_CURSE,
RESIDUAL_DAMAGE_NIGHTMARE,
RESIDUAL_DAMAGE_LEECH_SEED,
RESIDUAL_DAMAGE_SPIKES,
RESIDUAL_DAMAGE_PERISH_SONG,
RESIDUAL_DAMAGE_DESTINY_BOND,
RESIDUAL_DAMAGE_LIQUID_OOZE,
RESIDUAL_DAMAGE_HUNGER,
RESIDUAL_DAMAGE_CHESTNUT_TRAP,
RESIDUAL_DAMAGE_UNUSED_16,
RESIDUAL_DAMAGE_PITFALL,
RESIDUAL_DAMAGE_BAD_WEATHER,
RESIDUAL_DAMAGE_MOVE_FAIL,
RESIDUAL_DAMAGE_RECOIL,
NUM_RESIDUAL_DAMAGE_TYPES
};
#endif

View File

@ -4,7 +4,7 @@
#include "structs/dungeon_entity.h"
void sub_8083AB0(s16 dungeonExitReason, Entity *target, Entity *entity);
bool8 sub_8083C24(void);
bool8 IsUnsuccessfulDungeonExit(void);
bool8 sub_8083C50(void);
bool8 sub_8083C88(u8 param_1);

View File

@ -245,28 +245,6 @@ extern const struct CastformWeatherData gCastformByWeather[WEATHER_COUNT];
extern const s16 gTypeEffectivenessChart[NUM_TYPES][NUM_TYPES];
extern const s32 gEffectivenessChart[NUM_EFFECTIVENESS][NUM_EFFECTIVENESS];
#define RESIDUAL_DAMAGE_REGULAR 0
#define RESIDUAL_DAMAGE_BURN 1
#define RESIDUAL_DAMAGE_CONSTRICT 2
#define RESIDUAL_DAMAGE_POISON 3
#define RESIDUAL_DAMAGE_UNUSED_4 4
#define RESIDUAL_DAMAGE_WRAP 5
#define RESIDUAL_DAMAGE_COUNTERATTACK 6
#define RESIDUAL_DAMAGE_CURSE 7
#define RESIDUAL_DAMAGE_NIGHTMARE 8
#define RESIDUAL_DAMAGE_LEECH_SEED 9
#define RESIDUAL_DAMAGE_SPIKES 10
#define RESIDUAL_DAMAGE_PERISH_SONG 11
#define RESIDUAL_DAMAGE_DESTINY_BOND 12
#define RESIDUAL_DAMAGE_LIQUID_OOZE 13
#define RESIDUAL_DAMAGE_HUNGER 14
#define RESIDUAL_DAMAGE_CHESTNUT_TRAP 15
#define RESIDUAL_DAMAGE_UNUSED_16 16
#define RESIDUAL_DAMAGE_PITFALL 17
#define RESIDUAL_DAMAGE_BAD_WEATHER 18
#define RESIDUAL_DAMAGE_MOVE_FAIL 19
#define RESIDUAL_DAMAGE_RECOIL 20
#define BELLY_GO_DOWN_VALUES_COUNT 20
extern const s48_16 gBellyGoDownValues[BELLY_GO_DOWN_VALUES_COUNT];
@ -274,6 +252,8 @@ extern const s48_16 gBellyGoDownValues[BELLY_GO_DOWN_VALUES_COUNT];
#define EMPTY_BELLY_ALERT_HURRY_EAT_SOMETHING 2
#define EMPTY_BELLY_ALERT_YOULL_FAINT 3
#define MAX_EMPTY_BELLY_ALERT_STEPS 10
#define WARP_SCARF_ACTIVATION_CHANCES_COUNT 20
extern const s16 gWarpScarfActivationChances[WARP_SCARF_ACTIVATION_CHANCES_COUNT];

View File

@ -22,62 +22,6 @@ struct unkStruct_8069D4C
HiddenPower hiddenPower;
};
#define DUNGEON_EXIT_TRANSFORMED_INTO_FRIEND 0x1f4
#define DUNGEON_EXIT_LEFT_WITHOUT_BEING_BEFRIENDED 0x1f5
#define DUNGEON_EXIT_FAINTED_FROM_DEBUG_ATTACK 0x1f6
#define DUNGEON_EXIT_MISSED_JUMP_KICK 0x1f7
#define DUNGEON_EXIT_MISSED_HI_JUMP_KICK 0x1f8
#define DUNGEON_EXIT_FAINTED_FROM_DESTINY_BOND 0x1f9
#define DUNGEON_EXIT_FAINTED_COVERED_IN_SLUDGE 0x1fa
#define DUNGEON_EXIT_UNUSED_507 0x1fb
#define DUNGEON_EXIT_UNUSED_508 0x1fc
#define DUNGEON_EXIT_FAINTED_FROM_RECOIL 0x1fd
#define DUNGEON_EXIT_FAINTED_FROM_DAMAGE_BOUNCING 0x1fe
#define DUNGEON_EXIT_DEFEATED_PENT_UP_ENERGY 0x1ff
#define DUNGEON_EXIT_UNUSED_512 0x200
#define DUNGEON_EXIT_UNUSED_513 0x201
#define DUNGEON_EXIT_UNUSED_514 0x202
#define DUNGEON_EXIT_UNUSED_515 0x203
#define DUNGEON_EXIT_UNUSED_516 0x204
#define DUNGEON_EXIT_UNUSED_517 0x205
#define DUNGEON_EXIT_FAINTED_FROM_SPIKES 0x206
#define DUNGEON_EXIT_DEBUG_DAMAGE 0x207
#define DUNGEON_EXIT_FAINTED_FROM_BURN 0x208
#define DUNGEON_EXIT_FAINTED_FROM_CONSTRICTION 0x209
#define DUNGEON_EXIT_FAINTED_FROM_POISON 0x20a
#define DUNGEON_EXIT_FAINTED_FROM_WRAP 0x20b
#define DUNGEON_EXIT_FELLED_BY_CURSE 0x20c
#define DUNGEON_EXIT_DRAINED_BY_LEECH_SEED 0x20d
#define DUNGEON_EXIT_FAINTED_FROM_PERISH_SONG 0x20e
#define DUNGEON_EXIT_FAINTED_WHILE_IN_NIGHTMARE 0x20f
#define DUNGEON_EXIT_FELLED_BY_THROWN_ROCK 0x210
#define DUNGEON_EXIT_FAINTED_FROM_HUNGER 0x211
#define DUNGEON_EXIT_DISAPPEARED_IN_EXPLOSION 0x212
#define DUNGEON_EXIT_TRIPPED_CHESTNUT_TRAP 0x213
#define DUNGEON_EXIT_FAINTED_DUE_TO_TRAP 0x214
#define DUNGEON_EXIT_FELL_INTO_PITFALL 0x215
#define DUNGEON_EXIT_DEFEATED_BLAST_SEED 0x216
#define DUNGEON_EXIT_FELLED_BY_THROWN_ITEM 0x217
#define DUNGEON_EXIT_TRANSFORMED_INTO_ITEM 0x218
#define DUNGEON_EXIT_FAINTED_FROM_BEING_KNOCKED 0x219
#define DUNGEON_EXIT_FELLED_BY_POKEMON_FLYING 0x21a
#define DUNGEON_EXIT_GAVE_UP_EXPLORATION 0x21b
#define DUNGEON_EXIT_DELETED_FOR_EVENT 0x21c
#define DUNGEON_EXIT_WENT_AWAY 0x21d
#define DUNGEON_EXIT_BLOWN_OUT_UNSEEN_FORCE 0x21e
#define DUNGEON_EXIT_RETURNED_WITH_FALLEN_PARTNER 0x21f
#define DUNGEON_EXIT_FAINTED_DUE_TO_WEATHER 0x220
#define DUNGEON_EXIT_WAS_POSSESSED 0x221
#define DUNGEON_EXIT_FAILED_TO_PROTECT_CLIENT 0x222
#define DUNGEON_EXIT_FAINTED_FROM_WONDER_ORB 0x223
#define DUNGEON_EXIT_FAINTED_FROM_ITEM 0x224
#define DUNGEON_EXIT_UNK 0x225
#define DUNGEON_EXIT_ESCAPED_MIDDLE_OF_EXPLORATION 0x226
#define DUNGEON_EXIT_CLEARED_DUNGEON 0x227
#define DUNGEON_EXIT_SUCCEEDED_IN_RESCUE_MISSION 0x228
#define DUNGEON_EXIT_IMPRESSIVELY_COMPLETED_MISSION 0x229
#define DUNGEON_EXIT_BEFRIENDED_MEW 0x22a
void OpenDungeonPaletteFile(void);
void CloseDungeonPaletteFile(void);
void LoadDungeonPokemonSprites(void);

View File

@ -3,7 +3,7 @@
#include "structs/str_dungeon.h"
void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, UnkDungeonGlobal_unk1CE98_sub *param_3);
void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, DungeonExitSummary *param_3);
s16 GetDungeonExitReasonFromMoveOrItemID(u16 moveID, u8 id);
#endif

View File

@ -2,6 +2,7 @@
#define GUARD_DUNGEON_STRINGS_H
#include "structs/str_item_text.h"
#include "constants/residual_damage.h"
#include "constants/trap.h"
#include "constants/weather.h"
@ -134,7 +135,7 @@ extern const u8 *const gUnknown_80F970C;
extern const u8 *const gUnknown_80F9728;
extern const u8 *const gUnknown_80F9740;
extern const u8 *const gUnknown_80F9760;
extern const u8 *const gUnknown_80F9764[];
extern const u8 *const gResidualDamageMessages[NUM_RESIDUAL_DAMAGE_TYPES];
extern const u8 *const gWeatherNames[WEATHER_COUNT];
extern const u8 *const gUnknown_80F9ACC;
extern const u8 *const gUnknown_80F9AEC;

View File

@ -6,6 +6,7 @@
#include "constants/type.h"
#include "constants/ability.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
#include "constants/iq_skill.h"
#include "constants/tactic.h"
#include "constants/friend_area.h"
@ -77,7 +78,7 @@ extern const u8 *const gIQSkillNames[NUM_IQ_SKILLS];
extern const u8 *const gIQSkillDescriptions[NUM_IQ_SKILLS];
extern const u8 *const gTacticsNames[NUM_TACTICS];
extern const u8 *const gTacticsDescriptions[NUM_TACTICS + 12];
extern const struct unkStruct_8113080 gSpecialDeathTexts[55];
extern const struct unkStruct_8113080 gDungeonExitReasonTexts[NUM_DUNGEON_EXIT_REASONS];
extern const u8 *const gText_DeathToMove;
extern const u8 *const gText_AlignPlaceX;
extern const u8 *const gText_Pokemon1WasDefeatedBy;

View File

@ -35,11 +35,11 @@ typedef struct Weather // 0xE264
} Weather;
// size: 0x30
typedef struct UnkDungeonGlobal_unk1CE98_sub
typedef struct DungeonExitSummary
{
/* 0x0 */ u8 buffer1[10];
/* 0xA */ u8 buffer2[10];
/* 0x14 */ s16 moveID;
/* 0x14 */ s16 exitReason; // which move knocked out player, or reason to exit dungeon
/* 0x16 */ u8 fill16[0x2];
/* 0x18 */ DungeonLocation dungeonLocation;
/* 0x1C */ Item heldItem;
@ -55,7 +55,7 @@ typedef struct UnkDungeonGlobal_unk1CE98_sub
/* 0x2D */ u8 defBoost;
/* 0x2E */ u8 spDefBoost;
u8 unk2F; // speedBoost?
} UnkDungeonGlobal_unk1CE98_sub;
} DungeonExitSummary;
// size: 0x10
typedef struct DungeonMusicPlayer
@ -482,7 +482,7 @@ typedef struct Dungeon
/* 0x1C590 */ ItemSpawns itemSpawns[ITEM_SPAWN_TYPES_COUNT];
/* 0x1CD70 */ u16 trapSpawnChances[NUM_TRAPS];
SpawnPokemonData fileMonsterSpawns[MONSTER_SPAWNS_ARR_COUNT]; // Taken directly from "mapparam" which corresponds to available monsters on given dungeon's floor.
UnkDungeonGlobal_unk1CE98_sub unk1CE98; // TODO: not sure how large this is
DungeonExitSummary exitSummary; // TODO: not sure how large this is
u8 unk1CEC8;
/* 0x1CECC */ DungeonMusicPlayer musPlayer;
} Dungeon;

View File

@ -2,6 +2,8 @@
#include "globaldata.h"
#include "blow_away.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/residual_damage.h"
#include "constants/weather.h"
#include "dungeon_vram.h"
#include "dungeon_message.h"

View File

@ -1,6 +1,7 @@
#include "global.h"
#include "globaldata.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
#include "constants/item.h"
#include "constants/move_id.h"
#include "dungeon_vram.h"

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "constants/dungeon_exit.h"
#include "constants/type.h"
#include "structs/str_pokemon.h"
#include "dungeon_main.h"

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "constants/dungeon_exit.h"
#include "dungeon_8083AB0.h"
#include "dungeon_info.h"
#include "dungeon_util.h"
@ -18,11 +19,11 @@ void sub_8083AB0(s16 dungeonExitReason_, Entity *target, Entity *entity)
EntityInfo * targetEntityInfo;
u8 *spAttPtr;
u8 buffer [0x14];
UnkDungeonGlobal_unk1CE98_sub *temp;
DungeonExitSummary *exitSummary;
u8 *id;
s32 dungeonExitReason = dungeonExitReason_;
temp = &gDungeon->unk1CE98;
exitSummary = &gDungeon->exitSummary;
targetEntityInfo = NULL;
if ((EntityIsValid(target)) && (GetEntityType(target) == ENTITY_MONSTER)) {
targetEntityInfo = GetEntInfo(target);
@ -30,30 +31,30 @@ void sub_8083AB0(s16 dungeonExitReason_, Entity *target, Entity *entity)
entityInfo = GetEntInfo(entity);
if (targetEntityInfo != NULL) {
sub_80709C8(buffer, targetEntityInfo);
CopyStringtoBuffer(temp->buffer1, buffer);
CopyStringtoBuffer(exitSummary->buffer1, buffer);
}
else {
CopyStringtoBuffer(temp->buffer1, gUnknown_80FE6F4); // Someone
CopyStringtoBuffer(exitSummary->buffer1, gUnknown_80FE6F4); // Someone
}
sub_80709C8(buffer,entityInfo);
CopyStringtoBuffer(temp->buffer2, buffer);
temp->moveID = dungeonExitReason;
temp->heldItem = entityInfo->heldItem;
temp->exp = entityInfo->exp;
temp->level = entityInfo->level;
temp->maxHPStat = entityInfo->maxHPStat;
temp->atk = entityInfo->atk[0];
temp->spAtk = entityInfo->atk[1];
temp->def = entityInfo->def[0];
temp->spDef = entityInfo->def[1];
temp->dungeonLocation = gDungeon->unk644.dungeonLocation;
attackPtr = &temp->attBoost;
CopyStringtoBuffer(exitSummary->buffer2, buffer);
exitSummary->exitReason = dungeonExitReason;
exitSummary->heldItem = entityInfo->heldItem;
exitSummary->exp = entityInfo->exp;
exitSummary->level = entityInfo->level;
exitSummary->maxHPStat = entityInfo->maxHPStat;
exitSummary->atk = entityInfo->atk[0];
exitSummary->spAtk = entityInfo->atk[1];
exitSummary->def = entityInfo->def[0];
exitSummary->spDef = entityInfo->def[1];
exitSummary->dungeonLocation = gDungeon->unk644.dungeonLocation;
attackPtr = &exitSummary->attBoost;
*attackPtr = 0;
spAttPtr = &temp->spAttBoost;
spAttPtr = &exitSummary->spAttBoost;
*spAttPtr = 0;
defPtr = &temp->defBoost;
defPtr = &exitSummary->defBoost;
*defPtr = 0;
spDefPtr = &temp->spDefBoost;
spDefPtr = &exitSummary->spDefBoost;
*spDefPtr = 0;
if ((entityInfo->heldItem.flags & ITEM_FLAG_EXISTS) && !(entityInfo->heldItem.flags & ITEM_FLAG_STICKY)) {
id = &entityInfo->heldItem.id;
@ -78,11 +79,11 @@ void sub_8083AB0(s16 dungeonExitReason_, Entity *target, Entity *entity)
}
}
bool8 sub_8083C24(void)
bool8 IsUnsuccessfulDungeonExit(void)
{
UnkDungeonGlobal_unk1CE98_sub *temp = &gDungeon->unk1CE98;
DungeonExitSummary *exitSummary = &gDungeon->exitSummary;
if (temp->moveID < 0x226)
if (exitSummary->exitReason < DUNGEON_EXIT_REASON_SUCCESS)
return TRUE;
return FALSE;
@ -90,9 +91,11 @@ bool8 sub_8083C24(void)
bool8 sub_8083C50(void)
{
UnkDungeonGlobal_unk1CE98_sub *temp = &gDungeon->unk1CE98;
DungeonExitSummary *exitSummary = &gDungeon->exitSummary;
if (temp->moveID == 0x227 || temp->moveID == 0x22A || temp->moveID == 0x228)
if (exitSummary->exitReason == DUNGEON_EXIT_CLEARED_DUNGEON
|| exitSummary->exitReason == DUNGEON_EXIT_BEFRIENDED_MEW
|| exitSummary->exitReason == DUNGEON_EXIT_SUCCEEDED_IN_RESCUE_MISSION)
return TRUE;
return FALSE;
@ -100,10 +103,10 @@ bool8 sub_8083C50(void)
bool8 sub_8083C88(u8 param_1)
{
UnkDungeonGlobal_unk1CE98_sub *temp = &gDungeon->unk1CE98;
DungeonExitSummary *exitSummary = &gDungeon->exitSummary;
if ((!HasCheckpoint(gDungeon->unk644.dungeonLocation.id) && (gDungeon->unk644.unk18 != 0 || param_1 != 0))
|| temp->moveID != 0x227) {
|| exitSummary->exitReason != DUNGEON_EXIT_CLEARED_DUNGEON) {
return TRUE;
}

View File

@ -37,13 +37,13 @@ void ShowDungeonClearedWindow(void)
header.f3 = 0;
windows.id[0].pos.y = 20;
DungeonShowWindows(&windows, TRUE);
if (gDungeon->unk1CE98.moveID > 549) {
if (gDungeon->exitSummary.exitReason > 549) {
PlayDungeonCompleteBGM();
}
else {
PlayDungeonFailBGM();
}
PrintOnDungeonFinishedWindow(0, gText_TheLastOuting,&gDungeon->unk1CE98);
PrintOnDungeonFinishedWindow(0, gText_TheLastOuting,&gDungeon->exitSummary);
while(1) {
sub_803E668(0x36);
UpdateDungeonMusic();

View File

@ -5,6 +5,7 @@
#include "constants/dungeon.h"
#include "constants/direction.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
#include "structs/str_dungeon.h"
#include "structs/sprite_oam.h"
#include "dungeon_cutscenes.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "constants/dungeon_exit.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"

View File

@ -8,8 +8,10 @@
#include "pokemon_types.h"
#include "dungeon_message.h"
#include "string_format.h"
#include "constants/dungeon_exit.h"
#include "constants/move_id.h"
#include "constants/monster.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/type.h"
#include "constants/iq_skill.h"
@ -366,7 +368,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
const u8 *str;
gFormatArgs[0] = dmgStruct->dmg;
str = gUnknown_80F9764[dmgStruct->residualDmgType];
str = gResidualDamageMessages[dmgStruct->residualDmgType];
ASM_MATCH_TRICK(dmgStruct);

View File

@ -7,6 +7,8 @@
#include "dungeon_random.h"
#include "constants/dungeon_action.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
#include "constants/residual_damage.h"
#include "constants/iq_skill.h"
#include "constants/status.h"
#include "constants/type.h"

View File

@ -14,6 +14,7 @@
#include "pokemon.h"
#include "structs/str_dungeon.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
extern void sub_8042A34(DungeonPos *r0);
extern void sub_804178C(u32);

View File

@ -1,6 +1,7 @@
#include "global.h"
#include "globaldata.h"
#include "code_803D110.h"
#include "constants/dungeon_exit.h"
#include "dungeon_vram.h"
#include "dungeon_tilemap.h"
#include "dungeon_action.h"

View File

@ -23,6 +23,7 @@
#include "constants/friend_area.h"
#include "constants/status.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/iq_skill.h"
#include "constants/type.h"
#include "constants/weather.h"

View File

@ -394,7 +394,7 @@ bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30,
gUnknown_202F21A = 0;
gUnknown_202F21C = 0;
gUnknown_202F220 = 0;
if (isLinkedMove && GetEntInfo(attacker)->usedLinkedMovesCounter <= 3) {
if (isLinkedMove && GetEntInfo(attacker)->usedLinkedMovesCounter < MAX_MON_MOVES) {
GetEntInfo(attacker)->usedLinkedMovesCounter++;
}

View File

@ -2,6 +2,7 @@
#include "globaldata.h"
#include "dungeon_misc.h"
#include "dungeon_run_end.h"
#include "constants/dungeon_exit.h"
#include "structs/str_dungeon.h"
#include "data_serializer.h"
#include "dungeon_info.h"
@ -21,30 +22,30 @@ static void WriteDeathText(s16 moveID, u8 *buffer)
s32 moveID_s32 = moveID;
Move move;
if (moveID_s32 < 0x1F4) {
if (moveID_s32 < DUNGEON_EXIT_REASON_START) {
// Needed this cast/variable to match
moveID_u16 = moveID_s32;
InitPokemonMoveOrNullObject(&move, moveID_u16);
BufferMoveName(gFormatBuffer_Items[0], &move, NULL);
FormatString(gText_DeathToMove, buffer, buffer + TEXT_BUFFER_LEN, 0); // $m0's $i0
} else {
strncpy(buffer, gSpecialDeathTexts[moveID - 0x1F4].text, TEXT_BUFFER_LEN);
strncpy(buffer, gDungeonExitReasonTexts[moveID - DUNGEON_EXIT_REASON_START].text, TEXT_BUFFER_LEN);
}
}
static bool8 WasDefeatedByMove(s16 moveID)
{
if(moveID < 0x1F4)
if (moveID < DUNGEON_EXIT_REASON_START)
{
return TRUE;
}
else
{
return gSpecialDeathTexts[moveID - 0x1F4].unk0;
return gDungeonExitReasonTexts[moveID - DUNGEON_EXIT_REASON_START].unk0;
}
}
void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, UnkDungeonGlobal_unk1CE98_sub *param_3)
void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, DungeonExitSummary *exitSummary)
{
u8 buffer[TEXT_BUFFER_LEN];
s32 x, y;
@ -52,12 +53,12 @@ void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, UnkDungeon
sub_80073B8(windowId);
PrintFormattedStringOnWindow(16,0,headerText,windowId,0);
PrintYellowDungeonNametoBuffer(gFormatBuffer_Monsters[0], &param_3->dungeonLocation);
PrintYellowDungeonNametoBuffer(gFormatBuffer_Monsters[0], &exitSummary->dungeonLocation);
PrintFormattedStringOnWindow(4,16,gText_AlignPlaceX,windowId,0); // #+Place: $m0
y = 26;
StrncpyCustom(gFormatBuffer_Monsters[0], param_3->buffer1, POKEMON_NAME_LENGTH);
StrncpyCustom(gFormatBuffer_Monsters[1], param_3->buffer2, POKEMON_NAME_LENGTH);
if (WasDefeatedByMove(param_3->moveID) != 0) {
StrncpyCustom(gFormatBuffer_Monsters[0], exitSummary->buffer1, POKEMON_NAME_LENGTH);
StrncpyCustom(gFormatBuffer_Monsters[1], exitSummary->buffer2, POKEMON_NAME_LENGTH);
if (WasDefeatedByMove(exitSummary->exitReason) != 0) {
// $m1 was defeated by
FormatString(gText_Pokemon1WasDefeatedBy,buffer, buffer + sizeof(buffer),0);
}
@ -70,14 +71,14 @@ void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, UnkDungeon
PrintFormattedStringOnWindow(x,y,buffer,windowId,0);
y += 10;
WriteDeathText(param_3->moveID, buffer);
WriteDeathText(exitSummary->exitReason, buffer);
x = (176 - GetStringLineWidth(buffer)) / 2;
PrintFormattedStringOnWindow(x,y,buffer,windowId,0);
y += 16;
gFormatArgs[0] = param_3->exp;
gFormatArgs[1] = param_3->level;
gFormatArgs[0] = exitSummary->exp;
gFormatArgs[1] = exitSummary->level;
if (gFormatArgs[1] >= 100) {
PrintFormattedStringOnWindow(4,y,gUnknown_81138C0,windowId,0);
}
@ -85,45 +86,45 @@ void PrintOnDungeonFinishedWindow(u32 windowId, const u8 *headerText, UnkDungeon
PrintFormattedStringOnWindow(4,y,gUnknown_8113898,windowId,0);
}
y += 10;
gFormatArgs[0] = param_3->maxHPStat;
gFormatArgs[0] = exitSummary->maxHPStat;
PrintFormattedStringOnWindow(4,y,gUnknown_81138D0,windowId,0);
y += 10;
gFormatArgs[0] = param_3->atk;
gFormatArgs[1] = param_3->def;
if (param_3->attBoost) {
gFormatArgs[0] = gFormatArgs[0] + param_3->attBoost;
gFormatArgs[0] = exitSummary->atk;
gFormatArgs[1] = exitSummary->def;
if (exitSummary->attBoost) {
gFormatArgs[0] = gFormatArgs[0] + exitSummary->attBoost;
PrintFormattedStringOnWindow(4,y,gUnknown_8113950,windowId,0);
}
else {
PrintFormattedStringOnWindow(4,y,gUnknown_81138E4,windowId,0);
}
if (param_3->defBoost) {
gFormatArgs[1] = gFormatArgs[1] + param_3->defBoost;
if (exitSummary->defBoost) {
gFormatArgs[1] = gFormatArgs[1] + exitSummary->defBoost;
PrintFormattedStringOnWindow(4,y,gUnknown_8113974,windowId,0);
}
else {
PrintFormattedStringOnWindow(4,y,gUnknown_8113900,windowId,0);
}
y += 10;
gFormatArgs[0] = param_3->spAtk;
gFormatArgs[1] = param_3->spDef;
if (param_3->spAttBoost) {
gFormatArgs[0] = gFormatArgs[0] + param_3->spAttBoost;
gFormatArgs[0] = exitSummary->spAtk;
gFormatArgs[1] = exitSummary->spDef;
if (exitSummary->spAttBoost) {
gFormatArgs[0] = gFormatArgs[0] + exitSummary->spAttBoost;
PrintFormattedStringOnWindow(4,y,gUnknown_8113990,windowId,0);
}
else {
PrintFormattedStringOnWindow(4,y,gUnknown_8113918,windowId,0);
}
if (param_3->spDefBoost) {
gFormatArgs[1] = gFormatArgs[1] + param_3->spDefBoost;
if (exitSummary->spDefBoost) {
gFormatArgs[1] = gFormatArgs[1] + exitSummary->spDefBoost;
PrintFormattedStringOnWindow(4,y,gUnknown_81139B4,windowId,0);
}
else {
PrintFormattedStringOnWindow(4,y,gUnknown_8113934,windowId,0);
}
y += 16;
item = &(param_3->heldItem);
if ((param_3->heldItem.flags & ITEM_FLAG_EXISTS)) {
item = &(exitSummary->heldItem);
if ((exitSummary->heldItem.flags & ITEM_FLAG_EXISTS)) {
sub_8090E14(gFormatBuffer_Items[0],item,0);
}
else {

View File

@ -260,28 +260,29 @@ const u8 *const gUnknown_80F970C = _("{POKEMON_0} fell into the pitfall!");
const u8 *const gUnknown_80F9728 = _("Avoided the pitfall!");
const u8 *const gUnknown_80F9740 = _("{POKEMON_0} is famished.");
const u8 *const gUnknown_80F9760 = _("{POKEMON_0} is already famished.");
const u8 *const gUnknown_80F9764[] = {
[0] = _("{POKEMON_1} took {VALUE_0} damage!"),
[1] = _("{POKEMON_1}'s burn inflicted\n{VALUE_0} damage!"),
[2] = _("{POKEMON_1} was squeezed for\n{VALUE_0} damage!"),
[3] = _("{POKEMON_1} took {VALUE_0} damage\nfrom poison!"),
[4] = _("{POKEMON_1} took {VALUE_0} damage!"),
[5] = _("{POKEMON_1} was wrapped for\n{VALUE_0} damage!"),
[6] = _("{POKEMON_1} took {VALUE_0} damage\nfrom the counterattack!"),
[7] = _("{POKEMON_1} was cursed for\n{VALUE_0} damage!"),
[8] = _("{POKEMON_1} awoke from its nightmare\nand took {VALUE_0} damage!"),
[9] = _("{POKEMON_1} took {VALUE_0} damage\nfrom Leech Seed!"),
[10] = _("{POKEMON_1} stepped on spikes for\n{VALUE_0} damage!"),
[11] = _("{POKEMON_1} took {VALUE_0} damage\nfrom Perish Song!"),
[12] = _("{POKEMON_1} took {VALUE_0} damage\nfrom Destiny Bond!"),
[13] = _("{POKEMON_1} was showered with sludge\nfor {VALUE_0} damage!"),
[14] = NULL,
[15] = _("The Chestnut Trap hit {POKEMON_1}\nfor {VALUE_0} damage!"),
[16] = _("The Chestnut Trap hit {POKEMON_1}\nfor {VALUE_0} damage!"),
[17] = _("{POKEMON_1} took {VALUE_0} damage!"),
[18] = _("The bad weather inflicted {VALUE_0} damage\non {POKEMON_1}!"),
[19] = _("The move failed!\n{POKEMON_1} took {VALUE_0} damage!"),
[20] = _("The recoil hit {POKEMON_1} for\n{VALUE_0} damage!"),
const u8 *const gResidualDamageMessages[NUM_RESIDUAL_DAMAGE_TYPES] = {
[RESIDUAL_DAMAGE_REGULAR] = _("{POKEMON_1} took {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_BURN] = _("{POKEMON_1}'s burn inflicted\n{VALUE_0} damage!"),
[RESIDUAL_DAMAGE_CONSTRICT] = _("{POKEMON_1} was squeezed for\n{VALUE_0} damage!"),
[RESIDUAL_DAMAGE_POISON] = _("{POKEMON_1} took {VALUE_0} damage\nfrom poison!"),
[RESIDUAL_DAMAGE_UNUSED_4] = _("{POKEMON_1} took {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_WRAP] = _("{POKEMON_1} was wrapped for\n{VALUE_0} damage!"),
[RESIDUAL_DAMAGE_COUNTERATTACK] = _("{POKEMON_1} took {VALUE_0} damage\nfrom the counterattack!"),
[RESIDUAL_DAMAGE_CURSE] = _("{POKEMON_1} was cursed for\n{VALUE_0} damage!"),
[RESIDUAL_DAMAGE_NIGHTMARE] = _("{POKEMON_1} awoke from its nightmare\nand took {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_LEECH_SEED] = _("{POKEMON_1} took {VALUE_0} damage\nfrom Leech Seed!"),
[RESIDUAL_DAMAGE_SPIKES] = _("{POKEMON_1} stepped on spikes for\n{VALUE_0} damage!"),
[RESIDUAL_DAMAGE_PERISH_SONG] = _("{POKEMON_1} took {VALUE_0} damage\nfrom Perish Song!"),
[RESIDUAL_DAMAGE_DESTINY_BOND] = _("{POKEMON_1} took {VALUE_0} damage\nfrom Destiny Bond!"),
[RESIDUAL_DAMAGE_LIQUID_OOZE] = _("{POKEMON_1} was showered with sludge\nfor {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_HUNGER] = NULL,
[RESIDUAL_DAMAGE_CHESTNUT_TRAP] = _("The Chestnut Trap hit {POKEMON_1}\nfor {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_UNUSED_16] = _("The Chestnut Trap hit {POKEMON_1}\nfor {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_PITFALL] = _("{POKEMON_1} took {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_BAD_WEATHER] = _("The bad weather inflicted {VALUE_0} damage\non {POKEMON_1}!"),
[RESIDUAL_DAMAGE_MOVE_FAIL] = _("The move failed!\n{POKEMON_1} took {VALUE_0} damage!"),
[RESIDUAL_DAMAGE_RECOIL] = _("The recoil hit {POKEMON_1} for\n{VALUE_0} damage!"),
};
const u8 *const gWeatherNames[WEATHER_COUNT] = {

View File

@ -18,7 +18,9 @@
#include "moves.h"
#include "dungeon_random.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
#include "constants/iq_skill.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/ability.h"
#include "constants/type.h"
@ -103,7 +105,7 @@ void ApplyEndOfTurnEffects(Entity *entity)
baseBellyDecrementValue.hi = 0;
baseBellyDecrementValue.lo = 6554;
// baseBellyDecrementValue = 0.1;
// here baseBellyDecrementValue is 0.1
F48_16_SMul(&modifiedBellyDecrementValue, &baseBellyDecrementValue, &gBellyGoDownValues[arrIndex]);
if (entityInfo->usedLinkedMovesCounter > 1)
modifiedBellyDecrementValue.lo += (gLinkedMovesBellyGoDownValues[entityInfo->usedLinkedMovesCounter] << 0x10);
@ -128,7 +130,7 @@ void ApplyEndOfTurnEffects(Entity *entity)
DisplayActions(NULL);
if (!EntityIsValid(entity) || IsFloorOver())
return;
if (gDungeon->unk644.emptyBellyAlert < 10)
if (gDungeon->unk644.emptyBellyAlert < MAX_EMPTY_BELLY_ALERT_STEPS)
gDungeon->unk644.emptyBellyAlert++;
if (gDungeon->unk644.emptyBellyAlert == EMPTY_BELLY_ALERT_YOUR_BELLYS_EMPTY)
str = gUnknown_80FD5DC; // "Oh, no! Your Belly's empty!"

View File

@ -4,6 +4,7 @@
#include "code_804267C.h"
#include "dungeon_message.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/type.h"
#include "dungeon_ai.h"
#include "dungeon_range.h"

View File

@ -2,6 +2,7 @@
#include "globaldata.h"
#include "explosion.h"
#include "constants/ability.h"
#include "constants/residual_damage.h"
#include "constants/weather.h"
#include "dungeon_vram.h"
#include "dungeon_message.h"

View File

@ -8,7 +8,9 @@
#include "code_806CD90.h"
#include "code_8077274_1.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/monster.h"
#include "constants/residual_damage.h"
#include "constants/type.h"
#include "constants/weather.h"
#include "dungeon_info.h"

View File

@ -8,6 +8,8 @@
#include "code_8077274_1.h"
#include "dungeon_random.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/targeting.h"
#include "constants/type.h"

View File

@ -8,6 +8,8 @@
#include "code_8077274_1.h"
#include "dungeon_random.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/targeting.h"
#include "constants/type.h"

View File

@ -7,7 +7,9 @@
#include "code_8077274_1.h"
#include "dungeon_random.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/move_id.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/targeting.h"
#include "constants/type.h"

View File

@ -11,7 +11,9 @@
#include "code_8077274_1.h"
#include "dungeon_random.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/move_id.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/targeting.h"
#include "constants/type.h"

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "constants/dungeon_exit.h"
#include "dungeon_info.h"
#include "dungeon_move_util.h"
#include "run_dungeon.h"

View File

@ -8,7 +8,9 @@
#include "code_8077274_1.h"
#include "dungeon_random.h"
#include "constants/ability.h"
#include "constants/dungeon_exit.h"
#include "constants/item.h"
#include "constants/residual_damage.h"
#include "constants/status.h"
#include "constants/type.h"
#include "dungeon_items.h"

View File

@ -2,6 +2,7 @@
#include "globaldata.h"
#include "run_dungeon.h"
#include "constants/dungeon.h"
#include "constants/dungeon_exit.h"
#include "constants/monster.h"
#include "constants/trap.h"
#include "structs/rgb.h"
@ -623,7 +624,7 @@ void RunDungeon_Async(DungeonSetupStruct *setupPtr)
ShowDungeonClearedWindow();
}
if (sub_8083C24()) {
if (IsUnsuccessfulDungeonExit()) {
if (gDungeon->unk6 != 0) {
setupPtr->info.unk7C = -2;
memset(&setupPtr->info.unk84, 0, sizeof(setupPtr->info.unk84));

View File

@ -859,62 +859,62 @@ const u8 *const gTacticsDescriptions[NUM_TACTICS + 12] = {
[NUM_TACTICS ... NUM_TACTICS + 11] = NULL // Used for testing?
};
const struct unkStruct_8113080 gSpecialDeathTexts[55] = {
[0] = { 0, _("was transformed into a friend.")},
[1] = { 0, _("left without being befriended.")},
[2] = { 0, _("fainted from a debug attack.")},
[3] = { 0, _("missed a Jump Kick and wiped out.")},
[4] = { 0, _("missed a Hi Jump Kick and wiped out.")},
[5] = { 0, _("fainted from the foe's Destiny Bond.")},
[6] = { 0, _("fainted, covered in sludge.")},
[7] = { 1, _("was defeated by a powerful move.")},
[8] = { 1, _("was defeated by a powerful move.")},
[9] = { 0, _("fainted from a move's recoil damage.")},
[10] = { 0, _("fainted from damage it took bouncing.")},
[11] = { 1, _("a foe's pent-up energy.")},
[12] = { 1, _("was defeated by a powerful move.")},
[13] = { 1, _("was defeated by a powerful move.")},
[14] = { 1, _("was defeated by a powerful move.")},
[15] = { 1, _("was defeated by a powerful move.")},
[16] = { 1, _("was defeated by a powerful move.")},
[17] = { 1, _("was defeated by a powerful move.")},
[18] = { 0, _("fainted from stepping on spikes.")},
[19] = { 0, _("debug damage.")},
[20] = { 0, _("fainted from a bad burn.")},
[21] = { 0, _("fainted, unable to bear constriction.")},
[22] = { 0, _("fainted after the poison spread.")},
[23] = { 0, _("fainted while still being wrapped.")},
[24] = { 0, _("was felled by a curse.")},
[25] = { 0, _("was drained to nothing by Leech Seed.")},
[26] = { 0, _("fainted from hearing Perish Song.")},
[27] = { 0, _("fainted while in a nightmare.")},
[28] = { 0, _("was felled by a thrown rock.")},
[29] = { 0, _("fainted from hunger.")},
[30] = { 0, _("disappeared in an explosion.")},
[31] = { 0, _("tripped a Chestnut Trap and fainted.")},
[32] = { 0, _("fainted due to a trap's damage.")},
[33] = { 0, _("fell into a Pitfall Trap and fainted.")},
[34] = { 1, _("a Blast Seed's damage.")},
[35] = { 0, _("was felled by a thrown item.")},
[36] = { 0, _("was transformed into an item.")},
[37] = { 0, _("fainted from being knocked flying.")},
[38] = { 0, _("was felled by a Pokémon sent flying.")},
[39] = { 0, _("gave up the exploration.")},
[40] = { 0, _("was deleted for the sake of an event.")},
[41] = { 0, _("went away.")},
[42] = { 0, _("was blown out by an unseen force.")},
[43] = { 0, _("returned with the fallen partner.")},
[44] = { 0, _("fainted due to the weather.")},
[45] = { 0, _("was possessed.")},
[46] = { 0, _("failed to protect the client Pokémon.")},
[47] = { 0, _("fainted from a Wonder Orb.")},
[48] = { 0, _("fainted from an item.")},
[49] = { 0, _("- ")},
[50] = { 0, _("escaped in the middle of exploration.")},
[51] = { 0, _("cleared the dungeon.")},
[52] = { 0, _("succeeded in the rescue mission.")},
[53] = { 0, _("impressively completed a mission.")},
[54] = { 0, _("befriended Mew!")},
const struct unkStruct_8113080 gDungeonExitReasonTexts[NUM_DUNGEON_EXIT_REASONS] = {
[DUNGEON_EXIT_TRANSFORMED_INTO_FRIEND - DUNGEON_EXIT_REASON_START] = { FALSE, _("was transformed into a friend.")},
[DUNGEON_EXIT_LEFT_WITHOUT_BEING_BEFRIENDED - DUNGEON_EXIT_REASON_START] = { FALSE, _("left without being befriended.")},
[DUNGEON_EXIT_FAINTED_FROM_DEBUG_ATTACK - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from a debug attack.")},
[DUNGEON_EXIT_MISSED_JUMP_KICK - DUNGEON_EXIT_REASON_START] = { FALSE, _("missed a Jump Kick and wiped out.")},
[DUNGEON_EXIT_MISSED_HI_JUMP_KICK - DUNGEON_EXIT_REASON_START] = { FALSE, _("missed a Hi Jump Kick and wiped out.")},
[DUNGEON_EXIT_FAINTED_FROM_DESTINY_BOND - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from the foe's Destiny Bond.")},
[DUNGEON_EXIT_FAINTED_COVERED_IN_SLUDGE - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted, covered in sludge.")},
[DUNGEON_EXIT_UNUSED_507 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_UNUSED_508 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_FAINTED_FROM_RECOIL - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from a move's recoil damage.")},
[DUNGEON_EXIT_FAINTED_FROM_DAMAGE_BOUNCING - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from damage it took bouncing.")},
[DUNGEON_EXIT_DEFEATED_PENT_UP_ENERGY - DUNGEON_EXIT_REASON_START] = { TRUE, _("a foe's pent-up energy.")},
[DUNGEON_EXIT_UNUSED_512 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_UNUSED_513 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_UNUSED_514 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_UNUSED_515 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_UNUSED_516 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_UNUSED_517 - DUNGEON_EXIT_REASON_START] = { TRUE, _("was defeated by a powerful move.")},
[DUNGEON_EXIT_FAINTED_FROM_SPIKES - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from stepping on spikes.")},
[DUNGEON_EXIT_DEBUG_DAMAGE - DUNGEON_EXIT_REASON_START] = { FALSE, _("debug damage.")},
[DUNGEON_EXIT_FAINTED_FROM_BURN - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from a bad burn.")},
[DUNGEON_EXIT_FAINTED_FROM_CONSTRICTION - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted, unable to bear constriction.")},
[DUNGEON_EXIT_FAINTED_FROM_POISON - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted after the poison spread.")},
[DUNGEON_EXIT_FAINTED_FROM_WRAP - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted while still being wrapped.")},
[DUNGEON_EXIT_FELLED_BY_CURSE - DUNGEON_EXIT_REASON_START] = { FALSE, _("was felled by a curse.")},
[DUNGEON_EXIT_DRAINED_BY_LEECH_SEED - DUNGEON_EXIT_REASON_START] = { FALSE, _("was drained to nothing by Leech Seed.")},
[DUNGEON_EXIT_FAINTED_FROM_PERISH_SONG - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from hearing Perish Song.")},
[DUNGEON_EXIT_FAINTED_WHILE_IN_NIGHTMARE - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted while in a nightmare.")},
[DUNGEON_EXIT_FELLED_BY_THROWN_ROCK - DUNGEON_EXIT_REASON_START] = { FALSE, _("was felled by a thrown rock.")},
[DUNGEON_EXIT_FAINTED_FROM_HUNGER - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from hunger.")},
[DUNGEON_EXIT_DISAPPEARED_IN_EXPLOSION - DUNGEON_EXIT_REASON_START] = { FALSE, _("disappeared in an explosion.")},
[DUNGEON_EXIT_TRIPPED_CHESTNUT_TRAP - DUNGEON_EXIT_REASON_START] = { FALSE, _("tripped a Chestnut Trap and fainted.")},
[DUNGEON_EXIT_FAINTED_DUE_TO_TRAP - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted due to a trap's damage.")},
[DUNGEON_EXIT_FELL_INTO_PITFALL - DUNGEON_EXIT_REASON_START] = { FALSE, _("fell into a Pitfall Trap and fainted.")},
[DUNGEON_EXIT_DEFEATED_BLAST_SEED - DUNGEON_EXIT_REASON_START] = { TRUE, _("a Blast Seed's damage.")},
[DUNGEON_EXIT_FELLED_BY_THROWN_ITEM - DUNGEON_EXIT_REASON_START] = { FALSE, _("was felled by a thrown item.")},
[DUNGEON_EXIT_TRANSFORMED_INTO_ITEM - DUNGEON_EXIT_REASON_START] = { FALSE, _("was transformed into an item.")},
[DUNGEON_EXIT_FAINTED_FROM_BEING_KNOCKED - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from being knocked flying.")},
[DUNGEON_EXIT_FELLED_BY_POKEMON_FLYING - DUNGEON_EXIT_REASON_START] = { FALSE, _("was felled by a Pokémon sent flying.")},
[DUNGEON_EXIT_GAVE_UP_EXPLORATION - DUNGEON_EXIT_REASON_START] = { FALSE, _("gave up the exploration.")},
[DUNGEON_EXIT_DELETED_FOR_EVENT - DUNGEON_EXIT_REASON_START] = { FALSE, _("was deleted for the sake of an event.")},
[DUNGEON_EXIT_WENT_AWAY - DUNGEON_EXIT_REASON_START] = { FALSE, _("went away.")},
[DUNGEON_EXIT_BLOWN_OUT_UNSEEN_FORCE - DUNGEON_EXIT_REASON_START] = { FALSE, _("was blown out by an unseen force.")},
[DUNGEON_EXIT_RETURNED_WITH_FALLEN_PARTNER - DUNGEON_EXIT_REASON_START] = { FALSE, _("returned with the fallen partner.")},
[DUNGEON_EXIT_FAINTED_DUE_TO_WEATHER - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted due to the weather.")},
[DUNGEON_EXIT_WAS_POSSESSED - DUNGEON_EXIT_REASON_START] = { FALSE, _("was possessed.")},
[DUNGEON_EXIT_FAILED_TO_PROTECT_CLIENT - DUNGEON_EXIT_REASON_START] = { FALSE, _("failed to protect the client Pokémon.")},
[DUNGEON_EXIT_FAINTED_FROM_WONDER_ORB - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from a Wonder Orb.")},
[DUNGEON_EXIT_FAINTED_FROM_ITEM - DUNGEON_EXIT_REASON_START] = { FALSE, _("fainted from an item.")},
[DUNGEON_EXIT_UNUSED_549 - DUNGEON_EXIT_REASON_START] = { FALSE, _("- ")},
[DUNGEON_EXIT_ESCAPED_MIDDLE_OF_EXPLORATION - DUNGEON_EXIT_REASON_START] = { FALSE, _("escaped in the middle of exploration.")},
[DUNGEON_EXIT_CLEARED_DUNGEON - DUNGEON_EXIT_REASON_START] = { FALSE, _("cleared the dungeon.")},
[DUNGEON_EXIT_SUCCEEDED_IN_RESCUE_MISSION - DUNGEON_EXIT_REASON_START] = { FALSE, _("succeeded in the rescue mission.")},
[DUNGEON_EXIT_IMPRESSIVELY_COMPLETED_MISSION - DUNGEON_EXIT_REASON_START] = { FALSE, _("impressively completed a mission.")},
[DUNGEON_EXIT_BEFRIENDED_MEW - DUNGEON_EXIT_REASON_START] = { FALSE, _("befriended Mew!")},
};
const u8 *const gText_DeathToMove = _("{POKEMON_0}'s {MOVE_ITEM_0}.");

View File

@ -7,6 +7,8 @@
#include "code_8077274_1.h"
#include "dungeon_random.h"
#include "code_806CD90.h"
#include "constants/dungeon_exit.h"
#include "constants/residual_damage.h"
#include "constants/trap.h"
#include "constants/type.h"
#include "run_dungeon.h"