Galcon Games
Phil Hassey - game dev blog
Phil Hassey as Syndrome
"Look, stores don't sell
costumes like this to just anyone."

Update on the goats

December 31st, 2013

Two weeks ago I heard coyotes outside our house and Nan suggested I go out and check on the goats. I went out and found them huddled together up by their sheds, but I couldn’t see Nibbles. I got a flashlight out and walked around the fence and found her body at the end of their pen. She was cold with a little blood on her. The coyotes had gotten to her while she was defending the herd. This was extremely sad, I dug a hole and buried her the next day. Here’s a picture of her with her one kid Nubbin:

Here’s the last picture we have of Nibbles:

Nan took some swift action and found us a guard dog which she picked up a couple days later. Her name is Daisy and she seems to be working out so far. We never want to lose another goat to coyotes again if we can help it.

A few days later our other doe Lilly came into heat, and since we want to have more kids next year, we took her up to a buck to get bred by Nuada. He’s a pretty impressive Nubian buck. We were worried that after the trauma with Nibbles maybe Lilly wouldn’t be in the mood for love, but turns out that wasn’t the case. Here’s them hanging out.

After being bred, Lilly was pretty gross, so Nan gave her a bath.

Since she was nice and clean now, we let her hang out on the couch with me for an hour!

A few days after that Cuzco got very sick. We think it was a combination of the stress of losing Nibbles and getting a guard dog (he hates dogs) and possibly eating too much fruitcake on Christmas.

We took him to the get and got him some meds that helped him feel better, and we took him inside our basement for a few hours to sit by the fire and watch TV with us. He’s been getting better and better, so that’s nice. Losing two goats in a single week would have been too much.

Since we lost our doe Nibbles and we really wanted to breed a couple does this year, we started looking for another alpine doe to replace her. A brief look on Craigslist didn’t find any does, but we found a really nice looking Alpine-Nubian buck for sale. We weren’t really planning on getting a buck anytime soon, but we decided if we got him and bred him to Nubbin and Petunia (our two kids), that would be great, because it would get us a year further ahead in our efforts to breed Alpine-Nubian goat crosses. We picked him up just a few days ago. We named him Pac-Man.

Anyway, the last two weeks have been pretty crazy with all this goat stuff going on. In the meantime I made a game called the Rustic Classics which are 2-4 player local games. I’ve been re-making these games on and off for many years. One of the games in the collection is called Nibbles, which is what we named Nibbles after. So here’s a link to those if you want to play. The Rustic Classics also includes Pac-Man, of course, which is the name of our new buck.

It was definitely a tough ending of the year for us, but it’s also been the most exciting year we’ve had with goats yet. Here’s to 2014!

-Phil

P.S. If you want to read some of these stories in more detail, just poke around on Pack Goat Central where Nan has posted all this stuff too.

Galcon Legends update and Merry Christmas!

December 20th, 2013

Ahoy there! There’s a new Galcon Legends update available on Steam! If you haven’t checked it out yet, go and get your Steam key. The update makes the win condition require that you have 50% more ships than the bot, and it revises the scoring system to something that might work a bit better. I’ve had to reset the leaderboards and your progress for this to work. As always, I love getting feedback in the forums!

Anyway, a big Merry Christmas to you all! Thanks so much for being amazing backers this year! I’m very excited for next year and what will happen next with Galcon 2!

-Phil

P.S. I’ve made a few retro-style games in the past few months. Check out Turkey Tomahawk Turbo and Capricornicus!

Galcon 2 – Box sets, sound track, and Galcon Legends beta on Steam!

December 7th, 2013

Hi there! We’ve finally got most of the box sets shipped out! So be looking for yours in the mail soon! It’s got some nifty surprises in it, so I’m not going to post any more pictures of it for a few weeks until most people have gotten theirs!

I have, however, uploaded the game goodies including the soundtrack to the website, so you can get those now if you want! Anyone in the $20 or higher tiers gets access to the soundtrack, and anyone in the $100+ tiers gets a few extra things!

In other news, Galcon Legends is now in beta on Steam! You can get your beta key here for Windows, Mac, or Linux. Please leave feedback in the forums, it’s getting near release for this!

-Phil

Lua on Javascript comparison – lua.vm.js, lua.js, lua.js-phil, lua5.1.js, native

December 5th, 2013

So I spent a bit of extra time this week messing with my Lua on Javascript stuff for game jams. Here’s the resulting game Turkey Tomahawk Turbo.

I checked out the following Lua on Javascript implementations: lua.vm.js, lua.js, and lua5.1.js. I also made a fork of lua.js called lua.js-phil.

Here’s the short summary breakdown:

- lua.vm.js: An asm.js (emscripten) port of Lua 5.2. It has slickest web presence, but WORST implementation. It’s crazy buggy and doesn’t work for anything beyond the cool tech demo. If you really like what they have so far, you’ll want to spend a week or so fixing their API so it actually works for non-trivial programs. I never got my game working fully with this due to sporadic runtime errors and other mess.

- lua.js: A script that converts your Lua script to Javascript. The official distribution works great, but it is missing some functions so you’ll may have to modify your program somewhat to work without those functions. (The string formatting and pattern matching is not implemented.)

- lua.js-phil: A fork of lua.js. I added string.format and improved performance by making the following assumptions: you will not use meta-methods (__index, __call) for anything but calling functions / methods. You will not use the math meta-methods (__add, …).

- lua5.1.js: An asm.js (emscripten) port of Lua 5.1. It has a very nice working API that is exactly like the C API, so if you are used to integrating Lua in C, you’ll find it pretty easy to integrate with your Javascript program. It is a build of Lua 5.1, so no missing functions or other quirks.

Here’s the performance data in FPS. For comparison, with Lua running on my Mac, I got 400 FPS.

Chrome 31 Firefox 25 Safari 7 IE 10 Average
lua.js 51 50 20 110 58
lua.js-phil 72 59 32 160 81
lua5.1.js 85 75 4 60 56

So to conclude, lua5.1.js would be my preference, except asm.js code takes a horrible performance hit on Safari, and a non-trivial performance hit on IE. Once all browsers are optimized to work with asm.js code, that would be the best option for sure. Since I was able to modify my game (about 5 lines of code different) to work with those restrictions I mentioned above, I was able to get pretty good performance with my fork of lua.js. The original lua.js is quite good, short of the missing functions.

Lastly, there have been many claims of how “you’ll get near native performance using javascript, especially now that we have asm.js and emscripten” and whatnot. Well, I’m sure in theory that’s great and all. But no matter how I slice it here, I’m getting a 4x+ performance hit by running my games on the web. Still I’m impressed by what I’ve seen and I hope more work goes into getting asm.js support in browsers so we can get nearer to native performance!

-Phil

P.S. You can download the whole mess with build scripts and the various Lua things here.

Turkey Tomahawk Turbo

December 1st, 2013

I’m pleased to announce Turkey Tomahawk Turbo!

I made it for the Charity Game Jam this year!

So check it out Windows or Mac or Linux! And now on the Web!

Have fun!
-Phil

Galcon 2 – beta23 – All rewards ready to ship! Many interface updates.

November 22nd, 2013

Hey, beta23 is available to backers for Windows, Mac, Linux, and Android. iOS builds coming via TestFlight shortly.

I’m VERY excited to announce that we’ve FINALLY gotten ALL the stuff in to begin shipping for all the $100+ tiers! I’ll be sending out surveys via Kickstarter shortly to get your current shipping information so we can get these to you ASAP! Here’s a pic of the mess in our house right now!

And a closeup of the boxes! I can’t for you to see these in person!

I’ve done a HUGE overhaul of how chat works, so it should be much slicker on iOS / Android. The interface now lets you hide chat completely, which is especially useful for phones. I’ve worked on the keyboard appear / disappear stuff, so it should be a better experience on mobile devices. The changes should also make it work better on the desktop too – less interference with box selection. I’ve also overhauled how number keys are handled so that percentage changes are registered more readily. I hope this fixes many of the things people have complained about with the chat system.

I’ve also done a major cleanup on the game settings / options. This resulted in a ton of changes to the user interface code, which I think makes the game work much more consistently given the various options. It’s pretty hard to make the game work when there are some 24 different combinations of how players might select the options to work together.

I’ve also done a fair amount of performance work on the game, so it should actually run more smoothly, especially on mobile devices. I’m now downscaling for phones so that much less memory is used and I made a few other tweaks to increase performance. I’ve also re-worked how the timer tracks frame changes in the game, so there should be less of a stuttering feel when a frame is skipped or delayed.

On the miscellaneous department, I’ve also done some heavy re-working of the touch detection code, so fast swipes should be detected more accurately on mobile devices as well as on the desktop. I’ve also cleaned up the audio engine, so there are now cross-fades between tracks and smooth volume adjustments. I’ve also done a small mountain of fixes to the servers. The lobby should be much less buggy than the last update.

For everyone curious about the progress of Galcon Legends, the game is nearly 100% complete. I was hoping to release it before the holiday season, but I ran out of time. So I’m going to have to put the release off until after the holidays. I did a ton of work on polishing little details in this game, which resulted in many of the improvements you’re seeing listed for Galcon 2 above.

I’ll be hanging out on the servers for a while – so let’s play for a bit!

Thanks!
-Phil

Indie Game Dev: Outsourcing Fitness!

November 21st, 2013

Earlier this year I realized I was a little bit overweight. Here’s a pic from 2002 when I was at the high end of overweight. I never want to look like this again:

So with that in mind, I always am working to fend off the weight gain. A year and some ago, I put myself on a bit of a diet / hiking regime. This worked pretty well until I got really busy with work again and I gained back 10 lbs in a few months. Seeing how I was about to dive into a big project and I was already overweight, I knew I had to do something.

I decided to outsource “thinking about fitness” to BeachBody. I realized one of the problems was, with my focus so directed on my work, I didn’t have any mental strength left to actually make myself get in shape. BeachBody has been doing the home workout video thing for ages, and I have a few friends who have used their products before, so that played a role in my deciding to get into it.

Another big thing was they had just come out with a new series called “Focus T25” which really appealed to me. I had checked out a few of their workouts before, and they often had workouts that varied between 15 minutes and over an hour, so you never knew how much time it was going to take every day. Not cool. T25 is ALWAYS 25 minutes.

BeachBody is really smart with how it gets you to get in shape. So let me break down a few of the things it does, gamification-wise.

- They encourage you to be in an group with a few other people. This helps add a bit of social pressure to the experience and makes you feel less alone. Because, you are alone when you do workouts in your living room. Encouragement is done via their website, and sales. You actually get an extra free DVD if you buy the workout through a “coach” (reseller.) The coach is supposed to get you into a group and encourage you. This worked pretty well. It happened all on Facebook, so that makes sense.

- They include a chart for you to check off daily if you’ve done your workout. This is nice, very “daily challenge oriented.”

- They include a diet plan, but basically they say “1600 cal per day” … I ended up just working out my own meal plan, because most of theirs was too complicated. But the inclusion of the meal plan definitely drives home the importance of keeping with some sort of diet if you want results.

- The characters they chose for the videos (Shaun T, and 4 others) seem to be good picks for bringing the pressure right into your living room. I have a projector set up, so when I do my workouts it’s pretty much like being in a gym with them.

- Every Saturday they have you record your weight. This was great, because it avoids the day-to-day roller coaster of weight fluctuation and gets you looking at the long-term progress. So you don’t get discouraged by any single-day set backs.

- The final challenge is getting through the 10 week program and submitting before and after pics and before and after stats. You get a T-shirt if you do this. Definitely achievement unlocked type stuff here.

So my results were this:

- It took me about 16 weeks to get through the program, I had lots of travel and things going on, so I wasn’t able to just power through it in 10 weeks.

- I dropped 14 lbs over the course of the program.

- I found the whole thing worked well, I just had to track my calorie intake, do my workouts, and I made sure to go outside and hike as often as possible. I probably averaged over 10 miles a week.

- I am no longer overweight.

I’ve been crazy busy the past 5 months but having outsourced the thinking part of getting in shape really worked for me. I’m currently working through the program again to shave off a few more pounds. Here’s the way I look at it. I watch probably 2.5 hours of movie/TV every night. So ~30 minutes a day for 5 days a week is like 2.5 hours. So doing this routine is equal time-wise to ONE night of mindless entertainment. Hardly a heavy price to pay for fitness.

While in some ways, I outsourced my fitness planning to BeachBody, I also learned the key lesson they teach: if you want to get in shape you have to do it yourself.

-Phil

Galcon 2 – beta22 – Major iOS / Android overhaul, progress on Kickstarter rewards

November 9th, 2013

Ahoy there, beta22 has arrived! Check it out for Windows, Mac, Linux, and Android. (iOS TestFlight on the way …)

This build doesn’t have any gameplay changes. What it does have is a whole new audio system on ALL platforms. It also has a completely new backend for iOS and Android. Both, I hope, will work better than before. Please tell me how it goes in the forums.

BUG NOTICE: It appears you can’t chat unless you press the “Chat button” on desktop computers. Will fix for next beta. Yuck!

On the Kickstarter rewards front, some serious progress is being made. In just the past two weeks we’ve gotten in marble bags, ordered more marbles, ordered the manuals, approved the manual proof, ordered boxes from another company, shipped box sleeves to said company, and gotten in boxes full of shipping materials and more boxes. I think once everything is here and we’re about to do the box stuff, I’ll take a big photo of all this junk in a pile! So – thanks again for waiting on all this – I’m pretty sure you’re gonna like the final product.

Thanks!
-Phil

P.S. I’ll be online for a short time today if you want to play!

SDL2 Tips, Tricks, and Workarounds

November 5th, 2013

It only took me about 3 days to get my framework working with all my targets: Windows, Mac, Linux, iOS and Android. I took an extra day to write my own simple mixer for WAV and OGG audio. And there might have been another day in there for other cleanup / fixes. So maybe 1 week total.

You can get SDL2 here. If you’ve used SDL before, you’ll find that it’s pretty similar, only it seems to work better, and now it’s got slick iOS and Android support.

You will want to follow the SDL 1.2 to 2.0 Migration Guide. And then for Android and iOS, read the README-android.txt and README-ios.txt as included in the source zip. I’m just writing up some tips here to help you along the way. I’m writing this with OpenGLES 1.1 in mind.

SDL2 for Windows, Mac, Linux

- Initializing your Window must be done in the right order. Basically, I call SDL_CreateWindow first, then SDL_GL_CreateContext. If SDL_CreateWindow fails with my preferred settings, I chose more fail-safe settings. After setting the mode I use SDL_GetWindowSize and SDL_GetWindowFlags to see if I got what I wanted. If things aren’t quite right, I use SDL_SetWindowFullscreen and SDL_SetWindowSize to try and request them again. (I always go out of fullscreen, set size, (maybe go into fullscreen), then set size again.

- As of SDL 2.0.1, Mac Retina displays do not work consistently. There is a flag for this “SDL_WINDOW_ALLOW_HIGHDPI” but I’ve found that if you ever change mode, or do anything, things seem to fall apart. If you aren’t messing around much, it might just work well enough for you.

- glu doesn’t seem to work anymore. So I had to switch over to using glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP,GL_TRUE); to generate my mipmaps. I examine the glGetString(GL_VERSION)) to make sure it’s >= 1.4 before doing that. And if I’m not on a new enough GL, I just don’t use mipmaps at all.

- Use stb_image to load your images. (I didn’t do that just for SDL2, but it’s a great tip!)

SDL2 for Android

I can’t believe how smoothly this went. (Recall, 2 months for NDK, 1 week for Marmalade .. this port took 1 DAY!!!)

- Follow README.android for the details.

- in AndroidManfiest.xml in the “activity” tag add android:configChanges=”orientation” , keeps your app from crashing. You may use other orientation tags to keep it in a single orientation, or whatever.

- If you use sockets, be sure to add these permissions “android.permission.INTERNET”

- Use SDL_rwops to read your own data files (which you have placed in the “assets” folder of your Android project.)

- If you want to use SDL2_mixer, you may need to edit SDL2_mixer/Android.mk and disable a few things.

- If you are using single touch, your mouse SDL code might work already, otherwise add support for SDL_FINGER* events (and filter out the touch events from your mouse code if (e.motion.which == SDL_TOUCH_MOUSEID) { break; }

- Be sure to call SDL_SetTextInputRect before SDL_StartTextInput if you are using key input. SDL_SetTextInputRect let’s you specify where on the screen the text is appearing so that SDL2 can shift the screen to keep the virtual keyboard from overlapping it.

- On suspend / resume I had to pause my audio.

SDL2 for iOS

- Follow README.ios for the details.

- SDL_SetTextInputRect doesn’t work. So you’ll need to capture UIKeyboardWillShowNotification and shift your screen to keep the virtual keyboard from overlapping it on your own.

- Unlike in Android, the orientation won’t change between portrait and landscape UNLESS you add SDL_WINDOW_RESIZABLE to your SDL_CreateWindow flags.

- Even though I added in SDL_iPhoneSetAnimationCallback, I got crashes when suspending my app. I also had to use SDL_SetEventFilter to capture SDL_APP_WILLENTERBACKGROUND and SDL_APP_DIDENTERFOREGROUND to set a flag to tell my callback to start / stop doing its thing.

Custom Mixer?

You might be able to use SDL2_mixer on all platforms. I did try it out for Android, and got it working pretty easily. However, I decided to write up my own mixer using SDL2 to stream the output. (This ended up only taking a few hours, and it keeps me from having to have SDL2_mixer as an additional dependency on all platforms.)

I used SDL_LoadWAV to load wav files and stb_vorbis to load and stream ogg files.

Good luck!
-Phil

Wits & Wagers Halloween expansion

November 2nd, 2013

Hey,

For Halloween Nan and I (well, mostly Nan, but I did come up with at least a few of the questions) came up with an expansion for the game Wits & Wagers!

You can download the pdf WitsAndWagers-Halloween. Print out page one, flip to back, print out page two. (Double check alignment, the pumpkin question should have the long answer on the back.)

-Phil


Galcon   Watermelons   Dynamite   The Hairy Chestival
All content of imitation pickles (c) 1999-2008 - Phil Hassey  "we care"