Procedurally-generated bodypaint

It’s text, but NSFW text.  Procedural Paint-Job Generator.

This idea came to me in the wee hours of the morning.  I got out of bed, coded all morning, and went back to sleep after publishing it.

I’ve been creating a vocabulary to describe the body paint at the Fremont Solstice Parade for a while.   I planned to use that in some sort of database-driven visualization for Solstice Parade photos, somewhat like Atlanta Fashion Police.  I still plan to do that, but this project goes the other way.  Instead of describing an existing paint-job with the vocabulary, I use the vocabulary to create a description of a hypothetical paint-job.  The plausibility of the paint-jobs varies, but that’s part of the charm.I used Kate Compton’s Tracery to generate the descriptions.  I started by adding all the words I could think of, grouped logically into colors, color modifiers, patterns, animals, vehicles, and so on.  Then I built phrases that combined those elements, built the phrases into clauses, and then into sentences.  It can suggest individual paint-jobs as well as groups, and pluralizing complex phrases is tricky!  The following sentences have identical meanings, but must be modified differently to be pluralized.

  • green and bright yellow giraffe
  • green giraffe with bright yellow spots

Putting an “S” at the end of the phrase doesn’t always work.  There are also things that are always plural, like “roller skates”.

  • You get your roller skates.
  • You get your bicycle.
  • You rent roller skates for your team.
  • You rent bicycles for your team.

English is tricky!

Whenever the generator recommends a pattern, it may recommend two patterns instead.  Those two could also recommend two more, so there’s no guarantee the recursion ever ends.  Browsers have a lot of memory, text doesn’t take much memory, and it’s funny to get a big paragraph recommending 20 different patterns in a single paint-job, so I leave it in.

The paint-jobs produced by this generator are by turns absurd, practical, amusing, and shocking.  What more could a procgen system strive for?

Jam, the Whirlwind Spear

While building “#1 Sap Master” I lamented that there were no finesseable reach weapons, but one does exist!  The Elven Branched Spear is not only finesseable, but gets a +2 bonus to attacks of opportunity.  So I built a Monk around it.  I didn’t try for the Flowing Monk this time, just an Unchained Monk, which is basically Monk 2.0.

The reach weapon (acquired through Ancestral Arms) and her high Dexterity gives her lots of AOOs, and Panther Style also gives her a pool of “retaliatory unarmed strikes” that she can use each round by provoking AOOs from her enemies.  Flying Kick lets her move during a Flurry of Blows, so she can take all 3 attacks on her turn, move past enemies and retaliate when they take their AOOs, then take her own AOOs if the enemies she left behind try to close in again.  She doesn’t hit hard, but she hits often, growing more dangerous as she faces more foes.

I named her after Jam from Guilty Gear, who fights with quick strikes, flying kicks, blazing fast dashes, and a distinctive “HOOOO!” battle cry.  She’s basically that, but with a spear.

Jam

Female Half-Elf Unchained Monk 7
N Medium humanoid (human, elf)
Init +7; Senses darkvision 60ft., Perception +8

DEFENSE

AC 25, touch 21, flat-footed 20 (+1 Armor, +5 DEX, +4 WIS, +1 monk +1 deflect +3 natural) +4 vs AOOs
hp 64 (7d10+28)
Fort +9, Ref +12, Will +4 (+2 vs. enchantment, +2 vs charm & compulsion) Immune: disease

OFFENSE

Speed 50 ft.
Melee
flurry of blows unarmed strike +12/+12/+7 1d8+5
+1 elven branched spear +13/+8 1d8 x3 P (brace, reach, +2 attack on AOOs)

Special Attacks Stunning Fist 7/day FORT 17 stunned 1 rnd OR fatigued 1 min

STATISTICS

Str 10, Dex 20, Con 14, Int 9, Wis 20, Cha 7
Base Atk +7; CMB 7; CMD 27
Feats Combat Reflexes, Dodge, Exotic Weapon Proficiency (elven branched spear), Improved Unarmed Strike, Mobility, Panther Style, Panther Claw, Panther Parry, Stunning Fist, Weapon Finesse
Skills Acrobatics +13, knowledge (history) +3, knowledge (religion) +3, Perception +8, Sense Motive +10, Stealth +13
Languages Common, Elven
Special Qualities

  • Ancestral Arms: Exotic Weapon Proficiency (elven branched spear)
  • Blended Views: Darkvision 60 ft.
  • Evasion: no damage on successful Reflex save.
  • Ki pool: 7 points
    • spend 1 point: gain 1 attack at full BAB as part of full attack
    • Sudden Speed. swift action, 1 ki point: increase base land speed by 30 ft. for 1 minute.
    • Barkskin: standard action, 1 ki point: +3 natural armor bonus for 70 min.
  • Ki strike: unarmed attacks overcome DR for magic, cold iron, and silver
  • Style Strike
    • Flying kick: During flurry of blows, move up to 20 ft. (provoking AOOs as normal), ending adjacent to a foe and kicking it.
  • Combat Reflexes: 6 AOOs per round
  • Panther Style: When you provoke an AOO by movement, make a retaliatory unarmed strike against the creature making the AOO (limit 4/round). If you damage the creature, its AOO takes -2 on attack and damage.

Traits: reactionary (+2 initiative), focused disciple (+2 saves vs. charm & compulsion)
Gear: +2 cloak of resistance,+2 Belt of Dexterity, +2 headband of Wisdom, agile amulet of mighty fists, +1 bracers of armor, +1 elven branch spear, +1 ring of protection, handy haversack, monk’s kit, ioun torch.

Three-armed fighter

In my last post, I said that Triali could be just as effective if she were a two-handed fighter, so I built a two-handed fighter who uses her third hand to hold a tower shield.  She’s Triali’s half-orc half-sister.  The Two-Handed Fighter archetype makes two-handed weapons hit even harder.  Her Alchemist levels also grants her mutagen and a few spells like enlarge person that let her hit harder and control more area.

Chely Temminck

Female Half-Orc Two-Handed Fighter 5/ Alchemist 2
N Medium humanoid (human, orc)
Init +4; Senses darkvision 120ft., Perception +?

DEFENSE

AC 28, touch 15, flat-footed 27 (+10 Armor, +1 DEX, +6 shield +1 deflection)
hp 68 (7d10+28)
Fort +14, Ref +10, Will +7

OFFENSE

Speed 20 ft.
Melee
MW adamantine Lucerne Hammer +13/+6, 1d12+14 (x2) B or P
MW halberd +13/+6 1d10+14 (x3) P or s
MW cold iron Orc double axe +11/+4 1d8+13 (x3) S
MW alchemical silver Orc double axe +11/+4 1d8+12 (x3) S
Ranged
MW composite longbow +9 1d8 (x3)
Special Attacks Overhand Chop, Shattering Strike

Alchemist Formulae prepared:
level 1 (DC 12) expeditious retreat, enlarge person, enlarge person

STATISTICS

Str 20, Dex 14, Con 16, Int 12, Wis 10, Cha 7
Base Atk +6; CMB 11; CMD 23 (+6 vs. Bull rush & overrun)
Feats Combat Reflexes, Furious Focus, Iron Will, Mobile Bulwark Style, Mobile Fortress, Power Attack, Shield Focus, Weapon Focus (Lucerne Hammer)
Skills 18 ranks sraft (alchemy) +11 (+5 to create alchemical items), linguistics +2, spellcraft +6
Languages Common, Orc, Elven, Giant
Special qualities

  • Missile Shield: once per round, when a ranged attack would hit you, deflect it harmlessly.
  • Vestigial Arm: a third arm to hold the tower shield
  • Overhand Chop: add 2*STR instead of 1.5*STR when making a single attack
  • Mutagen: 20min duration. +4 to STR or DEX or CON, -2 to INT or WIS or CHA, respectively
  • Shattering Strike: +1 to CMD and CMB on sunder attempts. +1 damage against objects
  • Combat Reflexes: 3 AOOs per round
  • Sacred Tattoo: +1 luck bonus on all saves
  • Fate’s Favored: increase all luck bonuses by 1
  • Reactionary: +2 initiative
  • Weapon Training: +1 attack and damage for two-handed polearms
  • Dragon Sight: darkvision 120 ft.
    Traits: fate’s favored, reactionary
    Gear: +1 full plate, +1 tower shield, +1 ring of protection, +2 cloak of resistance, +2 belt of strength, MW adamantine lucarne hammer, MW halberd, MW cold iron/alchemical silver orc double axe, MW composite longbow, 20x arrows, 20x blunt arrows, cracked pale green prism ioun stone, ioun torch, 50 ft. Rope, fighter’s kit.

Triali the three-armed scarecrow

Triali’s not an effective character.  Her average damage is the same as a fighter with a greatsword and Power Attack + Furious Focus.  That fighter also get heavy armor and seven feats to spare.  Worse, Triali’s damage is unpredictable, as seen in the graph above.  Maybe those huge damage spikes instantly kill a boss, or maybe they overkill some mooks.  That’s what makes her exciting to play, watching the pieces interact and waiting for the explosion!

The center of the build is Butterfly’s Sting, which allows a character to pass a critical hit to an ally.  So one character uses a weapon (or dual-wields two weapons) that has a high crit range to maximize the number of critical hits, and another uses a two-handed weapon with a high critical multiplier, to maximize the damage of those critical hits.

Here’s the twist: a character counts as her own ally, and with a third arm from an Alchemist discovery she can wield both a kukri (which crits often) and a scythe, (which crits really hard).

She’s a Ranger so she can focus on Strength and get Two-Weapon Fighting feats through her combat style without meeting the Dexterity Requirements.  That also means she gets an animal companion.  Since she carries a scythe, I gave her a big raven and a scarecrow aesthetic.  She does the samurai thing of shrugging off one shoulder of her jacket when preparing to fight, not just to give her left arm freedom of movement, but also to reveal her other left arm!

In the future she’ll get Power Attack, to make her hits bigger and less predictable.  She’ll enchant the kukri with keen, so it crits more often, and add thundering and shocking burst to the scythe, so it will literally crit like a thunderbolt.

TRIALI

Female Human Ranger 5/ Alchemist 2
N Medium humanoid (human)
Init +2; Senses Perception +11

DEFENSE
AC 21, touch 13, flat-footed 21 (+7 Armor, +2 DEX, +1 deflect +1 natural)
hp 56 (10 + 6d8+20)
Fort +11, Ref +11, Will +6 ( +2 Will vs. divine spells)

OFFENSE
Speed 30 ft.
Melee +1 kukri +11 1d4+3 (18-20/x2) +1 scythe +11/+6 2d4+8 (x4)
Ranged MW composite longbow +8 1d8 (x3)
Special Attacks favored enemy (humanoid(human) +4, undead +2)
Alchemist Formulae prepared:
1. (DC 12) shield, long arm, enlarge person
Ranger Spells prepared:
1.  (DC 12) longstrider

STATISTICS
Str 20, Dex 14, Con 14, Int 13, Wis 12, Cha 7
Base Atk +6; CMB 11; CMD 23
Feats Butterfly’s Sting, Combat Expertise, endurance, iron will, two-weapon fighting, weapon focus (kukri), weapon focus (scythe)
Skills 45 ranks: Perception +11, Stealth +11,  Swim +9, Climb +9, Knowledge (nature) +11, Knowledge (geography) +11, Handle Animal +8, Perform (pipe) +4
Languages Common
SQ Vestigial Arm, Hunter’s Bond: Raven (Daszo)
Traits: anatomist, disdainful defender
Gear: +1 Mithral Breastplate, Cloak of Resistance +2, Ring of Protection +1, Amulet of Natural Armor +1, Belt of STR +2, +1 kukri, +1 scythe, MW Composite Longbow, 20x arrows, 20x blunt arrows, ranger’s kit

“#1 Sap Master”

This Pathfinder character is based on the Sap Master feat that doubles sneak attack damage when attacking a flat-footed opponent with non-lethal bludgeoning damage. That’s a lot of conditions

  • sneak attack
  • flat footed
  • non-lethal
  • bludgeoning

I need sneak attack and a way to make opponents flat-footed.  Rogues have sneak attack, and there’s a Flowing Monk archetype whose AOOs make opponents flat-footed.  I’ll multi-class.

  • sneak attack ✅
  • flat footed ✅

Unarmed strikes (Monk’s specialty) are bludgeoning and can be non-lethal, so that’s a great fit.

  • non-lethal ✅
  • bludgeoning ✅
  • AOO

Rogues and Monks both have reason to maximize Dexterity, so I planned to get Weapon Finesse so my accuracy is based on Dex, not Str.  But I need AOOs to make my combo work, and reach weapons threaten more areas, so enemies provoke more AOOs.  No reach weapon is finessable (except whips, which require a huge investment to work).

I decided to drop Weapon Finesse and maximize Str over Dex.  I wanted the reach weapon to also deal non-lethal bludgeoning damage (like my close-range unarmed strikes). The Bludgeoner feat allows me to deal non-lethal damage with any bludgeoning weapon, but Monks and Rogues are not proficient with any bludgeoning reach weapons. Half-Elves have an alternate racial trait called Ancestral Arms that awards proficiency with one martial or exotic weapon, so I picked the Lucerne Hammer and was ready to actually build the character!

  • sneak attack ✅
  • flat footed ✅
  • non-lethal ✅
  • bludgeoning ✅
  • AOO ✅
  • Flowing Monk 2 ✅
  • Rogue 5 ✅
  • Half-Elf ✅
  • STR, not DEX ✅

As I started selecting ability scores and looking up class features, I remembered that Rogues are bad.  3/4 BAB, d8 HD, and light armor makes melee combat dangerous, but I planned to be in melee all the time.  There’s an Alchemist archetype called Vivisectionist that gets Sneak Attack just like a Rogue.  If I was going to have the weak BAB, HD, and armor, I might as well get spellcasting to go with it.  So Rogue was out, and Vivisectionist was in.

The Vestigial Arm discovery let me hold a shield and a two-handed weapon at once, boosting my low AC, but I didn’t have shield proficiency.  Building the shield from Darkwood reduced the penalty for wielding the shield to zero, which is just as good as proficiency.  Similarly, a mithral breastplate that I was not proficient in inflicted a penalty of zero.  So my alchemist/monk used a weapon, shield, and armor that alchemists and monks are not proficient in.

Alchemist Mutagen boosted my Str, and the Feral Mutagen discovery gave me three natural attacks.  Those three attacks with regular, lethal sneak attack dealt far more damage than the single non-lethal weapon attack with double sneak attack.  Should I drop Sap Master, the whole reason for this build?

Non-lethal Vivisectionist

  • Vivisectionist Alchemist
  • Feral Mutagen
  • 3 natural attacks with sneak attack
  • non-lethally maul people into submission

But wait! Feral Mutagen does not specify the damage type of the bite and claw attacks, so I must fall back to the defaults.  The bestiary has a table of natural attacks and their damage types.  Both Bite and Claw deal bludgeoning damage (as well as other damage types) which means the Bludgeoner feat affects them and I get double sneak attack damage on all three attacks! Now my character had two modes:

Normal form

  • 2 hands on Lucerne Hammer
  • 1 hand on shield
  • 1 free hand for potions, etc.
  • Get AOOs with Lucerne  Hammer to make opponents flat-footed
  • Continue to hit at reach with Lucerne Hammer, or use unarmed strike up close

Mutagen form

  • 1 hand to hold Lucerne Hammer (can’t use it)
  • 1 hand on shield
  • 2 hands make Claw attacks
  • Bite attack too
  • 3 natural attacks do a lot of damage, even without the Sap Master bonus.
  • At the end of my turn, I put a second hand on the Lucerne Hammer so I can make AOOs with it.

I was almost done with the character when I re-read the Unbalancing Counter text one more time, and realized that the entire build didn’t work. Hitting with an AOO wasn’t enough to make the opponenet flat-footed. The opponent also got to make a save. The save was based on Monk level and would be DC 11 forever, low enough to be irrelevant.  I had no way to make opponents flat-footed.  I’d never get to use Sap Master.

Since I had no use for the Monk levels, and was non-proficient with my weapon, armor, and shield, I switched to Fighter 1/Alchemist 6.  I didn’t need the Half-Elf ability to get proficiency with my weapon, so I switched to human for the extra feat.  Now I could wear heavy armor and a shield and get into flanking to trigger sneak attacks.  I swapped the Lucerne Hammer and Mithral Breastplate for an Earthbreaker and Full Plate.

Invisible Tank

  • use Stealth skill and Invisibility spells to open combat with Sap Master attacks on opponents who haven’t acted yet.
  • another melee character in my party moves around to flank with me, since I’m slow.
  • 3 natural attacks with sneak attack still do a lot of non-lethal damage.

Armor Check Penalties make sneaking in Plate armor difficult, and I’m not sure Pathfinder allows me to sneak up behind someone using the Stealth skill. Charge during the surprise round? Fortunately, I remembered another feat that allows me to make opponents flat-footed.

Catch Off-Guard lets me attack with improvised weapons without penalty, which is fun to roleplay.  It also says that unarmed opponents are flat-footed vs. my attacks with improvised weapons.  Clearly I’ll just have to disarm people.  Improved Disarm and a flail give me bonuses to disarming opponents, and I hold an improvised weapon in the other hand to use once they are disarmed.  The weapon is a trophy, reading “#1 Sap Master”  The chance to disarm is disappointing, especially compared to Crusher’s inescapable grip, but the concept is fun to roleplay, so I’m still happy with it. Sort of.  I want more to-hit and better saves.

Catch Off-Guard Shenanigans

  • Alchemist 6/Fighter 1
  • Flail in one hand to disarm
  • Trophy in other hand to use as improvised weapon
  • Shield in third hand
  • Feral mutagen is still an option

That’s the long, winding road from nimble Monk/Rogue with a reach weapon to heavily-armored mutant who knocks people out with a trophy for knocking people out.

 

Number One
Male Human Fighter 1/ Alchemist (Vivisectionist, Beastmorph) 6
N Medium humanoid(human)
Init +4; Senses Perception +10

DEFENSE
AC 24, touch 11, flat-footed 23 (+10 Armor, +1 DEX, +3 shield)
hp 56 (10 + 6d8+20)
Fort +12, Ref +9, Will +6

OFFENSE
Speed 20 ft.
Melee MW Flail +11 1d8+5 non-lethal
or MW Flail +15 vs CMD disarm
or “#1 Sap Master” trophy +12 vs flat footed AC, 1d6 + 5 non-lethal
Ranged MW composite longbow +8 1d8 (x3) non-lethal
Special Attacks (3d6+3 sneak attack, double if flat-footed)
Alchemist Formulae prepared:
1. (DC 13) enlarge person x2, vanish x2, expeditious retreat
2. DC 14) barkskin, bull’s strength x2, invisibility

STATISTICS
Str 20, Dex 14, Con 14, Int 15, Wis 10, Cha 8
Base Atk +5; CMB 10 (+5 disarm); CMD 21
Feats Bludgeoner, Brew Potion, Combat Reflexes, Improved Initiative, Iron Will, Sap Adept, Sap Master, Throw Anything
Skills perception +10, craft(alchemy) +11, spellcraft +11, acrobatics +3, knowledge nature +11, knowledge arcana +11, climb +2, swim +2 (ACP = -6)
Languages Common, +2 more
SQ Beastmorph Mutagen, Improved Beastmorph Mutagen, Mutagen, poison use, Feral Mutagen, Wings, Vestigial Arm
Traits: Surprise Weapon, Reactive
Gear: +1 Full Plate, +1 Heavy Wooden Shield, Cloak of Resistance +2, , Belt of STR +2, Headband of INT+2, +1 Amulet of Mighty Fists, MW Flail, MW Composite Longbow, 20x arrows, 20x blunt arrows, alchemist’s kit, “#1 Sap Master” trophy

Improved Feral Beastmorph Mutagen: 60min duration. +4 STR, -2 INT, 2 1d6 claws, 1 1d8 bite, 2 of the following abilities (climb 30 feet, fly 30 feet (average maneuverability), swim 30 feet, darkvision 60 feet, low-light vision, and scent.)

What do I do with my hands?
3 arms: shield, flail, “#1 Sap Master” trophy
3 arms with mutagen: 1 for shield, 2 for claws.

Attack with mutagen: bite +13 1d8+7, 2 claws +13 1d6+7 non-lethal

Crusher, the emotionless Barbarian

Pathfinder’s Android race has two features that are very interesting to Barbarians.

  1. Immune to morale bonuses.  The stat buffs from rage are morale bonuses.
  2. Immune to fatigue.  Ending Rage makes Barbarians fatigued, and they can’t enter rage again until the fatigue wears off.

Combining these two makes an interesting Barbarian who does not get stat bonuses, but can use powerful “once per rage” abilities every round, by beginning and ending rage every round.

At first I pursued the robot theme by selecting the Savage Technologist archetype, which has the appealing pistol + sword fighting style. Using a pistol in melee without provoking AOOs sounds great, but reloading still provokes, and reloading requires a free hand, which Crusher doesn’t have because he’s holding a sword.   It was too much trouble.

Strength Surge adds barbarian level to one CMB check, so I looked for a combat maneuver to specialize in.  The Brutal Pugilist archetype and Animal Fury rage power reward grappling, so I built a grappler. I chose level 7 because that’s when Greater Grapple becomes available, which lets me make two grapple checks per round.  Since Androids get a bonus to Dexterity, Crusher uses Dexterity instead of Strength for all his rolls.  (Maybe the three feats aren’t worth the slightly higher numbers, but I’m tired of doing math.)

The average CMD for a CR 7 enemy is 26, so Crusher succeeds on a 2.  Each time he maintains a grapple, he bites, and he can choose to deal damage when he maintains a grapple, so he can bite up to four times in one round. He can also reliably tie up foes with an escape DC in the 40s.

His defenses are fine.  23 AC will stop 60% of attacks.  Alas, the -2 AC penalty from rage is not  a morale penalty, so it still applies.  He’s immune to a number of status effects and has bonuses against others, including mind-effecting, the worst kind of save for a melee monster to fail.

Crusher
Male Android Barbarian (Brutal Pugilist) 7
N Medium humanoid, construct
Init +6; Senses darkvision 60 ft.; Perception +13

DEFENSE
AC 23, touch 14, flat-footed 18 (+7 Armor, +5 DEX, +2 shield, +1 deflect -2 rage)
hp 76 (7d12+28)
Fort +10, Ref +10, Will +5 (+4 vs. Mind-effecting, paralysis, poison, stun)
Defensive Abilities DR 1/–, Immune disease, sleep, fear, emotion, fatigue, exhaustion
OFFENSE
Speed 40 ft.
Melee unarmed strike +14/+9 1d4+6 (19-20/x2), bite +8 1d4+3
Ranged MW composite longbow +14/+9 1d8 (x3)
Special Attacks rage (19 rounds/day), rage powers (animal fury, strength surge +7, brawler)

STATISTICS
Str 10, Dex 22, Con 16, Int 9, Wis 12, Cha 6
Base Atk +7; CMB 13 (+5 grapple); CMD 24 (+3 vs. grapple)
Feats Agile Maneuvers, Improved Grapple, Greater Grapple, Weapon Finesse
Skills 11 skill points Perception +13, Acrobatics +12
Languages Common
SQ fast movement, Pit Fighter (+1 grapple CMB, +1 grapple CMD), Improved Savage Grapple
Gear: +1 Mithral Breastplate, +1 Buckler, Cloak of Resistance +2, Ring of Protection +1, Belt of DEX +2, Agile Amulet of Mighty Fists, MW cold iron Cestus, MW alchemical silver Cestus, MW Composite Longbow, 4x50ft silk rope, 2x potion of Fly, 40x arrows, 20x blunt arrows, barbarian’s kit

  • Immune to fatigue, so cycle Rage every round to use Strength Surge on grapple every round
  • Greater Grapple allows maintaining a grapple as a move action, so 2 grapple checks per round.
  • Animal Fury: free bite attack when maintaining a grapple

Initial grapple: +25 vs CMB (7BAB + 6DEX +7 Strength Surge +2 Imp. Grapple +2 Greater Grapple +1 Pit Fighter)

Animal Fury: bite +13 1d4+6
Maintain grapple: +25 or +23 vs CMB (7BAB + 6DEX +5 Maintain +2 Imp. Grapple +2 Greater Grapple +1 Pit Fighter) +2 Animal Fury?
Pin or damage (1d4+6)

Felipe Pepe’s list of influential CRPGs

Felipe Pepe, CRPG historian, wrote an article listing 35 CRPGs one should play to get a general outline of the history of the genre.  In the article, the list is displayed as an image, which is good for sharing on Twitter and the like.  Here’s a version with links to buy or play them.

Title Year Price Platform
dnd 1975 free web
Rogue 1980 free browser
Wizardry I: Proving Grounds of the Mad Overlord 1981 free browser
Ultima IV: Quest of the Avatar 1985 free Win, Mac
Dragon Quest 1986 $2.99 Smartphone port
Starflight 1986 $5.99 Win, Mac
Dungeon Master 1987 Atari ST
Pool of Radiance 1988
Wasteland 1988 $5.99 Win, Mac, Linux
Quest for Glory: So You Want to Be a Hero? 1989 $9.99 Win
Darklands 1992 $5.99 Win, Mac, Linux
Ultima Underworld: The Stygian Abyss 1992 $5.99 Win, Mac
Ultima VII: The Black Gate 1992 $5.99 Win, Mac
Mordor: The Depths of Dejenol 1995 free Win
The Elder Scrolls II: Daggerfall 1996 free Win
Diablo 1996
Final Fantasy VII 1997 $11.99 Win
Fallout 1997 $9.99 Win
Baldur’s Gate 1998 $19.99 Win, Mac, Linux
Might and Magic VI: The Mandate of Heaven 1998 $9.99 Win
Planescape: Torment 1999 $9.99 Win, Mac, Linux
System Shock 2 1999 $9.99 Win, Mac
Deus Ex 2000 $9.99 Win
Gothic 2000 $9.99 Win
The Elder Scrolls III: Morrowind 2001 $14.99 Win
Neverwinter Nights 2002 $9.99 Win
Star Wars: Knights of the Old Republic 2003 $9.99 Win
Fable 2004 $9.99 Win
Mass Effect 2007 $19.99 Win
Fallout 3 2008 $9.99 Win
Dragon Age: Origins 2009 $19.99 Win
The Elder Scrolls V: Skyrim 2011 $19.99 Win
Dark Souls 2011 $19.99 Win
Divinity: Original Sin 2014 $39.99 Win
The Witcher 3: Wild Hunt 2015 $39.99 Win

A simple game

Most of my game ideas are too ambitious to start.  I want to make games with procedural footprint generation, 3D traversal with encumbrance and different terrain types, or tons of dialog and subtle human reactions.  This means most of my games don’t progress past text files,

While watching AGDQ 2017, I realized that people love simple games, like the ones that fit on an NES.  The graphics are simple, there are only a few stages, enemies, and powerups, but that’s enough.

So I’m going to make an NES-style game, with one twist.  The main interaction is moving antagonists around, not destroying them.  The player fends off fans who rush a celebrity’s limousine with oil slicks, velvet ropes, and other cartoony tools.

I looked around for a game engine to use and settled on Godot.  In YouTube tutorials, some people pronounce it “Guh-doh” like the play, and others say “Go Dot”. The official site’s FAQ does not address the pronunciation.

Now that I have a game engine and can start writing code RIGHT NOW, I realize how many decisions need to be made before I start.  I don’t want fans getting to the limo, but how exactly does that work?  Do fans stop the limo, and the player fails if the limo is late?  Does the celebrity inside the limo have an annoyance gauge that increases as fans touch the limo?  If the fans have limited acceleration and turning speed, I can make more interesting traps that spin them around or slow them down.  Can I knock people down?  Are they injured by jumping in front of the limo?  Boss fights are traditional, but what is a ‘boss’ in this context?  A really big fan?  Do the different tools act like different weapons in Mega-Man, Contra, or Metal Slug?  I’m sure the answers will change as I go, but here is my first attempt.

Main game loop:

Top-down, real-time, 2D game.

A limo moves through a city on a pre-determined path.  It stops whenever a fan touches it.  The level ends in success when the limo reaches the end of its path.

When the limo stops, the celebrity’s annoyance increases.  The level ends in failure when the annoyance gauge is full.

The player controls a bouncer who moves independently of the limo on foot.  The bouncer can’t move out of sight of the limo.

Fans scattered around the level will try to get to the limo.  Fans activate when the limo moves inside a certain radius.  Fans give up and go home when pushed a certain distance away from the limo.

Possible types of fans:

  • Normal fan: default speed
  • Big fan: can break through velvet ropes
  • Quick fan: a bit faster
  • Screaming fan: can stop and scream, which summons more fans
  • Paparazzi: can upset the celebrity from range

Possible tools:

  • Bouncer’s glare: freeze a fan on the spot for a short time
  • Velvet rope: blocks a path.  Force fans to go around
  • Autograph:  Throw autographed merch.  All fans near the merch’s path will chase it.
  • Spring trap.  When triggered, push back everything in its path
  • ice or oil:  slows fans moving through the area

Possible levels

  • An actor goes to a shooting location
  • A singer goes to a concert
  • A celebrity goes to an award show
  • A politician goes to give a speech.

Gallery Aggregator roadmap

When I return from a convention, I scour the internet for photos from the event.  Many convention-goers do the same, as evidenced by the many “looking for photos” threads on forums and social networks.  I’m building a searchable list of galleries from many different events  that is more permanent and easier to search than those “looking for photos” threads.

Here’s the current version

I’d rather have other people do my work for me, so I built a public page where people can submit galleries.

Check it out, and please add a gallery or two.

People would rather have a machine do their work for them while they are doing my work for me, so when someone submits a link to  a Flickr album, the website uses the Flickr API to pull in the rest of the data.

The main functions of the site (submitting, moderating, and displaying) are all working and stable, so now I can think about improvements.

  • Integrate with other sites’ APIs

Flickr is not the only image host with an API.  I should integrate with SmugMug, Imgur, and Facebook.  Automating data entry makes it easier for users to submit galleries, and makes the data submitted by users more reliable.  It’s good for both of us.

  • Make the site prettier

The styling on the site could charitably be described as “basic” because I  focused on functionality.  User experience is important, so I should make the site smooth and pretty.

  • Label NSFW content, and galleries that require logging in

If a user can’t view a gallery, a link to that gallery is a waste of time.  Some image hosts, like Facebook and Flickr, may require users to log in before they can see the gallery, so I need to warn users before they click.  Users hsould also be informed before clicking on links to NSFW photos.

  • Allow users to report dead/bad links

Sometimes links go dead, or domain names expire and are taken over by squatters.  Anyone who finds a dead link should be able to report it, so I can remove it.  This saves me the effort of periodically checks all the links, and lets users help make the site a better place.

  • Rating system

Someone who doesn’t have time to look through 100 galleries from a certain event may want some way to decide which few to look at, and user ratings are one way to provide that.  I think that “popular” and “good” often diverge, so I’m unconvinced that directing people to popular galleries is a good idea.  I could curate my personal favorites, but since what I like and what the masses like are different, that feature may not be useful to the users.

  • Add more content

I have added hundreds of galleries already, but I’ve been collecting galleries for a long time, so I have many more to add.  The more content is on the site, the more useful to visit, which means more people who like it and may contribute.  It snowballs.

  • Get other people to use the site

All this information is only useful when people know about it and use it.  After each event,  I’ll post in the various “looking for photos” threads encouraging people to use the site.