[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.402,2.403 object.cpp,1.210,1.211 script_v100he.cpp,2.99,2.100 script_v72he.cpp,2.223,2.224 script_v7he.cpp,2.135,2.136 script_v80he.cpp,2.80,2.81 script_v90he.cpp,2.194,2.195
kirben
kirben at users.sourceforge.net
Mon Mar 28 02:03:21 CEST 2005
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11987/scumm
Modified Files:
intern.h object.cpp script_v100he.cpp script_v72he.cpp
script_v7he.cpp script_v80he.cpp script_v90he.cpp
Log Message:
findObject in HE72+ only checks object bounds
findObject in He70/71 only needs additional polygon check
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.402
retrieving revision 2.403
diff -u -d -r2.402 -r2.403
--- intern.h 23 Mar 2005 00:16:49 -0000 2.402
+++ intern.h 28 Mar 2005 10:02:21 -0000 2.403
@@ -666,8 +666,6 @@
virtual int setupStringArray(int size);
void appendSubstring(int dst, int src, int len2, int len);
- int findObject(int x, int y, int num, int *args);
-
virtual void setCursorFromImg(uint img, uint room, uint imgindex);
/* HE version 70 script opcodes */
@@ -675,7 +673,6 @@
void o70_pickupObject();
void o70_getActorRoom();
void o70_resourceRoutines();
- void o70_findObject();
void o70_quitPauseRestart();
void o70_kernelSetFunctions();
void o70_copyString();
@@ -757,6 +754,7 @@
byte *heFindResourceData(uint32 tag, byte *ptr);
byte *heFindResource(uint32 tag, byte *ptr);
byte *findWrappedBlock(uint32 tag, byte *ptr, int state, bool flagError);
+ int findObject(int x, int y, int num, int *args);
/* HE version 72 script opcodes */
void o72_pushDWord();
@@ -779,6 +777,7 @@
void o72_roomOps();
void o72_actorOps();
void o72_verbOps();
+ void o72_findObject();
void o72_arrayOps();
void o72_talkActor();
void o72_talkEgo();
Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.210
retrieving revision 1.211
diff -u -d -r1.210 -r1.211
--- object.cpp 25 Mar 2005 00:56:02 -0000 1.210
+++ object.cpp 28 Mar 2005 10:02:21 -0000 1.211
@@ -24,6 +24,7 @@
#include "scumm/scumm.h"
#include "scumm/actor.h"
#include "scumm/bomp.h"
+#include "scumm/intern.h"
#include "scumm/object.h"
#include "scumm/resource.h"
#include "scumm/usage_bits.h"
@@ -358,6 +359,10 @@
a = _objs[b].parentstate;
b = _objs[b].parent;
if (b == 0) {
+ if (_heversion >= 70) {
+ if (((ScummEngine_v70he *)this)->_wiz.polygonHit(_objs[i].obj_nr, x, y))
+ return _objs[i].obj_nr;
+ }
if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
_objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y)
return _objs[i].obj_nr;
Index: script_v100he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v100he.cpp,v
retrieving revision 2.99
retrieving revision 2.100
diff -u -d -r2.99 -r2.100
--- script_v100he.cpp 26 Mar 2005 06:00:58 -0000 2.99
+++ script_v100he.cpp 28 Mar 2005 10:02:21 -0000 2.100
@@ -259,7 +259,7 @@
OPCODE(o90_findAllObjectsWithClassOf),
OPCODE(o6_invalid),
OPCODE(o6_findInventory),
- OPCODE(o70_findObject),
+ OPCODE(o72_findObject),
/* B0 */
OPCODE(o72_findObjectWithClassOf),
OPCODE(o70_polygonHit),
Index: script_v72he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v72he.cpp,v
retrieving revision 2.223
retrieving revision 2.224
diff -u -d -r2.223 -r2.224
--- script_v72he.cpp 23 Mar 2005 00:16:50 -0000 2.223
+++ script_v72he.cpp 28 Mar 2005 10:02:21 -0000 2.224
@@ -244,7 +244,7 @@
OPCODE(o72_verbOps),
OPCODE(o6_getActorFromXY),
/* A0 */
- OPCODE(o70_findObject),
+ OPCODE(o72_findObject),
OPCODE(o6_pseudoRoom),
OPCODE(o6_getActorElevation),
OPCODE(o6_getVerbEntrypoint),
@@ -654,6 +654,44 @@
}
}
+int ScummEngine_v72he::findObject(int x, int y, int num, int *args) {
+ int b, cls, i, result;
+
+ for (i = 1; i < _numLocalObjects; i++) {
+ result = 0;
+ if ((_objs[i].obj_nr < 1) || getClass(_objs[i].obj_nr, kObjectClassUntouchable))
+ continue;
+
+ // Check polygon bounds
+ if (_wiz.polygonDefined(_objs[i].obj_nr)) {
+ if (_wiz.polygonHit(_objs[i].obj_nr, x, y))
+ result = _objs[i].obj_nr;
+ else if (VAR_POLYGONS_ONLY != 0xFF && VAR(VAR_POLYGONS_ONLY))
+ continue;
+ }
+
+ if (!result) {
+ // Check object bounds
+ if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
+ _objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y)
+ result = _objs[i].obj_nr;
+ }
+
+ if (result) {
+ if (!num)
+ return result;
+
+ // Check object class
+ cls = args[0];
+ b = getClass(i, cls);
+ if ((cls & 0x80 && b) || (!(cls & 0x80) && !b))
+ return result;
+ }
+ }
+
+ return 0;
+}
+
void ScummEngine_v72he::o72_pushDWord() {
int a;
if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
@@ -1334,6 +1372,13 @@
}
}
+void ScummEngine_v72he::o72_findObject() {
+ int y = pop();
+ int x = pop();
+ int r = findObject(x, y, 0, 0);
+ push(r);
+}
+
void ScummEngine_v72he::o72_arrayOps() {
byte subOp = fetchScriptByte();
int array = fetchScriptWord();
Index: script_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v7he.cpp,v
retrieving revision 2.135
retrieving revision 2.136
diff -u -d -r2.135 -r2.136
--- script_v7he.cpp 23 Mar 2005 00:16:51 -0000 2.135
+++ script_v7he.cpp 28 Mar 2005 10:02:21 -0000 2.136
@@ -242,7 +242,7 @@
OPCODE(o6_verbOps),
OPCODE(o6_getActorFromXY),
/* A0 */
- OPCODE(o70_findObject),
+ OPCODE(o6_findObject),
OPCODE(o6_pseudoRoom),
OPCODE(o6_getActorElevation),
OPCODE(o6_getVerbEntrypoint),
@@ -425,62 +425,6 @@
writeArray(0, 0, dstOffs + i, 0);
}
-int ScummEngine_v70he::findObject(int x, int y, int num, int *args) {
- int i, b, result;
- int cond, cls, tmp;
- byte a;
- const int mask = 0xF;
-
- for (i = 1; i < _numLocalObjects; i++) {
- result = 0;
- if ((_objs[i].obj_nr < 1) || getClass(_objs[i].obj_nr, kObjectClassUntouchable))
- continue;
-
- // Check polygon bounds
- if (_wiz.polygonDefined(_objs[i].obj_nr)) {
- if (_wiz.polygonHit(_objs[i].obj_nr, x, y) != 0)
- result = _objs[i].obj_nr;
- else if (VAR_POLYGONS_ONLY != 0xFF && VAR(VAR_POLYGONS_ONLY))
- continue;
- }
-
- if (!result) {
- // Check object bounds
- b = i;
- do {
- a = _objs[b].parentstate;
- b = _objs[b].parent;
- if (b == 0) {
- if (_objs[i].x_pos <= x && _objs[i].width + _objs[i].x_pos > x &&
- _objs[i].y_pos <= y && _objs[i].height + _objs[i].y_pos > y)
- result = _objs[i].obj_nr;
- break;
- }
- } while ((_objs[b].state & mask) == a);
- }
-
- if (result) {
- if (!num)
- return result;
-
- // Check object class
- cond = 1;
- tmp = num;
- while (--tmp >= 0) {
- cls = args[tmp];
- b = getClass(i, cls);
- if ((cls & 0x80 && !b) || (!(cls & 0x80) && b))
- cond = 0;
- }
-
- if (cond)
- return result;
- }
- }
-
- return 0;
-}
-
void ScummEngine_v70he::o70_startSound() {
byte subOp = fetchScriptByte();
@@ -697,13 +641,6 @@
}
}
-void ScummEngine_v70he::o70_findObject() {
- int y = pop();
- int x = pop();
- int r = findObject(x, y, 0, 0);
- push(r);
-}
-
void ScummEngine_v70he::o70_quitPauseRestart() {
byte subOp = fetchScriptByte();
int par1;
Index: script_v80he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v80he.cpp,v
retrieving revision 2.80
retrieving revision 2.81
diff -u -d -r2.80 -r2.81
--- script_v80he.cpp 17 Mar 2005 11:06:43 -0000 2.80
+++ script_v80he.cpp 28 Mar 2005 10:02:21 -0000 2.81
@@ -241,7 +241,7 @@
OPCODE(o6_invalid),
OPCODE(o6_getActorFromXY),
/* A0 */
- OPCODE(o70_findObject),
+ OPCODE(o72_findObject),
OPCODE(o6_pseudoRoom),
OPCODE(o6_getActorElevation),
OPCODE(o6_getVerbEntrypoint),
Index: script_v90he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v90he.cpp,v
retrieving revision 2.194
retrieving revision 2.195
diff -u -d -r2.194 -r2.195
--- script_v90he.cpp 26 Mar 2005 06:00:58 -0000 2.194
+++ script_v90he.cpp 28 Mar 2005 10:02:22 -0000 2.195
@@ -241,7 +241,7 @@
OPCODE(o90_paletteOps),
OPCODE(o6_getActorFromXY),
/* A0 */
- OPCODE(o70_findObject),
+ OPCODE(o72_findObject),
OPCODE(o6_pseudoRoom),
OPCODE(o6_getActorElevation),
OPCODE(o6_getVerbEntrypoint),
More information about the Scummvm-git-logs
mailing list