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

@@ -1,12 +1,9 @@
[gd_scene load_steps=21 format=3 uid="uid://ck4x56txf676a"]
[gd_scene load_steps=13 format=3 uid="uid://ck4x56txf676a"]
[ext_resource type="Script" uid="uid://grs3nyom325o" path="res://scripts/character_select.gd" id="1_bow2h"]
[ext_resource type="Script" uid="uid://blljmwvft1g8m" path="res://scripts/pawn_display.gd" id="2_5wdeo"]
[ext_resource type="PackedScene" uid="uid://46rpw0rrd51m" path="res://templates/pawn_display.tscn" id="2_5wdeo"]
[ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="2_uxcyu"]
[ext_resource type="AudioStream" uid="uid://vcatohtmt8bk" path="res://audio/music/16 - Character Select.mp3" id="3_bow2h"]
[ext_resource type="Texture2D" uid="uid://lttjm6mhx2nx" path="res://visuals/images/chselector.png" id="3_uxcyu"]
[ext_resource type="Script" uid="uid://qwyhu0gexeah" path="res://scripts/cs_trap_display.gd" id="3_w1hxv"]
[ext_resource type="Script" uid="uid://cu7ho7656m6hp" path="res://scripts/pawn_selector.gd" id="6_5cdo8"]
[ext_resource type="AudioStream" uid="uid://cwmfd8ov3lj1h" path="res://audio/sounds/menu select.wav" id="7_bqp8h"]
[ext_resource type="AudioStream" uid="uid://doelc8yt5snc2" path="res://audio/sounds/Keypad A.wav" id="8_5cdo8"]
@@ -50,10 +47,10 @@ void fragment() {
//}
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_uxcyu"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_5wdeo"]
shader = SubResource("Shader_fa52j")
shader_parameter/granularity = 20.0000007125
shader_parameter/opacity_limit = 0.0
shader_parameter/granularity = 10.0000002375
shader_parameter/opacity_limit = 0.86
[sub_resource type="Gradient" id="Gradient_ak2if"]
offsets = PackedFloat32Array(0)
@@ -63,11 +60,6 @@ colors = PackedColorArray(0, 0, 0, 1)
gradient = SubResource("Gradient_ak2if")
width = 1
[sub_resource type="ShaderMaterial" id="ShaderMaterial_5wdeo"]
shader = SubResource("Shader_fa52j")
shader_parameter/granularity = 10.0000002375
shader_parameter/opacity_limit = 0.86
[sub_resource type="Gradient" id="Gradient_w1hxv"]
offsets = PackedFloat32Array(1)
colors = PackedColorArray(1, 1, 1, 1)
@@ -76,62 +68,6 @@ colors = PackedColorArray(1, 1, 1, 1)
gradient = SubResource("Gradient_w1hxv")
width = 1
[sub_resource type="Animation" id="Animation_fa52j"]
resource_name = "selecting"
length = 0.2667
loop_mode = 1
step = 0.0168
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0001, 0.13333334, 0.26666668),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1,
"values": [true, true, false, true]
}
[sub_resource type="Animation" id="Animation_5wdeo"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_w1hxv"]
resource_name = "selected"
step = 0.0168
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_bqp8h"]
_data = {
&"RESET": SubResource("Animation_5wdeo"),
&"selected": SubResource("Animation_w1hxv"),
&"selecting": SubResource("Animation_fa52j")
}
[node name="Control" type="Control"]
layout_mode = 3
anchors_preset = 15
@@ -141,6 +77,11 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_bow2h")
[node name="SelectorSpawner" type="MultiplayerSpawner" parent="."]
unique_name_in_owner = true
_spawnable_scenes = PackedStringArray("uid://bvypswoe6diaq")
spawn_path = NodePath("../Panel2/SelectorStart")
[node name="Panel" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
@@ -149,253 +90,31 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="P1PawnDisplay" type="Panel" parent="Panel"]
unique_name_in_owner = true
layout_mode = 1
[node name="Control" type="Control" parent="Panel"]
anchors_preset = 0
offset_left = 94.0
offset_top = 96.0
offset_right = 794.0
offset_bottom = 796.0
script = ExtResource("2_5wdeo")
[node name="TextureRect" type="TextureRect" parent="Panel/P1PawnDisplay"]
material = SubResource("ShaderMaterial_uxcyu")
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("GradientTexture1D_fa52j")
expand_mode = 1
[node name="Control" type="Control" parent="Panel/P1PawnDisplay"]
anchors_preset = 0
offset_left = 108.0
offset_top = 286.0
offset_right = 392.0
offset_bottom = 350.0
[node name="PawnName" type="Label" parent="Panel/P1PawnDisplay/Control"]
unique_name_in_owner = true
modulate = Color(0, 0.3254902, 1, 1)
layout_mode = 0
offset_left = 37.0
offset_top = 288.0
offset_right = 448.0
offset_bottom = 355.0
theme_override_font_sizes/font_size = 48
text = "NAME GOES HERE"
horizontal_alignment = 1
[node name="VBoxContainer" type="VBoxContainer" parent="Panel/P1PawnDisplay/Control"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -39.0
offset_top = 281.0
offset_right = 245.0
offset_bottom = 394.0
grow_horizontal = 2
grow_vertical = 0
[node name="Panel" type="PanelContainer" parent="Panel/P1PawnDisplay/Control/VBoxContainer"]
layout_mode = 2
[node name="TrapContainer" type="HBoxContainer" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel"]
unique_name_in_owner = true
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel/TrapContainer"]
custom_minimum_size = Vector2(92, 64)
layout_mode = 2
expand_mode = 1
script = ExtResource("3_w1hxv")
[node name="Label" type="Label" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel/TrapContainer/TextureRect"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "##"
horizontal_alignment = 2
[node name="TextureRect2" type="TextureRect" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel/TrapContainer"]
custom_minimum_size = Vector2(92, 64)
layout_mode = 2
expand_mode = 1
script = ExtResource("3_w1hxv")
[node name="Label" type="Label" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel/TrapContainer/TextureRect2"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "##"
horizontal_alignment = 2
[node name="TextureRect3" type="TextureRect" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel/TrapContainer"]
custom_minimum_size = Vector2(92, 64)
layout_mode = 2
expand_mode = 1
script = ExtResource("3_w1hxv")
[node name="Label" type="Label" parent="Panel/P1PawnDisplay/Control/VBoxContainer/Panel/TrapContainer/TextureRect3"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "##"
horizontal_alignment = 2
[node name="Panel2" type="Panel" parent="Panel"]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -794.0
offset_top = 98.0
offset_right = -94.0
offset_bottom = 798.0
grow_horizontal = 0
offset_right = 134.0
offset_bottom = 138.0
[node name="TextureRect" type="TextureRect" parent="Panel/Panel2"]
material = SubResource("ShaderMaterial_uxcyu")
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("GradientTexture1D_fa52j")
expand_mode = 1
[node name="Label" type="Label" parent="Panel/Panel2"]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -40.0
offset_bottom = 23.0
grow_horizontal = 0
theme_override_font_sizes/font_size = 24
text = "EASY"
[node name="Control" type="Control" parent="Panel/Panel2"]
anchors_preset = 0
offset_left = 108.0
offset_top = 286.0
offset_right = 392.0
offset_bottom = 350.0
[node name="Label" type="Label" parent="Panel/Panel2/Control"]
[node name="P1PawnDisplay" parent="Panel/Control" instance=ExtResource("2_5wdeo")]
unique_name_in_owner = true
layout_mode = 0
offset_left = 33.0
offset_top = 286.0
offset_right = 444.0
offset_bottom = 353.0
theme_override_colors/font_color = Color(1, 0, 0, 1)
theme_override_font_sizes/font_size = 48
text = "NAME GOES HERE"
horizontal_alignment = 1
offset_left = 0.0
offset_top = 0.0
offset_right = 700.0
offset_bottom = 700.0
[node name="VBoxContainer" type="VBoxContainer" parent="Panel/Panel2/Control"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -42.0
offset_top = 280.0
offset_right = 242.0
offset_bottom = 393.0
grow_horizontal = 2
grow_vertical = 0
[node name="P2PawnDisplay" parent="Panel/Control" instance=ExtResource("2_5wdeo")]
unique_name_in_owner = true
layout_mode = 0
offset_left = 1032.0
offset_top = 0.0
offset_right = 1732.0
offset_bottom = 700.0
[node name="Panel" type="PanelContainer" parent="Panel/Panel2/Control/VBoxContainer"]
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/Panel2/Control/VBoxContainer/Panel"]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer"]
custom_minimum_size = Vector2(92, 64)
layout_mode = 2
expand_mode = 1
[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer/TextureRect"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "##"
horizontal_alignment = 2
[node name="TextureRect2" type="TextureRect" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer"]
custom_minimum_size = Vector2(92, 64)
layout_mode = 2
expand_mode = 1
[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer/TextureRect2"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "##"
horizontal_alignment = 2
[node name="TextureRect3" type="TextureRect" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer"]
custom_minimum_size = Vector2(92, 64)
layout_mode = 2
expand_mode = 1
[node name="Label" type="Label" parent="Panel/Panel2/Control/VBoxContainer/Panel/HBoxContainer/TextureRect3"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
grow_horizontal = 0
grow_vertical = 0
text = "##"
horizontal_alignment = 2
[node name="PawnName" parent="Panel/Control/P2PawnDisplay/Control" index="0"]
modulate = Color(0.78848296, 0, 0.22455063, 1)
[node name="Panel2" type="Panel" parent="."]
custom_minimum_size = Vector2(0, 250)
@@ -743,23 +462,6 @@ offset_top = 40.0
offset_right = 478.0
offset_bottom = 80.0
[node name="Selector" type="TextureRect" parent="Panel2"]
unique_name_in_owner = true
texture_filter = 1
layout_mode = 0
offset_left = 438.0
offset_top = 40.0
offset_right = 608.0
offset_bottom = 210.0
texture = ExtResource("3_uxcyu")
script = ExtResource("6_5cdo8")
[node name="AnimationPlayer" type="AnimationPlayer" parent="Panel2/Selector"]
libraries = {
&"": SubResource("AnimationLibrary_bqp8h")
}
autoplay = "selecting"
[node name="Panel3" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 10
@@ -795,3 +497,9 @@ stream = ExtResource("7_bqp8h")
[node name="SwitchSound" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("8_5cdo8")
[connection signal="spawned" from="SelectorSpawner" to="." method="_on_selector_spawner_spawned"]
[connection signal="child_entered_tree" from="Panel2/SelectorStart" to="." method="_on_selector_start_child_entered_tree"]
[editable path="Panel/Control/P1PawnDisplay"]
[editable path="Panel/Control/P2PawnDisplay"]

View File

@@ -3,7 +3,7 @@
[ext_resource type="Script" uid="uid://dep7nr2nkdmga" path="res://scripts/multiplayer_setup.gd" id="1_lckj3"]
[node name="MultiplayerSetup" type="MultiplayerSpawner" groups=["level_spawner"]]
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs")
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs", "uid://ck4x56txf676a")
spawn_path = NodePath(".")
script = ExtResource("1_lckj3")

File diff suppressed because one or more lines are too long

10
scenes/net_test.tscn Normal file
View File

@@ -0,0 +1,10 @@
[gd_scene load_steps=2 format=3 uid="uid://biha5f6hrjils"]
[ext_resource type="Script" uid="uid://dk2gtt380ld51" path="res://scripts/net_test.gd" id="1_x15u5"]
[node name="NetTest" type="MultiplayerSpawner" groups=["level_spawner"]]
_spawnable_scenes = PackedStringArray("uid://ti65jukt8gvs", "uid://ck4x56txf676a", "uid://by6suwmds7xq2")
spawn_path = NodePath(".")
script = ExtResource("1_x15u5")
[connection signal="spawned" from="." to="." method="_on_level_spawned"]

View File

@@ -1,18 +1,14 @@
[gd_scene load_steps=9 format=3 uid="uid://by6suwmds7xq2"]
[gd_scene load_steps=6 format=3 uid="uid://by6suwmds7xq2"]
[ext_resource type="Script" uid="uid://d3t381vws7vns" path="res://scripts/test_level.gd" id="1_qcd3b"]
[ext_resource type="Script" uid="uid://d3t381vws7vns" path="res://scripts/level.gd" id="1_qcd3b"]
[ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="1_x4b8f"]
[ext_resource type="Script" uid="uid://cymi1n4gavixy" path="res://scripts/level_camera.gd" id="3_qcd3b"]
[ext_resource type="Script" uid="uid://clqnjqolkujea" path="res://scripts/combat_target.gd" id="6_qcd3b"]
[ext_resource type="MeshLibrary" uid="uid://bhpyvhf36jl0f" path="res://testing.tres" id="7_88ety"]
[ext_resource type="MeshLibrary" uid="uid://cvhm40o2uw5mr" path="res://testing markers.tres" id="7_ahbqi"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_qcd3b"]
frequency = 0.02
fractal_octaves = 6
[sub_resource type="BoxShape3D" id="BoxShape3D_tmr53"]
size = Vector3(1, 2, 1)
[sub_resource type="Environment" id="Environment_x4b8f"]
ambient_light_color = Color(1, 1, 1, 1)
ambient_light_energy = 2.18
glow_enabled = true
[node name="Node3D" type="Node3D"]
script = ExtResource("1_qcd3b")
@@ -23,18 +19,6 @@ layer = 1000
[node name="HUD" parent="CanvasLayer" instance=ExtResource("1_x4b8f")]
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.49999997, 0.86602545, 0, -0.86602545, 0.49999997, 0, 18.855, 10.107289)
projection = 1
size = 5.0
script = ExtResource("3_qcd3b")
noise = SubResource("FastNoiseLite_qcd3b")
[node name="OmniLight3D" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0)
omni_range = 25.142
omni_attenuation = -0.165
[node name="Floor" type="GridMap" parent="."]
unique_name_in_owner = true
mesh_library = ExtResource("7_88ety")
@@ -67,14 +51,26 @@ collision_layer = 0
collision_mask = 0
metadata/_editor_floor_ = Vector3(0, -1, 0)
[node name="Combat Target" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.926114, 0, -4.1967854)
script = ExtResource("6_qcd3b")
[node name="PawnSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("uid://c8xf3qawk5c6u")
spawn_path = NodePath("../Pawns")
[node name="CSGBox3D" type="CSGBox3D" parent="Combat Target"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
size = Vector3(1, 2, 1)
[node name="TrapSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("uid://bk3yqawritfnj")
spawn_path = NodePath("../Traps")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Combat Target" groups=["combat"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("BoxShape3D_tmr53")
[node name="CameraSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("uid://cqa0p34mbk6so")
spawn_path = NodePath("../Cameras")
[node name="Pawns" type="Node3D" parent="."]
unique_name_in_owner = true
[node name="Cameras" type="Node3D" parent="."]
unique_name_in_owner = true
[node name="Traps" type="Node3D" parent="."]
unique_name_in_owner = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_x4b8f")

View File

@@ -279,7 +279,7 @@ layout_mode = 0
offset_right = 1152.0
offset_bottom = 648.0
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
[node name="Music" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_mykxm")
autoplay = true
@@ -316,6 +316,7 @@ clip_text = true
text_overrun_behavior = 1
[node name="TextureRect4" type="TextureRect" parent="."]
visible = false
material = SubResource("ShaderMaterial_lrxh4")
layout_mode = 0
offset_right = 1920.0