TombEngine/TR5Main/Objects/TR5/Entity/tr5_cyborg.cpp

655 lines
16 KiB
C++
Raw Normal View History

#include "framework.h"
#include "tr5_cyborg.h"
#include "items.h"
#include "sphere.h"
#include "box.h"
#include "effects\effects.h"
#include "people.h"
#include "draw.h"
#include "effects\tomb4fx.h"
#include "lara.h"
#include "traps.h"
#include "setup.h"
#include "level.h"
2021-09-08 18:19:06 +03:00
#include "Sound\sound.h"
2020-02-01 07:54:26 +01:00
2020-03-15 11:15:55 +01:00
#define STATE_HITMAN_STOP 1
#define STATE_HITMAN_WALK 2
#define STATE_HITMAN_RUN 3
#define STATE_HITMAN_START_END_MONKEY 4
#define STATE_HITMAN_MONKEY 5
#define STATE_HITMAN_JUMP 15
#define STATE_HITMAN_JUMP_2BLOCKS 16
#define STATE_HITMAN_AIM 38
#define STATE_HITMAN_FIRE 39
#define STATE_HITMAN_GASSED 42
#define STATE_HITMAN_DEATH 43
BITE_INFO HitmanGun = { 0, 300, 64, 7 };
byte HitmanJoints[12] = { 15, 14, 13, 6, 5, 12, 7, 4, 10, 11, 19 };
2020-03-15 11:15:55 +01:00
void InitialiseHitman(short itemNum)
{
ITEM_INFO* item;
item = &g_Level.Items[itemNum];
ClearItem(itemNum);
2020-03-15 11:15:55 +01:00
item->animNumber = Objects[item->objectNumber].animIndex + 4;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
item->currentAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
}
static void TriggerHitmanSparks(int x, int y, int z, short xv, short yv, short zv)
2020-02-01 07:54:26 +01:00
{
int dx = LaraItem->pos.xPos - x;
int dz = LaraItem->pos.zPos - z;
if (dx >= -16384 && dx <= 16384 && dz >= -16384 && dz <= 16384)
{
SPARKS* spark = &Sparks[GetFreeSpark()];
spark->sR = -1;
spark->sG = -1;
spark->sB = -1;
spark->dR = -1;
spark->on = 1;
spark->colFadeSpeed = 3;
spark->fadeToBlack = 5;
2020-03-15 11:15:55 +01:00
spark->dG = (rand() & 127) + 64;
2020-02-01 07:54:26 +01:00
spark->dB = -64 - spark->dG;
spark->life = 10;
spark->sLife = 10;
spark->transType = COLADD;
spark->friction = 34;
spark->scalar = 1;
spark->flags = SP_SCALE;
2020-03-15 11:15:55 +01:00
spark->x = (rand() & 7) + x - 3;
2020-10-17 23:36:06 -05:00
spark->y = ((rand() / 8) & 7) + y - 3;
spark->z = ((rand() / 64) & 7) + z - 3;
spark->xVel = (byte)(rand() / 4) + xv - 128;
spark->yVel = (byte)(rand() / 16) + yv - 128;
spark->zVel = (byte)(rand() / 64) + zv - 128;
spark->sSize = spark->size= ((rand() / 512) & 3) + 4;
spark->dSize = ((rand() / 4096) & 1) + 1;
2020-02-01 07:54:26 +01:00
spark->maxYvel = 0;
spark->gravity = 0;
}
}
2020-03-15 11:15:55 +01:00
void HitmanControl(short itemNumber)
2020-02-01 07:54:26 +01:00
{
if (CreatureActive(itemNumber))
{
ITEM_INFO* item = &g_Level.Items[itemNumber];
2020-02-01 07:54:26 +01:00
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
2020-07-07 07:32:33 +02:00
OBJECT_INFO* obj = &Objects[item->objectNumber];
2020-02-01 07:54:26 +01:00
short angle = 0;
short joint2 = 0;
short joint1 = 0;
short joint0 = 0;
int x = item->pos.xPos;
int z = item->pos.zPos;
2020-10-05 22:24:57 -03:00
int dx = 808 * phd_sin(item->pos.yRot);
int dz = 808 * phd_cos(item->pos.yRot);
2020-02-01 07:54:26 +01:00
x += dx;
z += dz;
short roomNumber = item->roomNumber;
FLOOR_INFO* floor = GetFloor(x, item->pos.yPos, z, &roomNumber);
int height1 = GetFloorHeight(floor, x, item->pos.yPos, z);
x += dx;
z += dz;
roomNumber = item->roomNumber;
floor = GetFloor(x, item->pos.yPos, z, &roomNumber);
int height2 = GetFloorHeight(floor, x, item->pos.yPos, z);
x += dx;
z += dz;
roomNumber = item->roomNumber;
floor = GetFloor(x, item->pos.yPos, z, &roomNumber);
int height3 = GetFloorHeight(floor, x, item->pos.yPos, z);
bool canJump1block;
if (item->boxNumber == LaraItem->boxNumber
|| item->pos.yPos >= height1 - 384
|| item->pos.yPos >= height2 + 256
|| item->pos.yPos <= height2 - 256)
canJump1block = false;
else
canJump1block = true;
bool canJump2blocks;
if (item->boxNumber == LaraItem->boxNumber
|| item->pos.yPos >= height1 - 384
|| item->pos.yPos >= height2 - 384
|| item->pos.yPos >= height3 + 256
|| item->pos.yPos <= height3 - 256)
canJump2blocks = false;
else
canJump2blocks = true;
if (item->firedWeapon)
{
PHD_VECTOR pos;
pos.x = HitmanGun.x;
pos.y = HitmanGun.y;
pos.z = HitmanGun.z;
GetJointAbsPosition(item, &pos, HitmanGun.meshNum);
2020-02-01 07:54:26 +01:00
TriggerDynamicLight(pos.x, pos.y, pos.z, 2 * item->firedWeapon + 10, 192, 128, 32);
item->firedWeapon--;
}
if (item->aiBits)
GetAITarget(creature);
else
creature->enemy = LaraItem;
AI_INFO info, laraInfo;
CreatureAIInfo(item, &info);
if (item->hitStatus)
{
if (!(GetRandomControl() & 7))
{
if (item->itemFlags[0] < 11)
{
item->swapMeshFlags |= 1 << HitmanJoints[item->itemFlags[0]];
2020-02-01 07:54:26 +01:00
item->itemFlags[0]++;
}
}
}
byte random = (byte)GetRandomControl();
if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_WATER)
2020-03-15 11:15:55 +01:00
random &= 31;
2020-02-01 07:54:26 +01:00
if (random < item->itemFlags[0])
{
PHD_VECTOR pos;
pos.x = 0;
pos.y = 0;
pos.z = 50;
GetJointAbsPosition(item, &pos, HitmanJoints[random]);
2020-02-01 07:54:26 +01:00
TriggerLightningGlow(pos.x, pos.y, pos.z, 48, 32, 32, 64);
2020-03-15 11:15:55 +01:00
TriggerHitmanSparks(pos.x, pos.y, pos.z, -1, -1, -1);
2020-02-01 07:54:26 +01:00
TriggerDynamicLight(pos.x, pos.y, pos.z, (GetRandomControl() & 3) + 16, 31, 63, 127);
SoundEffect(SFX_TR5_HITMAN_ELEC_SHORT, &item->pos, 0);
2020-02-01 07:54:26 +01:00
if (random == 5 || random == 7 || random == 10)
{
PHD_VECTOR pos2;
pos2.x = 0;
pos2.y = 0;
pos2.z = 50;
switch (random)
{
case 5:
GetJointAbsPosition(item, &pos2, 15);
break;
case 7:
GetJointAbsPosition(item, &pos2, 6);
if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_WATER && item->hitPoints > 0)
2020-02-01 07:54:26 +01:00
{
2020-03-15 11:15:55 +01:00
item->currentAnimState = STATE_HITMAN_DEATH;
2020-02-01 07:54:26 +01:00
item->animNumber = obj->animIndex + 69;
item->hitPoints = 0;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
DropBaddyPickups(item);
}
break;
case 10:
GetJointAbsPosition(item, &pos2, 12);
break;
}
//TriggerEnergyArc((PHD_VECTOR*)& src, (PHD_VECTOR*)& src.x_rot, (GetRandomControl() & 7) + 8, 404701055, 13, 64, 3);
}
}
if (item->hitPoints > 0)
{
if (creature->enemy == LaraItem)
{
laraInfo.angle = info.angle;
laraInfo.distance = info.distance;
}
else
{
int dx = LaraItem->pos.xPos - item->pos.xPos;
int dz = LaraItem->pos.zPos - item->pos.zPos;
2020-04-25 16:23:53 +02:00
laraInfo.angle = phd_atan(dz, dx) - item->pos.yRot;
2020-02-01 07:54:26 +01:00
laraInfo.distance = SQUARE(dx) + SQUARE(dz);
}
GetCreatureMood(item, &info, creature->enemy != LaraItem);
if (g_Level.Rooms[item->roomNumber].flags & ENV_FLAG_NO_LENSFLARE) // Gassed room?
2020-02-01 07:54:26 +01:00
{
if (!(GlobalCounter & 7))
item->hitPoints--;
creature->mood = ESCAPE_MOOD;
if (item->hitPoints <= 0)
{
2020-03-15 11:15:55 +01:00
item->currentAnimState = STATE_HITMAN_GASSED;
2020-02-01 07:54:26 +01:00
item->animNumber = obj->animIndex + 68;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
}
}
CreatureMood(item, &info, creature->enemy != LaraItem);
angle = CreatureTurn(item, creature->maximumTurn);
if (laraInfo.distance < SQUARE(2048)
&& LaraItem->speed > 20
|| item->hitStatus
|| TargetVisible(item, &laraInfo))
{
if (!(item->aiBits & FOLLOW))
{
creature->enemy = LaraItem;
AlertAllGuards(itemNumber);
}
}
FLOOR_INFO* floor;
int height;
short roomNumber;
switch (item->currentAnimState)
{
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_STOP:
2020-02-01 07:54:26 +01:00
creature->LOT.isJumping = false;
joint2 = laraInfo.angle;
creature->flags = 0;
creature->maximumTurn = 0;
if (info.ahead && item->aiBits != GUARD)
2020-02-01 07:54:26 +01:00
{
2020-10-17 23:36:06 -05:00
joint0 = info.angle / 2;
2020-02-01 07:54:26 +01:00
joint1 = info.xAngle;
}
if (item->requiredAnimState)
{
item->goalAnimState = item->requiredAnimState;
}
else
{
if (item->aiBits & GUARD)
{
joint2 = AIGuard(creature);
if (item->aiBits & PATROL1)
{
item->triggerFlags--;
if (item->triggerFlags < 1)
{
item->aiBits |= PATROL1;
}
}
}
else if (Targetable(item, &info))
{
if (info.distance < SQUARE(4096) || info.zoneNumber != info.enemyZone)
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_AIM;
2020-02-01 07:54:26 +01:00
}
else if (item->aiBits != MODIFY)
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_WALK;
2020-02-01 07:54:26 +01:00
}
}
else
{
if (item->aiBits & PATROL1)
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_WALK;
2020-02-01 07:54:26 +01:00
}
else
{
if (canJump1block || canJump2blocks)
{
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 22;
2020-03-15 11:15:55 +01:00
item->currentAnimState = STATE_HITMAN_JUMP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
if (canJump2blocks)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_JUMP_2BLOCKS;
2020-02-01 07:54:26 +01:00
creature->LOT.isJumping = true;
}
else if (!creature->monkeyAhead)
{
if (creature->mood)
{
if (info.distance < SQUARE(3072) || item->aiBits & FOLLOW)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_WALK;
2020-02-01 07:54:26 +01:00
else
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_RUN;
2020-02-01 07:54:26 +01:00
}
else
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
}
}
else
{
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
if (GetCeiling(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos) == height - 1536)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_START_END_MONKEY;
else
item->goalAnimState = STATE_HITMAN_WALK;
2020-02-01 07:54:26 +01:00
}
}
}
}
break;
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_WALK:
2020-02-01 07:54:26 +01:00
creature->LOT.isJumping = false;
creature->maximumTurn = ANGLE(5);
if (Targetable(item, &info)
&& (info.distance < SQUARE(4096)
|| info.zoneNumber != info.enemyZone))
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
item->requiredAnimState = STATE_HITMAN_AIM;
2020-02-01 07:54:26 +01:00
}
else
{
if (canJump1block || canJump2blocks)
{
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 22;
2020-03-15 11:15:55 +01:00
item->currentAnimState = STATE_HITMAN_JUMP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
if (canJump2blocks)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_JUMP_2BLOCKS;
2020-02-01 07:54:26 +01:00
creature->LOT.isJumping = true;
}
else if (!creature->monkeyAhead)
{
if (info.distance >= SQUARE(1024))
{
if (info.distance > SQUARE(3072))
{
if (!item->aiBits)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_RUN;
2020-02-01 07:54:26 +01:00
}
}
else
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
}
}
else
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
}
}
break;
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_RUN:
2020-02-01 07:54:26 +01:00
creature->LOT.isJumping = false;
creature->maximumTurn = ANGLE(10);
if (Targetable(item, &info)
&& (info.distance < SQUARE(4096)
|| info.zoneNumber != info.enemyZone))
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
item->requiredAnimState = STATE_HITMAN_AIM;
2020-02-01 07:54:26 +01:00
}
else if (canJump1block || canJump2blocks)
{
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 22;
2020-03-15 11:15:55 +01:00
item->currentAnimState = STATE_HITMAN_JUMP;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
if (canJump2blocks)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_JUMP_2BLOCKS;
2020-02-01 07:54:26 +01:00
creature->LOT.isJumping = true;
}
else
{
if (creature->monkeyAhead)
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
}
else if (info.distance < SQUARE(3072))
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_WALK;
2020-02-01 07:54:26 +01:00
}
break;
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_START_END_MONKEY:
2020-02-01 07:54:26 +01:00
creature->maximumTurn = 0;
if (item->boxNumber == creature->LOT.targetBox
|| !creature->monkeyAhead)
{
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
if (GetCeiling(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos) == height - 1536)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
}
else
{
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_MONKEY;
2020-02-01 07:54:26 +01:00
}
break;
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_MONKEY:
2020-02-01 07:54:26 +01:00
creature->LOT.isMonkeying = true;
creature->LOT.isJumping = true;
creature->maximumTurn = ANGLE(5);
if (item->boxNumber == creature->LOT.targetBox
|| !creature->monkeyAhead)
{
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
height = GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
if (GetCeiling(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos) == height - 1536)
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_START_END_MONKEY;
2020-02-01 07:54:26 +01:00
}
break;
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_AIM:
2020-10-17 23:36:06 -05:00
joint0 = laraInfo.angle / 2;
joint2 = laraInfo.angle / 2;
2020-02-01 07:54:26 +01:00
creature->flags = 0;
creature->maximumTurn = 0;
if (info.ahead)
joint1 = info.xAngle;
if (abs(info.angle) >= ANGLE(2))
{
if (info.angle >= 0)
item->pos.yRot += ANGLE(2);
else
item->pos.yRot -= ANGLE(2);
}
else
{
item->pos.yRot += info.angle;
}
if (Targetable(item, &info)
&& (info.distance < SQUARE(4096)
|| info.zoneNumber != info.enemyZone))
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_FIRE;
2020-02-01 07:54:26 +01:00
else
2020-03-15 11:15:55 +01:00
item->goalAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
break;
2020-03-15 11:15:55 +01:00
case STATE_HITMAN_FIRE:
2020-10-17 23:36:06 -05:00
joint0 = laraInfo.angle / 2;
joint2 = laraInfo.angle / 2;
2020-02-01 07:54:26 +01:00
if (info.ahead)
joint1 = info.xAngle;
creature->maximumTurn = 0;
if (abs(info.angle) >= ANGLE(2))
{
if (info.angle >= 0)
item->pos.yRot += ANGLE(2);
else
item->pos.yRot -= ANGLE(2);
}
else
{
item->pos.yRot += info.angle;
}
if (item->frameNumber > g_Level.Anims[item->animNumber].frameBase + 6
&& item->frameNumber < g_Level.Anims[item->animNumber].frameBase + 16
&& ((byte)item->frameNumber - (byte)g_Level.Anims[item->animNumber].frameBase) & 1)
2020-02-01 07:54:26 +01:00
{
item->firedWeapon = 1;
ShotLara(item, &info, &HitmanGun, joint0, 12);
2020-02-01 07:54:26 +01:00
}
break;
default:
break;
}
}
else if (item->currentAnimState == 43 && !Lara.burn)
{
PHD_VECTOR pos;
pos.x = 0;
pos.y = 0;
pos.z = 0;
GetLaraJointPosition(&pos, LM_LFOOT);
2020-02-01 07:54:26 +01:00
short roomNumberLeft = LaraItem->roomNumber;
GetFloor(pos.x, pos.y, pos.z, &roomNumberLeft);
pos.x = 0;
pos.y = 0;
pos.z = 0;
GetLaraJointPosition(&pos, LM_RFOOT);
2020-02-01 07:54:26 +01:00
short roomNumberRight = LaraItem->roomNumber;
GetFloor(pos.x, pos.y, pos.z, &roomNumberRight);
ROOM_INFO* roomRight = &g_Level.Rooms[roomNumberRight];
ROOM_INFO* roomLeft = &g_Level.Rooms[roomNumberLeft];
2020-02-01 07:54:26 +01:00
short flipNumber = g_Level.Rooms[item->roomNumber].flipNumber;
2020-02-01 07:54:26 +01:00
if ((roomRight->flags | roomLeft->flags) & ENV_FLAG_WATER)
{
if (roomLeft->flipNumber == flipNumber || roomRight->flipNumber == flipNumber)
{
LaraBurn();
Lara.burnCount = 48;
2020-02-01 07:54:26 +01:00
Lara.burnBlue = 1;
LaraItem->hitPoints = 0;
}
}
}
CreatureJoint(item, 0, joint0);
CreatureJoint(item, 1, joint1);
CreatureJoint(item, 2, joint2);
if (creature->reachedGoal)
{
if (creature->enemy)
{
TestTriggers(
2020-02-01 07:54:26 +01:00
creature->enemy->pos.xPos,
creature->enemy->pos.yPos,
creature->enemy->pos.zPos, roomNumber, true, NULL);
2020-02-01 07:54:26 +01:00
2020-03-15 11:15:55 +01:00
item->requiredAnimState = STATE_HITMAN_WALK;
2020-02-01 07:54:26 +01:00
if (creature->enemy->flags & 2)
item->itemFlags[3] = (item->TOSSPAD & 0xFF) - 1;
if (creature->enemy->flags & 8)
{
2020-03-15 11:15:55 +01:00
item->requiredAnimState = STATE_HITMAN_STOP;
2020-02-01 07:54:26 +01:00
item->triggerFlags = 300;
item->aiBits = GUARD | PATROL1;
}
item->itemFlags[3]++;
creature->reachedGoal = false;
creature->enemy = NULL;
}
}
if (item->currentAnimState >= 15 || item->currentAnimState == 5)
{
CreatureAnimation(itemNumber, angle, 0);
}
else
{
switch (CreatureVault(itemNumber, angle, 2, 260) + 4)
{
case 0:
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 35;
item->currentAnimState = 25;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
break;
case 1:
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 41;
item->currentAnimState = 24;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
break;
case 2:
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 42;
item->currentAnimState = 23;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
break;
case 6:
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 29;
item->currentAnimState = 19;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
break;
case 7:
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 28;
item->currentAnimState = 18;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
break;
case 8:
creature->maximumTurn = 0;
item->animNumber = obj->animIndex + 27;
item->currentAnimState = 17;
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
2020-02-01 07:54:26 +01:00
break;
default:
return;
}
}
}
}