Browse Source

Update some quest object activation functions to use references (#3356)

- rename with a hopefully more descriptive name
pull/3358/head
Andrew James 4 years ago committed by GitHub
parent
commit
7dcc6d15f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Source/msg.cpp
  2. 127
      Source/objects.cpp
  3. 2
      Source/objects.h

2
Source/msg.cpp

@ -2282,7 +2282,7 @@ void DeltaLoadLevel()
for (int i = 0; i < ActiveObjectCount; i++) { for (int i = 0; i < ActiveObjectCount; i++) {
int ot = Objects[ActiveObjects[i]]._otype; int ot = Objects[ActiveObjects[i]]._otype;
if (ot == OBJ_TRAPL || ot == OBJ_TRAPR) if (ot == OBJ_TRAPL || ot == OBJ_TRAPR)
Obj_Trap(ActiveObjects[i]); OperateTrap(Objects[ActiveObjects[i]]);
} }
} }
deltaload = false; deltaload = false;

127
Source/objects.cpp

@ -2297,18 +2297,19 @@ void OperateBookLever(int pnum, int i)
} }
} }
void OperateSChambBk(int i) void OperateChamberOfBoneBook(Object &questBook)
{ {
if (Objects[i]._oSelFlag == 0 || qtextflag) { if (questBook._oSelFlag == 0 || qtextflag) {
return; return;
} }
if (Objects[i]._oAnimFrame != Objects[i]._oVar6) { if (questBook._oAnimFrame != questBook._oVar6) {
ObjChangeMapResync(Objects[i]._oVar1, Objects[i]._oVar2, Objects[i]._oVar3, Objects[i]._oVar4); ObjChangeMapResync(questBook._oVar1, questBook._oVar2, questBook._oVar3, questBook._oVar4);
for (int j = 0; j < ActiveObjectCount; j++) for (int j = 0; j < ActiveObjectCount; j++) {
SyncObjectAnim(Objects[ActiveObjects[j]]); SyncObjectAnim(Objects[ActiveObjects[j]]);
}
} }
Objects[i]._oAnimFrame = Objects[i]._oVar6; questBook._oAnimFrame = questBook._oVar6;
if (Quests[Q_SCHAMB]._qactive == QUEST_INIT) { if (Quests[Q_SCHAMB]._qactive == QUEST_INIT) {
Quests[Q_SCHAMB]._qactive = QUEST_ACTIVE; Quests[Q_SCHAMB]._qactive = QUEST_ACTIVE;
Quests[Q_SCHAMB]._qlog = true; Quests[Q_SCHAMB]._qlog = true;
@ -2398,7 +2399,7 @@ void OperateChest(int pnum, int i, bool sendmsg)
NetSendCmdParam2(false, CMD_PLROPOBJ, pnum, i); NetSendCmdParam2(false, CMD_PLROPOBJ, pnum, i);
} }
void OperateMushPatch(int pnum, int i) void OperateMushroomPatch(int pnum, Object &questContainer)
{ {
if (ActiveItemCount >= MAXITEMS) { if (ActiveItemCount >= MAXITEMS) {
return; return;
@ -2411,20 +2412,22 @@ void OperateMushPatch(int pnum, int i)
return; return;
} }
if (Objects[i]._oSelFlag != 0) { if (questContainer._oSelFlag == 0) {
if (!deltaload) return;
PlaySfxLoc(IS_CHEST, Objects[i].position); }
Objects[i]._oSelFlag = 0;
Objects[i]._oAnimFrame++; questContainer._oSelFlag = 0;
if (!deltaload) { questContainer._oAnimFrame++;
Point pos = GetSuperItemLoc(Objects[i].position);
SpawnQuestItem(IDI_MUSHROOM, pos, 0, 0); if (!deltaload) {
Quests[Q_MUSHROOM]._qvar1 = QS_MUSHSPAWNED; PlaySfxLoc(IS_CHEST, questContainer.position);
} Point pos = GetSuperItemLoc(questContainer.position);
SpawnQuestItem(IDI_MUSHROOM, pos, 0, 0);
Quests[Q_MUSHROOM]._qvar1 = QS_MUSHSPAWNED;
} }
} }
void OperateInnSignChest(int pnum, int i) void OperateInnSignChest(int pnum, Object &questContainer)
{ {
if (ActiveItemCount >= MAXITEMS) { if (ActiveItemCount >= MAXITEMS) {
return; return;
@ -2437,15 +2440,16 @@ void OperateInnSignChest(int pnum, int i)
return; return;
} }
if (Objects[i]._oSelFlag == 0) { if (questContainer._oSelFlag == 0) {
return; return;
} }
if (!deltaload)
PlaySfxLoc(IS_CHEST, Objects[i].position); questContainer._oSelFlag = 0;
Objects[i]._oSelFlag = 0; questContainer._oAnimFrame += 2;
Objects[i]._oAnimFrame += 2;
if (!deltaload) { if (!deltaload) {
Point pos = GetSuperItemLoc(Objects[i].position); PlaySfxLoc(IS_CHEST, questContainer.position);
Point pos = GetSuperItemLoc(questContainer.position);
SpawnQuestItem(IDI_BANNER, pos, 0, 0); SpawnQuestItem(IDI_BANNER, pos, 0, 0);
} }
} }
@ -2480,30 +2484,32 @@ void OperateSlainHero(int pnum, int i)
NetSendCmdParam1(false, CMD_OPERATEOBJ, i); NetSendCmdParam1(false, CMD_OPERATEOBJ, i);
} }
void OperateTrapLvr(int i) void OperateTrapLever(Object &flameLever)
{ {
if (!deltaload) if (!deltaload) {
PlaySfxLoc(IS_LEVER, Objects[i].position); PlaySfxLoc(IS_LEVER, flameLever.position);
}
if (Objects[i]._oAnimFrame == 1) { if (flameLever._oAnimFrame == 1) {
Objects[i]._oAnimFrame = 2; flameLever._oAnimFrame = 2;
for (int j = 0; j < ActiveObjectCount; j++) { for (int j = 0; j < ActiveObjectCount; j++) {
int oi = ActiveObjects[j]; Object &target = Objects[ActiveObjects[j]];
if (Objects[oi]._otype == Objects[i]._oVar2 && Objects[oi]._oVar1 == Objects[i]._oVar1) { if (target._otype == flameLever._oVar2 && target._oVar1 == flameLever._oVar1) {
Objects[oi]._oVar2 = 1; target._oVar2 = 1;
Objects[oi]._oAnimFlag = 0; target._oAnimFlag = 0;
} }
} }
return; return;
} }
Objects[i]._oAnimFrame--; flameLever._oAnimFrame--;
for (int j = 0; j < ActiveObjectCount; j++) { for (int j = 0; j < ActiveObjectCount; j++) {
int oi = ActiveObjects[j]; Object &target = Objects[ActiveObjects[j]];
if (Objects[oi]._otype == Objects[i]._oVar2 && Objects[oi]._oVar1 == Objects[i]._oVar1) { if (target._otype == flameLever._oVar2 && target._oVar1 == flameLever._oVar1) {
Objects[oi]._oVar2 = 0; target._oVar2 = 0;
if (Objects[oi]._oVar4 != 0) if (target._oVar4 != 0) {
Objects[oi]._oAnimFlag = 1; target._oAnimFlag = 1;
}
} }
} }
} }
@ -4780,20 +4786,21 @@ void AddObject(_object_id objType, Point objPos)
ActiveObjectCount++; ActiveObjectCount++;
} }
void Obj_Trap(int i) void OperateTrap(Object &trap)
{ {
if (Objects[i]._oVar4 != 0) if (trap._oVar4 != 0)
return; return;
int oti = dObject[Objects[i]._oVar1][Objects[i]._oVar2] - 1; int oti = dObject[trap._oVar1][trap._oVar2] - 1;
switch (Objects[oti]._otype) { Object &trigger = Objects[oti];
switch (trigger._otype) {
case OBJ_L1LDOOR: case OBJ_L1LDOOR:
case OBJ_L1RDOOR: case OBJ_L1RDOOR:
case OBJ_L2LDOOR: case OBJ_L2LDOOR:
case OBJ_L2RDOOR: case OBJ_L2RDOOR:
case OBJ_L3LDOOR: case OBJ_L3LDOOR:
case OBJ_L3RDOOR: case OBJ_L3RDOOR:
if (Objects[oti]._oVar4 == 0) if (trigger._oVar4 == 0)
return; return;
break; break;
case OBJ_LEVER: case OBJ_LEVER:
@ -4802,17 +4809,17 @@ void Obj_Trap(int i)
case OBJ_CHEST3: case OBJ_CHEST3:
case OBJ_SWITCHSKL: case OBJ_SWITCHSKL:
case OBJ_SARC: case OBJ_SARC:
if (Objects[oti]._oSelFlag != 0) if (trigger._oSelFlag != 0)
return; return;
break; break;
default: default:
return; return;
} }
Objects[i]._oVar4 = 1; trap._oVar4 = 1;
Point target = Objects[oti].position; Point target = trigger.position;
for (int y = target.y - 1; y <= Objects[oti].position.y + 1; y++) { for (int y = target.y - 1; y <= trigger.position.y + 1; y++) {
for (int x = Objects[oti].position.x - 1; x <= Objects[oti].position.x + 1; x++) { for (int x = trigger.position.x - 1; x <= trigger.position.x + 1; x++) {
if (dPlayer[x][y] != 0) { if (dPlayer[x][y] != 0) {
target.x = x; target.x = x;
target.y = y; target.y = y;
@ -4820,11 +4827,11 @@ void Obj_Trap(int i)
} }
} }
if (!deltaload) { if (!deltaload) {
Direction dir = GetDirection(Objects[i].position, target); Direction dir = GetDirection(trap.position, target);
AddMissile(Objects[i].position, target, dir, static_cast<missile_id>(Objects[i]._oVar3), TARGET_PLAYERS, -1, 0, 0); AddMissile(trap.position, target, dir, static_cast<missile_id>(trap._oVar3), TARGET_PLAYERS, -1, 0, 0);
PlaySfxLoc(IS_TRAP, Objects[oti].position); PlaySfxLoc(IS_TRAP, trigger.position);
} }
Objects[oti]._oTrapFlag = false; trigger._oTrapFlag = false;
} }
void ProcessObjects() void ProcessObjects()
@ -4874,7 +4881,7 @@ void ProcessObjects()
break; break;
case OBJ_TRAPL: case OBJ_TRAPL:
case OBJ_TRAPR: case OBJ_TRAPR:
Obj_Trap(oi); OperateTrap(Objects[oi]);
break; break;
case OBJ_MCIRCLE1: case OBJ_MCIRCLE1:
case OBJ_MCIRCLE2: case OBJ_MCIRCLE2:
@ -5084,7 +5091,7 @@ void OperateObject(int pnum, int i, bool teleFlag)
OperateBook(pnum, i); OperateBook(pnum, i);
break; break;
case OBJ_BOOK2R: case OBJ_BOOK2R:
OperateSChambBk(i); OperateChamberOfBoneBook(Objects[i]);
break; break;
case OBJ_CHEST1: case OBJ_CHEST1:
case OBJ_CHEST2: case OBJ_CHEST2:
@ -5098,7 +5105,7 @@ void OperateObject(int pnum, int i, bool teleFlag)
OperateSarc(pnum, i, sendmsg); OperateSarc(pnum, i, sendmsg);
break; break;
case OBJ_FLAMELVR: case OBJ_FLAMELVR:
OperateTrapLvr(i); OperateTrapLever(Objects[i]);
break; break;
case OBJ_BLINDBOOK: case OBJ_BLINDBOOK:
case OBJ_BLOODBOOK: case OBJ_BLOODBOOK:
@ -5147,7 +5154,7 @@ void OperateObject(int pnum, int i, bool teleFlag)
OperateWeaponRack(pnum, i, sendmsg); OperateWeaponRack(pnum, i, sendmsg);
break; break;
case OBJ_MUSHPATCH: case OBJ_MUSHPATCH:
OperateMushPatch(pnum, i); OperateMushroomPatch(pnum, Objects[i]);
break; break;
case OBJ_LAZSTAND: case OBJ_LAZSTAND:
OperateLazStand(pnum, i); OperateLazStand(pnum, i);
@ -5156,7 +5163,7 @@ void OperateObject(int pnum, int i, bool teleFlag)
OperateSlainHero(pnum, i); OperateSlainHero(pnum, i);
break; break;
case OBJ_SIGNCHEST: case OBJ_SIGNCHEST:
OperateInnSignChest(pnum, i); OperateInnSignChest(pnum, Objects[i]);
break; break;
default: default:
break; break;
@ -5238,13 +5245,13 @@ void SyncOpObject(int pnum, int cmd, int i)
OperateWeaponRack(pnum, i, false); OperateWeaponRack(pnum, i, false);
break; break;
case OBJ_MUSHPATCH: case OBJ_MUSHPATCH:
OperateMushPatch(pnum, i); OperateMushroomPatch(pnum, Objects[i]);
break; break;
case OBJ_SLAINHERO: case OBJ_SLAINHERO:
OperateSlainHero(pnum, i); OperateSlainHero(pnum, i);
break; break;
case OBJ_SIGNCHEST: case OBJ_SIGNCHEST:
OperateInnSignChest(pnum, i); OperateInnSignChest(pnum, Objects[i]);
break; break;
default: default:
break; break;

2
Source/objects.h

@ -156,7 +156,7 @@ void SetMapObjects(const uint16_t *dunData, int startx, int starty);
* @param objPos tile coordinates * @param objPos tile coordinates
*/ */
void AddObject(_object_id objType, Point objPos); void AddObject(_object_id objType, Point objPos);
void Obj_Trap(int i); void OperateTrap(Object &trap);
void ProcessObjects(); void ProcessObjects();
void RedoPlayerVision(); void RedoPlayerVision();
void MonstCheckDoors(Monster &monster); void MonstCheckDoors(Monster &monster);

Loading…
Cancel
Save