[Week 8] NPCs, Traffic

6 minute read Published: 2026-05-09

[Tue, 5 May 2026]

Warp effects in place.

Initial stab at NPCs is with a simple courier drone that simply warps station to station, orbiting and docking at each.


[Wed, 6 May 2026]

NPCs have quickly turned into traffic, which is probably a good sign.

The first courier pass proved the basic idea, but it also made the next problem obvious: if ships are going to actually use stations, docking can't just be a best-effort shove toward a port. They need to know when to wait, when to approach, when to back off, and how to avoid making the whole place look like a loose pile of angry cubes.

So the focus moved into station behavior. Docking state is now more explicit, logic cells can broadcast state, and the sim has a cleaner sense of what a script is trying to do. This is less glamorous than warp effects, but it matters. The more these ships act on their own, the more I need the world to provide some structure instead of every drone making a private little mess.

I also chased down more of the docking and fragmentation edge cases. Breaking ships apart while they are docked, reserved, or sitting inside a station's influence field gets tricky fast. The interesting part is that this is exactly the kind of thing Cella is supposed to care about. If parts keep their function, then those parts need to keep their relationships too, or intentionally lose them in a way the rest of the sim understands.


[Thu, 7 May 2026]

Station traffic needed a little air traffic control.

I added station-side dock assignment and orbit assignment. Ships can now queue for docking and, if the inner area is full, hold in orbital slots around the station instead of all charging the same destination at once. That's a pretty big step toward stations feeling occupied instead of merely being big inert things with ports on them.

Patrol drones got a lot more stateful too. They can wait for a partner, recover when a partner disappears, and orbit patrol stops instead of just hammering through a route. The behavior is still utilitarian, but the shape is much closer to what I want: little ships with simple jobs, small amounts of patience, and enough awareness not to break the scene every time two of them want the same space.

Some COM and geosync cleanup landed in here as well. That was one of those unromantic fixes where the visible symptom is "why did that ship just jump?" and the actual answer is buried in where the body origin, center of mass, rendered cell positions, and anchoring math all disagree by just enough to be annoying.


[Fri, 8 May 2026]

Today has been mostly about making NPC movement less dumb at close range.

The new local avoidance work gives drones a way to look ahead, decide a contact is in the way, and either steer around it or hold if the conflict is in a docking corridor. The important bit is that docking and general traffic don't use exactly the same response. A patrol drone cruising between stations can slide around a problem. A ship on final approach to a dock sometimes needs to stop being clever and just wait its turn.

That also pushed a few small player-facing pieces. Docking cells now carry clearer status through the publish path, initial ship introductions include more useful cell state, and the renderer has a small dock status effect path. Labels and cursor behavior got touched too, mostly quality-of-life cleanup from spending more time watching busy space.

I started pulling script output into a single command shape as well. Lua scripts and Rust NPCs have grown enough overlapping control paths that it was time to make navigation, docking, warp, and station-orbit commands go through the same application layer. That's still in-progress, but it should make the next round of NPC behavior less fragile.

Overall: less spectacle this week, more systems. That's fine. Warp made the solar system feel reachable and traffic is beginnning to make it feel lived in.


[Sat, 9 May 2026]

The drones needed another pass, and this one was less about tweaking values and more about making the behavior authorable.

Courier and patrol logic now has a clearer top-level shape: state, policy, conditions, then navigation intent. That sounds dry, but it matters. The old version was starting to hide too much behavior in helpers, which is fine right up until I want patrol drones to decide whether to keep their route, wait for a partner, engage a target, or retreat because they are low on energy or unarmed.

Combat started coming together in that pass. Patrol ships can remember attackers, pursue into weapon range, hold off at a more useful distance, aim around their dominant weapon axis, and fire projectiles when the shot makes sense. There were also some lane fixes around station traffic so the new traffic work doesn't immediately collapse under more active ships.


Follow the journey...

⬅ Last Week Home


Get dev updates on Cella. No spam, unsubscribe anytime.