From 7e275f06075502f3e2727e5fa1bf0605341212b0 Mon Sep 17 00:00:00 2001 From: Ratstail91 Date: Sat, 4 Mar 2023 22:59:12 +1100 Subject: [PATCH] Tilemap is working, in theory --- Airport.vcxproj | 1 + Toy | 2 +- assets/scripts/gameplay/lejana.toy | 2 +- assets/scripts/gameplay/tilemap.toy | 75 ++++++++++++++++++++++++++++ assets/scripts/init.toy | 2 +- assets/sprites/lejana.png | Bin 1569 -> 1889 bytes assets/sprites/tileset.png | Bin 0 -> 227 bytes box/box_engine.c | 2 +- box/lib_node.c | 2 +- 9 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 assets/scripts/gameplay/tilemap.toy create mode 100644 assets/sprites/tileset.png 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 e1b279f20a205470bef5b7950330d922d183566a..0fcc02a760ee045090fc4bff508906f5b28d7dc6 100644 GIT binary patch literal 1889 zcmZvddo~J~xY9R*qheDk1S?%e3<( z0l^unl|d&1^%}I6a^1`3W_G1+NI&n0@o2SC@Db#dW3Awy+`4jTjsO$EWVzrrK$HMg z*1(?z;25&`hx%7GcuT|fQCpPn$#V)(ut$vj9mX#J+*K_O11?x0z&{DZf32(eo0uEb zxkjKCj3q@)(GR*(CWrnx?a$)=pK+JSv&KLjgU}Vx`m1xL=4tSB#|d^D{!6a=m&J|N zV|z_qMtx9h@gg@II<@f_dMZxfk&h{-iu%vWlX|a3vbc+;fWl(Mm4Yw*J6387{1WLQ zKEhg@hv9>Y|JJ*>M9xz5s@{~2HYh2`|Hp$G$W4wFf6W1bo92%ivN7+WDRw!DcRe3Gc(~Mqo-r7_~q$XxhN^zN2BT?=tG)D z&p^wPsPbxwNc+>y_XCsuQZpTLQOyf-ken{`4m3R%PIgX30H{w3;+?di@u?NBRzsLDsr?RffhfUQCTaf zbxMp*3=Q0|Oh#`hzo^^&~qEP&7=%_`S0`+^$%Rp43sE%R-7UBMl4cEHg-;meN z#dK5KLu^!d66#1=0_(xQj)S__E`-UZ&@Fg!BBfN?&;D@0o_{A!)&7&I4PC3GdZO73 zX$+6kM8dFLU_In%ewL(BB}4pR2v|bp-6mo0@J)bl7)3W02#0lmIXu$V#u=c*$j8JP z&(v+T51mQ%zl@hn+_JoO-s26S%438OK`VW+*gQ1RMC<%~%UEwgYnZZ!Ul(WQ$GR_@ z?+Negy1t=4!z}qRHt=SewQX2c1$fI1c+%1ONs2f>yQkl4jo(RQ=$_N>Fl|e)-1)gfY_(#{YJm%_UyoL7?D$@#}Fz5i}5MMyg;(w_eD?O*L4KJJPQ>VGiEr^P!a|365m(6;~p literal 1569 zcmV++2HyFJP)Px)+et)0RCt{2U9oQCI1qilY!e_=iv5EC`GIZo8SV|Z*fRBEv4vq=eWeQn+xs)r z-VYq$KS<%qfUAYBu*oHD{{x%*Pla=c~AU+Yy*_mubm$#{%ht3X5@crz;(4- zq562h_aA$2hY5<=1ZjR71BG1Nit{hcZ)2cP{GUC)je&v!|4~=FRgG%}Y;4ZHS@Ul< zYm!@we(n6lf8G3Z^8c?PQBW1|aykw<)F4Rnht(Ibl{X8d^=s!Z{_EzSlmE%LfWiR2 zEWZH&{yqHdCV}k|P?|ru)Uvpoj&2OI)vuku_^+FPZvGD{0AUb7BO$B_kmi@}0AUP( zuKY{$7yoth&&mIkKNggJL z3)1}39Y9*YcK+hOZvMIXpHcu8W|AQ!Grv2N5FC>r()^Z7r~yjr*UoRbl=_bZeilgc z8!o8=#GyawDIoKLy4OXJv(3Us@UwHjeg0*4v=}f;{gM2vF%-Q!#yZEc!itAbU zsP@Oi-{2PTpGE(m0uTw-MkvWIGyqOUzjl6w{zq{$u16ECox1=4vIVFQsr;XYM%42h z?5vUFQnO&XDE`xU`}&hyrXUw`aZlC%A^Hce1>_F+62@1%mAB>Qc4Khg%Nc`|{(=G* zVH>=?=3Eqwgw#psJ?l@J1O~bXI%gl}lBiMzsOabU?7cv{{>fr01F#hSM1S%XfEjoQ zLhcGYi2+!Ia%|@A{J_fiI^c9-m+A8`Qw(e1>fjtmg|EIJg0M{WgvW z{T%!a{S8MZ3T#dUs^xue+O8KpMjA7Ktusx@;{2(K{nl)2H?&Z2+U4@eK{TNhU>ye zHG*%X2|vThPi;)xB!6c8HinQh6ThT>@3=8J7?GQd0e9d(M;nOX;=J$PsXf@(`RAfP zW)8qR`+9tS!FIF8`|BR(!}Xb1vzh&XJrfxtA>P@SLD#}dBXWEELi)WJ%+J1sr$**) z;Qe)PS8&G*bqWh}irvGNd802blk_x`%aKmT=~fscF-a?v)Zg#%D< z20j|Mr2g;<#D%Nhe8$8*7C(X_44_j#hxhKWsRG2@0UP?e!2A$^hqeNoBL>4~PDr@X zH~8NA0PB@s$PeVxkDH%8c}UVfcqxeU;W`Ky;ZMsyI(AYFh8uvF_@`yQNwCcNz1vXX z0BCTFfwR+lIdB_(pr7>#7^DCDkG*^8&+We#1Aqp%1GY(M*MCYsV+@Tr0J06RJ^dC= zvQqfqaH{wab#!%^aPmm9ydHrDi-EAr1W=j=Fn~9n3DhJ1MCLANnnrP zXbri!dBaIyNxTny1aq(Zm{UUa<2h1xv> z%EamMJFg}5H)09$!JdETwV3}s>#=0J3Yr)Av zs{bDUV^V6coia4#M3dH7NaTbnM!AdMB4Pj7m>OU1cnS&%3JMAe3JMAe?hgM0-84fw Tz-sHZ00000NkvXXu0mjf9_AIz diff --git a/assets/sprites/tileset.png b/assets/sprites/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..b50809a35f7e600e1ac67edfdb5b8034af752189 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XBj({-ZRBb+KpkRfki(^QJ^V^vl1)BqSj{2A_NT0vu<&9Rx z8?Ak2zb_aw7093cAZ>g1XUg_0+mNeYd!~s!*nj5z)tT>ina)3c@6PPPUsu~>y_php pIUBaBFkG9&5J8Z0;{M}MbE6fU)^E74>I2=t;OXk;vd$@?2>=f9PZ$6I literal 0 HcmV?d00001 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);