Scheme Parent Protocols

Here’s a subtle point of using Scheme (Chez, R6RS) records with inheritance:

;; creates a record, two default fields
(define-record-type Foo
    (fields (mutable x) (mutable y))
    (protocol (λ (new) (λ ()
        (new 1 2) )))
)

;; creates a subtype, one specified field
(define-record-type Bar
    (parent Foo)
    (fields (mutable z))
    (protocol (λ (super-new) (λ (z)
        (let [ (new (super-new)) ]
            (new z) ))))
)

(define b (make-Bar 3))
(Foo-x b)
1
(Foo-y b)
2
(Bar-z b)
3

The “new” your subtype protocol (constructor, in any OOP system) gets is a wrapper function that calls the parent protocol, and returns your actual “new”. If you don’t have a protocol, you just do (make-Bar 1 2 3) and that works.

It’s a little annoying that define-record-type doesn’t copy accessors forward, leading to either that mess of Foo-x/y, Bar-z, or a long list of (define Bar-x Foo-x) etc., but if I wanted a real object system I already have one. In my use case records are faster, I just didn’t understand this quirk, and the docs don’t help by calling the constructors “n” and “p”.

Fighters Are Not Boring, Players Are

My infrequent commentary on role-playing games, in particular the Old-School Renaissance.

I don’t understand how fighters can be “boring”? They’re up front fighting, which is the most exciting role for most people. They can be mechanically simple, but of course you role-play and make up your actions to be interesting.

And what I’m seeing as arguments from the “other side” is they only mean in tactical wargames without role-playing. As if they can’t do anything that isn’t listed as a specific rule and skill. That’s not what RPGs are for!

A Fighter should be role-playing during fights, as players should at all times. Not looking at your dice, stats, feats, skills, magic powers, equipment. BE THERE. BE Ichi the Bushi, or whatever you named your “generic Level 1 Fighter”. Describe what you’re doing. Run up stairs to get a height advantage (or be able to fight a giant above the knees), or swing on a chandelier, or kick furniture at someone, or throw dirt, tactically de-advance into an ambush, etc. If you’re fencing, you compare styles, observe the enemy’s preferred moves, do a riposte against that. Don’t be boring.

Then the Referee tells you what happens; that might involve your usual attack roll with a bonus, more damage, more defense, or just narrate what happens.

Non-fighters can do those things, too, but they mostly miss against any competent foe, and can’t take a hit back, so it’s fairly pointless. How often does a Thief get in position to get their backstab bonus & damage, the one mechanical chance they have to be effective in combat? Basically never. If they do, they die the next round because they stood up in melee.

Magic items also differentiate them. Only Fighters and Thieves can use most magic weapons, and in OD&D even the most simplistic +1 magic sword makes a pig farmer into a hero, and allows fighting ghosts and werewolves! And you’d never waste a sword on a Thief who can’t hit.

You don’t need giant stacks of rules & mechanics to be interesting! Even my SIX WORD RPG! is all you need, and your fighter will be effective if you role-play effectively.

As always, read Matt Finch’s Primer, he says almost exactly what I’d say (esp. the Ninja example & Abstract Combat-Fu):

And some inspirational “be a Fighter” music, with Army of Darkness video: