mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-08 00:55:53 -05:00
splt move orb effects files
This commit is contained in:
@@ -12,10 +12,6 @@
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
@ HandleExplosion
|
||||
.string "pksdir0\0"
|
||||
|
||||
|
||||
@@ -251,8 +251,11 @@ SECTIONS {
|
||||
src/code_8073CF0.o(.text);
|
||||
src/code_8075708.o(.text);
|
||||
src/dungeon_ai.o(.text);
|
||||
src/move_effects_target.o(.text);
|
||||
src/status.o(.text);
|
||||
src/move_orb_effects_1.o(.text);
|
||||
src/move_orb_effects_2.o(.text);
|
||||
src/move_orb_effects_3.o(.text);
|
||||
src/move_orb_effects_4.o(.text);
|
||||
src/move_orb_effects_5.o(.text);
|
||||
src/code_8077274_1.o(.text);
|
||||
src/dungeon_ai_movement.o(.text);
|
||||
src/dungeon_ai_attack.o(.text);
|
||||
@@ -587,8 +590,12 @@ SECTIONS {
|
||||
src/code_8073CF0.o(.rodata);
|
||||
src/code_8075708.o(.rodata);
|
||||
src/dungeon_ai.o(.rodata);
|
||||
src/move_effects_target.o(.rodata);
|
||||
src/status.o(.rodata);
|
||||
src/move_orb_effects_1.o(.rodata);
|
||||
src/move_orb_effects_2.o(.rodata);
|
||||
src/move_orb_effects_3.o(.rodata);
|
||||
src/move_orb_effects_4.o(.rodata);
|
||||
src/move_orb_effects_5.o(.rodata);
|
||||
src/code_8077274_1.o(.rodata);
|
||||
data/data_8107010.o(.rodata);
|
||||
src/dungeon_serializer.o(.rodata);
|
||||
data/data_8107224.o(.rodata);
|
||||
|
||||
1112
src/code_8077274_1.c
1112
src/code_8077274_1.c
File diff suppressed because it is too large
Load Diff
@@ -102,8 +102,6 @@ extern void sub_8041BF8(Entity *);
|
||||
extern void sub_8041BE8(Entity *);
|
||||
extern void EntityUpdateStatusSprites(Entity *);
|
||||
|
||||
// FILE SPLIT
|
||||
|
||||
void ConfuseStatusTarget(Entity * pokemon, Entity * target, bool8 displayMessage)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
115
src/move_orb_effects_3.c
Normal file
115
src/move_orb_effects_3.c
Normal file
@@ -0,0 +1,115 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "code_803E46C.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_message.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "code_808417C.h"
|
||||
#include "constants/ability.h"
|
||||
#include "constants/item.h"
|
||||
#include "constants/status.h"
|
||||
#include "constants/type.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "move_effects_target.h"
|
||||
#include "moves.h"
|
||||
#include "math.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "structs/str_806B7F8.h"
|
||||
#include "dungeon_config.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_strings.h"
|
||||
|
||||
extern void sub_8041BD0(Entity *r0, u8 r1);
|
||||
extern void EntityUpdateStatusSprites(Entity *);
|
||||
|
||||
void SetChargeStatusTarget(Entity *pokemon, Entity *target, u8 newStatus, Move *move, const u8 *message)
|
||||
{
|
||||
bool8 bVar2;
|
||||
Move *movePtr;
|
||||
s32 index;
|
||||
bool8 uVar5;
|
||||
s32 iVar7;
|
||||
s32 iVar8;
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if ((entityInfo->bideClassStatus.status == newStatus) && (newStatus == STATUS_ENRAGED)) {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FC074);
|
||||
}
|
||||
else {
|
||||
entityInfo->bideClassStatus.status = newStatus;
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
movePtr = &entityInfo->moves.moves[index];
|
||||
if(movePtr == move)
|
||||
{
|
||||
entityInfo->bideClassStatus.moveSlot = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
entityInfo->unk14A = 1;
|
||||
|
||||
uVar5 = FALSE;
|
||||
if (newStatus == STATUS_FLYING || newStatus == STATUS_BOUNCING) {
|
||||
entityInfo->unkFF = 1;
|
||||
uVar5 = TRUE;
|
||||
}
|
||||
else if (newStatus == STATUS_DIVING || newStatus == STATUS_DIGGING) {
|
||||
entityInfo->unkFF = 2;
|
||||
}
|
||||
if (newStatus == STATUS_BIDE) {
|
||||
entityInfo->bideClassStatus.turns = CalculateStatusTurns(target,gBideTurnRange, FALSE) + 1;
|
||||
entityInfo->unkA0 = 0;
|
||||
}
|
||||
if (newStatus == STATUS_ENRAGED) {
|
||||
entityInfo->bideClassStatus.turns = CalculateStatusTurns(target,gEnragedTurnRange, FALSE) + 1;
|
||||
}
|
||||
sub_8041BD0(target,uVar5);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,message);
|
||||
EntityUpdateStatusSprites(target);
|
||||
|
||||
// TODO: this could probably be cleaner..
|
||||
for (index = 0, iVar8 = 0xc7ff; index < 400; index++) {
|
||||
bVar2 = TRUE;
|
||||
if (entityInfo->unkFF == 1)
|
||||
if(iVar7 = entityInfo->unk174.raw, bVar2 = FALSE, iVar7 > iVar8) // unk174 -> u32 to s32
|
||||
{
|
||||
bVar2 = TRUE;
|
||||
}
|
||||
if (bVar2) {
|
||||
break;
|
||||
}
|
||||
DungeonRunFrameActions(0x53);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8079764(Entity * pokemon)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(pokemon)) {
|
||||
entityInfo = GetEntInfo(pokemon);
|
||||
if ((entityInfo->bideClassStatus.status != STATUS_BIDE) && (entityInfo->bideClassStatus.status != STATUS_ENRAGED)) {
|
||||
entityInfo->bideClassStatus.status = STATUS_NONE;
|
||||
entityInfo->unk14A = 0;
|
||||
entityInfo->unkFF = 0;
|
||||
}
|
||||
EntityUpdateStatusSprites(pokemon);
|
||||
}
|
||||
}
|
||||
394
src/move_orb_effects_4.c
Normal file
394
src/move_orb_effects_4.c
Normal file
@@ -0,0 +1,394 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "code_803E46C.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_message.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "code_808417C.h"
|
||||
#include "constants/ability.h"
|
||||
#include "constants/item.h"
|
||||
#include "constants/status.h"
|
||||
#include "constants/type.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "move_effects_target.h"
|
||||
#include "moves.h"
|
||||
#include "math.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "structs/str_806B7F8.h"
|
||||
#include "dungeon_config.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_strings.h"
|
||||
|
||||
extern void ShowWholeRevealedDungeonMap();
|
||||
extern void EntityUpdateStatusSprites(Entity *);
|
||||
extern void sub_8042A74(Entity *r0);
|
||||
extern void sub_807EC28(bool8);
|
||||
extern s32 GetMonsterApparentID(Entity *param_1, s16 param_2);
|
||||
extern void sub_806A898(Entity *, u32, u32);
|
||||
extern void HealTargetHP(Entity *pokemon, Entity *r1, s16, s16, u32);
|
||||
extern void DealDamageToEntity(Entity *, s16, u32, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
extern void sub_80420C8(Entity *r0);
|
||||
extern void nullsub_68(Entity *);
|
||||
extern void nullsub_67(Entity *);
|
||||
extern void nullsub_66(Entity *);
|
||||
extern void nullsub_65(Entity *);
|
||||
extern void nullsub_64(Entity *);
|
||||
extern void nullsub_63(Entity *);
|
||||
extern void nullsub_62(Entity *);
|
||||
extern void nullsub_61(Entity *);
|
||||
extern void nullsub_60(Entity *);
|
||||
extern void nullsub_59(Entity *);
|
||||
extern void nullsub_58(Entity *);
|
||||
extern void nullsub_57(Entity *);
|
||||
extern void sub_8041B34(Entity *);
|
||||
void sub_8041BD0(Entity *r0, u8 r1);
|
||||
void sub_8041EB4(Entity *);
|
||||
void sub_8041EA4(Entity *);
|
||||
extern void sub_8041E84(Entity *);
|
||||
extern void sub_8041E94(Entity *);
|
||||
extern void sub_8041E74(Entity *);
|
||||
extern void sub_8041E60(Entity *);
|
||||
extern void sub_8041E4C(Entity *);
|
||||
extern void sub_8041E3C(Entity *);
|
||||
extern void sub_803F580(u32);
|
||||
extern void sub_8041E1C(Entity *);
|
||||
extern void nullsub_89(Entity *);
|
||||
extern void nullsub_88(Entity *);
|
||||
extern void nullsub_87(Entity *);
|
||||
extern void nullsub_86(Entity *);
|
||||
extern void sub_8041E0C(Entity *);
|
||||
extern void sub_8041DD8(Entity *r0, s32 r1); // NOTE: is s16 in another file
|
||||
extern s32 sub_803D870(UnkDungeonGlobal_unk1CD98 *strPtr, s32 id);
|
||||
extern bool8 sub_806AA0C(s32, u32);
|
||||
|
||||
void CounterStatusTarget(Entity * pokemon, Entity * target, u8 newStatus)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status == newStatus) {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB10C);
|
||||
}
|
||||
else {
|
||||
nullsub_57(target);
|
||||
if ((entityInfo->reflectClassStatus.status != STATUS_COUNTER) && (entityInfo->reflectClassStatus.status != STATUS_MINI_COUNTER)) {
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target,gCounterTurnRange, FALSE) + 1;
|
||||
}
|
||||
entityInfo->reflectClassStatus.status = newStatus;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB0E0);
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SafeguardStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_SAFEGUARD) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_SAFEGUARD;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gSafeguardTurnRange, FALSE) + 1;
|
||||
nullsub_58(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB048);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB074);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void MistStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_MIST) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_MIST;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gMistTurnRange, FALSE) + 1;
|
||||
nullsub_59(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB09C);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB0C4);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void WishStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_WISH) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_WISH;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gWishTurnRange, FALSE) + 1;
|
||||
sub_8041B34(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAE1C);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAE3C);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void MagicCoatStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_MAGIC_COAT) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_MAGIC_COAT;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gMagicCoatTurnRange, FALSE) + 1;
|
||||
nullsub_60(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAF5C);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAF8C);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void LightScreenStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_LIGHT_SCREEN) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_LIGHT_SCREEN;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gLightScreenTurnRange, FALSE) + 1;
|
||||
nullsub_61(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB130);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB160);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void ReflectStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_REFLECT) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_REFLECT;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gReflectTurnRange, FALSE) + 1;
|
||||
nullsub_62(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB17C);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB1A8);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void ProtectStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
nullsub_63(target);
|
||||
entityInfo = GetEntInfo(target);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_PROTECT) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_PROTECT;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gProtectTurnRange, FALSE) + 1;
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB9B0);
|
||||
}
|
||||
else {
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB9D8);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void MirrorCoatStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_MIRROR_COAT) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_MIRROR_COAT;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gMirrorCoatTurnRange, FALSE) + 1;
|
||||
nullsub_64(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBAC0);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBAE4);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void EndureStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_ENDURING) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_ENDURING;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gEnduringTurnRange, FALSE) + 1;
|
||||
nullsub_65(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBBF0);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBC14);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void MirrorMoveStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_MIRROR_MOVE) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_MIRROR_MOVE;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gMirrorMoveTurnRange, FALSE) + 1;
|
||||
nullsub_66(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBC38);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBC5C);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void Conversion2StatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
|
||||
if(AbilityIsActive(target, ABILITY_FORECAST))
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gPtrForecastPreventsConversion2Message);
|
||||
else
|
||||
{
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_CONVERSION2) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_CONVERSION2;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gConversion2TurnRange, FALSE) + 1;
|
||||
nullsub_67(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBC7C);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBCA4);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VitalThrowStatusTarget(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (entityInfo->reflectClassStatus.status != STATUS_VITAL_THROW) {
|
||||
entityInfo->reflectClassStatus.status = STATUS_VITAL_THROW;
|
||||
entityInfo->reflectClassStatus.turns = CalculateStatusTurns(target, gVitalThrowTurnRange, FALSE) + 1;
|
||||
nullsub_68(target);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBCC8);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBCF0);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8079E34(Entity * pokemon, Entity * target, bool8 param_3)
|
||||
{
|
||||
bool8 statChanged;
|
||||
EntityInfo *entityInfo;
|
||||
s32 index;
|
||||
|
||||
statChanged = FALSE;
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
|
||||
for(index = 0; index < 2; index++)
|
||||
{
|
||||
if (entityInfo->offensiveStages[index] != DEFAULT_STAT_STAGE) {
|
||||
entityInfo->offensiveStages[index] = DEFAULT_STAT_STAGE;
|
||||
statChanged = TRUE;
|
||||
}
|
||||
if (entityInfo->defensiveStages[index] != DEFAULT_STAT_STAGE) {
|
||||
entityInfo->defensiveStages[index] = DEFAULT_STAT_STAGE;
|
||||
statChanged = TRUE;
|
||||
}
|
||||
if (entityInfo->hitChanceStages[index] != DEFAULT_STAT_STAGE) {
|
||||
entityInfo->hitChanceStages[index] = DEFAULT_STAT_STAGE;
|
||||
statChanged = TRUE;
|
||||
}
|
||||
if (!F248EqualsInt(entityInfo->offensiveMultipliers[index], 1)) {
|
||||
entityInfo->offensiveMultipliers[index] = F248_ONE;
|
||||
statChanged = TRUE;
|
||||
}
|
||||
if (!F248EqualsInt(entityInfo->defensiveMultipliers[index], 1)) {
|
||||
entityInfo->defensiveMultipliers[index] = F248_ONE;
|
||||
statChanged = TRUE;
|
||||
}
|
||||
}
|
||||
if (statChanged) {
|
||||
sub_80420C8(target);
|
||||
}
|
||||
else if (param_3 != 0) {
|
||||
sub_80420C8(target);
|
||||
}
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
if (statChanged) {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBD18);
|
||||
}
|
||||
else {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FBD3C);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
621
src/move_orb_effects_5.c
Normal file
621
src/move_orb_effects_5.c
Normal file
@@ -0,0 +1,621 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "code_803E46C.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_message.h"
|
||||
#include "code_805D8C8.h"
|
||||
#include "code_806CD90.h"
|
||||
#include "code_8077274_1.h"
|
||||
#include "code_808417C.h"
|
||||
#include "constants/ability.h"
|
||||
#include "constants/item.h"
|
||||
#include "constants/status.h"
|
||||
#include "constants/type.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "move_effects_target.h"
|
||||
#include "moves.h"
|
||||
#include "math.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "pokemon_mid.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "structs/str_806B7F8.h"
|
||||
#include "dungeon_config.h"
|
||||
#include "dungeon_logic.h"
|
||||
#include "dungeon_strings.h"
|
||||
|
||||
extern void ShowWholeRevealedDungeonMap();
|
||||
extern void EntityUpdateStatusSprites(Entity *);
|
||||
extern void sub_8042A74(Entity *r0);
|
||||
extern void sub_807EC28(bool8);
|
||||
extern s32 GetMonsterApparentID(Entity *param_1, s16 param_2);
|
||||
extern void sub_806A898(Entity *, u32, u32);
|
||||
extern void HealTargetHP(Entity *pokemon, Entity *r1, s16, s16, u32);
|
||||
extern void DealDamageToEntity(Entity *, s16, u32, u32);
|
||||
extern void ResetMonEntityData(EntityInfo *, u32);
|
||||
extern void sub_80420C8(Entity *r0);
|
||||
extern void nullsub_68(Entity *);
|
||||
extern void nullsub_67(Entity *);
|
||||
extern void nullsub_66(Entity *);
|
||||
extern void nullsub_65(Entity *);
|
||||
extern void nullsub_64(Entity *);
|
||||
extern void nullsub_63(Entity *);
|
||||
extern void nullsub_62(Entity *);
|
||||
extern void nullsub_61(Entity *);
|
||||
extern void nullsub_60(Entity *);
|
||||
extern void nullsub_59(Entity *);
|
||||
extern void nullsub_58(Entity *);
|
||||
extern void nullsub_57(Entity *);
|
||||
extern void sub_8041B34(Entity *);
|
||||
void sub_8041BD0(Entity *r0, u8 r1);
|
||||
void sub_8041EB4(Entity *);
|
||||
void sub_8041EA4(Entity *);
|
||||
extern void sub_8041E84(Entity *);
|
||||
extern void sub_8041E94(Entity *);
|
||||
extern void sub_8041E74(Entity *);
|
||||
extern void sub_8041E60(Entity *);
|
||||
extern void sub_8041E4C(Entity *);
|
||||
extern void sub_8041E3C(Entity *);
|
||||
extern void sub_803F580(u32);
|
||||
extern void sub_8041E1C(Entity *);
|
||||
extern void nullsub_89(Entity *);
|
||||
extern void nullsub_88(Entity *);
|
||||
extern void nullsub_87(Entity *);
|
||||
extern void nullsub_86(Entity *);
|
||||
extern void sub_8041E0C(Entity *);
|
||||
extern void sub_8041DD8(Entity *r0, s32 r1); // NOTE: is s16 in another file
|
||||
extern s32 sub_803D870(UnkDungeonGlobal_unk1CD98 *strPtr, s32 id);
|
||||
extern bool8 sub_806AA0C(s32, u32);
|
||||
|
||||
void sub_8079F20(Entity * pokemon, Entity * target, u8 param_3, u8 param_4)
|
||||
{
|
||||
bool8 moveUnsealed; // r9
|
||||
s32 moveSpeed;
|
||||
Move *move;
|
||||
EntityInfo *entityInfo; // r7
|
||||
bool8 bVar8; // r8
|
||||
s32 index;
|
||||
|
||||
bVar8 = FALSE;
|
||||
moveUnsealed = FALSE;
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
if (HasNegativeStatus(target)) {
|
||||
bVar8 = TRUE;
|
||||
EndSleepClassStatus(pokemon,target,0,0);
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
EndBurnClassStatus(pokemon,target);
|
||||
EndFrozenClassStatus(pokemon,target);
|
||||
EndCringeClassStatus(pokemon,target);
|
||||
EndCurseClassStatus(pokemon,target,0);
|
||||
EndLeechSeedClassStatus(pokemon,target);
|
||||
SendMoveEndMessage(pokemon,target);
|
||||
SendEyesightEndMessage(pokemon,target);
|
||||
SendMuzzledEndMessage(pokemon,target);
|
||||
if (entityInfo->perishSongTurns != 0) {
|
||||
entityInfo->perishSongTurns = 0;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_8100594);
|
||||
}
|
||||
if (entityInfo->exposed) {
|
||||
entityInfo->exposed = FALSE;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gPtrExposedWoreOffMessage);
|
||||
}
|
||||
}
|
||||
|
||||
moveSpeed = CalcSpeedStage(target);
|
||||
for(index = 0; index < NUM_SPEED_COUNTERS; index++)
|
||||
{
|
||||
entityInfo->speedDownCounters[index] = 0;
|
||||
}
|
||||
|
||||
if (moveSpeed != CalcSpeedStage(target)) {
|
||||
bVar8 = TRUE;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA124[entityInfo->speedStage]);
|
||||
}
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &entityInfo->moves.moves[index];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags2 & MOVE_FLAG_EXISTS)) {
|
||||
bVar8 = TRUE;
|
||||
moveUnsealed = TRUE;
|
||||
move->moveFlags2 &= ~(MOVE_FLAG_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
if (bVar8) {
|
||||
if (param_3 != 0) {
|
||||
sub_80420C8(target);
|
||||
}
|
||||
if (moveUnsealed) {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gPtrSealedMoveReleasedMessage);
|
||||
}
|
||||
}
|
||||
else if (param_4 == 0) {
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_81004E8);
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807A0CC(Entity * pokemon, Entity * target)
|
||||
{
|
||||
Move *move;
|
||||
EntityInfo *entityInfo;
|
||||
s32 index;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
ResetMonEntityData(entityInfo,0);
|
||||
entityInfo->perishSongTurns = 0;
|
||||
entityInfo->exposed = FALSE;
|
||||
|
||||
for(index = 0; index < MAX_MON_MOVES; index++)
|
||||
{
|
||||
move = &entityInfo->moves.moves[index];
|
||||
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
|
||||
move->moveFlags2 &= ~(MOVE_FLAG_EXISTS);
|
||||
}
|
||||
}
|
||||
EntityUpdateStatusSprites(target);
|
||||
};
|
||||
}
|
||||
|
||||
void EndSleepClassStatus(Entity * pokemon, Entity * target, bool8 param_3, bool8 param_4)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
bool8 isAsleep;
|
||||
|
||||
isAsleep = FALSE;
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->sleepClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 6:
|
||||
break;
|
||||
case STATUS_SLEEP:
|
||||
isAsleep = TRUE;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA6E8);
|
||||
break;
|
||||
case STATUS_SLEEPLESS:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA708);
|
||||
break;
|
||||
case STATUS_NIGHTMARE:
|
||||
isAsleep = TRUE;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA70C);
|
||||
if (param_4) {
|
||||
DealDamageToEntity(target,gNightmareDmgValue,8,0x20f);
|
||||
}
|
||||
break;
|
||||
case STATUS_NAPPING:
|
||||
isAsleep = TRUE;
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA710);
|
||||
HealTargetHP(pokemon,target,gNappingHpHealValue, 0, FALSE);
|
||||
entityInfo->sleepClassStatus.status = 0;
|
||||
sub_8079F20(pokemon,target,1,1);
|
||||
break;
|
||||
case STATUS_YAWNING:
|
||||
if (param_3) {
|
||||
entityInfo->sleepClassStatus.status = STATUS_NONE;
|
||||
SleepStatusTarget(pokemon,target,CalculateStatusTurns(target, gSleepFromYawnTurnRange, TRUE) + 1, TRUE);
|
||||
return;
|
||||
}
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA734);
|
||||
break;
|
||||
}
|
||||
entityInfo->sleepClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
if (isAsleep) {
|
||||
sub_806CE68(target,8);
|
||||
}
|
||||
}
|
||||
|
||||
void EndBurnClassStatus(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->burnClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 5:
|
||||
break;
|
||||
case STATUS_POISONED:
|
||||
case STATUS_BADLY_POISONED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA8A8);
|
||||
break;
|
||||
case STATUS_PARALYSIS:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA868);
|
||||
break;
|
||||
case STATUS_BURN:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA888);
|
||||
break;
|
||||
|
||||
}
|
||||
entityInfo->burnClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
void EndFrozenClassStatus(Entity * pokemon, Entity *target)
|
||||
{
|
||||
bool8 isFrozen;
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
isFrozen = FALSE;
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->frozenClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 8:
|
||||
break;
|
||||
case STATUS_FROZEN:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA8BC);
|
||||
isFrozen = TRUE;
|
||||
break;
|
||||
case STATUS_CONSTRICTION:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA820);
|
||||
break;
|
||||
case STATUS_SHADOW_HOLD:
|
||||
case STATUS_INGRAIN:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA824);
|
||||
break;
|
||||
case STATUS_WRAP:
|
||||
case STATUS_WRAPPED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA81C);
|
||||
sub_8076CB4(entityInfo->unk9C);
|
||||
break;
|
||||
case STATUS_PETRIFIED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target, gPtrMonNoLongerPetrifiedMessage);
|
||||
break;
|
||||
}
|
||||
entityInfo->frozenClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
if (isFrozen) {
|
||||
sub_8042A74(target);
|
||||
}
|
||||
}
|
||||
|
||||
void EndCringeClassStatus(Entity * pokemon, Entity *target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->cringeClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 8:
|
||||
break;
|
||||
case STATUS_CONFUSED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA800);
|
||||
break;
|
||||
case STATUS_COWERING:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA97C);
|
||||
break;
|
||||
case STATUS_TAUNTED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA9DC);
|
||||
break;
|
||||
case STATUS_PAUSED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAC38);
|
||||
break;
|
||||
case STATUS_INFATUATED:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAB90);
|
||||
break;
|
||||
case STATUS_ENCORE:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FAAAC);
|
||||
break;
|
||||
case STATUS_CRINGE:
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target, gPtrMonNoLongerCringingMessage);
|
||||
break;
|
||||
}
|
||||
entityInfo->cringeClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
CalcSpeedStage(target);
|
||||
}
|
||||
|
||||
void EndReflectClassStatus(Entity * pokemon, Entity *target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->reflectClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 0xF:
|
||||
break;
|
||||
case STATUS_REFLECT:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA638);
|
||||
break;
|
||||
case STATUS_SAFEGUARD:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA69C);
|
||||
break;
|
||||
case STATUS_LIGHT_SCREEN:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA658);
|
||||
break;
|
||||
case STATUS_COUNTER:
|
||||
case STATUS_MINI_COUNTER:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA67C);
|
||||
break;
|
||||
case STATUS_MAGIC_COAT:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA6BC);
|
||||
break;
|
||||
case STATUS_WISH:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA6D4);
|
||||
break;
|
||||
case STATUS_PROTECT:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA9C0);
|
||||
break;
|
||||
case STATUS_MIRROR_COAT:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAA68);
|
||||
break;
|
||||
case STATUS_ENDURING:
|
||||
LogMessageByIdWithPopupCheckUser(target, gPtrMonStoppedEnduringMessage);
|
||||
break;
|
||||
case STATUS_MIRROR_MOVE:
|
||||
LogMessageByIdWithPopupCheckUser(target,gPtrMonMirrorMoveFadedMessage);
|
||||
break;
|
||||
case STATUS_CONVERSION2:
|
||||
LogMessageByIdWithPopupCheckUser(target, gPtrMonConversion2FailedMessage);
|
||||
break;
|
||||
case STATUS_VITAL_THROW:
|
||||
LogMessageByIdWithPopupCheckUser(target, gPtrMonGaveUpVitalThrowMessage);
|
||||
break;
|
||||
case STATUS_MIST:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAB40);
|
||||
break;
|
||||
}
|
||||
entityInfo->reflectClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
void EndCurseClassStatus(Entity * pokemon, Entity * target, u8 curseClassStatus)
|
||||
{
|
||||
u32 uVar3;
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->curseClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 4:
|
||||
break;
|
||||
case STATUS_CURSED:
|
||||
if (curseClassStatus != STATUS_CURSED) {
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA7BC);
|
||||
}
|
||||
break;
|
||||
case STATUS_SNATCH:
|
||||
if (curseClassStatus != STATUS_SNATCH) {
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA7DC);
|
||||
}
|
||||
gDungeon->snatchPokemon = NULL;
|
||||
gDungeon->unk17B3C = 0;
|
||||
break;
|
||||
case STATUS_DECOY:
|
||||
entityInfo->curseClassStatus.status = STATUS_NONE;
|
||||
uVar3 = sub_806CEBC(target);
|
||||
sub_806CCB4(target,uVar3);
|
||||
gDungeon->decoyIsActive = FALSE;
|
||||
if (curseClassStatus != STATUS_DECOY) {
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA9A0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
entityInfo->curseClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void EndLeechSeedClassStatus(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->leechSeedClassStatus.status)
|
||||
{
|
||||
case STATUS_NONE:
|
||||
break;
|
||||
case STATUS_LEECH_SEED:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA79C);
|
||||
break;
|
||||
case STATUS_DESTINY_BOND:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAA8C);
|
||||
break;
|
||||
}
|
||||
entityInfo->leechSeedClassStatus.status = STATUS_NONE;
|
||||
entityInfo->leechSeedClassStatus.unk8 = 0xff;
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
|
||||
void SendMoveEndMessage(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo * entityInfo;
|
||||
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->sureShotClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 5:
|
||||
break;
|
||||
case STATUS_SURE_SHOT:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA8E0);
|
||||
break;
|
||||
case STATUS_WHIFFER:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA90C);
|
||||
break;
|
||||
case STATUS_SET_DAMAGE:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA934);
|
||||
break;
|
||||
case STATUS_FOCUS_ENERGY:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA95C);
|
||||
break;
|
||||
}
|
||||
entityInfo->sureShotClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
void SendTransformEndMessage(Entity * pokemon, Entity *target)
|
||||
{
|
||||
bool8 isInvisible;
|
||||
EntityInfo *entityInfo;
|
||||
u32 uVar3;
|
||||
|
||||
isInvisible = FALSE;
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->invisibleClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 4:
|
||||
break;
|
||||
case STATUS_INVISIBLE:
|
||||
isInvisible = TRUE;
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FA9F4);
|
||||
break;
|
||||
case STATUS_MOBILE:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FABBC);
|
||||
break;
|
||||
case STATUS_TRANSFORMED:
|
||||
entityInfo->apparentID = GetMonsterApparentID(target, entityInfo->id);
|
||||
target->axObj.spriteFile = GetSpriteData(entityInfo->apparentID);
|
||||
uVar3 = sub_806CEBC(target);
|
||||
sub_806CCB4(target,uVar3);
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAB6C);
|
||||
break;
|
||||
}
|
||||
entityInfo->invisibleClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
if (isInvisible) {
|
||||
sub_807EC28(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void SendEyesightEndMessage(Entity * pokemon,Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->blinkerClassStatus.status) {
|
||||
case STATUS_NONE:
|
||||
case 4:
|
||||
break;
|
||||
case STATUS_BLINKER:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAA0C);
|
||||
break;
|
||||
case STATUS_CROSS_EYED:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAA2C);
|
||||
break;
|
||||
case STATUS_EYEDROPS:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FAA48);
|
||||
break;
|
||||
}
|
||||
entityInfo->blinkerClassStatus.status = STATUS_NONE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
if (entityInfo->isTeamLeader) {
|
||||
DungeonRunFrameActions(0x31);
|
||||
sub_8049ED4();
|
||||
ShowWholeRevealedDungeonMap();
|
||||
}
|
||||
}
|
||||
|
||||
void SendMuzzledEndMessage(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (!EntityIsValid(target)) {
|
||||
return;
|
||||
}
|
||||
entityInfo = GetEntInfo(target);
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
switch(entityInfo->muzzled.muzzled) {
|
||||
case FALSE:
|
||||
case 2:
|
||||
break;
|
||||
case TRUE:
|
||||
LogMessageByIdWithPopupCheckUser(target,gUnknown_80FABC0);
|
||||
break;
|
||||
}
|
||||
entityInfo->muzzled.muzzled = FALSE;
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
|
||||
bool8 TrySendImmobilizeSleepEndMsg(Entity * pokemon, Entity * target)
|
||||
{
|
||||
EntityInfo *entityInfo = GetEntInfo(target);
|
||||
bool32 msg = FALSE;
|
||||
|
||||
if (entityInfo->frozenClassStatus.status == STATUS_PETRIFIED) {
|
||||
EndFrozenClassStatus(pokemon, target);
|
||||
msg = TRUE;
|
||||
}
|
||||
if (entityInfo->sleepClassStatus.status == STATUS_SLEEP && entityInfo->sleepClassStatus.turns == 0x7f) {
|
||||
EndSleepClassStatus(pokemon,target, FALSE, TRUE);
|
||||
msg = TRUE;
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
void WakeUpPokemon(Entity * pokemon)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
entityInfo = GetEntInfo(pokemon);
|
||||
entityInfo->sleepClassStatus.status = STATUS_NONE;
|
||||
entityInfo->sleepClassStatus.turns = 0;
|
||||
sub_806A898(pokemon, 1, 1);
|
||||
EntityUpdateStatusSprites(pokemon);
|
||||
}
|
||||
|
||||
void SendThawedMessage(Entity *pokemon, Entity *target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
|
||||
if (EntityIsValid(target)) {
|
||||
entityInfo = GetEntInfo(target);
|
||||
if (entityInfo->frozenClassStatus.status == STATUS_FROZEN) {
|
||||
entityInfo->frozenClassStatus.status = STATUS_NONE;
|
||||
entityInfo->frozenClassStatus.turns = 0;
|
||||
entityInfo->frozenClassStatus.damageCountdown = 0;
|
||||
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
|
||||
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FA8BC); // $m0 thawed out!
|
||||
EntityUpdateStatusSprites(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user