No problem :)
Firstly I have a simple script for collecting inputs - it covers all the standard gamepad inputs etc. but for this the only ones that matter are :
scr_getinput()
KeyUp = keyboard_check_pressed(vk_up)or gamepad_axis_value(0, gp_axislv) < -0.40;
KeyDown = keyboard_check_pressed(vk_down)or gamepad_axis_value(0, gp_axislv) > 0.40;
KeySQButton = gamepad_button_check_pressed(0, gp_face3) or keyboard_check_pressed(ord('Z'));
Next I changed the create event for obj_textbox and par_speaker as follows:
obj_textbox (create)
if(instance_number(obj_textevent)>1 or instance_number(obj_textbox)>1){ instance_destroy(); exit; }
scr_getinput();
//-----------Customise (FOR USER)
interact_key = false;
up_key = KeyUp; //for dialogue choices
down_key = KeyDown; //for dialogue choices
par_speaker (create)
//-----------Customise (FOR USER)
scr_getinput();
playerobject = obj_player;
interact_key = false;
Then I altered the step events like so - I added this at the beginning:
scr_getinput();
if (KeySQButton !=0)
interact_key = true;
else
interact_key = false;
Then I changed each instance of "keyboard_check_pressed(interact_key)" to "interact_key == true" and replaced "var change_choice = keyboard_check_pressed(down_key) - keyboard_check_pressed(up_key);" with "var change_choice = KeyDown - KeyUp;"
There are probably better ways of doing it - but it works! :)