Friday, July 27, 2018

Summer Course Revisions 2018: Human-Computer Interaction (CS345/545)

Wrapping up my series (1, 2) of summer course revisions is this one: the revision to CS345/545, Human-Computer Interaction. Regular readers may recall that I wrote a public reflection of the Spring semester's offering early in the summer. In a strange twist of scheduling, the course is being offered again in the Fall, which means I get to make revisions and apply them right away. (Even stranger, another faculty member offered a summer section that made enrollment, but that's not directly relevant to my own work.) I made some of these revisions alongside the changes I made to my other courses, and then I picked the course back up yesterday morning for the finishing touches. 

I tried to keep what was good about Spring's section while remedying some of the items that I found problematic or confusing. The overall structure of the course is the same as before: we will spend a few weeks on background readings and regular exercises, focusing our attention on Don Norman's The Design of Everyday Things. We will be moving from three meetings per week to two, so I adjusted the readings and assignments accordingly. It's a rather aggressive reading schedule from the get-go, which should help the students recognize they need to allocate adequate time. I added a few readings and videos, including Steve Krug's usability testing video from Rocket Surgery Made Easy, a recent Designer vs Developer episode from Google that gives a good overview of design principles (though I take serious issue with the implicit epistemology of that series' title), Jakob Nielsen's "Why You Only Need to Test with 5 Users," and Andy Rutledge's series on Gestalt principles of perception.

I have kept the grading scheme essentially as it was, although I added a new required assignment for graduate students. This will help distinguish their work a bit more than it was before during the project section of the course. Grad students will have to choose one out of four options, each having a different theme: scholarly research, software architecture, design principles, and design methods. As before, they will also have an additional set of assignments early in the semester, which give them a crash course in some of the ideas that the undergraduates would have seen in their prerequisite, CS222. Our graduate program has no equivalent course that can be used as a prerequisite for grad students, so these extra assignments help to catch them up to where the undergrads are.

Last time, I used triage grading as the theme of the short project: students had to talk to others who were exposed to triage grading and design something that would help them with the transition. This backfired when many of my students did not take the time to learn triage grading for themselves, and so they were unable to create interventions of any merit. One group even insisted that the best solution was to change triage grading, essentially replacing it with conventional grading; despite repeatedly discussing this with them, they didn't ever seem to understand that this was not within their jurisdiction. Several times during the final project, I referred back to their failures on the triage grading project; some students seemed to be able to take this as a learning experience, but others didn't seem to show any recognition of what went wrong, judging from what they ended up with.  Suffice it to say, I am going with a different theme this time: BSU freshmen who do not know local jargon and landmarks. Freshmen are plentiful for use as research subjects, and my students are not themselves freshmen.

About two weeks ago, I set up a partnership with the David Owsley Museum of Art (DOMA), which is really a treasure of Ball State University's campus. My students will go on a tour of the museum early in the semester, and then, after we go through some of the background material and the short project, we will talk to them again about their mission and goals. The students then will have creative freedom to create an original, prototypical software system that explores these themes. They were very happy to have my students accessing their digitized data as well, although it is managed through the university's Digital Media Repository.

Here is where things started to break down. I assumed that my students and I could just get read-only access to the database. They shied away from that and asked if we could work with a dump of the database. I've been going back and forth on emails for the past two weeks now trying to sort this out. To be clear, everyone is very supportive of the idea, but nothing seems to be happening. At this point, I'm awaiting a dump of a database to see what I can do with it, but I don't have an ETA. I've been working pretty consistently all summer, and I'm heading into a family vacation and "taking some time off" mode, so if I don't get my hands on that data soon, I won't have time over the summer to sort it out. The good news is that I found a good back-up plan. Searching the Web for art museums with public APIs, I came across the Digital Public Library of America. They have a nice, open API that seems to aggregate many other data sources. If we cannot get access to DOMA's data, I know we can use DPLA's, at least for the sake of our prototype. If we go this route and a student makes something that really excites DOMA, we can look at stitching it back into their data.

I've copied over the new decorum section from my other two course revisions into this new one. As I wrote about earlier, this section is designed specifically to address some of the frustrations from Spring's HCI course. You can be sure I'll let you know how it all turns out by the time the Fall semester is over, if not before.

That pretty much wraps up my summer course revisions, modulo some potential extra work specifying another mini-project in game programming or tinkering with data sources for HCI. It's been a productive summer so far. I spent a week writing a manuscript for Meaningful Play, which I just found out was accepted, so I look forward to returning to Lansing in October. It needs just a little bit of revision which I will do tomorrow morning or next week. I also am one click away from submitting a grant proposal for a new educational game collaboration. Of course, I started the summer by sinking a lot of time into Collaboration Station and Fairy Trails. I've triaged the former into a holding pattern: although the anonymous authentication feature I needed was finally added to the third-party library we used for multiplayer, the changes to that subsystem require more effort than I am willing to donate. I'd rather spend that time on some new prototype ideas, playing around with Unreal Engine 4.20. I think the next project on the docket, though, will be building some custom cars for Gaslands: that will make it really be a summer vacation.

Thanks for reading!

Monday, July 23, 2018

Getting started with Gaslands

My brother told me about Gaslands, a post-apocalyptic vehicular skirmish game, and it piqued my interest. My elder son and I played several games of Frostgrave a while ago and really enjoyed it, although our campaign petered out without fanfare. (Wow, was it really two years ago? More on that later.) Both games are from the same publisher—Osprey Publishing—and just like Frostgrave is based on using your existing miniature collection, Gaslands is played with whatever old Hot Wheels or Matchbox cars you have. I ordered the rules and sped through them; my son saw me reading, asked about it, and read them as well, and we agreed that this sounded like fun. Vehicle maneuvers depend on movement templates, which we could have made ourselves out of paper or cardboard, but hey, I got promoted, so I bought some MDF templates and tokens from MRlasershop on Etsy.

I shared these short session reports on Facebook, and I decided to copy them over here to the blog, where it would be easier for me to revisit them later. In preparing this post, I looked back over the Frostgrave one, and it's hard to believe that was really two years ago. One of the reasons Gaslands caught my attention is that the BoardGameGeek page claims it's playable by ages 8+, compared to Frostgrave's 12+. My second son is 8, and he sits pretty well into the BGG recommended ages, so while I suspect Frostgrave is still too much for him, I thought Gaslands may be just in the zone of proximal development. (Yes, that's how we do things around here.)

The day my templates arrived, my older son had a class to attend, so #2 son and decided to jump into Gaslands' recommended starting game: two cars per player, each with a front-mounted machine gun, in a last-man-standing deathmatch.

My son's bedtime was not too far off, so we agreed to play a time-limited game. It was a little choppy as I was trying to sort out the rules. They are presented in the book like they were written by a programmer: concise, clear, in order, and decomposed into named procedures. This makes them easy to reference, if you know what you're looking for (that is, debugging), but it's not necessarily the best way to express the big picture ideas. I had printed up the official quick reference card and a convenient cars-only dashboard I found on BGG, and these helped smooth out the experience.

Toward the end of the first game. MDF movement template example shown behind the red and black hot rod.
We began in a tight grid formation for maximum carnage, and I only have that one picture of the game. This is a shot right before my son misjudged the tightness of a hairpin turn and smashed his grey car right into that orange gate. It let us learn the collision rules, and it took us right to bedtime. Play time was just under an hour, and we enjoyed it. #1 son was jealous when he saw the cars on the kitchen table upon returning from his meeting.

The next morning was Saturday, and we set up a three-player game with the same rules. We took two cars each and set up a pair of them—controlled by different players—at three points of a triangle. I took a few more pictures of this one, not really intending a full battle report, but it turns out I had enough to capture some of the highlights.

#1's gray car is about to move in and take a solid shot on my black car. My white car (bottom right) is thinking vengeance and swings in behind him. Out of nowhere, #2's red buggy (top) comes flying forward, sliding and spinning, ending up right in front of my white car. He blasts away with his machine gun, but now we're both in third gear and practically bumper-to-bumper: collision on one of our activations is inevitable.

Then, #1's white car (bottom left) comes careening toward us and rams #2's buggy! Neither one is destroyed, but my #2's car are still headed for inevitable collision.

My white car slams into the front corner of #1's white car. Neither driver tries to evade, and my car is destroyed. It flies forward, ramming into #2's buggy, demolishing it as well. #1's white car somehow survives this carnage, as neither my nor #2's car explodes.

Behind all this, here comes #2's orange hot rod, making an easy medium straight maneuver. The crew leans out with their pistols and put the last point of damage onto Alex's white car, destroying it. That's how we all lost our first cars.

Now that orange hot rod had pulled off a crazy sliding, spinning maneuver on its first activation, which had let it tear into one of my cars with its machine gun, but it's sitting on several hazard tokens. At this point, it's in fourth gear and headed toward the edge of the table. #2 drops his gear and tries to turn, but a really unlucky roll has him slide off the table, disqualified.

In truth, #2 son was having a hard time staying focused on the action. Even though the turns go quickly and—from my perspective—everyone has a stake in each turn, it was just a bit too long for him. He's also a really kinetic kid, and so he would go physically spinning off into the next room, making explosion and crashing sounds and throwing his arms into the air as anything exciting happened. Having him eliminated first was okay, and I think we'll have to take his developmental limits into consideration if we try to play any other scenarios. I'm wondering if he would be better served by a small custom game, something less than the recommended 50 cans.

Back to the session report. My black car spun around and tried to out maneuver #1's grey. I wasn't able to get it under control though and had to choose between ramming the pillar or his car. The choice was clear. We smashed into each other, leaving each with just one hull point remaining. He pulls of a crazy hairpin turn and spin, finishing me off with his front-mounted machine gun. #1 son is victorious!

The interlocking system of gears, maneuver templates, and skid dice is really excellent. It's pretty elegant: the higher gear you are in, the more moves you get, but the more dangerous the moves are. On any move, you can roll skid dice to attempt to shift gears, spin, or slide, but sometimes this goes very badly. I've seen enough post-apocalyptic movies to vividly picture the setting, and I've seen enough action movies to picture the crazy car maneuvering. Heck, I've spun and skidded out in my own cars, and so I know that feeling viscerally. My wife asked an interesting question about it: how do my kids envision it? How does someone with no cultural context around MadMaxian post-apocalyptic cars visualize the action?

This brings up another interesting piece of the game, and I've tried to capture this in the session report above: it is cinematic. It's turn-based, but it feels more like everyone is moving at once, but the camera keeps changing. One of my drivers sought vengeance for his team. The driver of the orange hot rod pulled off crazy maneuvers but overdid it and ended up careening off the cliff. Three different drivers headed straight for each other in high gear in an insane game of chicken. I think this dramatic sense is facilitated by the fast turns and what are really simple rules, once you get the basics down. To this end, the designer's suggestion of playing the two-car deathmatch is a good one.

My boys are all pretty crafty kids, and I think they will enjoy converting some old cars into Gaslands teams. The kids don't know it yet, but I ordered a bunch of 3d-printed weapons from FunBoardGames on Etsy, and those should be here this week. I'm thinking about seeing if they want to try crafting the rulebook's recommended team builds as a first try. I suspect a trip to Goodwill to look for more vehicles to beat up is in our near future.

Thanks for reading. As I mentioned above, I enjoyed going back and reading my Frostgrave report while writing up this one. This is one of those posts that is mostly for future-me, so I can look back and remember some fun family memories. Who knows how often we'll play this one, if it will fade out like Frostgrave, or if it can all come back to the table as the younger boys get a bit older as well.

Saturday, July 14, 2018

ICRPG Session Report: The Eye of Clune (Part 1...?)

Ah, summer break, when a professor's imagination turns to tabletop role-playing games.

For those who don't know, I have a bunch of kids. One of my goals for the summer was to do some kind of tabletop RPG with them. My desire to play ICRPG was recently reignited by something I saw on the Runehammer / Drunkens & Dragons channel. I think it was the Death and TPK episode, although I cannot remember how I ended up there in the first place. In any case, it led to my watching the Aliens One-Shot on Roll for Effort's channel. (Spoiler: it's a two-shot.) Regular readers may recall that I spent an afternoon with ICRPG when it first came out, publishing one of the first public reflections on the core rules. I ran my three eldest kids through character creation and a trial, but that's as far as it went. For a few weeks now I've been kicking around adventure ideas, and I decided that today would be a great day to put pencil to paper and actually run the guys through it.

All my notes for the day's adventure
What follows is a session report of our day with ICRPG, starting character creation at around 11:00AM, breaking for lunch, and finishing up around 2:30PM. I've included a few reflections about the system and family dynamics along with the session report. If this sounds interesting to you, read on!

You may notice that there's no other pictures here. Despite my nice collection of painted miniatures, I decided to play entirely in theater of the mind. This seemed to be the least fiddly, and as I expected, the guys caught right on. I thought about using quick sketches on index cards—it is Index Card RPG after all. Despite having watched all the Paint By Monster episodes I can, my drawing skills are still pretty rudimentary. I decided to focus on getting something fun to the table; maybe future games will include more visual aesthetics.

A little background on the setting is in order. Son #2 (8) has, for years, been talking about a world called "Magic Sword." It used to be much more common than it is now, how he would go off on stories about the mythologies and conflicts of this made-up world. I figured this would be a good a world as any for a one-shot adventure, so he agreed that we could use his setting.

After I explained the fundamentals of the game, we got into character creation. Son #1 (11) created an alchemist gnome strongly inspired by the quatryl tinkerer he recently retired in Gloomhaven. Gnomes are not listed as a race in the ICRPG core rules, so we decided to give him +1 INT and +1 DEX as racial bonuses. Son #2—the creator of Magic Sword—chose to play an abandoned healer. The abandoned are of his own creation: they are skeletons of people who were virtuous in life and so, when reanimated in death, they rejected the evil rule of the necromancer and regained their autonomy. (Of course, that's not quite how he words it, but that's the idea.) It's rather a clever bioform, I think. In any case, we gave him a +1 WIS to represent piety and willpower along with a +1 Armor to represent his not having skin or guts to stab. Son #3 (5) went with a human fighter, taking the usual +1 INT and +1 Weapon effort.

For the classes, I took inspiration from the Alfheim classes in ICRPG Core 2nd edition, but we didn't use them directly. The fighter took a +2 Ring of Protection as a starter bonus. We gave the alchemist a Fire Bomb kit that lets him use INT checks to make explosive potions and the capacity to carry six at a time. The healer took the Healing Touch WIS power from the rulebook. The guys set themselves up with starter loot and basic equipment and we set to it.

Here they were, the mighty heroes! A gnome alchemist named Gonff! A living skeleton healer named ... Tim. And a human fighter named ... Jeff? *sigh*. Names that will strike fear into the hearts of their foes, indeed.

The party was approached by The Red Wizard, a mysterious, powerful, and wealthy denizen of the capital city of indeterminate gender and age. The Wizard asked the party to retrieve for him the Eye of Clune, which he recently discovered was hidden in a secret temple in the mountains. The way to the temple has been blocked for hundreds of years by a magical door, but the Wizard gave the party the Ruby Lens to decipher the ancient language. (Heh.) The Wizard promised them a reward of 100 gold coins each if they could claim the Eye and return the Lens. The party was given a map and warned that the forests were infested with kobolds and that a group of harpies had settled in the cave.

Let me go on one or two little asides here. First, I spent a lot of time the past few weeks not creating an adventure. I let my mind wander, I thought about inspirational stories, I tried to convince myself that I could still make adventures like I did back in the day. It might be one of those cases where if I just put pencil to paper, something would have spilled out. It was kind of a weird feeling, in part because I was worried about making something too dark for my 5-year-old. He did ask, when they finally met the harpies, "Are they real?" I explained that they were not real, just like kobolds. Hopefully he sleeps OK tonight.

Through high school and into college, I loved to create my own worlds and run D&D adventures in them. In my first year of college, I took an intro philosophy course with a young, bespectacled, bearded, pony-tailed instructor named Mr. Clune. At the time, I was working on a pantheon of gods for a fantasy world, and so the god of philosophy was aptly named "Clune." When I was thinking about what kind of adventure to present to my kids, "The Eye of Clune" came to mind: a mysterious artifact of an ancient power—some say he was a wizard, some say he was a god. Actually, looks like he's an adjunct at Sam Houston State University. Good enough for me. Makes me wonder if somewhere there's a party of young adventurers seeking "The Accursed Tome of Doktorjee."

Back to the session report. The party traveled through the valley, arriving at the cliffs before sunset. They could see the cave, forty feet up a sixty foot cliff. Rather than attempt the difficult climb, they opted to seek a path to the top of the cliff, from which it would be an easier climb down into the cave's mouth.

One of the tips in ICRPG Core is No content left behind. I designed a kobold ambush encounter that could be used on the party if they took this path up the cliff, and if they instead made the tricky climb, I could reuse it for the trek back to town. It's good advice, and I don't think it's the kind of thing I used to do "back in the day." Too much attention to realism back then, not enough to epic narrative. Can't go back, though.

The party approached a clearing as the sun was setting and noticed a dead elk in the middle of it. Curious, Jeff advanced. His successful WIS check let him see the ambush before it was too late: six kobolds leaping up from cover to attack whatever would approach the bait. By chance, this was an encounter with 1HP enemies, and it was a good way to start: the kids could focus on learning the basics of combat without worrying about damage effort. Jeff is clearly the tank, with 16 Armor, so it worked out well that he tripped the ambush: the kobolds never touched him. Gonff blew up a few kobolds with a fire bomb and then began picking them off with his sling. The highlight here was when he rolled a 1, so we had him roll again for a fumble: another 1! He hit Jeff in the back of the head, rolling max damage. In the end, the party took more damage from Gonff's errant shot than the one kobold who struck a blow against Tim.

This battle was the first time that I used a DM Timer. This is a technique out of Drunkens & Dragons in which a timer ticks down on the DM's turn. I was using it for something fairly mundane: when it hit zero, the sun would set and everything would be come hard (-3 on all checks). This added tension very nicely, though.

After the battle, Gonff searched for treasure, rolling on the Shabby Loot table and finding... a 12-foot ladder. That's beautiful: a group of kobolds waiting in ambush would of course bring with them a 12-foot ladder. Turns out, a ladder is just the kind of thing the party needed to help climb the cliffs, so this bizarre roll ended up being quite the boon.

The next morning, the trio headed to the top of the cliff. Jeff had the option to use give up his climbing gear to rig up a trivial climb or to complete a one heart challenge to figure out how to situate the ladder to allow the guys to climb down to the cave. He went for the latter, botching the first roll, which was no big deal. Then, I started another DM timer: in five rounds, the harpies would hear them! Again, this DM timer rule added tension and excitement to what would otherwise just be fiddling with a kobold's ladder. Turns out, the party got the ladder situated just as the harpies became aware of them, and then they began their song. WIS check to avoid becoming enchanted: Jeff passes, but Tim and Gonff fail and begin walking toward the edge of the cliff and the 60-foot drop! Thinking fast (and with some player help from his older brothers), Jeff pulled out his climbing rope and used it to tie his comrades fast to a tree. Saving the party just in time earned Jeff a Hero Coin. This is another inspirational idea from ICRPG, somewhat analogous to Advantage in D&D 5e: do something epic and earn a coin that can be used later. Unlike Advantage, the player chooses when to apply the Hero Coin. Listening to that Aliens One-Shot while painting, I heard the Hero Coins often be the difference between life and death. This was the only Hero Coin awarded during our adventure today, and I'm glad the we had one hit the table. That rule is a keeper.

Tim and Gonff were able to shake off the enchantment and hustled down the ladder into the cave. They were attacked by the harpies, but when Jeff came down, the harpies saw they were outnumbered and fled. DM Timer time: 5 rounds until they come back with reinforcements! Jeff began deciphering the ancient writing on the wall while Gonff searched for treasure. I knew I wanted some loot in the harpy nests, and Gonff found a valuable gem on his first search. He asked if he could keep searching, and so I decided to go with the cursed table for the second search. He discovered [possible item spoiler from the ICRPG table] the Cloven Blade: it gives +2 to hit and +2 damage, but it cannot be put down, and it slowly turns the wielder into a goat. Fun!

Let me mention here that basic effort is really slow. Deciphering the text was a one-heart challenge, requiring ten effort. First one has to make the check, and then roll a d4 to make progress. Turns out Son #3 rolls a lot of ones. This inspired him to spend his hero coin on the task, which worked out for the best, since he opened the door the same round that the harpies returned. DM's Honest Truth: once again, the DM timer and the heroes' efforts aligned for perfect cinematic progression. The party ran through the door and heard the harpies at the mouth of the cave. Jeff's first instinct was to fight them off, but his comrades convinced him that closing the door would be safer.

The party continued through a long, descending tunnel. Halfway through, they were attacked by mysterious magical black tendrils, groping at the party and attempting to pull them toward the wall to be devoured by emerging mouths. Their inclination was to stand and fight the tendrils, even though in the first round, Gonff was knocked to half his health. I pointed this out, and they realized that discretion was the better part of valor. Gonff and Tim booked it to the end of the hall, but Jeff was knocked senseless by a critical hit: rolling a d6 and a d12 yielded 12 damage, Jeff fell to the ground. "You hear a shout, and then silence. The absence of the sound of Jeff's booted feet running down the hallway is deafening." Ah, one of my better moments of improvisational storytelling. My wife happened to walk through at this point and snickered. No accounting for taste.

I explained to the guys the rules for death and dying in ICRPG. I said that, to stop someone from bleeding out, you just had to spend an action grabbing their unconscious body and shouting, "Don't die on me, man!" They thought this was great. There's something really funny about deploying parody tropes to people who really have no idea what the trope is. It reminds me of a discussion I had with a friend the other day about the story in Charterstone (which, incidentally, I have not played, but expect I'll pick up at some point). He said that the story draws heavily on established tropes, such that he could see where it was going. However, he was playing with his kids, who are about the same ages as my kids, and to them, there was essentially no such thing as tropes: the story was new to them. I suppose that's partially why I could give my sons a fetch quest and make it exciting.

In any case, the guys had no idea that I had set up a very difficult challenge here with an ulterior motive. Gonff dropped a flare at the end of the hallway and ran back to Jeff, discovering the black tendrils snaking into Jeff's pack, retrieving the Ruby Lens, and consuming it from one of the mysterious wall-mouths. With that, the tendrils were gone, but so was the Lens. The party was reunited and whole, but there was no way to retrieve the Lens and complete their mission. Son #1 was a bit upset at this, but I pointed out that survival was always the first priority.

Tim used his Healing Touch to revive Jeff, but he rolled a 1. I had printed out the Holy Backfire table from ICRPG Core 2e and decided to use that, as a sort of narrative counter to the otherwise hypothetically endless healing available to the party. Tim's failure summoned a fog of fear, and I indicated that this would hasten their peril.

In the great cavern they discovered the rotten remains of some kind of encampment. In the center of the room was a spiral staircase carved into a giant stalagmite, at the top of which—nested in the very limestone—was the Eye. Beyond that, there was a treasure chest and a rift in the ground leading to what sounded like an underground river. Jeff climbed the stairs and began digging at the stalagmite with his conveniently-chosen mining tools. As he begin to chisel away at it, the whole cavern began to shake and tremble, and six skeletons arose, rusty weapons in hand. I set the DM counter to five, though it would have been six had Tim not earlier had a Holy Backfire. Gonff blasted four of the skeletons with a fire bomb, but it was not enough to stop them from arising; he ran up the stairs, Tim close behind.

Now they were stuck: Jeff kept hacking away at the Eye, Son #3 continuing to roll pitifully low on his basic effort. Gonff and Tim tried to keep the skeletons at bay. Being on the stairs, there was only one attacking them per round, but one solid hit was able to take down Gonff. Tim brought him back, but the room continued to quake with more and more intensity. The DM Timer is at two now. With two effort required to free the Eye, and Jeff makes the attempt... rolling a 1! Gonff takes a might swing with the Cloven Sword, and he frees it! They realized there was only one way out: looks like we're gonna have to jump! Tim jumped down, suffering just a few points of damage, but then being attacked by the skeleton closest the bottom of the stairs, bringing him near death. With the DM counter at 1, Jeff took his whole turn to leap down the stalagmite and make a blind jump into the chasm. Gonff had taken another hit and was down to three hit points. He leaped behind Jeff, and took a d6 for falling damage... two! One hit point left, and he scrapes his way into the chasm, falling headfirst into the void. Tim doesn't look back, also hurtling into the blackness.

With a splash, the three heroes land in a rushing underground river. I give them a STR or CON check to see if they can swim to safety. Amazingly, all three make the roll, and their heads emerge from the river back in the valley. By this time, their lungs were aching for air. They made the trip back to the city and delivered the Eye of Clune to the Red Wizard, giving him (or her? or it?) the bad news about the Ruby Lens being taken by a mysterious evil force in the temple. Though disappointed, the Wizard still paid out his reward—though Gonff chose to have the cursed sword taken from him rather than take the 100 coins.

We had a little debriefing at the end of the adventure. All the guys said they had good time, and Son #1 said he'd really like to play Gonff again. This would have been a great time to award Milestones, but we hadn't set any out ahead of time, and I was feeling a bit creatively drained. Son #3 said he liked it, but that he might prefer Stuffed Fables because it is shorter. The duration of the game definitely was a stretch on his ability to sit still, but the structure of the game—with quick turns around the table and a focus on action—helped keep his attention.

One of the things I found most powerful about applying what I learned from ICRPG Core 2e is that this whole adventure was expressed in one sketchy page in my notebook. I only printed out character sheets, the lists of starter loot and adventuring gear, the Holy Backfire table, and the Loot Tables; the rest of the rules and the story easily fit in my head. I suspect we may try to do another session before the summer is out. After all, doesn't Clune have two eyes?

That's the story of our Saturday with ICRPG. I had a great time, and I am still kind of amazed at how we were able to keep all the interactions right on the wire. I hope you enjoyed reading about our adventure and my reflections; I wrote it, in part, so I could come back and enjoy reading it again myself in the future. Hello, from the past!

Friday, July 6, 2018

Summer Course Revisions 2018: Game Programming

This morning, I pushed up the revised course site for my Fall 2018 CS315 Game Programming class. I would like to record here the major changes I made to the course, as I did with describing the revisions to my game design course. Keep in mind that last summer, I made the major change of converting from PlayN to Unreal Engine 4, and I wrote an extensive reflection on the Fall 2017 offering. I believe the revisions have captured most of the ideas from that reflection.

More Small, Structured Projects

Last year, I gave the students one short, structured project, and then we moved fairly quickly into a larger one. Many students felt left behind, and they responded positively to closing the semester with another short, themed assignment. For this year, I have written up specifications for two "mini-projects," each expected to take about two weeks. The first is the same as the one I used last year—an introduction to UE4 Blueprints and physics simulation using a simple cannon. I will follow that with a second mini-project, which will be creating a minimal shoot-'em-up game in classic, top-down arcade fashion. This will introduce the students to issues of input management, more robust state management, and dealing with enemy pawns. I have a third project in mind but not fully articulated on the course site: it will likely involve creating a simple first-person shooter, modifying one of the starter projects. I want to hold off on the articulation of this until I can see how the first two go.

From there, I am not sure if we'll do a small project related to C++ integrations or move right into the final project; if the latter, I can make C++ integrations a requirement for a certain grade. It's something I want everyone to try, at least, to build some understanding of the layered nature of game architectures.

I plan on having a meeting with the class halfway through the semester where we collaboratively develop the criteria for the final project. I expect we will end up with some loose specifications and a menu of potential features to explore, such as AI or multiplayer.

Specifications Grading

The MacGuffins system I used last Fall was too coarse grained. I adopted it in part because it was relatively forgiving to a massive change in the course, but I knew that as I refined the course I would want higher fidelity. This Fall, for at least the mini-projects, I will be using specifications grading. This is a trendy "new" approach; in fact, I used a variation on it years ago in CS222, before the idea had new branding. The details on the first two mini-projects lay out what features or functionality must be present to earn a D, C, B, or A, with the higher levels assuming the lower ones. I am interested to see if students strive for A—with some failing to reach it—or if they pick the grade they want and simply work at that level. 

I have added a project report requirement to the conventional specifications grading approach. Each individual or team needs to state, in their report, which grade they have earned, with what is essentially a checklist of features. I intend this to serve two purposes: the first is to foster metacognition, and the second is to help students catch their mistakes. 

Perforce Helix

My Spring 2018 Game Studio team learned Perforce Helix, which proved much more fit for purpose than Git for UE4 game development. The good folks at Perforce were kind enough to grant us an academic license that allows me to continue using their software for Fall's game programming course. There will be a bit of manual administration on my part, creating all the requisite users and depots, but I think it will be worth the hassle of having integrated asset locking support. Nothing's worse than divergent binary assets.

Simple Achievements

I was tempted to abandon Achievements for this course, in the name of simplicity. However, more than that, I wanted an incentive for students to share independent findings through in-class presentations. Some of the most memorable meetings from last Fall were the student-led tutorials on Blender and on Godot Engine. I decided on a very simple system whereby students can earn a single achievement that counts for 5% of their final grade. That amount was chosen because it allows a student who earns on A on everything else to earn an A in the course. I've only provided three options: attending a games-related conference; participating in a game jam; and giving an in-class presentation. I don't really expect anyone to chose the first, but if they do, I want to reward the effort. The growth of makes participating in a game jam much easier than it used to be.


I've copied over the decorum section of the Game Design course plan over to this one, with some modifications made around the appropriate use of portable electronics. I have traditionally not had the kinds of problems in Game Programming as I wrote about in my Human-Computer Interaction class, but I figure there's no harm in it.


Two years ago, the Faculty Senate (or somebody like them) passed a resolution that requires all course plans to include an official Statement on Diversity, chosen from one of two official options. The primary difference between them is that one includes contact information for the Bias Response Team, and the other does not. This mandate made me uncomfortable at the time, but it has taken some time for me to articulate the root causes.

Here's a good story that I have not told here before. At the end of my HCI course in the Spring, I asked the students to reflect on the most important things they learned during the semester. One of the responses surprised me, in part because it came from a student who had not shared much during the semester; he said that he learned that everyone is biased. That's true, of course, and I asked him how it had come up in the course. He reminded me that I shared my thoughts about this as my reaction to the Statement on Diversity in the very first class. You never know what's going to stick.

The version I chose to include on my course plans is the one that does not encourage students to report to the Bias Response Team:
Ball State University aspires to be a university that attracts and retains a diverse faculty, staff, and student body. We are committed to ensuring that all members of the community are welcome, through valuing the various experiences and worldviews represented at Ball State and among those we serve. We promote a culture of respect and civil discourse as expressed in our Beneficence Pledge and through university resources found at
I asked my chair earlier this Summer to help me find the actual mandate regarding this statement in the university or faculty handbook. Turns out it's a resolution, but it has not been recorded anywhere else. This by itself strikes me as problematic: where is one supposed to go to find the rules one is supposed to follow? Wading through all the minutes of all the Faculty Senate meetings for all of the institution's history.

Procedural matters aside, my email conversation with my chair helped me to better articulate what bothered me about this statement. The short answer is that it is a lie, and I have no tolerance for lies. To be clear, the Beneficence Pledge is pretty good, although it has a few problems. Given that I've never heard any student or faculty member reference it, I don't think it's actually part of university culture, not like honor codes are at some institutions. Also, people who recite it honestly and live by its values are the same people who don't need it in the first place; it's like preaching to the choir.

I decided to include not only the Statement on Diversity but also the fact that I am required to include it. I then ask them to consider three questions:

  • Who speaks for Ball State University and its aspirations?
  • What philosophies espouse mandated statements of aspiration?
  • Is it appropriate to value all worldviews?
I might riff on these a bit in the first week of the semester, or I might leave them for students to consider. I thought about adding a fourth one, "Who benefits from this mandate?" For now, I'm sticking with three. Here are short answers for the interested reader:
  • Not the person being mandated to include this on their course plans, that's for sure.
  • Totalitarianism, at least.
  • Clearly not.
These answers beg another question, "Does the Statement on Diversity do anything to advance diversity?" It might be like the Beneficence Pledge if it simply maintained neutrality, except that in being mandated, it speaks volumes. Maybe it's a good time to bring back my tradition of making my students recite the Bene Gesserit Litany Against Fear.

I may copy these reflection questions over to the Game Design course plan to see if the Honors Students react any differently to it, but I haven't decided yet.

Wrapping up

I'm eager to teach the Game Programming course again with this incremental yet significant revision on last year's plans. I think I can get my students involved in a colleague's research project on specifications grading with very little extra effort. Even though there are some unknowns yet for this course, such as the number of mini-projects and exact nature of the final project, I feel good about having the revisions in place. I think I am in a good position to move on to my third summer course revision, although that's going to require a bit of networking over the next two weeks. Tune in later to see how it all turns out.

As always, thanks for reading, and feel free to share your thoughts in the comments.