Skip to content

Pistol slide lock with the Tachi reload asset (pairs with neoAssets) - #2259

Open
sunzenshen wants to merge 5 commits into
NeotokyoRebuild:masterfrom
sunzenshen:vm-empty-slide-assets
Open

sunzenshen wants to merge 5 commits into
NeotokyoRebuild:masterfrom
sunzenshen:vm-empty-slide-assets

Conversation

@sunzenshen

@sunzenshen sunzenshen commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Description

The same code as #2248, paired with NeotokyoRebuild/neoAssets#170 (the Tachi's reload from empty), for reviewers who want to merge both at once. Merge this PR or #2248, not both. Description, results, testing and clips are in #2248.

What the pair does for the Tachi and Milso:

  • Empty idle: while the clip is empty, ACT_VM_IDLE is sent as ACT_VM_IDLE_EMPTY where the model has it.
  • Last shot: the shot that empties the pistol plays the model's fireempty, a shot's kick with the slide held back, so the slide locks at the shot and the empty idle follows when it ends.
  • Draw while empty: the shipped drawempty, picked by name since it has no activity.
  • Reload from empty: ACT_VM_RELOAD_EMPTY where the model has it, with the third-person reload gesture as for any reload: the Milso's shipped reloadempty, and the Tachi's from Tachi: reload from empty with the slide held back neoAssets#170. The slide stays back until the end of the reload.

Without the neoAssets PR this code still works: the Tachi keeps the normal reload, as in #2248.

How to test

With NeotokyoRebuild/neoAssets#170: steps 1-5 of #2248. In step 4, the Tachi's slide stays back through a reload from empty and goes forward near its end, on both teams.

Related

@sunzenshen

Copy link
Copy Markdown
Contributor Author

This PR (2259) is the more complete solution, but I am proposing #2248 simultaneously, because I think we need to figure out how to handle the raw precompiled animation files from NeotokyoRebuild/neoAssets#170 . Maybe they shouldn't be in neoAssets? So it might be easier to merge 2248 first before we figure out the answer to animation file management.

@sunzenshen
sunzenshen requested a review from a team October 17, 2026 02:00
@sunzenshen
sunzenshen marked this pull request as ready for review October 17, 2026 02:03
@sunzenshen sunzenshen added the Animations Animation stuff. Including the syncronizing of animations between client and server based on state. label Oct 17, 2026
@sunzenshen

Copy link
Copy Markdown
Contributor Author

Demo of the custom tachi slide-open animation (right most example) compared to a code only solution:

682226330-b7f4b4ea-ef36-4313-8a63-cf044174e7c4.mp4

@sunzenshen

Copy link
Copy Markdown
Contributor Author

TODO: I still need to make a blender project example for the custom animation.

The Tachi and Milso viewmodels have an idle01empty sequence with the
slide held back, which neo never played: an emptied pistol held its
last fire frame for 2.0 s and then idled with the slide forward. The
original NEOTOKYO holds the slide back from the end of the last shot
until the reload. Send ACT_VM_IDLE_EMPTY for ACT_VM_IDLE while the
clip is empty, as the SDK crossbow does, and go to it as the emptying
shot's sequence ends. Models without the sequence are unchanged.
The Tachi and Milso viewmodels ship a drawempty sequence, the normal
draw with the slide held back, but it carries no activity, so an
empty pistol drew with the slide forward and only pulled it back as
the empty idle faded in. Pick drawempty by name in Deploy when the
clip is empty. Models without it, and loaded draws, are unchanged.
The shot that emptied a Tachi or Milso played its normal fire sequence,
whose slide closes within 0.2 s, and the slide went back only when the
empty idle followed 0.4 s later. Both pistols ship a dry fire sequence
that is a shot's kick with the slide held back throughout, ending on
the empty idle's pose, so the last round's shot plays that instead.
A reload always played the reload sequence, whose slide is forward from
its first frame, so the slide of an empty pistol closed as the reload
began. The Milso ships a reload for an empty gun (ACT_VM_RELOAD_EMPTY)
that keeps the slide back until its release near the end, the same
length as the reload; an empty weapon now plays it where the model has
one.
@sunzenshen
sunzenshen force-pushed the vm-empty-slide-assets branch from 3adcb38 to e84fa2e Compare October 26, 2026 04:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Animations Animation stuff. Including the syncronizing of animations between client and server based on state.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tachi slide shouldn't move when dry firing

1 participant