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,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