a programming blog

Shared Fantasy: Role-Playing Games as Social Worlds (Review)

Shared Fantasy is an ethnographic study of fantasy roleplayers in the Minnesota area from 1977 to 1979 by Gary Alan Fine. As this predates the moral panic of the early 1980s (James Egbert disappeared in 1979; the movie Mazes and Monsters was released in 1982) and the resultant explosion in popularity of the field, it also serves as a historical artifact of the hobby’s early days. Does this book provide a better historical understanding of roleplaying games? Will reading this book make you a better player? My answers are yes and no, respectively.


Godot4 HTML5 Export Development Server

Godot 4’s HTML5 export uses WebAssembly, WebGL, and SharedArrayBuffers. Browsers require a secure context for these features to be available, which requires sending certain HTTP headers when serving the game content. For development, there are two straight-forward ways to serve the content: Godot’s Python http server and Miniserve.


Drawing Down the Moon (Review)

Drawing Down the Moon: Magic in the Ancient Greco-Roman World is an academic history of the perspective and practice of magic. Broad and detailed, Edmonds covers multiple types of magic, discussing the who, what, why, and how of each, and attempting to place the magic within the broader culture practice. Themes carried throughout include what counts as magic and how that magic might be embedded within the culture.


Range to Dice Notation

Before dice notation was adopted, early roleplaying games described dice rolls using range notation. For example, 3-18 indicated rolling three six-sided dice or 3d6 in modern notation. Converting a range to dice notation requires a little thought, so I’m going to describe a way to solve the conversion programmatically. Background Dice notation is a succinct domain specific language to represent discrete probability distributions and is heavily used in tabletop roleplaying games.


Page 1 of 9