[Scummvm-cvs-logs] SF.net SVN: scummvm:[44564] scummvm/trunk/engines/kyra

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat Oct 3 22:42:26 CEST 2009


Revision: 44564
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44564&view=rev
Author:   athrxx
Date:     2009-10-03 20:42:26 +0000 (Sat, 03 Oct 2009)

Log Message:
-----------
LOL/PC-98: add keyboard support

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/gui_lol.cpp
    scummvm/trunk/engines/kyra/kyra_v1.cpp
    scummvm/trunk/engines/kyra/kyra_v1.h
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/script_tim.cpp
    scummvm/trunk/engines/kyra/text_lol.cpp

Modified: scummvm/trunk/engines/kyra/gui_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lol.cpp	2009-10-03 20:35:13 UTC (rev 44563)
+++ scummvm/trunk/engines/kyra/gui_lol.cpp	2009-10-03 20:42:26 UTC (rev 44564)
@@ -266,14 +266,9 @@
 	if (offs)
 		_screen->copyRegion(294, y, 182 + offs, y, 18, 8, 6, _screen->_curPage, Screen::CR_NO_P_CHECK);
 
-	Screen::FontId of;
-	if (_flags.use16ColorMode)
-		of = _screen->setFont(Screen::FID_SJIS_FNT);
-
+	Screen::FontId of = _flags.use16ColorMode ? _screen->setFont(Screen::FID_SJIS_FNT) : _screen->_currentFont;
 	_screen->fprintString("%d", 200 + offs, y, col, 0, _flags.use16ColorMode ? 2 : 6, value);
-
-	if (_flags.use16ColorMode)
-		_screen->setFont(of);
+	_screen->setFont(of);
 }
 
 void LoLEngine::gui_changeCharacterStats(int charNum) {
@@ -815,13 +810,9 @@
 		inputFlag = 0;
 	}
 
-	switch (inputFlag) {
-	case 43:
-	case 61:
-		// space or enter
+	if (inputFlag == _keyMap[Common::KEYCODE_SPACE] || inputFlag == _keyMap[Common::KEYCODE_RETURN]) {
 		snd_stopSpeech(true);
-		break;
-	case 55:
+	} else if (inputFlag == _keyMap[Common::KEYCODE_SLASH]) {
 		if (_weaponsDisabled || _availableSpells[1] == -1)
 			return;
 
@@ -829,13 +820,7 @@
 		if (_availableSpells[++_selectedSpell] == -1)
 			_selectedSpell = 0;
 		gui_highlightSelectedSpell(true);
-
 		gui_drawAllCharPortraitsWithStats();
-			break;
-	case 0x71a:
-		break;
-	default:
-		break;
 	}
 }
 
@@ -852,55 +837,10 @@
 	} else {
 		evt.type = Common::EVENT_KEYDOWN;
 
-		switch (eventType) {
-		case 96:
-			evt.kbd.keycode = Common::KEYCODE_UP;
-			break;
-		case 102:
-			evt.kbd.keycode = Common::KEYCODE_RIGHT;
-			break;
-		case 97:
-			evt.kbd.keycode = Common::KEYCODE_DOWN;
-			break;
-		case 92:
-			evt.kbd.keycode = Common::KEYCODE_LEFT;
-			break;
-		case 91:
-			evt.kbd.keycode = Common::KEYCODE_HOME;
-			break;
-		case 101:
-			evt.kbd.keycode = Common::KEYCODE_PAGEUP;
-			break;
-		case 112:
-			evt.kbd.keycode = Common::KEYCODE_F1;
-			break;
-		case 113:
-			evt.kbd.keycode = Common::KEYCODE_F2;
-			break;
-		case 114:
-			evt.kbd.keycode = Common::KEYCODE_F3;
-			break;
-		case 25:
-			evt.kbd.keycode = Common::KEYCODE_o;
-			break;
-		case 20:
-			evt.kbd.keycode = Common::KEYCODE_r;
-			break;
-		case 110:
-			evt.kbd.keycode = Common::KEYCODE_ESCAPE;
-			break;
-		case 43:
-			evt.kbd.keycode = Common::KEYCODE_SPACE;
-			break;
-		case 61:
-			evt.kbd.keycode = Common::KEYCODE_RETURN;
-			break;
-		case 55:
-			evt.kbd.keycode = Common::KEYCODE_SLASH;
-			break;
-		default:
-			break;
-		}
+		for (Common::HashMap<int, int16>::const_iterator c = _keyMap.begin(); c != _keyMap.end(); ++c) {
+			if (c->_value == eventType)
+				evt.kbd.keycode = (Common::KeyCode) c->_key;
+		}		
 	}
 
 	removeInputTop();
@@ -2343,9 +2283,7 @@
 	// a menu has scroll buttons or slider bars.
 	uint8 hasSpecialButtons = 0;
 
-	Screen::FontId of;
-	if (_vm->gameFlags().use16ColorMode)
-		of = _screen->setFont(Screen::FID_SJIS_FNT);
+	Screen::FontId of = _vm->gameFlags().use16ColorMode ? _screen->setFont(Screen::FID_SJIS_FNT) : _screen->_currentFont;
 
 	while (_displayMenu) {
 		_vm->_mouseX = _vm->_mouseY = 0;
@@ -2554,8 +2492,7 @@
 		_newMenu = 0;
 	}
 
-	if (_vm->gameFlags().use16ColorMode)
-		_screen->setFont(of);
+	_screen->setFont(of);
 
 	return _menuResult;
 }

Modified: scummvm/trunk/engines/kyra/kyra_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v1.cpp	2009-10-03 20:35:13 UTC (rev 44563)
+++ scummvm/trunk/engines/kyra/kyra_v1.cpp	2009-10-03 20:42:26 UTC (rev 44564)
@@ -202,6 +202,8 @@
 			_gameToLoad = -1;
 	}
 
+	setupKeyMap();
+
 	// Prevent autosave on game startup
 	_lastAutosave = _system->getMillis();
 
@@ -212,6 +214,7 @@
 	for (Common::Array<const Opcode*>::iterator i = _opcodes.begin(); i != _opcodes.end(); ++i)
 		delete *i;
 	_opcodes.clear();
+	_keyMap.clear();
 
 	delete _res;
 	delete _staticres;
@@ -278,62 +281,8 @@
 				} else if (event.kbd.keycode == 'q') {
 					quitGame();
 				}
-			} else {
-				switch (event.kbd.keycode) {
-				case Common::KEYCODE_SPACE:
-					keys = 61;
-					break;
-				case Common::KEYCODE_RETURN:
-					keys = 43;
-					break;
-				case Common::KEYCODE_UP:
-				case Common::KEYCODE_KP8:
-					keys = 96;
-					break;
-				case Common::KEYCODE_RIGHT:
-				case Common::KEYCODE_KP6:
-					keys = 102;
-					break;
-				case Common::KEYCODE_DOWN:
-				case Common::KEYCODE_KP2:
-					keys = 97;
-					break;
-				case Common::KEYCODE_LEFT:
-				case Common::KEYCODE_KP4:
-					keys = 92;
-					break;
-				case Common::KEYCODE_HOME:
-				case Common::KEYCODE_KP7:
-					keys = 91;
-					break;
-				case Common::KEYCODE_PAGEUP:
-				case Common::KEYCODE_KP9:
-					keys = 101;
-					break;
-				case Common::KEYCODE_F1:
-					keys = 112;
-					break;
-				case Common::KEYCODE_F2:
-					keys = 113;
-					break;
-				case Common::KEYCODE_F3:
-					keys = 114;
-					break;
-				case Common::KEYCODE_o:
-					keys = 25;
-					break;
-				case Common::KEYCODE_r:
-					keys = 20;
-					break;
-				case Common::KEYCODE_SLASH:
-					keys = 55;
-					break;
-				case Common::KEYCODE_ESCAPE:
-					keys = 110;
-					break;
-				default:
-					keys = 0;
-				}
+			} else {				
+				keys = _keyMap[event.kbd.keycode];
 
 				// When we got an keypress, which we might need to handle,
 				// break the event loop and pass it to GUI code.
@@ -398,6 +347,26 @@
 	}
 }
 
+void KyraEngine_v1::setupKeyMap() {
+	static const Common::KeyCode keyboardEvents[] = {
+		Common::KEYCODE_SPACE,	Common::KEYCODE_RETURN,	Common::KEYCODE_UP,		Common::KEYCODE_KP8,
+		Common::KEYCODE_RIGHT,	Common::KEYCODE_KP6,	Common::KEYCODE_DOWN,	Common::KEYCODE_KP2,
+		Common::KEYCODE_LEFT,	Common::KEYCODE_KP4,	Common::KEYCODE_HOME,	Common::KEYCODE_KP7,
+		Common::KEYCODE_PAGEUP,	Common::KEYCODE_KP9,	Common::KEYCODE_F1,		Common::KEYCODE_F2,
+		Common::KEYCODE_F3,		Common::KEYCODE_o,		Common::KEYCODE_r,		Common::KEYCODE_SLASH,
+		Common::KEYCODE_ESCAPE
+	};
+
+	static const int16 keyCodesDOS[] = { 61, 43, 96, 96, 102, 102, 97, 97, 92, 92, 91, 91, 101, 101, 112, 113, 114, 25, 20, 55, 110};
+	static const int16 keyCodesPC98[] = { 53, 29, 68, 68, 73, 73, 72, 72, 71, 71, 67, 67, 69, 69, 99, 100, 101, 25, 20, 55, 1 };
+	
+	const int16 *keyCodes = _flags.platform == Common::kPlatformPC98 ? keyCodesPC98 : keyCodesDOS;	
+	_keyMap.clear();
+
+	for (int i = 0; i < ARRAYSIZE(keyboardEvents); i++)
+		_keyMap[keyboardEvents[i]] = keyCodes[i];
+}
+
 void KyraEngine_v1::updateInput() {
 	Common::Event event;
 

Modified: scummvm/trunk/engines/kyra/kyra_v1.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v1.h	2009-10-03 20:35:13 UTC (rev 44563)
+++ scummvm/trunk/engines/kyra/kyra_v1.h	2009-10-03 20:42:26 UTC (rev 44564)
@@ -205,6 +205,7 @@
 	Debugger *_debugger;
 
 	// input
+	void setupKeyMap();
 	void updateInput();
 	int checkInput(Button *buttonList, bool mainLoop = false, int eventFlag = 0x8000);
 	void removeInputTop();
@@ -222,6 +223,7 @@
 		operator Common::Event() const { return event; }
 	};
 	Common::List<Event> _eventList;
+	Common::HashMap<int, int16> _keyMap;
 
 	// config specific
 	virtual void registerDefaultSettings();

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-10-03 20:35:13 UTC (rev 44563)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-10-03 20:42:26 UTC (rev 44564)
@@ -4001,7 +4001,7 @@
 			for (int i = 0; i < 1024; i++)
 				 _levelBlockProperties[i].flags |= 7;
 			_mapUpdateNeeded = true;
-		} else if (f == 0x6e) {
+		} else if (f == _keyMap[Common::KEYCODE_ESCAPE]) {
 			exitAutomap = true;
 		}
 
@@ -4239,23 +4239,28 @@
 }
 
 bool LoLEngine::automapProcessButtons(int inputFlag) {
-	if (inputFlag != 199)
-		return false;
-
 	int r = -1;
-	if (posWithinRect(_mouseX, _mouseY, 252, 175, 273, 200))
+	if (inputFlag == _keyMap[Common::KEYCODE_RIGHT] || inputFlag == _keyMap[Common::KEYCODE_KP6]) {
 		r = 0;
-	else if (posWithinRect(_mouseX, _mouseY, 231, 175, 252, 200))
+	} else if (inputFlag == _keyMap[Common::KEYCODE_LEFT] || inputFlag == _keyMap[Common::KEYCODE_KP4]) {
 		r = 1;
-	else if (posWithinRect(_mouseX, _mouseY, 275, 175, 315, 197))
-		r = 2;
+	} else if (inputFlag == 199) {
+		if (posWithinRect(_mouseX, _mouseY, 252, 175, 273, 200))
+			r = 0;
+		else if (posWithinRect(_mouseX, _mouseY, 231, 175, 252, 200))
+			r = 1;
+		else if (posWithinRect(_mouseX, _mouseY, 275, 175, 315, 197))
+			r = 2;
 
-	printMapExitButtonText();
+		printMapExitButtonText();
 
-	while (inputFlag == 199 || inputFlag == 200) {
-		inputFlag = checkInput(0, false);
-		removeInputTop();
-		delay(_tickLength);
+		while (inputFlag == 199 || inputFlag == 200) {
+			inputFlag = checkInput(0, false);
+			removeInputTop();
+			delay(_tickLength);
+		}
+	} else {
+		return false;
 	}
 
 	if (r == 0) {

Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp	2009-10-03 20:35:13 UTC (rev 44563)
+++ scummvm/trunk/engines/kyra/script_tim.cpp	2009-10-03 20:42:26 UTC (rev 44564)
@@ -1234,28 +1234,7 @@
 		if (e)
 			_vm->gui_notifyButtonListChanged();
 
-		switch (e) {
-		case 43:
-		case 61:
-			_vm->snd_stopSpeech(true);
-			//_dlgTimer = 0;
-			res = _dialogueHighlightedButton + 1;
-			break;
-
-		case 92:
-		case 97:
-			if (_dialogueNumButtons > 1 && _dialogueHighlightedButton > 0)
-				_dialogueHighlightedButton--;
-			break;
-
-		case 96:
-		case 102:
-			if (_dialogueNumButtons > 1 && _dialogueHighlightedButton < (_dialogueNumButtons - 1))
-				_dialogueHighlightedButton++;
-			break;
-
-		case 200:
-		case 202:
+		if (e == 200 || e == 202) {
 			x = _dialogueButtonPosX;
 
 			for (int i = 0; i < _dialogueNumButtons; i++) {
@@ -1267,10 +1246,15 @@
 				}
 				x += _dialogueButtonXoffs;
 			}
-			break;
-
-		default:
-			break;
+		} else if (e == _vm->_keyMap[Common::KEYCODE_SPACE] || e == _vm->_keyMap[Common::KEYCODE_RETURN]) {
+			_vm->snd_stopSpeech(true);
+			res = _dialogueHighlightedButton + 1;
+		} else if (e == _vm->_keyMap[Common::KEYCODE_LEFT] || e == _vm->_keyMap[Common::KEYCODE_DOWN]) {
+			if (_dialogueNumButtons > 1 && _dialogueHighlightedButton > 0)
+				_dialogueHighlightedButton--;
+		} else if (e == _vm->_keyMap[Common::KEYCODE_RIGHT] || e == _vm->_keyMap[Common::KEYCODE_UP]) {
+			if (_dialogueNumButtons > 1 && _dialogueHighlightedButton < (_dialogueNumButtons - 1))
+				_dialogueHighlightedButton++;
 		}
 	}
 

Modified: scummvm/trunk/engines/kyra/text_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_lol.cpp	2009-10-03 20:35:13 UTC (rev 44563)
+++ scummvm/trunk/engines/kyra/text_lol.cpp	2009-10-03 20:42:26 UTC (rev 44564)
@@ -169,7 +169,7 @@
 	}
 
 	int cp = _screen->setCurPage(0);
-	Screen::FontId of = _screen->setFont(Screen::FID_9_FNT);
+	Screen::FontId of = _screen->setFont(_vm->gameFlags().use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_9_FNT);
 
 	preprocessString(str, script, paramList, paramIndex);
 	_numCharsTotal = strlen(_dialogueBuffer);
@@ -581,7 +581,6 @@
 
 			int n2 = 0;
 			int n1 = s - 1;
-			//bool ct = false;
 
 			while (n1 > 0) {
 				//cut off line after last space
@@ -741,26 +740,15 @@
 
 		_vm->gui_notifyButtonListChanged();
 
-		switch (inputFlag) {
-		case 43:
-		case 61:
+		if (inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN]) {
 			loop = false;
-			break;
-
-		case 199:
-		case 201:
+		} else if (inputFlag == 199 || inputFlag == 201) {
 			if (_vm->posWithinRect(_vm->_mouseX, _vm->_mouseY, x, y, x + 74, y + 9))
 				target = true;
-			break;
 
-		case 200:
-		case 202:
+		} else if (inputFlag == 199 || inputFlag == 201) {
 			if (target)
 				loop = false;
-			break;
-
-		default:
-			break;
 		}
 	} while (loop);
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list