//HEADER_GOES_HERE
#ifndef __OBJECTS_H__
#define __OBJECTS_H__

extern int trapid; // weak
extern int trapdir; // weak
extern unsigned char *pObjCels[40];
extern char ObjFileList[40];
extern int objectactive[MAXOBJECTS];
extern int nobjects; // idb
extern int leverid; // idb
extern int objectavail[MAXOBJECTS];
extern ObjectStruct object[MAXOBJECTS];
extern int InitObjFlag; // weak
extern int numobjfiles; // weak

void InitObjectGFX();
void FreeObjectGFX();
BOOL RndLocOk(int xp, int yp);
void InitRndLocObj(int min, int max, int objtype);
void InitRndLocBigObj(int min, int max, int objtype);
void InitRndLocObj5x5(int min, int max, int objtype);
void ClrAllObjects();
void AddTortures();
void AddCandles();
void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, int y2, int msg);
void InitRndBarrels();
void AddL1Objs(int x1, int y1, int x2, int y2);
void AddL2Objs(int x1, int y1, int x2, int y2);
void AddL3Objs(int x1, int y1, int x2, int y2);
BOOL WallTrapLocOk(int xp, int yp);
void AddL2Torches();
BOOL TorchLocOK(int xp, int yp);
void AddObjTraps();
void AddChestTraps();
void LoadMapObjects(BYTE *pMap, int startx, int starty, int x1, int y1, int w, int h, int leveridx);
void LoadMapObjs(BYTE *pMap, int startx, int starty);
void AddDiabObjs();
void AddStoryBooks();
void AddHookedBodies(int freq);
void AddL4Goodies();
void AddLazStand();
void InitObjects();
void SetMapObjects(BYTE *pMap, int startx, int starty);
void DeleteObject_(int oi, int i);
void SetupObject(int i, int x, int y, int ot);
void SetObjMapRange(int i, int x1, int y1, int x2, int y2, int v);
void SetBookMsg(int i, int msg);
void AddL1Door(int i, int x, int y, int ot);
void AddSCambBook(int i);
void AddChest(int i, int t);
void AddL2Door(int i, int x, int y, int ot);
void AddL3Door(int i, int x, int y, int ot);
void AddSarc(int i);
void AddFlameTrap(int i);
void AddFlameLvr(int i);
void AddTrap(int i, int ot);
void AddObjLight(int i, int r);
void AddBarrel(int i, int ot);
void AddShrine(int i);
void AddBookcase(int i);
void AddBookstand(int i);
void AddBloodFtn(int i);
void AddPurifyingFountain(int i);
void AddArmorStand(int i);
void AddGoatShrine(int i);
void AddCauldron(int i);
void AddMurkyFountain(int i);
void AddTearFountain(int i);
void AddDecap(int i);
void AddVilebook(int i);
void AddMagicCircle(int i);
void AddBrnCross(int i);
void AddPedistal(int i);
void AddStoryBook(int i);
void AddWeaponRack(int i);
void AddTorturedBody(int i);
void GetRndObjLoc(int randarea, int &xx, int &yy);
void AddMushPatch();
void AddSlainHero();
void AddObject(int ot, int ox, int oy);
void Obj_Light(int i, int lr);
void Obj_Circle(int i);
void Obj_StopAnim(int i);
void Obj_Door(int i);
void Obj_Sarc(int i);
void ActivateTrapLine(int ttype, int tid);
void Obj_FlameTrap(int i);
void Obj_Trap(int i);
void Obj_BCrossDamage(int i);
void ProcessObjects();
void ObjSetMicro(int dx, int dy, int pn);
void objects_set_door_piece(int x, int y);
void ObjSetMini(int x, int y, int v);
void ObjL1Special(int x1, int y1, int x2, int y2);
void ObjL2Special(int x1, int y1, int x2, int y2);
void DoorSet(int oi, int dx, int dy);
void RedoPlayerVision();
void OperateL1RDoor(int pnum, int oi, BOOL sendflag);
void OperateL1LDoor(int pnum, int oi, BOOL sendflag);
void OperateL2RDoor(int pnum, int oi, BOOL sendflag);
void OperateL2LDoor(int pnum, int oi, BOOL sendflag);
void OperateL3RDoor(int pnum, int oi, BOOL sendflag);
void OperateL3LDoor(int pnum, int oi, BOOL sendflag);
void MonstCheckDoors(int m);
void ObjChangeMap(int x1, int y1, int x2, int y2);
void ObjChangeMapResync(int x1, int y1, int x2, int y2);
void OperateL1Door(int pnum, int i, BOOL sendflag);
void OperateLever(int pnum, int i);
void OperateBook(int pnum, int i);
void OperateBookLever(int pnum, int i);
void OperateSChambBk(int pnum, int i);
void OperateChest(int pnum, int i, BOOL sendmsg);
void OperateMushPatch(int pnum, int i);
void OperateInnSignChest(int pnum, int i);
void OperateSlainHero(int pnum, int i, BOOL sendmsg);
void OperateTrapLvr(int i);
void OperateSarc(int pnum, int i, BOOL sendmsg);
void OperateL2Door(int pnum, int i, BOOL sendflag);
void OperateL3Door(int pnum, int i, BOOL sendflag);
void OperatePedistal(int pnum, int i);
void TryDisarm(int pnum, int i);
int ItemMiscIdIdx(int imiscid);
void OperateShrine(int pnum, int i, int sType);
void OperateSkelBook(int pnum, int i, BOOL sendmsg);
void OperateBookCase(int pnum, int i, BOOL sendmsg);
void OperateDecap(int pnum, int i, BOOL sendmsg);
void OperateArmorStand(int pnum, int i, BOOL sendmsg);
int FindValidShrine(int i);
void OperateGoatShrine(int pnum, int i, int sType);
void OperateCauldron(int pnum, int i, int sType);
BOOL OperateFountains(int pnum, int i);
void OperateWeaponRack(int pnum, int i, BOOL sendmsg);
void OperateStoryBook(int pnum, int i);
void OperateLazStand(int pnum, int i);
void OperateObject(int pnum, int i, BOOL TeleFlag);
void SyncOpL1Door(int pnum, int cmd, int i);
void SyncOpL2Door(int pnum, int cmd, int i);
void SyncOpL3Door(int pnum, int cmd, int i);
void SyncOpObject(int pnum, int cmd, int i);
void BreakCrux(int i);
void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, BOOL sendmsg);
void BreakObject(int pnum, int oi);
void SyncBreakObj(int pnum, int oi);
void SyncL1Doors(int i);
void SyncCrux(int i);
void SyncLever(int i);
void SyncQSTLever(int i);
void SyncPedistal(int i);
void SyncL2Doors(int i);
void SyncL3Doors(int i);
void SyncObjectAnim(int o);
void GetObjectStr(int i);

/* rdata */

extern int bxadd[8];
extern int byadd[8];
extern char *shrinestrs[26];
extern char shrinemin[26];
extern char shrinemax[26];
extern char shrineavail[26];
extern char *StoryBookName[9];
extern int StoryText[3][3];

#endif /* __OBJECTS_H__ */
