feat: integrate ChaffGames FPS template as local player controller

Replaces the overhead box-mesh view with a full FPS character:

- mouse look, WASD movement, jump (Space), crouch (C), sprint (Shift), lean (Q/E)

- 6 weapons (LMB shoot, R reload, scroll switch, F melee, G drop)

- Crosshair HUD, ammo counter, sprint bar

- Client sends position to server at 20Hz for multiplayer visibility

- Server broadcasts positions to all peers

- Remote players shown as boxes (placeholder)

source: https://godotengine.org/asset-library/asset/2652 (MIT license)
This commit is contained in:
2026-07-02 00:26:45 -04:00
parent f0c95dcfd2
commit ad48f38ca5
70 changed files with 5297 additions and 52 deletions
@@ -0,0 +1,25 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=3 format=3 uid="uid://ckwagka0u7opy"]
[ext_resource type="Script" uid="uid://ca7h24lxxrtvx" path="res://client/template/scripts/Weapon_State_Machine/weapon_resource.gd" id="1_2o2yi"]
[ext_resource type="PackedScene" uid="uid://6rfh1ejt4m6m" path="res://client/template/Spawnable_Objects/Projectiles_To_Load/melee_projectile.tscn" id="1_pf8fu"]
[resource]
script = ExtResource("1_2o2yi")
weapon_name = "MeleeWeapon"
pick_up_animation = "blasterP_activate"
shoot_animation = "blasterP_strike"
reload_animation = ""
change_animation = "blasterP_deactivate"
drop_animation = ""
out_of_ammo_animation = ""
melee_animation = "blasterP_strike"
has_ammo = false
magazine = 0
max_ammo = 0
damage = 2
melee_damage = 1.0
auto_fire = true
fire_range = 1
can_be_dropped = false
projectile_to_load = ExtResource("1_pf8fu")
incremental_reload = false
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="WeaponResource" format=3 uid="uid://yc1f2j7pl4vr"]
[ext_resource type="Script" uid="uid://ca7h24lxxrtvx" path="res://client/template/scripts/Weapon_State_Machine/weapon_resource.gd" id="1_jgxyc"]
[ext_resource type="PackedScene" uid="uid://dc48o4niy1mok" path="res://client/template/Spawnable_Objects/Projectiles_To_Load/basic_hitscan_projectile.tscn" id="1_l4j8x"]
[ext_resource type="PackedScene" uid="uid://cvbk5bxenpxey" path="res://client/template/Spawnable_Objects/Weapons/blaster_I.tscn" id="3_y2nwe"]
[ext_resource type="PackedScene" uid="uid://ciu0xkaw0ioef" path="res://client/template/Spawnable_Objects/SprayProfiles/spray_profile_1.tscn" id="4_xc0or"]
[resource]
script = ExtResource("1_jgxyc")
weapon_name = "blasterI"
pick_up_animation = "Global/blasterI Active"
shoot_animation = "Global/blasterI Shoot"
reload_animation = "Global/blasterI Reload"
change_animation = "Global/blasterI De-Activate"
drop_animation = "Global/blasterI Drop"
out_of_ammo_animation = "Global/blasterI OOA"
melee_animation = "Global/blasterI Melee"
magazine = 30
max_ammo = 60
damage = 10
melee_damage = 1.0
auto_fire = true
fire_range = 100
can_be_dropped = true
weapon_drop = ExtResource("3_y2nwe")
weapon_spray = ExtResource("4_xc0or")
projectile_to_load = ExtResource("1_l4j8x")
@@ -0,0 +1,29 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=5 format=3 uid="uid://bwrs8ensewkgc"]
[ext_resource type="PackedScene" uid="uid://bpxa3je174q43" path="res://client/template/Spawnable_Objects/Projectiles_To_Load/basic_rigid_body_projectile.tscn" id="1_1tllq"]
[ext_resource type="Script" uid="uid://ca7h24lxxrtvx" path="res://client/template/scripts/Weapon_State_Machine/weapon_resource.gd" id="2_gpxoe"]
[ext_resource type="PackedScene" uid="uid://gtthejj2wmyj" path="res://client/template/Spawnable_Objects/Weapons/blaster_n.tscn" id="3_5a5l8"]
[ext_resource type="PackedScene" uid="uid://3mb12hvruajh" path="res://client/template/Spawnable_Objects/SprayProfiles/spray_profile_2.tscn" id="4_p50xh"]
[resource]
script = ExtResource("2_gpxoe")
weapon_name = "blasterN"
pick_up_animation = "Global/blasterL Activate"
shoot_animation = "Global/blasterL Shoot"
reload_animation = "Global/blasterL Reload"
change_animation = "Global/blasterL De-Activate"
drop_animation = "Global/blasterL Drop"
out_of_ammo_animation = "Global/blasterL OOA"
melee_animation = "Global/blasterL Melee"
has_ammo = true
magazine = 30
max_ammo = 60
damage = 1
melee_damage = 1.0
auto_fire = true
fire_range = 100
can_be_dropped = true
weapon_drop = ExtResource("3_5a5l8")
weapon_spray = ExtResource("4_p50xh")
projectile_to_load = ExtResource("1_1tllq")
incremental_reload = false
@@ -0,0 +1,29 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=5 format=3 uid="uid://cd8msvjysh2uv"]
[ext_resource type="Script" uid="uid://ca7h24lxxrtvx" path="res://client/template/scripts/Weapon_State_Machine/weapon_resource.gd" id="1_4ro7h"]
[ext_resource type="PackedScene" uid="uid://brvfyahytwd8m" path="res://client/template/Spawnable_Objects/Projectiles_To_Load/shotgun_projectile.tscn" id="1_qi0jo"]
[ext_resource type="PackedScene" uid="uid://x8nhs2cer2to" path="res://client/template/Spawnable_Objects/Weapons/blaster_m.tscn" id="3_5hojr"]
[ext_resource type="PackedScene" uid="uid://ceuaamuau8pl8" path="res://client/template/Spawnable_Objects/SprayProfiles/spray_profile_3.tscn" id="4_5jfrh"]
[resource]
script = ExtResource("1_4ro7h")
weapon_name = "blasterM"
pick_up_animation = "blasterM_activate"
shoot_animation = "blasterM_Shoot"
reload_animation = "blasterM_Reload"
change_animation = "blasterM_Deactive"
drop_animation = "blasterM_Drop"
out_of_ammo_animation = "blasterM_OOA"
melee_animation = "blasterM_Melee"
has_ammo = true
magazine = 9
max_ammo = 36
damage = 5
melee_damage = 1.0
auto_fire = true
fire_range = 50
can_be_dropped = true
weapon_drop = ExtResource("3_5hojr")
weapon_spray = ExtResource("4_5jfrh")
projectile_to_load = ExtResource("1_qi0jo")
incremental_reload = true
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="WeaponResource" format=3 uid="uid://c1jg0ifn7yvve"]
[ext_resource type="Script" uid="uid://ca7h24lxxrtvx" path="res://client/template/scripts/Weapon_State_Machine/weapon_resource.gd" id="1_oxrhl"]
[ext_resource type="PackedScene" uid="uid://dc48o4niy1mok" path="res://client/template/Spawnable_Objects/Projectiles_To_Load/basic_hitscan_projectile.tscn" id="1_xr7bm"]
[ext_resource type="PackedScene" uid="uid://gtthejj2wmyj" path="res://client/template/Spawnable_Objects/Weapons/blaster_n.tscn" id="3_c38hr"]
[ext_resource type="PackedScene" uid="uid://3mb12hvruajh" path="res://client/template/Spawnable_Objects/SprayProfiles/spray_profile_2.tscn" id="4_rk8dx"]
[resource]
script = ExtResource("1_oxrhl")
weapon_name = "blaster_n"
pick_up_animation = "Global/blasterN Active"
shoot_animation = "Global/blasterN Shoot"
reload_animation = "Global/blasterN Reload"
change_animation = "Global/blasterN De-Activate"
drop_animation = "Global/blasterN Drop"
out_of_ammo_animation = "Global/blasterN OOA"
melee_animation = "Global/blasterN Melee"
magazine = 5
max_ammo = 15
damage = 1
melee_damage = 1.0
fire_range = 100
can_be_dropped = true
weapon_drop = ExtResource("3_c38hr")
weapon_spray = ExtResource("4_rk8dx")
projectile_to_load = ExtResource("1_xr7bm")
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=4 format=3 uid="uid://dgayjkjx4mckc"]
[ext_resource type="Script" uid="uid://ca7h24lxxrtvx" path="res://client/template/scripts/Weapon_State_Machine/weapon_resource.gd" id="1_321c1"]
[ext_resource type="PackedScene" uid="uid://ddfiivxgnakti" path="res://client/template/Spawnable_Objects/Projectiles_To_Load/rocket_launcher_projectile.tscn" id="1_xi5nj"]
[ext_resource type="PackedScene" uid="uid://dwgt7gwe3gfyy" path="res://client/template/Spawnable_Objects/Weapons/blasterQ.tscn" id="2_kih88"]
[resource]
script = ExtResource("1_321c1")
weapon_name = "blasterQ"
pick_up_animation = "Global/blasterQ Active"
shoot_animation = "Global/blasterQ Shoot"
reload_animation = "Global/blasterQ Reload"
change_animation = "Global/blasterQ Deactivate"
drop_animation = "Global/blasterQ Drop"
out_of_ammo_animation = "Global/blasterQ OOA"
melee_animation = "Global/blasterQ Melee"
has_ammo = true
magazine = 2
max_ammo = 6
damage = 20
melee_damage = 2.0
auto_fire = false
fire_range = 100
can_be_dropped = true
weapon_drop = ExtResource("2_kih88")
projectile_to_load = ExtResource("1_xi5nj")
incremental_reload = false