[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