Added tiger

This commit is contained in:
MontyTRC89 2018-09-17 08:02:23 +02:00
parent 48ecbbbb6b
commit e219cb26b4
5 changed files with 176 additions and 43 deletions

Binary file not shown.

View file

@ -73,7 +73,7 @@ typedef enum object_types {
ID_SCIENTIST,
ID_MERCENARY, // TR3
ID_WILLOWISP,
ID_SHARK, // TR2
ID_SHARK, // TR2 - OK
ID_INVISIBLE_GHOST,
ID_BADDY1, // TR4 - OK (implement picking, correct special moves)
ID_REAPER,
@ -418,7 +418,7 @@ typedef enum object_types {
ID_WATERFALLSS1,
ID_WATERFALLSS2,
ID_ANIMATING1,
ID_BARRACUDA, // TR2 - 28
ID_BARRACUDA, // TR2 - OK
ID_ANIMATING2,
ID_MONK_WITH_STICK, // TR2 - 53
ID_ANIMATING3,
@ -428,11 +428,11 @@ typedef enum object_types {
ID_ANIMATING5,
ID_DISK, // TR2 - 61
ID_ANIMATING6,
ID_STATUE_WITH_BLADE, // TR2 - 82
ID_STATUE_WITH_BLADE, // TR2 - OK
ID_ANIMATING7,
ID_SPRINGBOARD, // TR2 - 57?
ID_SPRINGBOARD, // TR2 - OK
ID_ANIMATING8,
ID_ROLLING_SPINDLE, // TR2 - 80
ID_ROLLING_SPINDLE, // TR2 - OK
ID_ANIMATING9,
ID_WOLF, // TR1 - 7
ID_ANIMATING10,

View file

@ -14,6 +14,7 @@ BITE_INFO smallScorpionBiteInfo2 = { 0, 0, 0, 23 };
BITE_INFO batBiteInfo = { 0, 16, 45, 4 };
BITE_INFO barracudaBite = { 2, -60, 121, 7 };
BITE_INFO sharkBite = { 17, -22, 344, 12 };
BITE_INFO tigerBite = { 19, -13, 3, 26 };
void __cdecl InitialiseWildBoar(__int16 itemNum)
{
@ -692,3 +693,133 @@ void __cdecl SharkControl(__int16 itemNum)
else
AnimateItem(item);
}
void __cdecl TigerControl(__int16 itemNum)
{
__int16 head = 0;
__int16 angle = 0;
__int16 tilt = 0;
if (!CreatureActive(itemNum))
return;
ITEM_INFO* item = &Items[itemNum];
CREATURE_INFO* creature = (CREATURE_INFO *)item->data;
if (item->hitPoints <= 0)
{
if (item->currentAnimState != 9)
{
item->animNumber = Objects[item->objectNumber].animIndex + 11;
item->frameNumber = Anims[item->animNumber].frameBase;
item->currentAnimState = 9;
}
}
else
{
AI_INFO info;
CreatureAIInfo(item, &info);
if (info.ahead)
head = info.angle;
GetCreatureMood(item, &info, 1);
if (creature->alerted && info.zoneNumber != info.enemyZone)
creature->mood = MOOD_TYPE::ESCAPE_MOOD;
CreatureMood(item, &info, 1);
angle = CreatureTurn(item, creature->maximumTurn);
switch (item->currentAnimState)
{
case 1:
creature->maximumTurn = 0;
creature->flags = 0;
if (creature->mood == MOOD_TYPE::ESCAPE_MOOD)
{
if (Lara.target != item && info.ahead)
item->goalAnimState = 1;
else
item->goalAnimState = 3;
}
else if (creature->mood == MOOD_TYPE::BORED_MOOD)
{
__int16 random = GetRandomControl();
if (random < 0x60)
item->goalAnimState = 5;
else if (random < 0x460);
item->goalAnimState = 2;
}
else if (info.bite && info.distance < SQUARE(340))
item->goalAnimState = 6;
else if (info.bite && info.distance < SQUARE(1024))
{
creature->maximumTurn = ANGLE(3);
item->goalAnimState = 8;
}
else if (item->requiredAnimState)
item->goalAnimState = item->requiredAnimState;
else if (creature->mood != ATTACK_MOOD && GetRandomControl() < 0x60)
item->goalAnimState = 5;
else
item->goalAnimState = 3;
break;
case 2:
creature->maximumTurn = ANGLE(3);
if (creature->mood == MOOD_TYPE::ESCAPE_MOOD || creature->mood == MOOD_TYPE::ATTACK_MOOD)
item->goalAnimState = 3;
else if (GetRandomControl() < 0x60)
{
item->goalAnimState = 1;
item->requiredAnimState = 5;
}
break;
case 3:
creature->maximumTurn = ANGLE(6);
if (creature->mood == MOOD_TYPE::BORED_MOOD)
item->goalAnimState = 1;
else if (creature->flags && info.ahead)
item->goalAnimState = 1;
else if (info.bite && info.distance < SQUARE(1536))
{
if (LaraItem->speed == 0)
item->goalAnimState = 1;
else
item->goalAnimState = 7;
}
else if (creature->mood != MOOD_TYPE::ATTACK_MOOD && GetRandomControl() < 0x60)
{
item->requiredAnimState = 5;
item->goalAnimState = 1;
}
else if (creature->mood == MOOD_TYPE::ESCAPE_MOOD && Lara.target != item && info.ahead)
item->goalAnimState = 1;
creature->flags = 0;
break;
case 6:
case 7:
case 8:
if (!creature->flags && (item->touchBits & 0x7FDC000))
{
LaraItem->hitStatus = true;
LaraItem->hitPoints -= 90;
CreatureEffect(item, &tigerBite, DoBloodSplat);
creature->flags = 1;
}
break;
}
}
CreatureTilt(item, tilt);
CreatureJoint(item, 0, head);
CreatureAnimation(itemNum, angle, tilt);
}

View file

@ -74,3 +74,5 @@ void __cdecl InitialiseKillerStatue(__int16 item_number);
void __cdecl KillerStatueControl(__int16 item_number);
void __cdecl SpringBoardControl(__int16 item_number);
void __cdecl TigerControl(__int16 itemNum);

View file

@ -49,10 +49,10 @@ void __cdecl NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 192] |= 0x10;
Bones[obj->boneIndex + 192] |= 0x08;
Bones[obj->boneIndex + 208] |= 0x10;
Bones[obj->boneIndex + 208] |= 0x08;
Bones[obj->boneIndex + 192] |= ROT_Z;
Bones[obj->boneIndex + 192] |= ROT_Y;
Bones[obj->boneIndex + 208] |= ROT_Z;
Bones[obj->boneIndex + 208] |= ROT_Y;
}
obj = &Objects[ID_BAT];
@ -142,10 +142,10 @@ void __cdecl NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 112] |= 0x08;
Bones[obj->boneIndex + 112] |= 0x04;
Bones[obj->boneIndex + 352] |= 0x08;
Bones[obj->boneIndex + 352] |= 0x04;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 352] |= ROT_Y;
Bones[obj->boneIndex + 352] |= ROT_X;
Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 32];
Meshes[obj->meshIndex + 60] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 56];
@ -168,10 +168,10 @@ void __cdecl NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 112] |= 0x08;
Bones[obj->boneIndex + 112] |= 0x04;
Bones[obj->boneIndex + 352] |= 0x08;
Bones[obj->boneIndex + 352] |= 0x04;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 352] |= ROT_Y;
Bones[obj->boneIndex + 352] |= ROT_X;
}
obj = &Objects[ID_SAS_CAIRO];
@ -190,10 +190,10 @@ void __cdecl NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex] |= 0x08;
Bones[obj->boneIndex] |= 0x04;
Bones[obj->boneIndex + 112] |= 0x08;
Bones[obj->boneIndex + 112] |= 0x04;
Bones[obj->boneIndex] |= ROT_Y;
Bones[obj->boneIndex] |= ROT_X;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
}
obj = &Objects[ID_MUMMY];
@ -211,9 +211,9 @@ void __cdecl NewObjects()
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 112] |= 0x08;
Bones[obj->boneIndex + 112] |= 0x04;
Bones[obj->boneIndex + 288] |= 0x08;
Bones[obj->boneIndex + 112] |= ROT_Y;
Bones[obj->boneIndex + 112] |= ROT_X;
Bones[obj->boneIndex + 288] |= ROT_Y;
}
obj = &Objects[ID_QUAD];
@ -280,7 +280,25 @@ void __cdecl NewObjects()
{
obj->control = SpringBoardControl;
obj->saveAnim = true;
obj->saveFlags = true;;
obj->saveFlags = true;
}
obj = &Objects[ID_TIGER];
if (obj->loaded)
{
obj->control = TigerControl;
obj->collision = CreatureCollision;
obj->shadowSize = 128;
obj->hitPoints = 24;
obj->pivotLength = 200;
obj->radius = 340;
obj->intelligent = true;
obj->savePosition = true;
obj->saveHitpoints = true;
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 21 * 4] |= ROT_Y;
}
/*
@ -293,24 +311,6 @@ void __cdecl NewObjects()
obj->saveFlags = true;
}
obj = &Objects[ID_TIGER];
if (obj->loaded)
{
obj->control = TigerControl;
obj->collision = CreatureCollision;
obj->shadowSize = UNIT_SHADOW / 2;
obj->hitPoints = TIGER_hitPoints;
obj->pivotLength = 200;
obj->radius = TIGER_RADIUS;
obj->intelligent = true;
obj->savePosition = true;
obj->saveHitpoints = true;
obj->saveAnim = true;
obj->saveFlags = true;
Bones[obj->boneIndex + 21 * 4] |= ROT_Y;
}
obj = &Objects[ID_COBRA];
if (obj->loaded)
{