Sparks and Dust

Click this icon to play Sparks and Dust

Go here to download Sparks and Dust for your website.

How to Play Well

   Explore! Sparks and Dust has a lot of secrets. Also, remember that when you attack from higher up (blue), or much higher up (orange), you do more damage, can hurt blocking enemies (they'll have a blue or orange circle around them), and can open blue or orange secrets. If you jump and grab an item, you'll boost a bit higher. Use that like a double jump. Enemies have different attack patterns and properties. Learn those patterns. In particular, you can't dive attack flying enemies. Instead, floating and absorb their shots, then counterattack. You'll need a lot of money to open up the secret boss in each level, so make sure to grab a lot of coins.

Design Notes

A Mini-Essay: Players vs Game Worlds through the Lens of Global vs Local

1. Command Lines and GUIs

   A book I read mentioning the transition from command line interfaces to GUIs - maybe Jef Raskin's Humane Interface, though my memory is fuzzy - made this observation: command lines keep commands in users' heads, in an inchoate global pool of actions. GUIs map those commands to space, instead. So in GUIs, people can use their spatial memory coupled with visual cues to interact with options. With that in place, verbs be contingent on the state of the tool (and visually marked as such), which in turn allows verbs to be revealed on a need-to-know, contextual basis. That radically changes how you can organize information for users.

2. Super Mario World: Levels as Inventory?

   How we handle actions and options in games is related to this.
   An example: in Super Mario World could have provided players with an inventory. It could have had an interface for collecting and showing mushrooms and fire flowers and stars and the cape. It could have lett players select and use those items as desired. But it didn't; players collect those items in levels, instead.
   Watch a player pretty far in the game, though, and they return to previously mastered levels from time to time to collect stars / fire flowers / Yoshi's / extra lives. Squint a bit, and it appears players use early levels as a peculiar, rough inventory interface.
   This is the Mario way. The actual abstracted interface and controls are simple and spare in the extreme. Instead, the levels, the play spaces, are where designers embed the game's diversity and complexity. They rely on the player's spatial memory and let the complexity grow just a bit at a time in hyper-local contexts.
   Super Mario World presents itself to a player as a fairly simple game. What you "need to know" to play is minimal - just a few buttons and almost no global interface. Yet the game itself has a huge amount going on. It's just localized to particular spaces in levels.

3. Super Mario World: Player Abilities are Embeded in Levels

   This leads to a useful question. In a character-oriented game, which rules are bound globally to the player, and which rules are distributed in the world? Player features are global. They make games complex. World-distributed features are local, messy, lumpy and interesting. They don't weigh down a player until directly encountered. World-distributed features are easier for designers to use to pace and vary player experiences.
   Return to Super Mario World. Made today, on a modern controller, you'd have far more buttons. That button-rich controller might tempt a designer to add, say, a super jump move on a button. Mario instead offloads that action to a spring object. You only encounter springs from time to time. Or those buttons might tempt a designer to add a quick dash that is hard to stop once engaged. Mario uses slick, icy floors instead, only encountered in special sections of the game. In fact, Mario relies on quite a collection of status changing objects in its world that could have been global moves instead, ones that Mario could have had access to all the time. But that's not Mario. Instead, the Mario's base move set is small (no inventory, no statistics, a few buttons for input). All complexity is pushed out to the edges, in levels, in specific contexts, sharply controlled by the level design.
   Super Mario World doesn't need a tutorial for this reason. Levels, if designed properly, function organically as tutorials as players encounter new objects. Objects exist in levels. Moves don't (unless an object grants a move, leading into Metroid-style design, of course).

4. The Heart of the Matter: Global versus Local Rules

   There is a powerful idea here. Magic the Gathering relies on it, too. M:tG has a small core ruleset, easily learned, but overwhelming rule diversity because the rules are pushed out to the cards themselves. And as a collectible card game, most cards you'll never see. But know the core Magic rules, and you know how to play the game.
   Leaving games - but not rules - briefly, this idea forms the basis of certain interesting libertarian thinking. Strong reliance on contracts between private actors, at as local a scope as possible, rather than going through central government is, in theory, a crucial way of managing complexity. Push interactions to the edges, as local as possible, and your system can support many more intereactions.
   The decentralized and distributed web (versus the walled gardens of XBoxLive, the Apple Store, and so on) gains its stength, diversity, and robustness from similar insights.
   With a background in programming, these patterns immediately evoke the tension in programming of local scope versus global scope. One iron clad programming law urges avoiding global variables and state whenever feasible. This rule is meant to help humans; programs and computers work just fine with globals. But every global variable in a program adds one more bit of information to account for when reasoning about every single function and every single line of code in a program. Thinking about a system harder becomes harder. Meanwhile, the more local an object or function is, the easier of a time a programmer will have reasoning about, testing it, debug it, and reusing it. This scope rule doesn't merely apply to variables, either - globally visible classes, functions, and namespaces all add to the cognitive budern of code. It even applies to different scopes within a class. A member variable in a class is still harder to reason about than a local variable in a function. And it applies to the scope of variables within inherited class heirarchies. These tensions are present in all of these contexts.
   The Mario's jump height and speed, and Mario's running speed, are global scope rules. They effect everything in the game, all the time. Rules about springs, on the other hand, only affect a few screens.

5. What Happens When Rules are Mostly Global?

   Is this a trivial observation? Well, many, many games push in the opposite direction from Mario. Their player characters are larded up with tons of moves, options, stastics, abilities, button combos, inventory slots, and then their environments have almost no variation or diversity, aside from beautiful and rich art changes. Old brawlers like Double Dragon 2 epitomize this approach. With their heavy reliance on player moves rather than novelty embedded in the environment, such games often degenerate into the "one best move" situations, where one move is always the best choice for any scenario. This problem stems from the global nature of player moves.
   Games focused on inventories and RPG ability screens show similar patterns. In every single battle in Final Fantasy 6, players can access a giant inventory of items, including powerful options like full-health Elixers. The FF6 combat designers had to account for players with an incredibly wide range of possible inventories for every single combat in the game. They must've just shrugged, realizing battles might often be unbalanced and boring, depending player play style. In FF6, A player's inventory is a giant global variable.

6. Globals and Grinding are Deeply Intertwined

   The most glaring consequence of global game design variables, along with dominant strategies like in Double Dragon 2, is grinding. Gold, money, experience points, or score is the key global variable the entire player experience revolves around in many games. And because money / xp / score is a global variable affected by nearly all player actions, players have huge incentives, given any limitless respawning resources, to min/max their behavior until they find repeatable activities, often boring, that optimize ticking up that solitary global variable. Finding that strategy might be interesting and fun, but executing it rarely is.
   Super Mario World's design, and designs like it, make grinding nearly impossible. The world embeds everything interesting. The player has no inventory and hardly any meaningful statistics. There's nothing to grind. The game demands that players do varied, novel activities.
   Look at good quality play in Zelda 1 versus Zelda 2, and Castlevania 1 versus Castlevania 2. Both sequels exhibit the problems mentioned here, while the originals don't. The original Legend of Zelda is especially interesting. While it does use money and an inventory, both globals in the game, the designers make some smart moves to mitigate them. So, interesting objects populate the global inventory, but many of those objects special objects in the world to work - the candle burning bushes, for example. Most of the inventory isn't applicable most of the time. And money has a low maximum, only buys a few incidental items, and is most quickly acquired through secrets. Grinding money is a relatively pointless thing to do in Zelda 1. Grinding experience in Zelda 2, on the other hand, is my primary memory from playing the game.