The Organization


Whew, lots of updates! I had a play test with Tony and Ericka, which gave me a bunch of great feedback. Some interesting ideas for possible experiments! Then today I got the selectable UI in, and a couple actions, kick and stop for the networked balls. I also added a boost ability, with cooldown, for the player. Works great, although i have yet to test it over the network, but i think these should be fine, as they are just like any other physics related interaction. Pickup and Drop are still the biggies, and, maybe, i will tackle those next.

animated gif of a cylinder moving around a playfield, interacting with a ball
toy01 programming permalink

Problems Solved

Did a play-test with Adam and Thom yesterday. Discovered an issue when you have more than 2 players connected, the 3rd player's avatar does not sync up with the other 2 players! Luckily it was a pretty easy fix, having to do with initial values for the different authorization sequences. I also was concerned about the jitter i was seeing when playing, but i realized i was playing as a HOST, and the rigidbody sync system is not setup for HOST style play, only SERVER and CLIENT. The SERVER does no smoothing to the objects, which is why it looked so bad for me.

Now i can move forward onto the in-world item selection stuff.

toy01 programming permalink

Networked Soccer

In the past week got the rigidbody controller working across the network. Updated the test scene to include a "soccer stadium". Just an enclosed space which re-positions the ball if it gets out of bounds. The controller is working quite well. The visual representation is still quite basic, with just rotating to point in the direction of travel (or velocity of the rigidbody). Works great in most cases. Not so good when you get on a moving platform! Also, the visrep updates are not propagated across the network, so on other clients your avatar does not rotate.

Next steps are to do a minimum pass on the visrep rotation issues, and to get them updating on other clients. Then on to object selection, and the UI/Display for that. Was talking to Adam about it, and he gave some good examples. The way Sonic Adventures 2 displays the button and action that can be taken is great. What is not great about it is that there is no indication in-world of what object currently is going to be affected by the action. Rim-light or outline will take care of that. Also, the description of the actions available appear in the upper right of the screen, divorced from the object itself. While i like the consistency of location, it takes your eyes away from what you are concentrating on. So, will try something where that info is located beside the currently selected object. While Adam's other reference for how it might look was this:

Very stylish user interface from the Persona game, items radiating out from a central point, like broken glass shards.
Aspirational UI Design

I'm not sure i'll be able to get there on version one!

toy01 programming ui design ux permalink

Something new

Ok, got some work done on the toy project. Have been experimenting with several different character controller types. Used the Unity Character Controller for a bit, used the Unity supplied 3rd person controller from the asset store. And have ended up back using a rigidbody type, based again on those movement tutorials. I am ignoring all the special gravity stuff that those tutorials do, and have made a much more simple controller, which is good for me, as i totally understand how it works. It has wall jumping, and grounding, and can be moved by other moving platforms, including rotation. I'm excited see how this all works over the network. But probably before that, i will get flying in, and pickup and drop.

Character moving around a space, jumping on to a rotating platform, and then the character rotates with the platform.
toy01 programming personal permalink

No Rush

As i talked about before, i'm working hard on keeping from applying perceived external pressures to my personal projects. Because i had early success with some of my experiments, i feel like i need to produce more "showable" or polished output. But really, i have to keep telling myself, this is just for me. It is fine to go slowly, to write more, to make smaller, or even no "gains" as it were. Because the end state isn't to have a polished or even working game, but the process of learning and playing around with ideas. Some of those will not be showable, or of interest to anyone but me. And that is fine. The need for external validation is a hard one to break.

Two game windows, showing balls rolling around a play space. Similar views between the windows as they are networked together.
personal philosophy toy01 permalink

5 months and 4 days...

Got the 3rd person controller "working" in a demo scene, and have continued to think about how selection will work. Also more and more thinking about writing a bespoke controller, just so i know how it works, completely. The tutorials by Jasper Flick are a great resource and starting point. Also, because they use rigidbodys as their underlaying root object, the work on rigidbody sync i've been doing should be able to be directly applicable to the controllers movement.

Oh i found out that the Inter Illusion translation package also has google-translate built in, in that it will take a bit of text and submit it to google for translating. One of the tricks when i did some auto-translating test before was where/how to do it, without having to pay a bunch for it to work. If we just distribute the "raw" or original chat-text to all the clients, and each client then uses its own bandwidth to look it up, that might be better? For some cases of better, anyway :)

programming toy01 permalink

About 5 months later...

Have been trying to get back into "coding for fun". I've been programming since i was ... 11? First on my Vic-20, then the C64 and on to PCs from there. Now working as a programmer I do find that i burn out on programming much more easily, and do not find the fun for post-work relaxation. Especially during these Covid Times. However my down time had turned into hours spend just kind of browsing Reddit or reading Gamedev Mastodon... So, i fired up my kobo, and started borrowing books from the library. It was nice to see that my brain could still read full novels! After reading a couple books, my interest in programming started to perk up again. Not wanting to squash it immediately, i began thinking about how i could program for fun, and keep it fun, or at least stress free. Rather than rushing to my IDE, i began writing, writing about problems that i find interesting, things i'd like to learn. I also realized that i need to keep this project safe from the idea of becoming a game, it needed to be a toy. I don't want to bog my process down with having to make something follow some game-design, or whatever. It is a toy, and a play space for me to experiment. If it is fun, or if you can play a game with it, so much the better. But that isn't the goal. It isn't even a bullet point. Removing the requirements of time, or feeling like i have to work on it, is also important. I am still reading novels, and watching Ted Lasso on TV, and that is fine. Programming is an other activity I can do, when I want to make time for it, not the be all and end all.

So, what is this set of goals i have, for fun personal programming? At least, this is the list at this point in time!

  1. Networked Multiplayer
  2. Networked Physics
  3. Procedural Generation (of whatever, probably the physical area one plays in)
  4. Programming Blocks
  5. NPC AI
  6. Player Actions and Interactions
    • Auto-Translated Chat
    • Icon based Chat (eg Meadow)
    • Photo Mode

I have 1 and 2 working in the prototype. The physics stuff is great, using the state synchronization and authority articles by Glen Fiedler as the basis for my stuff. I've done a fair bit of multiplayer networking and this is the best implementation of rigidbody physics, shared across multiple players, that i have ever done. Best both from a "works better" point, but also that it is a very simple implementation.

Also been noodling with how to select objects in the space, and then how to architect the code that makes a thing do a thing. Like, how to select a box then pick it up. Kick a ball. Move items around the world without picking them up. These are questions that i think are fun to think about. There may be something wrong with me!

Still improving the networked rigidbody code, i think the next thing will likely be some experiment with selecting objects, and then activating an action on them. Like, kicking a ball, or moving a block. Depends on how i'm feeling next time i fire up the project.

toy01 programming history work personal permalink