more decomp work

This commit is contained in:
Seth Barberee 2024-04-22 15:23:03 -07:00
parent 9b173ac970
commit b3c617dd7e
22 changed files with 301 additions and 343 deletions

View File

@ -5,123 +5,6 @@
.text
thumb_func_start sub_80819F0
sub_80819F0:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8082FA8
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_80830B4
ldrb r1, [r4, 0x2]
adds r0, r5, 0
bl sub_80830B4
ldrb r1, [r4, 0x3]
adds r0, r5, 0
bl sub_8083060
ldrb r1, [r4, 0x4]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80819F0
thumb_func_start sub_8081A24
sub_8081A24:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8082FA8
ldr r1, [r4, 0x4]
adds r0, r5, 0
bl sub_8083078
ldrb r1, [r4, 0x8]
adds r0, r5, 0
bl sub_8083060
ldrb r1, [r4, 0x9]
adds r0, r5, 0
bl sub_8083060
ldrb r1, [r4, 0xA]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081A24
thumb_func_start sub_8081A58
sub_8081A58:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8082FA8
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081A58
thumb_func_start sub_8081A74
sub_8081A74:
push {lr}
movs r2, 0x1
bl sub_8082FA8
pop {r0}
bx r0
thumb_func_end sub_8081A74
thumb_func_start sub_8081A80
sub_8081A80:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8082FA8
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081A80
thumb_func_start sub_8081A9C
sub_8081A9C:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8082FA8
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081A9C
thumb_func_start sub_8081AB8
sub_8081AB8:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8082FA8
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081AB8
thumb_func_start sub_8081AD4
sub_8081AD4:
push {r4,r5,lr}

View File

@ -107,6 +107,55 @@ typedef struct Protection
/* 0x1 */ u8 protectionStatusTurns;
} Protection;
typedef struct Waiting
{
/* 0xC8 */ u8 waitingStatus;
/* 0xC9 */ bool8 enemyDecoy; // True if the Pokémon is a decoy and a wild Pokémon (i.e., not an allied Pokémon).
u8 unkCA;
/* 0xCB */ u8 waitingStatusTurns;
/* 0xCC */ u8 curseDamageCountdown;
} Waiting;
typedef struct Linked
{
/* 0xD0 */ u8 linkedStatus;
/* 0xD4 */ u32 unkD4;
/* 0xD8 */ u8 unkD8;
/* 0xD9 */ u8 linkedStatusTurns;
/* 0xDA */ u8 linkedStatusDamageCountdown;
} Linked;
typedef struct MoveStatus
{
/* 0xDC */ u8 moveStatus;
/* 0xDD */ u8 moveStatusTurns;
} MoveStatus;
typedef struct ItemStatus
{
/* 0xE0 */ u8 itemStatus;
} ItemStatus;
typedef struct TransformStatus
{
/* 0xE4 */ u8 transformStatus;
/* 0xE5 */ u8 transformStatusTurns;
} TransformStatus;
typedef struct EyesightStatus
{
/* 0xE8 */ u8 eyesightStatus;
/* 0xE9 */ u8 eyesightStatusTurns;
} EyesightStatus;
typedef struct Muzzled
{
/* 0xEC */ bool8 muzzled;
/* 0xED */ u8 muzzledTurns;
} Muzzled;
// size: 0x208
typedef struct EntityInfo
{
@ -175,34 +224,13 @@ typedef struct EntityInfo
/* 0xBC */ Volatile Volatile;
/* 0xC0 */ Charging charging;
/* 0xC4 */ Protection protection;
/* 0xC8 */ u8 waitingStatus;
/* 0xC9 */ bool8 enemyDecoy; // True if the Pokémon is a decoy and a wild Pokémon (i.e., not an allied Pokémon).
u8 unkCA;
/* 0xCB */ u8 waitingStatusTurns;
/* 0xCC */ u8 curseDamageCountdown;
u8 fillCD[0xD0 - 0xCD];
/* 0xD0 */ u8 linkedStatus;
u8 fillD1[0xD4 - 0xD1];
/* 0xD4 */ u32 unkD4;
/* 0xD8 */ u8 unkD8;
/* 0xD9 */ u8 linkedStatusTurns;
/* 0xDA */ u8 linkedStatusDamageCountdown;
u8 fillDB;
/* 0xDC */ u8 moveStatus;
/* 0xDD */ u8 moveStatusTurns;
u8 fillDE[0xE0 - 0xDE];
/* 0xE0 */ u8 itemStatus;
u8 fillE1[0xE4 - 0xE1];
/* 0xE4 */ u8 transformStatus;
/* 0xE5 */ u8 transformStatusTurns;
u8 fillE6[0xE8 - 0xE6];
/* 0xE8 */ u8 eyesightStatus;
/* 0xE9 */ u8 eyesightStatusTurns;
/* 0xEA */ u8 unkEA;
u8 fillEB;
/* 0xEC */ bool8 muzzled;
/* 0xED */ u8 muzzledTurns;
u8 fillEE[0xF0 - 0xEE];
/* 0xC8 */ Waiting waitingStruct;
/* 0xD0 */ Linked linked;
/* 0xDC */ MoveStatus moveStatus;
/* 0xE0 */ ItemStatus itemStatus;
/* 0xE4 */ TransformStatus transformStatus;
/* 0xE8 */ EyesightStatus eyesightStatus;
/* 0xEC */ Muzzled muzzled;
/* 0xF0 */ bool8 powerEars;
/* 0xF1 */ bool8 scanning;
/* 0xF2 */ bool8 stairSpotter;

View File

@ -218,13 +218,13 @@ void EntityUpdateStatusSprites(Entity *entity)
gStatusSpriteMasks_VolatileStatus[entityInfo->Volatile.volatileStatus] |
gStatusSpriteMasks_ChargingStatus[entityInfo->charging.chargingStatus] |
gStatusSpriteMasks_ProtectionStatus[entityInfo->protection.protectionStatus] |
gStatusSpriteMasks_WaitingStatus[entityInfo->waitingStatus] |
gStatusSpriteMasks_LinkedStatus[entityInfo->linkedStatus] |
gStatusSpriteMasks_MoveStatus[entityInfo->moveStatus] |
gStatusSpriteMasks_ItemStatus[entityInfo->itemStatus] |
gStatusSpriteMasks_TransformStatus[entityInfo->transformStatus] |
gStatusSpriteMasks_EyesightStatus[entityInfo->eyesightStatus] |
gStatusSpriteMasks_MuzzledStatus[entityInfo->muzzled];
gStatusSpriteMasks_WaitingStatus[entityInfo->waitingStruct.waitingStatus] |
gStatusSpriteMasks_LinkedStatus[entityInfo->linked.linkedStatus] |
gStatusSpriteMasks_MoveStatus[entityInfo->moveStatus.moveStatus] |
gStatusSpriteMasks_ItemStatus[entityInfo->itemStatus.itemStatus] |
gStatusSpriteMasks_TransformStatus[entityInfo->transformStatus.transformStatus] |
gStatusSpriteMasks_EyesightStatus[entityInfo->eyesightStatus.eyesightStatus] |
gStatusSpriteMasks_MuzzledStatus[entityInfo->muzzled.muzzled];
if (entityInfo->grudge) {
spriteStatus = spriteStatus | STATUS_SPRITE_GRUDGE;

View File

@ -1103,7 +1103,7 @@ bool8 sub_8048D50(Entity * pokemon, Item *item)
}
else
{
if ((entityInfo->muzzled == TRUE) && (IsEdibleItem(item->id))) {
if ((entityInfo->muzzled.muzzled == TRUE) && (IsEdibleItem(item->id))) {
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
SendMessage(pokemon,*gUnknown_80FDCA4);
return FALSE;

View File

@ -70,7 +70,7 @@ void sub_806CCB4(Entity *entity, u8 a1)
entity->unk6F = 0;
sVar1 = entity->unk68;
if (info->waitingStatus != STATUS_DECOY && !flag)
if (info->waitingStruct.waitingStatus != STATUS_DECOY && !flag)
sub_80053AC(&entity->spriteInfo, entity->sprite, entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE);
else
sub_80053AC(&entity->spriteInfo, sub_80687D0(MONSTER_DECOY), entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE);

View File

@ -67,7 +67,7 @@ void sub_8075708(Entity *entity)
return;
}
tile = GetTileAtEntitySafe(entity);
if (((IQSkillIsEnabled(entity, IQ_SUPER_MOBILE)) && (info->transformStatus != STATUS_MOBILE)) &&
if (((IQSkillIsEnabled(entity, IQ_SUPER_MOBILE)) && (info->transformStatus.transformStatus != STATUS_MOBILE)) &&
(!HasHeldItem(entity, ITEM_MOBILE_SCARF))) {
sub_804AE84(&entity->pos);
}

View File

@ -220,9 +220,9 @@ void MuzzleTarget(Entity *pokemon, Entity *target)
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->muzzled != TRUE) {
entityInfo->muzzled = TRUE;
entityInfo->muzzledTurns = CalculateStatusTurns(target,gUnknown_80F4F1C, TRUE) + 1;
if (entityInfo->muzzled.muzzled != TRUE) {
entityInfo->muzzled.muzzled = TRUE;
entityInfo->muzzled.muzzledTurns = CalculateStatusTurns(target,gUnknown_80F4F1C, TRUE) + 1;
nullsub_86(target);
sub_80522F4(pokemon, target, *gUnknown_80FBF68);
}
@ -250,7 +250,7 @@ void TransformStatusTarget(Entity * pokemon, Entity * target)
entityInfo = target->info;
if (entityInfo->transformStatus == STATUS_TRANSFORMED)
if (entityInfo->transformStatus.transformStatus == STATUS_TRANSFORMED)
sub_80522F4(pokemon, target, *gUnknown_80FBF04);
else {
SetMessageArgument(gAvailablePokemonNames, target, 0);
@ -278,8 +278,8 @@ void TransformStatusTarget(Entity * pokemon, Entity * target)
else {
entityInfo->apparentID = apparentID;
target->sprite = sprite;
entityInfo->transformStatus = STATUS_TRANSFORMED;
entityInfo->transformStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EFC, TRUE) + 1;
entityInfo->transformStatus.transformStatus = STATUS_TRANSFORMED;
entityInfo->transformStatus.transformStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EFC, TRUE) + 1;
sub_806CF98(target);
nullsub_87(target);
sub_806CCB4(target, sub_806CEBC(target));
@ -301,13 +301,13 @@ void MobileStatusTarget(Entity * pokemon, Entity * target)
entityInfo_1 = target->info;
entityInfo = entityInfo_1;
if (entityInfo->transformStatus == STATUS_TRANSFORMED) {
if (entityInfo->transformStatus.transformStatus == STATUS_TRANSFORMED) {
SendTransformEndMessage(pokemon,target);
}
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->transformStatus != STATUS_MOBILE) {
entityInfo->transformStatus = STATUS_MOBILE;
entityInfo->transformStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F04, FALSE) + 1;
if (entityInfo->transformStatus.transformStatus != STATUS_MOBILE) {
entityInfo->transformStatus.transformStatus = STATUS_MOBILE;
entityInfo->transformStatus.transformStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F04, FALSE) + 1;
nullsub_88(target);
sub_80522F4(pokemon,target,*gUnknown_80FBF28);
}
@ -390,9 +390,9 @@ void BlindTarget(Entity *pokemon, Entity *target)
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->eyesightStatus != STATUS_BLINKER) {
entityInfo->eyesightStatus = STATUS_BLINKER;
entityInfo->eyesightStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F08, TRUE) + 1;
if (entityInfo->eyesightStatus.eyesightStatus != STATUS_BLINKER) {
entityInfo->eyesightStatus.eyesightStatus = STATUS_BLINKER;
entityInfo->eyesightStatus.eyesightStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F08, TRUE) + 1;
sub_8041E0C(target);
sub_80522F4(pokemon,target,*gUnknown_80FB7F4);
sub_803E46C(0x31);
@ -417,11 +417,11 @@ void CrossEyeVisionTarget(Entity *pokemon, Entity *target)
{
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->eyesightStatus != STATUS_CROSS_EYED) {
if (entityInfo->eyesightStatus.eyesightStatus != STATUS_CROSS_EYED) {
sub_8041E1C(target);
sub_80522F4(pokemon,target,*gUnknown_80FB834);
entityInfo->eyesightStatus = STATUS_CROSS_EYED;
entityInfo->eyesightStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F0C, TRUE) + 1;
entityInfo->eyesightStatus.eyesightStatus = STATUS_CROSS_EYED;
entityInfo->eyesightStatus.eyesightStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F0C, TRUE) + 1;
sub_803F580(0x1);
sub_8049ED4();
sub_8040A84();
@ -443,9 +443,9 @@ void RestoreVisionTarget(Entity *pokemon, Entity *target)
if (EntityExists(target)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->eyesightStatus != STATUS_EYEDROPS) {
entityInfo->eyesightStatus = STATUS_EYEDROPS;
entityInfo->eyesightStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F10, FALSE) + 1;
if (entityInfo->eyesightStatus.eyesightStatus != STATUS_EYEDROPS) {
entityInfo->eyesightStatus.eyesightStatus = STATUS_EYEDROPS;
entityInfo->eyesightStatus.eyesightStatusTurns = CalculateStatusTurns(target,gUnknown_80F4F10, FALSE) + 1;
sub_8041E3C(target);
sub_80522F4(pokemon,target,*gUnknown_80FB880);
sub_803E46C(0x31);
@ -640,8 +640,8 @@ void LongTossStatusTarget(Entity * pokemon, Entity * target)
entityInfo = target->info;
SetMessageArgument(gUnknown_202DFE8,target,0);
if (entityInfo->itemStatus != STATUS_LONG_TOSS) {
entityInfo->itemStatus = STATUS_LONG_TOSS;
if (entityInfo->itemStatus.itemStatus != STATUS_LONG_TOSS) {
entityInfo->itemStatus.itemStatus = STATUS_LONG_TOSS;
sub_8041EA4(target);
sub_80522F4(pokemon,target,*gUnknown_80FD20C);
}
@ -657,8 +657,8 @@ void PierceStatusTarget(Entity * pokemon, Entity * target)
entityInfo = target->info;
SetMessageArgument(gUnknown_202DFE8,target,0);
if (entityInfo->itemStatus != STATUS_PIERCE) {
entityInfo->itemStatus = STATUS_PIERCE;
if (entityInfo->itemStatus.itemStatus != STATUS_PIERCE) {
entityInfo->itemStatus.itemStatus = STATUS_PIERCE;
sub_8041EB4(target);
sub_80522F4(pokemon,target,*gUnknown_80FD254);
}
@ -1393,7 +1393,7 @@ void SendWaitingEndMessage(Entity * pokemon, Entity * target, u8 waitingStatus)
if (EntityExists(target)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
switch(entityInfo->waitingStatus) {
switch(entityInfo->waitingStruct.waitingStatus) {
case STATUS_NONE:
case 4:
break;
@ -1410,7 +1410,7 @@ void SendWaitingEndMessage(Entity * pokemon, Entity * target, u8 waitingStatus)
gDungeon->unk17B3C = 0;
break;
case STATUS_DECOY:
entityInfo->waitingStatus = STATUS_NONE;
entityInfo->waitingStruct.waitingStatus = STATUS_NONE;
uVar3 = sub_806CEBC(target);
sub_806CCB4(target,uVar3);
gDungeon->decoyActive = FALSE;
@ -1420,7 +1420,7 @@ void SendWaitingEndMessage(Entity * pokemon, Entity * target, u8 waitingStatus)
}
break;
}
entityInfo->waitingStatus = STATUS_NONE;
entityInfo->waitingStruct.waitingStatus = STATUS_NONE;
EntityUpdateStatusSprites(target);
}
}
@ -1432,7 +1432,7 @@ void SendLinkedEndMessage(Entity * pokemon, Entity * target)
if (EntityExists(target)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
switch(entityInfo->linkedStatus)
switch(entityInfo->linked.linkedStatus)
{
case STATUS_NONE:
break;
@ -1443,8 +1443,8 @@ void SendLinkedEndMessage(Entity * pokemon, Entity * target)
SendMessage(target,*gUnknown_80FAA8C);
break;
}
entityInfo->linkedStatus = STATUS_NONE;
entityInfo->unkD8 = 0xff;
entityInfo->linked.linkedStatus = STATUS_NONE;
entityInfo->linked.unkD8 = 0xff;
EntityUpdateStatusSprites(target);
}
}
@ -1458,7 +1458,7 @@ void SendMoveEndMessage(Entity * pokemon, Entity * target)
}
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
switch(entityInfo->moveStatus) {
switch(entityInfo->moveStatus.moveStatus) {
case STATUS_NONE:
case 5:
break;
@ -1475,7 +1475,7 @@ void SendMoveEndMessage(Entity * pokemon, Entity * target)
SendMessage(target,*gUnknown_80FA95C);
break;
}
entityInfo->moveStatus = STATUS_NONE;
entityInfo->moveStatus.moveStatus = STATUS_NONE;
EntityUpdateStatusSprites(target);
}
@ -1491,7 +1491,7 @@ void SendTransformEndMessage(Entity * pokemon, Entity *target)
}
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
switch(entityInfo->transformStatus) {
switch(entityInfo->transformStatus.transformStatus) {
case STATUS_NONE:
case 4:
break;
@ -1510,7 +1510,7 @@ void SendTransformEndMessage(Entity * pokemon, Entity *target)
SendMessage(target,*gUnknown_80FAB6C);
break;
}
entityInfo->transformStatus = STATUS_NONE;
entityInfo->transformStatus.transformStatus = STATUS_NONE;
EntityUpdateStatusSprites(target);
if (isInvisible) {
sub_807EC28(TRUE);
@ -1526,7 +1526,7 @@ void SendEyesightEndMessage(Entity * pokemon,Entity * target)
}
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
switch(entityInfo->eyesightStatus) {
switch(entityInfo->eyesightStatus.eyesightStatus) {
case STATUS_NONE:
case 4:
break;
@ -1540,7 +1540,7 @@ void SendEyesightEndMessage(Entity * pokemon,Entity * target)
SendMessage(target,*gUnknown_80FAA48);
break;
}
entityInfo->eyesightStatus = STATUS_NONE;
entityInfo->eyesightStatus.eyesightStatus = STATUS_NONE;
EntityUpdateStatusSprites(target);
if (entityInfo->isTeamLeader) {
sub_803E46C(0x31);
@ -1558,7 +1558,7 @@ void SendMuzzledEndMessage(Entity * pokemon, Entity * target)
}
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
switch(entityInfo->muzzled) {
switch(entityInfo->muzzled.muzzled) {
case FALSE:
case 2:
break;
@ -1566,7 +1566,7 @@ void SendMuzzledEndMessage(Entity * pokemon, Entity * target)
SendMessage(target,*gUnknown_80FABC0);
break;
}
entityInfo->muzzled = FALSE;
entityInfo->muzzled.muzzled = FALSE;
EntityUpdateStatusSprites(target);
}

View File

@ -110,10 +110,10 @@ void RunMonsterAI(Entity *pokemon, u32 unused)
{
target = gDungeon->allPokemon[i];
if (EntityExists(target) &&
target->info->waitingStatus == STATUS_DECOY &&
target->info->waitingStruct.waitingStatus == STATUS_DECOY &&
CanSeeTarget(pokemon, target))
{
bool8 enemyDecoy = target->info->enemyDecoy;
bool8 enemyDecoy = target->info->waitingStruct.enemyDecoy;
u8 targetingDecoy = TARGETING_DECOY_TEAM;
if (enemyDecoy)
{

View File

@ -363,7 +363,7 @@ s32 AIConsiderMove(struct AIPossibleMove *aiPossibleMove, Entity *pokemon, Move
rangeTargetingFlags == TARGETING_FLAG_TARGET_FRONTAL_CONE ||
rangeTargetingFlags == TARGETING_FLAG_TARGET_AROUND)
{
if (pokemonInfo->eyesightStatus == STATUS_BLINKER)
if (pokemonInfo->eyesightStatus.eyesightStatus == STATUS_BLINKER)
{
u8 direction = pokemonInfo->action.direction;
i = direction; // Fixes a regswap.
@ -792,7 +792,7 @@ bool8 TargetRegularAttack(Entity *pokemon, u32 *targetDir, bool8 checkPetrified)
EntityInfo *pokemonInfo = pokemon->info;
s32 numPotentialTargets = 0;
s32 direction = pokemonInfo->action.direction;
s32 faceTurnLimit = pokemonInfo->eyesightStatus == STATUS_BLINKER ? 1 : 8;
s32 faceTurnLimit = pokemonInfo->eyesightStatus.eyesightStatus == STATUS_BLINKER ? 1 : 8;
s32 i;
s32 potentialAttackTargetDirections[NUM_DIRECTIONS];
s32 potentialAttackTargetWeights[NUM_DIRECTIONS];

View File

@ -202,7 +202,7 @@ u32 EvaluateItem(Entity *targetPokemon, Item *item, u32 itemTargetFlags)
}
break;
case ITEM_ALLURE_SEED:
if (pokemonInfo->eyesightStatus != STATUS_CROSS_EYED)
if (pokemonInfo->eyesightStatus.eyesightStatus != STATUS_CROSS_EYED)
{
if (CanTargetAdjacentPokemon(targetPokemon))
{
@ -265,7 +265,7 @@ u32 EvaluateItem(Entity *targetPokemon, Item *item, u32 itemTargetFlags)
}
break;
case ITEM_BLINKER_SEED:
if (pokemonInfo->eyesightStatus != STATUS_BLINKER)
if (pokemonInfo->eyesightStatus.eyesightStatus != STATUS_BLINKER)
{
if (CanTargetAdjacentPokemon(targetPokemon))
{

View File

@ -364,7 +364,7 @@ void TargetThrownItem(Entity *pokemon, Entity *targetPokemon, Item *item, s32 ta
distanceX = distanceX < 0 ? -distanceX : distanceX;
distanceY = pokemon->pos.y - targetPokemon->pos.y;
distanceY = distanceY < 0 ? -distanceY : distanceY;
if (pokemon->info->itemStatus == STATUS_NONE)
if (pokemon->info->itemStatus.itemStatus == STATUS_NONE)
{
s32 distance = distanceY < distanceX ? distanceX : distanceY;
if (distance > RANGED_ATTACK_RANGE)

View File

@ -100,7 +100,7 @@ Entity* GetLeaderIfVisible(Entity *pokemon)
{
Entity *leader = GetLeader();
if (leader &&
leader->info->waitingStatus != STATUS_DECOY &&
leader->info->waitingStruct.waitingStatus != STATUS_DECOY &&
CanTarget(pokemon, leader, FALSE, FALSE) == TARGET_CAPABILITY_CANNOT_ATTACK &&
CanTargetEntity(pokemon, leader))
{
@ -214,7 +214,7 @@ bool8 sub_8072CF4(Entity *entity)
pos.y = entity->pos.y;
sub_80694C0(entity,pos1.x,pos1.y,0);
sub_8074FB0(entity,(info->action).direction,&pos);
if (((IQSkillIsEnabled(entity, IQ_SUPER_MOBILE)) && (info->transformStatus != STATUS_MOBILE)) &&
if (((IQSkillIsEnabled(entity, IQ_SUPER_MOBILE)) && (info->transformStatus.transformStatus != STATUS_MOBILE)) &&
(!HasHeldItem(entity,ITEM_MOBILE_SCARF))) {
sub_804AE08(&entity->pos);
}

View File

@ -74,7 +74,7 @@ bool8 sub_8070F3C(Entity * pokemon, Position *pos, s32 direction)
(((tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))))) {
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE ||
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE ||
HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
{
terrain = CROSSABLE_TERRAIN_WALL;
@ -137,7 +137,7 @@ bool8 sub_8070F80(Entity * pokemon, s32 direction)
(((tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))))) {
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE ||
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE ||
HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
{
terrain = CROSSABLE_TERRAIN_WALL;
@ -183,7 +183,7 @@ bool8 sub_8071058(Entity * pokemon, s32 direction)
(!tile->monster->info->isNotTeamMember)))) {
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE ||
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE ||
HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
{
terrain = CROSSABLE_TERRAIN_WALL;
@ -230,7 +230,7 @@ bool8 CanAttackInDirection(Entity *pokemon, s32 direction)
{
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE ||
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE ||
HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
{
crossableTerrain = CROSSABLE_TERRAIN_WALL;
@ -282,7 +282,7 @@ bool8 CanAIMonsterMoveInDirection(Entity *pokemon, s32 direction, bool8 *pokemon
if (frontTile->object != NULL &&
IQSkillIsEnabled(pokemon, IQ_TRAP_AVOIDER) &&
GetEntityType(frontTile->object) == ENTITY_TRAP &&
(frontTile->object->isVisible || pokemon->info->eyesightStatus == STATUS_EYEDROPS))
(frontTile->object->isVisible || pokemon->info->eyesightStatus.eyesightStatus == STATUS_EYEDROPS))
{
return FALSE;
}
@ -294,7 +294,7 @@ bool8 CanAIMonsterMoveInDirection(Entity *pokemon, s32 direction, bool8 *pokemon
}
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE ||
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE ||
HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
{
crossableTerrain = CROSSABLE_TERRAIN_WALL;
@ -337,7 +337,7 @@ bool8 IsAtJunction(Entity *pokemon)
u32 crossableTerrain = GetCrossableTerrain(pokemon->info->id);
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE || HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE || HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
{
crossableTerrain = CROSSABLE_TERRAIN_WALL;
}
@ -480,7 +480,7 @@ u8 CanTarget(Entity *pokemon, Entity *targetPokemon, bool8 ignoreInvisible, bool
pokemonInfo->clientType == CLIENT_TYPE_CLIENT ||
targetData->clientType == CLIENT_TYPE_CLIENT ||
(checkPetrified && !pokemonInfo->isNotTeamMember && targetData->immobilize.immobilizeStatus == STATUS_PETRIFIED) ||
(!ignoreInvisible && targetData->transformStatus == STATUS_INVISIBLE && !CanSeeInvisibleMonsters(pokemon)))
(!ignoreInvisible && targetData->transformStatus.transformStatus == STATUS_INVISIBLE && !CanSeeInvisibleMonsters(pokemon)))
{
return TARGET_CAPABILITY_CAN_ATTACK_NOT_TARGET;
}
@ -519,7 +519,7 @@ u8 CanTarget(Entity *pokemon, Entity *targetPokemon, bool8 ignoreInvisible, bool
targetIsEnemy = targetData->isNotTeamMember ? TRUE : FALSE;
}
targetIsDecoy = FALSE;
if (targetData->waitingStatus == STATUS_DECOY)
if (targetData->waitingStruct.waitingStatus == STATUS_DECOY)
{
targetIsDecoy = TRUE;
}

View File

@ -21,7 +21,7 @@ bool8 CannotMove(Entity *pokemon, bool8 checkBlinker)
{
EntityInfo *pokemonInfo = pokemon->info;
if ((checkBlinker && pokemonInfo->eyesightStatus == STATUS_BLINKER)
if ((checkBlinker && pokemonInfo->eyesightStatus.eyesightStatus == STATUS_BLINKER)
|| pokemonInfo->sleep.sleep == STATUS_SLEEP
|| pokemonInfo->sleep.sleep == STATUS_NAPPING
|| pokemonInfo->sleep.sleep == STATUS_NIGHTMARE
@ -44,7 +44,7 @@ bool8 sub_8070BC0(Entity* entity)
|| entityInfo->sleep.sleep == STATUS_YAWNING
|| entityInfo->sleep.sleep == STATUS_NIGHTMARE
|| ShouldMonsterRunAway(entity)
|| entityInfo->muzzled == TRUE
|| entityInfo->muzzled.muzzled == TRUE
|| entityInfo->immobilize.immobilizeStatus == STATUS_PETRIFIED
|| entityInfo->immobilize.immobilizeStatus == STATUS_FROZEN)
return FALSE;
@ -53,7 +53,7 @@ bool8 sub_8070BC0(Entity* entity)
return FALSE;
if (entityInfo->sleep.sleep == STATUS_SLEEP)
return FALSE;
if (entityInfo->transformStatus == STATUS_INVISIBLE
if (entityInfo->transformStatus.transformStatus == STATUS_INVISIBLE
|| entityInfo->sleep.sleep == STATUS_NAPPING)
return FALSE;
if (entityInfo->Volatile.volatileStatus == STATUS_CRINGE)
@ -61,11 +61,11 @@ bool8 sub_8070BC0(Entity* entity)
if (entityInfo->immobilize.immobilizeStatus == STATUS_WRAP)
return FALSE;
if (entityInfo->immobilize.immobilizeStatus == STATUS_WRAPPED
|| entityInfo->eyesightStatus == STATUS_CROSS_EYED)
|| entityInfo->eyesightStatus.eyesightStatus == STATUS_CROSS_EYED)
return FALSE;
if (entityInfo->waitingStatus == STATUS_DECOY)
if (entityInfo->waitingStruct.waitingStatus == STATUS_DECOY)
return FALSE;
if (entityInfo->eyesightStatus == STATUS_BLINKER)
if (entityInfo->eyesightStatus.eyesightStatus == STATUS_BLINKER)
return FALSE;
if (entityInfo->Volatile.volatileStatus != STATUS_INFATUATED
&& entityInfo->Volatile.volatileStatus != STATUS_PAUSED)
@ -149,7 +149,7 @@ bool8 CanMoveInDirection(Entity *pokemon, u32 direction)
if (!IsCurrentFixedRoomBossFight())
{
if (pokemon->info->transformStatus == STATUS_MOBILE || HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
if (pokemon->info->transformStatus.transformStatus == STATUS_MOBILE || HasHeldItem(pokemon, ITEM_MOBILE_SCARF))
crossableTerrain = CROSSABLE_TERRAIN_WALL;
else if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER))
crossableTerrain = CROSSABLE_TERRAIN_CREVICE;

View File

@ -77,7 +77,7 @@ u8 sub_80703A0(Entity *pokemon, Position *pos)
tile = GetTile(pos->x,pos->y);
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y) && (tile->monster == NULL) && ((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)) {
if ((IsCurrentFixedRoomBossFight()) || ((entityInfo->transformStatus != STATUS_MOBILE && (!HasHeldItem(pokemon, ITEM_MOBILE_SCARF))))) {
if ((IsCurrentFixedRoomBossFight()) || ((entityInfo->transformStatus.transformStatus != STATUS_MOBILE && (!HasHeldItem(pokemon, ITEM_MOBILE_SCARF))))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
@ -108,7 +108,7 @@ bool8 CanCrossWalls(Entity *pokemon)
{
EntityInfo *pokemonInfo = pokemon->info;
EntityInfo *pokemonInfo2 = pokemonInfo;
if (pokemonInfo2->transformStatus == STATUS_MOBILE)
if (pokemonInfo2->transformStatus.transformStatus == STATUS_MOBILE)
{
return TRUE;
}
@ -135,7 +135,7 @@ bool8 sub_807049C(Entity *pokemon, Position *pos)
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y && ((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)) &&
(tile->monster == NULL || (GetEntityType(tile->monster) == ENTITY_MONSTER))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->transformStatus != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->transformStatus.transformStatus != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
@ -219,7 +219,7 @@ bool8 sub_80705F0(Entity *pokemon, Position *pos)
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y && ((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)) &&
((tile->monster == NULL) || ((GetEntityType(tile->monster) == ENTITY_MONSTER)))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->transformStatus != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->transformStatus.transformStatus != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {
@ -257,7 +257,7 @@ bool8 sub_80706A4(Entity *pokemon, Position *pos)
if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) &&
(DUNGEON_MAX_SIZE_Y > pos->y && ((tile->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) == 0)) &&
((tile->monster == NULL) || ((GetEntityType(tile->monster) == ENTITY_MONSTER) && (tile->monster->info == entityInfo)))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->transformStatus != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
if (IsCurrentFixedRoomBossFight() || (entityInfo->transformStatus.transformStatus != STATUS_MOBILE && !HasHeldItem(pokemon, ITEM_MOBILE_SCARF))) {
crossableTerrain = GetCrossableTerrain(entityInfo->id);
tileFlags = tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (IQSkillIsEnabled(pokemon, IQ_ALL_TERRAIN_HIKER)) {

View File

@ -128,7 +128,7 @@ bool8 MonsterIsType(Entity *pokemon, u8 type)
bool8 CanSeeInvisibleMonsters(Entity *pokemon)
{
EntityInfo *pokemonInfo = pokemon->info;
if (pokemonInfo->eyesightStatus != STATUS_EYEDROPS)
if (pokemonInfo->eyesightStatus.eyesightStatus != STATUS_EYEDROPS)
{
if (!HasHeldItem(pokemon, ITEM_GOGGLE_SPECS))
return FALSE;

View File

@ -16,16 +16,16 @@ bool8 CanSeeTarget(Entity *entity, Entity *targetEntity)
{
if (entity->type == ENTITY_MONSTER)
{
if (!CanSeeInvisibleMonsters(entity) && targetEntity->info->transformStatus == STATUS_INVISIBLE)
if (!CanSeeInvisibleMonsters(entity) && targetEntity->info->transformStatus.transformStatus == STATUS_INVISIBLE)
{
return FALSE;
}
if (entity->info->eyesightStatus == STATUS_BLINKER)
if (entity->info->eyesightStatus.eyesightStatus == STATUS_BLINKER)
{
return FALSE;
}
}
else if (targetEntity->info->transformStatus == STATUS_INVISIBLE)
else if (targetEntity->info->transformStatus.transformStatus == STATUS_INVISIBLE)
{
return FALSE;
}
@ -43,16 +43,16 @@ bool8 CanTargetEntity(Entity *entity, Entity *targetEntity)
{
if (entity->type == ENTITY_MONSTER)
{
if (!CanSeeInvisibleMonsters(entity) && targetEntity->info->transformStatus == STATUS_INVISIBLE)
if (!CanSeeInvisibleMonsters(entity) && targetEntity->info->transformStatus.transformStatus == STATUS_INVISIBLE)
{
return FALSE;
}
if (entity->info->eyesightStatus == STATUS_BLINKER)
if (entity->info->eyesightStatus.eyesightStatus == STATUS_BLINKER)
{
return FALSE;
}
}
else if (targetEntity->info->transformStatus == STATUS_INVISIBLE)
else if (targetEntity->info->transformStatus.transformStatus == STATUS_INVISIBLE)
{
return FALSE;
}

View File

@ -181,7 +181,7 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
}
case MOVE_LOCK_ON:
case MOVE_MIND_READER:
if (pokemonInfo->moveStatus == STATUS_SURE_SHOT)
if (pokemonInfo->moveStatus.moveStatus == STATUS_SURE_SHOT)
{
return FALSE;
}
@ -242,7 +242,7 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
break;
case MOVE_DOOM_DESIRE:
case MOVE_FUTURE_SIGHT:
if (pokemonInfo->moveStatus == STATUS_SET_DAMAGE)
if (pokemonInfo->moveStatus.moveStatus == STATUS_SET_DAMAGE)
{
return FALSE;
}
@ -266,7 +266,7 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
}
break;
case MOVE_DESTINY_BOND:
if (pokemonInfo->linkedStatus == STATUS_DESTINY_BOND)
if (pokemonInfo->linked.linkedStatus == STATUS_DESTINY_BOND)
{
return FALSE;
}
@ -327,13 +327,13 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
}
break;
case MOVE_INVISIFY:
if (pokemonInfo->transformStatus == STATUS_INVISIBLE)
if (pokemonInfo->transformStatus.transformStatus == STATUS_INVISIBLE)
{
return FALSE;
}
break;
case MOVE_FOCUS_ENERGY:
if (pokemonInfo->moveStatus == STATUS_FOCUS_ENERGY)
if (pokemonInfo->moveStatus.moveStatus == STATUS_FOCUS_ENERGY)
{
return FALSE;
}
@ -438,7 +438,7 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
}
break;
case MOVE_TRANSFORM:
if (pokemonInfo->transformStatus == STATUS_TRANSFORMED)
if (pokemonInfo->transformStatus.transformStatus == STATUS_TRANSFORMED)
{
return FALSE;
}
@ -461,7 +461,7 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
}
break;
case MOVE_SNATCH:
if (pokemonInfo->waitingStatus == STATUS_SNATCH)
if (pokemonInfo->waitingStruct.waitingStatus == STATUS_SNATCH)
{
return FALSE;
}
@ -646,7 +646,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
}
break;
case MOVE_SMOKESCREEN:
if (targetData->moveStatus == STATUS_WHIFFER)
if (targetData->moveStatus.moveStatus == STATUS_WHIFFER)
{
return FALSE;
}
@ -809,7 +809,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
case MOVE_CURSE:
if (MonsterIsType(user, TYPE_GHOST))
{
if (targetData->waitingStatus == STATUS_CURSED)
if (targetData->waitingStruct.waitingStatus == STATUS_CURSED)
{
return FALSE;
}
@ -837,7 +837,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
}
break;
case MOVE_LEECH_SEED:
if (targetData->linkedStatus == STATUS_LEECH_SEED)
if (targetData->linked.linkedStatus == STATUS_LEECH_SEED)
{
return FALSE;
}

View File

@ -796,16 +796,16 @@ void HandleLeechSeed(Entity * pokemon, Entity * target, bool8 displayMessage)
}
else
{
switch(entityInfo->linkedStatus)
switch(entityInfo->linked.linkedStatus)
{
case STATUS_DESTINY_BOND:
sub_80522F4(pokemon,target,*gUnknown_80FAA8C);
default:
entityInfo->linkedStatus = STATUS_LEECH_SEED;
entityInfo->linkedStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EB0, TRUE) + 1;
entityInfo->linkedStatusDamageCountdown = 0;
entityInfo->linked.linkedStatus = STATUS_LEECH_SEED;
entityInfo->linked.linkedStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EB0, TRUE) + 1;
entityInfo->linked.linkedStatusDamageCountdown = 0;
nullsub_78(target);
entityInfo->unkD8 = 0xff;
entityInfo->linked.unkD8 = 0xff;
break;
case STATUS_LEECH_SEED:
sub_80522F4(pokemon,target,*gUnknown_80FAE7C);
@ -814,9 +814,9 @@ void HandleLeechSeed(Entity * pokemon, Entity * target, bool8 displayMessage)
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
if (pokemon == gDungeon->allPokemon[index]) {
entityInfo->unkD8 = index;
entityInfo->linked.unkD8 = index;
entityInfo2 = pokemon->info;
entityInfo->unkD4 = entityInfo2->unk98;
entityInfo->linked.unkD4 = entityInfo2->unk98;
}
}
sub_80522F4(pokemon,target,*gUnknown_80FAE58);
@ -839,11 +839,11 @@ void sub_8078084(Entity * pokemon)
target = gDungeon->allPokemon[index];
if (EntityExists(target)) {
entityInfo2 = target->info;
if((u8)(entityInfo2->linkedStatus - 1) <= 1)
if((u8)(entityInfo2->linked.linkedStatus - 1) <= 1)
{
if(entityInfo2->unkD4 == entityInfo->unk98)
if(entityInfo2->linked.unkD4 == entityInfo->unk98)
{
entityInfo2->linkedStatus = STATUS_NONE;
entityInfo2->linked.linkedStatus = STATUS_NONE;
EntityUpdateStatusSprites(target);
}
}
@ -863,17 +863,17 @@ void DestinyBondStatusTarget(Entity * pokemon, Entity * target)
(GetEntityType(target) == ENTITY_MONSTER)) {
entityInfo = pokemon->info;
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
linkedStatus = &entityInfo->linkedStatus;
if (entityInfo->linkedStatus != STATUS_DESTINY_BOND)
linkedStatus = &entityInfo->linked.linkedStatus;
if (entityInfo->linked.linkedStatus != STATUS_DESTINY_BOND)
{
if (entityInfo->linkedStatus == STATUS_LEECH_SEED)
if (entityInfo->linked.linkedStatus == STATUS_LEECH_SEED)
sub_80522F4(pokemon,target,*gUnknown_80FA79C);
zero = 0;
*linkedStatus = STATUS_DESTINY_BOND;
entityInfo->linkedStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EF0,TRUE) + 1;
entityInfo->linkedStatusDamageCountdown = zero;
entityInfo->linked.linkedStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EF0,TRUE) + 1;
entityInfo->linked.linkedStatusDamageCountdown = zero;
nullsub_74(target);
entityInfo->unkD8 = 0xff;
entityInfo->linked.unkD8 = 0xff;
}
else
{
@ -883,9 +883,9 @@ void DestinyBondStatusTarget(Entity * pokemon, Entity * target)
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
if (target == gDungeon->allPokemon[index]) {
entityInfo->unkD8 = index;
entityInfo->linked.unkD8 = index;
entityInfo2 = target->info;
entityInfo->unkD4 = entityInfo2->unk98;
entityInfo->linked.unkD4 = entityInfo2->unk98;
}
}
sub_80522F4(pokemon,target,*gUnknown_80FBB4C);
@ -900,9 +900,9 @@ void SureShotStatusTarget(Entity *pokemon, Entity * target, s32 turns)
if (EntityExists(target)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->moveStatus != STATUS_SURE_SHOT) {
entityInfo->moveStatus = STATUS_SURE_SHOT;
entityInfo->moveStatusTurns = turns + 1;
if (entityInfo->moveStatus.moveStatus != STATUS_SURE_SHOT) {
entityInfo->moveStatus.moveStatus = STATUS_SURE_SHOT;
entityInfo->moveStatus.moveStatusTurns = turns + 1;
sub_8041CDC(target);
sub_80522F4(pokemon,target,*gUnknown_80FB73C);
}
@ -920,9 +920,9 @@ void WhifferStatusTarget(Entity *pokemon, Entity * target, s32 turns)
if (EntityExists(target) && !HasSafeguardStatus(pokemon, target, TRUE)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->moveStatus != STATUS_WHIFFER) {
entityInfo->moveStatus = STATUS_WHIFFER;
entityInfo->moveStatusTurns = turns + 1;
if (entityInfo->moveStatus.moveStatus != STATUS_WHIFFER) {
entityInfo->moveStatus.moveStatus = STATUS_WHIFFER;
entityInfo->moveStatus.moveStatusTurns = turns + 1;
sub_8041CEC(target);
sub_80522F4(pokemon,target,*gUnknown_80FB780);
}
@ -940,9 +940,9 @@ void FixedDamageStatusTarget(Entity *pokemon, Entity * target)
if (EntityExists(target)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->moveStatus != STATUS_SET_DAMAGE) {
entityInfo->moveStatus = STATUS_SET_DAMAGE;
entityInfo->moveStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EC4, FALSE) + 1;
if (entityInfo->moveStatus.moveStatus != STATUS_SET_DAMAGE) {
entityInfo->moveStatus.moveStatus = STATUS_SET_DAMAGE;
entityInfo->moveStatus.moveStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EC4, FALSE) + 1;
nullsub_79(target);
sub_80522F4(pokemon,target,*gUnknown_80FB8BC);
}
@ -960,9 +960,9 @@ void FocusEnergyStatusTarget(Entity *pokemon, Entity * target)
if (EntityExists(target)) {
entityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityInfo->moveStatus != STATUS_FOCUS_ENERGY) {
entityInfo->moveStatus = STATUS_FOCUS_ENERGY;
entityInfo->moveStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EC8, FALSE) + 1;
if (entityInfo->moveStatus.moveStatus != STATUS_FOCUS_ENERGY) {
entityInfo->moveStatus.moveStatus = STATUS_FOCUS_ENERGY;
entityInfo->moveStatus.moveStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EC8, FALSE) + 1;
nullsub_80(target);
sub_80522F4(pokemon,target,*gUnknown_80FB900);
}
@ -985,7 +985,7 @@ void sub_80783C4(Entity * pokemon, Entity * target, u8 param_3)
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon, target, TRUE))) {
targetEntityInfo = target->info;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (targetEntityInfo->waitingStatus == STATUS_DECOY) {
if (targetEntityInfo->waitingStruct.waitingStatus == STATUS_DECOY) {
sub_80522F4(pokemon,target,*gUnknown_80FB994);
}
else {
@ -993,21 +993,21 @@ void sub_80783C4(Entity * pokemon, Entity * target, u8 param_3)
{
entity = gDungeon->allPokemon[index];
if ((((EntityExists(entity)) && (target != entity)) &&
(u8)(entity->info->waitingStatus - 2U) < 2)) {
(u8)(entity->info->waitingStruct.waitingStatus - 2U) < 2)) {
SendWaitingEndMessage(pokemon,entity,STATUS_NONE);
sub_803E46C(0x2a);
}
}
sub_8041D38(target);
SetMessageArgument(gAvailablePokemonNames,target,0);
if (targetEntityInfo->waitingStatus != STATUS_NONE) {
if (targetEntityInfo->waitingStruct.waitingStatus != STATUS_NONE) {
SendWaitingEndMessage(pokemon,target, STATUS_DECOY);
}
targetEntityInfo->waitingStatus = STATUS_DECOY;
targetEntityInfo->enemyDecoy = pokemon->info->isNotTeamMember;
targetEntityInfo->unkCA = param_3;
targetEntityInfo->waitingStatusTurns = CalculateStatusTurns(target,gUnknown_80F4ED0,TRUE) + 1;
targetEntityInfo->curseDamageCountdown = 0;
targetEntityInfo->waitingStruct.waitingStatus = STATUS_DECOY;
targetEntityInfo->waitingStruct.enemyDecoy = pokemon->info->isNotTeamMember;
targetEntityInfo->waitingStruct.unkCA = param_3;
targetEntityInfo->waitingStruct.waitingStatusTurns = CalculateStatusTurns(target,gUnknown_80F4ED0,TRUE) + 1;
targetEntityInfo->waitingStruct.curseDamageCountdown = 0;
sub_806CCB4(target,sub_806CEBC(target));
gDungeon->decoyActive = TRUE;
sub_80522F4(pokemon,target,*gUnknown_80FB978);
@ -1054,10 +1054,10 @@ void CurseStatusTarget(Entity *pokemon, Entity * target)
if (HP == 0) {
pokemonEntityData->HP = 1;
}
if (targetEntityInfo->waitingStatus != STATUS_CURSED) {
targetEntityInfo->waitingStatus = STATUS_CURSED;
targetEntityInfo->waitingStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EA4,TRUE) + 1;
targetEntityInfo->curseDamageCountdown = 0;
if (targetEntityInfo->waitingStruct.waitingStatus != STATUS_CURSED) {
targetEntityInfo->waitingStruct.waitingStatus = STATUS_CURSED;
targetEntityInfo->waitingStruct.waitingStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EA4,TRUE) + 1;
targetEntityInfo->waitingStruct.curseDamageCountdown = 0;
}
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FB004);
@ -1085,7 +1085,7 @@ void SnatchStatusTarget(Entity * pokemon, Entity * target)
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
entity = gDungeon->allPokemon[index];
if ((EntityExists(entity)) && (entity->info->waitingStatus == STATUS_SNATCH)) {
if ((EntityExists(entity)) && (entity->info->waitingStruct.waitingStatus == STATUS_SNATCH)) {
SendWaitingEndMessage(pokemon, entity, STATUS_NONE);
}
}
@ -1093,10 +1093,10 @@ void SnatchStatusTarget(Entity * pokemon, Entity * target)
targetEntityInfo = target->info;
targetEntityInfo2 = targetEntityInfo;
if (targetEntityInfo->waitingStatus != STATUS_SNATCH) {
targetEntityInfo->waitingStatus = STATUS_SNATCH;
targetEntityInfo->waitingStatusTurns= CalculateStatusTurns(target,gUnknown_80F4EA8,FALSE) + 1;
targetEntityInfo->curseDamageCountdown = 0;
if (targetEntityInfo->waitingStruct.waitingStatus != STATUS_SNATCH) {
targetEntityInfo->waitingStruct.waitingStatus = STATUS_SNATCH;
targetEntityInfo->waitingStruct.waitingStatusTurns= CalculateStatusTurns(target,gUnknown_80F4EA8,FALSE) + 1;
targetEntityInfo->waitingStruct.curseDamageCountdown = 0;
}
gDungeon->snatchPokemon = target;
@ -1156,13 +1156,13 @@ void InvisibleStatusTarget(Entity * pokemon, Entity * target)
if (EntityExists(target)) {
targetEntityInfo = target->info;
targetEntityInfo_1 = targetEntityInfo;
if (targetEntityInfo_1->transformStatus == STATUS_TRANSFORMED) {
if (targetEntityInfo_1->transformStatus.transformStatus == STATUS_TRANSFORMED) {
SendTransformEndMessage(pokemon,target);
}
SetMessageArgument(gAvailablePokemonNames,target,0);
if (targetEntityInfo_1->transformStatus != STATUS_INVISIBLE) {
targetEntityInfo_1->transformStatus = STATUS_INVISIBLE;
targetEntityInfo_1->transformStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EE4,FALSE) + 1;
if (targetEntityInfo_1->transformStatus.transformStatus != STATUS_INVISIBLE) {
targetEntityInfo_1->transformStatus.transformStatus = STATUS_INVISIBLE;
targetEntityInfo_1->transformStatus.transformStatusTurns = CalculateStatusTurns(target,gUnknown_80F4EE4,FALSE) + 1;
sub_8041D84(target);
sub_80522F4(pokemon,target,*gUnknown_80FBA80);
}

View File

@ -66,7 +66,7 @@ bool8 HasStatusAffectingActions(Entity *pokemon)
SendMessage(pokemon, *gPtrBideMessage);
return TRUE;
}
if (pokemonInfo->waitingStatus == STATUS_DECOY)
if (pokemonInfo->waitingStruct.waitingStatus == STATUS_DECOY)
{
SetActionPassTurnOrWalk(&pokemonInfo->action, pokemonInfo->id);
pokemonInfo->action.direction = DungeonRandInt(NUM_DIRECTIONS);
@ -78,7 +78,7 @@ bool8 HasStatusAffectingActions(Entity *pokemon)
{
return TRUE;
}
if (pokemonInfo->eyesightStatus == STATUS_BLINKER)
if (pokemonInfo->eyesightStatus.eyesightStatus == STATUS_BLINKER)
{
if (!CanMoveInDirection(pokemon, pokemonInfo->action.direction))
{
@ -98,7 +98,7 @@ bool8 HasStatusAffectingActions(Entity *pokemon)
DecideAttack(pokemon);
return TRUE;
}
if (pokemonInfo->eyesightStatus == STATUS_CROSS_EYED)
if (pokemonInfo->eyesightStatus.eyesightStatus == STATUS_CROSS_EYED)
{
SetActionPassTurnOrWalk(&pokemonInfo->action, pokemonInfo->id);
pokemonInfo->action.direction = DungeonRandInt(NUM_DIRECTIONS);

View File

@ -59,14 +59,14 @@ void SetMessageArgument_2(u8 *buffer, EntityInfo *param_2, s32 colorNum)
{
if (((gDungeon->blinded ||
gDungeon->hallucinating) ||
(param_2->transformStatus == STATUS_INVISIBLE)) &&
(param_2->transformStatus.transformStatus == STATUS_INVISIBLE)) &&
(param_2->isNotTeamMember))
{
strcpy(buffer, *gUnknown_80F8988);
}
else
{
if (param_2->waitingStatus == STATUS_DECOY) {
if (param_2->waitingStruct.waitingStatus == STATUS_DECOY) {
strcpy(buffer, *gUnknown_80F8968);
}
else
@ -88,7 +88,7 @@ void SetMessageArgument_2(u8 *buffer, EntityInfo *param_2, s32 colorNum)
void sub_8070968(u8 *buffer, EntityInfo *entityInfo, s32 colorNum)
{
if (entityInfo->waitingStatus == STATUS_DECOY) {
if (entityInfo->waitingStruct.waitingStatus == STATUS_DECOY) {
sprintfStatic(buffer, gUnknown_8106FA4, colorNum + 0x30, *gUnknown_80F8974);
}
else if (entityInfo->isNotTeamMember) {
@ -103,14 +103,14 @@ void sub_80709C8(u8 *buffer, EntityInfo *entityInfo)
{
if (((gDungeon->blinded ||
gDungeon->hallucinating) ||
(entityInfo->transformStatus == STATUS_INVISIBLE)) &&
(entityInfo->transformStatus.transformStatus == STATUS_INVISIBLE)) &&
(entityInfo->isNotTeamMember))
{
strcpy(buffer, *gUnknown_80F8994);
}
else
{
if (entityInfo->waitingStatus == STATUS_DECOY) {
if (entityInfo->waitingStruct.waitingStatus == STATUS_DECOY) {
strcpy(buffer, *gUnknown_80F8974);
}
else
@ -136,13 +136,13 @@ bool8 HasNegativeStatus(Entity *pokemon)
pokemonInfo->nonVolatile.nonVolatileStatus != STATUS_NONE ||
(pokemonInfo->immobilize.immobilizeStatus != STATUS_INGRAIN && pokemonInfo->immobilize.immobilizeStatus != STATUS_NONE) ||
pokemonInfo->Volatile.volatileStatus != STATUS_NONE ||
pokemonInfo->waitingStatus == STATUS_CURSED ||
pokemonInfo->waitingStatus == STATUS_DECOY ||
pokemonInfo->linkedStatus == STATUS_LEECH_SEED ||
pokemonInfo->moveStatus == STATUS_WHIFFER ||
pokemonInfo->eyesightStatus == STATUS_BLINKER ||
pokemonInfo->eyesightStatus == STATUS_CROSS_EYED ||
pokemonInfo->muzzled == TRUE ||
pokemonInfo->waitingStruct.waitingStatus == STATUS_CURSED ||
pokemonInfo->waitingStruct.waitingStatus == STATUS_DECOY ||
pokemonInfo->linked.linkedStatus == STATUS_LEECH_SEED ||
pokemonInfo->moveStatus.moveStatus == STATUS_WHIFFER ||
pokemonInfo->eyesightStatus.eyesightStatus == STATUS_BLINKER ||
pokemonInfo->eyesightStatus.eyesightStatus == STATUS_CROSS_EYED ||
pokemonInfo->muzzled.muzzled == TRUE ||
pokemonInfo->exposed ||
pokemonInfo->perishSongTurns != 0)
{

View File

@ -49,21 +49,21 @@ void sub_8081B54(void *, u8 *);
void SaveSpeedStage(unkStruct_8094924 *param_1, s32 param_2);
void sub_8081854(unkStruct_8094924 *param_1, s32 param_2);
void sub_808183C(unkStruct_8094924 *param_1, s32 param_2);
void sub_8081AB8(void *, bool8 *);
void sub_8081A9C(void *, u8*);
void sub_8081A80(void *, u8*);
void sub_8081A74(void *, u8*);
void sub_8081A58(void *, u8*);
void sub_8081A24(void *, u8*);
void SaveVolatile(unkStruct_8094924 *param_1, Volatile *param_2);
void SaveImmobilize(unkStruct_8094924 *param_1, Immobilize *param_2);
void SaveNonVolatile(unkStruct_8094924 *param_1, NonVolatile *param_2);
void SaveMuzzledStatus(unkStruct_8094924 *param_1, Muzzled *param_2);
void SaveEyesightStatus(unkStruct_8094924 *param_1, EyesightStatus *param_2);
void SaveTransformStatus(unkStruct_8094924 *param_1, TransformStatus *param_2);
void SaveItemStatus(unkStruct_8094924 *param_1, ItemStatus *param_2);
void SaveMoveStatus(unkStruct_8094924 *param_1, MoveStatus* param_2);
void SaveLinkedStatus(unkStruct_8094924 *param_1, Linked *param_2);
void SaveVolatileStatus(unkStruct_8094924 *param_1, Volatile *param_2);
void SaveImmobilizeStatus(unkStruct_8094924 *param_1, Immobilize *param_2);
void SaveNonVolatileStatus(unkStruct_8094924 *param_1, NonVolatile *param_2);
void SaveEntitySleep(unkStruct_8094924 *param_1, Sleep* param_2);
void SaveTactic(unkStruct_8094924 *param_1, u8 param_2);
void SaveHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2);
void SaveCharging(unkStruct_8094924 *param_1, Charging *param_2);
void SaveProtection(unkStruct_8094924 *param_1, Protection *param_2);
void sub_80819F0(void *, u8 *);
void SaveChargingStatus(unkStruct_8094924 *param_1, Charging *param_2);
void SaveProtectionStatus(unkStruct_8094924 *param_1, Protection *param_2);
void SaveWaitingStatus(unkStruct_8094924 *param_1, Waiting *param_2);
void SaveSpeedCounters(void *, u8 *, u32);
void SaveClientType(unkStruct_8094924 *param_1, u8 param_2);
void sub_803E708(u32, u32);
@ -247,13 +247,13 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
Volatile *puStack_80;
Charging *puStack_7c;
Protection *puStack_78;
u8 *puStack_74;
u8 *puStack_70;
u8 *puStack_6c;
u8 *puStack_68;
u8 *puStack_64;
u8 *puStack_60;
bool8 *pbStack_5c;
Waiting *puStack_74;
Linked *puStack_70;
MoveStatus *puStack_6c;
ItemStatus *puStack_68;
TransformStatus *puStack_64;
EyesightStatus *puStack_60;
Muzzled *pbStack_5c;
bool8 *pbStack_58;
bool8 *pbStack_54;
bool8 *pbStack_50;
@ -341,8 +341,8 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
puStack_80 = &info->Volatile;
puStack_7c = &info->charging;
puStack_78 = &info->protection;
puStack_74 = &info->waitingStatus;
puStack_70 = &info->linkedStatus;
puStack_74 = &info->waitingStruct;
puStack_70 = &info->linked;
puStack_6c = &info->moveStatus;
puStack_68 = &info->itemStatus;
puStack_64 = &info->transformStatus;
@ -380,18 +380,18 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
sub_8083078(param_1,*puStack_98);
sub_8083078(param_1,*puStack_94);
SaveEntitySleep(param_1,puStack_8c);
SaveNonVolatile(param_1,puStack_88);
SaveImmobilize(param_1,puStack_84);
SaveVolatile(param_1,puStack_80);
SaveCharging(param_1,puStack_7c);
SaveProtection(param_1,puStack_78);
sub_80819F0(param_1,puStack_74);
sub_8081A24(param_1,puStack_70);
sub_8081A58(param_1,puStack_6c);
sub_8081A74(param_1,puStack_68);
sub_8081A80(param_1,puStack_64);
sub_8081A9C(param_1,puStack_60);
sub_8081AB8(param_1,pbStack_5c);
SaveNonVolatileStatus(param_1,puStack_88);
SaveImmobilizeStatus(param_1,puStack_84);
SaveVolatileStatus(param_1,puStack_80);
SaveChargingStatus(param_1,puStack_7c);
SaveProtectionStatus(param_1,puStack_78);
SaveWaitingStatus(param_1,puStack_74);
SaveLinkedStatus(param_1,puStack_70);
SaveMoveStatus(param_1,puStack_6c);
SaveItemStatus(param_1,puStack_68);
SaveTransformStatus(param_1,puStack_64);
SaveEyesightStatus(param_1,puStack_60);
SaveMuzzledStatus(param_1,pbStack_5c);
sub_80830B4(param_1,*pbStack_58);
sub_80830B4(param_1,*pbStack_54);
sub_80830B4(param_1,*pbStack_50);
@ -623,7 +623,7 @@ void SaveEntitySleep(unkStruct_8094924 *param_1, Sleep* param_2)
sub_8083060(param_1, param_2->sleepTurns);
}
void SaveNonVolatile(unkStruct_8094924 *param_1, NonVolatile *param_2)
void SaveNonVolatileStatus(unkStruct_8094924 *param_1, NonVolatile *param_2)
{
sub_8082FA8(param_1, &param_2->nonVolatileStatus, 1);
sub_8083060(param_1, param_2->nonVolatileStatusTurns);
@ -631,7 +631,7 @@ void SaveNonVolatile(unkStruct_8094924 *param_1, NonVolatile *param_2)
sub_8083060(param_1, param_2->unk4);
}
void SaveImmobilize(unkStruct_8094924 *param_1, Immobilize *param_2)
void SaveImmobilizeStatus(unkStruct_8094924 *param_1, Immobilize *param_2)
{
sub_8082FA8(param_1, &param_2->immobilizeStatus, 1);
sub_8083060(param_1, param_2->immobilizeStatusTurns);
@ -639,22 +639,69 @@ void SaveImmobilize(unkStruct_8094924 *param_1, Immobilize *param_2)
sub_8083078(param_1, param_2->unk4);
}
void SaveVolatile(unkStruct_8094924 *param_1, Volatile *param_2)
void SaveVolatileStatus(unkStruct_8094924 *param_1, Volatile *param_2)
{
sub_8082FA8(param_1, &param_2->volatileStatus, 1);
sub_8083060(param_1, param_2->volatileStatusTurns);
}
void SaveCharging(unkStruct_8094924 *param_1, Charging *param_2)
void SaveChargingStatus(unkStruct_8094924 *param_1, Charging *param_2)
{
sub_8082FA8(param_1, &param_2->chargingStatus, 1);
sub_8083060(param_1, param_2->chargingStatusTurns);
sub_8083060(param_1, param_2->chargingStatusMoveIndex);
}
void SaveProtection(unkStruct_8094924 *param_1, Protection *param_2)
void SaveProtectionStatus(unkStruct_8094924 *param_1, Protection *param_2)
{
sub_8082FA8(param_1, &param_2->protectionStatus, 1);
sub_8083060(param_1, param_2->protectionStatusTurns);
}
void SaveWaitingStatus(unkStruct_8094924 *param_1, Waiting *param_2)
{
sub_8082FA8(param_1, &param_2->waitingStatus, 1);
sub_80830B4(param_1, param_2->enemyDecoy);
sub_80830B4(param_1, param_2->unkCA);
sub_8083060(param_1, param_2->waitingStatusTurns);
sub_8083060(param_1, param_2->curseDamageCountdown);
}
void SaveLinkedStatus(unkStruct_8094924 *param_1, Linked *param_2)
{
sub_8082FA8(param_1, &param_2->linkedStatus, 1);
sub_8083078(param_1, param_2->unkD4);
sub_8083060(param_1, param_2->unkD8);
sub_8083060(param_1, param_2->linkedStatusTurns);
sub_8083060(param_1, param_2->linkedStatusDamageCountdown);
}
void SaveMoveStatus(unkStruct_8094924 *param_1, MoveStatus* param_2)
{
sub_8082FA8(param_1, &param_2->moveStatus, 1);
sub_8083060(param_1, param_2->moveStatusTurns);
}
void SaveItemStatus(unkStruct_8094924 *param_1, ItemStatus *param_2)
{
sub_8082FA8(param_1, &param_2->itemStatus, 1);
}
void SaveTransformStatus(unkStruct_8094924 *param_1, TransformStatus *param_2)
{
sub_8082FA8(param_1, &param_2->transformStatus, 1);
sub_8083060(param_1, param_2->transformStatusTurns);
}
void SaveEyesightStatus(unkStruct_8094924 *param_1, EyesightStatus *param_2)
{
sub_8082FA8(param_1, &param_2->eyesightStatus, 1);
sub_8083060(param_1, param_2->eyesightStatusTurns);
}
void SaveMuzzledStatus(unkStruct_8094924 *param_1, Muzzled *param_2)
{
sub_8082FA8(param_1, &param_2->muzzled, 1);
sub_8083060(param_1, param_2->muzzledTurns);
}