I wrote this piece over two years ago, for the Picozine #4! And it actually did get publish, you can find it at page 23! Nevertheless, I thought it would be nice to revisit it and put it on the blog, especially since maybe not everyone read the Picozines!
Please note that my writing style did change since then (for the better I think) and even though I re-edited this write-up just this morning, well I didn’t rewrite the whole thing. I kept the visuals I made back then too. They’re not very good, sorry. :X
Also note that this was written with the Pico-8 in mind, but most of the advice given should work for any other game development platform. (it’s mostly game design advice anyway)
The Roguelike *shiny* game-feel
What is the greatest feeling in roguelikes? Winning the game, in most cases. But what is another greatest feeling in roguelikes? Finding something *shiny*.
The most obvious example would be items, like a piece of equipment for example, but new enemies, bosses, or any world design element has a very large *shiny* potential. Game mechanics like level-ups or a new ability can also feel *shiny*. Winning the game is *shiny*. Losing can be *shiny* as well.
*Shininess* is an amazing game-feel that we all feel and love and, in my opinion, the roguelike genre is the genre that has the best of it.
Roguelikes and *shininess*
You may have understood from the introduction that a great factor of *shininess* is discovery. But the roguelike genre is not the only one that has good discovery feels. Most RPGs regularly deliver new equipments and new environments to the player. Well-made puzzle games are very often based on making you discover new ways of using whatever interaction you have with the game or even changing their own game-mechanics to give you brand new situations. What do roguelikes have that makes them so appropriate to the *shiny* feel?
Roguelikes are RPGs. They can easily use the classic RPG’s equipment and environment renewing, and they should. But roguelikes are also (arguably) the closest you can get to the arcade genre in RPGs. And the arcade genre (or the “try again” genre if you will) is the best genre for keeping you very close to the screen, fingers mindlessly pushing buttons, and indeed having you the closest to the game. Therefore arcade is the best genre for game-feels in general. And thus roguelikes are the best at *shiny* feels. (edit from the future: ah yes, absolutely flawless logic there, very scientific too)
So how do you make that *shine* happen?
MacGuffins. MacGuffins everywhere.
A MacGuffin is a plot device that serves as a goal or a motivation for the main character. The princess Peach in the Super Mario Bros games is a MacGuffin. But so are the coins to a further extent. In video games, MacGuffins can be of different importances but they all share that the player will most likely go for them and when he gets one of them, it will make them happy. MacGuffins are *shiny*.
In roguelikes, any weapon, armor, potion, book, toilet paper or indeed any item can potentially serve as a MacGuffin. But what makes a good MacGuffin?
First of all, a lot of MacGuffins are based on anticipation. If you give your player a new item without them asking for anything, you failed your MacGuffin. So first thing is show the item to the player BEFORE giving it to them. Then, at least make the player walk to it and pick it up.
You can also make the item the reward for a quest or defeating a boss. But if you choose either of these last ones, you may choose to not show the item before the deed is done or maybe to make the reward random. That’s ok but you can still build anticipation! Use your narration to make the player aware he will get something good! When the player can finally pick up the item, make it obvious. The item must catch the player’s eye before he actually gets it. Use lighting effects, sound, flashing colors, text, anything flashy.
Then, MacGuffins should not be deceiving. If the player gets an item he thinks is really good and it’s really bad, you broke everything. The item did feel *shiny* before he got it but now it is the darkest piece of trash he has ever wanted. There are solutions to that!
One of the simplest is to make all the items tradable for something else, like money for example. In Dungeons of Dredmor by Gaslamp Games, early in the game you get a lutefisk box, an item that can convert any other item in a quantity of lutefisk than you can then give to the lutefisk god who would give you a piece of equipment if you gave enough lutefisk. From there, any object has a minimal interest.
Another solution is funny or interesting tooltips. These can be information about the game’s lore or bad puns or pop culture references, anything you think the player will have some interest in. If you really want an item to be a waste of the player’s inventory, make it so but then better put a very good pun on its tooltip or not make it shiny at all.
In roguelites that are not turnbased, like Nuclear Throne from Vlambeer or Spelunky by Derek Yu, we are even closer to the arcade genre. In those games, the *shiny* feels of a new item / mutation / weapon / trinket are often accompanied by an effective change in the gameplay mechanics. Shooting works differently, you can hurt enemies by being close to them, etc… Which makes it a lot *shinier*!
And if you want ultimate MacGuffins, you have achievements. If one of your achievements is “find the Wooden Stick of the Doomed”, you made a bad weapon *shiny*. Well done. But if one of your achievements is “find the jeweled gold crown of the kingly royal King Bob Deluxe”, you made an epically *shiny* item even *shinier*.
In a Pico-8 game, a simple implementation of achievements could be to have a table of strings, one for each achievement, and display one for a for a few seconds when the player achieves a thing!
Quests, value, lore, puns, achievements… But is there a way to make something shiny without affecting the game’s mechanics or pouring lots of literary work into it?
The more literal *shininess*
In Pokémon, the famous RPG by Game Freak where you have to capture Pocket Monsters and make them fight with other people’s Pocket Monsters, there are so-called ‘shiny’ Pocket Monsters. The two differences they have from regular Pocket Monsters are that they are extremely rare and they have a different color palette. Shiny Pocket Monsters are an amazing example of super cheap and super powerful *shininess*.
Pico-8 happens to have a wonderful function called pal(c1,c2) which will make it draw the color c2 instead of the color c1! Which means that with one 3-colored sprite and Pico-8’s 16 colors, you have a potential of 4096 variations of that same sprite!! And yes, of course lots of them are bad and will hurt your eyes but a lot aren’t and won’t. Better than that, if your game has other animated sprites (which it definitely should), you can make your sprite’s colors change over time! Why not?!
Do keep in mind that these palette tricks work only once the player is accustomed to see the item with its original sprite. On the other hand, this can be used more extensively to make A LOT of items with just few sprites! Take DECA Games’ MMO-roguelite Realm of the Mad God for example, where most tiers of a same piece of equipment are the same sprite with different palettes. There, the tier palette is also an indicator that an item is better than what you currently have and, in direct consequence, *shinier*.
And you can apply palette swapping to enemies, environments, anything graphical!
But palette swapping is not the only cheap graphical trick to make something *shiny*! In fact any graphical or audio effect you can add to an element of your game can make it more *shiny*. One very efficient graphical effect is ridiculous lighting.
A good example of ridiculous lighting is light coming from chests when you open them. Whatever is in there, someone put a lamp with it just so you know you found something *shiny*. Zelda games do that. They also make the items levitate out of the chest and put a catchy jingle over the whole thing.
Keep in mind there are lots of possibilities when it comes to lighting though. You could put light rays coming from the item, or it could be lightning, an aura, sparkly shapes, fireworks, flames, sparkles, circling sparkles, glitchiness, rainbows, fireflies, light bulbs, etc and all that with all the different colors in the world.
Don’t be afraid to make it too extravagant, you won’t, it’s a video game.
And finally, add some animation to the thing when it comes on screen. Make it hover up, make it roll, make it sway, make it zoom in and out again, make it shake! Chose whichever or make combos but when the item / enemy / npc / text / action / death-screen shows up, any animation will whisper *shiny* to the player’s brain in a slightly scary but exciting way.
I have a preference for the shaking as it is generally very easy to implement. Just store two global values shakeX and shakeY, multiply each by -0.5-rnd(0.2) each frame, and use the camera(x,y) function in the _draw() to offset all subsequent draw calls. Make a function add_shake(p) that gives random values to shakeX and shakeY and call that function ANYTIME ANYTHING HAPPENS.
Roguelikes are the best at *shiny* feels and to achieve making something *shiny* in one, you could make it a MacGuffin, based on anticipation and in-game value, or/and you could add lots of graphical effects to it, such as palette swapping, ridiculous lighting and/or simple animations. Along the way have also been mentioned that game mechanics can also be *shiny* and that you shouldn’t be afraid to make things too extravagant.
You should now be very capable of making anything *shiny* in your own roguelike or any other kind of game really. The *shiny* feel might be most adapted to roguelikes but you can certainly use it in most, if not all, video games. So make me proud and go do just that!
Thank you for reading!
I want to thank my Patreon supporters because without them I wouldn’t be keeping this blog nearly as active!
Joseph White, Jefff, Riccardo Straccia, HERVAN, Andreas Bretteville, Bitzawolf, Alan Oliver, Paul Nguyen, Dan Lewis, Christian Östman, Dan Rees-Jones, Reza Esmaili, Thomas Wright, Chris McCluskey, Pizza, Joel Jorgensen, Corey O’Connor, Marty Kovach, Cole Smith, Giles Graham, Tim and Alexandra Swast, Sasha Bilton, berkfrei, Jearl, Dave Hoffman, Flo Devaux, Thomas Morison, David Dresbach, Egor Dorichev, Jakub Wasilewski, amaris, Brent Werness, Nick Hughes, Anne Le Clech, nanoplink, Nate Wiesel, Sean S. LeBlanc, Matt Hughes, C, Andrew Reist, vaporstack and Pierre B.
Special thanks to Ryan Malm who is currently supporting my work at the 16$ tier!