Citybound - The Beginning
The Vision
I set out to do something crazy - creating my own city building game.
Ever since I played A-Train and SimCity 2000 as a child, this was my dream. Now I have the technology, the skills and the knowledge to implement it.
My game will be called: Citybound.
It will be very familiar to those who love the genre, but it will also do new things and set its own priorities and focus areas:
- It will be a single-player game that works completely offline.
- The goal is to simulate one whole, huge region at once - no need for tiny city lots or artificial city interaction dynamics.
- It will be affordable and will not rely on DLC.
- Alpha and Beta versions will be available for a reduced price.
- Moddability will be a priority, not an afterthought.
Today I'm proud to show you my first steps of what will hopefully be a great journey!
The Technology
Please note: this section is outdated. Citybound is now implemented in native code.
(Feel free to skip this section if you are not interested)
Citybound is written completely in JavaScript, it uses WebGL for 3D graphics. There are three main reasons for this choice:
- it supports Windows, Mac and Linux from the beginning.
- (In the future all platforms that support WebGL as a web standard!)
- I can use the programming environment that I'm most familiar with and fluent in.
- This means that I can iterate rapidly.
- You can use JavaScript, a language many are familiar with, for modding the game.
Because the game needs things like file-system access (for savegames), it will be bundled with its own fullscreen browser (node-webkit) as a standalone package.
It will look and feel like a native game.
The parts of the game that don't need native features should run in any browser, though.
Imagine: you can share a 3D snapshot of your city that your friends and fellow city-builders can explore in their regular browser.
What's already there
Basic Road Laying
Simple two-lane roads can be drawn by clicking and dragging. The mouse snaps to existing road end points. A few cars are spawned randomly.
What's missing:
- removing roads again
- splitting existing roads when creating new roads
- guidelines
- roads with more than two lanes, different kinds of roads
- curved roads
- rails, monorails, subway, tunnels, footpaths, ...
Basic Agent Simulation
Citybound uses microscopic agent-based simulation, but only where it helps immersion and realism. It will simulate individual cars and pedestrians. It will not simulate individual poop blobs.
A huge city full of cars, simulated all at once.
What you see:
randomly generated street grid of 65x65 blocks (5.2x5.2 km² or 3.2x3.2 mi²)
ca. 8,500 road segments, ca. 4,300 intersections
ca. 51,000 cars with individual pathfinding
- individual destinations (can be changed on-the-fly)
- basic collision avoidance
- variance in driver behaviour (cautiousness/aggressiveness)
running at 30FPS on my 4 year old gaming PC
currently runs in a single thread, written in JavaScript
- algorithm is completely parallelizable, though
- could be moved into a native-code plugin
- could even be moved into a shader, i.e. calculated natively on the GPU
What's missing:
- higher-level intersection behaviour: traffic lights & yields
- multi-lane overtaking and turning behaviour
- reaction to emergency vehicles
- congestion avoidance
- different, detailed car models
- pedestrians (their behaviour is much simpler, though)
- trains, ships, airplanes
Basic Lot and Building Generation
Procedural buildings will be very important in Citybound. Compared to a few pre-modeled buildings and lot sizes, they allow for much more convincing and varied cityscapes. They also grow organically and use the available space optimally - even in oddly-shaped road networks.
Animation: Road network, different variations of random buildings
A randomly generated city (35x35 blocks) with buildings, larger towards the center
What's missing:
- non-rectangular building footprints, especially for block corners
- architectural details: doors, windows, pillars, roofs, balconies, terraces, ...
- different types of buildings: agricultural, residential, commercial, industrial, combinations
- different types of construction: row-houses, highrise, european city blocks, ghettos, ...
What's next
The technical foundation of the three most important aspects of the game is there. Now I will focus on bringing them together to allow gameplay and actual city dynamics as soon as possible.
Then each area can be refined iteratively - see the "What's Missing" sections.
Planned Core Gameplay Elements:
- Zoning, dynamic creation of buildings based on demand
- Residential/commercial/industry dynamics, micro-economy
- Electricity, water & sewage management
- Service buildings, service coverage (health, police, fire, education, ...)
- Public transportation
- Agriculture
Additional planned features:
Terrain: hills, rivers, lake, ocean
- Vegetation
- Terraforming
- perhaps even dynamical changes (flooding, landslides, ...)
Data maps & graphs
Day/night cycle
Seasonal cycle
Citizen inspection, opinion polls, social media
Thanks for reading - I am looking forward to your feedback!