[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.105,2.106 script_v5.cpp,1.163,1.164
Jonathan Gray
khalek at users.sourceforge.net
Sun Aug 31 07:59:11 CEST 2003
- Previous message: [Scummvm-cvs-logs] CVS: residual engine.cpp,1.11,1.12 model.cpp,1.6,1.7 screen.cpp,1.6,1.7
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.106,2.107 script_v2.cpp,2.189,2.190 script_v5.cpp,1.164,1.165
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv22689
Modified Files:
intern.h script_v5.cpp
Log Message:
some things needed for supporting original save/load screens in v3 games, doesn't fully work but doesn't break anything either
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.105
retrieving revision 2.106
diff -u -d -r2.105 -r2.106
--- intern.h 28 Aug 2003 15:23:22 -0000 2.105
+++ intern.h 31 Aug 2003 14:58:55 -0000 2.106
@@ -46,6 +46,8 @@
virtual void decodeParseString();
int getWordVararg(int *ptr);
+ void saveVars();
+ void loadVars();
virtual int getVar();
virtual int getVarOrDirectByte(byte mask);
Index: script_v5.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v5.cpp,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -d -r1.163 -r1.164
--- script_v5.cpp 29 Aug 2003 15:06:00 -0000 1.163
+++ script_v5.cpp 31 Aug 2003 14:58:56 -0000 1.164
@@ -831,7 +831,73 @@
void Scumm_v5::o5_saveLoadVars() {
// TODO
- error("o5_saveLoadVars not yet implemented");
+ if (fetchScriptByte() == 1)
+ saveVars();
+ else
+ loadVars();
+}
+
+void Scumm_v5::saveVars() {
+ int a, b;
+
+ while ((_opcode = fetchScriptByte()) != 0) {
+ switch (_opcode & 0x1F) {
+ case 0x01: // write a range of variables
+ getResultPos();
+ a = _resultVarNumber;
+ getResultPos();
+ b = _resultVarNumber;
+ warning("stub saveVars: vars %d -> %d", a, b);
+ break;
+
+ case 0x02: // write a range of string variables
+ a = getVarOrDirectByte(0x80);
+ b = getVarOrDirectByte(0x40);
+ warning("stub saveVars: strings %d -> %d", a, b);
+ break;
+ case 0x03: // open file
+ a = resStrLen(_scriptPointer);
+ warning("stub saveVars to %s", _scriptPointer);
+ _scriptPointer += a + 1;
+ break;
+ case 0x1F: // close file
+ warning("stub saveVars close file");
+ break;
+ }
+
+ }
+}
+
+void Scumm_v5::loadVars() {
+ int a, b;
+
+ hexdump(_scriptPointer, 64);
+ while ((_opcode = fetchScriptByte()) != 0) {
+ switch (_opcode & 0x1F) {
+ case 0x01: // read a range of variables
+ getResultPos();
+ a = _resultVarNumber;
+ getResultPos();
+ b = _resultVarNumber;
+ warning("stub loadVars: vars %d -> %d", a, b);
+ break;
+ case 0x02: // read a range of string variables
+ a = getVarOrDirectByte(0x80);
+ b = getVarOrDirectByte(0x40);
+ warning("stub loadVars: strings %d -> %d", a, b);
+ break;
+ case 0x03: // open file
+ a = resStrLen(_scriptPointer);
+ warning("stub loadVars from %s", _scriptPointer);
+ _scriptPointer += a + 1;
+ break;
+ case 0x1F: // close file
+ warning("stub loadVars close file");
+ break;
+ }
+
+ }
+
}
void Scumm_v5::o5_expression() {
@@ -1020,10 +1086,42 @@
void Scumm_v5::o5_getAnimCounter() {
getResultPos();
// Loom uses this opcode in its load/save screen.
- if (_gameId == GID_LOOM) {
+ //if (_gameId == GID_LOOM) {
+ if (_version <= 3) {
byte a = getVarOrDirectByte(0x80);
- warning("TODO: Loom saveLoad(%d)", a);
- setResult(0);
+ byte slot = a & 0x1F;
+ byte result = 0;
+
+ switch(a & 0xE0) {
+ case 0x00: // num slots available
+ result = 100;
+ break;
+ case 0x20: // dos drive?
+ result = 0;
+ break;
+ case 0x40: // load
+ if (loadState(slot, _saveLoadCompatible))
+ result = 3; // sucess
+ else
+ result = 5; // failed to load
+ break;
+ case 0x80: // save
+ if (saveState(slot, _saveLoadCompatible))
+ result = 0;
+ else
+ result = 2;
+ case 0xC0: // test if save exists
+ bool avail_saves[100];
+ SaveFileManager *mgr = _system->get_savefile_manager();
+ listSavegames(avail_saves, ARRAYSIZE(avail_saves), mgr);
+ delete mgr;
+ if (avail_saves[slot])
+ result = 6; // save file exists
+ else
+ result = 7; // save file does not exist
+ break;
+ }
+ setResult(result);
} else {
int act = getVarOrDirectByte(0x80);
Actor *a = derefActor(act, "o5_getAnimCounter");
- Previous message: [Scummvm-cvs-logs] CVS: residual engine.cpp,1.11,1.12 model.cpp,1.6,1.7 screen.cpp,1.6,1.7
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.106,2.107 script_v2.cpp,2.189,2.190 script_v5.cpp,1.164,1.165
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list