Renamed a bunch of player stuff to pawn stuff and implemented extensive work on getting single-address 'netplay' code working. Not sure if I've created issues with single player but in theory it should all transfer across as if the player is simply always the host.

This commit is contained in:
2026-01-08 07:15:20 -05:00
parent 9fe376e27e
commit ec02685065
69 changed files with 1525 additions and 708 deletions

View File

@@ -0,0 +1,355 @@
[gd_scene load_steps=34 format=3 uid="uid://c8xf3qawk5c6u"]
[ext_resource type="Script" uid="uid://bcs7ygh6s3l35" path="res://scripts/pawn_controller.gd" id="1_h27ep"]
[ext_resource type="Script" uid="uid://wye3mat5y5yg" path="res://scripts/pawn_body.gd" id="2_dn5ph"]
[ext_resource type="PackedScene" uid="uid://cfunlbp8arnlh" path="res://templates/bullet.tscn" id="3_pnc3q"]
[ext_resource type="Material" uid="uid://b8e84edfrnn1a" path="res://visuals/materials/pawn.tres" id="4_8twd3"]
[ext_resource type="AudioStream" uid="uid://b8ko5lwikj8ts" path="res://audio/sounds/Whoosh Blade 001.wav" id="5_77xwu"]
[ext_resource type="AudioStream" uid="uid://dufoyvysi4pa1" path="res://audio/sounds/Whoosh Blade 002.wav" id="6_fjlhr"]
[ext_resource type="AudioStream" uid="uid://boe6fidhl6ut5" path="res://audio/sounds/Whoosh Blade 003.wav" id="7_3ldvn"]
[ext_resource type="AudioStream" uid="uid://b3x0xqu8yrib4" path="res://audio/sounds/Whoosh Blade 004.wav" id="8_5bpar"]
[ext_resource type="AudioStream" uid="uid://1m2yfje18spo" path="res://audio/sounds/Whoosh Blade 005.wav" id="9_a4li3"]
[ext_resource type="AudioStream" uid="uid://c1j8hjmw45x86" path="res://audio/sounds/Hitech Shot A.wav" id="10_80lp4"]
[ext_resource type="AudioStream" uid="uid://dgftxjb34d2ph" path="res://audio/sounds/Hitech Shot B.wav" id="11_n15br"]
[ext_resource type="AudioStream" uid="uid://bguwdvatsf87l" path="res://audio/sounds/Hitech Shot C.wav" id="12_rtmky"]
[ext_resource type="AudioStream" uid="uid://cw31ymbqgqcq2" path="res://audio/sounds/sci-fi_weapon_reload_03.wav" id="13_bdfr7"]
[ext_resource type="Script" uid="uid://6w608y2grdqb" path="res://scripts/pawn_level_data.gd" id="14_ncd3b"]
[ext_resource type="AudioStream" uid="uid://cjrlb4qiy23sj" path="res://audio/sounds/impact_deep_thud_bounce_09.wav" id="15_rsl1q"]
[ext_resource type="AudioStream" uid="uid://blbk74d50ldut" path="res://audio/sounds/sci-fi_forcefield_hum_loop_02.wav" id="16_t8028"]
[ext_resource type="AudioStream" uid="uid://fqnkbcrbpi0s" path="res://audio/sounds/2 BROKEN - CK - BEAM Wood Ceiling Drop On Concrete.wav" id="17_o127k"]
[ext_resource type="AudioStream" uid="uid://cfq0pu0qxgb6u" path="res://audio/sounds/134688__otbtechno__bike-bell.wav" id="18_1x3g1"]
[ext_resource type="Texture2D" uid="uid://dmnwtwu5v4voh" path="res://visuals/images/icons/detect mark.png" id="19_5822g"]
[ext_resource type="AudioStream" uid="uid://cmnibhyxpag0a" path="res://audio/sounds/BeepBeep_high.wav" id="20_v7o58"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"]
next_pass = ExtResource("4_8twd3")
albedo_color = Color(0.08468992, 0.08468992, 0.08468992, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnbra"]
next_pass = ExtResource("4_8twd3")
albedo_color = Color(0, 1, 1, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_j3lta"]
size = Vector3(0.25, 0.6, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fifli"]
albedo_color = Color(1, 0.60701716, 0.54817975, 1)
emission_enabled = true
emission = Color(1, 0, 0, 1)
emission_energy_multiplier = 16.0
[sub_resource type="Animation" id="Animation_56qyi"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MeleeArea/HitShape:disabled")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MeleeArea/HitShape:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.6446533, 0.4691162, 0.6541977)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MeleeArea/HitShape:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0.76134753, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MeleeArea/HitShape:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_ofpku"]
resource_name = "melee"
length = 0.25
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MeleeArea/HitShape:disabled")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MeleeArea/HitShape:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.03333333, 0.1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0.6446533, 0.4691162, 0.6541977), Vector3(0.04156494, 0.4691162, 0.937973), Vector3(-0.645, 0.469, 0.654)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("MeleeArea/HitShape:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.03333333, 0.1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0.76134753, 0), Vector3(0, 0, 0), Vector3(0, -0.76096356, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("MeleeArea/HitShape:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/4/type = "method"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../MeleeSound")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [0.0],
"method": &"play"
}]
}
[sub_resource type="Animation" id="Animation_ac3v1"]
resource_name = "shoot"
length = 0.2
tracks/0/type = "method"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../RangedSound")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [0.0],
"method": &"play"
}]
}
tracks/1/type = "method"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../..")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.033333335),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"fire_ranged"
}]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ucins"]
_data = {
&"RESET": SubResource("Animation_56qyi"),
&"melee": SubResource("Animation_ofpku"),
&"shoot": SubResource("Animation_ac3v1")
}
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ghbft"]
streams_count = 5
stream_0/stream = ExtResource("5_77xwu")
stream_1/stream = ExtResource("6_fjlhr")
stream_2/stream = ExtResource("7_3ldvn")
stream_3/stream = ExtResource("8_5bpar")
stream_4/stream = ExtResource("9_a4li3")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_rclin"]
streams_count = 3
stream_0/stream = ExtResource("10_80lp4")
stream_1/stream = ExtResource("11_n15br")
stream_2/stream = ExtResource("12_rtmky")
[sub_resource type="ViewportTexture" id="ViewportTexture_yixtd"]
viewport_path = NodePath("PawnBody/Subviewport")
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_a5wj7"]
radius = 0.3
height = 1.0
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_h27ep"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
[node name="Player" type="CharacterBody3D" groups=["combat"]]
physics_interpolation_mode = 1
collision_layer = 2
collision_mask = 5
floor_constant_speed = true
floor_max_angle = 0.93549645
floor_snap_length = 1.0
script = ExtResource("1_h27ep")
speed = 3.0
[node name="PawnBody" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.425, 0)
script = ExtResource("2_dn5ph")
projectile_template = ExtResource("3_pnc3q")
[node name="Mesh" type="CSGBox3D" parent="PawnBody"]
size = Vector3(0.5, 0.85, 0.5)
material = SubResource("StandardMaterial3D_y646j")
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PawnBody/Mesh"]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0.21490532, 0.29997927)
radius = 0.15
height = 0.05
material = SubResource("StandardMaterial3D_lnbra")
[node name="MeleeArea" type="Area3D" parent="PawnBody/Mesh"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
collision_layer = 0
collision_mask = 2
[node name="HitShape" type="CollisionShape3D" parent="PawnBody/Mesh/MeleeArea"]
transform = Transform3D(0.723907, 0, 0.68989754, 0, 1, 0, -0.68989754, 0, 0.723907, 0.6446533, 0.4691162, 0.6541977)
visible = false
shape = SubResource("BoxShape3D_j3lta")
disabled = true
[node name="CSGBox3D" type="CSGBox3D" parent="PawnBody/Mesh/MeleeArea/HitShape"]
size = Vector3(0.1, 0.1, 1)
material = SubResource("StandardMaterial3D_fifli")
[node name="OmniLight3D" type="OmniLight3D" parent="PawnBody/Mesh/MeleeArea/HitShape/CSGBox3D"]
light_color = Color(1, 0, 0, 1)
light_energy = 1.137
[node name="AnimationPlayer" type="AnimationPlayer" parent="PawnBody/Mesh"]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_ucins")
}
[node name="RangedPoint" type="Node3D" parent="PawnBody/Mesh"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.4537468)
[node name="MeleeSound" type="AudioStreamPlayer3D" parent="PawnBody"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
stream = SubResource("AudioStreamRandomizer_ghbft")
[node name="RangedSound" type="AudioStreamPlayer3D" parent="PawnBody"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
stream = SubResource("AudioStreamRandomizer_rclin")
[node name="ReloadSound" type="AudioStreamPlayer3D" parent="PawnBody"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.425, 0)
stream = ExtResource("13_bdfr7")
[node name="Subviewport" type="SubViewport" parent="PawnBody"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
gui_disable_input = true
size = Vector2i(150, 60)
[node name="VBoxContainer" type="VBoxContainer" parent="PawnBody/Subviewport"]
offset_right = 40.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="PawnBody/Subviewport/VBoxContainer"]
layout_mode = 2
text = "Struggle to Escape!"
[node name="StruggleBar" type="ProgressBar" parent="PawnBody/Subviewport/VBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
max_value = 5.0
value = 5.0
show_percentage = false
[node name="StruggleUI" type="Sprite3D" parent="PawnBody"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.75085443, 0)
visible = false
billboard = 1
texture = SubResource("ViewportTexture_yixtd")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4665325, 0)
shape = SubResource("CapsuleShape3D_a5wj7")
[node name="Data" type="Node" parent="."]
script = ExtResource("14_ncd3b")
[node name="TrapSound" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("15_rsl1q")
[node name="FlingSound" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("16_t8028")
[node name="CrashSound" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("17_o127k")
[node name="AudioListener3D" type="AudioListener3D" parent="."]
current = true
[node name="DetectSound" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("18_1x3g1")
volume_db = -80.0
max_db = -11.464
[node name="DetectIcon" type="Sprite3D" parent="."]
transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 1.2337646, 0)
visible = false
billboard = 1
no_depth_test = true
texture = ExtResource("19_5822g")
[node name="DetonateSound" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("20_v7o58")
max_db = -7.0
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_h27ep")