You cant render things on the server, the server will render it on studio but on a real server all it sees is numbers, it has no need to render things.
Normally if a humanoid is present on the server, it has to compute its physics, collisions, states, animations, etc. This alone is consuming server bandwidth. Now take into account players playing the server. It has to now streamline the computed physics, states, animations, etc. and send it to the players. Again, this is taking up even more bandwidth, and a lot. There’s no benefit in forcing the server to deal with that. The server should only deal with the important data, like vectors and states.
Humanoids are extremely taxing for the server to handle. To remedy this, Chickynoid replaces humanoids with what is, to put it simply, a block with a table of data. All the server has to do now is take into account positions, angles, and a simple table of data that’s compressed and sent over to the client to read. The client then reads the data and performs functions that smoothen out what’s received and creates an accurate visual representation of that data so it becomes as seamless as possible.
There’s more to it than just replacing humanoids. This means you can trust the client to run more computing related to gameplay, such as heavy usage of raycasts for melee, and the server has all of the appropriate data to sanitize and verify what the client “says” it sees.
To compare with the same exact project:
- If we use the default Roblox humanoid and make the server run everything and streamline it, a single humanoid consumes a whopping 2.3kb/s~. That’s for ONE humanoid swinging. Remember, the server is only allowed to streamline 50kb/s until things start to bog down.
- Now that it’s restructured entirely with Chickynoid, a single “humanoid” swinging consumes a mere 0.28kb/s(an average of 85% savings in server bandwitch). And that’s ONLY if the players are visible to each other via proper culling checks. If the server determines they can’t see each other, it doesn’t bother streamlining the data, which saves us even more bandwitch.
I could go on and on about what I’ve learned over the past couple weeks with Chickynoid, but I hope you, or anyone else reading, enjoy this information and decide to use this
Moved my combat system to a weapon module instead to develop easier, and also added a state machine to it, so now we can take advantage of the deffault state syncing on chickynoid and just set the state with the state machine.
Look at it, its beatifull!, only issues im having rn is self:SetPredictedState() being janky but thats prob bc i am an idiot and not using right,and I just gotta learn how to use antilag module to do the hit reg.
Why does your netgraph look like that? That’s not right lol. Yellow bars mean the client and server disagree about where you are.
Hey @MrChickenRocket, fantastic framework! I am excited to see the future of Chickynoid.
Now, one thing that really is barring me and another from working on a game using this is support for non-convex hull collisions for complex meshparts, such as a tree with many branches for example. Is there any news on when there may be support for that?
Yep! I’ll be switching over to shapecasts once the margins are in. ETA soonish.
It does that when you tab out of a studio tab, I was controlling a different client, so it looks like that.
I also fixed several bugs and vulnerabilities, and implemented :SetPredictedState() in a better way i think, it’s still janky but it works.
You could try manually creating colliders for the branches using convex hull meshparts or parts/wedges fir now.
Are there any guides out there on how to start using chickynoid?
For a full PVP game, how hard is it to use this and have projectile weapons?
Also does anyone have more links to games that are published that are using this live, that we can check out?
@MrChickenRocket I need some advice on this
I want to write a mod for adding more features to chickynoid, one of these features is adding the Roblox default system where characters point to where they are looking on first person/shiftlock, I am aware
chickynoid.simulation.state.angle Already provides the angle and
command.fa already gives the camera angle/mouse position which can be used for head rotation.
However, this data doesn’t seem to be replicated to other clients by default, should I just use
:SendEventToClients() to replicate it every step? or add it somehow to the worldstate characters sent to clients?
I also want to know what’s more efficient for this since hit points are not replicated anywhere to clients and I want to find a way to replicate them.
Good question! There is already a system for replicating visual data about each player to each player.
Simulation writes to a structure called CharacterData.
Add a new field to characterdata, write to it from simulation, and use it for rendering inside the client.
I am not 100% sure you can do this with just a mod, but you might be able to!
So I guess using the :Step() function from a server mod I grab all the
characterDatas inside the
playerRecords.chickynoid.simulation.characterData and then set it’s angle property to
Thanks for the quick response!
You should be able to do it directly in a characterMod on the server. CharacterData is meant to be written to from the server simulation.
I see, I am just not too familiar with characterMods but ill use them then.
So for assistance for at least hitpoints, character mod or even a server mod work just fine.
If you go the server mod route, you can create a player handler module that handles the chickynoid record data:
You can sync the characterData through simulation or brute force it before it’s packed and sent out through ChickynoidServer:Think()
Make sure you have the default characterData structure updated beforehand(i.e packFunctions, lerpFunctions, and the metatable):
Player characterData is now shared between clients through ChickynoidClient.characters.
For updating humanoid health values, the Client>CharacterModel:Think() function reads the characterData via dataRecord by default. It can be used like this:
Player’s designated humanoids now have their health/max health sync.
I also recommend updating the resimulation handler within ClientChickynoid:HandleNewState() so that it accounts for moveState changes on top of just a position magnitude change(ActiveAnimation is how I deal with animations and motion interpolation, so ignore that):
Ok but how do I even read otherplayer’s characterData from the client, all you can read is characterModel’s inside the Client.characters table. I literally just noticed the characterCreated event only provide the characterModel.
Unless there is something faulty on your end, this is what ChickynoidClient.characters should look like:
If another player/npc/bot is rendered, this is what my characterData of them looks like:
Oh yeah I just noticed that it was my issue, I also noticed angle is replicated already by default which is what I want, so ill only replicate the camera angle for the head movement then, thanks for the help!
Any updates on docs? Even a Beta version of docs?
Also will there be some .rbxl files to check it out, perhaps a basic meele weapon and basic gun?