Here’s some things I did the month since the last update:
I completed my entry for the js13k2022, TenderGotchi, with great contributions by Ryan Malm on the audio side, and reusing illustrations from last year made by Mateo Robayo. A complete post-mortem post about it will be out soon.
We had a mentoring talk for Colombia’s Women Game Jam 2022 sharing our experience with Muyscamuy. (Spanish)
I created a video for the House of the Dragon series for Slashbits Retro Cinema, in the same style as the previous Game of Thrones videos.
It was actually two videos because I decided to create another higher-res intro for less super retro people (90s instead of 80s)
I flew to gamescom, where I had good prospects for NovaMundi and our upcoming project, and also met the dev team of Blasphemous and got to drive around Germany with Thomas Biskup.
My talk for the roguelike celebration 2022, “Celebrating Moria – a roguelike before the roguelikes”, got accepted. I started gathering community info for it.
After a long hiatus, I ran the FormulaProc Monza 2022 Grand Prix, no commentary this time, but it was good.
Some work was done to make the intro sequence more data-oriented to ease the setup of future events.
There were also some improvements on the dialogs (content), but a system to make them evolve based on the development of the story is still missing.
This GP included an awesome brand new track from QuietGecko: Low Gas. Due to time constraints, it didn’t have narration.
Simernio, the project artist, also created a new awesome cover art that is being used in many places.
Monaco Grand Prix 2022
Two visual additions: a semitransparent shadows layer and a subtle overlay for the track itself. These were especially important in this city circuit since there were a lot of buildings projecting shadows, and the way we continue doing tracks makes it hard sometimes for the spectators to see the circuit clearly.
For the production of the content, I experimented a bit with a Portrait Version meant mainly for TikTok (where we seem to be having a bigger audience maybe).
This GP also included a new QuietGecko track, a sweet Drum and Bass track called “Turbo”
For the first time in the 2022 season, I added narration to the race. We also experimented with a PA effect over it which I think worked pretty well. Additionally, I added subtitles for both English a Spanish for the first time.
Monaco Special Event Mazzerano Challenge
All drivers competed under identically spec’ed vehicles; besides, we experimented with some post-processing effects, including a sepia tone, vignette, and grain; these were barely visible in the quality of the streaming.
Meta
With this project, I continue discovering how many people are actually needed to run such a thing in an orderly manner. In addition to the obvious needs in the audiovisual front requiring an additional magnitude of work, there should be roles for video edition, publishing to all different platforms, and I’m not even talking about the marketing efforts for this to reach a wider audience. All this is on top of the neverending task of improving the simulation and making the emerging narrative more interesting (which is the main thing I’m interested in).
While we continue evolving, I’m keeping the idea of this being something made for my personal enjoyment and that of my friends, and produce it at the scale and the amount that I can handle; that includes lowering the invested time so that other projects (like NovaMundi) can reach completion.
Here’s a somewhat late update on the events that happened at the end of Season 1 of FormulaProc. We ran 3 events before dropping the torch and going into hiatus as we missed the start of the Formula 1 2022 season because of running out of energy and having some external factors intervene, we have missed three races now but we want to jump in with some much-needed improvements.
This update is divided into two parts: The improvements in the simulator, and the details of the events we ran.
Simulated Events
We ran 3 events for the Mexican, Brazil, and Abu Dhabi Grand Prix. I continued trying my best to narrate the events, and we also made posters for Mexico and Brazil. When we reached Abu Dhabi we had basically run out of energy for promotion so there was no poster.
In addition to the main events, I also ran exhibitions for Mexico (winners of the Mexican Grand Prix, using the “war” mode) and Brazil (with the drivers of the Formula One 2021 season, extending the list of top drivers to 20).
Simulator Improvements
Mexico: Activated the “cinematic” events, but mixed with the top-down view instead of a full representation of the event both for budget and practical purposes of incremental improvements. This replaced the head-to-head stats of drivers and included having some “emotions” for the drivers, and some logic to make sure the viewer has some time to see each event amidst the chaos that a race can represent.
Some small but important changes were also done in the simulation, implementing a restriction for maximum speed, and scaling brake deceleration to try to obtain more down-to-earth results and more exciting conditions on the track.
The race intro/track info panel was broken down into a sequence of more readable screens as well. And new extended music tracks made by QuietGecko were included.
Brazil didn’t include a lot of changes; however, I gave a first try at the “dialogs”, displaying a speech bubble over one of the drivers, alternating to give the sense of a simple conversation as events unfolded.
And finally, for Abu Dhabi, there were not really any engine changes; the only difference in this race was using a “night mode” where the track is darkened to give the illusion of it happening at dusk.
Getting ready for 2022
After Abu Dhabi, there has been a lot of work in different areas although no new events have happened.
On the visual side, we have created our own hand-crafted models for our open-wheeled Formula-type cars; the designs also include the colors and brands of our first sponsors; I will be revealing these in the upcoming days. We are also revamping the portraits of the characters and their emotions, and creating a new title screen.
On the design side of things; we are giving each driver a different personality which will be reflected in both their driving style and their dialogs and interactions with other drivers. We are also designing new types of events that could happen inside the races.
And that’s it for today’s update! make sure to subscribe to the YouTube channel so you don’t miss the races!
Work continues in FormulaProc in anticipation of the 2022 Formula One Championship starting.
This update is divided into two parts: The improvements in the simulator, and the details of the events we ran.
Simulated Events
I set up and ran the events for the Italian and United States Grand Prixes, and their qualifier sessions; this time, instead of having news articles written into the blog, I narrated these and edited the videos. This was… exhausting and not being a native speaker yielded results with a lower quality than I want, but on the other hand, it really breathes life into the events. I keep looking for voice artists that want to contribute and experiment along, as I also improve the simulation to make live narration easier (or even possible?)
Simernio created a cool poster for the United States GP, and we are still devising better ways to bring people into the show in conjunction with Valnyr, trying to improve our reach in social media with things such as Instagram reels. We’ll see how that goes. For now, the channel with the biggest traffic seems to be TikTok, as the YouTube channel still lags under 100 subs.
I also ran a couple of special events (which required the creation of the “war mode” setting in the simulator), the first one was a test event for friend Nookrium with a whopping number of 255 drivers at the track, (a deathmatch for his supporters). It was chaotic and fun, although it didn’t spark a lot of discussions. I briefly talked about FormulaProc with Nookrium too, and I think at some point I’ll release the sim so people can play around with it and create their own tracks and races.
The next one, just for fun (and hoping to attract some Formula One fans too, and failing at it?), was putting together all of the 34 Formula One champions into a race in the Circuit of the Americas to see who would win.
Simulator Improvements
For the visuals, we are still keeping the overhead view as the main display, although I have been discussing alternatives and even creating some experiments for more “cinematic” experiences; these will take some time to materialize due to the production work required but we are definitively heading this direction so that watching a race will be more similar to watching an anime short than seeing an automated videogame running.
Also, as you can see above, a big change I introduced was replacing the drivers’ appearance: I’m no longer using Unreal MetaHuman to try to create photorealistic characters; instead, I’m portraying them as manga/anime characters. I have the feeling that, for our target audience, it going to be easier to connect with these characters and engage with the emergent story we are creating, and it will give us more room to introduce fantasy elements.
For now, I’m using the amazing CHARAT BLANC to create the portraits, but eventually, we are going to need an artist on board to make more unique designs and poses.
The maps themselves have been improved with the addition of “points of interest” labels, which are funnily similar to the “corner names” we had in the first versions of the sim; these serve the purpose of being anchors for the commentary and history, as well as points of reference inside the tracks which sometimes might be a bit featureless. I’m also now upscaling them using an “oilify” GIMP filter, to make them look a bit more like a painted illustration.
As mentioned in the events above, I also added support for “war mode”, that is, massive and often chaotic races of over 30 cars. The data for the drivers is read from a flat text file, and they are assigned random stats and cars. Right now it’s more of a fancy thing to watch than an interesting or detailed simulation for each driver, but the Internet is built over fancy things to watch so this might end up serving as a tool for more people to run into us.
Another minor change introduced was displaying the cars as “ghosts” in the qualifiers sessions (well, except for the leading car). I keep trying to make more clear what’s going on there (all cars are not racing at the same time, instead it’s a replay of their best lap)
There was also some important work in the “intro” sequence; before the race begins we now display some information about the track, and then we are displaying the starting grid; QuietGecko sent an amazing track for the background of this sequence.
And finally, as part of the tests for the cinematics, I’m also experimenting with adding “emotions” to the drivers based on the events happening in track; this is still evolving and will likely become more elaborate with time.
And that’s it for today’s update! make sure to subscribe to the YouTube channel so you don’t miss the races!
Work continues in FormulaProc in anticipation of the 2022 Formula One Championship starting. For this update, we have contributions from Esteban Martinez over the narrative front. Check out formulaproc.com for full info.
Simulated Events
I set up and ran the events for France, United Kingdom, and Belgium Grand Prixes and their qualifier sessions, each event has had something new as detailed below. Esteban continued providing the foundations of the narrative, presented as news articles on the main website.
Visuals
The most visible addition is, of course, the overhead view of the tracks and the cars running through them. This is a jump we had to take in order for the races to feel less abstract; I found out the people who like this kind of content are very attracted to the visual aspects so we had to break from the “flat” type of race we were showing.
Of course, this meant I could no longer spread all the cars side by side, and instead I had to put them over the road. For this, I created a system of “lanes” or “tracks” taking inspiration from slot car racing with the exception that cars here can switch lanes after surpassing.
I reused a lot of what was coded for the minimap, adding rotation to the equation and doing a lot of work to make setting up the scale of things more easily instead of trial and error.
In order to provide a sense of depth, I also added a layer drawn over the cars (currently used for things such as bridges and tunnels).
I created a short video detailing the process of setting up a track under this new system.
Simulation
Added a “Flying lap” qualifier system, the cars to a warm-up lap, and then all of them stack in the starting line and start their flying lap at the same time, retaining the speed and acceleration they had. This means all of them have the same chance of having a quick lap.
I also scaled the acceleration values so they are more realistic, cars were moving just too fast in the track (and this was hard to visualize in the linear view, but was much more noticeable in the top down view)
Cars also now fly past the finish line when the race ends, as them staying there was no longer needed with the introduction of the positions table, and it looked weird for them to stack there in the new overhead view.
User Interface
Improved the format of tables, and removed clutter from the HUD over the cars since most of things were now redundant with the driver info box and didn’t look good in the new overhead view.
Camera
First steps to make an automatic camera; before this I had to manually scroll thru the race, trying to find interesting moments to record; now the camera warps automatically to ongoing combats or drivers approaching each other, so now there is no human intervention in the creation of the videos! this still needs more work to be less instantaneous and maybe also allow replays or parallel cameras.
Artificial Intelligence
Tweaked the AI to have something of a state model, entering a braking phase before a corner based on a calculated risk, and sticking to it until close to the corner. This is in contrast to the model before where such evaluation was made every AI cycle, which led to very erratic gas/brake behavior.
Thru this last month of dev, the project graduated from a ProcJam entry into an official Slashware project with contributions from QuietGecko, Simernio and Esteban Martinez. All the current stuff can be reached from formulaproc.com
Simulated Events
I set up and ran the events for the Spanish, Monaco and Azerbaijan Grand Prixes and their qualifier sessions, each event has had something new as detailed below.
The first thing I improved was adding the circuit map; this was critical for players to get the feeling of being there. It was implemented with some basic trigonometry allowing to locate the markers alongside a polyline (only straight segments, no curves for simplicity, so long curves in the circuits are just a lot of small segments which works good enough)
Gecko created an upbeat music track for the races, and sound effects for the events such as new lap, surpass, and countdown. We also worked together to create the engine sound which was something critical to get the feeling of the race; it was an iterative work which required tweaks on the simulation itself so that the dynamics of the RPM and the gearboxes on the vehicles matched the variations in pitch we needed to get just the sound we wanted.
I added a couple more visual indications too, first off I added “combat notifications” to let the viewer know when a car was trying to gain a position and when/if he was successful; that ended up being super confusing and useless, and was later replaced by indicators in the newly added “intervals table”, which is a permanent indicator of the positions in the track and the difference in seconds between the drivers.
I also worked with Simernio to fully redesign the appearance, and added a box with the stats of the race leader.
Discord Bot
Along with the creation of FormulaProc’s discord server, I developed a first version of the bot using discord.js (including persistence to mongodb with just its native nodejs driver) and deployed it to DigitalOcean.
Right now you can use it to place a bet on a driver for the next race, buy virtual mechandise and event cast spells over the drivers to affect their performance in the upcoming races.
The Intro
I commissioned Simernio to create a new logo for FormulaProc itself, along with logos for each one of the teams and a full blown animated intro taking all this together. It wound up amazing.
Content
Worked along with Esteban to create a page for the teams and pilots with extended descriptions, incorporating the new logos as well as generating portraits for all of the drivers using Unreal’s MetaHuman creator.
I also created a Calendar page listing all the events of the season and their winners, and another one for the current standings. I still don’t know if I’ll have enough time to simulate all of them before Season 2022 starts.
We have also been trying to give some life to the FormulaProc universe via articles covering the qualifiers and the races. We plan to maybe add more content such as interviews, driver profiles, and events happening in this world besides the Grand Prixes.
The Future?
So far we haven’t managed to get much traction, and the amount of work that this has required is not small. For now I’ll release the gas pedal a little bit (will continue releasing the simulations but don’t feel like I should put much more dev into it, especially with the upcoming release of NovaMundi and our secret lighting project.
I’m creating a procedurally generating Formula One-style racing show! Check it out at https://formulaproc.com, here’s the story so far.
The Story So Far
After many years of wanting to, I jumped into ProcJam for 2021. There was always a reason not to do it, since it’s in December and I’ve commonly run out of jam-power by the time it happens. That was no exception this time, worsened by the fact that it happened almost back to back with the work I did for the Cultural Heritage Game Jam with Muyscamuy.
However, I decided to get off my head this idea that had been haunting me for years of making a spectator-sport kind of thing powered by procgen; not a game, but a kind of show around which people could build stories and create fandoms. It has had different shapes in my brain: soccer, cycling… but my renewed interest in Formula One this year made me think on a good balance between the level of abstraction vs. the amount of excitement that could be provided visually with such a simulation.
The marathon “Special Event” of Gold Medal Challenge’92 for the NES, another possible source of inspiration.
I had been talking for some weeks with Simernio and Gecko about this idea, and while we plan to have something more structured and elaborate in the future, I figured it could be a good idea to put the idea to the test at a smaller scale.
A clear inspiration was the F1 Visualized channel: “Formula 1 results and stats visualized using pixel art. Rewatch the latest races in minutes, without missing any part of it. Keep up with any of the drivers to see the race unfold from their perspective.“.
However, their visualization is much higher level (understandably so, since their idea is to compress a long F1 race into something you can watch much quicker), I wanted to create a somewhat abstract visualization of a race, not seeking to be a representation of the race itself but rather of how the race unfolded, leaving the players to fill the gap in usual roguelike fashion.
The main work in the implementation of the simulation happened from December 6 to 12 (when the jam ended). The jam encourages post-jam work for people not to stress (ha!), but we all know the entire point of a jam is to generate stress so that you produce something complete by a fixed end date, so I ignored that and pushed forward to have something solid by the end of it.
But wait, is this procgen?
I figure this may not be considered a “normal” procedural content generator; for procjam you’d more often expect something that creates things such as maps, level layouts, buildings, worlds, or maybe even something that awkwardly tries to come up with a written narrative or story.
What am I creating here? my intent is to create some facts, events that happened, and around which you can build stories and maybe even a community. And the main tools I’m using for this are physics simulation and artificial intelligence (both at a very, very simple level)
I shared the question in the procjam discord: can something like this be consider procedural generation? There was an interesting discussion about it, in general most people agreed the complexity or level of detail of the algorithm used to generate the content shouldn’t affect whether something is procgen or not.
“PCG is the algorithmic creation of content with limited or indirect user input”
from “Procedural Content Generation in Games”
As always, nothing is completely defined in the field of procedural content generation; but I would say that as long as you are generating content relying on algorithms and there is (pseudo) randomness involved (and you can be genuinely surprised by the results as the author), it IS procgen, and don’t let them tell you otherwise.
How it works
At the core of everything is an abstraction of the circuit based on its corners and the speed needed to transverse them safely; this is derived from the telemetry data of the drivers of recent races and is a bit loose because I’m not looking for a super accurate simulation but rather something that feels good enough.
The circuits are one-dimensional, and the racing is simulated based on both the stats of the cars affecting their acceleration, braking deceleration, gearbox efficiency, max speed, and the drivers having different reaction times, gearbox proficiency, and profile risk. There is a qualifying mode where the cars don’t interact and it’s all up to the performance of the driver and the car, and a race mode that adds more variables into the mix with the interaction between the drivers.
In order to provide the illusion of speed, some bars are placed on the track every 300m. In addition to this, an important aspect of the theming of each circuit is the name of the curves/corners, which are also placed as bars and provide visual feedback of the places where the cars brake.
I also added a kind of “minimap”, scaled-out version of the track, to make it easier to have a glimpse at the status of the entire race especially when the lead cars were too quick and left slower cars behind.
FormulaProc.com
The jam was just the start… while I delivered a complete simulation that could be parameterized with track data and would provide different results every time, I decided to have a single so-called “exhibition race”, happening in the Spa-Francorchamps circuit, be the published “results” of the jam.
But my plan was to build a complete series of this. I thought it would be cool to have the fantasy races happen on par with the real Formula One races, but the F1 2021 season had just finished (Go Max!), so I decided to start with the rebuild of the 2021 season, incrementally building the simulation quality along with the visuals and stuff based on the feedback of a hopefully growing community.
I set up a YouTube channel, a WordPress website, and a Twitter account for it, and started recording some more videos. So far I’ve done 4 races and posted about them in the official newssite. It still hasn’t had a lot of reach but that’s fine because every video is sligthly better than the last one, as I add new stuff to make the races more exciting!
The Portugal race, for instance, added non-critical accidents, allowing for much more varied stories that still felt believable, and the next race will feature some awesome soundworks by QuietGecko.
There is still a long way to go to make this feel more engaging; one of the things I’m already experimenting with is giving the drivers some visual shape so that people can relate to them; Simernio had the idea of using Unreal’s Metahuman Creator which has already yield some interesting results; for now we are just testing but it might be a good idea to make full use of it and render the characters in a fully controlled environment, as well as including more appropriate racing attires.
Biskup T., driver for the Queenscape team in 2021
As always, I’ll keep working on this until I run out of steam… hopefully when we catch up with the F1 2022 season we’ll have something more engaging and fun! in the meantime make sure to follow and subscribe 🙂