[Scummvm-cvs-logs] CVS: scummvm/sky control.cpp,1.50.2.3,1.50.2.4 control.h,1.21.2.3,1.21.2.4 screen.cpp,1.48,1.48.2.1 screen.h,1.12,1.12.2.1 sky.cpp,1.100.2.2,1.100.2.3 sky.h,1.47,1.47.2.1

Robert G?ffringmann lavosspawn at users.sourceforge.net
Tue Aug 5 19:14:02 CEST 2003


Update of /cvsroot/scummvm/scummvm/sky
In directory sc8-pr-cvs1:/tmp/cvs-serv16789/sky

Modified Files:
      Tag: branch-0-5-0
	control.cpp control.h screen.cpp screen.h sky.cpp sky.h 
Log Message:
added loading/saving using alt+ctrl

Index: control.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/control.cpp,v
retrieving revision 1.50.2.3
retrieving revision 1.50.2.4
diff -u -d -r1.50.2.3 -r1.50.2.4
--- control.cpp	4 Aug 2003 21:18:02 -0000	1.50.2.3
+++ control.cpp	6 Aug 2003 02:13:00 -0000	1.50.2.4
@@ -1076,30 +1076,17 @@
 	free(tmpBuf);	
 }
 
-void SkyControl::doAutoSave(void) {
-	char fName[20];
-	if (SkyState::isCDVersion())
-		strcpy(fName, "SKY-VM-CD.ASD");
-	else
-        sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);
-	File outf;
-	if (!outf.open(fName, _savePath, File::kFileWriteMode)) {
-		warning("Can't create file %s for autosaving", fName);
-		return;
-	}
-	uint8 *saveData = (uint8 *)malloc(0x20000);
-	uint32 fSize = prepareSaveData(saveData);
-
-	if (outf.write(saveData, fSize) != fSize)
-		warning("Can't write file %s for autosaving. Disk full?", fName);
-	outf.close();
-	free(saveData);
-}
-
 uint16 SkyControl::saveGameToFile(void) {
 
 	char fName[20];
-	sprintf(fName,"SKY-VM.%03d", _selectedGame);
+	if (_selectedGame != 0xFFFF)
+		sprintf(fName,"SKY-VM.%03d", _selectedGame);
+	else {
+		if (SkyState::isCDVersion())
+			strcpy(fName, "SKY-VM-CD.ASD");
+		else
+			sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);		
+	}
 	File outf;
 	if (!outf.open(fName, _savePath, File::kFileWriteMode)) {
 		return NO_DISK_SPACE;
@@ -1596,7 +1583,7 @@
 	return res;
 }
 
-uint16 SkyControl::quickXRestore(uint16 slot) {
+uint16 SkyControl::quickSaveRestore(uint16 slot, bool save) {
 	uint16 result;
 	initPanel();
 	_mouseClicked = false;
@@ -1615,26 +1602,26 @@
 	_savedMouse = _skyMouse->giveCurrentMouseType();
 	_skyMouse->spriteMouse(MOUSE_NORMAL,0,0);
 
-	if (slot == 0)
-		result = restoreGameFromFile(true);
-	else {
-		_selectedGame = slot - 1;
-		result = restoreGameFromFile(false);
-	}
-	if (result == GAME_RESTORED) {
-		memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT);
-		_skyScreen->showScreen(_skyScreen->giveCurrent());
-		_skyScreen->forceRefresh();
-		_skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(SkyState::_systemVars.currentPalette));
+	if (save) {
+		if (slot == 0)
+			_selectedGame = 0xFFFF;
+		else
+			_selectedGame = slot - 1;
+		result = saveGameToFile();
 	} else {
-		memset(_screenBuf, 0, FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
-		_system->copy_rect(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
-		_system->update_screen();
-		_skyScreen->showScreen(_skyScreen->giveCurrent());
-		_skyScreen->setPalette(60111);
+		if (slot == 0)
+			result = restoreGameFromFile(true);
+		else {
+			_selectedGame = slot - 1;
+			result = restoreGameFromFile(false);
+		}
 	}
 	_skyMouse->spriteMouse(_savedMouse, 0, 0);
 	_skyText->fnSetFont(_savedCharSet);
+	memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT);
+	_skyScreen->showScreen(_skyScreen->giveCurrent());
+	_skyScreen->forceRefresh();
+	_skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(SkyState::_systemVars.currentPalette));
 
 	removePanel();
     return result;

Index: control.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/control.h,v
retrieving revision 1.21.2.3
retrieving revision 1.21.2.4
diff -u -d -r1.21.2.3 -r1.21.2.4
--- control.h	4 Aug 2003 21:18:02 -0000	1.21.2.3
+++ control.h	6 Aug 2003 02:13:00 -0000	1.21.2.4
@@ -173,8 +173,7 @@
 	void doLoadSavePanel(void);
 	void restartGame(void);
 	void showGameQuitMsg(bool useScreen = true);
-	void doAutoSave(void);
-	uint16 quickXRestore(uint16 slot);
+	uint16 quickSaveRestore(uint16 slot, bool save);
 	bool loadSaveAllowed(void);
     
 private:

Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/screen.cpp,v
retrieving revision 1.48
retrieving revision 1.48.2.1
diff -u -d -r1.48 -r1.48.2.1
--- screen.cpp	13 Jul 2003 16:22:16 -0000	1.48
+++ screen.cpp	6 Aug 2003 02:13:00 -0000	1.48.2.1
@@ -734,6 +734,22 @@
 	}
 }
 
+void SkyScreen::showOverlay(dataFileHeader *data) {
+
+	uint8 *ovlData = ((uint8*)data) + sizeof(dataFileHeader);
+	uint8 *scrBuf = _currentScreen + data->s_y * GAME_SCREEN_WIDTH + data->s_x;
+	for (uint16 cnty = 0; cnty < data->s_height; cnty++)
+		for (uint16 cntx = 0; cntx < data->s_width; cntx++) {
+			if (*ovlData)
+				*scrBuf = *ovlData;
+			scrBuf++;
+			ovlData++;
+		}
+	scrBuf = _currentScreen + data->s_y * GAME_SCREEN_WIDTH + data->s_x;
+	_system->copy_rect(scrBuf, GAME_SCREEN_WIDTH, data->s_x, data->s_y, data->s_width, data->s_height);
+	_system->update_screen();
+}
+
 void SkyScreen::paintBox(uint16 x, uint16 y) {
 
 	uint8 *screenPos = _currentScreen + y * GAME_SCREEN_WIDTH + x;

Index: screen.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/screen.h,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -d -r1.12 -r1.12.2.1
--- screen.h	12 Jul 2003 04:21:20 -0000	1.12
+++ screen.h	6 Aug 2003 02:13:01 -0000	1.12.2.1
@@ -51,6 +51,7 @@
 public:
 	SkyScreen(OSystem *pSystem, SkyDisk *pDisk);
 	~SkyScreen(void);
+	void showOverlay(dataFileHeader *data);
 	void setPalette(uint8 *pal);
 	void setPaletteEndian(uint8 *pal);
 	void setPalette(uint16 fileNum);

Index: sky.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.cpp,v
retrieving revision 1.100.2.2
retrieving revision 1.100.2.3
diff -u -d -r1.100.2.2 -r1.100.2.3
--- sky.cpp	31 Jul 2003 15:00:06 -0000	1.100.2.2
+++ sky.cpp	6 Aug 2003 02:13:01 -0000	1.100.2.3
@@ -156,23 +156,69 @@
 
 void SkyState::handleKey(void) {
 
-	if (_key_pressed == 63)
+	if ((_keyFlags & (OSystem::KBD_ALT | OSystem::KBD_CTRL)) == (OSystem::KBD_ALT | OSystem::KBD_CTRL))
+		_keyFlags = 0;
+
+	uint16 saveRes;
+	uint8 slot = _keyPressed - '0';
+	if (slot == 0)
+		slot = 10;
+	if ((_keyFlags == OSystem::KBD_CTRL) && ((_keyPressed >= '0') && (_keyPressed <= '9'))) {
+		if (_skyControl->loadSaveAllowed())
+			if (_skyControl->quickSaveRestore(slot, false) == GAME_RESTORED) {
+				sprintf(_sysMessage, "Restored slot %d", slot);
+				_sysShow = 1000;
+			}
+	}
+	
+	if ((_keyFlags == OSystem::KBD_ALT) && ((_keyPressed >= '0') && (_keyPressed <= '9'))) {
+		if (_skyControl->loadSaveAllowed()) {
+			saveRes = _skyControl->quickSaveRestore(slot, true);
+			if (saveRes == GAME_SAVED) {
+				sprintf(_sysMessage, "Saved game to slot %d", slot);
+				_sysShow = 1000;
+			} else {
+				strcpy(_sysMessage, "Unable to save game.");
+				_sysShow = 2000;
+			}
+		}
+	}
+
+	if (_keyPressed == 63)
 		_skyControl->doControlPanel();
 
-	if ((_key_pressed == 27) && (!_systemVars.pastIntro))
+	if ((_keyPressed == 27) && (!_systemVars.pastIntro))
 		_skyControl->restartGame();
 #ifdef WITH_DEBUG_CHEATS
-	if ((_key_pressed >= '0') && (_key_pressed <= '9'))
-		doCheat(_key_pressed - '0');
+	if ((_keyPressed >= '0') && (_keyPressed <= '9'))
+		doCheat(_keyPressed - '0');
 
-	if (_key_pressed == 'r') {
+	if (_keyPressed == 'r') {
 		warning("loading grid");
 		_skyLogic->_skyGrid->loadGrids();
 	}
 #endif
-	if (_key_pressed == '.')
+	if (_keyPressed == '.')
 		_skyMouse->logicClick();
-	_key_pressed = 0;
+	_keyPressed = 0;
+}
+
+void SkyState::doSysMsg(void) {
+	if (_sysShow > 0) {
+		if (!_sysGraph) {
+			_sysGraph = (dataFileHeader*)malloc(14 * GAME_SCREEN_WIDTH + sizeof(dataFileHeader));
+			_skyText->displayText(_sysMessage, (uint8*)_sysGraph, true, GAME_SCREEN_WIDTH, 255);
+			_sysGraph->s_x = 0;
+			_sysGraph->s_y = GAME_SCREEN_HEIGHT / 2 - 6;
+		}
+		_sysShow -= _systemVars.gameSpeed;
+		_skyScreen->showOverlay(_sysGraph);
+		if (_sysShow <= 0) {
+			free(_sysGraph);
+			_sysGraph = NULL;
+			_skyScreen->forceRefresh();
+		}
+	}
 }
 
 void SkyState::go() {
@@ -207,19 +253,20 @@
 		if (_system->get_msecs() - _lastSaveTime > 5 * 60 * 1000) {
 			if (_skyControl->loadSaveAllowed()) {
 				_lastSaveTime = _system->get_msecs();
-				_skyControl->doAutoSave();
+				_skyControl->quickSaveRestore(0, true);
 			} else
 				_lastSaveTime += 30 * 1000; // try again in 30 secs
 		}
 		_skySound->checkFxQueue();
 		_skyMouse->mouseEngine((uint16)_sdl_mouse_x, (uint16)_sdl_mouse_y);
-		if (_key_pressed)
+		if (_keyPressed)
 			handleKey();
 		_skyLogic->engine();
 		if (!_skyLogic->checkProtection()) { // don't let copy prot. screen flash up
 			_skyScreen->recreate();
 			_skyScreen->spriteEngine();
 			_skyScreen->flip();
+			doSysMsg();
 		}
 	}
 }
@@ -304,9 +351,11 @@
 				}
 	}
 
+	_sysGraph = NULL;
 	uint16 result = 0;
 	if (_detector->_save_slot >= 0)
-		result = _skyControl->quickXRestore(_detector->_save_slot);
+		result = _skyControl->quickSaveRestore(_detector->_save_slot, false);
+		//result = _skyControl->quickXRestore(_detector->_save_slot);
 
 	if (result == GAME_RESTORED)
 		_quickLaunch = true;
@@ -398,17 +447,18 @@
 
 	uint32 start = _system->get_msecs();
 	uint32 cur = start;
-	_key_pressed = 0;	//reset
+	_keyPressed = 0;	//reset
 
 	do {
 		while (_system->poll_event(&event)) {
 			switch (event.event_code) {
 				case OSystem::EVENT_KEYDOWN:
 					// Make sure backspace works right (this fixes a small issue on OS X)
+					_keyFlags = (byte)event.kbd.flags;
 					if (event.kbd.keycode == 8)
-						_key_pressed = 8;
+						_keyPressed = 8;
 					else
-						_key_pressed = (byte)event.kbd.ascii;
+						_keyPressed = (byte)event.kbd.ascii;
 					break;
 
 				case OSystem::EVENT_MOUSEMOVE:

Index: sky.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/sky.h,v
retrieving revision 1.47
retrieving revision 1.47.2.1
diff -u -d -r1.47 -r1.47.2.1
--- sky.h	17 Jul 2003 00:17:42 -0000	1.47
+++ sky.h	6 Aug 2003 02:13:01 -0000	1.47.2.1
@@ -62,7 +62,7 @@
 	void errorString(const char *buf_input, char *buf_output);
 protected:
 	byte _game;
-	byte _key_pressed;
+	byte _keyPressed, _keyFlags;
 	static uint8 _languageTable[11];
 	bool _quickLaunch; // set when starting with -x
 	bool _floppyIntro;
@@ -111,10 +111,15 @@
 	void go();
 	void doCheat(uint8 num);
 	void handleKey(void);
+	void doSysMsg(void);
 
 	static uint8 fosterImg[297 * 143];
 	static uint8 fosterPal[256 * 3];
 	uint32 _lastSaveTime;
+
+	char _sysMessage[256];
+	dataFileHeader *_sysGraph;
+	int32 _sysShow;
 
 	SkyText *getSkyText();
 	void initialise();





More information about the Scummvm-git-logs mailing list