Friday, October 30, 2020

Preliminary plans for NaGaDeMon 2020

I have enjoyed participating in National Game Design Month (NaGaDeMon) for the last two years. Last year, I made KAPOW! The Campy Superhero Roleplaying Game, and two years ago, Heroic Uncertainty. For this year, I have had two ideas tickling the back of my mind. The other day, when I was in a conversation about them, I actually forgot what one of them was. That's a good indication that it's time to write them down! This has been a great month for blogging, and I have this afternoon set aside for thinking and writing. Even though I just finished a post about something completely unrelated (or is it?), there's no time like the present.

Idea #1: Character-Interaction Generation

This has been at the back of my mind for some time, but it's pretty amorphous. The inspiration is a somewhat formalist approach to the relationship between characters in a world, simulating the changes in their relationships over time. For example, given a tableau of six characters, and drawing a "secret enmity" card, you could roll a die to determine who is secretly plotting against whom. Perhaps later, though, a "false rumor" card comes up and targets the "secret enmity" card, changing the table again. Now, maybe there are no cards and maybe there are no dice, but that's the basic idea of the setting, although my idea was that the players would actually be doing a different game for or with those characters. For example, maybe players are striving to earn the favor of one character who may become king of the popes, but their actions are interpreted differently based on the political, interpersonal state.

That's a bit vague, I know, and it also hints at suffering from the same problem as Heroic Uncertainty, where the thing I want to play with is a secondary system rather than a central system. However, something that brought this idea to mind was reading about A War of Whispers, a game in which the players are manipulating resources on a map, but that's actually secondary to their victory condition, which is ensuring they are backing the right political power. That's very much in the spirit of what I was considering, and in fact, I backed the recent Dark Alliance expansion Kickstarter. My copy of the game will be here sometime, though definitely not with enough time to study it as an inspiration before the beginning of November.

Again, a lot of uncertainty here, maybe even a heroic level. It's not clear in my mind even if it would be tabletop or digital, so that means it would have to be tabletop. See, writing is epistemic.

Idea #2: Roguelike

I came across Bob Nystrom's talk about ECS at Roguelike Celebration 2018 through, I think, YouTube's recommendation system. Nystrom is the author of the wonderful Game Programming Patterns, a book which I've said before I wish I had written. I have done some research and development around Entity Component Systems as well, and I've long said that Nethack is one of the greatest games ever made, so I loved hearing his talk on ECS in Roguelikes. In fact, I just put it back in my watch later queue to listen to it again. His talk got me thinking about making my own roguelike, which is a genre I have never explored. I have been recommending Kenney's excellent public domain artwork to my game programming students, and I know that he has a few different asset packs for 2D roguelikes

I don't have any particular ideas for innovating in this space. I think if I went this way, I would just take inspiration from the art that is available and use it as an excuse to work with some of the classic dungeon generation algorithms and data structures. Heck, maybe I could even dust off my knowledge of ECS to flex those muscles, although deploying ECS was much easier when I was using PlayN than in GDScript or UE4.


That's it, my second blog post for the day, and a place to come back to if I find once again that I have forgotten my own thoughts. Feel free to leave a comment if you have a suggestion or preference. I expect that on Sunday, I'll be able to do a more focused cost-benefit analysis and choose a direction to start working on NaGaDeMon.

On Philosophy in Computer Science

Recent events have given me the opportunity to spend some time with a colleague at the university from another department. He told me how, many years ago, he met a developer who told him about Linux, and it was the first time he realized that Computer Science involved philosophy. Really, how else would someone from outside the discipline know? 

The discussions involved making a distinction between two ways of looking at Computer Science. I identified myself as being in the "human-centric" camp, and a respected colleague identified himself as being in a "math-centric" camp. I believe that the distinction I made was between human-centric and technical- or formalist-centric. Interestingly, when he later recounted the distinction, he described me as "anti-math" and him as "math". That, itself, demonstrates an interesting sort of Manichean reasoning seen from his philosophy: that either you're for math or against it. I responded that I was not anti-math, but human-centric, and that one can do math in a human-centric way. This was a sort of distraction from the main purpose of our meeting, and predictably, the conversation did not go anywhere except to clearly establish that there are different ways of looking at the discipline.

As I have thought more about this, I think there's a clearer way to make a distinction between these philosophies. One of them sees mathematical formalisms as an ends in themselves: the math is beautiful, and you should study it and admire its beauty. Another perspective is to look at them as a means to an end: the math is a tool that allows us to do things we could not do without it. These have very different implications for curriculum design, which in large part is the most important thing that CS computer science departments have to do collectively.

It is import to note that most of the formalists that I know will also claim that the mathematical formalisms empower you: they are not just beautiful, but also useful. Indeed, the inciting incident of the conversation was a claim that studying algorithms helps you write more efficient, more effective, and more correct programs. This claim is ubiquitous in discussions of academic computer science, and yet I have never seen any evidence for it. Indeed, the educational theory that I know suggests that it is not true. Transfer is hard and is never free, so to suggest that studying one thing makes you magically better at a different thing is specious at best. Studying algorithms makes you better at algorithms, but if your goal is to get someone to be an efficient, effective, and correct programmer, you're much better off teaching them Test-Driven Development, Pair Programming, intellectual humility, and a love of lifetime learning. When I took this issue to Facebook, one of my alumni put it best: the most likely case is that there is a correlation between being a good programmer and being good at algorithms because both are difficult and can serve as a measure of intelligence and conscientiousness. That is, correlation is not causation. 

This is crucial when deciding, for example, where to place discrete mathematics, algorithms, and computational theory in a curriculum. I know many math-trained computer science faculty who claim that you cannot understand data structures unless you study discrete math first, but that claim is easily refuted by counterexample: we have plenty of students who drop and retake discrete math and yet have no problems with CS2. To steelman the opposition for a moment, it could be that the problem is that our courses do not draw enough upon their prerequisites, and indeed, I think that's a good point. We—collectively, as a discipline—have not distinguished clearly between what exactly we want students to know coming out of a three or four credit-hour discrete math course and how exactly it manifests in the follow-up courses. We are locked into a "course" model of higher education, where ideas come in neat, delineated packages, taught by people who focus on those areas or, in some cases, focus on no areas. A lot of faculty get uncomfortable at the very mention of shaking this up.

A few years ago, when our Foundations Curriculum Committee tried to look into the question of what elements of discrete math were needed for courses that listed it as a prerequisite, the answers we got were completely inactionable, being either "They need all of it" or "They don't need any of it." Indeed, I have led that committee for something like twelve years, and we have been constantly fighting against problems of how to improve the discrete math and algorithms courses, in large part because the people who teach those courses see nothing wrong with them.

The old joke goes like this: ask five computer scientists to explain computer science and you get seven different answers. I would like to know if other academic departments have this kind of culture war. Are mathematics departments hobbled by differences about whether math is a means or an end? How about physics? Biology? What about non-science fields such as Architecture, which I think some of us see as closer kin than mathematics.

I make the case when I teach CS222 that Computer Science is applied philosophy. While anybody can use computers, we are in the amazing position to be able to imagine worlds and then make them real. This is what drew me to the field. To be clear, I loved my Computational Theory course in grad school, but at the same time, I'm a melancholic introvert who loves ideas. I also loved reading The Design of Everyday Things, and I think it helped me much more in my day-to-day scholarly work than Godel, Escher, Bach

I think it would be interesting to try to measure the distribution of different philosophies among Computer Science faculty. It would be a challenge to develop a reliable and valid instrument for measuring such a thing. I know people at big schools and at small schools, and I'm not sure that the distribution of philosophies would be that different. I suspect you would find a greater concentration of human-centric computing at schools with a longer tradition of HCI research, and at places like Georgia Tech, where the media computing approach was born. That is, I suspect a human-centric approach to computing may be able to be grown.

Naturally, we need productive disagreements, but I think my field is hamstrung by a preponderance of activity on the formalist side. I have been on many search committees now, so I have some sense of what freshly-minted PhDs look like—or at least the ones who apply here. Most tend to have gentle words about student-centered teaching, but it is less common to find those whose scholarship is integrated. Of course, I don't think my work was integrated with my scholarly self either when I was fresh out of graduate school. But, if we continue to reward isolation and scientism, we will miss out on the opportunity to help scholars develop a real philosophy. I consider myself fortunate to have ended up, whether by chance or by grace, at a place that valued my interests in exploring a Boyer-inspired view of scholarship. Indeed, sometimes I wonder where I would be today if I had not taken the time to read Boyer and Glassick around 2007-2008.

How does this relate to Linux? Understanding the Free Software movement requires an integration of technical and non-technical aspects of computer science, in alignment with an understanding of economics and ethics. There's a lot of room under this umbrella, and it's not just applied math.

Thursday, October 29, 2020

Thoughts on Customization and Replayability in Legacy Board Games

My family and I had an interesting conversation at lunch the other day, comparing the relative merits of various legacy board games we have played. The particular games we compared were:

  • Machi Koro Legacy, which was recently completed by me and my elder three sons
  • Clank! Legacy, which was completed earlier this year by me, my wife, and my elder two sons
  • Charterstone, which was completed about 1.5 years ago by me, my wife, and my elder two sons
The conversation started with a discussion of Machi Koro Legacy and my surprise at how it was only minimally customizable. While there are some decisions you make during the game that stay throughout the campaign, there's not the kind of customization you get from the other two games, by naming cards or taking different branching paths, for example. We compared it to Charterstone, which had the most customization of any of these games. Playing it together is honestly one of my favorite gaming memories. However, we feel no desire to pull it out and play it again. The times we've tried that, it felt like the decisions were already made, and nobody wanted to play in a haphazard starting region. By contrast, Clank! Legacy involved enjoyable customization of cards and the board, with names that evoke memories of the campaign, and yet it still feels like just a good game to play. My starting deck is a bit different than my son's, but it feels quite different from the starting conditions in Charterstone.

Putting this in a visual form, we get something like this:
The hypothesis we formed was that we would be more interested in replaying legacy games that sit in the middle of the customization spectrum. Three data points is hardly enough to draw grand conclusions, but I did think about how Gloomhaven would fit into this. It has a kingdom's worth of customization, but after my son and I finished what we perceived as the "main" storyline, and we had no more hooks to draw us forward, we lost most of our interest in playing any more. There are a few character classes we did not unlock, but it wasn't clear that any of the locations we had unlocked were going to advance us in any interesting direction. Our campaign just sputtered and stopped. 

To be clear, we were only talking about desire to replay post-campaign. We enjoyed all of these games while playing them, and I have no regrets about any. Also, desire to replay should not be conflated with replayability: all of them are replayable, but the only one that comes back to the table periodically is Clank! Legacy.

Thursday, October 15, 2020

Wrapping up OpenMind in HCI

My HCI students wrapped up their experience with The OpenMind Platform this week. Back in September, I wrote a bit about how it was going. Since then, they completed modules three through five. I gave them reflective activities after each of the first four modules, tying the module to the week's activities:

OpenMindCourse Topic
Irrational MindGoal-Directed Design
Moral MatrixCultural Constraints
Intellectual HumilityErrors
Value of Diverse PerspectivesHeuristic Evaluation
Constructive Disagreement

For the final module, rather than tie it into the week's topic of accessibility, I asked them to reflect on the OpenMind experience writ large and relate it to their study of human-computer interaction. This reflection was submitted confidentially to me rather than as a discussion board post, where practically everything else has lived this semester. I wanted to ensure that I was getting as honest feedback as I could expect from them.

The results were overwhelmingly positive. Everyone said it was useful to their studies, and most agreed that its impact reached well beyond the course. The most commonly cited portions of the program were the importance of a growth mindset—particularly in the face of receiving feedback on designs—and the elephant-and-rider metaphor. One student adroitly recognized the connection between OpenMind's themes and the Norman's themes in The Design of Everyday Things. Another pointed out how his background in social science made him skeptical of the program, but that going through, he found nothing questionable nor overreaching about it. One of the more curious but interesting responses was a student who said he wasn't sure that he got anything out of it, yet he enjoyed the exercise of tying a module's ideas to the week's topics.

One student argued that we didn't go far enough with the ideas brought up in OpenMind, that they have deeper connection to HCI than we gave them credit. He pointed out that OpenMind prepares you for meaningful interaction with different others, but that we stayed in conversation with the same classmates all semester. This is quite an observation, and I'm proud of this student for pushing in this direction. I had two themes in my response to him. One is the easy one, that the global pandemic complicates a lot of things, but I could certainly consider rearranging other parts of the course to make room for such activities in the future. The other is that I retain a fear of tokenization. Disability is diverse just like everything else, but the observation leaves me a stake in the ground to consider for future offerings of the course. Also, he may not yet have looked ahead at the just-published final project specification, which does actually require interviewing people as part of the empathy-building process, although not necessarily along lines of disability.

Overall, then, I call the integration of OpenMind an unqualified success. All those who mentioned course integration lauded it and encouraged continuing it. One suggested that it would be even more valuable if given in high school, to counteract the tribalism that arises there. This leans into my continuing consideration of OpenMind in my teaching: would it be valuable to roll this out in my CS222 class next semester? I need to give it serious consideration once I have a chance to start planning that course. (I am still waiting final word on the room and meeting arrangements, which is of crucial importance to planning, of course.)

My main criticism of OpenMind from a teaching point of view is that it's very difficult for me, as an educator, to get in and browse the material. I went through it myself, but memory is imperfect. They provide a dashboard of sorts for teachers who assign the program, but I had no use of this: I wanted to be able to browse or even dump out the contents of each module so that I could review it and mention specific parts in my feedback videos. I understand that they don't want people accessing the material outside of their platform, for research and analytics purposes, but it would still be quite valuable to me. I would rather not go through it again myself each time I am planning a course and trying to remember the details of how a student interacts with it.

Tuesday, October 13, 2020

On Robert E. Howard's Conan

Even though I rarely play tabletop RPGs, I regularly listen to a few tabletop RPG channels on YouTube.  They are fun to listen to while painting, and I enjoy the design discussion even if am not currently deploying that knowledge anywhere in particular. In independent discussions about how to narrate combat effectively, both Professor DungeonMaster and Hankerin Ferinale (a.k.a. Brandish Gilhelm, a.k.a. Runehammer) made the same recommendation: read Robert E. Howard's original Conan stories. 

I have been aware of Conan as a cultural staple, as any child of the 80s should, but I had never read the source material. I have seen both Schwarzenegger movies, played the C64 game, and have vague memories of a single black-and-white Conan comic book that my brother and I somehow obtained. I probably wouldn't recognize it if I saw it, although I remember being jarred by the fact that the comic book character was clearly different from the one in the movies: more rogue than brute, but more on that later. I also recall spending time with my father's copy of Tomorrow and Beyond, a 1978 collection of science fiction and fantasy art that included plenty of Boris Vallejo barbarians.

I was intrigued by Professor DungeonMaster's and Runehammer's recommendations, but the one who really got me thinking was The Bard. Like many people, I became aware of him when he explained to the world the best thing about HeroQuest. I found myself intrigued by his style and watched more of his videos, and one does not have to go far down that path to understand that he is a vocal fan of the barbarian archetype and the Sword and Sorcery genre. He revels in Conan in particular, telling of how he saw Conan the Destroyer as a lad and became hooked on the character. What continues to astonish me about The Bard is his impeccable dance between thoughtful and goofball. His humor is razor sharp, and his insights seem authentic despite being presented in a ridiculous wrapper. I think I'm a bit jealous.

The Bard's analysis of his deluxe Conan statue is interesting for its discussion of the character and its presentation, but it is in his analysis of the Red Sonja statue that I found the most compelling arguments for the merit of Sword and Sorcery. At 2:52, he explains the role of the body in the genre: "It is time for the most important part of any Sword and Sorcery hero: the body. Especially visually, and in terms of character because it is of course the locus and the focal point of survival, of sex, and of course, violence." Later, at 8:07, comparing Red Sonja to Conan, "Both of these statues are violent images, and they should be! Violence is almost inevitably at the very core of sword and sorcery, encompassing the hero's capacity to bodily impose order on a world of chaos, to survive and even thrive through the physical articulation of his or her very own will." Finally, near the end at 19:34, he underlines his theme: "The idea of the life and death struggle, the exhilaration of battle, and victory in the triumphal validation of life is the very thesis of sword and sorcery."

Nowhere in the video does he mention what first struck me, which is that Red Sonja is rather cheesecake. If she didn't invent the chainmail bikini, then she at least popularized it. While watching The Bard's presentation, I could hear the echo of a thousand masters theses on objectification of women in fantasy. Yet, the Bard's only comment about the sexually provocative nature of Sonja's attire is his comment quoted above: that sex is centered in the body, and the body is the theme of Sword & Sorcery. I find myself wanting to hear his rebuttal to the easy objection to taking Conan or Red Sonja seriously, that they are naught but pulp adolescent fantasies. Perhaps he does address this in the thesis he mentions within some of his videos, but as far as I know, he has never released it, let alone his name and the institution where it was completed.

Based on the advice of three of my YouTube heroes, then, I embarked on my own armchair adventure: I read every Robert E. Howard Conan story that I could find at my university library. Most of these came from a 1977 collection published by Berkley Publishing Corporation and edited by Karl Edward Wagner. They seem to be the same stories collected in 1998's The Essential Conan. The remaining stories, and the first two I read, came from the 1975 collection, The Tower of the Elephant

These are the stories that I have read, in the order I read them:

  • The Tower of the Elephant
  • The God in the Bowl
  • The Devil in Iron
  • The People of the Black Circle
  • A Witch Shall Be Born
  • Jewels of Gwahlur
  • Beyond the Black River
  • Shadows in Zamboula
  • Red Nails
  • The Hour of the Dragon
They are all short stories except for the last, The Hour of the Dragon being Howard's only novel-length story about Conan. I was honestly surprised at how much I enjoyed them. It wasn't like reading the Flannery O'Conner collection I just finished, where the stories would knock me out of my chair with their turns of phrase and nigh-unrecognizable moments of grace. This was more like watching Dr. Strange: silly fun that you can't take too seriously. You always know that Conan is going to make it out of this pickle, but you don't always know quite how.

As Professor DungeonMaster and Runehammer promised, the narration of action is remarkable. Howard's descriptions of Conan's presence in battle are legendary and, although themes repeat across stories, they never get dull. That said, it felt like rollicking good fun rather than the kind of prose that inspired me to take notes. Perhaps it is the kind of exercise that would require me to film myself narrating combat to determine where I need to punch it up. 

I think the most interesting part of Howard's narration of combat comes in comparing it to the structure of battles in Dungeons & Dragons and also to the depiction of combat in contemporary action movies. In Howard's stories, battles are brief and bloody. He only hints at the details of anything longer than a few seconds of conflict, such as when Conan is with his army, wading through enemy hosts. Otherwise, the action is pointed, unambiguous, and lethal. By contrast, tabletop RPGs that draw upon the Dungeons & Dragons lineage tend to have slow, plodding, transactional battles: I swing, I miss, you swing, you hit, etc. It's a bit like teaching online asynchronous courses. Interestingly, other tabletop RPG systems such as Fate grant a lot more freedom both to players and gamesmasters in choosing the granularity of battle. I recently watched Dr. Strange, which I enjoyed but is a case study in overlong battle sequences. Ever since the last legitimate Star Wars movie it seems, movie battles have become more and more inspired by the thousand-cuts model of Kung Fu action rather than the decisive stroke of a barbarian. My point is not that one is better than the other, but I was more bored watching Dr. Strange run from bad guys than I ever was reading about Conan's chopping a serpent in two. Like so many things, it's a design decision, and I think I would rather narrate the latter than the former.

Conan's prowess and physique are universally unmatched. He is always an outsider, even as a leader: other characters, representing civilized society, frequently remark how they can neither understand nor contain him. He is more like a force of nature than a rational being, and this is reflected in his acting without thinking. Put another way, despite his being the most capable physical being in the world, he is also completely controlled by his body. His panther-like reactions—always panther, every story, like his frequently-described "square-cut black mane"—will save him from today's serpent, but it will also propel him out of a window to chase an adventure or a woman where a civilized man might consider his options.

One cannot ignore the racial framing of the stories. Howard's world does seem to be one in which one's character and abilities are determined primarily by race. It makes me wonder why the Cimmerians did not simply take over the whole continent, but I suppose if their actions are determined by their bodies, then their bodies are happy in Cimmeria. Howard's beautiful women are always pale, and the dark-skinned characters are almost all savages or cannibals. Knowing that Howard's Hyborean Age is essentially a prehistoric Europe left me curious about why the skin tones and complexions of wide swaths of people are left undescribed. The people of Koth (Italy, Greece) are selfish, untrustworthy thieves, while the people of Aquilonia (France) are noble and honorable. It's a strange combination of European stereotypes of culture and American stereotypes of race. Taken as a whole, though, it's almost forgettable, as the setting of the world rarely has much to do with the stories anyway. In contrast to Tolkien, for whom the world is as much a character as any Dúnedain, Howard's characters are nearly all single-dimensional figures, only interesting in how they are pressed against the world rather than how they interact with it.

This, and my passing familiarity with Boris Vallejo's barbarians, led to my pleasant surprise to find that not every woman in the story was mere arm candy. While Howard does spend some time describing their physical beauty, and some just incomprehensibly refuse to get dressed, it's not clear that he gives that any more attention than describing Conan's own muscularity. In "The People of the Black Circle," there is an interesting arc for Devi Yasmina, who begins as a vengeful queen, becomes enraptured in Conan's story and presence—Conan who is likewise smitten by her beauty—and then defines her independence by imposing her will on him. By the end, the two are essentially peers. "Red Nails" is frequently told from the perspective of Valeria, who is an accomplished and brave fighter in her own right. Yes, Conan does save her during the story, but she is the victor over many other men as well. Far be it from me to suggest that either Valeria or Yasmina are great representations of women in fantasy fiction, but they certainly held up much better than I expected. Where Conan is driven by simple passions, these women both made interesting decisions.

Speaking of Vallejo, reading the editor's commentary from Wagner introduced me to Margaret Brundage, who provided many of the cover illustrations for Conan's appearances in Weird Tales. They encapsulate every negative assumption I had about how Conan stories would be presented: spindly, pale, near-naked women in awkward poses, titillating adolescent male readers. Her frankly ridiculous paintings bore very little semblance to the action and drama of the stories themselves. It is interesting to compare these to early Hollywood depictions of clean-cut heroes and then to the palpably gritty "Conan the Adventurer" by Frank Frazetta. It's like comparing Adam West's Batman to The Dark Knight Returns.

Reading The Hour of the Dragon last was a bit anticlimactic. Most of the chapters had the structure of an L. Frank Baum Oz book: the main character gets into a new situation in a new setting, something unlikely happens, and then they get out of the situation. Indeed, for much of the book, it seemed that luck was Conan's primary skill. Towards the end, it pulls some more interesting themes together, but I found the work as a whole to be unsatisfying except in that it portrays a different side of Conan than the other books. It depicts an older Conan, one with a sense of duty that complements his lust for adventure. Incidentally, Hour of the Dragon had the worst female non-character in Zenobia, whose defining characteristic is that she secretly loved Conan since the moment she saw him and would do anything to help him. Ho-hum.

There was one work in the 1977 collection that I started but did not finish. "The Hyborean Age" is Howard's story-length history of his fictional setting, and I found it awfully dull. I felt the same way the first time I read The Silmarillion when I was a teenager, although the second time I read that work in my 20s, I fell in love with it. I feel like "The Hyborean Age," while possessing the same attention to detail, lacks the storytelling and mythical infusing that one finds in Tolkien's work.

One of the reasons I decided to read this collection is that I wanted to read the same source material as  the originators of tabletop roleplaying. I understand that both Gary Gygax and Dave Arneson were fans of Howard's work, and the sense of adventure I got from reading them myself reminded me of the spirit of the old Dungeons & Dragons sourcebooks. While I spent more time reading Second Edition sourcebooks, I remember having read first edition AD&D as well as a friend's Basic set. They clearly draw upon Tolkien's worldbuilding, but these rulebooks presented a Sword-and-Sorcery-inspired environment. As The Bard says, this was a world of life and death struggle and the exhilaration of battle. It seems very 1970s-80s, compared to contemporary narrative-first adventures and influential rulesets like Apocalypse World, which are much more about relationships among characters and between them and the world. Perhaps this is an explanatory theoretical framing for the Old School Renaissance as more than simple nostalgia. 

Reading Howard with a mind toward the history of tabletop roleplaying games reminded me of when I read two collections of H. P. Lovecraft stories a few years ago. This reading had clarified to me the source of the abominations that grace the pages of the old Monster Manuals and, thereby, entered the popular gaming imagination. Just as I found Howard's stories more interesting than I expected, I had earlier found Lovecraft's to be more hopeless than I expected. His works are much more interesting than the pale imitations referenced as "lovecraftian" that have shown up in games the last few years. Nowhere in his canon is a problem solved with a pistol or explosive, and seldom are problems solved at all.

It is curious to me, then, that Dungeons & Dragons decoupled the "sword" side of Sword and Sorcery the way that it did. Surely, wizards and warriors are different things, but Conan was clearly pulling from both the Fighter and Thief categories. Maybe this is an inevitable conclusion of class-based, party-based systems in order to codify interdependence. On the other hand, in my bit of playing with systems like Fate and PbtA, I find it much more interesting to see players choose to do a task based on the situation and skills rather than letting it fall to the only person who can even try.

I am glad to have received the recommendation and that I spent some time this summer reading these stories. It took me a while to get my thoughts together to write this essay. Since I finally got a day ahead of my teaching, it felt good to finally collect these thoughts and do something that feels like scholarship beyond the "of teaching" variety. Both the stories and my writing about them continue to grow my sense that I should be spending more time playing or running tabletop RPGs. I'm still trying to figure out how they fit into my adult life, but at least now I feel like I may have a few new perspectives that I can bring to bear when narrating combat. 

Thursday, October 8, 2020

Notes on Spreadsheet Features to Support Effective Grading (Or, What Canvas Can't Handle)

Here are some quick notes about my grading requirements. Each item is evaluated using triage grading, which implies in part that it is graded out of a convenient number of points. All the items in a week contribute to a weekly score. For simplicity, let's say each item in the week is evenly weighted. Note that this does not imply that each is graded out of the same number of universal points. One item might be graded out of four, and another out of eight, but they contribute equally to the week's score. If someone gets 4/4 on the first assignment and 4/8 on the other, then they get 75% for the week. 

If that seems confusing to you, maybe you are a lead engineer at Canvas. It is clear from their interface and the tenor of their discussion boards that they cannot conceive of a model of a course where you don't have some predetermined number of points, and then everything you do doles out those points. I will quickly put it to you, dear reader, that this is a bad model. One of the main reasons is that you have to deal with too many points. Let's say you make your course worth 1500 points, maybe reasoning that there's 100 points available each week of a fifteen-week semester. If a week has two activities in it, maybe one is worth 25 and another is worth 75. Now, you have at least two problems. The first is that you have to determine the exact semantic value of 3/75 of one assignment and make it equivalent in weight to 1/25 of the other, if you're doing an honest job. The other is that you have to make it clear to students the difference between, say, 55 and 56 out of 75 points. By contrast, consider the elegance of triage grading. If I give an assignment that is worth 3 points, and someone does a middling job, they get 2 out of 3 points. Their classmates who also did middling jobs get 2 out of 3 points, but of course, each one gets specific feedback about what aspects were not up to snuff. No ambiguity, no arguing for points, no false equivalence between units. 

My point in this post, however, is not to convince you that you should adopt a coherent grading philosophy, but rather to note for myself how I was able to compute midsemester grades today. This is important given that Canvas—my university's required "learning management system" (ack)—is basically useless for anything but the naive, conventional, point-based course structure.

My game programming course was easy to process because the students turn in one thing each week, but in my game design and human-computer interaction courses, students are doing a lot of different things each week. I decided to use Canvas modules to present each week's required submissions. In Canvas' embedded gradebook, you can view assignments by module, but once you download the data for offline processing, that information is lost. It appears that the columns may be sorted in the order they were created, but the important thing to note is that the connection between column and week is lost.

The first step, then, was actually for me to rename all the assignments on Canvas. I prepended each with an annotation of its week as a two-digit code, so the first week's work was "01", the second was "02", and so on. Then, I downloaded the CSV and was able to import it into Libreoffice Calc. The next step was to wipe out all the Canvas cruft, which was maybe two dozen column headings that I don't care about.

After a lot of tinkering this morning, I determined that life would be easier if I added an extra row to represent the week number. This has a simple formula:

=NUMBERVALUE(MID(AssignmentTitle,1,2))

Let's call that value AssignmentWeek. It allows me to use SUMPRODUCT to do the heavy lifting. My first step was to make sure I could compute the right scores for the first week, so I ended up with a formula like this:

=SUMPRODUCT(NUMBERVALUE(MID(AssignmentTitles, 1, 3))=1, AssignmentScores/TotalPoints)

Once or twice a year I have to remember how arrays work in spreadsheets, so let me say a little more about that function above. SUMPRODUCT automatically works over arrays, unlike other fuctions that require either ticking a checkbox, using curly braces, or pressing Ctrl-Alt-Shift-Meta-Something while pressing Enter. The first argument to SUMPRODUCT is going to be zero or one depending on whether the numeric value of the first two characters is equal to 1. In my case, does the assignment start with the prefix "01" or not. This essentially filters out everything except those columns which are actually Week 1 scores. Then, with the magic of array processing, we can add together the result of dividing the points earned range by the total points range, and this evens out the scores regardless of out of how many points they were graded. 

Now, to generalize this, I set up a series of columns, one for each week, with the week number given at the top. Let's call this WeekNumber. The above formula then can be revised so that we can see the score for each week as follows:

=SUMPRODUCT(NUMBERVALUE(MID(AssignmentTitles,1,3))=NUMBERVALUE(WeekNumber), AssignmentScores/TotalPoints)

The result of that expression above needs to be divided by the number of work items given that week. This cost me a lot of time trying to sort out, because it doesn't work the same way as the WeekNumber reference above. Instead, the expression looks like this:

COUNTIF(AssignmentWeek,"="&WeekNumber)

This gives a final form like this, which is copied into each cell of a matrix that shows the week's score for each student:

=SUMPRODUCT(NUMBERVALUE(MID(AssignmentTitles,1,3))=NUMBERVALUE(WeekNumber), AssignmentScores/TotalPoints) / COUNTIF(AssignmentWeek,"="&WeekNumber)

Looking at each student's score for each week allows me to drop in a simple formula to drop the lowest and determine their midsemester grade.

It took a lot of time this morning to sort this out, so hopefully by recording my notes here I can save myself time later, and maybe even help folks who come across this via search results. If you happen to know an easier way to meet my requirements through a spreadsheet, let me know. It's clear to me that Canvas is not robust enough to handle something like this. That's a shame, since my students are so addicted to the illusion of data that comes from seeing "current grades" or "midsemester grades". I'd rather blow up the whole thing, but I'm not ready to move to Evergreen just yet.

Wednesday, October 7, 2020

The Online Student Showcase for CCSC:MW 2020

This year's CCSC Midwest conference ran on September 25-26 as scheduled, although we moved the whole event to be online. (No, not "virtual." It was a real conference, and it was online.) This was the right move to make, given the pandemic, although I found that it took away from me the things I enjoy most about the conference, namely, traveling with students and visiting with friends from the region. 

Once again, I was in charge of the Student Showcase, and so I had to spend some time this past summer trying to determine how to transition the event from in-person to online. Usually, the Student Showcase starts between sessions, with poster presentations and demos given near the refreshments area, and then the Showcase continues through the next session. During that time, I find volunteer judges, explain the criteria to them, and then later collect and collate their results. 

It is worth noting that the Student Showcase is more than just a research poster presentation. Indeed, it had been the tradition at CCSC:MW—like most conferences—that presentable student work was framed strictly as “research.” When the previous session chair retired from the region and I volunteered to take over the event, I was able to expand the scope. Part of the reason for this is my dissatisfaction with the word “research” that derives from my reading of Boyer's classic, Scholarship Reconsidered. This led to my creation of two tracks in the Showcase, named the discovery track and the applications track after Boyer's identified scholarships of discovery and of application.

I had two major goals in the design of the online student showcase. The primary goal was to give the students an authentic experience in showing their work to others, knowing that it would necessarily be a lesser experience than in-person. The second goal was to keep it as simple as possible so as to avoid failures. This second goal imposed a particular constraint on the format: it led me to abandon any plans for online, synchronous presentations. Multiple teams of students across multiple sites presenting in real-time to a distributed audience just meant too many opportunities for failure. In the absence of synchronous communication, I knew that I would need a way for anyone—not just judges—to give formative feedback to the students. Such discussion is certainly the best part of the in-person event, and I wanted to try to capture that as much as I could.

Based on these goals, I decided to allow the students to submit their work in one of three formats: a plain text abstract not to exceed 750 words; a 3–5-minute video presentation; or a research poster or one-page brochure. Each of these are authentic scholarly artifacts, and I have had to make each at different times in my own career. They are asymmetric in that each mode affords different expression, and it was my hope that students would be able to choose the mode most amenable to their work. A theoretical work may be best expressed in an abstract while a capstone software project might show best in a recorded talk, for example. I specifically excluded informational websites from the list because they can easily combine all the other forms together, and I wanted a semblance of balance between forms. I also excluded traditional research papers because students can already submit such work to the conference; it is rare, but I know of at least one student whose original research results were presented right alongside the faculty research in recent years.

The judging criteria remained the same as in previous years, and these criteria were shared with the students in the call for participation. The six criteria are taken from Glassick's Scholarship Assessed

One of the impacts of the pandemic is that I have been spending a lot more time writing policies than in the past, when I could easily explain things in person and answer questions. The CCSC:MW website maintainers tend to reuse the conference URL each year, but I want to archive the presentation of the call for participation. Below, then, is the entire text of the call from the 2020 conference page.

CALL FOR STUDENT SHOWCASE PROJECTS

One of the highlights of the annual CCSC Midwest Conference is the Student Showcase, which is an opportunity for students to demonstrate their best work to faculty and other students from around the region. Moving the conference online necessitates shifting our traditional face-to-face showcase to an online mode.

To qualify for submission to the Student Showcase:
  • The entry must be original work of an undergraduate student or team of undergraduates.
  • The work was supervised by one or more faculty members.
  • The work was completed in the last twelve months at one of the colleges within the CCSC Midwest region.
  • The student, or at least one member of the student team, is registered for the CCSC:MW 2020 Conference. (We recommend participating in the Programming Competition as well!)
  • The entry must be received by 11:59PM EDT on September 11, 2020.
Interested students will classify their work into one of two categories. The Applications Track is for interesting, novel, or noteworthy applications of computing science. This track is usually selected for work that is best displayed as a demonstration of a working system. The Discovery Track is for projects that contributed new understanding to the body of computing science knowledge. This track is usually selected for work that is displayed on a poster or in a research paper. In either case, projects can be completed individually or as part of a team.

Regardless of track, all work is judged on the same six criteria. These criteria are adapted from Scholarship Assessed (Glassick et al. 1997) and provide guidance for evaluating any form of scholarship. Sample reflective questions are provided for each criterion.
  • Clear Goals: What is the goal of this work? What problem are you solving
  • Adequate Preparation: How did you get ready to do this work?
  • Appropriate Methods: How did you solve your problem? Why did you approach the problem this way?
  • Significant Results: What was the result of this work? Who is affected by this work?
  • Effective Presentation: How well does this poster, demonstration, or presentation communicate what is important about this work?
  • Reflective Critique: What would you do differently? What does this mean for you and your future?
For the CCSC:MW 2020 Online Student Showcase, student entrants can choose one of the following three options for their submission.
  • Submit a three- to five-minute video presentation that summarizes the project. This must be submitted as a URL that any conference attendee can access.
  • Submit a 750 word abstract that explains the project. This must be submitted in plain text.
  • Submit a research poster or brochure that can be downloaded as a PDF and viewed online. This is a conventional way of expressing research findings at an academic conference, but keep in mind that in an online showcase, you cannot control the medium by which people will read your work: smartphone, laptop, large monitor.
This year, every conference attendee will have the opportunity to judge the Student Showcase entries. We value all attendees’ participation, and faculty and professional attendees will be given a 3X weight to their scores to reflect their expertise. The results and feedback will be tallied, and we hope to get you the results soon after the conference.

To submit your work to the CCSC Midwest 2020 Online Student Showcase, go to [form url].

I collected the submissions through Google Forms as I usually do. We had eight student teams submit their work to the Showcase. It is worth recording here that more than half of them categorized themselves into the wrong track, which tells me that (1) Boyer's model has not had the impact I would prefer in higher education, and (2) my description presumed too much prior understanding about the philosophy of scholarship. I need to be more blunt and say that the Discovery Track is what your faculty call "research". Baby steps.

After a short experiment with Google Forms, I decided to present the students' work and collect the judging results using my university's licensed version of Qualtrics. My intention was to have the form available throughout the conference, and so at any time, an attendee could follow the link to the online showcase, read or view the students' work. Furthermore, anyone then could volunteer as a judge. The only demographic information I collected was whether the participant identified as a student or as a faculty or professional, which information I collected for the purpose of weighting scores as described in the call. 

The form itself included the student submission and the following form. Neither portion of the form were required, and Qualtrics made it easy to show all eight students' work in an arbitrary but balanced order. This way, even if some participants only viewed some students' work, everyone's work should be viewed by someone.

Sample Judging Form


There were no technical problems during the conference, although I had to put tighter reins on the availability of the survey because I had not accounted for the need to announce the winner's at Saturday's closing session. We ended up making the Online Showcase available from 9am (the time of the first pre-conference workshop) until 11:59pm on Friday.

We had a total of 22 views to the Student Showcase. In a normal year, almost everybody would at least see that the students were showing their work, and a few might approach those that looked interesting or in their areas of interest. Still, I think 22 out of the roughly 100 conference participants was very good, given that they really had to go out of their way to see what students had to show. In retrospect, I should have asked for the names, universities, and submission titles to be included in the conference schedule along with the Qualtrics link; this might have grabbed more viewers. 

I was surprised at the low number of written comments. I made sure to write comments for each one so that they would at least have some feedback from a researcher/practitioner on their work.

I think that the Showcase went well, and I have already identified some easy steps I could take to improve it for next year. Indeed, improving the description of the tracks is something I can do regardless of the format of the 2021 conference. The question of submission format sticks in my mind, however. I certainly found the video presentations to be the easiest to watch during my own judging, and I found the posters predictably to be the worst. Making a good poster is hard, and most faculty fail at it; students making posters that I have to view on a screen is like double jeopardy. Some of the students who submitted text could have benefited from some kind of visuals—the sort one might include in a recorded presentation, for example. This makes me think that if I had to run an online showcase again, I would simplify the submission process to allow only recorded presentations.

Another aspect that was missing from the online instantiation of the Showcase was that student presenters could not chat with each other. During the in-person event, there's a lull at the end when the judging is done and students are tired, and this leads to a more casual, less stressful social time. I like keeping the online showcase asynchronous to prevent technical problems from ruining the experience, but I wonder if there would be an opportunity for a breakout-room style Q&A session in another year. For example, if everyone who viewed their presentations could drop into something like student office hours. This has a weakness that any synchronous event does: if no one actually comes, then you feel devalued.

Thanks for reading. I hope that this post is useful to you. I am planning on exploring this problem a bit this semester with my HCI students, and so I expect to write about that at least in my end-of-semester reflection post.

Sunday, October 4, 2020

Ludum Dare 47: Orbital Blast

Ludum Dare 47 ran from 6PM on Friday, October 2, to 6PM on Sunday, October 4. This is the latest instantiation of one of my favorite game-making events. The traditional Ludum Dare is a 48-hour game development competition in which participants are given a theme and then must make a game from scratch—code, art, music, sound, story—within the time constraints. "From scratch" is a bit ambiguous, since one is able to use programming libraries, game engines, and fonts, but the spirit of the event is clear. There's also a "Jam" category, which allows for teams, third-party assets, and an extra 24 hours, but to me that feels like a different, concurrent event. There's nothing wrong with it of course, but Ludum Dare to me means the traditional competition (or "compo").

The theme for LD47 was "Stuck in a Loop," and my eldest son and I both created entries for the compo. Because of family obligations, we only had a little more than 24 hours to work on them. The other boys worked on related projects in Kodu and Construct while we worked on ours. 

The rest of this post is about my LD47 project, Orbital Blast. Follow that link to the LD47 page, or you can also jump right to the HTML5 build (which was built, of course, through continuous integration).

The moment I read the theme announcement, I heard Devo's "Stuck in a Loop" playing in my mind. This put me in a retro mindset that got me thinking immediately about cyan and magenta. This combined with the "loop" idea of Gyruss. In fact, in 2012 for Ludum Dare 25, I made a quick entry called Reverse Gyruss, in which you play the aliens instead of the hero in a game of similar topology. I have fond memories of playing Gyruss on the C64, although it was one of many games I enjoyed; I suspect part of my reverence for the design comes from Raph Koster's including it as a notable evolution of shmup topology in Theory of Fun.

My family went on an after-dinner walk before I could sit down and start working, and we discussed some different interpretations of the theme. I think it was part of this conversation in which my wife asked me if there was something specific I wanted to learn from this jam. My first thought was that there wasn't, but on further reflection, I really did have two goals: one was to explore how object-oriented architecture manifests within Godot Engine, and the other was to implement examples of juice.

Controls

Developing the control of the games was challenging. I tested primarily with keyboard input, which I intend to be the primary input scheme. For most of the game's brief development life, I had a system where left moves the ship clockwise and right moves it counterclockwise. This works well for the ship's starting position at the bottom of the screen, but it gets awkward when maneuvering from the top. Upon further reflection, I could imagine holding a C64 joystick and pushing the stick in the direction where I wanted the ship to be, rather than the relative direction I wanted it to move. I redesigned my input handling logic to use this same approach with keyboard input. I could not puzzle out the geometric problem of determining which way around the circle to move the ship. For example, if the ship is at 9 o'clock, and you give input for 12 o'clock, how do you know which way around the circle to move? This was a case where I had to look up the formula and insert it into my solution.

Supporting touch input cost me quite a bit of attention. I started with keyboard input but, knowing how it easy it was to post an HTML5 build, I also knew that supporting touch would be convenient for players. My first approach—when the input system was based on left and right input—I tried just putting simple, handcrafted buttons on each side of the screen. Unfortunately, Godot does not make it easy to allow more than one button to be pressed at a time. Adding further complication is the problem that testing multitouch input requires me to deploy to the Web and load the game on my phone, so the cycle time is very long. After an hour or so, I decided this was not worth the effort and abandoned touch input... until later, when it had been scratching at the back of my mind and I decided to add it again. This time, I had the Gyruss-style input working for the keyboard, and it seemed natural to allow the player to touch the screen to move toward that point. Indeed, the math here was basically the same as what I already had in place, so it was just input processing. Unfortunately, this still raised the problem of not having an easy way to handle or test multitouch. A nice solution would be to look for a second finger down to fire, but I didn't have time for that, so I switched to an approach where touch (or mouse) input simply keeps the ship firing as quickly as it can.

A Bit of Juice

I was not able to add all of the juice that I wanted. In particular, I was hoping to add camera shakes; I found some great tutorials and it would just be a matter of putting it in, but there are only so many hours in a day. 

What I was able to add was particle effects, which I have never done in Godot Engine before. The built-in particle editor is nice, although it pales in comparison to those I've used in UE4—mostly Cascade and a bit of tinkering with Niagara. The background starfield is handled with particle effects, and of course the explosions are as well.

A related bit of juice is the smooth transitions between the menu screen and the in-game experience. I was so happy with the starfield that I decided I wanted to keep it running continuously through the game experience. Rather than have a separate scene for the main menu, then, I incorporated it, the gameplay, and the game end screens into the single Level scene. This led to a glut of logic within the Level's script, since I had to handle the states and transitions. In fact, now that I think about it, I probably could have saved myself some headaches if I had thought of the main menu at least as a separate scene that could be instantiated into the Level on top of the continuously-running starfield. This ties back to my other goal and the challenge of making a game in roughly 30 clock hours: I didn't take the time to refactor toward good OO architecture since everything is still relatively small, and there's no maintenance plan.

One of the earliest features I added to the game is actually one of the most clever ones—so clever that I kind of forgot about it until my son asked how I did it. I wanted to sell the illusion of depth in a strictly 2D game, and so to do this, I wanted the player's bullet to shrink as it moved toward the middle of the screen, and for the aliens to start out small and get larger as they move outward. Clearly, these two operations are basically the same: scale the actor based on its distance from the origin. I created a custom scene that, when instantiated into a node, would scale that node based on its distance from the center. It's not exactly the decorator pattern instantiation I was hoping for since it has to break encapsulation to manipulate its parent node, but it had the advantage that I could just drop it in to the Alien and PlayerBullet scenes and it worked like a charm.

Music

Perhaps my favorite part of making the game was composing the music. There are two tracks: the menu song and the game theme. Both were broadly inspired by a 1980s Devo sound. I wrote the shorter menu theme first, and originally it ran through the whole game. Saturday night, I was exhausted from working on the project all day, but after a quick game of Quacks of Quedlinburg with my family, I was invigorated to write what became the main game theme. 

I had tinkered with LMMS before, at least enough to know what things I was doing awkwardly. This time, I spent a little time looking at some of the demo projects to get a better handle on how to manage tracks, especially the different drum beats. I also knew that I wanted to keep the song mostly on one note in the bassline. In the main game theme, I did put in what I consider a fun and unexpected cadence It came from a discussion with my friend Andrew Crow, choral director at Ball State University, when I asked him what kinds of chord changes I should be trying to learn to level up my piano improvisation.

For a while, the main theme included a sound like the roar of an overdriven electric guitar, but I replaced that with the more sci-fi pad sound. The last thing I added to the song was the little wood block sounds. I hope that you didn't notice them the first time, but that as you listened you came to love them like I do.

Both of the songs in the game can be downloaded directly from GitHub in Ogg format if you want to give them a listen. Keep in mind that they are designed to loop, so if you just listen straight through they will end abruptly.

Closing Thoughts

Ludum Dare is always a good time. It's a good lesson in humility, to remember that scoping is difficult and expectations must be tempered. The format gives room to explore ideas in keeping with Alan Hazelden's advice that if you can't prototype it quickly, then you should probably work on something else anyway. I imagine the next Ludum Dare will be in the Spring semester, and I hope that my schedule works out so that I can join in again.

Friday, October 2, 2020

Trying Labor Logs for a Game Design Course Final Project

I have been teaching introductory game design for years, and my students have always had to do some kind of multi-week final project. Each week, I ask them to give a status report on their progress. Most semesters, this has to include some form of playtesting, and in some semesters, I have also allowed alternative work for when the students want a break. Throughout the whole time, I reminded the students that they were being graded on process and not product. No one can guarantee that creative endeavor such as original game design will result in a good product, but a student can show that they have learned and followed an appropriate process for mitigating risks.

One of the perennial problems with this approach was that it was pretty easy for students to get equal credit for doing vastly different quality of work. Often, it would be clear from the presentation that nothing substantial was done in the intervening week, but in the absence of objective criteria, I rarely pressed this. The few cases where I did give only partial credit for the week's progress were so overt that no student ever pushed back on it. As a systems designer, though, I never liked this hole in my course plan. Call it an exploit, if you will.

Several months ago, I became aware of Asao Inoue's work on labor-based grading. His stated goal is to improve equity and inclusion in the writing classroom, and his approach was to use adapt concepts of contract-based grading where the only metric for success is labor—that is, meaningful effort on task. I read only a portion of his book, which made it clear that he and I have different goals. However, I did enjoy reading about the implementation of his philosophy: students track their work in a convenient Google Sheets spreadsheet. The sheet does some automatic computation for them and provides affordances for reflection.

I have been working on the final project specification for my game design class, and I just published a draft for student review this morning. It includes a reference to a sample labor log based on Inoue's template. The columns I used are as follows:

  • Date
  • Start Time
  • Duration (minutes)
  • Primary Activity: one of Design, Playtesting, Documentation, Research, and Collaboration
  • Location
  • Engagement: one of Very High, High, Medium, Low, and Very Low
  • Mood
  • Notes
I also have a computed column—Week—which uses the course calendar to determine the week of the project (1–5) corresponding to the date. 

There is a sense in which the creditable labor is just the duration, but I like the idea of including some of the extra pieces, such as Primary Activity, Location, Engagement, and Mood. I haven't come up with a final exam plan for the class yet, but I will likely have a question that asks students explicitly to reflect on the patterns they see in their logs.

The spreadsheet uses a pivot table to tally the accumulated duration for each week and present it in a bar chart. If I had more time, I would like to annotate the bar chart with the grade cutoffs that I have written up in the project plan. That said, I think some visualization is better than none.

I am eager to see if a requirement to track labor on the project has any impact on the observed quality of students' weekly progress. Of course, the shift from in-person presentations to discussion board posts is probably a more significant variable here, but I'll keep an open mind. You can expect me to share more thoughts about the labor logs here on the blog toward the end of the semester.