[Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.39,1.40 intern.h,2.9,2.10 script_v8.cpp,2.10,2.11 scumm.h,1.91,1.92 string.cpp,1.59,1.60 vars.cpp,1.8,1.9
Max Horn
fingolfin at users.sourceforge.net
Mon Dec 23 10:31:02 CET 2002
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.8,2.9 resource.cpp,1.34,1.35 script_v8.cpp,2.9,2.10
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.10,2.11 script.cpp,1.19,1.20 script_v8.cpp,2.11,2.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv24284
Modified Files:
actor.cpp intern.h script_v8.cpp scumm.h string.cpp vars.cpp
Log Message:
more V8 work
Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- actor.cpp 23 Dec 2002 15:46:53 -0000 1.39
+++ actor.cpp 23 Dec 2002 18:30:11 -0000 1.40
@@ -1214,8 +1214,7 @@
* Note: walk scripts aren't required to make the game
* work as usual
*/
-#if 1
- printf("ignoreTurns = %d\n", ignoreTurns);
+#if 0
if (walk_script != 0) {
int16 args[16];
args[0] = number;
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.9
retrieving revision 2.10
diff -u -d -r2.9 -r2.10
--- intern.h 23 Dec 2002 17:21:09 -0000 2.9
+++ intern.h 23 Dec 2002 18:30:11 -0000 2.10
@@ -400,6 +400,11 @@
virtual uint fetchScriptWord();
virtual int fetchScriptWordSigned();
+
+ virtual int readVar(uint var);
+ virtual void writeVar(uint var, int value);
+
+ void decodeParseString(int m, int n);
/* Version 8 script opcodes */
void o8_unknown();
Index: script_v8.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v8.cpp,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -d -r2.10 -r2.11
--- script_v8.cpp 23 Dec 2002 17:21:09 -0000 2.10
+++ script_v8.cpp 23 Dec 2002 18:30:11 -0000 2.11
@@ -22,6 +22,7 @@
#include "stdafx.h"
#include "scumm.h"
#include "intern.h"
+#include "sound.h"
/*
* NO, we do NOT support CMI yet :-) This file is mostly a placeholder and a place
@@ -390,6 +391,135 @@
return (int32)fetchScriptWord();
}
+int Scumm_v8::readVar(uint var)
+{
+ debug(9, "readvar(%d)", var);
+
+ if (!(var & 0xF0000000)) {
+ checkRange(_numVariables - 1, 0, var, "Variable %d out of range(r)");
+ return _vars[var];
+ }
+
+ if (var & 0x80000000) {
+ var &= 0x7FFFFFFF;
+ checkRange(_numBitVariables - 1, 0, var, "Bit variable %d out of range(r)");
+ return (_bitVars[var >> 3] & (1 << (var & 7))) ? 1 : 0;
+ }
+
+ if (var & 0x40000000) {
+ var &= 0xFFFFFFF;
+ checkRange(0x10, 0, var, "Local variable %d out of range(r)");
+ return vm.localvar[_currentScript][var];
+ }
+
+ error("Illegal varbits (r)");
+ return -1;
+}
+
+void Scumm_v8::writeVar(uint var, int value)
+{
+ debug(9, "writeVar(%d, %d)", var, value);
+
+ if (!(var & 0xF0000000)) {
+ checkRange(_numVariables - 1, 0, var, "Variable %d out of range(w)");
+
+ _vars[var] = value;
+
+ if ((_varwatch == (int)var) || (_varwatch == 0)) {
+ if (vm.slot[_currentScript].number < 100)
+ debug(1, "vars[%d] = %d (via script-%d)", var, value, vm.slot[_currentScript].number);
+ else
+ debug(1, "vars[%d] = %d (via room-%d-%d)", var, value, _currentRoom, vm.slot[_currentScript].number);
+ }
+ return;
+ }
+
+ if (var & 0x80000000) {
+ var &= 0x7FFFFFFF;
+ checkRange(_numBitVariables - 1, 0, var, "Bit variable %d out of range(w)");
+
+ if (value)
+ _bitVars[var >> 3] |= (1 << (var & 7));
+ else
+ _bitVars[var >> 3] &= ~(1 << (var & 7));
+ return;
+ }
+
+ if (var & 0x40000000) {
+ var &= 0xFFFFFFF;
+ checkRange(0x10, 0, var, "Local variable %d out of range(w)");
+ vm.localvar[_currentScript][var] = value;
+ return;
+ }
+
+ error("Illegal varbits (w)");
+}
+
+void Scumm_v8::decodeParseString(int m, int n)
+{
+ byte b;
+
+ b = fetchScriptByte();
+
+ switch (b) {
+ case 0xC8:
+ setStringVars(m);
+ if (n)
+ _actorToPrintStrFor = pop();
+ return;
+ case 0xC9:
+ _string[m].t_xpos = _string[m].xpos;
+ _string[m].t_ypos = _string[m].ypos;
+ _string[m].t_center = _string[m].center;
+ _string[m].t_overhead = _string[m].overhead;
+ _string[m].t_no_talk_anim = _string[m].no_talk_anim;
+ _string[m].t_right = _string[m].right;
+ _string[m].t_color = _string[m].color;
+ _string[m].t_charset = _string[m].charset;
+ return;
+ case 0xCA:
+ _string[m].ypos = pop();
+ _string[m].xpos = pop();
+ _string[m].overhead = false;
+ break;
+ case 0xCB:
+ _string[m].color = pop();
+ break;
+ case 0xCC:
+ _string[m].center = true;
+ _string[m].overhead = false;
+ break;
+ case 0xCD: // SO_PRINT_CHARSET Set print character set
+ // FIXME - TODO
+ break;
+ case 0xCE:
+ _string[m].center = false;
+ _string[m].overhead = false;
+ break;
+ case 0xCF:
+ _string[m].overhead = true;
+ _string[m].no_talk_anim = false;
+ break;
+ case 0xD0: // SO_PRINT_MUMBLE
+ error("decodeParseString: SO_PRINT_MUMBLE");
+ break;
+ case 0xD1:
+ // TODO - FIXME
+ _messagePtr = _scriptPointer;
+
+ byte buffer[1024];
+ _msgPtrToAdd = buffer;
+ _scriptPointer = _messagePtr = addMessageToStack(_messagePtr);
+ printf("Message(%d): '%s'\n", m, buffer);
+ break;
+ case 0xD2: // SO_PRINT_WRAP Set print wordwrap
+ error("decodeParseString: SO_PRINT_MUMBLE");
+ break;
+ default:
+ error("decodeParseString: default case");
+ }
+}
+
void Scumm_v8::o8_unknown()
{
warning("Unknown opcode '%x' at %x", _opcode, _scriptPointer - _scriptOrgPointer);
@@ -482,42 +612,90 @@
void Scumm_v8::o8_printLine()
{
+ decodeParseString(0, 0);
}
void Scumm_v8::o8_printCursor()
{
+ decodeParseString(1, 0);
}
void Scumm_v8::o8_printDebug()
{
+ decodeParseString(2, 0);
}
void Scumm_v8::o8_printSystem()
{
+ decodeParseString(3, 0);
}
void Scumm_v8::o8_cursorCommand()
{
// TODO
byte subOp = fetchScriptByte();
+ int a, i;
+ int16 args[16];
+
switch (subOp) {
case 0xDC: // SO_CURSOR_ON Turn cursor on
+ _cursor.state = 1;
+ verbMouseOver(0);
+ break;
case 0xDD: // SO_CURSOR_OFF Turn cursor off
+ _cursor.state = 0;
+ verbMouseOver(0);
+ break;
case 0xDE: // SO_CURSOR_SOFT_ON Turn soft cursor on
+ _cursor.state++;
+ if (_cursor.state > 1)
+ error("Cursor state greater than 1 in script");
+ verbMouseOver(0);
+ break;
case 0xDF: // SO_CURSOR_SOFT_OFF Turn soft cursor off
+ _cursor.state--;
+ verbMouseOver(0);
+ break;
case 0xE0: // SO_USERPUT_ON
+ _userPut = 1;
+ break;
case 0xE1: // SO_USERPUT_OFF
+ _userPut = 0;
+ break;
case 0xE2: // SO_USERPUT_SOFT_ON
+ _userPut++;
+ break;
case 0xE3: // SO_USERPUT_SOFT_OFF
+ _userPut--;
+ break;
case 0xE4: // SO_CURSOR_IMAGE Set cursor image
+ {
+ int room, obj = popRoomAndObj(&room);
+ setCursorImg(obj, room, 1);
+ }
+ break;
case 0xE5: // SO_CURSOR_HOTSPOT Set cursor hotspot
+ a = pop();
+ setCursorHotspot2(pop(), a);
+ break;
case 0xE6: // SO_CURSOR_TRANSPARENT Set cursor transparent color
+ makeCursorColorTransparent(pop());
+ break;
case 0xE7: // SO_CHARSET_SET
+ initCharset(pop());
+ break;
case 0xE8: // SO_CHARSET_COLOR
+ getStackList(args, sizeof(args) / sizeof(args[0]));
+ for (i = 0; i < 16; i++)
+ charset._colorMap[i] = _charsetData[_string[1].t_charset][i] = (unsigned char)args[i];
+ break;
case 0xE9: // SO_CURSOR_PUT
default:
error("o8_cursorCommand: default case %d", subOp);
}
+
+ _vars[VAR_CURSORSTATE] = _cursor.state;
+ _vars[VAR_USERPUT] = _userPut;
}
void Scumm_v8::o8_resourceRoutines()
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -d -r1.91 -r1.92
--- scumm.h 23 Dec 2002 00:23:36 -0000 1.91
+++ scumm.h 23 Dec 2002 18:30:11 -0000 1.92
@@ -484,8 +484,8 @@
void setResult(int result);
void push(int a);
int pop();
- int readVar(uint var);
- void writeVar(uint var, int value);
+ virtual int readVar(uint var);
+ virtual void writeVar(uint var, int value);
void runHook(int i);
bool isScriptInUse(int script);
int getStringLen(byte *ptr);
Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- string.cpp 23 Dec 2002 14:16:43 -0000 1.59
+++ string.cpp 23 Dec 2002 18:30:12 -0000 1.60
@@ -945,6 +945,10 @@
if (chr != 1 && chr != 2 && chr != 3 && chr != 8) {
ptr[num++] = *msg++; // and some commands are followed by parameters to the functions below
ptr[num++] = *msg++; // these are numbers of names, strings, verbs, variables, etc
+ if (_features & GF_AFTER_V8) {
+ ptr[num++] = *msg++;
+ ptr[num++] = *msg++;
+ }
}
}
}
@@ -961,20 +965,40 @@
chr = ptr[num++];
switch (chr) {
case 4:
- addIntToStack(READ_LE_UINT16(ptr + num));
- num += 2;
+ if (_features & GF_AFTER_V8) {
+ addIntToStack(READ_LE_UINT32(ptr + num));
+ num += 4;
+ } else {
+ addIntToStack(READ_LE_UINT16(ptr + num));
+ num += 2;
+ }
break;
case 5:
- addVerbToStack(READ_LE_UINT16(ptr + num));
- num += 2;
+ if (_features & GF_AFTER_V8) {
+ addVerbToStack(READ_LE_UINT32(ptr + num));
+ num += 4;
+ } else {
+ addVerbToStack(READ_LE_UINT16(ptr + num));
+ num += 2;
+ }
break;
case 6:
- addNameToStack(READ_LE_UINT16(ptr + num));
- num += 2;
+ if (_features & GF_AFTER_V8) {
+ addNameToStack(READ_LE_UINT32(ptr + num));
+ num += 4;
+ } else {
+ addNameToStack(READ_LE_UINT16(ptr + num));
+ num += 2;
+ }
break;
case 7:
- addStringToStack(READ_LE_UINT16(ptr + num));
- num += 2;
+ if (_features & GF_AFTER_V8) {
+ addStringToStack(READ_LE_UINT32(ptr + num));
+ num += 4;
+ } else {
+ addStringToStack(READ_LE_UINT16(ptr + num));
+ num += 2;
+ }
break;
case 3:
case 9:
Index: vars.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/vars.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- vars.cpp 23 Dec 2002 15:46:53 -0000 1.8
+++ vars.cpp 23 Dec 2002 18:30:12 -0000 1.9
@@ -211,6 +211,9 @@
VAR_VIRT_MOUSE_X = 5;
VAR_VIRT_MOUSE_Y = 6;
+ VAR_CURSORSTATE = 7;
+ VAR_USERPUT = 8;
+
VAR_CAMERA_POS_X = 9;
VAR_CAMERA_POS_Y = 10;
VAR_CAMERA_DEST_X = 11;
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.8,2.9 resource.cpp,1.34,1.35 script_v8.cpp,2.9,2.10
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.10,2.11 script.cpp,1.19,1.20 script_v8.cpp,2.11,2.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list