I added a web-friendly version. It doesn’t look quite as nice, and using the portals between worlds is a bit slower, but it runs pretty well. You can get away with a lot when you only have to worry about the user looking at one image at a time, and when interactions are every 1-1/2 second instead of 1/30th-1/60th of a second.
More than one person, independently (myself included) have asked and wondered how the experience looks in real time.
It’s a complicated question, but the short answer is: different.
The clip shows two takes on the filter in real time. The first variant keeps the grain and redraws the brushstrokes each frame. The result has a sketched look. The second part of the video keeps the brushstrokes static. There are countless other ways I could adjust the look when animating it, even when keeping to the same basic filter idea.
The visuals are not better or worse than the stills, just different, but I’ll ultimately be using it for a future project. Forska is as much about combining the freedoms of both point-and-click with realtime data. As I mentioned before, there are a lot of tiny things I don’t have to worry about in Forska that would take me be a lot of time to properly fix if it ran at 30-60 fps. I had a little over a week to build something for this game jam – I didn’t want to spend 4 days of it getting stuck on acceleration ramping and physics follies.
I’ll post the details of how I programmed Forska now that the game jam is winding down (and now that I have a better idea of what I did, myself) in a little bit. There are a ton of features I want to add and expand upon. Many features I know what I need to do, but was limited by time. One of the many things a game jam does is encourage you to allocate time and attention to different things, and not get stuck on one aspect. Some features are creative decisions that just need more thought, and others are features that would be nice but I have little to no experience with:
More varied terrain: limited by time in the game jam. I’m accumulating a library of noise functions and ways to combine them.
Fancier weather, day/night cycle: limited by time in the game jam
More sophisticated agents: An open creative question. All I did this week was allow simple characters to exist and move around in the world space. There are many ways to go with this aspect of the project.
Streaming/threading: Would be awesome, especially given the rhythm of interaction in Forska, but I have very little experience with threading/streaming. This is all prototype code, and should be for now, but I imagine the whole thing could be incredibly optimized. Not to allow real time (I showed Forska can already run at high frame rates) but in order to allow more simulation:
Simulation: One reason I made Forska a frame-by-frame experience was so that I could add in robust and heavy simulations without worrying as much about those simulations hitting the framerate. Having truly global simuations are hard to do, and paradoxially conflict with many of the aspects of classical procedural content generation. Many procedural functions produce large, pretty, but ultimately static output. Having weather, agents, and nosy players interfere with what was generated needs to be kept track of, and that can’t be stored in a single random seed. The most computationally intensive part of Forska, by far, is the initial generation of the terrain, and that comes through looping through each heightmap cell multiple times. Some combination of streaming/threading can help with that. Combining simulation with procedurality is a complicated but interesting problem, and I’ll be thinking of ways to tackle it for Forska.