mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-07 11:13:53 +03:00
Rename cupboard functions; Add trapdoor functions; Add camera information to diagnostics
This commit is contained in:
parent
d80ae316b9
commit
9475ceed7c
7 changed files with 267 additions and 57 deletions
|
@ -5,11 +5,6 @@
|
|||
#define InitialiseDoor ((void (__cdecl*)(short)) 0x0043DB60)
|
||||
#define DrawLiftDoor ((void (__cdecl*)(ITEM_INFO*)) 0x0045AAF0)
|
||||
#define DoubleDoorControl ((void (__cdecl*)(short)) 0x00429840)
|
||||
#define InitialiseTrapDoor ((void (__cdecl*)(short)) 0x0043D2F0)
|
||||
#define TrapDoorFloorCollision ((void (__cdecl*)(short,ITEM_INFO*,COLL_INFO*)) 0x004891F0)
|
||||
#define TrapDoorCeilingCollision ((void (__cdecl*)(short,ITEM_INFO*,COLL_INFO*)) 0x00489450)
|
||||
#define TrapDoorNormalCollision ((void (__cdecl*)(short,ITEM_INFO*,COLL_INFO*)) 0x004896D0)
|
||||
#define TrapDoorControl ((void (__cdecl*)(short)) 0x00488FA0)
|
||||
#define InitialiseSteelDoor ((void (__cdecl*)(short)) 0x0043F180)
|
||||
#define SteelDoorControl ((void (__cdecl*)(short)) 0x00486BE0)
|
||||
#define SteelDoorCollision ((void (__cdecl*)(short,ITEM_INFO*,COLL_INFO*)) 0x00487AD0)
|
||||
|
|
|
@ -1436,14 +1436,7 @@ void InitialisePickup(short itemNumber)
|
|||
}
|
||||
}
|
||||
|
||||
/// related to cupboard !!!
|
||||
#define CupboardBounds ARRAY_(0x00509C1C, short, [])
|
||||
#define CupboardPos VAR_U_(0x0051CF70, PHD_VECTOR)
|
||||
#define CupboardAnims ARRAY_(0x00509C3C, short, [])
|
||||
#define CupboardOffsets ARRAY_(0x00509C44, short, [])
|
||||
#define CupboardFrames ARRAY_(0x00509C34, short, [])
|
||||
|
||||
void InitialiseCupboard(short itemNumber)
|
||||
void InitialiseSearchObject(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item, *item2;
|
||||
short itemNumber2;
|
||||
|
@ -1491,7 +1484,7 @@ void InitialiseCupboard(short itemNumber)
|
|||
}
|
||||
}
|
||||
|
||||
void CupboardCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracoll)
|
||||
void SearchObjectCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracoll)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
int objNumber;
|
||||
|
@ -1506,30 +1499,30 @@ void CupboardCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracol
|
|||
bounds = GetBoundsAccurate(item);
|
||||
if (item->objectNumber != ID_SEARCH_OBJECT1)
|
||||
{
|
||||
CupboardBounds[0] = bounds[0] - 128;
|
||||
CupboardBounds[1] = bounds[1] + 128;
|
||||
SOBounds[0] = bounds[0] - 128;
|
||||
SOBounds[1] = bounds[1] + 128;
|
||||
}
|
||||
else
|
||||
{
|
||||
CupboardBounds[0] = bounds[0] + 64;
|
||||
CupboardBounds[1] = bounds[1] - 64;
|
||||
SOBounds[0] = bounds[0] + 64;
|
||||
SOBounds[1] = bounds[1] - 64;
|
||||
}
|
||||
CupboardBounds[4] = bounds[4] - 200;
|
||||
CupboardBounds[5] = bounds[5] + 200;
|
||||
CupboardPos.z = bounds[4] - CupboardOffsets[objNumber];
|
||||
SOBounds[4] = bounds[4] - 200;
|
||||
SOBounds[5] = bounds[5] + 200;
|
||||
SOPos.z = bounds[4] - SearchOffsets[objNumber];
|
||||
|
||||
if (TestLaraPosition(CupboardBounds, item, laraitem))
|
||||
if (TestLaraPosition(SOBounds, item, laraitem))
|
||||
{
|
||||
if (MoveLaraPosition(&CupboardPos, item, laraitem))
|
||||
if (MoveLaraPosition(&SOPos, item, laraitem))
|
||||
{
|
||||
laraitem->currentAnimState = STATE_LARA_MISC_CONTROL;
|
||||
laraitem->animNumber = CupboardAnims[objNumber];
|
||||
laraitem->animNumber = SearchAnims[objNumber];
|
||||
laraitem->frameNumber = Anims[laraitem->animNumber].frameBase;
|
||||
Lara.isMoving = false;
|
||||
Lara.headYrot = 0;
|
||||
Lara.headXrot = 0;
|
||||
Lara.headZrot = 0;
|
||||
Lara.torsoYrot = 0;
|
||||
Lara.torsoXrot = 0;
|
||||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
|
||||
if (item->objectNumber == ID_SEARCH_OBJECT4)
|
||||
|
@ -1554,7 +1547,7 @@ void CupboardCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracol
|
|||
else if (Lara.isMoving && Lara.generalPtr == (void *) itemNumber)
|
||||
{
|
||||
Lara.isMoving = false;
|
||||
Lara.generalPtr = NULL;
|
||||
Lara.gunStatus = LG_NO_ARMS;
|
||||
}
|
||||
}
|
||||
else if (laraitem->currentAnimState != STATE_LARA_MISC_CONTROL)
|
||||
|
@ -1563,7 +1556,7 @@ void CupboardCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracol
|
|||
}
|
||||
}
|
||||
|
||||
void CupboardControl(short itemNumber)
|
||||
void SearchObjectControl(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item, *item2;
|
||||
int objNumber;
|
||||
|
@ -1616,7 +1609,7 @@ void CupboardControl(short itemNumber)
|
|||
}
|
||||
}
|
||||
|
||||
if (frameNumber == CupboardFrames[objNumber])
|
||||
if (frameNumber == SearchCollectFrames[objNumber])
|
||||
{
|
||||
if (item->objectNumber == ID_SEARCH_OBJECT4)
|
||||
{
|
||||
|
|
|
@ -21,12 +21,9 @@ short* FindPlinth(ITEM_INFO* item);
|
|||
void PuzzleDone(ITEM_INFO* item, short itemNum);
|
||||
void PickupControl(short itemNum);
|
||||
|
||||
#define _InitialiseCupboard ((void (__cdecl*)(short)) 0x0043EDB0)
|
||||
#define _CupboardCollision ((void (__cdecl*)(short,ITEM_INFO*,COLL_INFO*)) 0x004699A0)
|
||||
#define _CupboardControl ((void (__cdecl*)(short)) 0x00469660)
|
||||
void InitialiseCupboard(short itemNumber);
|
||||
void CupboardCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracoll);
|
||||
void CupboardControl(short itemNumber);
|
||||
void InitialiseSearchObject(short itemNumber);
|
||||
void SearchObjectCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* laracoll);
|
||||
void SearchObjectControl(short itemNumber);
|
||||
|
||||
void Inject_Pickup();
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
#include "traps.h"
|
||||
#include "..\Global\global.h"
|
||||
#include "items.h"
|
||||
#include "collide.h"
|
||||
|
||||
static short CeilingTrapDoorBounds[12] = {-256, 256, 0, 900, -768, -256, -1820, 1820, -5460, 5460, -1820, 1820};
|
||||
static PHD_VECTOR CeilingTrapDoorPos = {0, 1056, -480};
|
||||
static short FloorTrapDoorBounds[12] = {-256, 256, 0, 0, -1024, -256, -1820, 1820, -5460, 5460, -1820, 1820};
|
||||
static PHD_VECTOR FloorTrapDoorPos = {0, 0, -655};
|
||||
|
||||
void LaraBurn()
|
||||
{
|
||||
|
@ -14,3 +20,213 @@ void LaraBurn()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InitialiseTrapDoor(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
CloseTrapDoor(item);
|
||||
}
|
||||
|
||||
void TrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
if (item->currentAnimState == 1 && item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||
ObjectCollision(itemNumber, l, coll);
|
||||
}
|
||||
|
||||
void CeilingTrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
int result, result2;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
result = TestLaraPosition(CeilingTrapDoorBounds, item, l);
|
||||
l->pos.yRot += ANGLE(180);
|
||||
result2 = TestLaraPosition(CeilingTrapDoorBounds, item, l);
|
||||
l->pos.yRot += ANGLE(180);
|
||||
if (TrInput & IN_ACTION && item->status != ITEM_DEACTIVATED && l->currentAnimState == STATE_LARA_JUMP_UP && l->gravityStatus && Lara.gunStatus == LG_NO_ARMS && (result || result2))
|
||||
{
|
||||
AlignLaraPosition(&CeilingTrapDoorPos, item, l);
|
||||
if (result2)
|
||||
l->pos.yRot += ANGLE(180);
|
||||
Lara.headYrot = 0;
|
||||
Lara.headXrot = 0;
|
||||
Lara.torsoYrot = 0;
|
||||
Lara.torsoXrot = 0;
|
||||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
l->gravityStatus = false;
|
||||
l->fallspeed = 0;
|
||||
l->animNumber = ANIMATION_LARA_CEILING_TRAPDOOR_OPEN;
|
||||
l->frameNumber = Anims[l->animNumber].frameBase;
|
||||
l->currentAnimState = STATE_LARA_FREEFALL_BIS;
|
||||
AddActiveItem(itemNumber);
|
||||
item->status = ITEM_ACTIVE;
|
||||
item->goalAnimState = 1;
|
||||
|
||||
UseForcedFixedCamera = 1;
|
||||
ForcedFixedCamera.x = item->pos.xPos - SIN(item->pos.yRot) / 16;
|
||||
ForcedFixedCamera.y = item->pos.yPos + 1024;
|
||||
ForcedFixedCamera.z = item->pos.zPos - COS(item->pos.yRot) / 16;
|
||||
ForcedFixedCamera.roomNumber = item->roomNumber;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item->currentAnimState == 1)
|
||||
UseForcedFixedCamera = 0;
|
||||
}
|
||||
|
||||
if (item->currentAnimState == 1 && item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||
ObjectCollision(itemNumber, l, coll);
|
||||
}
|
||||
|
||||
void FloorTrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
if (TrInput & IN_ACTION && item->status != ITEM_DEACTIVATED && l->currentAnimState == STATE_LARA_STOP && l->animNumber == ANIMATION_LARA_STAY_IDLE && Lara.gunStatus == LG_NO_ARMS
|
||||
|| Lara.isMoving && Lara.generalPtr == (void *) itemNumber)
|
||||
{
|
||||
if (TestLaraPosition(FloorTrapDoorBounds, item, l))
|
||||
{
|
||||
if (MoveLaraPosition(&FloorTrapDoorPos, item, l))
|
||||
{
|
||||
l->animNumber = ANIMATION_LARA_FLOOR_TRAPDOOR_OPEN;
|
||||
l->frameNumber = Anims[l->animNumber].frameBase;
|
||||
l->currentAnimState = STATE_LARA_TRAPDOOR_FLOOR_OPEN;
|
||||
Lara.isMoving = false;
|
||||
Lara.headYrot = 0;
|
||||
Lara.headXrot = 0;
|
||||
Lara.torsoYrot = 0;
|
||||
Lara.torsoXrot = 0;
|
||||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
AddActiveItem(itemNumber);
|
||||
item->status = ITEM_ACTIVE;
|
||||
item->goalAnimState = 1;
|
||||
|
||||
UseForcedFixedCamera = 1;
|
||||
ForcedFixedCamera.x = item->pos.xPos - SIN(item->pos.yRot) / 8;
|
||||
ForcedFixedCamera.y = item->pos.yPos - 2048;
|
||||
if (ForcedFixedCamera.y < Rooms[item->roomNumber].maxceiling)
|
||||
ForcedFixedCamera.y = Rooms[item->roomNumber].maxceiling;
|
||||
ForcedFixedCamera.z = item->pos.zPos - COS(item->pos.yRot) / 8;
|
||||
ForcedFixedCamera.roomNumber = item->roomNumber;
|
||||
}
|
||||
else
|
||||
{
|
||||
Lara.generalPtr = (void *) itemNumber;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item->currentAnimState == 1)
|
||||
UseForcedFixedCamera = 0;
|
||||
}
|
||||
|
||||
if (item->currentAnimState == 1 && item->frameNumber == Anims[item->animNumber].frameEnd)
|
||||
ObjectCollision(itemNumber, l, coll);
|
||||
}
|
||||
|
||||
void TrapDoorControl(short itemNumber)
|
||||
{
|
||||
ITEM_INFO* item;
|
||||
|
||||
item = &Items[itemNumber];
|
||||
if (TriggerActive(item))
|
||||
{
|
||||
if (!item->currentAnimState && item->triggerFlags >= 0)
|
||||
{
|
||||
item->goalAnimState = 1;
|
||||
}
|
||||
else if (item->frameNumber == Anims[item->animNumber].frameEnd && CurrentLevel == 14 && item->objectNumber == ID_TRAPDOOR1)
|
||||
{
|
||||
item->status = ITEM_INVISIBLE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
item->status = ITEM_ACTIVE;
|
||||
|
||||
if (item->currentAnimState == 1)
|
||||
{
|
||||
item->goalAnimState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
AnimateItem(item);
|
||||
|
||||
if (item->currentAnimState == 1 && (item->itemFlags[2] || JustLoaded))
|
||||
{
|
||||
OpenTrapDoor(item);
|
||||
}
|
||||
else if (!item->currentAnimState && !item->itemFlags[2])
|
||||
{
|
||||
CloseTrapDoor(item);
|
||||
}
|
||||
}
|
||||
|
||||
void CloseTrapDoor(ITEM_INFO* item)
|
||||
{
|
||||
ROOM_INFO* r;
|
||||
FLOOR_INFO* floor;
|
||||
unsigned short pitsky;
|
||||
|
||||
r = &Rooms[item->roomNumber];
|
||||
floor = &XZ_GET_SECTOR(r, item->pos.xPos - r->x, item->pos.zPos - r->z);
|
||||
pitsky = 0;
|
||||
|
||||
if (item->pos.yPos == r->minfloor)
|
||||
{
|
||||
pitsky = floor->pitRoom;
|
||||
floor->pitRoom = NO_ROOM;
|
||||
r = &Rooms[pitsky];
|
||||
floor = &XZ_GET_SECTOR(r, item->pos.xPos - r->x, item->pos.zPos - r->z);
|
||||
pitsky |= floor->skyRoom << 8;
|
||||
floor->skyRoom = NO_ROOM;
|
||||
}
|
||||
else if (item->pos.yPos == r->maxceiling)
|
||||
{
|
||||
pitsky = floor->skyRoom;
|
||||
floor->skyRoom = NO_ROOM;
|
||||
r = &Rooms[pitsky];
|
||||
floor = &XZ_GET_SECTOR(r, item->pos.xPos - r->x, item->pos.zPos - r->z);
|
||||
pitsky = pitsky << 8 | floor->pitRoom;
|
||||
floor->pitRoom = NO_ROOM;
|
||||
}
|
||||
|
||||
item->itemFlags[2] = 1;
|
||||
item->itemFlags[3] = pitsky;
|
||||
}
|
||||
|
||||
void OpenTrapDoor(ITEM_INFO* item)
|
||||
{
|
||||
ROOM_INFO* r;
|
||||
FLOOR_INFO* floor;
|
||||
unsigned short pitsky;
|
||||
|
||||
r = &Rooms[item->roomNumber];
|
||||
floor = &XZ_GET_SECTOR(r, item->pos.xPos - r->x, item->pos.zPos - r->z);
|
||||
pitsky = item->itemFlags[3];
|
||||
|
||||
if (item->pos.yPos == r->minfloor)
|
||||
{
|
||||
floor->pitRoom = (unsigned char) pitsky;
|
||||
r = &Rooms[floor->pitRoom];
|
||||
floor = &XZ_GET_SECTOR(r, item->pos.xPos - r->x, item->pos.zPos - r->z);
|
||||
floor->skyRoom = pitsky >> 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
floor->skyRoom = pitsky >> 8;
|
||||
r = &Rooms[floor->skyRoom];
|
||||
floor = &XZ_GET_SECTOR(r, item->pos.xPos - r->x, item->pos.zPos - r->z);
|
||||
floor->pitRoom = (unsigned char) pitsky;
|
||||
}
|
||||
|
||||
item->itemFlags[2] = 0;
|
||||
}
|
||||
|
|
|
@ -58,3 +58,10 @@
|
|||
#define DrawScaledSpike ((void (__cdecl*)(ITEM_INFO*)) 0x0043FBC0)
|
||||
|
||||
void LaraBurn();
|
||||
void InitialiseTrapDoor(short itemNumber);
|
||||
void TrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll);
|
||||
void CeilingTrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll);
|
||||
void FloorTrapDoorCollision(short itemNumber, ITEM_INFO* l, COLL_INFO* coll);
|
||||
void TrapDoorControl(short itemNumber);
|
||||
void CloseTrapDoor(ITEM_INFO* item);
|
||||
void OpenTrapDoor(ITEM_INFO* item);
|
||||
|
|
|
@ -1583,6 +1583,8 @@ bool Renderer11::drawScene(bool dump)
|
|||
printDebugMessage("Lara.requiredAnimState: %d", LaraItem->requiredAnimState);
|
||||
printDebugMessage("Lara.goalAnimState: %d", LaraItem->goalAnimState);
|
||||
printDebugMessage("Room: %d %d %d %d", r->x, r->z, r->x + r->xSize * WALL_SIZE, r->z + r->ySize * WALL_SIZE);
|
||||
printDebugMessage("Camera.pos: %d %d %d", Camera.pos.x, Camera.pos.y, Camera.pos.z);
|
||||
printDebugMessage("Camera.target: %d %d %d", Camera.target.x, Camera.target.y, Camera.target.z);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -2387,49 +2387,49 @@ void ObjectObjects()
|
|||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorFloorCollision;
|
||||
obj->collision = FloorTrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
obj = &Objects[ID_FLOOR_TRAPDOOR2];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorFloorCollision;
|
||||
obj->collision = FloorTrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
obj = &Objects[ID_CEILING_TRAPDOOR1];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorCeilingCollision;
|
||||
obj->collision = CeilingTrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
obj = &Objects[ID_CEILING_TRAPDOOR2];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorCeilingCollision;
|
||||
obj->collision = CeilingTrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
obj = &Objects[ID_TRAPDOOR1];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorNormalCollision;
|
||||
obj->collision = TrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
obj = &Objects[ID_TRAPDOOR2];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorNormalCollision;
|
||||
obj->collision = TrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
obj = &Objects[ID_TRAPDOOR3];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseTrapDoor;
|
||||
obj->collision = TrapDoorNormalCollision;
|
||||
obj->collision = TrapDoorCollision;
|
||||
obj->control = TrapDoorControl;
|
||||
}
|
||||
}
|
||||
|
@ -2437,30 +2437,30 @@ void ObjectObjects()
|
|||
obj = &Objects[ID_SEARCH_OBJECT1];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseCupboard;
|
||||
obj->collision = CupboardCollision;
|
||||
obj->control = CupboardControl;
|
||||
obj->initialise = InitialiseSearchObject;
|
||||
obj->collision = SearchObjectCollision;
|
||||
obj->control = SearchObjectControl;
|
||||
}
|
||||
obj = &Objects[ID_SEARCH_OBJECT2];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseCupboard;
|
||||
obj->collision = CupboardCollision;
|
||||
obj->control = CupboardControl;
|
||||
obj->initialise = InitialiseSearchObject;
|
||||
obj->collision = SearchObjectCollision;
|
||||
obj->control = SearchObjectControl;
|
||||
}
|
||||
obj = &Objects[ID_SEARCH_OBJECT3];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseCupboard;
|
||||
obj->collision = CupboardCollision;
|
||||
obj->control = CupboardControl;
|
||||
obj->initialise = InitialiseSearchObject;
|
||||
obj->collision = SearchObjectCollision;
|
||||
obj->control = SearchObjectControl;
|
||||
}
|
||||
obj = &Objects[ID_SEARCH_OBJECT4];
|
||||
if (obj->loaded)
|
||||
{
|
||||
obj->initialise = InitialiseCupboard;
|
||||
obj->collision = CupboardCollision;
|
||||
obj->control = CupboardControl;
|
||||
obj->initialise = InitialiseSearchObject;
|
||||
obj->collision = SearchObjectCollision;
|
||||
obj->control = SearchObjectControl;
|
||||
}
|
||||
|
||||
obj = &Objects[ID_FLARE_ITEM];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue