Decompiled ID_HAMMERHEAD

This commit is contained in:
MontyTRC89 2021-04-29 15:19:28 +02:00
parent e798d50d32
commit 2eaba7e55b
5 changed files with 167 additions and 0 deletions

View 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);
}
}
}

View file

@ -0,0 +1,4 @@
#pragma once
void InitialiseHammerhead(short itemNumber);
void HammerheadControl(short itemNumber);

View file

@ -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)
{

View file

@ -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" />

View file

@ -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" />