From 16be4665cb6290dc0bd87dd7db54f9ccb6d078c2 Mon Sep 17 00:00:00 2001 From: Ratstail91 Date: Sun, 5 Mar 2023 00:29:55 +1100 Subject: [PATCH] Randomly generated floor --- Toy | 2 +- assets/scripts/gameplay/tilemap.toy | 74 +++++++++++++++++++++------- assets/sprites/tileset.png | Bin 227 -> 1858 bytes 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/Toy b/Toy index 6698087..76ddd57 160000 --- a/Toy +++ b/Toy @@ -1 +1 @@ -Subproject commit 669808730e3b881c0995408b8331e2e29d5943cc +Subproject commit 76ddd5703e73cc7435595f7b38c8d8a1c63a80d0 diff --git a/assets/scripts/gameplay/tilemap.toy b/assets/scripts/gameplay/tilemap.toy index 2dfffeb..427faa2 100644 --- a/assets/scripts/gameplay/tilemap.toy +++ b/assets/scripts/gameplay/tilemap.toy @@ -2,14 +2,39 @@ import standard; import node; //consts -var ROOM_WIDTH: int const = 5; -var ROOM_HEIGHT: int const = 5; +var ROOM_WIDTH: int const = 8; +var ROOM_HEIGHT: int const = 8; -var TILE_WIDTH: int const = 128; -var TILE_HEIGHT: int const = 128; +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] +]; -//vars -var tilemap: [[int]] = null; //debug vars var camX = 0; @@ -18,17 +43,12 @@ var camW = 1080; var camH = 720; - //lifecycle functions fn onInit(node: opaque) { - tilemap = generateBlankMap(ROOM_WIDTH, ROOM_HEIGHT); + tilemap = generateMap(ROOM_WIDTH, ROOM_HEIGHT); node.loadTexture("sprites:/tileset.png"); - node.setNodeRect(0, 0, 32, 32); - //debug - print tilemap; - tilemap[1][1] = 1; print tilemap; } @@ -49,7 +69,10 @@ fn onDraw(node: opaque) { //draw the tilemap for (var j = lowerY; j < upperY; j++) { for (var i = lowerX; i < upperX; i++) { - node.setCurrentNodeFrame(tilemap[i][j]); + + 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); } } @@ -57,19 +80,32 @@ fn onDraw(node: opaque) { //utils functions -fn generateBlankMap(width: int, height: int) { - //generate the row template - var row: [int] = []; +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(0); + row.push("pillar"); } - var result: [[int]] = []; - //generate the game map proper 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/sprites/tileset.png b/assets/sprites/tileset.png index b50809a35f7e600e1ac67edfdb5b8034af752189..57e353517a2431395da7f712deaa5e09b3c28a27 100644 GIT binary patch delta 1807 zcmV+q2k`jg0m2TD7Ya}a1^@s6slRhYks&mH2G>bMK~#8N?VCN197Pa@&!(F;=6@M zYG!u2ySnPFnx66QapUzjZvTC@lzxK*2d&i-H^*djaO4jqn(_B!J)R{{{8}Jo)R%$p`O!wEOf_ z2uj`s(Y0gQ0AVkH2SuQ4dXzdxKD!Wq$Hep^^zQp_?Kik=Gjx31S6_U094|t`A9D&c z(i7;qkv;_olE%K^?HJh$5Hm}_dgD_Q$5aKA0CTddvBy#o|NnFN<9qj439tn(oxiv{ zyUZUKf9}rmarC$5w_xsO0*nR`Srhygq)&mlRL&`YrOx-}wS*mI69Fm?l{K+{h5dsH z;2c_vrTl9GTvav^VB}t$Glrv@7@6;kj=vI*L6O}i9!Tt`ue!A~uXpQRnOmUcD1E&^ z1cAF~`W&x|gH}K(S2Y3Jkm<7}mYpDp#z47JOk4gdj ztFP)y(g&YB*qtro?!CLav!`fHzHz3{KlAN1N1#t@>zsbjSio=fan9HK7Z(>(ADr!u zO{(A_2CxR4bI~(#U4*%0-(?O7&|>QfaAF1Y@XTjq6>zFwd^mcG#C{)t!=h^Ovo|NZ z2CZrvVQzJtq6R8+^ycLf`~B|)vLGrncFr7!;CcbhwSA^QJ>ZP0KXa((r1#IsxPq(f zXTkSw(X*bjJy;YQmGZJ*^&_lAh?Td7EUwJmZIv>A{j^Nbk>Gm*W>ggyX+8#7xMxV}_U<*v#zawEkP(}6@kFs! zcMoXwj|emeJz8A^*Seg+~6Xynjn1) zJ}(d?bJ9Ts7r(+2*5YjKPFo4s3nW9g#FDu{u&NRrxz#+zSapm3K*Eg+IX#k{5n=#* z*1plZb?^m0NY2IY7bg!td${Yl%=8{GavR8~@Zf>Zo;f+(LYYypZr`)nf;D{|_aUop zx5*j@{Ze%9E{}76(ZLvmXJ5f`REx-Fv@M1NXaz!F)jxNa7nQRfsDeeLtVO62uM~}0 zTmf=`Age$}D?rXfCtU;&&RdV(xK&??NrbH#3Czi=MMzL>q~P|u0%Td7>)#}xCj^|2*?n=ui-j?Z-=HAmI3-vcy3 z3%dc3%1qQ`p0ODB1=Qz6Th95*Py298&c)0Vn3_KK$i}!}+Ha-`@F3#ipx`59j)0@8 z5a+lE?p#$lVkFoK=2qfs-AMpfCPV$%z1f;Q;Q%%tJFPE7s-(zu~lqU z{?#6UecGu990zmHyOTX3Kx3-0EujxVPsnF}9!CHskU^YB0A(`^rU%b>9&>sNtAbv$ z#$1$8`Lgc%>*b4(CSa6BB|>IMebpm} zza?nV3QAPA9sHoVz%ARv()~h&K{Sl^N?nf}J!3~02_8o6Mf9VM#8DH^2tc;8hMHSUk@LGsRF~!)@_kgP8 z9S?pqD`d45l=opDA$6^_M#V@1E(tIayi)~KIouO#B+%^1!8PBLMg=S11S4dlBHjvf xsUC%MnQI5ZHv4(pK?E{@L%pA;pD!mT{{Tr+C741-yh#86002ovPDHLkV1fa$bp8MU delta 164 zcmX@a_n2{lIF|wk8v_HwqPcY~6BSMB87e$o978gk-_G19*c`xf)W>W=`ur^~Z?rPr zXzermeZiQiK>q9pY1_L$Q?_T>hFtyHGfnKl{xk2d&V0YibpG*scV-v