Road map
- This article remains incomplete. Please watch for future updates.
This road map toward Charm Cities provides a rough series of achievable objectives that will, over time, take us to our end goal.
This document is intended to be read by the general public, including people not familiar with software development jargon. We've therefore avoided industry terms like "epic" and "story" in favor of simpler language. The project consists of several phases of development, each of which adds a substantial chunk of related features to the project. Finishing each phase will require working through a series of individual challenges - smaller units of very tightly related features.
Each phase involves creating a full test suite to verify that all the specified features are working. Once all testing has passed, we will create a new build of the project for playtesting.
Contents
Phase #1: Basic Gameplay
This very basic starting point sets the stage for the project. The details of this phase are mostly established, since it is the starting point. At the completion of this phase, a player will be able to plan out a power plant, a road, and a residential zone, then watch as their plan is enacted. The power plant and road will be built and, if the residential zone has power, rudimentary HONs will purchase property and begin moving in. The end point of this game is, therefore, an actual working city-builder game of sorts - though not a particularly interesting one just yet.
This stage does not include most gameplay fundamentals: there is no pricing, a power plant can power an unlimited area, HONs do not require food or water or work, etc. Saving and loading are not implemented. Assets for this phase are only primitives - all buildings are represented by simple cubes. HONs are not visualized; they exist only in software. However, much of the functionality of user input and basic UI are created in this phase. The basics of the user interface will not change dramatically from here, though the appearance certainly will. Thus, most of the accessibility requirements laid out in the project requirements must be accomplished here so that the project foundation is sound.
It is assumed that much of this phase will be refactored or replaced in future phases. Much of the actual code written for this phase will not wind up in the finished product. We are using the new Unity input system to practically accomplish the accessibility requirements. This new system is still in preview and we can expect it to change substantially over the course of 2020, so we may be coming back to this phase in future as new developments roll out.
- Player can switch between Plan Mode, Build Mode, and View Mode
with on-screen UI buttons(commit 1497e1b)that have a distinct hover state(commit 1497e1b)with tooltips describing their behavior(commit 0da6cf7)with individual, unique, and predictable associated sounds(commit b9dc030)
with keyboard 9 (left)/0 (right) keys by defaultso(commit 9a1c1a3)with gamepad left bumper/right bumper by default(commit 9a1c1a3)
- Player can move the cursor
with mouse(standard)- with keyboard WASD by default
- with gamepad left stick by default
- Player can pan the view
by placing cursor near edge of screen(commit ad3e88f)with keyboard arrows by default(commit ad3e88f)with gamepad right stick by default(commit ad3e88f)- within constraints:
- cannot cross invisible borders
- Player can orbit the view
by holding middle mouse button by default and panning or moving mouse(commit b738044)by holding keyboard shift by default and panning or moving mouse(commit b738044)by holding gamepad right trigger by default and panning or moving mouse(commit b738044)- using sticky-key mode
- within constraints:
horizon remains horizontal(commit cc4858e)cannot go past top-down view(commit cc4858e)cannot go past side-on view(commit cc4858e)- cannot go below height of tallest buildings to prevent clipping
- Player can zoom the view
with mouse scroll by default(commit 0e0430b)with keyboard page up/page down by default(commit 0e0430b)with gamepad dpad up/dpad down by default(commit 0e0430b)- within constraints:
cannot clip into buildings(shouldn't be an issue because 0e0430b changes camera field of view, not position)
Challenge #2: Fundamentals of Plan Mode
Player can see a flat green terrain map, 17,280 meters on each side(commit 4cb9c84)In Plan Mode, Player can see a eight-meter square tile grid overlaid on the terrain map(commit 2949bc6)the grid is 800 meters on each side(commit 2949bc6)the grid is always centered on the current view(commit 2949bc6)the grid origin is a multiple of 8 meters from world origin(commit 2949bc6)
In Plan Mode, Player can see a UI panel(commit 1497e1b)- that can be configured (requires options menu)
In Plan Mode, Player can see UI buttons for a Road, Power Plant, and Residential Zone(commit 3c76276)that have a distinct hover state(commit 3c76276)- that have a distinct highlighted state
- that can be highlighted
with the cursor(commit 3c76276)- by scrolling through with keyboard + and - by default
- by scrolling through with gamepad dpad left and dpad right by default
- that have a distinct pressed state
- that can be pressed
with mouse left click(commit 3c76276)- with keyboard space by default
- with gamepad south button by default
- that can be configured (requires options menu)
with tooltips describing their behavior(commit 0da6cf7)with individual, unique, and predictable associated sounds(commit b9dc030)
- Player can plan a simple straight road, 7 meters wide
- by pressing the road button
- and moving the cursor over the terrain to a start point
- which will show a shadow of the first road tile
- locked to the grid (filling 1 tile x 1 tile)
- that changes color when the position is not permitted
- and offers a secondary indication other than color
- and starting road-building
- when the left mouse button is pressed by default
- when the keyboard space is pressed by default
- when the gamepad south button is pressed by default
- then moving the cursor to an end point
- which will show a shadow of the complete one-dimensional road
- locked to a grid (1 tile wide)
- automatically rotated toward the cursor, but locked to perpendicular with the grid
- that changes color when the position is not permitted
- and offers a secondary indication other than color
- and completing road-building
- when the left mouse button is pressed by default
- when the keyboard space is pressed by default
- when the gamepad south button is pressed by default
- or cancel the operation without planning anything
- by pressing the same UI button
- by pressing a different UI button
- when the keyboard escape is pressed by default
- when the gamepad north button is pressed by default
- and then stay in road-building mode
- Player can plan a power plant, 120 meters by 192 meters (the size of a real (but quite small) gas power plant
by pressing the power plant button(commit 3c76276)and moving the cursor over the terrain to a start point(commit 3c76276)which will show a shadow of the finished footprint(commit 3c76276)locked to a grid (filling 15 x 24 tiles)([ (commit 2949bc6)that changes color when the position is not permitted(commit 38a34ac)- and offers a secondary indication other than color
- and rotating the building's orientation by 90 degrees at a time
- when the right mouse button by default
- when the keyboard tab is pressed by default
- when the gamepad east button is pressed by default
- and plopping the building
when the left mouse button is pressed by default(commit 3c76276)when the keyboard space is pressed by default(commit 3c76276)when the gamepad south button is pressed by default(commit 3c76276)
- or cancel the operation without planning anything
- by pressing the same UI button
- by pressing a different UI button
- when the keyboard escape is pressed by default
- when the gamepad north button is pressed by default
- and then return to the default Plan Mode with no building tool selected
- Player can plan a simple residential zone
- by pressing the residential zone button
- and moving the cursor over the terrain to a start point
- which will show a shadow of the a single zone tile
- locked to the grid (filling 1 tile x 1 tile)
- that changes color when the position is not permitted
- and offers a secondary indication other than color
- and starting zoning
- when the left mouse button is pressed by default
- when the keyboard space is pressed by default
- when the gamepad south button is pressed by default
- then moving the cursor to an end point
- which will show a shadow of the complete two-dimensional zone
- locked to a grid
- with each tile changing color when a position isn't permitted
- and offering a secondary indication other than color
- and completing zoning
- when the left mouse button is pressed by default
- when the keyboard space is pressed by default
- when the gamepad south button is pressed by default
- or cancel the operation without planning anything
- by pressing the same UI button
- by pressing a different UI button
- when the keyboard escape is pressed by default
- when the gamepad north button is pressed by default
- and then stay in zoning mode
Challenge #3: Fundamentals of Build Mode
Player can see a flat terrain map(commit 4083158)- In Build Mode, the tile grid is hidden
- In Build Mode, all planned construction is visible
- In Build Mode, Player can see a UI panel
- that can be configured (requires options menu)
- In Build Mode, Player can see UI buttons for four speed settings (pause, realtime, fast, superfast)
- that have a distinct hover state
- that have a distinct highlighted state
- that can be highlighted
- with the cursor
- by scrolling through with keyboard + and - by default
- by scrolling through with gamepad dpad left and dpad right by default
- that have a distinct pressed state
- that can be pressed
- with mouse left click
- with keyboard space by default
- with gamepad south button by default
- that can be configured (requires options menu)
- with tooltips describing their behavior
- with individual, unique, and predictable associated sounds
- Player can change simulation speed by pressing the buttons
- The following ploppable and network elements have associated build times
- power plant
- road
- As simulation advances, the planned ploppable and network elements are built
- The following growable elements have associated land costs, build times, building costs, and dependencies (must be within 4 tiles of a road network connected to a power plant)
- cheap 1x1 residential
- cheap 1x2 residential
- cheap 2x2 residential
- cheap 2x4 residential
- cheap 3x3 residential
- cheap 4x4 residential
- A pool of HONs ready to move into the city exist, each with a certain quantity of money
- The HONs bid for land for growables in the growable zone once dependencies are met with planned development
- Purchased land is visually differentiated from unpurchased land
- The HONs build growables on their purchased land once dependencies have been built out
Challenge #4: Fundamentals of Menu System
- All menus
- utilize on-screen UI buttons
- that have a distinct hover state
- that have configurable font size
- that have tooltips describing their behavior
- that have individual, unique, and predictable associated sounds
- and can be navigated
- with cursor
- or keyboard arrow keys / enter button by default
- or gamepad d-pad
- utilize on-screen UI buttons
- Player sees a start menu screen on load
- with New Game button that opens the standard scene
- with Options button that opens the options menu
- with Exit button that closes application
- Player can enter a Pause menu
- that pauses all gameplay
- with a semi-transparent modal overlay
- with Resume button that returns to the game
- with Options button that opens the options menu
- with Quit button that returns to start menu
- Player can access an Options menu
- to set volume
- for music
- for diagetic sounds
- for UI sounds
- for dialogue
- to change font and size of UI elements
- normal
- large
- to change sensitivity of navigation controls for each input device
- for pan
- for orbit
- for zoom
- for cursor movement
- to turn on sticky key mode
- to remap controls for each input device
- to set volume
Phase #2: Existence Needs
In the next phase, we step up the HON AI. Right now, their only requirements are shelter and power. We'll need to add ploppables and growables to meet their most basic needs: food and clothing (commercial areas), water (a basic distribution system), and healthcare. At this point, the basic UI will need to be redesigned to handle more complicated menus. HONs will also need two budgets: time and money. They will need places to work (like industry) to trade time for money. This phase will not include pathfinding; we will assume a fixed amount of time for all trips. At this point, residential, commercial, and industrial zoning will be the only available zones, but this will change later.
Phase #3: Visualizations
At last we turn to View Mode. Now that HONs have needs, we can track whether those needs are being met or unmet by adding overlays in View Mode. We can also add the ability to spawn drones and vehicles so the player can tour their city themselves.
Phase #4: Bias, Traits, and Relationships
With basic HON needs now covered, we can turn to developing the bias model. We'll start with just two groups and biases which are universally shared and unchanging. We'll also start giving HONs traits, which will dovetail with education mechanics. Once HONs have traits, it will be possible for them to begin seeking out other HONs with similar traits to form relationships.
Phase #5: Advanced Terrain
So far we can only build on a flat featureless plane. Now let's develop our first terrain map, with water features and elevation changes. Our initial map will include several rivers running down from hilly terrain into a coastal plain on the shore of a larger body of water. We will address the problem of building on hilly terrain with solutions based on real construction methods. We will add some preliminary terrain modification tools.
Phase #6: Pathfinding AI
With a full terrain system in place, it's time to turn our simple road network into a weighted network graph and enable pathfinding. At this point, the roads are all identical, simple roads, and will ignore traffic, so the network graph will be quite simple. Because of the way we separate Plan Mode and Build Mode, we can use the A* algorithm rather than the more complicated D* variant, which would be necessary if we were doing dynamic pathfinding. For now, we'll assume that all HONs have cars, but we'll be challenging this assumption as we develop our transportation network. HONs will now incorporate actual time estimates to calculate their time budget.
Phase #7: Transportation and Traffic
Our one simple road model will now expand into a suite of transportation options. We'll create the road customization tool, allowing users to design their own roads on the fly by combining components: car lanes, parking, tram lines, bus lanes, bike lanes, sidewalks, medians, and decorations like trees and grass. We'll also add heavy rail. The pathfinding algorithm will be updated with this more complex network graph. We'll add a small random element so that all vehicles don't take the same path, which would lead to everyone changing lanes at the exact same locations. We'll create our first simple traffic model, using it to reduce the maximum speed on roads and therefore the weighting of that path. This should replicate the observed phenomenon of induced demand.
Phase #8: Advanced Zoning
We'll create the zone customization tool, allowing users to design zoned regions more complicated than the classic Euclidean zoning employed by every city-builder game to date. Euclidean zoning (in which every zone permits either residential, commercial, or industrial construction) is easy to implement in a game, and was the default model across North America throughout the 20th century, but is deeply unpopular among modern urban planners because it promotes sprawl, pollution, and segregation - we want to give users the options to consider other models. Users will therefore be able to limit by use and/or by form - for example, allow only low-rise residential, small commercial, and offices - or, for that matter, to reduce restrictions on zoning and see what happens.