aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/wince/pocketpc.cpp105
1 files changed, 62 insertions, 43 deletions
diff --git a/backends/wince/pocketpc.cpp b/backends/wince/pocketpc.cpp
index b987138df8..5747ecb164 100644
--- a/backends/wince/pocketpc.cpp
+++ b/backends/wince/pocketpc.cpp
@@ -94,6 +94,8 @@ typedef struct
#include "dynamic_imports.h"
+#include "backends/fs/fs.h"
+
#if defined(MIPS) || defined(SH3)
// Comment this out if you don't want to support GameX
#define GAMEX
@@ -103,12 +105,9 @@ typedef struct
#include "GameX.h"
#endif
-#define POCKETSCUMM_BUILD "101902"
-#define CURRENT_GAMES_VERSION 1
+#define CURRENT_GAMES_VERSION 3
#define CURRENT_KEYS_VERSION 3
-#define VERSION "Build " POCKETSCUMM_BUILD " (VM " SCUMMVM_CVS ")"
-
typedef int (*tTimeCallback)(int);
typedef void SoundProc(void *param, byte *buf, int len);
@@ -189,6 +188,8 @@ pseudoGAPI availablePseudoGAPI[] = {
int _pseudoGAPI_device;
+extern char noGAPI;
+
/* Default SDLAUDIO */
/*
@@ -311,7 +312,7 @@ GameX *gameX;
int gameXGXOpenDisplay(HWND hWnd, DWORD dwFlags) {
gameX = new GameX();
if (!gameX->OpenGraphics()) {
- MessageBox(NULL, TEXT("Couldn't initialize GameX. Reverting to GDI graphics"), TEXT("PocketScumm rendering"), MB_OK);
+ //MessageBox(NULL, TEXT("Couldn't initialize GameX. Reverting to GDI graphics"), TEXT("PocketScumm rendering"), MB_OK);
noGAPI = 1;
}
return 0;
@@ -419,8 +420,6 @@ extern void abortScanPath();
void keypad_init();
-extern char noGAPI;
-
class OSystem_WINCE3 : public OSystem {
public:
// Set colors of the palette
@@ -648,6 +647,8 @@ extern void handleSelectGame(int, int);
/* Monkey2 keyboard stuff */
bool monkey2_keyboard;
+bool new_audio_rate;
+
bool closing = false;
void close_GAPI() {
@@ -698,6 +699,7 @@ int mapKey(int key) {
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
{
+
TCHAR directory[MAX_PATH];
char game_name[100];
bool sound;
@@ -709,27 +711,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin
//HMODULE SDLAudio_handle;
HMODULE GAPI_handle;
- /* Create the main window */
- WNDCLASS wcex;
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = (WNDPROC)OSystem_WINCE3::WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = GetModuleHandle(NULL);
- wcex.hIcon = 0;
- wcex.hCursor = NULL;
- wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- wcex.lpszMenuName = 0;
- wcex.lpszClassName = TEXT("ScummVM");
- if (!RegisterClass(&wcex))
- Error(TEXT("Cannot register window class!"));
-
- hWnd_Window = CreateWindow(TEXT("ScummVM"), TEXT("ScummVM"), WS_VISIBLE,
- 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, GetModuleHandle(NULL), NULL);
-
- ShowWindow(hWnd_Window, SW_SHOW);
- UpdateWindow(hWnd_Window);
-
hide_toolbar = false;
noGAPI = 0;
@@ -784,13 +765,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin
noGAPI = 1;
}
else {
- if (!g_config->getBool("DirectVideoCheck", false, "wince")) {
- if (MessageBox(NULL, TEXT("Direct video support is available for this device. Do you want to use it ?"), TEXT("PocketScumm Rendering"), MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1|MB_APPLMODAL) == IDNO)
- noGAPI = 1;
- MessageBox(NULL, TEXT("Delete scummvm.ini or remove the DirectVideoCheck key if you want to change this setting later"), TEXT("PocketScumm Rendering"), MB_OK|MB_APPLMODAL);
- g_config->setBool("DirectVideoCheck", true, "wince");
- g_config->flush();
+ FILE *test;
+
+ test = fopen("NoDirectVideo", "r");
+ if (test) {
+ noGAPI = 1;
+ fclose(test);
}
+ else
+ if (g_config->getBool("NoDirectVideo", false, "wince"))
+ noGAPI = 1;
}
dynamicGXOpenInput = defaultGXOpenInput;
@@ -834,6 +818,26 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin
select_game = true;
+ /* Create the main window */
+ WNDCLASS wcex;
+ wcex.style = CS_HREDRAW | CS_VREDRAW;
+ wcex.lpfnWndProc = (WNDPROC)OSystem_WINCE3::WndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = GetModuleHandle(NULL);
+ wcex.hIcon = 0;
+ wcex.hCursor = NULL;
+ wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+ wcex.lpszMenuName = 0;
+ wcex.lpszClassName = TEXT("ScummVM");
+ if (!RegisterClass(&wcex))
+ Error(TEXT("Cannot register window class!"));
+
+ hWnd_Window = CreateWindow(TEXT("ScummVM"), TEXT("ScummVM"), WS_VISIBLE,
+ 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, GetModuleHandle(NULL), NULL);
+
+ ShowWindow(hWnd_Window, SW_SHOW);
+ UpdateWindow(hWnd_Window);
GraphicsOn(hWnd_Window, gfx_mode_switch); // open GAPI in Portrait mode
GAPIKeysInit();
@@ -851,6 +855,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin
g_config->flush();
}
+ if (result < 0)
+ return 0;
+
getSelectedGame(result, game_name, directory);
WideCharToMultiByte(CP_ACP, 0, directory, wcslen(directory) + 1, _directory, sizeof(_directory), NULL, NULL);
strcat(_directory, "\\");
@@ -888,6 +895,9 @@ void runGame(char *game_name) {
monkey2_keyboard = true;
}
+ //new_audio_rate = (strcmp(game_name, "dig") == 0 || strcmp(game_name, "monkey") == 0);
+ new_audio_rate = (strcmp(game_name, "dig") == 0 || strcmp(game_name, "ft") == 0);
+
detector.parseCommandLine(argc, argv);
if (detector.detectMain())
@@ -953,6 +963,7 @@ LRESULT CALLBACK OSystem_WINCE3::WndProc(HWND hWnd, UINT message, WPARAM wParam,
case WM_ERASEBKGND:
{
+ /*
RECT rc;
HDC hDC;
@@ -965,7 +976,8 @@ LRESULT CALLBACK OSystem_WINCE3::WndProc(HWND hWnd, UINT message, WPARAM wParam,
if(rc.top < rc.bottom)
FillRect(hDC, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));
ReleaseDC(hWnd, hDC);
- }
+ }
+ */
}
return 1;
@@ -975,6 +987,7 @@ LRESULT CALLBACK OSystem_WINCE3::WndProc(HWND hWnd, UINT message, WPARAM wParam,
PAINTSTRUCT ps;
hDC = BeginPaint (hWnd, &ps);
EndPaint (hWnd, &ps);
+
if (!hide_toolbar)
toolbar_drawn = false;
@@ -1199,7 +1212,10 @@ LRESULT CALLBACK OSystem_WINCE3::WndProc(HWND hWnd, UINT message, WPARAM wParam,
*/
/*}*/
wm->_event.event_code = EVENT_KEYDOWN;
- wm->_event.kbd.ascii = mapKey(VK_F5);
+ if (g_scumm->_features & GF_OLD256)
+ wm->_event.kbd.ascii = 319;
+ else
+ wm->_event.kbd.ascii = g_scumm->_vars[g_scumm->VAR_SAVELOADDIALOG_KEY];
break;
case ToolbarMode:
SetScreenMode(!GetScreenMode());
@@ -1213,7 +1229,7 @@ LRESULT CALLBACK OSystem_WINCE3::WndProc(HWND hWnd, UINT message, WPARAM wParam,
break;
}
wm->_event.event_code = EVENT_KEYDOWN;
- if (g_scumm->vm.cutScenePtr[g_scumm->vm.cutSceneStackPointer])
+ if (g_scumm->vm.cutScenePtr[g_scumm->vm.cutSceneStackPointer] || g_scumm->_insaneState)
wm->_event.kbd.ascii = g_scumm->_vars[g_scumm->VAR_CUTSCENEEXIT_KEY];
else
wm->_event.kbd.ascii = g_scumm->_vars[g_scumm->VAR_TALKSTOP_KEY];
@@ -1388,8 +1404,10 @@ void action_save() {
toolbar_drawn = false;
*/
/*}*/
-
- system->addEventKeyPressed(mapKey(VK_F5));
+ if (g_scumm->_features & GF_OLD256)
+ system->addEventKeyPressed(319);
+ else
+ system->addEventKeyPressed(g_scumm->_vars[g_scumm->VAR_SAVELOADDIALOG_KEY]);
}
void action_quit() {
@@ -1428,7 +1446,7 @@ void action_skip() {
OSystem_WINCE3* system;
system = (OSystem_WINCE3*)g_scumm->_system;
- if (g_scumm->vm.cutScenePtr[g_scumm->vm.cutSceneStackPointer])
+ if (g_scumm->vm.cutScenePtr[g_scumm->vm.cutSceneStackPointer] || g_scumm->_insaneState)
system->addEventKeyPressed(g_scumm->_vars[g_scumm->VAR_CUTSCENEEXIT_KEY]);
else
system->addEventKeyPressed(g_scumm->_vars[g_scumm->VAR_TALKSTOP_KEY]);
@@ -1441,6 +1459,7 @@ void do_hide(bool hide_state) {
else
LimitScreenGeometry();
Cls();
+ num_of_dirty_square = MAX_NUMBER_OF_DIRTY_SQUARES;
toolbar_drawn = hide_toolbar;
g_scumm->_system->update_screen();
}
@@ -1627,7 +1646,7 @@ void OSystem_WINCE3::update_screen() {
else {
int i;
for (i=0; i<num_of_dirty_square; i++) {
- Blt_part(_gfx_buf + (320 * ds[i].y) + ds[i].x, (GetScreenMode() ? ds[i].x : ds[i].x * 3/4), ds[i].y, ds[i].w, ds[i].h, 320);
+ Blt_part(_gfx_buf + (320 * ds[i].y) + ds[i].x, (GetScreenMode() ? ds[i].x : ds[i].x * 3/4), ds[i].y, ds[i].w, ds[i].h, 320, true);
}
num_of_dirty_square = 0;
}
@@ -1832,7 +1851,7 @@ bool OSystem_WINCE3::set_sound_proc(void *param, SoundProc *proc, byte format) {
/* only one format supported at the moment */
real_soundproc = proc;
- desired.freq = SAMPLES_PER_SEC;
+ desired.freq = (new_audio_rate ? SAMPLES_PER_SEC_NEW : SAMPLES_PER_SEC_OLD);
desired.format = AUDIO_S16SYS;
desired.channels = 2;
desired.samples = 128;
@@ -1867,7 +1886,7 @@ uint32 OSystem_WINCE3::property(int param, Property *value) {
break;
case PROP_GET_SAMPLE_RATE:
- return SAMPLES_PER_SEC;
+ return (new_audio_rate ? SAMPLES_PER_SEC_NEW : SAMPLES_PER_SEC_OLD);
}
return 0;