Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Diarandor

It's reported now.
Hi, I have the following problem (it is quite a bit hard to explain), and it could be a bug.
I made scripts for platforms and wind that move the hero changing his coordinates.

-For the platforms, I change the coordinates of the hero using the event on_position_changed of the platform (the platform is moved with a movement of the engine). The problem appears when the hero is carrying an object (a pot for example) and the camera is moving following the hero at the same time (to test this the map must be big). Sometimes, the sprite of item that is being carried is showed like vibrating (from left to right to left, etc, if the direction of the movement is horizontal). This only happens sometimes (and the camera must be moving to make this happen). Maybe the sprite of the carried item is not refreshed in the correct time, or something like that... (I tested a script of wind, using the same method and the same happens, obviously.)

-I made another script of wind using a different method: the position of the hero is changed using a timer with a loop. In this case, when the camera is moving after the hero, the carried item is moved smoothly, but the sprite of the hero appears like vibrating (the same problem as above but in the sprite of the hero in this case). The same happens when I apply the movement to other custom entities that are not the hero (I emphasize that the camera must be moving to make this happen).

Obviously, my aim is to make the movement smooth for the hero, carried items, and other entities where I apply the movement, when the camera is moving, if this is possible. Do you have the same problem? (Maybe I am doing something wrong) Could this be a bug of the engine? I would like to find a solution for this... or I will be forced to use small maps when I use this kind of entities.

Thanks in advance for your help!
Hi! Thanks for the code, I found it very useful. I have modified (and improved a bit) the functions of the script. Now the hero is not centered in the platform and can move more freely over it. (I tested the platform over traversable ground and it works fine.) I post my customized code, just in case someone find it useful:

local entity = ...

-- Platform: entity which moves in either horizontally or
-- vertically (depending on direction) and carries the hero on it.

local speed = 50
local time_stopped = 1000

function entity:on_created()
  self:set_size(32, 32)
  self:set_origin(16, 16)
  self:set_can_traverse("jumper", true)
  self:set_can_traverse_ground("hole", true)
  self:set_can_traverse_ground("deep_water", true)
  self:set_can_traverse_ground("traversable", false)
  self:set_can_traverse_ground("shallow_water", false)
  self:set_can_traverse_ground("wall", false)

  local m = sol.movement.create("path")
  local direction4 = self:get_sprite():get_direction()
  m:set_path{direction4 * 2}
  self:add_collision_test("containing", function(platform, other)
    if other:get_type() == "wall" and other:get_type() ~= "jumper" then


function entity:on_obstacle_reached(movement)
  --Make the platform turn back.
  movement = sol.movement.create("path")   
  local direction4 = self:get_sprite():get_direction()
  direction4 = (direction4+2)%4
  movement:set_path{direction4 * 2}
  sol.timer.start(self, time_stopped, function() movement:start(self) end)

function entity:on_position_changed()
  -- Moves the hero if located over the platform.
  if not self:is_on_platform(hero) then return end
  local hx, hy, hl = hero:get_position()
  local direction4 = self:get_sprite():get_direction()
  local dx, dy = 0, 0 --Variables for the translation.
  if direction4 == 0 then dx = 1
  elseif direction4 == 1 then dy = -1
  elseif direction4 == 2 then dx = -1
  elseif direction4 == 3 then dy = 1
  if not hero:test_obstacles(dx, dy, hl) then hero:set_position(hx + dx, hy + dy, hl) end

function entity:on_movement_changed(movement)
  --Change direction of the sprite when the movement changes.
  local direction4 = movement:get_direction4()

function entity:is_on_platform(other_entity)
  --Returns true if other_entity is on the platform.
  local ox, oy, ol = other_entity:get_position()
  local ex, ey, el = self:get_position()
  if ol ~= el then return false end
  local sx, sy = self:get_size()
  if math.abs(ox - ex) < sx/2 -1 and math.abs(oy - ey) < sy/2 -1 then return true end
  return false
Bugs & Feature requests / Misprint in Lua API - Enemy
February 25, 2015, 07:18:08 AM
There is a misprint in the Lua API of "enemy" (here:
in the last lines of the example of the Overview, it should be written m:start(self) instead of  self:start_movement(m).
I suppose that was the old syntax. That misprint could give problems for beginners of solarus.
It's posted there now.
Hi! I have the following problem:

The animation for  the sprite "carrying_walking" that I am using has 8 frames. But the carried object bounces each 3 frames (this was the behaviour in ALTTP), so  the animations are not synchronized. (I would like to keep the number of frames to keep quality of the animation.)

Could this be made more customizable in future versions of solarus?
I suggest using a variable in the engine to set the number of bounces on each loop, which should be 1 by default (in my case I would need to set it to 2 times for each loop since in the walking animation the hero moves both legs on each loop).

Thanks a lot!
Development / Question: mirrors and reflections
February 03, 2015, 08:49:13 PM
Would it be possible (in the current or future versions of solarus) to program scripts for mirrors showing a reflected image of what is next to them, or water reflecting the image of what is above?

(It's just out of curiosity. I don't need these entities for the game I'm working on, but it would be cool if possible.)
Thanks again!
I will do as you say, mimicking some functions of the HUD to manage my custom actions.
Hi! I was trying to execute a function (for example, to open a menu in the game) when the "action" button is pressed, but only in case the hero is not performing another action (talking, lifting,...). To do that, I tried to use the function:

function game:on_command_pressed(command)
  if command == "action" and game:get_command_effect("action") == nil then
     ---- function...

The problem is that this does not work when interacting with custom entities because the function game:get_command_effect("action") returns nil, and I think it is not possible to assign a command effect when the hero is close to a custom entity before the "action" command is pressed (maybe I'm wrong).

Could you help me to solve this problem?
Thanks in advance!
Development / Re: Help with light and darkness
September 20, 2014, 05:42:18 PM
Thanks a lot again for your help!
Development / Help with light and darkness
September 20, 2014, 03:28:31 AM

I would like to know if it is possible to program dark rooms where there are several sources of light (including the hero, some moving enemies, and torches on walls). Outside the illuminated areas there would be opaque darkness. Is it possible to do this? And how?

Thanks for your help!!!
Hi! I have the following problem:

After changing the hero's sprite with the function hero:set_tunic_sprite_id("tunic_name"), the hero is not hurt when colliding with an enemy. I realized that this only happens when the name of the tunic is not of the form "tunicX". Could this be a bug?

Thanks in advance for your help!