Tuesday, May 15, 2012

Combat Results Screen

I'm trying hard to catch up to the project timeline, and though I'm making some decent progress, I'm not there yet.  Tonight I implemented the Combat Summary screen, though it's not 100% finished yet.

Specifically, the things that are not finished are:
  • The "Close" and "Don't Show Again" buttons are still missing.
  • The Power Token descriptions are not yet being populated.
  • The Combat Results toggle is currently being ignored.
Once these things are finished, then Requirements 2.3, 2.4, and 2.5 will be complete.  Aside from these, the screen is working beautifully! Here are two examples:





Sunday, May 13, 2012

Timeline Threatened!

I have no more time today to work on TLC. I must stop and get back to my job.  I made some progress and did some testing, but the milestone has not yet been reached.

This unavoidably impacts the timeline by eating into the Milestone 3 budget.  My only hope is to get through my work as quickly as I can this week so I can spend as much time as possible on the completion of Milestone 2...and, of course, the subsequent start on Milestone 3.

Here's a status report of all Milestone 2 requirements as I'm leaving them today.

Milestone 2: Combat Resolution

Requirement ID Description Status
2.1 When a unit is attacked, the system shall notify the player controlling the unit by presenting a Defend UI which allows selection of a defensive combat token from the player’s inventory. Complete
2.2 The game server shall resolve combat interactions by evaluating the stats of the characters and their selected combat tokens and updating the data model accordingly. Complete
2.2.1 The combat evaluator shall process Combat Tokens for their basic attack and defense values. Complete
2.2.2 The combat evaluator shall process the Vampire Power Token | If the attack does damage, the attacker heals one hit point per unit of damage dealt. Test inconclusive
2.2.3 The combat evaluator shall process the Lucky Shot Power Token | If the attack does damage, the damage amount is doubled. Complete
2.2.4 The combat evaluator shall process the Desperation Power Token | The attack value is normally 4, but if the attacker is the only remaining member of the team, then the attack value is 10. Untested
2.2.5 The combat evaluator shall process the Blaze of Glory Power Token | If the attack does damage, the damage amount is doubled, but if the attack is blocked, the attacker takes 5 points of damage. Complete
2.2.6 The combat evaluator shall process the Reflection Power Token | Any attack, regardless of power, is reflected back at the attacker. The defender takes no damage. Test inconclusive
2.2.7 The combat evaluator shall process the Resolve Power Token | Defense value goes up as the character health goes down. DF = maxHP - currentHP Complete
2.2.8 The combat evaluator shall process the Lucky Break Power Token | If the attack is blocked, any excess defense points are converted to health points for your unit. Test inconclusive
2.2.9 The combat evaluator shall process the Shatter and Scatter Power Token | If the attack is blocked, each member of the attacking team takes two points of damage. Test inconclusive
2.2.10 The combat evaluator shall process Grenade Tokens | The attack functions like a Combat Token but cannot be blocked, has no defense value, and does two points of damage to all characters or containers within a two-meter radius of the primary target. Complete
2.3 The game server shall broadcast a summary of combat results to all connected players. In progress
2.4 The system shall provide a Combat Results toggle that allows players to opt out of seeing the detailed combat summaries at the conclusion of each combat interaction. In progress
2.5 The user interface shall display a combat summary screen when combat results are received from the game server IFF the Combat Results option is turned on. Designed; not implemented
2.6 The system shall provide an Auto Defense option that players may activate if they would rather have the game select their tokens for them automatically when their units are attacked. Test failed
2.7 The system shall display an event log on the HUD which records the actions taken by all units in the game. Complete
2.8 AI players shall be able to defend against attacks subject to the same rules as the human players. Complete

Milestone 2 Target is Today

My fears may be coming true. Today was the target completion date for Milestone 2 and I didn't quite make it. The day's not over, but I also have a considerable task list of things to do for my job today, so I'm going to work on Milestone 2 this afternoon and see how far I can get before switching over to work-related tasks this evening.  It was, in fact, my oppressive work load that has keep me from progressing on Team Laser Combat in these last two weeks, so I desperately need to catch up to the project timeline.

There was a huge breakthrough this morning, however.  I spent all day yesterday working on a series of horrible bugs that seemed invincible.  From the time I woke up until the time I went back to bed, it was nothing but troubleshooting (intermixed with taking care of my baby son, of course).  But this morning, I had an epiphany that included multiple solutions to multiple bugs.  I tried the ideas, and they worked on the first try!

Details will follow in the next official progress report, after I get a chance to try my hand at those last remaining requirements in Milestone 2.


Friday, May 4, 2012

Grenades Work!

I'm having a teeny tiny little celebration here because I now have proof that GRENADES WORK!

Look at the screen shot below.  The Blue Team was lucky enough to have a grenade in the troopers' inventory from the initial token draw before the match began.  The Pink Team had not yet moved, so all of their members were standing together in a group.  Trooper Lucien had a clear shot at them, so he launched a grenade over there and voila!  All Pink Team members took damage!

One attack by Trooper Lucien of the Blue Team damaged every member of the Pink Team. Grenades FTW!



Saturday, April 28, 2012

Progress Report (04/28/2012)

First, happy birthday to my dear friend Genny! I'm sorry I can't celebrate with you, GM, but my love and best wishes are with you nonetheless. Have a good one!

OK, getting down to business: This entire week was sort of a micro-sabbattical/vacation to take a break from my job and other responsibilities so I could spend some time relaxing and some time focusing on my capstone. Both of those efforts were mostly successful.

The vacation aspect of this week involved exploring the American southwest in New Mexico and Arizona. I finally visited Roswell, enjoyed a lot of parks, trails, caves, and historical sites, and got to experience all kinds of great new things. As a game designer, I feel that it's vital to have a variety of real-life experiences because every single one of them has the potential to someday contribute to the design of a compelling player experience.

The sabbatical aspect involved making some tremendous progress on Milestone 2. My laptop makes my work portable, so I took advantage of the travel time in the car and quiet evenings in hotels and campgrounds to concentrate on one task at a time. Check this out:


Accomplishments:
  • Implemented Combat Tokens
    • Includes functionality for attack and defense.
    • Is usable by humans and AI alike.
  • Implemented Grenade Tokens
    • The human troopers use them perfectly.  
    • Has not yet been tested for AI troopers.
  • Implemented Power Tokens
    • All eight power tokens are now supported, but very little testing has taken place yet.
  • Fought violently with an issue where the character objects are being accidentally duplicated somewhere so that the unit being used by the player (AI or human) and the unit on the server were two separate objects.  This problem has not yet been resolved.




Known Issues:
  • Several intermittent bugs with taking turns, but all seem to be related to the same root cause -- the bug where character object references are somehow diverging onto different objects.
    • Symptoms:
      • Units sometimes do not get their action points reduced when performing actions.
      • Drawn tokens may end up in the captain's inventory no matter who drew them.
    • Proposed fix:
      • Reacquire the reference to character object on each iteration through the AI loop and on each "advance" of the actions menu.
  • Sometimes Client 0, the default name of the first network connection, appears as a player on the Lobby screen.
  • 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:
  • Broadcast combat results from the server.
  • Display the Combat Results Summary screen. 
  • Implement the Combat Results toggle.
  • Fix the character reference bug listed above.
Medium Priority:
  • Implement destructible containers.
  • Add hazards and bonus spaces to the game board.
  • Fix the broken map editor. 
  • Record gameplay video.
  • Write preliminary postmortem (capstone edition).
Low 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.
  • Finish the level design guide.
  • Finish asset lists for current set of level designs.
  • Create the in-game chat component.
    • But first, fix the issue with the lost messages by making the data structure static.
  • Model the characters.
  • Animate the characters using Shaun Hager's animations.
  • Add sound effects to the actions menu buttons.
  • Implement the Heal action.
  • 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.

Friday, April 20, 2012

Redefining Milestone 2, Phase 2

I have made a decision regarding the missing requirements that I explained in my last post. Implementation of the Heal Action will be postponed until the relevant Milestone 3 requirements have been implemented and verified, and the Grenade Token functionality will be incorporated into Milestone 2, Phase 2, which I am currently working on. Grenade Tokens have been assigned their own requirement statement as follows:
Requirement 2.2.10: The combat evaluator shall process Grenade Tokens | The Grenade Token cannot be blocked, has no defense value (can only be used for attacking), and does two points of damage to all characters or containers within a two-meter radius of the target object. 
 So Milestone 2, Phase 2 is now defined like this:
  • Phase 2:  Combat using basic Combat Tokens.
    • Requirements 2.2, 2.2.1, and 2.2.10

Monday, April 16, 2012

Missing Requirements?

Today I was doing some requirements verification by looking over the game design document to make sure that my Milestone requirements are actually correct.  From the perspective of my capstone, they have to be because they've been incorporated into a binding contract with DePaul University, but that doesn't necessarily mean that they're properly aligned with the game's design.

Thankfully, all of the requirements that I included are indeed correct.  But there is a potential problem: I may have omitted two requirements that maybe should have been specified:  Grenades and the Heal action.  So the question is this: Do I write them in anyway even though they're not part of my independent study agreement, giving myself extra work to do before the deadline and possibly, hypocritically, exposing myself to further scope creep?  Or do I hold off until the capstone phase is over and throw them in later?  I love and hate both choices.

Grenade Tokens

Trooper units may have Grenade Tokens in their inventory that they can use during an attack.  These are played like normal Combat Tokens, but have special rules for how they affect the defending side.  (Specifically, that they do area damage and can't be blocked by the defender.)  The implementation of Grenade Tokens was omitted from Requirement 2.2, but it definitely belongs there.

Healing

The Heal action on the Actions Menu has not been implemented.  One complication here is that it doesn't seem to fit within any of the stripes defined by the three milestones.

  • Milestone 1: Combat Initiation
    • This is about validating player actions, setting up the attacker's input to the combat evaluator, and shipping the data off to the game server. Healing doesn't belong here.
  • Milestone 2: Combat Resolution
    • This is about getting the defender's response to an attack, computing the results according to the game rules defined in the GDD, and notifying the players of what happened.  Healing doesn't belong here either.
  • Milestone 3: The Game World Environment
    • This is about interactive things in the game world that influence the units or the teams in some way.  Healing happens straight from the inventory except when...hey, wait a minute.  One of the random events in the game world is "Found a snack" which restores one hit point to the unit who encounters it. That's the same thing that the Heal action does except it doesn't require the player to sacrifice a Heal Token.  
Maybe I'll slip this requirement into Milestone 3...or maybe I'll just let it slide and implement it when the capstone phase is over because it doesn't really fit here either.


Sunday, April 15, 2012

The Very First Successful Attack!

My friends, this is a momentous occasion in the history of Team Laser Combat.  Just now, for the very first time ever, an attack was successfully processed in its entirety.  My character, Captain Karen of the Blue Team, attacked Officer May of the Green Team.  As you can see by May's health bar in the lower left corner of the screen, she actually took damage!

Coincidentally, this also shows that the health bars work.

Here's exactly what happened:  When it was my turn, I moved Karen so she had a clear shot at May.  I clicked the Attack button, clicked the arrow pointing toward May, and then chose my most powerful offensive Combat Token.  As a result, May's health was decreased by a lot!

Success!

Saturday, April 14, 2012

Progress Report (04/14/2012)

I haven't been doing these "traditional" progress reports lately because the project and I are now in "capstone phase." So, as you may have noticed, we're doing things a little bit differently.  The sprints are now more tightly focused and the urgency of progressing each week has multiplied exponentially.

Still, I think it's important that the quality of the project management documentation is maintained if not improved.  Milestone 1 of 3 concluded last week and Milestone 2 is now being planned, so this seems like a good time to post one of my regular progress reports to mark the occasion and bridge the three-month gap between pre-capstone and post-capstone development phases.

So here's a progress report in the old, familiar style.


Accomplishments:
  • Fixed the bug where AI players would continually ask the server for movement points even when it wasn't their turn.
  • Made the inventory screen customizable for attacking and defending.
  • Added validation to the Actions menu.
  • Implemented the Attack action on the client side.  Server side support still needs to be completed and tested.
  • Implemented the Auto Attack option.
  • Uncovered several more defects for the bug list.


Known Issues:
  • AI players occasionally perform more actions than they should be allowed.
  • Sometimes Client 0, the default name of the first network connection, appears as a player on the Lobby screen.
  • The only action that appears in the Event Log for AI players is movement.  Drawing tokens and attacking are not being reported correctly to the Event Log.
  • 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:
  • Implement the Defend interface.
  • Create the combat evaluator in the server.
  • Broadcast combat results from the server.
  • Make clients respond to combat results by showing indications on screen (special effects, event log updates, etc.).
  • Fix the Event Log so it shows all player actions.
Medium Priority:
  • Display the Combat Results Summary screen.
  • Implement the Combat Results toggle.
  • Implement destructible containers.
  • Add hazards and bonus spaces to the game board.
  • Fix the broken map editor. 
Low 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.
  • Finish the level design guide.
  • Finish asset lists for current set of level designs.
  • Create the in-game chat component.
    • But first, fix the issue with the lost messages by making the data structure static.
  • Model the characters.
  • Animate the characters using Shaun Hager's animations.
  • Add sound effects to the actions menu buttons.
  • Implement the Heal action.
  • 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.

Wednesday, April 11, 2012

Milestone 2 Dependencies

Assuming that I go forth with the phases described in my last post (and I am assuming that), there is a certain order in which the phases must be completed.  That is, until I finish Phase 2.  Then I'll have a choice between Phases 3, 4, and 5, which all depend on 2 but don't necessarily depend on each other.  I have some time to think about which I'll do first because I won't arrive at that particular decision point for quite a while still.

I expect this (barely adequate) Pert chart to guide some of my decisions as I work my way through this milestone.

Six phases in five weeks.  Can it be done?  That's not a rhetorical question!