The test app is now available on Itch.io. The code that originally displayed a customized Google Forms URL after 10 minutes of play is disabled, but otherwise the game is identical.
The complete Unity project source and sanitized data are available on GitHub here.
Within the hour, I’ll be posting a Unity WebGL game to Reddit, in hopes of collecting a statistically meaningful sample of responses to a questionnaire. In addition, through Tuesday, June 8 at 22:00 CET I’m conducting a raffle to encourage participation. This could go wrong in so many ways, and only right in one.
The characters’ anxious hand-wringing is my own.
Edit: The raffle is open!Click here to play the test app.
Performs best in Firefox and Chrome. Feel free to play the game as much as you’d like, but please only submit one survey form.
Terms and Conditions:
Persons over 18 who submit the survey between Friday, June 4 at 22:00 CET and 22:00 CET Tuesday, June 8, and enter a valid Steam profile name will be eligible for a raffle, to be conducted by June 20th, 2021.
-One first-place winner will receive a $75 USD digital gift card, sent through Steam. -Two runners up will receive $25 USD digital gift cards, also sent through Steam.
The winners will receive a friend request from my Steam account, “rhinocrate” and receive their digital gift cards as a friend-to-friend gift.
I wish it weren’t necessary to say, but I must reserve the right to disqualify participants based on evidence of ballot-stuffing or other forms of inauthentic or abusive behavior. There is a limit of one entry per person. Steam accounts must have at least one purchased game to be eligible for the raffle. If fewer than 20 valid responses are received, the raffle will be cancelled. No data collected will be used by me or anyone else for any purpose beyond tabulating results and completing the one-time raffle, nor will personally-identifying information (including IP addresses and Steam account handles) be distributed.
Introducing beta 7 of Forest, with better graphics, a more dynamic game world, and many behind the scenes tweaks. This project is released under an MIT License.
Forest Gods. Nearly all aspects of the board can now be influenced by randomly-generated, free-floating roamers. Some are dramatic (like lightning gods) others practically invisible (like soil porosity gods). They’re intended to make the forest more varied, and perhaps even less lonely and more mysterious.
Improved Fire. Fire has been an aspect of the game world for several versions, but is completely rewritten in beta 7 to be much more graphical, dramatic, realistic in its effect on the forest, and unpredictable.
Better Graphics. The band of the sun now moves throughout the year more accurately, and the stars now properly blur into rings as well. Fog is a custom shader, the minimum of height fog and linear distance fog. Lighting for the ground and water now comes from an array of lights aligned with the sun ring. (Trees are still sprites, however, and don’t yet respond to lighting.) The randomly generated forest’s average temperature is used as a stand-in for latitude.
Smaller Board. Moved from a 200×200 tile grid down to 128×128. This seems to tax the CPU a little less without noticeably changing the scale of the game.
Erosion. Soil is now washed along by water. Stream system formation is still rare, but it does happen.
I’ve tried to organize Forest into a series of big JavaScript Objects that group related activities, and Classes to cleanly manage everything I need more than one of. Please take a look at the game loop and WebWorker code if you’re interested in how any of it works. This project is released under an MIT License.
Roamers: Everything that needs to be updated each frame, including the camera, the camera’s (invisible) target, lightning bolts, etc.
Mats: Materials and texture maps, including the ground’s dynamic texture
Sprites: Lifecycle and behavior management of trees, energy balls, etc.
PostProcessing: Manages GPU special effects for the scene, like bloom
Shaders: Overwrites some of Babylon.js‘s shaders with custom versions
Actors: Container for the Actor classes
Classes
GridTile: Manages one point on the map grid, and holds the Actors currently active on it
TileAlias: GridTiles in the first row and column use these to keep track of the geometry they must also update to smoothly wrap the map
RenderGroup: A block of GridTiles, which can be prioritized for drawing depending on the camera’s current position
Fire: An Actor which consumes other actors, then temporarily blackens the GridTile
Tree: A large, slow-growing Actor
FallenTree: An Actor which slowly loses mass, producing new soil
Grass: A small, fast-growing Actor, which greens the GridTile
DeadGrass: An Actor which slowly loses mass, producing new soil, while it browns the GridTile
ProtoRoamer: Class containing data fields and actions for things that roam around on the board
Camera: Subclass of ProtoRoamer, which moves the camera
Target: Subclass of ProtoRoamer, at which the camera is aimed
Energy: Subclass of ProtoRoamer, short-lived, produced where you click, which feeds energy to the Actors there
LightningBolt: Subclass of ProtoRoamer, very short-lived, obliterates all Actors on its GridTile and starts Fires on surrounding tiles
Updates
Better performance in all browsers. Beta 6 moves the process of updating water flow and ground conditions into a WebWorker, a second processor thread. Beta 5 was a major rewrite to accomodate this, moving most of the data of each GridTile object into a single, large Float32Array, and adding Getters/Setters to the GridTile class to make the array data behave like normal properties. Parts of the array can then be rapidly copied, to update the vertex data or to be sent to the worker thread, via the .subarray() function. Data returned from the worker thread can then be copied back into the main array via a .set() operation. Currently, any changes made to the board by Actors or Roamers during thread execution will be overwritten
Better performance in Firefox and Chrome. The GridTile prototype uses Getters/Setters to manipulate the data in the master Float32Array. This was originally done in Beta 5 to allow moving some updating to a WebWorker, but for whatever reason the major speedup of moving the data into the Float32Array alone ended up being worth the change. The index lookups in the Getters/Setters (e.g. ground.data[ground.indices.watertable+this.index]) bring virtually no overhead in Safari, but Chrome and Firefox struggled with them. Beta 6 caches the lookup indices in each object, which speeds up Firefox and Chrome considerably even absent the WebWorker thread.
“Forest” is a peaceful, meditative god game. It is free, runs in any modern browser, and is played with one button (or finger). Each time the page is loaded, a forest with a random climate is created. You may interact, observe, or any combination of the two. There is no objective.
The game is written in JavaScript, using WebGL via the Babylon.js framework. Beta 5 is a preview release for which I’m grateful for feedback– a major rewrite, much faster and more memory-efficient than previous betas, with most of the major systems in place for the game as I’d originally conceived it. If you’re interested, please take a look at the source code.
MIT License
Copyright (c) 2020 Matt Rasmussen
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The House of Time, a scale model of earth history, public beta v0.3 is now live. While it’s still pretty empty, this is the first release where I feel the important pieces are all in place (if only as stubs).
The House of Time, a scale model of earth history, is now in public beta. Introducing v0.1.
New This Release:
Assets
Holocene Gate – Pleistocene Drain – Pliocene Verge – Miocene Planters – Oligocene Drive – Eocene Circle – Paleocene Stairs – Hall of the Cretaceous – Hall of the Jurassic – Hall of the Triassic – Permian Veranda – Carboniferous Grove – Devonian Stand – Silurian Deck – Ordovician Walk – Cambrian Path – Proterozoic Acreage – Archean Waste – Hadean Shore
Engine
Babylon.js-Based Engine – Zero-Texture-Map Detailing (world space and model space GPU noise functions, SVG importer, client-side extrusion) – Positional Asset Loading/Unloading – Sound Manager – Environment Manager – Async Terrain Updater
Bug Fixes
Not enough
To Do:
Assets
Membership/Info Card – Titanosaur & Other Models – Low-res Ionic Column – Moon – Stony Beach – Stars – Sunset – Much Much More
Engine
Framerate-Independant Movement Speed – Lazy Shader Compiler – “Crawler” Mesh – Fill Lighting for Darkness – Touch Controls – Frame Rate Optimization
Bugs
Unpredictable Sprites – Ocean Vertex Displacement Not Following Waves – Hadean Cliff Artifacts – Ripples Only Visible When Looking East – Safari Support