I finally figured out how to situate obelisk and connect it to folks without multiplayer or networked elements or having the game placed in New Art City and it’s so simple and good and I am really happy and excited about it- like the last important puzzle piece just connected, and it won’t add any complexity or stress before the show.
In Race after Technology Ruha Benjamin describes whiteness as “a form of property.” That excellent phrasing made a connection for me to cryptocurrency “whales”, who are sitting on a massive investment that is slowly being shown to be a useless, massively-destructive waste- but in order to maintain the value of their investment they must convince new people to buy into cryptocurrency, driving up the price, but further shutting the door on legitimizing it as an actual currency. Whiteness can also be thought of as a sort of pyramid scheme- If you can convince someone of their natural superiority, or even their position as a “default” human, you continue to maintain the implicit rationalization of their place in an exploitative and violent social hierarchy, and dangle the hope of in-group citizenship as a carrot for any groups that could threaten to dismantle that hierarchy. I’m also thinking of the smirking cruelty of the all-pervasive crypto slogan “have fun staying poor”, and the edge of desperation that it carries- and how it ties in to ideas of class aspirations bound to extraction. I felt moved to include that slogan in the game, along with a reference to the stones as “whitestone”. I hadn’t yet addressed race directly in the game, but ideas from American Artist’s Black Gooey Universe are definitely part of the mix. And my fixation on the early macintosh was part of my own class aspirations as a child.
In Obelisk, the disaster to blame for the state of the game isn’t so much the invention of money, rather it’s a system of extraction and materialism difficult to challenge, since it’s enshrined in the rules of the game. The obelisks in the game can’t be reasoned with, they remove the slippery complexities of human judgement and relationships in order to assign value to humans and to smooth the path for war and enslavement. The NPC’s are just trying furiously to get some pie in the sky, and the ground is collapsing.
This was a vibrant land.
The limb of the horizon, viewed from the dark rocks of its shores, was engulfed in the green sea and the teeming business of whales.
The sun at noon was high and gold and blessed the air and the clouds and the collaboration of birds that bore it aloft.
The forests of this land were rich and verdant.
Its soils were fecund and bore great and plentiful fruit.
The people of this land were close and storied and they sang great epics of their histories.
The wildlife of this area was rich and too numerous to name in a lifetime.
It is said that even the animals of this land were heroic and had known deeds and adventures that changed the history of the world and of which humans could only guess at.
The stones of this land were full of beautiful gems and useful metals that were treasured but never knew a price.
The people of this land understood debt but minted no coin.
It’s said these people had no kings or queens, and all of those who lived here were equal and valued.
It is said that the days in this land were long and the weather fair.
The seas here produced enough fish so that the waters were always thick with them, shimmering like quicksilver.
This was a holy land. Its people loved one another.
This land was filled with music.
This was a peaceful land.
This was a land that lived in harmony with death.
This land knew no borders or flags but was prosperous and storied.
This land knew hunger and strife but persevered through work and kinship.
There’s some npc behavior now and one “ending” is in (and I need to finish in a week for the Capstone show) so I am calling this version 1.0 beta. ¯\(ツ)/¯ After the show I am going to need to stop working on this and move on, but it would be nice to revisit it some day collaborating with a “real” programmer to make it more deeply systematized. One of the things I wanted early on that just isn’t feasable with my current design and the time I have left was a sort of economy where the obelisks exchanged stones both through workers and then automatically when one territory encroached on another, and then a great obelisk that was some sort of representation of worker’s bodies tokenized in stones. It’s only kind of hinted at here. Also, slightly more intelligent npc behavior, it’s very clunky in my prototype.
You ever get an idea for something that should be complicated, that you shouldn’t do, because your codebase is a mess, and you’ll probably need to refactor everything to get it to work?
And then you bang out some barely-not-pseudocode and it just works the first time you run it?
While looking for python fantasy map generators, I came across Martin O’ Leary’s Map generator and through it their NaNoGenMo entry The Deserts of the West, a procedurally generated guidebook that is pretty closely related to what I hoped to accomplish with the Obelisk manual, but a thousand times more technically sophisticated. The map generator itself runs in the page I linked as a sort of jupytr notebook style demo, or you can download and generate a full version of the book from Martin’s github.
I’m now successfully generating text from Python which is then in turn built into an ePub (with a web reader) by Triple Canopy’s B-Ber static site/book generator. This is pretty exciting to me. As a warm up I generated 100 tables of Potion recipes, preceded by a markov-generated fantasy quote:
I’m starting to think now about the box, manual and ‘Feelies’ for Obelisk. The full piece should really push the dissonance between what’s in the game and what is hinted at in all the supporting materials. For the game manual, I’d like to have detailed tables of runes, crafting ingredients, spells, etc that I’ll likely generate with python scripts. I’m starting with some python scripts from Allison Parrish that help with creating “Asemic” glyphs. I’m building my versions of the scripts as she does in her example, using a Jupyter notebook. Even though these runes won’t be in the actual unity game, I’d like to create them with some consideration of how they might have fit in an earlier version of the game world. I think they would be cuneiform-like markings in the construction stones, they’d likely have square limits, and the marks would maybe be wedge-shaped like a marking-implement.
Maybe this is overelaborate, but I keep thinking about how adding the ability to place stones back in the ground if they are connected on two sides gives the player a limited ability to restore the ruined world. You could potentially borrow from obelisks, rebuild the ground, decrease their power and just not pay them back.
This would likely be balanced out by npc behavior, as they’d be frantically extracting and repaying obelisks, but as that’s a future design problem to address, what’s a nice way to respond to rebuilding the ground?
I’m thinking this is the time for me to finally get to make a cellular automata- make a class of flower and grass objects that build off of the handful of grass sprites i’ve made, and allow them to reproduce in areas where there’s large plains of ground stones without obelisks.
writing this down while I am thinking about it- instead of left click right click, only left click, there’s a cursor that’s a highlight that snaps to grid cells that looks like feet when it’s far away but walkable, looks like nothing when it’s not walkable, and looks like hands when it’s within one grid space away. if it’s one grid space away and you click it gets/puts a block.
my bff Nick Crockett fixed my pathfinding prob, during play it must not have been updating the navmesh, so placing block tiles wasn’t doing anything. Instead we use pf.SetNavTileBlocked(gridPosition, true); to add a pathfinding block. The problem with not following the path exactly I was able to fix with my pivot offset gameobject.
So obelisk is using a z-as-y tilemap that makes it easy to stack tiles as if they have height. I’m having a time figuring out how you will be able to click on an obelisk, including any of its stacked tiles, and interact with it though, as folks are discussing here and here.
Currently I’m cloning instances of a gameobject called obelisk that sits at the origin of each stack and holds things like the obelisk’s name, an id and height. I’m thinking that there should be a way to programmatically make that game object the same dimensions as the stack of tiles and make that the clickable part.
Over the weekend I got obelisks stacking programmatically. You’re able to sort through all the tiles on a tilemap a couple of ways in unity and I had to try a few. Initially I was getting the bounds of a tilemap using -
and then getting all of the tiles from that using -
which gives you an array that you can loop through, except whoops, then you don’t have the grid co-ordinates of the tiles you’re looking at.
I’ve switched to this which seems to mostly be working?
I’m behind on figuring out stacking, but today I did some fun UI and background animation additions. I have a dithered cloud animation that looks great. I’d post video of it but any compression at all mutilates it.
Pomodoros today involved evaluating how the block-stacking function will work (goal is to implement this before the end of the week). For this I’ll need to be able to check a location to see if a block is there. We may be able to just check the grid location to see if the tile there is null (I kind of remember doing stuff like this in Thicket, but it might be better to come up with a way to store data about tiles like this.
To get a block:
at the location of the click:
check the grid location tilemap ‘Stacks’ (the tiles above ground) to see if there are blocks:
– set the highest block that isn’t an obelisk cap’s tile to null
– if there’s an obelisk cap, decrease its z position by one
– increment the players inventory blocks by one
if there’s no blocks on ‘Stacks’ check the ‘Ground’ tilemap for blocks:
– set the block tile on the ground location to null
– increment the players inventory blocks by one
I may regret it but I also imported the Simple Tile Pathfinding 2D package I used in Thicket too, I’m not sure if I’ll need this yet, but I think adding pathfinding and block tiles will make moving around a lot nicer (pathfinding around obstacles, no banging head against colliders, npc pathfinding).
This is the first (official) day of work on Obelisk. I had a previous project running where I experimented with point rendering and turning off anti aliasing, but it was a universal pipeline project and this time I am just working with a 2d only project. I’m going to switch the repo over to this new instance. Remember that even in a 2d unity project you need to set your camera to orthographic!