Page 1 of 3

STI with Bump plugin

Posted: Fri Mar 17, 2017 7:12 am
by knuxyl
I am having a hard time understanding how to use the Bump plugin with Simple Tiled Implementation. The documentation is lacking.

I looked through the code of plugins/bump.lua and it seems to check for a custom property of tiles or objects called "collidable". if that is true, how do I interact with it? One of the other plugins is box2d. Is that another collision library I could use and which one would be best? Thanks!

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 8:25 am
by Sir_Silver
In Tiled, you can set a custom property, specifically a bool, for either a tile or an entire layer called "collidable". If it is set to true, it will be added to the bump world, and will have "normal" collisions set up for you. I recommend using bump plugin because it's the only one I'm familiar with at all. =)

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 11:05 am
by DanielPower
If you want to make a specific tile collidable, click the tile in your tileset pane, and then under the properties pane on the left, click the + icon, and create a new boolean property called collideable. Set this to true.

Once you've added collidable tiles in your tiled map, you need to load them in your game.

Code: Select all


local world = bump.newWorld()
local map = sti('mapfile.lua', {"bump"}) -- This loads the map file, and loads the bump plugin for STI
map:bump_init(world) -- This initializes the bump plugin, and loads all of your collidable tiles
That's it! Your world should no contain collidables for each of the collidable tiles in your Tiled map.

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 11:10 am
by DanielPower
If you need more complicated collisions, for example, using two collision boxes for a corner wall, or a smaller collision box for a thin wall, you can open the Tile Collision Editor in Tiled, and create collision boxes for an individual tile. If these collision boxes exist, STI's bump plugin will load these boxes instead of just one for the entire tile.

For this editor, you may need to name each box something specific. When I originally committed this feature, you'd have to call each box "colBox", but I believe that's since been changed to "collideable" or something similar. Check out the Bump project on Github for specifics.

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 4:08 pm
by knuxyl
Thank yall very much. Is this all that is needed to interact with player.x and player.y?

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 4:20 pm
by knuxyl
DanielPower wrote: Fri Mar 17, 2017 11:05 am If you want to make a specific tile collidable, click the tile in your tileset pane, and then under the properties pane on the left, click the + icon, and create a new boolean property called collideable. Set this to true.

Once you've added collidable tiles in your tiled map, you need to load them in your game.

Code: Select all


local world = bump.newWorld()
local map = sti('mapfile.lua', {"bump"}) -- This loads the map file, and loads the bump plugin for STI
map:bump_init(world) -- This initializes the bump plugin, and loads all of your collidable tiles
That's it! Your world should no contain collidables for each of the collidable tiles in your Tiled map.
I tried the code above and it doesn't work. when I do the first line I get "global bump (a nil value)", like the plugin isn't being loaded. I'm even trying to call it after setting the map variable. I'm getting error after error trying to fix the code. I don't know what to do to get it to work.

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 4:27 pm
by DanielPower
Well, do you have the bump library loaded? You'll need to get bump.lua, put it into your game's directory, and load it into your game using

Code: Select all

local bump = require('bump')
You can't use STI's bump plugin unless you have bump loaded.

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 4:30 pm
by knuxyl
DanielPower wrote: Fri Mar 17, 2017 11:05 am If you want to make a specific tile collidable, click the tile in your tileset pane, and then under the properties pane on the left, click the + icon, and create a new boolean property called collideable. Set this to true.

Once you've added collidable tiles in your tiled map, you need to load them in your game.

Code: Select all


local world = bump.newWorld()
local map = sti('mapfile.lua', {"bump"}) -- This loads the map file, and loads the bump plugin for STI
map:bump_init(world) -- This initializes the bump plugin, and loads all of your collidable tiles
That's it! Your world should no contain collidables for each of the collidable tiles in your Tiled map.
So I need to know what kind of data should go in "bump_init(map, world)". I'm assuming map should be the map file that sti is loading, but I don't know what world is, especially since there isn't a bump.newWorld() function present. This is where it is giving me an error, Attempt to call method 'add' (a nil value) on this line in bump.lua

line 58

Code: Select all

world:add(t, t.x, t.y, t.width, t.height)
which is weird because another world:add is at line 41 and it doesn't give an error there.

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 4:31 pm
by knuxyl
DanielPower wrote: Fri Mar 17, 2017 4:27 pm Well, do you have the bump library loaded? You'll need to get bump.lua, put it into your game's directory, and load it into your game using

Code: Select all

local bump = require('bump')
You can't use STI's bump plugin unless you have bump loaded.
lol i thought the bump plugin was the full library. thanks ill try that

Re: STI with Bump plugin

Posted: Fri Mar 17, 2017 4:34 pm
by knuxyl
DanielPower wrote: Fri Mar 17, 2017 11:05 am If you want to make a specific tile collidable, click the tile in your tileset pane, and then under the properties pane on the left, click the + icon, and create a new boolean property called collideable. Set this to true.

Once you've added collidable tiles in your tiled map, you need to load them in your game.

Code: Select all


local world = bump.newWorld()
local map = sti('mapfile.lua', {"bump"}) -- This loads the map file, and loads the bump plugin for STI
map:bump_init(world) -- This initializes the bump plugin, and loads all of your collidable tiles
That's it! Your world should no contain collidables for each of the collidable tiles in your Tiled map.
I got it working with the bump tiles being drawn with map:bump_draw(world) but I'm not sure how to make player.x and player.y interact with it