TombEngine/TR5Main/Game/items.cpp

98 lines
1.9 KiB
C++
Raw Normal View History

2018-08-19 09:46:58 +02:00
#include "items.h"
#include "..\Global\global.h"
#include "effect2.h"
#include <stdio.h>
void __cdecl ClearItem(__int16 itemNum)
{
ITEM_INFO* item = &Items[itemNum];
item->data = NULL;
item->collidable = true;
}
__int16 __cdecl CreateItem()
{
__int16 result = NextItemFree;
if (NextItemFree != NO_ITEM)
{
Items[NextItemFree].flags = 0;
NextItemFree = Items[NextItemFree].nextItem;
}
return result;
}
void __cdecl KillItem(__int16 itemNum)
{
if (InItemControlLoop)
{
ItemNewRooms[2 * ItemNewRoomNo] = itemNum | 0x8000;
ItemNewRoomNo++;
}
else
{
ITEM_INFO* item = &Items[itemNum];
DetatchSpark(itemNum, 128);
item->active = false;
item->reallyActive = false;
if (NextItemActive == itemNum)
{
NextItemActive = item->nextActive;
}
else if (NextItemActive != NO_ITEM)
{
__int16 linknum;
for (linknum = Items[NextItemActive].nextActive; linknum != NO_ITEM; linknum = Items[linknum].nextActive)
{
if (linknum == itemNum)
{
Items[linknum].nextActive = item->nextActive;
break;
}
}
}
if (item->roomNumber != 255)
{
if (Rooms[item->roomNumber].itemNumber == itemNum)
{
Rooms[item->roomNumber].itemNumber = item->nextItem;
}
else if (Rooms[item->roomNumber].itemNumber != -1)
{
short linknum;
for (linknum = Items[Rooms[item->roomNumber].itemNumber].nextItem; linknum != NO_ITEM; linknum = Items[linknum].nextItem)
{
if (linknum == itemNum)
{
Items[Rooms[item->roomNumber].itemNumber].nextItem = item->nextItem;
break;
}
}
}
}
if (item == Lara.target)
Lara.target = NULL;
if (itemNum >= LevelItems)
{
item->nextItem = NextItemFree;
NextItemFree = itemNum;
}
else
{
item->flags |= IFLAG_KILLED;
}
}
}
2018-08-19 09:46:58 +02:00
void Inject_Items()
{
INJECT(0x00440840, CreateItem);
INJECT(0x00440620, KillItem);
2018-09-09 21:58:38 +02:00
//INJECT(0x00440DA0, ItemNewRoom);
2018-08-19 09:46:58 +02:00
}