QZ qz thoughts
a blog from Eli the Bearded
Tag search results for 2020 Page 4 of 19

Game Tools


Here, some discussion of two game tool programs I have in game-tools on github.

asciimapper

In the mid-1990s, I knew an admin of the Tsunami MUD and played the game a bit. Fast-forward a decade and I decided to give it a try again. At (then) about fifteen years old (now closer to thirty), it was one of the older MUDs around, which meant it had a very long time to expand. There were vast areas of the game to explore, and I set out to see as much as I could.

Over the course of several months, I visited huge swaths of the game, and got myself on the explorer leaderboard, where I was one of the lowest level characters there. (Accounts automatically delete after time time if you don't log in, so I can't know if others had done better than me before then, and you won't be able to find me there now.) Eventually I started to run into time-to-new-area payoff diminishing returns and stopped playing.

While I was playing I drew myself a lot of maps. At first these were on paper, but eventually I developed an ASCII art short hand. This let me have text files I could grep for noteworthy items or places. From there, I wrote a tool that could take my ASCII art maps and convert them into nice printable maps. asciimapper worked by converting my ASCII art into config files for ifm the "Interactive Fiction Mapper", which was designed for Infocom and similar games. The crossover to MUD maps was trivial. Some of the maps I printed and would hand annotate for further details, but most I kept only in ASCII file form.

I have all my ASCII art maps for Tsunami somewhere, I could probably dig them out and put them on the web. I haven't played in at least a decade now, though, and there's more than zero chance some of them are obsolete. Some became inaccuate while I was playing. In particular I recall the entrance to Toyland moving, to be friendlier to low level players.

I've been thinking about asciimapper again as I play "Andor's Trail"; (previously dicussed about a month ago here). In "Andor's Trail", there are perhaps 520ish visitable areas, most of which show up on the World Map, but about 20% are indoors, underground, or otherwise not visible there. How to get to those plus the inventories of stores in particular spots has been something I've been mulling over. The ASCII art needed for the World Map would be doable, but something of a challenge.

The maps are text form already though, just not very clear text form. Here's an excerpt from AndorsTrail/res/xml/woodsettlement0.tmx, an XML file apparently created by Tiled:

 <objectgroup name="Mapevents">
  <object name="east" type="mapchange" x="928" y="224" width="32" height="64">
   <properties>
    <property name="map" value="roadbeforecrossroads2"/>
    <property name="place" value="west"/>
   </properties>
  </object>
  <object name="woodhouse1" type="mapchange" x="608" y="288" width="32" height="32">
   <properties>
    <property name="map" value="woodhouse1"/>
    <property name="place" value="south"/>
   </properties>
  </object>
  <object name="woodhouse2" type="mapchange" x="640" y="128" width="32" height="32">
   <properties>
    <property name="map" value="woodhouse2"/>
    <property name="place" value="south"/>
   </properties>
  </object>
  <object name="woodhouse0" type="mapchange" x="224" y="256" width="32" height="32">
   <properties>
    <property name="map" value="woodhouse0"/>
    <property name="place" value="south"/>
   </properties>
  </object>
  <object name="sign_wdsetl0" type="sign" x="800" y="256" width="32" height="32"/>
  <object name="sign_wdsetl0_grave1" type="sign" x="128" y="160" width="32" height="32"/>
  <object name="sign_wdsetl0_grave2" type="sign" x="128" y="224" width="32" height="32"/>
 </objectgroup>

You can easily see how the map pieces connect together, including ones like woodhouse0, woodhouse1, and woodhouse2 that don't show up on the World Map. In woodhouse2.tmx we find Lowyna:

<objectgroup name="Spawn">
  <object height="96" name="smuggler1" type="spawn" width="96" x="32" y="96"/>
  <object height="128" name="smuggler2" type="spawn" width="96" x="128" y="96"/>
  <object height="32" name="lowyna" type="spawn" width="96" x="288" y="96"/>
[...]

Which with a little bit of work we can connect that the shop "droplist", in this case in AndorsTrail/res/raw/droplists_v070_shops.json, to get items she stocks.

A map.tmx to IFM format converter might be handy, but I haven't put any serious thought into it.

asciimapper

I have thought about game play efficiency with "Andor's Trail". In particular while playing I thought it would be useful to have a way to see how fast I'm earning in-game rewards like XP, game currency, item drops, and how fast I'm using consumables while doing so. I imagined a tool that I could tell what I have at a particular time and it would work out how much that changes over time.

Those imaginings lead to stat-timer, a CLI with a very old school interogation interface. You can use the command line to give it starting stats or just start it and it will ask for stats. Then you can update as many or as few stats as you want each round and it gives updates. The design requires that you name stats for the initial state, and then if in same order, you can omit names. Thus the most important things being measured should be first, and least important last. Or least changing last.

In practice this means I've been putting XP first, then common area item drop and/or gold, then health potion count, and then rare drops, and finally — sometimes — constants I want for annotations. As I play, I update XP frequently and other columns less frequently. To update just the first two columns is a matter of just entering the first two numbers. To update first and third requires labeling the number for the third column. After each entry it gives a snapshot of how things are doing on a per-second basis. When done, I can <ctrl-d> out or put a ! at the end of the numbers to indicate final update. It then gives a final update with total changes, per-hour and per-second rate of changes. This makes it easier to compare play style one to play style two even if they are on different days and for different lengths of play.

If I update it further, things I've been thinking about for improving it include: a curses interface with data at particular screen locations, sophisticated "pause timer while entering data", realtime per-second updates, and perhaps a more sophisticated state model for the command line, for better continuation after an intertuption.

ascii-art

We Work?


In September 2017 I was hired by a company that used Wework for office space. On the day I started, they had a tiny glass fishbowl meant to hold three people, and four people there. By October we had moved to a larger space on a different floor, meant for five people. It was a much nicer spot, with two openenable windows. (To the outside. Not just the glass walls with sliding doors on the other spot.)

The building was (is) on 2nd St in San Francisco's Soma (South of Market) neighborhood. An older six story building with a single elevator, wood stairs in the single internal staircase, and an exterior fire escape reachable through the sash window in one of the offices. I don't know if the people in that office were required to not lock their door, it is something I thought about in my time there.

I don't recall exactly when, but somewhere around December 2017 to February 2018 that company shut the Wework office down and I was expected to work from home. For about a month before then, I was usually the only person in the office. The San Francisco branch manager, Andrew, had been laid off in early December 2017, leaving just three employees in SF. And absent the manager insisting otherwise, the other two preferred to work from home.

On day one with that company, I had showed up at the Wework office and as part of signing in to meet Andrew, I had to provide an email address. I used my resume email address, since I didn't yet know what my new work address would be. Wework added that address to their building mailing list, and I got weekly announcements about things happening in the building. Emails with a text/plain part that was wildly different from the text/html part.

Those weekly newsletters stopped, without my intervention, when the company stopped the Wework lease. Until today. Some circa eighteen to twenty months later, I got one this morning. Still wildly different plain text and html parts, but also this time, a crazy From line. This from header is an address for a NYC (Hudson Yards) Wework office. Not exactly close to San Francisco.

From: WeWork Community team at 368 9th Ave <WE-US-58829@wework.com>

text/plain part:

What's happening at WeWork 156 2nd St this week?

(then three placeholder events all dated "June 28" with no year, eg

Exclusive 1 Title

Sunday, June 28 | 3:00 pm - 5:00pm | 19A

Enter the descriptive text for the exclusive item here. Please try to keep all descriptions 3 lines or shorter. If you don't need to include a link, you can delete the link below, but be careful, once deleted you can't undo it.

)

text/html part:

What's happening at WeWork 156 2nd St this week?

(then one event on August 13th and one on June 28th, both with actual details, but nothing happening in the week of August 3rd to 9th, 2020.)

I used the "list unsubscribe" link in the message headers (and got a confirmation of unsubscription just using lynx; always nice to see that websites work in text browsers).

But it prompted me to think about this company that had such a spectacular failure to IPO last year. An at-the-time description: 2019/9/23 Wework mess explained.

About a month after that story, Wework laid off 2,400 employees of 12,500 (according to SEC filings in June 2019). The news broke on Thanksgiving day: 2019/11/21 Wework lays off 2400.

Searching Reuters today, the most recent news story about Wework is almost a month old: Wework expects positive cash flow in 2021.

WeWork Executive Chairman Marcelo Claure said the office-sharing company was on course to have positive cash flow in 2021, a year earlier than a target the company set in February, the Financial Times reported on Sunday.

Claure, in an interview with the newspaper, said WeWork has seen strong demand for its office spaces since the start of the coronavirus outbreak.

The SoftBank-controlled company has also reduced its workforce by more than 8,000 people, renegotiated leases and sold off assets to reduce its cash burn and shed costs, FT said.

Eight thousand people is 64% of 12,500, assuming the lay-off count is from height of employment, and not some more recent smaller number. I'm a bit surprised that even with those third paragraph changes Wework still has hope. I'm also a bit surprised by the "strong demand" mentioned. In the face of massive work-from-home pushes, people want to work in glass cells?

As of today, there's vacancy for five people on the sixth floor of 156 2nd St, judging by the floor plan I think it's the same one I was in (looking at room 611; I don't remember the office numbers, just the floors). They want $5,250 a month for that. And there is a third floor vacancy for three people, for $2,710. It's not the one I was in, but adjacent.

Overall, I'm not sure 156 2nd St is showing "strong demand" based on the available units I can find. Maybe SF is not representative of that demand?

I really thought they'd be a goner when "quarantine" hit. Whatever the rental demand, whoever is doing their email newsletters seems surplus to requirements.

Two Poems


Ideally I could present these side by side and the reader could jump between freely. I don't think I can get that to work for enough browsers and scenarios to suit me, so one after the other.

Daily I fall in love with waitresses


by Elliot Fried (1991)

Daily I fall in love with waitresses
with their white bouncing name tags
KATHY MARGIE HONEY SUE
and white rubber shoes.
I love how they bend over tables
pouring coffee.
Their perky breasts hover above potatoes
like jets coming in to LAX
hang above the suburbs—
shards of broken stars.
I feel their fingers
roughened by cube steaks softened with grease
slide over me.
Their hands and lean long bodies
keep moving so...
fumbling and clattering so harmoniously
that I am left overwhelmed, quivering.
Daily I fall in love with waitresses
with their cream-cheese cool.
They tell secrets in the kitchen
and I want them.
I know them.
They press buttons creases burgers buns—
their legs are menu smooth.

They have boyfriends or husbands or children
or all.
They are french dressing worldly—
they know how ice cubes clink.
Their chipped teeth form chipped beef
and muffin syllabics.
Daily I fall in love with waitresses.
They are Thousand Island dreams
but they never stand still long enough
as they serve serve serve

And for the next poem...

Daily I fall in love with mechanics


by Susan Thurston

Daily I fall in love with mechanics
with their smudged coveralls and names embroidered
over where their hearts just might be
PETE STEWART RAY CHUCK BUTCH
and thick soled boots.
I love how they jack up my car
and press the pneumatic drill
to my tires and with hip
press lean into the whir of liberation
nuts and bolts falling
released from so much spinning
and holding everything tight in place.
I feel their hands
roughened by spark plugs and washer fluid
yet sweetened by overflowing oil pans
slide over me.
Their arms and shoulders
remind me of deep river valleys
and other places where we could tumble
after setting the parking brake...
fumbling and clutching so melodiously
I am left grateful for their engine knowledge.
Daily I fall in love with mechanics
with their grease smudged bad boy grins
and come hither wide opening garage doors.
They tell secrets in the pit
and I want them.
I know them.
They slip belts back into place
their legs diesel dark

They have lovers or spouses or children
or all.
They are strut bearing reliable—
they know how timing belts twist.
Their toothpick punctuated grins
reassure you they are giving you the best
deal in town and they would not let you drive
without checking all your fluid levels.
Daily I fall in love with mechanics.
They are better than Free Air
want my vehicle to be safe and sound
but they never travel far enough
before pulling the next car into the station.

The first poem is evocative enough, conjuring images of places and times near enough in my memory, but also a world away. And then the second poem gently, but firmly, rips the image apart replacing the teasing sexual hopes of the first with practical greasy rags and clean oil filters.

I'm not much for reading poetry, but Mechanics has such charm. Yet, to me at least, the charm requires the original for those diesel dark legs to really shine, like some phoenix chick that cannot fully be appreciated without the ashen nest.

Micro Press


I saw someone else's teeny press project and was inspired. The design is interesting. Brian Cook's is a simple fold down frame and matching rubber stamps. Pluses: easy to get good registration, simple design and construction. But I can see room for improvement. Minuses: fixed size/shape block, fixed size shape paper, hand-pressed rubber stamps are hard to evenly press.

Modeled after a torilla press, I can get a lot of evenly distributed pressure. I made this using only materials I had laying around. There is a scrap of plywood for the base, and smaller scraps to hold the platen. Pine 2x2 for the press part, with 1/4" bolts screwed up from the underside. The main hinge on the lever is a bit of steel rod, the smaller plunger hinge is made from a large nail.

The platen ("flat plate of a printing press that presses the paper against the type") is some thick plastic I cut into 5" squares. The plastic came from an old combination scanner/printer. It seems to be optical polycarbonate with a fine grid printed on it. Very strong, very clear, very hard, very flat. Somewhat tricky to work with. Tools can melt it and then have the molten plastic move to a cooler spot and where the plastic suddenly hardens again. It seized up a drillbit for me, for example.

Very flat and hard makes a great platen.

I have two bolts there for alignment, not support. The stack here is

  1. plywood base
  2. plastic layer (bolts screwed into melted in nuts)
  3. block and frame for holding print block, loose fit over bolts
  4. paper, alignment to be done with masking tape on plastic
  5. second plastic layer, loose fit over bolts

I have a lot of small chisels for lino work. None are great, but I'm not a great artist either. I decided on a simple rendition of the press itself for the first print (above). There's something satisfying in linoleum carving I find. Like Brian Cook's press, this is a two inch square. Unlike his, my press can accomodate other (small) sizes and shapes.

Pretty successful. The letters didn't come out as clearly as I'd like. My smallest chisels don't seem sharp or fine enough to do lines that small.

Here's an example of moving away from the two inch square, here with 45mm circular blocks.

I have two multipacks of these plastic linoleum substitute printing discs, purchased on a whim some years ago. The idea behind them is to make stamps with a special handle. I don't have the handle. These are not satisfying to carve. The print surface is smooth and firm, then it gets softer in the middle, with a rough backside coated with adhesive. The material is harder to cut than real lino. The adhesive to attach (it to the handle) is strong enough to be annoying but not strong enough to be effective.

I carved a border first (the green) then a second disc with an image. I didn't print the border onto the second, but did attempt to measure how much space I needed. It seems like I should use a more accurate system.

Overall, I'd say the press is pretty effective, and meets the goals I had in mind when I started. After using it I find that it is very easy to get a nice even pressing of the block into the paper, paper alignment (registration) works pretty well, and making new frames is pretty easy. It does have the drawback that it's somewhat slow and cumbersome to ink-up and swap paper. I hadn't given that enough thought during the design. Still, it works and cost me nothing.