It’s been several months since my last two blog posts, one of which detailed my New Year’s resolutions while the other accurately predicted an abundance of chaotic energy and change throughout this Year of the Fire Monkey. Perhaps I can blame the Fire Monkey for my less than stellar job following through on some of my 2016 resolutions, but I have accomplished at least one major goal: I am now once again living in the beautiful, coffee-loving, legal-pot-smoking tech hub of Seattle! My path here was quite circuitous, however, so I’ve decided to share some highlights from that journey followed by a brief discussion of the work I’m engaged in right now.
From Utah to Arkansas
It was back in March that I first bid another fond farewell to my home state of Utah. I had been working part-time as a hiking guide for the Green Valley Spa while devoting the rest of my time to various software development projects, most notably the establishment of my own game development company: Golden Drake Studios. While looking around for additional programming work, Insight Global reached out with a contract to work as a software engineer for Hewlett Packard Enterprise (HPE) at their offices in Conway, Arkansas. The price was right and the work sounded interesting, so I accepted.
My trek to Arkansas was hasty, but pleasant. I chose to go by car, not only to carry more things, but also to see some parts of the United States up close and personal that I’d never seen with my own eyes before. Setting out rather late, the sun was already low in the sky as I crossed from Utah into Arizona, passing through the oddly-named and mostly-polygamist community of Colorado City. The sky darkened as I drove on through the Kaibab Indian Reservation. I enjoyed my last glimpses of the gorgeous, rocky plateaus typical of southern Utah and northern Arizona, then night fell as I ascended into the forested regions near Jacob Lake, a small community named after one of my most fascinating recent ancestors: Jacob Hamblin. For a time, the moon had yet to rise and I was far from any city, so I was treated to awe-inspiring glimpses of the Milky Way stretching across the sky. Later, I crossed the vast, moonlit expanse of the Navajo Nation before finally stopping for a few precious hours of sleep at a cheap hotel in Gallup, New Mexico.
Resuming my journey the next morning, I was grateful to once again see my surroundings more clearly. The austere beauty of New Mexico was reminiscent of Utah and Arizona, though definitely possessing its own unique flavor. As a die-hard fan of the Breaking Bad television series, I also enjoyed making a brief stop in Albuquerque.
I didn’t have time for a proper tour, though, so I pressed on, eventually entering the first of three states I’d never set foot in before this trip: Texas. I’d heard time and again that everything’s bigger in Texas, and now I was forced to agree. The sudden change to an almost completely flat and unbroken landscape was awe-inspiring, as were the frequent rows of enormous wind turbines slowly turning and forming interesting patterns, like giant dancers performing for the wonder and amusement of passers-by. Darkness fell by the time I reached Oklahoma, affording me the opportunity to glimpse Oklahoma City’s colorful nightscape and then to be pleasantly surprised by thick, moonlit clouds of mist as I reached Eufaula Lake and beyond. This more humid and verdant landscape continued on into Arkansas where I made it close to Conway before finally stopping again for some much needed rest.
The following morning I drove up to HPE’s impressive office building for my first day on the new job. As part of my introductory tour, I had the pleasure of meeting a diverse set of interesting coworkers, including Alan Watson, one of the founders of Ozark Softscape: the studio that created M.U.L.E. and a handful of other influential video games back in its heyday.
There were ping pong tables, weight rooms, and other facilities now typical of large tech offices, including the oddly named Toad Suck Cafe. Apparently, several spots along the Arkansas River acquired the “Toad Suck” nickname back when steamboat crewmen spent their leisure time “sucking on bottles (of alcohol) till they swelled up like toads.” In fact, later on, around the end of April, I had the pleasure of sampling some live music and local cuisine (and a little alcohol) during Conway’s 35th annual Toad Suck Daze festival.
Truth be told, I’d never given much thought to visiting Arkansas before, but once I was there I was blown away by the simple beauty of “the Natural State” and the friendliness (generally speaking, of course) of her people. I found southern accents, southern cuisine, and southern hospitality quite agreeable and loved driving through forests and along country roads where I could look out across green fields accented here and there by wildflowers and old, picturesque houses. Also, the city of Conway itself was a nice place to live, in my opinion. There were lots of great places to eat, shop, and hang out and I loved the abundance of trees and lovely buildings in and around the University of Central Arkansas. Speaking of UCA, Conway is also home to two other institutions of higher learning, earning it the nickname “City of Colleges.”
As for my work, I was one of many programmers responsible for creating, maintaining, and improving code that handles healthcare data. In my case, this meant writing C code with embedded SQL, along with the occasional Unix shell script. It was a fantastic experience and, for the most part, an excellent fit for my skill set. Sadly, however, it did not evolve into a long-term position like I originally hoped, so I soon found myself back on the job market and contemplating another move.
From Arkansas to Seattle
After evaluating my limited options in the Little Rock area, I decided to go forward with a plan I’d already had in the back of my head for a long time: to return to Seattle, establish a new social and professional niche for myself there, and put down roots among the tall evergreens and misty mountains of the Pacific Northwest. As such, I was back on the road again, this time passing through eastern and southern Texas so I could tour the National Videogame Museum in Frisco and spend a little time with one of my sisters and her family in San Antonio.
After catching up on sleep and exploring the Alamo and a few other local sights, I continued west through lands of scarce water and even scarcer cellphone reception before spending a night in El Paso along the US-Mexico border.
My path then took me north through the beautiful wastelands of southern New Mexico, over the gorgeous mountains of Gila National Forest, and across the golden fields, deserts, and mountains of Arizona before finally landing me on my parents’ doorstep in St. George, Utah, in the middle of the night.
I spent some time with my parents and then with another sister and her family in Cedar City before heading north all the way to the rolling hills of southern Idaho. A tire blew out on me just before sunset, delaying my progress for a few hours, but I’m grateful to say that was the only car trouble I had throughout either of my major road trips this year. In any case, after getting the tire replaced, I kept driving until I absolutely needed to stop for a little sleep, and then, “ere break of day,” I was back on the road passing through the greenery of Oregon and on into Washington. Upon reaching the mist-shrouded mountains of Snoqualmie Pass, I couldn’t help but start singing a beloved dwarven song from Tolkien’s The Hobbit.
I finally arrived in the Seattle area about an hour later and was grateful to spend the next several days with my brother and his family as I got situated. Having survived my journey back to the PNW’s “misty mountains cold,” my next task was “to seek the pale enchanted gold,” i.e., to land a good day job. Seattle has no shortage of tech companies, so I sent resumes to several of these along with a few places that could make use of my fluency in Mandarin Chinese. Much to my delight, I soon received an offer from a contracting company associated with Nintendo of America, so I now work for Nintendo by day and my own company, Golden Drake Studios, by night.
The Game Dev Must Go On
Throughout all the transitions I’ve experienced this year, and in spite of the Fire Monkey‘s appetite for chaos, I’ve done my best to stay focused and positive and continue spending time on indie game development and other projects of interest to me. I’m definitely behind schedule and have a long way to go in terms of my overarching personal and professional goals, but nonetheless it feels great to reflect on what I’ve already achieved: I am now directly assisting Nintendo in the production of their excellent games while also gradually bringing my own game design visions to life. And all the while I get to enjoy the abundant natural and cultural beauty the PNW has to offer!
If all goes well, I should finally have my first “real” game on the market within the next year or so. I look forward to sharing it with you, along with occasional highlights from the game development process and other things going on in my life. In the meantime, I wish you the best of luck in whatever goals you’re pursuing. No, I take that back. To paraphrase “The Fire,” one of my favorite songs by The Roots, “I don’t say good luck; I say don’t give up.”
Just think about it. The expansive, chaotic energy of flame coupled with the clever yet reckless attributes of the monkey? Sounds like we’re in for a wild ride! At the risk of seeming culturally insensitive, I suggest we follow the sage advice of Short Round from Indiana Jones and the Temple of Doom: “Hold on to your potatoes!”
Incidentally, I was born in a previous Year of the Monkey: the Year of the Metal Monkey (金猴年 jin hou nian), which conjures up an entirely different image!
This is the third Year of the Monkey since my birth, hence I’ll be turning 12 * 3 = 36 years old later this year. Kind of fun to think of one’s life in terms of multiples of 12 rather than decades. Anyway, although I don’t actually believe in any form of astrology, here, for our mutual amusement, are some traits supposedly associated with Monkey Year births:
Health risks: Circulatory and heart troubles, diabetes, arthritis, anxiety, obsessive-compulsive disorder, antisocial personality disorder, bipolar disorder, narcissistic personality disorder.
As is the case with Western astrology, it’s easy to find some words that ring true and others that don’t within these lengthy lists. But again, it’s all good clean fun. I’ve also found it interesting to investigate the attributes associated with both metal and fire in Taoist thought. For starters, metal (金 jin) is associated with yin (陰) of the yin-yang duality, the planet Venus, autumn, dry weather, the west, old age, decline, the color white, the White Tiger (西方白虎 xi fang bai hu), inward motion, contracting energy, and the following:
Health: The lungs, large intestine, nose, skin, and emotions surrounding both courage and grief.
Metal also happens to be the element most strongly associated with the monkey in Chinese astrology, so perhaps I should be especially monkey-like? In any case, let’s contrast this with fire (火 huo), which is associated with yang (陽), the planet Mars, summer, hot weather, the south, daylight, prosperity, the color red (extremely lucky in Chinese culture), the Vermillion Bird (南方朱雀 nan fang zhu que), upward motion, expanding energy, and the following:
Health: The heart, small intestine, tongue, and emotions surrounding both joy and hatred.
I wish I had more time to elaborate on all this, but midnight approaches and I must conclude this post. As such, I’d like to close by simply wishing all of us a happy and prosperous Year of the Fire Monkey, full of as many of its associated positive traits, and as few of the negative, as possible. My thoughts go out especially to all those affected by the recent earthquake in southern Taiwan: may your sorrows and pains be replaced, in due time, with serenity and peace of mind.
Throughout these, the first two weeks of 2016, I’ve continued to contemplate what I want to accomplish and where I want to be, both figuratively and literally, by year’s end. I don’t always indulge in the tradition of New Year’s resolutions, but this year I’ve decided not only to write a few goals down, but also to share and discuss them here on my blog. So, without further ado, here is resolution number one:
Game development projects rarely go smoothly enough to meet their initial deadlines, so this is a lofty goal. Nonetheless, through careful monitoring of weekly and monthly progress, I’m confident in my studio’s ability to see it done!
I write a lot, but I’m such a perfectionistic self-editor that I rarely publish anything. This needs to change. From now on, you can look forward to reading my thoughts on technology, game design, and various other topics on a more frequent basis.
It’s been great spending time among family, old friends, and gorgeous desert surroundings back here in my hometown of St. George, Utah, but I always knew this was temporary and I’m ready to move on. Having lived in or visited many parts of North America as well as East/Southeast Asia, it’s been difficult to pinpoint exactly where I might want to put down roots. Each part of our planet has its own unique flavor, its own pros and cons. Naturally, this has led me to also consider the perpetually unrooted life of a digital nomad. In the final analysis, however, I still like the idea of having my own long-term home, so I’ll be looking closely at the Pacific Northwest, the Bay Area, and other scenic tech hubs as I consider where to establish it.
4. Exercise, read, write code, do something artistic, and meditate every day.
This is fairly self-explanatory, if a bit vague. Hiking is my primary form of exercise these days, which is wonderful, but I ought to do a better job of regularly working out as well. I also ought to do more reading, i.e., the actual picking up of books and turning of pages rather than the casual skimming of online articles that has dominated my reading life in recent years. Writing code is already more or less a daily habit for me, so that part shouldn’t be difficult. As for “something artistic,” by this I mean anything from game, level, and quest design to drawing or playing around on the guitar: anything that engages my creative/expressive side. Finally, by “meditation” I simply mean setting aside a little time each day for the healthy practice of breathing deeply and fully relaxing both body and mind.
The only downside is that the simplicity of the graphics is now more apparent than ever. Ideally, I’d like to overhaul the visuals completely—especially considering the increased memory capacity and support for transparency provided by Pebble Time devices—but I must confess that would require more time and effort than I’m willing to invest at this point. These apps were fun to build and are fun to play (if I may say so myself), but my heart has moved on to other projects, particularly those associated with my new indie game development company: Golden Drake Studios.
So, what about owners of the original black-and-white Pebbles? Do I have anything new to offer them? Yes, as a matter of fact, I do. The following general improvements have been implemented in both the color versions and black-and-white versions of my games:
All game data, not just player data, are now saved between sessions in MazeCrawler and SpaceMerc (just as always has been the case in PebbleQuest).
In SpaceMerc, the player’s starting stats have been adjusted, the “Damage Vibes” setting is now “On” by default, and a bug wherein moving backwards away from an exit would cause the player to exit the current mission has been fixed.
In PebbleQuest, the effects of primary attributes have been adjusted, the base fatigue rate has been lowered, weapons and armor are now more beneficial, and a robe, shield, or suit of armor infused with a Pebble of Shadow now provides a slight bonus to physical defense in addition to spell absorption (which itself now involves a chance of absorbing enemy spells not only as energy, but also as health).
As always, I welcome your feedback along with your perusal and use (with attribution) of each of my games’ source code via GitHub:
That’s all for now. In closing, I offer my sincere thanks to everyone who’s downloaded, played, critiqued, praised, feigned interest in, or otherwise interacted with these, my humble experiments in smartwatch game development. Cheers!
PebbleQuest, a 3D fantasy roleplaying game developed for the original black-and-white Pebble watch, was released on December 25, 2014, weighing in at 25,020 bytes: 25kB or 24.4KiB. The concept for the game germinated in 2013 as I first started reading about the Pebble and other smartwatches. I was studying mobile game development at the time and the thought of creating an RPG for a wristwatch intrigued me. Before long I found myself ordering my own Pebble, typing up PebbleQuest‘s design document, and answering Team Pebble’s clarion call to “make awesome happen!”
I can’t say exactly how many hours went into PebbleQuest‘s development, but it was a true labor of love, consuming much of my spare time over the course of about fifteen months. Starting from scratch and armed only with the C programming language, the Pebble SDK, and the CloudPebble IDE, it took about two months to complete the basic foundation: a simplistic 3D environment navigable via the Pebble’s three right-side buttons, released in late 2013 under the title MazeCrawler.
As I started adding RPG elements, it soon became apparent that memory was going to be an issue. If a Pebble app’s size and memory usage cross a certain threshold, the app may still install successfully but will crash at runtime, either just after launching or after one too many allocations of dynamic memory (such crashes can also be caused by memory mismanagement, of course, so that possibility must be ruled out before concluding you’ve surpassed the memory limit). I was thus faced with the hard necessity of significantly scaling back my design. A bit flustered, I set PebbleQuest aside and spent the next few months on a slightly simpler game: SpaceMerc, a sci-fi first-person shooter released on March 23, 2014, as a last-minute entry into the 2014 Pebble App Challenge.
After that, my attention strayed somewhat to other projects, but by late September my spare time was once again dedicated almost entirely to PebbleQuest. Perusing my code with fresh eyes, I discovered several more ways to save memory, allowing gradual incorporation of, if not everything, then at least all the most essential elements from my original design. Overjoyed to see the game finally approaching my initial vision, I continued testing, fine-tuning, and polishing it until my self-imposed absolute deadline: Christmas morning.
Without further ado, I’d like to share a few details regarding PebbleQuest‘s design and development, my sources of inspiration, and the techniques and trade-offs used to provide a quality action-RPG experience within the memory constraints and other limitations of this unorthodox gaming platform. I’ll then conclude with some thoughts on the future of smartwatch gaming. If instead you’d rather just see basic information about the game and how to play it, head to the official PebbleQuest page.
Working Magic with Memory
Readers of my SpaceMerc postmortem will recall repeated assertions of “I couldn’t do this” and “I had to drop that” due to memory concerns, but it turns out I should have been more optimistic. I have since discovered several more strategies for reducing app size without sacrificing much, if any, content and I’m sure many more would have been found if only I had more time to experiment or had greater expertise with the C language.
For my fellow smartwatch app developers, I present a handful of memory-saving tips I picked up while working on SpaceMerc and PebbleQuest, some of which may be context- or compiler-dependent:
Unless you have a strong design-based reason for doing so, don’t reinvent features already present in the Pebble SDK. For example, use provided fonts rather than custom fonts, a MenuLayer rather than your own custom-designed menu, etc.
As much as possible, use integers rather than floating point numbers, and use int8_t or int16_t rather than int32_t or the generic int type. Also, where constants are concerned, bear in mind that powers of two (1, 2, 4, 8, 16, 32, etc.) can often be handled more optimally than other values. For example, rand() % 10 consumes slightly more memory (eight bytes more, to be precise) than rand() % 8. Finally, if you’re feeling bold, consider delving into the world of bit manipulation.
Avoid using your own typedef-defined variable types. Having said that, defining a struct might still be a good idea for some tasks, at least for the sake of convenience and readability, but keep them to a minimum, read this tip for reducing struct size, and ensure a struct‘s size doesn’t exceed 256 bytes if you plan on saving it to persistent storage through a single call to persist_write_data.
If you’re using function calls, array indexing, or pointer dereferencing to get at the same value multiple times within a given function, it may be better to instead get that value once and store it in a local variable, especially if more than one call/index/dereference is required to get at the value.
Keep conditional statements to a minimum, but where they can’t be avoided, if–else is often more memory-efficient than switch, in my experience. Experiment on your own, case-by-case, to be absolutely sure.
On that note, keep in mind that array indexing is often an excellent alternative to conditional tests. For example, if you catch yourself using conditional tests on an integer n to determine which string constant to copy to a text field, you can replace those conditionals with a constant array of string constants that can then be indexed by that same integer n.
In general, eliminate any function that’s only called once throughout your program. In other words, directly incorporate that function’s code into the function that called it.
Speaking of functions, although a void return type is often suitable, there are times when specifying a return value will actually decrease a function’s memory footprint even though that value is never used. This one is a bit mysterious to me, so I recommend experimenting with your own function return types one-by-one.
Finally, the most obvious way to save memory: Simplify your design, cutting out any elements that aren’t absolutely necessary. Challenge all your assumptions about what “needs” to be in the game.
One thing to bear in mind: As reduction of memory footprint rises in priority, other software development values, such as the readability and modularity of code, might need to be sacrificed to some extent (as evidenced by my less-than-ideal source code). If you’re not careful, this can make the process of modifying, debugging, and polishing your app more difficult than usual down the road.
Akalabeth Meets Arena: Real-Time Action in a Simplistic 3D World
My vision for PebbleQuest was to create the smartwatch equivalent of an old school action-RPG. I took inspiration from a variety of classics, including two of the earliest RPGs to feature real-time, first-person combat: Ultima Underworldand The Elder Scrolls: Arena.
However, where movement was concerned, I decided early on to go with abrupt 90° turns and simple forward/backward motions more evocative of older classics, such as Dungeon Master or Eye of the Beholder.
Or, going all the way back to the first computer roleplaying game ever published and the precursor to Richard Garriott’s Ultima series, Akalabeth: World of Doom, although once we reach this point I’m happy to say PebbleQuest finally manages to look better and smoother than at least one of its predecessors!
I hasten to note that, although I chose to employ simplistic 3D and abrupt movements, the Pebble device is fully capable of supporting more sophisticated forms of 3D representation. For example, this 3D FPS demo features more visually-impressive environments as well as free, fluid movements controlled entirely by the Pebble’s accelerometer (in other words, by tilting your wrist or otherwise tilting the Pebble).
Why didn’t I make use of the accelerometer? Well, accelerometer controls are fun to play around with, but, if you ask me, they end up feeling awkward when applied to games of this sort, so I chose to stick with button controls. Admittedly, my control scheme is awkward in its own way: movement forward and backward is facilitated by single-clicking (or continuously pressing) the “Up” and “Down” buttons, respectively, while turning left and right is accomplished by double-clicking those same buttons. It takes a little getting used to but was, to my mind, the best way to allow the player to turn left and right and move forward as well as backward while still leaving the “Select” button available as an attack button and the “Back” button as a way to return immediately to the main menu, all without worrying about how your Pebble is currently tilted.
For a slightly different take on button controls and another impressive example of the kind of 3D gaming Pebbles can support, check out this dungeon crawler by JeckleCed:
Clearly, that game is better-looking than PebbleQuest, but it has yet to be completed and released, mainly due to the Pebble’s memory limitations. I hope to see it released in the near future along with many other games of this sort, even if they do end up outshining my own creations. Oh, and for the record, I do have experience related to programming those kinds of richer 3D worlds, but, for the sake of keeping my Pebble games simple, compact, and easy to complete within a relatively short time frame, I opted for a more old-fashioned approach.
Now that we’ve discussed movement and the overall 3D environment, let’s dive into combat. At one point during development I considered going with turn-based rather than real-time combat, especially since casual “look at your watch now and then” games are naturally quite popular on this platform, but that wasn’t the experience I was aiming for. I wanted real-time battles governed by “dice rolls” in the background, like those of my favorite RPG series: The Elder Scrolls. Unlike the first three Elder Scrolls games, however, all attacks will deal at least a minimal amount of damage. Also, I dropped bows and arrows at one point, so there are no ranged physical attacks, but all spells are ranged, including spells from enemy mages. Finally, to compensate for awkward controls and overall difficulty, the player can attack (and move) up to four times per second, whereas enemies attack (or move) only once per second.
So, what about combat-related graphics? Spells and enchanted weapons cause an inverter layer to appear and then disappear, creating a “flash” effect. Physical attacks from enemies aren’t animated, but damage to the player is indicated by a short vibration. Physical attacks from the player generate a white line across the central portion of the screen from one random point to another. I would have enjoyed creating distinct graphical effects for each type of spell and weapon, but didn’t have enough spare memory to justify such an extravagance. As for the appearance of the NPCs themselves, I considered using bitmap files, but transparency would not be supported by such files, so I stuck with drawing primitive shapes, lines, and pixels instead. Again, in order to save memory some visual details were left to the player’s imagination. Nonetheless, I think you’ll agree that, while in active gameplay, the resulting images are sufficient to create an intense gaming experience.
The Player Character
One of the first steps in any RPG is the creation or presentation of a character (or team of characters), sometimes with customization options. PebbleQuest automatically creates a default character for you without any need to choose race, sex, class, skills, or anything else. Because you never actually see your character, you’re free to imagine his or her physical appearance and cultural background however you please. You’re also free to choose which items to equip and which attributes to increase as you level up, thus roleplaying your preferred character type, whether that’s a heavily-armored sorceress, a leather-clad assassin, or a naked axe-wielding barbarian!
To keep things simple, I settled on three primary attributes—Strength, Agility, and Intellect—corresponding to the three major fantasy archetypes of Warrior/Fighter, Thief/Rogue, and Wizard/Mage. Each time you level up, you can increase one attribute.
In a more complex RPG, I would have gone with a wider range of basic attributes, perhaps something like the six attributes of Dungeons & Dragons, the seven “SPECIAL” attributes of the Fallout series, or the eight attributes of the first four Elder Scrolls games. As it is, PebbleQuest‘s attributes and leveling system actually have a lot in common with the latest addition to the Elder Scrolls series: Skyrim.
Like PebbleQuest, Skyrim features a classless system with three major attributes, one of which may be increased each time you level up, although in Skyrim these attributes are (surprisingly) Health, Magicka, and Stamina: the quantities drained when the player takes damage, casts a spell, or swings a weapon, respectively.
PebbleQuest features a Health bar like that seen in Skyrim (and countless other games), but instead of separate Magicka and Stamina bars there is a single Energy bar that diminishes anytime either a spell is cast or weapon swung. Finally, PebbleQuest is also similar to Skyrim (and Oblivion) in that Health and Energy are both automatically replenished over time: no need to find a place to sleep.
While we’re on this topic, I’d like to argue a more general point: Simplification isn’t always bad, nor is increased complexity always good, even in a “hardcore” RPG. Balance between absolute realism and smooth, enjoyable gameplay is crucial in any game. As such, although some fans of the Elder Scrolls series were disappointed by Skyrim‘s departure from the previous class-based, eight-attribute system (among other things), I didn’t mind their abandonment of character classes, which often just end up feeling like a source of arbitrary restrictions, and I found their experiment with a streamlined, skill-based, perk-focused leveling system fascinating and effective. There are definitely some things I would criticize about Skyrim‘s design, but the leveling system and dearth of traditional attributes aren’t among them.
Getting back to PebbleQuest, although characters in this game don’t have skills or perks, they do have the following minor stats, each affected by the primary attributes and sometimes by equipment:
Health Regeneration Rate
Energy Regeneration Rate
Fatigue Rate (energy loss per attack)
Those “Power” and “Defense” stats are undeniably generic, but remember: I had to keep things simple. Rather than a bunch of separate stats along the lines of “Resilience,” “Evasion,” “Armor Rating,” etc., there’s a single “Physical Defense” stat incorporating all of the above. Might sound odd, but with memory this tight, why not? Whether you reduce physical damage through sheer toughness, dodging, or glancing a blow off your armor, it all amounts to the same thing: damage reduction. Similarly, raw power and the ability to effectively time and aim an attack are both factored into “Physical Power.” As for “Magical Power/Defense,” these too are affected not only by Intellect, but also by Agility because dexterous, coordinated movement is involved in the casting, aiming, and dodging of spells.
Perusing the full list of character stats from PebbleQuest‘s main menu will also reveal current experience points, level, depth (how deeply you’ve descended into the dungeon), and two special minor stats:
Spell Absorption (chance to absorb enemy spells as energy)
Backlash Damage (damages enemies when they physically attack you)
These start at zero but may be increased by equipping a robe, shield, or suit of armor infused with the appropriate Pebble of Power. For complete information on the effects of various items, including the seven Pebbles of Power, please refer to the official PebbleQuest page.
To Quest, or Not to Quest: That is the Question
With a name like PebbleQuest, you’d be correct in assuming you’ll embark on a quest: a quest to collect Pebbles of Power, no less! I faced two quandaries on the questing front, however: (1) whether the main quest should feature a complex storyline and diverse locations and (2) whether to include a system of side quests similar to the mission system in SpaceMerc, complete with gold coins earned as rewards that could then be spent at a marketplace. As development progressed, I weighed my priorities and opted for a simple roguelike (or “roguelike-like“) dungeon crawl as the main quest, did away with side quests, and dropped the marketplace idea. Sacrificing such desirable but nonessential elements enabled the inclusion of a wide range of stats, items, enemies, and other basic features that were far more crucial to my creative vision.
To me, the list of critical elements boiled down to the following:
A variety of 3D environments (even if the only “variety” is provided by procedural generation) filled with a variety of enemies.
Equippable weapons, armor, shields, and clothing.
Pebbles of Power that may be equipped to cast spells or infused into other items to imbue them with magical properties. Needless to say, I also hoped these would provide a fun connection to the name of the device on which the game runs!
Beyond those three features, everything else was negotiable, including “questlines” and other forms of storyline. Thus, the only narrative in PebbleQuest, aside from that generated by the player’s own imagination and unique interactions with the game world, is provided by the following text, displayed each time a new character is created:
Evil wizards stole the Elderstone and sundered it, creating a hundred Pebbles of Power. You have entered the wizards’ vast underground lair to recover the Pebbles and save the realm. Welcome, hero, to PebbleQuest!
There are, indeed, exactly 100 Pebbles that may be collected in PebbleQuest, one for each level of depth in the dungeon, meaning you must descend to the maximum depth of 100 to collect every Pebble. This arduous task is rewarded only by a simple congratulatory text:
Congratulations, hero of the realm! You’ve vanquished the evil mages and restored peace and order. Huzzah!
Each Pebble is held by one of 100 mages who constitute the “bosses” of the game and are the only enemies capable of ranged attacks. Oh, and speaking of the number 100, that’s also the player’s level cap.
One final point about questing in PebbleQuest, which also illustrates the impact one design choice can have on another: Because the “main quest” and the game overall ended up being simplistic and somewhat lacking in diversity, I feared players would bore quickly, so I decided to increase intensity by making death permanent (one of the key features of any roguelike), meaning that you must start over from scratch whenever your character dies. This feature would be intolerable in an RPG of grander scope, such as any of the Elder Scrolls, Fallout, or D&D-based titles, but it fits nicely in a simple dungeon crawler like PebbleQuest because the added tension contributes to the pleasure and sense of accomplishment derived from each victorious battle and each level survived and yet there isn’t too much frustration when a character dies because there really isn’t that much to lose nor is there a great, expansive narrative to complete.
All that Glitters…
Though gold coins and commerce didn’t make their way into PebbleQuest, I aspired to make money in the real world through this humble RPG by selling it for a dollar per download. I imagine this may have surprised some people, but, as detailed above, designing and programming this game from scratch required a significant investment of time and energy, so I felt justified in seeking a little remuneration from my fellow fantasy enthusiasts.
As a matter of fact, I initially planned on selling SpaceMerc as well, but for various reasons ended up releasing it for free, just like MazeCrawler, on the official Pebble App Store, which didn’t support paid apps at the time and still doesn’t to this day. Early on, there was some talk from Team Pebble about eventually supporting payments, but this has yet to materialize. For a few months in mid-2014, I actually delayed PebbleQuest‘s development specifically because I didn’t want to release it until it could be sold on the official store. There were a handful of unofficial online stores selling Pebble apps at the time, but I wanted to stick with the official store as much as possible and figured it was only a matter of time before they would announce they were ready. As weeks and months continued to go by without any indication they were working on that feature, I decided I might as well finish up PebbleQuest and sell it through my own website.
Sales started trickling in and I was deeply grateful for each one, but there weren’t nearly as many as I hoped, even with all the newly-gifted Pebbles around Christmastime. I posted links here and there, and my website already had an abundance of Pebble-related content for search engines to pick up, so a lot of Pebblers were checking out my PebbleQuest page, it’s just that precious few were taking the next step of making a purchase. This tale of woe is common in the indie game development world, though, so I was mentally prepared and only slightly disheartened. I also learned a few valuable lessons. For example, I should have provided a free trial version on the Pebble App Store with the option to purchase the full game through my website (or elsewhere). I arrogantly assumed PebbleQuest‘s description would be so appealing to any fellow Pebbler and RPG fan that a demo was unnecessary, but it later became clear that some folks wanted a test run before laying down any money.
In any case, by late February sales had tapered off and Pebble had revealed a new Kickstarter campaign for their next-gen watch, Pebble Time, featuring 64 colors, expanded memory, and other improvements, so I decided it was time to go ahead and provide my now humbler-looking, black-and-white RPG free of charge on the Pebble App Store as well as MyPebbleFaces.com. The code is also open source, as it was from the beginning, so feel free to check it out on GitHub and borrow from it as you make your own Pebble games. I may eventually produce color versions of each of my Pebble games, along with a handful of new Pebble apps and watchfaces, but the bulk of my time is now dedicated to screens larger than 144×168 pixels as I’m in the midst of establishing my own indie game development company: Golden Drake Studios.
The Future of Smartwatch Gaming
What does the future hold for smartwatch gaming? First of all, we can expect a lot more color as the much-anticipated Pebble Time and Apple Watch join the ranks of the already-colorful Android Wear devices. We can also expect casual games to dominate here just as they do in the realm of smartphones and tablets, though semi-hardcore games like PebbleQuest will pop up now and then. Finally, free-to-play will definitely be the norm, but the income potential from freemium games (and perhaps the occasional pay-to-play game) could be significant, as evidenced by the recent appearance of a Finnish game studio devoted entirely to wearable tech: Everywear Games.
In order to get more specific, let’s see what lessons and predictions can be gleaned from the current top seven games on the Pebble App Store:
Pixel Miner: A little miner moves across the screen, digging up pixels and occasionally finding treasure. Pixels can be spent on “Equipment” (jackhammer, goblin team, mutant mole, etc.) for deeper digging as well as “Multipliers” for faster digging. Designed from scratch with the specific characteristics of the Pebble platform in mind (as opposed to most Pebble games, including my own, which involve taking games or game genres from other platforms and saying, “I wonder if I can make something like this for the Pebble!”), I can attest to the satisfaction derived from this game and fully understand why it’s immensely popular. All the real action takes place without any user input, so it only requires occasional attention: perfect for a game that sits on your wrist. There’s also no way to lose, making it completely stress-free. Finally, I love that, in addition to toilet seats, tin cans, boots, and various gems, the miner may also stumble upon such rarities as a Fabergé egg, the Holy Grail, or the Necronomicon. My only complaint is that the game doesn’t display the time, forcing you to exit the game when you want to, you know, use your watch as a watch.
Tiny Bird: Based on the simple, surprisingly popular, somewhat controversial, and now unavailable mobile game Flappy Bird, this game does require constant attention, but it’s still well-suited to the Pebble platform owing to its one-button control scheme. Personally, I hate this game, but a lot of people clearly love it and it’s easy to build, so we should expect many more games of this sort in the years ahead.
Hatchi: A virtual pet for you to occasionally feed, bathe, and otherwise care for, just like the once popular Tamagotchi. An Apple Watch version is also forthcoming. This is another perfect fit for a smartwatch app, but here’s my recommendation: Let’s design some virtual pets with better graphics and more interactivity; in other words, pets that don’t resemble Tamagotchi!
MiniDungeon: A simplistic RPG with random events and turn-based combat. Of all the games on this list, this one comes closest to PebbleQuest in spirit, but they’re worlds apart in terms of gameplay. It’s in first-person perspective, but instead of actively moving through a dungeon, a new scene is generated each minute. Now and then, a new item is found or enemy encountered. Combat is turn-based and employs a simple menu system. I personally don’t enjoy this game, but it’s gotten more “likes” than all of my games combined, so it’s obviously doing something right, and that something is probably this: Much like Pixel Miner and Hatchi, this game doesn’t require constant attention. You can leave it running all day and simply glance down whenever you have a free moment. We can expect to see more casual RPGs of this sort, perhaps including some in the JRPG style with battle screens resembling those of the early Final Fantasy titles.
Mr. Runner: A little man continuously runs forward, except when you press a button telling him to pause, which you’ll want to do whenever something’s about to crash down in front of him. Simple and fun! Many similar games can be found on the Pebble App Store, some of which are slightly more complex such as the “runner” version of the mobile platformer Alice’s Mom’s Rescue. Speaking of which, let that be a lesson to all you smartwatch game developers out there: If you want to make something like Super Mario Bros. while still avoiding the awkwardness of supporting back-and-forth movement, just turn it into a “runner” game. Also, it’s worth noting that some popular Pebble games involve a character continuously jumping or otherwise moving up instead of to the side, including one entitled Mr. Runner UP.
Pebtris: The Pebble version of Tetris, one of the greatest video games of all time. Classic remakes are fun, even when they don’t lend themselves perfectly well to a smartwatch’s limited controls. Other classics worth checking out include Pebloid, Asteroids, Snakey, Rogue, and Chess.
PinyWings: This Tiny Wings port is graphically astounding and an excellent example of a well-polished casual game that stands to make some revenue. It’s free to try a sample level, but to unlock the full game you must make a payment through TinyPay: a “smooth payment service for Pebble apps,” currently in private beta phase. If I ever decide to monetize another smartwatch game, this is probably the model I’ll follow!
So, what’s the takeaway here? Smartwatch games should be simple and intuitive, possibly nostalgic or familiar in some way, and perhaps capable of being left on to be played sporadically throughout the day. You’ll notice that none of the top Pebble games are of the first-person action variety since these will generally fail the “simple and intuitive” criterion. That’s not to say there isn’t a niche market for such games, but they’ll never be as popular as casual games, and that’s understandable given the tiny screen size, limited controls, etc. So, if your heart’s set on crafting an experience similar to your favorite first-person game, be sure to thoughtfully consider various ways the basic concepts behind that game could be adapted to the unique characteristics and typical use cases of your target platform.
For example, say you want to create something like Minecraft. Simply cloning it with a first-person perspective would be interesting, but would also most likely result in awkward, frustrating gameplay that gets old real fast. On the other hand, focusing on the core element of block-building and employing a more small-screen-friendly isometric view could result in simpler, more intuitive, and ultimately more satisfying gameplay, as we now see in Block World!
And why not venture out into unexplored territory? If you ask me, one particularly exciting frontier for smartwatch game development is augmented reality (AR). The popular AR smartphone game Ingress is already being ported to Android Wear devices and clever game designers are sure to come up with similar territory-based games along with completely novel AR ideas specifically suited to wearable tech. Some of these may blur the line between AR and the general gamification of life. Fitness tracking, the primary (or only) function for many wearable devices, is essentially a gamification of exercise and could easily turn into AR just by adding something as simple as a number indicating the distance of an imaginary beast that will devour you if you stop or slow down too much. What other ideas can you come up with to add an extra layer of fun and excitement on top of your daily activities?
Wherever the burgeoning field of smartwatch gaming takes us, I hope it can be said that PebbleQuest and its predecessors, MazeCrawler and SpaceMerc, have contributed to its early development and inspired some of today’s young tech enthusiasts to envision and implement their own app concepts. In other words, I hope I did indeed “make awesome happen” and that I encouraged others to do the same!
SpaceMerc has been available on the Pebble App Store for almost three months now and downloaded—along with its predecessor, MazeCrawler—by well over 2,000 of my fellow Pebblers. It is also, according to my research, the first FPS game ever developed for a smartwatch!
Although this is a modest achievement at best, I can’t deny it makes me happy to think I may have made a small contribution to video game history. In addition, working on SpaceMerc has been valuable for me in terms of software engineering, game development, and game marketing experience, and I can once again attest to the joys and pains of toiling to create something original and then sharing it with the world.
In what follows, I’ll share a few experiences from my time developing SpaceMerc. If you’d prefer to see basic information about the game instead, check out the official SpaceMerc page.
Looking Back: From MazeCrawler to SpaceMerc
Having built MazeCrawler, a few fundamental challenges were already taken care of: (1) effectively portraying a first-person 3D environment on the Pebble’s small black-and-white screen, (2) handling player movement within that environment, (3) reliably saving data to persistent storage, and so forth.
Nonetheless, SpaceMerc presented several new and daunting challenges, including:
Populating the 3D environment with non-player characters (NPCs), handling their behavior, and depicting them graphically at varying depths.
Attempting to make the environment more varied and interesting.
Animating the player’s attack and handling its effects on NPCs and walls.
Designing an effective mission system.
Providing a greater sense of progress over time.
Handling an increased need for narration texts.
Doing all of the above within the Pebble‘s tight memory constraints.
That final challenge was the biggest of all and impacted all the others, so I’ll discuss it first.
I never ran into trouble with memory during MazeCrawler‘s development, but I hit the wall very quickly after moving on to SpaceMerc. Actually, I should say “after moving on to PebbleQuest,” for it was only after realizing my aspirations for that action-RPG were far too bold that I decided to create SpaceMerc as a simpler intermediary in the first place.
Even after settling on what I assumed were achievable design specs for SpaceMerc, I had to scale them way back in order to (a) keep the app itself small enough to fit in one of the Pebble’s eight allotted app slots and (b) prevent the app’s use of dynamic memory and persistent storage from crashing the game at runtime. Naturally, this was frustrating because it meant I couldn’t do everything I wanted to do and feared the gameplay experience might suffer as a result. On the other hand, it also felt liberating: by forcing me to lower my ambitions, it enabled me to reach a stopping point much sooner than I otherwise would have.
George Lucas once said, “A movie is never finished, only abandoned.” The same is true of games and all other creative works, but abandoning one’s work can be excruciating. As such, it’s helpful to be shoved in that direction, whether by financial need, a deadline, technological limitations, or some other consideration. In fact, aren’t we all glad George Lucas was forced to abandon some of his ideas while making the early Star Wars films, and don’t we wish he’d never returned to “improve” them? But now I’m getting off topic.
Another benefit of running into memory limitations was that it gave me an excuse to put on my “serious software engineer” hat and do something I suspected I ought to do anyway: comb through all my code again looking for each and every function, block of code, line of code, and code fragment that could be improved, trimmed down, or removed altogether. This meant cutting out superfluous error-checking, reducing my use of conditionals (“if” statements and the like), being careful about when I used integers versus floating point numbers, shortening string variables, eliminating unnecessary variables, and so forth. Sure, this may not be most people’s idea of a good time, but once you dive in, it’s surprising how much fun it can be. Well, maybe “fun” is the wrong word, but it feels good to have the power to solve problems and improve things.
Anyway, with the issue of memory limitations firmly in mind, let’s move on to the other challenges I mentioned.
Non-Player Characters (NPCs)
The addition of NPCs is one of two crucial differences between this game and MazeCrawler (the other being the player’s ability to shoot). I knew I had to nail this aspect of the game if I wanted anyone to take SpaceMerc seriously, but I also knew I was working with very limited graphical capabilities, not to mention limited memory. I did the best I could and overall I’m fairly pleased with the results.
Obviously, it would’ve been nice to provide a vast array of enemies, each with unique stats, behavior, and graphics, but that wasn’t feasible. In the end, I was satisfied to have seven different enemies, some of which share the same stats or graphical elements, and all of which exhibit the same simplistic behavior: pursue the player, then attack.
I originally wanted to incorporate more behavioral diversity, such as cowardly enemies running away when wounded, and more animations. I also took it for granted that some enemies would be ranged attackers (capable of attacking the player from a distance) and hoped to throw in a few friendly NPCs that weren’t just passive like the humans you’re sent to rescue during “Extricate” missions. In the end, however, I settled for seven simple-looking, simple-minded enemies that only attack at close range, only one of which exhibits any animation (the “Beast,” whose mouth opens and closes), and that appear randomly up to three at a time. [UPDATE: As of version 1.5, gun-wielding enemies are now capable of ranged attacks!] Though less than ideal, I felt this compromise was acceptable given that SpaceMerc is, after all, a smartwatch game and simply cannot approach the level of complexity and visual appeal generally expected of a modern first-person shooter.
As a final note, soon after designing the tall, bulky, intelligent race of aliens known as the Fim, I began to feel there was a resemblance between them and the mysterious grey aliens of Éric Chahi‘s masterpiece: Another World (known as Out of This World in some of its North American incarnations).
The similarity is unintentional (my aliens are block-headed and wear sleeveless shirts simply because I was able to reduce app size by not drawing necks and sleeves), but not unwelcome. I’m an ardent admirer of Chahi’s work and count Another World among my favorite video games of all time. If you’ve never played this action-adventure classic, you’re in luck: its 20th Anniversary Edition is now available not only on PC (Amazon/Steam/GOG.com) and Mac (iTunes/Steam/GOG.com), but also on Android (Amazon/Google Play) and iOS (iTunes) devices, and according to the official website it will soon be available on all the latest gaming consoles as well.
Initially, I had big plans for the 3D game world. I wanted to introduce some new wall textures and lighting effects, perhaps even outdoor locations and an occasional river of water or lava. Sadly, those features were among the first things placed on the chopping block as I started hacking away at my design specs. Variety is the spice of games, but NPC variety seemed far more important to me than environmental variety, so I made some sacrifices in this area. The only significant addition was a “door” graphic depicting the entrance/exit of each mission location.
On a related note, I originally planned on implementing in-game items for recovery of health and ammo (among other things), but elected instead to save space by allowing both health and ammo (actually, “energy” would be a more accurate term) to automatically recover over time.
The Player’s Attack
Pressing the Pebble’s “Select” button causes the player to attack, sending out a laser beam capable of burning through any enemy or wall in its path.
Drawing a simple laser beam and animating it with help from an AppTimer actually wasn’t much of a challenge, nor was it difficult to handle dealing damage to the first enemy or wall hit by said laser, but there was, and still is, one small issue: the player’s attack speed is not constant. Sometimes the gun shoots more rapidly or sluggishly than intended. It seems to be related to the number of walls in the player’s field of view, but, unfortunately, I have yet to find a workable solution to this problem (more on this later).
By the way, as I’ve been alluding to, yes, you can destroy walls in this game. If you want, you can destroy every wall you see (except for boundary walls) just for kicks. This feature was largely inspired by The Elder Scrolls: Arena, the very first Elder Scrolls title, which includes a fun wall-destroying spell called “Passwall.”
Demonstration of “Passwall” in The Elder Scrolls: Arena.
You can also increase your attack power through upgrades, but one thing you cannot do, unfortunately, is switch between different weapons. I do plan on implementing multiple weapons (and spells) in PebbleQuest, however, so you can look forward to that!
Missions are critical to SpaceMerc as they provide context, variety, and a sense of purpose. I was able to fit five (rhyming) mission types into the game: “Retaliate,” “Obliterate,” “Expropriate,” “Extricate,” and “Assassinate.” They differ enough, I hope, in their descriptions, success criteria, and other characteristics that they, along with the procedurally-generated locations and randomly-appearing NPCs, will keep the game feeling fresh and interesting indefinitely.
One mission type I’d really hoped to include was an “Escape” mission that would occur whenever you fell in battle. You would awaken to find yourself in a prison cell, but, since the Fim were unable to remove either your advanced suit of armor or the laser gun affixed to it, you could blast your way to freedom. In the end, this was tossed out in favor of a simple narration: “You fell in battle, but your body was found and resuscitated. Soldier on!”
A sense of progress is crucial to any video game, whether it be through points, leveling, loot-gathering, increasing difficulty, the advancement of a narrative, the opening of new vistas, or whatever else. Having abandoned in-game items, and not wanting to simply tally up points, I provided an “Upgrade” system in SpaceMerc whereby money earned from missions can be spent to improve your stats, presumably by visiting a technician, cyberneticist, doctor, or other relevant expert in your current corner of the galaxy.
SpaceMerc employs a narration system to (1) establish overall context the first time the app is run, (2) describe the goals and potential rewards of each mission, (3) detail the outcome of each mission, and (4) to present “Controls” and “About” information.
At first, I designed the narration system to be animated, revealing letters one at a time, but for the sake of trimming things down I later removed that functionality. I also shortened narration texts as much as I could, freeing up memory at the cost of making mission descriptions rather terse.
Looking Forward: From SpaceMerc to PebbleQuest
I may continue tweaking and improving SpaceMerc from time to time, so please share any feedback you have about the game, especially any changes you’d like to see. Most of my time and attention, however, is now reserved for PebbleQuest: the action-RPG I’ve been working towards since the moment I bought a Pebble watch.
It may be quite a while before PebbleQuest is released because I’m combing through my code yet again looking for even more ways to save memory and squeeze in content. Once complete, my hope is that PebbleQuest will offer even more than SpaceMerc in terms of gameplay variety, character customization, and narrative.
I may also build a turn-based version of PebbleQuest, in addition to (or completely replacing?) the action-RPG version, mainly because that should allow me to include even more content while avoiding the timing issues discussed above, but also because I suspect some Pebblers would actually prefer a turn-based experience.
In addition to sharing any feedback you have about SpaceMerc, please let me know what you’d like to see in PebbleQuest. In particular, would you have a strong preference between real-time and turn-based combat? If you generally prefer action-RPGs, but a turn-based RPG could offer more content, would that change your mind in this instance? Feel free to share all your thoughts and suggestions in the comment section below. And finally, thanks for taking an interest in SpaceMerc and all my indie Pebble games!
Now that it’s actually 2014, I’ve decided it’s time to write up a review of Magic 2014—Duels of the Planeswalkers: the fourth installment in the Duels of the Planeswalkers (DotP) video game series. Developed by Stainless Games and published by Wizards of the Coast, the DotP series has been bringing the beautifully-designed collectible card game Magic: The Gathering to Windows, Xbox 360, and PlayStation 3 since 2010 (2009 on Xbox 360). As an avid Magic fan, I’ve enjoyed each of the DotP titles and was ecstatic when I had the opportunity to test Magic 2012 during my stint as a software test engineer in the Seattle area. Overall, each title has been an improvement on the one that went before, and Magic 2014 is no exception. Here is my review:
The best feature introduced by Magic 2014, in my highly biased opinion, is the fact that it’s available on Android tablets. Magic 2013 was ported to the iPad, but not to Android devices, and I don’t own an iPad. I am, however, the proud owner of an Asus Transformer TF300 and I had long been looking forward to the day when I could play Magic through simple touch commands on that powerful tablet. While lying in bed. Naked. Okay, I guess you didn’t need to hear those last two details. In any case, for the most part I was not disappointed: the touch controls work very nicely and are easy to learn. Plus, they added a wonderful time-saving feature: an “attack with everything” button that sends all your little minions toward your enemy without having to select them one by one (and if you have tons of creatures but only want most of them to attack, you can simply tap “attack with everything” and then tap whichever creatures you want pulled back before tapping the final “attack” button). Overall, I’m quite pleased with the controls and other UI features.
Another excellent new feature is “Sealed Play”: opening virtual booster packs and building your own decks for use online as well as against a series of AI opponents. It’s still very limited, frankly, but it’s a welcome addition because much of the appeal of collectible card games like Magic is the exhilaration of opening new packs and then choosing which cards to include in a deck according to a desired theme or strategy. The main “Campaign” mode of the DotP games hasn’t involved these elements so far, or at least not nearly as much. All the decks involved are pre-built and, although new cards are acquired for a given deck whenever it’s used to win a match and cards can then be added and removed to tailor the deck to a tiny extent, it’s extremely limited compared to the usual experience of deck-building.
Finally, this game possesses the most critical feature common to all DotP titles: the ability to challenge both human and AI opponents with interesting, well-balanced decks. The PC-only game Magic Online provides infinitely more flexibility in terms of card availability and deck-building, but one sometimes feels overwhelmed (or bored…or annoyed…) by the power and time-consuming nature of the combos some players build into their decks (okay, okay…sometimes it’s actually quite impressive and fun to watch them in action, I’ll admit it!), so the sense of balance is often lacking. More annoyingly, some players seem to have acquired their concept of online etiquette from the likes of Malfegor and there is no option to play against AI opponents to avoid this issue. So, although overall I still prefer the freedom and variability afforded by Magic Online, there are times when a quick, balanced game against an AI opponent holds much more appeal for me.
First of all, this game took an extraordinarily long time to download onto my tablet and is currently attempting an equally arduous update. Seriously, it never ends no matter how long I leave my tablet on and downloading: I’ve already stopped and restarted the update a few times because it ends up taking so long I can only assume it’s encountered an error! This issue probably depends greatly on the specifics of your device, the quality of your internet connection, etc., and on PC/consoles I’ve never felt bothered by the size of DotP games, but it is worth mentioning that, on mobile devices, size definitely matters, and smaller is always better.
Not only is the game bulky, it’s also a bit slow and clumsy at times, like a lumbering Hill Giant. Loading screens already linger longer than they should on PC/consoles, but the experience is far worse on a tablet, even one as powerful as my Asus TF300. Once a match begins, gameplay is usually pretty smooth, but not when more than two players are involved, and the transitions between different screens and matches really should be faster. Take heed, oh ye developers of Stainless Games: this is just a card game, not a 3D first-person shooter! It’s okay to tone down the graphics and animations a bit, giving players a smoother experience as they enjoy the brilliant, simple mechanics that made this game a classic.
It’s also worth noting that they could put a little more effort into the storyline associated with the “Campaign” mode. I’m glad they at least have something, and yes, I’ve already claimed that the game ought to be smaller and simpler, but if you’re going to include any sort of story, whether through text or short video clips, at least give it some depth and make it interesting. Brief scenes of Chandra Nalaar leaping around and rambling about a fire-spell scroll and the enemies I’m about to face didn’t do much for me.
Finally, I have a more general complaint. Why make each of the DotP titles so elaborate in terms of graphics and animations, yet so limited in terms of scope, deck-building options, and gameplay options? Of course, the main reason is probably money: the publisher may feel that by continuously producing different-and-slightly-improved-yet-still-highly-limited DotP games each year, they are increasing the odds that their hordes of adoring fans will buy the latest title every year. But listen, Wizards of the Coast: you’ll almost certainly get even more sales if you make each of these titles a little more versatile and expansive. For example, now that “Archenemy” and “Planechase” modes have been available in Magic 2012 and Magic 2013 respectively, why not include these modes in all subsequent DotP titles? And as for deck-building, at the very least I would like to see an option to repeatedly delete any decks I’ve built in “Sealed Play” mode in order to open new booster packs and build new decks. A high degree of freedom and variability is crucial to the long-term success of any game or series of games, in my opinion.
Calling it Magic 2014 when it was actually released in the summer of 2013. This is one of my personal pet peeves: the unfortunately widespread practice of labeling and copyrighting games, books, cars, etc., according to the upcoming year rather than, you know, the actual current year. It’s silly, annoying, and, frankly, a blatant form of dishonesty. If it’s not yet 2014, what right do you have to claim your product is a 2014 product? But this section is titled “The Hilarious,” not “The Irritating,” so I should probably stop ranting.
The Final Verdict: 6/10
I’m tempted to give this game a higher rating, especially since I’m thrilled to finally be dueling Planeswalkers on my Android tablet, but I just can’t justify it given all the drawbacks mentioned above. Still, Magic 2014 is a decent game, certainly deserving of a solid 6/10. Whether you’re new to Magic or have a Black Lotus framed on your wall, I recommend trying out this game along with each of the other titles in the DotP series. It’s available on Android tablets via Amazon and Google Play, on iPad via the iOS App Store, on PC via Steam, on Xbox 360 via Xbox LIVE, and on PS3 via the Sony Entertainment Network.
The Church of Jesus Christ of Latter-day Saints, commonly referred to as the LDS Church or Mormon Church, recently issued a statement entitled “Race and the Priesthood” that discusses and disavows the Church’s previous policy banning black people of African descent (yes, it really was that specific) from holding the priesthood and participating in certain temple ordinances. The ban was lifted in 1978, purportedly because of a new “revelation” on the matter, but this is the first time the Church has issued such a strong and detailed disavowal of that former practice and the racist beliefs that surrounded it. (Incidentally, black women are still banned from holding the priesthood. Of course, this is because all women are banned from holding the priesthood. Naturally, some Mormon women have been pushing for a new “revelation” in this area as well for quite some time, but with little to no success so far.) I find the Church’s statement both accurate and admirable in many respects, and I do not wish to belabor this tired topic, but I do take issue with some of the statement’s claims, particularly this one:
“Today, the Church disavows the theories advanced in the past that black skin is a sign of divine disfavor or curse […].”
Oh? Truly? That is a radical statement indeed, for if it is to be believed then the LDS Church must now disavow several passages from what is arguably its most important scriptural text: the Book of Mormon. For example:
“And he had caused the cursing to come upon them, yea, even a sore cursing, because of their iniquity. For behold, they had hardened their hearts against him, that they had become like unto a flint; wherefore, as they were white, and exceedingly fair and delightsome, that they might not be enticing unto my people the Lord God did cause a skin of blackness to come upon them” (2 Nephi 5:21; emphasis mine).
“And the skins of the Lamanites were dark, according to the mark which was set upon their fathers, which was a curse upon them because of their transgression and their rebellion against their brethren” (Alma 3:6; emphasis mine).
Gee, I wonder where a devout Mormon might get the idea that “black skin is a sign of divine disfavor or curse”? Of course, the Book of Mormon also holds out hope of recovery:
“And their curse was taken from them, and their skin became white like unto the Nephites” (3 Nephi 2:15; emphasis mine).
And thus we see that, just as saying “I’m not a racist” doesn’t make it so (indeed, this phrase often coincides with the reverse), a religious institution stating “Church leaders today unequivocally condemn all racism, past and present, in any form” doesn’t make it so.
Sadly, it’s an inescapable fact that racism—not of the ugliest sort, perhaps, but a form of racism nonetheless—is integral to the storyline of the Book of Mormon. The Bible has its share of racism and other forms of unjustified prejudice, too. As such, condemnation of “all racism, past and present, in any form” requires condemnation of significant portions of the Bible and the Book of Mormon along with countless other books, many of which are otherwise praiseworthy. This isn’t a problem, unless of course you are committed to reverencing some of those books or the people who produced them.
This is why the reverencing of human beings or their words or works is a terribly dangerous business: it often forces you into the uncomfortable position of defending or desperately explaining away ideas or acts that are no longer defensible, if indeed they ever were, in order to maintain reverence for Moses, or Muhammad, or Jesus, or Joseph Smith, or Brigham Young, or whoever else is in question, as someone who was supposedly sometimes a conduit for the infallible word or will of a supreme deity or some other mystical source of knowledge. All human beings are worthy of respect, and some deserve an especially high level of respect as a consequence of extraordinary skill or contribution to society, but none deserve to be reverenced in that manner, and the same goes for anything said, done, or created by a human being. And let’s not kid ourselves: all religious concepts, doctrines, ordinances, practices, texts, buildings, and so forth are created by human beings, not by celestial beings or mystical forces. (If you believe you have convincing evidence to the contrary, the world awaits your profound discovery.) Thus, it shouldn’t surprise us when any religion exhibits or endorses racism, sexism, sexual phobias, and other potential foibles of human psychology. Religions are products of cultural evolution and thus bear, as Darwin once put it in reference to humans as products of biological evolution, “the indelible stamp of [their] lowly origin” (The Descent of Man, ch. 21).
In closing, I invite my readers—especially those of the LDS persuasion—to consider this crucial question: in a church that relies on the claim that its leaders have special access to divine revelation (often including claims of face-to-face dialogue with the likes of, say, Jesus…whose resurrected body is typically described as being remarkably white, by the way), how many times can current leaders say former leaders were wrong on matters of great importance before the claim of special access to divine revelation loses all credibility and starts to seem as meaningless and silly as a man sticking his face into a hat?
I’m pleased to announce that MazeCrawler—a 3D, first-person, maze-navigation game for the Pebble smartwatch (SDK 2.0)—is now complete and available as a free download. Check out the official MazeCrawler page or MyPebbleFaces.com for additional information and to download the game. Happy maze-crawling!
I’ve been following the news about smartwatches and other forms of wearable technology for some time now and find it very encouraging. Several impressive smartwatches are now available, including one that impressed me enough to buy it: the Pebble, which connects to iOS and Android phones via Bluetooth.
I find it to be a fun, helpful, and stylish device, but my primary reason for purchasing it is tied to my interest in game development: as soon as I started reading about the Pebble I felt it would be interesting and educational to create a game or two for this unique platform. Because roleplaying games (RPGs) are my thing, I immediately whipped up design documents for a simple 3D fantasy RPG entitled PebbleQuest along with an even simpler game, MazeCrawler, that is in the final stages of development and will serve as PebbleQuest‘s foundation. [UPDATE: MazeCrawler and PebbleQuest are now both complete, as is the sci-fi first-person shooter SpaceMerc!] Creating the virtual world for these games has entailed building my own simplistic 3D game engine: an onerous task, even given the simplicity of my design and of the Pebble platform itself, but also fascinating and instructive, just as I hoped!
And now, with MazeCrawler nearing completion and many exciting developments on the horizon with the release of Pebble SDK 2.0, I’ve decided it’s time to share my thoughts on the pros and cons of Pebble app development and the Pebble smartwatch in general as well as some comments about my forthcoming game apps.
First of all, virtually everything intended for the Pebble OS must be written in the C programming language. This is undoubtedly a “con” for some, but it’s a “pro” in my book, partly because I’m already familiar with C, but also because I have long admired its simplicity, power, historical significance, and pedagogic value. By modern standards C is a low-level language and is thus far more challenging and error-prone than higher-level languages such as Java and Python, but this facilitates much greater speed and efficiency, and by demanding a high level of care and rigor it encourages programmers to cultivate good coding practices.
If you’re interested in building a Pebble app, but are new to C programming, I recommend Stephen Prata’s C Primer Plus, 5th Edition. For those just looking to deepen their understanding of C or hoping for a quick yet thorough tour of the language, I recommend The C Programming Language, 2nd Edition: the classic work by Brian Kernighan and Dennis Ritchie, both important figures in the history of computer science, the latter being, in fact, the creator of the C language and co-creator of Unix who passed away in 2011 (to far less fanfare than Steve Jobs, sadly, but that is a topic for another time).
The simplicity of the Pebble is itself a positive feature in many ways. For a solo indie game developer like me, the small, black-and-white screen can actually be liberating: high-end graphics and memory-intensive gameplay are off the table from the get-go, so there is no pressure to create anything more than a fun and relatively simple game that can be finished in a short period of time. I also personally find it nostalgic: it reminds me of the early Macintosh computers that provided my first significant exposure to the world of multimedia and software development.
It’s also nice that, for now at least, every Pebble on the planet is virtually identical. There’s no need to worry about variations in processing speed, RAM, screen resolution, etc. This makes testing very straightforward: if your app performs perfectly on one Pebble watch, it should do the same on all of them.
Another positive aspect of Pebble development is the fact that the level of competition in smartwatch app markets isn’t (yet) as intense as that of Android, iOS, and other smartphone markets. There is excellent potential for finding a unique niche and attracting significant attention to your app. Of course, this is primarily due to smartwatch markets being smaller, but they are significant and growing larger by the minute: Pebble alone has already sold over 250,000 watches!
Finally, I’m ecstatic that the newly-released Pebble SDK 2.0 (and associated firmware update) provide several improvements and new capabilities, including:
New development tools that make it quicker and easier to build apps and send them to your watch.
Persistent storage and caching of data. This will make saving game progress much more straightforward!
Improved memory protection and logging of memory usage.
Access to raw, 3-axis accelerometer data (i.e., data about the watch’s movement and tilt). I’m not sure yet whether I’ll incorporate this into MazeCrawler or PebbleQuest, but from a game design perspective this opens up many new possibilities! Perhaps I should also start developing a 2D, top-down, maze-navigation game controlled by wrist movements…
Naturally, there are also a few cons to Pebble app development. Foremost among these, in my mind, is the current lack of a Pebble emulator and certain other more feature-rich, Pebble-specific tools to assist in testing and debugging apps. For my purposes, I’ve often been content to use an in-app text layer to report on the status of variables as the player moves about in MazeCrawler‘s virtual world, and the Pebble SDK also includes a handy logging feature that has been greatly improved in version 2.0, but it would be nice to have even more extensive debugging tools designed specifically for Pebble programs. Of course, there is an abundance of resources for general debugging of C code, but these are of limited use when dealing with issues peculiar to the Pebble environment. Perhaps CloudPebble will eventually expand to include more advanced debugging tools, including an online Pebble emulator?
While we’re on the topic of debugging, I suppose I should acknowledge more fully that, yes, there is one significant drawback to the Pebble’s reliance on the C programming language: even with modern compilers, it is a remarkably error-prone language. Knowing this from the outset, I swore I would never read or write past the end of an array or make any other memory-related mistakes, but it has happened a few times, causing my Pebble to temporarily freeze or immediately restart. One time, I even sent my Pebble into recovery mode! At first, I was concerned that I might inadvertently damage my Pebble, possibly even “bricking” it, but so far none of my misadventures have caused permanent harm (phew!) and the latest version of the Pebble SDK now provides more robust memory protection (again, phew!).
Another minor con: the standard C library is not available in its entirety on Pebble devices. This can be mildly frustrating at times, but at most it simply means a modicum of extra effort or ingenuity is required to complete certain tasks, and once you’ve accepted this fact, you may even find that writing your own ad hoc helper functions is yet another enjoyable challenge…or have I gone completely insane?
As mentioned above, the small screen size and dearth of colors may be viewed as a pro or con depending on one’s taste and the task at hand. True, it makes some things simpler, but if you want certain kinds of visual effects—such as perspective, shading, and clear differentiation of surfaces in a 3D environment—don’t expect a walk in the park. Nonetheless, if you have the requisite patience and didn’t sleep too much during your math classes, you’ll find you can accomplish just about anything with the graphics functions, animations, bitmap layers, etc., provided by the SDK. Furthermore, I’m a firm believer that, so long as the overall experience is great, most people are willing to accept “retro” graphics and allow their imagination to fill in the details.
For game development, it would also be nice to have a few more buttons on the device. The Pebble has one button on its left side, usually reserved as a “Back” button, and three buttons on its right side, generally referred to as the “Up,” “Select,” and “Down” buttons.
This is sufficient for many apps, but for games it’s often desirable to have obvious “Left” and “Right” buttons. One option would be to override the standard behavior of the “Back” button and employ it as a “Left” button, but this would likely frustrate some players as it would make exiting the game more complicated (or even impossible, if the game is poorly programmed). I chose to meet this design challenge a different way: in MazeCrawler‘s first-person 3D environment, the player moves forward and backward by pressing the “Up” and “Down” buttons and turns left and right by double-clicking those same buttons (“Up” for left, “Down” for right). Though not extremely intuitive, it is easy to get used to and is at least slightly intuitive if you play the game while wearing the watch on your left wrist: the watch will then likely be tilted such that the “Up” button is slightly to the left and the “Down” button to the right. Apparently many other developers feel the same way: the vast majority of relevant Pebble games I’ve checked out, including Rogue Watch, Pebblis, Pebloid, Paddle Wars, Droptype, and Asteroids, all follow this same convention of “Up = Left” and “Down = Right”. Of course, now that the new SDK is available, wrist movements may be a viable alternative for some games!
Finally, because I currently reside in Taiwan, I feel compelled to mention my disappointment that the Pebble OS does not yet natively support Chinese characters or any other writing system not based on the Roman alphabet. There are a few apps out there that provide support for additional languages, but those apps are still a little bit buggy and the notifications they produce aren’t as “pretty” as standard Pebble notifications, so I would like to see better options in the near future, preferably provided by the official Pebble team.
MazeCrawler and PebbleQuest
I’ve found working on MazeCrawler to be extremely rewarding. Naturally, there are frustrating moments now and then, as tends to be the case for any software development project, but on the whole I am enjoying the experience, learning a great deal, and gaining increased confidence in my software engineering skills as well as my problem-solving skills more generally. But enough about that: I’d like to offer a little more detail regarding what you can expect from my forthcoming Pebble games.
MazeCrawler will offer an infinite supply of procedurally-generated mazes for the player to navigate, the size (and thus difficulty) of which may be randomized or explicitly chosen. The point of the game will be, first, the simple joy of moving about in its surprisingly immersive 3D environment and, second, to complete as many levels and accrue as many points as possible (with larger mazes awarding more points). That’s pretty much all there is to it!
With PebbleQuest, things will get a lot more interesting. Instead of a mere “maze crawler,” this will be a full-blown “dungeon crawler“: it will offer an endless supply of procedurally-generated levels, much like MazeCrawler, but this time there will be enemies to crush and treasures to claim! There will also be an optional “main quest” storyline with several pre-designed levels, but the game will continue indefinitely even after completion of that quest. In typical fantasy RPG fashion, players will have a variety of weapons, armor, artifacts, and spells at their disposal—many of them customizable according to a feature I’m keeping secret for now—and players may choose how their character develops each time they “level up.” I’m tempted to reveal a few more details, but I think that’s enough for now.
If you’d like to stay up-to-date on the progress of these games, keep your eye on this blog as well as the following social media pages:
And finally, please feel free to leave a comment below. I’m eager to get feedback on my game projects while they’re still in development and I’d also love to hear your thoughts about, and experiences with, Pebble programming.