When In Doubt, Take The Next Small Step

I remember awhile back some indie devs warned me about post game depression. And well, after finishing up Pixel Blocked!, I experienced it as well. I felt lost for awhile, my sense of purpose was gone. I’d wake up and not know what to do. My finances were in terrible condition and my future was in doubt. Since then I’ve been keeping myself busy by taking little small steps here and there towards different projects.

I’ve started an amazing part-time teaching job at BrainBoost Education. I teach students programming through the process of making their own games. It’s not only a lot of fun seeing kids bring their creations to life, but also extremely rewarding. As my director would say, it’s fuel for the soul. Working again has also brought back a sense of financial stability to my life that I’ve desperately needed. More importantly it’s in a job that I enjoy and allows me to continue pursuing indie game development.

On the indie game development front, I can happily say that I’ve begun working on new and exciting projects of my own again. I have a wall full of ideas and even a long-term game project I feel really passionate about. Stay tuned, good things are coming…

Pixel Blocked! 1st Runner-Up in Dream Build Play 2012

Visit: https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab for the results.

Working on Pixel Blocked! has been an amazing journey… and to have this event be a part of it makes it all that much more meaningful. Pixel Blocked! has and will always be my labour or love. But I couldn’t of done it alone and without help. So thank you to everyone who helped me out. Thank you to everyone who supported me. Thank you to everyone who bought the game. And a special thank you to my friends and family – you made this possible.

What Xbox Live Indie Games Have Meant to Me

Indie Gamer Chick posted an excellent article awhile back asking developers what Xbox Live Indie Games meant to them. I sent in a response I’d like to share here as well:

XBLIG gave me the tools to take my first baby steps into making my childhood dreams of becoming a game developer a reality. It helped me liberate an idea out of my head and onto a digital canvas that I wanted to share with the world. It spoiled me with its excellent XNA framework, a low-cost of entry, and most importantly, access to a close-knit community of supportive developers and gamers. Working on Pixel Blocked! was one of the most fun and stressful times in my life, and I’d like nothing more than to be able to do it all over again.

Read what other developers wrote here.

Pixel Blocked! Windows Press Release

So I just released Pixel Blocked! on Windows PC🙂 I sent out a press release and figured it would also be worth posting here:

Vancouver, July 19th, 2012 – Vancouver based indie developer Daniel Truong announced today that the ultra addicting puzzle game described as “one of the best new puzzle engines to come around in a decade” by Kairi Vice, Indie Gamer ChickPixel Blocked! – is now available for purchase on Windows PCs DRM free for $5USD at pixelblocked.com. Featuring over 180 unique puzzles, Pixel Blocked! is designed to challenge the spatial logic, speed, and critical thinking skills of players of all ages.

The object of this simple yet challenging puzzle game is to fill in the missing blocks in the outlined image. Shoot blocks against an initial foundation to start and advance through increasingly difficult levels. Make sure to plan ahead and watch out for those tricky Magnetic and Crumble Blocks!

For more information about the different blocks and game mechanics, visit:
http://pixelblocked.com/tutorial/

Pixel Blocked! features:
*8-bit inspired puzzle shapes: Over 180 increasingly difficult puzzles.
*3 difficulty levels: Apprentice, Artisan and Master.
*Awardments: Earn up to 200 awardment points for completing various challenges.
*Unlockables: Unlock unique sky backgrounds, original characters and new modes!
*Backgrounds: Discover the 31 new and exciting backgrounds for each puzzle shape.
*Music by Podington Bear: http://podingtonbear.com

What critics say about Pixel Blocked!:
http://pixelblocked.com/reviews/

(Xbox 360) ”The game requires the kind of spatial logic that is both brain bending and satisfying.” – Max Abrams, Kotaku

(Xbox 360) ”A perfect blend of Picross and Tetris, Pixel Blocked! is a fresh and fun puzzler you’ll probably want to press charges against for slaughtering your spare time with its addictive charms” – Ben Taylor, Yet Another Review Site

(Xbox 360) ”The pixilated retro graphics are easy on the eyes, and the addicting puzzle formula can lull you into a zen-like trance, making it a great way to flex your brain without taxing your already short New Year’s Day patience.” – Scott Nichols, Official Xbox Magazine Online

2012 Canadian Video Game Awards Nominee for:
Best Downloadable Game
Best Indie Game
Best Game on the Go

About Daniel Truong:
Daniel Truong is an aspiring indie developer who simply loves making games. He currently teaches programming and enables others to make games at BrainBoost Education. Having worked for industry giants such as Radical Entertainment and Electronic Arts, Daniel decided to go Indie in 2010. Pixel Blocked! started off as a labour of love, and later on became a full time dream. For his first Indie self-developed game, Daniel wanted to create a puzzle game that captured some of the magic of his favourite puzzle games growing up: Tetris, Picross and Quarth.

Creating a PC Executable for XNA 4.0

I’m gearing up to release Pixel Blocked! for the PC. One of the things I’ve been working on the past few days was creating an all-inclusive executable that would install the game and software prerequisites that aren’t already installed on the player’s machine. My problem was that I couldn’t really find one that I liked online. I’m sure other XNA developers feel the same way, so I’m sharing this script I’ve created for Inno Setup that will create an elegant executable for your XNA 4.o games.

I’ve built off of the script edited by David Amador that you can find here. It was made for XNA 3.1, but with a small tweak, I also had it working with XNA 4.o. Although functional, there were a few things I didn’t like about it. When it installs the prerequisites, the UI hangs with the message “Finishing installation…”. On slower computers, this could actually take anywhere from 2-20 minutes, a process that is very misleading to the user. It looks like the installation is frozen. Another issue is that it will always install the XNA framework even if the user already has it installed on their machines. That’s an unnecessary step that slows the installation process.

I’ve made extensive changes to the script (especially the pascal code) so that the installation is more transparent to the user. It’ll tell the user when it’s installing the prerequisites and also show a progress bar as they are installing. The executable is also all-inclusive, so that they don’t have to download and install anything else. It’s a simple setup that will properly check for prerequisite software and only install them if needed.

Without further ado, here’s the code.


; Script generated by the Inno Setup Script Wizard.
; (Then extensively modified by Caliban Darklock.)
; (And yet again modified by David Amador)
; (And again extensively modified by Daniel Truong)
; Now works for XNA 4.0, installation is also more transparent when installing prerequisites.
; Shows progress bar for XNA and DotNet redistributables and skips them if already installed.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

; Enter the name of your game here
#define MyAppName "Pixel Blocked!"
; Enter the name of your game and a version number here
#define MyAppVerName "Pixel Blocked v1.2"

; Enter the name of your company, or just your name
#define MyCompany "Daniel Truong"

; Enter the URL of your website
#define MyAppURL "http://pixelblocked.com/"

; Enter the path to your game project - check Visual Studio properties for the path
#define MyAppLocation "C:\Users\Daniel\Documents\Personal Subversion Repositories\Pixel Blocked\Blocks On A Plane\Blocks On A Plane"

; Enter the name of your game executable
#define MyAppExeName "Pixel Blocked!.exe"

; Enter the location where XNA Game Studio is installed
#define MyGameStudioLocation "C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0"

; Enter the name for the correct version of the XNA Framework MSI
#define XNARedist "xnafx40_redist.msi"

; Enter the location where you have placed the .NET redistributable
#define MyRedistLocation "D:\Game Development Tools"

; Download .NET 4.0 from <a href="http://www.microsoft.com/en-us/download/details.aspx?id=24872">http://www.microsoft.com/en-us/download/details.aspx?id=24872</a>
; enter the name of the executable file here
 #define DotNetSetup "dotNetFx40_Full_x86_x64.exe"

; Once you've filled in all the variables above and downloaded your redist packages,
; everything under this point should JUST WORK for most XNA projects.

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyCompany}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename={#MyAppName} Setup
Compression=lzma
SolidCompression=yes
SetupIconFile = "C:\Users\Daniel\Documents\Personal Subversion Repositories\Pixel Blocked\Blocks On A Plane\Blocks On A Plane\Game.ico"

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
; XNA Framework redistributable
Source: {#MyGameStudioLocation}\Redist\XNA FX Redist\{#XNARedist}; DestDir: {tmp}

; .NET redistributables
Source: {#MyRedistLocation}\{#DotNetSetup}; DestDir: {tmp}

; The game itself
Source: {#MyAppLocation}\bin\x86\Release\{#MyAppExeName}; DestDir: {app}; Flags: ignoreversion
Source: {#MyAppLocation}\bin\x86\Release\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon

[Run]
Filename: {tmp}\{#DotNetSetup}; Flags: skipifdoesntexist; StatusMsg: "Installing required component: .NET Framework 4.0 Client."; Parameters: "/norestart /passive"; Check: CheckNetFramework
Filename: msiexec.exe; StatusMsg: "Installing required component: XNA Framework Redistributable 4.0 Refresh."; Parameters: "/qb /i ""{tmp}\{#XNARedist}"; Check: CheckXNAFramework
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent

[Code]
function IsDotNetDetected: boolean;
var
    key: string;
    install: cardinal;
    success: boolean;

begin
    WizardForm.StatusLabel.Caption := 'Checking for .Net Framework 4.0 Client.';
    key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client';
    success := RegQueryDWordValue(HKLM, key, 'Install', install);
    result := success and (install = 1);
end;
function CheckNetFramework: boolean;
begin
    if IsDotNetDetected then begin
        WizardForm.StatusLabel.Caption := '.Net Framework 4.0 Client detected.';
    end;
    result := not IsDotNetDetected;
end;

function IsXNAFrameworkDetected: Boolean;
var
    key: string;
    install: cardinal;
    success: boolean;

begin
    WizardForm.StatusLabel.Caption := 'Checking for XNA Framework Redistributable 4.0 Refresh.';
    if IsWin64 then begin
        key := 'SOFTWARE\Wow6432Node\Microsoft\XNA\Framework\v4.0';
    end else begin
        key := 'SOFTWARE\Microsoft\XNA\Framework\v4.0';
    end;
    success := RegQueryDWordValue(HKLM, key, 'Installed', install);
    result := success and (install = 1);
end;

function CheckXNAFramework: boolean;
begin
    if IsXNAFrameworkDetected then begin
        WizardForm.StatusLabel.Caption := 'XNA Framework Redistributable 4.0 Refresh detected.';
    end;
    result := not IsXNAFrameworkDetected;
end;

Steps to get it working:

  1. Download and install Inno Setup.
  2. Download the .NET redistributable.
  3. Copy and paste the code above into an Inno Setup script file.
  4. Replace all #define constants with your own values.
  5. Compile and enjoy!

Adding Value

This update also includes a lot of additions that don’t directly affect gameplay. However, these changes add a tremendous amount of value to the game by increasing replayability and enjoyment for players. They were also a ton of fun for me to think up and implement.

Awardments

Try to earn all 200 points!
They pop up in-game when you accomplish them.

Awardments are my attempt at mimicking the addictive nature of Achievements. Unfortunately, as with all Xbox Indie Games, these aren’t real Xbox Achievements. They won’t add points to your gamer score and they won’t show up on your profile. However, they do provide an in-game acknowledgement of the things you accomplish and help to guide the players who want to accomplish everything the game has to offer. If my game were an Xbox Arcade game, these would be the Achievements I’d have. They’re for the overachievers🙂

Unlockables

O RLY?
YA RLY!

For the players for whom a simple acknowledgement of an awardment simply isn’t enough, I’ve also added tangible rewards players can strive for. These range from different sky backgrounds, new player skins and unique modes, such as having only unusual flying objects in the sky. They’re a lot of fun and add a nice visual change to the game.

Backgrounds

Jump Kick Dude kicking a shark and a helicopter! What more could you possibly want?🙂

One of my favourite additions in this update is the backgrounds. I received a lot of positive feedback when I initially drew two different backgrounds. As a consequence, it really encouraged me to explore my artistic side and to step outside of my comfort zone. I experimented with different styles, studied other pixel art, and developed a new skill that I now feel more competent in. In total, there are 31 different backgrounds. While some backgrounds are personal, others are imbued with my sense of humour, and then there are a few in particular which were drawn for plain fun. They add a nice visual incentive for players to keep playing. I hope you’ll enjoy them as much as I enjoyed making them.

With the addition of Awardments, Unlockables and Backgrounds, it really feels like it levitates Pixel Blocked! to a new level of production values. When I look at Pixel Blocked!, it seems much more complete now: something comparable to a product of a small studio, and not just the work of one person.

Reworking the Reward System

One of the most misunderstood design choices I made as a designer was with the reward system. The audience and I misunderstood its use and implementation, as I used a 3-star reward system without really thinking about how and why it works in other games. This update replaces the reward system with a 2-medal performance rating system that makes a lot more sense.

Before: 3-Star Reward System

In the above picture, the game rewarded you a star for completing the level, a star for not using a missile and a star for beating the target time. The problem here is that the 3-star reward system is based on 3 different aspects of performance, and that the system is completely binary, meaning that if you don’t reach the target times or missiles, you are not rewarded at all.

This issue is amplified even more when rated on your performance on time. Here, beating the time would be the equivalent of earning a Gold medal in the new reward system. However, without a tiered rating system, most people, on their first try, will see their time in comparison to the ‘Gold’ time and deem it impossible to achieve.

Most successful implementations of 3-star reward systems can actually be replaced with a single bronze, silver, and gold medal system (1-star, 2-star, 3-star). It’s not binary, and earning stars is based on tiered performance, meaning that the better you do, the more stars you get. In those cases, one aspect of performance is rated. An obvious example that comes to mind is that of Angry Birds. You get more stars based on your total score. It could also be replaced with a single medal, but that’s probably a little less interesting to the player.

After: 2-Medal Reward System

One of the reasons why the ‘Times’ seemed impossible to many players was that there was no in-game tool for determining what the most optimal solutions were. With the removal of missiles, I decided to add in a “Moves” counter, and reward medals based on the least number of moves used and the fastest time completed.

Adding in the medal for performance based on number moves helps the player understand if they have an optimal solution. With a tiered reward system, they can see where their solution ranks in terms of bronze, silver and gold. This helps players achieve the best time, as they now have a target time to work harder for. It no longer seems impossible, and the game also teases you by telling you how much more effort you need to put in to get to that next medal. The above picture tells the player that the puzzle can be solved in 16 moves, which will help shave off those valuable seconds when trying to get Gold time.

This 2-medal reward system works better in Pixel Blocked!, because it gives players a better understanding of their performance and increases replay value without the frustration of the previous 3-star reward system.

First major change: The Removal of Missiles

The first and biggest change I made in this update is the removal of missiles. It’s a big change that propagates itself throughout the entire experience. Once this change was implemented, the rest of the design changes flowed naturally from there.

Before: With Missiles 

This is one of the first levels where you really have to think before placing a block. In the picture above, the player has placed a block that has now blocked him/her from filling in the last space. Now with missiles, this is solved by destroying the offending block, and filling in the rest of the spaces.

Now I’ve mentioned before that all puzzles are solvable without using a single missile. So they aren’t necessary to any solution; in fact, the game frowns upon the use of missiles. However, there will be players who will use this tool simply because it’s there. Thus my two main reasons for taking missiles out of the game: the first reason is that they can be used to make the whole game a breeze, and the second reason is that it encourages a haphazard placement of blocks, since the player knows that his/her mistakes can be easily corrected with missiles.

After: Without Missiles

Aside from the visual changes in the figure above, here, the player is stuck in the very same situation as before except that now, they can’t rely on the use of missiles. The concept and implementation of missiles no longer exists.

Instead, the game now tells you that you’ve been “Pixel Blocked!” when you find yourself in this predicament and highlights the space that can no longer be filled. This mechanic allows the player to identify the misplaced blocks and hopefully learn from the mistake.  The removal of missiles not only enhances the flow of the puzzle, but it also encourages thoughtful placements of each block, allowing the player to have that very satisfying ‘aha’ moment when they finally figure out the solution to each puzzle.

Designer Intent Versus Player Response

Before I get into the nitty-gritty details of all the changes, I want to talk about why these changes have been necessary.

In every designer’s head is an idea for an amazing game. The struggle is trying to properly convey that idea through making smart design choices, researching the tech you’ll be using, laying out the groundwork, and cooperating with the game as it takes its own direction, and most importantly, trying to stay in control at the same time. This is the process of executing on the idea, and in a lot of ways, it’s more important than the actual idea itself.

However, there are times when even after all that work, your idea doesn’t come out unscathed. I like to think of this as a discrepancy between designer intent and player response. I was able to experience this first hand when Pixel Blocked! debuted for XBLIG and the reviews started pouring in. Pixel Blocked! received quite a few positive responses which you can check out here. What really struck me were the positive-criticisms and the negative reviews. I find these more interesting because a lot of the criticisms offered feedback about the design decisions that I had made. It was clear that those decisions weren’t properly conveying Pixel Blocked! the way I had intended, and that’s when I noticed the discrepancy between my intent and the public response .

The original release of Pixel Blocked! contained a lot of design choices that came about according to the way I play games. With my obsessive compulsive nature to want to collect every star in games that I play (even when there is no reward for doing so other than the sheer personal satisfaction of knowing you accomplished something), I made decisions that catered to gamers like myself. As a result, my intent was lost in some of these poor design choices I made.

For example, I wanted people to solve puzzles without using missiles. My incentive for them to do so was to reward a star. As a result, this design choice divided two types of players: the ones who wanted the star and the ones who didn’t care for it. The ones who didn’t care about earning stars played a different game than the one I intended. I saw these players breeze through the game, and then complain about the lack of challenge. Of course, that isn’t their fault; it’s mine as a designer. I didn’t properly convey the challenge to them.

Another example is that my intent with the difficult completion times was to have players find optimal solutions, and follow that up by using muscle memory to achieve better times. Instead, what I saw was frustration at what players thought were insane completion times. That’s because my game, at the time, didn’t properly convey the idea of finding optimal solutions. Because my intent wasn’t very clear, players responded with frustration.

Being that Pixel Blocked! is my baby, I knew that I would need to put more time and effort into the game so that other gamers could see the game as I see it and play it the way I intend for it to be played (or get as close as possible). That’s what this update addresses: it brings Pixel Blocked! closer to my ideal vision of the game and eliminates the discrepancy between designer intent and player response.

Let’s Talk Change

Pixel Blocked! is being updated. Over the next few posts I’ll be trying to document the numerous changes that have gone into making Pixel Blocked! a better game since its initial release on XBLIG. I don’t want to be too wordy so I’ll try to let the pictures do all the talking.

caught me thinking