mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-13 05:57:05 +03:00
Decompiled ControlGuard()
This commit is contained in:
parent
b4e36a0e28
commit
bf5aa5703b
2 changed files with 548 additions and 565 deletions
|
@ -126,7 +126,6 @@ void InitialiseGuardLaser(short itemNum)
|
||||||
item->currentAnimState = 1;
|
item->currentAnimState = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void ControlGuard(short itemNum)
|
void ControlGuard(short itemNum)
|
||||||
{
|
{
|
||||||
if (!CreatureActive(itemNum))
|
if (!CreatureActive(itemNum))
|
||||||
|
@ -138,13 +137,9 @@ void ControlGuard(short itemNum)
|
||||||
else
|
else
|
||||||
animIndex = Objects[ID_BLUE_GUARD].animIndex;
|
animIndex = Objects[ID_BLUE_GUARD].animIndex;
|
||||||
|
|
||||||
HIWORD(v2) = HIWORD(items);
|
|
||||||
|
|
||||||
ITEM_INFO* item = &Items[itemNum];
|
ITEM_INFO* item = &Items[itemNum];
|
||||||
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
CREATURE_INFO* creature = (CREATURE_INFO*)item->data;
|
||||||
|
|
||||||
LOWORD(v2) = item->roomNumber;
|
|
||||||
|
|
||||||
short angle = 0;
|
short angle = 0;
|
||||||
short joint2 = 0;
|
short joint2 = 0;
|
||||||
short joint1 = 0;
|
short joint1 = 0;
|
||||||
|
@ -252,10 +247,6 @@ void ControlGuard(short itemNum)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GetCreatureMood(item, &info, creature->enemy != LaraItem);
|
GetCreatureMood(item, &info, creature->enemy != LaraItem);
|
||||||
|
|
||||||
if (item->objectNumber == ID_SCIENTIST)
|
if (item->objectNumber == ID_SCIENTIST)
|
||||||
|
@ -298,7 +289,7 @@ void ControlGuard(short itemNum)
|
||||||
|
|
||||||
CreatureMood(item, &info, creature->enemy != LaraItem);
|
CreatureMood(item, &info, creature->enemy != LaraItem);
|
||||||
|
|
||||||
ITEM_INFO* enemy = creature->enemy;
|
ITEM_INFO * enemy = creature->enemy;
|
||||||
angle = CreatureTurn(item, creature->maximumTurn);
|
angle = CreatureTurn(item, creature->maximumTurn);
|
||||||
creature->enemy = LaraItem;
|
creature->enemy = LaraItem;
|
||||||
|
|
||||||
|
@ -553,303 +544,306 @@ void ControlGuard(short itemNum)
|
||||||
{
|
{
|
||||||
item->goalAnimState = 4;
|
item->goalAnimState = 4;
|
||||||
}
|
}
|
||||||
else if (v119 || v117)
|
else if (canJump1block || canJump2blocks)
|
||||||
{
|
{
|
||||||
v64 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
v57 = v117 == 0;
|
item->animNumber = animIndex + 50;
|
||||||
item->animNumber = v64 + 50;
|
|
||||||
v65 = Anims[(v64 + 50)].frameBase;
|
|
||||||
item->currentAnimState = 26;
|
item->currentAnimState = 26;
|
||||||
item->frameNumber = v65;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
if (v57)
|
if (canJump1block)
|
||||||
item->goalAnimState = 27;
|
item->goalAnimState = 27;
|
||||||
else
|
else
|
||||||
item->goalAnimState = 28;
|
item->goalAnimState = 28;
|
||||||
LOBYTE(creature->LOT.flags) |= 8u;
|
creature->LOT.isJumping = true;
|
||||||
}
|
}
|
||||||
else if (v45)
|
else if (los)
|
||||||
{
|
{
|
||||||
item->goalAnimState = 1;
|
item->goalAnimState = 1;
|
||||||
}
|
}
|
||||||
else if (info.distance < &unk_900000)
|
else if (info.distance < 0x900000)
|
||||||
{
|
{
|
||||||
item->goalAnimState = 5;
|
item->goalAnimState = 5;
|
||||||
}
|
}
|
||||||
if (item->triggerFlags == 11)
|
if (item->triggerFlags == 11)
|
||||||
{
|
{
|
||||||
LOBYTE(creature->LOT.flags) |= 8u;
|
creature->LOT.isJumping = true;
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
}
|
}
|
||||||
goto LABEL_255;
|
break;
|
||||||
|
|
||||||
case 14:
|
case 14:
|
||||||
v68 = item->pos.yPos;
|
|
||||||
joint2 = laraInfo.angle;
|
joint2 = laraInfo.angle;
|
||||||
v69 = item->floor;
|
|
||||||
if (v68 <= item->floor - 2048 || item->triggerFlags != 5)
|
if (item->pos.yPos <= item->floor - 2048 || item->triggerFlags != 5)
|
||||||
{
|
{
|
||||||
if (v68 >= v69 - 512)
|
if (item->pos.yPos >= item->floor - 512)
|
||||||
item->goalAnimState = 4;
|
item->goalAnimState = 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOWORD(v69) = item->roomNumber;
|
roomNumber = item->roomNumber;
|
||||||
item->triggerFlags = 0;
|
item->triggerFlags = 0;
|
||||||
*a4 = v69;
|
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
|
||||||
v70 = GetFloor(*v42, item->pos.yPos, item->pos.zPos, a4);
|
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
GetHeight(v70, *v42, item->pos.yPos, item->pos.zPos);
|
TestTriggers(TriggerIndex, 1, 0);
|
||||||
TestTriggers(trigger_index, 1, 0);
|
SoundEffect(SFX_LARA_ROPEDOWN_LOOP, &item->pos, 0);
|
||||||
SoundEffect(340, &item->pos, 0);
|
|
||||||
}
|
}
|
||||||
if (abs(info.angle) >= 364)
|
if (abs(info.angle) >= 364)
|
||||||
{
|
{
|
||||||
if ((info.angle & 0x8000u) == 0)
|
if ((info.angle & 0x8000) == 0)
|
||||||
item->pos.yRot += 364;
|
item->pos.yRot += ANGLE(2);
|
||||||
else
|
else
|
||||||
item->pos.yRot -= 364;
|
item->pos.yRot -= ANGLE(2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
item->pos.yRot += info.angle;
|
item->pos.yRot += info.angle;
|
||||||
}
|
}
|
||||||
goto LABEL_255;
|
break;
|
||||||
|
|
||||||
case 15:
|
case 15:
|
||||||
LOWORD(v72) = AIGuard(creature);
|
joint2 = AIGuard(creature);
|
||||||
joint2 = v72;
|
if (creature->alerted)
|
||||||
if (creature->bitfield & 1)
|
|
||||||
item->goalAnimState = 16;
|
item->goalAnimState = 16;
|
||||||
goto LABEL_255;
|
break;
|
||||||
|
|
||||||
case 16:
|
case 16:
|
||||||
case 18:
|
case 18:
|
||||||
v74 = Anims[item->animNumber].frameBase;
|
if (item->frameNumber == Anims[item->animNumber].frameBase)
|
||||||
v75 = item->frameNumber;
|
|
||||||
if (v75 == v74)
|
|
||||||
goto LABEL_254;
|
|
||||||
if (v75 == v74 + 44)
|
|
||||||
{
|
{
|
||||||
v76 = item->roomNumber;
|
roomNumber = item->roomNumber;
|
||||||
*item->pad2 = 0;
|
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
|
||||||
v77 = room[v76].item_number;
|
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
if (v77 == -1)
|
TestTriggers(TriggerIndex, 1, 0);
|
||||||
goto LABEL_255;
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
v78 = v77;
|
|
||||||
v79 = items[v78].object_number;
|
|
||||||
v80 = &items[v78];
|
|
||||||
if (v79 >= 416 && v79 <= 444 && v80->roomNumber == v76)
|
|
||||||
{
|
|
||||||
v81 = v80->triggerFlags;
|
|
||||||
if (v81 > 2 && v81 < 5)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
v77 = v80->next_item;
|
|
||||||
if (v77 == -1)
|
if (item->frameNumber == Anims[item->animNumber].frameBase + 44)
|
||||||
goto LABEL_255;
|
|
||||||
}
|
|
||||||
v80->mesh_bits = -3;
|
|
||||||
}
|
|
||||||
else if (v75 == Anims[item->animNumber].frame_end)
|
|
||||||
{
|
{
|
||||||
item->pos.yRot -= 0x4000;
|
*item->pad2 = 0;
|
||||||
|
short currentItemNumber = Rooms[item->roomNumber].itemNumber;
|
||||||
|
if (currentItemNumber == NO_ITEM)
|
||||||
|
break;
|
||||||
|
|
||||||
|
ITEM_INFO * currentItem;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
currentItem = &Items[currentItemNumber];
|
||||||
|
|
||||||
|
if (currentItem->objectNumber >= ID_ANIMATING1
|
||||||
|
&& currentItem->objectNumber <= ID_ANIMATING15
|
||||||
|
&& currentItem->roomNumber == item->roomNumber)
|
||||||
|
{
|
||||||
|
if (currentItem->triggerFlags > 2 && currentItem->triggerFlags < 5)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
goto LABEL_255;
|
currentItemNumber = currentItem->nextItem;
|
||||||
|
if (currentItemNumber == -1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentItemNumber == NO_ITEM)
|
||||||
|
break;
|
||||||
|
|
||||||
|
currentItem->meshBits = -3;
|
||||||
|
}
|
||||||
|
else if (item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||||
|
{
|
||||||
|
item->pos.yRot -= ANGLE(90);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 17:
|
case 17:
|
||||||
v71 = item->_bf15ea;
|
|
||||||
joint2 = 0;
|
joint2 = 0;
|
||||||
if (!(v71 & 0x10) && LaraItem->speed < 40 && !(*(&lara + 69) & 0x10))
|
if (!item->hitStatus && LaraItem->speed < 40 && !Lara.hasFired)
|
||||||
creature->bitfield &= 0xFFFEu;
|
creature->alerted = false;
|
||||||
if (creature->bitfield & 1)
|
if (creature->alerted)
|
||||||
item->goalAnimState = 18;
|
item->goalAnimState = 18;
|
||||||
goto LABEL_255;
|
|
||||||
case 19:
|
|
||||||
LOWORD(v73) = AIGuard(creature);
|
|
||||||
joint2 = v73;
|
|
||||||
if (creature->bitfield & 1)
|
|
||||||
item->goalAnimState = 1;
|
|
||||||
goto LABEL_255;
|
|
||||||
case 30:
|
|
||||||
goto LABEL_176;
|
|
||||||
case 31:
|
|
||||||
if (item->triggerFlags != 8 || !v45 || item->_bf15ea & 0x10)
|
|
||||||
item->goalAnimState = 30;
|
|
||||||
LABEL_176:
|
|
||||||
creature->LOT.flags &= 0xFFF7u;
|
|
||||||
v57 = v119 == 0;
|
|
||||||
creature->maximumTurn = 910;
|
|
||||||
if (!v57 || v117 || info.distance < 0x100000 || !v45 || item->_bf15ea & 0x10)
|
|
||||||
item->goalAnimState = 1;
|
|
||||||
goto LABEL_255;
|
|
||||||
case 36:
|
|
||||||
goto LABEL_253;
|
|
||||||
case 37:
|
|
||||||
v82 = 0;
|
|
||||||
for (i = room[item->roomNumber].item_number; i != -1; i = v82->next_item)
|
|
||||||
{
|
|
||||||
v82 = &items[i];
|
|
||||||
if (items[i].object_number == 249)
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
v84 = item->frameNumber;
|
case 19:
|
||||||
v85 = &Anims[item->animNumber];
|
joint2 = AIGuard(creature);
|
||||||
creature2 = v85;
|
if (creature->alerted)
|
||||||
LOWORD(v85) = HIWORD(v85->aiTarget.floor);
|
|
||||||
if (v84 == v85)
|
|
||||||
{
|
|
||||||
v86 = v82->pos.yRot;
|
|
||||||
v82->mesh_bits = 0x1FFF;
|
|
||||||
item->pos.yRot = v86;
|
|
||||||
item->pos.xPos = v82->pos.xPos - 256;
|
|
||||||
v87 = v82->pos.zPos;
|
|
||||||
*item->pad2 = 1024;
|
|
||||||
item->pos.zPos = v87 + 128;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
v85 = v85;
|
|
||||||
v88 = v84;
|
|
||||||
if (v84 == v85 + 32)
|
|
||||||
{
|
|
||||||
v82->mesh_bits = 16381;
|
|
||||||
}
|
|
||||||
else if (v84 == v85->aiTarget.item_flags)
|
|
||||||
{
|
|
||||||
v82->mesh_bits = 278461;
|
|
||||||
}
|
|
||||||
else if (v84 == &v85->aiTarget.pad_ex_light[16])
|
|
||||||
{
|
|
||||||
v82->mesh_bits = 802621;
|
|
||||||
}
|
|
||||||
else if (v84 == (&v85->aiTarget.draw_room + 1))
|
|
||||||
{
|
|
||||||
v82->mesh_bits = 819001;
|
|
||||||
}
|
|
||||||
else if (v84 == &v85->aiTarget.pad1[30])
|
|
||||||
{
|
|
||||||
v82->mesh_bits = 17592121;
|
|
||||||
}
|
|
||||||
else if (v84 == LOWORD(creature2->aiTarget.touch_bits))
|
|
||||||
{
|
|
||||||
v82->mesh_bits = 0x1FFF;
|
|
||||||
LOWORD(v88) = item->roomNumber;
|
|
||||||
*a4 = v88;
|
|
||||||
v89 = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, a4);
|
|
||||||
GetHeight(v89, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
|
||||||
TestTriggers(trigger_index, 1, 0);
|
|
||||||
item->requriedAnimState = 5;
|
|
||||||
*item->pad2 = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
goto LABEL_255;
|
|
||||||
case 38:
|
|
||||||
if ((v120 != 69 || item != lara.target)
|
|
||||||
&& (GetRandomControl() & 0x7F || (v90 = item->triggerFlags, v90 >= 10) || v90 == 9))
|
|
||||||
{
|
|
||||||
v91 = item->_bf15ea;
|
|
||||||
if (v91 & 0x200)
|
|
||||||
{
|
|
||||||
LOWORD(v92) = AIGuard(creature);
|
|
||||||
joint2 = v92;
|
|
||||||
v93 = item->_bf15ea;
|
|
||||||
if (v93 & 0x800)
|
|
||||||
{
|
|
||||||
if (--item->triggerFlags < 1)
|
|
||||||
{
|
|
||||||
BYTE1(v93) = BYTE1(v93) & 0xC9 | 8;
|
|
||||||
item->_bf15ea = v93;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LABEL_242:
|
|
||||||
item->goalAnimState = 1;
|
item->goalAnimState = 1;
|
||||||
}
|
break;
|
||||||
goto LABEL_255;
|
|
||||||
case 39:
|
case 30:
|
||||||
if (item != lara.target && !(GetRandomControl() & 0x3F))
|
case 31:
|
||||||
|
if (item->currentAnimState == 31)
|
||||||
{
|
{
|
||||||
v94 = item->triggerFlags;
|
if (item->triggerFlags != 8 || !los || item->hitStatus)
|
||||||
if (v94 == 7 || v94 == 9)
|
item->goalAnimState = 30;
|
||||||
item->requriedAnimState = 38;
|
|
||||||
item->goalAnimState = 1;
|
|
||||||
}
|
}
|
||||||
LABEL_253:
|
|
||||||
HIWORD(v44) = HIWORD(anims);
|
creature->LOT.isJumping = false;
|
||||||
|
creature->maximumTurn = ANGLE(5);
|
||||||
|
if (canJump1block || canJump2blocks || info.distance < 0x100000 || !los || item->hitStatus)
|
||||||
|
item->goalAnimState = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 36:
|
||||||
if (item->frameNumber == Anims[item->animNumber].frameBase + 39)
|
if (item->frameNumber == Anims[item->animNumber].frameBase + 39)
|
||||||
{
|
{
|
||||||
LABEL_254:
|
roomNumber = item->roomNumber;
|
||||||
LOWORD(v44) = item->roomNumber;
|
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
|
||||||
*a4 = v44;
|
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
v95 = GetFloor(*v42, item->pos.yPos, item->pos.zPos, a4);
|
TestTriggers(TriggerIndex, 1, 0);
|
||||||
GetHeight(v95, *v42, item->pos.yPos, item->pos.zPos);
|
|
||||||
TestTriggers(trigger_index, 1, 0);
|
|
||||||
}
|
}
|
||||||
goto LABEL_255;
|
break;
|
||||||
|
|
||||||
|
case 37:
|
||||||
|
ITEM_INFO* currentItem = NULL;
|
||||||
|
for (short currentItemNumber = Rooms[item->roomNumber].itemNumber; currentItemNumber != NO_ITEM; currentItemNumber = currentItem->nextItem)
|
||||||
|
{
|
||||||
|
currentItem = &Items[currentItemNumber];
|
||||||
|
if (item->objectNumber == ID_PUZZLE_HOLE8)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->frameNumber == Anims[item->animNumber].frameBase)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 0x1FFF;
|
||||||
|
item->pos.xPos = currentItem->pos.xPos - 256;
|
||||||
|
item->pos.yRot = currentItem->pos.yRot;
|
||||||
|
item->pos.zPos = currentItem->pos.zPos + 128;
|
||||||
|
*item->pad2 = 1024;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (item->frameNumber == Anims[item->animNumber].frameBase + 32)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 16381;
|
||||||
|
}
|
||||||
|
else if (item->frameNumber == Anims[item->animNumber].frameBase + 74)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 278461;
|
||||||
|
}
|
||||||
|
else if (item->frameNumber == Anims[item->animNumber].frameBase + 120)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 802621;
|
||||||
|
}
|
||||||
|
else if (item->frameNumber == Anims[item->animNumber].frameBase + 157)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 819001;
|
||||||
|
}
|
||||||
|
else if (item->frameNumber == Anims[item->animNumber].frameBase + 190)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 17592121;
|
||||||
|
}
|
||||||
|
else if (item->frameNumber == Anims[item->animNumber].frameBase + Anims[item->animNumber].frameEnd)
|
||||||
|
{
|
||||||
|
currentItem->meshBits = 0x1FFF;
|
||||||
|
roomNumber = item->roomNumber;
|
||||||
|
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
|
||||||
|
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
|
TestTriggers(TriggerIndex, 1, 0);
|
||||||
|
item->requiredAnimState = 5;
|
||||||
|
*item->pad2 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 38:
|
||||||
|
if ((item->objectNumber != ID_SCIENTIST || item != Lara.target)
|
||||||
|
&& (GetRandomControl() & 0x7F || item->triggerFlags >= 10 || item->triggerFlags == 9))
|
||||||
|
{
|
||||||
|
if (item->aiBits & GUARD)
|
||||||
|
{
|
||||||
|
joint2 = AIGuard(creature);
|
||||||
|
if (item->aiBits & PATROL1)
|
||||||
|
{
|
||||||
|
item->triggerFlags--;
|
||||||
|
if (item->triggerFlags < 1)
|
||||||
|
{
|
||||||
|
item->aiBits = PATROL1 | MODIFY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item->goalAnimState = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 39:
|
||||||
|
if (item != Lara.target && !(GetRandomControl() & 0x3F))
|
||||||
|
{
|
||||||
|
if (item->triggerFlags == 7 || item->triggerFlags == 9)
|
||||||
|
item->requiredAnimState = 38;
|
||||||
|
item->goalAnimState = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item->frameNumber == Anims[item->animNumber].frameBase + 39)
|
||||||
|
{
|
||||||
|
roomNumber = item->roomNumber;
|
||||||
|
floor = GetFloor(item->pos.xPos, item->pos.yPos, item->pos.zPos, &roomNumber);
|
||||||
|
GetFloorHeight(floor, item->pos.xPos, item->pos.yPos, item->pos.zPos);
|
||||||
|
TestTriggers(TriggerIndex, 1, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
goto LABEL_255;
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LABEL_255:
|
|
||||||
CreatureJoint(item, 0, joint0);
|
CreatureJoint(item, 0, joint0);
|
||||||
CreatureJoint(item, 1, joint1);
|
CreatureJoint(item, 1, joint1);
|
||||||
CreatureJoint(item, 2, joint2);
|
CreatureJoint(item, 2, joint2);
|
||||||
if (!(creature->bitfield & 8))
|
|
||||||
goto LABEL_269;
|
if (creature->reachedGoal && creature->enemy)
|
||||||
v97 = creature->enemy;
|
|
||||||
if (!v97)
|
|
||||||
goto LABEL_269;
|
|
||||||
v98 = v97->flags;
|
|
||||||
if (v98 != 4)
|
|
||||||
{
|
{
|
||||||
if (v98 & 0x10)
|
ITEM_INFO* enemy = creature->enemy;
|
||||||
|
|
||||||
|
if (enemy->flags != 4)
|
||||||
|
{
|
||||||
|
if (enemy->flags & 0x10)
|
||||||
{
|
{
|
||||||
v99 = item->_bf15ea;
|
|
||||||
item->goalAnimState = 1;
|
item->goalAnimState = 1;
|
||||||
item->requriedAnimState = 38;
|
item->requiredAnimState = 38;
|
||||||
item->triggerFlags = 300;
|
item->triggerFlags = 300;
|
||||||
BYTE1(v99) &= 0xCBu;
|
item->aiBits = GUARD | PATROL1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (v98 & 0x20)
|
if (enemy->flags & 0x20)
|
||||||
{
|
{
|
||||||
v100 = item->_bf15ea;
|
|
||||||
item->goalAnimState = 1;
|
item->goalAnimState = 1;
|
||||||
item->requriedAnimState = 36;
|
item->requiredAnimState = 36;
|
||||||
BYTE1(v100) = BYTE1(v100) & 0xC9 | 8;
|
item->aiBits = PATROL1 | MODIFY;
|
||||||
item->_bf15ea = v100;
|
|
||||||
goto LABEL_268;
|
|
||||||
}
|
}
|
||||||
LOWORD(v96) = v97->roomNumber;
|
else
|
||||||
*a4 = v96;
|
{
|
||||||
v101 = GetFloor(creature->enemy->pos.xPos, creature->enemy->pos.yPos, creature->enemy->pos.zPos, a4);
|
roomNumber = enemy->roomNumber;
|
||||||
GetHeight(v101, creature->enemy->pos.xPos, creature->enemy->pos.yPos, creature->enemy->pos.zPos);
|
floor = GetFloor(creature->enemy->pos.xPos, creature->enemy->pos.yPos, creature->enemy->pos.zPos, &roomNumber);
|
||||||
TestTriggers(trigger_index, 1, 0);
|
GetFloorHeight(floor, creature->enemy->pos.xPos, creature->enemy->pos.yPos, creature->enemy->pos.zPos);
|
||||||
item->requriedAnimState = 5;
|
TestTriggers(TriggerIndex, 1, 0);
|
||||||
|
item->requiredAnimState = 5;
|
||||||
if (creature->enemy->flags & 2)
|
if (creature->enemy->flags & 2)
|
||||||
item->item_flags[3] = item->pad2[6] - 1;
|
item->itemFlags[3] = item->pad2[6] - 1;
|
||||||
if (!(creature->enemy->flags & 8))
|
if (creature->enemy->flags & 8)
|
||||||
goto LABEL_268;
|
{
|
||||||
v99 = item->_bf15ea;
|
item->requiredAnimState = 1;
|
||||||
item->requriedAnimState = 1;
|
|
||||||
item->triggerFlags = 300;
|
item->triggerFlags = 300;
|
||||||
|
item->aiBits |= GUARD | PATROL1;
|
||||||
}
|
}
|
||||||
BYTE1(v99) |= 0xAu;
|
|
||||||
item->_bf15ea = v99;
|
|
||||||
goto LABEL_268;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
item->goalAnimState = 1;
|
item->goalAnimState = 1;
|
||||||
item->requriedAnimState = 37;
|
item->requiredAnimState = 37;
|
||||||
LABEL_268:
|
}
|
||||||
++item->item_flags[3];
|
}
|
||||||
creature->bitfield &= 0xFFF7u;
|
|
||||||
creature->enemy = 0;
|
if ((item->currentAnimState >= 20
|
||||||
LABEL_269:
|
|| item->currentAnimState == 6
|
||||||
v102 = item->currentAnimState;
|
|| item->currentAnimState == 8)
|
||||||
if ((v102 >= 20 || v102 == 6 || v102 == 8) && v102 != 30)
|
&& item->currentAnimState != 30)
|
||||||
{
|
{
|
||||||
CreatureAnimation(itemNum, angle, 0);
|
CreatureAnimation(itemNum, angle, 0);
|
||||||
}
|
}
|
||||||
|
@ -858,58 +852,46 @@ LABEL_269:
|
||||||
switch (CreatureVault(itemNum, angle, 2, 256) + 4)
|
switch (CreatureVault(itemNum, angle, 2, 256) + 4)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
v113 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
item->animNumber = v113 + 38;
|
item->animNumber = animIndex + 38;
|
||||||
v114 = Anims[(v113 + 38)].frameBase;
|
|
||||||
item->currentAnimState = 23;
|
item->currentAnimState = 23;
|
||||||
item->frameNumber = v114;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
v111 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
v111 += 39;
|
item->animNumber = animIndex + 39;
|
||||||
item->animNumber = v111;
|
|
||||||
v112 = Anims[v111].frameBase;
|
|
||||||
item->currentAnimState = 24;
|
item->currentAnimState = 24;
|
||||||
item->frameNumber = v112;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
v109 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
item->animNumber = v109 + 40;
|
item->animNumber = animIndex + 40;
|
||||||
v110 = Anims[(v109 + 40)].frameBase;
|
|
||||||
item->currentAnimState = 25;
|
item->currentAnimState = 25;
|
||||||
item->frameNumber = v110;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
v103 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
item->animNumber = v103 + 35;
|
item->animNumber = animIndex + 35;
|
||||||
v104 = Anims[(v103 + 35)].frameBase;
|
|
||||||
item->currentAnimState = 20;
|
item->currentAnimState = 20;
|
||||||
item->frameNumber = v104;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
v105 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
v105 += 36;
|
item->animNumber = animIndex + 36;
|
||||||
item->animNumber = v105;
|
|
||||||
v106 = Anims[v105].frameBase;
|
|
||||||
item->currentAnimState = 21;
|
item->currentAnimState = 21;
|
||||||
item->frameNumber = v106;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
v107 = animIndex;
|
|
||||||
creature->maximumTurn = 0;
|
creature->maximumTurn = 0;
|
||||||
item->animNumber = v107 + 37;
|
item->animNumber = animIndex + 37;
|
||||||
v108 = Anims[(v107 + 37)].frameBase;
|
|
||||||
item->currentAnimState = 22;
|
item->currentAnimState = 22;
|
||||||
item->frameNumber = v108;
|
item->frameNumber = Anims[item->animNumber].frameBase;
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
}
|
||||||
}*/
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../Global/global.h"
|
#include "../Global/global.h"
|
||||||
|
|
||||||
#define ControlGuard ((void (__cdecl*)(short)) 0x0046F5E0)
|
//#define ControlGuard ((void (__cdecl*)(short)) 0x0046F5E0)
|
||||||
#define ControlSubmarine ((void (__cdecl*)(short)) 0x0045D3F0)
|
#define ControlSubmarine ((void (__cdecl*)(short)) 0x0045D3F0)
|
||||||
#define ControlDoberman ((void (__cdecl*)(short)) 0x00428A10)
|
#define ControlDoberman ((void (__cdecl*)(short)) 0x00428A10)
|
||||||
#define ControlDog ((void (__cdecl*)(short)) 0x0043B730)
|
#define ControlDog ((void (__cdecl*)(short)) 0x0043B730)
|
||||||
|
@ -54,3 +54,4 @@ void PushableBlockCollision(short itemNum, ITEM_INFO* laraitem, COLL_INFO* coll)
|
||||||
int TestBlockMovable(ITEM_INFO* item, int blokhite);
|
int TestBlockMovable(ITEM_INFO* item, int blokhite);
|
||||||
int TestBlockPush(ITEM_INFO* item, int blokhite, unsigned short quadrant);
|
int TestBlockPush(ITEM_INFO* item, int blokhite, unsigned short quadrant);
|
||||||
int TestBlockPull(ITEM_INFO* item, int blokhite, short quadrant);
|
int TestBlockPull(ITEM_INFO* item, int blokhite, short quadrant);
|
||||||
|
void ControlGuard(short itemNum);
|
Loading…
Add table
Add a link
Reference in a new issue