Ради вашего удобства наш сайт использует cookies! Узнать больше! Мы используем cookies

[wOS] DynaBase - Dynamic Animation Manager

The beauty of the ValveBiped form at your fingertips [h2]This is a wiltOS Week "Back to 2022" Item: [/h2] www.wiltostech.com/wosweek/2022/1 [h1]Description[/h1] The DynaBase is an animation base that gives full animation control to the player, the server, and the developers of the community. Change what animations are enabled, what order, or even decide to mount your own custom animations through a menu. Best of all, it will all update immediately so you can make tweaks and continue onward. [h1]Pro-Tips[/h1] This already supports every wiltOS Animation Extension. Please subscribe to the legacy addon in the required content to add quick support for xDR. This is simply so you can actually use them within the menu and customize it. [h2]YOU MUST UNSUBSCRIBE FROM ALL OTHER ANIMATION BASES, INCLUDING THE WILTOS ANIMATION BASE (FULL) AND XDREANIMATION BASE, FOR THIS TO WORK![/h2] [b]THIS ADDON IS CONSIDERED IN TESTING SO REPORT BUGS OR CRASHES IMMEDIATELY[/b] [h1]Why is this a big deal?[/h1] Short Answer: [b]You could never dynamically load animations onto models[/b]. Developers can now use IncludeModel( MODEL_PATH ) in lua to add whatever they want, including animations from existing models like NPCs, directly onto the player. Updating it in-game is just a bonus. Long Answer: Previous iterations of animation bases for Garry's Mod, hell the source engine, hinged on not being able to dynamically change model and animation data which meant you were stuck with what you were given in terms of slots. Additionally, you would have to constantly restart and hope you had the exact same content otherwise you would see issues. Developers couldn't even use the ACTIVITY system, something built into animations, reliably because the ORDER of animations addons can ruin everything. As this was iterated with both the wiltOS Animation Base and xdReanimationBase, the inability to merge the server and client so they can work together became increasingly clear. So now, leveraging a lot of things we probably shouldn't be able to, you can do it. [h1]How is it done?[/h1] What I discovered is that there's a fun source engine quirk that allows you to mount any kind of files into includemodel, no matter where it is, including data files. It simply needs to pass the inspection of a valid model pointer. Getting it to do that requires some custom model compilation, but once it's done it will work. However, you cannot flush m/f/z_anm.mdl's because they are considered protected data now. If you include a model however, you can refresh THAT, and data files are not protected. So if you run r_flushlod it will re-assemble everything. Combine all the concepts, we are basically making fake modelptrs in the data folder with whatever the developers are giving us, that are pointing to real models, in the most amazing double dutch you've ever seen. The only problem left is r_flushlod is a usually unstable function that crashes clients. While it has been made a little more reliable in recent years, it still needs some work. By preventing anything from accessing the data during the refresh, it greatly reduces the chances of crashing even on repeat usage. [h2]FEATURES[/h2] [h1]Power to the Player[/h1] - Ability to manage your own animations, or mount your own local models in game with a user mounting system - Animations will work on any server, even those that don't have the animation base, as long as they don't force you to download a conflicting base - Modify how your animations behave per-server, utilizing the server's own whitelisting system or your own [h1]Power to the Server[/h1] - Animation syncing between server and client - Ability to set content permissions, such as which animation extensions or re-animations are allowed, and in the exact order you want them to be - Ability to restrict client mounting permissions. Should they be able to mount animations? Re-animations? Neither? - Ability to disable user mounting to ensure everyone has the same experience [h1]Power to Developers[/h1] - No limitation on what you can or can't include. No asking for animation slots, no worrying about naming the model correctly. Just include it and you're done - IncludeModel now exposed to lua, and hooks for dynamic insertion to models - Registration of models for easy in-game configuration and compatibility checking - Level One animation correction, so there is no ACT collisions. Meaning you can mount NPC models without any problems [h1]Fun Other Stuff (WIP)[/h1] - Automatically fixes itself if another animation base is installed, without you having to do a single restart! [h1]Documentation[/h1] All the documentation on this animation base will be on our community wiki, which I will post about here when I update it: https://wiki.wiltostech.com/3/DYNABASE You fill find installation instructions here: https://wiki.wiltostech.com/3/DYNABASE/Installation Since this is the first time people are probably hearing about it, this is a free developer wiki for anyone, not just me, to use. If you want to read more, you can do that here: https://knockout.chat/thread/43942 [h1]Closing Remarks[/h1] This is a start to a long journey now. I have been experimenting with a lot of ideas for a few years but there is only so much one person can test alone. I'm hoping people are going to help catch problems and edge cases that may exist with the way this addon is made so we can push the tech forward. With this idea alone it will be possible, with some more work, to mount SMD files directly into models, in-game animation retargeting pre-inclusion, or allow each player to have a unique player model with it's own custom animations. I know, because these are the very same ideas I played with some time back. But before we get there, we need to make sure the foundation is right. Regardless of this does or doesn't work out, it will be a learning experience for everyone. [h1]Need live help using the addon? Want to keep up to date with wiltOS Technologies? Consider joining [url=https://discord.gg/na5jYeG]our Community Discord![/url][/h1]