diff options
| author | iamcheeseman <[hidden email]> | 2026-01-17 13:10:38 -0500 |
|---|---|---|
| committer | iamcheeseman <[hidden email]> | 2026-01-17 13:10:47 -0500 |
| commit | eee06361048e34f6ca21348e8776636da95ef3f8 (patch) | |
| tree | 7db94de6a1adeac5baf462c963ba53e6fcc31856 | |
| parent | f60ae3ed7160a4f3c523b2f56ad06dfc8319aca4 (diff) | |
add props
28 files changed, 1749 insertions, 174 deletions
diff --git a/res/img/carrabasset_big_trunk.png b/res/img/carrabasset_big_trunk.png Binary files differnew file mode 100644 index 0000000..689fdf6 --- /dev/null +++ b/res/img/carrabasset_big_trunk.png diff --git a/res/img/carrabasset_vines_0.png b/res/img/carrabasset_vines_0.png Binary files differnew file mode 100644 index 0000000..97e2482 --- /dev/null +++ b/res/img/carrabasset_vines_0.png diff --git a/res/img/carrabasset_vines_1.png b/res/img/carrabasset_vines_1.png Binary files differnew file mode 100644 index 0000000..e2116d2 --- /dev/null +++ b/res/img/carrabasset_vines_1.png diff --git a/res/img/carrabasset_vines_2.png b/res/img/carrabasset_vines_2.png Binary files differnew file mode 100644 index 0000000..2a43b05 --- /dev/null +++ b/res/img/carrabasset_vines_2.png diff --git a/res/img/carrabassett_big_bush_0.png b/res/img/carrabassett_big_bush_0.png Binary files differnew file mode 100644 index 0000000..fc11931 --- /dev/null +++ b/res/img/carrabassett_big_bush_0.png diff --git a/res/img/carrabassett_props.png b/res/img/carrabassett_props.png Binary files differnew file mode 100644 index 0000000..5b28a5b --- /dev/null +++ b/res/img/carrabassett_props.png diff --git a/res/img/carrabassett_small_bush_0.png b/res/img/carrabassett_small_bush_0.png Binary files differnew file mode 100644 index 0000000..dc926e4 --- /dev/null +++ b/res/img/carrabassett_small_bush_0.png diff --git a/res/img/carrabassett_small_trunk.png b/res/img/carrabassett_small_trunk.png Binary files differnew file mode 100644 index 0000000..bfef5d5 --- /dev/null +++ b/res/img/carrabassett_small_trunk.png diff --git a/res/img/lamp_post_0.png b/res/img/lamp_post_0.png Binary files differnew file mode 100644 index 0000000..c7efa8e --- /dev/null +++ b/res/img/lamp_post_0.png diff --git a/res/img/small_lamp.png b/res/img/small_lamp.png Binary files differnew file mode 100644 index 0000000..120a22d --- /dev/null +++ b/res/img/small_lamp.png diff --git a/res/img/windchimes_0.png b/res/img/windchimes_0.png Binary files differnew file mode 100644 index 0000000..9e1ba66 --- /dev/null +++ b/res/img/windchimes_0.png diff --git a/res/img/windchimes_1.png b/res/img/windchimes_1.png Binary files differnew file mode 100644 index 0000000..892a768 --- /dev/null +++ b/res/img/windchimes_1.png diff --git a/res/props.tsj b/res/props.tsj new file mode 100644 index 0000000..dba886b --- /dev/null +++ b/res/props.tsj @@ -0,0 +1,78 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"props", + "spacing":0, + "tilecount":10, + "tiledversion":"1.11.2", + "tileheight":55, + "tiles":[ + { + "id":0, + "image":"img\/carrabasset_vines_0.png", + "imageheight":38, + "imagewidth":14 + }, + { + "id":1, + "image":"img\/carrabasset_big_trunk.png", + "imageheight":14, + "imagewidth":29 + }, + { + "id":2, + "image":"img\/carrabasset_vines_1.png", + "imageheight":22, + "imagewidth":14 + }, + { + "id":4, + "image":"img\/carrabassett_big_bush_0.png", + "imageheight":19, + "imagewidth":32 + }, + { + "id":6, + "image":"img\/carrabassett_small_bush_0.png", + "imageheight":18, + "imagewidth":16 + }, + { + "id":7, + "image":"img\/carrabassett_small_trunk.png", + "imageheight":22, + "imagewidth":14 + }, + { + "id":8, + "image":"img\/lamp_post_0.png", + "imageheight":55, + "imagewidth":26 + }, + { + "id":9, + "image":"img\/small_lamp.png", + "imageheight":9, + "imagewidth":5 + }, + { + "id":10, + "image":"img\/windchimes_0.png", + "imageheight":16, + "imagewidth":9 + }, + { + "id":11, + "image":"img\/windchimes_1.png", + "imageheight":25, + "imagewidth":9 + }], + "tilewidth":32, + "type":"tileset", + "version":"1.10" +}
\ No newline at end of file diff --git a/res/rooms/carrabassett0.tmj b/res/rooms/carrabassett0.tmj index a765631..803f112 100644 --- a/res/rooms/carrabassett0.tmj +++ b/res/rooms/carrabassett0.tmj @@ -3,6 +3,630 @@ "infinite":false, "layers":[ { + "draworder":"topdown", + "id":5, + "name":"Props", + "objects":[ + { + "gid":53, + "height":55, + "id":10, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":26, + "x":340, + "y":200 + }, + { + "gid":54, + "height":9, + "id":11, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":5, + "x":360, + "y":168 + }, + { + "gid":51, + "height":18, + "id":12, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":352, + "y":200 + }, + { + "gid":51, + "height":18, + "id":13, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":412, + "y":200 + }, + { + "gid":51, + "height":18, + "id":14, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":364, + "y":200 + }, + { + "gid":49, + "height":19, + "id":15, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":172, + "y":200 + }, + { + "gid":46, + "height":14, + "id":16, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":29, + "x":224, + "y":200 + }, + { + "gid":47, + "height":22, + "id":17, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":220, + "y":92 + }, + { + "gid":47, + "height":22, + "id":18, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":296, + "y":92 + }, + { + "gid":47, + "height":22, + "id":19, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":340, + "y":76 + }, + { + "gid":47, + "height":22, + "id":20, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":416, + "y":60 + }, + { + "gid":47, + "height":22, + "id":21, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":492, + "y":76 + }, + { + "gid":45, + "height":38, + "id":22, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":432, + "y":76 + }, + { + "gid":45, + "height":38, + "id":23, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":352, + "y":92 + }, + { + "gid":45, + "height":38, + "id":24, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":236, + "y":108 + }, + { + "gid":45, + "height":38, + "id":25, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":80, + "y":124 + }, + { + "gid":45, + "height":38, + "id":30, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":528, + "y":100 + }, + { + "gid":45, + "height":38, + "id":31, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":472, + "y":88 + }, + { + "gid":45, + "height":38, + "id":33, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":512, + "y":96 + }, + { + "gid":45, + "height":38, + "id":34, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":60, + "y":124 + }, + { + "gid":45, + "height":38, + "id":35, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":44, + "y":148 + }, + { + "gid":45, + "height":38, + "id":37, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":24, + "y":180 + }, + { + "gid":45, + "height":38, + "id":38, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":148, + "y":96 + }, + { + "gid":47, + "height":22, + "id":40, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":260, + "y":92 + }, + { + "gid":47, + "height":22, + "id":42, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":164, + "y":88 + }, + { + "gid":47, + "height":22, + "id":43, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":128, + "y":100 + }, + { + "gid":49, + "height":19, + "id":44, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":20, + "y":280 + }, + { + "gid":49, + "height":19, + "id":45, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":304, + "y":200 + }, + { + "gid":51, + "height":18, + "id":46, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":260, + "y":200 + }, + { + "gid":51, + "height":18, + "id":47, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":284, + "y":200 + }, + { + "gid":51, + "height":18, + "id":48, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":132, + "y":248 + }, + { + "gid":51, + "height":18, + "id":49, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":96, + "y":248 + }, + { + "gid":51, + "height":18, + "id":50, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":64, + "y":280 + }, + { + "gid":52, + "height":22, + "id":51, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":116, + "y":248 + }, + { + "gid":52, + "height":22, + "id":52, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":300, + "y":200 + }, + { + "gid":52, + "height":22, + "id":53, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":448, + "y":232 + }, + { + "gid":55, + "height":16, + "id":56, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":9, + "x":484, + "y":208 + }, + { + "gid":51, + "height":18, + "id":57, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":540, + "y":152 + }, + { + "gid":51, + "height":18, + "id":58, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":612, + "y":152 + }, + { + "gid":49, + "height":19, + "id":59, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":576, + "y":152 + }, + + { + "gid":47, + "height":22, + "id":60, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":556, + "y":124 + }, + { + "gid":45, + "height":38, + "id":61, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":572, + "y":136 + }, + { + "gid":45, + "height":38, + "id":62, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":588, + "y":124 + }, + { + "gid":47, + "height":22, + "id":65, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":580, + "y":132 + }, + { + "gid":47, + "height":22, + "id":67, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":504, + "y":80 + }, + { + "gid":47, + "height":22, + "id":68, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":424, + "y":68 + }, + { + "gid":47, + "height":22, + "id":69, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":248, + "y":100 + }, + { + "gid":2147483701, + "height":55, + "id":71, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":26, + "x":484, + "y":232 + }, + { + "gid":45, + "height":38, + "id":80, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":400, + "y":172 + }, + { + "gid":47, + "height":22, + "id":81, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":412, + "y":156 + }, + { + "gid":45, + "height":38, + "id":82, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":436, + "y":172 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { "data":[40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 19, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, @@ -10,11 +634,11 @@ 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 31, 19, 19, 19, 31, 19, 31, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 17, 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, 16, 31, 31, 31, 19, 19, 31, - 40, 40, 21, 17, 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, - 40, 40, 32, 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, + 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 20, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 19, 31, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 21, 17, 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, 5, 18, 9, 9, 20, 9, 9, - 40, 32, 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, 5, 18, 9, 39, 40, 40, 40, 40, 40, 40, - 40, 32, 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, 10, 31, 31, 28, 40, 40, 40, 40, 40, 40, + 40, 32, 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, 7, 40, 40, 40, 40, 40, 40, + 40, 32, 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, 7, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 41, 9, 20, 20, 20, 18, 20, 20, 9, 20, 9, 20, 9, 20, 20, 9, 9, 18, 6, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 17, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 9, 9, 20, 20, 9, 39, 40, 40, 40, 40, 40, 40, @@ -48,7 +672,7 @@ "visible":true, "width":0, "x":240, - "y":184 + "y":200 }, { "height":48, @@ -67,8 +691,8 @@ "x":0, "y":0 }], - "nextlayerid":3, - "nextobjectid":4, + "nextlayerid":6, + "nextobjectid":83, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -77,6 +701,10 @@ { "firstgid":1, "source":"..\/tileset.tsj" + }, + { + "firstgid":45, + "source":"..\/props.tsj" }], "tilewidth":16, "type":"map", diff --git a/res/rooms/carrabassett1.tmj b/res/rooms/carrabassett1.tmj index 91274b9..dbefbe3 100644 --- a/res/rooms/carrabassett1.tmj +++ b/res/rooms/carrabassett1.tmj @@ -3,6 +3,378 @@ "infinite":false, "layers":[ { + "draworder":"topdown", + "id":5, + "name":"Props", + "objects":[ + { + "gid":49, + "height":19, + "id":19, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":92, + "y":296 + }, + { + "gid":46, + "height":14, + "id":7, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":29, + "x":144, + "y":296 + }, + { + "gid":2147483701, + "height":55, + "id":9, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":26, + "x":180, + "y":296 + }, + { + "gid":56, + "height":25, + "id":10, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":9, + "x":179, + "y":281 + }, + { + "gid":56, + "height":25, + "id":11, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":9, + "x":134, + "y":281 + }, + { + "gid":53, + "height":55, + "id":8, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":26, + "x":116, + "y":296 + }, + { + "gid":51, + "height":18, + "id":13, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":127, + "y":296 + }, + { + "gid":51, + "height":18, + "id":14, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":181, + "y":296 + }, + { + "gid":51, + "height":18, + "id":15, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":224, + "y":296 + }, + { + "gid":51, + "height":18, + "id":16, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":252, + "y":296 + }, + { + "gid":51, + "height":18, + "id":17, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":292, + "y":280 + }, + { + "gid":49, + "height":19, + "id":18, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":48, + "y":280 + }, + { + "gid":45, + "height":38, + "id":20, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":80, + "y":104 + }, + { + "gid":47, + "height":22, + "id":24, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":88, + "y":100 + }, + { + "gid":47, + "height":22, + "id":25, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":100, + "y":96 + }, + { + "gid":47, + "height":22, + "id":26, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":108, + "y":88 + }, + { + "gid":45, + "height":38, + "id":27, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":116, + "y":88 + }, + { + "gid":45, + "height":38, + "id":29, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":96, + "y":96 + }, + { + "gid":45, + "height":38, + "id":30, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":192, + "y":76 + }, + { + "gid":45, + "height":38, + "id":32, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":272, + "y":128 + }, + + { + "gid":45, + "height":38, + "id":33, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":244, + "y":100 + }, + { + "gid":47, + "height":22, + "id":34, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":228, + "y":72 + }, + { + "gid":47, + "height":22, + "id":35, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":264, + "y":104 + }, + { + "gid":47, + "height":22, + "id":36, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":284, + "y":128 + }, + { + "gid":47, + "height":22, + "id":37, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":40, + "y":108 + }, + { + "gid":47, + "height":22, + "id":38, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":56, + "y":92 + }, + { + "gid":45, + "height":38, + "id":39, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":68, + "y":108 + }, + { + "gid":45, + "height":38, + "id":40, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":24, + "y":172 + }, + { + "gid":52, + "height":22, + "id":41, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":272, + "y":280 + }, + { + "gid":51, + "height":18, + "id":42, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":24, + "y":200 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { "data":[40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 28, 40, 40, 40, 40, 40, 40, @@ -68,8 +440,8 @@ "x":0, "y":0 }], - "nextlayerid":3, - "nextobjectid":7, + "nextlayerid":6, + "nextobjectid":43, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -78,6 +450,10 @@ { "firstgid":1, "source":"..\/tileset.tsj" + }, + { + "firstgid":45, + "source":"..\/props.tsj" }], "tilewidth":16, "type":"map", diff --git a/res/rooms/carrabassett2.tmj b/res/rooms/carrabassett2.tmj index 837862a..118837f 100644 --- a/res/rooms/carrabassett2.tmj +++ b/res/rooms/carrabassett2.tmj @@ -3,6 +3,221 @@ "infinite":false, "layers":[ { + "draworder":"topdown", + "id":3, + "name":"Props", + "objects":[ + { + "gid":45, + "height":38, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":4, + "y":124 + }, + { + "gid":45, + "height":38, + "id":2, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":32, + "y":104 + }, + { + "gid":45, + "height":38, + "id":3, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":128, + "y":72 + }, + { + "gid":45, + "height":38, + "id":4, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":212, + "y":104 + }, + { + "gid":47, + "height":22, + "id":5, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":104, + "y":124 + }, + { + "gid":45, + "height":38, + "id":6, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":116, + "y":140 + }, + { + "gid":49, + "height":19, + "id":7, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":180, + "y":136 + }, + { + "gid":53, + "height":55, + "id":8, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":26, + "x":32, + "y":152 + }, + { + "gid":56, + "height":25, + "id":9, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":9, + "x":52, + "y":136 + }, + { + "gid":52, + "height":22, + "id":10, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":14, + "x":84, + "y":152 + }, + { + "gid":49, + "height":19, + "id":11, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":32, + "x":88, + "y":72 + }, + { + "gid":51, + "height":18, + "id":12, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":120, + "y":88 + }, + { + "gid":51, + "height":18, + "id":14, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":56, + "y":56 + }, + { + "gid":51, + "height":18, + "id":15, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":128, + "y":152 + }, + { + "gid":51, + "height":18, + "id":16, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":20, + "y":152 + }, + { + "gid":51, + "height":18, + "id":17, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":40, + "y":152 + }, + { + "gid":51, + "height":18, + "id":18, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":52, + "y":152 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { "data":[40, 40, 40, 8, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 10, 31, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, @@ -33,8 +248,8 @@ "x":0, "y":0 }], - "nextlayerid":2, - "nextobjectid":1, + "nextlayerid":4, + "nextobjectid":19, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -43,6 +258,10 @@ { "firstgid":1, "source":"..\/tileset.tsj" + }, + { + "firstgid":45, + "source":"..\/props.tsj" }], "tilewidth":16, "type":"map", diff --git a/res/rooms/carrabassett3.tmj b/res/rooms/carrabassett3.tmj index ed79838..4e9891e 100644 --- a/res/rooms/carrabassett3.tmj +++ b/res/rooms/carrabassett3.tmj @@ -53,7 +53,7 @@ "x":0, "y":0 }], - "nextlayerid":2, + "nextlayerid":3, "nextobjectid":1, "orientation":"orthogonal", "renderorder":"right-down", diff --git a/res/rooms/carrabassett4.tmj b/res/rooms/carrabassett4.tmj index acb18b1..d9e6df7 100644 --- a/res/rooms/carrabassett4.tmj +++ b/res/rooms/carrabassett4.tmj @@ -68,7 +68,7 @@ "x":0, "y":0 }], - "nextlayerid":3, + "nextlayerid":4, "nextobjectid":3, "orientation":"orthogonal", "renderorder":"right-down", diff --git a/src/assets.odin b/src/assets.odin index 592937b..d9a647a 100644 --- a/src/assets.odin +++ b/src/assets.odin @@ -8,11 +8,23 @@ package demonchime Image_Id :: enum { Bullet, + Carrabasset_Big_Trunk, + Carrabasset_Vines_0, + Carrabasset_Vines_1, + Carrabasset_Vines_2, + Carrabassett_Big_Bush_0, + Carrabassett_Props, + Carrabassett_Small_Bush_0, + Carrabassett_Small_Trunk, Dash_Pickup, Double_Jump_Pickup, + Lamp_Post_0, Pistol, Player, + Small_Lamp, Tilesets, + Windchimes_0, + Windchimes_1, } Animation_Id :: enum { @@ -28,131 +40,102 @@ Room_Id :: enum { Carrabassett4, } -Tileset_Id :: enum { - Tileset, -} - Object_Type :: enum { Collision, Player_Spawn, + Prop, Upgrade, } images: [Image_Id]Image_Resource = { .Bullet = {data = #load("../res/img/bullet.qoi"), anim = .None}, + .Carrabasset_Big_Trunk = {data = #load("../.compiled-res/carrabasset_big_trunk.qoi"), anim = .None}, + .Carrabasset_Vines_0 = {data = #load("../.compiled-res/carrabasset_vines_0.qoi"), anim = .None}, + .Carrabasset_Vines_1 = {data = #load("../.compiled-res/carrabasset_vines_1.qoi"), anim = .None}, + .Carrabasset_Vines_2 = {data = #load("../.compiled-res/carrabasset_vines_2.qoi"), anim = .None}, + .Carrabassett_Big_Bush_0 = {data = #load("../.compiled-res/carrabassett_big_bush_0.qoi"), anim = .None}, + .Carrabassett_Props = {data = #load("../.compiled-res/carrabassett_props.qoi"), anim = .None}, + .Carrabassett_Small_Bush_0 = {data = #load("../.compiled-res/carrabassett_small_bush_0.qoi"), anim = .None}, + .Carrabassett_Small_Trunk = {data = #load("../.compiled-res/carrabassett_small_trunk.qoi"), anim = .None}, .Dash_Pickup = {data = #load("../res/img/dash_pickup.qoi"), anim = .None}, .Double_Jump_Pickup = {data = #load("../res/img/double_jump_pickup.qoi"), anim = .None}, + .Lamp_Post_0 = {data = #load("../.compiled-res/lamp_post_0.qoi"), anim = .None}, .Pistol = {data = #load("../res/img/pistol.qoi"), anim = .None}, .Player = {data = #load("../.compiled-res/player-sheet.qoi"), anim = .Player}, + .Small_Lamp = {data = #load("../.compiled-res/small_lamp.qoi"), anim = .None}, .Tilesets = {data = #load("../.compiled-res/tilesets.qoi"), anim = .None}, + .Windchimes_0 = {data = #load("../.compiled-res/windchimes_0.qoi"), anim = .None}, + .Windchimes_1 = {data = #load("../.compiled-res/windchimes_1.qoi"), anim = .None}, } animations: [Animation_Id]Animation_Resource = { .None = {frame_count=1, frame_durations={100}, tags={}}, - .Player = {frame_count = 23, frame_durations = {100, 100, 100, 100, 100, 100, 75, 75, 75, 75, 75, 75, 75, 75, 100, 100, 100, 100, 100, 100, 100, 100, 100}, tags = {"idle"={from = 0, to = 5}, "jump_trans"={from = 16, to = 16}, "run"={from = 6, to = 13}, "jump_down"={from = 17, to = 18}, "jump_up"={from = 14, to = 15}, "sleep"={from = 19, to = 22}}}, + .Player = {frame_count = 23, frame_durations = {100, 100, 100, 100, 100, 100, 75, 75, 75, 75, 75, 75, 75, 75, 100, 100, 100, 100, 100, 100, 100, 100, 100}, tags = {"jump_up"={from = 14, to = 15}, "run"={from = 6, to = 13}, "jump_trans"={from = 16, to = 16}, "jump_down"={from = 17, to = 18}, "idle"={from = 0, to = 5}, "sleep"={from = 19, to = 22}}}, } rooms: [Room_Id]Room_Resource = { - .Carrabassett0 = {width=40, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 19, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 16, 19, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 31, 19, 19, 19, 31, 19, 31, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 17, 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, 16, 31, 31, 31, 19, 19, 31, 40, 40, 21, 17, 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, 40, 40, 32, 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, 40, 21, 17, 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, 5, 18, 9, 9, 20, 9, 9, 40, 32, 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, 5, 18, 9, 39, 40, 40, 40, 40, 40, 40, 40, 32, 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, 10, 31, 31, 28, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 41, 9, 20, 20, 20, 18, 20, 20, 9, 20, 9, 20, 9, 20, 20, 9, 9, 18, 6, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 17, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 9, 9, 20, 20, 9, 39, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 5, 20, 20, 18, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 20, 9, 20, 18, 20, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Player_Spawn, pos = {240, 184}, size = {0, 0}, parallax = {0, 0}, properties = {}}, {type = .Collision, pos = {0, 0}, size = {48, 48}, parallax = {0, 0}, properties = {}}, }, background_image=nil}, - .Carrabassett1 = {width=20, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 17, 0, 0, 0, 16, 19, 28, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 17, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 38, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 28, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 43, 9, 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 18, 20, 20, 40, 40, 40, 40, 40, 43, 9, 9, 9, 9, 9, 9, 18, 9, 18, 18, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Upgrade, pos = {160, 240}, size = {0, 0}, parallax = {0, 0}, properties = {"image"="res/img/dash_pickup.qoi", "type"=0}}, }, background_image=nil}, - .Carrabassett2 = {width=20, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 8, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 10, 31, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 20, 42, 0, 0, 0, 10, 19, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 28, 38, 18, 6, 0, 0, 0, 0, 10, 19, 28, 40, 40, 40, 40, 40, 27, 17, 0, 0, 10, 28, 40, 38, 20, 42, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 17, 0, 0, 0, 0, 16, 19, 31, 19, 17, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 39, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 18, 9, 9, 39, 40, 40, 40, 40, 40, 40, 20, 9, 18, 9, 9, 9, 20, 20, 9, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={}, background_image=nil}, - .Carrabassett3 = {width=20, height=40, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 19, 31, 19, 19, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 19, 31, 17, 0, 0, 0, 0, 0, 16, 19, 28, 40, 40, 40, 40, 40, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 28, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 28, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 9, 39, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 18, 9, 18, 39, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 41, 20, 20, 18, 18, 39, 40, 40, 40, 40, 40, 21, 28, 40, 40, 32, 0, 0, 0, 0, 10, 31, 31, 19, 19, 28, 40, 40, 40, 40, 27, 17, 7, 40, 40, 43, 42, 0, 0, 0, 0, 0, 0, 0, 0, 10, 19, 19, 19, 31, 17, 0, 7, 40, 40, 40, 38, 18, 18, 20, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 38, 20, 20, 18, 6, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 6, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 6, 0, 0, 0, 0, 0, 7, 40, 40, 21, 28, 40, 21, 31, 28, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 7, 40, 40, 32, 16, 19, 17, 0, 16, 19, 19, 31, 28, 40, 38, 9, 20, 6, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 31, 19, 19, 17, 0, 0, 7, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 18, 9, 9, 18, 20, 39, 40, 40, 43, 6, 0, 0, 0, 0, 0, 41, 20, 20, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 42, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 20, 20, 42, 0, 10, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 19, 19, 28, 40, 8, 0, 0, 0, 10, 31, 19, 31, 28, 40, 40, 40, 40, 40, 40, 32, 0, 0, 10, 19, 17, 0, 0, 0, 0, 0, 0, 0, 16, 31, 31, 31, 19, 31, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 38, 9, 9, 9, 20, 20, 18, 18, 9, 9, 42, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 5, 20, 20, 9, 9, 18, 40, 40, 40, 21, 31, 31, 19, 31, 31, 19, 19, 17, 0, 5, 39, 40, 40, 40, 40, 40, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 28, 40, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 41, 20, 18, 20, 39, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 6, 0, 0, 0, 0, 41, 9, 9, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 6, 0, 0, 41, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={}, background_image=nil}, - .Carrabassett4 = {width=20, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 19, 19, 17, 0, 10, 31, 19, 31, 28, 40, 40, 40, 40, 40, 40, 40, 21, 31, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 31, 19, 28, 40, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 9, 20, 9, 20, 20, 9, 9, 39, 40, 40, 18, 9, 20, 18, 20, 9, 9, 9, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Upgrade, pos = {160, 241}, size = {0, 0}, parallax = {0, 0}, properties = {"type"=1, "image"="res/img/double_jump_pickup.qoi"}}, }, background_image=nil}, -} - -tilesets: [Tileset_Id]Tileset_Resource = { - .Tileset = {tiles={45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88}, image=.Tilesets}, + .Carrabassett0 = {width=40, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 19, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 16, 19, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 31, 19, 19, 19, 31, 19, 31, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 17, 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, 16, 31, 31, 31, 19, 19, 31, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 20, 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 19, 31, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 21, 17, 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, 5, 18, 9, 9, 20, 9, 9, 40, 32, 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, 7, 40, 40, 40, 40, 40, 40, 40, 32, 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, 7, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 41, 9, 20, 20, 20, 18, 20, 20, 9, 20, 9, 20, 9, 20, 20, 9, 9, 18, 6, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 17, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 9, 9, 20, 20, 9, 39, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 5, 20, 20, 18, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 20, 9, 20, 18, 20, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Prop, tile_id = 53, pos = {340, 200}, size = {26, 55}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 54, pos = {360, 168}, size = {5, 9}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {352, 200}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {412, 200}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {364, 200}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {172, 200}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 46, pos = {224, 200}, size = {29, 14}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {220, 92}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {296, 92}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {340, 76}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {416, 60}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {492, 76}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {432, 76}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {352, 92}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {236, 108}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {80, 124}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {528, 100}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {472, 88}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {512, 96}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {60, 124}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {44, 148}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {24, 180}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {148, 96}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {260, 92}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {164, 88}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {128, 100}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {20, 280}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {304, 200}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {260, 200}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {284, 200}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {132, 248}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {96, 248}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {64, 280}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 52, pos = {116, 248}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 52, pos = {300, 200}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 52, pos = {448, 232}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 55, pos = {484, 208}, size = {9, 16}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {540, 152}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {612, 152}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {576, 152}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {556, 124}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {572, 136}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {588, 124}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {580, 132}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {504, 80}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {424, 68}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {248, 100}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 53, pos = {484, 232}, size = {-26, 55}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {400, 172}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {412, 156}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {436, 172}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Player_Spawn, tile_id = nil, pos = {240, 200}, size = {0, 0}, parallax = {0, 0}, properties = {}}, {type = .Collision, tile_id = nil, pos = {0, 0}, size = {48, 48}, parallax = {0, 0}, properties = {}}, }, background_color=Color{0, 0, 0, 1}, background_images={} }, + .Carrabassett1 = {width=20, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 17, 0, 0, 0, 16, 19, 28, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 17, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 28, 40, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 38, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 28, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 43, 9, 9, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 18, 20, 20, 40, 40, 40, 40, 40, 43, 9, 9, 9, 9, 9, 9, 18, 9, 18, 18, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Prop, tile_id = 49, pos = {92, 296}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 46, pos = {144, 296}, size = {29, 14}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 53, pos = {180, 296}, size = {-26, 55}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 56, pos = {179, 281}, size = {9, 25}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 56, pos = {134, 281}, size = {9, 25}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 53, pos = {116, 296}, size = {26, 55}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {127, 296}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {181, 296}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {224, 296}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {252, 296}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {292, 280}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {48, 280}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {80, 104}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {88, 100}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {100, 96}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {108, 88}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {116, 88}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {96, 96}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {192, 76}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {272, 128}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {244, 100}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {228, 72}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {264, 104}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {284, 128}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {40, 108}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {56, 92}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {68, 108}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {24, 172}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 52, pos = {272, 280}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {24, 200}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Upgrade, tile_id = nil, pos = {160, 240}, size = {0, 0}, parallax = {0, 0}, properties = {"image"="res/img/dash_pickup.qoi", "type"=0}}, }, background_color=Color{0, 0, 0, 1}, background_images={} }, + .Carrabassett2 = {width=20, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 8, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 10, 31, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 20, 42, 0, 0, 0, 10, 19, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 28, 38, 18, 6, 0, 0, 0, 0, 10, 19, 28, 40, 40, 40, 40, 40, 27, 17, 0, 0, 10, 28, 40, 38, 20, 42, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 17, 0, 0, 0, 0, 16, 19, 31, 19, 17, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 39, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 18, 9, 9, 39, 40, 40, 40, 40, 40, 40, 20, 9, 18, 9, 9, 9, 20, 20, 9, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Prop, tile_id = 45, pos = {4, 124}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {32, 104}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {128, 72}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {212, 104}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 47, pos = {104, 124}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 45, pos = {116, 140}, size = {14, 38}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {180, 136}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 53, pos = {32, 152}, size = {26, 55}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 56, pos = {52, 136}, size = {9, 25}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 52, pos = {84, 152}, size = {14, 22}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 49, pos = {88, 72}, size = {32, 19}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {120, 88}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {56, 56}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {128, 152}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {20, 152}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {40, 152}, size = {16, 18}, parallax = {0, 0}, properties = {}}, {type = .Prop, tile_id = 51, pos = {52, 152}, size = {16, 18}, parallax = {0, 0}, properties = {}}, }, background_color=Color{0, 0, 0, 1}, background_images={} }, + .Carrabassett3 = {width=20, height=40, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 19, 31, 19, 19, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 19, 31, 17, 0, 0, 0, 0, 0, 16, 19, 28, 40, 40, 40, 40, 40, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 28, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 28, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 9, 39, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 18, 9, 18, 39, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 41, 20, 20, 18, 18, 39, 40, 40, 40, 40, 40, 21, 28, 40, 40, 32, 0, 0, 0, 0, 10, 31, 31, 19, 19, 28, 40, 40, 40, 40, 27, 17, 7, 40, 40, 43, 42, 0, 0, 0, 0, 0, 0, 0, 0, 10, 19, 19, 19, 31, 17, 0, 7, 40, 40, 40, 38, 18, 18, 20, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 38, 20, 20, 18, 6, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 6, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 6, 0, 0, 0, 0, 0, 7, 40, 40, 21, 28, 40, 21, 31, 28, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 7, 40, 40, 32, 16, 19, 17, 0, 16, 19, 19, 31, 28, 40, 38, 9, 20, 6, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 31, 19, 19, 17, 0, 0, 7, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 18, 9, 9, 18, 20, 39, 40, 40, 43, 6, 0, 0, 0, 0, 0, 41, 20, 20, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 42, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 20, 20, 42, 0, 10, 19, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 19, 19, 28, 40, 8, 0, 0, 0, 10, 31, 19, 31, 28, 40, 40, 40, 40, 40, 40, 32, 0, 0, 10, 19, 17, 0, 0, 0, 0, 0, 0, 0, 16, 31, 31, 31, 19, 31, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 38, 9, 9, 9, 20, 20, 18, 18, 9, 9, 42, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 5, 20, 20, 9, 9, 18, 40, 40, 40, 21, 31, 31, 19, 31, 31, 19, 19, 17, 0, 5, 39, 40, 40, 40, 40, 40, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 28, 40, 40, 40, 40, 40, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 41, 20, 18, 20, 39, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 6, 0, 0, 0, 0, 41, 9, 9, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 43, 6, 0, 0, 41, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={}, background_color=Color{0, 0, 0, 1}, background_images={} }, + .Carrabassett4 = {width=20, height=20, tile_width=16, tile_height=16, layers={{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 28, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 19, 19, 17, 0, 10, 31, 19, 31, 28, 40, 40, 40, 40, 40, 40, 40, 21, 31, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 19, 31, 19, 28, 40, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 40, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 27, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 5, 18, 9, 20, 9, 20, 20, 9, 9, 39, 40, 40, 18, 9, 20, 18, 20, 9, 9, 9, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}}, objects={{type = .Upgrade, tile_id = nil, pos = {160, 241}, size = {0, 0}, parallax = {0, 0}, properties = {"image"="res/img/double_jump_pickup.qoi", "type"=1}}, }, background_color=Color{0, 0, 0, 1}, background_images={} }, } tiles: []Tile_Resource = { - {tileset=.Tileset, rect=Rect{start = {0, 0}, size = {16, 16}}, id=1, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 0}, size = {16, 16}}, id=2, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 0}, size = {16, 16}}, id=3, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 0}, size = {16, 16}}, id=4, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 0}, size = {16, 16}}, id=5, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {80, 0}, size = {16, 16}}, id=6, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {96, 0}, size = {16, 16}}, id=7, collisions={Rect{start = {8, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {112, 0}, size = {16, 16}}, id=8, collisions={Rect{start = {0, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 0}, size = {16, 16}}, id=9, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 0}, size = {16, 16}}, id=10, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {160, 0}, size = {16, 16}}, id=11, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {0, 16}, size = {16, 16}}, id=12, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 16}, size = {16, 16}}, id=13, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 16}, size = {16, 16}}, id=14, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 16}, size = {16, 16}}, id=15, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 16}, size = {16, 16}}, id=16, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {80, 16}, size = {16, 16}}, id=17, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {96, 16}, size = {16, 16}}, id=18, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {112, 16}, size = {16, 16}}, id=19, collisions={Rect{start = {0, 0}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 16}, size = {16, 16}}, id=20, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 16}, size = {16, 16}}, id=21, collisions={Rect{start = {8, 0}, size = {8, 8}}, Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {160, 16}, size = {16, 16}}, id=22, collisions={Rect{start = {8, 8}, size = {8, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {0, 32}, size = {16, 16}}, id=23, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 32}, size = {16, 16}}, id=24, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 32}, size = {16, 16}}, id=25, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 32}, size = {16, 16}}, id=26, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 32}, size = {16, 16}}, id=27, collisions={Rect{start = {8, 0}, size = {8, 8}}, Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {80, 32}, size = {16, 16}}, id=28, collisions={Rect{start = {8, 8}, size = {8, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {96, 32}, size = {16, 16}}, id=29, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {112, 32}, size = {16, 16}}, id=30, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 32}, size = {16, 16}}, id=31, collisions={Rect{start = {0, 0}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 32}, size = {16, 16}}, id=32, collisions={Rect{start = {0, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {160, 32}, size = {16, 16}}, id=33, collisions={Rect{start = {8, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {0, 48}, size = {16, 16}}, id=34, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 48}, size = {16, 16}}, id=35, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 48}, size = {16, 16}}, id=36, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 48}, size = {16, 16}}, id=37, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 48}, size = {16, 16}}, id=38, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {80, 48}, size = {16, 16}}, id=39, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {8, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {96, 48}, size = {16, 16}}, id=40, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {112, 48}, size = {16, 16}}, id=41, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 48}, size = {16, 16}}, id=42, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 48}, size = {16, 16}}, id=43, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {160, 48}, size = {16, 16}}, id=44, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {8, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {0, 0}, size = {16, 16}}, id=45, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 0}, size = {16, 16}}, id=46, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 0}, size = {16, 16}}, id=47, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 0}, size = {16, 16}}, id=48, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 0}, size = {16, 16}}, id=49, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {80, 0}, size = {16, 16}}, id=50, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {96, 0}, size = {16, 16}}, id=51, collisions={Rect{start = {8, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {112, 0}, size = {16, 16}}, id=52, collisions={Rect{start = {0, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 0}, size = {16, 16}}, id=53, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 0}, size = {16, 16}}, id=54, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {160, 0}, size = {16, 16}}, id=55, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {0, 16}, size = {16, 16}}, id=56, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 16}, size = {16, 16}}, id=57, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 16}, size = {16, 16}}, id=58, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 16}, size = {16, 16}}, id=59, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 16}, size = {16, 16}}, id=60, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {80, 16}, size = {16, 16}}, id=61, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {96, 16}, size = {16, 16}}, id=62, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {112, 16}, size = {16, 16}}, id=63, collisions={Rect{start = {0, 0}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 16}, size = {16, 16}}, id=64, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 16}, size = {16, 16}}, id=65, collisions={Rect{start = {8, 0}, size = {8, 8}}, Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {160, 16}, size = {16, 16}}, id=66, collisions={Rect{start = {8, 8}, size = {8, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {0, 32}, size = {16, 16}}, id=67, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 32}, size = {16, 16}}, id=68, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 32}, size = {16, 16}}, id=69, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 32}, size = {16, 16}}, id=70, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 32}, size = {16, 16}}, id=71, collisions={Rect{start = {8, 0}, size = {8, 8}}, Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {80, 32}, size = {16, 16}}, id=72, collisions={Rect{start = {8, 8}, size = {8, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {96, 32}, size = {16, 16}}, id=73, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {112, 32}, size = {16, 16}}, id=74, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 32}, size = {16, 16}}, id=75, collisions={Rect{start = {0, 0}, size = {16, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 32}, size = {16, 16}}, id=76, collisions={Rect{start = {0, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {160, 32}, size = {16, 16}}, id=77, collisions={Rect{start = {8, 0}, size = {8, 16}}}}, - {tileset=.Tileset, rect=Rect{start = {0, 48}, size = {16, 16}}, id=78, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {16, 48}, size = {16, 16}}, id=79, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {32, 48}, size = {16, 16}}, id=80, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {48, 48}, size = {16, 16}}, id=81, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {64, 48}, size = {16, 16}}, id=82, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {80, 48}, size = {16, 16}}, id=83, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {8, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {96, 48}, size = {16, 16}}, id=84, collisions={}}, - {tileset=.Tileset, rect=Rect{start = {112, 48}, size = {16, 16}}, id=85, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {128, 48}, size = {16, 16}}, id=86, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {144, 48}, size = {16, 16}}, id=87, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, - {tileset=.Tileset, rect=Rect{start = {160, 48}, size = {16, 16}}, id=88, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {8, 0}, size = {8, 8}}}}, + 1 = {image=.Tilesets, rect=Rect{start = {0, 0}, size = {16, 16}}, id=1, collisions={}}, + 2 = {image=.Tilesets, rect=Rect{start = {16, 0}, size = {16, 16}}, id=2, collisions={}}, + 3 = {image=.Tilesets, rect=Rect{start = {32, 0}, size = {16, 16}}, id=3, collisions={}}, + 4 = {image=.Tilesets, rect=Rect{start = {48, 0}, size = {16, 16}}, id=4, collisions={}}, + 5 = {image=.Tilesets, rect=Rect{start = {64, 0}, size = {16, 16}}, id=5, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, + 6 = {image=.Tilesets, rect=Rect{start = {80, 0}, size = {16, 16}}, id=6, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, + 7 = {image=.Tilesets, rect=Rect{start = {96, 0}, size = {16, 16}}, id=7, collisions={Rect{start = {8, 0}, size = {8, 16}}}}, + 8 = {image=.Tilesets, rect=Rect{start = {112, 0}, size = {16, 16}}, id=8, collisions={Rect{start = {0, 0}, size = {8, 16}}}}, + 9 = {image=.Tilesets, rect=Rect{start = {128, 0}, size = {16, 16}}, id=9, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, + 10 = {image=.Tilesets, rect=Rect{start = {144, 0}, size = {16, 16}}, id=10, collisions={}}, + 11 = {image=.Tilesets, rect=Rect{start = {160, 0}, size = {16, 16}}, id=11, collisions={}}, + 12 = {image=.Tilesets, rect=Rect{start = {0, 16}, size = {16, 16}}, id=12, collisions={}}, + 13 = {image=.Tilesets, rect=Rect{start = {16, 16}, size = {16, 16}}, id=13, collisions={}}, + 14 = {image=.Tilesets, rect=Rect{start = {32, 16}, size = {16, 16}}, id=14, collisions={}}, + 15 = {image=.Tilesets, rect=Rect{start = {48, 16}, size = {16, 16}}, id=15, collisions={}}, + 16 = {image=.Tilesets, rect=Rect{start = {64, 16}, size = {16, 16}}, id=16, collisions={}}, + 17 = {image=.Tilesets, rect=Rect{start = {80, 16}, size = {16, 16}}, id=17, collisions={}}, + 18 = {image=.Tilesets, rect=Rect{start = {96, 16}, size = {16, 16}}, id=18, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, + 19 = {image=.Tilesets, rect=Rect{start = {112, 16}, size = {16, 16}}, id=19, collisions={Rect{start = {0, 0}, size = {16, 8}}}}, + 20 = {image=.Tilesets, rect=Rect{start = {128, 16}, size = {16, 16}}, id=20, collisions={Rect{start = {0, 8}, size = {16, 8}}}}, + 21 = {image=.Tilesets, rect=Rect{start = {144, 16}, size = {16, 16}}, id=21, collisions={Rect{start = {8, 0}, size = {8, 8}}, Rect{start = {0, 8}, size = {8, 8}}}}, + 22 = {image=.Tilesets, rect=Rect{start = {160, 16}, size = {16, 16}}, id=22, collisions={Rect{start = {8, 8}, size = {8, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, + 23 = {image=.Tilesets, rect=Rect{start = {0, 32}, size = {16, 16}}, id=23, collisions={}}, + 24 = {image=.Tilesets, rect=Rect{start = {16, 32}, size = {16, 16}}, id=24, collisions={}}, + 25 = {image=.Tilesets, rect=Rect{start = {32, 32}, size = {16, 16}}, id=25, collisions={}}, + 26 = {image=.Tilesets, rect=Rect{start = {48, 32}, size = {16, 16}}, id=26, collisions={}}, + 27 = {image=.Tilesets, rect=Rect{start = {64, 32}, size = {16, 16}}, id=27, collisions={Rect{start = {8, 0}, size = {8, 8}}, Rect{start = {0, 8}, size = {8, 8}}}}, + 28 = {image=.Tilesets, rect=Rect{start = {80, 32}, size = {16, 16}}, id=28, collisions={Rect{start = {8, 8}, size = {8, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, + 29 = {image=.Tilesets, rect=Rect{start = {96, 32}, size = {16, 16}}, id=29, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, + 30 = {image=.Tilesets, rect=Rect{start = {112, 32}, size = {16, 16}}, id=30, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, + 31 = {image=.Tilesets, rect=Rect{start = {128, 32}, size = {16, 16}}, id=31, collisions={Rect{start = {0, 0}, size = {16, 8}}}}, + 32 = {image=.Tilesets, rect=Rect{start = {144, 32}, size = {16, 16}}, id=32, collisions={Rect{start = {0, 0}, size = {8, 16}}}}, + 33 = {image=.Tilesets, rect=Rect{start = {160, 32}, size = {16, 16}}, id=33, collisions={Rect{start = {8, 0}, size = {8, 16}}}}, + 34 = {image=.Tilesets, rect=Rect{start = {0, 48}, size = {16, 16}}, id=34, collisions={}}, + 35 = {image=.Tilesets, rect=Rect{start = {16, 48}, size = {16, 16}}, id=35, collisions={}}, + 36 = {image=.Tilesets, rect=Rect{start = {32, 48}, size = {16, 16}}, id=36, collisions={}}, + 37 = {image=.Tilesets, rect=Rect{start = {48, 48}, size = {16, 16}}, id=37, collisions={}}, + 38 = {image=.Tilesets, rect=Rect{start = {64, 48}, size = {16, 16}}, id=38, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, + 39 = {image=.Tilesets, rect=Rect{start = {80, 48}, size = {16, 16}}, id=39, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {8, 0}, size = {8, 8}}}}, + 40 = {image=.Tilesets, rect=Rect{start = {96, 48}, size = {16, 16}}, id=40, collisions={}}, + 41 = {image=.Tilesets, rect=Rect{start = {112, 48}, size = {16, 16}}, id=41, collisions={Rect{start = {8, 8}, size = {8, 8}}}}, + 42 = {image=.Tilesets, rect=Rect{start = {128, 48}, size = {16, 16}}, id=42, collisions={Rect{start = {0, 8}, size = {8, 8}}}}, + 43 = {image=.Tilesets, rect=Rect{start = {144, 48}, size = {16, 16}}, id=43, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {0, 0}, size = {8, 8}}}}, + 44 = {image=.Tilesets, rect=Rect{start = {160, 48}, size = {16, 16}}, id=44, collisions={Rect{start = {0, 8}, size = {16, 8}}, Rect{start = {8, 0}, size = {8, 8}}}}, + 45 = {image=.Carrabasset_Vines_0, rect=Rect{start = {0, 0}, size = {14, 38}}, id=45, collisions={}}, + 46 = {image=.Carrabasset_Big_Trunk, rect=Rect{start = {0, 0}, size = {29, 14}}, id=46, collisions={}}, + 47 = {image=.Carrabasset_Vines_1, rect=Rect{start = {0, 0}, size = {14, 22}}, id=47, collisions={}}, + 49 = {image=.Carrabassett_Big_Bush_0, rect=Rect{start = {0, 0}, size = {32, 19}}, id=49, collisions={}}, + 51 = {image=.Carrabassett_Small_Bush_0, rect=Rect{start = {0, 0}, size = {16, 18}}, id=51, collisions={}}, + 52 = {image=.Carrabassett_Small_Trunk, rect=Rect{start = {0, 0}, size = {14, 22}}, id=52, collisions={}}, + 53 = {image=.Lamp_Post_0, rect=Rect{start = {0, 0}, size = {26, 55}}, id=53, collisions={}}, + 54 = {image=.Small_Lamp, rect=Rect{start = {0, 0}, size = {5, 9}}, id=54, collisions={}}, + 55 = {image=.Windchimes_0, rect=Rect{start = {0, 0}, size = {9, 16}}, id=55, collisions={}}, + 56 = {image=.Windchimes_1, rect=Rect{start = {0, 0}, size = {9, 25}}, id=56, collisions={}}, } world: []Room_Position_Resource = { @@ -167,7 +150,6 @@ Resource_Id :: union { Image_Id, Animation_Id, Room_Id, - Tileset_Id, } path_to_resource_id: map[string]Resource_Id = { @@ -176,10 +158,22 @@ path_to_resource_id: map[string]Resource_Id = { "res/rooms/carrabassett0.tmj" = Room_Id.Carrabassett0, "res/rooms/carrabassett1.tmj" = Room_Id.Carrabassett1, "res/rooms/carrabassett3.tmj" = Room_Id.Carrabassett3, + "res/img/carrabasset_vines_2.png" = Image_Id.Carrabasset_Vines_2, "res/img/dash_pickup.qoi" = Image_Id.Dash_Pickup, + "res/img/carrabassett_small_bush_0.png" = Image_Id.Carrabassett_Small_Bush_0, "res/img/player.ase" = Image_Id.Player, + "res/img/carrabasset_vines_1.png" = Image_Id.Carrabasset_Vines_1, + "res/img/windchimes_1.png" = Image_Id.Windchimes_1, + "res/img/carrabassett_big_bush_0.png" = Image_Id.Carrabassett_Big_Bush_0, "res/img/bullet.qoi" = Image_Id.Bullet, + "res/img/small_lamp.png" = Image_Id.Small_Lamp, + "res/img/lamp_post_0.png" = Image_Id.Lamp_Post_0, + "res/img/carrabasset_vines_0.png" = Image_Id.Carrabasset_Vines_0, "res/img/double_jump_pickup.qoi" = Image_Id.Double_Jump_Pickup, + "res/img/carrabassett_small_trunk.png" = Image_Id.Carrabassett_Small_Trunk, + "res/img/carrabasset_big_trunk.png" = Image_Id.Carrabasset_Big_Trunk, "res/img/pistol.qoi" = Image_Id.Pistol, + "res/img/windchimes_0.png" = Image_Id.Windchimes_0, + "res/img/carrabassett_props.png" = Image_Id.Carrabassett_Props, "res/img/tilesets.png" = Image_Id.Tilesets, } diff --git a/src/draw.odin b/src/draw.odin index 43d8c0a..d821a10 100644 --- a/src/draw.odin +++ b/src/draw.odin @@ -2,8 +2,10 @@ package demonchime import "core:c" import "core:math" +import "core:math/linalg" import rl "vendor:raylib" +import rlgl "vendor:raylib/rlgl" Color :: [4]f32 @@ -11,6 +13,11 @@ SCREEN_WIDTH :: 320 SCREEN_HEIGHT :: 320 SCREEN_SIZE :: Vec2{SCREEN_WIDTH, SCREEN_HEIGHT} +// @(default_calling_convention = "c") +// foreign lib { +// DrawTexturePoly :: proc(texture: rl.Texture2D, center: rl.Vector2, points: [^]rl.Vector2, textcoords: [^]rl.Vector2, point_count: c.int, color: Color) --- // Draw a regular polygon (Vector version) +// } + renderer: struct { screen: rl.RenderTexture2D, tint: Color, diff --git a/src/frame_callbacks.odin b/src/frame_callbacks.odin index c264da6..5991ddf 100644 --- a/src/frame_callbacks.odin +++ b/src/frame_callbacks.odin @@ -7,10 +7,13 @@ update_callbacks := []Update_Callback{ update_player, update_bullets, update_upgrade, + update_wiggle_props, } draw_callbacks := []Draw_Callback{ - draw_player, + draw_props, + draw_wiggle_props, + draw_player, // PLAYER HERE draw_bullets, draw_upgrade, } diff --git a/src/main.odin b/src/main.odin index 6e299c8..1d3de1a 100644 --- a/src/main.odin +++ b/src/main.odin @@ -26,6 +26,8 @@ state: struct { debug_mode: bool, camera_target: Vec2, camera: rl.Camera2D, + prop_list: Entity_List(Prop), + wiggle_prop_list: Entity_List(Wiggle_Prop), platform_list: Entity_List(Platform), bullet_list: Entity_List(Bullet), } @@ -86,7 +88,7 @@ frame :: proc() { cam.target = linalg.round(cam.target) rl.BeginMode2D(cam) - renderer.tint = {0.2, 0.2, 0.2, 1} + renderer.tint = get_room(current_room.id).background_color draw_rect({ {0, 0}, {f32(current_room.width), f32(current_room.height)}, @@ -96,7 +98,6 @@ frame :: proc() { for cb in draw_callbacks { cb() } - draw_room(current_room.id) rl.DrawRectangleGradientH( @@ -165,6 +166,8 @@ cleanup :: proc() { deinit_player() delete_entity_list(state.platform_list) delete_entity_list(state.bullet_list) + delete_entity_list(state.prop_list) + delete_entity_list(state.wiggle_prop_list) phys.destroy_world() } diff --git a/src/prop.odin b/src/prop.odin new file mode 100644 index 0000000..d46f181 --- /dev/null +++ b/src/prop.odin @@ -0,0 +1,160 @@ +package demonchime + +import "core:math/linalg" +import "core:log" + +import rl "vendor:raylib" + +import "phys" + +Prop :: struct { + handle: Entity_Handle, + image_id: Image_Id, + pos: Vec2, + scale: Vec2, +} + +make_prop :: proc(prop: Prop) -> (Entity_Handle, ^Prop) { + return make_entity(&state.prop_list, prop) +} + +draw_props :: proc() { + iter := iter_entity_list(state.prop_list) + for p in entity_list_iter(&iter) { + image := get_image(p.image_id) + draw_texture( + image, + p.pos, + scale = p.scale, + ) + } +} + +Wiggle_Prop :: struct { + handle: Entity_Handle, + image_id: Image_Id, + pos: Vec2, + scale: Vec2, + offset: Vec2, + rotation: f32, + rotation_factor: f32, +} + +make_wiggle_prop :: proc(prop: Wiggle_Prop) -> (Entity_Handle, ^Wiggle_Prop) { + return make_entity(&state.wiggle_prop_list, prop) +} + +update_wiggle_props :: proc(dt: f32) { + iter := iter_entity_list(state.wiggle_prop_list) + for p in entity_list_iter(&iter) { + player_vel := phys.get_velocity(player.body) + player_pos := phys.get_position(player.body) + + image := get_image(p.image_id) + dist := linalg.length(p.pos - player_pos) + dist = f32(max(image.width, image.height)) - dist + if dist < 0 { + dist = 0 + } + p.rotation = player_vel.x / PLAYER_SPEED * dist * p.rotation_factor + } +} + +draw_wiggle_props :: proc() { + iter := iter_entity_list(state.wiggle_prop_list) + for p in entity_list_iter(&iter) { + draw_texture_full( + get_image(p.image_id), + p.pos, + p.offset, + p.rotation, + p.scale, + ) + } +} + +clear_props :: proc() { + p_iter := iter_entity_list(state.prop_list) + for p in entity_list_iter(&p_iter) { + delete_entity(&state.prop_list, p.handle) + } + + wp_iter := iter_entity_list(state.wiggle_prop_list) + for p in entity_list_iter(&wp_iter) { + delete_entity(&state.wiggle_prop_list, p.handle) + } +} + +object_spawner_prop :: proc(obj: Object_Resource) { + tile_id, has_tile_id := obj.tile_id.(u32) + if !has_tile_id || tile_id == 0 { + log.warn("Prop does not have a tile id!") + return + } + + + tile := tiles[tile_id] + img := get_image(tile.image) + + pos := obj.pos - Vec2{0, f32(img.height)} + scale := Vec2{1, 1} + if obj.size.x < 0 { + scale.x = -1 + // pos.x -= f32(img.width) + } + if obj.size.y < 0 { + scale.y = -1 + // pos.y -= f32(img.height) + } + + #partial switch tile.image { + case .Carrabasset_Vines_0, .Carrabasset_Vines_1, .Carrabasset_Vines_2: + offset := linalg.round(Vec2{ + f32(img.width) * 0.5, + 0, + }) + + rotation_factor: f32 = 1 + #partial switch tile.image { + case .Carrabasset_Vines_0: + rotation_factor = 0.25 + } + + make_wiggle_prop(Wiggle_Prop{ + image_id = tile.image, + pos = pos, + scale = scale, + offset = offset, + rotation_factor = -rotation_factor, + }) + case .Carrabassett_Small_Bush_0, .Carrabassett_Big_Bush_0: + offset := linalg.round(Vec2{ + f32(img.width) * 0.5, + f32(img.height), + }) + + rotation_factor: f32 = 1 + #partial switch tile.image { + case .Carrabassett_Big_Bush_0: + rotation_factor = 0.25 + } + + make_wiggle_prop(Wiggle_Prop{ + image_id = tile.image, + pos = pos + Vec2{0, f32(img.height)}, + scale = scale, + offset = offset, + rotation_factor = rotation_factor, + }) + case: + make_prop(Prop{ + image_id = tile.image, + pos = pos, + scale = scale, + }) + } +} + +on_room_open_props :: proc(room_id: Room_Id) { + clear_props() +} diff --git a/src/resources.odin b/src/resources.odin index 7051fcf..315551d 100644 --- a/src/resources.odin +++ b/src/resources.odin @@ -30,12 +30,18 @@ Animation_Resource :: struct { Object_Resource :: struct { type: Object_Type, + tile_id: Maybe(u32), pos: Vec2, size: Vec2, parallax: Vec2, properties: map[string]Tiled_Property, } +Backgrond_Image :: struct { + image_id: Image_Id, + parallax: Vec2, +} + Room_Resource :: struct { width: i32, height: i32, @@ -43,11 +49,12 @@ Room_Resource :: struct { tile_height: i32, layers: [][]u32, objects: []Object_Resource, - background_image: Maybe(Image_Id), + background_color: Color, + background_images: []Backgrond_Image, } Tile_Resource :: struct { - tileset: Tileset_Id, + image: Image_Id, rect: Rect, id: u32, collisions: []Rect, diff --git a/src/world.odin b/src/world.odin index d9848c6..85a85f0 100644 --- a/src/world.odin +++ b/src/world.odin @@ -13,11 +13,13 @@ object_spawners := [Object_Type]Object_Spawner{ .Player_Spawn = object_spawner_player_spawn, .Collision = object_spawner_collision, .Upgrade = object_spawner_upgrade, + .Prop = object_spawner_prop, } room_open_cb := []Room_Change_Callback{ on_room_open_platforms, on_room_open_bullets, + on_room_open_props, } room_close_cb := []Room_Change_Callback{ @@ -96,9 +98,8 @@ open_room :: proc(id: Room_Id) -> bool { draw_room :: proc(id: Room_Id) { draw_tile :: proc(x: i32, y: i32, tile_id: u32) { tile := tiles[tile_id] - tileset := tilesets[tile.tileset] rl.DrawTexturePro( - get_image(tileset.image), + get_image(tile.image), rl.Rectangle { x = f32(tile.rect.start.x), y = f32(tile.rect.start.y), @@ -131,7 +132,7 @@ iterate_room_tiles :: proc(id: Room_Id, callback: Room_Iterate_Callback) { for cell, i in layer { if cell > 0 { - callback(x, y, cell - 1) + callback(x, y, cell) } x += room.tile_width diff --git a/tools/compile_assets/loaders.odin b/tools/compile_assets/loaders.odin index 097c483..eadbc44 100644 --- a/tools/compile_assets/loaders.odin +++ b/tools/compile_assets/loaders.odin @@ -21,7 +21,10 @@ load_room :: proc(path: string, file: ^os.File, _: ^os.File) { } load_tileset :: proc(path: string, _: ^os.File, _: ^os.File) { - load_json_tileset(path) + tileset_name := filepath.stem(path) + if tileset_name not_in tileset_gids { + load_json_tileset(path) + } } load_qoi :: proc(path: string, qoi: ^os.File, output: ^os.File) { diff --git a/tools/compile_assets/main.odin b/tools/compile_assets/main.odin index 67121fd..d8d8942 100644 --- a/tools/compile_assets/main.odin +++ b/tools/compile_assets/main.odin @@ -4,6 +4,7 @@ import os "core:os/os2" import "core:fmt" import "core:path/filepath" import "core:strings" +import "core:strconv" import "core:sort" COMPILED_DIR :: ".compiled-res/" @@ -29,9 +30,6 @@ Animation_Id :: enum { Room_Id :: enum { <room-enum>} -Tileset_Id :: enum { -<tileset-enum>} - Object_Type :: enum { <object-types>} @@ -44,9 +42,6 @@ animations: [Animation_Id]Animation_Resource = { rooms: [Room_Id]Room_Resource = { <room-load>} -tilesets: [Tileset_Id]Tileset_Resource = { -<tileset-load>} - tiles: []Tile_Resource = { <tiles-load>} @@ -57,7 +52,6 @@ Resource_Id :: union { Image_Id, Animation_Id, Room_Id, - Tileset_Id, } path_to_resource_id: map[string]Resource_Id = { @@ -69,7 +63,7 @@ animations: map[string]string rooms: map[string]string tiles: [dynamic]string -tilesets: map[string]string +loaded_tilesets: map[string]struct{} world: [dynamic]string @@ -311,21 +305,24 @@ main :: proc() { content = create_enum(content, "<image-enum>", images) content = create_enum(content, "<anim-enum>", animations) content = create_enum(content, "<room-enum>", rooms) - content = create_enum(content, "<tileset-enum>", tilesets) content = create_loads(content, "images", "<image-load>", images) content = create_loads(content, "animations", "<anim-load>", animations) content = create_loads(content, "rooms", "<room-load>", rooms) - content = create_loads(content, "tilesets", "<tileset-load>", tilesets) tile_loads := "" for tile, i in tiles { - if i == 0 { + if i == 0 || tile == "" { continue } + buf: [4]u8 + i_str := strconv.write_int(buf[:], i64(i), 10) + tile_loads = strings.concatenate({ tile_loads, " ", + i_str, + " = ", tile, ",\n", }, allocator = context.temp_allocator) diff --git a/tools/compile_assets/tiled.odin b/tools/compile_assets/tiled.odin index a5b6bed..196cb49 100644 --- a/tools/compile_assets/tiled.odin +++ b/tools/compile_assets/tiled.odin @@ -5,6 +5,8 @@ import "core:fmt" import "core:encoding/json" import "core:path/filepath" import "core:strings" +import "core:math/bits" +import "core:strconv" Rect :: struct { start: [2]f32, @@ -70,7 +72,7 @@ Json_Layer :: struct { Json_Object :: struct { ellipse: bool, - gid: i32, + gid: u32, width: f64, height: f64, id: i32, @@ -240,7 +242,35 @@ Gids :: struct { last: u32, } -gids: map[string]Gids +tileset_gids: map[string]Gids + +load_json_color :: proc(hex_str: string) -> [4]f32 { + if len(hex_str) == 0 { + return {0, 0, 0, 1} + } + + hex, hex_ok := strconv.parse_u64(hex_str[1:], 16) + if !hex_ok { + return {0, 0, 0, 1} + } + + a := u8((hex >> 24) & 0xFF) + r := u8((hex >> 16) & 0xFF) + g := u8((hex >> 8) & 0xFF) + b := u8(hex & 0xFF) + + if len(hex_str[1:]) == 2*3 { + // If there wasn't an alpha channel included, assume max + a = bits.U8_MAX + } + + return { + f32(r) / bits.U8_MAX, + f32(g) / bits.U8_MAX, + f32(b) / bits.U8_MAX, + f32(a) / bits.U8_MAX, + } +} load_json_world :: proc(path: string) { json_text, read_err := os.read_entire_file(path, context.temp_allocator) @@ -277,13 +307,13 @@ load_json_world :: proc(path: string) { } create_tile :: proc( - tileset_enum: string, + image_enum: string, rect: Rect, collisions: []Rect, ) -> string { line := fmt.aprintf( - "{{tileset=.%v, rect=%w, id=%w, collisions=%w}}", - tileset_enum, + "{{image=.%v, rect=%w, id=%w, collisions=%w}}", + image_enum, rect, len(tiles), collisions, @@ -292,7 +322,54 @@ create_tile :: proc( return line } +load_json_imageset :: proc(path: string, json_dat: Json_Tileset) { + last_id: i32 = 0 + + for tile in json_dat.tiles { + image_enum := strings.to_ada_case( + filepath.stem(tile.image), + context.temp_allocator, + ) + + collisions := make([dynamic]Rect, context.temp_allocator) + + for object in tile.objectgroup.objects { + append( + &collisions, + Rect{ + start = {f32(object.x), f32(object.y)}, + size = {f32(object.width), f32(object.height)} + }, + ) + } + + // Fill in any gaps with dummy tiles + // TODO: Find a solution that doesn't involve filling my exe with zeroed + // data + for i in 1..<(tile.id - last_id) { + append(&tiles, "") + } + + create_tile( + image_enum, + Rect{ + start = {0, 0}, + size = {f32(tile.imagewidth), f32(tile.imageheight)}, + }, + collisions[:], + ) + + last_id = tile.id + } +} + load_json_tileset :: proc(path: string) { + if filepath.stem(path) in loaded_tilesets { + return + } + + loaded_tilesets[filepath.stem(path)] = {} + json_text, read_err := os.read_entire_file(path, context.temp_allocator) if read_err != nil { die("Could not load tileset %v (%v)", path, read_err) @@ -308,30 +385,29 @@ load_json_tileset :: proc(path: string) { die("Failed to parse tileset %v (%v)", path, unmarshal_err) } - tileset_enum := strings.to_ada_case( - filepath.stem(path), - allocator = context.temp_allocator, - ) - - image_enum := strings.to_ada_case( - filepath.stem(json_dat.image), - allocator = context.temp_allocator, - ) - - tiles_x := json_dat.imagewidth / json_dat.tilewidth - tiles_y := json_dat.imageheight / json_dat.tileheight - - local_tiles := make([dynamic]string, allocator = context.temp_allocator) - - tile_size: [2]f32 = {f32(json_dat.tilewidth), f32(json_dat.tileheight)} - first_gid := u32(len(tiles)) - gids[filepath.stem(path)] = { + tileset_gids[filepath.stem(path)] = { first = first_gid, last = u32(len(tiles) + int(json_dat.tilecount)), } + // No image found; this is a image set + if json_dat.imagewidth == 0 && + json_dat.imageheight == 0 && + json_dat.image == "" { + load_json_imageset(path, json_dat) + + gids := &tileset_gids[filepath.stem(path)] + gids.last = u32(len(tiles)) + return + } + + image_enum := strings.to_ada_case( + filepath.stem(json_dat.image), + allocator = context.temp_allocator, + ) + collisions := make([][dynamic]Rect, json_dat.tilecount) defer { for collision in collisions { @@ -353,26 +429,25 @@ load_json_tileset :: proc(path: string) { } } + tiles_x := json_dat.imagewidth / json_dat.tilewidth + tiles_y := json_dat.imageheight / json_dat.tileheight + tile_size := [2]f32{f32(json_dat.tilewidth), f32(json_dat.tileheight)} + for y in 0..<tiles_y { for x in 0..<tiles_x { - append(&local_tiles, create_tile( - tileset_enum, + create_tile( + image_enum, Rect{ start = {f32(x * json_dat.tilewidth), f32(y * json_dat.tileheight)}, size = tile_size, }, collisions[y * tiles_x + x][:], - )) + ) } } - gids := make([]u32, len(local_tiles), context.temp_allocator) - for tile, i in local_tiles { - gids[i] = first_gid + u32(i) - } - - line := fmt.aprintf("{{tiles=%w, image=.%v}}", gids, image_enum) - tilesets[filepath.stem(path)] = line + gids := &tileset_gids[filepath.stem(path)] + gids.last = u32(len(tiles)) } load_json_room :: proc(path: string, file: ^os.File) { @@ -396,6 +471,8 @@ load_json_room :: proc(path: string, file: ^os.File) { tile_width := json_dat.tilewidth tile_height := json_dat.tileheight + + color := load_json_color(json_dat.backgroundcolor) tiled_to_real_gid: map[i32]u32 defer delete(tiled_to_real_gid) @@ -404,14 +481,14 @@ load_json_room :: proc(path: string, file: ^os.File) { id: i32 = 1 for tileset in json_dat.tilesets { tileset_name := filepath.stem(tileset.source) - gid, exists := gids[tileset_name] + gid, exists := tileset_gids[tileset_name] if !exists { load_json_tileset(strings.concatenate({ filepath.dir(path, context.temp_allocator), "/", tileset.source, })) - gid = gids[tileset_name] + gid = tileset_gids[tileset_name] } for i in gid.first..<gid.last { @@ -449,7 +526,8 @@ load_json_room :: proc(path: string, file: ^os.File) { parallax := [2]f32{f32(layer.parallaxx), f32(layer.parallaxy)} for obj in layer.objects { - type_name := strings.to_ada_case(obj.type) + obj_type := obj.type if obj.type != "" else "prop" + type_name := strings.to_ada_case(obj_type) // `object_type_names` now owns `type_name`; freed in main if type_name in object_type_names { @@ -491,9 +569,29 @@ load_json_room :: proc(path: string, file: ^os.File) { properties[property.name] = value } + tile_id: Maybe(u32) = nil + if obj.gid != 0 { + flip_flags := (obj.gid & 0x80000000) >> 28 + + if flip_flags & 0b1000 != 0 { + size.x *= -1 + } + if flip_flags & 0b0100 != 0 { + size.y *= -1 + } + + tiled_id := (obj.gid << 4) >> 4 + + fmt.printfln("%032b %v %v %032b %x", obj.gid, obj.gid, tiled_id, flip_flags, flip_flags) + + tile_id = tiled_to_real_gid[i32(tiled_id)] + // tile_id = u32(obj.gid) + } + line := fmt.tprintf( - "{{type = .%v, pos = %w, size = %w, parallax = %w, properties = %w}}", + "{{type = .%v, tile_id = %v, pos = %w, size = %w, parallax = %w, properties = %w}}", type_name, + tile_id, pos, size, parallax, @@ -518,13 +616,14 @@ load_json_room :: proc(path: string, file: ^os.File) { } line := fmt.aprintf( - "{{width=%v, height=%v, tile_width=%v, tile_height=%v, layers=%w, objects={{%v}}, background_image=nil}}", + "{{width=%v, height=%v, tile_width=%v, tile_height=%v, layers=%w, objects={{%v}}, background_color=Color%w, background_images={{}} }}", width, height, tile_width, tile_height, layers[:], objects_arr_str, + color, ) rooms[filepath.stem(path)] = line } |
