Browse Source

Pass object by reference

pull/3876/head
ephphatha 4 years ago committed by Anders Jenbo
parent
commit
eebea35280
  1. 163
      Source/objects.cpp

163
Source/objects.cpp

@ -734,7 +734,7 @@ void AddDiabObjs()
LoadMapObjects("Levels\\L4Data\\diab3a.DUN", { 2 * diabquad3x, 2 * diabquad3y }, { { diabquad4x, diabquad4y }, { 9, 9 } }, 3);
}
void AddCryptObject(int i, int a2)
void AddCryptObject(Object &object, int a2)
{
if (a2 > 5) {
auto &myPlayer = Players[MyPlayerId];
@ -743,19 +743,19 @@ void AddCryptObject(int i, int a2)
switch (myPlayer._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
Objects[i]._oVar2 = TEXT_BOOKA;
object._oVar2 = TEXT_BOOKA;
break;
case HeroClass::Rogue:
Objects[i]._oVar2 = TEXT_RBOOKA;
object._oVar2 = TEXT_RBOOKA;
break;
case HeroClass::Sorcerer:
Objects[i]._oVar2 = TEXT_MBOOKA;
object._oVar2 = TEXT_MBOOKA;
break;
case HeroClass::Monk:
Objects[i]._oVar2 = TEXT_OBOOKA;
object._oVar2 = TEXT_OBOOKA;
break;
case HeroClass::Bard:
Objects[i]._oVar2 = TEXT_BBOOKA;
object._oVar2 = TEXT_BBOOKA;
break;
}
break;
@ -763,19 +763,19 @@ void AddCryptObject(int i, int a2)
switch (myPlayer._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
Objects[i]._oVar2 = TEXT_BOOKB;
object._oVar2 = TEXT_BOOKB;
break;
case HeroClass::Rogue:
Objects[i]._oVar2 = TEXT_RBOOKB;
object._oVar2 = TEXT_RBOOKB;
break;
case HeroClass::Sorcerer:
Objects[i]._oVar2 = TEXT_MBOOKB;
object._oVar2 = TEXT_MBOOKB;
break;
case HeroClass::Monk:
Objects[i]._oVar2 = TEXT_OBOOKB;
object._oVar2 = TEXT_OBOOKB;
break;
case HeroClass::Bard:
Objects[i]._oVar2 = TEXT_BBOOKB;
object._oVar2 = TEXT_BBOOKB;
break;
}
break;
@ -783,40 +783,41 @@ void AddCryptObject(int i, int a2)
switch (myPlayer._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
Objects[i]._oVar2 = TEXT_BOOKC;
object._oVar2 = TEXT_BOOKC;
break;
case HeroClass::Rogue:
Objects[i]._oVar2 = TEXT_RBOOKC;
object._oVar2 = TEXT_RBOOKC;
break;
case HeroClass::Sorcerer:
Objects[i]._oVar2 = TEXT_MBOOKC;
object._oVar2 = TEXT_MBOOKC;
break;
case HeroClass::Monk:
Objects[i]._oVar2 = TEXT_OBOOKC;
object._oVar2 = TEXT_OBOOKC;
break;
case HeroClass::Bard:
Objects[i]._oVar2 = TEXT_BBOOKC;
object._oVar2 = TEXT_BBOOKC;
break;
}
break;
}
Objects[i]._oVar3 = 15;
Objects[i]._oVar8 = a2;
object._oVar3 = 15;
object._oVar8 = a2;
} else {
Objects[i]._oVar2 = a2 + TEXT_SKLJRN;
Objects[i]._oVar3 = a2 + 9;
Objects[i]._oVar8 = 0;
object._oVar2 = a2 + TEXT_SKLJRN;
object._oVar3 = a2 + 9;
object._oVar8 = 0;
}
Objects[i]._oVar1 = 1;
Objects[i]._oAnimFrame = 5 - 2 * Objects[i]._oVar1;
Objects[i]._oVar4 = Objects[i]._oAnimFrame + 1;
object._oVar1 = 1;
object._oAnimFrame = 5 - 2 * object._oVar1;
object._oVar4 = object._oAnimFrame + 1;
}
void SetupObject(int i, Point position, _object_id ot)
void SetupObject(Object &object, Point position, _object_id ot)
{
Objects[i]._otype = ot;
object_graphic_id ofi = AllObjects[ot].ofindex;
Objects[i].position = position;
const ObjectData &objectData = AllObjects[ot];
object._otype = ot;
object_graphic_id ofi = objectData.ofindex;
object.position = position;
const auto &found = std::find(std::begin(ObjFileList), std::end(ObjFileList), ofi);
if (found == std::end(ObjFileList)) {
@ -826,29 +827,29 @@ void SetupObject(int i, Point position, _object_id ot)
const int j = std::distance(std::begin(ObjFileList), found);
Objects[i]._oAnimData = pObjCels[j].get();
Objects[i]._oAnimFlag = AllObjects[ot].oAnimFlag;
if (AllObjects[ot].oAnimFlag != 0) {
Objects[i]._oAnimDelay = AllObjects[ot].oAnimDelay;
Objects[i]._oAnimCnt = GenerateRnd(AllObjects[ot].oAnimDelay);
Objects[i]._oAnimLen = AllObjects[ot].oAnimLen;
Objects[i]._oAnimFrame = GenerateRnd(AllObjects[ot].oAnimLen - 1) + 1;
object._oAnimData = pObjCels[j].get();
object._oAnimFlag = objectData.oAnimFlag;
if (object._oAnimFlag != 0) {
object._oAnimDelay = objectData.oAnimDelay;
object._oAnimCnt = GenerateRnd(object._oAnimDelay);
object._oAnimLen = objectData.oAnimLen;
object._oAnimFrame = GenerateRnd(object._oAnimLen - 1) + 1;
} else {
Objects[i]._oAnimDelay = 1000;
Objects[i]._oAnimCnt = 0;
Objects[i]._oAnimLen = AllObjects[ot].oAnimLen;
Objects[i]._oAnimFrame = AllObjects[ot].oAnimDelay;
}
Objects[i]._oAnimWidth = AllObjects[ot].oAnimWidth;
Objects[i]._oSolidFlag = AllObjects[ot].oSolidFlag;
Objects[i]._oMissFlag = AllObjects[ot].oMissFlag;
Objects[i]._oLight = AllObjects[ot].oLightFlag;
Objects[i]._oDelFlag = false;
Objects[i]._oBreak = AllObjects[ot].oBreak;
Objects[i]._oSelFlag = AllObjects[ot].oSelFlag;
Objects[i]._oPreFlag = false;
Objects[i]._oTrapFlag = false;
Objects[i]._oDoorFlag = false;
object._oAnimDelay = 1000;
object._oAnimCnt = 0;
object._oAnimLen = objectData.oAnimLen;
object._oAnimFrame = objectData.oAnimDelay;
}
object._oAnimWidth = objectData.oAnimWidth;
object._oSolidFlag = objectData.oSolidFlag;
object._oMissFlag = objectData.oMissFlag;
object._oLight = objectData.oLightFlag;
object._oDelFlag = false;
object._oBreak = objectData.oBreak;
object._oSelFlag = objectData.oSelFlag;
object._oPreFlag = false;
object._oTrapFlag = false;
object._oDoorFlag = false;
}
void AddCryptBook(_object_id ot, int v2, int ox, int oy)
@ -860,8 +861,9 @@ void AddCryptBook(_object_id ot, int v2, int ox, int oy)
AvailableObjects[0] = AvailableObjects[MAXOBJECTS - 1 - ActiveObjectCount];
ActiveObjects[ActiveObjectCount] = oi;
dObject[ox][oy] = oi + 1;
SetupObject(oi, { ox, oy }, ot);
AddCryptObject(oi, v2);
Object &object = Objects[oi];
SetupObject(object, { ox, oy }, ot);
AddCryptObject(object, v2);
ActiveObjectCount++;
}
@ -1072,19 +1074,6 @@ void DeleteObject(int oi, int i)
ActiveObjects[i] = ActiveObjects[ActiveObjectCount];
}
void AddL1Door(int i, Point position, _object_id objectType)
{
Objects[i]._oDoorFlag = true;
if (objectType == _object_id::OBJ_L1LDOOR) {
Objects[i]._oVar1 = dPiece[position.x][position.y];
Objects[i]._oVar2 = dPiece[position.x][position.y - 1];
} else { //_object_id::OBJ_L1RDOOR
Objects[i]._oVar1 = dPiece[position.x][position.y];
Objects[i]._oVar2 = dPiece[position.x - 1][position.y];
}
Objects[i]._oVar4 = 0;
}
void AddChest(int i, int t)
{
if (GenerateRnd(2) == 0)
@ -1134,25 +1123,38 @@ void ObjSetMicro(Point position, int pn)
}
}
void AddL2Door(int i, Point position, _object_id objectType)
void AddL1Door(Object &door, Point position, _object_id objectType)
{
door._oDoorFlag = true;
if (objectType == _object_id::OBJ_L1LDOOR) {
door._oVar1 = dPiece[position.x][position.y];
door._oVar2 = dPiece[position.x][position.y - 1];
} else { //_object_id::OBJ_L1RDOOR
door._oVar1 = dPiece[position.x][position.y];
door._oVar2 = dPiece[position.x - 1][position.y];
}
door._oVar4 = 0;
}
void AddL2Door(Object &door, Point position, _object_id objectType)
{
Objects[i]._oDoorFlag = true;
door._oDoorFlag = true;
if (objectType == OBJ_L2LDOOR)
ObjSetMicro(position, 538);
else
ObjSetMicro(position, 540);
dSpecial[position.x][position.y] = 0;
Objects[i]._oVar4 = 0;
door._oVar4 = 0;
}
void AddL3Door(int i, Point position, _object_id objectType)
void AddL3Door(Object &door, Point position, _object_id objectType)
{
Objects[i]._oDoorFlag = true;
door._oDoorFlag = true;
if (objectType == OBJ_L3LDOOR)
ObjSetMicro(position, 531);
else
ObjSetMicro(position, 534);
Objects[i]._oVar4 = 0;
door._oVar4 = 0;
}
void AddSarc(int i)
@ -4697,7 +4699,8 @@ void AddObject(_object_id objType, Point objPos)
AvailableObjects[0] = AvailableObjects[MAXOBJECTS - 1 - ActiveObjectCount];
ActiveObjects[ActiveObjectCount] = oi;
dObject[objPos.x][objPos.y] = oi + 1;
SetupObject(oi, objPos, objType);
Object &object = Objects[oi];
SetupObject(object, objPos, objType);
switch (objType) {
case OBJ_L1LIGHT:
case OBJ_SKFIRE:
@ -4717,18 +4720,18 @@ void AddObject(_object_id objType, Point objPos)
break;
case OBJ_L1LDOOR:
case OBJ_L1RDOOR:
AddL1Door(oi, objPos, objType);
AddL1Door(object, objPos, objType);
break;
case OBJ_L2LDOOR:
case OBJ_L2RDOOR:
AddL2Door(oi, objPos, objType);
AddL2Door(object, objPos, objType);
break;
case OBJ_L3LDOOR:
case OBJ_L3RDOOR:
AddL3Door(oi, objPos, objType);
AddL3Door(object, objPos, objType);
break;
case OBJ_BOOK2R:
Objects[oi].InitializeBook({ { setpc_x, setpc_y }, { setpc_w + 1, setpc_h + 1 } });
object.InitializeBook({ { setpc_x, setpc_y }, { setpc_w + 1, setpc_h + 1 } });
break;
case OBJ_CHEST1:
case OBJ_CHEST2:
@ -4739,11 +4742,11 @@ void AddObject(_object_id objType, Point objPos)
case OBJ_TCHEST2:
case OBJ_TCHEST3:
AddChest(oi, objType);
Objects[oi]._oTrapFlag = true;
object._oTrapFlag = true;
if (leveltype == DTYPE_CATACOMBS) {
Objects[oi]._oVar4 = GenerateRnd(2);
object._oVar4 = GenerateRnd(2);
} else {
Objects[oi]._oVar4 = GenerateRnd(3);
object._oVar4 = GenerateRnd(3);
}
break;
case OBJ_SARC:
@ -4756,7 +4759,7 @@ void AddObject(_object_id objType, Point objPos)
AddFlameLvr(oi);
break;
case OBJ_WATER:
Objects[oi]._oAnimFrame = 1;
object._oAnimFrame = 1;
break;
case OBJ_TRAPL:
case OBJ_TRAPR:

Loading…
Cancel
Save