Thursday, August 2, 2018

Family Crafting with Gaslands

You may recall that my boys and I played our first game of Gaslands several days ago and really enjoyed it. Inspired by the fun game and the photographs in the rulebook, we were excited to try making our own post-apocalyptic death race cars. We have a few Matchbox and Hot Wheels cars around the house, but these are played with pretty regularly by my younger boys, and so I was hesitant to take those. We stopped at two local thrift stores and found not a car in sight; there must be other players scouring the area. I put out a call on social media for unused cars, but all our ready sources are hundreds of miles away. The boys and I ended up just going to Meijer and buying some new ones. I was disappointed not to find anything to fit the lightweight cars category—buggies or motorcycles with sidecars—and the selection of pickup trucks was very thin. We found enough to get started, brought them home, and then started beating them up with files—an idea I got from Universal Head's car modding tutorial.

I have been painting miniatures for about four and a half years now, but I do almost exclusively board game miniatures. As a result, I don't have much of a bits box, just a very few odds and ends. It seems some of the people who are into the hobby are drawing on existing collections and kit-bashing experience. In my case, a bit of online searching helped me find FunBoardGames on Etsy, who sells 3D-printed accessories that are a good match for Gaslands. I picked up a few items, knowing that the boys would likely go hog-wild, and FunBoardGames was kind enough to throw in an extra bag of bits that the guys could use.

That's enough of the backstory, let's get to the cars. I'll start with mine, and then I'll show you what my boys have worked on as well.


This is Spiky Poles, who is named after a helpful tutorial message in Prince of Persia: Sands of Time that my wife and I have been laughing about for years: Avoid spiky poles. This is advice to live by. The car here was best pickup I could find, and I knew I wanted a turret-mounted heavy machine gun in the back. I ended up cutting up a plastic pipet and using the fluted part. It's a bit flimsy, but I hoped that with the addition of glue and paint that it would hold up.

I decided that I would show solidarity with my boys and, instead of working on the cars in the sanctuary of my office, I would work alongside them at the kitchen table, using their craft paints and ragged brushes. These craft paints behave very differently from my model paints, being very gloopy and hard to thin. They also take unbelievably long to dry. The downside is that painting was very slow, but the positive side was that I could mix a custom color, go have lunch, and come back to find the paints still wet. In fact, before we started painting, I splodged some black onto a newspaper, and after several hours of painting, it was still wet when we cleaned up. The paints' deciding not to dry inspired me to do some wet-blending, so I put flames on the hood of this truck. Then I looked over the rest of it and thought, "Should I add more flames?" I laughed, because of course there should be more flames. I mixed a black and sepia ink wash to pinwash the recesses. For weathering, I mixed some rust colors as I did for Stuffed Fables, stippled a light brown on the lower portions of the car for dirt, and used a sponge to stipple gunmetal onto some raised areas to give the illusion of chipped paint. I also mixed up black and brown ink with some matte medium and used this as a rough wash around the lower parts of the gun.

As usual, I used hot glue to affix the models to corks for ease of painting. What I didn't expect was how tightly the glue adhered to the underside of the cars. I accidentally broke the machine gun off its turret while futzing with the glue. Look again at the pictures and you can see the plastic turret showing through. I will touch it up later, but I leave it here as a reminder to myself to be more careful about such things in the future.


This is Guy Smiley, a little hatchback I found that, from the moment I saw it, I could picture a giant minigun mounted onto the luggage rack. I started with the red-orange color without much of a plan. The piece along the bottom was a different color in the original car, and I decided to do something bold and go with purple. This looked OK but still felt like it was missing something. Out of nowhere, the idea of zebra stripes came into my head, so I started freehanding the stripes along the purple parts of the car. Now I was getting somewhere. Just having stripes on the bottom didn't seem right, though, so I painted the lines along the front and along the doors and back, along with a "V" shape on the front. The sides still looked too plain, but now I was getting into a useful creative mode: I could start to picture a half-mad gearhead detailing his precious minigun hatchback. I added "Get Out!" to the driver's side and "Die" on the passenger side, and this made me think of a maniacal face with a grin that exceeds its head. About twenty years ago, a friend of mine made me a mix tape when I was feeling down, and she drew this funny little guys with smiles twice the size of their heads, and that has always struck me as a wonderful mix of cheerful and creepy. I replaced the hood's "V" with something more thematic, made the back look more like a creepy face, and added another smiley guy to the side. Nice. The lining and weathering on this car was done as with Spiky Poles.


Turns out that #1 Son and I had similar ideas for our teams. This is his car with a front-facing minigun, although he chose to side-mount it rather than top-mount. He is 11, and he has correspondingly more patience than his younger siblings. I think he did a fine job on this car. I mixed up a black-and-brown ink wash for him, which he decided to put over the whole thing, which gave it real dingy look. I suggested he go back and add highlights, but he decided he liked it the way it was.

When I realized I could put some inspirational writing on the side of Guy Smiley, I asked aloud, "What should I write on the side of this car?" #1 Son answered, "Loser." Perfect, I thought! Then he admitted that it's what he had been thinking of writing on his. Well, I couldn't use that any more, but I think he did a good job with it. It's a little hard to see, both because of the wash and the angle of the picture, but he actually wrote it in two colors on the passenger side. The two colors looks great, and I thought about copying that for Guy Smiley, but I decided to stick with the single detail color to keep a simpler color scheme.


Here is #1 Son's truck-with-ram-and-turret-mounted-machine-gun, which again was developed totally independent of my own. As we were planning out our colors, he referenced a color wheel and decided intentionally to take complementary colors for high contrast. This kid, he'll turn into something. The base of his turret is another piece of that pipet that I cut up.

Looking over his cars now, I wonder if he would have enjoyed adding some weathering. I did my dirt and chip effects after the guys had gone to bed. Next time, I'll show him more about how I did that, in case he wants to try it himself.



#2 Son is eight and worked on these two cars. We developed his team before acquiring cars, and the team includes a buggy and a car. Unfortunately, we found nothing like a buggy, and he really wanted to use this humvee as a "car" and not a "truck". It gives a little bit of dissonance in the game, and a few times we forgot that the jeep was a different weight for purposes of smash attacks. That's just part of playing with younger guys I think, though. I think he did a pretty good job here. We used an ink wash to got into the recesses, and a bit to my surprise, he took some time to go back and add some highlights to a few areas. He was inspired by the lettering on our vehicles, and so he wrote "race" on the hood of the jeep. (And yes, that jeep has a side-mounted machine gun.)

I remember when I was a little boy, I had an orange muscle car, and I painted a confederate battle flag on the top of it to make it into the General Lee. I can picture it in my mind's eye. I knew it was not a perfectly rendered flag, and yet I was so proud of it, because it was the General Lee. It was almost like an icon or a signifier rather than the thing itself. I have not asked my younger boys about any of their artistic decisions, about if elements are supposed to be something else I don't recognize, or if the chaos of the brush and the paint is enough.


There is a sense in which this is the coolest of the cars. #3 Son is five years old and, for as long as he can remember, has loved to wave to the garbage man. Turns out, we have a very cool garbage man, who will always honk the horn and will regularly come out and talk to the boys. This morning, in fact, he got out of his truck and joined them in drawing with sidewalk chalk for a minute or two. Many months ago, he gave the boys little Muncie Sanitary District trucks. When I explained to the younger two boys that they could each pick a car from their collection to mod, #3 Son went right to his trusty garbage truck.

I dumped out the bags of weapons, and he picked out a 120mm gun and two machine guns for the top, a ram, and two more machine guns for the sides. The way he wanted them all attached was tricky to do all at once, but I was able to get the guns you see here attached in between helping the other boys. He ended up being content with this set of weapons and went on to paint it.

The truck started out in bright and bold colors, but keep in mind that these craft paints just won't dry. As he added more colors, especially as he started adding some black, everything ran together into kind of a mess of brown. I encouraged him to let it dry, then come back and "highlight" it. He was unsure at first, but he came back and added more bright colors on top of the muddy browns, and now it has a lot more life. Along the way, I also talked to him about ensuring that he painted into all the recesses so that we could add a wash to bring out some of the details. He was over the moon at this idea, and he did well for a five-year-old. He even added another layer of highlights after the wash.


The Youngest Son is only three, but of course he wanted in on the action. He picked some kind of emergency vehicle and was content to put the largest possible gun on top of it. You can't go wrong with being three, having trucks, paints, and giant guns, and sitting with your dad and brothers at the crafting table.

The two younger boys are too young for Gaslands, and in fact, the game may be a bit too long for #2 Son as well, who is at the edge of the recommended age listed on Board Game Geek. However, I also recently bought the rulebook for JUNK'D, a simpler yet similarly-themed game that is designed to support modded cars. We played a whole-family game using the Print-and-Play components on Tuesday, and the little guys did OK with a bit of coaching.

Yesterday, the two older boys and I got our cars to the table for our first Gaslands death race.

Here they are, lined up at the starting position on the dining room table. I won the roll for pole position, and so Guy Smiley was lined up in position to shoot straight through a sort of obstacle funnel that we had on the table.
Despite the poor quality of the photo, you can see the chaos after the first full round. Guy Smiley has already made it through the first gate, while most everyone else is jammed up. A lot of those cars have rams, so there was a lot of "take that!" which worked to the advantage of Guy Smiley. He took a few shots from #1 Son's cars, but he was able to turn the corner and hit high gear to escape to victory. We had a lot of fun, and the boys are eager to play again.

The boys and I had picked up a few extra cars, and I think they're excited to build more teams and mod more cars. With my Meaningful Play paper accepted, a grant proposal submitted, and my three Fall courses revised and in place, I'll be looking forward to more crafting and racing.

Thanks for reading!

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 itch.io makes participating in a game jam much easier than it used to be.

Decorum

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.

Diversity

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 http://cms.bsu.edu/campuslife/multiculturalcenter.
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.

Saturday, June 30, 2018

Painting Myth: Dark Frontier

I was happy to back the Kickstarter campaign for Myth: Dark Frontier, a cooperative city-defense game set in the Myth universe. One of the reasons I backed the project was that it came with the alternate-gender versions of the characters from Myth, which I painted two years ago or so. Dark Frontiers comes with cardboard tokens for enemies, but if you have the Myth miniatures for these, you can use them as well. This was a clever way to keep production costs down while also giving extra mileage to those fans of the series who already invested time and money.
The game itself has a fun and interesting core mechanism. Each player chooses three actions from a handful of action cards: battle, quest, travel, fortify, and encounter. The players place each into one of three stacks for morning, day, and evening, and a random enemy action is shuffled into each as well. The actions are then played out in sequence. While each player has the same actions available, each one plays out slightly differently in terms of how they affect the board and shared resources. Much of the dynamics of the gameplay then involve planning with your fellows around who is best to handle which threat—and there's always a lot of threat to manage. It might be a bit long for what it is, and there's lots of story text on the cards that is easily skipped over. We have enjoyed our handful of plays with it, though, and I'll be happy to get it back out with the depicted characters now painted; we had been using the gender-swapped characters, which was fine, but there's something rewarding about having your miniature match the card art. (Well, I think so, anyway, which is one of the reasons I paint at all!)

One other preface before I get into the heroes themselves. I'm still getting used to my airbrush, and I'm feeling confident with zenithal priming for sure. In fact, I look forward to trying Ghool's speed-painting approach, maybe even on some Massive Darkness roaming monsters. Of course, his idea of "speed" is not the same as mine: he's spending 15 hours on a miniature, and I'm spending around three. I wanted to use a similar basing technique to my original Myth painted figures, but I figured I could save some time by priming the figure after basing. Turns out, this was a bad idea:

As the primer dried, it pulled up the white glue that was holding down the grit. The Brigand shown above was the worst offender. I was able to remedy the problem by hitting the edges with matte medium, and the worst spots were simply covered with flock later. My simple approach of laying down white glue followed by grit is quick and easy, although I have been thinking about trying a superglue and baking soda approach as described by Atom Smasher. It certainly looks nice, and I like the idea that the base tells a story; also, the superglue would certainly hold up against the draw of the drying primer. Still, for the kinds of painting I tend to do, maybe that much attention to detail on the bases is overkill. My Temple of Elemental Evil set is the one where I spent the most time on basing, but these have been sitting in a box for some time now.

Enough background. On to the heroes!




The first figure is the Swordsworn hero, who is the one that is not an alt-gender from Myth. Unfortunately, this figure had the same kind of casting problems as the two extra ships from the same publisher's Emergence Event: surfaces pocked with little bubbles. It looked like the same kind of plastic too, perhaps the same (presumably sub-standard but cheap) manufacturer. I filled the worst offenders, and after painting, it does not stand out to the naked eye. You can see it in the photos in his lower back, which is the worst.

In terms of style, I used a two-brush approach for almost everything, thinning paint with a bit of water and using a second brush to feather the edges. The Swordsworn here is pretty straightforward, and I think I did a fair job with the shadows and highlights on his skin and pants. He has some color in his face in the card art, so I did add a little red glaze to his cheeks, which added a little bit of color variation that was needed. I could have gone farther with colored glazes in the recesses, for example, but the truth is that it's hard to know how many times these guys will get to the table. I am happy with just a good tabletop quality here.


This is the acolyte, who has the most interesting pose of the lot. The artist really likes his characters to have heroic stances, feet as far as possible apart. I think here it really sells the idea that she is tough and swinging that staff around. Looking at it now, I could have added more shadows to her hair.

One of my pet peeves is when fantasy games draw upon Christian (or, generally, Earth culture) symbolism in inauthentic ways. You see this in video games all the time, where the inevitable undead-filled graveyards are filled with crosses, and yet there is no Christianity. The apprentice here has a cross dominating her outfit. However, Myth also includes "priests" who wear black shirt and pants and clerical collars. I've never seen that in a fantasy world before, but I don't remember ever seeing any explicit reference to Christianity in the fiction—not that I've read much. It leaves me curious whether this is an intentional inclusion of Christian symbolism or an accidental cultural appropriation.


Archers are one of my son's favorite types of characters, and this is a pretty good one. He has that classic miniature problem that the arrow is much to large at scale, but it's still a pretty good sculpt—legs wide apart in true Myth fashion, of course.

When I set him up next to his feminine counterpart, I was reminded that I put a little static grass on her base just because otherwise it looked pretty plain. Maybe I will do the same to this guy. The rest of the flock is a mix of turf and black and green tea.


The Apprentice's primary magic power is that she can stand on one leg without her center of mass over it. Amazing! Maybe I should have tried harder to straighten her up. Oh well. I do like the figure, with its dynamic pose. Her palette is interesting too, and I think I captured it well in the painting. She's another case of extreme backlighting, and one might argue with the interpretation. Still, I like the deep skin tones and brown-purple hair. Her counterpart is as red as a cooked lobster, after all.


The soldier seems to be some kind of lady badger. I've never really seen the appeal of anthropomorphic animals in fantasy settings. People are interesting enough. Still, their IP, their world, I'll just paint her up to match. She was fairly quick to paint due to her being mostly fur. Once again, I think this is a great pose, and it has that characteristic Myth wide stance.


The last one is the brigand. Wide stance: check. Here's something I really like about this figure: this is the female brigand. Such a sculpt would never pass muster at CMON.

There they are, all together: the heroes from Myth: Dark Frontier.

And there they are with their alternate-gender counterparts, those who have them. (Not pictured are the Tinkerers, of which I already had a male and female set, and the Swordsworn, who only comes in male, as far as I know.)

While Myth: Dark Frontier was successfully Kickstarted, I get the impression it didn't do as well as the publishers wanted. I know Megacon Games has been having some business challenges for some time now, and they said that this game will likely never see retail. That's a shame, since it is an interesting design. If you want to check it out, you'll have to track down one of the lucky few who have a copy.

Incidentally, the centerpiece of Dark Frontier is a modular city miniature. It comes in several pieces that are removed as the city is damaged. If the city is destroyed, you lose the game. This is kind of fun but a little fiddly. Fortunately, my son seems to have invested the time in remembering how it goes together; all that origami training paying off in spatial reasoning skills, perhaps. I do not have any plans to paint the city at this time.

And finally, my notes to myself about the photographs. I took two sets on white backgrounds, trying to reproduce the style I had in my last post, but the white balance was off in both sets. These ones were taken on a black felt background using OpenCamera, ISO 50, and just ever-so-slightly increasing the shutter speed.

Thanks for reading! As always, feel free to leave a comment.

Wednesday, June 27, 2018

Noise comments in Android Studio with Flutter

Flutter sounds neat, doesn't it? I decided to take a look yesterday, and it distracted me quite a bit from my course revision work. With my course revision and reflective blog post done, I decided to get into the Flutter codelab and see what I could do.

Step one is basically to copy and paste this code into Android Studio:
OK, copy, paste, and I get this abomination:
What the...?!

Those end-of-line comments are clearly not in the code. I do not want them. They are concretely, undeniably, irrevocably bad.

My first thought was, "I need to get Android Studio not to add those comments when I paste in code." I tried Googling for variations on this, but to no avail. Maybe I was calling it the wrong thing? I searched the preferences in Android Studio but couldn't find a good match either. Not wanting to waste more time, I decided I'd just go in and manually eliminate them for now.

I cannot.

They are not actually content in the editor! Those characters are not in the file. The view of the file is showing me data that do not exist. OK, stop and think about that, think about that for a long time if you have to. If you added this feature to Android Studio in particular, think about this for a long, long, long time. This is the worst idea.

But it's not the first time I've seen it. A few versions ago, IntelliJ IDEA added a "feature" in which it would show formal parameter names at the site of the actual parameter. It looks like this:

The text "bar:" is what they call a "parameter hint." It is not selectable or erasable. It's not really there in the data—once again, the view of the file is showing something that's not in the file. When I first saw this, I was aghast, and I could feel it in my bones that bad things were coming. I make all my students turn this abomination of a feature off.

Now, we see that my intuition was right. It's getting worse. Now, the view of my Dart source code file isn't just showing data that's not there: it's rendering that data as if it were. It's not using a different font or size, as in the parameter hints.

The good news is that this helped me consider where I might turn this off, and sharing this knowledge is the primary reason for this post. If you understand a modicum of what it means to write clean and maintainable code, then go to the File Menu, open the Settings dialog, and go to the Appearance section (with the Flutter Plug-in enabled, of course).


There it is. Untick that box and accept the changes, and your source code editor will be purified.

You're welcome.