Saturday, January 28, 2012

Progress Report (01/28/2012)


My list of accomplishments may look short, but it's not bad for less than three days of work, right?


Accomplishments:
Known Issues:
  • Something is keeping the human players' characters from performing two Move actions in a row. 
    • The workaround of just trying again still works. It alternates -- works the first time, fails the second, works the third...and then you're out of action points.
    • The bug does not manifest in the Draw Token action. It's specific to Move only.
  • The game gets stuck in the lobby if the host is a spectator rather than a player.
  • Several bugs specific to Join LAN mode:
    • Network latency causes character upgrades to not show up right away.  The client needs to wait for the updated character to return from the server before returning to the team screen.
    • The lobby doesn't turn control over to the player until the host has signaled ready. (I believe this is the exact same bug mentioned above that traps players in the lobby.)
    • Chat messages get lost when switching between the lobby and the team/character configuration screens.
    • When a player drops off, their team data is orphaned.  The server needs to recognize this and place the orphaned team under AI control.

Next Steps:
High Priority:
  • Make the inventory screen customizable to remove unnecessary buttons when using for attacking and defending.
  • Make the Draw Token action deduct action points as specified in the game design document.
  • Draw tokens automatically as part of the team setup
  • Slow down the AI so humans can see what's happening.
  • Add the Draw Token action to the AI logic.
  • Fix the actions menu bugs mentioned above.
  • Create the HUD's event log display.
Medium Priority:
  • Investigate ways to dynamically color the team uniforms.  Experiment on the placeholders.
    • If this works, add the ability to dynamically color MHFont objects too.
  • Add hazards and bonus spaces to the game board.
  • Create the in-game chat component.
    • But first, fix the issue with the lost messages by making the data structure static.
  • Finish the level design guide.
  • Finish asset lists for current set of level designs.
Low Priority:
  • Model the characters.
  • Animate the characters using Shaun Hager's animations.
  • Add sound effects to the actions menu buttons.
  • Add validation to the actions menu so that unavailable actions have a different appearance.
  • Implement the Heal action.
  • Implement the Attack action.
  • Implement destructible containers.
  • Finish the "whose turn" display.
  • Finish voice scripts for narration.
  • Finish the team creation screen.
    • Put in the floor image for the captains to stand on.
    • Replace plain gray buttons with captain character images.
  • Let's see if we can allow the player to change video modes dynamically from the options screen so they don't have to close the program and rerun it to change resolutions.
  • Design the web site.
  • Get coin display graphics from the former art team.
    • Add it to the team configuration screen.the character configuration screen and the recruitment screen.
  • Replace the temporary column header graphic on the character equip screen.
  • Test and troubleshoot the multiplayer modes.

Thursday, January 26, 2012

The Next Iteration of the Inventory Screen

Look!  Power Tokens are now being dispensed by the token generator and showing up in the player's inventory.



That's all I have to say for now.  :)


Wednesday, January 25, 2012

Frequently Asked Questions, Part 1

I've been meaning to start a FAQ for this project for quite some time, but now that some questions have genuinely become "frequently asked", I suppose now is a good time to do it.

Before I begin, I want to remind everyone that several of the most frequently asked questions have already been answered in a previous post titled Chris Taylor's Common Questions, though some of the minor details have changed, at least for the alpha version.

So here we go -- FAQ #1.

General Questions

What kind of game is it?
I categorize it as a turn-based strategy game.  Players taking turns each control a team of units to whom they issue commands that are carried out right away.

Where did you get the idea for this game?
My friends and I used to play a board game called Star Wars: Epic Duels.  It was a super fun, brilliantly designed game whose spirit I wanted to capture in the form of a computer game.  Though there are many differences between Epic Duels and Team Laser Combat, the key difference is that TLC lets you build the team yourself and upgrade your characters' attributes.

Are you going to sell it?
Probably not.  I'll certainly be giving the alpha and beta versions away for free because I'll want as many testers as I can possible get.  After that...well, I guess I'll just have to see how the finished product turns out. If a publisher were to approach me between now and the end of beta, I would certainly entertain the possibility of a publishing deal.

Are you doing this all by yourself?
Pretty much.  I have accepted a little bit of art help from Kristen Miguel, music from Justin Begalka, animation from Shaun Hager, voiceover help from Karina Martin-Moore, game design input from several of my fellow game designers (Ross Story, Dave Fulton, Justin Begalka, Sarah Kemper, and others), but the software design and programming is all me, 100%.

Where's the website?
There isn't one yet, but I assure you that there will be.  I will create the site and then link to it from MichaelJHenson.info in the same way that the CornShark website does now.

Those graphics in the screen shots -- is that really how the game is going to look?
Oh my, no!  Those are just placeholders while I get the code working.  Very little of what you see in the current screen shots is going to be in the final version.  It'll all be replaced with something much more beautiful.

When can we play it?
The target date for alpha release is June 2012.  I will send out a call for testers at that time.  If you're interested in participating in the testing effort (and getting your name in the credits), email me at arachnojava@gmail.com.  I will also be reaching out to my Twitter followers to ask for volunteers, so follow @arachnojava on Twitter to receive updates.

Does anybody actually read this blog?
Yes. You're reading it right now. How do you think these questions become "frequently asked"?  The blog currently has almost 1,300 page views.  That's not a lot given its age, of course, but my own page views aren't counted, so those are all from other people coming to visit.  Honestly, though, the primary purpose of this blog is to serve as a project journal for myself and anyone interested in the project. The fact that it's also a communication channel to potential players is really a fringe benefit.


Gameplay Questions

How does the combat system work?
You move your units around the map by using the Move command.  When your unit has a clear shot at an opponent, you have the option of issuing an Attack command and then choosing a combat token with which to attack.  A notification is sent to your opponent, giving him/her a chance to choose a combat token with a defense value.  The game evaluates the attacker's selected token and character stats, the defender's selected token and character stats, and then tells the players how the attack turned out -- how much damage was done, what factors were used in the calculation, etc.

What's all this talk about "tokens"?
When a player issues an action command on his/her turn, the action depends on resources in the player's inventory.  The resources are in the form of tokens -- small, hexagonal chips that are used up when the player selects them.  There are Combat Tokens which have both attack and defense values and can be used for either purpose, Power Tokens which can only attack or defend but also come with additional effects, Heal Tokens which can be used to restore hit points to units who have taken damage, and Grenade Tokens which can only be used for attacking, do radial damage, have no defensive value, and cannot be blocked.

Will it be multiplayer?
Absolutely.  It was really designed to be multiplayer.  The alpha version is focusing on single player mode, but there is extensive support already in place for LAN-based multiplayer mode.

Can a Trooper be promoted to an Officer?
Not exactly.  You can, however, retire a trooper, sell off their equipment, and use the money to recruit an officer.


Platform Questions

Is it a browser game?  
Not yet, but I would very much like to port it to a browser-based version.  I am not committing to this yet, but I do like the idea.  A feasibility study will be necessary before this decision can be made.

Can you play it on Facebook?
No, because it doesn't yet have a browser-based interface.  See the previous question.

Will there be a mobile version?
Probably not.  On one hand, the mouse-driven interface would translate well to a touch screen.  On the other hand, it would be a significant effort to port the code, and the interface may be too detailed for the small screen.



Monday, January 23, 2012

Token Inventory Screen

The token inventory screen is working beautifully, though it isn't 100% finished yet.  Here it is:

Here's an actual screen shot of the inventory screen in action.

As you can see, it differs a little bit from the mocked-up prototype I posted in my last entry (Designing the Token Display).  But the differences are better, in my opinion.  I like the final design far better than my prototype.

The unit type buttons across the top let you select the character class for whom you'd like to see the inventory. Below that you see the selected unit type and how many Heal Tokens they have.  Next you see a label showing whether offensive or defensive tokens are selected for viewing, along with the buttons that allow the player to make that selection.  Then you have the combat-oriented tokens.  At the bottom is a scrolling marquee that provides information about the token or button that the mouse is currently hovering over.

There are only two things missing:
  1. The token display needs to be decoupled so that it can be used in combat for selecting attacks and defensive moves.
  2. Power Tokens need to be included.  However, the token sources aren't generating them yet, so obviously the display can't show them.  That's a separate task coming soon.


Saturday, January 7, 2012

Designing the Token Display

The combat token system is a fairly complex thing, so it demands a fairly complex user interface...at least by this game's standards.

I've gone back and forth on this design for months, sketching layouts, making changes, considering trade-offs, and refusing to settle until I felt that the design was "just right". Well, I think I have a design that's "just right" now.

Below is a rough mock-up of what I have in mind.

This is what is going to happen when the user clicks the Tokens button on the button bar.

The three buttons at the top will allow the user to choose the unit type for whom he/she wishes to view the inventory of tokens.  For example, if the Captain button is clicked, the captain's tokens will be displayed.

Just below the buttons are the counts of how many Heal Tokens and Grenade Tokens are in this unit type's inventory.  Only Troopers have grenades, so this value should always be 0 for Captains and Officers.

Next is the Combat Tokens area. Regular Combat Tokens are stackable with counters, and will be displayed with their attack values in red, their defense values in blue, and the count in the lower right corner.  The Attack and Defense buttons will cause the tokens to be sorted by their attack and defense values respectively.

Below the Combat Tokens is the Power Tokens area.  If the display is sorted by attack, then only the aggressive Power Tokens will be displayed.  If sorted by defense, then only the defensive tokens will appear.

Right under the Power Tokens is a text area that will marquee-scroll the descriptions of the Power Tokens' effects when the mouse hovers over a Power Token.

So this is my plan. Hopefully by the end of the month we'll see it in action...and see how closely the final product ends up matching this low-fidelity prototype.

Friday, January 6, 2012

Progress Report (01/07/2012)


I haven't done a proper progress report since August, but that doesn't mean there's been no progress.  On the contrary, some great things have happened in that span, which can be seen in other posts that I've made in the meantime.


Accomplishments:
  • Designed a mock-up of the user interface for the token inventory display. (More to come in a follow-up post.)
  • Again investigated the bug with the actions menu, but the problem still remains.  Something is keeping the human players' characters from performing two Move actions back-to-back.  
    • The workaround of just trying again still works. It alternates -- works the first time, fails the second, works the third...and then you're out of action points.
    • The bug does not manifest in the Draw Token action. It's specific to Move only.
  • Fixed the bug where you could move your characters an unlimited number of times as long as you left one character stationary.
  • Completely refactored the engine's network modules to support a non-networked single player mode. (The last eight posts are all about different aspects of this effort.)
  • Created the token sources and token inventory system.
    • Also implemented the Draw Token action. 
    • Combat Tokens, Heal Tokens, and Grenade Tokens have been tested thoroughly and work beautifully.
    • Still need to finish Power Tokens.
Known Issues:
  • Something is keeping the human players' characters from performing two Move actions in a row.  
  • The game gets stuck in the lobby if the host is a spectator rather than a player.
  • Several bugs specific to Join LAN mode:
    • Network latency causes character upgrades to not show up right away.  The client needs to wait for the updated character to return from the server before returning to the team screen.
    • The lobby doesn't turn control over to the player until the host has signaled ready. (I believe this is the exact same bug mentioned above that traps players in the lobby.)
    • Chat messages get lost when switching between the lobby and the team/character configuration screens.
    • When a player drops off, their team data is orphaned.  The server needs to recognize this and place the orphaned team under AI control.

Next Steps:
High Priority:
  • Add Power Tokens to the token factories.
  • Create the token display GUI.
    • AFTER this is done, make Draw Token deduct action points as specified in the game design document.
  • Slow down the AI so humans can see what's happening.
  • Add the Draw Token action to the AI logic.
  • Fix the actions menu bugs mentioned above.
  • Create the HUD's event log display.
Medium Priority:
  • Investigate ways to dynamically color the team uniforms.  Experiment on the placeholders.
    • If this works, add the ability to dynamically color MHFont objects too.
  • Add hazards and bonus spaces to the game board.
  • Create the in-game chat component.
    • But first, fix the issue with the lost messages by making the data structure static.
  • Finish the level design guide.
  • Finish asset lists for current set of level designs.
Low Priority:
  • Model the characters.
  • Animate the characters using Shaun Hager's animations.
  • Add sound effects to the actions menu buttons.
  • Add validation to the actions menu so that unavailable actions have a different appearance.
  • Implement the Heal action.
  • Implement the Attack action.
  • Implement destructible containers.
  • Finish the "whose turn" display.
  • Finish voice scripts for narration.
  • Finish the team creation screen.
    • Put in the floor image for the captains to stand on.
    • Replace plain gray buttons with captain character images.
  • Let's see if we can allow the player to change video modes dynamically from the options screen so they don't have to close the program and rerun it to change resolutions.
  • Make the AI players taunt each other in chat, just for fun.
  • Design the web site.
  • Get coin display graphics from the former art team.
    • Add it to the team configuration screen.the character configuration screen and the recruitment screen.
  • Replace the temporary column header graphic on the character equip screen.
  • Test and troubleshoot the multiplayer modes.

Thursday, January 5, 2012

Progress Already? Really?

© Twentieth Century Fox Film Corporation
Remember that episode of Futurama where Professor Farnsworth was going to build a Smell-O-Scope and then remembered that he had already built one? That happens to Professor Henson (me) too.

I was looking over the code I fixed yesterday and thinking about what was to come next, and I discovered that I had already put in place some code to support the things on yesterday's list.  Specifically...

  • Draw Token action 
    • This is halfway done already. I was working on it the week my son Avery was born -- the whirlwind week that flew by in a blur. It's no surprise that I didn't remember anything else that happened that week; it all paled in comparison to my wife's suffering and my son's first tentative moments as an orthogonal humanoid.
  • Clean up the game UI 
    • The specific problem I had in mind had already been anticipated, fixed, and commented out to simplify troubleshooting. The other issues are of lower priority and can wait for the next "hardening sprint".
I'll probably do a full progress report this weekend. It's been awhile since I've gone all out like that.

Wednesday, January 4, 2012

Four Days Late -- Could Be Worse

The refactoring was a success!  I'm four days past the goal date I set for myself, but that's OK. I've missed deadlines by significantly wider margins than this!

At this point, everything that was working before the refactoring began is working once again.  (Disclaimer: I haven't tested multiplayer mode yet.)  A few things in the interface are a bit clunkier now that I've cut down on the multithreading, but they're functional and it may just be a matter of optimization to smooth them out again.

Once again, everyone is present and accounted for.

So, after this little two-week diversion, what's next on the project plan?  It's a lofty goal, but I would like to accomplish the following tasks in January.  Listed in order of priority:
  1. Token inventory UI
  2. Draw Token action
  3. Event log
  4. Heal action
  5. In-game chat
  6. Clean up the game UI
  7. Fix the old movement bug
Once those are accomplished, I'd like to dive right in to the remaining turn-based parts of the combat system, but that'll be another phase.

May my optimism be warranted!

Tuesday, January 3, 2012

Happy New Year 2012!

Happy New Year...a few days late. :)

I sincerely wanted to post on New Year's Day and say that I had accomplished my goal of having the network code completely refactored by that deadline.  But alas, it was not to be.  I was close -- so very close -- but there were a few bugs hanging around that I couldn't ignore, so I couldn't call it done just yet. My progress reports may occasionally be disappointing, but they're always honest!

Things are in a much better state now, but there is still just one bug remaining.  Let me explain.

The test procedure I used a couple of weeks ago (see Testing the New Client/Server Arrangement) is now completely successful and seems to be reliable. (Five consecutive successful tests!)  So I moved on to the next test, which was like the last one with a couple of modifications:

  • Set up the game with more than one AI opponent.
  • Test all character upgrades.

The results: All character upgrades work correctly 100%, but the additional AI players don't have any characters on their team.

Thus, today's challenge is straightforward: troubleshoot the additional AI players.  Gonna get to that right after a lunch break.

Later!