The simplest way to explain it, is by posting my code first.

Note I have posted the entire code below, including the read/write of the keymap ini, for persistant settings.

Code:
// Input Handling

// Default Keys
// Basic Movement & Camera/Flight Control
var k_moveForward;	
var k_moveBackward;	
var k_moveLeft;
var k_moveRight;
var k_moveUp;
var k_moveDown;

// Complex Character Movement
var k_leanLeft;
var k_leanRight;
var k_rollLeft;
var k_rollRight;
var k_takeCover;

// Move Varients
var k_sprintMove;
var k_toggleStance;
var k_jumpMove;


// Action Buttons
var k_interAction;
var k_fireMode;
var k_firePrimary;
var k_fireSecondary;
var k_throwObject;

// Hot Swap
var k_weapon1;	// Melee Slot
var k_weapon2; // Pistol Slot
var k_weapon3; // Assault Slot
var k_weapon4; // Grenade Slot
var k_weapon5; // Equip Slot (C4 etc)

var k_nextWeap; // Next Weapon
var k_prevWeap; // Previous Weapon


// Add more later


// Editor Quick Tools
define e_select = 2;			// 1
define e_move = 3;			// 2
define e_place = 4;			// 3
define e_link = 5;			// 4

// Editor Specific Keys
define e_Parachute = 25;


string keystring1;
string keystring2;
var keycode = 0;
font arial_font = "Arial",1,12;
panel keydisplay
{
	layer = 100;
	pos_x = 200;
	pos_y = 200;
	digits 100,-100,keystring1,arial_font,0,0; 
	digits 100,-90,keystring2,arial_font,0,0; 

	digits 100,50,5.3,arial_font,1,keycode;	

	flags = visible;
}


// Read "indiled.ini"

text mapping_ini{strings=300;} 


starter GetKeyMapping
{
	var i;

	txt_load(mapping_ini,"system\\keymap.ini"); 

	// Find & Assign 'Mode' - Reset Search Each Time
	i=0;while(str_cmpi(mapping_ini.string[i],"forward")!=1){i+=1;}
	i+=1;k_moveForward = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"backward")!=1){i+=1;}
	i+=1;k_moveBackward = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"stepleft")!=1){i+=1;}
	i+=1;k_moveLeft = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"stepright")!=1){i+=1;}
	i+=1;k_moveRight = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"up")!=1){i+=1;}
	i+=1;k_moveUp = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"down")!=1){i+=1;}
	i+=1;k_moveDown = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"leanleft")!=1){i+=1;}
	i+=1;k_leanLeft = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"leanright")!=1){i+=1;}
	i+=1;k_leanRight = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"rollleft")!=1){i+=1;}
	i+=1;k_rollLeft = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"rollright")!=1){i+=1;}
	i+=1;k_rollRight = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"takecover")!=1){i+=1;}
	i+=1;k_takeCover = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"sprint")!=1){i+=1;}
	i+=1;k_sprintMove = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"togglestance")!=1){i+=1;}
	i+=1;k_toggleStance = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"jump")!=1){i+=1;}
	i+=1;k_jumpMove = key_for_str(mapping_ini.string[i]);


	i=0;while(str_cmpi(mapping_ini.string[i],"interaction")!=1){i+=1;}
	i+=1;k_interaction = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"FireMode")!=1){i+=1;}
	i+=1;k_fireMode = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"FirePrimary")!=1){i+=1;}
	i+=1;k_firePrimary = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"FireSecondary")!=1){i+=1;}
	i+=1;k_firePrimary = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Throw")!=1){i+=1;}
	i+=1;k_throwObject = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"Slot1")!=1){i+=1;}
	i+=1;k_weapon1 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot2")!=1){i+=1;}
	i+=1;k_weapon2 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot3")!=1){i+=1;}
	i+=1;k_weapon3 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot4")!=1){i+=1;}
	i+=1;k_weapon4 = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"Slot5")!=1){i+=1;}
	i+=1;k_weapon5 = key_for_str(mapping_ini.string[i]);

	i=0;while(str_cmpi(mapping_ini.string[i],"next")!=1){i+=1;}
	i+=1;k_nextWeap = key_for_str(mapping_ini.string[i]);
	i=0;while(str_cmpi(mapping_ini.string[i],"prev")!=1){i+=1;}
	i+=1;k_prevWeap = key_for_str(mapping_ini.string[i]);

	WriteKeyMapping();

}

var_nsave ini_filehandle;
string _keystring;
function WriteKeyMapping
{
	ini_filehandle = file_open_write ("system\\keymap.ini");

	file_str_write (ini_filehandle,"[KeyMapping]");file_str_write(ini_filehandle,"\n");
file_str_write(ini_filehandle,"\n"); // Nice Formatting
	file_str_write(ini_filehandle,"Forward,");str_for_key(_keystring,k_moveForward);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"Backward,");str_for_key(_keystring,k_moveBackward);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"StepLeft,");str_for_key(_keystring,k_moveLeft);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"StepRight,");str_for_key(_keystring,k_moveRight);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"Up,");str_for_key(_keystring,k_moveUp);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"Down,");str_for_key(_keystring,k_moveDown);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
file_str_write(ini_filehandle,"\n"); // Nice Formatting:)
	file_str_write(ini_filehandle,"LeanLeft,");str_for_key(_keystring,k_leanLeft);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"LeanRight,");str_for_key(_keystring,k_leanRight);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"RollLeft,");str_for_key(_keystring,k_rollLeft);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"RollRight,");str_for_key(_keystring,k_rollRight);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"TakeCover,");str_for_key(_keystring,k_takeCover);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
file_str_write(ini_filehandle,"\n"); // Nice Formatting :)
	file_str_write(ini_filehandle,"Sprint,");str_for_key(_keystring,k_sprintMove);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"ToggleStance,");str_for_key(_keystring,k_toggleStance);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Jump,");str_for_key(_keystring,k_jumpMove);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
file_str_write(ini_filehandle,"\n"); // Nice Formatting :)
	file_str_write(ini_filehandle,"Interaction,");str_for_key(_keystring,k_interAction);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");
	file_str_write(ini_filehandle,"FireMode,");str_for_key(_keystring,k_fireMode);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"FirePrimary,");str_for_key(_keystring,k_firePrimary);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"FireSecondary,");str_for_key(_keystring,k_fireSecondary);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Throw,");str_for_key(_keystring,k_throwObject);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
file_str_write(ini_filehandle,"\n"); // Nice Formatting :)
	file_str_write(ini_filehandle,"Slot1,");str_for_key(_keystring,k_weapon1);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot2,");str_for_key(_keystring,k_weapon2);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot3,");str_for_key(_keystring,k_weapon3);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot4,");str_for_key(_keystring,k_weapon4);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Slot5,");str_for_key(_keystring,k_weapon5);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Next,");str_for_key(_keystring,k_nextWeap);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_str_write(ini_filehandle,"Prev,");str_for_key(_keystring,k_prevWeap);file_str_write(ini_filehandle,_keystring);file_str_write(ini_filehandle,"\n");	
	file_close (ini_filehandle); 

}

function KeyPress()
{
	keycode = key_lastpressed;

	// Catch Complex Keys
	if(str_for_key(keystring1,keycode)==null){
		str_cpy(keystring1, "Special Key");<<<<-- Here we find the major problem
	}
	
	// Quick Tools Links
	if(keycode == e_select){SelectTool();}
	if(keycode == e_move){MoveTool();}
	if(keycode == e_place){PlaceTool();}
	if(keycode == e_link){LinkTool();}

	// Editor Shortcuts
	if(keycode == e_parachute){Parachute();}
	
// E.G Get Movement Intention for Debug Cam
	if(keycode == k_moveForward){CamEnt.camforce_x += 1;}
	if(keycode == k_moveBackward){CamEnt.camforce_x -= 1;}
	if(keycode == k_moveRight){CamEnt.camforce_y -= 1;}
	if(keycode == k_moveLeft){CamEnt.camforce_y += 1;}	
	if(keycode == k_moveUp){CamEnt.camforce_z += 1;}
	if(keycode == k_moveDown){CamEnt.camforce_z -= 1;}
}

on_anykey = KeyPress;


The problem is capturing all keys, the key_mapping does not support the numpad keys, unless I am missing something here. It appears that the mapping lists 7,9,1 and 3 as the alt counterparts....

It's also worth throwing into the mix that my keypress approach doesn't seem to be a good approach, and I welcome any suggestions on how to improve / replace it.

Really I am trying to get a solid input and then link it to my camera movement and other functionality etc.

TIA for any help, and thanks to those who have helped already smile


The Art of Conversation is dead : Discuss