Friday, April 28, 2017

The Feedback Button

We want to be able to collect feedback from players, and team members. So I made a tool to make it easy for anyone to send feedback from anywhere in the game:


When the player presses F11 we immediately take a screenshot and make a copy of the log file, and place both in a new, numbered folder.

Then, we show this dialog, and let the player enter some information, including steps to reproduce, if it was a bug, things like that, and an email address in case they want to hear back about the issue.

Then all of that is zipped up and posted to a little server app, which forwards it as an email to me.

Now I... I am not what you might call a web developer, or even really a back-end guy at all. I found this (extremely simple) little app to be a minefield full of potholes.

I'm using Google App Engine to host the server-side code, because I wanted to be able to deploy java without paying anyone a monthly fee. (And well, I didn't think I should run it on the same VM as our perforce server in AWS.) Setting up GAE was interesting. Their tools seem quite good but they offer a dizzying array of products and services and most of their material is oriented towards selling you on particular flavors of compute, storage, etc..

great work team.

In the end I was able to create a little app using the IntelliJ plugin. Once I got it installed correctly, this was a really great way to work. I can iterate locally, run the app on a test server, make rest calls to it from a command line (after I installed curl, which, ok, I am on windows...) and eventually from my game as well.

The first hurdle was to get all the data from the game zipped up, posted, and unzipped. This proved to be surprisingly easy. It really just worked the way it oughtta using the vanilla java api. Nice.

The next hurdle was to put that information into an email, with attachments, so that I could act on the feedback. I at first, very naively, thought this would be easy. Email seems like a cornerstone of the internet, built before the social networks, laid down before the dawn of the search engines. Surely sending an email could be no challenge.



But it turns out, google really doesn't want you to send emails from their servers. And there is a great reason for this, it's a four letter word and when the internet was young, wars were fought over it.

SPAM

It turns out that in the modern era, email is assumed to be spam until proven otherwise, and there are things like "ip reputation" that go into proving otherwise. So yeah, you can pay a third party like mailgun or someone a monthly fee in order to be able to send your emails thankyouverymuch.



After doing some more research, it turns out that if you are sending a small number of emails, and you are willing to send them "from" a restricted set of email addresses that are definitely not official-sounding, then google will let you send 100 emails per day for free.

100 emails. per day.

Whatever good enough for now. (Also the mail api is horrible. Like abysmally bad. A better api would have been a huge benefit of going with someone like mailgun honestly.) So anyway once I got that sorted, getting the app running in the cloud was super easy. The intelliJ plugin took care of it for me. <3

In the end, I got my emails.



I am really excited about being able to take direct feedback like this. I have big plans for this little system. In particular, I get logs and screenshots with no extra effort on the part of the player. Keeping this friction as low as possible is important, if you actually want to get feedback.

Also, since it's coming directly from the game code, I can add all sorts of metadata, like what event the player saw most recently, their game settings, other things like that. In a world where we get many bug reports a day, that kind of structured data can be hugely impactful.

Here are some ideas.

Task Integration

We use trello for backlog and bug tracking. Trello has an api. Each time someone presses the feedback button, we could create a card in trello, in the right board depending on the category, complete with attachments, and assign it to a team member for triage. Hot sauce.

Game Integration
  • Crash reporting: automatically send logs when the game crashes?
  • Event feedback: when you're playing and an event choice comes up, sometimes none of the choices represents what you want. What if you could push a button to suggest a new choice at that point?
  • Upload save games: when reporting a bug, you could choose to upload your save game state so that the developer (me) can see exactly what you're seeing.

Data Analysis

Eventually (when we have y'know, players) we can run the feedback into a database instead of just reporting it to the devs, and then we can start to analyze it. This is far out, but it's a cool possibility.

Thanks for reading, send us your feedback!

Friday, April 21, 2017

Designing Gear for the Modern Hero


Life is about swords and changing clothes. Everything else is an old crofter's dream. What is a crofter? Don't worry, I googled it for ya! A crofter is a person who farms a croft. If you google croft, you get a bunch of fairly compromising pictures of Lara Croft. So.

But the point is: Gear.

Gear is everything characters use and wear in the game.

Currently, gear is somewhat implemented, in that there are items and outfits to equip. What hasn't been clear since forever is how exactly the player can acquire new or upgrade existing gear.

Designing this system and process has been far more difficult than I would have expected. I've never had a part in designing a game before, so that goes with the territory. But I think a lot of blithely ignorant folks like me sort of assume that, okay, at some point, I'll encounter item-get, and that will be nice, and I'll put it on my character-doll, and be pleased because, look, she's wearing a top-hat, hahaha, but. So that doesn't seem tough.

Doesn't that, just like walking into Mordor, not seem tough?


Boromir's right, and by the transitive property of equality I think, that applies to designing gear-get and gear systems. He's also attractive and sensible. Look at him. There's a guy that never loses his head...

Wildermyth, as a general rule, wants to bind as much advancement and game-mechanical power to narrative pathways as possible. We exclude some expected features like research, resources, and crafting (I say expected and I mean we expected to use these sorts of familiar systems), in favor of what we want to call a more character-driven model.

That model is: equipment must improve through the story, rather than alongside it. In other words, everything needs appropriate context! Sorry, chest in the middle of a clearing, full of riches and a mage-masher probably, that for some reason no one else but Bardurk Boldenface has ever bothered to open. We don't think you're very credible.

Who, me? Just hangin' out. One of the barrels.
Oh, I also wanted to make some kind of joke about. Chests. And Lara Croft. But. I'm not that immature.

So while that model of story-supported gear-advancement is fine and simple enough, it means we are trying to ensure that weapons and armor and all the miscellanea heroes collect has a story that is at least implied.

An implied story for a piece of gear can be as simple as, "Well, we got it from finishing combat. I assume one of the dudes we killed was holding or stashing it. It's a good weapon, and I'll use it to kill everything." Most of this is never consciously sifted through by the player, but exists as a subconscious impression in the player's mind.

Every implied story necessarily says something about the morphology of an item and its relevance to the world. For instance, in the case of finding it after combat, we have to believe it was something our enemy valued, or at least thought was worth hanging onto. It can't be so remarkable that it doesn't make sense for it to be drifting around, and nor can it be so ordinary that we're like, okay, so why don't we just mass-produce these, or why don't we pick up every piece of a weapon or armor we find? (By the way, those are perfectly viable concepts we've made a conscious decision to avoid as part of the effort to create more momentous and meaningful gear.)

This may seem trivial, but it becomes important when designing a rationally supportable way for a late-game piece of gear to be more powerful than an early-game piece. Both pieces of gear need their own mystique, so why is the Cloak of Gronn so inferior to Mystral's Weatherlight Cloak?

Sometimes, games get away with explaining this through materials. For instance, an iron to steel to mythril weapon-progression that has no real weight (or rationale!) storywise. This totally works for some games, but it's hard to feel comfortable pulling it off in our world.

This, basically.
All of this is to say that for our model of story-supported gear-advancement to work, we must have a Wildermyth gear design that takes care of these implied stories intrinsically.

We need ways to nest power in the tales a piece of gear might tell, meaning the places it was found or the foes who fear it. And all that needs to happen without relying on huge amounts of text because.

Well, because who's gonna write that stuff, Boromir?

Not Boromir.

Our breakthrough on a uniquely Wildermyth gear design came with a monster-specific upgrade-system we imagined for our weapons.

Our new design, forged in a video-call like every great idea, would let weapons have an implied story and gain power as a single movement, without going to great lengths to explain it all textually. Sounds amazing? I don't know, I designed it and have practically no oversight!

How it works is that when you get a 'weapon upgrade,' you pick three digital cards. You select one and the rest are trashed. Each card has a specific upgrade on it, so one might say "+1 damage against gorgon deer" another might say "+15 stunt chance against thrixl" and the third could be "+10 hit against gorgon deer and gorgon boars".

The player will, theoretically, look at these upgrades seriously as moments of implied narrative, that define a character's legacy, and are born from the character's deeds. The upgrade you choose tells a different story about the weapon, and changes how you'll use it. Players will be encouraged to think of the character wielding it differently, going forward, without being explicitly told to do so.

Now, does it make tons of sense for a weapon to get stronger over time, because of the person using it, and the fights it's been in? Yes and no. No, because that implies that the weapon is a living organism that evolves. The reason it works for us is that Wildermyth is about telling stories. As the weapon gets stronger, we are saying that it is becoming more legendary, and the stories it accrues and the power it gains are reflections of each other, rather than two sides of a  cause-and-effect relationship.

The invention of this system for our weapons then led us to looking at our other large gear-group, Augments, and saying, okay, so why not put a similar activation + effect system in place here? That way, we derive more specific characters as the game goes on; they grow more powerful while also growing more iconic to the player, using the same [+story = +power] equation.

The expected effect is that a player will develop a hero who is excellent at fighting gorgons in the forest, who might not be as strong fighting thrixl underground (importantly, the hero is not un-useful in this latter case, but is simply not operating optimally). The player will then have a reason to train multiple new heroes, with different specialties, who each have their moments to shine in the diverse situations and against the diverse opponents they encounter. Why that's great is we don't need to put caps on advancement in order to encourage squad-diversity, and thus we don't run into the problem of "Welp, there's no point in giving capped-out Sheena any more experience or items. No reason to use her now."

And that's about where we are. These designs are going in as I write this. Or. Well, actually, I'm the one that has to make the specific data for them to be art-able and actionable, so no. In any case, they will be filled out soon. And yes, yes, as the Specter of My Latent Self-Doubt likes to say, a lot could go wrong. But.

It feels we're on the cusp of something. I'm starting to feel that a lot with Wildermyth. That we're reaching the thresholds of who we are as a game, coming into an identity we've sought, but never quite inhabited. And it feels like.

I'm reminded of one of my favorite quotes, by Miles Davis:

"Man, sometimes it takes you a long time to sound like yourself."

We are getting there. Gear is a large part of it. Designing gear for the modern hero, you've got to make sure that stuff fits right. Even Lara seems to be dressing more sensibly these days.

Anyway. If you've learned anything, reading this rambling post, I hope that thing is the meaning of life. It's all swords and clothes-changes.

Wednesday, April 12, 2017

Legacy -> Wildermyth

Wait, Wildermyth? What? I thought your game was called Legacy.

Well, Legacy was always kind of a "working title." It's a common enough word, especially in the world of games, that we always knew we were going to have to change it. And with a submission to an Indie Game Festival coming up (the cool kind of submission where the game doesn't have to be finished yet), now seemed like a good time.

But the thing is, we always thought we were going to fall back to "Yondering Lands Something Something" as the title. I dearly love the phrase Yondering Lands—it evokes ideas of exploration, a dreamscape, uncovering mysteries and creating legends. We kicked names around a little bit,* with a particularly fraught decision to be made between "Yondering Lands" and "The Yondering Lands."

Fun fact: almost all of the video games we own do not have "The" in the title, "The Legend of Zelda" being the notable exception, and that barely counts because everybody just calls it Zelda anyway. Movies however, quite often use "The." Is there a reason for this?...

The whole thing was moot though.

Because we found not one, but two other games currently in development with "Yonder" in the titles, and they were definitely comparable to ours stylistically, being whimsical RPG-types. We didn't want to wade into that particular potentially-legal swamp, so...

It was back to the drawing board. We spent a couple days all throwing potential names out onto a Slack channel and seeing if anything stuck. (I'm not going to tell you them for the same reason you don't tell people the runner-up names for your kids—somebody's going to be like, "Oh I like that other one better" and it's going to be awkward.) Storytelling was a big idea that we wanted to get across, as well as nods to exploration, fantasy and nature. "Wildermyth" ended up being a name that everyone was cool with, and a few googles and domain name checks confirmed that no video game had taken it yet, so we jumped on that.

I like it, I think. We're still planning on having Yondering Lands in a subtitle or tagline. The Yondering Lands is still the actual setting of the game, with Wildermyth being more of a... where the magic comes from? An idea? Another plane? Loremaster Doug is exploring that.

For now, the blog banner and facebook page are updated, and we've got a minimal website up for the submission:

wildermyth.com

So it's official! It'll probably take me a while to stop calling it Legacy in my head, but it feels good to not have that looming on the horizon anymore.


*- Some of the less serious ones were pretty great:

"To Infinity and Beyonder"
"Wild Blue Yondering"
"Duchess of Yonderland: the Sword Sagas"
"The Yonder Years"

Tuesday, April 11, 2017

Evolution of the Comic Format

It took us a while to settle on the comic-style events that you've been seeing posts about lately. And what fun is a development blog if you can't see all the little twists and turns the devs took to get somewhere?

Okay, so, we started out with events being paragraphs of text, followed by stacked buttons naming your choices. This seemed pretty straightforward:


Except you may notice that the dialog box will only look like that if the event is two sentences long. And we found that we couldn't exactly tell the types of stories we wanted in two sentences, because this isn't Twitter.

Unless we wanted walls of text, we were going to have to break things up, pagination style. We thought we were being very fancy by adding a portrait beside the text here:


The paragraphs look a little more manageable, but how do we want to do dialog? We want our heroes to be chatty, and we want you to get a feel for their personalities through how they talk to each other. I started throwing layouts at the wall to see if anything stuck, but I seemed to be getting bogged down in this format:


Aside from not being very flexible, it looked like the heroes were texting each other. Sigh.

Then Crazy-Man Nate comes out with this mockup:


Whoa, just comics? Like... straight up comic panels? Can you DO that in a game like ours? I guess the game already doesn't take itself too seriously, but... this is a pretty big leap. And wouldn't it take a crap-ton of design work? Also the idea of trying to localize it to German made my stomach hurt.

"Don't worry about that. I can take care of that with programming," Nate said.

So then we planned it all out. Nate would build the Comic Lab, complete with... all this stuff. We'd have some abstract-ish backgrounds to choose from, and a bunch of knobs and dials that Doug could use to place the heroes and make them be interesting. And indeed, even if the German translation is ridiculous, the whole thing is built such that text overflowing into an extra panel isn't too awkward.

We kept not only the pagination, but decided to have each click of the mouse bring in the next panel. This creates a really nice pacing effect and keeps the reader from getting too overwhelmed by text and being tempted to skip or skim most of the event.

So then I did a pass to match the comics to our current UI style, and we were here:


Which is, you know. Fine and all. BUT. Big "but"—the interesting thing about these comics is that they'll always fit into a certain size "window." Which means that the dialog holding the comics doesn't need to be scalable. Which means we can get fancy.


Fancier!


Yeah that's more like it.

And that's where we are now. Maybe we'll have more improvements to make, and there are a few unanswered questions about the best way to potentially fit other types of information (quest rewards, leveling up) into this format as well. But it feels really good at the moment. Doug is working his magic and creating events that really bring the heroes to life.

Friday, April 7, 2017

Tutorial Rewrite and Event-Composition

As expected, we are diving into content-production over here in the writer-tub.

Super-interesting shot of supposedly the bottom of the writer-tub. (Unconfirmed)

It's been a delicious distraction getting my hands on the comics tool, pushing and pulling my art and programming family-members/colleagues to give me what I want! Of course, it's all in service to steadying production and providing an unbumpy work-surface on which to write, so I only feel mildly guilty.

<spicily guilty joke>

Because of how visually rich our new format is, and the character-focus it affords us, I find myself writing a lot of dialogue, with very spare moments of exposition. Score!

Pictured: Classic Tim.

In all seriousness, though, it will be an intuitive act, and perhaps a pleasant exercise to massage and mold that balance to achieve purposeful effects and emotions. Certainly there is a time for drawn-back descriptive passages that illuminate atmosphere. The difference now is that that kind of thing can bloom where it finds space to bloom, rather than be forced into each potted event by scene-setting necessity.

The first section we're overhauling, and installing new content in, is the tutorial. The tutorial refers to the first fifteen or so minutes of the game at this point. It will become an optional section in the future, and might contain some lightweight instruction if that feels helpful/necessary.

Thanks to the hard work of Annie and Nate, this has been a quick and lively process, and it's nearing a temporary completion-point (until we inevitably need to rework/rewrite it, down the road). We've got four unique game-initialization events, and follow-up events mostly written, about up to the point where we will take the training wheels off and have the player pursue the main game features (chapters, keystones, blah blah blah, we'll discuss this later).

The point is, we're alive!

 
And that's just wonderful. Thanks, world.