mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-12 05:26:57 +03:00
Decompiled ID_HAMMERHEAD
This commit is contained in:
parent
e798d50d32
commit
2eaba7e55b
5 changed files with 167 additions and 0 deletions
136
TR5Main/Objects/TR4/Entity/tr4_hammerhead.cpp
Normal file
136
TR5Main/Objects/TR4/Entity/tr4_hammerhead.cpp
Normal file
|
@ -0,0 +1,136 @@
|
|||
#include "framework.h"
|
||||
#include "tr4_hammerhead.h"
|
||||
#include "box.h"
|
||||
#include "effect.h"
|
||||
#include "people.h"
|
||||
#include "items.h"
|
||||
#include "setup.h"
|
||||
#include "level.h"
|
||||
#include "lara.h"
|
||||
#include "draw.h"
|
||||
#include "misc.h"
|
||||
|
||||
#define STATE_HAMMERHEAD_STOP 0
|
||||
#define STATE_HAMMERHEAD_SWIM_SLOW 1
|
||||
#define STATE_HAMMERHEAD_SWIM_FAST 2
|
||||
#define STATE_HAMMERHEAD_ATTACK 3
|
||||
#define STATE_HAMMERHEAD_DEATH 5
|
||||
|
||||
BITE_INFO HammerheadAttack = { 0, 0, 0, 12 };
|
||||
|
||||
void InitialiseHammerhead(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item = &g_Level.Items[itemNumber];
|
||||
|
||||
ClearItem(itemNumber);
|
||||
|
||||
item->animNumber = Objects[item->objectNumber].animIndex + 8;
|
||||
item->frameNumber = g_Level.Anims[item->animNumber].frameBase;
|
||||
item->goalAnimState = STATE_HAMMERHEAD_STOP;
|
||||
item->currentAnimState = STATE_HAMMERHEAD_STOP;
|
||||
}
|
||||
|
||||
void HammerheadControl(short itemNumber)
|
||||
{
|
||||
if (CreatureActive(itemNumber))
|
||||
{
|
||||
ITEM_INFO* item = &g_Level.Items[itemNumber];
|
||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||
|
||||
if (item->hitPoints > 0)
|
||||
{
|
||||
if (item->aiBits)
|
||||
GetAITarget(creature);
|
||||
else if (creature->hurtByLara)
|
||||
creature->enemy = LaraItem;
|
||||
|
||||
AI_INFO info;
|
||||
CreatureAIInfo(item, &info);
|
||||
|
||||
if (creature->enemy != LaraItem)
|
||||
{
|
||||
phd_atan(LaraItem->pos.zPos - item->pos.zPos, LaraItem->pos.xPos - item->pos.xPos);
|
||||
}
|
||||
|
||||
GetCreatureMood(item, &info, VIOLENT);
|
||||
CreatureMood(item, &info, VIOLENT);
|
||||
|
||||
short angle = CreatureTurn(item, creature->maximumTurn);
|
||||
|
||||
switch (item->currentAnimState)
|
||||
{
|
||||
case STATE_HAMMERHEAD_STOP:
|
||||
item->goalAnimState = 1;
|
||||
creature->flags = 0;
|
||||
break;
|
||||
|
||||
case STATE_HAMMERHEAD_SWIM_SLOW:
|
||||
creature->maximumTurn = ANGLE(7);
|
||||
if (info.distance <= SQUARE(1024))
|
||||
{
|
||||
if (info.distance < SQUARE(682))
|
||||
{
|
||||
item->goalAnimState = STATE_HAMMERHEAD_ATTACK;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item->goalAnimState = STATE_HAMMERHEAD_SWIM_FAST;
|
||||
}
|
||||
break;
|
||||
|
||||
case STATE_HAMMERHEAD_SWIM_FAST:
|
||||
if (info.distance < SQUARE(1024))
|
||||
{
|
||||
item->goalAnimState = STATE_HAMMERHEAD_SWIM_SLOW;
|
||||
}
|
||||
break;
|
||||
|
||||
case STATE_HAMMERHEAD_ATTACK:
|
||||
if (!creature->flags)
|
||||
{
|
||||
if (item->touchBits & 0x3400)
|
||||
{
|
||||
LaraItem->hitPoints -= 120;
|
||||
LaraItem->hitStatus = true;
|
||||
CreatureEffect(item, &HammerheadAttack, DoBloodSplat);
|
||||
creature->flags = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
CreatureTilt(item, 0);
|
||||
CreatureJoint(item, 0, -2 * angle);
|
||||
CreatureJoint(item, 1, -2 * angle);
|
||||
CreatureJoint(item, 2, -2 * angle);
|
||||
CreatureJoint(item, 3, 2 * angle);
|
||||
|
||||
if (item->currentAnimState == 6)
|
||||
{
|
||||
AnimateItem(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
CreatureAnimation(itemNumber, angle, 0);
|
||||
CreatureUnderwater(item, 341);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item->hitPoints = 0;
|
||||
if (item->currentAnimState != STATE_HAMMERHEAD_DEATH)
|
||||
{
|
||||
item->animNumber = Objects[item->objectNumber].animIndex + 4;
|
||||
item->currentAnimState = STATE_HAMMERHEAD_DEATH;
|
||||
item->frameNumber = g_Level.Anims[item->frameNumber].frameBase;
|
||||
}
|
||||
|
||||
CreatureFloat(itemNumber);
|
||||
}
|
||||
}
|
||||
}
|
4
TR5Main/Objects/TR4/Entity/tr4_hammerhead.h
Normal file
4
TR5Main/Objects/TR4/Entity/tr4_hammerhead.h
Normal file
|
@ -0,0 +1,4 @@
|
|||
#pragma once
|
||||
|
||||
void InitialiseHammerhead(short itemNumber);
|
||||
void HammerheadControl(short itemNumber);
|
|
@ -31,6 +31,7 @@
|
|||
#include "tr4_moving_blade.h"
|
||||
#include "tr4_element_puzzle.h"
|
||||
#include "tr4_von_croy.h"
|
||||
#include "tr4_hammerhead.h"
|
||||
/// objects
|
||||
#include "tr4_sarcophagus.h"
|
||||
/// puzzle
|
||||
|
@ -103,6 +104,24 @@ static void StartBaddy(OBJECT_INFO* obj)
|
|||
obj->zoneType = ZONE_BASIC;
|
||||
}
|
||||
|
||||
obj = &Objects[ID_HAMMERHEAD];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseHammerhead;
|
||||
obj->control = HammerheadControl;
|
||||
obj->collision = CreatureCollision;
|
||||
obj->shadowSize = 128;
|
||||
obj->hitPoints = 8;
|
||||
obj->pivotLength = 20;
|
||||
obj->radius = 128;
|
||||
obj->intelligent = true;
|
||||
obj->savePosition = true;
|
||||
obj->saveHitpoints = true;
|
||||
obj->saveAnim = true;
|
||||
obj->saveFlags = true;
|
||||
obj->zoneType = ZONE_WATER;
|
||||
}
|
||||
|
||||
obj = &Objects[ID_WILD_BOAR];
|
||||
if (obj->loaded)
|
||||
{
|
||||
|
|
|
@ -175,6 +175,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClInclude Include="Objects\TR3\Trap\train.h" />
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_big_beetle.h" />
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_enemy_jeep.h" />
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_hammerhead.h" />
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_setha.h" />
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_von_croy.h" />
|
||||
<ClInclude Include="Objects\TR4\Object\tr4_element_puzzle.h" />
|
||||
|
@ -477,6 +478,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClCompile Include="Objects\TR3\Trap\train.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_big_beetle.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_enemy_jeep.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_hammerhead.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_setha.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_von_croy.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Object\tr4_element_puzzle.cpp" />
|
||||
|
|
|
@ -930,6 +930,9 @@
|
|||
<ClInclude Include="Objects\TR5\Trap\tr5_explosion.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Objects\TR4\Entity\tr4_hammerhead.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Game\box.cpp">
|
||||
|
@ -1718,6 +1721,9 @@
|
|||
<ClCompile Include="Game\lightning.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_hammerhead.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue