Constructing a Capital of Late Antiquity 🏛 Streets of Fortuna Devlog

Streets of Fortuna

Use your wits to survive the generated chaos that is life on the Streets of Fortuna. A free-roaming sandbox game about improvising as a street rat, first to find food and shelter but perhaps someday to rival the Overlord. Beware the penalties for thieving!

[img]{STEAM_CLAN_IMAGE}/45053862/5a64bc22077c81974225f6ff18742c17dfc73d5f.png[/img] One of the most important considerations on Streets of Fortuna is the creation of editor tools for designers and artists. With hundreds of locations and tens of thousands of objects it takes a great deal of variety for the city to appear believable and compelling so we need to quickly and easily be able to create A LOT of stuff. In fact, the Item Tool was one of the very first things implemented in the project - it was through the process of creating different types of Items in the editor, even before they could do anything in-game, that we worked out many of the details of how we should simulate the gameworld. Whenever we start a new feature that requires authoring we really dig deep to figure out how to make a tool as user-friendly and flexible as possible because we anticipate using it for years to come. [img]{STEAM_CLAN_IMAGE}/45053862/d590c6d3d1a94b3516f4d51c0d1454c777b1c058.png[/img] Almost anything you see in the game besides walls, floors and characters is a simulated item, even the furniture and rugs. This is because they all need data even if it’s just for the purpose of generating an object that matches the economics or tastes of their owner. And since every object on a shelf or in a cabinet can be picked up and manipulated that’s a lot of items to create. What’s more, we expect Items to be able to be damaged, transformed, mixed together and be able to be changed by any number of systems. These aren’t special minigame interfaces that only use a limited number of objects, but actions and processes that can take place through the same game interface such as our recipe-less cooking and crafting. [img]{STEAM_CLAN_IMAGE}/45053862/8ba73dd10f13849057407abcbe60da75b51fa0ef.gif[/img] [i]Behold this chicken transformed into… CHOPPED CHICKEN[/i] But we’re not simulating the game down to the literal atom so we’ve got to draw the line somewhere and come up with our own definition of this game’s physical world. To that end we’ve defined Items as having a “Form” and a Composition made up of one or more “Substances”. Each of these has their own tooling pipeline as part of the process of creating the objects that appear in the game. A Form defines the basic appearance of an object and many aspects of its use, size, etc. Most of the actions a character can perform on an object are based on its Form. A Form might be a Vessel that can store a certain amount of liquid, or it might be a Weapon with an edge to apply Slashing Damage. Or maybe it’s a well-crafted statue of a mythological hero that’s worth a great many bezants! [img]{STEAM_CLAN_IMAGE}/45053862/637f820798feb87ee8d08811f069939d129b98bd.png[/img] [i]Form data for a small urn. These are intended to use Ceramic substances but there may be a number of different types of clay with their own properties. Furthermore, pots such as these can be painted in dynamic colours (in case an NPC loves blue for example).[/i] Substance affects other properties, such as how an item receives damage or deals it (regardless of whether it’s part of a Weapon or not). Some substances are Edible, with various flavours and nutrition values attached. And most objects break down into base Substance items when they’re destroyed. In most cases an object has only one Substance, but metals, foods and liquids can potentially have more than one in their Composition. Objects made of metal alloys display their colour as an aggregate of the various metals involved and properties such as hardness and value change significantly. Meanwhile food compositions have a significantly more complicated system for determining their appearance and flavours combine and change in a variety of ways. [img]{STEAM_CLAN_IMAGE}/45053862/e58a13463c734f47ff21764f54f36e86d45970b5.png[/img] [i]Substance data for a Pear. There is also a Pear Form, but since an object can be chopped up, turned into a paste or undertake various other transformations it’s important that these properties remain. By the way, a “Constant” is a value that can be found somewhere else in the project to make it easier for us to balance and maintain the many, many items in the game. These will be exposed to modders, naturally.[/i] Finally, the Form and Composition must be combined. Objects can be created dynamically during gameplay of course, but we must author many of them for the purposes of the initial city generation. Most are “Derivative Items” where we can identify one composition that makes up the majority of the object but there are also “Complex Items” for those objects that are clearly made up of multiple disparate parts (beds, forges, fountains, etc). [img]{STEAM_CLAN_IMAGE}/45053862/f20d7c757151ed2c7588b35e79d750b95b0c8480.png[/img] [i]Did you know Bronze is a combination of Copper and 12-12.5% Tin? Thank you Wikipedia![/i] [img]{STEAM_CLAN_IMAGE}/45053862/593f55b3d65807cd26448ab28f20c987337580ac.png[/img] Buildings in Fortuna have hand-authored geometry but procedural contents and residents. We decided on this method because making locations in a 3d game is a significant challenge and we want them to both look good and be optimized for performance. But this means we need to be able to make them as quickly as possible to have enough variety to fill out a city. Locations are constructed with tiles. We’ve put A LOT of work into this process to make it efficient with a ton of customization options. The wealthy elite of Rome & Constantinople decorated every room of their homes differently and that needs to be reflected here. Part of our pipeline is something called AutoTiles 3D and it’s been a big help in crafting the basic building shapes. [img]{STEAM_CLAN_IMAGE}/45053862/f7c89329316af9e3ce15e6cd2f958ba2e13bbacc.gif[/img] [i]Making a location is easy peasy thanks to the not-so-easy efforts of tooling and tile creation.[/i] Once the building is physically complete, we must author the Properties that determine where people can work, live or attend for some other purpose (as a patron, worshipper, etc). Properties are used to determine what people will be generated as well as to populate their schedules and determine Ownership rules for the items contained within. Any given Property has a number of different potential uses that we can author. Obviously the space determines much of what it could be sued for but a residence could potentially be set for multiple low wealth citizens vs one person of mid wealth, or a storefront could be any number of different shops, smiths, etc. These can be selected randomly or influenced by other factors such as district or overall wealth of the neighborhood. [img]{STEAM_CLAN_IMAGE}/45053862/9f287733a816c21eace280f1f16ccb82a7c8699c.png[/img] [i]The first floor of an insula with different types of properties. Red are residences, yellow are shops/artisans, purple is a taverna, the green on the bottom is a stall, and blue is the common area (spreads across multiple floors).[/i] Finally we place the Sets that will determine what Objects ultimately get generated in the world. An Object Set is a collection of nested collections of objects with the potential for a huge amount of variety. There are many possibilities within each Set, down to the layout of a cluster of bottles on a shelf. These are selected in accordance with the selected Property Type but also influenced by the owner/resident of the property where an Object Set is placed (if any). For example, a Blacksmith is more likely to have fine works of Iron around their home, while a person with the “Love Cats” trait might select objects whose Form has a “Cat” tag attached (like a kitty-shaped oil lamp). [img]{STEAM_CLAN_IMAGE}/45053862/7a536eabef47bee35001b3a80c0d7beb406f13f2.gif[/img] [i]Various potential layouts for a 2.5x.2.5 single-room blacksmith. There are a few placeholder objects in the mix and of course the possibilities will grow significantly over development.[/i] Obviously there are many other tools that we use to construct dialog, NPC behaviours, perks and more but all of them serve the same purpose: to maximize the game’s potential for delivering on the ambitious concept of exploring an urban center modelled on the ancient world. Next newsletter we’re going to go into detail about insulae: the Roman & Byzantine style of apartment buildings that most citizens of Fortuna reside in. And if this sparks any other thoughts or questions for you, head over to [url=https://discord.gg/kitfoxgames]our Discord[/url] and let us know! See you in the next one! Brent