dungeon leveling / dungeon turn effects

This commit is contained in:
DizzyEggg 2025-08-28 19:21:56 +02:00
parent 9d6ad7e4da
commit 87bd005c29
42 changed files with 122 additions and 144 deletions

View File

@ -0,0 +1,13 @@
#ifndef GUARD_DUNGEON_LEVELING_H
#define GUARD_DUNGEON_LEVELING_H
#include "structs/dungeon_entity.h"
void AddExpPoints(Entity *pokemon, Entity *target, s32 exp);
void EnemyEvolution(Entity *entity);
void LevelUpTarget(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 param_5);
void LevelDownTarget(Entity *pokemon, Entity *target, u32 level);
bool8 sub_8072938(Entity *target, u16 moveId);
void sub_8072AC8(s16 *param_1, s32 species, s32 param_3);
#endif

View File

@ -0,0 +1,9 @@
#ifndef GUARD_DUNGEON_TURN_EFFECTS_H
#define GUARD_DUNGEON_TURN_EFFECTS_H
#include "structs/dungeon_entity.h"
void ApplyEndOfTurnEffects(Entity *entity);
void TickStatusAndHealthRegen(Entity *entity);
#endif

View File

@ -8,6 +8,7 @@ bool8 HasRecruitedMon(s32 species_);
s16 GetBaseSpecies(s16 index);
s16 GetBaseSpeciesNoUnown(s16 index);
bool8 TacticsTargetLeader(u8 tactic);
void GetUnlockedTacticFlags(u8 *tacticsBuffer, s32 pokeLevel);
bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex);
s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ);
void CopyTacticsNameToBuffer(char *buffer, u8 tactic);

View File

@ -242,11 +242,11 @@ SECTIONS {
src/status_checks.o(.text);
src/dungeon_logic.o(.text);
src/dungeon_8071B48.o(.text);
src/code_80718D8.o(.text);
src/dungeon_leveling.o(.text);
src/dungeon_ai_leader.o(.text);
src/dungeon_8072CF4.o(.text);
src/dungeon_ai_items.o(.text);
src/code_8073CF0.o(.text);
src/dungeon_turn_effects.o(.text);
src/code_8075708.o(.text);
src/dungeon_ai.o(.text);
src/move_orb_effects_1.o(.text);
@ -627,11 +627,11 @@ SECTIONS {
src/status_checks.o(.rodata);
src/dungeon_logic.o(.rodata);
src/dungeon_8071B48.o(.rodata);
src/code_80718D8.o(.rodata);
src/dungeon_leveling.o(.rodata);
src/dungeon_ai_leader.o(.rodata);
src/dungeon_8072CF4.o(.rodata);
src/dungeon_ai_items.o(.rodata);
src/code_8073CF0.o(.rodata);
src/dungeon_turn_effects.o(.rodata);
src/code_8075708.o(.rodata);
src/dungeon_ai.o(.rodata);
src/move_orb_effects_1.o(.rodata);

View File

@ -41,9 +41,9 @@
#include "dungeon_engine.h"
#include "dungeon_kecleon_shop.h"
#include "dungeon_item_action.h"
#include "dungeon_leveling.h"
#include "warp_target.h"
extern void EnemyEvolution(Entity *);
extern void sub_8057588(Entity * pokemon, u8 param_2);
void sub_8042208(Entity *pokemon, u8 r1);
extern void sub_807AB38(Entity *, u32);

View File

@ -36,6 +36,7 @@
#include "dungeon_pos_data.h"
#include "dungeon_tilemap.h"
#include "dungeon_engine.h"
#include "dungeon_leveling.h"
extern void sub_8042900(Entity *r0);
extern void sub_8042968(Entity *r0);
@ -44,7 +45,6 @@ void sub_8041BBC(Entity *r0);
extern void sub_804178C(u32);
extern void sub_8042B20(Entity *entity);
extern void sub_8042B0C(Entity *entity);
extern void sub_8072AC8(u16 *param_1, s32 species, s32 param_3);
extern Entity *gLeaderPointer;
extern bool8 sub_80860A8(u8 id);
extern u8 gUnknown_202F32C;
@ -55,7 +55,6 @@ extern Entity *sub_80453AC(s16 id);
extern void sub_806B678(void);
extern void EntityUpdateStatusSprites(Entity *);
extern Entity *sub_80696A8(Entity *a0);
extern s32 GetMonsterApparentID(Entity *pokemon, s32 _id);
extern void sub_806A898(Entity *entity, bool8 r7, bool8 showRunAwayEffect);
extern void sub_806A6E8(Entity *entity);

View File

@ -44,6 +44,8 @@
#include "dungeon_kecleon_shop.h"
#include "dungeon_misc.h"
#include "dungeon_pos_data.h"
#include "dungeon_turn_effects.h"
#include "dungeon_leveling.h"
#include "warp_target.h"
extern void sub_8073D14(Entity *);
@ -59,11 +61,9 @@ extern void sub_8086AC0(void);
extern void sub_8085140(void);
extern void sub_8075708(Entity *entity);
extern void TryForcedLoss(u32);
extern void EnemyEvolution(Entity *);
extern void sub_8075900(Entity *pokemon, u8 r1);
extern void sub_807EC28(bool8);
extern void sub_8075050(EntityInfo *info, Unk_Entity_x184 *strPtr);
extern void sub_8074094(Entity *entity);
extern bool8 sub_803F428(DungeonPos *pos);
extern u8 gUnknown_202F32D;
@ -284,7 +284,7 @@ bool8 DisplayActions(Entity *a0)
break;
TryForcedLoss(0);
sub_8074094(mon);
ApplyEndOfTurnEffects(mon);
if (!EntityIsValid(mon))
continue;
if (IsFloorOver())

View File

@ -32,6 +32,8 @@
#include "dungeon_engine.h"
#include "dungeon_strings.h"
#include "dungeon_action.h"
#include "dungeon_turn_effects.h"
#include "dungeon_leveling.h"
#include "warp_target.h"
extern u8 gUnknown_202F221;
@ -71,8 +73,6 @@ bool8 sub_804AE08(DungeonPos *pos);
void HandlePickUpAIAction(Entity *pokemon);
void HandleThrowItemAIAction(Entity *pokemon);
void HandleEatAIAction(Entity *pokemon);
extern void sub_8074094(Entity *);
extern void EnemyEvolution(Entity *);
u32 sub_8075818(Entity *entity);
extern void MarkLastUsedMonMove(Entity *entity, Move *move);
bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30, bool32 isLinkedMove, struct Move *move);
@ -336,7 +336,7 @@ bool8 sub_8072CF4(Entity *entity)
if (sub_80706A4(entity,&entity->pos) != '\0') {
WarpTarget(entity,entity,0,0);
}
sub_8074094(entity);
ApplyEndOfTurnEffects(entity);
EnemyEvolution(entity);
}
}

View File

@ -22,8 +22,6 @@
extern void sub_8086AC0(void);
extern void DisplayActions(u32);
extern void TryActivateArtificialWeatherAbilities(void);
extern void EnemyEvolution(Entity *);
extern void TickStatusAndHealthRegen(Entity *);
EWRAM_DATA SubMenuAction gDungeonSubMenu[10] = {0};

View File

@ -31,6 +31,7 @@
#include "math.h"
#include "dungeon_config.h"
#include "dungeon_boss_dialogue.h"
#include "dungeon_leveling.h"
#include "weather.h"
extern void sub_8042B0C(Entity *);
@ -48,7 +49,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);
@ -106,7 +106,7 @@ void sub_8087FF8(void)
HandleFaint(articunoEntity,0x21c,0);
}
else {
sub_8072008(articunoEntity,articunoEntity,gArticunoConfigLevel,0,0);
LevelUpTarget(articunoEntity,articunoEntity,gArticunoConfigLevel,0,0);
SetFacingDirection(articunoEntity, DIRECTION_SOUTH);
sub_8086A3C(articunoEntity);
}

View File

@ -49,7 +49,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -48,7 +48,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -32,6 +32,7 @@
#include "dungeon_config.h"
#include "dungeon_boss_dialogue.h"
#include "dungeon_tilemap.h"
#include "dungeon_leveling.h"
extern void sub_8042B0C(Entity *);
extern u8 sub_806FD18(Entity *);
@ -45,10 +46,8 @@ extern void sub_8041888(u32);
extern u32 sub_80861F8(u32, Entity *, u32);
extern u8 sub_80860A8(u32);
extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);
@ -129,7 +128,7 @@ void sub_808875C(void)
HandleFaint(groudonEntity,0x21c,0);
}
else {
sub_8072008(groudonEntity,groudonEntity,gGroudonConfigLevel,0,0);
LevelUpTarget(groudonEntity,groudonEntity,gGroudonConfigLevel,0,0);
SetFacingDirection(groudonEntity, DIRECTION_SOUTH);
sub_80861D4(groudonEntity,0xf,DIRECTION_SOUTH);
}

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -49,7 +49,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -49,7 +49,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -48,7 +48,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -48,7 +48,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -32,6 +32,7 @@
#include "dungeon_config.h"
#include "dungeon_boss_dialogue.h"
#include "dungeon_tilemap.h"
#include "dungeon_leveling.h"
extern void sub_8042B0C(Entity *);
extern u8 sub_806FD18(Entity *);
@ -48,7 +49,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);
@ -98,7 +98,7 @@ void sub_8087848(void)
HandleFaint(moltresEntity,0x21c,0);
}
else {
sub_8072008(moltresEntity,moltresEntity,gMoltresConfigLevel,0,0);
LevelUpTarget(moltresEntity,moltresEntity,gMoltresConfigLevel,0,0);
SetFacingDirection(moltresEntity, DIRECTION_SOUTH);
sub_8086A3C(moltresEntity);
}

View File

@ -48,7 +48,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -31,6 +31,7 @@
#include "math.h"
#include "dungeon_config.h"
#include "dungeon_boss_dialogue.h"
#include "dungeon_leveling.h"
extern void sub_8042B0C(Entity *);
extern u8 sub_806FD18(Entity *);
@ -47,7 +48,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);
@ -90,7 +90,7 @@ void sub_8089328(void)
HandleFaint(rayquazaEntity,0x21c,0);
}
else {
sub_8072008(rayquazaEntity,rayquazaEntity,gRayquazaConfigLevel,0,0);
LevelUpTarget(rayquazaEntity,rayquazaEntity,gRayquazaConfigLevel,0,0);
sub_8086A3C(rayquazaEntity);
}
sub_8085860(leaderEntity->pos.x,leaderEntity->pos.y - 3);

View File

@ -47,7 +47,6 @@ extern u8 sub_80860A8(u32);
extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -47,7 +47,6 @@ extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);

View File

@ -31,6 +31,7 @@
#include "math.h"
#include "dungeon_config.h"
#include "dungeon_boss_dialogue.h"
#include "dungeon_leveling.h"
extern void sub_8042B0C(Entity *);
extern u8 sub_806FD18(Entity *);
@ -44,10 +45,8 @@ extern void sub_8041888(u32);
extern u32 sub_80861F8(u32, Entity *, u32);
extern u8 sub_80860A8(u32);
extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void SpawnDroppedItemWrapper(Entity *, DungeonPos *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern u32 sub_8085EC8(u32, u32, u32, DungeonPos *, u32);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374(void);
extern bool8 sub_8085B80(struct_8085B80 *);
extern void sub_8086A3C(Entity *pokemon);
@ -100,7 +99,7 @@ void sub_808729C(void)
HandleFaint(zapdosEntity,0x21c,0);
}
else {
sub_8072008(zapdosEntity,zapdosEntity,gZapdosConfigLevel,0,0);
LevelUpTarget(zapdosEntity,zapdosEntity,gZapdosConfigLevel,0,0);
SetFacingDirection(zapdosEntity,DIRECTION_SOUTH);
sub_8086A3C(zapdosEntity);
}

View File

@ -23,6 +23,7 @@
#include "dungeon_config.h"
#include "dungeon_strings.h"
#include "dungeon_misc.h"
#include "dungeon_leveling.h"
#include "weather.h"
#include "game_options.h"
#include "code_8077274_1.h"
@ -50,7 +51,6 @@ extern void sub_803ED30(s32, Entity *r0, u8, s32);
extern bool8 sub_806A458(Entity *);
extern bool8 sub_806F660(Entity *, Entity *);
extern bool8 sub_806A58C(s16 a0);
extern void sub_8071D4C(Entity *pokemon, Entity *target, s32 exp);
extern void sub_8042148(Entity *pokemon);
extern void sub_8042A24(Entity *r0);
extern void sub_806A390(Entity *r0);
@ -455,7 +455,7 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
sub_806CE68(target, 8);
}
if (HasHeldItem(target, ITEM_JOY_RIBBON) && hpChange > 0 && dmgStruct->dmg != 9999) {
sub_8071D4C(attacker, target, hpChange);
AddExpPoints(attacker, target, hpChange);
}
if (unkTile != NULL)
@ -718,11 +718,11 @@ static bool8 HandleDealingDamageInternal(Entity *attacker, Entity *target, struc
if (targetData->isNotTeamMember) {
s32 i;
sub_8071D4C(attacker, attacker, exp);
AddExpPoints(attacker, attacker, exp);
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
Entity *teamMember = gDungeon->teamPokemon[i];
if (EntityIsValid(teamMember) && teamMember != attacker) {
sub_8071D4C(attacker, teamMember, exp);
AddExpPoints(attacker, teamMember, exp);
}
}
r10 = TRUE;

View File

@ -3,11 +3,15 @@
#include "dungeon_engine.h"
#include "run_dungeon.h"
#include "dungeon_vram.h"
#include "dungeon_main.h"
#include "constants/dungeon.h"
#include "dungeon_ai_leader.h"
#include "dungeon_ai.h"
#include "dungeon_range.h"
#include "dungeon_misc.h"
#include "dungeon_util.h"
#include "dungeon_leveling.h"
#include "dungeon_turn_effects.h"
#include "structs/dungeon_entity.h"
#include "structs/str_dungeon.h"
#include "constants/ability.h"
@ -17,13 +21,8 @@
extern void sub_807E378(void);
extern u8 DisplayActions(u32);
extern void TickStatusAndHealthRegen(Entity *);
extern void sub_8086AC0(void);
extern void EnemyEvolution(Entity *);
extern void TryActivateArtificialWeatherAbilities(void);
extern void DungeonHandlePlayerInput(void);
extern void sub_805F02C(void);
extern void sub_8074094(Entity *);
extern void sub_8071B48(void);
static void sub_8044454(void);
@ -306,7 +305,7 @@ static void sub_8044574(void)
if (EntityIsValid(teamMon)) {
EntityInfo *teamMonInfo = GetEntInfo(teamMon);
if (teamMonInfo->aiAllySkip) {
sub_8074094(teamMon);
ApplyEndOfTurnEffects(teamMon);
if (EntityIsValid(teamMon)) {
EnemyEvolution(teamMon);
teamMonInfo->aiAllySkip = FALSE;
@ -367,7 +366,7 @@ static void sub_8044820(void)
entity2 = gDungeon->wildPokemon[index];
if ((EntityIsValid(entity2)) && (entityInfo2 = GetEntInfo(entity2), entityInfo2->aiAllySkip))
{
sub_8074094(entity2);
ApplyEndOfTurnEffects(entity2);
if (EntityIsValid(entity2)) {
EnemyEvolution(entity2);
entityInfo2->aiAllySkip = FALSE;

View File

@ -34,6 +34,7 @@
#include "dungeon_damage.h"
#include "dungeon_strings.h"
#include "dungeon_move.h"
#include "dungeon_leveling.h"
#include "warp_target.h"
extern u32 gUnknown_8106A4C;
@ -45,11 +46,7 @@ extern void sub_8045BF8(u8 *, Item *);
extern void ActionShowMoveInfo(ActionContainer *);
extern void ActionLinkMoves(ActionContainer *);
extern void sub_804245C(Entity *, Item *);
extern u8 sub_8072938(Entity *, u16);
extern void sub_8072008(Entity *pokemon, Entity *r1, u32 r2, u8 r3, u32);
extern void LevelDownTarget(Entity *pokemon, Entity *r1, u32 r2);
extern s32 sub_8042520(Entity *);
extern void EnemyEvolution(Entity *);
extern void sub_8042390(Entity *, Item *);
static void StunSeedItemAction(Entity *, Entity *);
@ -474,7 +471,7 @@ static void TotterSeedItemAction(Entity *pokemon, Entity *target)
static void JoySeedItemAction(Entity *pokemon, Entity *target)
{
sub_8072008(pokemon, target, 1, 1, 1);
LevelUpTarget(pokemon, target, 1, 1, 1);
}
static void StunSeedItemAction(Entity *pokemon, Entity *target)

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "dungeon_leveling.h"
#include "constants/tactic.h"
#include "dungeon_config.h"
#include "dungeon_range.h"
@ -29,21 +30,14 @@
#include "dungeon_pos_data.h"
#include "dungeon_music.h"
EWRAM_DATA s32 gUnknown_202F31C[2] = {0, 0};
EWRAM_DATA s32 gUnknown_202F324[2] = {0, 0};
static EWRAM_DATA s32 sNewAtkStats[2] = {0, 0};
static EWRAM_DATA s32 sNewDefStats[2] = {0, 0};
extern void ResetMonEntityData(EntityInfo *, u32);
void sub_8042A44(Entity *r0);
void sub_8072778(Entity *, Entity *, u8, u8);
bool8 sub_80725A4(Entity *, Entity *);
void GetUnlockedTacticFlags(u8 *tacticsBuffer, s32 pokeLevel);
void sub_807218C(Entity *);
extern void sub_8072B78(Entity *pokemon, Entity *target, s16 id);
extern s32 GetMovesLearnedAtLevel(u16* dst, s16 species, s32 level, s32 IQPoints);
void sub_8072B24(Entity *entity, Move *moves);
static const u8 gUnknown_8107010[8] = {0, 1, 1, 2, 1, 1, 0, 0};
static const u8 * const gUnknown_8107018[3] = {
_(""),
@ -52,14 +46,18 @@ static const u8 * const gUnknown_8107018[3] = {
};
static bool8 LevelUp(Entity *, Entity *, u8, u8);
static void sub_807218C(Entity *pokemon);
static bool8 sub_80725A4(Entity *pokemon, Entity *target);
static void sub_8072778(Entity *pokemon, Entity *target, u8 param_2, u8 param_3);
static void sub_8072B24(Entity *entity, Move *moves);
static void sub_8072B78(Entity *pokemon, Entity *target, s16 id);
void sub_8071D4C(Entity *pokemon, Entity *target, s32 exp)
void AddExpPoints(Entity *pokemon, Entity *target, s32 exp)
{
s32 newExp;
s32 expDiff;
EntityInfo *info;
info = GetEntInfo(target);
EntityInfo *info = GetEntInfo(target);
if (info->level != 100) {
if (!IsExperienceLocked(info->joinedAt.id)) {
newExp = info->exp + exp;
@ -179,7 +177,7 @@ void EnemyEvolution(Entity *entity)
}
}
void sub_8072008(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 param_5)
void LevelUpTarget(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 param_5)
{
bool8 flag;
s32 newLevel;
@ -244,7 +242,7 @@ void sub_8072008(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 para
}
}
void sub_807218C(Entity *pokemon)
static void sub_807218C(Entity *pokemon)
{
EntityInfo *info;
u8 buffer [400];
@ -419,33 +417,33 @@ static bool8 LevelUp(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
info->HP = info->maxHPStat;
}
gUnknown_202F31C[0] = info->atk[0];
gUnknown_202F31C[1] = info->atk[1];
gUnknown_202F324[0] = info->def[0];
gUnknown_202F324[1] = info->def[1];
sNewAtkStats[0] = info->atk[0];
sNewAtkStats[1] = info->atk[1];
sNewDefStats[0] = info->def[0];
sNewDefStats[1] = info->def[1];
gUnknown_202F31C[0] += leveldata.gainAtt[0];
gUnknown_202F31C[1] += leveldata.gainAtt[1];
gUnknown_202F324[0] += leveldata.gainDef[0];
gUnknown_202F324[1] += leveldata.gainDef[1];
sNewAtkStats[0] += leveldata.gainAtt[0];
sNewAtkStats[1] += leveldata.gainAtt[1];
sNewDefStats[0] += leveldata.gainDef[0];
sNewDefStats[1] += leveldata.gainDef[1];
if(gUnknown_202F31C[0] > 254)
gUnknown_202F31C[0] = 255;
if(gUnknown_202F31C[1] > 254)
gUnknown_202F31C[1] = 255;
if(gUnknown_202F324[0] > 254)
gUnknown_202F324[0] = 255;
if(gUnknown_202F324[1] > 254)
gUnknown_202F324[1] = 255;
if(sNewAtkStats[0] > 254)
sNewAtkStats[0] = 255;
if(sNewAtkStats[1] > 254)
sNewAtkStats[1] = 255;
if(sNewDefStats[0] > 254)
sNewDefStats[0] = 255;
if(sNewDefStats[1] > 254)
sNewDefStats[1] = 255;
LoadIQSkills(target);
sub_8079764(target);
info->atk[0] = gUnknown_202F31C[0];
info->atk[1] = gUnknown_202F31C[1];
info->def[0] = gUnknown_202F324[0];
info->def[1] = gUnknown_202F324[1];
info->atk[0] = sNewAtkStats[0];
info->atk[1] = sNewAtkStats[1];
info->def[0] = sNewDefStats[0];
info->def[1] = sNewDefStats[1];
sub_8072778(pokemon, target, param_3, param_4);
}
@ -453,7 +451,7 @@ static bool8 LevelUp(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
return flag;
}
bool8 sub_80725A4(Entity *pokemon, Entity *target)
static bool8 sub_80725A4(Entity *pokemon, Entity *target)
{
EntityInfo *info;
LevelData leveldata;
@ -513,33 +511,33 @@ bool8 sub_80725A4(Entity *pokemon, Entity *target)
info->HP = info->maxHPStat;
}
gUnknown_202F31C[0] = info->atk[0];
gUnknown_202F31C[1] = info->atk[1];
gUnknown_202F324[0] = info->def[0];
gUnknown_202F324[1] = info->def[1];
sNewAtkStats[0] = info->atk[0];
sNewAtkStats[1] = info->atk[1];
sNewDefStats[0] = info->def[0];
sNewDefStats[1] = info->def[1];
gUnknown_202F31C[0] -= leveldata.gainAtt[0];
gUnknown_202F31C[1] -= leveldata.gainAtt[1];
gUnknown_202F324[0] -= leveldata.gainDef[0];
gUnknown_202F324[1] -= leveldata.gainDef[1];
sNewAtkStats[0] -= leveldata.gainAtt[0];
sNewAtkStats[1] -= leveldata.gainAtt[1];
sNewDefStats[0] -= leveldata.gainDef[0];
sNewDefStats[1] -= leveldata.gainDef[1];
if(gUnknown_202F31C[0] <= 1)
gUnknown_202F31C[0] = 1;
if(gUnknown_202F31C[1] <= 1)
gUnknown_202F31C[1] = 1;
if(gUnknown_202F324[0] <= 1)
gUnknown_202F324[0] = 1;
if(gUnknown_202F324[1] <= 1)
gUnknown_202F324[1] = 1;
if(sNewAtkStats[0] <= 1)
sNewAtkStats[0] = 1;
if(sNewAtkStats[1] <= 1)
sNewAtkStats[1] = 1;
if(sNewDefStats[0] <= 1)
sNewDefStats[0] = 1;
if(sNewDefStats[1] <= 1)
sNewDefStats[1] = 1;
LoadIQSkills(target);
sub_8079764(target);
info->atk[0] = gUnknown_202F31C[0];
info->atk[1] = gUnknown_202F31C[1];
info->def[0] = gUnknown_202F324[0];
info->def[1] = gUnknown_202F324[1];
info->atk[0] = sNewAtkStats[0];
info->atk[1] = sNewAtkStats[1];
info->def[0] = sNewDefStats[0];
info->def[1] = sNewDefStats[1];
}
}
@ -560,7 +558,7 @@ bool8 sub_80725A4(Entity *pokemon, Entity *target)
}
}
void sub_8072778(Entity *pokemon, Entity *target, u8 param_2, u8 param_3)
static void sub_8072778(Entity *pokemon, Entity *target, u8 param_2, u8 param_3)
{
s32 i, j;
u16 learnedMoves[16];
@ -709,16 +707,14 @@ bool8 sub_8072938(Entity *target, u16 moveId)
return TRUE;
}
void sub_8072AC8(s16 *param_1, s16 species, s32 param_3)
void sub_8072AC8(s16 *param_1, s32 species, s32 param_3)
{
const u8 *levelUpMoves;
s32 arrIndex;
s32 counter;
u16 moveIDs [2];
s32 species_s32;
s32 index;
species_s32 = species;
s32 species_s32 = (s16) species;
for(index = 0; index < MAX_MON_MOVES; index++) {
param_1[index] = MOVE_NOTHING;
@ -745,7 +741,7 @@ void sub_8072AC8(s16 *param_1, s16 species, s32 param_3)
}
}
void sub_8072B24(Entity *entity, Move *moves)
static void sub_8072B24(Entity *entity, Move *moves)
{
int index;
int count;
@ -772,7 +768,7 @@ static inline void fu(EntityInfo *entityInfo, s16 id)
entityInfo->id = id;
}
void sub_8072B78(Entity *pokemon, Entity *target, s16 id)
static void sub_8072B78(Entity *pokemon, Entity *target, s16 id)
{
OpenedFile *file;
const Tile *tile;

View File

@ -64,11 +64,9 @@ extern void sub_8042900(Entity *r0);
extern void sub_8042968(Entity *r0);
extern void EndAbilityImmuneStatus(Entity *, Entity *);
extern void sub_8041BBC(Entity *r0);
extern void TryPointCameraToMonster(Entity *, u8);
extern void sub_804178C(u32);
extern void sub_8042B20(Entity *entity);
extern void sub_8042B0C(Entity *entity);
extern void sub_8072AC8(u16 *param_1, s32 species, s32 param_3);
extern s16 sub_803D970(u32);
extern bool8 sub_80860A8(u8 id);
extern u8 sub_803D73C(s32 a0);

View File

@ -50,7 +50,6 @@ extern s16 sub_8057600(Move *move, s32 itemID);
extern void sub_8042238(Entity *pokemon, Entity *target);
extern void sub_806A1E8(Entity *pokemon);
extern void sub_804178C(u32);
extern void EnemyEvolution(Entity *);
extern void sub_80428A0(Entity *r0);
extern bool8 sub_8040BB0(Entity *entity, Move *move, bool8);
extern void sub_8040DA0(Entity *entity, Move *move);

View File

@ -41,11 +41,11 @@
#include "dungeon_pos_data.h"
#include "dungeon_engine.h"
#include "dungeon_damage.h"
#include "dungeon_leveling.h"
extern void sub_80429C8(Entity *r0);
extern void sub_806A1E8(Entity *pokemon);
extern void sub_804178C(u32);
extern void EnemyEvolution(Entity *);
extern void sub_80428A0(Entity *r0);
extern bool8 sub_8040BB0(Entity *entity, Move *move, bool8);
extern void sub_8040DA0(Entity *entity, Move *move);

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "dungeon_turn_effects.h"
#include "dungeon_util.h"
#include "items.h"
#include "status.h"
@ -33,26 +34,16 @@
#include "dungeon_engine.h"
#include "dungeon_damage.h"
#include "dungeon_range.h"
#include "dungeon_move_util.h"
#include "warp_target.h"
extern void sub_805229C(void);
extern void sub_80420B8(Entity *pokemon);
extern void sub_8041C4C(Entity *pokemon, u32 r1);
extern void sub_805E804(void);
extern bool8 TryUseChosenMove(struct Entity *, u32, u32, u32, u32, struct Move *);
extern void nullsub_97(Entity *entity);
extern void sub_805EE30(void);
extern void sub_8086AC0(void);
extern void sub_8085140(void);
extern void sub_8075708(Entity *entity);
extern void sub_8043ED0(u32);
extern void EnemyEvolution(Entity *);
extern void sub_8075900(Entity *pokemon, u8 r1);
extern void sub_806A5B8(Entity *);
extern bool8 DisplayActions(Entity *a0);
bool8 DisplayActions(Entity *a0);
void sub_8074094(Entity *entity)
void ApplyEndOfTurnEffects(Entity *entity)
{
s32 rand;
EntityInfo *entityInfo;

View File

@ -26,6 +26,7 @@
#include "dungeon_engine.h"
#include "dungeon_generation.h"
#include "dungeon_items.h"
#include "dungeon_leveling.h"
#include "dungeon_range.h"
#include "dungeon_map.h"
#include "dungeon_map_access.h"
@ -73,9 +74,7 @@ extern void sub_80848F0(void);
extern void IncrementAdventureFloorsExplored(void);
extern void sub_806AB2C(void);
extern void DisplayPreFightDialogue(void);
extern void EnemyEvolution(Entity *);
extern void sub_807E5AC(void);
extern void TryActivateArtificialWeatherAbilities(void);
extern void nullsub_16(void);
extern void sub_80521D0(void);
extern void sub_8068A84(Pokemon *pokemon);

View File

@ -52,10 +52,9 @@
.include "src/code_8066D04.o"
.include "src/dungeon_8067A80.o"
.include "src/dungeon_logic.o"
.include "src/code_80718D8.o"
.include "src/dungeon_leveling.o"
.include "src/dungeon_8072CF4.o"
.include "src/dungeon_ai_items.o"
.include "src/code_8073CF0.o"
.include "src/code_8075708.o"
.space 4
.include "src/dungeon_ai_attack.o"