OS9 on Ubuntu

The first thing to know about emulating macs from The Before Time is that if you where using Classic Mac OS at the turn of the millennium, you probably used an iMac G3. This machine was ubiquitous-at least at schools in my area. This machine used a PowerPC chip rather than a 68k, so the emulator you want to use is SheepShaver. If you want to use a 68k there’s Basilisk II, which has a very similar setup, and just needs to be installed via apt.

In order to run SheepShaver you’ll need to download some additional stuff, so you might as well do it up front. Redundant Robot has become the de-facto distributor of these files (email me if this ever goes down, I’ll host’em.) Specifically you’ll want the New World ROM and A pre-made bootable OS9 install.

Next you’ll want to compile a copy of SheepShaver. This is thankfully very easy thanks to StackOverflow:

Install dependencies:

sudo apt install build-essential libgtk2.0-dev x11proto-xf86dga-dev libesd0-dev libxxf86dga-dev libxxf86dga1 libsdl1.2-dev osspd git

clone the macemu repo from github:
git clone https://github.com/cebix/macemu.git

Build SheepShaver:

cd macemu/SheepShaver
make links
cd src/Unix/
./autogen.sh
make -j3

Install the binary into your path

sudo cp SheepShaver /usr/bin

Run Sheepshaver with

sudo padsp SheepShaver

This will get you to the setup menu. In the Memory/Misc tab, add the new world ROM file. Then, back in the Volumes tab, add the .img file you downloaded, and create a new (big) empty volume to store your apps. Next add a valid directory that you do not care about because it will be consumed by sudo-enabled fire as “unix root.” Now you should be able to boot into the machine by hitting “start.”

In order to get apps working, you’ll generally want to first get them out of your unix folder and only then unpack them (most vintage mac files are in Stuffit format, so you’ll want a copy of Stuffit Expander to be your first install.)

Unfortunately, the Redundant Robot image is too small to fit many apps. What you’ll want to do is make your own image. Make a blank disc with SheepShaver’s interface download  this disc (you’ll need an account.) In order to boot from a file, it needs to be read-only (in fact it will render any writable file that it tries to boot from unbootable.) But you need to run SheepShaver as root. So to render the file unwritable to root, you need to make it immutable with

chattr +i ~/Downloads/Mac_OS_9.0.4.toast

Then add it to the boot list and it’ll boot to the installer.

Cars of Krakow

The dramatic but friendly outline of Wawel castle greets you when you get to downtown Krakow.

But of course, what you’re here for is that Ford Focus at the bottom of the frame right? Foci where the only Big Three cars that I saw in any signifigant number, and they where the early-model foci from before they could be had in the US.

Apparently the Polish word for Loratadine (as in, the drug that makes allergies go away) is “Loratadina” as luck would have it. On the way to the drugstore, I saw this beautiful Skoda Felecia. As you might guess from my love of 80s and 90s Volvos series cars, I’m a huge sucker for sharp angles, and this has so many of them.Front of a red car

You don’t see a lot of Italian cars in New England, but Fiat is all over the place in Poland, and people drive around in Alf Romeo 159s.

Inside Wawel castle there’s a bell tower with a view of the city. A harrowing climb just due to how dark it is and the knowledge that if you fall, there are plenty of stairs to go down. Schoolchildren prod at the enormous bell for good luck-I just hope to be lucky enough not to be around when someone manages to ring it. The view is, of course, very nice.

Immaculately maintained Polski Fiat. A classic car with a ton of history. We saw this while out eating in Krakow. I can’t overstate how delicious the food was.

A Volvo serving as a taxi. And I thought the Subaru Outbacks I was seeing in Cambridge where out there. Usually the plastic line you see on these is long faded, someone here knows how to get the original color back, which is nice.

Most of the police cars we saw where Kias, but there where also Toyotas. The rental car was a manual Kia which lead to several burnouts as our driver re-learned how to operate a manual.

Row of Kia police cars

A gem: Multiverse In Review

Multiverse In Review is the type of treatment that makes reading a bunch of background story for a tabletop game worth it. Source by source, the author is examining every available piece of Fluff in (and out of) the Magic: The Gathering cannon, with (so far) an emphasis on the type of sources that most fans never would have seen, especially in the pre-internet “before time”.

The most fascinating bits are the insights into how the story evolved, and what hidden information those changes reveal. I find these big shared universes very fascinating, and would love to see a similar treatment of, say, the Warhammer 40k setting. A good example, if you want a horizontal slice, would be these three articles on the conception of the Antiquities story the Antiquities comics and the Jeff Grub novel that slots the story into the modern (ish) cannon. Every article is a good read if you’re into that sort of thing.

Cars of Katowice and Gliwice

I arrived in Glowice airport severely jetlagged after sleepless night of watching the moon over our wing. There was a festival with music and beer trucks in Katowice so we hung out there for a while, delirious.

Buildings in Katowice
Some of Katowice’s more striking buildings. The coal towers where cool too but I didn’t get a clean pic of them.

The following morning in Gliwice, the car spotting began. I saw three Volvo wagons in quick succession which I think is what inspired me to start collectibg pictures of eurocars like trading cards.

 

White Volvo V70
Slick white 740(?), very boxy (82-96)
Picture of a car with a parking sign in-frame
Blue 95-00 V70 (?)

In addition to the Volvos, VWs and Fiats, there where tons of Skoda, Renault, and Opal cars.

Red four door hatchback car, sadly obscured by a tree
It’s definitely a Renault, I think it’s Cilo. The front looks right.

At an apartment block somewhere between Katowice and Gliwice we saw what might be the coolest car a super clean FSO Polonez Caro from sometime around the 90s. The orange plastic grille cover will probably aid in identifying it, I can’t find any pictures with the grille like that in my shallow googling.

SYLP is dead, long live SYLP

emf.sdf.org, or “The Shipyard Liberation Project” hasn’t been updated in years. This is mostly because I haven’t had anything to add to it-I think I got every last graphic I could, contacted everyone who’s email address still worked, etc. I’d also all but run out of space for my SDF account (I even had to host the 3d models from Ares on my own site.) Somewhere along the line, I lost access to my SDF account, but by then I was using Unix every day so I didn’t really miss it.

Fast-forward to now, I’ve realized that the fine folks at the Internet Archive have a sweet upload utility that allows you to upload whatever files you want, and (critically) add metadata to them so that some sort of context can be preserved. So I’ve uploaded those files to the archive, you can enjoy them here. That puts out the “what if SDF deletes my account” fire, but some stuff remains:

  • Files with appropriate licenses ended up on OpenGameArt rather than on SDF because I figured more people would see/use it. They ought to be mirrored on the archive.
  • Someone from the Ambrosia forums kindly ripped the graphics from a TC called “The Novel One.” I’ve got the graphics somewhere, but I haven’t been able to find the thread.
  • The “Open Source TC” had some assets at some point, and the notion was that anyone could take it and run with it. I’ve never run across a copy of it (it was hosted on DropBox of all places)
  • The list of missing shipyards on the SDF site still stands – if anyone out there has any of those graphics, I’d love to see them!

Estes and Escape Velocity’s Rocket Design

I first noticed while thumbing through old Estes ephemera on this site  when I saw it staring me in the face:

Snippet from the 1990 estes catalog
1990 Estes Catalog

Estes is a company that has, for a great many years, built and sold flying model rockets-as in, you build them, stick a solid fuel engine in the back, and launch it into the sky. It’s a good hobby for someone who’s a fan of spaceships. The same camp where I learned the art of model rocketry was where I found out about Escape Velocity, which brings us back to the point. If you’re an Escape Velocity or EV Nova fan, you probably recognize that as fictional space pirate “escort Frigate” the Atinoda Kestrel.

A diagram of the Kestrel, with labels for flavor
The Kestrel

Probably the most iconic ship from that game, it made its way into EV Nova as a post-game bonus option and NAEV as its poster-ship. Matt Burch, author of Escape Velocity, had this to say in an Ambrosia Times interview:

Ambrosia Times: […] Is it true that some of the graphics in EV are the result of a model rocketry hobby?

Matt Burch: Well, I used to build model rockets when I was little, and a couple of the ship designs in EV are loosely based on my memories of some of my favorite Estes kits.

That confirms my suspicions. So, which other ships are based on Estes rockets?

From the 1990 catalog, we’ve got these two:

Cropped catalog page of an oddly configured two-finned rocket
Estes Star Seeker
EV graphic from Evula.com
EV’s Executive Transport
Clipping from Estes catalog
Estes Strike Fighter
EV graphic of the lightning
EV’s Lightning Fighter

I’d seen the Rebel Cruiser described as having “babylon 5 roots” but I think its lineage is very clear from this:

Screen from a 90s Estes catalog
Estes Starseeker
Screen from EV
EV’s Rebel Cruiser

I’m less sure about the Clipper (which I think is the astro blaster.) The configuration is the same (two back-swept wings with giant winglets and canards in the front.)

Astro Blaster from the 92 catalogue
Estes Astro Blaster
Screen from Escape Velocity
Clipper from Escape Velocity

There are two possibilities for the Manta, and I’m not sure which one it really is, despite it sharing the name with one of the rockets. Maybe a combination of both:

Clipping from estes catalog
Estes Delta Clipper from 1986
Manta from 1994 Estes Catalog
Estes Manta (’94)
Screenshot from EV
EV’s Manta

So, several of the ships in EV share more than a passing resemblance to Estes rockets. There may be others that I’ve missed, or other sources of inspiration. I’d love to hear about them!

Edit Sept 1 2024:

Somehow I missed that the Scorpius is the Courier.

(Couldn’t find a good image of the courier alone, here’s one from a defunct fan site, second from the right, top row)

(source: https://web.archive.org/web/20131222112652/http://me_al.tripod.com/games/ev.html)

Making a model for FlyThroughSpace part 2: Export

Note: This post is way out of date, expect a new one soonish.

Apply the mirror modifier

Hit apply on your mirror modifier. Be careful: further changes will not conserve our precious symmetry! I advise that from this point forward you refrain from saving your work, or at least save it in a separate file.

Rotate the model

We’re going to do the rotation using hotkeys. This makes it easier since you’ll need to do this for every model.

'R' (rotate) '9' '0' (ninty degrees) 'X' (along the Y axis) 'CTRL'+'A' (Apply)

Then another transform:

'R180Y' 'CTRL' + A

Export

Next you need to install the babylonjs exporter. There are instructions here. Then export the scene. .babylon is a JSON format, so you can now hand-edit anything you’d like into it, such as the proper texture file. Note that on my machine the exporter crashes Blender but does do the export.

Making a model for FlyThrough.Space

Ever wanted to make a 3d vehicle model?

What follows is an extremely minimal (and probably very wrong) blender tutorial. I’m mostly posting this so that I do not forget, but I know that there’s an audience out there that just wants to use Blender to do quick modelling tasks, and this is the shortest path I’ve found to achieve that goal. This post explains how to make and texture the model. A subsequent post will explain the aspects that are specific to BabylonJS (and, thus, FlyThroughSpace)

Step 1: Bilateral Symmetry

Most scifi spaceships are bilaterally symmetrical, at least from the outside. I won’t get into for the rationale for this (if nothing else, cars and airplanes count.) And though there are Notable Exceptions, even those generally start from a symmetrical base with variations on each side.

We don’t want to have to recreate every change by hand, so we’re going to set up our blender object to automatically mirror our changes along the X axis.

Switch the “active data to display and edit” tab on the right to Modifiers (Wrench icon)

Now, add a modifier of the type “mirror” by opening the “Add Modifier” dropdown and selecting “Mirror”

One thing I notice here is that it offers up what I think is the equivalent Python code so that you don’t need to do this task in the GUI. A laudable goal.

Now select the following options and don’t hit apply.

Axis: Y, Options: Merge, Clipping, Vertex Groups

What follows is my least favourite step, because I’m 100% sure I’m doing it wrong. Your cube is half-repeated, because it was already symmetrical and repeated along the Y axis. You need to get rid of the real part overlapping with the mirror part. What I do is go to edit mode, set the selection mode to face, and then slide the face out of the mirrored side, then delete it. I encourage finding a more reliable method and leave it as an exercise to the reader.

At the end of this step, you should have half of a cube mirrored to make a full cube.

Half a cube reflected into a full cube

Step 2: Make your spaceship

I won’t claim to be an expert in actually using the modeling tools in Blender. When I first tried my hand at making 3d objects, it was in Lightwave, when your basic tools where Extrude and Slice, so that’s what I usually use to achieve the shapes I’m looking for. There are probably far better tutorials on how to actually model in blender out there, so feel free to consult some of those. I’ll be here, extruding faces and sliding edges around until you’re back.

Not especially spaceship-y yet

Some subdivision and the knife tool go a long way

You can press ‘K’ to select the knife too, drag it around to add vertices and edges in the middle of faces. You can delete troublesome vertices and re-close your mesh by selecting three vertices and hitting ‘F’ for a new face. I won’t pretend to be an especially good modeler. Here are the results:

Step 3: Paint on a texture

Use the circle select in edit mode (faces) to select every face. You’ll need to rotate the model between uses of the select tool to get all of them. Now in “shading/UVs” press “unwrap” and select “Smart UV Project.” Now you can switch your bottom window to “UV Editor” mode and scale it up a bit (icon in the bottom left)

Now make a material for it, set the view mode to texture or material, and load up some random texture to paint on.

ugly tiger looking thing

Well, that wasn’t very good. There used to be a way to just paint a single color and I was going to sort of airbrush it up, but I can’t find it anymore (leave a comment if you know where it is!) If you _must_ work with solid colors, you can texture paint from solid colored textures I guess.

If you haven’t saved your work before, do save it now and do not keep saving it after this step! We’re going to do some destructive editing in order to export for BabylonJS

In Appreciation: Termux

I’ve been playing with Termux quite a bit in the last couple of days. Being able to do development-any development-while standing on the train is an awesome feeling. I think the site undersells what it is-it’s your compiler in your pocket. It’s ssh in your pocket. I’m redoing my website on my phone (the mobile experience is crap at the moment) by editing the sources in vim, then hosting it locally with Python.

Beware of side effects on default arguments

Check out this quick interactive session:

Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(y, x={}):
...   print x
...   if y:
...     x['y'] = True
... 
>>> f(False)
{}
>>> f(False, {'x': True})
{'x': True}
>>> f(True, {'x': True})
{'x': True}
>>> f(False)
{}
>>> f(True)
{}
>>> f(False)
{'y': True}
>>> f(True, {'x': True})
{'x': True}
>>> f(False)
{'y': True}

What’s wrong with this picture? Notice that when I call f(True) we assign something to the default argument x. When we call f again, it replaces the default x = {} with the previous value of x!

I suppose the moral of the story here is that in order to avoid side effects, you should not mess with arguments you’re passing in, even if they’re just the default arguments.