diff --git a/Airport.vcxproj b/Airport.vcxproj
index 999d88a..9dbfdac 100644
--- a/Airport.vcxproj
+++ b/Airport.vcxproj
@@ -30,6 +30,7 @@
+
diff --git a/Toy b/Toy
index 6e9d42f..76ddd57 160000
--- a/Toy
+++ b/Toy
@@ -1 +1 @@
-Subproject commit 6e9d42f892a8e4a4827904d928eb372a5508cabe
+Subproject commit 76ddd5703e73cc7435595f7b38c8d8a1c63a80d0
diff --git a/assets/scripts/gameplay/lejana.toy b/assets/scripts/gameplay/lejana.toy
index e51303a..66744ae 100644
--- a/assets/scripts/gameplay/lejana.toy
+++ b/assets/scripts/gameplay/lejana.toy
@@ -31,7 +31,7 @@ fn faceUp(node: opaque) {
}
fn faceLeft(node: opaque) {
- node.setNodeRect(32 * 8, 0, SPRITE_WIDTH, SPRITE_HEIGHT);
+ node.setNodeRect(32 * 12, 0, SPRITE_WIDTH, SPRITE_HEIGHT);
node.setNodeFrames(4);
}
diff --git a/assets/scripts/gameplay/tilemap.toy b/assets/scripts/gameplay/tilemap.toy
new file mode 100644
index 0000000..427faa2
--- /dev/null
+++ b/assets/scripts/gameplay/tilemap.toy
@@ -0,0 +1,111 @@
+import standard;
+import node;
+
+//consts
+var ROOM_WIDTH: int const = 8;
+var ROOM_HEIGHT: int const = 8;
+
+var TILE_WIDTH: int const = 64;
+var TILE_HEIGHT: int const = 64;
+
+//map between the identity and position on the sprite sheet
+var tilemap: [[string]] = null;
+
+var tileset: [string : [int]] = [
+ "pillar": [0, 0],
+
+ "floor-0": [0, 1],
+ "floor-1": [1, 1],
+ "floor-2": [2, 1],
+ "floor-3": [3, 1],
+
+ "wall-t": [0, 2],
+ "wall-b": [1, 2],
+ "wall-l": [2, 2],
+ "wall-r": [3, 2],
+
+ "corner-tl": [0, 3],
+ "corner-tr": [1, 3],
+ "corner-bl": [2, 3],
+ "corner-br": [3, 3],
+
+ "edge-tl": [0, 4],
+ "edge-tr": [1, 4],
+ "edge-bl": [2, 4],
+ "edge-br": [3, 4]
+];
+
+
+//debug vars
+var camX = 0;
+var camY = 0;
+var camW = 1080;
+var camH = 720;
+
+
+//lifecycle functions
+fn onInit(node: opaque) {
+ tilemap = generateMap(ROOM_WIDTH, ROOM_HEIGHT);
+
+ node.loadTexture("sprites:/tileset.png");
+
+ print tilemap;
+}
+
+fn onDraw(node: opaque) {
+ //calc the region to render
+ var lowerX: int = round((camX - camW/2.0) / TILE_WIDTH);
+ var upperX: int = round((camX - camW*1.5) / TILE_WIDTH);
+ var lowerY: int = round((camY - camH/2.0) / TILE_HEIGHT);
+ var upperY: int = round((camY - camH*1.5) / TILE_HEIGHT);
+
+ //bounds check
+ lowerX = max(0, lowerX);
+ upperX = min(upperX < 0 ? abs(upperX) : 0, ROOM_WIDTH);
+ lowerY = max(0, lowerY);
+ upperY = min(upperY < 0 ? abs(upperY) : 0, ROOM_HEIGHT);
+
+
+ //draw the tilemap
+ for (var j = lowerY; j < upperY; j++) {
+ for (var i = lowerX; i < upperX; i++) {
+
+ var pos = tileset[tilemap[i][j]];
+ node.setNodeRect(pos[0] * 16, pos[1] * 16, 16, 16);
+
+ node.drawNode(i * TILE_WIDTH, j * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
+ }
+ }
+}
+
+
+//utils functions
+fn generateMap(width: int, height: int) {
+ import random;
+ var rng: opaque = createRandomGenerator(clock().hash());
+
+ //generate an empty grid
+ var result: [[string]] = [];
+ var row: [string] = [];
+ for (var j: int = 0; j < height; j++) {
+ row.push("pillar");
+ }
+
+ for (var i: int = 0; i < width; i++) {
+ result.push(row);
+ }
+
+ //generate the contents of the grid
+ for (var j: int = 0; j < height; j++) {
+ for (var i: int = 0; i < width; i++) {
+ //select a random floor tile
+ var x: int = rng.generateRandomNumber() % 4;
+ var t: string = "floor-" + string x;
+
+ result[i][j] = t;
+ }
+ }
+
+ return result;
+}
+
diff --git a/assets/scripts/init.toy b/assets/scripts/init.toy
index 614326f..f531a69 100644
--- a/assets/scripts/init.toy
+++ b/assets/scripts/init.toy
@@ -31,7 +31,7 @@
initWindow("Skyland", 1080, 720, false);
//kick off the logic of the scene graph
- loadRootNode("scripts:/gameplay/lejana.toy");
+ loadRootNode("scripts:/gameplay/tilemap.toy");
}
//Globals go here
diff --git a/assets/sprites/lejana.png b/assets/sprites/lejana.png
index e1b279f..0fcc02a 100644
Binary files a/assets/sprites/lejana.png and b/assets/sprites/lejana.png differ
diff --git a/assets/sprites/tileset.png b/assets/sprites/tileset.png
new file mode 100644
index 0000000..57e3535
Binary files /dev/null and b/assets/sprites/tileset.png differ
diff --git a/box/box_engine.c b/box/box_engine.c
index 8d5cd30..55d0a84 100644
--- a/box/box_engine.c
+++ b/box/box_engine.c
@@ -432,7 +432,7 @@ void Box_execEngine() {
}
//render the world
- SDL_SetRenderDrawColor(engine.renderer, 0, 0, 0, 255); //NOTE: This line can be disabled later
+ SDL_SetRenderDrawColor(engine.renderer, 128, 128, 128, 255); //NOTE: This line can be disabled later
SDL_RenderClear(engine.renderer); //NOTE: This line can be disabled later
Box_callRecursiveEngineNode(engine.rootNode, &engine.interpreter, "onDraw", NULL);
diff --git a/box/lib_node.c b/box/lib_node.c
index 6712b31..ac5f323 100644
--- a/box/lib_node.c
+++ b/box/lib_node.c
@@ -594,7 +594,7 @@ static int nativeSetCurrentNodeFrame(Toy_Interpreter* interpreter, Toy_LiteralAr
//actually set
Box_EngineNode* node = (Box_EngineNode*)TOY_AS_OPAQUE(nodeLiteral);
- Box_setFramesEngineNode(node, TOY_AS_INTEGER(currentFrameLiteral));
+ Box_setCurrentFrameEngineNode(node, TOY_AS_INTEGER(currentFrameLiteral));
//cleanup
Toy_freeLiteral(nodeLiteral);