Fonts! (plus nattering about maps and magnifying glasses)

One of the more popular Wintertree products, back in the good old days, was a package of fonts called Arcane Alphabets. It was a collection of interesting fonts for gamers — mostly interesting alphabets like Ugaritic cunieform, hieroglyphs, and FUTHARK runes, plus really odd stuff like the secret script of the Vehmgericht. People did some fun things with them; I remember one convention where the organizers used the Ogham font as an “alien” sort of font along the bottom edges of the badges, which looked really cool. (that was a college convention unfortunately scheduled the same weekend as the school’s Homecoming … mostly, we vendors sold stuff to each other) I did some other fonts, too — a pack called Mapographer that would let you draw adventure maps in your word processor (how dated is that?) and the only licensed product I ever did, the dwarf fonts from Games Workshop’s Warhammer books. That one never sold very well; I remember writing out a royalty check to send to GW and it was like $5.

So what do fonts have to do with Wintertree Redux?

Continue reading “Fonts! (plus nattering about maps and magnifying glasses)”

Verbs? Nouns?

There are a lot of things about TableMaster that are dated, some of them painfully so. Some are things that I have to deal with as a programmer, such as the fact that TableMaster used to be two programs, not one, and there are some housekeeping issues raised as a result. (I was just dealing with one involving closing all open table files for .INCLUDE this morning) Some are matters of style and appearance; I’ve kept many of those for the sake of continuity and tradition, though the UI does look less Win3.1-ish than it used to. Some are simple practicality, such as my decision to continue using an .INI file (just like in the old days) instead of the Registry, so that TableMaster will be fully portable. But there is one that seems both quaint and, well, weird.

Continue reading “Verbs? Nouns?”

Historical Natterings

I’m looking at the source code for the original GENERATE. The file of subroutines was, according to my comments, originally written for Turbo Pascal 6.0. Talk about a blast from the past! (for those of y’all who are staring blankly at your screens right now, I’m talking about this) I looked it up, and got a real burst of nostalgia from the picture of the box. I think it’s the kind of nostalgia we have for all the things we did the hard way decades ago, though — nice to reminisce about, but not fun to do that way ever again.

I upgraded to Borland Pascal 7.0 before the first release version. I just looked that one up, too. I remember that box very well. That big, cubic, shelf-eating box, stuffed to the top with manuals. According to the site I just looked it up on, there were 11 of them. Sounds right. I probably still have them in a box somewhere; I firmly believe that everything is in a box somewhere, probably in my attic. The scary thing, if you’re trying to find anything in my attic, is that I’m most likely right.

Aaah, nostalgia. Memory allocation on the heap. The whole table structure hanging from one variable, just waiting to become the memory leak from hell. Yeah, I don’t miss it one bit.

My old code has one very important thing, though: the listing of all the TBL keywords and their synonyms. That’s going to save me some typing.Β  And, in between the moments where I wonder “what was I thinking?” (or even worse, just “was I thinking?”) as I look at my old code, I find a few clever bits. Ima steal those from myself. πŸ™‚

Also, looking at that old code reminded me of how much tidier it was back in the day when one’s compiler didn’t go sticking the event handler for a UI button click or something right in the middle of the lot. Also how much easier it was to find what I was working on. There are now include files. πŸ™‚

Also, I’ve figured out what the first new table pack is going to be. I’d better get TableMaster running so I can start writing tables! πŸ™‚

Same past, different blast

Here’s another scan from the box:

Old Packaging Cover

It’s the outsides of the packaging for TableMaster Deluxe — the pack that had TM/Win and all four table packs on a CD in it (the regular versions were on floppies). The cover was a color copy, so some of it has suffered a bit over the years for the same reason the catalog did — copier toner just doesn’t do well in 140-degree attics — but back in the day, it was pretty cool.

There’s a bigger picture after the jump.

Continue reading “Same past, different blast”

A blast from the past

I have a box in my lap full of old TableMaster stuff! I’ve got the manuals from versions 2 and 3, one of the TM Deluxe packages, and various other things. The TM Deluxe package contains, among other things, my Winter 1998 catalog. It’s half a page, admittedly, more like a price list (all of 11 items if you’re being generous and counting the DOS, Win3.1, and Win95 versions of TM separately). It’s been in a hot attic and it was originally photocopied, so the toner stuck to other pages, and they stuck to it, over the past 18 years. Thankfully the manuals and quickref card were offset printed, so they’ve endured intact.

I’ll put in a break here and put the scan after the break, so it doesn’t fill up the whole first page.

Continue reading “A blast from the past”

First baby steps toward Generate

Well, I still haven’t quite recovered from the weekend trip to another time zone and the seasonal time change (organized, clearly, by people who think cutting a piece off one end of their blanket and sewing it on to the other will make it longer) at once, so I haven’t been quite up to par coding-wise today. But I did get one important thing done: the first bit of framework for what will become the TableMaster table engine. I can call it from the main program now (even though it doesn’t do much) and put the data where it needs to go. Now it’s just about writing code. Or, more correctly, re-writing the code I wrote over 20 years ago, better.

Continue reading “First baby steps toward Generate”

Light at the end of the tunnel

I’ve been partially, but not completely, black-boxing the development of the TableMaster GUI.

Here’s what it looks like right now:

Current Screenshot

Some things never change. There was one thing I’m doing that I couldn’t figure out a really elegant way to do; the only solution seemed to be brute force and awkwardness. So I broke down and looked at my old code to see how I’d done it back then. Yeah. Same way.

Continue reading “Light at the end of the tunnel”

Menus and popups and options, oh my!

Wow … I’d forgotten that I had so many popup menus in there. Right-click menus were kind of a new thing at the time and I kind of went nuts with them.

My design philosophy for the TableMaster GUI, which hasn’t changed, is that it should be up to the user, not to me, exactly how they want to do something. So for any given function, there would be multiple ways to do it: from the main menu, a popup menu, clicking a button, with a hotkey … pretty much any way you thought you might be able to do something, you could. This made for a very useful UI for the user, but a bit of a hairball for the programmer.

The fun (ha!) part at this point is that about a week before I decided to go ahead with the TableMaster project, I got a new computer desk. It’s really an awesome drop-front desk that I found in a cluttered antique shop and fixed up a bit, with little pigeonholes and things and even an almost-secret drawer, but putting it in place necessitated moving several shelving units, building a new bookcase, and disrupting, well, pretty much everything. So my old CD backup of the TM/Win source (which modern Delphi would probably choke on, but at least I could look at what I’d done) is down there … somewhere.

Given a few of the things I’ve found, though — for instance, I’d completely forgotten that I had a built-in table editor with some fairly interesting features, though now I remember it and remember that I wanted to take that farther than I ever did (envisioning something like the Delphi IDE for table writing, which might have been, um, overkill? just a little?) –maybe I should stop coding and start digging.

So here’s another question for the hypothetical readers I imagine I have: Did you ever actually use the TM/Win table editor? Or did you just use Notepad? Is there a reason for me to put that in the first release? In a later release? Never?

Continuing on…

The GUI is almost finished. I’m hooking up the configuration saving right now, and I still have to do the dice buttons. It’s coming along nicely. Of course, I did this already, 20 years ago!

I decided to use an .ini file instead of the Registry for config. TableMaster being what it is, it should be as portable as possible. Registry-based configuration is naturally tied to a specific computer. Therefore, it will be using an .ini file instead, so you can put the whole thing (including all your favorite tables) on a thumb drive and take it with you. Plus that will make it a lot easier if I want to port it to another platform in the future, which is a definite possibility.

Of course, this is the easy part, but it had to come first before I can start building the table engine itself. It looks like I’ll be moving on to that next week. Things are coming back to me a lot faster than I expected (I haven’t really programmed in anything that isn’t Perl or PHP since the original Wintertree days) and I’m remembering “oh, yeah, that’s how I did that” (sometimes interspersed with “… but why?).

A little TableMaster history: Back in the day, the table engine was actually a separate program; in fact, that program — GENERATE — originally existed without any sort of front end at all. When I built the original for myself, it just ran off the MS-DOS command line: GENERATE 10 GEMS. Things were so much simpler back then, eh? After all, when I started development on this, there was only Windows 3.1 and that was just a shell over MS-DOS. The first Windows front end was written in Visual BASIC, and it didn’t work very well; Visual BASIC didn’t work very well. I chucked that and TM remained a DOS program (I have to give a shout-out here to my old friend Bill Swallow for his excellent MMI library, which I used for most of the screen handling in TM/DOS) until Borland Delphi came out in 1995.

I suppose I should be coding instead of reminiscing. Given the number of people who are reading this (current count: 0) compared to the number who will buy TableMaster when it’s ready (hopefully some number > 0) it would seem to be the more profitable course of action, certainly. But here I am, listening to Celtic music and taking a break from TableMaster coding, and all of a sudden it’s 22+ years ago. Except I don’t have to worry about running a BBS for support nowadays!

Random historical trivia: my first development machine for TableMaster was a 6 MHz 80286 with Hercules monochrome graphics, 1 meg of memory, a 5.25″ floppy drive (which I still have somewhere!), andΒ  a 20 meg hard drive.

Note on version numbering

Back in the day, I wasn’t all that good at setting proper version numbers. The original TableMaster was up to 3.something, when it really should have been 1.3.something. That leaves me with a problem today, though, in that there would be some confusion. “TableMaster 2? But I already have TableMaster 3, I bought it in 1998!”

So, to keep things sorted out, I’m going with Roman numerals in the name. It’s TableMaster II, and version numbering will start over and be where it should be.

Beside, I’m black-boxing a lot of it — that is, starting with the known input and expected output, and writing what goes in the middle without reference to the previous code — because, frankly, there are places in my old code I’m afraid to go. There are a lot of better ways to do things than what I did in the process of learning Turbo Pascal in 1992, which is how the first proto-TableMaster got started. (and obviously I’m not using Turbo Pascal anymore, either!) So since it’s going to be mostly new code anyway, it’s definitely a new program; just one that does what the original did, only better. And without the grues lurking in the dim recesses of the code.

So: TableMaster II.