diff options
| -rw-r--r-- | scumm/actor.h | 2 | ||||
| -rw-r--r-- | scumm/debugger.cpp | 22 | ||||
| -rw-r--r-- | scumm/intern.h | 1 | ||||
| -rw-r--r-- | scumm/resource.cpp | 2 | ||||
| -rw-r--r-- | scumm/script_v8.cpp | 54 | ||||
| -rw-r--r-- | scumm/scummvm.cpp | 4 | 
6 files changed, 62 insertions, 23 deletions
diff --git a/scumm/actor.h b/scumm/actor.h index 684ba86d9a..e866984017 100644 --- a/scumm/actor.h +++ b/scumm/actor.h @@ -127,9 +127,9 @@ protected:  	void setBox(int box);  	int updateActorDirection(bool is_walking); -	void adjustActorPos();  public: +	void adjustActorPos();  	AdjustBoxResult adjustXYToBeInBox(int dstX, int dstY, int pathfrom);  	void setDirection(int direction); diff --git a/scumm/debugger.cpp b/scumm/debugger.cpp index 9423a23272..169df89cbb 100644 --- a/scumm/debugger.cpp +++ b/scumm/debugger.cpp @@ -284,25 +284,25 @@ bool ScummDebugger::Cmd_LoadGame(int argc, const char **argv) {  		_s->_saveLoadCompatible = false;  		_detach_now = true; -	} else { -		Debug_Printf("Syntax: savegame <slotnum>\n"); +		return false;  	} -	return false; + +	Debug_Printf("Syntax: loadgame <slotnum>\n"); +	return true;  }  bool ScummDebugger::Cmd_SaveGame(int argc, const char **argv) { -	if (argc > 1) { +	if (argc > 2) {  		int slot = atoi(argv[1]); -		 + +		strcpy(_s->_saveLoadName, argv[2]);  		_s->_saveLoadSlot = slot;  		_s->_saveLoadFlag = 1;  		_s->_saveLoadCompatible = false; -		 -		_detach_now = true; -	} else { -		Debug_Printf("Syntax: savegame <slotnum>\n"); -	} -	return false; +	} else +		Debug_Printf("Syntax: savegame <slotnum> <name>\n"); + +	return true;  }  bool ScummDebugger::Cmd_Actor(int argc, const char **argv) { diff --git a/scumm/intern.h b/scumm/intern.h index e0d765aaa1..8bd4b05a92 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -416,6 +416,7 @@ protected:  	void o8_blastText();  	void o8_cursorCommand(); +	void o8_createBoxMatrix();  	void o8_resourceRoutines();  	void o8_roomOps();  	void o8_actorOps(); diff --git a/scumm/resource.cpp b/scumm/resource.cpp index cd1ad982d4..7614ad8d9b 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -1143,7 +1143,7 @@ byte *Scumm::getStringAddress(int i)  {  	byte *b = getResourceAddress(rtString, i);  	if (!b) -		return b; +		return NULL;  	if (_features & GF_NEW_OPCODES)  		return ((ArrayHeader *)b)->data; diff --git a/scumm/script_v8.cpp b/scumm/script_v8.cpp index c87f674f41..f520342031 100644 --- a/scumm/script_v8.cpp +++ b/scumm/script_v8.cpp @@ -249,7 +249,7 @@ void Scumm_v8::setupOpcodes()  		OPCODE(o6_pickupObject),  		OPCODE(o6_setBoxFlags),  		/* A8 */ -		OPCODE(o6_createBoxMatrix), +		OPCODE(o8_createBoxMatrix),  		OPCODE(o6_invalid),  		OPCODE(o8_resourceRoutines),  		OPCODE(o8_roomOps), @@ -865,6 +865,20 @@ void Scumm_v8::o8_cursorCommand()  	_vars[VAR_USERPUT] = _userPut;  } +void Scumm_v8::o8_createBoxMatrix() +{ +	int i; +	Actor *a; + +	createBoxMatrix(); + +	for(i = 1; i < NUM_ACTORS; i++) { +		a = &_actors[i]; +		if (a && a->isInCurrentRoom()) +			a->adjustActorPos(); +	} +} +  void Scumm_v8::o8_resourceRoutines()  {  	// TODO @@ -1457,15 +1471,35 @@ void Scumm_v8::o8_kernelSetFunctions()  	case 24:	// clearTextQueue  		warning("o8_kernelSetFunctions: clearTextQueue()");  		break; -	case 25:	// saveGameWrite -		warning("o8_kernelSetFunctions: saveGameWrite(%d, %d)", args[1], args[2]); +	case 25: {	// saveGameReadName +		SaveFileManager *mgr = _system->get_savefile_manager(); +		char *address = (char*)getStringAddress(args[2]); +		char name[30]; + +		if (!address) { +			warning("o8_kernelSetFunctions: saveGameReadName failed finding slot string %d", args[2]); +			break; +		} +		getSavegameName(args[1] - 1, name, mgr); +		if (strlen(name) > 0 && strlen(name) < 30) +			strcpy(address, name);  		break; -	case 26:	// saveGameRead -		warning("o8_kernelSetFunctions: saveGameRead(%d, %d)", args[1], args[2]); +	} +	case 26: {	// saveGame? +		//SaveFileManager *mgr = _system->get_savefile_manager(); +		//char *address = (char*)getStringAddress(args[2]); +		char address[30]; +		warning("o8_kernelSetFunctions: saveGame?(%d, %s)", args[1], address);  		break; -	case 27:	// saveGameReadName -		warning("o8_kernelSetFunctions: saveGameReadName(%d)", args[1]); +	} +	case 27: {	// FIXME: This doesn't work +			// saveGameRead +		_saveLoadSlot = 0; +		_saveLoadFlag = 2; +		_saveLoadCompatible = false; +		warning("Sgl: %d\n", args[1]);  		break; +	}  	case 28:	// saveGameStampScreenshot  		warning("o8_kernelSetFunctions: saveGameStampScreenshot(%d, %d, %d, %d, %d, %d)", args[1], args[2], args[3], args[4], args[5], args[6]);  		break; @@ -1686,14 +1720,18 @@ void Scumm_v8::o8_getObjectImageHeight()  void Scumm_v8::o8_getStringWidth()  { +	char temp[1024];  	int charset = pop();  	int len = resStrLen(_scriptPointer);  	int oldID = _charset->getCurID();   	int width; +	// Parse the string to get rid of substitution codes +	strcpy(temp, (char*)_scriptPointer); +	addMessageToStack((byte*)&temp);  	// Temporary set the specified charset id  	_charset->setCurID(charset); -	width = _charset->getStringWidth(0, _scriptPointer); +	width = _charset->getStringWidth(0, (byte*)temp);  	_charset->setCurID(oldID);  	push(width); diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index f5dae0b3ff..44e80f7c34 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -1,6 +1,6 @@  /* ScummVM - Scumm Interpreter   * Copyright (C) 2001  Ludvig Strigeus - * wCopyright (C) 2001/2002 The ScummVM project + * Copyright (C) 2001-2003 The ScummVM project   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License @@ -461,7 +461,7 @@ int Scumm::scummLoop(int delta)  	_vars[VAR_GAME_LOADED] = 0;  	if (_saveLoadFlag) {  		bool success; -		const char *errMsg = "Succesfully saved game state to file:\n\n%s"; +		const char *errMsg = "Succesfully saved/loaded game state in file:\n\n%s";  		char filename[256];  		if (_saveLoadFlag == 1) {  | 
