Skip to content

Hearthstone Play Log – 02/12/2014

So, I’m playing Hearthstone. I’m not very good at it. In fact, I’m not very good at these types of games in general. For as long as I played Magic, I only had a couple of really great decks that could win on a regular basis. So, I want to keep a record of how I’m doing in Hearthstone, to maybe allow myself to improve by actually, y’know, learning from my damn mistakes for once.

So, I unlocked Hunter, Warrior, and Shaman tonight. Hunter only took me one try, I think. I took it down with a Mage. The Warrior, though. Man. What a pain. I got destroyed three or four times before finally taking him out in about 5 turns. It looks like the key there was just attack early and attack often. I may have gotten lucky, though; the AI may have just gotten a bad draw and had nothing but > 5 cost cards in hand. One of my losses ot he warrior was due in part to the Gurubashi Berserker. That thing is just absolutely brutal. It’s high health allows it to attack weaker cards and trigger it’s own ability, boosting it’s attack score. Which is exactly how I got my ass handed to me by a 14/2 Gurubashi Berserker.

After that whole thing, I decided to switch over to the Shaman, which didn’t go much better. He had so many damn minions out by the time I was about to get rolling with my deck that there was no way I could have pulled out a win. After that loss, I figured I’d try the Warrior again, and nailed him to the wall. That confidence rolled into my next battle with the Shaman. It wasn’t an easy fight, but in the end I pulled through thanks to the Hunter’s Steady Shot ability. Being able to do direct damage even with taunts on the field is awesome.

I think I’ll unlock all the decks/characters first, then try building my own custom deck before playing online. I’m always incredibly nervous about trying to play a game like this online. I assume that I’m just bottom of the barrel awful and will be mercilessly mocked for even attempting to play another human being; like I’m not really playing, I’m just sort of bothering them and sucking all the fun out of their game time. That’s sort of how I feel about all random gaming interaction on the web, though, so nothing new there, really. Luckily I have an extraordinarily long list of friends thanks to TVGP. One of these nights I’ll have to make myself available online while other people are also online. I really can’t wait for the Android version of the game so I don’t have to sit at my computer to play.

All in all, I’m having fun with Hearthstone. The game can feel unbalanced at times, like when your opponent has 5 minions, a weapon, and enough mana to use their ability, while you have your thumb up your ass and no minions with taunt to soak up the impending onslaught. I’m sure those will be worked out throughout the beta. But really, an open beta is practically the final game most of the time. I just hope I learn and improve my game. It would be a nice change from the usual “Oh well, I guess I suck and I’m never going to play again” mentality I’ve suffered with for the last few years with other games.

Edit: I also attempted to beat the Druid, but that was just death by 1000 cuts, which appears to be how the Druid deck works.

Edit 2: Just finished off the Druid! I’m on a roll. I think I’m getting a better sense of when to play certain cards, and when to take out minions rather than deal direct damage to the opposing player. This seems to be a fairly nuanced game, and I’m getting an instinct for certain things. Feels good, man.

What I’m Playing Today

Today has been a very light day of gaming for me so far. Considering it’s a work day, and it’s only 3:15, that shouldn’t be much of a surprise.

I kicked off my morning with a bit of Hearthstone. I just installed it yesterday, and didn’t get a chance to load it up until this morning. I enjoy that the game throws you headfirst into a battle. Since I am familiar with Magic: The Gathering, I assumed I already knew how to play Hearthstone. Knowing the basics of M:tG definitely didn’t hurt, but it wasn’t the massive leg-up I was hoping for.

In Hearthstone (at least, in the tutorial so far), you are battling one other player. You start the game with two cards in your hand and a single mana crystal. These act as your resources for playing cards from you hand. At the beginning of every turn, you draw an additional card. You also gain an additional mana crystal every turn, up to a maximum of 10. You use the power of these crystals to play cards from your hand. The power of these crystals is replenished at the beginning of each turn. So far, I find this to be an ideal way of handling resources in (what is essentially) a CCG. It puts every player on an even footing, and allows you to focus on combat strategy and deck building. To put this in M:tG terms, you no longer have to worry about land, or tapping said land, or having the right kinds of land, etc. It makes the whole game much more friendly for beginners.

You have your standard card types: spells, creatures, etc. Each costs a certain amount of mana to play. You can play creatures; they suffer from the familiar “summoning sickness”, and are unable to attack until the turn after they’re played. Some creatures give bonuses to your other creatures, or have other effects that happen when they hit the table. They also have an attack value and a health value. Attack is how much damage they do, and health is how much they can take. Unlike M:tG, creatures cannot block damage meant for you, the player, but they can be attacked directly by your opponents and your opponents’ creatures. This creates interesting choices during the game. Do I eliminate the creature that is giving all of my opponents creatures a +2/+2, or do I deal that damage directly to my opponent?

All in all, I like Hearthstone. The tutorial gently guides you on how to play, rather than beating you over the head with mechanics. It’s a breath of fresh air compared to the tutorials in M:tG 2014. It also feels much more elegant and intuitive than the digitized version of everyone’s favorite CCG. I can see myself becoming thoroughly addicted to it. Now it just needs to come out for Android (or, preferably, Vita).

I also played a bit of Rainbow Moon on the train ride to work this morning. I decided to load this up after becoming frustrated with Final Fantasy Tactics: The War of the Lions. I was playing FFT:WotL yesterday, and made a few mistakes in one of the early battles that cost me 2 characters. I hadn’t saved in about an hour, so I dropped it. Compared to Rainbow Moon, FFT is incredibly slow paced. I found myself wishing that the Vita’s PSP emulator allowed for the speed of games to be manipulated. I need to go in and turn off all the prompts in the options menu next time I play. Maybe that will eliminate some of the battle slowness.

Anyway, Rainbow Moon. This is an interesting beast. I dig the combat. It’s simplified, streamlined, and quite a bit of fun, if a bit repetitive. There are no phases; just a set number of actions that can be taken. You can move, attack, use items, use skills, all in the same turn–if you have enough actions. This gives the game a flexibility that I find incredibly engaging. However, I can’t say I’m all that fond of the open world aspect. It’s designed in such a way that you can’t always tell where you can and can’t go. I’ll see a gap in a line of trees, try to get through it, and find it impassable. Then, I’ll see a suspiciously similar gap somewhere else, and breeze right through it. It’s a bit maddening.

I do love the way the dungeons in the game are designed to loop back on themselves, so you don’t have to backtrack your way through them. It’s like they’re built in such a way, that if you got a bird’s eye image of them, and then took a screenshot, and set it as a repeating desktop background on your computer, it would be a seamlessly repeating pattern on all sides. Plus, it would probably look like an M.C. Escher drawing. Tracking quests and inventory is a bit of a chore, but these are minor issues in an otherwise fun game.

Going against my better judgement, I installed the new Android version of Dungeon Keeper. It’s mechanically sound, and runs really well on my phone. However, the F2P elements are absurd. I can understand maybe a bit of a wait on building a room or structure, but wait times on digging a fuckin’ hole? That’s some unadulterated, EA-level bullshit. I know monetizing mobile games can be a bit rough, but don’t go overboard.

HTML5 Fluxx: Starting

So I’ve been wanting to get back into coding for fun for quite a while now. I’ve had a few game ideas over the years, but none of them seem to work out. I tend to be overly ambitious and burn myself out pretty quickly. So, this time, I’ve decided that instead of trying to create a whole new concept from the ground up, I’m going to digitize one of my favorite existing games: Fluxx, the card game with ever-changing rules!

For those of you who haven’t heard of or played Fluxx, here’s how it goes: Fluxx is a game where the rules and win conditions are constantly in flux. Hence the name, obviously. The basic rules of the game are simple: draw one card, play one card. That’s your whole turn. There are several different types of cards you can play, however:

  • Keepers are played in front of you and are generally used to fulfill goals.
  • Creepers, an offshoot of the Keeper card type, are played the same way, but are played the second you pick them up, and don’t count as your “play” turn. They also prevent you from winning the game unless the current goal specifies otherwise.
  • Goal cards are played in the center of the table, and define how a player can go about winning the game.
  • New Rule cards are also played in the center of the table, and change the basic rules of the game. Some of them are simple, such as Draw 2–instead of drawing a single card at the beginning of your turn, you… draw 2 cards! Obviously. Some New Rules are much more complex, such as the Inflation card. With Inflation on the table, any time a numeral appears on a card, that numeral is increased by 1. So, if Draw 2 and Inflation are both on the table, you draw 3 cards at the beginning of your turn, rather than 2. However, if Draw 2 were named Draw Two, the Inflation rule wouldn’t apply since it uses the word two, not the numeral 2.
  • Actions are played to mix things up. You can do things like get rid of rules, replay something from the discard pile, or steal other players Keepers.

These are just the rules for the basic version of Fluxx. There are countless variations on the base game that incorporate all sorts of different themes and mechanics, but the base rules and core concept behind the game stay the same. You can check out all the variations over at Looney Labs, the site of the company that publishes Fluxx.

I have a lot of really fond memories of Fluxx, from when I was first introduced to it in high school by several of my friends on the speech team. I’ve played a ton of it since then, and would love to have a version I can play no matter where I am. That’s why I’m doing this in HTML5, so I can play it on any device wherever I am. I also really want to see this project through to the end, so I’ve decided I’m going to update this dev blog on a weekly basis to detail my progress (and publicly shame myself for lack thereof).

I first started this past Saturday by cramming all the details of each card in the base Fluxx game into this Google Spreadsheet. Every card has some basic bits to it: a name, a type, and how/when it is to be played. Some go a bit further than that, such as Action, New Rule, and Goal cards, by explaining the exact effect of the card on the playing field. So, I divided all this information up as best I could, into 6 columns: name, type, subtype, how, effect, and special. Most of the columns are self explanatory, but some need a bit of explanation. The name and type are obvious. The how column contains the text on the card that explains how to play the card. The subtype column is something I plan on using in the code for the rules. It’ll make altering the rules a slight less tedious task, once I get to that point in the code. Right now only a handful of New Rule cards have a value for subtype. The current valid values are draw, play, hand_limit, keeper_limit, and bonus. The effect column contains the text that describes the cards effect on the game. The special column contains any further card specific effects beyond the basic effect. So far there are the only values I’ve needed. I’m sure I’ll add to this data set later, but for now this basic info is what I’m using to generate the cards and the deck.

I started out trying to use the Phaser HTML5/Javascript game development library, but quickly found it to be ill-suited to a turn based game. It’s very good for a real time game, but I couldn’t quite wrap my head around exactly how it wanted sprites/graphics to be handled. I wanted to define the graphics, but not necessarily add them to the canvas/stage right away. For example, the Card object I made; I wanted to give it all the properties I thought it needed, including a dynamically generated graphic that displayed all said information. I could not, for the life of me, find a way to make a graphic dynamically, add text to it, and then add it to the canvas/stage at a later point. I did create quite a bit of the basic code while using this library, though, so it wasn’t a total loss. Phaser is definitely an interesting engine, and I greatly admire it’s creator, Richard Davey (aka photonstorm). He did a lot of great work with the Flixel Flash engine, creating one of the best plugins for it, Flixel Power Tools, both of which I used back when  I was a bit more into making grand ideas a reality. Anyway, I managed to convert my spreadsheet into a JSON file that can be loaded in to define the cards to be used for the game. I managed this by exporting the Google doc as a .csv file and running it through a CSV to JSON Converter I found. I feel like, as this goes on, I might be able to eventually allow for different versions of Fluxx to be playable in my… engine? Or whatever the hell I’m coding.

I decided to see if falling back to an old favorite of mine, Flash, would be a good fit. At first, it felt like it might be. It’s more traditionally object oriented than Javascript, which is nice, but the way I develop Flash/AS3 code is super strict thanks to FlashDevelop defaulting to strict debugging. It got a bit annoying having to worry about assigning a type to everything, and making sure displaying objects would work properly. So I started looking for reasons to not build the game in Flash. It was fairly easy. The game would only work on desktop, and all the good libraries for Flash are out of date because it’s dying a slow, sad death. Plus all the strictness that I’m no longer used to would have probably driven me mad every time I went to test it. And then I remembered the few times I had tried to do anything with network communication in Flash and decided I wanted nothing to do with it. This is going to be a learning experience for me, so I’d like to learn something useful, and Flash is no longer useful the same way it was 3-5 years ago. I thought for about a millisecond that doing an AIR/Flex version would be fine, but it wouldn’t. Trying to make a card game in Flex sounds like a headache, and then the game would be a download, not browser based. Not what I wanted at all.

So I thought for a few days and remembered that a coworker had done a version of Frogger using HTML5 and some Javascript library I couldn’t remember the name of. I asked him about it, and he mentioned EaselJS. I took a look at it, and it seemed perfect. It’s basically AS3 for the HTML5 Canvas element via Javascript. Once I got it set up, I fell right back into it. I got to a point where I was able to construct a deck of cards using the JSON file created from my spreadsheet, shuffle it, and display the top card in the deck. Basically, just a little proof of concept to build confidence. Once I did that, I realized that if I really want this to work, I’ll have to really think out the design of the code.

I want the game to be turn-based multiplayer, so I’ll need some sort of server in place to track the state of the game and accept data from each player. This scared me. I’ve never been good at backend development. I did some Googling and discovered SmartFoxServer, which, at least initially, looked like a viable option. However, this thing has a few too many features. I just need some basic server functionality; I don’t need a whole suite of tools to manage tons of instances of the game. At least, not yet. I did some more searching, and came across this thread on reddit talking about HTML5 multiplayer. The majority seems to be suggesting Socket.IO to handle the multiplayer server end of things, so I’m currently investigating how to utilize it in this manner. I have node.js installed, but I’m getting an error when I try to install Socket.IO. Apparently, I need to install Visual Studio 2008 for some stupid compiler bullshit. I guess I’ll have to do that to move forward.

So, I guess I’m making progress? I’d really like to get to a point where the server controls dealing cards from the deck to players. Just have to figure out how to set up the players, and how to connect them all together.

Laravel

So, recently, I’ve been playing around with the Laravel framework in my spare time. It’s been a good opportunity for me to not only brush up on my (ancient) PHP skills, but to learn more about the commonly used model, view, controller pattern. I’ve always considered myself an amateur programmer, but Laravel makes me feel like a fucking genius. It’s really been a revelation to see what I can accomplish with a more robust (and well explained) tool set.

There are quite a few things I like about Laravel:

  1. It’s got great, built-in ORM

    Laravel’s Eloquent ORM completely eliminates the need to write SQL queries. I’m not a DBA; why the fuck should I have to construct a robust SQL query? Eloquent makes it incredibly easy to do that.

  2. The built in templating engine is incredibly robust

    The only other template engine I’ve worked with before is Smarty, and it felt somewhat limiting. Blade seems to have a bit more in the way of logic. Plus, the ability to define default templates and simply focus on the content that will be appearing on an individual view is super liberating. I don’t have to worry about including the header, menu, footer, sidebar, etc. each time I make a new view. I just define a layout that has the necessary components, and off I go. Plus I can have multiple sections that all get displayed where I want them depending on what layout I’m using.

  3. Migrations make me crazy happy

    I just moved my Laravel practice project to a new machine. I was up and coding again in minutes, with the same data set, thanks to migrations. Migrations let you rebuild your database in a flash, with all the base data you need to start working. All it takes is a few commands with Laravel’s Artisan command line tool, and you’re back in business.

I’m sure I’ll keep finding things I’m enjoying about Laravel. I’m hoping to use it for a website/app idea I got not too long ago. I’ll probably post updates about that whole thing here.