[Scummvm-cvs-logs] scummvm master -> f14c971313ce0eadb91123d55e01f8acf731ee18

sev- sev at scummvm.org
Sun May 22 23:01:52 CEST 2016


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:
a6fd06074d COMMON: Fix SortedArray implementation.
f14c971313 SCUMM HE: Plug in Moonbase AI


Commit: a6fd06074da4720c77e83dca90d22c88a8dbe0b8
    https://github.com/scummvm/scummvm/commit/a6fd06074da4720c77e83dca90d22c88a8dbe0b8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-22T22:59:41+02:00

Commit Message:
COMMON: Fix SortedArray implementation.

Had to use a modified bsearch for finding the nearest element.

Changed paths:
    common/array.h



diff --git a/common/array.h b/common/array.h
index 320b367..869d79b 100644
--- a/common/array.h
+++ b/common/array.h
@@ -378,7 +378,7 @@ public:
 	 * Inserts element at the sorted position.
 	 */
 	void insert(const T &element) {
-		T *where = (T *)bsearch(element, this->front(), this->_size, sizeof(T), _comparator);
+		T *where = (T *)bsearchMin(element, this->front(), this->_size, sizeof(T), _comparator);
 		insert(where, element);
 	}
 
@@ -406,7 +406,29 @@ public:
 		error("Operation not allowed with SortedArray");
 	}
 
+private:
+	// Based on code Copyright (C) 2008-2009 Ksplice, Inc.
+	// Author: Tim Abbott <tabbott at ksplice.com>
+	// Licensed under GPLv2+
+	void *bsearchMin(const void *key, const void *base, uint num, uint size,
+					int (*cmp)(const void *key, const void *elt)) {
+		uint start = 0, end = num;
+		int result;
+
+		while (start < end) {
+			uint mid = start + (end - start) / 2;
+
+			result = cmp(key, (byte *)base + mid * size);
+			if (result < 0)
+				end = mid;
+			else if (result > 0)
+				start = mid + 1;
+			else
+				return (void *)((byte *)base + mid * size);
+		}
 
+		return (void *)((byte *)base + start * size);
+	}
 
 private:
 	int (*_comparator)(const void *, const void *);


Commit: f14c971313ce0eadb91123d55e01f8acf731ee18
    https://github.com/scummvm/scummvm/commit/f14c971313ce0eadb91123d55e01f8acf731ee18
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-22T22:59:41+02:00

Commit Message:
SCUMM HE: Plug in Moonbase AI

Changed paths:
    engines/scumm/he/logic/moonbase_logic.cpp
    engines/scumm/he/moonbase/ai_main.cpp
    engines/scumm/he/moonbase/ai_main.h



diff --git a/engines/scumm/he/logic/moonbase_logic.cpp b/engines/scumm/he/logic/moonbase_logic.cpp
index a323566..d5100ce 100644
--- a/engines/scumm/he/logic/moonbase_logic.cpp
+++ b/engines/scumm/he/logic/moonbase_logic.cpp
@@ -23,6 +23,7 @@
 #include "scumm/he/intern_he.h"
 #include "scumm/he/logic_he.h"
 #include "scumm/he/moonbase/moonbase.h"
+#include "scumm/he/moonbase/ai_main.h"
 
 namespace Scumm {
 
@@ -48,7 +49,7 @@ private:
 	int op_set_fow_image(int op, int numArgs, int32 *args);
 
 	void op_ai_test_kludge(int op, int numArgs, int32 *args);
-	void op_ai_master_control_program(int op, int numArgs, int32 *args);
+	int op_ai_master_control_program(int op, int numArgs, int32 *args);
 	void op_ai_reset(int op, int numArgs, int32 *args);
 	void op_ai_set_type(int op, int numArgs, int32 *args);
 	void op_ai_clean_up(int op, int numArgs, int32 *args);
@@ -137,14 +138,12 @@ int32 LogicHEmoonbase::dispatch(int op, int numArgs, int32 *args) {
 		break;
 	case OP_SET_FOW_IMAGE:
 		return op_set_fow_image(op, numArgs, args);
-		break;
 
 	case OP_AI_TEST_KLUDGE:
 		op_ai_test_kludge(op, numArgs, args);
 		break;
 	case OP_AI_MASTER_CONTROL_PROGRAM:
-		op_ai_master_control_program(op, numArgs, args);
-		break;
+		return op_ai_master_control_program(op, numArgs, args);
 	case OP_AI_RESET:
 		op_ai_reset(op, numArgs, args);
 		break;
@@ -226,24 +225,24 @@ void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
 	LogicHE::dispatch(op, numArgs, args);
 }
 
-void LogicHEmoonbase::op_ai_master_control_program(int op, int numArgs, int32 *args) {
-	warning("STUB: op_ai_master_control_program()");
-	LogicHE::dispatch(op, numArgs, args);
+int LogicHEmoonbase::op_ai_master_control_program(int op, int numArgs, int32 *args) {
+	warning("op_ai_master_control_program()");
+	return masterControlProgram(numArgs, args);
 }
 
 void LogicHEmoonbase::op_ai_reset(int op, int numArgs, int32 *args) {
-	warning("STUB: op_ai_reset)");
-	LogicHE::dispatch(op, numArgs, args);
+	warning("op_ai_reset())");
+	resetAI(_vm);
 }
 
 void LogicHEmoonbase::op_ai_set_type(int op, int numArgs, int32 *args) {
-	warning("STUB: op_ai_set_type()");
-	LogicHE::dispatch(op, numArgs, args);
+	warning("op_ai_set_type()");
+	setAIType(numArgs, args);
 }
 
 void LogicHEmoonbase::op_ai_clean_up(int op, int numArgs, int32 *args) {
-	warning("STUB: op_ai_clean_up()");
-	LogicHE::dispatch(op, numArgs, args);
+	warning("op_ai_clean_up()");
+	cleanUpAI();
 }
 
 LogicHE *makeLogicHEmoonbase(ScummEngine_v90he *vm) {
diff --git a/engines/scumm/he/moonbase/ai_main.cpp b/engines/scumm/he/moonbase/ai_main.cpp
index 1a191a1..6844d2f 100644
--- a/engines/scumm/he/moonbase/ai_main.cpp
+++ b/engines/scumm/he/moonbase/ai_main.cpp
@@ -168,7 +168,9 @@ const int *MCP_params;
 Common::Array<int> lastXCoord[5];
 Common::Array<int> lastYCoord[5];
 
-void resetAI() {
+void resetAI(ScummEngine_v90he *vm) {
+	_vm = vm;
+
 	AIstate = STATE_CHOOSE_BEHAVIOR;
 	warning("----------------------> Resetting AI");
 
diff --git a/engines/scumm/he/moonbase/ai_main.h b/engines/scumm/he/moonbase/ai_main.h
index 4937ece..7b5ad3c 100644
--- a/engines/scumm/he/moonbase/ai_main.h
+++ b/engines/scumm/he/moonbase/ai_main.h
@@ -86,7 +86,7 @@ enum {
 
 static int energyHogType = 0;
 
-void resetAI();
+void resetAI(ScummEngine_v90he *vm);
 void cleanUpAI();
 void setAIType(const int paramCount, const int *params);
 int masterControlProgram(const int paramCount, const int *params);






More information about the Scummvm-git-logs mailing list