aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Hamm2002-03-05 20:13:47 +0000
committerVincent Hamm2002-03-05 20:13:47 +0000
commit6387020fd9a9c41654d37cb8feca464fd7d5fec1 (patch)
tree88f9c26db4fac514e7d8bb60c6fcc10c7d1bd2dd
parent5eb73a9af4bd3c78662cec1a95b11b7137e9a568 (diff)
downloadscummvm-rg350-6387020fd9a9c41654d37cb8feca464fd7d5fec1.tar.gz
scummvm-rg350-6387020fd9a9c41654d37cb8feca464fd7d5fec1.tar.bz2
scummvm-rg350-6387020fd9a9c41654d37cb8feca464fd7d5fec1.zip
Fixed struct RoomHeader for v7 implementation
svn-id: r3650
-rw-r--r--actor.cpp7
-rw-r--r--object.cpp14
-rw-r--r--script_v2.cpp14
-rw-r--r--scumm.h16
-rw-r--r--scummvm.cpp11
5 files changed, 41 insertions, 21 deletions
diff --git a/actor.cpp b/actor.cpp
index 4fafb39135..d7baa4b883 100644
--- a/actor.cpp
+++ b/actor.cpp
@@ -404,11 +404,10 @@ void Scumm::fixActorDirection(Actor *a, int direction) {
vald = a->cost.frame[i];
if (vald==0xFFFF)
continue;
-#if !defined(FULL_THROTTLE)
- cost_decodeData(a, vald, mask);
-#else
+ if(_features & GF_AFTER_V7)
akos_decodeData(a, vald, mask);
-#endif
+ else
+ cost_decodeData(a, vald, mask);
}
a->needRedraw = true;
diff --git a/object.cpp b/object.cpp
index 78ad2378a2..efae0982f8 100644
--- a/object.cpp
+++ b/object.cpp
@@ -354,7 +354,10 @@ void Scumm::loadRoomObjects() {
room = getResourceAddress(rtRoom, _roomResource);
roomhdr = (RoomHeader*)findResourceData(MKID('RMHD'), room);
- _numObjectsInRoom = READ_LE_UINT16(&roomhdr->numObjects);
+ if(_features & GF_AFTER_V7)
+ _numObjectsInRoom = READ_LE_UINT16(&(roomhdr->v7.numObjects));
+ else
+ _numObjectsInRoom = READ_LE_UINT16(&(roomhdr->old.numObjects));
if (_numObjectsInRoom == 0)
return;
@@ -420,7 +423,7 @@ void Scumm::loadRoomObjectsSmall() {
room = getResourceAddress(rtRoom, _roomResource);
roomhdr = (RoomHeader*)findResourceData(MKID('RMHD'), room);
- _numObjectsInRoom = READ_LE_UINT16(&roomhdr->numObjects);
+ _numObjectsInRoom = READ_LE_UINT16(&(roomhdr->old.numObjects));
if (_numObjectsInRoom == 0)
return;
@@ -747,7 +750,12 @@ void Scumm::findObjectInRoom(FindObjectInRoom *fo, byte findWhat, uint id, uint
fo->roomptr = roomptr = getResourceAddress(rtRoom, room);
roomhdr = (RoomHeader*)findResourceData(MKID('RMHD'), roomptr);
- numobj = READ_LE_UINT16(&roomhdr->numObjects);
+
+ if(_features & GF_AFTER_V7)
+ numobj = READ_LE_UINT16(&(roomhdr->v7.numObjects));
+ else
+ numobj = READ_LE_UINT16(&(roomhdr->old.numObjects));
+
if (numobj==0)
error("findObjectInRoom: No object found in room %d", room);
if (numobj > _numLocalObjects)
diff --git a/script_v2.cpp b/script_v2.cpp
index e4f3cec9f7..25ddbf5df2 100644
--- a/script_v2.cpp
+++ b/script_v2.cpp
@@ -1179,13 +1179,13 @@ void Scumm::o6_stopObjectScript() {
}
void Scumm::o6_panCameraTo() {
-#if defined(FULL_THROTTLE)
- int y = pop();
- int x = pop();
- panCameraTo(x,y);
-#else
- panCameraTo(pop(), 0);
-#endif
+ if(_features & GF_AFTER_V7) {
+ int y = pop();
+ int x = pop();
+ panCameraTo(x,y);
+ } else {
+ panCameraTo(pop(), 0);
+ }
}
void Scumm::o6_actorFollowCamera() {
diff --git a/scumm.h b/scumm.h
index 13185a5a6a..2ae01f80ea 100644
--- a/scumm.h
+++ b/scumm.h
@@ -75,11 +75,17 @@ struct ResHdr {
struct RoomHeader {
-#ifdef FULL_THROTTLE
- uint32 version;
-#endif
- uint16 width,height;
- uint16 numObjects;
+ union {
+ struct {
+ uint32 version;
+ uint16 width,height;
+ uint16 numObjects;
+ } v7;
+ struct {
+ uint16 width,height;
+ uint16 numObjects;
+ } old;
+ };
} GCC_PACK;
struct BompHeader {
diff --git a/scummvm.cpp b/scummvm.cpp
index 2c4f5dca3d..4dabc1523d 100644
--- a/scummvm.cpp
+++ b/scummvm.cpp
@@ -681,8 +681,15 @@ void Scumm::initRoomSubBlocks() {
roomptr = getResourceAddress(rtRoom, _roomResource);
rmhd = (RoomHeader*)findResourceData(MKID('RMHD'), roomptr);
- _scrWidth = READ_LE_UINT16(&rmhd->width);
- _scrHeight = READ_LE_UINT16(&rmhd->height);
+
+ if(_features & GF_AFTER_V7) {
+ _scrWidth = READ_LE_UINT16(&(rmhd->v7.width));
+ _scrHeight = READ_LE_UINT16(&(rmhd->v7.height));
+ } else {
+ _scrWidth = READ_LE_UINT16(&(rmhd->old.width));
+ _scrHeight = READ_LE_UINT16(&(rmhd->old.height));
+ }
+
if( _features & GF_SMALL_HEADER)
_IM00_offs = findResourceData(MKID('IM00'), roomptr) - roomptr;