Merge branch 'rigidbodybullets_2'

This commit is contained in:
derek
2024-11-04 11:26:55 -06:00
45 changed files with 1071 additions and 246 deletions

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://66gb63n50tx4"
path="res://.godot/imported/strange-wind-SBA-300082367.wav-7bf43fa911634e3e0eca08ad3ee18746.sample"
[deps]
source_file="res://assets/Audio/Level SFX/strange-wind-SBA-300082367.wav"
dest_files=["res://.godot/imported/strange-wind-SBA-300082367.wav-7bf43fa911634e3e0eca08ad3ee18746.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

View File

@@ -1,2 +0,0 @@
[.ShellClassInfo]
IconResource=C:\Program Files\Google\Drive File Stream\93.0.1.0\GoogleDriveFS.exe,25

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://diwsk0cw41ep1"
path="res://.godot/imported/easy-walk-SBA-347061820.wav-f1239f3422d42adad8875f7718afbc5b.sample"
[deps]
source_file="res://assets/Audio/Music/Test Songs/easy-walk-SBA-347061820.wav"
dest_files=["res://.godot/imported/easy-walk-SBA-347061820.wav-f1239f3422d42adad8875f7718afbc5b.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cjhpsqek6aqni"
path="res://.godot/imported/soul-slippin-SBA-346830116.wav-8d1dd8be7cdb8c0f5849ddfbc0d3ed31.sample"
[deps]
source_file="res://assets/Audio/Music/Test Songs/soul-slippin-SBA-346830116.wav"
dest_files=["res://.godot/imported/soul-slippin-SBA-346830116.wav-8d1dd8be7cdb8c0f5849ddfbc0d3ed31.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

View File

@@ -1,2 +0,0 @@
[.ShellClassInfo]
IconResource=C:\Program Files\Google\Drive File Stream\93.0.1.0\GoogleDriveFS.exe,25

View File

@@ -2,7 +2,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://b4g14i0hso7dj" uid="uid://bdb2yv36ffmk8"
path.s3tc="res://.godot/imported/boxcar1.doors.png-7378721e8cbb58b1d0fb0e0d16e93c7d.s3tc.ctex" path.s3tc="res://.godot/imported/boxcar1.doors.png-7378721e8cbb58b1d0fb0e0d16e93c7d.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],

View File

@@ -2,7 +2,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dtccywxaqkqwk" uid="uid://bytxye2f8f05c"
path.s3tc="res://.godot/imported/brick1.normal.png-01aaf16db3e9ebf93f0d29868088a593.s3tc.ctex" path.s3tc="res://.godot/imported/brick1.normal.png-01aaf16db3e9ebf93f0d29868088a593.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],

View File

@@ -2,7 +2,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dreegtc3xivsd" uid="uid://bxrew37taf7qp"
path.s3tc="res://.godot/imported/garbagebin.lid.normal.png-84ef62d4152d2a5d290861b230593a52.s3tc.ctex" path.s3tc="res://.godot/imported/garbagebin.lid.normal.png-84ef62d4152d2a5d290861b230593a52.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],

View File

@@ -2,7 +2,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bibvo384ycxub" uid="uid://446yk8qkr53q"
path.s3tc="res://.godot/imported/mac10.roughness2.png-77b0d965d5e6b9404dba54a97d742d86.s3tc.ctex" path.s3tc="res://.godot/imported/mac10.roughness2.png-77b0d965d5e6b9404dba54a97d742d86.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],

View File

@@ -2,7 +2,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://blcxok1w8f4xu" uid="uid://b36a5av7x827o"
path.s3tc="res://.godot/imported/revolver1.roughness.png-f8c40214b9c261c0a4b2cd9f6a4e9a14.s3tc.ctex" path.s3tc="res://.godot/imported/revolver1.roughness.png-f8c40214b9c261c0a4b2cd9f6a4e9a14.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],

View File

@@ -2,7 +2,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://r7awur11yerj" uid="uid://b4s3w1qnqcmgq"
path.s3tc="res://.godot/imported/spider1.gunbarrel.albedo.png-463a06da21a5a1fe75e603ecd68d425f.s3tc.ctex" path.s3tc="res://.godot/imported/spider1.gunbarrel.albedo.png-463a06da21a5a1fe75e603ecd68d425f.s3tc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],

View File

@@ -57,6 +57,7 @@ shadow_mesh = SubResource("ArrayMesh_46pc3")
[node name="ammo_pickup" type="RigidBody3D" node_paths=PackedStringArray("collision_shape") groups=["magnet", "pickup", "scene_rigidbody"]] [node name="ammo_pickup" type="RigidBody3D" node_paths=PackedStringArray("collision_shape") groups=["magnet", "pickup", "scene_rigidbody"]]
collision_layer = 16 collision_layer = 16
collision_mask = 17 collision_mask = 17
continuous_cd = true
script = ExtResource("1_sni3c") script = ExtResource("1_sni3c")
collision_shape = NodePath("CollisionShape3D2") collision_shape = NodePath("CollisionShape3D2")
despawning = true despawning = true

File diff suppressed because one or more lines are too long

126
assets/bulB228.tmp Normal file
View File

@@ -0,0 +1,126 @@
[gd_scene load_steps=12 format=4 uid="uid://dqhltdnqyg8ni"]
[ext_resource type="Script" path="res://scripts/bullet.gd" id="1_oj0f5"]
[ext_resource type="Texture2D" uid="uid://dqytegxsmb5kg" path="res://assets/Models/bullet.transparency.png" id="2_0ks2n"]
[ext_resource type="AudioStream" uid="uid://dqj4cx05f25jj" path="res://assets/Audio/punch-body-hard-SBA-300156881.wav" id="3_6j0l2"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mfpbf"]
resource_name = "bullet"
transparency = 4
cull_mode = 2
albedo_texture = ExtResource("2_0ks2n")
roughness = 0.5
emission_enabled = true
emission = Color(1, 0.606841, 0.365696, 1)
emission_energy_multiplier = 4.0
[sub_resource type="ArrayMesh" id="ArrayMesh_dtlcm"]
_surfaces = [{
"aabb": AABB(-0.0255907, -0.0689083, -0.0255907, 0.0511814, 0.735285, 0.0511814),
"format": 34359742465,
"index_count": 180,
"index_data": PackedByteArray("AAADAAEAAAACAAMAAgAFAAMAAgAEAAUABAAHAAUABAAGAAcABgAJAAcABgAIAAkACAALAAkACAAKAAsACgANAAsACgAMAA0ABQAQAAMABQASABAADAAPAA0ADAAOAA8ADgABAA8ADgAAAAEADgACAAAAAgAGAAQABgAKAAgACgAOAAwADgAGAAIABgAOAAoAFgAdABUAFgAeAB0ACwAUAAkACwAVABQAAQAXAA8AAQARABcAAwARAAEAAwAQABEABwASAAUABwATABIADQAVAAsADQAWABUACQATAAcACQAUABMADwAWAA0ADwAXABYAGgAZABgAGQAeAB8AHgAcAB0AHAAaABsAGgAeABkAHgAaABwAFAAbABMAFAAcABsAEgAYABAAEgAaABgAFwAeABYAFwAfAB4AFQAcABQAFQAdABwAEwAaABIAEwAbABoAEAAZABEAEAAYABkAEQAfABcAEQAZAB8A"),
"lods": [0.0176836, PackedByteArray("AAAZAAEAAAACABkAAgASABkAEgAaABkAAgAEABIABAAGABIABgAIABIAHQAaABIACAAdABIACAAKAB0ACgAMAB0ADAAfAB0ADAAOAB8ADgABAB8AAQAZAB8ADgAAAAEADgACAAAADgAGAAIAAgAGAAQABgAOAAoACgAOAAwABgAKAAgAGQAdAB8AGgAdABkA"), 0.0191346, PackedByteArray("AAAEAAEABAASAAEAEgAZAAEAEgAaABkABAAMABIAHQAaABIADAAdABIADAABAB0AAQAZAB0ADAAAAAEADAAEAAAAGgAdABkA"), 0.0400226, PackedByteArray("AAAMAAEADAAdAAEAHQAZAAEADAABAB0AAQAZAB0ADAAAAAEA")],
"name": "bullet",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 32,
"vertex_data": PackedByteArray("AAAAAM4fjb2do9G8AAAAALkAIT+Mo9G8sDyUPM4fjb3BPJS8sDyUPLkAIT+wPJS8jKPRPM4fjb0iqQmzjKPRPLkAIT8AAACAsDyUPM4fjb2fPJQ8sDyUPLkAIT+wPJQ8AAAAAM4fjb17o9E8AAAAALkAIT+Mo9E8sDyUvM4fjb2fPJQ8sDyUvLkAIT+wPJQ8jKPRvM4fjb0iqQmzjKPRvLkAIT8AAACAsDyUvM4fjb3BPJS8sDyUvLkAIT+wPJS8nSBDPJymJz+cIEO8AAAAAJymJz/V+Ym81fmJPJymJz9PL4IvnSBDPJymJz+eIEM8AAAAAJymJz/V+Yk8nSBDvJymJz+eIEM81fmJvJymJz9PL4IvnSBDvJymJz+cIEO8bdeSO6uXKj9r15K7tqyfLquXKj9Mqs+7TqrPO6uXKj+nU1AwbdeSO6uXKj9v15I7tqyfLquXKj9Qqs87bdeSu6uXKj9v15I7TqrPu6uXKj+nU1AwbdeSu6uXKj9r15K7")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_gi7r4"]
resource_name = "gunbullet1_Cylinder"
_surfaces = [{
"aabb": AABB(-0.0255907, -0.0689083, -0.0255907, 0.0511814, 0.735285, 0.0511814),
"attribute_data": PackedByteArray("zVRQPzJjDj9eEic5j/V/PxkeJzkAECc5AAAAP4/1fz8AAAA/j/V/PwEAAD8AECc5AQAAPwAQJzl1UiE/MWMOP9YTJzkr+F8/1hMnOSv4Xz8AAAA/LPhfPwAAAD8s+F8/AAAAPyz4Xz8AAAA/LPhfP+QUAD9AS9o+TRUnOcj6Pz9NFSc5yPo/PwAAAD/I+j8/AAAAP8j6Pz8AAAA/yPo/PwAAAD/I+j8/5RQAPyCNeD7FFic5ZP0fP8UWJzlk/R8/AAAAP2T9Hz8AAAA/ZP0fPwAAAD9k/R8/AAAAP2T9Hz92UiE/uC3nPTwYJzkAAAA/PBgnOQAAAD8BAAA/AAAAPwEAAD8AAAA/AQAAPwAAAD8BAAA/AAAAP85UUD/ALec9sxknOTgFwD6zGSc5OAXAPgEAAD84BcA+AQAAPzgFwD4BAAA/OAXAPgEAAD84BcA+X5JxPySNeD4rGyc5cAqAPisbJzlwCoA+AQAAP3IKgD4BAAA/cgqAPgEAAD9yCoA+AQAAP3IKgD5eknE/QkvaPqIcJzlUHwA+ohwnOVQfAD4BAAA/VB8APgEAAD9UHwA+AQAAP1QfAD4BAAA/VB8APgAAAD8s+F8/AAAAPyz4Xz8AAAA/LPhfPwAAAD8s+F8/AAAAP4/1fz8AAAA/j/V/PwEAAD8AECc5AQAAPwAQJzkAAAA/yPo/PwAAAD/I+j8/AAAAP8j6Pz8AAAA/yPo/PwAAAD9k/R8/AAAAP2T9Hz8AAAA/ZP0fPwAAAD9k/R8/AQAAPwAAAD8BAAA/AAAAPwEAAD8AAAA/AQAAPwAAAD8BAAA/OAXAPgEAAD84BcA+AQAAPzgFwD4BAAA/OAXAPgEAAD9yCoA+AQAAP3IKgD4BAAA/cgqAPgEAAD9yCoA+AQAAP1QfAD4BAAA/VB8APgEAAD9UHwA+AQAAP1QfAD52UiE/jvV/PwAAAD8s+F8/AAAAPyz4Xz/OVFA/jvV/PwAAAD+P9X8/AQAAPwAQJznlFAA//rdePwAAAD/I+j8/AAAAP8j6Pz/lFAA/prUvPwAAAD9k/R8/AAAAP2T9Hz91UiE/FHgOPwEAAD8AAAA/AQAAPwAAAD/NVFA/FHgOPwEAAD84BcA+AQAAPzgFwD5eknE/pbUvPwEAAD9yCoA+AQAAP3IKgD5fknE//bdePwEAAD9UHwA+AQAAP1QfAD4="),
"format": 34359742487,
"index_count": 180,
"index_data": PackedByteArray("AQALAAQAAQAIAAsACQAUAA0ACQAQABQADwAbABMADwAXABsAFgAgABkAFgAdACAAHgAnACIAHgAkACcAJQAvACkAJQArAC8AEgA7AAwAEgBDADsALAA3ADAALAAzADcAMgAGADUAMgACAAYAMQAHAAAABwAVAA4AFQAjABwAIwAxACoAMQAVAAcAFQAxACMAUABpAE4AUABrAGkAJgBLACEAJgBNAEsABQBVADQABQA/AFUACgA9AAMACgA5AD0AGgBCABEAGgBHAEIALQBPACgALQBSAE8AHwBFABgAHwBJAEUANgBTAC4ANgBXAFMAXgBbAFgAWwBqAG0AagBkAGcAZABeAGEAXgBqAFsAagBeAGQASABiAEQASABlAGIAQQBaADoAQQBgAFoAVgBsAFEAVgBvAGwATABmAEoATABoAGYARgBfAEAARgBjAF8AOABcADwAOABZAFwAPgBuAFQAPgBdAG4A"),
"lods": [0.0176836, PackedByteArray("AQBcAAMAAQAIAFwACABAAFwAQABfAFwACAAPAEAADwAWAEAAFgAdAEAAaABfAEAAHQBoAEAAHQAkAGgAJAArAGgAKwBuAGgAKwAyAG4AMgAFAG4ABQBdAG4AMgACAAUAMQAHAAAAMQAVAAcABwAVAA4AFQAxACMAIwAxACoAFQAjABwAWwBnAG0AXgBnAFsA"), 0.0191346, PackedByteArray("AQAPAAMADwBAAAMAQABcAAMAQABfAFwADwArAEAAaABfAEAAKwBoAEAAKwAFAGgABQBdAGgAKwACAAUAKgAOAAAAXgBnAFsA"), 0.0400226, PackedByteArray("AQArAAMAKwBoAAMAaABcAAMAKwAFAGgABQBdAGgAKwACAAUA")],
"material": SubResource("StandardMaterial3D_mfpbf"),
"name": "bullet",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 112,
"vertex_data": PackedByteArray("AAAAAM4fjb2do9G8AAAAAM4fjb2do9G8AAAAAM4fjb2do9G8AAAAALkAIT+Mo9G8AAAAALkAIT+Mo9G8AAAAALkAIT+Mo9G8AAAAALkAIT+Mo9G8sDyUPM4fjb3BPJS8sDyUPM4fjb3BPJS8sDyUPM4fjb3BPJS8sDyUPLkAIT+wPJS8sDyUPLkAIT+wPJS8sDyUPLkAIT+wPJS8sDyUPLkAIT+wPJS8jKPRPM4fjb0iqQmzjKPRPM4fjb0iqQmzjKPRPM4fjb0iqQmzjKPRPLkAIT8AAACAjKPRPLkAIT8AAACAjKPRPLkAIT8AAACAjKPRPLkAIT8AAACAsDyUPM4fjb2fPJQ8sDyUPM4fjb2fPJQ8sDyUPM4fjb2fPJQ8sDyUPLkAIT+wPJQ8sDyUPLkAIT+wPJQ8sDyUPLkAIT+wPJQ8sDyUPLkAIT+wPJQ8AAAAAM4fjb17o9E8AAAAAM4fjb17o9E8AAAAAM4fjb17o9E8AAAAALkAIT+Mo9E8AAAAALkAIT+Mo9E8AAAAALkAIT+Mo9E8AAAAALkAIT+Mo9E8sDyUvM4fjb2fPJQ8sDyUvM4fjb2fPJQ8sDyUvM4fjb2fPJQ8sDyUvLkAIT+wPJQ8sDyUvLkAIT+wPJQ8sDyUvLkAIT+wPJQ8sDyUvLkAIT+wPJQ8jKPRvM4fjb0iqQmzjKPRvM4fjb0iqQmzjKPRvM4fjb0iqQmzjKPRvLkAIT8AAACAjKPRvLkAIT8AAACAjKPRvLkAIT8AAACAjKPRvLkAIT8AAACAsDyUvM4fjb3BPJS8sDyUvM4fjb3BPJS8sDyUvM4fjb3BPJS8sDyUvLkAIT+wPJS8sDyUvLkAIT+wPJS8sDyUvLkAIT+wPJS8sDyUvLkAIT+wPJS8nSBDPJymJz+cIEO8nSBDPJymJz+cIEO8nSBDPJymJz+cIEO8nSBDPJymJz+cIEO8AAAAAJymJz/V+Ym8AAAAAJymJz/V+Ym8AAAAAJymJz/V+Ym8AAAAAJymJz/V+Ym81fmJPJymJz9PL4Iv1fmJPJymJz9PL4Iv1fmJPJymJz9PL4Iv1fmJPJymJz9PL4IvnSBDPJymJz+eIEM8nSBDPJymJz+eIEM8nSBDPJymJz+eIEM8nSBDPJymJz+eIEM8AAAAAJymJz/V+Yk8AAAAAJymJz/V+Yk8AAAAAJymJz/V+Yk8AAAAAJymJz/V+Yk8nSBDvJymJz+eIEM8nSBDvJymJz+eIEM8nSBDvJymJz+eIEM8nSBDvJymJz+eIEM81fmJvJymJz9PL4Iv1fmJvJymJz9PL4Iv1fmJvJymJz9PL4Iv1fmJvJymJz9PL4IvnSBDvJymJz+cIEO8nSBDvJymJz+cIEO8nSBDvJymJz+cIEO8nSBDvJymJz+cIEO8bdeSO6uXKj9r15K7bdeSO6uXKj9r15K7bdeSO6uXKj9r15K7tqyfLquXKj9Mqs+7tqyfLquXKj9Mqs+7tqyfLquXKj9Mqs+7TqrPO6uXKj+nU1AwTqrPO6uXKj+nU1AwTqrPO6uXKj+nU1AwbdeSO6uXKj9v15I7bdeSO6uXKj9v15I7bdeSO6uXKj9v15I7tqyfLquXKj9Qqs87tqyfLquXKj9Qqs87tqyfLquXKj9Qqs87bdeSu6uXKj9v15I7bdeSu6uXKj9v15I7bdeSu6uXKj9v15I7TqrPu6uXKj+nU1AwTqrPu6uXKj+nU1AwTqrPu6uXKj+nU1AwbdeSu6uXKj9r15K7bdeSu6uXKj9r15K7bdeSu6uXKj9r15K7/38AAAAAQS3//4Ha/3///wAAgdr/f///Xue34f///7///4Ha/3///6AYt+H///+/AACB2v9/////fwAAAABBLf//gdr/f/////99pf9///9e57fh////v///gdr/f///Xufntv///7///32l/3////9/AAAAAEEtgdr/f/9//////32l/3///xfJn5j///8/Xufntv///7+B2v9//3//////faX/f////38AAAAAQS19pf9//3///4Ha/3//f///Rp6fmP///z99pf9//3///xfJn5j///8/gdr/f/9/////fwAAAABBLX2l/3//f///gVr/f/9///9Gnp+Y////P32l/3//f///uGGfmP///z+BWv9//3////9/AAAAAEEtgVr/f/9///99Jf9//3///7hhn5j///8/gVr/f/9////nNp+Y////P30l/3//f////38AAAAAQS19Jf9//3///wAAfaX/f///5zafmP///z+gGOe2////v30l/3//f///AAB9pf9/////fwAAAABBLQAAgdr/f///AAB9pf9///+gGLfh////vwAAgdr/f///oBjntv///78AAH2l/3///73NOen///+/Xue34f///7+9zQfJ////v17n57b///+/vc056f///79e57fh////v0EyOen///+/oBi34f///7/3tkGy////P73NB8n///+/F8mfmP///z9e5+e2////v8WWQbL///8/Rp6fmP///z/3tkGy////PxfJn5j///8/xZZBsv///z9Gnp+Y////PzlpQbL///8/uGGfmP///z85aUGy////P7hhn5j///8/B0lBsv///z/nNp+Y////PwdJQbL///8/QTIHyf///7/nNp+Y////P6AY57b///+/QTI56f///7+gGLfh////v0EyB8n///+/oBjntv///7//f///AAC90r3NOen///+/vc0Hyf///7//f///AAC90r3NOen///+/QTI56f///7//f///AAC90ve2QbL///8/vc0Hyf///7//f///AAC90sWWQbL///8/97ZBsv///z//f///AAC90sWWQbL///8/OWlBsv///z//f///AAC90jlpQbL///8/B0lBsv///z//f///AAC90gdJQbL///8/QTIHyf///7//f///AAC90kEyOen///+/QTIHyf///78=")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_dtlcm")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x6v7s"]
transparency = 1
blend_mode = 1
albedo_color = Color(0.75476, 0.726851, 0.555583, 1)
emission_enabled = true
emission = Color(0.944624, 0.755365, 0, 1)
emission_energy_multiplier = 8.0
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3wvag"]
direction = Vector3(0, 0, 1)
initial_velocity_min = 3.0
initial_velocity_max = 5.0
[sub_resource type="BoxMesh" id="BoxMesh_jrtee"]
size = Vector3(0.04, 0.04, 0.04)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ywt21"]
transparency = 1
blend_mode = 1
albedo_color = Color(0.383052, 0.264096, 0.213327, 1)
emission_enabled = true
emission = Color(0.737886, 0.150238, 0.0835467, 1)
emission_energy_multiplier = 8.0
[sub_resource type="CylinderShape3D" id="CylinderShape3D_tqvit"]
height = 1.53305
radius = 0.055
[node name="Bullet" type="RigidBody3D"]
collision_layer = 0
collision_mask = 105
continuous_cd = true
contact_monitor = true
max_contacts_reported = 2
script = ExtResource("1_oj0f5")
[node name="Cylinder" type="MeshInstance3D" parent="."]
transform = Transform3D(-2, -3.01992e-07, 0, 0, 0, -2, 3.01992e-07, -2, 0, 1.46364e-07, 0, 0.627698)
cast_shadow = 0
mesh = SubResource("ArrayMesh_gi7r4")
skeleton = NodePath("")
[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767)
material_override = SubResource("StandardMaterial3D_x6v7s")
cast_shadow = 0
emitting = false
one_shot = true
explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_3wvag")
draw_pass_1 = SubResource("BoxMesh_jrtee")
[node name="GPUParticlesEnemy" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767)
material_override = SubResource("StandardMaterial3D_ywt21")
cast_shadow = 0
emitting = false
one_shot = true
explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_3wvag")
draw_pass_1 = SubResource("BoxMesh_jrtee")
[node name="Audio" type="Node" parent="."]
[node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("3_6j0l2")
[node name="BulletCollision" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
shape = SubResource("CylinderShape3D_tqvit")
[node name="RayCast3D" type="RayCast3D" parent="."]
target_position = Vector3(0, 0, -1)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[connection signal="body_shape_entered" from="." to="." method="_on_body_shape_entered"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=4 uid="uid://dqhltdnqyg8ni"] [gd_scene load_steps=13 format=4 uid="uid://dqhltdnqyg8ni"]
[ext_resource type="Script" path="res://scripts/bullet.gd" id="1_oj0f5"] [ext_resource type="Script" path="res://scripts/bullet.gd" id="1_oj0f5"]
[ext_resource type="Texture2D" uid="uid://dqytegxsmb5kg" path="res://assets/Models/bullet.transparency.png" id="2_0ks2n"] [ext_resource type="Texture2D" uid="uid://dqytegxsmb5kg" path="res://assets/Models/bullet.transparency.png" id="2_0ks2n"]
@@ -49,20 +49,18 @@ blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_dtlcm") shadow_mesh = SubResource("ArrayMesh_dtlcm")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x6v7s"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x6v7s"]
transparency = 1 metallic = 1.0
blend_mode = 1
albedo_color = Color(0.75476, 0.726851, 0.555583, 1)
emission_enabled = true emission_enabled = true
emission = Color(0.944624, 0.755365, 0, 1) emission = Color(1, 0.607843, 0.364706, 1)
emission_energy_multiplier = 8.0 emission_energy_multiplier = 4.0
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3wvag"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_3wvag"]
direction = Vector3(0, 0, 1) direction = Vector3(0, 0, 1)
initial_velocity_min = 3.0 initial_velocity_min = 3.0
initial_velocity_max = 5.0 initial_velocity_max = 5.0
[sub_resource type="BoxMesh" id="BoxMesh_jrtee"] [sub_resource type="BoxMesh" id="BoxMesh_qy3jk"]
size = Vector3(0.04, 0.04, 0.04) size = Vector3(0.025, 0.025, 0.025)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ywt21"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ywt21"]
transparency = 1 transparency = 1
@@ -72,34 +70,43 @@ emission_enabled = true
emission = Color(0.737886, 0.150238, 0.0835467, 1) emission = Color(0.737886, 0.150238, 0.0835467, 1)
emission_energy_multiplier = 8.0 emission_energy_multiplier = 8.0
[node name="Bullet" type="Node3D"] [sub_resource type="BoxMesh" id="BoxMesh_jrtee"]
size = Vector3(0.04, 0.04, 0.04)
[sub_resource type="CylinderShape3D" id="CylinderShape3D_tqvit"]
height = 1.5
radius = 0.055
[node name="Bullet" type="RigidBody3D"]
top_level = true
collision_layer = 0
collision_mask = 105
axis_lock_angular_x = true
axis_lock_angular_y = true
axis_lock_angular_z = true
mass = 0.01
center_of_mass_mode = 1
continuous_cd = true
contact_monitor = true
max_contacts_reported = 3
script = ExtResource("1_oj0f5") script = ExtResource("1_oj0f5")
[node name="gunbullet1" type="Node3D" parent="."] [node name="Cylinder" type="MeshInstance3D" parent="."]
transform = Transform3D(-2, 0, -3.01992e-07, 0, 2, 0, 3.01992e-07, 0, -2, 0, 0, 0) transform = Transform3D(-2, -3.01992e-07, 0, 0, 0, -2, 3.01992e-07, -2, 0, 1.46364e-07, 0, 0.627698)
[node name="Cylinder" type="MeshInstance3D" parent="gunbullet1"]
transform = Transform3D(1, 0, 0, 0, 0, -1, 0, 1, 0, -2.57922e-08, 0, -0.313849)
cast_shadow = 0 cast_shadow = 0
mesh = SubResource("ArrayMesh_gi7r4") mesh = SubResource("ArrayMesh_gi7r4")
skeleton = NodePath("") skeleton = NodePath("")
[node name="RayCast3D" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1.70846, 0.000340699, 0.0133128, 0.723808)
target_position = Vector3(0, 0, -2.5)
collision_mask = 105
hit_from_inside = true
collide_with_areas = true
[node name="GPUParticles3D" type="GPUParticles3D" parent="."] [node name="GPUParticles3D" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767)
material_override = SubResource("StandardMaterial3D_x6v7s") material_override = SubResource("StandardMaterial3D_x6v7s")
cast_shadow = 0 cast_shadow = 0
emitting = false emitting = false
amount = 20
one_shot = true one_shot = true
explosiveness = 1.0 explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_3wvag") process_material = SubResource("ParticleProcessMaterial_3wvag")
draw_pass_1 = SubResource("BoxMesh_jrtee") draw_pass_1 = SubResource("BoxMesh_qy3jk")
[node name="GPUParticlesEnemy" type="GPUParticles3D" parent="."] [node name="GPUParticlesEnemy" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.718767)
@@ -111,12 +118,19 @@ explosiveness = 1.0
process_material = SubResource("ParticleProcessMaterial_3wvag") process_material = SubResource("ParticleProcessMaterial_3wvag")
draw_pass_1 = SubResource("BoxMesh_jrtee") draw_pass_1 = SubResource("BoxMesh_jrtee")
[node name="Timer" type="Timer" parent="."]
wait_time = 10.0
one_shot = true
autostart = true
[node name="Audio" type="Node" parent="."] [node name="Audio" type="Node" parent="."]
[node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"] [node name="HitIndicator" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("3_6j0l2") stream = ExtResource("3_6j0l2")
[node name="BulletCollision" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
shape = SubResource("CylinderShape3D_tqvit")
[node name="RayCast3D" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.47877)
target_position = Vector3(0, 0, -3)
collision_mask = 105
collide_with_areas = true
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

View File

@@ -10,8 +10,8 @@ height = 0.121962
radius = 0.0314789 radius = 0.0314789
[node name="casing_2" type="RigidBody3D" groups=["scene_rigidbody", "spawned"]] [node name="casing_2" type="RigidBody3D" groups=["scene_rigidbody", "spawned"]]
collision_layer = 0 collision_layer = 32
collision_mask = 5 collision_mask = 37
mass = 0.1 mass = 0.1
continuous_cd = true continuous_cd = true
contact_monitor = true contact_monitor = true

View File

@@ -9,7 +9,7 @@ dof_blur_near_transition = 4.0
dof_blur_amount = 0.2 dof_blur_amount = 0.2
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_m5ien"] [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_m5ien"]
blend_mode = 1 blend_mode = 3
[sub_resource type="Animation" id="Animation_4scpm"] [sub_resource type="Animation" id="Animation_4scpm"]
resource_name = "whiteout" resource_name = "whiteout"
@@ -25,7 +25,7 @@ tracks/0/keys = {
"times": PackedFloat32Array(0, 0.05), "times": PackedFloat32Array(0, 0.05),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 0, "update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] "values": [Color(1, 1, 1, 0), Color(0, 0, 0, 1)]
} }
tracks/1/type = "method" tracks/1/type = "method"
tracks/1/imported = false tracks/1/imported = false
@@ -58,14 +58,14 @@ fov = 15.0
target_position = Vector3(0, 0, -1) target_position = Vector3(0, 0, -1)
[node name="Timer" type="Timer" parent="."] [node name="Timer" type="Timer" parent="."]
wait_time = 0.2 wait_time = 0.25
one_shot = true one_shot = true
[node name="Whiteout" type="ColorRect" parent="."] [node name="Whiteout" type="ColorRect" parent="."]
material = SubResource("CanvasItemMaterial_m5ien") material = SubResource("CanvasItemMaterial_m5ien")
offset_right = 40.0 offset_right = 40.0
offset_bottom = 40.0 offset_bottom = 40.0
color = Color(1, 1, 1, 0) color = Color(0.8, 0.8, 0.8, 0.2)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = { libraries = {

View File

@@ -301,7 +301,7 @@ tracks/4/keys = {
"times": PackedFloat32Array(0, 0.03, 0.1), "times": PackedFloat32Array(0, 0.03, 0.1),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 0, "update": 0,
"values": [0.0, 20.0, 0.0] "values": [0.0, 10.0, 0.0]
} }
tracks/5/type = "value" tracks/5/type = "value"
tracks/5/imported = false tracks/5/imported = false
@@ -404,7 +404,9 @@ _data = {
script = ExtResource("2_6i1l4") script = ExtResource("2_6i1l4")
gun_name = "Mac 10" gun_name = "Mac 10"
max_ammo = 30 max_ammo = 30
start_mags = 300
bullet_damage = 2 bullet_damage = 2
bullet_speed = 300
bullet_drop = 0.01 bullet_drop = 0.01
random_spread_amt = 0.5 random_spread_amt = 0.5
fire_pitch_scale_amt = 0.05 fire_pitch_scale_amt = 0.05

View File

@@ -13,7 +13,6 @@ normal_scale = 2.0
normal_texture = ExtResource("4_7t6g2") normal_texture = ExtResource("4_7t6g2")
ao_enabled = true ao_enabled = true
ao_texture = ExtResource("2_rhxpx") ao_texture = ExtResource("2_rhxpx")
heightmap_enabled = true
heightmap_deep_parallax = true heightmap_deep_parallax = true
heightmap_min_layers = 8 heightmap_min_layers = 8
heightmap_max_layers = 32 heightmap_max_layers = 32

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=24 format=3 uid="uid://drwae3loscbw7"] [gd_scene load_steps=27 format=3 uid="uid://drwae3loscbw7"]
[ext_resource type="Script" path="res://scripts/player.gd" id="1_x7wms"] [ext_resource type="Script" path="res://scripts/player.gd" id="1_x7wms"]
[ext_resource type="PackedScene" uid="uid://dcmno6wafk5hg" path="res://assets/dead_player.tscn" id="2_4hoys"] [ext_resource type="PackedScene" uid="uid://dcmno6wafk5hg" path="res://assets/dead_player.tscn" id="2_4hoys"]
@@ -15,7 +15,9 @@
[ext_resource type="AudioStream" uid="uid://bl8yg1d3bsxs3" path="res://assets/Audio/constant-natural-strong-wind-looping-SBA-300062687.wav" id="11_he7p5"] [ext_resource type="AudioStream" uid="uid://bl8yg1d3bsxs3" path="res://assets/Audio/constant-natural-strong-wind-looping-SBA-300062687.wav" id="11_he7p5"]
[ext_resource type="AudioStream" uid="uid://cy150nsjqp7lt" path="res://assets/Audio/grunt-male-SBA-300282985.wav" id="12_f51u4"] [ext_resource type="AudioStream" uid="uid://cy150nsjqp7lt" path="res://assets/Audio/grunt-male-SBA-300282985.wav" id="12_f51u4"]
[ext_resource type="AudioStream" uid="uid://cwre1dq8gsvbg" path="res://assets/Audio/Foley Sports/Boxing/Gloves Block Intense.wav" id="12_qhd01"] [ext_resource type="AudioStream" uid="uid://cwre1dq8gsvbg" path="res://assets/Audio/Foley Sports/Boxing/Gloves Block Intense.wav" id="12_qhd01"]
[ext_resource type="PackedScene" uid="uid://cfbwx2fsdp0b3" path="res://pause_menu.tscn" id="13_xrfwr"]
[ext_resource type="AudioStream" uid="uid://t50i483xmj3a" path="res://assets/Audio/Weapons/toy-click-spin-SBA-300071143.wav" id="14_pnsbm"] [ext_resource type="AudioStream" uid="uid://t50i483xmj3a" path="res://assets/Audio/Weapons/toy-click-spin-SBA-300071143.wav" id="14_pnsbm"]
[ext_resource type="Shader" path="res://assets/crtTest.gdshader" id="14_v5svg"]
[ext_resource type="AudioStream" uid="uid://c1e6vr2hndho7" path="res://assets/Audio/Weapons/Misc (Ammo Boxes, Holsters, Etc)/Kydex Unholster 002.wav" id="17_1fyjm"] [ext_resource type="AudioStream" uid="uid://c1e6vr2hndho7" path="res://assets/Audio/Weapons/Misc (Ammo Boxes, Holsters, Etc)/Kydex Unholster 002.wav" id="17_1fyjm"]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_l5ga0"] [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_l5ga0"]
@@ -33,6 +35,30 @@ font_size = 115
shadow_size = 16 shadow_size = 16
shadow_color = Color(0, 0, 0, 1) shadow_color = Color(0, 0, 0, 1)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ubnx7"]
shader = ExtResource("14_v5svg")
shader_parameter/overlay = true
shader_parameter/scanlines_opacity = 0.05
shader_parameter/scanlines_width = 0.5
shader_parameter/grille_opacity = 0.05
shader_parameter/resolution = Vector2(640, 480)
shader_parameter/pixelate = false
shader_parameter/roll = true
shader_parameter/roll_speed = 1.0
shader_parameter/roll_size = 11.0
shader_parameter/roll_variation = 2.8
shader_parameter/distort_intensity = 0.002
shader_parameter/noise_opacity = 0.015
shader_parameter/noise_speed = 5.0
shader_parameter/static_noise_intensity = 0.005
shader_parameter/aberration = 0.00300005
shader_parameter/brightness = 1.4
shader_parameter/discolor = true
shader_parameter/warp_amount = 0.0
shader_parameter/clip_warp = true
shader_parameter/vignette_intensity = 0.4
shader_parameter/vignette_opacity = 0.235
[sub_resource type="BoxShape3D" id="BoxShape3D_nfpjw"] [sub_resource type="BoxShape3D" id="BoxShape3D_nfpjw"]
size = Vector3(3, 3.58057, 3) size = Vector3(3, 3.58057, 3)
@@ -41,7 +67,7 @@ radius = 7.0
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_holder") groups=["player"]] [node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_holder") groups=["player"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.11359, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.11359, 0)
collision_layer = 11 collision_layer = 6
collision_mask = 11 collision_mask = 11
script = ExtResource("1_x7wms") script = ExtResource("1_x7wms")
dead_player = ExtResource("2_4hoys") dead_player = ExtResource("2_4hoys")
@@ -72,7 +98,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.25, -0.85, -1.501)
script = ExtResource("3_405jc") script = ExtResource("3_405jc")
[node name="Camera3D" type="Camera3D" parent="Head/Recoil"] [node name="Camera3D" type="Camera3D" parent="Head/Recoil"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0341401, 0.111267) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0341401, -0.00371268)
current = true current = true
[node name="WeaponHolder" type="Node3D" parent="Head/Recoil/Camera3D"] [node name="WeaponHolder" type="Node3D" parent="Head/Recoil/Camera3D"]
@@ -94,7 +120,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.437954, -1)
stream = ExtResource("14_pnsbm") stream = ExtResource("14_pnsbm")
volume_db = 2.0 volume_db = 2.0
[node name="AmmoCounter" type="Label" parent="Head/Recoil/Camera3D"] [node name="AmmoCounter" type="Label" parent="Head/Recoil/Camera3D" groups=["hud"]]
offset_right = 3840.0 offset_right = 3840.0
offset_bottom = 2160.0 offset_bottom = 2160.0
size_flags_horizontal = 3 size_flags_horizontal = 3
@@ -106,7 +132,7 @@ vertical_alignment = 2
script = ExtResource("4_8cy44") script = ExtResource("4_8cy44")
padding_amount = 0.025 padding_amount = 0.025
[node name="StaminaCounter" type="Label" parent="Head/Recoil/Camera3D"] [node name="StaminaCounter" type="Label" parent="Head/Recoil/Camera3D" groups=["hud"]]
offset_right = 3440.0 offset_right = 3440.0
offset_bottom = 1440.0 offset_bottom = 1440.0
size_flags_horizontal = 3 size_flags_horizontal = 3
@@ -125,7 +151,7 @@ hit_back_faces = false
[node name="AudioListener3D" type="AudioListener3D" parent="Head/Recoil/Camera3D"] [node name="AudioListener3D" type="AudioListener3D" parent="Head/Recoil/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 0.992332, 0.123601, 0, -0.123601, 0.992332, 0, -0.921646, -0.000722691) transform = Transform3D(1, 0, 0, 0, 0.992332, 0.123601, 0, -0.123601, 0.992332, 0, -0.921646, -0.000722691)
[node name="Crosshair" type="TextureRect" parent="Head/Recoil/Camera3D"] [node name="Crosshair" type="TextureRect" parent="Head/Recoil/Camera3D" groups=["hud"]]
offset_right = 40.0 offset_right = 40.0
offset_bottom = 40.0 offset_bottom = 40.0
texture = ExtResource("6_5m60e") texture = ExtResource("6_5m60e")
@@ -133,13 +159,13 @@ script = ExtResource("7_pnp4a")
[node name="Hitmarker" type="TextureRect" parent="Head/Recoil/Camera3D"] [node name="Hitmarker" type="TextureRect" parent="Head/Recoil/Camera3D"]
visible = false visible = false
offset_right = 40.0 offset_right = 49.285
offset_bottom = 40.0 offset_bottom = 40.0
texture = ExtResource("8_kupqh") texture = ExtResource("8_kupqh")
script = ExtResource("7_pnp4a") script = ExtResource("7_pnp4a")
[node name="BulletRay" type="RayCast3D" parent="Head/Recoil/Camera3D"] [node name="BulletRay" type="RayCast3D" parent="Head/Recoil/Camera3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.114122) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.462246)
target_position = Vector3(0, 0, -200) target_position = Vector3(0, 0, -200)
collision_mask = 5 collision_mask = 5
collide_with_areas = true collide_with_areas = true
@@ -156,6 +182,17 @@ collide_with_areas = true
[node name="Kick" type="AudioStreamPlayer3D" parent="Head/Recoil/Camera3D/Audio"] [node name="Kick" type="AudioStreamPlayer3D" parent="Head/Recoil/Camera3D/Audio"]
stream = ExtResource("12_qhd01") stream = ExtResource("12_qhd01")
[node name="PauseMenu" parent="Head/Recoil/Camera3D" instance=ExtResource("13_xrfwr")]
visible = false
offset_right = 0.0
offset_bottom = 0.0
[node name="crtFilter" type="ColorRect" parent="Head/Recoil/Camera3D"]
visible = false
material = SubResource("ShaderMaterial_ubnx7")
offset_right = 3840.0
offset_bottom = 2160.0
[node name="pick_up_detection" type="Area3D" parent="."] [node name="pick_up_detection" type="Area3D" parent="."]
collision_layer = 0 collision_layer = 0
collision_mask = 16 collision_mask = 16

View File

@@ -1076,12 +1076,12 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0718293, 0)
script = ExtResource("2_7rsti") script = ExtResource("2_7rsti")
gun_name = "Ye Ol' Revolver" gun_name = "Ye Ol' Revolver"
fire_mode = 1 fire_mode = 1
fov_zoom_amt = 0.96 fov_zoom_amt = 0.97
recoil_amount = Vector3(0.5, 0.1, 0.1) recoil_amount = Vector3(0.5, 0.1, 0.1)
max_ammo = 6 max_ammo = 6
bullet_damage = 5 bullet_damage = 5
bullet_force_mod = 10 bullet_force_mod = 10
bullet_speed = 200 bullet_speed = 1500
bullet_drop = 0.0 bullet_drop = 0.0
random_spread_amt = 0.1 random_spread_amt = 0.1
chamber = NodePath("revolver1/Chamber") chamber = NodePath("revolver1/Chamber")

View File

@@ -2,14 +2,5 @@ extends StaticBody3D
signal switch_hit() signal switch_hit()
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func hit(): func hit():
emit_signal("switch_hit") emit_signal("switch_hit")

View File

@@ -39,8 +39,7 @@ func _on_switch_changed() -> void:
else: else:
if door.door_open == true: if door.door_open == true:
door.close() door.close()
#Otherwise follow standard switches
#Otherwise follow standard switches
elif switches_on == switches_needed: elif switches_on == switches_needed:
print("switch check run with " + str(switches_on) + "switches on") print("switch check run with " + str(switches_on) + "switches on")
if door.door_open == false: if door.door_open == false:
@@ -49,3 +48,13 @@ func _on_switch_changed() -> void:
print("switch check run with " + str(switches_on) + "switches on") print("switch check run with " + str(switches_on) + "switches on")
if door.door_open == true: if door.door_open == true:
door.close() door.close()
#Otherwise follow standard switches
elif switches_on == switches_needed:
print("switch check run with " + str(switches_on) + "switches on")
if door.door_open == false:
door.open()
else:
print("switch check run with " + str(switches_on) + "switches on")
if door.door_open == true:
door.close()

229
pause_menu.gdshader Normal file
View File

@@ -0,0 +1,229 @@
/*
Shader from Godot Shaders - the free shader library.
godotshaders.com/shader/VHS-and-CRT-monitor-effect
This shader is under CC0 license. Feel free to use, improve and
change this shader according to your needs and consider sharing
the modified result to godotshaders.com.
*/
shader_type canvas_item;
//*** IMPORTANT! ***/
// - If you are using this shader to affect the node it is applied to set 'overlay' to false (unchecked in the instepctor).
// - If you are using this shader as an overlay, and want the shader to affect the nodes below in the Scene hierarchy,
// set 'overlay' to true (checked in the inspector).
// On Mac there is potentially a bug causing this to not work properly. If that is the case and you want to use the shader as an overlay
// change all "overlay ? SCREEN_TEXTURE : TEXTURE" to only "SCREEN_TEXTURE" on lines 129-140, and "vec2 uv = overlay ? warp(SCREEN_UV) : warp(UV);"
// to "vec2 uv = warp(SCREEN_UV);" on line 98.
uniform bool overlay = false;
uniform float scanlines_opacity : hint_range(0.0, 1.0) = 0.4;
uniform float scanlines_width : hint_range(0.0, 0.5) = 0.25;
uniform float grille_opacity : hint_range(0.0, 1.0) = 0.3;
uniform vec2 resolution = vec2(640.0, 480.0); // Set the number of rows and columns the texture will be divided in. Scanlines and grille will make a square based on these values
uniform bool pixelate = true; // Fill each square ("pixel") with a sampled color, creating a pixel look and a more accurate representation of how a CRT monitor would work.
uniform bool roll = true;
uniform float roll_speed = 8.0; // Positive values are down, negative are up
uniform float roll_size : hint_range(0.0, 100.0) = 15.0;
uniform float roll_variation : hint_range(0.1, 5.0) = 1.8; // This valie is not an exact science. You have to play around with the value to find a look you like. How this works is explained in the code below.
uniform float distort_intensity : hint_range(0.0, 0.2) = 0.05; // The distortion created by the rolling effect.
uniform float noise_opacity : hint_range(0.0, 1.0) = 0.4;
uniform float noise_speed = 5.0; // There is a movement in the noise pattern that can be hard to see first. This sets the speed of that movement.
uniform float static_noise_intensity : hint_range(0.0, 1.0) = 0.06;
uniform float aberration : hint_range(-1.0, 1.0) = 0.03; // Chromatic aberration, a distortion on each color channel.
uniform float brightness = 1.4; // When adding scanline gaps and grille the image can get very dark. Brightness tries to compensate for that.
uniform bool discolor = true; // Add a discolor effect simulating a VHS
uniform float warp_amount :hint_range(0.0, 5.0) = 1.0; // Warp the texture edges simulating the curved glass of a CRT monitor or old TV.
uniform bool clip_warp = false;
uniform float vignette_intensity = 0.4; // Size of the vignette, how far towards the middle it should go.
uniform float vignette_opacity : hint_range(0.0, 1.0) = 0.5;
// Used by the noise functin to generate a pseudo random value between 0.0 and 1.0
vec2 random(vec2 uv){
uv = vec2( dot(uv, vec2(127.1,311.7) ),
dot(uv, vec2(269.5,183.3) ) );
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
}
// Generate a Perlin noise used by the distortion effects
float noise(vec2 uv) {
vec2 uv_index = floor(uv);
vec2 uv_fract = fract(uv);
vec2 blur = smoothstep(0.0, 1.0, uv_fract);
return mix( mix( dot( random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ),
dot( random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x),
mix( dot( random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ),
dot( random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) * 0.5 + 0.5;
}
// Takes in the UV and warps the edges, creating the spherized effect
vec2 warp(vec2 uv){
vec2 delta = uv - 0.5;
float delta2 = dot(delta.xy, delta.xy);
float delta4 = delta2 * delta2;
float delta_offset = delta4 * warp_amount;
return uv + delta * delta_offset;
}
// Adds a black border to hide stretched pixel created by the warp effect
float border (vec2 uv){
float radius = min(warp_amount, 0.08);
radius = max(min(min(abs(radius * 2.0), abs(1.0)), abs(1.0)), 1e-5);
vec2 abs_uv = abs(uv * 2.0 - 1.0) - vec2(1.0, 1.0) + radius;
float dist = length(max(vec2(0.0), abs_uv)) / radius;
float square = smoothstep(0.96, 1.0, dist);
return clamp(1.0 - square, 0.0, 1.0);
}
// Adds a vignette shadow to the edges of the image
float vignette(vec2 uv){
uv *= 1.0 - uv.xy;
float vignette = uv.x * uv.y * 15.0;
return pow(vignette, vignette_intensity * vignette_opacity);
}
void fragment()
{
vec2 uv = overlay ? warp(SCREEN_UV) : warp(UV); // Warp the uv. uv will be used in most cases instead of UV to keep the warping
vec2 text_uv = uv;
vec2 roll_uv = vec2(0.0);
float time = roll ? TIME : 0.0;
// Pixelate the texture based on the given resolution.
if (pixelate)
{
text_uv = ceil(uv * resolution) / resolution;
}
// Create the rolling effect. We need roll_line a bit later to make the noise effect.
// That is why this runs if roll is true OR noise_opacity is over 0.
float roll_line = 0.0;
if (roll || noise_opacity > 0.0)
{
// Create the areas/lines where the texture will be distorted.
roll_line = smoothstep(0.3, 0.9, sin(uv.y * roll_size - (time * roll_speed) ) );
// Create more lines of a different size and apply to the first set of lines. This creates a bit of variation.
roll_line *= roll_line * smoothstep(0.3, 0.9, sin(uv.y * roll_size * roll_variation - (time * roll_speed * roll_variation) ) );
// Distort the UV where where the lines are
roll_uv = vec2(( roll_line * distort_intensity * (1.-UV.x)), 0.0);
}
vec4 text;
if (roll)
{
// If roll is true distort the texture with roll_uv. The texture is split up into RGB to
// make some chromatic aberration. We apply the aberration to the red and green channels accorging to the aberration parameter
// and intensify it a bit in the roll distortion.
text.r = texture(SCREEN_TEXTURE, text_uv + roll_uv * 0.8 + vec2(aberration, 0.0) * .1).r;
text.g = texture(SCREEN_TEXTURE, text_uv + roll_uv * 1.2 - vec2(aberration, 0.0) * .1 ).g;
text.b = texture(SCREEN_TEXTURE, text_uv + roll_uv).b;
text.a = 1.0;
}
else
{
// If roll is false only apply the aberration without any distorion. The aberration values are very small so the .1 is only
// to make the slider in the Inspector less sensitive.
text.r = texture(SCREEN_TEXTURE, text_uv + vec2(aberration, 0.0) * .1).r;
text.g = texture(SCREEN_TEXTURE, text_uv - vec2(aberration, 0.0) * .1).g;
text.b = texture(SCREEN_TEXTURE, text_uv).b;
text.a = 1.0;
}
float r = text.r;
float g = text.g;
float b = text.b;
uv = warp(UV);
// CRT monitors don't have pixels but groups of red, green and blue dots or lines, called grille. We isolate the texture's color channels
// and divide it up in 3 offsetted lines to show the red, green and blue colors next to each other, with a small black gap between.
if (grille_opacity > 0.0){
float g_r = smoothstep(0.85, 0.95, abs(sin(uv.x * (resolution.x * 3.14159265))));
r = mix(r, r * g_r, grille_opacity);
float g_g = smoothstep(0.85, 0.95, abs(sin(1.05 + uv.x * (resolution.x * 3.14159265))));
g = mix(g, g * g_g, grille_opacity);
float b_b = smoothstep(0.85, 0.95, abs(sin(2.1 + uv.x * (resolution.x * 3.14159265))));
b = mix(b, b * b_b, grille_opacity);
}
// Apply the grille to the texture's color channels and apply Brightness. Since the grille and the scanlines (below) make the image very dark you
// can compensate by increasing the brightness.
text.r = clamp(r * brightness, 0.0, 1.0);
text.g = clamp(g * brightness, 0.0, 1.0);
text.b = clamp(b * brightness, 0.0, 1.0);
// Scanlines are the horizontal lines that make up the image on a CRT monitor.
// Here we are actual setting the black gap between each line, which I guess is not the right definition of the word, but you get the idea
float scanlines = 0.5;
if (scanlines_opacity > 0.0)
{
// Same technique as above, create lines with sine and applying it to the texture. Smoothstep to allow setting the line size.
scanlines = smoothstep(scanlines_width, scanlines_width + 0.5, abs(sin(uv.y * (resolution.y * 3.14159265))));
text.rgb = mix(text.rgb, text.rgb * vec3(scanlines), scanlines_opacity);
}
// Apply the banded noise.
if (noise_opacity > 0.0)
{
// Generate a noise pattern that is very stretched horizontally, and animate it with noise_speed
float noise = smoothstep(0.4, 0.5, noise(uv * vec2(2.0, 200.0) + vec2(10.0, (TIME * (noise_speed))) ) );
// We use roll_line (set above) to define how big the noise should be vertically (multiplying cuts off all black parts).
// We also add in some basic noise with random() to break up the noise pattern above. The noise is sized according to
// the resolution value set in the inspector. If you don't like this look you can
// change "ceil(uv * resolution) / resolution" to only "uv" to make it less pixelated. Or multiply resolution with som value
// greater than 1.0 to make them smaller.
roll_line *= noise * scanlines * clamp(random((ceil(uv * resolution) / resolution) + vec2(TIME * 0.8, 0.0)).x + 0.8, 0.0, 1.0);
// Add it to the texture based on noise_opacity
text.rgb = clamp(mix(text.rgb, text.rgb + roll_line, noise_opacity), vec3(0.0), vec3(1.0));
}
// Apply static noise by generating it over the whole screen in the same way as above
if (static_noise_intensity > 0.0)
{
text.rgb += clamp(random((ceil(uv * resolution) / resolution) + fract(TIME)).x, 0.0, 1.0) * static_noise_intensity;
}
// Apply a black border to hide imperfections caused by the warping.
// Also apply the vignette
text.rgb *= border(uv);
text.rgb *= vignette(uv);
// Hides the black border and make that area transparent. Good if you want to add the the texture on top an image of a TV or monitor.
if (clip_warp)
{
text.a = border(uv);
}
// Apply discoloration to get a VHS look (lower saturation and higher contrast)
// You can play with the values below or expose them in the Inspector.
float saturation = 0.5;
float contrast = 1.2;
if (discolor)
{
// Saturation
vec3 greyscale = vec3(text.r + text.g + text.b) / 3.;
text.rgb = mix(text.rgb, greyscale, saturation);
// Contrast
float midpoint = pow(0.5, 2.2);
text.rgb = (text.rgb - vec3(midpoint)) * contrast + midpoint;
}
COLOR = text;
}

105
pause_menu.tscn Normal file
View File

@@ -0,0 +1,105 @@
[gd_scene load_steps=6 format=3 uid="uid://cfbwx2fsdp0b3"]
[ext_resource type="Script" path="res://scripts/pause_menu.gd" id="1_57eae"]
[ext_resource type="Shader" path="res://assets/crtTest.gdshader" id="1_t8tc5"]
[ext_resource type="FontFile" uid="uid://d2h2tjhxiv5wo" path="res://assets/fonts/White On Black.ttf" id="3_4nq4f"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_62ipe"]
shader = ExtResource("1_t8tc5")
shader_parameter/overlay = true
shader_parameter/scanlines_opacity = 0.4
shader_parameter/scanlines_width = 0.25
shader_parameter/grille_opacity = 0.3
shader_parameter/resolution = Vector2(640, 480)
shader_parameter/pixelate = true
shader_parameter/roll = true
shader_parameter/roll_speed = 8.0
shader_parameter/roll_size = 15.0
shader_parameter/roll_variation = 1.8
shader_parameter/distort_intensity = 0.05
shader_parameter/noise_opacity = 0.4
shader_parameter/noise_speed = 5.0
shader_parameter/static_noise_intensity = 0.06
shader_parameter/aberration = 0.03
shader_parameter/brightness = 1.4
shader_parameter/discolor = true
shader_parameter/warp_amount = 1.0
shader_parameter/clip_warp = false
shader_parameter/vignette_intensity = 0.4
shader_parameter/vignette_opacity = 0.5
[sub_resource type="ShaderMaterial" id="ShaderMaterial_nsure"]
shader = ExtResource("1_t8tc5")
shader_parameter/overlay = true
shader_parameter/scanlines_opacity = 0.025
shader_parameter/scanlines_width = 0.315
shader_parameter/grille_opacity = 0.1
shader_parameter/resolution = Vector2(640, 480)
shader_parameter/pixelate = true
shader_parameter/roll = true
shader_parameter/roll_speed = 8.0
shader_parameter/roll_size = 15.0
shader_parameter/roll_variation = 1.8
shader_parameter/distort_intensity = 0.05
shader_parameter/noise_opacity = 0.4
shader_parameter/noise_speed = 5.0
shader_parameter/static_noise_intensity = 0.06
shader_parameter/aberration = 0.03
shader_parameter/brightness = 0.7
shader_parameter/discolor = true
shader_parameter/warp_amount = 0.0
shader_parameter/clip_warp = true
shader_parameter/vignette_intensity = 0.4
shader_parameter/vignette_opacity = 0.235
[node name="PauseMenu" type="Control"]
material = SubResource("ShaderMaterial_62ipe")
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = 2688.0
offset_bottom = 1512.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_57eae")
[node name="ColorRect" type="ColorRect" parent="."]
material = SubResource("ShaderMaterial_nsure")
layout_mode = 0
offset_right = 3840.0
offset_bottom = 2160.0
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -277.018
offset_top = -174.68
offset_right = 277.018
offset_bottom = 174.68
grow_horizontal = 2
grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="Resume" type="Button" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("3_4nq4f")
theme_override_font_sizes/font_size = 150
text = "Resume"
[node name="Save & Quit" type="Button" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_fonts/font = ExtResource("3_4nq4f")
theme_override_font_sizes/font_size = 150
text = "Save & Quit"
[connection signal="pressed" from="MarginContainer/VBoxContainer/Resume" to="." method="_on_resume_pressed"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/Save & Quit" to="." method="_on_save__quit_pressed"]

View File

@@ -41,6 +41,7 @@ scene_rigidbody=""
weight="" weight=""
switch_override="" switch_override=""
magnet="" magnet=""
hud=""
[input] [input]
@@ -134,6 +135,31 @@ kick={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null)
] ]
} }
numb_1={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":49,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null)
]
}
numb_2={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":50,"key_label":0,"unicode":50,"location":0,"echo":false,"script":null)
]
}
numb_3={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":51,"key_label":0,"unicode":51,"location":0,"echo":false,"script":null)
]
}
numb_4={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":52,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null)
]
}
numb_5={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":53,"key_label":0,"unicode":53,"location":0,"echo":false,"script":null)
]
}
[layer_names] [layer_names]

110
scenes/bullet_test.tscn Normal file
View File

@@ -0,0 +1,110 @@
[gd_scene load_steps=15 format=3 uid="uid://dq3pqbjg7o241"]
[ext_resource type="Script" path="res://scripts/LevelManager.gd" id="1_iqxey"]
[ext_resource type="PackedScene" uid="uid://brl0bsqjl5dg3" path="res://assets/mac_10.tscn" id="2_bbv4q"]
[ext_resource type="Material" uid="uid://br2pyyyl2n3cx" path="res://assets/materials/prototype/prototype1.tres" id="3_ol40x"]
[ext_resource type="PackedScene" uid="uid://b5eclfg0cmmal" path="res://assets/revolver_1.tscn" id="3_tt31v"]
[ext_resource type="PackedScene" uid="uid://drwae3loscbw7" path="res://assets/player.tscn" id="4_1k4dj"]
[ext_resource type="PackedScene" uid="uid://cnfc8rtk6l1d8" path="res://assets/crate1.tscn" id="6_4jfab"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_s7a4u"]
sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
[sub_resource type="Sky" id="Sky_c52rg"]
sky_material = SubResource("ProceduralSkyMaterial_s7a4u")
[sub_resource type="Environment" id="Environment_c1yeo"]
background_mode = 2
sky = SubResource("Sky_c52rg")
tonemap_mode = 2
ssao_enabled = true
sdfgi_enabled = true
glow_enabled = true
[sub_resource type="BoxMesh" id="BoxMesh_fi4o8"]
[sub_resource type="BoxShape3D" id="BoxShape3D_1u1id"]
[sub_resource type="Animation" id="Animation_qlawa"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(6.78104, 1.26555, -18.3016)]
}
[sub_resource type="Animation" id="Animation_l1fwm"]
resource_name = "new_animation"
length = 7.0
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.0105508, 0.7, 1.9, 3.96, 4.16, 4.75514),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(6.78104, 1.26555, -18.3016), Vector3(6.78104, 8.4087, -18.3016), Vector3(-4.99932, 8.4087, -18.3016), Vector3(21.2047, 8.4087, -18.3016), Vector3(21.2047, 8.4087, -18.3016), Vector3(21.2047, 8.4087, 16.4439)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dlky4"]
_data = {
"RESET": SubResource("Animation_qlawa"),
"new_animation": SubResource("Animation_l1fwm")
}
[node name="BulletTest" type="Node3D" node_paths=PackedStringArray("player")]
script = ExtResource("1_iqxey")
player = NodePath("Player")
gun_1 = ExtResource("2_bbv4q")
gun_2 = ExtResource("3_tt31v")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_c1yeo")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.614285, -0.683367, 0.394542, 0, 0.5, 0.866025, -0.789084, -0.531987, 0.307143, 0, 0, 0)
shadow_enabled = true
[node name="CSGBox3D2" type="CSGBox3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20.2065, 1.06369, -8.35413)
use_collision = true
size = Vector3(9.58691, 1.80511, 9.50757)
material = ExtResource("3_ol40x")
[node name="CSGBox3D" type="CSGBox3D" parent="."]
use_collision = true
size = Vector3(50, 0.5, 50)
material = ExtResource("3_ol40x")
[node name="Player" parent="." instance=ExtResource("4_1k4dj")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.93316, 1.36359, 21.3029)
[node name="AnimatableBody3D" type="AnimatableBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.78104, 1.26555, -18.3016)
[node name="MeshInstance3D" type="MeshInstance3D" parent="AnimatableBody3D"]
mesh = SubResource("BoxMesh_fi4o8")
[node name="CollisionShape3D" type="CollisionShape3D" parent="AnimatableBody3D"]
shape = SubResource("BoxShape3D_1u1id")
[node name="AnimationPlayer" type="AnimationPlayer" parent="AnimatableBody3D"]
libraries = {
"": SubResource("AnimationLibrary_dlky4")
}
autoplay = "new_animation"
[node name="Crate1" parent="." instance=ExtResource("6_4jfab")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.8157, 3.08948, -17.9593)

View File

@@ -21,6 +21,7 @@ var dead_player = preload("res://assets/dead_cam.tscn")
const CLEARED_ANNOUNCE = preload("res://assets/cleared_announce.tscn") const CLEARED_ANNOUNCE = preload("res://assets/cleared_announce.tscn")
const DEAD_ANNOUNCE = preload("res://assets/dead_announce.tscn") const DEAD_ANNOUNCE = preload("res://assets/dead_announce.tscn")
var paused = false
var health = start_health var health = start_health
var pickups = [] var pickups = []
var held_guns = [] var held_guns = []
@@ -36,6 +37,7 @@ var last_hit : Node
var respawn_position var respawn_position
var respawn_cam_rotation var respawn_cam_rotation
var respawn_rot var respawn_rot
var engine_time_scale_cache : float = 1.0
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
@@ -86,7 +88,9 @@ func _ready():
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta): func _process(_delta):
pass #quit game and eventually go to menu
if Input.is_action_just_pressed("escape"):
pause_menu()
@@ -141,6 +145,7 @@ func die():
get_tree().get_root().add_child(instance_dead) get_tree().get_root().add_child(instance_dead)
instance_dead.camera.current = true instance_dead.camera.current = true
player.dead = true player.dead = true
player.toggle_hud(true)
player.gun.visible = false player.gun.visible = false
player.crosshair.visible = false player.crosshair.visible = false
@@ -151,3 +156,21 @@ func pickup_spawn():
#var item_name = item_type[1][0] #var item_name = item_type[1][0]
item_spawn.rand_amt = randi_range(25,100) item_spawn.rand_amt = randi_range(25,100)
return item_spawn return item_spawn
func pause_menu():
if paused:
Engine.time_scale = engine_time_scale_cache
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
player.toggle_hud(true)
player.pause_menu.hide()
else:
engine_time_scale_cache = Engine.time_scale
Engine.time_scale = 0
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
player.toggle_hud(false)
player.pause_menu.show()
paused = !paused
func save_quit():
get_tree().quit()

View File

@@ -1,4 +1,4 @@
extends Node3D extends RigidBody3D
var bullet_speed var bullet_speed
var bullet_drop var bullet_drop
@@ -9,75 +9,63 @@ var bullet_force_mod = 1.0
var distance_from_player var distance_from_player
var player_position var player_position
var player_velocity var player_velocity
var bullet_active = true
@onready var mesh = $gunbullet1 @onready var mesh = $Cylinder
@onready var ray = $RayCast3D
@onready var particles = $GPUParticles3D @onready var particles = $GPUParticles3D
@onready var enemy_particles = $GPUParticlesEnemy @onready var enemy_particles = $GPUParticlesEnemy
@onready var timer = $Timer
@onready var gunbullet1 = $gunbullet1/Cylinder
@onready var hit_indicator = $Audio/HitIndicator @onready var hit_indicator = $Audio/HitIndicator
@onready var ray: RayCast3D = $RayCast3D
var rng = RandomNumberGenerator.new()
var av_x
var av_y
var av_z
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
#apply random rotation
av_x = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt))
av_y = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt))
av_z = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt))
rotation += Vector3(av_x,av_y,av_z)
timer.start()
visible = false visible = false
ray.target_position.z *= (bullet_speed/150) linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed)
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta): func _physics_process(delta):
position += transform.basis * Vector3(0, 0, -bullet_speed) * delta
rotation.x = clamp(rotation.x - delta * bullet_drop,deg_to_rad(-90),deg_to_rad(90)) angular_velocity = Vector3(0,0,0)
distance_from_player = abs(self.global_position - player_position) distance_from_player = abs(self.global_position - player_position)
if distance_from_player.x > 2 or distance_from_player.y > 2 or distance_from_player.z > 2: if distance_from_player.length() > 1.5:
visible = true visible = true
func _on_body_entered(body: Node) -> void:
if !body.is_in_group("player") and bullet_active:
if ray.is_colliding() and !ray.get_collider().is_in_group("player"): print("BODY HIT - " + str(body))
#Break Breakable Objects
if body.is_in_group("breakable"):
body.breaking(linear_velocity)
if body.is_in_group("switch"):
body.hit()
if ray.is_colliding() and !ray.get_collider().is_in_group("player"):
#Bullet Hole Effect
ray.get_collider().add_child(instance_bullethole)
instance_bullethole.global_transform.origin = ray.get_collision_point()
if (abs(ray.get_collision_normal().y) > 0.99):
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal(), Vector3(0,0,1))
else:
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal())
#Hit Enemies
if ray.get_collider().is_in_group("enemy_target"):
hit_indicator.play()
enemy_particles.emitting = true
SignalBus.emit_signal("enemy_hit")
ray.get_collider().hit(bullet_damage)
mesh.visible = false mesh.visible = false
ray.enabled = false bullet_active = false
particles.emitting = true
#bullethole effect await get_tree().create_timer(1).timeout
ray.get_collider().add_child(instance_bullethole)
instance_bullethole.global_transform.origin = ray.get_collision_point()
if (abs(ray.get_collision_normal().y) > 0.99):
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal(), Vector3(0,0,1))
else:
instance_bullethole.look_at(ray.get_collision_point() + ray.get_collision_normal())
#move rigidbodies
if ray.get_collider().is_in_group("scene_rigidbody"):
ray.get_collider().linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod)
if ray.get_collider().is_in_group("breakable"):
var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod)
ray.get_collider().breaking(current_velocity)
if ray.get_collider().is_in_group("enemy_target"):
hit_indicator.play()
enemy_particles.emitting = true
ray.get_collider().hit(bullet_damage)
if ray.get_collider().is_in_group("switch"):
ray.get_collider().hit()
await get_tree().create_timer(1.0).timeout
queue_free() queue_free()

View File

@@ -1,5 +1,7 @@
extends Node3D extends Node3D
const recoil_amount : Vector3 = Vector3(.5,.1,.1)
var bullet_speed var bullet_speed
var bullet_drop var bullet_drop
var random_spread_amt var random_spread_amt
@@ -42,7 +44,10 @@ func _process(delta):
if ray.is_colliding() and ray.get_collider() != null: if ray.is_colliding() and ray.get_collider() != null:
if ray.get_collider().is_in_group("player"): if ray.get_collider().is_in_group("player"):
var player = ray.get_collider() var player = ray.get_collider()
var snap_amount = 10
var speed_amount = 10
player.level_control.health -= bullet_damage player.level_control.health -= bullet_damage
player.recoil.add_recoil(recoil_amount,snap_amount,speed_amount)
if player.level_control.health <= bullet_damage: if player.level_control.health <= bullet_damage:
player.level_control.last_hit = fired_by player.level_control.last_hit = fired_by

View File

@@ -73,14 +73,7 @@ func _process(delta):
camera.fov = lerp(camera.fov, 40.0, delta * 5) camera.fov = lerp(camera.fov, 40.0, delta * 5)
elif respawn == true: elif respawn == true:
position = lerp(position,respawn_position,delta * MOVE_SPEED) animation_player.play("whiteout")
camera.global_transform.basis = lerp(camera.global_transform.basis,respawn_rotation,delta * CAMERA_LOOK_SPEED * 1.5)
camera.fov = lerp(camera.fov, respawn_fov, delta * 10)
if global_position.distance_to(respawn_position) <= .5:
animation_player.play("whiteout")
if Input.is_action_just_pressed("escape"):
get_tree().quit()
func _on_timer_timeout(): func _on_timer_timeout():

View File

@@ -11,6 +11,7 @@ var taunts = ["hows your gut now you big cup of dumdum juice?",
"hee hee", "hee hee",
"stop trying", "stop trying",
"you got hit with my bullet", "you got hit with my bullet",
"try dodging it next time",
"yowza!"] "yowza!"]
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.

View File

@@ -104,14 +104,14 @@ func shoot(delta):
instance_bullet.bullet_force_mod = bullet_force_mod instance_bullet.bullet_force_mod = bullet_force_mod
instance_bullet.instance_bullethole = bullethole.instantiate() instance_bullet.instance_bullethole = bullethole.instantiate()
instance_bullet.player_position = player.global_position instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet) get_tree().current_scene.add_child(instance_bullet)
# Casing transform # Casing transform
var instance_casing = casing.instantiate() var instance_casing = casing.instantiate()
instance_casing.position = casing_ejector.global_position instance_casing.position = casing_ejector.global_position
instance_casing.transform.basis = casing_ejector.global_transform.basis instance_casing.transform.basis = casing_ejector.global_transform.basis
get_tree().get_root().add_child(instance_casing) get_tree().get_root().add_child(instance_casing)
player.recoil.add_recoil(recoil_amount) player.recoil.add_recoil(recoil_amount,10,10)
if fire_mode != 0: if fire_mode != 0:
cycle_count -= 1 cycle_count -= 1

20
scripts/pause_menu.gd Normal file
View File

@@ -0,0 +1,20 @@
extends Control
@onready var level_control = get_tree().current_scene
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
visible = false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_resume_pressed() -> void:
level_control.pause_menu()
func _on_save__quit_pressed() -> void:
level_control.save_quit()

View File

@@ -8,7 +8,7 @@ const LAND_CAMERA_TILT : Vector3 = Vector3(-1,0,0)
const WALK_SPEED = 12.0 const WALK_SPEED = 12.0
const SPRINT_SPEED = 15.0 const SPRINT_SPEED = 15.0
const DASH_SPEED = 40 const DASH_SPEED = 40
const SLOWSPEED = .2 const SLOWSPEED = .15
const STAMINA_DRAIN = 100 const STAMINA_DRAIN = 100
var speed var speed
@@ -51,6 +51,7 @@ var start_sensitivity
var gun : Node var gun : Node
@onready var pause_menu: Control = $Head/Recoil/Camera3D/PauseMenu
@onready var gun_ray = $Head/Recoil/Camera3D/GunRay @onready var gun_ray = $Head/Recoil/Camera3D/GunRay
@onready var level_control = get_tree().current_scene @onready var level_control = get_tree().current_scene
@onready var interact_ray = $Head/Recoil/Camera3D/InteractRay @onready var interact_ray = $Head/Recoil/Camera3D/InteractRay
@@ -72,6 +73,7 @@ var gun_fire_pitch_starting
var current_weapon_index var current_weapon_index
var recoiling = false var recoiling = false
var dead = false var dead = false
var hud_visible : bool = true
# Slow Down Variables # Slow Down Variables
var remaining_stamina = MAX_STAMINA var remaining_stamina = MAX_STAMINA
@@ -83,6 +85,7 @@ var dead_announce = load("res://assets/dead_announce.tscn")
var pickupmsg var pickupmsg
@onready var crosshair = $Head/Recoil/Camera3D/Crosshair @onready var crosshair = $Head/Recoil/Camera3D/Crosshair
@onready var hitmarker: TextureRect = $Head/Recoil/Camera3D/Hitmarker
@onready var head = $Head @onready var head = $Head
@onready var camera = $Head/Recoil/Camera3D @onready var camera = $Head/Recoil/Camera3D
@onready var world_environment = $"../WorldEnvironment" @onready var world_environment = $"../WorldEnvironment"
@@ -101,10 +104,13 @@ var pickupmsg
@onready var flashlight_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/WeaponHolder/FlashlightButton @onready var flashlight_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/WeaponHolder/FlashlightButton
@onready var kick_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/Audio/Kick @onready var kick_audio: AudioStreamPlayer3D = $Head/Recoil/Camera3D/Audio/Kick
@onready var weapon_pickup_audio: AudioStreamPlayer = $Audio/WeaponPickup @onready var weapon_pickup_audio: AudioStreamPlayer = $Audio/WeaponPickup
@onready var crt_filter: ColorRect = $Head/Recoil/Camera3D/crtFilter
func _ready(): func _ready():
SignalBus.enemy_hit.connect(enemy_hit)
weapon_holder_start_rot = weapon_holder.rotation weapon_holder_start_rot = weapon_holder.rotation
weapon_holder_start_pos = weapon_holder.position weapon_holder_start_pos = weapon_holder.position
@@ -121,15 +127,23 @@ func _ready():
AudioServer.set_bus_volume_db(0,-80) AudioServer.set_bus_volume_db(0,-80)
func _input(event) -> void: func _input(event) -> void:
if event is InputEventMouseMotion:
self.rotate_y(-event.relative.x * SENSITIVITY) if !level_control.paused:
head.rotate_x(-event.relative.y * SENSITIVITY) if event is InputEventMouseMotion:
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-90), deg_to_rad(85)) self.rotate_y(-event.relative.x * SENSITIVITY)
mouse_input = event.relative head.rotate_x(-event.relative.y * SENSITIVITY)
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-90), deg_to_rad(85))
mouse_input = event.relative
else:
if event is InputEventMouseMotion:
self.rotate_y(event.relative.x * .00001)
head.rotate_x(event.relative.y * .00001)
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-90), deg_to_rad(85))
mouse_input = event.relative
func _physics_process(delta): func _physics_process(delta):
if !dead: if !dead and !level_control.paused:
# Add the gravity. # Add the gravity.
if is_on_floor(): if is_on_floor():
@@ -200,44 +214,46 @@ func _physics_process(delta):
#initiate fast movement -- may be done with this block #initiate fast movement -- may be done with this block
#change sounds with speed #change sounds with speed
if moving_fast: if moving_fast:
var wind_volume = clamp( velocity.length() - 20 ,-20,10) var wind_volume = clamp( velocity.length() - 20 ,-80,10)
ear_wind.volume_db = wind_volume ear_wind.volume_db = wind_volume
#reset at apex #reset at apex
#cache fastest speed #cache fastest speed
if abs(velocity.y) > moving_fast_top_speed: if abs(velocity.y) > moving_fast_top_speed:
moving_fast_top_speed = abs(velocity.y) moving_fast_top_speed = abs(velocity.y)
#print("TOP SPEED = " + str(moving_fast_top_speed))
#Land Sound #Land Sound
if velocity.y < .1 and self.is_on_floor() and moving_fast == true: if velocity.y < .1 and self.is_on_floor() and moving_fast == true:
print("LAND SOUND")
var land_volume = clamp( moving_fast_top_speed - 20 ,-10,0) var land_volume = clamp( moving_fast_top_speed - 20 ,-10,0)
var recoil_amount = Vector3(-.3,0,0)
land_sound.volume_db = land_volume land_sound.volume_db = land_volume
land_sound.play() land_sound.play()
recoil.add_recoil(recoil_amount,10,2)
moving_fast_top_speed = 0.0 moving_fast_top_speed = 0.0
moving_fast = false moving_fast = false
# Game Speed # Game Speed
if Input.is_action_pressed("slow_down") and remaining_stamina >0: if !level_control.paused:
Engine.time_scale = lerp(0, 1, SLOWSPEED) if Input.is_action_pressed("slow_down") and remaining_stamina >0:
gun.random_spread_amt = 0 Engine.time_scale = lerp(0, 1, SLOWSPEED)
AudioServer.set_bus_effect_enabled(0,0,true) gun.random_spread_amt = 0
camera.fov = lerp(camera.fov, camera.fov * gun.fov_zoom_amt, delta * 100) AudioServer.set_bus_effect_enabled(0,0,true)
if sensitivity_shift == true: camera.fov = lerp(camera.fov, camera.fov * gun.fov_zoom_amt, delta * 100)
SENSITIVITY = lerp(SENSITIVITY, SENSITIVITY * .998, delta * 100) if sensitivity_shift == true:
if remaining_stamina >0: SENSITIVITY = lerp(SENSITIVITY, SENSITIVITY * .998, delta * 100)
remaining_stamina -= 1000 * delta if remaining_stamina >0:
else: remaining_stamina -= 1000 * delta
Engine.time_scale = 1 else:
gun.random_spread_amt = gun.random_spread_start Engine.time_scale = 1
AudioServer.set_bus_effect_enabled(0,0,false) gun.random_spread_amt = gun.random_spread_start
if sensitivity_shift == true: AudioServer.set_bus_effect_enabled(0,0,false)
camera.fov = lerp(camera.fov, BASE_FOV, delta * .5) if sensitivity_shift == true:
SENSITIVITY = start_sensitivity camera.fov = lerp(camera.fov, BASE_FOV, delta * .5)
if remaining_stamina < MAX_STAMINA: SENSITIVITY = start_sensitivity
remaining_stamina += STAMINA_DRAIN * delta if remaining_stamina < MAX_STAMINA:
elif remaining_stamina > MAX_STAMINA * 1.01: remaining_stamina += STAMINA_DRAIN * delta
remaining_stamina -= (STAMINA_DRAIN)/2 * delta elif remaining_stamina > MAX_STAMINA * 1.01:
remaining_stamina -= (STAMINA_DRAIN)/2 * delta
# Reloading # Reloading
if Input.is_action_just_pressed("reload"): if Input.is_action_just_pressed("reload"):
@@ -283,6 +299,22 @@ func _physics_process(delta):
gun.anim_player.play("swap_out") gun.anim_player.play("swap_out")
level_control.gun_spawn(level_control.current_gun_index - 1) level_control.gun_spawn(level_control.current_gun_index - 1)
# Weapon Swap Number 1
if Input.is_action_just_pressed("numb_1") and !gun.anim_player.is_playing():
weapon_select(0)
if Input.is_action_just_pressed("numb_2") and !gun.anim_player.is_playing():
weapon_select(1)
if Input.is_action_just_pressed("numb_3") and !gun.anim_player.is_playing():
weapon_select(2)
if Input.is_action_just_pressed("numb_4") and !gun.anim_player.is_playing():
weapon_select(3)
if Input.is_action_just_pressed("numb_5") and !gun.anim_player.is_playing():
weapon_select(4)
#interact button #interact button
if Input.is_action_just_pressed("interact"): if Input.is_action_just_pressed("interact"):
@@ -299,9 +331,7 @@ func _physics_process(delta):
kick_audio.play() kick_audio.play()
interact_ray.get_collider().linear_velocity += transform.basis * Vector3(0,0,-KICK_AMOUNT) interact_ray.get_collider().linear_velocity += transform.basis * Vector3(0,0,-KICK_AMOUNT)
#quit game and eventually go to menu
if Input.is_action_just_pressed("escape"):
get_tree().quit()
if level_control.health <= 0: if level_control.health <= 0:
level_control.die() level_control.die()
@@ -347,8 +377,8 @@ func weapon_tilt(input_x, delta):
func weapon_sway(delta): func weapon_sway(delta):
mouse_input = lerp(mouse_input, Vector2.ZERO, 10 * delta) mouse_input = lerp(mouse_input, Vector2.ZERO, 10 * delta)
weapon_holder.rotation.x = lerp(weapon_holder.rotation.x, mouse_input.y * weapon_sway_amount, 10 * delta) weapon_holder.rotation.x = lerp(weapon_holder.rotation.x, mouse_input.y * weapon_sway_amount, 5 * delta)
weapon_holder.rotation.y = lerp(weapon_holder.rotation.y, mouse_input.x * weapon_sway_amount, 10 * delta) weapon_holder.rotation.y = lerp(weapon_holder.rotation.y, mouse_input.x * weapon_sway_amount, 5 * delta)
func weapon_bob(vel : float, delta): func weapon_bob(vel : float, delta):
if weapon_holder: if weapon_holder:
@@ -361,5 +391,22 @@ func weapon_bob(vel : float, delta):
weapon_holder.position.y = lerp(weapon_holder.position.y, def_weapon_holder_pos.y, .1 * delta) weapon_holder.position.y = lerp(weapon_holder.position.y, def_weapon_holder_pos.y, .1 * delta)
weapon_holder.position.x = lerp(weapon_holder.position.x, def_weapon_holder_pos.x, .1 * delta) weapon_holder.position.x = lerp(weapon_holder.position.x, def_weapon_holder_pos.x, .1 * delta)
func weapon_recoil(): func weapon_select(gun_id):
pass if level_control.held_guns.size() >= (gun_id + 1) and level_control.current_gun_index != gun_id:
gun.anim_player.play("swap_out")
level_control.gun_spawn(gun_id)
func enemy_hit():
hitmarker.visible = true
await get_tree().create_timer(.1).timeout
hitmarker.visible = false
func toggle_hud(hud_on):
if dead:
crt_filter.visible = hud_on
else:
crosshair.visible = hud_on
ammo_counter.visible = hud_on
stamina_counter.visible = hud_on

View File

@@ -1,8 +1,7 @@
extends Node3D extends Node3D
var recoil_amount : Vector3 = Vector3(.1,0,0)
var snap_amount : float = 10 var snap_amount : float = 10
var speed : float = 4 var speed : float = 10
var current_rotation : Vector3 var current_rotation : Vector3
var target_rotation : Vector3 var target_rotation : Vector3
@@ -17,9 +16,15 @@ func _process(delta: float) -> void:
current_rotation = lerp(current_rotation, target_rotation, snap_amount * delta) current_rotation = lerp(current_rotation, target_rotation, snap_amount * delta)
basis = Quaternion.from_euler(current_rotation) basis = Quaternion.from_euler(current_rotation)
func add_recoil(recoil_amount) -> void: func add_recoil(recoil_amount,snap_change,speed_change) -> void:
#set to provided snap/speed changes
snap_amount = snap_change
speed = speed_change
#vertical recoil and random L+R recoil within given range
var recoil_x = recoil_amount.x var recoil_x = recoil_amount.x
var recoil_y = randf_range(-recoil_amount.y,recoil_amount.y) var recoil_y = randf_range(-recoil_amount.y,recoil_amount.y)
var recoil_z = randf_range(-recoil_amount.z,recoil_amount.z) var recoil_z = randf_range(-recoil_amount.z,recoil_amount.z)
#add to target rotation
target_rotation += Vector3(recoil_x, recoil_y, recoil_z) target_rotation += Vector3(recoil_x, recoil_y, recoil_z)

View File

@@ -11,6 +11,7 @@ var cycle_count
@export_enum("Auto", "Single", "Burst") var fire_mode: int @export_enum("Auto", "Single", "Burst") var fire_mode: int
@export var fov_zoom_amt = .98 @export var fov_zoom_amt = .98
@export var recoil_amount : Vector3 = Vector3(1,.1,.1) @export var recoil_amount : Vector3 = Vector3(1,.1,.1)
@export var recoil_speed_change : float = 4
@export var max_ammo = 15 @export var max_ammo = 15
@export var start_mags = 3 @export var start_mags = 3
@export var bullet_damage = 1 @export var bullet_damage = 1
@@ -153,9 +154,10 @@ func fire(delta):
instance_bullet.random_spread_amt = random_spread_amt instance_bullet.random_spread_amt = random_spread_amt
instance_bullet.bullet_force_mod = bullet_force_mod instance_bullet.bullet_force_mod = bullet_force_mod
instance_bullet.player_position = player.global_position instance_bullet.player_position = player.global_position
instance_bullet.player_velocity = player.velocity
instance_bullet.instance_bullethole = bullethole.instantiate() instance_bullet.instance_bullethole = bullethole.instantiate()
get_tree().get_root().add_child(instance_bullet) get_tree().get_root().add_child(instance_bullet)
player.recoil.add_recoil(recoil_amount) player.recoil.add_recoil(recoil_amount,10,recoil_speed_change)
chamber.rotate_object_local(Vector3(0,-1,0),deg_to_rad(60)) chamber.rotate_object_local(Vector3(0,-1,0),deg_to_rad(60))
func reload(delta): func reload(delta):

View File

@@ -14,7 +14,7 @@ var player_position
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed) + player_velocity linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed)
blast_radius = radius_shape.shape.radius blast_radius = radius_shape.shape.radius
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
@@ -55,6 +55,7 @@ func explode():
body.linear_velocity += blast_velocity body.linear_velocity += blast_velocity
if body.is_in_group("player"): if body.is_in_group("player"):
body.velocity += clamp(blast_velocity,Vector3(-7,-7,-7),Vector3(7,7,7)) body.velocity += clamp(blast_velocity,Vector3(-7,-7,-7),Vector3(7,7,7))
body.recoil.add_recoil(Vector3(1,.1,.1),10,10)
if body.is_in_group("enemy"): if body.is_in_group("enemy"):
body.knocked = true body.knocked = true
body.stunned = true body.stunned = true

View File

@@ -100,7 +100,7 @@ func shoot(delta):
instance_bullet.blast_power = blast_power instance_bullet.blast_power = blast_power
instance_bullet.player_position = player.global_position instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet) get_tree().get_root().add_child(instance_bullet)
player.recoil.add_recoil(recoil_amount) player.recoil.add_recoil(recoil_amount,10,10)
if fire_mode != 0: if fire_mode != 0:
cycle_count -= 1 cycle_count -= 1

View File

@@ -2,3 +2,4 @@ extends Node
signal switch_changed() signal switch_changed()
signal switch_timeout() signal switch_timeout()
signal enemy_hit()