[Scummvm-git-logs] scummvm master -> 532998effb27373e45283dda0db1b8975f2f8517
OMGPizzaGuy
noreply at scummvm.org
Fri May 31 01:10:31 UTC 2024
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c8ffaf34d2 ULTIMA8: Define enum for reserved object identifiers
532998effb ULTIMA8: Define max item quantity constant
Commit: c8ffaf34d22a91d2d900c7e76a2f6ac32e4dbbeb
https://github.com/scummvm/scummvm/commit/c8ffaf34d22a91d2d900c7e76a2f6ac32e4dbbeb
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-30T20:10:13-05:00
Commit Message:
ULTIMA8: Define enum for reserved object identifiers
Changed paths:
engines/ultima/ultima8/games/u8_game.cpp
engines/ultima/ultima8/gumps/bark_gump.cpp
engines/ultima/ultima8/gumps/game_map_gump.cpp
engines/ultima/ultima8/kernel/object.h
engines/ultima/ultima8/kernel/object_manager.cpp
engines/ultima/ultima8/misc/debugger.cpp
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/world/actors/actor.cpp
engines/ultima/ultima8/world/actors/actor_anim_process.cpp
engines/ultima/ultima8/world/actors/attack_process.cpp
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
engines/ultima/ultima8/world/actors/grant_peace_process.cpp
engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
engines/ultima/ultima8/world/container.cpp
engines/ultima/ultima8/world/get_object.cpp
engines/ultima/ultima8/world/item.cpp
engines/ultima/ultima8/world/item_sorter.cpp
engines/ultima/ultima8/world/world.cpp
diff --git a/engines/ultima/ultima8/games/u8_game.cpp b/engines/ultima/ultima8/games/u8_game.cpp
index 138815678b7..b8e3cb937c0 100644
--- a/engines/ultima/ultima8/games/u8_game.cpp
+++ b/engines/ultima/ultima8/games/u8_game.cpp
@@ -96,8 +96,8 @@ bool U8Game::startGame() {
for (uint16 i = 384; i < 512; ++i)
objman->reserveObjId(i);
- // reserve ObjId 666 for the Guardian Bark hack
- objman->reserveObjId(666);
+ // Reserved for the Guardian Bark hack
+ objman->reserveObjId(kGuardianId);
auto *savers = new Common::File();
if (!savers->open("savegame/u8save.000")) {
diff --git a/engines/ultima/ultima8/gumps/bark_gump.cpp b/engines/ultima/ultima8/gumps/bark_gump.cpp
index b59505d1d16..33a2c1c52b6 100644
--- a/engines/ultima/ultima8/gumps/bark_gump.cpp
+++ b/engines/ultima/ultima8/gumps/bark_gump.cpp
@@ -61,7 +61,7 @@ BarkGump::~BarkGump(void) {
int BarkGump::dialogFontForActor(uint16 actor) {
// OK, this is a bit of a hack, but it's how it has to be
- if (actor == 1)
+ if (actor == kMainActorId)
return 6;
if (actor > 256)
return 8;
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 87402171e8c..e7b9cfe25ef 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -146,7 +146,7 @@ void GameMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
// HACK: unless EXT_TRANSPARENT is also set.
// (Used for hiding the avatar when drawing a full area map)
- if (item->getObjId() == 1) {
+ if (item->getObjId() == kMainActorId) {
if (item->hasExtFlags(Item::EXT_TRANSPARENT))
continue;
@@ -423,7 +423,7 @@ bool GameMapGump::DraggingItem(Item *item, int mx, int my) {
return false;
MainActor *avatar = getMainActor();
- if (trace == 1) { // dropping on self
+ if (trace == kMainActorId) { // dropping on self
ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
Container *backpack = getContainer(bp);
return backpack->CanAddItem(item, true);
@@ -541,7 +541,7 @@ void GameMapGump::DropItem(Item *item, int mx, int my) {
}
}
- if (trace == 1) { // dropping on self
+ if (trace == kMainActorId) { // dropping on self
ObjId bp = avatar->getEquip(ShapeInfo::SE_BACKPACK);
Container *backpack = getContainer(bp);
if (backpack && item->moveToContainer(backpack)) {
diff --git a/engines/ultima/ultima8/kernel/object.h b/engines/ultima/ultima8/kernel/object.h
index bcf554a896a..58868e92a11 100644
--- a/engines/ultima/ultima8/kernel/object.h
+++ b/engines/ultima/ultima8/kernel/object.h
@@ -28,6 +28,12 @@
namespace Ultima {
namespace Ultima8 {
+enum ReservedObjId {
+ kUndefinedId = 0,
+ kMainActorId = 1,
+ kGuardianId = 666
+};
+
class Usecode;
class Object {
diff --git a/engines/ultima/ultima8/kernel/object_manager.cpp b/engines/ultima/ultima8/kernel/object_manager.cpp
index eb3229546ec..7fd068e36d0 100644
--- a/engines/ultima/ultima8/kernel/object_manager.cpp
+++ b/engines/ultima/ultima8/kernel/object_manager.cpp
@@ -110,7 +110,7 @@ void ObjectManager::reset() {
_objects.clear();
_objects.resize(65536);
_objIDs->clearAll(32766);
- _objIDs->reserveID(666); // 666 is reserved for the Guardian Bark hack
+ _objIDs->reserveID(kGuardianId); // Reserved for the Guardian Bark hack
_actorIDs->clearAll();
}
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 25f54b29cbe..c3fc1e09833 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -1698,8 +1698,8 @@ bool Debugger::cmdU8ShapeViewer(int argc, const char **argv) {
bool Debugger::cmdShowMenu(int argc, const char **argv) {
World *world = World::get_instance();
// In Crusader escape is also used to stop controlling another NPC
- if (world && world->getControlledNPCNum() != 1) {
- world->setControlledNPCNum(1);
+ if (world && world->getControlledNPCNum() != kMainActorId) {
+ world->setControlledNPCNum(kMainActorId);
return false;
}
if (Ultima8Engine::get_instance()->isCruStasis()) {
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index be895897d0e..ce36db7f07a 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1101,7 +1101,7 @@ bool Ultima8Engine::newGame(int saveSlot) {
_game->startGame();
debugN(MM_INFO, "Create Camera...\n");
- CameraProcess::SetCameraProcess(new CameraProcess(1)); // Follow Avatar
+ CameraProcess::SetCameraProcess(new CameraProcess(kMainActorId));
debugN(MM_INFO, "Create persistent Processes...\n");
if (GAME_IS_U8)
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 03f455d85ab..936cee2086f 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -545,7 +545,7 @@ uint16 Actor::doAnim(Animation::Sequence anim, Direction dir, unsigned int steps
}
#if 0
- if (_objId == 1) {
+ if (_objId == kMainActorId) {
int32 x, y, z;
getLocation(x, y, z);
int32 actionno = AnimDat::getActionNumberForSequence(anim, this);
@@ -1177,7 +1177,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
damage_type = hitter->getDamageType();
}
- if (other == 1 && attacker && attacker->getLastAnim() != Animation::kick) {
+ if (other == kMainActorId && attacker && attacker->getLastAnim() != Animation::kick) {
// _strength for kicks is accumulated in AvatarMoverProcess
MainActor *av = getMainActor();
av->accumulateStr(damage / 4);
@@ -1195,7 +1195,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
}
Common::RandomSource &rs = Ultima8Engine::get_instance()->getRandomSource();
- if (damage >= 4 && _objId == 1 && hitter) {
+ if (damage >= 4 && _objId == kMainActorId && hitter) {
// play blood sprite
int start = 0, end = 12;
if (dir > dir_east) {
@@ -1232,7 +1232,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
}
ProcId fallingprocid = 0;
- if (_objId == 1 && damage > 0) {
+ if (_objId == kMainActorId && damage > 0) {
if ((damage_type & WeaponInfo::DMG_FALLING) && damage >= 6) {
// high falling damage knocks you down
doAnim(Animation::fallBackwards, dir_current);
@@ -1245,7 +1245,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
}
// if avatar was blocking; do a quick stopBlock/startBlock and play SFX
- if (_objId == 1 && getLastAnim() == Animation::startBlock) {
+ if (_objId == kMainActorId && getLastAnim() == Animation::startBlock) {
ProcId anim1pid = doAnim(Animation::stopBlock, dir_current);
ProcId anim2pid = doAnim(Animation::startBlock, dir_current);
@@ -1267,8 +1267,8 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
// TODO: target needs to stumble/fall/call for help/...(?)
- if (_objId != 1) {
- ObjId target = 1;
+ if (_objId != kMainActorId) {
+ ObjId target = kMainActorId;
if (attacker)
target = attacker->getObjId();
if (!isInCombat())
@@ -1278,7 +1278,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
assert(cp);
cp->setTarget(target);
- if (target == 1) {
+ if (target == kMainActorId) {
// call for help
}
}
@@ -1328,7 +1328,7 @@ ProcId Actor::dieU8(uint16 damageType) {
}
// Kill blue potion use process if running
- if (_objId == 1) {
+ if (_objId == kMainActorId) {
ProcessIter iter = Kernel::get_instance()->getProcessBeginIterator();
ProcessIter endproc = Kernel::get_instance()->getProcessEndIterator();
for (; iter != endproc; ++iter) {
@@ -1428,7 +1428,7 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
if (world->getControlledNPCNum() == _objId) {
TargetReticleProcess::get_instance()->avatarMoved();
- if (_objId != 1) {
+ if (_objId != kMainActorId) {
world->setControlledNPCNum(0);
}
}
@@ -1525,7 +1525,7 @@ ProcId Actor::dieCru(uint16 damageType, uint16 damagePts, Direction srcDir) {
setToStartOfAnim(Animation::fallBackwardsCru);
}
}
- } else if (damageType == 7 && _objId == 1) {
+ } else if (damageType == 7 && _objId == kMainActorId) {
lastanim = doAnimAfter(Animation::electrocuted, dir_current, lastanim);
}
@@ -1751,7 +1751,7 @@ int Actor::calculateAttackDamage(uint16 other, int damage, uint16 damage_type) {
// TODO: give avatar an extra chance to hit monsters
// with defense_type DMG_PIERCE
- if (hit && other == 1) {
+ if (hit && other == kMainActorId) {
MainActor *av = getMainActor();
if (attackdex > defenddex)
av->accumulateDex(2 * (attackdex - defenddex));
@@ -2351,7 +2351,7 @@ uint32 Actor::I_setTarget(const uint8 *args, unsigned int /*argsize*/) {
cp->setTarget(target);
} else {
- if (actor->isDead() || actor->getObjId() == 1)
+ if (actor->isDead() || actor->getObjId() == kMainActorId)
return 0;
actor->setActivityCru(5);
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index 98b1e592f9f..85b8333c0da 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -390,9 +390,9 @@ void ActorAnimProcess::doSpecial() {
Common::RandomSource &rs = Ultima8Engine::get_instance()->getRandomSource();
// play SFX when Avatar draws/sheathes weapon
- if (_itemNum == 1 && (_action == Animation::readyWeapon ||
- _action == Animation::unreadyWeapon) &&
- a->getEquip(ShapeInfo::SE_WEAPON) != 0) {
+ if (_itemNum == kMainActorId &&
+ (_action == Animation::readyWeapon || _action == Animation::unreadyWeapon) &&
+ a->getEquip(ShapeInfo::SE_WEAPON) != 0) {
int sfx = rs.getRandomBit() ? 0x51 : 0x52; // constants!
AudioProcess *audioproc = AudioProcess::get_instance();
if (audioproc) audioproc->playSFX(sfx, 0x60, 1, 0);
@@ -461,7 +461,7 @@ void ActorAnimProcess::doSpecial() {
// play PC/NPC footsteps
bool playavfootsteps = ConfMan.getBool("footsteps");
- if (_itemNum != 1 || playavfootsteps) {
+ if (_itemNum != kMainActorId || playavfootsteps) {
int32 x, y, z;
int32 xd, yd, zd;
a->getLocation(x, y, z);
@@ -532,7 +532,7 @@ void ActorAnimProcess::doFireWeaponCru(Actor *a, const AnimFrame *f) {
if (!wpninfo || !wpninfo->_weaponInfo)
return;
- if (a->getObjId() == 1 && wpninfo->_weaponInfo->_damageType == 6) {
+ if (a->getObjId() == kMainActorId && wpninfo->_weaponInfo->_damageType == 6) {
Process *auto_firer = new AutoFirerProcess();
Kernel::get_instance()->addProcess(auto_firer);
}
diff --git a/engines/ultima/ultima8/world/actors/attack_process.cpp b/engines/ultima/ultima8/world/actors/attack_process.cpp
index 3daa078a1af..db8476deea1 100644
--- a/engines/ultima/ultima8/world/actors/attack_process.cpp
+++ b/engines/ultima/ultima8/world/actors/attack_process.cpp
@@ -851,7 +851,7 @@ void AttackProcess::checkRandomAttackSoundRegret(const Actor *actor) {
/* static */
int16 AttackProcess::getRandomAttackSoundRegret(const Actor *actor) {
- if (World::get_instance()->getControlledNPCNum() != 1)
+ if (World::get_instance()->getControlledNPCNum() != kMainActorId)
return -1;
if (actor->isDead())
diff --git a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
index d48093511da..0ff34f034a2 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -597,7 +597,7 @@ void CruAvatarMoverProcess::tryAttack() {
AudioProcess *audio = AudioProcess::get_instance();
const WeaponInfo *wpninfo = wpn->getShapeInfo()->_weaponInfo;
- if (avatar->getObjId() != 1) {
+ if (avatar->getObjId() != kMainActorId) {
// Non-avatar NPCs never need to reload or run out of energy.
Animation::Sequence fireanim = (avatar->isKneeling() ?
Animation::kneelAndFire : Animation::attack);
@@ -630,7 +630,7 @@ void CruAvatarMoverProcess::tryAttack() {
if (wpninfo->_reloadSound) {
audio->playSFX(0x2a, 0x80, avatar->getObjId(), 1);
}
- if (avatar->getObjId() == 1 && !avatar->isKneeling()) {
+ if (avatar->getObjId() == kMainActorId && !avatar->isKneeling()) {
avatar->doAnim(Animation::reloadSmallWeapon, dir_current);
}
@@ -646,7 +646,7 @@ void CruAvatarMoverProcess::tryAttack() {
if (wpninfo->_reloadSound) {
audio->playSFX(0x2a, 0x80, avatar->getObjId(), 1);
}
- if (avatar->getObjId() == 1) {
+ if (avatar->getObjId() == kMainActorId) {
avatar->doAnim(Animation::reloadSmallWeapon, dir_current);
}
_SGA1Loaded = true;
diff --git a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
index cc976f9d9c4..7b886554ad2 100644
--- a/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
+++ b/engines/ultima/ultima8/world/actors/grant_peace_process.cpp
@@ -73,7 +73,7 @@ void GrantPeaceProcess::run() {
ObjId targetid = static_cast<ObjId>(_result);
Actor *target = getActor(targetid);
- if (targetid == 1 || !target) {
+ if (targetid == kMainActorId || !target) {
// targeting the avatar, no target or not an Actor
terminate();
return;
diff --git a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
index 584abc420e3..707b0a4adf4 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -181,7 +181,7 @@ void U8AvatarMoverProcess::handleCombatMode() {
Gump *desktopgump = Ultima8Engine::get_instance()->getDesktopGump();
int32 mx, my;
mouse->getMouseCoords(mx, my);
- if (desktopgump->TraceObjId(mx, my) == 1) {
+ if (desktopgump->TraceObjId(mx, my) == kMainActorId) {
// double right click on avatar = toggle combat mode
avatar->toggleInCombat();
waitFor(avatar->doAnim(Animation::unreadyWeapon, direction));
@@ -449,7 +449,7 @@ void U8AvatarMoverProcess::handleNormalMode() {
Gump *desktopgump = Ultima8Engine::get_instance()->getDesktopGump();
int32 mx, my;
mouse->getMouseCoords(mx, my);
- if (desktopgump->TraceObjId(mx, my) == 1) {
+ if (desktopgump->TraceObjId(mx, my) == kMainActorId) {
// double right click on avatar = toggle combat mode
_mouseButton[1].setState(MBS_HANDLED);
_mouseButton[1]._lastDown = 0;
diff --git a/engines/ultima/ultima8/world/container.cpp b/engines/ultima/ultima8/world/container.cpp
index 4377ebc7212..c9e82468c7b 100644
--- a/engines/ultima/ultima8/world/container.cpp
+++ b/engines/ultima/ultima8/world/container.cpp
@@ -124,7 +124,7 @@ bool Container::CanAddItem(Item *item, bool checkwghtvol) {
const Item *current = item->getTopItem();
// From outside to inside Avatar's inventory?
- if (p->getObjId() == 1 && current->getObjId() != 1) {
+ if (p->getObjId() == kMainActorId && current->getObjId() != kMainActorId) {
MainActor *av = getMainActor();
unsigned int str = av->getStr();
// FIXME: this check isn't entirely correct. (combining items,...?)
diff --git a/engines/ultima/ultima8/world/get_object.cpp b/engines/ultima/ultima8/world/get_object.cpp
index 0bfd409c68f..7cc70240519 100644
--- a/engines/ultima/ultima8/world/get_object.cpp
+++ b/engines/ultima/ultima8/world/get_object.cpp
@@ -48,7 +48,7 @@ Actor *getActor(ObjId id) {
}
MainActor *getMainActor() {
- return dynamic_cast<MainActor *>(ObjectManager::get_instance()->getObject(1));
+ return dynamic_cast<MainActor *>(ObjectManager::get_instance()->getObject(kMainActorId));
}
Actor *getControlledActor() {
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 6384f0d7f78..87f1b29fafa 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -160,8 +160,8 @@ void Item::move(int32 X, int32 Y, int32 Z) {
CurrentMap *map = World::get_instance()->getCurrentMap();
int mapChunkSize = map->getChunkSize();
- if (getObjId() == 1 && Z < 0) {
- warning("Moving avatar below Z=0. (%d,%d,%d)", X, Y, Z);
+ if (getObjId() == kMainActorId && Z < 0) {
+ warning("Moving main actor below Z=0. (%d,%d,%d)", X, Y, Z);
}
// TODO: In Crusader, if we are moving the avatar the game also checks whether
@@ -328,7 +328,7 @@ bool Item::moveToContainer(Container *container, bool checkwghtvol) {
// If moving to avatar, mark as OWNED
Container *root = getRootContainer();
- if (root && root->getObjId() == 1)
+ if (root && root->getObjId() == kMainActorId)
setFlagRecursively(FLG_OWNED);
// No lerping when moving to a container
@@ -1102,7 +1102,7 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
}
// Hitting us at the end (call hit on us, got hit on them)
else if (it->_endTime == 0x4000) {
- if (_objId == 1 && guiapp->isShowTouchingItems())
+ if (_objId == kMainActorId && guiapp->isShowTouchingItems())
item->setExtFlag(Item::EXT_HIGHLIGHT);
item->callUsecodeEvent_gotHit(_objId, hitforce);
@@ -1110,7 +1110,8 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
}
// Hitting us at the start (call release on us and them)
else if (!_parent && it->_hitTime == 0x0000) {
- if (_objId == 1) item->clearExtFlag(Item::EXT_HIGHLIGHT);
+ if (_objId == kMainActorId)
+ item->clearExtFlag(Item::EXT_HIGHLIGHT);
we_were_released = true;
item->callUsecodeEvent_release();
}
@@ -1168,7 +1169,7 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
// and teleporters work.
bool call_hit = it->_hitTime >= 0 || GAME_IS_CRUSADER;
if ((!it->_touching || it->_touchingFloor) && call_hit) {
- if (_objId == 1 && guiapp->isShowTouchingItems())
+ if (_objId == kMainActorId && guiapp->isShowTouchingItems())
item->setExtFlag(Item::EXT_HIGHLIGHT);
proc_gothit = item->callUsecodeEvent_gotHit(_objId, hitforce);
@@ -1177,7 +1178,8 @@ int32 Item::collideMove(int32 dx, int32 dy, int32 dz, bool teleport, bool force,
// If not hitting at end, we will need to call release
if (it->_endTime < hit) {
- if (_objId == 1) item->clearExtFlag(Item::EXT_HIGHLIGHT);
+ if (_objId == kMainActorId)
+ item->clearExtFlag(Item::EXT_HIGHLIGHT);
we_were_released = true;
proc_rel = item->callUsecodeEvent_release();
}
@@ -1874,7 +1876,7 @@ uint32 Item::enterFastArea() {
if (actor && actor->isDead() && !call_even_if_dead) {
// dead actor, don't call the usecode
} else {
- if (actor && _objId != 1) {
+ if (actor && _objId != kMainActorId) {
if (GAME_IS_CRUSADER) {
uint16 lastactivity = actor->getLastActivityNo();
actor->clearLastActivityNo();
@@ -1938,7 +1940,7 @@ uint32 Item::enterFastArea() {
// Called when an item is leaving the fast area
void Item::leaveFastArea() {
- if (_objId == 1) {
+ if (_objId == kMainActorId) {
debugC(kDebugActor, "Main actor leaving fast area");
}
@@ -1996,7 +1998,7 @@ uint16 Item::openGump(uint32 gumpshape) {
ContainerGump *cgump;
- if (getObjId() != 1) { //!! constant
+ if (getObjId() != kMainActorId) {
cgump = new ContainerGump(shapeP, 0, _objId, Gump::FLAG_ITEM_DEPENDENT |
Gump::FLAG_DRAGGABLE);
} else {
@@ -2037,8 +2039,8 @@ ProcId Item::bark(const Std::string &msg, ObjId id) {
closeBark();
uint32 shapenum = getShape();
- if (id == 666)
- shapenum = 666; // Hack for guardian barks
+ if (id == kGuardianId)
+ shapenum = kGuardianId; // Hack for guardian barks
Gump *gump = new BarkGump(getObjId(), msg, shapenum);
_bark = gump->getObjId();
@@ -3068,8 +3070,8 @@ uint32 Item::I_getWeightIncludingContents(const uint8 *args,
uint32 Item::I_bark(const uint8 *args, unsigned int /*argsize*/) {
ARG_ITEM_FROM_PTR(item);
ARG_STRING(str);
- if (id_item == 666)
- item = getItem(1);
+ if (id_item == kGuardianId)
+ item = getItem(kMainActorId);
if (!item) {
// Hack! Items should always be valid?
@@ -3290,7 +3292,8 @@ uint32 Item::I_legalCreateInCont(const uint8 *args, unsigned int /*argsize*/) {
uint32 Item::I_destroy(const uint8 *args, unsigned int /*argsize*/) {
ARG_ITEM_FROM_PTR(item);
- if (!item || item->getObjId() == 1) return 0;
+ if (!item || item->getObjId() == kMainActorId)
+ return 0;
item->destroy();
diff --git a/engines/ultima/ultima8/world/item_sorter.cpp b/engines/ultima/ultima8/world/item_sorter.cpp
index 47a5b5e438f..449a6c1a4f1 100644
--- a/engines/ultima/ultima8/world/item_sorter.cpp
+++ b/engines/ultima/ultima8/world/item_sorter.cpp
@@ -467,7 +467,7 @@ bool ItemSorter::PaintSortItem(RenderSurface *surf, SortItem *si, bool showFootp
// weapon overlay
// FIXME: use highlight/invisibility, also add to Trace() ?
- if (si->_shapeNum == 1 && si->_itemNum == 1) {
+ if (si->_shapeNum == 1 && si->_itemNum == kMainActorId) {
MainActor *av = getMainActor();
const WeaponOverlayFrame *wo_frame = nullptr;
uint32 wo_shapenum;
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index fa87458a651..1625a40f6ba 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -193,14 +193,14 @@ bool World::switchMap(uint32 newmap) {
// TODO: This may not even be needed for U8, but reset in case camera
// was looking at something other than the avatar during teleport.
CameraProcess *camera = CameraProcess::GetCameraProcess();
- if (camera && camera->getItemNum() != 1) {
- CameraProcess::SetCameraProcess(new CameraProcess(1));
+ if (camera && camera->getItemNum() != kMainActorId) {
+ CameraProcess::SetCameraProcess(new CameraProcess(kMainActorId));
}
CameraProcess::SetEarthquake(0);
} else {
// In Crusader, snap the camera to the avatar. The snap process will
// then find the right snap egg in the next frame.
- CameraProcess::SetCameraProcess(new CameraProcess(1));
+ CameraProcess::SetCameraProcess(new CameraProcess(kMainActorId));
}
return true;
Commit: 532998effb27373e45283dda0db1b8975f2f8517
https://github.com/scummvm/scummvm/commit/532998effb27373e45283dda0db1b8975f2f8517
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-30T20:10:13-05:00
Commit Message:
ULTIMA8: Define max item quantity constant
Changed paths:
engines/ultima/ultima8/gumps/container_gump.cpp
engines/ultima/ultima8/gumps/game_map_gump.cpp
engines/ultima/ultima8/world/item.h
diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index 37a3bfb33a9..616ab8d32b6 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -541,10 +541,9 @@ void ContainerGump::DropItem(Item *item, int mx, int my) {
// try to combine items
if (item->canMergeWith(targetitem)) {
uint16 newquant = targetitem->getQuality() + item->getQuality();
- // easter egg as in original: items stack to max quantity of 666
- if (newquant > 666) {
- item->setQuality(newquant - 666);
- targetitem->setQuality(666);
+ if (newquant > Item::MAX_QUANTITY) {
+ item->setQuality(newquant - Item::MAX_QUANTITY);
+ targetitem->setQuality(Item::MAX_QUANTITY);
// maybe this isn't needed? original doesn't do it here..
targetitem->callUsecodeEvent_combine();
} else {
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index e7b9cfe25ef..59b74249a19 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -34,13 +34,10 @@
#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/world/get_object.h"
#include "ultima/ultima8/world/actors/avatar_mover_process.h"
+#include "ultima/ultima8/world/actors/pathfinder_process.h"
#include "ultima/ultima8/world/missile_tracker.h"
#include "ultima/ultima8/world/split_item_process.h"
-#include "ultima/ultima8/world/actors/pathfinder_process.h"
-
-// map dumping
-
namespace Ultima {
namespace Ultima8 {
@@ -524,10 +521,9 @@ void GameMapGump::DropItem(Item *item, int mx, int my) {
// try to combine items
if (canReach && targetitem && item->canMergeWith(targetitem)) {
uint16 newquant = targetitem->getQuality() + item->getQuality();
- // easter egg as in original: items stack to max quantity of 666
- if (newquant > 666) {
- item->setQuality(newquant - 666);
- targetitem->setQuality(666);
+ if (newquant > Item::MAX_QUANTITY) {
+ item->setQuality(newquant - Item::MAX_QUANTITY);
+ targetitem->setQuality(Item::MAX_QUANTITY);
// maybe this isn't needed? original doesn't do it here..
targetitem->callUsecodeEvent_combine();
} else {
diff --git a/engines/ultima/ultima8/world/item.h b/engines/ultima/ultima8/world/item.h
index 5c74faf6e39..652322d1777 100644
--- a/engines/ultima/ultima8/world/item.h
+++ b/engines/ultima/ultima8/world/item.h
@@ -705,6 +705,9 @@ public:
EXT_TARGET = 0x0200, //!< Item is the current reticle target in Crusader
EXT_FEMALE = 0x8000 //!< Item is Crusader Female NPC (controls sfx)
};
+
+ // easter egg as in original: items stack to max quantity of 666
+ static const int MAX_QUANTITY = 666;
};
inline const ShapeInfo *Item::getShapeInfo() const {
More information about the Scummvm-git-logs
mailing list