[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.482,2.483 logic_he.cpp,2.6,2.7 logic_he.h,2.4,2.5 scumm.h,1.623,1.624 vars.cpp,1.135,1.136

Eugene Sandulenko sev at users.sourceforge.net
Wed May 11 14:38:43 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4521

Modified Files:
	intern.h logic_he.cpp logic_he.h scumm.h vars.cpp 
Log Message:
Implement now spotted Logic opcode in funshops. Now need to find a place
where another one gets called.


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.482
retrieving revision 2.483
diff -u -d -r2.482 -r2.483
--- intern.h	10 May 2005 22:56:07 -0000	2.482
+++ intern.h	11 May 2005 21:34:50 -0000	2.483
@@ -954,6 +954,7 @@
 	byte VAR_WINDOWS_VERSION;
 	byte VAR_CURRENT_CHARSET;
 	byte VAR_U32_VERSION;
+	byte VAR_U32_ARRAY_UNK;
 	byte VAR_WIZ_TCOLOR;
 };
 
@@ -1008,9 +1009,9 @@
 struct SpriteInfo;
 struct SpriteGroup;
 
-class LogicHE;
-
 class ScummEngine_v90he : public ScummEngine_v80he {
+	friend class LogicHE;
+
 protected:
 	typedef void (ScummEngine_v90he::*OpcodeProcV90he)();
 	struct OpcodeEntryV90he {

Index: logic_he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/logic_he.cpp,v
retrieving revision 2.6
retrieving revision 2.7
diff -u -d -r2.6 -r2.7
--- logic_he.cpp	11 May 2005 10:09:06 -0000	2.6
+++ logic_he.cpp	11 May 2005 21:35:04 -0000	2.7
@@ -26,7 +26,7 @@
 
 namespace Scumm {
 
-LogicHE::LogicHE(ScummEngine *vm) : _vm(vm) {
+LogicHE::LogicHE(ScummEngine_v90he *vm) : _vm(vm) {
 	// Originally it used 0x930 and stored both floats and doubles inside
 	_userData = (float *)calloc(550, sizeof(float));
 	_userDataD = (double *)calloc(30, sizeof(double));
@@ -41,8 +41,14 @@
 	return 1;
 }
 
-void LogicHE::processKeyStroke(int keyPressed) {
-	// TODO
+int LogicHE::getFromArray(int arg0, int idx2, int idx1) {
+	_vm->VAR(_vm->VAR_U32_ARRAY_UNK) = arg0;
+	return _vm->readArray(116, idx2, idx1);
+}
+
+void LogicHE::putInArray(int arg0, int idx2, int idx1, int val) {
+	_vm->VAR(_vm->VAR_U32_ARRAY_UNK) = arg0;
+	_vm->writeArray(116, idx2, idx1, val);
 }
 
 int32 LogicHE::dispatch(int op, int numArgs, int32 *args) {
@@ -380,9 +386,42 @@
 }
 
 void LogicHEfunshop::op_1004(int32 *args) {
+	error("STUB: LogicHE::dispatch(1004, 2, %d, %d). Please tell when it happened", args[0], args[1]);
 }
 
 void LogicHEfunshop::op_1005(int32 *args) {
+	double data[8];
+	double args1, args2;
+	double temp;
+
+	for (int i = 520; i <= 526; i += 2) {
+		data[i - 520] = getFromArray(args[0], 0, i - 1);
+		data[i - 520 + 1] = getFromArray(args[0], 0, i);
+	}
+
+	args1 = args[1] * 0.01 + 1;
+	args2 = args[2] * 0.01 + 1;
+
+	for (int i = 0; i < 4; i++) {
+		data[2 * i] *= args1;
+		data[2 * i + 1] *= args2;
+	}
+	
+	for (int i = 520; i <= 526; i += 2) {
+		if (floor(data[i - 520]) + 0.5 > data[i - 520]) {
+			temp = ceil(data[i - 520]);
+		} else {
+			temp = floor(data[i - 520]);
+		}
+		putInArray(args[0], 0, i - 1, (int32)temp);
+
+		if (floor(data[i - 520 + 1]) + 0.5 > data[i - 520 + 1]) {
+			temp = ceil(data[i - 520 + 1]);
+		} else {
+			temp = floor(data[i - 520 + 1]);
+		}
+		putInArray(args[0], 0, i, (int32)temp);
+	}
 }
 
 int LogicHEfunshop::checkShape(int arg_0, int arg_4, int arg_8, int arg_C, int arg_10, int arg_14, int arg_18, int arg_1C, int arg_20, int arg_24) {

Index: logic_he.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/logic_he.h,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -d -r2.4 -r2.5
--- logic_he.h	11 May 2005 10:09:06 -0000	2.4
+++ logic_he.h	11 May 2005 21:35:10 -0000	2.5
@@ -29,18 +29,20 @@
 public:
 	float *_userData;
 	double *_userDataD;
-	ScummEngine *_vm;
+	ScummEngine_v90he *_vm;
 
-	LogicHE(ScummEngine *vm);
+	LogicHE(ScummEngine_v90he *vm);
 	virtual ~LogicHE();
 
 	void writeScummVar(int var, int32 value) { _vm->writeVar(var, value); }
+	int getFromArray(int arg0, int idx2, int idx1);
+	void putInArray(int arg0, int idx2, int idx1, int val);
 
 	void beforeBootScript(void) {};
 	void initOnce() {};
 	void startOfFrame() {};
 	void endOfFrame() {};
-	void processKeyStroke(int keyPressed);
+	void processKeyStroke(int keyPressed) {};
 
 	virtual int versionID();
 	virtual int32 dispatch(int op, int numArgs, int32 *args);
@@ -48,7 +50,7 @@
 
 class LogicHErace : public LogicHE {
 public:
-	LogicHErace(ScummEngine *vm) : LogicHE(vm) {}
+	LogicHErace(ScummEngine_v90he *vm) : LogicHE(vm) {}
 
 	int versionID();
 	int32 dispatch(int op, int numArgs, int32 *args);
@@ -74,7 +76,7 @@
 
 class LogicHEfunshop : public LogicHE {
 public:
-	LogicHEfunshop(ScummEngine *vm) : LogicHE(vm) {}
+	LogicHEfunshop(ScummEngine_v90he *vm) : LogicHE(vm) {}
 
 	int versionID();
 	int32 dispatch(int op, int numArgs, int32 *args);

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.623
retrieving revision 1.624
diff -u -d -r1.623 -r1.624
--- scumm.h	10 May 2005 23:17:34 -0000	1.623
+++ scumm.h	11 May 2005 21:35:11 -0000	1.624
@@ -364,7 +364,6 @@
 	friend class Insane;
 	friend class CharsetRenderer;
 	friend class ResourceManager;
-	friend class LogicHE;
 	
 	void errorString(const char *buf_input, char *buf_output);
 public:

Index: vars.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/vars.cpp,v
retrieving revision 1.135
retrieving revision 1.136
diff -u -d -r1.135 -r1.136
--- vars.cpp	10 May 2005 22:56:14 -0000	1.135
+++ vars.cpp	11 May 2005 21:35:19 -0000	1.136
@@ -292,6 +292,7 @@
 		VAR_NUM_SPRITE_GROUPS = 105;
 		VAR_NUM_SPRITES = 106;
 		VAR_U32_VERSION = 107;
+		VAR_U32_ARRAY_UNK = 116;
 		VAR_WIZ_TCOLOR = 117;
 	}
 	if (_heversion >= 98) {
@@ -580,6 +581,7 @@
 
 	if (_heversion >= 98) {
 		VAR(VAR_U32_VERSION) = _logicHE->versionID();
+		VAR(VAR_U32_ARRAY_UNK) = 0;
 	}
 }
 





More information about the Scummvm-git-logs mailing list