[Scummvm-git-logs] scummvm master -> 5fe99875879528db4f724e115787b67431ba0e5d
mduggan
mgithub at guarana.org
Sat May 1 12:54:06 UTC 2021
This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5301e0e886 ULTIMA8: Remove ignored parameter from FileSystem
6277257d10 ULTIMA8: Avoid Crusader NPCs spinning to same direction
343c5dfab7 ULTIMA8: Translate anim nums given to usecode
5c0fa036b9 ULTIMA8: Skip Crusader ammo check for npcs != 1
e2072dc746 ULTIMA8: Kill process 0xc when switching Crusader npc
1b15041a29 ULTIMA8: Tidy up 'all process' constant in Kernel.
be95710065 ULTIMA8: Tweaks to Crusader SuperSprite to make Thresher work right
5fe9987587 ULTIMA8: Fix a couple more Crusader pickup counts
Commit: 5301e0e886b42be77ec73add9b7c6b1d229ce40c
https://github.com/scummvm/scummvm/commit/5301e0e886b42be77ec73add9b7c6b1d229ce40c
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Remove ignored parameter from FileSystem
Changed paths:
engines/ultima/ultima8/conf/config_file_manager.cpp
engines/ultima/ultima8/filesys/file_system.cpp
engines/ultima/ultima8/filesys/file_system.h
diff --git a/engines/ultima/ultima8/conf/config_file_manager.cpp b/engines/ultima/ultima8/conf/config_file_manager.cpp
index f8cd621a65..bc3feae5c2 100644
--- a/engines/ultima/ultima8/conf/config_file_manager.cpp
+++ b/engines/ultima/ultima8/conf/config_file_manager.cpp
@@ -45,7 +45,7 @@ ConfigFileManager::~ConfigFileManager() {
}
bool ConfigFileManager::readConfigFile(string fname, const istring &category) {
- Common::SeekableReadStream *f = FileSystem::get_instance()->ReadFile(fname, true);
+ Common::SeekableReadStream *f = FileSystem::get_instance()->ReadFile(fname);
if (!f) return false;
ConfigFile *configFile = new ConfigFile();
diff --git a/engines/ultima/ultima8/filesys/file_system.cpp b/engines/ultima/ultima8/filesys/file_system.cpp
index a0395874c3..7522aab6ce 100644
--- a/engines/ultima/ultima8/filesys/file_system.cpp
+++ b/engines/ultima/ultima8/filesys/file_system.cpp
@@ -45,7 +45,7 @@ FileSystem::~FileSystem() {
// Open a streaming file as readable. Streamed (0 on failure)
-Common::SeekableReadStream *FileSystem::ReadFile(const string &vfn, bool is_text) {
+Common::SeekableReadStream *FileSystem::ReadFile(const string &vfn) {
Common::SeekableReadStream *readStream;
if (!rawOpen(readStream, vfn))
return nullptr;
@@ -54,7 +54,7 @@ Common::SeekableReadStream *FileSystem::ReadFile(const string &vfn, bool is_text
}
// Open a streaming file as writeable. Streamed (0 on failure)
-Common::WriteStream *FileSystem::WriteFile(const string &vfn, bool is_text) {
+Common::WriteStream *FileSystem::WriteFile(const string &vfn) {
string filename = vfn;
Common::WriteStream *writeStream;
diff --git a/engines/ultima/ultima8/filesys/file_system.h b/engines/ultima/ultima8/filesys/file_system.h
index 992838ab6e..6033681c8a 100644
--- a/engines/ultima/ultima8/filesys/file_system.h
+++ b/engines/ultima/ultima8/filesys/file_system.h
@@ -40,15 +40,13 @@ public:
//! Open a file as readable. Streamed.
//! \param vfn the (virtual) filename
- //! \param is_text open in text mode?
//! \return nullptr on failure
- Common::SeekableReadStream *ReadFile(const Std::string &vfn, bool is_text = false);
+ Common::SeekableReadStream *ReadFile(const Std::string &vfn);
//! Open a file as writable. Streamed.
//! \param vfn the (virtual) filename
- //! \param is_text open in text mode?
//! \return a new writestream, or nullptr on failure
- Common::WriteStream *WriteFile(const Std::string &vfn, bool is_text = false);
+ Common::WriteStream *WriteFile(const Std::string &vfn);
private:
static bool base_to_uppercase(Std::string &str, int count);
Commit: 6277257d10519661cc8c31fd02978d272b2086a0
https://github.com/scummvm/scummvm/commit/6277257d10519661cc8c31fd02978d272b2086a0
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Avoid Crusader NPCs spinning to same direction
Changed paths:
engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
diff --git a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
index 09cab40703..5ebfe8b08e 100644
--- a/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_pathfinder_process.cpp
@@ -123,7 +123,8 @@ void CruPathfinderProcess::terminate() {
destdir = Direction_GetWorldDir(ty - iy, tx - ix, dirmode_8dirs);
}
}
- turnproc = actor->turnTowardDir(destdir);
+ if (destdir != dir_current)
+ turnproc = actor->turnTowardDir(destdir);
}
if (!turnproc && _noShotAvailable) {
Animation::Sequence standanim = (actor->isInCombat() ? Animation::combatStandSmallWeapon : Animation::stand);
Commit: 343c5dfab777b5df0355d0d6633641ded532e2ce
https://github.com/scummvm/scummvm/commit/343c5dfab777b5df0355d0d6633641ded532e2ce
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Translate anim nums given to usecode
Changed paths:
engines/ultima/ultima8/world/actors/actor.cpp
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 2c2fe22682..ba2823c557 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -666,7 +666,7 @@ uint16 Actor::turnTowardDir(Direction targetdir) {
}
}
- if (targetdir == curdir)
+ if (targetdir == curdir || targetdir == dir_current)
return 0; // nothing to do.
if (combat) {
@@ -1813,7 +1813,7 @@ uint32 Actor::I_getLastAnimSet(const uint8 *args, unsigned int /*argsize*/) {
ARG_ACTOR_FROM_PTR(actor);
if (!actor) return 0;
- return actor->getLastAnim();
+ return AnimDat::getActionNumberForSequence(actor->getLastAnim(), actor);
}
uint32 Actor::I_getStr(const uint8 *args, unsigned int /*argsize*/) {
Commit: 5c0fa036b9e10970be1565152a7c97351824d563
https://github.com/scummvm/scummvm/commit/5c0fa036b9e10970be1565152a7c97351824d563
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Skip Crusader ammo check for npcs != 1
Changed paths:
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
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 2cdfc5cb73..70919b4fc5 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -454,6 +454,14 @@ void CruAvatarMoverProcess::tryAttack() {
AudioProcess *audio = AudioProcess::get_instance();
const WeaponInfo *wpninfo = wpn->getShapeInfo()->_weaponInfo;
+ if (avatar->getObjId() != 1) {
+ // Non-avatar NPCs never need to reload or run out of energy.
+ Animation::Sequence fireanim = (avatar->isKneeling() ?
+ Animation::kneelAndFire : Animation::attack);
+ waitFor(avatar->doAnim(fireanim, avatar->getDir()));
+ return;
+ }
+
int shotsleft;
if (wpninfo->_ammoShape) {
shotsleft = wpn->getQuality();
Commit: e2072dc746214ac21691e2a78c8ad55a3e6177fc
https://github.com/scummvm/scummvm/commit/e2072dc746214ac21691e2a78c8ad55a3e6177fc
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Kill process 0xc when switching Crusader npc
Changed paths:
engines/ultima/ultima8/world/world.cpp
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index a937315b08..19a56db952 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -450,8 +450,10 @@ void World::setControlledNPCNum(uint16 num) {
}
Actor *controlled = getActor(num);
- if (controlled && controlled->isInCombat() && num != 1) {
- controlled->clearInCombat();
+ if (controlled && num != 1) {
+ Kernel::get_instance()->killProcesses(num, 0xc, false);
+ if (controlled->isInCombat())
+ controlled->clearInCombat();
}
TargetReticleProcess *t = TargetReticleProcess::get_instance();
Commit: 1b15041a29219465751da30ec4522d4f2ce795d9
https://github.com/scummvm/scummvm/commit/1b15041a29219465751da30ec4522d4f2ce795d9
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Tidy up 'all process' constant in Kernel.
Changed paths:
engines/ultima/ultima8/kernel/kernel.cpp
engines/ultima/ultima8/kernel/kernel.h
engines/ultima/ultima8/world/item.cpp
engines/ultima/ultima8/world/world.cpp
diff --git a/engines/ultima/ultima8/kernel/kernel.cpp b/engines/ultima/ultima8/kernel/kernel.cpp
index f10ffb6b96..fd42493528 100644
--- a/engines/ultima/ultima8/kernel/kernel.cpp
+++ b/engines/ultima/ultima8/kernel/kernel.cpp
@@ -35,6 +35,12 @@ const uint32 Kernel::TICKS_PER_FRAME = 2;
const uint32 Kernel::TICKS_PER_SECOND = 60;
const uint32 Kernel::FRAMES_PER_SECOND = Kernel::TICKS_PER_SECOND / Kernel::TICKS_PER_FRAME;
+// A special proc type which means "all"
+const uint16 Kernel::PROC_TYPE_ALL = 6;
+
+// The same as above, but for Crusader.
+// Used in Usecode functions to translate.
+static const uint16 CRU_PROC_TYPE_ALL = 0xc;
Kernel::Kernel() : _loading(false), _tickNum(0), _paused(0),
_runningProcess(nullptr), _frameByFrame(false) {
@@ -249,7 +255,7 @@ uint32 Kernel::getNumProcesses(ObjId objid, uint16 processtype) {
if (p->is_terminated()) continue;
if ((objid == 0 || objid == p->_itemNum) &&
- (processtype == 6 || processtype == p->_type))
+ (processtype == PROC_TYPE_ALL || processtype == p->_type))
count++;
}
@@ -264,7 +270,7 @@ Process *Kernel::findProcess(ObjId objid, uint16 processtype) {
if (p->is_terminated()) continue;
if ((objid == 0 || objid == p->_itemNum) &&
- (processtype == 6 || processtype == p->_type)) {
+ (processtype == PROC_TYPE_ALL || processtype == p->_type)) {
return p;
}
}
@@ -278,7 +284,7 @@ void Kernel::killProcesses(ObjId objid, uint16 processtype, bool fail) {
Process *p = *it;
if (p->_itemNum != 0 && (objid == 0 || objid == p->_itemNum) &&
- (processtype == 6 || processtype == p->_type) &&
+ (processtype == PROC_TYPE_ALL || processtype == p->_type) &&
!(p->_flags & Process::PROC_TERMINATED) &&
!(p->_flags & Process::PROC_TERM_DEFERRED)) {
if (fail)
@@ -373,6 +379,9 @@ uint32 Kernel::I_getNumProcesses(const uint8 *args, unsigned int /*argsize*/) {
ARG_OBJID(item);
ARG_UINT16(type);
+ if (GAME_IS_CRUSADER && type == CRU_PROC_TYPE_ALL)
+ type = PROC_TYPE_ALL;
+
return Kernel::get_instance()->getNumProcesses(item, type);
}
@@ -380,6 +389,9 @@ uint32 Kernel::I_resetRef(const uint8 *args, unsigned int /*argsize*/) {
ARG_OBJID(item);
ARG_UINT16(type);
+ if (GAME_IS_CRUSADER && type == CRU_PROC_TYPE_ALL)
+ type = PROC_TYPE_ALL;
+
Kernel::get_instance()->killProcesses(item, type, true);
return 0;
}
diff --git a/engines/ultima/ultima8/kernel/kernel.h b/engines/ultima/ultima8/kernel/kernel.h
index 94e6bc5f7a..82c6d0a2ae 100644
--- a/engines/ultima/ultima8/kernel/kernel.h
+++ b/engines/ultima/ultima8/kernel/kernel.h
@@ -131,6 +131,9 @@ public:
static const uint32 TICKS_PER_SECOND;
static const uint32 FRAMES_PER_SECOND;
+ // A special process type which means kill all the processes.
+ static const uint16 PROC_TYPE_ALL;
+
INTRINSIC(I_getNumProcesses);
INTRINSIC(I_resetRef);
private:
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index c4b2ae5acd..4baa99aa72 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -2238,7 +2238,7 @@ void Item::receiveHitCru(uint16 other, Direction dir, int damage, uint16 type) {
if (damageInfo) {
bool wasbroken = damageInfo->applyToItem(this, damage);
if (wasbroken) {
- Kernel::get_instance()->killProcesses(_objId, 0xc, true);
+ Kernel::get_instance()->killProcesses(_objId, Kernel::PROC_TYPE_ALL, true);
}
}
diff --git a/engines/ultima/ultima8/world/world.cpp b/engines/ultima/ultima8/world/world.cpp
index 19a56db952..3b935d26dc 100644
--- a/engines/ultima/ultima8/world/world.cpp
+++ b/engines/ultima/ultima8/world/world.cpp
@@ -451,7 +451,7 @@ void World::setControlledNPCNum(uint16 num) {
Actor *controlled = getActor(num);
if (controlled && num != 1) {
- Kernel::get_instance()->killProcesses(num, 0xc, false);
+ Kernel::get_instance()->killProcesses(num, Kernel::PROC_TYPE_ALL, true);
if (controlled->isInCombat())
controlled->clearInCombat();
}
Commit: be95710065488776a5fd25cd829f21a3a530e247
https://github.com/scummvm/scummvm/commit/be95710065488776a5fd25cd829f21a3a530e247
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Tweaks to Crusader SuperSprite to make Thresher work right
Changed paths:
engines/ultima/ultima8/world/super_sprite_process.cpp
diff --git a/engines/ultima/ultima8/world/super_sprite_process.cpp b/engines/ultima/ultima8/world/super_sprite_process.cpp
index 9db9ac6b15..44e69951c5 100644
--- a/engines/ultima/ultima8/world/super_sprite_process.cpp
+++ b/engines/ultima/ultima8/world/super_sprite_process.cpp
@@ -119,7 +119,7 @@ SuperSpriteProcess::SuperSpriteProcess(int shape, int frame, int sx, int sy, int
float travel = _destpt.maxDistXYZ(_nextpt);
// FIXME: how to get this scaled correctly?
- float speed = firetypedat->getCellsPerRound() * 128.0f;
+ float speed = firetypedat->getCellsPerRound() * 32.0f;
float rounds = travel / speed;
if (rounds < 1)
rounds = 1;
@@ -320,8 +320,9 @@ void SuperSpriteProcess::hitAndFinish() {
int xstep = _pt3.x - _nowpt.x;
int ystep = _pt3.y - _nowpt.y;
int zstep = _pt3.z - _nowpt.z;
- int32 start[3] = {_nowpt.x, _nowpt.y, _nowpt.z};
- int32 end[3] = {_pt3.x, _pt3.y, _pt3.z};
+ // We add a slight hack - our sweep test is off-by-one on Z??
+ int32 start[3] = {_nowpt.x, _nowpt.y, _nowpt.z + 1};
+ int32 end[3] = {_pt3.x, _pt3.y, _pt3.z + 1};
int32 dims[3] = {1, 1, 1};
// will never get a collision if not stepping at all..
bool collision = !(xstep || ystep || zstep);
@@ -434,8 +435,8 @@ void SuperSpriteProcess::advanceFrame() {
bool SuperSpriteProcess::areaSearch() {
CurrentMap *map = World::get_instance()->getCurrentMap();
- int32 start[3] = {_nowpt.x, _nowpt.y, _nowpt.z};
- int32 end[3] = {_pt3.x, _pt3.y, _pt3.z};
+ int32 start[3] = {_nowpt.x, _nowpt.y, _nowpt.z + 1};
+ int32 end[3] = {_pt3.x, _pt3.y, _pt3.z + 1};
int32 dims[3] = {1, 1, 1};
Item *item = getItem(_itemNum);
Commit: 5fe99875879528db4f724e115787b67431ba0e5d
https://github.com/scummvm/scummvm/commit/5fe99875879528db4f724e115787b67431ba0e5d
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-05-01T21:53:52+09:00
Commit Message:
ULTIMA8: Fix a couple more Crusader pickup counts
Changed paths:
engines/ultima/ultima8/world/actors/main_actor.cpp
diff --git a/engines/ultima/ultima8/world/actors/main_actor.cpp b/engines/ultima/ultima8/world/actors/main_actor.cpp
index a687ac7f0f..3ec28076e1 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.cpp
+++ b/engines/ultima/ultima8/world/actors/main_actor.cpp
@@ -292,6 +292,7 @@ int16 MainActor::addItemCru(Item *item, bool showtoast) {
if (q < 0x14) {
existing->setQuality(q + 1);
existing->callUsecodeEvent_combine();
+ item->setQuality(1); // Count of picked up item is always 1
if (showtoast)
pickupArea->addPickup(item, true);
item->destroy();
@@ -302,6 +303,7 @@ int16 MainActor::addItemCru(Item *item, bool showtoast) {
if (q < 10) {
existing->setQuality(q + 1);
existing->callUsecodeEvent_combine();
+ item->setQuality(1); // Count of picked up item is always 1
if (showtoast)
pickupArea->addPickup(item, true);
item->destroy();
More information about the Scummvm-git-logs
mailing list