After just two years, I'm starting properly!

During the whole development of Citybound I was half-knowingly waiting for the day where my selection of technologies would turn out to be inadequate. This day has come.

JavaScript and WebGL are amazing for what they are, but for what I want to do (create the best city sim game ever) they're too slow and too restrictive.

Instead, I decided now to do game development the tried-and-true old-school way and focus all my efforts on implementing & innovating, not on fighting language restrictions:

I will rewrite Citybound in C++.

C++

"chirp chirp"

...let me address all the surprise, rage, happiness and incomprehension that you might have, with a convenient question & answer format. Feel free to skip what you don't care about, since I go into a lot of detail.

But you believed in JS & WebGL so much! Why did you continue for so long and what made you finally doubt it?

  • Yes... I really wanted to believe. From the very beginning people told me that it's a stupid idea. But I didn't want to dismiss new technologies and not try new things just because of that. I needed to see it fail before my own eyes, after actually trying.

  • This happened now after implementing custom memory handling and then realizing in use that it's both too slow and a nightmare to program with (mostly because JavaScript doesn't have pointers and structs). My workarounds were beautiful, but in practice impossible.

  • After this relevation, I noticed a lot of other restrictions that I was playing down for myself and others (see advantages of C++ below).

  • But, I always told doubters that if JavaScript turns out to be the wrong tool, it would be at least a great prototyping language. This turned out to be very true!

So why C++? Isn't it horrible?

  • No, many (including me) are prejudiced about this. After taking a deep dive into C++11 for the last couple days and coding some first drafts, I have to say that it's a really nice language, allowing you to do horribly fast low-level stuff, while letting you package that in safe and nice-looking abstractions.

What advantages will C++ actually bring?

  • Much, much faster everything. This might make even my wildest goals of simulating true populations in the order of millions possible.
  • Inversely, this means that Citybound will run much smoother on even old and weak hardware.
  • Minimal amount of RAM usage and savegame size theoretically possible.
  • I can use existing, cutting edge and battle tested libraries for parts of the game instead of doing everything myself, for example:
    • bgfx for a modern graphics backend with all the newest features (WebGL is years behind that)
    • Eigen for natural looking and compute-optimal 3D math.
  • There is much more literature, examples and Stack Overflow questions available related to the obscure high-performance code that I'm writing. With JavaScript I was much too often the first one to ever do something.
  • Instead of hundreds of megabytes, the game's download size will be just a few megabytes (excluding only music).
  • The strict typing of C++ will probably prevent a lot of silly bugs early on and make it easier to find others.

What about cross-platform compatability?

  • Citybound will run as a native app on Windows, Mac, Linux and who knows what else! This is made possible by libraries for graphics, input, etc. which are themselves cross-platform (SDL 2.0 & bgfx).

  • Since I didn't want to publish Citybound as a webapp anyways (but as a webpage+browser Electron app), using C++ just means that the game will feel even more native on each platform (for example full multitouch gestures on trackpads/touchscreens)

What about moddability, tooling and open source?

  • My main reason for JavaScript was always that it is a very comfortable development environment and that a lot of people already know it.

  • Except some initial configuration hell (that I take care of for you), C++ also offers a great development & debugging experience, there exist very good tutorials and IDEs for it.

  • Since with native code I can protect a few select parts of the code much better, I actually feel comfortable open-sourcing all of the game-behaviour-defining code.

  • The game will come with a mod-kit that contains the source of the vanilla game in a perfectly set-up git repository. You would branch that into your own mod, modify whatever you want, run and try it and then publish it.

  • git's merge tools will help you to make your mod compatible with new versions of the game or even with other mods.

  • The way the engine is set up should allow something very close to hot-code-swapping where you can "operate on the living patient" for very fast development iteration.

  • Ideally I will find a solution for crosscompiling, so even though you only have Windows, for example, you can create working mods for all the platforms.

So..., will you finally use an engine now?

  • No, there still exists no engine that is optimized for the kinds of stuff Citybound needs (millions of actors...) and some essential things like advanced 2D geometry (for architectural stuff) is completely missing from engines.

How much will carry over from the old code?

  • The basic handling of game state, which is very compactly stored in RAM and can be dumped 1:1 onto the disk and then loaded again with almost no additional work required. This should make loading and saving super quick.
  • The geometry code should be pretty easy to be ported.
  • The user interface and intersection logic for roads and zones will also stay the same, so it only needs to be rewritten.
  • Graphics code will become slighly-lower level, but there's not much grahpics yet anyways, so I hope this will be fast.
  • Traffic simulation also "just" needs to be rewritten.
  • Economy and all the other gameplay needs to be written from scratch anyways.

How long will it take you?

I refuse to invent an answer to this question at this point. I know you hate me for it, but all of this is necessary and good. I will try to make more concrete promises like I did one month ago, as soon as they make sense again. Thank you for your patience.

You will give up on it! This is just the best proof that Citybound is nothing but Vaporware!

Never! Don't think that this was an easy decision to make, but rest assured that I will stay with Citybound until it is exactly what I want it to be, no matter how much time, effort and rethinking it will need!

You have even more questions, comments or concerns?
Let me know!


Discussion on Reddit · on Simtropolis · on Something Awful

or follow @CityboundSim on Twitter

Any amount supports the development ♥

A Promising 2016


2015

  • got married
  • moved to Germany
  • started working again
  • Michael quit the project
  • decided to modularize & open-source parts of Citybound

progress:

  • implemented some very complex geometry stuff (straight skeletons & error-tolerant geometry)
  • came up with models for individual citizen's everyday life + economic micro-interactions
  • started implementing manual memory management for JS, making savegames, multithreading & interop with other languages possible
  • implemented a prototype for planning mode

good:

  • solutions for the most difficult technical problems clearer
  • planning mode as the central gameplay mode and defining element of Citybound
  • persistence through the ups and downs of life
  • listened to gut feeling & community

bad:

  • too little focus on gameplay, only background work
  • bad code architecture decisions
  • too little communication with community
  • no clear plans & timeframe

2016

  • clear goals are needed
  • overarching goals need to be reduced into realistic steps

Preparation Phase

timeframe: 2 weeks - 1 month

  • finish extracting geometry code (already done)
  • finish implementing memory-management

Alpha 1

"Make it run and interactable"

timeframe: 3 months

  • planning mode for roads & zones
  • random economy & population growth
  • building lot generation
  • basic placeholder buildings ("blocks")
  • simple daily routines
  • abstract car trips
    • no actual traffic sim
    • choose closest shop/work
  • abstract neighbouring city
  • savegames

Private release to:

  • selected people from the community
  • slowly more and more people will get access

why?

  • keep amount of initial feedback manageable
  • make sure no one's expectations are disappointed early on

Alpha 2

"Slowly add complexity"

timeframe: ???

  • microscopic car traffic simulation & pathfinding
  • detailed (per-trip) and localized tracking of economic interactions

Can also be stretch-goals for Prototype 1

Alpha 3

"Make it a game"

  • feedback economic interactions -> growth
  • fun
  • basic procedural buildings & vegetation
  • citizen thoughts
  • pedestrian traffic

Long-Term

"Make it Citybound"

  • multi-modal traffic & pathfinding
  • chunking/multithreading
  • huge scale cities
  • custom renderer
  • 3D terrain
  • water simulation
  • etc.

PS:

If you didn't hear yet: Livestreams are no longer on Twitch, but on Beam. The stream delay there is much lower and it is in general much better! Please resubscribe!

PPS:

For christmas, as part of a gamejam, I created a small experimental interactiony-thing with water simulation and procedural trees, check it out:

Greener


Discussion on Reddit · on Something Awful

or follow @CityboundSim on Twitter

Any amount supports the development ♥

I'm participating in a game jam this weekend

Hi everyone,

This weekend I'm participating in a 3-day game jam that my university hosts - so there won't be the regular livestreams on friday and sunday. The jam starts on friday at 18:00 CET.

Here are my goals for the game jam:

  • create a fun game (independent of Citybound)
  • invent technology / gather experience that I need for Citybound anyways, use the game jam as an excuse to do that
  • if I get permission, do a non-stop silent livestream of the development process

I'll keep you updated!
Anselm

Michael left Citybound

I wasn’t sure when would be the best time to write about this, but people understandably started to wonder - so why not now:

Unfortunately, Michael found less and less time to work on Citybound due to unrelated personal issues and eventually decided to quit the project.

Thus, we parted, on best terms. We agreed that all the code that Michael contributed should also be open sourced (along with the other parts of Citybound that I’m open sourcing), so both of us can make the best use of it in the future.

Thank you, Michael, for all your hard work, inspiration and support. Thinking about and working on Citybound with you was a bliss! All the best!

Anselm

Trying out Beam.pro

Hi!

  1. The next livestream will be on Saturday 9:00AM CET

  2. I will try out Beam.pro instead of Twitch.tv, their main advantage seems to be a very low stream delay (< 5s), which will hopefully make live interaction much nicer. Also, in general they seem much more innovative.

    If you want you can already follow me there: beam.pro/ae_play

Let's see how it goes,
See you then!

The Road to Alpha, Week 96 - Committing to ...

There will be some... Issues...

Text summary coming soon...


Discussion on Reddit · on Simtropolis · on Something Awful

or follow @CityboundSim on Twitter

Any amount supports the development ♥