aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudvig Strigeus2001-11-10 20:51:55 +0000
committerLudvig Strigeus2001-11-10 20:51:55 +0000
commite924c81353394e9f625bea40713891bceb153ecf (patch)
treec384b2041a80cbca12f38bca1c66ae805b65beb5
parent595d9534c3ebd2e8f6615481c05ff90818a1c3f9 (diff)
downloadscummvm-rg350-e924c81353394e9f625bea40713891bceb153ecf.tar.gz
scummvm-rg350-e924c81353394e9f625bea40713891bceb153ecf.tar.bz2
scummvm-rg350-e924c81353394e9f625bea40713891bceb153ecf.zip
new timing algorithm
svn-id: r3484
-rw-r--r--gfx.cpp2
-rw-r--r--gui.cpp9
-rw-r--r--gui.h6
-rw-r--r--scumm.h4
-rw-r--r--sdl.cpp134
-rw-r--r--windows.cpp11
6 files changed, 75 insertions, 91 deletions
diff --git a/gfx.cpp b/gfx.cpp
index 77a184c74e..5ead2027e3 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -1394,7 +1394,7 @@ void Scumm::unkScreenEffect7(int a) {
tab_2[i] += tab_1[i];
updateScreen(this);
- waitForTimer(this);
+ waitForTimer(this,3);
}
}
diff --git a/gui.cpp b/gui.cpp
index 4960781af2..a771762e0f 100644
--- a/gui.cpp
+++ b/gui.cpp
@@ -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--;
diff --git a/gui.h b/gui.h
index b0c4c16448..7e47d2c6db 100644
--- a/gui.h
+++ b/gui.h
@@ -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);
diff --git a/scumm.h b/scumm.h
index 5ef1c978d1..04fe282d5f 100644
--- a/scumm.h
+++ b/scumm.h
@@ -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
diff --git a/sdl.cpp b/sdl.cpp
index 479f75665e..dbceaacd31 100644
--- a/sdl.cpp
+++ b/sdl.cpp
@@ -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;