From e40b9a959e3af985f1c662ec1d6f90b655e6f308 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Sat, 13 Aug 2022 02:40:18 +0000 Subject: [PATCH] create nicer looking map --- src/data/maps/playground.lua | 187 ++++++++++++++++++++++++ src/data/maps/playground.tmx | 94 +++++++++--- src/data/maps/test.lua | 107 -------------- src/data/maps/test.tmx | 32 ---- src/data/sprites/bolt.aseprite | Bin 857 -> 857 bytes src/data/tilesets/roguelike-dungeon.lua | 128 ++++++++++++++++ src/data/tilesets/roguelike-dungeon.png | Bin 0 -> 31160 bytes src/data/tilesets/roguelike-dungeon.tsx | 87 +++++++++++ src/data/tilesets/roguelike-indoors.png | Bin 0 -> 20867 bytes src/data/tilesets/roguelike-indoors.tsx | 4 + src/data/tilesets/test.aseprite | Bin 497 -> 0 bytes src/data/tilesets/test.lua | 38 ----- src/data/tilesets/test.png | Bin 329 -> 0 bytes src/data/tilesets/test.tsx | 12 -- src/lib/sti/plugins/bump.lua | 115 ++++++++------- src/systems/map.lua | 2 +- src/systems/sprite.lua | 3 - 17 files changed, 538 insertions(+), 271 deletions(-) create mode 100644 src/data/maps/playground.lua delete mode 100644 src/data/maps/test.lua delete mode 100644 src/data/maps/test.tmx create mode 100644 src/data/tilesets/roguelike-dungeon.lua create mode 100644 src/data/tilesets/roguelike-dungeon.png create mode 100644 src/data/tilesets/roguelike-dungeon.tsx create mode 100644 src/data/tilesets/roguelike-indoors.png create mode 100644 src/data/tilesets/roguelike-indoors.tsx delete mode 100644 src/data/tilesets/test.aseprite delete mode 100644 src/data/tilesets/test.lua delete mode 100644 src/data/tilesets/test.png delete mode 100644 src/data/tilesets/test.tsx diff --git a/src/data/maps/playground.lua b/src/data/maps/playground.lua new file mode 100644 index 0000000..32c56ac --- /dev/null +++ b/src/data/maps/playground.lua @@ -0,0 +1,187 @@ +return { + version = "1.9", + luaversion = "5.1", + tiledversion = "1.9.0", + class = "", + orientation = "orthogonal", + renderorder = "right-down", + width = 30, + height = 20, + tilewidth = 16, + tileheight = 16, + nextlayerid = 5, + nextobjectid = 4, + properties = {}, + tilesets = { + { + name = "roguelike-dungeon", + firstgid = 1, + filename = "../tilesets/roguelike-dungeon.tsx", + exportfilename = "../tilesets/roguelike-dungeon.lua" + } + }, + layers = { + { + type = "tilelayer", + x = 0, + y = 0, + width = 30, + height = 20, + id = 3, + name = "ground", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + encoding = "lua", + data = { + 484, 481, 485, 481, 485, 484, 484, 483, 484, 483, 481, 484, 481, 484, 485, 485, 482, 483, 483, 481, 485, 485, 483, 482, 481, 484, 484, 483, 485, 481, + 483, 481, 482, 481, 484, 484, 483, 481, 483, 485, 485, 482, 483, 482, 482, 484, 481, 481, 485, 485, 484, 481, 485, 483, 481, 485, 483, 481, 484, 482, + 482, 485, 485, 483, 483, 485, 481, 481, 484, 481, 483, 485, 482, 485, 484, 482, 485, 482, 482, 482, 484, 481, 485, 484, 484, 481, 482, 485, 482, 482, + 482, 483, 484, 482, 481, 485, 482, 481, 485, 483, 483, 483, 481, 481, 482, 483, 485, 481, 481, 485, 481, 484, 485, 484, 484, 484, 481, 482, 482, 481, + 485, 484, 484, 483, 483, 484, 485, 483, 482, 482, 484, 484, 484, 482, 482, 485, 485, 483, 483, 485, 484, 481, 484, 485, 481, 482, 485, 482, 482, 485, + 484, 483, 485, 481, 483, 483, 483, 484, 481, 485, 483, 482, 483, 483, 483, 483, 484, 481, 483, 485, 482, 485, 484, 482, 481, 482, 484, 481, 483, 481, + 483, 482, 483, 484, 481, 481, 483, 484, 485, 481, 482, 483, 483, 481, 483, 483, 482, 482, 484, 485, 484, 482, 482, 483, 484, 484, 483, 483, 483, 481, + 485, 482, 484, 482, 484, 482, 484, 484, 483, 481, 483, 484, 483, 481, 482, 481, 482, 485, 483, 482, 483, 481, 482, 481, 481, 484, 481, 482, 481, 481, + 481, 483, 482, 483, 481, 484, 481, 483, 484, 482, 483, 485, 483, 482, 485, 484, 481, 482, 481, 484, 483, 481, 484, 482, 482, 483, 483, 485, 481, 481, + 485, 483, 485, 482, 485, 483, 485, 481, 485, 482, 485, 483, 483, 482, 484, 483, 484, 483, 482, 484, 482, 481, 484, 483, 481, 484, 481, 485, 484, 485, + 483, 485, 483, 482, 483, 484, 484, 482, 484, 483, 483, 483, 484, 481, 483, 483, 483, 483, 481, 482, 482, 482, 481, 481, 483, 483, 481, 481, 484, 482, + 485, 485, 485, 481, 484, 484, 483, 482, 484, 482, 483, 485, 484, 482, 481, 484, 483, 482, 483, 483, 485, 485, 485, 484, 484, 484, 481, 485, 482, 484, + 484, 482, 482, 485, 483, 484, 485, 482, 481, 484, 485, 482, 484, 482, 481, 481, 481, 481, 484, 481, 485, 485, 483, 481, 483, 482, 482, 485, 484, 482, + 482, 481, 483, 485, 485, 485, 481, 483, 484, 481, 482, 483, 485, 483, 482, 485, 481, 485, 485, 483, 482, 484, 482, 483, 482, 485, 483, 482, 485, 481, + 481, 482, 485, 483, 482, 481, 481, 485, 481, 484, 485, 483, 485, 485, 484, 485, 482, 482, 484, 481, 484, 483, 483, 485, 485, 482, 485, 481, 483, 484, + 483, 483, 483, 482, 484, 484, 483, 485, 482, 484, 485, 482, 484, 483, 482, 485, 485, 484, 482, 485, 481, 481, 484, 485, 481, 482, 484, 485, 484, 483, + 483, 484, 481, 482, 482, 483, 485, 483, 483, 482, 481, 483, 483, 485, 484, 483, 484, 482, 485, 482, 485, 481, 485, 483, 485, 485, 481, 484, 483, 484, + 483, 484, 483, 481, 484, 484, 482, 481, 481, 482, 481, 482, 485, 484, 482, 484, 484, 483, 484, 484, 483, 483, 484, 485, 485, 485, 484, 485, 481, 482, + 481, 484, 484, 482, 483, 484, 482, 485, 485, 485, 481, 485, 485, 484, 481, 481, 483, 484, 484, 483, 481, 485, 481, 481, 484, 482, 485, 481, 482, 483, + 483, 485, 482, 481, 485, 483, 483, 482, 485, 483, 481, 484, 484, 485, 484, 484, 485, 484, 483, 483, 481, 483, 484, 484, 484, 485, 482, 483, 481, 482 + } + }, + { + type = "tilelayer", + x = 0, + y = 0, + width = 30, + height = 20, + id = 1, + name = "walls", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + encoding = "lua", + data = { + 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 45, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 14, + 41, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 10, 11, 43, 0, 0, 0, 0, 0, 0, 0, 0, 42, 11, 11, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 11, 12, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 10, 11, 14, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 13, 43, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 42, 14, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 9, 0, 0, 0, 42, 14, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 13, 43, 0, 0, 0, 0, 38, 0, 0, 0, 41, 0, 0, 0, 0, 42, 11, 12, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 10, 11, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 11, 11, 12, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41, + 42, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, 11, 11, 11, 11, 11, 43 + } + }, + { + type = "tilelayer", + x = 0, + y = 0, + width = 30, + height = 20, + id = 4, + name = "decorations", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + encoding = "lua", + data = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 60, 61, 0, 0, 0, 66, 65, 0, 0, 0, 509, 0, 62, 0, 0, 478, 0, 0, 0, 0, 479, 0, 478, 0, 478, 0, + 0, 0, 480, 60, 0, 0, 0, 0, 0, 65, 65, 65, 480, 0, 0, 0, 505, 505, 505, 505, 505, 505, 505, 0, 0, 480, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 0, 66, 0, 0, 479, 478, 0, 0, 0, 0, 0, 0, + 0, 0, 480, 0, 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 478, 0, 0, 0, 0, 0, + 0, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 65, 0, 0, 0, 0, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 0, 0, 66, 66, 0, 0, 0, 0, 0, 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 478, 479, 505, 505, 505, 505, 505, 505, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 480, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, + 0, 478, 478, 478, 0, 0, 0, 0, 0, 0, 0, 479, 479, 478, 0, 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, 0, 0, 478, 478, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + } + }, + { + type = "objectgroup", + draworder = "topdown", + id = 2, + name = "spawnpoints", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + objects = { + { + id = 1, + name = "", + class = "", + shape = "point", + x = 67.3333, + y = 173.333, + width = 0, + height = 0, + rotation = 0, + visible = true, + properties = {} + }, + { + id = 2, + name = "", + class = "", + shape = "point", + x = 409.333, + y = 163.333, + width = 0, + height = 0, + rotation = 0, + visible = true, + properties = {} + } + } + } + } +} diff --git a/src/data/maps/playground.tmx b/src/data/maps/playground.tmx index 832fdc6..e3d5b61 100644 --- a/src/data/maps/playground.tmx +++ b/src/data/maps/playground.tmx @@ -1,31 +1,79 @@ - + - + - + + + +484,481,485,481,485,484,484,483,484,483,481,484,481,484,485,485,482,483,483,481,485,485,483,482,481,484,484,483,485,481, +483,481,482,481,484,484,483,481,483,485,485,482,483,482,482,484,481,481,485,485,484,481,485,483,481,485,483,481,484,482, +482,485,485,483,483,485,481,481,484,481,483,485,482,485,484,482,485,482,482,482,484,481,485,484,484,481,482,485,482,482, +482,483,484,482,481,485,482,481,485,483,483,483,481,481,482,483,485,481,481,485,481,484,485,484,484,484,481,482,482,481, +485,484,484,483,483,484,485,483,482,482,484,484,484,482,482,485,485,483,483,485,484,481,484,485,481,482,485,482,482,485, +484,483,485,481,483,483,483,484,481,485,483,482,483,483,483,483,484,481,483,485,482,485,484,482,481,482,484,481,483,481, +483,482,483,484,481,481,483,484,485,481,482,483,483,481,483,483,482,482,484,485,484,482,482,483,484,484,483,483,483,481, +485,482,484,482,484,482,484,484,483,481,483,484,483,481,482,481,482,485,483,482,483,481,482,481,481,484,481,482,481,481, +481,483,482,483,481,484,481,483,484,482,483,485,483,482,485,484,481,482,481,484,483,481,484,482,482,483,483,485,481,481, +485,483,485,482,485,483,485,481,485,482,485,483,483,482,484,483,484,483,482,484,482,481,484,483,481,484,481,485,484,485, +483,485,483,482,483,484,484,482,484,483,483,483,484,481,483,483,483,483,481,482,482,482,481,481,483,483,481,481,484,482, +485,485,485,481,484,484,483,482,484,482,483,485,484,482,481,484,483,482,483,483,485,485,485,484,484,484,481,485,482,484, +484,482,482,485,483,484,485,482,481,484,485,482,484,482,481,481,481,481,484,481,485,485,483,481,483,482,482,485,484,482, +482,481,483,485,485,485,481,483,484,481,482,483,485,483,482,485,481,485,485,483,482,484,482,483,482,485,483,482,485,481, +481,482,485,483,482,481,481,485,481,484,485,483,485,485,484,485,482,482,484,481,484,483,483,485,485,482,485,481,483,484, +483,483,483,482,484,484,483,485,482,484,485,482,484,483,482,485,485,484,482,485,481,481,484,485,481,482,484,485,484,483, +483,484,481,482,482,483,485,483,483,482,481,483,483,485,484,483,484,482,485,482,485,481,485,483,485,485,481,484,483,484, +483,484,483,481,484,484,482,481,481,482,481,482,485,484,482,484,484,483,484,484,483,483,484,485,485,485,484,485,481,482, +481,484,484,482,483,484,482,485,485,485,481,485,485,484,481,481,483,484,484,483,481,485,481,481,484,482,485,481,482,483, +483,485,482,481,485,483,483,482,485,483,481,484,484,485,484,484,485,484,483,483,481,483,484,484,484,485,482,483,481,482 + + -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483649,2147483649,2147483649,0,0,0,0,1, -1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,2147483649,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,2147483649,2147483649,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,2147483649,2147483649,2147483649,0,0,0,0,1, -1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1, -1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,45,11,11,11,11,11,11,11,11,11,11,11,11,11,14, +41,0,0,0,0,0,41,0,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,41,0,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,10,11,43,0,0,0,0,0,0,0,0,42,11,11,11,12,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,11,12,0,0,0,0,41, +41,0,0,0,0,10,11,14,0,0,0,0,0,9,0,0,0,0,0,0,0,13,43,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,42,14,0,0,0,0,41,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,41,0,0,0,0,41,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,41,0,0,0,0,41,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,41,0,0,0,0,41,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,41,0,0,0,0,41,0,0,0,9,0,0,0,42,14,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,13,43,0,0,0,0,38,0,0,0,41,0,0,0,0,42,11,12,0,0,0,0,41, +41,0,0,0,0,10,11,43,0,0,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,11,11,12,0,0,41, +41,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,41,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,41,0,0,0,0,0,41, +42,11,11,11,11,11,11,11,11,11,16,11,11,11,11,11,11,11,11,11,11,11,11,16,11,11,11,11,11,43 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,60,61,0,0,0,66,65,0,0,0,509,0,62,0,0,478,0,0,0,0,479,0,478,0,478,0, +0,0,480,60,0,0,0,0,0,65,65,65,480,0,0,0,505,505,505,505,505,505,505,0,0,480,0,0,0,0, +0,0,0,0,0,0,0,0,0,65,65,65,0,0,0,0,0,0,0,0,0,0,480,0,0,65,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,66,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,66,66,0,0,0,0,0,478,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,66,0,66,0,0,479,478,0,0,0,0,0,0, +0,0,480,0,0,0,0,422,0,0,0,0,0,0,0,0,0,0,0,0,0,0,478,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,65,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,478,478,0,0,0,0,0, +0,65,65,65,0,0,0,0,0,0,0,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,65,65,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,65,0,0,0,0,66,66,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,483,0,0,66,66,0,0,0,0,0,65,65,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,478,479,505,505,505,505,505,505,0,0,0,0,0,0,0,65,65,65,480,0,0,0,0,451,0,0,0,0,0, +0,478,478,478,0,0,0,0,0,0,0,479,479,478,0,0,0,0,0,0,0,0,509,0,0,0,0,478,478,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/src/data/maps/test.lua b/src/data/maps/test.lua deleted file mode 100644 index 5226fda..0000000 --- a/src/data/maps/test.lua +++ /dev/null @@ -1,107 +0,0 @@ -return { - version = "1.9", - luaversion = "5.1", - tiledversion = "1.9.0", - class = "", - orientation = "orthogonal", - renderorder = "right-down", - width = 30, - height = 20, - tilewidth = 16, - tileheight = 16, - nextlayerid = 3, - nextobjectid = 3, - properties = {}, - tilesets = { - { - name = "test", - firstgid = 1, - filename = "../tilesets/test.tsx", - exportfilename = "../tilesets/test.lua" - } - }, - layers = { - { - type = "tilelayer", - x = 0, - y = 0, - width = 30, - height = 20, - id = 1, - name = "walls", - class = "", - visible = true, - opacity = 1, - offsetx = 0, - offsety = 0, - parallaxx = 1, - parallaxy = 1, - properties = {}, - encoding = "lua", - data = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2147483649, 2147483649, 2147483649, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2147483649, 2147483649, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2147483649, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2147483649, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2147483649, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2147483649, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2147483649, 2147483649, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2147483649, 2147483649, 2147483649, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - } - }, - { - type = "objectgroup", - draworder = "topdown", - id = 2, - name = "spawnpoints", - class = "", - visible = true, - opacity = 1, - offsetx = 0, - offsety = 0, - parallaxx = 1, - parallaxy = 1, - properties = {}, - objects = { - { - id = 1, - name = "", - class = "", - shape = "point", - x = 67.3333, - y = 173.333, - width = 0, - height = 0, - rotation = 0, - visible = true, - properties = {} - }, - { - id = 2, - name = "", - class = "", - shape = "point", - x = 409.333, - y = 163.333, - width = 0, - height = 0, - rotation = 0, - visible = true, - properties = {} - } - } - } - } -} diff --git a/src/data/maps/test.tmx b/src/data/maps/test.tmx deleted file mode 100644 index 5402b5d..0000000 --- a/src/data/maps/test.tmx +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2147483649,2147483649,2147483649,0,0,0,0,1, -1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,2147483649,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,2147483649,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,2147483649,2147483649,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,2147483649,2147483649,2147483649,0,0,0,0,1, -1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1, -1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, -1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - - - - diff --git a/src/data/sprites/bolt.aseprite b/src/data/sprites/bolt.aseprite index ac62429d2ef8b46fba305c9f0051717a5d620f12..0cfec695e0573627e1cea388ae5d74bd2432e4bb 100644 GIT binary patch delta 27 jcmcb~c9U&G8WWpVR@VQChLd%fHCU|84+>76!E_J+i@yoI delta 27 jcmcb~c9U&G8WWqF*|h%?4JYd|Yp|SfJo|O>45otsmVpac diff --git a/src/data/tilesets/roguelike-dungeon.lua b/src/data/tilesets/roguelike-dungeon.lua new file mode 100644 index 0000000..d0476e9 --- /dev/null +++ b/src/data/tilesets/roguelike-dungeon.lua @@ -0,0 +1,128 @@ +return { + version = "1.9", + luaversion = "5.1", + tiledversion = "1.9.0", + name = "roguelike-dungeon", + class = "", + tilewidth = 16, + tileheight = 16, + spacing = 1, + margin = 0, + columns = 29, + image = "roguelike-dungeon.png", + imagewidth = 492, + imageheight = 305, + objectalignment = "unspecified", + tilerendersize = "tile", + fillmode = "stretch", + tileoffset = { + x = 0, + y = 0 + }, + grid = { + orientation = "orthogonal", + width = 16, + height = 16 + }, + properties = {}, + wangsets = {}, + tilecount = 522, + tiles = { + { + id = 8, + properties = { + ["collidable"] = true + } + }, + { + id = 9, + properties = { + ["collidable"] = true + } + }, + { + id = 10, + properties = { + ["collidable"] = true + } + }, + { + id = 11, + properties = { + ["collidable"] = true + } + }, + { + id = 12, + properties = { + ["collidable"] = true + } + }, + { + id = 13, + properties = { + ["collidable"] = true + } + }, + { + id = 14, + properties = { + ["collidable"] = true + } + }, + { + id = 15, + properties = { + ["collidable"] = true + } + }, + { + id = 37, + properties = { + ["collidable"] = true + } + }, + { + id = 38, + properties = { + ["collidable"] = true + } + }, + { + id = 39, + properties = { + ["collidable"] = true + } + }, + { + id = 40, + properties = { + ["collidable"] = true + } + }, + { + id = 41, + properties = { + ["collidable"] = true + } + }, + { + id = 42, + properties = { + ["collidable"] = true + } + }, + { + id = 43, + properties = { + ["collidable"] = true + } + }, + { + id = 44, + properties = { + ["collidable"] = true + } + } + } +} diff --git a/src/data/tilesets/roguelike-dungeon.png b/src/data/tilesets/roguelike-dungeon.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1bc646754251bb592b0ca57a3cedda8b172f47 GIT binary patch literal 31160 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 GsQ&|(OMMgo literal 0 HcmV?d00001 diff --git a/src/data/tilesets/roguelike-dungeon.tsx b/src/data/tilesets/roguelike-dungeon.tsx new file mode 100644 index 0000000..fa54a7f --- /dev/null +++ b/src/data/tilesets/roguelike-dungeon.tsx @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/data/tilesets/roguelike-indoors.png b/src/data/tilesets/roguelike-indoors.png new file mode 100644 index 0000000000000000000000000000000000000000..c6046fdf22c36fcd71f450d7c76b02bc33f19b07 GIT binary patch literal 20867 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 literal 0 HcmV?d00001 diff --git a/src/data/tilesets/roguelike-indoors.tsx b/src/data/tilesets/roguelike-indoors.tsx new file mode 100644 index 0000000..f611edd --- /dev/null +++ b/src/data/tilesets/roguelike-indoors.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/src/data/tilesets/test.aseprite b/src/data/tilesets/test.aseprite deleted file mode 100644 index 8e85aa9e6b23a6181e08320c3ed7b760b1300212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmey!$iVPmDI-Gy5GpVLISeU4i~s@*j37Y<0U)FWCmw`JR#u<|VnEEU0Jajz zx+)-BQUT@yek2(NhFS}U{|pSg9K1kMOW6}hIyNi-l19PtK(b`*ZXj8`$qz{W|M>(+ z?%TZyNdCS*8%TcGTMi_TP7DE(P0@xx^2N+zAbBt+8c6zUtNgbD+QkA27XhF>Kudr& z0F4Kl4Kx^J>dz-Y^MHl{O#&JNGy`Y=P&ZJkJV>VkGm=|@Ml!H7_#{@Q7AY8306DA* z5ZV7s5E>H96?3w?%>KMzzn1BkuY=h}iDh!j#OK%Ld|LA2cp96To#s3BWA#sFb-q#0 zNlTb~Sj=w68Hef0SJ$3+)oIv1L1JT}dyh0{tEA?`KK;EDgx_89Qoqt=pJcFb2Lr>W Hm}e6JvLAX< diff --git a/src/data/tilesets/test.lua b/src/data/tilesets/test.lua deleted file mode 100644 index 8db211e..0000000 --- a/src/data/tilesets/test.lua +++ /dev/null @@ -1,38 +0,0 @@ -return { - version = "1.9", - luaversion = "5.1", - tiledversion = "1.9.0", - name = "test", - class = "", - tilewidth = 16, - tileheight = 16, - spacing = 0, - margin = 0, - columns = 6, - image = "test.png", - imagewidth = 96, - imageheight = 96, - objectalignment = "unspecified", - tilerendersize = "tile", - fillmode = "stretch", - tileoffset = { - x = 0, - y = 0 - }, - grid = { - orientation = "orthogonal", - width = 16, - height = 16 - }, - properties = {}, - wangsets = {}, - tilecount = 36, - tiles = { - { - id = 0, - properties = { - ["collidable"] = true - } - } - } -} diff --git a/src/data/tilesets/test.png b/src/data/tilesets/test.png deleted file mode 100644 index 1404b985b83df68f718fb9a0fd420690104ee1fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%znLS+`Ln`LH zy?!va*+GEyg5e`CeV6FI>XV9lmo$hp9a5bd&`^A+$#lV11CPLa)`b?jd+)vU7p@cjvI#=WWYAfAe`9x_MQ)cP1%kW=U5c@Y@`G zA?p75_qN9R8`k>eZocun_~(W+!MMd;Gun5CupY8I=gd7T?siRoc<$V~WkI)Bv@l;0 z{Jgo&^MuypQnBX@=Zt5!OczVc)-YxVdKnL>Kd66JJ$0SbaixBcDo - - - - - - - - - - - diff --git a/src/lib/sti/plugins/bump.lua b/src/lib/sti/plugins/bump.lua index 905f5f2..aeb0e81 100644 --- a/src/lib/sti/plugins/bump.lua +++ b/src/lib/sti/plugins/bump.lua @@ -14,17 +14,20 @@ local function getKeys(t) return keys end --- The highest 4 bits in 32bit tile ids are used for marking if that tile is --- flipped, so to get the real id, you first need to remove those bits using --- this mask. local bit = require("bit") -local GID_MASK = bit.bnot(bit.lshift(15, 28)) +local FLIPPED_HORIZONTALLY_FLAG = 0x80000000; +local FLIPPED_VERTICALLY_FLAG = 0x40000000; +local FLIPPED_DIAGONALLY_FLAG = 0x20000000; +local ROTATED_HEXAGONAL_120_FLAG = 0x10000000; +local GID_MASK = bit.bnot(bit.bor(FLIPPED_DIAGONALLY_FLAG, FLIPPED_VERTICALLY_FLAG, FLIPPED_HORIZONTALLY_FLAG, ROTATED_HEXAGONAL_120_FLAG)) -local function findTileFromTilesets(tilesets, gid) +local function findTileFromTilesets(tilesets, id) for _, tileset in ipairs(tilesets) do - for _, tile in ipairs(tileset.tiles) do - if tileset.firstgid + tile.id == gid then - return tile + if tileset.firstgid <= id then + for _, tile in ipairs(tileset.tiles) do + if tileset.firstgid + tile.id == id then + return tile + end end end end @@ -46,59 +49,61 @@ return { local id = bit.band(gid, GID_MASK) local tile = findTileFromTilesets(map.tilesets, id) - for _, instance in ipairs(map.tileInstances[gid]) do - -- Every object in every instance of a tile - if tile.objectGroup then - for _, object in ipairs(tile.objectGroup.objects) do - if object.properties.collidable == true then - local t = { - name = object.name, - type = object.type, - x = instance.x + map.offsetx + object.x, - y = instance.y + map.offsety + object.y, - width = object.width, - height = object.height, - layer = instance.layer, - properties = object.properties - } + if tile then + for _, instance in ipairs(map.tileInstances[gid]) do + -- Every object in every instance of a tile + if tile.objectGroup then + for _, object in ipairs(tile.objectGroup.objects) do + if object.properties.collidable == true then + local t = { + name = object.name, + type = object.type, + x = instance.x + map.offsetx + object.x, + y = instance.y + map.offsety + object.y, + width = object.width, + height = object.height, + layer = instance.layer, + properties = object.properties + } - world:add(t, t.x, t.y, t.width, t.height) - table.insert(collidables, t) + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) + end end end - end - -- Every instance of a tile - if tile.properties and tile.properties.collidable == true then - local tileProperties = map.tiles[gid] - local x = instance.x + map.offsetx - local y = instance.y + map.offsety - local sx = tileProperties.sx - local sy = tileProperties.sy + -- Every instance of a tile + if tile.properties and tile.properties.collidable == true then + local tileProperties = map.tiles[gid] + local x = instance.x + map.offsetx + local y = instance.y + map.offsety + local sx = tileProperties.sx + local sy = tileProperties.sy - -- Width and height can only be positive in bump, to get around this - -- For negative scaling just move the position back instead - if sx < 1 then - sx = -sx - x = x - map.tilewidth * sx + -- Width and height can only be positive in bump, to get around this + -- For negative scaling just move the position back instead + if sx < 1 then + sx = -sx + x = x - map.tilewidth * sx + end + if sy < 1 then + sy = -sy + x = x - map.tileheight * sy + end + + local t = { + x = x, + y = y, + width = map.tilewidth * sx, + height = map.tileheight * sy, + layer = instance.layer, + type = tile.type, + properties = tile.properties + } + + world:add(t, t.x, t.y, t.width, t.height) + table.insert(collidables, t) end - if sy < 1 then - sy = -sy - x = x - map.tileheight * sy - end - - local t = { - x = x, - y = y, - width = map.tilewidth * sx, - height = map.tileheight * sy, - layer = instance.layer, - type = tile.type, - properties = tile.properties - } - - world:add(t, t.x, t.y, t.width, t.height) - table.insert(collidables, t) end end end diff --git a/src/systems/map.lua b/src/systems/map.lua index 99409e1..7206043 100644 --- a/src/systems/map.lua +++ b/src/systems/map.lua @@ -3,7 +3,7 @@ local sti = require("lib.sti") local Vector = require("lib.brinevector") function Map:init() - self.map = sti("data/maps/test.lua", { "bump" }) + self.map = sti("data/maps/playground.lua", { "bump" }) self.pool:emit("onMapSwitch", self.map) end diff --git a/src/systems/sprite.lua b/src/systems/sprite.lua index 9aecfe6..727ebd6 100644 --- a/src/systems/sprite.lua +++ b/src/systems/sprite.lua @@ -2,9 +2,6 @@ local data = require("data") local pprint = require("lib.pprint") local Sprite = {} --- TODO: Maybe add a texture atlas library for packing frame data --- TODO: For production maybe use another type of loader? (https://github.com/elloramir/packer, https://github.com/EngineerSmith/Runtime-TextureAtlas) - function Sprite:addToWorld(group, e) if group ~= "sprite" then return end