$snap_numberofkeys = 19; // finds the current settings and puts them in $snap_bindings function snap_get_current_keys() { $snap_bindings[0] = snap_get_binding(prevWeapon); $snap_bindings[1] = snap_get_binding(nextWeapon); $snap_bindings[2] = snap_get_binding(placeMine); $snap_bindings[3] = snap_get_binding(placeBeacon); $snap_bindings[4] = snap_get_binding(useTargetingLaser); $snap_bindings[5] = snap_get_binding(throwWeapon); $snap_bindings[6] = snap_get_binding(throwPack); $snap_bindings[7] = snap_get_binding(throwFlag); $snap_bindings[8] = snap_get_binding(toggleZoom); $snap_bindings[9] = snap_get_binding(toggleCommanderMap); $snap_bindings[10] = snap_get_binding(jump); $snap_bindings[11] = snap_get_binding(setZoomFOV); $snap_bindings[12] = snap_get_binding(throwGrenade); $snap_bindings[13] = snap_get_binding(useBackPack); $snap_bindings[14] = snap_get_binding(useRepairKit); $snap_bindings[15] = snap_get_binding(moveforward); $snap_bindings[16] = snap_get_binding(movebackward); $snap_bindings[17] = snap_get_binding(moveleft); $snap_bindings[18] = snap_get_binding(moveright); $snap_mousespeed = mfloor(moveMap.getscale(mouse, xaxis) * 8 - 0.5); if ($snap_mousespeed < 0) $snap_mousespeed = 0; $snap_mouseinv = moveMap.isinverted(mouse, yaxis); } // gets the key bound to %action function snap_get_binding(%action) { return getfield(movemap.getbinding(%action), 1); } // encode reads the bindings in $snap_bindings and returns a short string function snap_encode() { %code["equals"] = "00000000"; %code["lbracket"] = "00000001"; %code["slash"] = "00000010"; %code["lessthan"] = "00000011"; %code["comma"] = "00000100"; %code["period"] = "00000101"; %code["semicolon"] = "00000110"; %code["apostrophe"] = "00000111"; %code["numpad9"] = "000010000"; %code["numpadmult"] = "000010001"; %code["numpad7"] = "000010010"; %code["numpad8"] = "000010011"; %code["numpadminus"] = "000010100"; %code["numpadadd"] = "0000101010"; %code["numpadsep"] = "0000101011"; %code["numpad5"] = "0000101100"; %code["numpad6"] = "0000101101"; %code["numpad3"] = "0000101110"; %code["numpad4"] = "0000101111"; %code["numpad1"] = "0000110"; %code["numpad2"] = "0000111"; %code["ctrl b"] = "00010000"; %code["ctrl c"] = "00010001"; %code["ctrl numpad5"] = "0001001000000"; %code["ctrl numpad6"] = "0001001000001"; %code["ctrl numpad3"] = "0001001000010"; %code["ctrl numpad4"] = "0001001000011"; %code["ctrl numpad9"] = "0001001000100"; %code["ctrl numpadmult"] = "0001001000101"; %code["ctrl numpad7"] = "0001001000110"; %code["ctrl numpad8"] = "0001001000111"; %code["ctrl numpadminus"] = "0001001001000"; %code["ctrl numpaddecimal"] = "0001001001001"; %code["ctrl numpadadd"] = "0001001001010"; %code["ctrl numpadsep"] = "0001001001011"; %code["ctrl numpad1"] = "0001001001100"; %code["ctrl numpad2"] = "0001001001101"; %code["ctrl *"] = "0001001001110"; %code["ctrl numpaddivide"] = "00010010011110"; %code["ctrl numpadenter"] = "00010010011111"; %code["ctrl a"] = "000100101"; %code["ctrl d"] = "000100110"; %code["ctrl e"] = "000100111"; %code["ctrl f"] = "000101"; %code["ctrl x"] = "00011000"; %code["ctrl y"] = "00011001"; %code["shift space"] = "000110100"; %code["shift o"] = "00011010100"; %code["shift p"] = "00011010101"; %code["shift y"] = "00011010110"; %code["shift z"] = "00011010111"; %code["shift u"] = "00011011000"; %code["shift v"] = "00011011001"; %code["shift q"] = "00011011010"; %code["shift r"] = "00011011011"; %code["shift s"] = "00011011100"; %code["shift t"] = "00011011101"; %code["shift b"] = "000110111100"; %code["shift c"] = "000110111101"; %code["shift *"] = "000110111110"; %code["shift a"] = "000110111111"; %code["ctrl q"] = "00011100"; %code["ctrl o"] = "000111010"; %code["ctrl p"] = "000111011"; %code["ctrl i"] = "000111100"; %code["ctrl j"] = "000111101"; %code["ctrl g"] = "000111110"; %code["ctrl h"] = "000111111"; %code["8"] = "0010000"; %code["9"] = "0010001"; %code["numpadenter"] = "00100100"; %code["*"] = "00100101"; %code["numpaddecimal"] = "00100110"; %code["numpaddivide"] = "00100111"; %code["lcontrol"] = "001010"; %code["rcontrol"] = "001011"; %code["button2"] = "001100"; %code["1"] = "001101"; %code["scrolllock"] = "001110000"; %code["delete"] = "0011100010"; %code["numlock"] = "0011100011"; %code["print"] = "001110010"; %code["insert"] = "001110011"; %code["lshift"] = "0011101"; %code["rshift"] = "001111"; %code["rbracket"] = "01000000"; %code["backslash"] = "01000001"; %code["tilde"] = "01000010"; %code["minus"] = "01000011"; %code["lalt"] = "0100010"; %code["ralt"] = "0100011"; %code["enter"] = "0100100"; %code["pause"] = "0100101"; %code["backspace"] = "01001100"; %code["tab"] = "01001101"; %code["return"] = "0100111"; %code["6"] = "0101000"; %code["7"] = "0101001"; %code["0"] = "0101010"; %code["numpad0"] = "0101011"; %code["y"] = "010110"; %code["z"] = "010111"; %code["o"] = "011000"; %code["p"] = "011001"; %code["m"] = "011010"; %code["n"] = "011011"; %code["u"] = "011100"; %code["v"] = "011101"; %code["q"] = "011110"; %code["r"] = "011111"; %code["g"] = "100000"; %code["h"] = "100001"; %code["e"] = "100010"; %code["f"] = "100011"; %code["k"] = "100100"; %code["l"] = "100101"; %code["i"] = "100110"; %code["j"] = "100111"; %code["home"] = "1010000"; %code["pageup"] = "10100010"; %code["end"] = "10100011"; %code["capslock"] = "1010010"; %code["pagedown"] = "1010011"; %code["ctrl z"] = "101010000"; %code["ctrl left"] = "101010001"; %code["shift f"] = "10101001000"; %code["shift g"] = "10101001001"; %code["shift m"] = "101010010100"; %code["shift n"] = "101010010101"; %code["shift k"] = "101010010110"; %code["shift l"] = "101010010111"; %code["shift e"] = "10101001100"; %code["shift d"] = "101010011010"; %code["shift numpad4"] = "1010100110110000"; %code["shift numpad5"] = "1010100110110001"; %code["shift numpad2"] = "1010100110110010"; %code["shift numpad3"] = "1010100110110011"; %code["shift numpad8"] = "1010100110110100"; %code["shift numpad9"] = "1010100110110101"; %code["shift numpad6"] = "1010100110110110"; %code["shift numpad7"] = "1010100110110111"; %code["shift numpadsep"] = "1010100110111000"; %code["shift numpadminus"] = "1010100110111001"; %code["shift numpadmult"] = "1010100110111010"; %code["shift numpadadd"] = "1010100110111011"; %code["shift numpad0"] = "1010100110111100"; %code["shift numpad1"] = "1010100110111101"; %code["shift numpadenter"] = "1010100110111110"; %code["shift numpaddecimal"] = "10101001101111110"; %code["shift numpaddivide"] = "10101001101111111"; %code["shift j"] = "101010011100"; %code["shift h"] = "1010100111010"; %code["shift i"] = "1010100111011"; %code["shift w"] = "101010011110"; %code["shift x"] = "101010011111"; %code["ctrl down"] = "1010101000"; %code["ctrl space"] = "1010101001"; %code["ctrl up"] = "1010101010"; %code["ctrl right"] = "1010101011"; %code["shift right"] = "1010101100"; %code["shift down"] = "1010101101"; %code["shift left"] = "1010101110"; %code["shift up"] = "1010101111"; %code["ctrl m"] = "101011000"; %code["ctrl n"] = "101011001"; %code["ctrl k"] = "101011010"; %code["ctrl l"] = "101011011"; %code["ctrl r"] = "1010111"; %code["right"] = "101100"; %code["down"] = "101101"; %code["left"] = "101110"; %code["up"] = "101111"; %code["c"] = "110000"; %code["d"] = "110001"; %code["a"] = "110010"; %code["b"] = "110011"; %code["w"] = "110100"; %code["x"] = "110101"; %code["s"] = "110110"; %code["t"] = "110111"; %code["right"] = "111000"; %code["down"] = "111001"; %code["left"] = "111010"; %code["up"] = "111011"; %code["4"] = "1111000"; %code["5"] = "1111001"; %code["2"] = "1111010"; %code["3"] = "1111011"; %code["space"] = "1111100"; %code["ctrl numpad0"] = "1111101"; %code["ctrl u"] = "111111000"; %code["ctrl v"] = "111111001"; %code["ctrl s"] = "111111010"; %code["ctrl t"] = "111111011"; %code["ctrl w"] = "1111111"; %l = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-"; //get bind settings into $snap_bindings snap_get_current_keys(); // build binary string %z = ""; for (%i = 0; %i < $snap_numberofkeys; %i++) %z = %z @ %code[$snap_bindings[%i]]; %z = %z @ snap_int_to_binstr($snap_mousespeed, 4) @ $snap_mouseinv; // pad length to multiple of 6 chars while (strlen(%z) % 6) %z = %z @ "0"; // encode %j = ""; for (%i = 0; %i < strlen(%z); %i += 6) { %n = snap_binstr_to_int(getsubstr(%z, %i, 6)); %j = %j @ getsubstr(%l, %n, 1); } return %j; } function snapback( %code ) { snap( $snap_back ); } // convert a snap kode to a set of bindings in $snap_bindings function snap( %j ) { $snap_back = snap_encode(); if (%j $= "") { echo("Your current Snap Code is " @ $snap_back); // echo current snap_code tm return $snap_back; } echo("The previous Snap Code is " @ $snap_back); %code["00000000"] = "equals"; %code["00000001"] = "lbracket"; %code["00000010"] = "slash"; %code["00000011"] = "lessthan"; %code["00000100"] = "comma"; %code["00000101"] = "period"; %code["00000110"] = "semicolon"; %code["00000111"] = "apostrophe"; %code["000010000"] = "numpad9"; %code["000010001"] = "numpadmult"; %code["000010010"] = "numpad7"; %code["000010011"] = "numpad8"; %code["000010100"] = "numpadminus"; %code["0000101010"] = "numpadadd"; %code["0000101011"] = "numpadsep"; %code["0000101100"] = "numpad5"; %code["0000101101"] = "numpad6"; %code["0000101110"] = "numpad3"; %code["0000101111"] = "numpad4"; %code["0000110"] = "numpad1"; %code["0000111"] = "numpad2"; %code["00010000"] = "ctrl b"; %code["00010001"] = "ctrl c"; %code["0001001000000"] = "ctrl numpad5"; %code["0001001000001"] = "ctrl numpad6"; %code["0001001000010"] = "ctrl numpad3"; %code["0001001000011"] = "ctrl numpad4"; %code["0001001000100"] = "ctrl numpad9"; %code["0001001000101"] = "ctrl numpadmult"; %code["0001001000110"] = "ctrl numpad7"; %code["0001001000111"] = "ctrl numpad8"; %code["0001001001000"] = "ctrl numpadminus"; %code["0001001001001"] = "ctrl numpaddecimal"; %code["0001001001010"] = "ctrl numpadadd"; %code["0001001001011"] = "ctrl numpadsep"; %code["0001001001100"] = "ctrl numpad1"; %code["0001001001101"] = "ctrl numpad2"; %code["0001001001110"] = "ctrl *"; %code["00010010011110"] = "ctrl numpaddivide"; %code["00010010011111"] = "ctrl numpadenter"; %code["000100101"] = "ctrl a"; %code["000100110"] = "ctrl d"; %code["000100111"] = "ctrl e"; %code["000101"] = "ctrl f"; %code["00011000"] = "ctrl x"; %code["00011001"] = "ctrl y"; %code["000110100"] = "shift space"; %code["00011010100"] = "shift o"; %code["00011010101"] = "shift p"; %code["00011010110"] = "shift y"; %code["00011010111"] = "shift z"; %code["00011011000"] = "shift u"; %code["00011011001"] = "shift v"; %code["00011011010"] = "shift q"; %code["00011011011"] = "shift r"; %code["00011011100"] = "shift s"; %code["00011011101"] = "shift t"; %code["000110111100"] = "shift b"; %code["000110111101"] = "shift c"; %code["000110111110"] = "shift *"; %code["000110111111"] = "shift a"; %code["00011100"] = "ctrl q"; %code["000111010"] = "ctrl o"; %code["000111011"] = "ctrl p"; %code["000111100"] = "ctrl i"; %code["000111101"] = "ctrl j"; %code["000111110"] = "ctrl g"; %code["000111111"] = "ctrl h"; %code["0010000"] = "8"; %code["0010001"] = "9"; %code["00100100"] = "numpadenter"; %code["00100101"] = "*"; %code["00100110"] = "numpaddecimal"; %code["00100111"] = "numpaddivide"; %code["001010"] = "lcontrol"; %code["001011"] = "rcontrol"; %code["001100"] = "button2"; %code["001101"] = "1"; %code["001110000"] = "scrolllock"; %code["0011100010"] = "delete"; %code["0011100011"] = "numlock"; %code["001110010"] = "print"; %code["001110011"] = "insert"; %code["0011101"] = "lshift"; %code["001111"] = "rshift"; %code["01000000"] = "rbracket"; %code["01000001"] = "backslash"; %code["01000010"] = "tilde"; %code["01000011"] = "minus"; %code["0100010"] = "lalt"; %code["0100011"] = "ralt"; %code["0100100"] = "enter"; %code["0100101"] = "pause"; %code["01001100"] = "backspace"; %code["01001101"] = "tab"; %code["0100111"] = "return"; %code["0101000"] = "6"; %code["0101001"] = "7"; %code["0101010"] = "0"; %code["0101011"] = "numpad0"; %code["010110"] = "y"; %code["010111"] = "z"; %code["011000"] = "o"; %code["011001"] = "p"; %code["011010"] = "m"; %code["011011"] = "n"; %code["011100"] = "u"; %code["011101"] = "v"; %code["011110"] = "q"; %code["011111"] = "r"; %code["100000"] = "g"; %code["100001"] = "h"; %code["100010"] = "e"; %code["100011"] = "f"; %code["100100"] = "k"; %code["100101"] = "l"; %code["100110"] = "i"; %code["100111"] = "j"; %code["1010000"] = "home"; %code["10100010"] = "pageup"; %code["10100011"] = "end"; %code["1010010"] = "capslock"; %code["1010011"] = "pagedown"; %code["101010000"] = "ctrl z"; %code["101010001"] = "ctrl left"; %code["10101001000"] = "shift f"; %code["10101001001"] = "shift g"; %code["101010010100"] = "shift m"; %code["101010010101"] = "shift n"; %code["101010010110"] = "shift k"; %code["101010010111"] = "shift l"; %code["10101001100"] = "shift e"; %code["101010011010"] = "shift d"; %code["1010100110110000"] = "shift numpad4"; %code["1010100110110001"] = "shift numpad5"; %code["1010100110110010"] = "shift numpad2"; %code["1010100110110011"] = "shift numpad3"; %code["1010100110110100"] = "shift numpad8"; %code["1010100110110101"] = "shift numpad9"; %code["1010100110110110"] = "shift numpad6"; %code["1010100110110111"] = "shift numpad7"; %code["1010100110111000"] = "shift numpadsep"; %code["1010100110111001"] = "shift numpadminus"; %code["1010100110111010"] = "shift numpadmult"; %code["1010100110111011"] = "shift numpadadd"; %code["1010100110111100"] = "shift numpad0"; %code["1010100110111101"] = "shift numpad1"; %code["1010100110111110"] = "shift numpadenter"; %code["10101001101111110"] = "shift numpaddecimal"; %code["10101001101111111"] = "shift numpaddivide"; %code["101010011100"] = "shift j"; %code["1010100111010"] = "shift h"; %code["1010100111011"] = "shift i"; %code["101010011110"] = "shift w"; %code["101010011111"] = "shift x"; %code["1010101000"] = "ctrl down"; %code["1010101001"] = "ctrl space"; %code["1010101010"] = "ctrl up"; %code["1010101011"] = "ctrl right"; %code["1010101100"] = "shift right"; %code["1010101101"] = "shift down"; %code["1010101110"] = "shift left"; %code["1010101111"] = "shift up"; %code["101011000"] = "ctrl m"; %code["101011001"] = "ctrl n"; %code["101011010"] = "ctrl k"; %code["101011011"] = "ctrl l"; %code["1010111"] = "ctrl r"; %code["101100"] = "right"; %code["101101"] = "down"; %code["101110"] = "left"; %code["101111"] = "up"; %code["110000"] = "c"; %code["110001"] = "d"; %code["110010"] = "a"; %code["110011"] = "b"; %code["110100"] = "w"; %code["110101"] = "x"; %code["110110"] = "s"; %code["110111"] = "t"; %code["111000"] = "right"; %code["111001"] = "down"; %code["111010"] = "left"; %code["111011"] = "up"; %code["1111000"] = "4"; %code["1111001"] = "5"; %code["1111010"] = "2"; %code["1111011"] = "3"; %code["1111100"] = "space"; %code["1111101"] = "ctrl numpad0"; %code["111111000"] = "ctrl u"; %code["111111001"] = "ctrl v"; %code["111111010"] = "ctrl s"; %code["111111011"] = "ctrl t"; %code["1111111"] = "ctrl w"; %l = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-"; %z = ""; for (%i = 0; %i < strlen(%j); %i++) %z = %z @ snap_int_to_binstr(strpos(%l, getsubstr(%j, %i, 1)), 6); for (%i = 0; %i < $snap_numberofkeys; %i++) { %ll = 1; while (%ll != 100 && %code[getsubstr(%z, 0, %ll)] $= "") %ll++; if (%ll == 100) { echo("Decode error"); return; } $snap_bindings[%i] = %code[getsubstr(%z, 0, %ll)]; %z = getsubstr(%z, %ll, strlen(%z)); } $snap_mousespeed = snap_binstr_to_int(getsubstr(%z, 0, 4)); $snap_mouseinv = getsubstr(%z, 0, 1); snap_set_keys(); echo("Bindings Snapped"); return $snap_back; } // convert binary string to its value function snap_binstr_to_int(%s) { %v = 0; for (%i = 0; %i < strlen(%s); %i++) %v = (%v << 1) + getsubstr(%s, %i, 1); return %v; } // convert an integer to fixed length binary string function snap_int_to_binstr(%i, %l) { %s = ""; while (%i > 0) { %s = (%i % 2) @ %s; %i >>= 1; } while (strlen(%s) % %l || %s $= "") %s = "0" @ %s; return %s; } // convert an integer to 6 char binary string function snap_int_to_binstr6(%i) { if (%i == 0) return "000000"; %s = ""; while (%i > 0) { %s = (%i % 2) @ %s; %i >>= 1; } while (strlen(%s) % 6) %s = "0" @ %s; return %s; } // read bindings from $snap_bindings and apply them function snap_set_keys( ) { snap_bind($snap_bindings[0], prevWeapon); snap_bind($snap_bindings[1], nextWeapon); snap_bind($snap_bindings[2], placeMine); snap_bind($snap_bindings[3], placeBeacon); snap_bind($snap_bindings[4], useTargetingLaser); snap_bind($snap_bindings[5], throwWeapon); snap_bind($snap_bindings[6], throwPack); snap_bind($snap_bindings[7], throwFlag); snap_bind($snap_bindings[8], toggleZoom); snap_bind($snap_bindings[9], toggleCommanderMap); snap_bind($snap_bindings[10], jump); snap_bind($snap_bindings[11], setZoomFOV); snap_bind($snap_bindings[12], throwGrenade); snap_bind($snap_bindings[13], useBackPack); snap_bind($snap_bindings[14], useRepairKit); snap_bind($snap_bindings[15], moveforward); snap_bind($snap_bindings[16], movebackward); snap_bind($snap_bindings[17], moveleft); snap_bind($snap_bindings[18], moveright); %speed = ($snap_mousespeed + 0.5) / 8; movemap.bind(mouse0, "xaxis", S, %speed, yaw); movemap.bind(mouse0, "yaxis", $snap_mouseinv ? SI : S, %speed, pitch); // SI = inverted, S = uninverted } function snap_bind(%key, %action) { if (strpos("button2", %key) != -1) movemap.bind(mouse0, %key, %action); else movemap.bind(keyboard, %key, %action); }