rendered paste body--- exult-1.2-orig/exult.cc 2004-05-23 07:14:30.000000000 +0200+++ exult-1.2/exult.cc 2008-01-14 15:28:19.000000000 +0100@@ -89,6 +89,8 @@ #include "exult_si_flx.h" #include "crc.h" +#define FAKE_RMB_KEY SDLK_F7+ #ifndef UNDER_CE using std::atof; using std::cerr;@@ -115,6 +117,8 @@ int usecode_trace = 0; // Do we trace U // 0 = no, 1 = short, 2 = long bool combat_trace = false; // show combat messages? +bool fake_rmb = false; // fake the right mouse button+ // Save game compression level int save_compression = 1; bool ignore_crc = false;@@ -993,7 +997,7 @@ static void Handle_event if (dont_move_mode) break; int x = event.button.x/scale, y = event.button.y/scale;- if (event.button.button == 1)+ if (event.button.button == 1 && !fake_rmb) { #ifdef USE_EXULTSTUDIO if (cheat.in_map_editor())@@ -1028,7 +1032,7 @@ static void Handle_event { ActionTarget(0); }- if (event.button.button == 3) {+ if (event.button.button == 1 && fake_rmb) { // Try removing old queue entry. gwin->get_tqueue()->remove(gwin->get_main_actor());@@ -1067,7 +1071,7 @@ static void Handle_event if (dont_move_mode) break; int x = event.button.x/scale, y = event.button.y/scale;- if (event.button.button == 3)+ if (event.button.button == 1 && fake_rmb) { uint32 curtime = SDL_GetTicks(); // Last click within .5 secs?@@ -1127,7 +1131,7 @@ static void Handle_event right_on_gump = false; // Dragging with left button?- if (event.motion.state & SDL_BUTTON(1))+ if (event.motion.state & SDL_BUTTON(1) && !fake_rmb) { #ifdef USE_EXULTSTUDIO // Painting? if (cheat.in_map_editor())@@ -1151,7 +1155,7 @@ static void Handle_event event.motion.y / scale); } // Dragging with right?- else if ((event.motion.state & SDL_BUTTON(3)))+ else if ((event.motion.state & SDL_BUTTON(1)) && fake_rmb) gwin->start_actor(event.motion.x / scale, event.motion.y / scale, Mouse::mouse->avatar_speed); #ifdef USE_EXULTSTUDIO // Painting?@@ -1208,7 +1212,8 @@ static void Handle_event break; case SDL_KEYDOWN: // Keystroke. case SDL_KEYUP:- if (!dragging) // ESC while dragging causes crashes.+ if (event.key.keysym.sym == FAKE_RMB_KEY) { fake_rmb = (event.type==SDL_KEYDOWN); }+ else if (!dragging) // ESC while dragging causes crashes. keybinder->HandleEvent(event); break; #ifdef USE_EXULTSTUDIO@@ -1274,7 +1279,7 @@ static int Get_click switch (event.type) { case SDL_MOUSEBUTTONDOWN:- if (event.button.button == 3)+ if (event.button.button == 1 && fake_rmb) rightclick = true; else if (drag_ok && event.button.button == 1) {@@ -1285,7 +1290,7 @@ static int Get_click } break; case SDL_MOUSEBUTTONUP:- if (event.button.button == 1)+ if (event.button.button == 1 && !fake_rmb) { x = event.button.x / scale; y = event.button.y / scale;@@ -1298,7 +1303,7 @@ static int Get_click return (1); } }- else if (event.button.button == 3) {+ else if (event.button.button == 1 && fake_rmb) { // Just stop. Don't get followers! gwin->get_main_actor()->stop(); if (gwin->get_mouse3rd() && rightclick) {@@ -1318,6 +1323,10 @@ static int Get_click dragged = gwin->drag(mx, my); break; }+ case SDL_KEYUP:+ if (event.key.keysym.sym == FAKE_RMB_KEY)+ fake_rmb = false;+ break; case SDL_KEYDOWN: { //+++++ convert to unicode first?@@ -1333,6 +1342,9 @@ static int Get_click case SDLK_NUMLOCK: case SDLK_CAPSLOCK: case SDLK_SCROLLOCK: break;+ case FAKE_RMB_KEY:+ fake_rmb = true;+ break; default: if ((c == 's') && (event.key.keysym.mod & KMOD_ALT) &&@@ -1553,7 +1565,7 @@ void Wizard_eye { // Right mouse button down? int x, y; int ms = SDL_GetMouseState(&x, &y);- if (SDL_BUTTON(3) & ms)+ if (SDL_BUTTON(1) & ms && fake_rmb) Shift_wizards_eye(x/scale, y/scale); gwin->set_all_dirty(); gwin->paint_dirty();