2020-10-12 15:48:14 +00:00
|
|
|
(local util (require :lib.util))
|
|
|
|
(local lume (require :lib.lume))
|
|
|
|
|
2020-10-29 02:59:47 +00:00
|
|
|
(local flags [:walkable :neutable :debris])
|
2020-11-16 16:09:14 +00:00
|
|
|
(local flag-to-bit {})
|
|
|
|
(each [iflag flag (ipairs flags)]
|
|
|
|
(tset flag-to-bit flag (bit.lshift 1 (- iflag 1))))
|
2020-10-12 15:48:14 +00:00
|
|
|
|
2020-10-29 02:59:47 +00:00
|
|
|
(fn deserialize [tile]
|
|
|
|
(match (type tile)
|
|
|
|
:string {:gfx (tile:fromhex) :flags {}}
|
|
|
|
:table (doto tile (tset :gfx (tile.gfx:fromhex)))))
|
|
|
|
|
|
|
|
(fn serialize [tile] (doto (lume.clone tile) (tset :gfx (tile.gfx:tohex))))
|
|
|
|
|
2020-11-23 00:44:56 +00:00
|
|
|
(local fn-tiles "game/tiles.json")
|
|
|
|
(local fn-portraits "game/portraits.json")
|
|
|
|
(local fn-font "game/font.json")
|
|
|
|
|
|
|
|
(fn loadgfx [filename] (lume.map (util.readjson filename) deserialize))
|
|
|
|
(fn savegfx [filename gfx] (util.writejson filename (lume.map gfx serialize)))
|
|
|
|
|
|
|
|
(fn appendgfx [org gfx]
|
|
|
|
(each [_ g (ipairs gfx)]
|
|
|
|
(when g.label (org:append g.label))
|
|
|
|
(org:append [:bytes g.gfx])))
|
|
|
|
|
|
|
|
(fn appendtiles [org]
|
|
|
|
(local tiles (loadgfx fn-tiles))
|
|
|
|
(appendgfx org tiles)
|
|
|
|
(appendgfx org (loadgfx fn-portraits))
|
2020-11-16 16:09:14 +00:00
|
|
|
(org:append :tileflags)
|
|
|
|
(each [_ tile (ipairs tiles)]
|
|
|
|
(var flags 0)
|
|
|
|
(each [flag _ (pairs tile.flags)]
|
|
|
|
(set flags (bit.bor flags (. flag-to-bit flag))))
|
|
|
|
(org:append [:db flags])))
|
2020-10-12 15:48:14 +00:00
|
|
|
|
2020-10-19 00:13:26 +00:00
|
|
|
(fn appendmaps [org]
|
2020-10-29 17:10:57 +00:00
|
|
|
(local map (util.readjson "game/map00001.json"))
|
|
|
|
(org:append :map [:bytes (map.map:fromhex)]))
|
2020-10-19 00:13:26 +00:00
|
|
|
|
2020-11-23 00:44:56 +00:00
|
|
|
{: loadgfx : savegfx : appendtiles : appendgfx : appendmaps : flags : flag-to-bit
|
|
|
|
: fn-tiles : fn-portraits : fn-font}
|
2020-10-12 15:48:14 +00:00
|
|
|
|