From 5db3d1a30672772c65db985e2002d86a0f06a4fb Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Fri, 11 Jul 2025 02:24:47 -0400 Subject: [PATCH] Tried out using the actual textures from the game but they don't really have the feel I want. I'll have to think about it. --- assets/map_tiles.png | Bin 7932 -> 9791 bytes assets/tiles.json | 4 ++-- meson.build | 2 +- tests/map.cpp | 1 - textures.cpp | 4 ++++ textures.hpp | 2 ++ tools/icongen.cpp | 42 ++++++++++++++++++++++++++++++++++++++++-- 7 files changed, 49 insertions(+), 6 deletions(-) diff --git a/assets/map_tiles.png b/assets/map_tiles.png index 40d3093be36f382e976c395bcfbe357ce0143712..1c87bb792e9431cf5a2ae2de052eec15a169fcda 100644 GIT binary patch literal 9791 zcmeHtc{G%L*#FF6jD4gmgJB}A_QA+DOj*iO+E5rv%p=KCLYA?Uy_8HFhDwi0Qj}sC zNkt5jLQJwnDBD=Zy!VWhr=ItBe(yQ&Iq!MTdH=bO`^^2_uIqDsuFrLSCGN2{6XHkk zgFql53-cYeAP|HI{7r#DfoCRviw6j#1hv>QfZecNJlYBp5pg~G)K?JFP z3FNP!sW}O;jq05p?-3dM`0Q_Uuj0Q5gvFZ=4PL!^HEVBgzs}tMvbo6HeZ;tW83)C! zandJjZ~5F!F_ooaqcPC1+qy2w)Klg5&Qjr`EJ4lX1Kte-t7T!wfl zT{}1V80vHCtf##HHY4A^=iZ29oXOiA6DBQb3SNRUrjvZPySlk4NG6Z>RBgOvip3Hm zGejdEVwD51so-{F1%r7hvsPBU5cndkUQQ^I2AAxB9sDX5Z?($g=75lfcMGU4IjQ9@X+Y)z7-DGr|> z4{9Z>k>pJJ+ru8E_5mbg^^J^DLqPuVs4>BxOp62Yq2y~Rd|XSn|X7ge^$+&;&JKD%Du>361M8MctL|a++ zfZs1Ur>P)=%8KemuU}T&Qam0QHyli(Teen^%tE;)#=0xcQVV2)7!$e5h2gYxcSe&M zzvM@?(AfAI)i@&zZU-@vYg<+ge#gT-(vCJ5637gPM{~!Szcb-t1ad1)d}YdX~$oOV%9{K%Nwz`6|av)Mu1*B2sB zGYr8W`vr^&xjG%IhUSgDy%QPC(RmApg1zEr&Mfe7T>wK{#%PuRgnu*N+IY}Js*~;b z(({masw5nCP@qL4(DWwJEa<~Kc($gy2~pfC6CX$EUcK|$a>6A9qBd;d%Lgf6$jmoa&7!p4RFF@#X;CpwO zIDCOEox}ASmC^+|k3=eO!|R=Jc~?vqPz@dMt%@J2Jt{nU&3RWhq&00kypOhjjL(#p;@x^_q6w+UH)2 zxj_lN zATzQD5LTfu{owC0Tf&28M&GAvn(f-hyOYNG z%OaYu)-c8(aotq{okNjL9!CZ!V~`uQg6Yp{%lnT|2v2^ZR~Et!H$fmI6=Oj6kMUUW z?f3e~)6hUMXEGM4!s_QQRS>_uw{EN;Za(#zaQo*tBxlbLR*3xnE8?HS8O8T?A#*Cu zxt9{nE(PyAntlg#XAU>O0*HXmK*44CSSMj>xO;(pp7@&%82Ni&!bA)_JkZ%GzvAi& zoH0Ai+`YDEX<>o4dv>a8B2xLY8Gs~Re*nNmbcxy=i-*39=Mxe>;_9=DciqaZwJNGa zAAF16--$m|U5LzWxLRz51la%hM~bJw!!8Zd_zJ{h;wc0!U$g*lAW%G|B2s3<;(Ew8 zgG$Hy#eersXf>NZ=1<*&OGB>87iu*){7JETg809?_6M8&7QqVJxb19hZI||SHWgQ# zDLi^NCMHH`vxle~tF!EcDzV|IUmsM#;FC4aeJvLu zDW63*@?=2O&%R7<}`*bGXSOCNhCzsGTywV8b@Cs2X#96KK>f@?%dDO}0 zLZ{8E$HoiXZ>km1%|yzQZ_KX@qAw3(>z#f$qkbaVOX)jGc8~0f9Gm8@M!~XPFH@0R zq}7LCdn`9$tFfBax)hzw`$fP)8M3q~>@%+I*(E5)~_@(BO6Q@D-agq_c;+?KwlUVULRE|X%? zVnQ5(_Etypiuv?ZK1(NoEk{Ms@)gE2ww+6~T8-7q0LM83!$^+k^?HGj`e(k$KdceW zvS*CSrQlisuyOmM-zLX_F5oB^!G4br-w}rXMSw5zjxR2H#$93wq!|=DQi`|ICmzGD z>voN!w)CpO1{*qk-9$#K@qA_g9CP`-ZASumoyy+|^J`NOL@YTVv}r_AoPOGOnDmO0&G zd+ArUH;++P~7jA*Hz{2~$7PFvt-n zzk#xqC&nx~j1WsnH~}gtDcK^JwL`#bQD`G8SzPHP417%ozPl~8_tB_a>0Um7FReC= z&TDsE@MT;{eJ#@=TbX$YT#_YOrvHvuJ~2nwvXVD5q#)#d6!PW>c3K2Qz!qKN>wD@n zU*mR>g|c+>yLc=M51aOdvVUb~xFA@vHpq<4n1Xv?c4}CUk;35p4Fvbq(iNn>oLo0@ zG*_75Y%iVCfPFu}VC{(81Yo~GwyM^&B_OWJw*bgxV!4gs=%p3r0+zsYmN?I38@X43 z+C=kRO-W!<45g>(#5KW3IkN0BV}@;R@FEIS!EZecJBs4z{2U3KcR(og(Vo}JWIsbr z8Q~98L+ELyLZyRI6FwG8IeG@}Y?>wk%PPiGBt#R&n|OMKd0tAxbtO}*Hf%mrE$THy z4-go2*dFQu?-MVV^GUwJT8Y<;)cTbjn)SIc7!2$~b-j5|qSV6%sT4rpNe-hZ zXwnZyEbADKm|;H-!je+~703WoARJOZIFIU?)N_T5Nl4WG&A1!2@Wuv%nHb)vtyaZv zynpF)&7EjTfPg~saM)eD&gM8MDb={~xw^XU=R3u&B>#Ph-&Xt|dG(D2J(tk4+5LV& zu6wuE*1WYJ!-D71Nlwo_Y}&8n2CF|zKW1rkx%?@3Tj)|abK=wVd|?K4LxAsmu%d>4 zz&F}+qpAqj;v^T({vgZ_+p%LPRFAaSs?HU&bv{|r?(U<=2B+;HZ*f+vU z-JCm_U)Qd_+hS8Q)rMslF{h@8Ab!fz=-OM&QycTL$5Ryv#GRCBHK4BQ;k}~k&SOuQ zYpOpG9DYKIPKm`C+hSeN79w}ylF#_u(K}a1eix>(Q6O}$B^mn!*|?w9%rTnZ9$t^W@59O=n~ z7X2IoHnT@i^R&Rx*|V4te)lqgiDH5DPZE4C$V6uAry1(h+Ntqv7xQ1N-l($S{1f+u z4Ei;GY>Ls&ebT({5yJf`DmitRqcil+MhIUy6GWutWe*7neP6TqT}1nH^@uST324?9 z;{0+99&nEb5z15vR9@G({u6OWemw3;EY=_l$%*i*FuA47<581Cu{{PIc<*{yGn4NlWhWz zx-0L6<*i*ZjL>x$QivVBe)zQN)7@MB6_tv!H$3m(S+-4DmIv8*`BzFuvppm)6m_sx z=eS|oHAhGZ%?RlfpSDCyCGNfD^!>WsoNAV^a?pd|gP#b7t0?gUO0BDXG3AEYD9ShR zWf_Z6<1z509cnVTDC$;Mbm~sZ=elYFSGslK?DKO68AEA1ET_Y#0zeu4H0gM@yM;mW*iR(^p0|6_Ny3$Gv|zVjT!_`4=0*X6d8{rRX>IYtCN-r8LaQdLk3Swze)Gkw$~qMx^qRIlfNdUP zAPV%PQ{v<^>4v!6@HcX~>8_qfJ<6Ihj32*dP_yLZ%ynPbIAk6o#b)yrglTMFZ_Y$- z{{YH2xug-L;>C>|OK#fqSt~;Rlo8U=D4_`Hh_p{lOo`@=adEXA?IL@wPiePX0Rp!P z_Fzvfgz3|h8w#u>&wG_C2p=Nz3W06bC8pXZ$t0%SRd}!_HK#|`@|A8BSt`052zq`W zbir?G4tQPFJ^C>{)(wC&T8ny@L_J*PuqJX6$Mo_zQIq|?r|m<4}KT4svU zW5DD?Y(U$hpi7~llM}|r1Q$ut!n#&x5<9#yQ4<^Y@vrr@pAL07FGN5{DXE^<1Q*D2 z5A(cNCprG8v47?!91+0|zWjaLYu*tT7Ur0(w9ooeCcU%$BO5Clj&u;mzDJz+Nc-Gy zo6U2zn8WnJrg8FLo*ZOO#9$}ip5DX@V$ID>zF@YR2`AUl0QK=`Iow_Xh|uH?cYYkc zCT4gY(MVXP8&pFU)kfpw)hj{_byZ&6II+~$PP-f#XRg8cKG2^O%omODp00OYQ|}re7AlLqj5Brf=gbqn%s$6gyo`XL`66vpue%kUfNCu@ zpN2+nGwYGk-%sWadv?7D;F|d-SX(AkBjA>$Li8Au=juZIs2Q(9a6D_H7yXz5t%+yH zMXq70M;$@DAe^I@_Pu2n-XK$$?|k`lku3aN<KIo-Ikrv(ReP76t+JGH~Bq3W6A?=UeRBo<6 zn0l>Shs4d1!O(rnV(tY8+jbA%TIuRvAw#!=jApI3%B0j*uY5N-P0xPWTw(FJNtUao>wY2P4MY1RZ4MW7_>8J6_8dStqJ0ljG#RF5d#Y zx`l*PSzqfmKosHhxSb>cX?5*JAuUE10V!QpIA4A!YcM|!#GDu)FO(@u z8c>4K_RCp%V3{_WR;Lu8ejvqS!_LaSdK@BhEh4BGKeCf?9G5eUch{0LWHHqI`U?}u zdrdl*$EuY8_blU4JdWzxAx)zMC}%;eaHPZWT-x*lf<+$cIkNwVK{KhUPB*@ncWw0N zjJHHYLiA%WCcyC+S8l)(te-zUd{<)*dN2iW;A<6N!jlrCgijo8MUjAn5-yvV^C|C| zO09dviE8@t%IALW8hp-#*l~HYZ5Dp)Qvv$c{r3jjzi5+)z~#);@~5PqpR((a96&OP zuk&;n?8QF1)^)X&iyo^ZSM|);XfW-=SWdjGf;tzwtV??K+bGz`)d~|@TOIiQd@ed~ zZhB$-Ua2894H?M!8dQSAD&1rmT52k2O7m((+pfPm2BWg7BJduD*|xVZhy$ymWVv7N z!-lr)=C8#QNn4t?NR>?Ry%eldG<+fuSlatbS_0}O7pO~trcF~DvwE{4ic#ZW%V!{wc#7}toI28@nL1LSFk^A&&=u^iMz*+>Kfs)0%!4S-7M!5n~1rUbxy`c&C`Q3B1m%C*5mEya|vhFAz_f0cVR2o#cyqFo@Fl+Xq^ zeqh}>V?&Ab7Bxt=4&u$99=!vX?B+I!F0HMvZP0k~mmB*0FFxi-62W%%7aAn(RW<&P z;xQ(cG6efom4Fd36dJQrJQ+F)bffqq4?KS^Lh=-0gt5#qV@K7zG0_uw&WKFoI1q}}L8?)_~KfC*0OIg894F><|P z6f)C8(DWuEus z3@4P^_SX)2*tSKFiC$cDA-+dhKg6nw5WcEdUG5%$zvJ*zO6jyV%|CGR|FGFV^!jS7 zW8yh9GLKxI{a5FW)7<#?s|$8=K`*oBZ+p11+?x*j?GBVvPl3g~<|LTjhPHqJKh0aR zLT-C_glQ&G6gi<~>;9dSx*mN)t4cFVn`y|B>-Uv-a`Bw+b;N!9N%S z2qu7N(8oZ#5?_(gjB8cFQ}C?wtR?0ouOrftMTq&+d4N|oa+|&ba$Ekt*`7lh|H36T zCPc4&l=?%@BFDZJOl{F|XXZ>3>-W`=-_@oJwEi)ZywS4foBk`FXW!qi0`0F!=`s+q z0&t~$=Fi+_x7;QF^SYHS&07EEMl+7$3pB!jes|rP1ma6@)Hrm(M-lkP PFp$Mg>m7GZ@KOH(ago3L literal 7932 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 diff --git a/assets/tiles.json b/assets/tiles.json index 0d81922..91fc600 100644 --- a/assets/tiles.json +++ b/assets/tiles.json @@ -22,8 +22,8 @@ "collision": true, "display": 9256, "light": 20, - "foreground": [100, 100, 180], - "background": [100, 150, 100], + "background": [100, 100, 180], + "foreground": [100, 150, 100], "id": 2 }, "ceiling_black": { diff --git a/meson.build b/meson.build index 03ada2e..40915a8 100644 --- a/meson.build +++ b/meson.build @@ -170,7 +170,7 @@ executable('zedcaster', dependencies: dependencies) executable('icongen', - [ 'config.cpp', 'dbc.cpp', 'tools/icongen.cpp' ], + [ 'textures.cpp', 'config.cpp', 'dbc.cpp', 'tools/icongen.cpp' ], cpp_args: cpp_args, link_args: link_args, override_options: exe_defaults, diff --git a/tests/map.cpp b/tests/map.cpp index 938e26f..15eb3b7 100644 --- a/tests/map.cpp +++ b/tests/map.cpp @@ -132,7 +132,6 @@ TEST_CASE("map image test", "[map-sprite]") { auto sprite = render_sprite(sprite_coord, size, display, map_sprites); sprite.setPosition({float(it.x * size.x), float(it.y * size.y)}); - sprite.setColor({255, 255, 255, 200}); render.draw(sprite); } diff --git a/textures.cpp b/textures.cpp index 479245a..81d4978 100644 --- a/textures.cpp +++ b/textures.cpp @@ -120,6 +120,10 @@ namespace textures { return (const uint32_t *)TMGR.surfaces[num].getPixelsPtr(); } + sf::Image& get_surface_img(size_t num) { + return TMGR.surfaces[num]; + } + const uint32_t* get_ceiling(size_t num) { size_t ceiling_num = TMGR.ceilings[num]; return (const uint32_t *)TMGR.surfaces[ceiling_num].getPixelsPtr(); diff --git a/textures.hpp b/textures.hpp index 5ec9e3f..39841d6 100644 --- a/textures.hpp +++ b/textures.hpp @@ -36,6 +36,8 @@ namespace textures { const uint32_t* get_surface(size_t num); + sf::Image& get_surface_img(size_t num); + const uint32_t* get_ceiling(size_t num); size_t get_id(const std::string& name); diff --git a/tools/icongen.cpp b/tools/icongen.cpp index ba4277c..134e839 100644 --- a/tools/icongen.cpp +++ b/tools/icongen.cpp @@ -8,6 +8,7 @@ #include "shiterator.hpp" #include #include +#include "textures.hpp" namespace fs = std::filesystem; constexpr const int TILE_COUNT=10; @@ -28,6 +29,7 @@ struct MapConfig { BoolGrid centered = make(TILE_COUNT, TILE_COUNT); std::unordered_map colors; std::unordered_map backgrounds; + std::unordered_map names; each_row_t it{map}; }; @@ -81,8 +83,43 @@ struct MapTileBuilder { dbc::check(worked, "Failed to write screenshot.png"); } + void run_real_textures(MapConfig &config) { + sf::Vector2u crop{$size.x * (unsigned int)config.it.width, ($size.y) * ((unsigned int)config.it.y + 1)}; + fmt::println("TEXTURE CROP: {},{}; size: {},{}", $size.x, $size.y, crop.x, crop.y); + $render = std::make_shared(crop); + $render->clear({0,0,0,0}); + + $render->setSmooth(false); + sf::Vector2f cell_pos{0.0f,0.0f}; + + for(each_row_t it{config.map}; it.next();) { + wchar_t display_char = config.map[it.y][it.x]; + // stop when there's no more cells set + if(display_char == 0) break; + + cell_pos.x = it.x * $size.x; + cell_pos.y = it.y * $size.y; + + auto& name = config.names.at(display_char); + auto id = textures::get_id(name); + auto& img = textures::get_surface_img(id); + auto img_size = img.getSize(); + + sf::Texture surface{img}; + + sf::Vector2f scale{float($size.x) / float(img_size.x), + float($size.y) / float(img_size.y)}; + + sf::Sprite sprite{surface}; + sprite.setScale(scale); + sprite.setPosition(cell_pos); + $render->draw(sprite); + $render->display(); + } + } + void run(MapConfig& config) { - sf::Vector2u crop{$size.x * (unsigned int)config.it.width, $size.y * (unsigned int)config.it.y}; + sf::Vector2u crop{$size.x * (unsigned int)config.it.width, $size.y * ((unsigned int)config.it.y+1)}; $render = std::make_shared(crop); $render->clear({0,0,0,0}); @@ -107,7 +144,6 @@ struct MapTileBuilder { sf::Text icon{$font, content, $font_size}; icon.setFillColor({255, 255, 255, 255}); - $temp_render.draw(icon); $temp_render.clear({0,0,0,0}); @@ -178,6 +214,7 @@ void load_config(MapConfig& config, bool is_centered, std::string path, std::fun wchar_t display = data["display"]; config.map[config.it.y][config.it.x] = display; config.centered[config.it.y][config.it.x] = is_centered; + config.names.insert_or_assign(display, key); dbc::check(!config.colors.contains(display), fmt::format("duplicate color for display={} key={}", @@ -220,6 +257,7 @@ json& component_display(json& val) { } int main() { + textures::init(); MapConfig config; load_config(config, false, "./assets/tiles.json", [](json& val) -> json& {