Solarus-Games English Forum

Solarus => Development => Topic started by: Starlock on August 24, 2015, 09:33:41 PM

Title: Trying to change key binding
Post by: Starlock on August 24, 2015, 09:33:41 PM
I tried to change the key binding for when you attack after obtaining the sword from the c key to the e key but whenever I load the game it still remains on the c key.
The code i used was

function game:on_character_pressed(key)
if key == "e" then
game:get_command_keyboard_binding("attack")   
   end
  end
Title: Re: Trying to change key binding
Post by: Diarandor on August 24, 2015, 09:54:59 PM
I think that is normal because to set the command binding you need to use game:set_command_keyboard_binding(command, key).
(You are using the getter function and not the setter.) It is not necessary to call the event game:on_character_pressed(key). Try to write somewhere in the game manager

game:set_command_keyboard_binding("attack", "e")

That should probably work, although I haven't tested this code.
Title: Re: Trying to change key binding
Post by: Starlock on August 24, 2015, 10:01:13 PM
I tried that code and it gave me the error

Error: In on_finished: [string "scripts/game_manager.lua"]:83: bad argument #2 to set_command_keyboard_binding (string or nil expected, got string)      :-\
Title: Re: Trying to change key binding
Post by: Diarandor on August 24, 2015, 10:09:38 PM
Try to put it in the event game:on_started(). I have a similar code for my joypad that works, like this:

function game:on_started()
  -- Prepare the dialog box menu and the HUD.
  game:initialize_dialog_box()
  hud = hud_manager:create(game)
  pause_menu = pause_manager:create(game, exists)
  -- more code that I am using... and:
  -- Configure some joypad buttons. [Change this for a menu later!]
  game:set_command_joypad_binding("action", "button 10")
  game:set_command_joypad_binding("attack", "button 11")
  game:set_command_joypad_binding("item_1", "button 12")
  game:set_command_joypad_binding("item_2", "button 13")
end
Title: Re: Trying to change key binding
Post by: Starlock on August 24, 2015, 10:17:58 PM
The game is able to run again now but the code still doesn't seem to affect the keys as it still uses the c key... I might try looking in the roth source code to see if it has anything that might make this work
Title: Re: Trying to change key binding
Post by: Christopho on August 24, 2015, 11:06:37 PM
What Solarus version are you using? game:set_command_keyboard_binding() was broken before Solarus 1.4.3.
You can also use game:capture_command_binding(), it might be easier for what you want.
Title: Re: Trying to change key binding
Post by: Starlock on August 24, 2015, 11:41:47 PM
I'm running 1.4.4 yet still it won't work. I feel like there must be some simple syntax error that I keep glossing over but nothing appears in error.txt besides that <eof> is expected near end on line 80... This is the full code with Diarandor's code example:
Code ( lua) Select
-- Script that creates a game ready to be played.

-- Usage:
-- local game_manager = require("scripts/game_manager")
-- local game = game_manager:create("savegame_file_name")
-- game:start()

local dialog_box_manager = require("scripts/dialog_box")

local game_manager = {}

-- Sets initial values for a new savegame of this quest.
local function initialize_new_savegame(game)
  game:set_starting_location("house")
  game:set_max_money(100)
  game:set_max_life(12)
  game:set_life(game:get_max_life())
end

-- Creates a game ready to be played.
function game_manager:create(file)

  -- Create the game (but do not start it).
  local exists = sol.game.exists(file)
  local game = sol.game.load(file)
  if not exists then
    -- This is a new savegame file.
    initialize_new_savegame(game)
  end

  local dialog_box

  -- Function called when the player runs this game.
function game:on_started()
  -- Prepare the dialog box menu and the HUD.
  game:initialize_dialog_box()
  hud = hud_manager:create(game)
  pause_menu = pause_manager:create(game, exists)
  -- more code that I am using... and:
  -- Configure some joypad buttons. [Change this for a menu later!]
  game:set_command_keyboard_binding("action", "space_bar")
  game:set_command_keyboard_binding("attack", "e")
  game:set_command_keyboard_binding("item_1", "q")
  game:set_command_keyboard_binding("item_2", "w")
end

    dialog_box = dialog_box_manager:create(game)
  end

  -- Function called when the game stops.
  function game:on_finished()

    dialog_box:quit()
    dialog_box = nil
  end

  function game:on_paused()

    game:start_dialog("pause.save", function(answer)
      if answer == 2 then
        game:save()
      end
      game:set_paused(false)
    end)
  end

  local rupee_icon = sol.surface.create("hud/rupee_icon.png")
  local rupee_text = sol.text_surface.create()
  rupee_text:set_font("8_bit")

  function game:on_draw(dst_surface)

    rupee_icon:draw_region(0, 0, 12, 12, dst_surface, 10, 220)
    rupee_text:set_text(game:get_money())
    rupee_text:draw(dst_surface, 25, 225)
  end


  return game
end

return game_manager


Title: Re: Trying to change key binding
Post by: Christopho on August 24, 2015, 11:51:04 PM
There is an extra end at line 48. Your indentation is incorrect, making it easy to get wrong with syntax.