Wednesday, March 2, 2016

Revision Control Matters

I am currently teaching our project course in video game design again. I decided early on that all student teams should use a revision control system, specifically git through Bitbucket, to coordinate their work. Sadly I did run into some resistance regarding this requirement with many students stating that Dropbox and Google Drive are much more convenient for them. So I thought I'd ask around among my game development friends for opinions, and I got a few. But first let me paraphrase my "official" question to them:

In your esteemed opinion, how important is it for people working on a video game together to be able to use a revision control system to coordinate their work? How many of you have, in your gaming work, been able to get away without using one? Do you think it's less important for artists? How about artists who not only produce art (graphics, sound, etc.) but also write code/scripts?

The answers below are in no particular order. For some I've cleaned up the grammar a little. I've also "anonymized" the people involved because I wasn't sure how they'd like being quoted in public. But rest assured that they are all experienced software developers who've done at least several gaming projects. Let's start with JB:

This is beyond question. Just no question. ... I would never work without a revision control system, even working by myself. Working with a team, running the committed code through automated tests every night, (yelling at the person who broke the code is beyond satisfying), staying in sync, knowing that everything everyone is doing will continuously still work together—mandatory. You will encounter crunch-time bugs that can only be found by rolling back trough revisions until the bug doesn't exist. And you want to be creative and unlimited? Branching ... so you can try out something radical is priceless! ... You will learn why you need revision control systems eventually, no matter how thick you are. But at the end of the day, you want to work for a good company with excellent people, and they aren't going to want you unless you are on board with revision control systems. End of story. It's a career requirement. So suck it up buttercup.

Next we have AD with a slightly different opinion:

I would not force students who are resisting. Things like Dropbox provide data sharing which is most of what 1–2 programmer teams need. If they lose their code you can always make fun of them. Personally I always use revision control but my games are very code-centric and I came into game development with a software engineering background. One of the things I like about games is that nobody cares about code or tools—only results. Most software engineers are evaluated by other software engineers and a lot of quasi-religious groupthink comes out of that. Game development is a reality check: Can I really use these software skills to produce something normal people want? Software engineering classes are a better place to force students to learn about revision control, the game development kids should focus on making fun games with minimum friction.

I should say that the student teams in our course are 4–5 students, not 1–2 as AD had assumed. And please note that AD still holds students responsible in case their ad-hoc approach fails. Next we have DC:

For the past few weeks I've been working on a simulator entirely on my own and I'm still kicking myself for not using version control: I've noticed a change in the outputs in the last couple days that is inexplicable and I don't have a recent snapshot I can go back to to track down what caused it. Certainly I've never worked at a game company, or heard about any acquaintances doing so, that failed to use version control. It's a universal standard. Should it be required of the students? Arguments in both directions: (a) using it gets them experience with an industry standard; (b) not using it will force them to confront the problems that crop up, and deeply understand why they want version control in the future. ... I usually side with (a) although I was just reading a part of the JHU orientation which ... emphasizes students learning more on their own.

It's true that we try to encourage "learning on your own" and I guess my courses are particularly "infamous" in that regard. However, I would still hold that it's appropriate to force students to do it, in a company environment they most likely would be "forced" as well. But hey, now I am throwing too much of my own perspective in here. Let's get to AS:

It's a requirement!

That's certainly the most succinct reply I received. So on to SC:

I'd say it's a requirement for the code base at the very least. Git or Perforce can be punishing with Unity files, but it's ultimately best. Art I'm more flexible with. An old job tried to handle art with Git and it was bad. Currently our artists maintain stuff on their own Perforce server (since it's unlikely that more than one artist is working on any given asset) and then upon completion things move to the Unity repository.

The point here is that art assets are hard to merge automatically and so a system that allows "locking" is preferable over one that forces merging. Note, however, that there's still a revision control system in place, albeit a different one. I don't have a way to give students Perforce licenses, but maybe Fossil 2.0 will be an option in the future. Of course Subversion supports locking as well, it just feels slightly antiquated these days. Next we have BR:

I was able to get away without one... In Nineteen Ninety Freaking Six!

Speaks for itself, doesn't it? On to NMC's opinion:

Sometimes, for a small project with only one person working on it, you can get away just periodically taking your entire project folder and compressing it to a zip file. This is barely adequate for one person working alone on a recreational project, and even in that situation version control would make your life easier.

I think I am starting to see a pattern here, don't you? Finally we have JC (who refers back to BR above):

Is it essential for every project? No. Is it useful for every project? Yes. A career hallmark of game development (and maybe the tech industry itself) is enjoying learning new things constantly. There is always a better way. Either you love that or you think you've learned enough. The people who think they know enough don't tend to last or have passed into a phase of their career that likely won't last in a satisfying way. Our current view is Git (or Hg) for code and Perforce for content. They just make life easier. For the size of Unity projects you will encounter in college, Git (or Hg) alone is totally fine.

Git is something that everyone hates and don't understand if they use it rarely. If they use it regularly, they usually love it. It's crazy fast and lets you do all the things you want to do. Perforce is nice in that it is rock-solid and handles large binaries well. But you also lose information everytime you merge (unlike a distributed system) and branching is painful, particularly after the fact. And, of course, it isn't free ...

I probably agree with BR: let them do whatever but no excuses accepted for lost work. That is the reality. But it's definitely a plus for us as a company when an entry-level candidate has real experience with the major source control systems. For one, it's just a skill like anything else. But, second, it gives some indication that they've done enough work to understand the value.

On a side note: BR "got away with it" until I was hand-merging changes from him and SM every day ... in addition to writing the core game systems. To his credit, BR fully supported the change. And, agh, we used SourceSafe. That I would not recommend.

Seems to me that this (biased?) sample of opinions tends to agree with my feeling that every student should learn how to work with a revision control system. So I for my part feel "vindicated" as it were.

If you're a student in one of my project courses and you hate the idea of learning a revision control system, re-read these comments from industry professionals a few times. Then ask yourself if you'd rather be able to say, truthfully, that you learned something like git or if you'd rather apologize that you didn't. Your call, but I am almost certain that your answer will have an effect on your chances of getting hired.

(I'd like to thank everybody who answered my question back when I posted it on Facebook. You're the best!)

Sunday, February 21, 2016

What to do with a new disk?

Today two replacement SATA disks arrived from my favorite supplier. Reason enough to briefly summarize what I do when I get fresh disks: Maybe someone else can learn from the DOA mistakes of my youth when I trusted that a new disk would just work only to find that when I needed it, all it would do is "click click click" and that was that.

If you go through more disks than the average person, for example because you run a bunch of RAID arrays, I would first recommend that you get yourself a suitable docking station. Here's what I use:

UNITEK Dual Bay USB Docking Station
UNITEK Dual Bay USB Docking Station

I got mine from newegg.com of course. There are plenty of alternatives, little USB-to-SATA adapters or hotswap bays that mount in your machine's case, but none of those beat a decent docking station for convenience and versatility. (Note that I never use the "clone" feature of that thing, although I hear that it works fine.)

So unpack your new disks and do a quick physical inspection. If your supplier is decent at all, the packaging will be so good that it's extremely unlikely that you'll get something that's mechanically broken on the outside, so a glance is usually enough. Then slap them into your docking station and power it up. Open a terminal and do a quick check with dmesg:

[51407.603023] usb 1-1: new high-speed USB device number 4 using ehci-pci
[51407.718674] usb 1-1: New USB device found, idVendor=152d, idProduct=2551
[51407.718678] usb 1-1: New USB device strings: Mfr=1, Product=11, SerialNumber=3
[51407.718679] usb 1-1: Product: USB Mass Storage
[51407.718681] usb 1-1: Manufacturer: JMicron
[51407.718682] usb 1-1: SerialNumber: 00000000000000
[51407.719191] usb-storage 1-1:1.0: USB Mass Storage device detected
[51407.719353] scsi host6: usb-storage 1-1:1.0
[51408.142938] usbcore: registered new interface driver uas
[51409.223243] scsi 6:0:0:0: Direct-Access     HDD                       0000 PQ: 0 ANSI: 2 CCS
[51409.224849] scsi 6:0:0:1: Direct-Access     HDD                       0000 PQ: 0 ANSI: 2 CCS
[51409.225220] sd 6:0:0:0: Attached scsi generic sg6 type 0
[51409.225355] sd 6:0:0:1: Attached scsi generic sg7 type 0
[51409.229108] sd 6:0:0:0: [sdf] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[51409.229476] sd 6:0:0:1: [sdg] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[51409.230360] sd 6:0:0:0: [sdf] Write Protect is off
[51409.230365] sd 6:0:0:0: [sdf] Mode Sense: 28 00 00 00
[51409.231358] sd 6:0:0:1: [sdg] Write Protect is off
[51409.231363] sd 6:0:0:1: [sdg] Mode Sense: 28 00 00 00
[51409.232350] sd 6:0:0:0: [sdf] No Caching mode page found
[51409.232355] sd 6:0:0:0: [sdf] Assuming drive cache: write through
[51409.233613] sd 6:0:0:1: [sdg] No Caching mode page found
[51409.233616] sd 6:0:0:1: [sdg] Assuming drive cache: write through
[51409.286473] sd 6:0:0:0: [sdf] Attached SCSI disk
[51409.287473] sd 6:0:0:1: [sdg] Attached SCSI disk

Alright, looks like both disks are there having been recognized when the docking station powered up. Good! Now go ahead and check the details with smartctl:

# smartctl -i /dev/sdf -d sat
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.1.12-gentoo] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
Device Model:     ST1000DM003-1SB10C
Serial Number:    Z9A0GYZ0
LU WWN Device Id: 5 000c50 08774c950
Firmware Version: CC43
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Sat Feb 20 17:34:31 2016 EST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
# smartctl -i /dev/sdg -d sat
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.1.12-gentoo] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Blue
Device Model:     WDC WD10EZEX-00WN4A0
Serial Number:    WD-WMC6Y0F4UPT5
LU WWN Device Id: 5 0014ee 0aec80cac
Firmware Version: 01.01A01
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-3 T13/2161-D revision 3b
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Sat Feb 20 17:34:57 2016 EST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Good! Notice that I had to use the "-d sat" option to tell smartctl that there's really a SATA drive hiding behind all the USB stuff. (Took me a while to realize that I can do that, I used to think that SMART just doesn't work at all over USB.)

What you want to be looking for is the "SMART support is:" line. It's almost universally true today that SMART will be enabled by default, unlike back in 2002. But it's still good to check. In case it's not enabled, enable it. In case your disk doesn't support SMART at all, well, why did you order it? To enable SMART you'd say something like

# smartctl -s on /dev/sdf -d sat

but again, hopefully you won't have to. Alright, after all this prep work, we finally get to the point of all this: You want to run the basic SMART tests that all modern drives support. Note that especially the long test can take a really long time, so do this when you're sure you won't need the docking station for something else. First run the short tests:

# smartctl -t short /dev/sdf -d sat
# smartctl -t short /dev/sdg -d sat

Yes, you can easily run these in parallel because the disk is doing its own testing, your machine only told it to get going. For a 1 TB disk, the short test takes about a minute, but if you're impatient, you can check on the progress of the test as follows:

# smartctl -a /dev/sdf -d sat
...
=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.14 (AF)
...

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
...

Self-test execution status:      ( 246)    Self-test routine in progress... 60% of test remaining.
...

There's a lot more output than that, I just put "..." instead to keep things simple. (Actually you can get even more output with -x instead of -a if you really want.) After waiting for your minute, you can check on the outcome of the test with the same command. Toward the bottom of the output you'll hopefully find a line like the following:

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error

# 1  Short offline       Completed without error       00%         0         -

This indicates that the short test succeeded. Check the other disk as well, then get ready for the long test:

# smartctl -t long /dev/sdf -d sat
# smartctl -t long /dev/sdg -d sat

Same procedure as before, except that this time you can expect to wait for about two hours for a 1 TB disk. Hopefully the long test also works out just fine.

And there you have it, the minimum amount of testing I do on replacement disks these days before I put them on the shelf as I wait for a RAID array to fail. Of course if you have plans to encrypt the data on these disks you can do more "testing" by filling them up with random data now before you shelf them away.

Wednesday, February 3, 2016

Tired of Bernie Detractors

The recent uptick in so-called "liberal" commentators telling people who want to vote for Bernie Sanders why they shouldn't and why Hillary Clinton is the better candidate has me moderately pissed-off. It's true, you can never change anyone's mind on the Internet, but it's been so long since my last political post on this blog that I figured I should take a shot.

One of the first things you'll hear critics say is that Bernie stands for "wide-eyed idealists" which is a nice way of saying "idiot children who have no clue" in what passes for political discourse here in the US. Hillary of course stands for the "hard-eyed realists" which is to say "smart grown-ups who know the system" or whatever other "serious" thing. And heck, it may well be true that Bernie is an idealist and Hillary is not. What you should question, however, is if the valuation implied in most "think pieces" on this topic is correct: Is it actually true that a "realist" president is better for the country than an "idealist" president?

Think, for example, about how you haggle at a flea market or a garage sale. If the seller wants $10 for their lamp and you want to pay $5 for it, do you offer $9? Of course not! You offer $2 or, if you're feeling nice, maybe $3. You can't offer $1 because you know for sure that the seller will shrug their shoulders and wave you on. But offering $9 right away is actually an insane proposition, isn't it? Would you really "haggle" like that?

Yet this is what so-called "experts" bring up as a "plus" for Hillary: Since she's "realist enough" to offer $9, she might actually be able to get that for us. Big surprise there! If you propose to replace, say, really bad inequality with ever-so-slightly less bad inequality, you're going to find quite a few multi-billionaires who'll say "Alright, maybe I'll give up a few million here or there, at least I'll get to keep my head on my shoulders." and then you can give a State of the Union address that sells this pile of garbage as a huge success.

But remember what you wanted to pay: $5! Bernie might actually be "idealist enough" to offer $3 and then achieve $6 after some back and forth. Perfect? Probably not. But without someone actually haggling you'll just end up with $9. Or maybe $11: After all, in politics, unlike at a semi-sane garage sale, the "other side" has already raised their expectation to $13 between the time they told you $10 and the time they hear your $9 offer. That would make it even more important to have an "idealist" in office, wouldn't it?

Another thing you'll hear bandied about a lot is that Bernie will simply be blocked by Congress regarding every single proposal his administration might make. Once again this might be true, maybe Congress really would be more adversarial toward Bernie than toward Hillary. But again you should carefully think about the implications of this so-called "argument": If it's true that President Bernie can be blocked by Congress, isn't it also true that President Hillary can be blocked? Or President Donald?

Note that it's irrelevant whether President X will actually be blocked. That's simply one for the history books because you can only know it in retrospect. Indeed, anyone who is "predicting" it as a certainty for Bernie now is simply being dishonest. Politics is a dynamic process after all, and Bernie might be able to play his cards in such a way that Congress will eventually go along. (Maybe by starting to haggle at $3 instead of $9?)

Furthermore most of the "he'll be blocked" folks seem to completely forget that the President is not powerless in a fight with Congress: The veto allows a president to simply stop legislation coming out of Congress. That's not always easy, but it's clearly the case that a "mean Bernie" might be able to veto enough stuff to really make the legislative sweat. Don't forget that representatives and senators come from certain states, and if their states don't get something because of a presidential veto, the people responsible might find their incumbancy in grave danger. True, there might also be some "collateral damage" because "normal people" in those states might not get something they really need. But if the goal is to fix the whole country and not just a state here or a state there, well, that might be a sacrifice some of us are willing to make.

And of course Congress is not the only thing that can "block" a president. The "virtual senate" of bankers and traders around the world can achieve much the same simply by shifting capital around in such a way as to hurt a country until some policy (whether proposed by President or Congress) is "off the table" again. That's in fact in large part how "neoliberal austerity" works in places that are not officially beholden to Washington's machinery of World Bank and International Monetary Fund. (Hillary actually has experienced that first-hand back during Bill Clinton's first term when they tried to pass a semi-decent healthcare bill but were promptly shut down by Wall Street.)

As Iowa showed yesterday, Bernie has some real momentum. He also has better policies (for the 99% that is) regarding almost everything. Hillary will be "more of the same" just like her husband was (for the 1% that is). I cannot for the life of me imagine how the country could be "worse off" with Bernie than with any of the alternatives. But I can see plenty of things that could be better with Bernie. I am a card-carrying skeptic and cynic of course: It might turn out that Bernie is also "more of the same" in the end, who knows? What we know for sure is that with Donald or Hillary we're guaranteed that nothing gets better. With Bernie we at least have a shot. I am willing to take that chance, and I am tired of people who smear Bernie with "arguments" that are none.

Wednesday, January 13, 2016

Basement Delving: Teenage Mutant Ninja Turtles

I have no idea why I bought all of these except that they were on a superb sale back in the day. I did like the old Palladium RPG as well as Rifts to some extent, but I never really was into TMNT regardless of context. Anyone out there in the greater vicinty of Munich who's interested in getting a hold of these?













Simple Hit Locations

I have a house rule that says "once a character is below 0 hit points there's a chance for a permanent injury/consequence" but I always winged it (or just ignored my own rule) in the heat of things. Now I decided that I want a "formally written-down rule" to resolve these injuries which at the very least requires a way to determine where the injury is located. Sure, in D&D we usually avoid this level of detail, but since this mechanic is not used during combat (as a critical hits chart would) I think it's okay.

In any case, what is a useful distribution of hit locations? As per usual I started by looking at what others had done before. I played RuneQuest as well as Warhammer back in the 1980s so I looked at those as well as Legend, a recent reincarnation of RuneQuest. I also acquired Flashing Blades and Aftermath! from Fantasy Games Unlimited last year and while Flashing Blades is quite sane and included here I skipped the crazy that is Aftermath. I am sure that there are many more systems out there, but I hope four of them are enough for a first approximation.

As opposed to Aftermath, all the systems I discuss here are fairly coarse-grained. Instead of giving you "shoulder" and "upper arm" and "elbow" and "lower arm" and "hand" they just give you "arm" and that's it. I happen to think that a lower resolution is preferable both because it keeps the table concise and because it is a lot more difficult to judge how "realistic" the percentages are if many fine-grained hit locations are given.

Among the systems examined Warhammer is the only one that combines "chest" and "abdomen" into "body" and is therefore even more coarse-grained. Besides those areas, all systems cover "head" and "arms" and "legs," the only difference is the percentages they assign to each area. All systems except for Flashing Blades distribute hits evenly between the left and right sides of a defender; Flashing Blades assumes that a right-handed defender is more likely to get hit in the right arm than the left arm and vice versa. Only RuneQuest makes a distinction between hit locations for melee combat and missile fire. Finally, all systems except for Warhammer use a d20 to determine hit locations; Warhammer uses a d100 instead, but the ranges still come in 5% increments and we can therefore map it back onto a d20 roll as well. We end up with the following:

LocationFlashing Blades (Right)Legend (Mongoose)RuneQuest (Melee)RuneQuest (Missile)Warhammer (1st edition)
Head10% (1-2)10% (19-20)10% (19-20)5% (20)15% (1-3)
Right Arm15% (3-5)15% (13-15)15% (13-15)10% (16-17)20% (4-7)
Left Arm10% (11-12)15% (16-18)15% (16-18)10% (18-19)20% (8-11)
Abdomen20% (13-16)15% (7-9)15% (9-11)20% (7-10)25% (12-16)
Chest25% (6-10)15% (10-12)5% (12)25% (11-15)25% (12-16)
Right Leg10% (17-18)15% (1-3)20% (1-4)15% (1-3)10% (17-18)
Left Leg10% (19-20)15% (4-6)20% (5-8)15% (4-6)10% (19-20)

Sorry, not exactly easy to read. Let's look at what Warhammer calls "body" first, so "abdomen" and "chest" in terms of the table. The systems vary widely in what they consider appropriate: Flashing Blades as well as RuneQuest (for missiles) assign 45% of hits here, Legend 30%, Warhammer 25%, and RuneQuest (for melee) only 20%. Among the systems that distinguish "abdomen" from "chest" there is little agreement on what's more likely to get hit either, except (once again) in the case of Flashing Blades and RuneQuest (for missiles). I find this rather disturbing, I would have thought that we'd see at least some consistency here.

There is a little less variation when it comes to the extremities, alas it's still quite significant. Flashing Blades and Warhammer consider leg hits rather unlikely with a 20% total, RuneQuest (for melee) thinks they are quite likely with a 40% total. On the other hand Warhammer tells us that arm hits are very common with 40% when most of the other systems assign 25%-30% instead. In general Warhammer seems "top heavy," Flashing Blades and RuneQuest (for missiles) seem "body focused," and RuneQuest (for melee) is a little "bottom heavy" as it were. Legend spreads things out most evenly.

Let's not forget what we're looking for though: I want a roll that happens after combat when a character is already "out" because they reached 0 hit points. I don't want to assume that the "last blow" is the one the actually leads to that "grievous injury" as it were, it could have been any of the preceeding hits as well. So I don't really need those little differences that Flashing Blades and RuneQuest support regarding handedness and melee versus missile. Indeed, since my consideration is cumulative over the last couple of hits, I should probably "aim" for a more evenly distributed system. Thus Legend should provide a useful starting point.

Once we settle on an even distribution, we can reconsider the die roll. Going for Warhammer's approach ("body" instead of "abdomen" and "chest") a d6 would suffice, otherwise we need a d8 to cover the seven possible locations. Of course that leaves another result we need to find a use for. Here is the first suggestion:

Locationd6
Head16.7% (1)
Right Arm16.7% (2)
Left Arm16.7% (3)
Body16.7% (4)
Right Leg16.7% (5)
Left Leg16.7% (6)

Alright, not too bad. Of course I can already hear many of you complain that "head" is too frequent compared to "body" here, but that's simply the price we pay if we go for an even distribution. Here's the straightforward alternative:

Locationd8
Head12.5% (1)
Right Arm12.5% (2)
Left Arm12.5% (3)
Abdomen12.5% (4)
Chest12.5% (5)
Right Leg12.5% (6)
Left Leg12.5% (7)
?12.5% (8)

What to do with the "leftover" result? Thinking ahead a bit, the location of an injury is actually not enough, we also need a measure of "severity" for the entire thing to work. So one option would be to assume that a "regular hit" just leaves a scar at the indicated location whereas rolling an 8 would indicate a more serious problem (re-roll to find the location). Another option would be to add another "location" of sorts, maybe "internal" or "systemic" injury?

Now I have to admit that I already have a rough idea about the "severity" part, I'll probably make that some version of the 2d6 reaction roll eventually. With that in mind, the d8 version above seems less attractive: A different die to roll and that "leftover" category. So I have a feeling I'll end up with the d6 table using the Warhammer-style hit locations with a Legend-style distribution. (That's why I ended up calling this post "Simple Hit Locations" after all.) Opinions?

Thursday, December 31, 2015

Writing B/X Stuff with LaTeX

A few weeks back I started rewriting my B/X house rules and I wanted to make things look roughly like the original B/X books. Note the roughly! I took some liberties with the original layout where it seemed appropriate.

Then Alex Schroeder said he'd maybe use such a LaTeX style as well, so I spent a few hours extracting things into a little LaTeX class file. Here's what documents formatted with bxart look like:


You can get the relevant files from my Google Drive. I am sure that this thing needs more work in the future, so I'll probably slap it on github.com sometime in 2016. Happy to hear your feedback!

Update 2016/05/03: I've finally pushed this onto github.com so I am going to take down the Google Drive link to encourage folks to contribute. Of course to the best of my knowledge I only have one user anyway...

Wednesday, December 30, 2015

Basement Delving: Tékumel

In a very dark corner of my old basement I discovered a few of my Tékumel purchases from years ago. I have to admit that I never got very much into Professor Barker's creation. Don't get me wrong, I always thought that his work was most impressive as far as I understood it. But I was very much distracted by the chaotic publication history of the darn thing: I could never really figure out which of the many books from all those many publishers is supposed to fit where. In any case, here's what I found:


I don't know about you, but when I saw this thing in my FLGS back in the days, I just had to buy it. I mean come on, has there ever been a cooler looking RPG supplement? Ever? I just wish they had released a leather-bound hardcover written in actual blood! Even better, it had the following warning on the back:


Not for children? Sorcerously explicit? Demons and shit? Very clever marketing indeed! I don't think I ever did more than flip through this thing, but I'll put it on my "should really be read soon" list now. The good professor even shows us what the "original" book looked like before he translated it into English:


The language thing is after all the most obvious Barker-Tolkien connection. Barker's languages always seemed more exotic and scary to me, how very fitting for this particular book. Next we have what I think is the original Tékumel game system in the combined re-release from Different Worlds? But what do I know:


And check out the cool "The Professor Approves" logo on the back! I wonder what Gygax's equivalent would have been? Presumably something a little less Playboy-like? I mean all he needs is a smoking jacket, right?


Speaking of Gygax, the man himself actually wrote a Foreword to the original Empire of the Petal Throne which is also included in this reprint:


I cannot tell how much of this is Gary being honest and how much of it is Gary being jealous. Maybe the truth is neither and it's really just a marketing blurb. The format of the book is quite curious, check out the table of contents:


An interesting approach to numbering chapters and sections to say the least! Looks like a pretty complete system: character generation and advancement, combat, encounters and the underworld, magical items, gods and divine intervention... What's not to like? And hey, even a city is included (albeit not with a lot of detail):


Finally one of the "newer" reincarnations of the game system, and honestly I have absolutely no idea why I bought this after already owning the version above:


I feel a little bit like Alex Schroeder did back in 2009: Fascinated by the potential of this stuff, not entirely convinced that there's enough of a chance that I'll ever play it to dedicate more time to it. I am happy to give away the last one up there to someone who'll give it a good home, just email me if you're interested. I'll hang on to the other two for now hoping to find some bits and pieces to roll into my regular D&D gaming.