Browse Source

[hellfire] InitObjects bin exact

pull/876/head
qndel 6 years ago committed by Anders Jenbo
parent
commit
2cab17027e
  1. 174
      Source/objects.cpp
  2. 9
      Source/objects.h

174
Source/objects.cpp

@ -11,6 +11,9 @@ int objectavail[MAXOBJECTS];
ObjectStruct object[MAXOBJECTS];
BOOL InitObjFlag;
int numobjfiles;
#ifdef HELLFIRE
int dword_6DE0E0;
#endif
int bxadd[8] = { -1, 0, 1, -1, 1, -1, 0, 1 };
int byadd[8] = { -1, -1, -1, 0, 0, 1, 1, 1 };
@ -202,7 +205,7 @@ void InitRndLocObj5x5(int min, int max, int objtype)
for (i = 0; i < numobjs; i++) {
cnt = 0;
exit = FALSE;
while(!exit) {
while (!exit) {
exit = TRUE;
xp = random_(139, 80) + 16;
yp = random_(139, 80) + 16;
@ -311,7 +314,7 @@ void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, in
exit = FALSE;
}
}
if (!exit){
if (!exit) {
cnt++;
if (cnt > 20000)
return;
@ -412,7 +415,6 @@ void add_crypt_objs(int x1, int y1, int x2, int y2)
AddObject(OBJ_L1RDOOR, i, j);
}
}
}
#endif
@ -645,6 +647,82 @@ void AddDiabObjs()
mem_free_dbg(lpSetPiece);
}
#ifdef HELLFIRE
void objects_add_lv22(int s)
{
DIABOOL exit;
int xp, yp, cnt, m, n;
cnt = 0;
exit = FALSE;
while (!exit) {
exit = TRUE;
xp = random_(139, 80) + 16;
yp = random_(139, 80) + 16;
for (n = -2; n <= 2; n++) {
for (m = -3; m <= 3; m++) {
if (!RndLocOk(xp + m, yp + n))
exit = FALSE;
}
}
if (!exit) {
cnt++;
if (cnt > 20000)
return;
}
}
objects_44D8C5(86, s, xp, yp);
AddObject(OBJ_STORYCANDLE, xp - 2, yp + 1);
AddObject(OBJ_STORYCANDLE, xp - 2, yp);
AddObject(OBJ_STORYCANDLE, xp - 1, yp - 1);
AddObject(OBJ_STORYCANDLE, xp + 1, yp - 1);
AddObject(OBJ_STORYCANDLE, xp + 2, yp);
AddObject(OBJ_STORYCANDLE, xp + 2, yp + 1);
}
void objects_add_lv24()
{
objects_rnd_454BEA();
switch (random_(0, 6)) {
case 0:
objects_454AF0(6, UberRow + 3, UberCol);
objects_454AF0(7, UberRow + 2, UberCol - 3);
objects_454AF0(8, UberRow + 2, UberCol + 2);
break;
case 1:
objects_454AF0(6, UberRow + 3, UberCol);
objects_454AF0(8, UberRow + 2, UberCol - 3);
objects_454AF0(7, UberRow + 2, UberCol + 2);
break;
case 2:
objects_454AF0(7, UberRow + 3, UberCol);
objects_454AF0(6, UberRow + 2, UberCol - 3);
objects_454AF0(8, UberRow + 2, UberCol + 2);
break;
case 3:
objects_454AF0(7, UberRow + 3, UberCol);
objects_454AF0(8, UberRow + 2, UberCol - 3);
objects_454AF0(6, UberRow + 2, UberCol + 2);
break;
case 4:
objects_454AF0(8, UberRow + 3, UberCol);
objects_454AF0(7, UberRow + 2, UberCol - 3);
objects_454AF0(6, UberRow + 2, UberCol + 2);
break;
case 5:
objects_454AF0(8, UberRow + 3, UberCol);
objects_454AF0(6, UberRow + 2, UberCol - 3);
objects_454AF0(7, UberRow + 2, UberCol + 2);
break;
}
}
void objects_454AF0(int a1, int a2, int a3)
{
objects_44D8C5(86, a1, a2, a3);
}
#endif
void AddStoryBooks()
{
int xp, yp, xx, yy;
@ -778,6 +856,9 @@ void InitObjects()
BYTE *mem;
ClrAllObjects();
#ifdef HELLFIRE
dword_6DE0E0 = 0;
#endif
if (currlevel == 16) {
AddDiabObjs();
} else {
@ -787,12 +868,30 @@ void InitObjects()
AddSlainHero();
if (currlevel == quests[QTYPE_BLKM]._qlevel && quests[QTYPE_BLKM]._qactive == 1)
AddMushPatch();
#ifdef HELLFIRE
if (currlevel == 4 || currlevel == 8 || currlevel == 12)
AddStoryBooks();
if (currlevel == 21) {
objects_add_lv22(1);
} else if (currlevel == 22) {
objects_add_lv22(2);
objects_add_lv22(3);
} else if (currlevel == 23) {
objects_add_lv22(4);
objects_add_lv22(5);
}
if (currlevel == 24) {
objects_add_lv24();
}
#else
if (currlevel == 4)
AddStoryBooks();
if (currlevel == 8)
AddStoryBooks();
if (currlevel == 12)
AddStoryBooks();
#endif
if (leveltype == DTYPE_CATHEDRAL) {
if (QuestStatus(QTYPE_BUTCH))
AddTortures();
@ -801,7 +900,12 @@ void InitObjects()
if (QuestStatus(QTYPE_BOL))
AddObject(OBJ_SIGNCHEST, 2 * setpc_x + 26, 2 * setpc_y + 19);
InitRndLocBigObj(10, 15, OBJ_SARC);
AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
#ifdef HELLFIRE
if (currlevel >= 21)
add_crypt_objs(0, 0, MAXDUNX, MAXDUNY);
else
#endif
AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
InitRndBarrels();
}
if (leveltype == DTYPE_CATACOMBS) {
@ -818,6 +922,14 @@ void InitObjects()
sp_id = QUEST_RBLINDING;
} else if (plr[myplr]._pClass == PC_SORCERER) {
sp_id = QUEST_MBLINDING;
#ifdef HELLFIRE
} else if (plr[myplr]._pClass == PC_MONK) {
sp_id = QUEST_HBLINDING;
} else if (plr[myplr]._pClass == PC_BARD) {
sp_id = QUEST_BBLINDING;
} else if (plr[myplr]._pClass == PC_BARBARIAN) {
sp_id = QUEST_BLINDING;
#endif
}
quests[QTYPE_BLIND]._qmsg = sp_id;
AddBookLever(0, 0, MAXDUNX, MAXDUNY, setpc_x, setpc_y, setpc_w + setpc_x + 1, setpc_h + setpc_y + 1, sp_id);
@ -832,6 +944,14 @@ void InitObjects()
sp_id = QUEST_RBLOODY;
} else if (plr[myplr]._pClass == PC_SORCERER) {
sp_id = QUEST_MBLOODY;
#ifdef HELLFIRE
} else if (plr[myplr]._pClass == PC_MONK) {
sp_id = QUEST_HBLOODY;
} else if (plr[myplr]._pClass == PC_BARD) {
sp_id = QUEST_BBLOODY;
} else if (plr[myplr]._pClass == PC_BARBARIAN) {
sp_id = QUEST_BLOODY;
#endif
}
quests[QTYPE_BLOOD]._qmsg = sp_id;
AddBookLever(0, 0, MAXDUNX, MAXDUNY, setpc_x, setpc_y + 3, setpc_x + 2, setpc_y + 7, sp_id);
@ -851,6 +971,14 @@ void InitObjects()
sp_id = QUEST_RBLOODWAR;
} else if (plr[myplr]._pClass == PC_SORCERER) {
sp_id = QUEST_MBLOODWAR;
#ifdef HELLFIRE
} else if (plr[myplr]._pClass == PC_MONK) {
sp_id = QUEST_HBLOODWAR;
} else if (plr[myplr]._pClass == PC_BARD) {
sp_id = QUEST_BBLOODWAR;
} else if (plr[myplr]._pClass == PC_BARBARIAN) {
sp_id = QUEST_BLOODWAR;
#endif
}
quests[QTYPE_WARLRD]._qmsg = sp_id;
AddBookLever(0, 0, MAXDUNX, MAXDUNY, setpc_x, setpc_y, setpc_x + setpc_w, setpc_y + setpc_h, sp_id);
@ -863,9 +991,9 @@ void InitObjects()
InitRndBarrels();
AddL4Goodies();
}
InitRndLocObj(5, 10, 5);
InitRndLocObj(3, 6, 6);
InitRndLocObj(1, 5, 7);
InitRndLocObj(5, 10, OBJ_CHEST1);
InitRndLocObj(3, 6, OBJ_CHEST2);
InitRndLocObj(1, 5, OBJ_CHEST3);
if (leveltype != DTYPE_HELL)
AddObjTraps();
if (leveltype > 1)
@ -1362,6 +1490,12 @@ void AddSlainHero()
AddObject(OBJ_SLAINHERO, x + 2, y + 2);
}
#ifdef HELLFIRE
void objects_44D8C5(int a1, int a2, int a3, int a4)
{
}
#endif
void AddObject(int ot, int ox, int oy)
{
int oi;
@ -2212,7 +2346,7 @@ void OperateL1RDoor(int pnum, int oi, DIABOOL sendflag)
} else {
if (object[oi]._oVar2 != 86) {
ObjSetMicro(xp - 1, yp, object[oi]._oVar2);
} else{
} else {
if (dPiece[xp - 1][yp] == 210)
ObjSetMicro(xp - 1, yp, 232);
else
@ -4903,4 +5037,28 @@ void objects_454BA8()
SetDungeonMicros();
}
void objects_rnd_454BEA()
{
int xp, yp;
while (1) {
xp = random_(141, 80) + 16;
yp = random_(141, 80) + 16;
if (RndLocOk(xp - 1, yp - 1)
&& RndLocOk(xp, yp - 1)
&& RndLocOk(xp + 1, yp - 1)
&& RndLocOk(xp - 1, yp)
&& RndLocOk(xp, yp)
&& RndLocOk(xp + 1, yp)
&& RndLocOk(xp - 1, yp + 1)
&& RndLocOk(xp, yp + 1)
&& RndLocOk(xp + 1, yp + 1)) {
break;
}
}
UberLeverRow = UberRow + 3;
UberLeverCol = UberCol - 1;
AddObject(OBJ_LEVER, UberRow + 3, UberCol - 1);
}
#endif

9
Source/objects.h

@ -39,6 +39,10 @@ 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();
#ifdef HELLFIRE
void objects_add_lv22(int s);
void objects_add_lv24();
#endif
void AddStoryBooks();
void AddHookedBodies(int freq);
void AddL4Goodies();
@ -81,6 +85,10 @@ void AddTorturedBody(int i);
void GetRndObjLoc(int randarea, int &xx, int &yy);
void AddMushPatch();
void AddSlainHero();
#ifdef HELLFIRE
void objects_44D8C5(int a1, int a2, int a3, int a4);
void objects_454AF0(int a1, int a2, int a3);
#endif
void AddObject(int ot, int ox, int oy);
void Obj_Light(int i, int lr);
void Obj_Circle(int i);
@ -157,6 +165,7 @@ void GetObjectStr(int i);
#ifdef HELLFIRE
void operate_lv24_lever();
void objects_454BA8();
void objects_rnd_454BEA();
#endif
/* rdata */

Loading…
Cancel
Save