Browse Source

Clean up object references

pull/5165/head
Anders Jenbo 4 years ago
parent
commit
e83c55d444
  1. 9
      Source/items.cpp
  2. 5
      Source/msg.cpp
  3. 2
      Source/objdat.cpp
  4. 2
      Source/objdat.h
  5. 102
      Source/objects.cpp
  6. 1
      Source/objects.h

9
Source/items.cpp

@ -1623,10 +1623,11 @@ void SpawnRock()
if (ActiveItemCount >= MAXITEMS) if (ActiveItemCount >= MAXITEMS)
return; return;
Object *stand = nullptr; const Object *stand = nullptr;
for (int i = 0; i < ActiveObjectCount; i++) { for (int i = 0; i < ActiveObjectCount; i++) {
if (Objects[ActiveObjects[i]]._otype == OBJ_STAND) { const Object &object = Objects[ActiveObjects[i]];
stand = &Objects[ActiveObjects[i]]; if (object._otype == OBJ_STAND) {
stand = &object;
break; break;
} }
} }
@ -1635,7 +1636,7 @@ void SpawnRock()
return; return;
int ii = AllocateItem(); int ii = AllocateItem();
auto &item = Items[ii]; Item &item = Items[ii];
item.position = stand->position; item.position = stand->position;
dItem[item.position.x][item.position.y] = ii + 1; dItem[item.position.x][item.position.y] = ii + 1;

5
Source/msg.cpp

@ -2507,8 +2507,9 @@ void DeltaLoadLevel()
} }
for (int i = 0; i < ActiveObjectCount; i++) { for (int i = 0; i < ActiveObjectCount; i++) {
if (Objects[ActiveObjects[i]].IsTrap()) { Object &object = Objects[ActiveObjects[i]];
OperateTrap(Objects[ActiveObjects[i]]); if (object.IsTrap()) {
OperateTrap(object);
} }
} }
} }

2
Source/objdat.cpp

@ -100,7 +100,7 @@ const _object_id ObjTypeConv[] = {
OBJ_NULL, OBJ_NULL,
OBJ_NULL, OBJ_NULL,
OBJ_NULL, OBJ_NULL,
OBJ_PEDISTAL, OBJ_PEDESTAL,
OBJ_NULL, OBJ_NULL,
OBJ_NULL, OBJ_NULL,
OBJ_NULL, OBJ_NULL,

2
Source/objdat.h

@ -175,7 +175,7 @@ enum _object_id : int8_t {
OBJ_TCHEST3, OBJ_TCHEST3,
OBJ_BLINDBOOK, OBJ_BLINDBOOK,
OBJ_BLOODBOOK, OBJ_BLOODBOOK,
OBJ_PEDISTAL, OBJ_PEDESTAL,
OBJ_L3LDOOR, OBJ_L3LDOOR,
OBJ_L3RDOOR, OBJ_L3RDOOR,
OBJ_PURIFYINGFTN, OBJ_PURIFYINGFTN,

102
Source/objects.cpp

@ -827,6 +827,26 @@ void AddCryptStoryBook(int s)
AddObject(OBJ_L5CANDLE, *position + Displacement { 2, 1 }); AddObject(OBJ_L5CANDLE, *position + Displacement { 2, 1 });
} }
void AddNakrulLever()
{
while (true) {
int xp = GenerateRnd(80) + 16;
int yp = GenerateRnd(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;
}
}
AddObject(OBJ_L5LEVER, { UberRow + 3, UberCol - 1 });
}
void AddNakrulBook(int a1, Point position) void AddNakrulBook(int a1, Point position)
{ {
AddCryptBook(OBJ_L5BOOKS, a1, position); AddCryptBook(OBJ_L5BOOKS, a1, position);
@ -834,7 +854,7 @@ void AddNakrulBook(int a1, Point position)
void AddNakrulGate() void AddNakrulGate()
{ {
AddNakrulLeaver(); AddNakrulLever();
switch (GenerateRnd(6)) { switch (GenerateRnd(6)) {
case 0: case 0:
AddNakrulBook(6, { UberRow + 3, UberCol }); AddNakrulBook(6, { UberRow + 3, UberCol });
@ -970,9 +990,8 @@ void AddLazStand()
void DeleteObject(int oi, int i) void DeleteObject(int oi, int i)
{ {
const Object &object = Objects[oi]; const Object &object = Objects[oi];
int ox = object.position.x; Point position = object.position;
int oy = object.position.y; dObject[position.x][position.y] = 0;
dObject[ox][oy] = 0;
AvailableObjects[-ActiveObjectCount + MAXOBJECTS] = oi; AvailableObjects[-ActiveObjectCount + MAXOBJECTS] = oi;
ActiveObjectCount--; ActiveObjectCount--;
if (ObjectUnderCursor == &object) // Unselect object if this was highlighted by player if (ObjectUnderCursor == &object) // Unselect object if this was highlighted by player
@ -981,12 +1000,12 @@ void DeleteObject(int oi, int i)
ActiveObjects[i] = ActiveObjects[ActiveObjectCount]; ActiveObjects[i] = ActiveObjects[ActiveObjectCount];
} }
void AddChest(Object &chest, _object_id type) void AddChest(Object &chest)
{ {
if (FlipCoin()) if (FlipCoin())
chest._oAnimFrame += 3; chest._oAnimFrame += 3;
chest._oRndSeed = AdvanceRndSeed(); chest._oRndSeed = AdvanceRndSeed();
switch (type) { switch (chest._otype) {
case OBJ_CHEST1: case OBJ_CHEST1:
case OBJ_TCHEST1: case OBJ_TCHEST1:
if (setlevel) { if (setlevel) {
@ -1406,12 +1425,12 @@ void UpdateSarcophagus(Object &sarcophagus)
void ActivateTrapLine(int ttype, int tid) void ActivateTrapLine(int ttype, int tid)
{ {
for (int i = 0; i < ActiveObjectCount; i++) { for (int i = 0; i < ActiveObjectCount; i++) {
int oi = ActiveObjects[i]; Object &trap = Objects[ActiveObjects[i]];
if (Objects[oi]._otype == ttype && Objects[oi]._oVar1 == tid) { if (trap._otype == ttype && trap._oVar1 == tid) {
Objects[oi]._oVar4 = 1; trap._oVar4 = 1;
Objects[oi]._oAnimFlag = true; trap._oAnimFlag = true;
Objects[oi]._oAnimDelay = 1; trap._oAnimDelay = 1;
Objects[oi]._olid = AddLight(Objects[oi].position, 1); trap._olid = AddLight(trap.position, 1);
} }
} }
} }
@ -2070,10 +2089,10 @@ void OperateL5Door(const Player &player, Object &door)
bool AreAllLeversActivated(int leverId) bool AreAllLeversActivated(int leverId)
{ {
for (int j = 0; j < ActiveObjectCount; j++) { for (int j = 0; j < ActiveObjectCount; j++) {
int oi = ActiveObjects[j]; Object &lever = Objects[ActiveObjects[j]];
if (Objects[oi]._otype == OBJ_SWITCHSKL if (lever._otype == OBJ_SWITCHSKL
&& Objects[oi]._oVar8 == leverId && lever._oVar8 == leverId
&& Objects[oi]._oSelFlag != 0) { && lever._oSelFlag != 0) {
return false; return false;
} }
} }
@ -2727,12 +2746,11 @@ void OperateShrineEnchanted(Player &player)
void OperateShrineThaumaturgic(const Player &player) void OperateShrineThaumaturgic(const Player &player)
{ {
for (int j = 0; j < ActiveObjectCount; j++) { for (int j = 0; j < ActiveObjectCount; j++) {
int v1 = ActiveObjects[j]; Object &object = Objects[ActiveObjects[j]];
assert(v1 >= 0 && v1 < MAXOBJECTS); if (object.IsChest() && object._oSelFlag == 0) {
if (Objects[v1].IsChest() && Objects[v1]._oSelFlag == 0) { object._oRndSeed = AdvanceRndSeed();
Objects[v1]._oRndSeed = AdvanceRndSeed(); object._oSelFlag = 1;
Objects[v1]._oSelFlag = 1; object._oAnimFrame -= 2;
Objects[v1]._oAnimFrame -= 2;
} }
} }
@ -4227,7 +4245,7 @@ void InitObjects()
} }
Quests[Q_BLOOD]._qmsg = spId; Quests[Q_BLOOD]._qmsg = spId;
AddBookLever(OBJ_BLOODBOOK, { SetPiece.position + Displacement { 0, 3 }, { 2, 4 } }, spId); AddBookLever(OBJ_BLOODBOOK, { SetPiece.position + Displacement { 0, 3 }, { 2, 4 } }, spId);
AddObject(OBJ_PEDISTAL, SetPiece.position.megaToWorld() + Displacement { 9, 16 }); AddObject(OBJ_PEDESTAL, SetPiece.position.megaToWorld() + Displacement { 9, 16 });
} }
InitRndBarrels(); InitRndBarrels();
} }
@ -4339,7 +4357,7 @@ Object *AddObject(_object_id objType, Point objPos)
dObject[objPos.x][objPos.y] = oi + 1; dObject[objPos.x][objPos.y] = oi + 1;
Object &object = Objects[oi]; Object &object = Objects[oi];
SetupObject(object, objPos, objType); SetupObject(object, objPos, objType);
switch (objType) { switch (object._otype) {
case OBJ_L1LIGHT: case OBJ_L1LIGHT:
case OBJ_SKFIRE: case OBJ_SKFIRE:
case OBJ_CANDLE1: case OBJ_CANDLE1:
@ -4380,12 +4398,12 @@ Object *AddObject(_object_id objType, Point objPos)
case OBJ_CHEST1: case OBJ_CHEST1:
case OBJ_CHEST2: case OBJ_CHEST2:
case OBJ_CHEST3: case OBJ_CHEST3:
AddChest(object, objType); AddChest(object);
break; break;
case OBJ_TCHEST1: case OBJ_TCHEST1:
case OBJ_TCHEST2: case OBJ_TCHEST2:
case OBJ_TCHEST3: case OBJ_TCHEST3:
AddChest(object, objType); AddChest(object);
object._oTrapFlag = true; object._oTrapFlag = true;
if (leveltype == DTYPE_CATACOMBS) { if (leveltype == DTYPE_CATACOMBS) {
object._oVar4 = GenerateRnd(2); object._oVar4 = GenerateRnd(2);
@ -4461,7 +4479,7 @@ Object *AddObject(_object_id objType, Point objPos)
object._oRndSeed = AdvanceRndSeed(); object._oRndSeed = AdvanceRndSeed();
AddObjectLight(object, 5); AddObjectLight(object, 5);
break; break;
case OBJ_PEDISTAL: case OBJ_PEDESTAL:
AddPedestalOfBlood(object); AddPedestalOfBlood(object);
break; break;
case OBJ_WARWEAP: case OBJ_WARWEAP:
@ -4845,7 +4863,7 @@ void OperateObject(Player &player, int i, bool teleFlag)
if (sendmsg) if (sendmsg)
OperateStoryBook(object); OperateStoryBook(object);
break; break;
case OBJ_PEDISTAL: case OBJ_PEDESTAL:
OperatePedestal(player, object); OperatePedestal(player, object);
break; break;
case OBJ_WARWEAP: case OBJ_WARWEAP:
@ -5029,7 +5047,7 @@ void SyncOpObject(Player &player, int cmd, Object &object)
if (sendmsg) if (sendmsg)
OperateStoryBook(object); OperateStoryBook(object);
break; break;
case OBJ_PEDISTAL: case OBJ_PEDESTAL:
OperatePedestal(player, object); OperatePedestal(player, object);
break; break;
case OBJ_WARWEAP: case OBJ_WARWEAP:
@ -5134,7 +5152,7 @@ void SyncObjectAnim(Object &object)
case OBJ_STEELTOME: case OBJ_STEELTOME:
SyncQSTLever(object); SyncQSTLever(object);
break; break;
case OBJ_PEDISTAL: case OBJ_PEDESTAL:
SyncPedestal(object, SetPiece.position, SetPiece.size.width); SyncPedestal(object, SetPiece.position, SetPiece.size.width);
break; break;
default: default:
@ -5268,7 +5286,7 @@ void GetObjectStr(const Object &object)
case OBJ_STEELTOME: case OBJ_STEELTOME:
InfoString = _("Steel Tome"); InfoString = _("Steel Tome");
break; break;
case OBJ_PEDISTAL: case OBJ_PEDESTAL:
InfoString = _("Pedestal of Blood"); InfoString = _("Pedestal of Blood");
break; break;
case OBJ_STORYBOOK: case OBJ_STORYBOOK:
@ -5297,7 +5315,7 @@ void GetObjectStr(const Object &object)
} }
} }
if (object.IsDisabled()) { if (object.IsDisabled()) {
InfoString = fmt::format(fmt::runtime(_(/* TRANSLATORS: If user enabled diablo.ini setting "Disable Crippling Shrines" is set to 1; also used for Na-Kruls leaver */ "{:s} (disabled)")), InfoString); InfoString = fmt::format(fmt::runtime(_(/* TRANSLATORS: If user enabled diablo.ini setting "Disable Crippling Shrines" is set to 1; also used for Na-Kruls lever */ "{:s} (disabled)")), InfoString);
InfoColor = UiFlags::ColorRed; InfoColor = UiFlags::ColorRed;
} }
} }
@ -5310,24 +5328,4 @@ void SyncNakrulRoom()
dPiece[UberRow][UberCol + 1] = 298; dPiece[UberRow][UberCol + 1] = 298;
} }
void AddNakrulLeaver()
{
while (true) {
int xp = GenerateRnd(80) + 16;
int yp = GenerateRnd(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;
}
}
AddObject(OBJ_L5LEVER, { UberRow + 3, UberCol - 1 });
}
} // namespace devilution } // namespace devilution

1
Source/objects.h

@ -331,6 +331,5 @@ void SyncObjectAnim(Object &object);
*/ */
void GetObjectStr(const Object &object); void GetObjectStr(const Object &object);
void SyncNakrulRoom(); void SyncNakrulRoom();
void AddNakrulLeaver();
} // namespace devilution } // namespace devilution

Loading…
Cancel
Save