From a54f811a93ede7515aac947e3c217d361a6989d1 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Tue, 6 May 2025 19:03:21 +0200 Subject: [PATCH] floor and ceilingtexture --- assets/ceiling64x64.png | Bin 0 -> 14288 bytes assets/floor.png | Bin 0 -> 6786 bytes inc/cub3d.h | 6 +-- inc/types.h | 4 +- src/game.c | 2 +- src/render/DDAscratch.c | 74 +++++++++++++++++++++++-------------- src/render/render.c | 14 +++---- src/texture/texutre_load.c | 14 ++++++- test.cub | 8 ++-- 9 files changed, 77 insertions(+), 45 deletions(-) create mode 100644 assets/ceiling64x64.png create mode 100644 assets/floor.png diff --git a/assets/ceiling64x64.png b/assets/ceiling64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b30eb1ef437ff4ba2d2a09f8e0d241b530fc29 GIT binary patch literal 14288 zcmeIXWmH_t7A=fha0m{;B{($D5L^=6-5Y42fkqm);4T4z6WrY;xI>TtK?4a+uwVg# z1$dpDb8UR@&mH4?|89?#-Bqh*tu<@b+Eu%v)Ky>MU{PQpARyo<$jfTNesf)&ihKZ?`GaRxjVb;UeRj z9=|K4P4)Bvlk3Yb?2YEYyc4&uk0DkP{OIk|-_Ite$PVn8P_~_1ZhzTV*-F%E|MH%G zQ{_kVzDFY9{-f?itxSI{?e5e`k9ffQi>oUAy`HVoZkn6iDWQ`wgPGdBL*Emf)}suQ zi*!u)*U*Emr@n(OAxe9nE-fH8Tz)L78s96=bfhj(unu#s*6rKBiS93RwePgA9M`YS zs-%+LyWaF8pOoVLw89w@k_h=hdb!iWZ3PQcOe!rFLwhucX&i6yHT7s7OG(>OKLKWJ zaXwxj-j+Ho85OU8F_EaZFj-|^;*iOhRl{XqaO?@r?9V_?==!c`+`-@H^N? zrWj&hOeRyN6l2Bm;uKSvIDvU%rRwJSRlg?*)^_hxbdBu0Tqi$fyf`_gn!Y<_hy{KU z_`zBjFL;Y0&i@f`&e8Z$@a_jY$F=2-j;;yxazspWKT6H#hgQyQQ>jy4%Ruv%>WhUr~41AP3L(powA%=`Rtal%CLtHi{YT<<%hh1BKg zrr7M~+Uh5gm(^l+xD)B`EhkSSS^**a%pC0Iw8)l8$P$wHKDjU=8)jB$H@1DiWhXbNl@McyhP3O-^ zD@QBC>TPNQ(h=X&q+80P|Yg6ya>QnvZ_}sEI zuO5GKrHj7V$6*UeMs4|>ptYuBy~gRinZ>N=9{mxBd)hH;yms+Z+ftLg7@pat!Fo-Q;U{svtPeNg7C)Ugrg)V*NL%$R&x*a zi`~b(jth7^YEYc-NU^y#Xg#H383|&>GDcXQWjtR}@1N)sdvW7ZtCOqa-tcS7YLQZ# z_ae(LA=znznBluJ;N=GNbfPK!`i1KfAK-MRUCy*O}^FX@PF@Rr!JbLEFF@ z%;)|FaEk5D`pdQX{j1=YIYi4gz41=!6z$DeHS@DNBm_GW7#vUs#jtkIlst8=!qWE7 z1pzPfAC`%ZiX-e@R~71#>)I5~E3n9mm!Zsb`<)JcG{~lWI3$FXV^j@~D z0Hy`=;(HpZy$?|zFG5|IdS5Jn5f`EVuEGK1gCk+5&5(aB`lVQeX~+5+%5GKZh%bQi z_@lH*XI8X%n_%u2S=R>g&^+ZIX`2)d(G}bld;hju9wk%xuhtVgC%<%jbGPAe`ptCLp(&fkZxg}w$ZzaPEFQ3^m(N z6-nfLNY)NvVW}-LjhybIRa0$PBS&aHV~r`5I+1cMWLh+O6;EnVh;puiSg4UK*jS#@ zu((X`lJO_$A%7~{@C-m!I~M`H8)T2L+poNw`BZ)_Fix~tqoguT63Msju#LV0Y)toL zD}wljlF;fY(D5^m`$ewi1rM&qY1h!$PFl*L=ccsGCFECp3DVzt-beZ6*n@f<3+U)- zkU&;(yKRDgbQgG$e=G0mY3!X=P%Kw=tRXV}OzWmI0o2(lBtLXFv09O`ppFrrArsj}f=y&SH9?m|^rWvgw zKz|z06S=l7?GSlLB;o~gvXpFDb#<}Pc^;aKVH!b(sbFt3Z;q{+r`T17*tGIC)Oge` zwvEEUiOuRT#|_Vxa))28ZBUG%F7QI1nhdnB{40+8Xx@c+IW-Dd3583Y*tbR=P)UQi+d>+u z`ol*0UzsrOpF~lCyvd6^2URb%a_5Ifc84?NkaY}|zi=++FZ@(ynV7>NC@6Td`h0+M zre#noq?GalW7o0pj@pZ3l##9|L@Un*=;)Ej_lob0XW6q6oY}iw=@`0w;{Cw;nY6hV zO%l~IW;dhAO;kGw{FoWdHK>ZWneiq9HrVXL=w8d3!zpR9jItApDMC=#FVQu4q9W5&m`bpJ6#7GhT0Y9cSxSsF`;DZD7U7%O?$0Yj z_MDyGu|(!B41j88G^ow#{5jNTa_D7Pbga%(4zPe_HFz0WGPuQ6qlWJ%KFvODa4PFO zfFm?dmRwm#)eeKaEp4RjIcq{%v+j~WKYO*>&-vE~lgi@0*~y=B;GX7)kA=TyPHijqc^?bVN=%DR@;=wG_k8v&hbW!avYJH!3eakn|5}3+ z^d0YOoeS>}V?Xo9)26!%R&o}?;(j{>gSh*jSL$BVSQz9A-lO={8WWirT($s}7ReN| zk0F4Tyhi7gRR zxV{gsWqry>Se?PHv3Bcuj`JI=hWp56kKg4|rhG8is#z}RGEPujKakc_r#@{a#T3Oz zu`DVou)C!{Kr4%OAGGmKp`$WI;n$+)&E@hg#8);C@r};d(nkMo#7=Qcv0ol67UlCq z5apdt$FuZSFNz{5Cz($pq7#=f6$@c>U9)N{JhOS9ns3m%RF9%5iS_6uK!}&(kzVCC z29(VgN&vi@ak~7q(v~eTEID_jHjpH1_N6!vZ9{1*+2BL=p+375@7qupPTp>jC5EM} zQU=qUmhzthM}zs1tWoid@<)QT8<#7Jb9ARsU&7E)8#|G;r3NjOxN;SqWLtMB9tT z_&&saLUx?gqWFZ5qv+Sx;+b6XoMdMq`d7NS<3WjbhT=?<4=!*v7;W%T*T!p{ z3De2DY+)}0xssyyXr=t&d(4f(2xXjMfJ#T?yk$!RGZmxU*1M+(R^>TrOz{t~TFwRs zxhezH4}co*uo3TH8`H8oKXIqDyT9D6b991&u%|;3r{)y(?eesTd zLk8g-#&_*E3CaD9f(gdKMsXtA4m7A_ZUKXavgfB?NFxLVXzf(kLtZh8z$%SY%ih-@ z(m8!(ODnJ84`ddy5XXZ8fa{T=Q3-c zf7U60#Fy%A`>g^xctN-N<@@s`QNoJRY3!5&DQdHJbUT=hPhJ)gd0z3lj;w`lb%gfv zC}56UnKs)q^pp&e*uKP-W#6$lAr)3Z9{GV}>E;YmMgxGSu9cFs48VNuYH3xZr+ufz zcO^|z7G1F5+A3hG#ir6f%(m^3C5JX}W2qqDe66qBEcdy~uN;!Ms(Owkl&rl5Gmc}^ zu}7?xMf>zruU?ay8{a$}XwWe@U}MY7)zUt*w2x2!oOT8OOfIU7j78#Z?&Nh#bakx+ z8Z)uraC3XEL!|eIS1)~{ptFHT`2qz>f=gapK_TpRE!jO!H&g4QZHRf4<`MK{&4D;} z3m3?2G1ot+(XtD?9H|axk)9pY!#R|EQS{S8zVxB?4X28Ok#ynwUEq2S6U5xQxbJ0}ev3U& z1u|#lxko^G6B$=|1w#uHus&S{Gxf9A3!Nsa>6W8xAl{LN5@BoOrGl;r@Xx=XT3V>( zSJudtV%%%MW-TbpP*U`_B;&Q$KVQ19~&JuqHNb)LYTu8vtPsYQTF;2$Ofgr>9piV-)am}8;#^7nQ8m?vER zhQZI(o7GKazE$hRzV$`N4UP!0(WUsnLzBbeXF`L7cV?fqj|%l%d8|K?8EGBo3-jiU zQA{sqgu81?ot9jM7*>F#-Bg zT>WAl-I^|{yj50Q_HE~$0iM^ba@gpA606;{tWHCiu5=t@!xeSGUwijr&Q z9bTzo8ON3d*SG_Zkh2U>ZRW=_3$!XVDfCdi-Nzy0Fi(d}Ge6Oz;GWDA zc9V&di9I=cP7-Vy!d+)XG3>ZF`tcQ=RNI$;bLvAM3y>vII@Nw=lb?xvI)qj|`E4u)QLFcLzYqN>^sWC2g{el2ER*8{)lQs(8N*I>?OBvB`I%%C=I*_` ziygZKhLAbPwIVxLpT7#ouPG_pU1)QpAV1!Lhz=EQD@mspOA^aAf70H@mGEsIn^bfZ;#gw(Pth&N9Ax7pncA6ayPbc3;bLSJ-gc`{8$osfMt z`5{On7w1zrz_Eexp|waUUV461&0o9G!FDoUP`5hQ^j@R1 zFus2#PZ0OY=-Hq;`oiAOcpAmsGde|s26uq?#&ZgSS@i*?G->BsHxJ><$eZ^=ep(b1 z2BF0UZ$=l6uQqwmzGI}8KUUxA5fOm=)p4VK@Mz!G)IY7ohx8!jA9QKN?pM%g2I72w18nUz-q$rR>4e%>E{%`@V+QMpIyz4Om4{MDZ8OD8>x zjDKP#$rvwKGQMw4nrn+{mIOsv>nQ7g3;4&Z{`U(yWaZy6fq#WU66<&O35hcg7TqY?y5t5(|Mg@YX z!L{PK{dN6jyLZCJZY2tt?{dlK?~S*p=Wj8U=Fx#$_JM7e24!Kb`7M2--ip`!g;cRB z;YEtBnKl983qy}ohEA8WiP7TVJL-X{G(i;XIZ7BYqF3MRAEev^g_J8O2>c`AbsXC- zwY2@I_L;)8slG2RG3`YACaBCb4HwGJd7F04g)&&TuKdtE$FJlA z%C&QR-`p0gI2sy;op~KaNVc21Zmc+46}HjcC=yJ#hFrRj3ztQMMmyAP-R)y+FTNbR z9Q(ds9L)bLYb<6foHoVaFDg|O1DqsO;y6!YN@J3L@UxIAJjuNGHMFV@+cecc9^_YY zd|AT?WRjQZw(Cuxcs(|gk)8qL&g?vt!Qw7Ac;+da|Kcs<^Ar5DPWQVVf3q9A5iW!G zcNNOZ7t{ci!;#xPBvt(V@K)KN`TLt+eXREWbEiz&%^?*qeGR9FOK*~|K!bLBiQP9z zI~O08(FIjxVyXUqyzeU$mDL#M9hdY zRHNVbD2osBr^9&qpG`?V*f|#sUtM?S#v-zhd)-1P2uBqjZYgt2njxbKdMA`7!Zim_ z{}#iWjYXfHd;dcs0fULsj+UmV9>>#L^2A+th93J=ka$CQz?O93d;9SjRRLlRjm7HT z0Lw7GAN~5NMKqaJD<&9+MkL*iGS-s_uODz2$Li<@!@l&G&95z<3=qh-CzeNb7g`hx zYD=E4KDr`tfe{+qGsi$X0;wU}DOW}w^80bS%;zsoByu*C+o{nSVnW0pCP%F>IKJX_ zY8;>1`!22(%sA378OhocB{n@?U55o;6oQIKmawc!>B{4@=jR@T)E&Pbc0EwSm_P6( z9V+-EARvZ8WMtG8WMuyF)E)k;{hfcJnEZew)sUH%z1(x^@3fl<`634RPbCDar3s#g z8s_Vuzg3b5WyVp6jwxI>bUwALKUm+astl>5#dsaq_Cz(BOLOxvNjgR!FaGZAcy;TT zns!c6xl!aLf=cV8Ha(Yh1G~lPQ$#oVSOw+r2|jBkwy2h^LmKh!)gdq4JJ*1C8UY*L zUKYYBo`I&Q#V8g*Xvn#^OXyQ@%Jn<1rJ^T<5-^jq>p0gwaFET*2{*fVpfm@Gp*{qp z3lP|J*(|HrPv*7~)fIMfSx|hs(8dw~VlCz7cFF#RK&anK&lst$-iM}GM^LE4G9(@S za|`>soEHPdGstJ&rTYza>1(9x z+#vR@eeT7;aV1i5D-KqyqrOn_Fy+!3$P8uQH=hiqlcarVkJheC!oTk;w%HUg~jiaibQSRuqyK{|0>A!U%uP@G$HdKEj9yVaS4AEnyI6H;9uX?Qcwwg_FCR7(G3_ zp7tO9L7i1p{t55s`Zo)3KDfO=&fL6QJls$y_rJGrb(8aegZ%B#|FwmyHvBY+TNCW+ zwl5;AHMyr`4i5+I|A?SpZNb_{g2rH7{jepR77N*EZu*1svs*y|Jz>? zDe$0Rk3$ygXo#fQ8V%K`A)8x`7-m z!M~y4;9L+mju4m!%x?vTL-2tFIRX4&UQQq%*oqSjw&n!`_&`7&3+sP_P=i6>ssuUw zyH~%Vtl&@}K_Q@}umzBlpC1U|1n}_-asq{gc{%wlgaN_=))p3EE8#y-zsEsDN?k#W zo{x*?UnS}eAUA6#7*vd28RF>f^{)zT2o$X42Kr4JuMj{`K!67b5EkMS;t}Hemys?Q z<_Z_wZ%keuF8;r8tt>@e!Vy7m;Xt4u8!)%Cqs^ZtzlTKx9t@mV&~Kf>k^hv#V-b;o zfkAFgFl{F%2Qm8JzS91N{3CB#(Z2>o9^wkO@cym%zcsG~cKPeyUsJ#V@~4WH_K$2u zK$d@X;tKKrTm9(>-tMm|OIwhm4H!PZ{}$9g$|3)k!Qus50EECG9!_3sD_%|j03^T( zw6NmimQEU{?ivvTkvlJ zdH4i4dEjqBZC+s!9v%^ZFgp(){DPkQ?|`{~&+30fEXw`=;Y9S0!M~*ec)P#K;OPaP zt+@Z0uKwoiH;w-fUw@Cq|HB^O(Esb?zvB0Qbp4O6|B8YC%J_fk`X62Y6$Ag3@&DBI z{~KLc|Jv|?9pS4WPxy8w9D4Hr-wI(m%Nw{NATaL#{vfI|?q0(S(cKhOtYYas7eMp|N_y8IJ0jJx(ws4ed zSMb_fxO}Cnd_>@G2OEq{M0%ZV%31B_zP{Z*K32VV3ZQzpI~#fSW@O8vzK&zu<(&&v z9IqnVqWekVlofacm)6jmzCAuJT%PVKsJ10dm6+C%9 zp%=?ra~Qt`oH_@_`w6LNr9xK(qYEIJO$+Cucmw7JBOzkb9Fbqw$f zx>O}+mO!Xp6(?^2t2XamuU$#u+g5kfWbI}Y+EznXeu{FdXpOj(KpLP~3=NUc6&UW? zRVl>c&O3*CL_-l(3SW-kr}8ZEh|8k;aQcyl{fft;JFLY!=j!er7(c+X&Q_ef>#bO> zhwK$o9LMXw)>yfaDe<|bYwg5;%_*~_#(wI&X`yuX0~x={Td(nR(M5Of{N|scZ%DU* z4RgTwRB$u&5Eu_#X@TB#_pF_8j#G@xoOiZBYin!ccr}POe5)oKlv<9UXS5 zT3C0_*{wO;)?0Lku6R({kcD6Rs8}e^UR+!ZLVEKTmaqKHCvFGLI{C3>a&|i*D}t&4 z0tm6IU%x7Jlgc3mCFCixtzFFm!ch8ozPHz$+#PvTHZ!|`upfqa7Tqf=eEj^r-{s_4 zvJkX&bTI4`ux_f1HKB{RFJ2|Ku1S-wRY7P zvT*zG@Zcs=e-BXkJ_m?f$ed4NeBaSAKqGk29xqDg=Af6#)E3b<-VmDo@Nnlur#s$o z+kNG~*1%!xEtm&2+M}O3zkhw=O;dTUH{Nji?y%iEhrPJHX6t-_M=~rBex?bTI=`mR z+eBR%Fo&*uJpXdl1=s1fc1L`a_$|ru_^nRgD_qIt7Jnd>@gmsX68q+-on#W@7Eo8G z*|c^MKA7Nh1ft^T}K{8iS8Uqwk^`ZRt1+48gZ+~zUqa`o5m=L25Ht2I)WBV{h z(_f3J%w}a#20N_$JoCB`JyAk-uGsaC-^vTauuWn_vX>Ix3#np&+cyZRXE#w0MFml<2e59M^MfzjV&v8$^~jFJaiMuWKHYfZ)TPtS-E zrA&oX8oxSfFw6oH#`J z%OO4aj!ca~Z>6Oe2|;e^Tz{m2Lv`vUsRH&`KL6U)c*9_y|Js#59>m-~iBX%pTEJq- z-K2BWX1RqreB<`kC$oe#I+#|HltfM{`J4B*NDvuPg$tEuNA}5G@)0ne4I^RzF>0*u z6e*vf&=g0KvViDJH?u^4VpX$K-mE@uXSpTpeIlLaN8AWxfO#xrg+v1*j{Avhc&pOn!ih<%%F1uJ~cQc+C5n!-VgwBp9;lvPq~?fe#?3%@-Ii85a>-jY~uPv6)+Rv{_W6rJl8fw}00g}_;jy#4;nx~(+&~Vv_bnE8?WK>&JsvyN92noTINXTJM;pKCj_e}SBIAr z3m+R|Ws4e(I7qrr22}Og{TXPB>hNvc285$XV^HTczB8{$_+3u}a5hta=_(GnV1wRl zwHa0)w5QH0jmS(FZPBq0yG%61;uU%z+N6TBCc}}qr;qMvG-U8&c@f^UOz$$qWPqG0S^!FT(lH&(9We5HE$OdA<1v7O^iB(>$vkp zU+$PhjxK}Y=!uvMS-2Hv?sjeRTmwh`WsG7hp%wB28ey4n8LO_g;@7pcEj(uh-A;E( zsl0UgsItRlGUUk+tdEFFV^x?2VRsc3^kL2xi|z)gbfIRxk{dV#yRECs-_MURP2G}1-f?}u1xmm$XOj8Cz}Onr zhKW_scMYp+HmpVnQErp1*+@F_phQ7Lp&vwYZsbr(3N?&3OH@!SUs*BoN?xAd=LZA9YgcugNL4k5kj!h5;I!nz z{>TL83chy?)tm(3so+GbX+cV*fYIbM7YAZFj_54~gk+M)QeAcWJOMuiB4rr{F#rP< zdEAC|L!?_N$F$6`$BP?_RIm-QGu^`MKJAwcrgxnDsCDBB$RALsgM?l(@L2?s7qUJd zC){CC;g}l%sM`Dc`>XU7029VaXEDj~kjRzgOR{l**{U4y8!)k)mrIU~8{#R#baIh* z4grD6Y=Va~60}IZbq9tSO*LY`l@^LbjEMZ{!b?;$X+H-dPOk4DNSRSE=BHxV*of#t zg{<|Bd}J$8r>sg+K3S|1dmy0%LKZ&0qlpq0D=4dyDA!+9b$-(GXo2l_|9o7$wRW0- zA{9-(h9ffT*E^g%@|2gMnR0VpxfwMRP%D(F8ujXn+V$0zqqTs?>SsN(yhPR~c^acIyfn!51vb&##2}PV-)l<(47KBk;HasbqgHwcOud zt;L`iR_jI#(7{)V1>(}k@TF;T*2mcv=vcgR{F{-&CU>&)9qoRXckMNF_^R)Ag`0X` z{9=ErMTSGV*)p)vdqk#(#e>Gm;t0w7w9cown;hva`yyCxu-wgbPw8VI&Rk6+V!xy2 z27GRZpB_DpQC_;yd3o(7icer_%t69OQ(b{Iw}Fe+YK39w-evk$nouEr&|s%Mv_U@S zG^p{Nbw!A!Ias>KnCmSgq6A-AfxhbO#iCijhiSZ$kwixJ!vtx#$Iz$IF+}(>v~+I~ zfjK`hzA`JrvyqXOGF1>hTjYRjC2i3<)-uyFFWnEPo_pP7PSZX#KenMDJJiiHB^{lM zFDkRs5$fm=$3&e-^|LPQi@WZrbHB#V#%@-A`K(x69Oh>GX9>I}in;amQM=@uYlyfM(*YJO_Z+^&wtq>K{NAf#N7z2qM!6l+i zp}rN2JH(5t1fCDi-}Ng*Ofp`$iD-N+me_W5t=I3g=yf@0XLkGaIuPlAV)&JYtmsbn zX+Huv(3Q{p{?{)Ku|3hL2|Y$Io2%2x4ac~=@%QAnmLr5pMwWea z!n0}X4gfYS{_@Y*S7F^wj*i=XsL3l~aQV7Q(H{vS4v~>q;G$;pLr@aEbG9ThpPmt6 z_J)}e%fXBTx7)c$y?S*5rM@AgKr(Z3a}{hMv!NZ`q3TJD3GhwD z2~N&R_Ra~)jg63+k&}T-p3!%8!8tvM62DuDX%ioUR%63 z-mH4_Oadlq$NI9nT_GvG7+iCGdWvwd1sq1l_V8+XqU(Rzw`(_~j^d8_fo~uGt^BL) zZtNS@pH$SAr@Zb7xg6t5CT^LdZ_fqT7acmj#_t)MnAGD;@#Lch;@9QhHjvzeu51ER zA;dlX7ot)_MGRA}ij+-}AjR@YYngW$s32rl9l~a)kyjY+;b#Owi^k8VR-{_v4IE~a zHsir_b#c3?kz|;?ubphtj4Aoe0t=()+HKz(-*$6vvlH>wxSpbts|g3Asg@F94s36X z+c4?x?d-^X(``Zo5P=Og(Hf3^{?yG8m@zze!-mN#{^a*cEO+tlK^hitw)WbO6T6FBnv>T?`;e@6?5xQXinE!d{Ujt-m}^s zf8roCvK!)}qO>r4(Pg?RT)*zlB=ED6U}v$+?Cs2}v45{iCkr;<6WG`gl%mj-o(|rj$}SiWaa=k2d2n!Wq?Kre`rVXx zXny|b?bMY&Pt>dJeC?WjOoyCZQsL7Tr=I#&+SnVQ9AMM-juV)Mw` zl6b>p!|gDnc2m1Xu)&^dDj~-@hXz*xcpGs!2Hh;+;b!;oaP}})-2e7b{Pp9rXS?F! V%q{3f@CPgi3UaElHPYt6{|B%Az*qnP literal 0 HcmV?d00001 diff --git a/assets/floor.png b/assets/floor.png new file mode 100644 index 0000000000000000000000000000000000000000..06849534ee15685265ab5ee72760235f19ee405c GIT binary patch literal 6786 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 NXzOBAX0?0&e*n!!&w2m= literal 0 HcmV?d00001 diff --git a/inc/cub3d.h b/inc/cub3d.h index e5edc8c..bad1506 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ -/* Updated: 2025/05/06 15:56:57 by qmennen ### ########.fr */ +/* Updated: 2025/05/06 18:54:42 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,8 +16,8 @@ # define FAILURE 0 # define SUCCESS 1 -# define WIDTH 1920 -# define HEIGHT 1080 +# define WIDTH 1280 +# define HEIGHT 720 # define TITLE "Cub3D" # define RESET "\033[0m" diff --git a/inc/types.h b/inc/types.h index cfa3129..bfa79cb 100644 --- a/inc/types.h +++ b/inc/types.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */ -/* Updated: 2025/05/06 18:04:13 by qmennen ### ########.fr */ +/* Updated: 2025/05/06 18:36:47 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -60,6 +60,8 @@ typedef struct s_map char *SO_texture; char *WE_texture; char *EA_texture; + mlx_texture_t *texture_floor; + mlx_texture_t *texture_ceiling; mlx_texture_t *textures[4]; unsigned int floor_color; unsigned int ceiling_color; diff --git a/src/game.c b/src/game.c index 41d0001..f668fbf 100644 --- a/src/game.c +++ b/src/game.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/05/06 15:20:18 by qmennen ### ########.fr */ +/* Updated: 2025/05/06 18:56:57 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/render/DDAscratch.c b/src/render/DDAscratch.c index 0a9709d..a8afa22 100644 --- a/src/render/DDAscratch.c +++ b/src/render/DDAscratch.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */ -/* Updated: 2025/05/06 18:17:55 by qmennen ### ########.fr */ +/* Updated: 2025/05/06 19:01:32 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -130,26 +130,11 @@ t_render cast_ray(t_game *game, int x) return (render); } -unsigned int get_color(t_render render) -{ - double dist; - const unsigned int color[4] = { - 0x488B49, - 0x4AAD52, - 0x6EB257, - 0xC5E063}; - - dist = (render.perp_dist == 0) * 1e30 + (render.perp_dist > 1) * render.perp_dist + (render.perp_dist <= 1) * 1; - return (color[render.side] << 8 | (int)(1.0 / dist * 255)); -} - unsigned int get_texture_color(mlx_texture_t *texture, t_render render, int tex_x, int tex_y) { int index; double dist; - if (render.side == SIDE_NORTH || render.side == SIDE_EAST) - tex_x = texture->width - tex_x - 1; index = (tex_x + tex_y * texture->height) * texture->bytes_per_pixel; dist = (render.perp_dist == 0) * 1e30 + (render.perp_dist > 1) * render.perp_dist + (render.perp_dist <= 1) * 1; return texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 | (int)(1.0 / dist * 255); @@ -166,7 +151,6 @@ void draw_line(t_game *game, t_render render, int x) int tex_x; int tex_y; - y = 0; lineHeight = (int)(game->screen->height / render.perp_dist); drawStart = -lineHeight / 2 + game->screen->height / 2; texDrawStart = drawStart; @@ -176,18 +160,13 @@ void draw_line(t_game *game, t_render render, int x) if (drawEnd >= game->screen->height) drawEnd = game->screen->height - 1; tex_x = (int)(render.wall_x * (double)game->map->textures[render.side]->width); - while (y < game->screen->height) + if (render.side == SIDE_NORTH || render.side == SIDE_EAST) + tex_x = game->map->textures[render.side]->width - tex_x - 1; + y = drawStart; + while (y map->ceiling_color << 8 | (int)fabs(2 * y * 0xFF / (double)game->screen->height - 0xFF); - else if (y > drawEnd) - color = game->map->floor_color << 8 | (int)fabs(2 * y * 0xFF / (double)game->screen->height - 0xFF); - else - { - tex_y = (int)(((double) game->map->textures[render.side]->height / (double) lineHeight) * (y - texDrawStart)); color = get_texture_color(game->map->textures[render.side], render, tex_x, tex_y); - } if (x < 0 || x >= game->screen->width || y < 0 || y >= game->screen->height) break; mlx_put_pixel(game->screen->img, x, y, color); @@ -196,12 +175,50 @@ void draw_line(t_game *game, t_render render, int x) } } +void draw_floor(t_game *game) +{ + int y; + int x; + int color; + double row_dist; + t_vec2 floor_step; + t_vec2 floor_pos; + t_vec2_int floor_cell; + t_vec2_int tex_coords; + const t_vec2 left_ray = sub(game->player->dir, game->player->camera); + const t_vec2 right_ray = add(game->player->dir, game->player->camera); + + y = 0; + while (y < game->screen->height) + { + row_dist = 0.5 * game->screen->height / (y - game->screen->height / 2.0); + floor_step = mul(mul(sub(right_ray, left_ray), row_dist), 1.0 / game->screen->width); + floor_pos = add(game->player->pos, mul(left_ray, row_dist)); + + x = 0; + while (x < game->screen->width) + { + floor_cell = (t_vec2_int){(int)floor_pos.x, (int)floor_pos.y}; + tex_coords = (t_vec2_int){(int) (64 * (floor_pos.x - floor_cell.x)) & 63, + (int) (64 * (floor_pos.y - floor_cell.y)) & 63}; + floor_pos = add(floor_pos, floor_step); + color = get_texture_color(game->map->texture_floor, (t_render){row_dist, 0, 0}, tex_coords.x, tex_coords.y); + mlx_put_pixel(game->screen->img, x, y, color); + color = get_texture_color(game->map->texture_ceiling, (t_render){row_dist, 0, 0}, tex_coords.x, tex_coords.y); + mlx_put_pixel(game->screen->img, x, game->screen->height - y - 1, color); + x++; + } + y++; + } +} + void cast_rays(t_game *game) { - int x; - t_render render; + int x; + t_render render; x = 0; + draw_floor(game); while (x < game->screen->width) { render = cast_ray(game, x); @@ -209,3 +226,4 @@ void cast_rays(t_game *game) x++; } } + diff --git a/src/render/render.c b/src/render/render.c index 02218d8..8e63331 100644 --- a/src/render/render.c +++ b/src/render/render.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* render.c :+: :+: */ -/* +:+ */ -/* By: whaffman +#+ */ -/* +#+ */ -/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */ -/* Updated: 2025/05/04 16:54:33 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* render.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */ +/* Updated: 2025/05/06 19:02:53 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/texture/texutre_load.c b/src/texture/texutre_load.c index 2f8dadd..d2685da 100644 --- a/src/texture/texutre_load.c +++ b/src/texture/texutre_load.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/06 15:45:58 by qmennen #+# #+# */ -/* Updated: 2025/05/06 15:55:30 by qmennen ### ########.fr */ +/* Updated: 2025/05/06 19:01:15 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,16 @@ void texture_delete(t_game *game) mlx_delete_texture(game->map->textures[i]); i++; } + if (game->map->texture_floor) + { + mlx_delete_texture(game->map->texture_floor); + game->map->texture_floor = NULL; + } + if (game->map->texture_ceiling) + { + mlx_delete_texture(game->map->texture_ceiling); + game->map->texture_ceiling = NULL; + } } int texture_load(t_game *game) @@ -31,6 +41,8 @@ int texture_load(t_game *game) game->map->textures[SIDE_EAST] = mlx_load_png(game->map->EA_texture); game->map->textures[SIDE_SOUTH] = mlx_load_png(game->map->SO_texture); game->map->textures[SIDE_WEST] = mlx_load_png(game->map->WE_texture); + game->map->texture_floor = mlx_load_png("./assets/floor.png"); + game->map->texture_ceiling = mlx_load_png("./assets/ceiling64x64.png"); if (!game->map->textures[SIDE_NORTH] || !game->map->textures[SIDE_EAST] || !game->map->textures[SIDE_SOUTH] || !game->map->textures[SIDE_WEST]) { diff --git a/test.cub b/test.cub index e0de358..24144fb 100644 --- a/test.cub +++ b/test.cub @@ -1,11 +1,11 @@ -NO ./assets/bricksx64_north.png +NO ./assets/bricks_cyan_x64.png -WE ./assets/bricksx64_west.png +WE ./assets/bricks_green_x64.png -SO ./assets/bricksx64_south.png -EA ./assets/bricksx64_east.png +SO ./assets/bricks_orange_x64.png +EA ./assets/bricksx64.png F 90,30,30