Pokétears

Logged into Pokémon today to send gifts to my friends’ kids. It isn’t so much fun to play it when I’m not out running around town, getting interesting pokestop gifts to send, catching weird creatures, and hatching eggs. As I then used up the rest of my hoard of gifts on other friends I felt weepy. I miss riding the bus all over town, I miss the J Church, I miss BART, feeling free & intermeshed with the map and all the people of the city.

Sent a gift to some random neighbor whose name I don’t remember but who is a tech journalist and travels around a lot (good gifts from other countries!). We met on the street as I caught him and his partner battling a gym (at the library). Sent another to my pal “yeetrio”, a young man who approached me on the platform at BART since he spotted me playing – we’re ultra friends and nearly to “best friends” months later. I saw him go to Costa Rica and then come back again! Sent one to my dad who is my top Lucky Friend. I can tell he has gone out to do his rounds in the back of Huntwick (Huntwick Stump Bear!) and Meyer Park in Houston.

It is always sweet when someone sends me an obviously cool gift (I’m looking at you Denise and Tarrant but also whoever keeps sending me “Midnight Rollergirl”.

Animal Crossing continues – today I made nearly 1 million on the stalk market by selling my turnips on someone’s island from a discord channel. The fellowship on there is very sweet as well. Sumana and Leonard and I keep visiting each other’s islands to admire the decor and flowers and trade tips.

Feeling sentimental about games – I need to gear up to work on my big game again but it has obviously taken on a different feeling now. It is set in the Before Times, but it’s actually about history and time travel and change as the Traveller deepens their knowledge of the time and place they’re in (and goes back & forward in time as well.) So, I guess that’s where my feelings about the pandemic and our city will go.

Equinox Party

Went to the 68th Equinox Party with Seth last night; I used to go more often years ago but haven’t been in quite some time. The theme for the evening was 1968 and I enjoyed the puzzles – of varying difficulty and complexity, some done in teams and some where everyone participated. As always the group is super friendly, nice, and smart; very inclusive.

The cryptic crossword was probably my favorite but I also liked the word guessing game where two people would go “on stage” and guess from clues a partner would yell to them. The clue-givers could see a list of 9 words on a screen overhead (so everyone else could see them too). Each word had letters matching one of two patterns (for example, starting with H, has a G somewhere in the middle, ends in a Y; or has the letters RDA somewhere inside) So as a guesser, you had to take your turn keeping the patterns in mind. Another big group game – group 20 questions, where we all wrote a word down as our (private) guess, with the secret holder on stage (having chosen a word). The audience took turns asking a yes or no question. Everyone whose word matches that question scores a point. If your word is eliminated you don’t get a point and you choose another word with the previous answers in mind. I was SO CLOSE guessing “Earth” when the answer was “Moon”… Anyway, it’s very interesting to study how they structure a game to be interesting to a broad variety of people and keeping all their attention.

On the way there I stopped by 24th and Mission to enjoy Orquestra La 24, as always, lovely & people were dancing & the music was great.

Early astronomer commitment schemes

Today I learned that early astronomers were hella clever. I was looking up good colony sites or just interesting topographic features for each planet or other solar body that I think would make a good future BART stop in Transitory and came across this:

Early astronomers used anagrams as a form of commitment scheme to lay claim to new discoveries before their results were ready for publication. Galileo used smaismrmilmepoetaleumibunenugttauiras for Altissimum planetam tergeminum observavi (“I have observed the most distant planet to have a triple form”) for discovering the rings of Saturn.

Working on this game is an endless delight!

Huygens did it too.

Huygens observed Saturn and in 1656, like Galileo, had published an anagram saying “aaaaaaacccccdeeeeeghiiiiiiillllmmnnnnnnnnnooooppqrrstttttuuuuu”. Upon confirming his observations, three years later he revealed it to mean “Annuto cingitur, tenui, plano, nusquam coherente, ad eclipticam inclinato”; that is, “It [Saturn] is surrounded by a thin, flat, ring, nowhere touching, inclined to the ecliptic”

The Terraforming Wiki is very useful for my descriptions of the Solar Line stations.

Meanwhile, have a look at this cool delta-v subway map of the solar system!

I also direct your attention to the fabulous Interplanetary Transport Network wikipedia page.

Exploring multisensory descriptions in Inform7

Over the past week I’ve been experimenting with different ways to make an interestingly playable game where the player’s point of view can be multisensory in various ways. So, for example, a character who is hearing and sighted would experience visual, sound, touch, and scent based room descriptions, while a Deaf character would not get the sound descriptions.

One way is to use Touchy Feely extension by Quantum Games. I ended up forking this and adding a few things to fix a couple of errors in the extension, and then adding more options as default descriptions for items. This extension builds in some commands like smell, touch/feel, listen, and taste. You can set the sound of a room, a person, or an object very easily just like you set the (visual) description.

With those rules, and a few others, I started writing rooms like this:

The Bedroom is a room.
The description of the bedroom is
"[if the player is sighted]A small room with white walls and some posters hanging up. The bed has a colorful striped bedspread and paisley sheets. The doorway is in the west wall.[end if]
[if the player is hearing] There is an air filter humming loudly in the corner.[end if]
[if the player is not sighted and the player is not hearing] A small room with a bed in it. The west wall has a wide doorway.[end if]"

The sound of the bedroom is "A loud air filter in the corner fills the room with white noise."
The scent of the bedroom is "The air in here seems very clean and fresh."
The bed is scenery in the bedroom. The description is "A soft, comfy bed. You give it an experimental bounce."
The pillow is scenery in the bedroom. The description is "A nice, soft, squishy pillow."
The bedspread is scenery in the bedroom.
The bedsheet is scenery in the bedroom.
The air filter is scenery in the bedroom.
The doorway is scenery in the bedroom.
The walls are scenery in the bedroom.

Things that are scenery aren’t described until you examine them. I wrote a general search command called (explore, or tap ) which conveniently lists all these “scenery” aspects of a room for non-sighted characters. Sighted characters have to examine them one at a time.

The problem with this method is that it is clunky and I’m repeating various elements of the room description. Ideally, I’d be able to replace a bunch of Inform7 behavior so that:
– Each room (and thing) can have a visual, sound, etc description.
– The game checks if the player has those senses
– The game concatenates the various sensory descriptions appropriately

This turns out to be difficult. I got into reading the Standard Rules (which, from the Inform7 IDE, you can see as an extension) and then realized what I wanted to do was basically happening in the Carry out looking (this is the room description body text rule): section of code. I thought maybe I could hack in a check on the sound of the room and print that.

But! This code refers to the Inform6 core of the game, with

To print the location's description:
(- PrintOrRun(location, description); -).

I tried copying THAT and doing something like PrintOrRun(location, sound), which didn’t work because location and description here are constants from Inform6, I think.
Not sure how to pursue this further. Maybe in future as I get more familiar with the guts of Inform.

So, I tried another way. I suppressed the room description body text rule like so:
The room description body text rule is not listed in any rulebook.
And copied it and pasted it into my example game with a slightly different name.

Carry out looking (this is the room descriptions body text rule):
if the player is sighted:
if the visibility level count is 0:
if set to abbreviated room descriptions, continue the action;
if set to sometimes abbreviated room descriptions and
abbreviated form allowed is true and
darkness witnessed is true,
continue the action;
begin the printing the description of a dark room activity;
if handling the printing the description of a dark room activity:
now the prior named object is nothing;
say "[It] [are] pitch dark, and [we] [can't see] a thing." (A);
end the printing the description of a dark room activity;
otherwise if the visibility ceiling is the location:
if set to abbreviated room descriptions, continue the action;
if set to sometimes abbreviated room descriptions and abbreviated form
allowed is true and the location is visited, continue the action;
print the location's description;
if the player is hearing:
say "[sound of the location][paragraph break]";
otherwise:
say "[feel of the location] [scent of the location] [taste of the location] [paragraph break]";

Because I’m not using the “print” function the sound and other sensory qualities of the room are described under the actual room description. That might be OK but now I need to learn how to elegantly write a room description that is broken out into visual, sound, and other qualities. I also need some kind of bare bones description that doesn’t show to the player unless the player character is deaf-blind. This will take some practice to learn to write well, and some more refining of how I show which bits of the descriptions.

Note that I will probably be adding in low vision and hard of hearing (by taking the visual and sound descriptions and munging them a bit.)

Building accessible infrastructure into writing and coding style

As you may be aware by now, faithful reader, I am obsessed with my game, which is set in the Bay Area on and around the BART train system. It is science fictiony and magicky, with time travel and weird stuff abounding. I set out with the intention that the player should be able to pick a mobility level and sightedness, possibly in elaborate gradations but for now, at a minimum viable level, the player can choose to be walking or a powerchair user, and blind or sighted, in any combination. For the powerchair character, they can’t do stairs and that’s about it. The blind player (simulated at this testing phase by providing the player a pair of wraparound mirrorshades) will have the “look” command replaced by listen *(maybe) or all room, object, action, and NPC descriptions will have non-sight-based descriptions.

Just as a note, I have not written the system yet for cane tapping but that will likely be integrated.

I am finding it interesting to try out the alternate description route. For example here is a super easy case where the description is written to make it very flexible, with only one word difference in the description:
The description of Calle 24 Northwest Corner is "A busy corner at a busy intersection. You can [if player is blind]hear[otherwise]see[end if] a steady stream of cars, buses, and people passing by."

Or, a little bit longer example,

A flower seller is a person. In Calle 24 Southwest Plaza is a flower seller. The description of a flower seller is "[if player is sighted]A short, smiling woman in a baseball hat and a red checked scarf pushes her wheely cart full of roses and carnations. Her jacket has a ladybug pin.[otherwise]You can hear a short woman just next to you, fussing over a metal cart.[end if]".
Every turn when the player can see a flower seller:
say "A flower seller [if player is sighted][one of]beams at you with a huge happy grin[or]watches the people passing by[or]smiles as she stops to talk with a friend[or]offers you a little bunch of carnations tied with string, saying 'Flores para ti?[otherwise]calls out, 'Flores!'[or]'[or]shares a coffee with a friend, chatting[or]fusses over her bunches of flowers, arranging them nicely[end if][as decreasingly likely outcomes]."

It becomes clear to me that I have to train myself to structure the experience of the reality of the game in particular ways. I might establish a convention (enforced with tests) where each thing defined in the game is required to start with a description for the blind point of view character, then have a description for the sighted. Each clue for the puzzle needs to be playable both ways, as well, and both should have a richness and depth of experience that makes the game fun & action compelling, hinting at possible avenues to explore. So, it will affect how I design the puzzles and clues as well as just some sort of “layer of extra text” to think through. One result is that talking with other characters will likely be more important than it might have been otherwise.

This shows very clearly how important it is to design an environment (whether it is a game, a novel, a class, a web site, software, a real life building, or a city street ) with the point of view of different people in mind. Having written only 6 sample rooms and couple of NPCs and objects and their behavior, I’m very glad that I’m doing this now, and not trying (as so many designers, programmers, and architects do) to staple on a half assed ramp or some probably flat braille a month before finishing a 2 year long project.

Happy Discardia!

I did some decluttering today, setting out some clothes and books on the free shelf outside and throwing a bunch of things away. There are also several bags of things to go elsewhere (to friends, to my sister, birthday presents for birthdays coming up, stuff that needs some sort of errand to deal with it) so that those things aren’t on the living room floor.

From underneath the bed I hauled out a box the size of a couple of shoeboxes full of junk that had been cleaned out of drawers probably years ago. More than half of it was trash and the rest is now put away.

Cleaned out under the kitchen sink where it smelled funny and was full of junk. Cleaning supplies are more organized now. Half the paper bags stashed down there are now recycled.

I also ironed my handkerchiefs, which I find oddly satisfying, and laid them neatly into a tiny cherrywood drawer.

Huzzah!

Danny just came in, looked around, and went, “Holy shit! Low level defragmenting, reformatting!” (Very true. That’s exactly what it’s like.)

In game progress, I added a ticket reader and BART ticket. The ticket is a device, which may seem odd, but swiping it turns it on and off to signify if you’ve paid or not. There are “switching on” and “switching off” actions in Inform7, and they’re separate, so they needed some extra logic to handle a new more generic verb (swipe) that flips the state from one to the other, depending, while not giving any weird extra messages about it.

So many good ideas in the last few days – I have a big file of ideas to stuff into the story and its infrastructure.

It’s helping to scope out issues to work on in github, with milestones, so that I can bite off small things to work on when I’m tired or only have half an hour. The complicated stuff has to wait for the weekend.

While reading the Standard Rules defined in Inform7 I came across this amazing line of code:

The darkness witnessed is a truth state that varies.

Kind of spooky, isn’t it?!

Pacifica side trip

After work I went off with seelight to have a sandwich and catch Pokémon at the beach. We looked for whales (none) and discussed geography, geology, clouds, games, and she told me there is a novel about magical BART. Or something. I only found this decolonized BART map so will ask her later about the book.

A woman standing by us at the cafe counter when “Funkytown” came on the radio sighed and said “You just want to put on those roller skates!” and I had just been thinking the same thing and remembering myself swinging about the roller rink with my feathered hair, my blue eyeshadow, my metallic weave buttondown shirt, white jeans with my name embroidered on the pocket, and a skinny stretchy gold metal belt (you know what I mean? sort of snake textured, like a cord where one side is flat). The belt buckle was a green roller skate. Probably, I was also drinking a “suicide” which was getting a soda with all the soda flavors mixed together. The junior high mocktail of my people. You felt badass skating up to the counter, like the fucking Continental Op but 3 feet high and on skates, leaning on one elbow to mutter to the bartender, “I’ll have a suicide“. I had mentally put the lady at the counter in a “older person” category as she had long grey hair and was leaning on a cane; go figure, we are likely less than 5 years age difference; my hair is half grey and I’m in my wheelchair. I enjoyed the moment of our gentle mutual reminiscing. The song is so perfectly evocative of a specific time.

A walk down the pier, where we watched fishermen, the sunset, the waves, the fog, the stripey layers of clouds that looked like both Jupiter and lasagna when photographed with my phone camera up to one lens of my binoculars.

sunset through a rounded lens

On the way back to land, Claire was like omg there is a … Grundleoot or …. I’ll be damned if I know what it was, but some powerful pokemon I had never even heard of, as the pier debouched into the street. We decided it was too tough for the two of us. But right around the corner a little knot of people were under the streetlights in a familiar configuration, a half circle, thumbing their phones with fervent concentration – they were catching the whatever it was, in a raid. We joined the stragglers and caught it too. The group then went off to reconvene at a church somewhere to the south to get a Kyogre, hitching rides with strangers and timidly Friending each other on the app. Tempting but…. I was tired. Yay now I have, well, one of those. Grundhorn? Groundlarg? I don’t want to get up and look at my phone.

Rewiring brain for new code

What can I say – I worked on my game all day again today. It was great. The feeling of seeing the entire huge structure holographically and knowing (more or less) what to do and how to break it down into pieces is just glorious. I’m all fizzy with ideas at really random times.

I spent some time trying to understand some excellent advice on the interactive fiction forum and halfway got there. Then needed to chill out a bit and let it percolate, so I worked through some of the examples in the inform7 manual and played around. At some point I realized a different way to approach the problem and plunged back in, making my magic elevator a room again instead of a vehicle.

Finally got that working around 6pm. But only imperfectly. Then had another epiphany, threw it out and refactored it again and now it is seamless! I thought of some good improvements and noted them as issues for later.

However, I still have to solve the original hard problem because my rideable vehicle (ie a wheelchair) has to be able to enter and exit another vehicle (the train.) It’s still satisfying to have the elevators work so neatly, in the meantime.

Danny and I went grocery shopping, he cooked (lamb with mint sauce and roast potatoes) and I cleaned up. He is still muttering into his beard about Lisp and stuff but I was too sunk into my own thing to know what about. A cosy and fabulous weekend.

Considering elevators

Yesterday I worked on my game for a while and we went to a friend’s (fan)vid watching party. Along the way we came across Orquestra de Calle 24 and people dancing in the BART plaza, then the entire Women’s March once we popped out of the station at Powell. Thousands of people with signs, drums, & that spine-shivering thing where you hear a cheer begin way down at another end of the march and it travels up and passes you like a wave!

The party was in a gorgeous building, the Medico-Dental building, and I assumed it was someone’s friend’s office. It was a dentist’s office with a huge screen TV and interesting decor – not at all dentist-y feeling – Odd things like a table made of what might have been an aluminum alloy cast of a gnarled section of a giant tree – Rococco chairs and mirrors and silver trays but then also a raw unfinished wooden beam with orange paint “MEETING ROOM” under a CAUTION HARD HATS REQUIRED sign. As we were leaving I found out that it was booked using something called Peerspace. Huh!!

It was nice seeing everyone – the vids were amazing – And I had fun dressing up. I had some doctors appointments near there and went into the Sephora to look for a specific shampoo and lotion – having never been in one of those stores before. And I was like Oh holy fuck I don’t wear makeup, like, I own one lipstick and an eyeshadow, but, now I want some because it is all strangely alluring and pretty and looks like candy. That was a couple of months ago and since then we have all been putting on “cyberpunk makeup” and now I own 4 colors of metallic matte lipstick (Fenty has a nice pencil one, but I like the Anastasia liquid matte a lot better.) So I busted out that stuff yesterday and had fun with it. Lipstick seems to have advanced since I last really wore it in like, 1990. It stays on and is not bothersome. As long as I feel properly like it’s a fun game and I’m in drag, all is well. Not really into it otherwise. (It is GLAM BUTCH CYBORG makeup.)

liz in silver blue lipstick

And, today I figured out a way around a problem that has been bugging me. I had modeled an example elevator which went between two floors, based on the simplest example in the Inform7 recipe book. Couldn’t figure out how to fix the logic to make it go to three or more floors, and also, with that and the more complicated elevator example (a skyscraper in Dubai) and a third way I thought of, I would end up with the problem of having to write 100 uniquely named elevators, each with their own logic. That would be tedious and make the code unnecessarily bloated so I have gone another route.

Instead of having the elevator be a room, I made it a vehicle, and put any room where the elevator could possibly be, into a region called Liftlandia. If the player is in the Liftlandia region, then the elevator is in the location of the player. I had to start it in nowhere, and haven’t quite gotten it to appear on the first time the player enters a room in Liftlandia. But, it works. If you try go up or down in Liftlandia (because you see stairs) it doesn’t let you- you need to use the elevator. Once you’re in it, you can go up and down to the rooms in whichever direction it’s possible.

Now, I’d like a nicer way to have the player push a button to go to the desired floor. With my ‘magic vehicle’ solution, I can write in a P, C, and S button (for Platform, Concourse, Street) and they are pushable. I’m not quite sure how to have the buttons take you to the correct place but it should be possible.

Along the way I also had to abandon my desires to build a nice simulation of the real life map because it was a huge pain in the ass and I am aiming for a different level of abstraction. Not without a pang but already you see that I have to have at least 3-5 “rooms” for each of 52 stations (platform, concourse, street, and likely something extra like more outside locations, or secret rooms in the stations, or whatever.) Mapping each station expanded that to like, 20 or more locations per station.

I started adding some NPCs with simple behaviors and I may try next to add “scenes”. For example, I’d like musicians to wander by, or, for some kids to get on BART and set up to dance and pass a hat and for stuff like that to happen randomly. Some NPCs or scenes would happen in particular locations and others might wander.

For the actual game aside from my mechanical difficulties, there will be magic and time travel, I still want to simulate various mobilities and sightedness states, and I have a sort of poetic mood or atmosphere in mind which stretches back to a book I never really wrote called The Secret Life of Buildings but which I could describe as a holographic vision of things that will lead people to see the city around them differently, and love it more deeply. (And to look things up.) We will see. And, I’m still working on another game with Milo. I may start systematically pasting in, running, and modifying each example from the Inform7 recipe book, as it is very helpful way to learn to make complicated things happen in the game.

The magic spells of engineering

Last night we watched the first two classes of Hal Abelson teaching Structure and Interpretation of Computer Programs in 1986 and they were sooooo amazing.

Danny remarked that this is a great example of teaching a beginning lesson in a language with math while most other intro-to-a-language-via-maths fall flat.

All the stuff about magic is just beautiful (and true).

So as opposed to other kinds of engineering, where the constraints on what you can build are the constraints of physical systems, the constraints of physics and noise and approximation, the constraints imposed in building large software systems are the limitations of our own minds.

So in that sense, computer science is like an abstract form of engineering. It’s the kind of engineering where you ignore the constraints that are imposed by reality.

Sweet that you can download text or PDF of the transcript of the lecture.

Meanwhile, in the night during some dark hour when my knees hurt and I couldn’t sleep I decided to change the scope of my mapping in this transit game, at least at first, and rather than make a perfect walkable (rollable) simulation of the geography of each station (or even this first one) I will abstract it a lot more. It could still be expanded later, but the hugeness of the map started to drag me down and I’d like to get the mechanisms working before that kind of precision. I have often felt that I have to throw out all the code at least 3 times before I know how I want to approach a project and I believe this makes 3. But, that means I’m not sticking it up on github yet until I have a clearer vision and a better prototype.