[Scummvm-cvs-logs] CVS: scummvm/scumm object.cpp,1.251,1.252 resource.cpp,1.335,1.336 room.cpp,1.24,1.25 scumm.cpp,1.597,1.598 scumm.h,1.645,1.646
kirben
kirben at users.sourceforge.net
Thu Oct 13 19:14:49 CEST 2005
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/saga animation.h,1.38,1.39 game.cpp,1.115,1.116 gfx.cpp,1.68,1.69 ite_introproc.cpp,1.69,1.70 puzzle.cpp,1.16,1.17 saga.cpp,1.143,1.144 saga.h,1.131,1.132
- Next message: [Scummvm-cvs-logs] CVS: scummvm/common util.cpp,1.59,1.60 util.h,1.55,1.56
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2159/scumm
Modified Files:
object.cpp resource.cpp room.cpp scumm.cpp scumm.h
Log Message:
HE games store and restore locked FlObjects between rooms.
Fixes input issue in thinker1.
Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.251
retrieving revision 1.252
diff -u -d -r1.251 -r1.252
--- object.cpp 13 Oct 2005 15:02:21 -0000 1.251
+++ object.cpp 14 Oct 2005 02:13:33 -0000 1.252
@@ -507,7 +507,8 @@
_objs[i].obj_nr = 0;
}
} else {
- // FIXME: Locking/FlObjects stuff?
+ storeFlObject(-1);
+
for (i = 0; i < _numLocalObjects; i++) {
if (_objs[i].obj_nr < 1) // Optimise codepath
continue;
@@ -521,12 +522,41 @@
res.nukeResource(rtFlObject, _objs[i].fl_object_index);
_objs[i].obj_nr = 0;
_objs[i].fl_object_index = 0;
+ } else if (_heversion >= 70) {
+ storeFlObject(i);
+ _objs[i].obj_nr = 0;
+ _objs[i].fl_object_index = 0;
}
}
}
}
}
+void ScummEngine::storeFlObject(int slot) {
+ if (slot == -1) {
+ _numStoredFlObjects = 0;
+ } else {
+ memcpy(&_storedFlObjects[_numStoredFlObjects], &_objs[slot], sizeof(_objs[slot]));
+ _numStoredFlObjects++;
+ if (_numStoredFlObjects > 100)
+ error("Too many flobjects saved on room transition.");
+ }
+}
+
+void ScummEngine::restoreFlObjects() {
+ if (!_numStoredFlObjects)
+ return;
+
+ int i, slot;
+
+ for (i = 0; i < _numStoredFlObjects; i++) {
+ slot = findLocalObjectSlot();
+ memcpy(&_objs[slot], &_storedFlObjects[i], sizeof(_objs[slot]));
+ }
+
+ _numStoredFlObjects = 0;
+}
+
void ScummEngine::loadRoomObjects() {
int i, j;
ObjectData *od;
@@ -1675,6 +1705,12 @@
if (whereIsObject(object) != WIO_NOT_FOUND)
return;
+ int i;
+ for (i = 0; i < _numStoredFlObjects; i++) {
+ if (_storedFlObjects[i].obj_nr == object)
+ return;
+ }
+
// Locate the object in the room resource
findObjectInRoom(&foir, foImageHeader | foCodeHeader, object, room);
Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.335
retrieving revision 1.336
diff -u -d -r1.335 -r1.336
--- resource.cpp 17 Sep 2005 00:31:51 -0000 1.335
+++ resource.cpp 14 Oct 2005 02:13:33 -0000 1.336
@@ -1251,8 +1251,10 @@
_roomVars = (int32 *)calloc(_numRoomVariables, sizeof(int32));
_scummVars = (int32 *)calloc(_numVariables, sizeof(int32));
_bitVars = (byte *)calloc(_numBitVariables >> 3, 1);
- if (_heversion >= 60)
+ if (_heversion >= 60) {
_arraySlot = (byte *)calloc(_numArray, 1);
+ _storedFlObjects = (ObjectData *)calloc(100, sizeof(ObjectData));
+ }
allocResTypeData(rtCostume, (_features & GF_NEW_COSTUMES) ? MKID('AKOS') : MKID('COST'),
_numCostumes, "costume", 1);
Index: room.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/room.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- room.cpp 24 Sep 2005 10:15:17 -0000 1.24
+++ room.cpp 14 Oct 2005 02:13:33 -0000 1.25
@@ -127,6 +127,7 @@
if (_currentRoom == 0) {
_ENCD_offs = _EXCD_offs = 0;
_numObjectsInRoom = 0;
+ restoreFlObjects();
return;
}
@@ -136,7 +137,7 @@
initBGBuffers(_roomHeight);
loadRoomObjects();
-
+ restoreFlObjects();
if (VAR_ROOM_WIDTH != 0xFF && VAR_ROOM_HEIGHT != 0xFF) {
VAR(VAR_ROOM_WIDTH) = _roomWidth;
Index: scumm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.cpp,v
retrieving revision 1.597
retrieving revision 1.598
diff -u -d -r1.597 -r1.598
--- scumm.cpp 12 Oct 2005 22:52:47 -0000 1.597
+++ scumm.cpp 14 Oct 2005 02:13:33 -0000 1.598
@@ -946,6 +946,7 @@
_musicEngine = NULL;
_verbs = NULL;
_objs = NULL;
+ _storedFlObjects = NULL;
_debugFlags = 0;
_sound = NULL;
memset(&vm, 0, sizeof(vm));
@@ -970,6 +971,7 @@
_numRoomVariables = 0;
_numLocalObjects = 0;
_numGlobalObjects = 0;
+ _numStoredFlObjects = 0;
_numArray = 0;
_numVerbs = 0;
_numFlObject = 0;
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.645
retrieving revision 1.646
diff -u -d -r1.645 -r1.646
--- scumm.h 2 Oct 2005 01:26:53 -0000 1.645
+++ scumm.h 14 Oct 2005 02:13:33 -0000 1.646
@@ -376,6 +376,7 @@
VerbSlot *_verbs;
ObjectData *_objs;
+ ObjectData *_storedFlObjects;
ScummDebugger *_debugger;
// Core variables
@@ -512,6 +513,7 @@
int _numNewNames, _numGlobalScripts;
int _numRoomVariables;
int _numPalettes, _numSprites, _numTalkies, _numUnk;
+ int _numStoredFlObjects;
int _HEHeapSize;
public:
int _numLocalScripts, _numImages, _numRooms, _numScripts, _numSounds; // Used by HE games
@@ -732,6 +734,8 @@
virtual void loadRoomSubBlocks();
virtual void initRoomSubBlocks();
void clearRoomObjects();
+ void storeFlObject(int slot);
+ void restoreFlObjects();
virtual void loadRoomObjects();
virtual void readArrayFromIndexFile();
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/saga animation.h,1.38,1.39 game.cpp,1.115,1.116 gfx.cpp,1.68,1.69 ite_introproc.cpp,1.69,1.70 puzzle.cpp,1.16,1.17 saga.cpp,1.143,1.144 saga.h,1.131,1.132
- Next message: [Scummvm-cvs-logs] CVS: scummvm/common util.cpp,1.59,1.60 util.h,1.55,1.56
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list