--- 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();