[Scummvm-git-logs] scummvm master -> 4bfc41cd042a2531c4a0df36a12ca486fccc3585

mduggan mgithub at guarana.org
Sat Jul 10 12:52:13 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4bfc41cd04 ULTIMA8: Update Crusader set activity to match original behavior


Commit: 4bfc41cd042a2531c4a0df36a12ca486fccc3585
    https://github.com/scummvm/scummvm/commit/4bfc41cd042a2531c4a0df36a12ca486fccc3585
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-07-10T21:50:46+09:00

Commit Message:
ULTIMA8: Update Crusader set activity to match original behavior

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 3ae2afd9eb..4ccb0db542 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -763,31 +763,53 @@ uint16 Actor::setActivityU8(int activity) {
 }
 
 uint16 Actor::setActivityCru(int activity) {
-	if (isDead())
+	if (isDead() || World::get_instance()->getControlledNPCNum() == _objId
+		|| hasActorFlags(ACT_WEAPONREADY) || activity == 0)
+		return 0;
+
+	if ((World::get_instance()->getGameDifficulty() == 4) && (getRandom() % 2 == 0)) {
+		if (activity == 5)
+			activity = 0xa;
+		if (activity == 9)
+			activity = 0xb;
+	}
+
+	if (_currentActivityNo == activity || (isInCombat() && activity != 0xc))
 		return 0;
 
 	_lastActivityNo = _currentActivityNo;
 	_currentActivityNo = activity;
 
+	if (isInCombat())
+		clearInCombat();
+
+	if (!hasFlags(FLG_FASTAREA))
+		return 0;
+
+	Kernel *kernel = Kernel::get_instance();
+
+	static const uint16 PROCSTYPES_TO_KILL[] = { 0x204, 0x258, 0xf0, 0x255, 0x257, 0x259, 0x25f, 0x25e };
+	for (int i = 0; i < ARRAYSIZE(PROCSTYPES_TO_KILL); i++) {
+		kernel->killProcesses(_objId, PROCSTYPES_TO_KILL[i], true);
+	}
+
 	switch (activity) {
 	case 1: // stand
 		return doAnim(Animation::stand, dir_current);
-	case 3: // pace
-		return Kernel::get_instance()->addProcess(new PaceProcess(this));
 	case 2: // loiter
-		Kernel::get_instance()->addProcess(new LoiterProcess(this));
-		return Kernel::get_instance()->addProcess(new DelayProcess(1));
+		return kernel->addProcess(new LoiterProcess(this));
+	case 3: // pace
+		return kernel->addProcess(new PaceProcess(this));
 	case 4:
 	case 6:
 	    // Does nothing in game..
 	    break;
 	case 7:
 		if (_lastActivityNo != 7)
-			return Kernel::get_instance()->addProcess(new SurrenderProcess(this));
+			return kernel->addProcess(new SurrenderProcess(this));
 	    break;
 	case 8:
-		return Kernel::get_instance()->addProcess(new GuardProcess(this));
-	    break;
+		return kernel->addProcess(new GuardProcess(this));
 	case 5:
 	case 9:
 	case 0xa:
@@ -799,7 +821,7 @@ uint16 Actor::setActivityCru(int activity) {
 	case 0xd:
 		// Only in No Regret
 		setActorFlag(ACT_INCOMBAT);
-		return Kernel::get_instance()->addProcess(new RollingThunderProcess(this));
+		return kernel->addProcess(new RollingThunderProcess(this));
 	case 0x70:
 		return setActivity(getDefaultActivity(0));
 	case 0x71:




More information about the Scummvm-git-logs mailing list