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..6698087 160000
--- a/Toy
+++ b/Toy
@@ -1 +1 @@
-Subproject commit 6e9d42f892a8e4a4827904d928eb372a5508cabe
+Subproject commit 669808730e3b881c0995408b8331e2e29d5943cc
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..2dfffeb
--- /dev/null
+++ b/assets/scripts/gameplay/tilemap.toy
@@ -0,0 +1,75 @@
+import standard;
+import node;
+
+//consts
+var ROOM_WIDTH: int const = 5;
+var ROOM_HEIGHT: int const = 5;
+
+var TILE_WIDTH: int const = 128;
+var TILE_HEIGHT: int const = 128;
+
+//vars
+var tilemap: [[int]] = null;
+
+//debug vars
+var camX = 0;
+var camY = 0;
+var camW = 1080;
+var camH = 720;
+
+
+
+//lifecycle functions
+fn onInit(node: opaque) {
+ tilemap = generateBlankMap(ROOM_WIDTH, ROOM_HEIGHT);
+
+ node.loadTexture("sprites:/tileset.png");
+ node.setNodeRect(0, 0, 32, 32);
+
+ //debug
+ print tilemap;
+ tilemap[1][1] = 1;
+ 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++) {
+ node.setCurrentNodeFrame(tilemap[i][j]);
+ node.drawNode(i * TILE_WIDTH, j * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
+ }
+ }
+}
+
+
+//utils functions
+fn generateBlankMap(width: int, height: int) {
+ //generate the row template
+ var row: [int] = [];
+ for (var j: int = 0; j < height; j++) {
+ row.push(0);
+ }
+
+ var result: [[int]] = [];
+ //generate the game map proper
+ for (var i: int = 0; i < width; i++) {
+ result.push(row);
+ }
+
+ 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..b50809a
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);