feat: player animation quality pass — aim follow, reload/throw, recoil
Third-person player characters now animate every action with readable intent (all networked, cel style preserved): - Look-around: upper body follows the owner's camera pitch — distributed over spine/neck/head so aiming up/down reads on the whole silhouette (driven by the already-synced HeadPivot rotation on remotes) - Reload: the baked PistolReload clip plays as a one-shot whenever the equipped weapon starts reloading (local edge-detect poll -> new synced action counter replays it on every peer) - Grenade throw: new Throw clip baked from the library's overhead swing (Sword_Attack retarget); triggers on throw, synced the same way - Shot recoil: visible kick on the shooter's model (shoulders snap back, forearms rise, fast decay) driven by the existing fire-effects RPC — remote players' shots now look like shots - Slide: trailing arm braces against the ground for balance on top of the feet-first pose - Armed idle confirmed in capture: weapon held at ready, not arms-down Plumbing: synced_action/synced_action_seq added to all three player spawners' replication configs; ACTIONS table on the model maps names to clips + lock times. Verified: 18 clips resolve (incl Throw), smoke 0 failures, movement 11/11, acoustics PASSED; third-person run + armed idle captures clean. Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Fable 5
parent
5224a455a6
commit
7920aecec5
@@ -295,6 +295,8 @@ func _spawn_player(pid: int) -> CharacterBody3D:
|
||||
client_rep_config.add_property(":synced_loadout_sp")
|
||||
client_rep_config.add_property(":synced_loadout_melee")
|
||||
client_rep_config.add_property(":synced_loadout_ready")
|
||||
client_rep_config.add_property(":synced_action")
|
||||
client_rep_config.add_property(":synced_action_seq")
|
||||
client_rep_config.add_property(":synced_is_targeting")
|
||||
client_rep_config.add_property(":synced_homing_target_pos")
|
||||
client_sync.replication_config = client_rep_config
|
||||
|
||||
@@ -35,9 +35,11 @@ func _process(_delta: float) -> bool:
|
||||
if p.has_method("set_third_person") and p.is_multiplayer_authority():
|
||||
p.set_third_person(true)
|
||||
Input.action_press("move_forward")
|
||||
elif _frames == 320:
|
||||
elif _frames == 300:
|
||||
_shot("tp_run")
|
||||
Input.action_release("move_forward")
|
||||
elif _frames == 338:
|
||||
_shot("tp_idle")
|
||||
# Aerial overview of the whole map
|
||||
var cam := root.get_camera_3d()
|
||||
if cam:
|
||||
|
||||
Reference in New Issue
Block a user