From 5239a89274fd69f3af4d1b1761b9bac9dff93ee5 Mon Sep 17 00:00:00 2001 From: Bill Niblock Date: Wed, 16 Oct 2024 17:58:27 -0400 Subject: [PATCH] Organize repo --- {pics => assets/textures/walls}/bluestone.png | Bin .../textures/walls}/colorstone.png | Bin {pics => assets/textures/walls}/greystone.png | Bin {pics => assets/textures/walls}/mossy.png | Bin .../textures/walls}/purplestone.png | Bin {pics => assets/textures/walls}/redbrick.png | Bin {pics => assets/textures/walls}/wood.png | Bin pics/barrel.png | Bin 1132 -> 0 bytes pics/eagle.png | Bin 3530 -> 0 bytes pics/greenlight.png | Bin 393 -> 0 bytes pics/pillar.png | Bin 1535 -> 0 bytes ray-cast-vectors.fnl | 132 ------------------ ray-cast.fnl | 61 -------- .../chatgpt/old-raycaster.fnl | 0 .../lodev/lodev_floor-casting-example.cpp | 57 ++++++++ .../lodev/raycaster_flat.cpp | 0 .../lodev/raycaster_textured.cpp | 0 .../min-love2d-fennel-readme.org | 0 .../love2d-fennel-project/sample-macros.fnl | 0 notes.md => reference/notes.md | 0 textures/walls/bluestone.png | Bin 2590 -> 0 bytes textures/walls/colorstone.png | Bin 3344 -> 0 bytes textures/walls/greystone.png | Bin 3680 -> 0 bytes textures/walls/mossy.png | Bin 4263 -> 0 bytes textures/walls/purplestone.png | Bin 4422 -> 0 bytes textures/walls/redbrick.png | Bin 3051 -> 0 bytes textures/walls/wood.png | Bin 1388 -> 0 bytes 27 files changed, 57 insertions(+), 193 deletions(-) rename {pics => assets/textures/walls}/bluestone.png (100%) rename {pics => assets/textures/walls}/colorstone.png (100%) rename {pics => assets/textures/walls}/greystone.png (100%) rename {pics => assets/textures/walls}/mossy.png (100%) rename {pics => assets/textures/walls}/purplestone.png (100%) rename {pics => assets/textures/walls}/redbrick.png (100%) rename {pics => assets/textures/walls}/wood.png (100%) delete mode 100755 pics/barrel.png delete mode 100755 pics/eagle.png delete mode 100755 pics/greenlight.png delete mode 100755 pics/pillar.png delete mode 100644 ray-cast-vectors.fnl delete mode 100644 ray-cast.fnl rename old-raycaster.fnl => reference/chatgpt/old-raycaster.fnl (100%) create mode 100644 reference/lodev/lodev_floor-casting-example.cpp rename raycaster_flat.cpp => reference/lodev/raycaster_flat.cpp (100%) rename raycaster_textured.cpp => reference/lodev/raycaster_textured.cpp (100%) rename min-love2d-fennel-readme.org => reference/love2d-fennel-project/min-love2d-fennel-readme.org (100%) rename sample-macros.fnl => reference/love2d-fennel-project/sample-macros.fnl (100%) rename notes.md => reference/notes.md (100%) delete mode 100755 textures/walls/bluestone.png delete mode 100755 textures/walls/colorstone.png delete mode 100755 textures/walls/greystone.png delete mode 100755 textures/walls/mossy.png delete mode 100755 textures/walls/purplestone.png delete mode 100755 textures/walls/redbrick.png delete mode 100755 textures/walls/wood.png diff --git a/pics/bluestone.png b/assets/textures/walls/bluestone.png similarity index 100% rename from pics/bluestone.png rename to assets/textures/walls/bluestone.png diff --git a/pics/colorstone.png b/assets/textures/walls/colorstone.png similarity index 100% rename from pics/colorstone.png rename to assets/textures/walls/colorstone.png diff --git a/pics/greystone.png b/assets/textures/walls/greystone.png similarity index 100% rename from pics/greystone.png rename to assets/textures/walls/greystone.png diff --git a/pics/mossy.png b/assets/textures/walls/mossy.png similarity index 100% rename from pics/mossy.png rename to assets/textures/walls/mossy.png diff --git a/pics/purplestone.png b/assets/textures/walls/purplestone.png similarity index 100% rename from pics/purplestone.png rename to assets/textures/walls/purplestone.png diff --git a/pics/redbrick.png b/assets/textures/walls/redbrick.png similarity index 100% rename from pics/redbrick.png rename to assets/textures/walls/redbrick.png diff --git a/pics/wood.png b/assets/textures/walls/wood.png similarity index 100% rename from pics/wood.png rename to assets/textures/walls/wood.png diff --git a/pics/barrel.png b/pics/barrel.png deleted file mode 100755 index eea212d222affad6dd9595e4dd046103cdad5d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 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 Ef-KgZYXATM diff --git a/pics/greenlight.png b/pics/greenlight.png deleted file mode 100755 index 2345e8e820a9e74ab536d777c265dcd690a0a1ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$&H|6fVg?4T!ywFPqN%c)fq~K5 z)5S3)qw(#Pjb4WxWR8Da|8WA(QW5r@3#afMwX|S=`9R?k`v*p&9|E#Q7T*|UY8d1X z91Qew7i2Fi;#lf@OhMA6@4+^ea$3yA92kkGWJiF_> zZa(Lh^!Gs$lZ^d6+k4bS3K*{!a31zQCfy~vdQP<24E2hGci&6DO=r3&dc=gY(uV!o z8ul-;kCWpb^8DI;mpS;{{Mo5r7|BG)+k3S^+?pX4s4ou)t au)kzo@ZN*(-r57hmci52&t;ucLK6V6CZ(|e diff --git a/pics/pillar.png b/pics/pillar.png deleted file mode 100755 index f5b4766de63633cc20fbb527b99e3e0da67b216d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1535 zcmV00009a7bBm000W> z000W>0fLJSS^xkAu}MThRA_%tf;I&T`m^{;sgSLxDRw6 z2n0EWs6ZfARII4jTp9#<#V<_ewuOUsxrY&CyDja^&cENx?jH(AA0Hn) zHpWyRkdw~2_xJbqAN|wj&*1p!=?M&BvM34+FoR!A@|bU7tdt_6zkmNW;Gxru_4#~0 z8jU2oKT=T?#+cXF*VSr8LSQ1Y)|O>C91fjx>-G8~PMT=IS{ui)ZJ#<#|p--oxk6#Ts~dc`?RtKm0-?dj}xDgCMs5K*t!3;V)`Xw)MH7uAqo%>d3hV22=|4j{m4wL;Ef zXh7dVKVKsCR=IB@Osj$hwApNuB-w7aaU3HY$$VVZhA}3NV`B_w>&8id+G}7wpJR|D z2?pEk_D4gagHE8g;c&QIE}JnB*omvf4b>%JYb^%S%$iYK0kSNs*6)Dad(t+mH7-{No-DhjpD z#9&lw4F|2w!LqIg9C8Q3Oa3tydV7150?_wXZWYWi>+NGGwHM&y<0DN|FYGK93$68! zh=>JNN;SqpZA}Qk)4LoD2J7|ubX6c#(T1+##NI{*oYgtk@Au_=uh+ZLOl*u{qvEi` z4NxQjrIfYyCNeP-Y8oQaS|6)Xu<%F%K_Y1|0k~gH2NPocJPgNwkvXC9cY_JQEM{3Y znM_FV=QZTu#1cxh(L;D2m`o;B`|+&hMxg|JzzZy3T^2N0{#z_)*awKnIhUp>eXqsf z3|Ri#Z7rgktCT|LohPwpBPF~E4R9Naf3YiryUcDCgh~yxkt6_^100fkGiu1PEKSoa z%T9xcHu*RJm>ZAB%jJ?SM6!z}934TUk{Zhp0L&RAqT~X{7du5Ha7OnP{-W)gz8Dkiq8DmiI*S3iO=GuQTumD{3cnn`mXVz=W1?p65xDAh0$_(*N?{t8>m;3*|tuK-awdyx5&ihlDD4 z`5OvAbw`h7vCA`n4-BN4dqgM3)qH#reLKlL9kCpyn>hRp?$I!1zN?#PwWr+!)Wn`V lpmUDj!-+|-UK=P+)BhH0R47d%>Z (. map map-x map-y) 0) true false))) - ; Set the perpindicular length from the camera plane to the wall - (var ray-length (if (= side 0) (- side-dist-x delta-dist-x) (- side-dist-y delta-dist-y))) - ; Determine pixel-column height - (var line-height (math.floor (/ screen-height ray-length))) - (var (draw-start draw-end) (values (+ (/ (* -1 line-height) 2) (/ screen-height 2)) (+ (/ line-height 2) (/ screen-height 2)))) - (if (< draw-start 0) (set draw-start 0)) - (if (>= draw-end screen-height) (set draw-end (- screen-height 1))) - ; Determine exactly where along the wall the ray hits - (var wall-col (if (= side 0) (+ player.posy (* ray-length ray-dir-y)) (+ player.posx (* ray-length ray-dir-x)))) - (set wall-col (- wall-col (math.floor wall-col))) - ; Select the texture data based on the grid number - (local wall-texture (. walls (. map map-x map-y))) - ; Calculate the part of the texture to paint, and then do so - (var texture-x (math.floor (* wall-col (. wall-texture :w)))) - (if (and (= side 0) (> ray-dir-x 0)) (set texture-x (- (- (. wall-texture :w) texture-x) 1))) - (if (and (= side 1) (< ray-dir-y 0)) (set texture-x (- (- (. wall-texture :w) texture-x) 1))) - (love.graphics.setColor 1 1 1) - (love.graphics.draw (. wall-texture :t) - (love.graphics.newQuad texture-x 0 1 (. wall-texture :h) (. wall-texture :w) (. wall-texture :h)) - i draw-start 0 1 (/ line-height (. wall-texture :h))) - ; Draw simple lines - ; (love.graphics.line i draw-start i draw-end) - (love.graphics.setColor 1 0 0) - (love.graphics.print (.. "player-x: " player.posx ", player-y:" player.posy) 50 300) - (love.graphics.print (.. "map-x: " map-x ", map-y:" map-y ", val:" (. map map-x map-y)) 50 330) - (love.graphics.print (.. "side: " side ", ray-length:" ray-length) 50 370) - (love.graphics.print (.. "step-x: " step-x ", step-y:" step-y) 50 400) - ) - ) - - :update (fn update [dt] - (when (love.keyboard.isDown "j") (rotate-player 0.1)) - (when (love.keyboard.isDown "l") (rotate-player -0.1))) - - :keypressed (fn keypressed [key set-mode] - (when (= key "j") (rotate-player 0.05)) - (when (= key "l") (rotate-player -0.05)) - (when (= key "i") (move-player 1)) - (when (= key "k") (move-player -1)) - (when (= key "x") (love.event.quit)))} diff --git a/ray-cast.fnl b/ray-cast.fnl deleted file mode 100644 index 2b1ff9e..0000000 --- a/ray-cast.fnl +++ /dev/null @@ -1,61 +0,0 @@ -(local pi (math.pi)) - -; Define map (0 is empty space, 1 is wall) -(var map [[1 1 1 1 1] - [1 0 0 0 1] - [1 0 1 0 1] - [1 0 0 0 1] - [1 1 1 1 1]]) - -; Map size -(var map-width (length map)) -(var map-height (length (first map))) - -; Player position and direction -(var player {:x 2.5 :y 2.5 :dir 0 :fov (/ pi 3)}) - -; Screen size -(var screen-width 640) -(var screen-height 480) - -; Ray-casting function -(fn cast-ray [ray-angle] - (local dx (math.cos ray-angle)) - (local dy (math.sin ray-angle)) - - (var distance 0) - (while true - (var ray-x (+ player.x (* dx distance))) - (var ray-y (+ player.y (* dy distance))) - - ; Check if ray hits a wall (1) on the map - (when (or (>= (math.floor ray-x) map-width) - (>= (math.floor ray-y) map-height) - (<= ray-x 0) - (<= ray-y 0) - (= (nth (nth map (math.floor ray-y)) (math.floor ray-x)) 1)) - (return distance)) - - ; Increment distance - (set distance (+ distance 0.01)))) - -; Draw function for rendering -(fn love.draw [] - (love.graphics.clear) - - ; For each vertical slice of the screen - (for [i 0 (- screen-width 1)] - ; Calculate angle of ray relative to player direction - (local ray-angle (+ player.dir - (- (* (/ i screen-width) player.fov) (/ player.fov 2)))) - - ; Cast the ray to find distance to the nearest wall - (local distance (cast-ray ray-angle)) - - ; Calculate height of the wall slice - (local wall-height (math.floor (/ screen-height distance))) - - ; Draw the wall slice (centered vertically) - (love.graphics.line i (/ (- screen-height wall-height) 2) - i (/ (+ screen-height wall-height) 2)))) - diff --git a/old-raycaster.fnl b/reference/chatgpt/old-raycaster.fnl similarity index 100% rename from old-raycaster.fnl rename to reference/chatgpt/old-raycaster.fnl diff --git a/reference/lodev/lodev_floor-casting-example.cpp b/reference/lodev/lodev_floor-casting-example.cpp new file mode 100644 index 0000000..8957c65 --- /dev/null +++ b/reference/lodev/lodev_floor-casting-example.cpp @@ -0,0 +1,57 @@ +//FLOOR CASTING +for(int y = 0; y < h; y++) +{ + // rayDir for leftmost ray (x = 0) and rightmost ray (x = w) + float rayDirX0 = dirX - planeX; + float rayDirY0 = dirY - planeY; + float rayDirX1 = dirX + planeX; + float rayDirY1 = dirY + planeY; + + // Current y position compared to the center of the screen (the horizon) + int p = y - screenHeight / 2; + + // Vertical position of the camera. + float posZ = 0.5 * screenHeight; + + // Horizontal distance from the camera to the floor for the current row. + // 0.5 is the z position exactly in the middle between floor and ceiling. + float rowDistance = posZ / p; + + // calculate the real world step vector we have to add for each x (parallel to camera plane) + // adding step by step avoids multiplications with a weight in the inner loop + float floorStepX = rowDistance * (rayDirX1 - rayDirX0) / screenWidth; + float floorStepY = rowDistance * (rayDirY1 - rayDirY0) / screenWidth; + + // real world coordinates of the leftmost column. This will be updated as we step to the right. + float floorX = posX + rowDistance * rayDirX0; + float floorY = posY + rowDistance * rayDirY0; + + for(int x = 0; x < screenWidth; ++x) + { + // the cell coord is simply got from the integer parts of floorX and floorY + int cellX = (int)(floorX); + int cellY = (int)(floorY); + + // get the texture coordinate from the fractional part + int tx = (int)(texWidth * (floorX - cellX)) & (texWidth - 1); + int ty = (int)(texHeight * (floorY - cellY)) & (texHeight - 1); + + floorX += floorStepX; + floorY += floorStepY; + + // choose texture and draw the pixel + int floorTexture = 3; + int ceilingTexture = 6; + Uint32 color; + + // floor + color = texture[floorTexture][texWidth * ty + tx]; + color = (color >> 1) & 8355711; // make a bit darker + buffer[y][x] = color; + + //ceiling (symmetrical, at screenHeight - y - 1 instead of y) + color = texture[ceilingTexture][texWidth * ty + tx]; + color = (color >> 1) & 8355711; // make a bit darker + buffer[screenHeight - y - 1][x] = color; + } +} diff --git a/raycaster_flat.cpp b/reference/lodev/raycaster_flat.cpp similarity index 100% rename from raycaster_flat.cpp rename to reference/lodev/raycaster_flat.cpp diff --git a/raycaster_textured.cpp b/reference/lodev/raycaster_textured.cpp similarity index 100% rename from raycaster_textured.cpp rename to reference/lodev/raycaster_textured.cpp diff --git a/min-love2d-fennel-readme.org b/reference/love2d-fennel-project/min-love2d-fennel-readme.org similarity index 100% rename from min-love2d-fennel-readme.org rename to reference/love2d-fennel-project/min-love2d-fennel-readme.org diff --git a/sample-macros.fnl b/reference/love2d-fennel-project/sample-macros.fnl similarity index 100% rename from sample-macros.fnl rename to reference/love2d-fennel-project/sample-macros.fnl diff --git a/notes.md b/reference/notes.md similarity index 100% rename from notes.md rename to reference/notes.md diff --git a/textures/walls/bluestone.png b/textures/walls/bluestone.png deleted file mode 100755 index e3bc49942bf23318534123fbcc5ad1e889456230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2590 zcmV+(3gPvMP)00009a7bBm000XU z000XU0RWnu7ytkX&`Cr=RA_czXH>;68cj#~(i()^!EW-*e2megyEHNbX?%9RP5- zw;-jDhk2gm%>o>O5$N&)zJY(}fDuUflzE;{r&E3gB9MRq=zs`Jzz6{7fK4#ul}8`~ zE3g0!5P(QL2^a-);LAX5tiUqQ^TC(_79ao#IPzmYIC1}xiw7b~Ub&ISWDL(hM_PNH z(g803z!iv|0mYoi#t0mF`UJoj*nkcgsIM#E=M4+cQgR7sfds5Xn&IbC!G9%~ z?6ZawFaoVIkZCnL9w-bYvGJA1+z}oOq7oUFo{BHE6UKx8iNak>$aE%0?7Sitzc!s)xUo&$7cq9 zd1b|)gv?bVVHZG0(H1f)z$(bU0nfIE_1r!jfIpGhkgd})L+}M@FYi|o{Kl*TV3K5_L=<3t6{>GLnjh4Q4nk=3 zMIWSzK@}g2j-%j(b{mZ7mWhpFQ*!iFF2s;LpCBG%?3=UFkIPA68V zFTy%h1x6C;k5cy+QGXJ~622Dfz6!d1p8tJk%|H2gvvbuzL#xpKJ#+rh6HfB-!2bucYA zYG%Co!$H1IGEjNu*khBxV%z$v#8)uNEN5lc`Yd7RLYx`8z0O7*Z}VbGT8&x?3nKf= z{nE;0x$Z?0E2mX6fn}^^!=Bk=Khq6}aj*ko*0XsXCTUyU|uQJMkPJ0cu?_EoU3u~dd?2{C0K(Bjb= z)4~RB7U`o+j-kKGM=Qm$T#xdxgM%Qkc(=Vw!~o!V_uB_*pz(!}_B2HiZ(v>3BGDsO z%WC2}KWnj#tKU+vp2=u{$ArsgJ4)d=V)%qv()*Kw~+I#dbQ`*93BZsTwkeoZcR z8sMlcWs=sZZVX}-b29boUI5928Y){KfZkVft2`IbN_n?iI4xizGg+!R=16kg(;(Qj zblQ1vFMx{}SduZ8abig9p(qy3`bS?NXEekyui+oSe+Bhlb zSisB-*Z^l0r%ax!f{h4_K;)1M`0kdV0t>`b)sVE-$7&`vOUv0h6?Y5EqA!42vTh2H1+N$AiJlz_xL z9}VhlRgD#GyY&Xv72Qj13Wjs2zWPmyw+{yZ^Zda#P_KYZ#gfFO-CcFufG<@#nI(b+ zm_f@s=2Y2FBfD-bWvtG#0KZzO_AOsSEf-)3xb;K3-Y*-Oq!$j(6jnc6D=hQ&)q}jX zO4#hjjG;!6sKi|p*EcOYV9obQFo2W80>dh{T9;uj1=2x?D;fZ^*DS?Jc(^wLDlE!! z;)UT@d#l8uMt#k*2#K|oZc3_UV(Yw$v}#tgnZRC+_ogn3!bNKDq(Fk)U#ZeQ+{bUH ztkzP3M<&)D9S<|=b!>`x{tvOdq`cGVH^HvPHu(%_J(@|;WPD@b^@Mmj{cg|m?0#yn z(qIz3%1G&}Dy?VD+yI-8-=+i&qYyUg>A3^nvc4V|e^v%s9<%U%yJHycs!?vPX1l5y zEz-F{{y2(pTi(!Up{P*3Sy%#RRJSOkP2-Uy=9kyKFc%qHiZrQ7YPV1CWXPkYA3ejF zy+`lj$?paHZzZhu{D~`a&-GXl0g6Avx#BHD%Nv&(ii&-zQi=v~TfB++EjF1mg7ToV zyzbjsD^UUbH}j%+e-USvLC<~a2|th!=v z{_MpDs`yMpDj@jDQj*Y~DZ7xAaL3YGzPt)~I>5^m?%dQT;L4k}%)=`-P!EeN1T|t> znj+PvE#*fJfE7={mDWY&MR(E1ShQ9Z*U8*!0o6=P*|d9CV|I3qX^oT>*vp~ybO*Hd zNoyhPycXJq&167ND#B&llap;R!|14rmA~u*XU?xDgqFjb$TB1l;gJYkA_E8U4HieKGQk9NVZC?&Fa^(+&>xl*X?Csp;mK_rF@laRif-O~NRhb7%X{4fyh zjR6xUczgHkheEXv!2b|Rse#D8$ltogt~`qCYmmwy(Hws2lL>2q-ZYTBRkWV6mxh5A zo5uBkvVL4eW6NG}wDtomnKGeK@T}Z^tUNG~{{Y|+W1MFTIJ;HN4PuM{xW0Z5THq!a z3Y@#uWn1CV%ZeIakep7ZAKtxtx3}W|1D0j^AMDwUiAelPjQ{`u07*qoM6N<$f;UIt A1poj5 diff --git a/textures/walls/colorstone.png b/textures/walls/colorstone.png deleted file mode 100755 index 507f12e33290e665fb1794e5900f2496f4f8ca1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3344 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 ao#lT-w{J00009a7bBm000XU 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 diff --git a/textures/walls/mossy.png b/textures/walls/mossy.png deleted file mode 100755 index 22ca59fdf13b081d373b5609973ebbe5b5eef70e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4263 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 JPDHLkV1ln-UFiS- diff --git a/textures/walls/purplestone.png b/textures/walls/purplestone.png deleted file mode 100755 index 425bd713b3483564cdba529b0dafc62955df0962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4422 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 M07*qoM6N<$g35zXrvLx| diff --git a/textures/walls/redbrick.png b/textures/walls/redbrick.png deleted file mode 100755 index 3eb620f2faf12880091e0db90b0942e0d53bee1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3051 zcmV00009a7bBm000XU z000XU0RWnu7ytkZok>JNRA_fC2{&HZlq}I228A2n8J+hl0io!W@Gcj1V0(VuKC}F_;Y;y#2p> z-90;ZlAWkH`g*FXUcGu%_5SbwYR|5&uJ|>VX;BnS(-cLKbB-TUN`o4&?7D6~pO0mw zlm<0p2`3s4+IL-NFE*C79|-KaZrU`>=G$+9_OYR03tv8eZtq{deto*}iDGiPt}BY- zZ?9gx*LysZ$A9{J3tv8eKC$`j^$*y;d4XmIV8QXu>P(TeW zwCYPHceERs>3QGbPY7uE0uT zqb^qOS}vf40(P+ITL+!aHZ(5!GpzgVO=Cau`@U8W6RB-Jc5 z*x)$rG+~$axg^*@dIL+%u+?T;gx&Elfl8wHYUc(Xl$>*;dOIrHe&ZyU63gq69KtC~ zdRc_on&hOJY=iK&uh`l1=g;YT$$`f9l2S@38Qu*Vj}dTCIl!!5zq z^|FToZY_3@d~>*kAQnh)BO&&+7B=q#)BxuF+<6c{cG60EBj}DUc_sbgvGpBa!Acz) zXkZTwEQQufb$7e$U@2)^SZY>vfZ+&~Ip@RS;K*G{Tcp)wrLha>1R_aR_cDkkVu_Pq zh5!cDAkVmfQZ{PT*SEFX$R^{(&NLxZiD)~i!;rpn=8{`WgLRPT4rHwe(aKUQkOemc zT_ZR&u!YO;)674BYJw+i!wUGONES*Y>1yF?#FwOlSdT>SrD&rqJC~>=ZL;b!tc9u8 z=2DWA>h~c)h&y&Ro0+{zofE#Ghuhg~)-+9)!&vI84RLmHaq*x~&hM2AU=eE!j~&svuDid#_dObI227_@AU1dm zSx>;W4QI%6G+a2lzP>gQ4xEN?#+406BP2UR^-&!x}QPwAE&y>>L-JN|J z^fj}Z1Z!ic?4wVC$3X6}%G1Ts`n2T#Wr#S?LpXf{B_ybXENi*>olZ{)3#h`+9jruK zU%&!xVGD<@Lz}?}^dA*nn%7T~(8^yqt87Ja%$pk#>-se|+zs3{&BQiVDWGx3ya{Nq zgSh|_@#abZZ)@v2o6SsAsmwr@pRFXY79TjlD$_Am>0WU%pU=0_2@%VEz~EXK zH`f@>N)5l3!v9t9Dk&x3%FeS~Eq`&=dX!aqLf|N?e3*d!_aZRpLL!!uUdv(c`szkO z<%oaUq1@<`tJnmR>1^vLt2FTT6&SF}hY8qDt%5cd%(#Bru&hZdPzHnT71AVlsY>%X zz)OV&J1v*3rz)EEE^M+=ncIRzvj`WD(LFi ze6)K~WYx-rv>{D~0)kBla&b=Fb=?OU>bM+*QY)T&`yktPQBm4B6nLymt;IkUj})xZ z;CX<`5s3|e0e>+bm~*z7L_9Wp9pJY|Y&qxoeC}V5B6_Sj`{v~Q+K^BFbI2zT+Wg!S z(fUuXUM)`wIW2$MhRC^v%aGFA!wnp|&hp6!kJf>6RB{pSd{;t}b!b5FMWw`II|p8? zejwJVRT(4~{l*i-T>ZS(@+Xl5+fHz~20%Ml%LyWXV!f8CLE6V8pOv`3Bcyn*B)c^7 zC~fdJHrB+cUGC?TBcG&y7EAG-a^#f@xzsn3w$_UQ`G9kI)@a$UU-whrMc5aqpBSHb zXywy&h92!?E6@uT6h7sE6}5=sLeeVDdDq9_SUi1g#Ur0xKWgkm?mCUN@KC~v16DCw z0nZDp71d?Mr=7+_C}WUU$?DONQCA}&Im~LMA>4vx*zt4d!ilx9CbhsK3;c>eJ!5hF zD#Hp8*4Hxwzyj8qTkc;G?1DuGR<6=$kE-q~U{NeTM>R7Yb z_+v`@bHtt=sEwTXM6rCbvC=VrJ&K^Q!O`N#NZ&(P7lTpH0-lgIEz8n*r=#xxbp6Ev ze~@#IDfOe7>L@>Exy>$RSw@_8U_KlU_xJbcZpBeNvi662;{O*R9!vP^)s>BO`ZoF( z!}+u*iWasZ*H;NU2mG~`bFAcxO1Z2mFlp}8aKk07qC&dMR1onpkb_^nsooY zR2Mz4CZNf%%*okElZ~bHVvDdyQ zU{eu72`f9<&v!x#rqM!6k>jjwz0|Hi zYtm@-ZEo8DoQsi>tYn1=^k--$@X0Jjn}q%e_L#-W+4c4H?_RyCjt%MN`Nbs*aZ^gC zN69CDKGy#3;^OS;>dN`bW92cdJ&|6HJEtg$F0i7W9s%iQv)ObywQP1wm2(n|AO2!% zfQ18v9GD{tMt19R9YiCywmH}+kEIT#)2Y*62Vg5**G;Dn&c>QW6hHfCU(m;FnD!%X zi$7l4K&<~gS3CN8w0!a@+`|n#RYGP4U&FcXaleKcY*aIY8)%g;_-wy_6aIwZ7H04T zoI@2l+OviK^lNV6H&DSp;2X&2=kxje$&)9mcki}v3wQ7n+^E@8JvSO+QYzz#IIgqr zR)2>UA#;3I?5q2=T9t(aI!{7>lVv&Q$Y9q1#GO;YT31p|M4LY8**g;N6#`V@nszPa zN&(!e?;rfSC9=c>ml9RNEfla8w41iv9lCv$8BL?zs6l zX&*)Ej}~Y8cHPY}AM&WWkN=(aVzDrwJrQ?!FW~G-oYkK8?I>sWd+%5|mL9bk#}tG= tDvL>Zdmr3mJD2xS#%cG5oBCgG`7dV8AE~0e6x#p*002ovPDHLkV1hbZ*IWPq diff --git a/textures/walls/wood.png b/textures/walls/wood.png deleted file mode 100755 index c30c3174c37c936c13d925588fe428a5bfc98c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1388 zcmV-y1(W)TP)00009a7bBm000XU z000XU0RWnu7ytkT9!W$&RA_uf}kS@Z++4HHK4!|9!vq zPk-F<+d}{UxGj<17IN~^cG=vf&gvJ3R7xskjr6`m`FUIDpZ662_yZyGGXCK;yi0zk zQkq@7#^y$d&3}1|98~}AS*?*mf6Hsi&69;tK1W12M{A@D5dd6>*63BQM%x8$xyYkj zO0$R%58&?k2=N`xqX&S%$Z{#hc{R~}{mFx0f*t?@GfJhf60Rwy5je&j5o>e$oir5L zHRTOWMEuNITL%CO;b#Uy)-5kL|9O%)TsCwd0EmV66lBFNmsG{mx+iWRVmDwq^3?Ca=Yci=$(#Ex`jVQ zAuT%|larBaKXdk@7aGbUz+E2lXxBlfEK0ll6nZWHY}IHDsCNKRDkV?gIv-?qDL_>S zd5)Zop)X8lLuGD0VB=0l!^Ln{9i6mD)sW@HVhPujzu(fXbOn>alqr|7n=XXX(0Ga~ z5$=%Nwx4kuwUEDI5Ym)JhzkJ#)y35=NyXXFBaC`v-^451t_7CG>DThT%7W ze&uVkTgaudim{f;~8!69CYMNOgWV-<=I+qdhed!0Ex7_~DLQt2Jth)fj5X?NN=c zk#2chY1UBWCI(X`!%w)YJTLx;_^3vkGNDH!&^c1=+Oe&usgBGzYr8;tE)#}m7|?79 zpq>4aK7nv1da~dpQ6xPwypZgCzYq?b*a$3w-X8~FG6hO{F&|F0wzfqLH#)m8rdr@{m=@j7nu-DAxlmmZ7{guB zV6949ezyDin|fZR8EueCmCSD-Qz_T96);nsq!y;9GP+SI51d%TCwHhp{D$eLt>+*O z+Zsueibye4^^&v8IgsguJgVNt>mDc#dA=|n_B2yU%cV#isZQp0$A&{GdLp3F(=hpE zrzyPk0WEiG`;AbewUko|=f#?^wuVOf`rX`F@7(oZ!>O322F4nzM@J@M-m|~?b66B; zM|yCJ!g;a0YSJI^WI~#9b197#u})9c`p%SMThXJXwm+FD9K>jwSD5_x-XNXM=!e0o$vXV@CZ`uJW`7b3w? u1G*61asg0-?+|^>?LwrzPdVh-FZ&5N;TT9+RsG@s0000