[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