commit 453e8d3818e104f7359f21c59f5f84a70d9d8b95 Author: Naveen Radhakrishnan Date: Sat Jun 6 19:57:46 2020 +0530 Initial checkin diff --git a/README.md b/README.md new file mode 100644 index 0000000..64630bc --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# ld40 +Ludum Dare 40 - Theme : "The more you have, the worse it is" diff --git a/ld40.html b/ld40.html new file mode 100644 index 0000000..66dfa63 --- /dev/null +++ b/ld40.html @@ -0,0 +1,56 @@ + + + + + + Taffle Game + + + + + +
+
+ +
+ +

+ Arrows : Move / Space : Rewind + - + Game created for LudumDare #40 in 48 hours by @ncannasse +

+

+ Sources : Github | Built with Haxe | Rate on this page +

+ +
+ + + + + + + + + diff --git a/ld40js.hxml b/ld40js.hxml new file mode 100644 index 0000000..4d12f79 --- /dev/null +++ b/ld40js.hxml @@ -0,0 +1,8 @@ +-lib heaps +-lib castle +-cp src +-js ld40.js +-main Game +-D windowSize=832x832 +-dce full +-D release \ No newline at end of file diff --git a/res/data.cdb b/res/data.cdb new file mode 100644 index 0000000..0d21bd7 --- /dev/null +++ b/res/data.cdb @@ -0,0 +1,1380 @@ +{ + "sheets": [ + { + "name": "soil", + "columns": [ + { + "typeStr": "0", + "name": "id", + "display": null + }, + { + "typeStr": "14", + "name": "image", + "display": null + } + ], + "lines": [ + { + "id": "Nothing", + "image": { + "file": "tiles.png", + "size": 32, + "x": 1, + "y": 2 + } + }, + { + "id": "Empty", + "image": { + "file": "tiles.png", + "size": 32, + "x": 0, + "y": 2 + } + }, + { + "id": "Block", + "image": { + "file": "tiles.png", + "size": 32, + "x": 2, + "y": 2 + } + }, + { + "id": "Block2", + "image": { + "file": "tiles.png", + "size": 32, + "x": 3, + "y": 2 + } + }, + { + "id": "Hint", + "image": { + "file": "tiles.png", + "size": 32, + "x": 1, + "y": 2 + + } + } + ], + "separators": [], + "props": {} + }, + { + "name": "object", + "columns": [ + { + "typeStr": "14", + "name": "image", + "display": null + }, + { + "typeStr": "0", + "name": "id" + }, + { + "typeStr": "10:Under,NeedActive,CanPutOver,ApplyHue", + "name": "flags" + } + ], + "lines": [ + { + "id": "None", + "image": { + "file": "tiles.png", + "size": 32, + "x": 8, + "y": 31 + }, + "flags": 0 + }, + { + "id": "Hero", + "image": { + "file": "tiles.png", + "size": 32, + "x": 0, + "y": 1 + }, + "flags": 0 + }, + { + "id": "Exit", + "image": { + "file": "tiles.png", + "size": 32, + "x": 4, + "y": 0 + }, + "flags": 1 + }, + { + "id": "Square1", + "image": { + "file": "tiles.png", + "size": 32, + "x": 0, + "y": 0 + }, + "flags": 2 + }, + { + "id": "Square2", + "image": { + "file": "tiles.png", + "size": 32, + "x": 1, + "y": 0 + }, + "flags": 2 + }, + { + "id": "Square3", + "flags": 2, + "image": { + "file": "tiles.png", + "size": 32, + "x": 3, + "y": 1 + } + }, + { + "id": "Plate1", + "image": { + "file": "tiles.png", + "size": 32, + "x": 2, + "y": 0 + }, + "flags": 13 + }, + { + "id": "Plate2", + "image": { + "file": "tiles.png", + "size": 32, + "x": 3, + "y": 0 + }, + "flags": 13 + }, + { + "id": "Plate3", + "flags": 13, + "image": { + "file": "tiles.png", + "size": 32, + "x": 4, + "y": 1 + } + }, + { + "id": "Plate4", + "flags": 13, + "image": { + "file": "tiles.png", + "size": 32, + "x": 4, + "y": 2 + } + }, + { + "id": "Wings", + "image": { + "file": "tiles.png", + "size": 32, + "x": 5, + "y": 0 + }, + "flags": 2 + }, + { + "id": "Steal", + "image": { + "file": "tiles.png", + "size": 32, + "x": 6, + "y": 0 + }, + "flags": 13 + }, + { + "id": "HueSwitch", + "flags": 9, + "image": { + "file": "tiles.png", + "size": 32, + "x": 7, + "y": 0 + } + } + ], + "separators": [], + "props": {} + }, + { + "name": "level", + "columns": [ + { + "name": "width", + "typeStr": "3" + }, + { + "name": "height", + "typeStr": "3" + }, + { + "name": "props", + "typeStr": "16" + }, + { + "name": "tileProps", + "typeStr": "8" + }, + { + "name": "layers", + "typeStr": "8" + }, + { + "typeStr": "12:soil", + "name": "soils" + }, + { + "typeStr": "12:object", + "name": "objects", + "display": null + } + ], + "lines": [ + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAAiHAACABUZAgACEAAGAgAEGAAPGgD/EVAAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAARAAEAER4GAAICABIfBwADAgAPGgD/G1AAAAAAAAAAAAA=" + } + } + ], + "objects": "BCJNGGBAghcAAAAeAAEAHgITAA8CAE8fAWMACFAAAAAAAAAAAAA=", + "soils": "BCJNGGBAgiIAAABQAwMDAwEBAAAJAAACAAAMABABCQAAAgAPDQBzUAEDAwMDAAAAAA==", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAAiHAACABUZAgACEAAGAgAEGAAPGgD/EVAAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAARAAEAER4GAAICABIfBwADAgAPGgD/G1AAAAAAAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgiIAAABQAwMDAwEBAAAJAAACAAAMABABCQAAAgAPDQBzUAEDAwMDAAAAAA==", + "objects": "BCJNGGBAgioAAAAeAAEAHgETAA8CAAEfAxUAAQ4CAB4GEwAPAgABHwIVAAEDAgBQAAAAAAAAAAAA", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAAiHAACABUZAgACEAAGAgAEGAAPGgD/EVAAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAARAAEAER4GAAICABIfBwADAgAPGgD/G1AAAAAAAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgiIAAABQAwMDAwEBAAAJAAACAAAMABABCQAAAgAPDQBzUAEDAwMDAAAAAA==", + "objects": "BCJNGGBAgiwAAAAeAAEAHgITAA8CACgfAzwABFYEAAAABxwAFgELADAAAAYFAAYCAFAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAAiHAACABUZAgACEAAGAgAEGAAPGgD/EVAAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh0AAAARAAEAER4GAAICABIfBwADAgAPGgD/G1AAAAAAAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgigAAACQAwMDAwEBAgEBCQAAAgAQAQEAAAkAAAIAAAwADxoAbXACAQEDAwMDAAAAAA==", + "objects": "BCJNGGBAgiIAAAAeAAEAHgETAA8CACgfAzwACB8EHAADOQcCBhkAUAAAAAAAAAAAAA==", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgjMAAAAiHAACABUZAgACEAAGAgAEGAAPGgBnDwIABwCWAAICAAwkAAIWAAACAA8aAFhQABwAHAAAAAAA" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgjAAAAARAAEAER4GAAICABIfBwADAgAPGgBvNTsAFgIAEzyWAAICAA+cAG8LggBQAAAAAAAAAAAA" + } + } + ], + "soils": "BCJNGGBAgkYAAACQAwMDAwEBAgEBCQAAAgAQAQEAAAkAAAIAAAwABhoANgIBAg0AABsAACMAAAIAAAwABRoACQIACRoADw0AI3ACAQEDAwMDAAAAAA==", + "objects": "BCJNGGBAgiYAAAAeAAEAGAITAB8GDQAGGAcaAA8CABQfCigAEjkEAQMoAFAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgjMAAAAiHAACABUZAgACEAAGAgAEGAAPGgBnDwIABwCWAAICAAwkAAIWAAACAA8aAFhQABwAHAAAAAAA" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgjAAAAARAAEAER4GAAICABIfBwADAgAPGgBvNTsAFgIAEzyWAAICAA+cAG8LggBQAAAAAAAAAAAA" + } + } + ], + "soils": "BCJNGGBAgkMAAACQAwMDAwEBAgEBCQAAAgAQAQEAAAkAAAIAEAEbAAAJAAACAAAZAA8nAAYGNAAJAgAAGQAPNAAQDycACXACAQEDAwMDAAAAAA==", + "objects": "BCJNGGBAgi0AAAAeAAEAGAETABgKDQA2AwAGDwAWBAsADwIALzcHAAdFABcCDACAAAAAAAAAAAAAAAAA", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAglAAAAAiHAACABUZAgACEAAGAgAEGAAPGgBnCAIAAIgABooAAAwAAgIABAwABCwAAhYAAAIABAwADxoANQBQAAAGAAICAABiAAICAIAcABwAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgkAAAAARAAEAER4GAAICABIfBwADAgAPGgBjETkCAAKDADU7ABYCABI8EwADAgAPnABjMSwAAAQAAAIAC4IAUAAsAAAAAAAAAA==" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh8AAAAfAAEAgB8jlAAGHx4aAG4RL4QAHx+IAAJgLwAAADAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgkgAAACQAwMDAwEBAgIBCQAAAgA/AQEBDQAHGAEnAA8NAAQCAgADHgAAJgAgAQMEAAFoAAAJAAAEAA8NABARAyYAoAMBAQIBAQMDAwMAAAAA", + "objects": "BCJNGGBAgjIAAAAfAAEAF18GAAAAAy8AFwgCABgHDQAJAgASAg4AMgQACgkAAQIAEAEGAAY0AFAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 0.47 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnYAAAAgHAACABkZAgAAEgAEAgAIGAAKGgAIHAAADgAIAgAALAACAgAIFgAAAgACFgAAAgAADgAIAgAAFAACAgAIFgAMAgAKIgACDgAAAgAEDAAEMAAAFAACAgAEDAAPGgA1AFAAAAYAAgIAAmQAAAIAgBwAHAAcABwAAAAAAA==" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAglkAAABQAAAAAB4FAAcCABUfDAAPGgAHChwABjIAAAIACDYADxoAIxE5AgAATABVAAA7ABYCABA8EQAFAgAPaAAvBUsACwYBDxoACTEsAAAEAAACAAuCAFAALAAAAAAAAAA=" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgi8AAAAfAAEAJDcvACw6ADcsADAOAA8CAC0fI0EABh8eGgBuES+EAB8fiAACYC8AAAAwAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgkoAAACxAwMDAgEBAgIBAgMBAEUCAQEBDQARAw0AARgAAg0AIQEBCgAPDQAKAgIAAysAADMAEAFHAAAWAA8NABoSA2sAkAEBAgEBAwMDAwAAAAA=", + "objects": "BCJNGGBAgjgAAAAcAAEAPAYABxMAAwIAEwMIAAMCABMLCAAPAgAREwQlAA5bABMBGgATAggABgIAFQoLAFAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnwAAAAgHAACABkZAgAAEgAEAgAIGAAKGgAIHAAADgAIAgAALAACAgAIFgAAAgACFgAAAgAADgAIAgAAFAACAgAEFgAKDgACAgACFAACAgAIDgAIDAAKDgAPGgApADwAAHgAAFQAAgIAAg4AAAYAAgIAAhYAAAIAgBwAHAAcABwAAAAAAA==" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgmQAAABQAAAAAB4FAAcCABUfDAAPGgAHChwABjIAAAIACDYADxoADxE5AgAKNAAAEgAQOUsAZQAAADsAFgIAETwSAAQCAAo0AAQWAAACAA8aADURLAQACk4AAhQAABgADWgAUAAsAAAAAAAAAA==" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgk0AAAAfAAEAJDcvACw6ADcsADAOAA8CACEXJDUAFyMMADAAAB8FAAMCABMeCAACAgAPGgBPAHAAGR/cABMvFAA5LwAAGACgAAAAAC8AAAAwAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgkQAAACxAwMDAgEBAgIBAgMBACACAQEAAw0AEAMMABEBGAAPDQATBi4AAToAEwFBAA8NABcjAwE7ABADCgABdQBwAgEBAwMDAwAAAAA=", + "objects": "BCJNGGBAgkAAAAAcAAEAPAMABBMADwIAAx8LFwADBwIAFQcMAEAHAAAGDQAQCgUAQQAAAAIGAAACAARGABABDQAPAgAEUAAAAAAAAAAAAA==", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnwAAAAgHAACABkZAgAAEgAEAgAIGAAKGgAIHAAADgAIAgAALAACAgAIFgAAAgACFgAAAgAADgAIAgAAFAACAgAEFgAKDgACAgACFAACAgAIDgAIDAAKDgAPGgApADwAAHgAAFQAAgIAAg4AAAYAAgIAAhYAAAIAgBwAHAAcABwAAAAAAA==" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgmQAAABQAAAAAB4FAAcCABUfDAAPGgAHChwABjIAAAIACDYADxoADxE5AgAKNAAAEgAQOUsAZQAAADsAFgIAETwSAAQCAAo0AAQWAAACAA8aADURLAQACk4AAhQAABgADWgAUAAsAAAAAAAAAA==" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgk0AAAAfAAEAJDcvACw6ADcsADAOAA8CACEXJDUAFyMMADAAAB8FAAMCABMeCAACAgAPGgBPAHAAGR/cABMvFAA5LwAAGACgAAAAAC8AAAAwAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgkQAAACxAwMDAgEBAgIBAgMBACACAQEAAw0AEAMMABEBGAAPDQATBi4AAToAEwFBAA8NABeAAwEDAwECAQIHAAV1AFABAwMDAwAAAAA=", + "objects": "BCJNGGBAgj8AAAAfAAEADB8HIAAGHwsaAAYEAgAUCgkAUAAEAAADDQAQBgUAQQAAAAEGAAACAAQSABAMDQAPAgACcAIAAAAAAAAAAAAA", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgoYAAAAgHAACABkZAgAAEgAEAgAIGAAPGgAJAAIADzQAAwACAA8aAA8MagAGNAAIAgAAGAAAAgAIFAACAgAAFgAAAgACDgAIEAAAFgAAAgAAFgAAAgAADAAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgCgHAAcABwAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnIAAABQAAAAAB4FAAcCABUfDAAMGgAzOQA5HAAMGgAAAgACOAAPGgAhHS+EAAROAAAcABMsAgAMWgARI5AAAAIADBoABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAAoC8ALAAsACwALAAAAAAA" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgisAAAAfAAEAGh8fLgAaDwIAGR0sLQAdORIADiQADwIADw+yAAcPGgBAUAAAAAAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgmgAAACxAwMDAgEBAgIBAgMBACACAQEACQ0AMAEBARsAAhoACQ0AEgIaABADPwAUAg0AAQIAAFQAAQkAAAIAADoAAAgAAD4AAG4AAU8AAQ0AAQUABA0ABScAAI0AMQICAoUAkAEBAQEDAwMDAwAAAAA=", + "objects": "BCJNGGBAgi4AAAAfAAEACm8CAAMAAAYjAAM/BgALGQADDwIACBwKHAAsBwQSAA0CAHABAAAAAAAAAAAAAA==", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgoYAAAAgHAACABkZAgAAEgAEAgAIGAAPGgAJAAIADzQAAwACAA8aAA8MagAGNAAIAgAAGAAAAgAIFAACAgAAFgAAAgACDgAIEAAAFgAAAgAAFgAAAgAADAAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgCgHAAcABwAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnIAAABQAAAAAB4FAAcCABUfDAAMGgAzOQA5HAAMGgAAAgACOAAPGgAhHS+EAAROAAAcABMsAgAMWgARI5AAAAIADBoABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAAoC8ALAAsACwALAAAAAAA" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgisAAAAfAAEAGh8fLgAaDwIAGR0sLQAdORIADiQADwIADw+yAAcPGgBAUAAAAAAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgmkAAACxAwMDAgEBAgIBAgMBACACAQEACQ0AMAEBARsAAhoACQ0AEgIaABADPwAUAg0AAQIAAFQAAQkAAAIABBsAAD4AAG4AAU8AAQ0AAQUABA0AAGEAAC8AEAGNADECAgKFAJABAQEBAwMDAwMAAAAA", + "objects": "BCJNGGBAgjgAAAAfAAEAChABHgAQAwUADgIAHgoTAAgCABgLDQAYBw0AFwYNABkEGgATAhoAEwwIAAMCAFAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgokAAAAgHAACABkZAgAAEgAEAgAIGAAPGgAJAAIADzQAAwACAA8aAA8IAgAAMgAAAgAIFAACAgAAFgAAAgACDgAIAgAAFgAAAgAEFAAADAAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgCgHAAcABwAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnIAAABQAAAAAB4FAAcCABUfDAAMGgAzOQA5HAAMGgAAAgACOAAPGgAhEC8/AAMCAA9AAAECAgAMGgARI5AAAAIADBoABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAAoC8ALAAsACwALAAAAAAA" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgisAAAAfAAEAGh8fLgAaDwIAERM5JQAXLAIAAxMADwIAMg+yAAcPGgBAUAAAAAAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgl8AAACxAwMDAgEBAgIBAgMBACECAQEAAQwAABoAARwAAQ8AAxoAAhwAAQ0ABBoAAgIAAEcAAgoAAzoAAQkAAAIABDUAAQgAAQUADw0AAgBUAAEvAACNAAUNAIABAQEDAwMDAwAAAAA=", + "objects": "BCJNGGBAgjMAAAAfAAEAERECJQBhCwAIBgcICwAPAgAQGAUkABgKDQAYBA0AGAMNABgBDQAGAgBQAAAAAAAAAAAA", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgokAAAAgHAACABkZAgAAEgAEAgAIGAAPGgAJAAIADzQAAwACAA8aAA8IAgAAMgAAAgAIFAACAgAAFgAAAgACDgAIAgAAFgAAAgAEFAAADAAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgCgHAAcABwAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnIAAABQAAAAAB4FAAcCABUfDAAMGgAzOQA5HAAMGgAAAgACOAAPGgAhEC8/AAMCAA9AAAECAgAMGgARI5AAAAIADBoABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAABgoAAgIABhAAoC8ALAAsACwALAAAAAAA" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgisAAAAfAAEAGh8fLgAaDwIAERM5JQAXLAIAAxMADwIAMg+yAAcPGgBAUAAAAAAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgl8AAACxAwMDAgEBAgIBAgMBACECAQEAAQwAABoAARwAAQ8AAxoAAhwAAQ0ABBoAAgIAAEcAAgoAAzoAAQkAAAIABDUAAQgAAQUADw0AAgBUAAEvAACNAAUNAIABAQEDAwMDAwAAAAA=", + "objects": "BCJNGGBAgjwAAAAfAAEAChILHgARAQcAUQUACgMECgAPAgAeEwIyAANQAAACADAJAAYHABAIBQAMAgAYDBEAcAcAAAAAAAAAAAAA", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgpUAAAAgHAACABkZAgAAEgAEAgAIGAAPGgAJAAIADzQAAwACAA8aAA8EagAGCgACDAAAAgAADAACDgAACAAAAgAAFgAAAgAADAACDgAACAAAAgAAFgAAAgAADAAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgAICgACAgAAFgAAAgCgHAAcABwAHAAcAAAAAAA=" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAglUAAABQAAAAAB4FAAcCABUfDAAMGgAzOQA5HAAMGgAAAgACOAAPGgAhFS+EABUfCgAEAgAEUAAPGgAhBj4ABAIABE4ACAoAAgIADxoAK6AvACwALAAsACwAAAAAAA==" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgjIAAAAfAAEAGh8fLgAaDwIAERM5JQAVLAgABAoADwIAFz85ACQtAAYPsgAHDxoAQFAAAAAAAAAAAAA=" + } + } + ], + "soils": "BCJNGGBAgmAAAACxAwMDAgEBAgIBAgMBACECAQEAAQwAABoAARwAAQ8AAxoAAhwAAQ0AMQICAhoAEQMVACIBAUQAEAEVAAQoAAoNAAAoAAUaAA0NAABUAABpABABjQAFDQCAAQEBAwMDAwMAAAAA", + "objects": "BCJNGGBAgjgAAAAfAAEAG08HAAACMgAbAQIAEQEGAAICABIJBwAwBQgECQAQCgUAQQAAAAYGAA8CAAFwAwAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgoIAAAAgHAACABkZAgAAEgAEAgAIGAAAAgAEGAAOGgAGHAAADAAKAgAAMAAAAgAKFgAAAgAAFgACAgAADgAGEAAGCgAADAAAAgAGCgACDAAAAgAADAACDgAACAAAAgAAFgAAAgAADAAKAgAAFgAAAgAEFgAICgACAgAPGgArgBwAHAAcABwAAAAAAA==" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgnQAAABQAAAAAB4FAAcCABU5DAAMGgAGHAAOGgAwAAAfBQANTgAAAgAPGgANFS82AH8fACMAFgAWagAAFR8kAAQCAASEAA8aAAcOAgAENAAwAAAsBQAHAgAGGgAGCgACAgAGEAAGCgACAgAGEACgLwAsACwALAAsAAAAAAA=" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgkkAAAAfAAEAAD8fACQWAAACAgAPHAAJDwIAKRMsPQARLAoAER5qAAMTAA8CAA4/OQA5JAAODgIAHl8TAAMCAA96AAcPGgAMUAAAAAAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgmIAAACxAwMDAgEBAgIBAgMBACICAQEABg0AABIAAA4AAAgAAQIABQ0AMQICAg0AEwMVAAMNAAAVAAApAAAbAAoNAAAWAAACAAEaAAA1AAkNAABhAAEaAACNAAUNAIABAQEDAwMDAwAAAAA=", + "objects": "BCJNGGBAgjoAAAAfAAEACycJBiAAdwcIAAQAAAESAA8CAAYfAhoABiMAChsAEwUIAAICABADBwAQDAUADgIAUAAAAAAAAAAAAA==", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [ + { + "name": "soil", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAggwAAAAfAAEA/zpQAAAAAAAAAAAA" + } + }, + { + "name": "border", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgikAAAAfAAEAfDMWADkCAA+ZACURLAIAAj4AAAoAAgIAAhAADwIATFAAAAAAAAAAAAA=" + } + }, + { + "name": "border2", + "data": { + "file": "tiles.png", + "size": 32, + "stride": 12, + "data": "BCJNGGBAgh8AAAAfAAEASh8fXgAGDxoABT8fADA0AAYPAgCOUAAAAAAAAAAAAA==" + } + } + ], + "soils": "BCJNGGBAgk8AAABBAwMDAgEAEgMBAGICAQEBAQIMAAgNACECAg0AAhkAAQsACg0AAhkAAjIAAQIAFQInAAVRABUCWQABKgAEZgAADQAFgAAPAgABUAMDAwMDAAAAAA==", + "objects": "BCJNGGBAgjYAAAAcAAEARggAAAYUACYFBAwANQADCg0AVQsHAAAJDgAOAgAeARMADAIAHAIRAA8CAAZQAAAAAAAAAAAA", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 0.27 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + }, + { + "l": "soil", + "p": { + "alpha": 1 + } + }, + { + "l": "border", + "p": { + "alpha": 1 + } + }, + { + "l": "border2", + "p": { + "alpha": 1 + } + } + ] + } + }, + { + "width": 13, + "height": 13, + "tileProps": [], + "layers": [], + "soils": "BCJNGGBAgkUAAAAfAwEAFLACAgMCAwMCAwICAwcAAAgAAgIAAQoAAgsAAA0AAB0AASwAAA0AAgYAAAgAD2YAFAMCABMBCAADAgBQAwMDAwMAAAAA", + "objects": "BCJNGGBAghcAAAAfAAEAfZYEAAUAAQAKAAOZAFAAAAAAAAAAAAA=", + "props": { + "tileSize": 32, + "layers": [ + { + "l": "soils", + "p": { + "alpha": 1 + } + }, + { + "l": "objects", + "p": { + "alpha": 1 + } + } + ] + } + } + ], + "separators": [], + "props": { + "level": { + "tileSets": { + "tiles.png": { + "stride": 12, + "sets": [], + "props": [] + } + } + } + } + }, + { + "name": "level@tileProps", + "props": { + "hide": true + }, + "separators": [], + "lines": [], + "columns": [] + }, + { + "name": "level@layers", + "props": { + "hide": true + }, + "separators": [], + "lines": [], + "columns": [ + { + "name": "name", + "typeStr": "1" + }, + { + "name": "data", + "typeStr": "15" + } + ] + } + ], + "customTypes": [], + "compress": true +} \ No newline at end of file diff --git a/res/end.json b/res/end.json new file mode 100644 index 0000000..d25a32a --- /dev/null +++ b/res/end.json @@ -0,0 +1,48 @@ +{ "compressionlevel":-1, + "editorsettings": + { + "export": + { + "target":"." + } + }, + "height":44, + "infinite":false, + "layers":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":44, + "id":1, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":44, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.3.5", + "tileheight":32, + "tilesets":[ + { + "columns":1, + "firstgid":1, + "image":"pixil-frame-0.png", + "imageheight":32, + "imagewidth":32, + "margin":0, + "name":"pixil-frame-0", + "spacing":0, + "tilecount":1, + "tileheight":32, + "tilewidth":32 + }], + "tilewidth":32, + "type":"map", + "version":1.2, + "width":44 +} \ No newline at end of file diff --git a/res/end.png b/res/end.png new file mode 100644 index 0000000..47145b5 Binary files /dev/null and b/res/end.png differ diff --git a/res/envParts.png b/res/envParts.png new file mode 100644 index 0000000..a1abda0 Binary files /dev/null and b/res/envParts.png differ diff --git a/res/pixil-frame-0.png b/res/pixil-frame-0.png new file mode 100644 index 0000000..2740a2a Binary files /dev/null and b/res/pixil-frame-0.png differ diff --git a/res/sfx/cancel.wav b/res/sfx/cancel.wav new file mode 100644 index 0000000..8b9c935 Binary files /dev/null and b/res/sfx/cancel.wav differ diff --git a/res/sfx/error.wav b/res/sfx/error.wav new file mode 100644 index 0000000..015e1f6 Binary files /dev/null and b/res/sfx/error.wav differ diff --git a/res/tiles.png b/res/tiles.png new file mode 100644 index 0000000..3ddf89a Binary files /dev/null and b/res/tiles.png differ diff --git a/res/title.png b/res/title.png new file mode 100644 index 0000000..f7eca52 Binary files /dev/null and b/res/title.png differ diff --git a/res/untitled.json b/res/untitled.json new file mode 100644 index 0000000..3f6d446 --- /dev/null +++ b/res/untitled.json @@ -0,0 +1,28 @@ +{ "compressionlevel":-1, + "height":20, + "infinite":false, + "layers":[ + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":20, + "id":1, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":20, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"2020.04.10", + "tileheight":32, + "tilesets":[], + "tilewidth":32, + "type":"map", + "version":1.2, + "width":20 +} \ No newline at end of file diff --git a/screens/final.png b/screens/final.png new file mode 100644 index 0000000..fda70de Binary files /dev/null and b/screens/final.png differ diff --git a/screens/progress1.png b/screens/progress1.png new file mode 100644 index 0000000..f2dad7f Binary files /dev/null and b/screens/progress1.png differ diff --git a/screens/progress2.png b/screens/progress2.png new file mode 100644 index 0000000..c71d1c4 Binary files /dev/null and b/screens/progress2.png differ diff --git a/screens/progress3.png b/screens/progress3.png new file mode 100644 index 0000000..5548bcb Binary files /dev/null and b/screens/progress3.png differ diff --git a/src/Data.hx b/src/Data.hx new file mode 100644 index 0000000..4f333c6 --- /dev/null +++ b/src/Data.hx @@ -0,0 +1 @@ +private typedef Init = haxe.macro.MacroType < [cdb.Module.build("data.cdb")] > ; diff --git a/src/Game.hx b/src/Game.hx new file mode 100644 index 0000000..48f0431 --- /dev/null +++ b/src/Game.hx @@ -0,0 +1,489 @@ +import hxd.res.DynamicText.Key; +import h3d.pass.Default; +import ent.Entity; +import ent.Object; +import hxd.Key in K; + +class EnvPart extends h2d.SpriteBatch.BatchElement { + + public var speed : Float; + public var rspeed : Float; + + public function new(t) { + super(t); + x = Math.random() * Game.LW * 32; + y = Math.random() * Game.LH * 32; + speed = 6 + Math.random() * 3; + rspeed = 0.02 * (1 + Math.random()); + } + +} + +@:publicFields +class Game extends hxd.App { + + static var LW = 13; + static var LH = 13; + + static var LAYER_SOIL = 0; + static var LAYER_ENT_UNDER = 1; + static var LAYER_COL = 2; + static var LAYER_ENT = 3; + static var LAYER_CARRY = 4; + static var LAYER_HERO = 5; + static var LAYER_PARTS = 6; + static var LAYER_ENVP = 7; + static var LAYER_END = 8; + + + var currentLevel : Int; + + var tiles : h2d.Tile; + var level : Data.Level; + var soils : Array; + var entities : Array = []; + var world : h2d.Layers; + var dbgCol : h2d.TileGroup; + var soilLayer : h2d.TileGroup; + var pad : hxd.Pad; + var allActive : Bool; + + var bg : h2d.Object; + var clouds = []; + + var parts : h2d.SpriteBatch; + var way : Float = 1.; + var bmpTrans : h2d.Bitmap; + + var hueShaderHalf = new h3d.shader.ColorMatrix(); + var hueValue = 0; + + var title : h2d.Bitmap; + var end : h2d.Bitmap; + + var errorSound: hxd.res.Sound; + + function loadGame() { + haxe.Timer.delay(function() { + for( e in entities.copy() ) + if( e.hasFlag(NeedActive) ) + e.remove(); + bg.visible = false; + parts.visible = false; + + var t = new h3d.mat.Texture(LW * 32, LH * 32, [Target]); + var old = world.filter; + world.filter = null; + world.drawTo(t); + world.filter = old; + bmpTrans = new h2d.Bitmap(h2d.Tile.fromTexture(t)); + + bg.visible = true; + parts.visible = true; + + initLevel(); + + world.add(bmpTrans, LAYER_ENT - 1); + + },0); + } + + function initLevel() + { + level = Data.level.all[currentLevel]; + if( level == null ) + return; + + soils = level.soils.decode(Data.soil.all); + while( soilLayer.numChildren > 0 ) + soilLayer.getChildAt(0).remove(); + + // Build game board + var empty = tiles.sub(0, 2 * 32, 32, 32); + var edgeTile = tiles.sub(2*32, 2 * 32, 32, 32); + soilLayer.clear(); + for( y in 0...LH ) { + for( x in 0...LW ) { + var index = x + y * LW; + var s = soils[x + y * LW]; + if(x > 1 && x < 11 && y > 1 && y < 11) + { + // check if it is the corner or center tile + if((x==y || (x + y) == 12)&& (x == 2 || x == 6 || x == 10) ) + { + soilLayer.add(x * 32, y * 32, edgeTile); + } + else + { + soilLayer.add(x * 32, y * 32, empty); + } + } + + // place object on the board + createObject(x, y); + } + } + + // Handle interactions + var prevKind = null; + var clickedObjKind = null; + var clickedObj = null; + var isFirstClick = true; + var sX = 0, sY = 0; + var eX = 0, eY = 0; + var interaction = new h2d.Interactive(1000, 1000, soilLayer); + var count = 0; + interaction.onClick = function(event : hxd.Event) { + var xPos = Std.int((event.relX)/32); + var yPos = Std.int((event.relY)/32); + + if (isFirstClick == true){ + sX = xPos; + sY = yPos; + //trace (isFirstClick); + clickedObj = Std.downcast(pick(sX, sY), Object); + if(clickedObj != null) + { + isFirstClick = false; + // Treat the purple circle and the purple gem as same kind + if (isKing(clickedObj.kind)) + clickedObjKind = Data.ObjectKind.Exit; + else + clickedObjKind = clickedObj.kind; + } + } + else{ + trace (prevKind); + eX = xPos; + eY = yPos; + isFirstClick = true; + //trace (isFirstClick); + var destinationObj = Std.downcast(pick(eX, eY), Object); + + var isAcceptableMove = true; + if (destinationObj == null && // destination tile is empty + clickedObj != null && // you have clicked an object to move + prevKind != clickedObjKind && // alternating turns + (eX == sX || eY == sY)) // moving horizontally or vertically + { + + // Check that there are no blockade between start and end + var isHorizontal = false; + var distanceToMove = 0; + var tempX = sX; + var tempY = sY; + if (eX == sX){ + distanceToMove = eY - sY; + if (distanceToMove < 0){ + tempY--; + } + else{ + tempY++; + } + } + else if (eY == sY){ + isHorizontal = true; + distanceToMove = eX - sX; + if (distanceToMove < 0){ + tempX--; + } + else{ + tempX++; + } + + } + trace ('sX, sY: ' + sX + ',' + sY); + trace ('eX, eY: ' + eX + ',' + eY); + + trace ('isHorizontal: ' + isHorizontal); + trace ('distanceToMove: ' + distanceToMove); + + + while (distanceToMove != 0){ + var oB = Std.downcast(pick(tempX, tempY), Object); + + trace ('tempX, tempY: ' + tempX + ',' + tempY); + if (oB == null && isHorizontal){ + if (distanceToMove < 0) + tempX--; + else + tempX++; + } + else if (oB == null && !isHorizontal){ + if (distanceToMove < 0) + tempY--; + else + tempY++; + } + else if (oB != null){ + trace ('oB is not null '); + isAcceptableMove = false; + break; + + } + if (distanceToMove > 0) + distanceToMove--; + else + distanceToMove++; + } + + // check if a non-player object is moving to the cornre + if((eX == 2 || eX == 10) && (eY == 2 || eY == 10)) + { + if (!isKing(clickedObj.kind)){ + isAcceptableMove = false; + } + } + + // Move the object + if (isAcceptableMove){ + // remove from the source position + clickedObj.remove(); + + // create the object in the destination position + var movedObj = new ent.Object(clickedObj.kind, eX, eY); + if ((eX == 2 || eX == 10) && (eY == 2 || eY == 10)){ + + // End game if reached the corner + if (isKing(movedObj.kind)){ + displayEnd(); + } + } + prevKind = clickedObjKind; + + //To Do: Add Logic for Capture + /*if (eX == sX){ + if (distanceToMove > 0){ + var obJ = Std.downcast(pick(eX, eY + 2), Object); + var Obj = Std.downcast(pick(eX, eY + 1), Object); + if (obJ != null && Obj != null){ + if (obJ.kind == movedObj.kind && Obj.kind != movedObj.kind){ + if (movedObj.kind == Square3) + movedObj.kind = Exit; + else if (obJ.kind == Square3){ + obJ.kind = Exit; + } + + } + } + } + }*/ + + + } + } + else + { + isAcceptableMove = false; + } + + if(!isAcceptableMove && errorSound != null) + { + errorSound.play(false, 0.5 + Math.random() * 0.5); + } + } + } + } + + function displayEnd() { + end = new h2d.Bitmap(hxd.Res.end_png.toTile()); + end.scale(1); + world.add(end, LAYER_END); + // Pause for 5 sec and then end the game + haxe.Timer.delay(function() { + Game.restartGame(); + }, 5000); + } + + function createObject(x, y) : ent.Entity { + var myX = x * 1; + var myY = y * 1; + if(x==6 && y == 6) + { + return new ent.Object(Square2, x, y); + } + else if ( ((x > 4 && x < 8) && ((y == 2) || (y == 10))) || + ((y > 4 && y < 8) && ((x == 2) || (x == 10))) || + (x == 6 && (y == 3 || y == 9)) || + (y == 6 && (x == 3 || x == 9)) + ) + { + return new ent.Object(Square1, x, y); + } + else if ( (x == 6 && (y > 3 && y < 6)) || + (x == 6 && (y > 6 && y < 9)) || + (y == 6 && (x > 3 && x < 6)) || + (y == 6 && (x > 6 && x < 9)) + ) + { + return new ent.Object(Exit, x, y); + } + + return null; + } + + function isKing(kind : Data.ObjectKind ){ + return (kind == Square2); + } + + function getSoil( x, y ) : Data.SoilKind { + if( x < 0 || y < 0 || x >= LW || y >= LH ) + return Block; + return soils[x + y * LH].id; + } + + function pick( x : Float, y : Float ) { + var ix = Std.int(x); + var iy = Std.int(y); + for( e in entities ) + { + if( Std.int(e.x) == ix && Std.int(e.y) == iy ) + { + return e; + } + } + return null; + } + + override function init() { + + errorSound = hxd.Res.load("sfx/error.wav").toSound(); + + // preload sounds + for( s in hxd.Res.load("sfx") ) + s.toSound().getData(); + + s2d.scaleMode = Stretch(LW * 32, LH * 32); + currentLevel = 1; + world = new h2d.Layers(s2d); + world.filter = new h2d.filter.Bloom(0.5,0.2,3); + tiles = hxd.Res.tiles.toTile(); + soilLayer = new h2d.TileGroup(tiles); + + bg = new h2d.Object(world); + bg.filter = new h2d.filter.Blur(3); + bg.filter.smooth = true; + var tbg = tiles.sub(32 * 3, 64, 32, 32); + tbg.scaleToSize(LW * 32, LH * 32); + new h2d.Bitmap(tbg, bg).addShader(hueShaderHalf); + + // Display background clouds + var rnd = new hxd.Rand(42); + var ctiles = [for( i in 0...3 ) tiles.sub(i * 32 * 3, 192, 32 * 3, 64, -32 * 3 >> 1, -32)]; + for( i in 0...100 ) { + var b = new h2d.Bitmap(ctiles[rnd.random(ctiles.length)], bg); + b.smooth = true; + b.addShader(hueShaderHalf); + clouds.push({ sc : 0.7 + rnd.rand(), x : rnd.rand() * (LW * 32 + 200) - 100, y : rnd.rand() * (LH * 32 + 200) - 100, speed : rnd.rand() + 1, spr : b, t : Math.random() * Math.PI * 2 }); + } + + // Display the flying snow + var ptiles = hxd.Res.envParts.toTile().split(); + parts = new h2d.SpriteBatch(ptiles[0]); + world.add(parts, LAYER_ENVP); + for( i in 0...100 ) + parts.add(new EnvPart(ptiles[Std.random(ptiles.length)])); + world.add(soilLayer, LAYER_SOIL); + + pad = hxd.Pad.createDummy(); + hxd.Pad.wait(function(p) pad = p); + + // Display title and instruction to start game + title = new h2d.Bitmap(hxd.Res.title.toTile(), world); + var tf = new h2d.Text(hxd.res.DefaultFont.get(), title); + tf.textColor = 0; + tf.text = "Press space to start"; + tf.x=180; + tf.y = 180; + } + + override function update( dt : Float ) { + dt *= 60; // old dt support + + if( bmpTrans != null ) { + bmpTrans.alpha -= 0.05 * dt; + if( bmpTrans.alpha < 0 ) { + bmpTrans.tile.getTexture().dispose(); + bmpTrans.remove(); + bmpTrans = null; + } + } + + for( e in entities.copy() ) + e.update(dt); + + var ang = -0.3; + for( c in clouds ) { + var ds = c.speed * dt * 0.3 * way; + + c.t += ds * 0.01; + c.spr.setScale(1 + Math.sin(c.t) * 0.2); + c.spr.scaleX *= c.sc; + + c.x += Math.cos(ang) * ds; + c.y += Math.sin(ang) * ds; + c.spr.x = c.x; + c.spr.y = c.y; + if( c.x > LW * 32 + 100 ) + c.x -= LW * 32 + 300; + if( c.y > LH * 32 + 100 ) + c.y -= LH * 32 + 300; + if( c.x < -100 ) + c.x += LW * 32 + 300; + if( c.y < -100 ) + c.y += LH * 32 + 300; + + } + + parts.hasRotationScale = true; + for( p in parts.getElements() ) { + var p = cast(p, EnvPart); + var ds = dt * p.speed * way; + p.x += Math.cos(ang) * ds; + p.y += Math.sin(ang) * ds; + p.rotation += ds * p.rspeed; + if( p.x > LW * 32 ) + p.x -= LW * 32; + if( p.y > LH * 32 ) + p.y -= LH * 32; + if( p.y < 0 ) + p.y += LH * 32; + if( p.x < 0 ) + p.x += LW * 32; + } + + if( title != null && title.alpha < 1 ) { + title.alpha -= 0.01 * dt; + if( title.alpha < 0 ) { + title.remove(); + title = null; + } + } + + + if( title != null && title.alpha == 1 ) { + if(K.isPressed(K.SPACE)) { + title.alpha = 0.99; + loadGame(); + } + } + } + + + public static var inst : Game; + + static function main() { + #if js + hxd.Res.initEmbed(); + #else + hxd.res.Resource.LIVE_UPDATE = true; + hxd.Res.initLocal(); + #end + Data.load(hxd.Res.data.entry.getText()); + inst = new Game(); + } + + static function restartGame() { + Game.main(); + } +} \ No newline at end of file diff --git a/src/ent/Entity.hx b/src/ent/Entity.hx new file mode 100644 index 0000000..c697b35 --- /dev/null +++ b/src/ent/Entity.hx @@ -0,0 +1,81 @@ +package ent; + +class Entity { + + var game : Game; + public var inf : Data.Object; + public var kind : Data.ObjectKind; + public var x : Float; + public var y : Float; + public var spr : h2d.Anim; + + public function new( kind, x : Int, y : Int ) { + game = Game.inst; + this.kind = kind; + inf = Data.object.get(kind); + this.x = x + 0.5; + this.y = y + 0.5; + spr = new h2d.Anim(getAnim(), 15); + game.world.add(spr, hasFlag(Under) ? Game.LAYER_ENT_UNDER : Game.LAYER_ENT); + game.entities.push(this); + } + + public function hasFlag(f) { + return inf.flags.has(f); + } + + public function isOccupied() { + if( getObj(Std.int(x), Std.int(y)) != null ) + return true; + return false; + } + + public function isCollide( with : ent.Entity ) { + return true; + } + + function getObj( x : Int, y : Int, ?k : Data.ObjectKind, ?flags : Array ) { + for( e in game.entities ) { + var o = Std.downcast(e, Object); + if( o == null || o.carried || o == this ) continue; + if( Std.int(o.x) != x || Std.int(o.y) != y ) continue; + if( flags != null ) { + var ok = true; + for( f in flags ) + if( !o.inf.flags.has(f) ) { + ok = false; + break; + } + if( !ok ) continue; + } + if( k == null || o.kind == k ) + return o; + } + return null; + } + + public function canPick() { + return false; + } + + public function remove() { + spr.remove(); + game.entities.remove(this); + } + + function getAnim() { + return [game.tiles.sub(inf.image.x * 32, inf.image.y * 32, 32, 32, -16, -16)]; + } + + public function update( dt : Float ) { + spr.x = Std.int(x * 64) / 2; + spr.y = Std.int(y * 64) / 2; + } + + + function toString() { + return kind + "(" + Std.int(x) + "," + Std.int(y) + ")"; + } + + +} \ No newline at end of file diff --git a/src/ent/Object.hx b/src/ent/Object.hx new file mode 100644 index 0000000..3d1e988 --- /dev/null +++ b/src/ent/Object.hx @@ -0,0 +1,132 @@ +package ent; +import Data.ObjectKind; + +class Object extends Entity { + + var speed = 0.2; + var angle = 0.; + var wasCarried = false; + var color : h3d.shader.ColorAdd; + var pulse : Float = 0.; + var hintAct : h2d.Anim; + public var active : Bool; + public var carried(default, set) : Bool = false; + + public function new(k, x, y) { + super(k, x, y); + switch( kind ) { + case Square1, Square2, Square3, Wings: + var a = new h2d.Anim([for( i in 0...9 ) game.tiles.sub(i * 32, 256 + (kind == Wings ? 64 : kind == Square2 ? 32 : 0), 32, 32, -16, -16)], 20, spr); + a.loop = false; + a.onAnimEnd = function() { + haxe.Timer.delay(function() { + a.currentFrame = 0; + }, 200 + Std.random(400)); + }; + if( kind == Square3 ) + a.adjustColor({ hue : Math.PI / 2 }); + hintAct = a; + case Plate1, Plate2, Plate3, Plate4: + game.soilLayer.add(Std.int(x) * 32, Std.int(y) * 32, game.tiles.sub(64, 32, 32, 32)); + spr.alpha = 0.8; + case Hero: + game.soilLayer.add(Std.int(x) * 32, Std.int(y) * 32, game.tiles.sub(0, 96, 32, 32)); + spr.alpha = 1; + default: + } + } + + function set_carried(b) { + var ix = Std.int(x); + var iy = Std.int(y); + if( b ) + active = false; + wasCarried = carried; + game.world.add(spr, b ? Game.LAYER_CARRY : Game.LAYER_ENT); + return carried = b; + } + + override function isCollide( with : ent.Entity ) { + return with != null && with.kind != Hero; + } + + override function canPick() { + if( hasFlag(Under) ) + return false; + if( carried ) + return false; + return true; + } + + override function getAnim() { + return switch( kind ) { + case Exit: + [for( i in 0...6 ) game.tiles.sub(i * 32, 160, 32, 32, -16, -16)]; + default: + super.getAnim(); + } + } + + override public function update(dt:Float) { + + if( hintAct != null ) + hintAct.visible = !active; + else if( active ) { + pulse += dt * 0.1; + spr.adjustColor({ saturation : Math.abs(Math.sin(pulse)) * 0.5, lightness : Math.abs(Math.sin(pulse)) * 0.2 }); + } else if( pulse != 0 ) { + pulse %= Math.PI; + pulse += dt * 0.1; + if( pulse > Math.PI ) + pulse = 0; + spr.adjustColor({ saturation : Math.abs(Math.sin(pulse)) * 0.5, lightness : Math.abs(Math.sin(pulse)) * 0.2 }); + } + + if( spr.scaleX < 1 ) { + spr.scale(Math.pow(1.05, dt)); + if( spr.scaleX > 1 ) { + spr.setScale(1); + spr.smooth = false; + } + } + + var ix = Std.int(x), iy = Std.int(y); + switch( kind ) { + case Exit: + if( game.allActive ) { + spr.speed = 15; + } else { + spr.speed = 0; + spr.currentFrame = 0; + } + case Square1: + active = getObj(ix, iy, [Plate1, Plate2][game.hueValue], [CanPutOver]) != null; + case Square2: + active = getObj(ix, iy, [Plate2, Plate1][game.hueValue], [CanPutOver]) != null; + case Square3: + if( game.hueValue == 0 ) + active = getObj(ix, iy, Plate3, [CanPutOver]) != null || getObj(ix, iy, Steal, [CanPutOver]) != null; + else + active = getObj(ix, iy, Plate4, [CanPutOver]) != null; + case Wings: + var obj = getObj(ix, iy, [CanPutOver]); + active = obj != null && obj.kind != Steal; + default: + } + + if( wasCarried ) { + var tx = x * 32, ty = y * 32; + var d = hxd.Math.distance(tx - spr.x, ty - spr.y); + if( d > 1 ) { + spr.x = hxd.Math.lerp(spr.x, tx, 1 - Math.pow(0.7, dt)); + spr.y = hxd.Math.lerp(spr.y, ty, 1 - Math.pow(0.7, dt)); + return; + } + wasCarried = false; + } + + super.update(dt); + + } + +} \ No newline at end of file