Bueno tengo estos controles por defecto en el jugador.



Flechas = movimiento
Z = hablar/continuar dialogo
X = saltar/hablar
C = correr

Quiero crear un Menu que le permita al jugador cambiar los controles de su personaje, algo que funcione así.



Solo debe ser una pantalla que me permita hacerle este cambio, para que el jugador sea consciente de los cambios.

En código es algo como

objJugador
STEP////////////////////////////////////////////////////////////////////////////

///Desplazamiento
var keyLeft, keyRight, keyDown, keyJump, keyJumpRelease;

keyLeft        = -keyboard_check(vk_left);
keyRight       = keyboard_check(vk_right);
keyDown        = keyboard_check(vk_down);
//keyUp          = -keyboard_check(vk_up);

keyJump        = keyboard_check_pressed(ord('X'));
keyJumpRelease = keyboard_check_released(ord('X'));

//Inputs de carrera
keyRun         = keyboard_check_pressed(ord('C'));
keyRunRelease  = keyboard_check_released(ord('C'));

obj_Cartel (Este es el objeto padre de los NPC)

STEP/////////////////////////////////////////////////////
/// Detectar si jugador abre el cartel
if (keyboard_check_pressed(ord('Z')) and distance_to_object(objJugador)<3) {
    mostrar = true;
}

// Si se aleja cerramos el cartel y reiniciamos pagina
if (distance_to_object(objJugador)>3) { mostrar = false; pagina = -1; }
/// Detectar si jugador pasa página
if (keyboard_check_pressed(ord('Z')) and mostrar) {
    // Pasar página
    if (pagina+1 < array_length_1d(paginas)) pagina++;
    else {
        // Si nos pasamos del máximo reiniciamos el cartel
        mostrar = false;
        pagina = -1;
    }
}

Hay muchas maneras, pero en general se resume en que necesitas guardar las teclas escogidas con archivos externos, y éstas deben ser escogidas por el jugador a través de alguna interfaz.

Por ejemplo, en el evento create de algún controlador que esté presente sólo en las habitaciones de juego, podrías hacer esto:
[gml]
///Create de algún controlador
globalvar teclas;
teclas = ds_map_create();

ini_open("teclas.ini");

teclas[? "player_iz"] = ini_read_real("teclas", "player_iz", ord("A")); //Tecla de movimiento izquierda
teclas[? "player_dr"] = ini_read_real("teclas", "player_dr", ord("D")); //Tecla de movimiento derecha
teclas[? "player_up"] = ini_read_real("teclas", "player_dr", ord("W")); //Tecla de movimiento arriba

ini_close();
[/gml]
Y en el código de movimiento, reemplazarías los códigos de teclas que usas por los cargados del ini.
[gml]
///Evento step del player
keyLeft        = -keyboard_check(teclas[? "player_iz"]);
keyRight       = keyboard_check(teclas[? "player_dr"]);
keyDown        = keyboard_check(teclas[? "player_up"]);
[/gml]

Por lo demás, sería cuestión tuya crear la interfaz y escribir en los valores del ini las teclas que el usuario seleccione.
alaberga regué el café.

BA:STFW&RTFM