aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Brown2002-04-19 16:26:44 +0000
committerJames Brown2002-04-19 16:26:44 +0000
commit7f4f0fcb69736c1814fe423dca06ddafc829edad (patch)
treeaf01aee33059c1424bf6490a0aaabf5324fa5dd3
parent780aecab878aaf96944bf8591dfd4da87b442a63 (diff)
downloadscummvm-rg350-7f4f0fcb69736c1814fe423dca06ddafc829edad.tar.gz
scummvm-rg350-7f4f0fcb69736c1814fe423dca06ddafc829edad.tar.bz2
scummvm-rg350-7f4f0fcb69736c1814fe423dca06ddafc829edad.zip
Fix various Zak256 crashes. Ticket machine works, taking Blue Crystal crashes.
svn-id: r4013
-rw-r--r--object.cpp7
-rw-r--r--script_v1.cpp21
2 files changed, 20 insertions, 8 deletions
diff --git a/object.cpp b/object.cpp
index 9339b74001..48a19c820b 100644
--- a/object.cpp
+++ b/object.cpp
@@ -822,10 +822,9 @@ void Scumm::findObjectInRoom(FindObjectInRoom * fo, byte findWhat, uint id,
}
fo->roomptr = roomptr = getResourceAddress(rtRoom, room);
- if (!roomptr) { // FIXME: ZAK256 AIRPORT WORKAROUND (buying book from devotee)
- warning("findObjectInRoom: failed getting roomptr to %d", room);
- return;
- }
+ if (!roomptr)
+ error("findObjectInRoom: failed getting roomptr to %d", room);
+
roomhdr = (RoomHeader *)findResourceData(MKID('RMHD'), roomptr);
if (_features & GF_AFTER_V7)
diff --git a/script_v1.cpp b/script_v1.cpp
index b113eab93c..636d3cf77a 100644
--- a/script_v1.cpp
+++ b/script_v1.cpp
@@ -825,12 +825,19 @@ void Scumm::o5_actorSetClass()
newClass = getVarOrDirectWord(0x80);
if (newClass == 0) {
_classData[act] = 0;
+
if( _features & GF_SMALL_HEADER)
+
{
+
Actor *a;
+
a=derefActor(act);
+
a->forceClip=0;
+
}
+
continue;
}
@@ -904,7 +911,7 @@ void Scumm::o5_cursorCommand()
{
int i, j, k;
int16 table[16];
-
+ byte origop = _opcode;
switch ((_opcode = fetchScriptByte()) & 0x1F) {
case 1: /* cursor show */
_cursorState = 1;
@@ -922,9 +929,6 @@ void Scumm::o5_cursorCommand()
break;
case 5: /* cursor soft on */
_cursorState++;
- if (_cursorState > 1) {
- error("Cursor state greater than 1 in script");
- }
verbMouseOver(0);
break;
case 6: /* cursor soft off */
@@ -1082,10 +1086,14 @@ void Scumm::o5_drawObject()
od = &_objs[idx];
xpos = ypos = 255;
if (temp != 0xFF) {
+
od->x_pos = temp<<3;
+
od->y_pos = temp2<<3;
}
+
+
addObjectToDrawQue(idx);
x = od->x_pos;
@@ -1690,6 +1698,10 @@ void Scumm::o5_panCameraTo()
void Scumm::o5_pickupObject()
{
int obj, room;
+ if (_features & GF_OLD256) {
+ o5_drawObject();
+ return;
+ }
obj = getVarOrDirectWord(0x80);
room = getVarOrDirectByte(0x40);
@@ -1964,6 +1976,7 @@ void Scumm::o5_roomOps()
e = getVarOrDirectByte(0x40);
setScaleItem(e - 1, b, a, d, c);
case 8: /* room scale? */
+
a = getVarOrDirectByte(0x80);
b = getVarOrDirectByte(0x40);
c = getVarOrDirectByte(0x20);