From ce0959f3f6ab8c0c1bacbb20c6af4d8a42459338 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Tue, 28 Dec 2021 20:28:17 +0100 Subject: [PATCH] fix rendering order + clean up old files --- CMakeLists.txt | 4 ---- assets-cg/converters.py | 21 ++++++++++++++++----- assets-cg/example.png | Bin 3816 -> 0 bytes assets-cg/player-attack-down.aseprite | Bin 2337 -> 0 bytes assets-cg/tileset_base.png | Bin 755 -> 0 bytes assets-cg/tileset_base_2.png | Bin 724 -> 0 bytes assets-cg/tileset_decor.png | Bin 569 -> 0 bytes assets-cg/tileset_decor_2.png | Bin 541 -> 0 bytes assets-cg/tilesets/cavern.tsx | 12 ++++++++++++ assets-cg/tilesets/lab.png | Bin 1025 -> 979 bytes assets-cg/tilesets/lab.tsx | 25 +++++++++++++++++++++++-- src/map.h | 2 ++ src/render.c | 26 ++++++++++++-------------- 13 files changed, 65 insertions(+), 25 deletions(-) delete mode 100644 assets-cg/example.png delete mode 100644 assets-cg/player-attack-down.aseprite delete mode 100644 assets-cg/tileset_base.png delete mode 100644 assets-cg/tileset_base_2.png delete mode 100644 assets-cg/tileset_decor.png delete mode 100644 assets-cg/tileset_decor_2.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 99ad201..cfee90c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,10 +35,6 @@ set(SOURCES ) set(ASSETS # Tilesets - assets-cg/tileset_base.png - assets-cg/tileset_decor.png - assets-cg/tileset_base_2.png - assets-cg/tileset_decor_2.png assets-cg/tilesets/cavern.tsx assets-cg/tilesets/lab.tsx # Levels diff --git a/assets-cg/converters.py b/assets-cg/converters.py index 90beca4..55b2b56 100644 --- a/assets-cg/converters.py +++ b/assets-cg/converters.py @@ -432,12 +432,20 @@ def convert_tiled_map(input, output, params): p = dict() for prop in tile.find("properties").findall("property"): name = prop.attrib["name"] - type = prop.attrib["type"] + type = prop.attrib.get("type", "string") value = prop.attrib["value"] if type == "bool": value = (value == "true") - else: + elif type == "float": + value = float(value) + elif type == "file": + pass + elif type == "int": + value = int(value) + elif type == "string": + pass + else: # including "color" and "object" raise Exception(f"unknown tile property type {type}") p[name] = value tileprops[tile_id] = p @@ -453,9 +461,12 @@ def convert_tiled_map(input, output, params): t2 = 0 if t2 < tileset_base else t2 - tileset_base solid = 0 - if t1 in tileprops and tileprops[t1].get("solid", False): - solid = 1 - tiles += bytes([solid, t1, t2]) + plane = "FLOOR" + if t1 in tileprops: + solid = (tileprops[t1].get("solid", False) == True) + plane = tileprops[t1].get("plane", "FLOOR") + plane = ["WALL", "FLOOR", "CEILING"].index(plane) + tiles += bytes([solid, plane, t1, t2]) o = fxconv.Structure() o += fxconv.u16(width) diff --git a/assets-cg/example.png b/assets-cg/example.png deleted file mode 100644 index 8826800383eeae92dade9545feaeb68faf0720f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3816 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 YCcL3N$w9l={U9(buCOy`^}RX;0Qy;A+5i9m diff --git a/assets-cg/tileset_base.png b/assets-cg/tileset_base.png deleted file mode 100644 index bb3b18b41eeaae292b7aef946958923b1c3385cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 755 zcmVPx%tw}^dRCt{2+dpsGKpe*L2MWkS%G4p*I%PzuDrM;F;0^JHcpKd+Q88rb#FQ>9 ztyCePe}>4H<2ai$*ug*R`&mNlGu-n0e7-yPB>mF`hMzuPa=CfiuV1d+1>kIhYj>b6 zc9YC~9xgX$w*f3^qyYFq@udW-sNHUoC5JBmzTt9n@HwS@nf&~2l2z&t&{mBUfU3dp zgXRA%D;RZ$ugdrNg$1yzmI4q9LrO@((3OSIFA}LEiBtcd3VrIx0I z1i15~OZwODfOI@t-=?6or5`{OY8?Sw5*9!BRoCHDhx#caf}#S{rlJJYrLk22U(qvk z>MB6&+M6T>SU~E&6NkklWipWw0lJ{kRe-8(d_|#5`HixX zK$X4_aCBWOwgQLO#%AH0cJ8VJU|CNsd>b$i<6921&wUw)w*g^UD+_=n6aZM(ySsTf zDgZxzeTz1}yLmV|_WW~Ef3E<%iGd`o@5hp)_uqd@iU-{nwg+I-Kza%C`hKkS{n&ku z@y`){z`p1sKovX!0Cu@$z}TI=Xe1D}17MSz1K3S6Wz((Jv)9na*1NOmR+6-yjVS_v zaee7E=$rXS?`AJA2o`O2*~~|hPx%j!8s8RCt{2+`n(rKor37m&&qGM@y&+m6-VpkdVdLoqq?$Zu~9$0bzr5=)}m3 z)G}0vj6uo(4B?D(KHF#Ci|xC9KT@SMeon5#yC3h)U5Usa32_{IS- z$maOcvd9}r?n?SDeVv5Q?``cd3EuS`uD=0@jYqS9?Xq%^HB%sB{3n)%8j)Jc@psU>yN40 z0bmBsT>vv9ux9{maRB0!i8N2gnd$xS*Ut|xK7Ns|H~?{~mH=k7uTT5WK7DK4;EDqf zr)nGU{mpl;8+_vcEMGMPD2u!?s=G#cR~&#iRULrq|MuBMz_vI5amqx*I{b54U387~ z|11CFo*w|P9MufKobu~){p^zG;ekYSo&>ZLouj`%TK)nV0fqwDYw$?`0000=G`P)Px$^GQTORCt{2nmeE^^KzEwdEfIV0?n~3%Ubms2w4@; zRWBe2vsa)%2~k9-24E!fmXXYR3O4A!6SG&a>WRllIIAOsIN1z4;OE^AjFP*^JDCLb z-+ME~qX`hAj?fJN7@L4#SRO4Lk0wBf8k88oc`^3iuGc2tw_XR*F`RpUSrZ64GoX>_X69TLrfF|(<->gpB z%|;X`$;A=Zg~i++URvY+$5-343J`+!s}y9$5TX-GDgd{`K2gfcU?lTaI-3OmR9bNW zKsuX+-x~s%tj^3&$TXp6LL-^CI++9j;5WAovpNy~Zs{9-S==527>gbNj!q76fBOIc zuJfH)-7U*|jp0*ZqBBZLVY>-zl*dJetoZFQoZtNB&wC3%10Xu1Y%lB-@GRoD$GAT2 zqtc2?&!6=j01bfX%vv9Y2@{#eJY=B(5S>|T16T$$0HQO0f@}|t8V+;a00000NkvXX Hu0mjf3}Nx= diff --git a/assets-cg/tileset_decor_2.png b/assets-cg/tileset_decor_2.png deleted file mode 100644 index 83775dc027aad35d4e9efde8861858770b16f638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^Px$*GWV{RCt{2o2_mFK@i91nl?EJNs}TfNev2p!Sn&nRiK+7d4vicp^~H;QO5&d z8Z-*iAS-Cn9KhFWor&^A`9^z$OaK56T>4nV6z$z&5fBk|!ib58-d58f%`WeM z6tM>YWaGsFxPu+-OgOg6nhczuP1}l?BMGD2~GrnEnXaei^q?f?bD*rJaGd0 zJ!_5#Uj)9M4A}Lo?EnBrlJskw^lRJ+BbKzEXj1~%-o;+8Aw7UJr1m#^0A|#;WdSZ5 z2B5-tX#&Q>77-DRd-J{Vac^!N({qkRqPqxMM|+LUCaYWk;J@ST6u{;L;$dq~=y}B- zj-$fD6hWt@_IYdos1ja}0Zn1sG60wOuOE_3Q7&iQpwS-ja@PH2nbk?P1#g}LpbP+DgBKBW!iaT!FBgBz zi$E?rqMZ|1#nYqqRP-JIGd>0a)y10wAlgOt`tx@{v?&d2@6rd*4xlXH06>*FsQ}Fk f;2ePi09ED(#9uO75=U2e00000NkvXXu0mjf^s?!_ diff --git a/assets-cg/tilesets/cavern.tsx b/assets-cg/tilesets/cavern.tsx index dd6b9ce..05a315a 100644 --- a/assets-cg/tilesets/cavern.tsx +++ b/assets-cg/tilesets/cavern.tsx @@ -3,12 +3,24 @@ + + + + + + + + + + + + diff --git a/assets-cg/tilesets/lab.png b/assets-cg/tilesets/lab.png index c110208846256bd09a7d1b60b51622724e4c4004..ce25be68d5f68b202388c364a506b7b5c06567f2 100644 GIT binary patch literal 979 zcmV;^11$WBP)Px&jY&j7RCt{2nZHY$K^VuMS2T!|h87(nbO;&R$*mwS1s6AmLI?i=NB@H25VCda zSm^A~En7MWB`rABNr#Z3&=wSn=_I1iw?llAdoR!Ze9m~veIO+7<$L$O$@ARvJa?A? zpMul5Rec@c5gsm`%QII0?$x)9(|?wA_kiTp3Un{7oxh{Lr}Sc*YCO|8rswcwb79%5 zAJ=&RB60u@-HYpzaVR5+ZL(g(*9r1!MR{+NPGv}Rj1Y!a@gN<5GJ@;OG&zaQwd#3v z&R~i{(*Z^o=MekgOviC?#^Z19T#j|9$*UE3`|GFkePyC> z068Rw$oVF?M%UdFe~&F_a5OaX^7+%@hg(B;F3(09S?fy_4glaci#UCCGuSs3m^7kO z*o<*_a&FXciN*n9AoMCgtOaxtL0$!5M35tZO2;7z2cZ5OYPN`NcU44jR{@Ai)R6mP zc>nk6+3>^X?^+#)C>+4Hy1wfQIz;FfbuQ0{vt11PGhcpK={U>;8D+{)n>?<_(L^_% z=^CF2U%Gp#c=z?UQRAYsB^n3tF(Se(0;&7^IDrn6KCf0LX7%C8`9vF~;}As(5cdJ( ze6RcCLZt!jDj>u%l&W*&B2cB{5QPI!TeF<)S`(qSfyFA{w8Kd0%9}r{qjqYhk1Kz_ z^8=Y^QUC{enPs!8P|YCU(67q>wz|!QWoXq_i5_KIwN>xKBMR10;w|Yon1OCBZ*v&L zJq}JJrbn+{XGM!dcpgO!knks%1N`~4Q~=n`@|Csy6bT|>7GTn7jeb7^0LbUp3xIK< zq0-sVtJez`ePTMy0;mo7u{Nwe8+`zsPNdQAXR@(fjDK^`)JBK7jlJYV(;}Z=FE9$2 zz!ZS=>h%I&vX)8#HwVo^G`{Y$$w?B940acb!R}%q8(ejbdT|Wd0VvS$vIEElr3`GN zNq8a}RW!J4Xq67Y-vQ8&@;il#HettT6|nW;1polFcaA}9!*=mIv5jKBZI?Dg<~H`S zn}cSd%kegvgd3%0plsOo&T+{hC=K%D&A@1s)1&QdWo^GWJ=&hoqG3%Dz@$ldAm)FY z8URxPHI~opPc^_jqbdTa8h|PSMWg#T06Px&yGcYrRCt{2o4-pOK@`W|N<0oLJrcA~NO7b{D!YIz0UJAuKnni>OaFpkA$I9f z22xw3vonPdOu#BuT8Kp;5fp=_I>du)3Vq((IKSuVp7HyE<8EiaJG)nW-@JJ>P&#*WOsAQ5tG zdmdLX@MR$Y+$Tf=02_wCT^jXR%0RKBzJ8qY9O^YZ(sRE&;`4vr==5}~DO(MC`|D@) zeF2a}Bmn3sxx}2`N3Q8z_vHT*3LBn{&b)m7NKFHBR{CAR^q zRes+NLzAw5^Uu_EyJ@8FRsPf79{@m-T513~`Z8O{s)B6Ffak&_ouOn zC~TCUm|jCB0Du4@%YeFRpB)?&L_}qCrXuPUx@@}8d&KAg0DeRQfX$d6Cy%eryLEbB zy4hpQ-`!ksW(UKw%LpO>+y!NGrs6EX2TuW*{dT+JkFGUM0lJ$jm1=(1Z(ooA07P)M zG+Lc4jaIthZO5!v`_Kb`2{yhS0CYo}3?8BZ03@KAS~a|GbeoPSJpizg^=}g~S^ypb zVygi2A6^g<(fZk{ih!mX zfT;+mnm#1}5MdPnfD}aL!ew)&Qs?))@kieXWYZD#jDJ3#_jVli0RRw=SO6gE75T>A v|0#$rGXT>u*8%V - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/map.h b/src/map.h index 0b99e58..1a3d61d 100644 --- a/src/map.h +++ b/src/map.h @@ -27,6 +27,8 @@ typedef struct /* TODO: Layers of objects, stuff, dynamic elements, etc? */ /* TODO: Allow any collision shape for the tile! */ bool solid; + /* Rendering plane for that tile */ + uint8_t plane; /* Base layer: floor/wall pattern */ uint8_t base; /* Decoration layer */ diff --git a/src/render.c b/src/render.c index b2fdb21..50637d4 100644 --- a/src/render.c +++ b/src/render.c @@ -127,16 +127,17 @@ static void render_map_layer(map_t const *m, camera_t const *c, int layer) vec2 tile_pos = { fix(col), fix(row) }; ivec2 p = camera_map2screen(c, tile_pos); - if(!t) { + if(!t && layer == CEILING) { drect(p.x, p.y, p.x+15, p.y+15, C_BLACK); continue; } + if(t->plane != layer) + continue; - if(layer == 0) dsubimage(p.x, p.y, m->tileset, + dsubimage(p.x, p.y, m->tileset, TILE_WIDTH * (t->base % 8), TILE_HEIGHT * (t->base / 8), TILE_WIDTH, TILE_HEIGHT, DIMAGE_NOCLIP); - /* Decoration layer */ - if(layer == 1 && t->decor) dsubimage(p.x, p.y, m->tileset, + if(t->decor) dsubimage(p.x, p.y, m->tileset, TILE_WIDTH * (t->decor % 8), TILE_HEIGHT * (t->decor / 8), TILE_WIDTH, TILE_HEIGHT, DIMAGE_NOCLIP); } @@ -264,20 +265,17 @@ void render_game(game_t const *g, bool show_hitboxes) { camera_t const *camera = &g->camera; - /* Render map floor */ - render_map_layer(g->map, camera, 0); - - /* Render floor entities */ + /* Render map floor and floor entities */ + render_map_layer(g->map, camera, HORIZONTAL); render_entities(g, camera, floor_depth_measure, show_hitboxes); - /* Render map walls */ - render_map_layer(g->map, camera, 1); - - /* Render wall entities - TODO ECS: Sort walls along wall entities! */ + /* Render map walls and vertical entities + TODO ECS: Sort walls and wall entities together for proper ordering!*/ + render_map_layer(g->map, camera, VERTICAL); render_entities(g, camera, wall_depth_measure, show_hitboxes); - /* Render ceiling entities */ + /* Render ceiling tiles (including out of bounds) and ceiling entities */ + render_map_layer(g->map, camera, CEILING); render_entities(g, camera, ceiling_depth_measure, show_hitboxes); extern font_t font_rogue;