From 7b74d0606f8d9eb1ea1e63d22699f9b019967e31 Mon Sep 17 00:00:00 2001 From: veclavtlica Date: Sun, 1 Nov 2026 06:41:38 +0300 Subject: [PATCH] init --- .editorconfig | 4 + .gitattributes | 2 + .gitignore | 3 + Main.tscn | 94 ++++++++++++++++++++++ gui-reduced.png | Bin 0 -> 5022 bytes gui-reduced.png.import | 41 ++++++++++ gun-handheld-reduced.png | Bin 0 -> 2112 bytes gun-handheld-reduced.png.import | 41 ++++++++++ icon.svg | 1 + icon.svg.import | 43 ++++++++++ level_mesh.gd | 123 +++++++++++++++++++++++++++++ level_mesh.gd.uid | 1 + metall001-new-tileable2.png | Bin 0 -> 1044 bytes metall001-new-tileable2.png.import | 41 ++++++++++ project.godot | 46 +++++++++++ rock22.jpg | Bin 0 -> 3466 bytes rock22.jpg.import | 41 ++++++++++ 17 files changed, 481 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Main.tscn create mode 100644 gui-reduced.png create mode 100644 gui-reduced.png.import create mode 100644 gun-handheld-reduced.png create mode 100644 gun-handheld-reduced.png.import create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 level_mesh.gd create mode 100644 level_mesh.gd.uid create mode 100644 metall001-new-tileable2.png create mode 100644 metall001-new-tileable2.png.import create mode 100644 project.godot create mode 100644 rock22.jpg create mode 100644 rock22.jpg.import diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/Main.tscn b/Main.tscn new file mode 100644 index 0000000..70e1206 --- /dev/null +++ b/Main.tscn @@ -0,0 +1,94 @@ +[gd_scene format=3 uid="uid://crgeyg1m54cg8"] + +[ext_resource type="Texture2D" uid="uid://dgkao0lkjfn8x" path="res://gun-handheld-reduced.png" id="1_glv2v"] +[ext_resource type="Texture2D" uid="uid://de7h5yetxbjii" path="res://gui-reduced.png" id="2_uu6xs"] +[ext_resource type="Script" uid="uid://biacb353kq32o" path="res://level_mesh.gd" id="3_cm0pq"] +[ext_resource type="Texture2D" uid="uid://bj63s2jg8oinu" path="res://rock22.jpg" id="4_fos0i"] +[ext_resource type="Texture2D" uid="uid://cbfvjlda1hapx" path="res://metall001-new-tileable2.png" id="5_fos0i"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_lgr22"] +sky_top_color = Color(0.15010819, 0.09080864, 3.6098065e-08, 1) +sky_horizon_color = Color(0.94753104, 0.52368605, 0.335107, 1) +sky_curve = 0.02561348 +ground_curve = 0.004506263 +ground_energy_multiplier = 4.86 +sun_angle_max = 47.35 +sun_curve = 0.040191688 +use_debanding = false + +[sub_resource type="Sky" id="Sky_3dxm6"] +sky_material = SubResource("ProceduralSkyMaterial_lgr22") + +[sub_resource type="Environment" id="Environment_r0du0"] +background_mode = 2 +sky = SubResource("Sky_3dxm6") +ambient_light_source = 3 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cm0pq"] +cull_mode = 1 +shading_mode = 2 +specular_mode = 2 +albedo_texture = ExtResource("4_fos0i") +texture_filter = 4 +fov_override = 33.9 +distance_fade_mode = 1 +distance_fade_max_distance = 2.0 + +[sub_resource type="ImmediateMesh" id="ImmediateMesh_fos0i"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fos0i"] +shading_mode = 2 +specular_mode = 2 +albedo_texture = ExtResource("5_fos0i") +texture_filter = 2 +fov_override = 33.9 +distance_fade_mode = 2 +distance_fade_max_distance = 1.0 + +[sub_resource type="ImmediateMesh" id="ImmediateMesh_3dxm6"] + +[node name="Node3D" type="Node3D" unique_id=1749101855] + +[node name="Camera3D" type="Camera3D" parent="." unique_id=1552004731] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.1841735) + +[node name="Sprite3D2" type="Sprite3D" parent="." unique_id=2128191748] +transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, 0) +billboard = 1 +texture_filter = 0 +texture = ExtResource("2_uu6xs") + +[node name="Sprite3D" type="Sprite3D" parent="." unique_id=328920978] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.47348556, -0.6719171, 0) +billboard = 1 +texture_filter = 0 +render_priority = 1 +texture = ExtResource("1_glv2v") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=2112481184] +environment = SubResource("Environment_r0du0") + +[node name="AreaLight3D" type="AreaLight3D" parent="." unique_id=1499708949] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.8187913, 0.6215458, 0) + +[node name="LevelMesh" type="Polygon2D" parent="." unique_id=1028271676 node_paths=PackedStringArray("_floor_mesh", "_wall_mesh")] +self_modulate = Color(1, 1, 1, 0) +position = Vector2(-38, -25) +color = Color(0.45490196, 0.45490196, 0.45490196, 0.6) +polygon = PackedVector2Array(198, 57, 70, 89, 166, 345, 294, 505, 550, 537, 710, 1017, 454, 1305, 678, 1593, 1030, 1529, 1130.7727, 1130.3756, 902, 505, 1574, 825, 1702, 633, 1192, 256, 838, 185, 518, 249, 390, 121) +uv = PackedVector2Array(198, 57, 70, 89, 166, 345, 294, 505, 550, 537, 710, 1017, 454, 1305, 678, 1593, 1030, 1529, 934, 793, 902, 473, 1574, 825, 1702, 633, 1094, 313, 794.0979, 279.67758, 518, 249, 390, 121) +polygons = [PackedInt32Array(0, 1, 2), PackedInt32Array(5, 6, 7), PackedInt32Array(5, 7, 8), PackedInt32Array(5, 8, 9), PackedInt32Array(4, 5, 10), PackedInt32Array(5, 9, 10), PackedInt32Array(10, 11, 13), PackedInt32Array(11, 12, 13), PackedInt32Array(10, 13, 14), PackedInt32Array(4, 10, 14), PackedInt32Array(4, 14, 15), PackedInt32Array(2, 3, 15), PackedInt32Array(3, 4, 15), PackedInt32Array(0, 2, 16), PackedInt32Array(2, 15, 16)] +script = ExtResource("3_cm0pq") +_floor_mesh = NodePath("FloorMesh") +_wall_mesh = NodePath("WallMesh") +_scale = 0.01 + +[node name="FloorMesh" type="MeshInstance3D" parent="LevelMesh" unique_id=961663820] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.325726, -1.0841981, -12.307181) +material_override = SubResource("StandardMaterial3D_cm0pq") +mesh = SubResource("ImmediateMesh_fos0i") + +[node name="WallMesh" type="MeshInstance3D" parent="LevelMesh" unique_id=653175378] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.325726, -1.0841981, -12.307181) +material_override = SubResource("StandardMaterial3D_fos0i") +mesh = SubResource("ImmediateMesh_3dxm6") diff --git a/gui-reduced.png b/gui-reduced.png new file mode 100644 index 0000000000000000000000000000000000000000..f019fb28e6d802da88b91ad13182bfc504b87c15 GIT binary patch literal 5022 zcmbuDXIN9)wuVC|Arw)NP8J|ldeP83K_K)JkY*Af(lm5rD;-5j=!k%Hwo*b7k*Xji zp;-{=;D(?`6$2vhRKwoK6>^cY(rUU|Qc!5Bgg&@%BE5)6* z+O&cO*2Ub%$_gY)8}rcuK?}NnW_mgS5YzuEtaO6^9COh$5Fv86o0jBlEFDZ>LOg&7 zFCfe-B5+bngx3Xm-qTUnNK4k*ObxCoaaKy;^hv0g@JUZ+)1NKhhW^tNCcge!cm?OAH$(nWpzJfr7fIvd9UqLs{dAIa8WNu}`vH=n0k%E5o zv^%0n?4c$up+??;SiCprAIb0M?gv`o%&!7E3LStAQEvJMao^3Xn=?!zEvuOX2TbQ9)=wd~gsh+B*~%9Q5z= zD=AMk#v0N{iN7U7gG0Ro{@t&x6ltY)lji69Y#e!6nR5TQol@*ngVYEG~s%fe# z4O~k4O!NGHNDR%RiN<69&nmC1B(JLMprZWSsv-CLIlbZXXa64%7>vRBME#!oZvie$ z9)Si(|Judx6@HyrNGR<%{*!@gDy#fsk^WR3UK%6&i!sFoU_pw0!GT!Ca4b5&J3KT1 zhxS%94n~IsVuM0M6n(>R3YP+C{n#ezmC-2hZwgOqC9N~ceYQMeH1Xsw(e8KC9RAfa zb)`l92aL2b+pn@c8XJTK{l2aN?)fyC>zDj5KdsH0O3GW$B>QP46LVt&hse3@5-q&Y zF#m9ev@po!FAx{2mYqJh9uL0sRE3MwQX;o^LP+tDu?xbd=xZ#MUw3hF{V8`IpK4qn ze9ux8#Br#wv-^@575i4dB)A+La%s4t0WDt2UQQ{FH(Z_3mps@Gny=0Mz1OtU> ztuhKyzjrRK@L`ni0-=lGUeHxmg%;YArT7TzXN0~CF#P1h0-F~3H0}ZvSj1mULz%Ng z!Iu_04_;|#S0+O*kfwZ%IN!&?ronijchPjDM)V&Kux@dKg@F4~pC;Tc!aaHRpzD{% zdrMLl5KjtCD?lg5tQq3FcLXRUC*(Rp2rT81%J5z$>J5 zpXAtGc0aY=1nsy)y1}mV_*zRQdnG+-C4}=%Ivai$n#718ygH<3gy)ykTc44^#dBAv zIH-uSQOxo}cU-#{Gr2S4zK_0G?c%%}!=CoGu?(~K39KjaG($?1{9|~SEtO$2up|z z6%kdo+|588&g4hgG4(;Zyd>h97L01yBNR<=n=6L`VbD7#s$w+urQ22AbTv1sQew8) zMrvCG@!mOdyd%RsW&5apUFE{1G zZTKAlqY=(czOQ}zl>V8$z8`@%hu_DgMS<>bnZBvNPhpwtF6w*oqNsakeX*D%0TJ+Z|f+VOER(CNx9!sl3S-k1l6ul%Y6%CJllZqrs7b1mW9=R<0#)GZgskJT zVWlf2rNN{8omUJ<1q@;$iMNcIme!^F#w@A@CJBPi)R}=g*?`TWGZckyVL1tIY|}$; zWH&BoS)O0>lD3Gg&wX=Mt!T|2DpP3^!tiSS_<01!+Lop6(_p9V4Y!B2bQg?YI}RGS zM%lzIrLw+a^zk5H{QS7?>ektxR4t(m=sSz!?_}ZOUZ#r5dY3m9^_X@nzr8DBuZ9?r zR5CpeslM;&`C?nh)%LDaNOD?Wb|1hQ&$8O3$=j1wn!StXnaOx@@1DEwyD-ILx}lAksIP}#8+Ux zPXm5#x}tSOgWl3T-PcSbVlqb&FVeehAVDIG- z+7hW6$AJch6K5qnn1Z~j7Rp4=pYQ#`^JA>0`R!0{d?e}d1mQt}9sXk{fn&2emLj_h z!_XZ!ri?KlQ0GT-6xrk?iYtqWA0u6Bnq=yi+HYFc*c>r^k;U=b4~?k7Hj|6uvgwGZ zRGXzeLTC6+QI~+9E_3~J&Qc*uvZM0mTRLsIt^r8sv4;UpLffRh^CE`0?YUp9e(_PA zW=o!c+cb=Bw(bE3A_)xTwnhyQiX)qtd4sJ{Cg_@Jl=m%6aP{iq;NsoVgw>Fpr%8KB z7C+rY=|^lVUy^50whrCn;>x?MBd^vQ+cM4hrBSDw9cP&9zcb(>ybh5DxVcGHQFYZ! z)?u6X?u9{hH3h8-DC?=QR#vbZ3lyb9(M}#%;Gby|WHiAbPduxQUruQn^y9WMzB3L+_0i(bh4DTKeHB+rlFN)+2Sv;@UOLZKZA?dac zNUe!4%gqGR%VX^=ByvyXaNzTq48R0g{ny!=C8MYz^CB~S-Q#B^>JQUe?_9M@5#YfU zjpp5Qm_?h8nqsqBrbt5sZ%c^QtrHlTBe^S%rGUf}9`}#-dfwM=UQ%z(>M`^Tyu~_J zFluV@!HeDByza=hFg+JMpS?-xX0YoV6OZT5=pi8oUb=U`X2y6CwH88s9^8)X=^jMS z6Q2I*ZgZJ4imAi=1ZHSF777ay%$=scoKmu~J`^re+9rFQ6PQY>Uv}auJ%aFg`#-$b zG6gx3wex_6%86`EJXTO&#vLhjJu6bo5W{H8HH;YV;y2=jc158ePx0{az ze!PL_TZ(BFc~R8#IHPQ||6M!;@b_cv$-Z;18$RwY!b9RY{zHfQ(PM5+(#=?MlFcuR zF|EmsY`Gt6cvQR^aaC=FIjQ=TaD{9j=S3zY+dQkINoJuOgZTwslat)RG6ByMmO2fs z=||Qj!zjd>16?dc~R`BU)aB%ScH7r2&SzbAtX~LMsZ-1qi+yqxm*N{Ijd3R6LKJ{vY z^)mY_iFDa1kqyS-@d3sGYZCHrNyI5#tx|u;)f2>}- zx`WH;VbO7Qe4UPd@?araHQZ%hFcRUK1fs~sCmPoYQAQf`(ZN0J+zHSYrpiN`me&St zUNgmsxjy$fOZ_W^GC3SvR)AALm&2>lCmGcPiV5HH*BhD6h(NS5%q@f94R^uZ??8Z{ zA@dIbb*jo0dr#M-fZfPd1u@;T7%J*iTjDV^{9|fA$Jf9Q8ZDuNb{fjnk_cgguNzoE zhU(SpKHE^TVAZyfVoWbom6j@;=%{41UcsO2yW~SD+s_bZH+7$s5OaH5_3?ub%j?9@ z^o}ONb#rss$*-TcAjz1s3TKAC*# zNB>eCX6hr_L~$ekS$2^ci>;-Paur3hBmRa@NYKiMA7OeDrlPzjSndQe^79!xU8#e# zNGj1|{?dK`4SO9!i0}Q9DHW7;W}Eq@XCOH3Rg^}^H)p>`=m4X9HMT;v#PoO%8Eokj zHm;=le!;wTv&6xJ$_#1u9hrx2)}03|hTLgy$HZYB{no-Q?Q`=j5f1@k0*JaBeYzva zk$bsos8*4QqqinAAd6CP^+X(W4ZuoKc+QKOR`JXjwd5``4M;-IMFAtRFL3O0wXeF za@gz~v}>NCGzaj5Ww!I5=}7bIub@gbZ$72ha2}QZ{Bg(toVgPaZgOM1!^V{aeZ_Wb zvvhk63KqWdk}hhSC10F!N$$+{Y8cxs34*_D%($_0pTw}vR$F6FwhkeCfyeOnVT*L7 zH2!91fWeTV0BLm1$$;#Z9z*D^qCmthu@f5t`dGz=<_wrG_*jtyzMZ~&=%Xv~hu>#5 zbHeCa`}`MwY%rgGzv#Obp62!P`nHr}dk=QtzK+t5=<$0Hx40%Q+6(O2e|J}naBluf zoz{88s^XVEV#?X8owr3s4BG$`77Y2GD^rl~a%F&_(@dz=BID!DX!H&CjIwDc>Ldny zkx$|L{M8qXwkWYG2%x%LWNsh?9N>Z4h0Zwi;suWpkQBvz?i^ zmpG!rtZLCZRWRl*cjRpe>fx(8{}ciJ)dZlIYRHC6J+Au$;AZ@j%;=vhc>2!JU0PwrxS+Q>b!Z-F8Hm^s__H{Oi+)K z(|)d8;&!&ms(5W0sEpz2UQIQBfks({I{A6j!g~t}615S0~r^A0a5A?2(jbVNE<aigJE{Qm%`YuAGS literal 0 HcmV?d00001 diff --git a/gui-reduced.png.import b/gui-reduced.png.import new file mode 100644 index 0000000..d031735 --- /dev/null +++ b/gui-reduced.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://de7h5yetxbjii" +path.s3tc="res://.godot/imported/gui-reduced.png-4f1dede9db6a089bd5e083539efdf041.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://gui-reduced.png" +dest_files=["res://.godot/imported/gui-reduced.png-4f1dede9db6a089bd5e083539efdf041.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/gun-handheld-reduced.png b/gun-handheld-reduced.png new file mode 100644 index 0000000000000000000000000000000000000000..3033f90f1e652f7f246ab99c7db3881170f77575 GIT binary patch literal 2112 zcmZvcc~nzZ9>?!X0tOh6T?A3!KoErR5|AY>gpgPeg6tRzBqTm07)VHhEVl4iN>QK# z6rCB_0?LjQXRPOdR8T9TC{U%8!3{wLL<s*@)d(ivtt{ z$$@NXV@q+TQQSOyLLz8PACBOFiTS4Vyd$!V?5#T)MaTc<;Oq+Fa6ez`|M201e*C3Y zjMb6{2ZVrXIO;d0az?3CI-48J~Sjg92o!`EK~!!xwgCt6W7Rn z*{n5BH8&X%h`!|yvoJ|d&e|*Yj!8hIG2mk$!!SkvJ|`1P+NhF(G=T__k;8>ZihoQR zA|*?a#QlhrD;Fjp0ETHWOm?O;ywO_00MpL`vX}%3Rsv8vPxB98F7oGHX^Db3sW?%X z9wQfu6F;pF!?jKA!x(A(SyC>R$A~`lJ5zhszqG>qCMrKOMved~Om%glP@G_jh3d@C zG^)qu{F(QdXZ4c%F%L~3MgDDdq`;2Olu#-~Wp#1cvU*Q1s@LTI014v#!q~Lc+Mfkr z@e&sUHmgptx`XP?WOD2|{-1H7!R{Y7>Gf|&!5CP@>=KF);1nlLK%5RC0#VE%xkxC8 zabk)E$q7iJT;?PZ%H(2^V}b{nFT%RgJ7v~`u^Owa6l*HhAIilbBh^zFsKnsa)`fo3 zIVxf(YQxf6s&t3|NkqWv{Ma(;I40|=o(W6$sYbnwwG zLm)XlB6&``+OhkL&TDh)2nUY|s|)0}rsq5Oa*JLTW3g*sjCHi1u{XJc)n9L%a%#6F zj`3sA&_hxXVZw3L_sq>E|71y~_x(7}dwKKGna3*$ZN>zkT;Rx+vrDS1)^Ckiz^l+mlMXi5r#o z^>AO6zBkPU4<2#PAz+!~8UWF!xP3s!*>px1nCoR#-t5)w+F%`A!`V|EYv-Q0_^N@A z^876Wo8P`p{1P|ss+Ap+GHqA16cU>SMFtZ$8+0l{vzG?DvPnBWq%0t*yVrUN7R_2v zFqyLG=cV9-%aCzSLo4b+Bp;+7f&%8|nora|;1fm#*TMB{hdwIWztEgM8IeiBXI#G( zq+6_bbM8cut1U_$Dw{xYB|lZ+_Z6bvxI&E~XG`~m1E}W`7}*G=&k)CL=<0ii!GKP} zNwdOEA^nbJMQq^W*T1uda(PTG3k$kijzAd}mynFdFujgpywc*(#Fo zx>x%u)n6OH2rmxALvcxYygwV)a0oL)1dAppq5>^SSG$$d2)R?hNZ4p3E)qZAk%I4! z28__8;Q4ieg9YFRuxq2e+l!@wGfjlp!U0&SmBshJNlpQ z*!X<}&5GN_0kH*n=+apHxAAboQO*7<2E2fr`jcfIW>#&$d_?zd$n}|YHxSW^n&XB7 z&g$^k_?D(n9l1+19_Civ52JWsz9DBT zy?lMUS%_P-b~t#lbb7f>_)Wb*jkSU}j5a%!5r)fBlL==7^-a+F?u_w(+){Lm8WkE+ zh8ICU=H!!KU$GiD!m|N$J=n?`la(~TcvgGVoM(D_JP;dF_WX8u{31M%%>8P2ncZ_Fu zE=<{tJG%sxxF}9J=&A+k^U1_^^=lJ*NoqrBT{!t$XcNCJy!_%}jlMeQF->6ue99cg zlWJ>!WjBFw+4Dyon|qR9hH>qI;5#^a>mYRL`A{sL2Ti;0!;Q^Zj-#b?V}+idZ%+xC35}FQ zpKmdOer9oqxMwGcEQno6#Ft*Vs>Mig(Kb}Sd(q78*b4e>W5EUM@g(heHK^{(#WmT- zB+Df9>x_P7^zv;R`h=(cc7<9yfw;ln;c%eig_@?eZ8$J{api{xUCWJ*lx{?v7%krU f&L{Te2i^+)^5qJzH_-iA?C%GBSpm#81~2 diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..9f6369e --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cqsxf6rvpa4t3" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/level_mesh.gd b/level_mesh.gd new file mode 100644 index 0000000..3ba7d47 --- /dev/null +++ b/level_mesh.gd @@ -0,0 +1,123 @@ +@tool +extends Polygon2D + +var _hash: int +@export var _floor_mesh: MeshInstance3D +@export var _wall_mesh: MeshInstance3D +@export var _scale: float = 0.1 +@export var _seed: int + + +func _ready() -> void: + if (script_changed.connect(_geometry_update) != OK): + push_error("Cannot connect _geometry_update") + + +# No idea how to make it getter, but whatever. +func _process(_delta: float) -> void: + var h := Array(polygon).hash() + hash(_scale) + hash(_seed) + if h != _hash: + _geometry_update() + _hash = h + + +func _geometry_update() -> void: + print("Rebuilding level: ", name) + if polygon.size() <= 2: return + _prepare_polygons() + _prepare_mesh() + + +func _prepare_polygons() -> void: + var polys := Geometry2D.triangulate_delaunay(polygon) + var pickled := Array() + for i in polys.size() / 3: + pickled.push_front(PackedInt32Array([polys[i * 3 + 0], polys[i * 3 + 1], polys[i * 3 + 2]])) + polygons = pickled + _fix_acute_polygons() + + +func _fix_acute_polygons() -> void: + # Outside triangles are in reversed winding, find and eliminate. + var new := Array() + for poly in polygons as Array[PackedInt32Array]: + var ab := polygon[poly[1]] - polygon[poly[0]] + var ac := polygon[poly[2]] - polygon[poly[0]] + if (ab.x * ac.y - ab.y * ac.x) * 0.5 <= 0: + new.push_front(poly) + polygons = new + + +func _prepare_mesh() -> void: + _prepare_floor_mesh() + _prepare_wall_mesh() + + +func _prepare_floor_mesh() -> void: + var m := ImmediateMesh.new() + + m.surface_begin(Mesh.PRIMITIVE_LINES) + for poly in polygons as Array[PackedInt32Array]: + m.surface_add_vertex(Vector3(polygon[poly[0]].x * _scale, 0, polygon[poly[0]].y * _scale)) + m.surface_add_vertex(Vector3(polygon[poly[1]].x * _scale, 0, polygon[poly[1]].y * _scale)) + m.surface_add_vertex(Vector3(polygon[poly[2]].x * _scale, 0, polygon[poly[2]].y * _scale)) + m.surface_end() + + m.surface_begin(Mesh.PRIMITIVE_TRIANGLES) + for poly in polygons as Array[PackedInt32Array]: + m.surface_set_uv(Vector2(polygon[poly[0]].x * _scale, polygon[poly[0]].y * _scale)) + m.surface_add_vertex(Vector3(polygon[poly[0]].x * _scale, 0, polygon[poly[0]].y * _scale)) + m.surface_set_uv(Vector2(polygon[poly[1]].x * _scale, polygon[poly[1]].y * _scale)) + m.surface_add_vertex(Vector3(polygon[poly[1]].x * _scale, 0, polygon[poly[1]].y * _scale)) + m.surface_set_uv(Vector2(polygon[poly[2]].x * _scale, polygon[poly[2]].y * _scale)) + m.surface_add_vertex(Vector3(polygon[poly[2]].x * _scale, 0, polygon[poly[2]].y * _scale)) + m.surface_end() + + _floor_mesh.mesh = m + + +func _prepare_wall_mesh() -> void: + var m := ImmediateMesh.new() + m.surface_begin(Mesh.PRIMITIVE_TRIANGLES) + var x := 0 + var rng := RandomNumberGenerator.new() + var dy := rng.randf_range(-1.0, 1.0) + var ndy := rng.randf_range(-1.0, 1.0) + rng.seed = _seed + for ld in polygon.size(): + var nd := (ld + 1) % polygon.size() + var nnd := (ld + 2) % polygon.size() + var nx := x + polygon[ld].distance_to(polygon[nd]) + # Middle displacement + var depth := Vector3(-(polygon[nd].y - polygon[ld].y) * _scale, 0, (polygon[nd].x - polygon[ld].x) * _scale) * 0.2 + var depth2 := Vector3(-(polygon[nnd].y - polygon[nd].y) * _scale, 0, (polygon[nnd].x - polygon[nd].x) * _scale) * 0.2 + # Lower half + m.surface_set_uv(Vector2(x * _scale, 0)) + m.surface_add_vertex(Vector3(polygon[ld].x * _scale, 0, polygon[ld].y * _scale)) + m.surface_set_uv(Vector2(nx * _scale, 0)) + m.surface_add_vertex(Vector3(polygon[nd].x * _scale, 0, polygon[nd].y * _scale)) + m.surface_set_uv(Vector2(x * _scale, 3)) + m.surface_add_vertex(Vector3(polygon[ld].x * _scale, 2 + dy, polygon[ld].y * _scale) + depth) + m.surface_set_uv(Vector2(nx * _scale, 0)) + m.surface_add_vertex(Vector3(polygon[nd].x * _scale, 0, polygon[nd].y * _scale)) + m.surface_set_uv(Vector2(nx * _scale, 3)) + m.surface_add_vertex(Vector3(polygon[nd].x * _scale, 2 + ndy, polygon[nd].y * _scale) + depth2) + m.surface_set_uv(Vector2(x * _scale, 3)) + m.surface_add_vertex(Vector3(polygon[ld].x * _scale, 2 + dy, polygon[ld].y * _scale) + depth) + # Upper half + m.surface_set_uv(Vector2(x * _scale, 0)) + m.surface_add_vertex(Vector3(polygon[ld].x * _scale, 2 + dy, polygon[ld].y * _scale) + depth) + m.surface_set_uv(Vector2(nx * _scale, 0)) + m.surface_add_vertex(Vector3(polygon[nd].x * _scale, 2 + ndy, polygon[nd].y * _scale) + depth2) + m.surface_set_uv(Vector2(x * _scale, 3)) + m.surface_add_vertex(Vector3(polygon[ld].x * _scale, 5, polygon[ld].y * _scale)) + m.surface_set_uv(Vector2(nx * _scale, 0)) + m.surface_add_vertex(Vector3(polygon[nd].x * _scale, 2 + ndy, polygon[nd].y * _scale) + depth2) + m.surface_set_uv(Vector2(nx * _scale, 3)) + m.surface_add_vertex(Vector3(polygon[nd].x * _scale, 5, polygon[nd].y * _scale)) + m.surface_set_uv(Vector2(x * _scale, 3)) + m.surface_add_vertex(Vector3(polygon[ld].x * _scale, 5, polygon[ld].y * _scale)) + dy = ndy + ndy = rng.randf_range(-1.0, 1.0) + m.surface_end() + _wall_mesh.mesh = m diff --git a/level_mesh.gd.uid b/level_mesh.gd.uid new file mode 100644 index 0000000..760fcd5 --- /dev/null +++ b/level_mesh.gd.uid @@ -0,0 +1 @@ +uid://biacb353kq32o diff --git a/metall001-new-tileable2.png b/metall001-new-tileable2.png new file mode 100644 index 0000000000000000000000000000000000000000..548b26449fc1091885f7dc2726f55cfa63c11981 GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C$U7@Ck8E^)<|LRZnu(^fOVi){y@H|No{0?NMQuI#V48JQTY3g4f60~As%ag8WRNi0dVN-jzTQVd20MrOK( zhPnoZAqIw4#wJ!Kmf8jeRt5%kXPvZAH00)|WTsW(*5E(k*EFC84Y&;@nYpROC5gEO zD0+;5W?PwBKrD%$U3HCtf$6rVi(`n#@z~JYjE@y~K0j4!(77-pnqf9?!vC3mW^EUq zEzWHE;2gmvm^y9B<+VGGz0mUgTP3tyrPc0>`px8x)AznS`-s16u&j7+ zZX{*uktxpClGoHQW?pQBYbDX6lgDang1F zx-IiKt8c$JWTpJTzAmah$i(~5(w7Aco80&q<~@_vD&3a5nq4Gqqx*XQD=vp0uR5WZ zv`8Bm1#Jc*3T6r6k-#wBfAnk!H_*>(sZ$ z1v5z>X0)4JIP2xK?)iWCFCA}Pv$;Fp{zt&R*RREy=Sng)B}A~q)oaXrvn@Vg=3(V` zN*WXN_kI6yP@g9uRfX5SA^ySpz0u0GPvcG>uKID5ZG~Ljf@3Pod$ve6Z~Ck7=TWc0 z)|>NBbd|k(D(+_%sq({-wfpeo8Sz`L>pv)B?3fcGQZiP9q|SqC-3`{ g@Vj-!%@becMc;MatlQjH49pq~p00i_>zopr0RG{(9RL6T literal 0 HcmV?d00001 diff --git a/metall001-new-tileable2.png.import b/metall001-new-tileable2.png.import new file mode 100644 index 0000000..e233ec7 --- /dev/null +++ b/metall001-new-tileable2.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbfvjlda1hapx" +path.s3tc="res://.godot/imported/metall001-new-tileable2.png-d23c8ca4c55877f706e56917e9b6ac3c.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://metall001-new-tileable2.png" +dest_files=["res://.godot/imported/metall001-new-tileable2.png-d23c8ca4c55877f706e56917e9b6ac3c.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..92e3ce6 --- /dev/null +++ b/project.godot @@ -0,0 +1,46 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="brawl" +run/main_scene="uid://crgeyg1m54cg8" +config/features=PackedStringArray("4.7", "GL Compatibility") +config/icon="res://icon.svg" + +[debug] + +gdscript/warnings/untyped_declaration=1 +gdscript/warnings/unsafe_property_access=1 +gdscript/warnings/unsafe_method_access=1 +gdscript/warnings/unsafe_call_argument=1 +gdscript/warnings/return_value_discarded=1 +gdscript/warnings/integer_division=0 + +[display] + +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +textures/canvas_textures/default_texture_filter=3 +rendering_device/driver.windows="d3d12" +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" +textures/default_filters/use_nearest_mipmap_filter=true +scaling_3d/mode=5 +scaling_3d/mode.ios=5 +scaling_3d/mode.macos=5 +scaling_3d/scale=0.5 diff --git a/rock22.jpg b/rock22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6ac67b604667d452f30940e8b7d18dc697b00a8 GIT binary patch literal 3466 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 literal 0 HcmV?d00001 diff --git a/rock22.jpg.import b/rock22.jpg.import new file mode 100644 index 0000000..0048b8f --- /dev/null +++ b/rock22.jpg.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bj63s2jg8oinu" +path.s3tc="res://.godot/imported/rock22.jpg-b50d20c0d891f90277aac14ca8cd3401.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://rock22.jpg" +dest_files=["res://.godot/imported/rock22.jpg-b50d20c0d891f90277aac14ca8cd3401.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0