Groovelet Updates / GDD
Wherein I do a whole bunch of things and it's not clear if I've made much forward progress.
Since the last major blog post, I’ve:
Got Midnight working, partially by adding a whole mess of new automated integration testing abilities like “loading a specific game state”, “turning back time” and “forcing specific cards into your hand”. (I should add admin UI for these things, they seem like they’d also be useful for donking around in a non-automated fashion.)
Made unplayable cards… actually unplayable in the UI.
Added a (kind of ugly) visual representation of the day-night cycle (a gradient moves around in the backdrop)
Added (developer) card-art for the small cards, then bundled them all together into a quick-loading spritesheet.
Added “Journal” entries that spawn at the end of the day. The game happens on a two week cycle, so a different “Journal” entry will spawn for every unique hour in that two week cycle: the only way to see them all is either to coordinate with other humans or play the game for every waking hour across two weeks.
Wrote, like, 200 stupid bits of text for the 336 possible journal entries.
Significantly improved the engine’s ability to persist data (it used to throw out everyone’s game every day, so, just not doing that was a big start)
Added empty “Admin” and “Collection” windows to… put stuff in, and did some of the initial API plumbing to allow those windows to do stuff.
Voxel keeps on suggesting that I make a game design document for Groovelet, rather than just hacking randomly on whatever interests me at any given moment.
The problem is, these things get out of date so quickly, and I’m working on a team of one person, so it’s not like I’m trying in vain to coordinate a whole team of people around a constantly shifting vision. There’s one ME, I know (vaguely) what I’m trying to build, and I don’t feel terribly beholden to update a document every time I move the goalposts. A GDD seems like the sort of thing that becomes a bible the minute you actually have collaborators, but not until.
While I’ve written a whole bunch of disconnected GROOVELET STUFF over the past LONG WHILE, including a few GDDs, but here is an attempt to compress the whole of the current design into a compact document that I can “share” with “other humans”. A lot of it is just a rehash of stuff I wrote in “It Kind of Works”, but slightly more organized:
The Elevator Pitch
In this MMO Card Game, retro-tech robots wake up in a far-future without any humans in it, craft in order to survive, and do archaeology in ancient human ruins to find out what has happened to the world.
Outline of the Plot
In the year [REDACTED], a regular run-of-the-mill geek builds, launches, and subsequently abandons a resilient distributed system packed with era-appropriate technology references.
In the year [REDACTED], the [REDACTED] finds the original distributed system, and uses it as the basis for the Groovelets.
In the year [REDACTED], the robots start to come online, in a vast, empty forest and are trying to piece together records of what happened and why.
Duodecimal: Things in the game often come in sets of 12. There are twelve colors, twelve notes, twelve [REDACTED], 12 major in-game biomes, and the groovelets count up to 12.
Cards: Most things and actions and content in the game are represented as cards, this is fundamentally a very complicated card game.
Retro-Tech: This game is cram-packed full of references to technology from the 90’s.
Non-Violent: The groovelets are not even capable of violence.
Tamagotchi: You’ve gotta take care of your little groovelet! They need food and warmth and friends.
Trash Archaeology: A lot of the “finding out what happened to the humans” is sifting through trash and crafting with trash. We made a lot of trash.
Music: Groovelets are musical creatures.
A player controls a single Groovelet.
All actions in the game are performed by taking a Turn. One Turn happens every 45 seconds, forever.
Every hour, a “day” goes by. Every two weeks, a “year” goes by. These milestones are important, because they reset a whole lot of in-game parameters.
Each turn, players can draw a new card out of the Forage deck, or play a card out of their Backpack. Once a hand’s effects resolve, all cards are dumped into the Discard where they can be retrieved by a “Rest” card.
^ most of this is actually built and even kind of works, as is shown in the screenshot.
Midnight and Winter
At the end of every hour, there is a grand reset where a whole mess of cards are removed from your backpack/hand/discard pile. Generally, cards that are intermediary stages in crafting recipes are ephemeral and don’t stick around for more than an hour (an in-game day).
At the end of every two-week period, there is a much grander reset, clearing almost all/all of the game’s cards.
These resets are pretty brutal, but intended to serve a few purposes:
Most of the gameplay is focused on making sure that the loop within an individual hour is fairly tight. Users are trying to construct a combo that will get them a handful of permanent cards rather than being allowed to accumulate dozens or even hundreds of cards per hour.
I can develop the game in two week cycles without worrying that players will be holding on to months-old “legacy” cards that I still need to support.
“Permanent” games (MMOs in particular) tend to have a problem where old players have accumulated EVERYTHING IN THE GAME and new players have NOTHING AT ALL and content must be developed for very specific tiers of players. Instead I hope that this allows us to develop a two week span of the game that’s very wide and deep for all players.
^ most of this is actually built also.
Each player has a Collection, which is an empty book with slots for all #0000 of the game’s cards - like a PokeDex. The collection keeps track of every card that the player has ever seen, and filling the Collection (seeing as much as possible) is explicitly one of the most important goals of the game.
extra credit: The Collection is one way for players to develop a permanent presence, but we probably want more ways, like permanent decorative elements (“Hats”) or a decoratable permanent home.
Embedded Card Media
Cards found by the player can have media embedded on them. The “View” window will allow players to unpack sound, video, or even interactive dialogue segments loaded on to cards.
The player’s Groovelet has a variety of Needs. The Needs are stacked, like so:
Needs lower on the stack are more important (but also easier) to fulfill than needs higher on the stack.
A Groovelet, for example, may be warm, full, and clean, but lonely. If a Groovelet is hungry, it doesn’t matter if they’ve filled up their Friendship bar.
The Groovelet’s mood affects their FORAGE - cold, hungry Groovelets will basically only be able to find logs, apples, and grubs, whereas happy Groovelets are able to find the game’s rarest and most interesting cards.
Locations & Travel
The Groovelet starts the game in a Forest node.
Each Location is a node in a connected graph. Each Groovelet starts the game in their own connected graph, their Universe.
Each Location has a Biome, as well as a handful of properties that may render that node unique from other nodes of the same Biome (maybe “forest” and “forest with stream”). Locations can be (semi-) permanently upgraded by a Groovelet by using cards to construct improvements - a Location with a Fire Pit will find it much easier to construct campfires, for example.
A Location’s permanent structures and Biome will affect the Forage deck.
A Location is displayed behind the game’s windows, as a semi-animated desktop wallpaper. Improvements to the location are stamped atop the Location’s art. The Improvement stamps can be dragged around by players if they want to make their locations more intentional looking.
New Locations are added as the game moves along. An “Explore” card is a card that only spawns when the Groovelet is in a good mood, can only exist once per backpack, and upon use is exhausted and adds a new Location node, connected to the Groovelet’s current node (each node can only be connected to a maximum of N other nodes, where N is … either 2, 3, or 4). Spawned nodes might also spawn connected to other nearby nodes.
Ha ha, the whole fixed time signature of this game makes it possible to share the game with other Groovelets.
You can give other players an Entry Code to your personal Universe. Once they’re in your Universe, they can walk around! If they’re in the same node as you, you can see 'em. Now you can both explore and build in the same graph.
Anything constructed in a Location by either player’s Groovelet is now visible to and usable by everyone.
Communication with other Groovelets in your universe is heavily restricted, because I’m not about to get involved in complicated moderation. You can either send
symbols from a small set of communication symbols
messages constructed out of a cipher language carefully constructed to make sexually harassing minors, if not impossible then at least incredibly tedious.
[REDACTED] suggested “some kind of economy”, “characters sharing a space get a larger item pool that they both select from”, and “characters can communicate with custom 32x32 images”, which are all good multiplayer ideas
“Towns” as a Location that’s explicitly “more multiplayer by default”, like maybe Towns in-and-of-themselves link to a group-accessable graph?
Interaction with other players is one of two ways to fill up your Friendship need, the other being:
Animals walk the nodes a lot like other players do, but semi-randomly according to their own rules. Interaction with animals is another way to fill your Groovelet’s “Friendship” need.
Extra credit: everything in this section
This windowing system should also support some pretty self-contained shenanigans. If I have an idea for a stupid self-contained little game or app? Might as well just throw it in here as a separate window. Basically anything that I can render into a React div can go in here… ideas for stuff to build as Groovelet OS apps include:
a “Groovelet Cipher” language builder/decoder
unwanted ad pop-ups
90’s era website homages in a mock web browser (you’re the man now, dog!)