diff options
author | Nicolas Bacca | 2003-11-04 23:07:30 +0000 |
---|---|---|
committer | Nicolas Bacca | 2003-11-04 23:07:30 +0000 |
commit | 2db3e37206296df06f3dd50b929e357e450f7707 (patch) | |
tree | eefc41d38608136a1abc36b362adfbf83b6d5e0d /backends/wince | |
parent | ee253d4c9075667de1c4977894d6dfef9c2d9a13 (diff) | |
download | scummvm-rg350-2db3e37206296df06f3dd50b929e357e450f7707.tar.gz scummvm-rg350-2db3e37206296df06f3dd50b929e357e450f7707.tar.bz2 scummvm-rg350-2db3e37206296df06f3dd50b929e357e450f7707.zip |
Switch to the *real* file - apologies to those who tried to compile the old one (but it seems nobody tried :p)
svn-id: r11137
Diffstat (limited to 'backends/wince')
-rw-r--r-- | backends/wince/wince.cpp | 185 |
1 files changed, 114 insertions, 71 deletions
diff --git a/backends/wince/wince.cpp b/backends/wince/wince.cpp index 6af898c5c4..345f7b3e88 100644 --- a/backends/wince/wince.cpp +++ b/backends/wince/wince.cpp @@ -20,6 +20,9 @@ */ #include "wince.h" +#include "sound/fmopl.h" +#include "base/plugins.h" + #ifdef USE_VORBIS #include <vorbis/vorbisfile.h> @@ -362,11 +365,12 @@ GameDetector detector; Engine *engine; bool is_simon; bool is_bass; -extern Scumm *g_scumm; +bool is_sword2; +//extern Scumm *g_scumm; //extern SimonEngine *g_simon; //OSystem *g_system; //SoundMixer *g_mixer; -Config *g_config; +//Config *g_config; OSystem::TimerProc timer_callback; int timer_interval; @@ -429,6 +433,7 @@ bool save_hide_toolbar; bool keyboard_override; bool _get_key_mapping; +bool _force_get_key_mapping; static char _directory[MAX_PATH]; bool select_game; bool need_GAPI; @@ -474,9 +479,9 @@ bool isSmartphone() { } void close_GAPI() { - g_config->setBool("Sound", sound_activated, "wince"); - g_config->setInt("DisplayMode", GetScreenMode(), "wince"); - g_config->flush(); + ConfMan.set("Sound", sound_activated, "wince"); + ConfMan.set("DisplayMode", GetScreenMode(), "wince"); + ConfMan.flushToDisk(); dynamicSHFullScreen(hWnd_Window, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON); dynamicGXCloseInput(); dynamicGXCloseDisplay(); @@ -571,9 +576,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin freelook = false; noGAPI = 0; - g_config = new Config("scummvm.ini", "scummvm"); - g_config->set_writing(true); - // See if we're running on a Windows CE version supporting aygshell aygshell_handle = LoadLibrary(TEXT("aygshell.dll")); if (aygshell_handle) { @@ -638,7 +640,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin fclose(test); } else - if (g_config->getBool("NoDirectVideo", false, "wince")) + if (ConfMan.getBool("NoDirectVideo", "wince")) noGAPI = 1; } @@ -678,24 +680,30 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLin gfx_mode_switch = false; } - sound = g_config->getBool("Sound", true, "wince"); + if (ConfMan.get("Sound", "wince").isEmpty()) + sound = true; + else + sound = ConfMan.getBool("Sound", "wince"); if (sound) sound_activated = sound; else sound_activated = true; - FM_high_quality = g_config->getBool("FMHighQuality", false, "wince"); - g_config->setBool("FMHighQuality", FM_high_quality, "wince"); + FM_high_quality = ConfMan.getBool("FMHighQuality", "wince"); + ConfMan.set("FMHighQuality", FM_high_quality, "wince"); - _thread_priority = g_config->getInt("SoundThreadPriority", -1, "wince"); + if (ConfMan.get("SoundThreadPriority", "wince").isEmpty()) + _thread_priority = -1; + else + _thread_priority = ConfMan.getInt("SoundThreadPriority", "wince"); if (_thread_priority < 0) { #ifdef SH3 _thread_priority = THREAD_PRIORITY_NORMAL; #else _thread_priority = THREAD_PRIORITY_ABOVE_NORMAL; #endif - g_config->setInt("SoundThreadPriority", _thread_priority, "wince"); - g_config->flush(); + ConfMan.set("SoundThreadPriority", _thread_priority, "wince"); + ConfMan.flushToDisk(); } select_game = true; @@ -785,6 +793,36 @@ bool checkOggSampleRate(char *directory) { } #endif +void save_key_mapping() { + char tempo[1024]; + const unsigned int *work_keys; +// const unsigned char *work; + int i; + + tempo[0] = '\0'; + work_keys = getActionKeys(); + for (i=0; i<TOTAL_ACTIONS; i++) { + char x[4]; + sprintf(x, "%.4x ", work_keys[i]); + strcat(tempo, x); + } + ConfMan.set("ActionKeys", tempo, "wince"); + +/* + tempo[0] = '\0'; + + work = getActionTypes(); + for (i=0; i<TOTAL_ACTIONS; i++) { + char x[3]; + sprintf(x, "%.2x ", work[i]); + strcat(tempo, x); + } + ConfMan.set("ActionTypes", tempo, "wince"); +*/ + + ConfMan.flushToDisk(); +} + void runGame(char *game_name) { int argc = 4; @@ -803,7 +841,7 @@ void runGame(char *game_name) { argv[1] = argdir; - no_music = g_config->getBool("NoMusic", false, "wince"); + no_music = ConfMan.getBool("NoMusic", "wince"); //sprintf(music, "-e%s", (no_music ? "null" : "wince")); sprintf(music, "-e%s", (no_music ? "null" : "adlib")); @@ -826,12 +864,12 @@ void runGame(char *game_name) { monkey_keyboard = true; } - if (strcmp(game_name, "comi") == 0) { + if (strcmp(game_name, "comi") == 0 || is_sword2) { high_res = 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 || strcmp(game_name, "comi") == 0); + new_audio_rate = (strcmp(game_name, "dig") == 0 || strcmp(game_name, "ft") == 0 || strcmp(game_name, "comi") == 0 || is_sword2); #ifdef USE_VORBIS // Modify the sample rate on the fly if OGG is involved @@ -840,31 +878,64 @@ void runGame(char *game_name) { new_audio_rate = checkOggSampleRate(_directory); #endif + ConfMan.set("versioninfo", gScummVMVersion, Common::ConfigManager::kApplicationDomain); + + // Load the plugins + PluginManager::instance().loadPlugins(); + + // Parse the command line infomation detector.parseCommandLine(argc, argv); - if (detector.detectMain()) + // Create the system object + OSystem *system = OSystem::instance(); + + // Create the timer services + g_timer = new Timer(system); + + if (!detector.detectMain()) //return (-1); return; - OSystem *system = detector.createSystem(); - mainClass = (OSystem_WINCE3*)system; /* Start the engine */ - is_simon = (strcmp(detector._plugin.getName(), "simon") == 0); - is_bass = (strcmp(detector._plugin.getName(), "sky") == 0); + is_simon = (strcmp(detector._plugin->getName(), "simon") == 0); + is_bass = (strcmp(detector._plugin->getName(), "sky") == 0); + is_sword2 = (strcmp(detector._plugin->getName(), "sword2") == 0); - if (smartphone || strcmp(game_name, "samnmax") == 0 || strcmp(game_name, "dig") == 0 || strcmp(game_name, "ft") == 0 || strcmp(game_name, "comi") == 0) + if (smartphone || strcmp(game_name, "samnmax") == 0 || strcmp(game_name, "dig") == 0 || strcmp(game_name, "ft") == 0 || strcmp(game_name, "comi") == 0 || is_sword2) hide_cursor = FALSE; else hide_cursor = TRUE; - engine = Engine::createFromDetector(&detector, system); + engine = detector.createEngine(system); keypad_init(); load_key_mapping(); + /* See if we need to force a mapping */ + + if (!smartphone && (is_bass || strcmp(game_name, "samnmax") || strcmp(game_name, "comi") || is_sword2) && !isRightClickSet()) { + Cls(); + drawWaitSelectKey(); + _force_get_key_mapping = true; + while (_force_get_key_mapping) { + MSG msg; + + if (!PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + Sleep(100); + else { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + save_key_mapping(); + Cls(); + drawWait(); + } + engine->go(); //return 0; @@ -1022,11 +1093,11 @@ void load_key_mapping() { memset(actions_keys, 0, sizeof(actions_keys)); - version = g_config->getInt("KeysVersion", 0, "wince"); + version = ConfMan.getInt("KeysVersion", "wince"); memset(actions_keys, 0, TOTAL_ACTIONS); - current = g_config->get("ActionKeys", "wince"); + current = ConfMan.get("ActionKeys", "wince").c_str(); if (current && version == CURRENT_KEYS_VERSION) { for (i=0; i<TOTAL_ACTIONS; i++) { char x[6]; @@ -1049,7 +1120,7 @@ void load_key_mapping() { actions[3] = ACTION_SKIP; actions[4] = ACTION_HIDE; - current = g_config->get("ActionTypes", "wince"); + current = ConfMan.get("ActionTypes", "wince"); if (current && version) { for (i=0; i<TOTAL_ACTIONS; i++) { char x[6]; @@ -1065,41 +1136,11 @@ void load_key_mapping() { */ if (!version || version != CURRENT_KEYS_VERSION) { - g_config->setInt("KeysVersion", CURRENT_KEYS_VERSION, "wince"); - g_config->flush(); + ConfMan.set("KeysVersion", CURRENT_KEYS_VERSION, "wince"); + ConfMan.flushToDisk(); } } -void save_key_mapping() { - char tempo[1024]; - const unsigned int *work_keys; -// const unsigned char *work; - int i; - - tempo[0] = '\0'; - work_keys = getActionKeys(); - for (i=0; i<TOTAL_ACTIONS; i++) { - char x[4]; - sprintf(x, "%.4x ", work_keys[i]); - strcat(tempo, x); - } - g_config->set("ActionKeys", tempo, "wince"); - -/* - tempo[0] = '\0'; - - work = getActionTypes(); - for (i=0; i<TOTAL_ACTIONS; i++) { - char x[3]; - sprintf(x, "%.2x ", work[i]); - strcat(tempo, x); - } - g_config->set("ActionTypes", tempo, "wince"); -*/ - - g_config->flush(); -} - /*************** Hardware keys support ***********/ void OSystem_WINCE3::addEventKeyPressed(int ascii_code) { @@ -1174,15 +1215,15 @@ void action_freelook() { void action_boss() { SHELLEXECUTEINFO se; - g_config->setBool("Sound", sound_activated, "wince"); - g_config->setInt("DisplayMode", GetScreenMode(), "wince"); - g_config->flush(); + ConfMan.set("Sound", sound_activated, "wince"); + ConfMan.set("DisplayMode", GetScreenMode(), "wince"); + ConfMan.flushToDisk(); sound_activated = false; toolbar_drawn = false; hide_toolbar = true; Cls(); - g_scumm->requestSave(0, "BOSS"); - g_scumm->scummLoop(0); + Scumm::g_scumm->requestSave(0, "BOSS"); + Scumm::g_scumm->scummLoop(0); dynamicGXCloseInput(); dynamicGXCloseDisplay(); SDL_AudioQuit(); @@ -1200,14 +1241,14 @@ void action_skip() { //OSystem_WINCE3* system; //system = (OSystem_WINCE3*)g_scumm->_system; - if (is_simon || is_bass) { + if (is_simon || is_bass || is_sword2) { //system->addEventKeyPressed(mapKey(VK_ESCAPE)); mainClass->addEventKeyPressed(mapKey(VK_ESCAPE)); return; } //system->addEventKeyPressed(KEY_MAGIC_SKIP); - mainClass->addEventKeyPressed(KEY_ALL_SKIP); + mainClass->addEventKeyPressed(Scumm::KEY_ALL_SKIP); /* if (g_scumm->vm.cutScenePtr[g_scumm->vm.cutSceneStackPointer] || g_scumm->_insaneState) system->addEventKeyPressed(g_scumm->_vars[g_scumm->VAR_CUTSCENEEXIT_KEY]); @@ -1253,7 +1294,7 @@ void action_cursoronoff() { } void action_subtitleonoff() { - g_scumm->_noSubtitles = !g_scumm->_noSubtitles; + Scumm::g_scumm->_noSubtitles = !Scumm::g_scumm->_noSubtitles; } void keypad_init() { @@ -1328,7 +1369,7 @@ OSystem *OSystem_WINCE3::create(int gfx_mode, bool full_screen) { drawWait(); // Set mode, portrait or landscape - display_mode = g_config->get("DisplayMode", "wince"); + display_mode = ConfMan.get("DisplayMode", "wince").c_str(); if (display_mode && !(high_res || noGAPI || !gfx_mode_switch)) SetScreenMode(atoi(display_mode)); @@ -1427,8 +1468,8 @@ void OSystem_WINCE3::copy_rect(const byte *buf, int pitch, int x, int y, int w, undraw_mouse(); if (!select_game && monkey_keyboard && ( - g_scumm->VAR(g_scumm->VAR_ROOM) != 108 && // monkey 2 - g_scumm->VAR(g_scumm->VAR_ROOM) != 90)) { // monkey 1 floppy + Scumm::g_scumm->VAR(Scumm::g_scumm->VAR_ROOM) != 108 && // monkey 2 + Scumm::g_scumm->VAR(Scumm::g_scumm->VAR_ROOM) != 90)) { // monkey 1 floppy monkey_keyboard = false; draw_keyboard = false; toolbar_drawn = false; @@ -1486,6 +1527,7 @@ void OSystem_WINCE3::update_screen() { } else { int i; + beginBltPart(); for (i=0; i<num_of_dirty_square; i++) { if (wide_screen && extra_wide_screen) @@ -1502,6 +1544,7 @@ void OSystem_WINCE3::update_screen() { else 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, false); } + endBltPart(); num_of_dirty_square = 0; } } |