diff options
author | Ludvig Strigeus | 2001-11-10 20:51:55 +0000 |
---|---|---|
committer | Ludvig Strigeus | 2001-11-10 20:51:55 +0000 |
commit | e924c81353394e9f625bea40713891bceb153ecf (patch) | |
tree | c384b2041a80cbca12f38bca1c66ae805b65beb5 | |
parent | 595d9534c3ebd2e8f6615481c05ff90818a1c3f9 (diff) | |
download | scummvm-rg350-e924c81353394e9f625bea40713891bceb153ecf.tar.gz scummvm-rg350-e924c81353394e9f625bea40713891bceb153ecf.tar.bz2 scummvm-rg350-e924c81353394e9f625bea40713891bceb153ecf.zip |
new timing algorithm
svn-id: r3484
-rw-r--r-- | gfx.cpp | 2 | ||||
-rw-r--r-- | gui.cpp | 9 | ||||
-rw-r--r-- | gui.h | 6 | ||||
-rw-r--r-- | scumm.h | 4 | ||||
-rw-r--r-- | sdl.cpp | 134 | ||||
-rw-r--r-- | windows.cpp | 11 |
6 files changed, 75 insertions, 91 deletions
@@ -1394,7 +1394,7 @@ void Scumm::unkScreenEffect7(int a) { tab_2[i] += tab_1[i]; updateScreen(this); - waitForTimer(this); + waitForTimer(this,3); } } @@ -216,7 +216,7 @@ void Gui::leftMouseClick(int x, int y) { } const GuiWidget save_load_dialog[] = { - {GUI_STAT,0xFF,GWF_DEFAULT|GWF_PARENT,30,20,260,120,0,NULL}, + {GUI_STAT,0xFF,GWF_DEFAULT|GWF_PARENT,30,20,260,120,0,0}, {GUI_TEXT,0x01,0,40,5,128,16,0,1}, /* How may I serve you? */ {GUI_TEXT,0x02,0,40,5,128,16,0,2}, /* Select a game to LOAD */ {GUI_TEXT,0x04,0,40,5,128,16,0,3}, /* Name your SAVE game */ @@ -246,7 +246,6 @@ const GuiWidget save_load_dialog[] = { {GUI_TEXT,0x04,GWF_BUTTON,200,45,54,16,8,9}, /* Ok */ {GUI_TEXT,0x04,GWF_BUTTON,200,65,54,16,7,7}, /* Cancel */ - {0} }; @@ -374,7 +373,7 @@ void Gui::showCaret(bool show) { s = game_names[_editString]; if (show) { - if (i < 31) { + if (i < SAVEGAME_NAME_LEN-1) { s[i] = '_'; s[i+1] = 0; } @@ -399,7 +398,7 @@ void Gui::editString(int i) { showCaret(true); } -void Gui::addLetter(char letter) { +void Gui::addLetter(byte letter) { if (_editString==-1) return; @@ -408,7 +407,7 @@ void Gui::addLetter(char letter) { return; } - if (letter>=32 && letter<128 && _editLen < 31) { + if (letter>=32 && letter<128 && _editLen < SAVEGAME_NAME_LEN-1) { game_names[_editString][_editLen++] = letter; } else if (letter==8 && _editLen>0) { _editLen--; @@ -28,6 +28,8 @@ struct GuiWidget { byte _string_number; }; +#define SAVEGAME_NAME_LEN 32 + struct Gui { Scumm *_s; const GuiWidget *_widgets[4]; @@ -49,7 +51,7 @@ struct Gui { int _editString; int _editLen; bool valid_games[9]; - char game_names[9][32]; + char game_names[9][SAVEGAME_NAME_LEN]; void loop(); void init(Scumm *s); void draw(int start, int end); @@ -71,7 +73,7 @@ struct Gui { void getSavegameNames(int start); void editString(int index); void showCaret(bool show); - void addLetter(char letter); + void addLetter(byte letter); void saveLoadDialog(); void queryMessage(const char *msg, const char *alts); byte getDefaultColor(int color); @@ -1650,8 +1650,6 @@ struct Serializer { }; - -void waitForTimer(Scumm *s); void outputdisplay2(Scumm *s, int disp); extern const byte revBitMask[8]; void blitToScreen(Scumm *s, byte *src, int x, int y, int w, int h); @@ -1667,10 +1665,10 @@ void CDECL debug(int level, const char *s, ...); void checkHeap(); void initGraphics(Scumm *s, bool fullScreen); void updateScreen(Scumm *s); - void drawMouse(Scumm *s, int x, int y, int color, byte *mask, bool visible); void drawMouse(Scumm *s, int x, int y, int w, int h, byte *buf, bool visible); void blit(byte *dst, byte *src, int w, int h); byte *findResource(uint32 id, byte *searchin, int index); void playSfxSound(void *sound, uint32 size, uint rate); bool isSfxFinished(); +void waitForTimer(Scumm *s, int delay);
\ No newline at end of file @@ -41,6 +41,8 @@ SoundEngine sound; static SDL_Surface *screen; +void updateScreen(Scumm *s); + void updatePalette(Scumm *s) { SDL_Color colors[256]; int first = s->_palDirtyMin; @@ -72,82 +74,71 @@ int mapKey(int key, byte mod) { return key; } -void waitForTimer(Scumm *s) { +void waitForTimer(Scumm *s, int delay) { SDL_Event event; - byte dontPause = true; - do { - while (SDL_PollEvent(&event)) { - switch(event.type) { - case SDL_KEYDOWN: - s->_keyPressed = mapKey(event.key.keysym.sym, event.key.keysym.mod); - if (event.key.keysym.sym >= '0' && event.key.keysym.sym<='9') { - s->_saveLoadSlot = event.key.keysym.sym - '0'; - if (event.key.keysym.mod&KMOD_SHIFT) { - sprintf(s->_saveLoadName, "Quicksave %d", s->_saveLoadSlot); - s->_saveLoadFlag = 1; - } else if (event.key.keysym.mod&KMOD_CTRL) - s->_saveLoadFlag = 2; - s->_saveLoadCompatible = false; - } - if (event.key.keysym.sym=='z' && event.key.keysym.mod&KMOD_CTRL) { - exit(1); - } - if (event.key.keysym.sym=='f' && event.key.keysym.mod&KMOD_CTRL) { - s->_fastMode ^= 1; - } - if (event.key.keysym.sym=='g' && event.key.keysym.mod&KMOD_CTRL) { - s->_fastMode ^= 2; - } + while (SDL_PollEvent(&event)) { + switch(event.type) { + case SDL_KEYDOWN: + s->_keyPressed = mapKey(event.key.keysym.sym, event.key.keysym.mod); + if (event.key.keysym.sym >= '0' && event.key.keysym.sym<='9') { + s->_saveLoadSlot = event.key.keysym.sym - '0'; + if (event.key.keysym.mod&KMOD_SHIFT) { + sprintf(s->_saveLoadName, "Quicksave %d", s->_saveLoadSlot); + s->_saveLoadFlag = 1; + } else if (event.key.keysym.mod&KMOD_CTRL) + s->_saveLoadFlag = 2; + s->_saveLoadCompatible = false; + } + if (event.key.keysym.sym=='z' && event.key.keysym.mod&KMOD_CTRL) { + exit(1); + } + if (event.key.keysym.sym=='f' && event.key.keysym.mod&KMOD_CTRL) { + s->_fastMode ^= 1; + } + if (event.key.keysym.sym=='g' && event.key.keysym.mod&KMOD_CTRL) { + s->_fastMode ^= 2; + } - if (event.key.keysym.sym=='d' && event.key.keysym.mod&KMOD_CTRL) { - debugger.attach(s); - } - if (event.key.keysym.sym=='s' && event.key.keysym.mod&KMOD_CTRL) { - s->resourceStats(); - } - - break; - case SDL_MOUSEMOTION: { - int newx,newy; + if (event.key.keysym.sym=='d' && event.key.keysym.mod&KMOD_CTRL) { + debugger.attach(s); + } + if (event.key.keysym.sym=='s' && event.key.keysym.mod&KMOD_CTRL) { + s->resourceStats(); + } + + break; + case SDL_MOUSEMOTION: { + int newx,newy; #if !defined(SCALEUP_2x2) - newx = event.motion.x; - newy = event.motion.y; + newx = event.motion.x; + newy = event.motion.y; #else - newx = event.motion.x>>1; - newy = event.motion.y>>1; -#endif - if (newx != s->mouse.x || newy != s->mouse.y) { - s->mouse.x = newx; - s->mouse.y = newy; - s->drawMouse(); - updateScreen(s); - } - break; - } - case SDL_MOUSEBUTTONDOWN: - if (event.button.button==SDL_BUTTON_LEFT) - s->_leftBtnPressed |= 1; - else if (event.button.button==SDL_BUTTON_RIGHT) - s->_rightBtnPressed |= 1; - break; -#if 0 - case SDL_ACTIVEEVENT: - if (event.active.state & SDL_APPINPUTFOCUS) { - dontPause = event.active.gain; - } - break; + newx = event.motion.x>>1; + newy = event.motion.y>>1; #endif - case SDL_QUIT: - exit(1); - break; + if (newx != s->mouse.x || newy != s->mouse.y) { + s->mouse.x = newx; + s->mouse.y = newy; + s->drawMouse(); + updateScreen(s); } + break; + } + case SDL_MOUSEBUTTONDOWN: + if (event.button.button==SDL_BUTTON_LEFT) + s->_leftBtnPressed |= 1; + else if (event.button.button==SDL_BUTTON_RIGHT) + s->_rightBtnPressed |= 1; + break; + case SDL_QUIT: + exit(1); + break; } - - if (!(s->_fastMode&2)) - SDL_Delay(dontPause ? 10 : 100); - } while (!dontPause); - + } + + if (!(s->_fastMode&2)) + SDL_Delay(delay*10); } #define MAX_DIRTY_RECTS 40 @@ -650,11 +641,8 @@ int main(int argc, char* argv[]) { if (scumm._fastMode) tmp=1; } - - while(tmp>0) { - waitForTimer(&scumm); - tmp--; - } + + waitForTimer(&scumm, tmp); } while(1); return 0; diff --git a/windows.cpp b/windows.cpp index c4d3b8822f..ca8bd73979 100644 --- a/windows.cpp +++ b/windows.cpp @@ -915,11 +915,11 @@ void updateScreen(Scumm *s) { wm->writeToScreen(); } -void waitForTimer(Scumm *s) { +void waitForTimer(Scumm *s, int delay) { + wm->handleMessage(); if (!veryFastMode) { - Sleep(10); + Sleep(delay*10); } - wm->handleMessage(); } void initGraphics(Scumm *s, bool fullScreen) { @@ -1030,10 +1030,7 @@ int main(int argc, char* argv[]) { tmp=1; } - while(tmp>0) { - waitForTimer(&scumm); - tmp--; - } + waitForTimer(&scumm, tmp); } while(1); return 0; |