Saturday, February 26, 2011

Progress Report (02/26/2011)

With this being final exam week at work, in addition to the perpetually problematic class I'm taking in grad school, there was very little time to work on the project this week.  What's more, the few tangible things that I did accomplish revealed a perplexing and disturbing bug in my LIME tool:  the floor detail layer, which has barely been tested until now, has some sort of random malfunction that cascades to the other layers.

On the brighter side, I finally finished my A* pathfinding implementation that I started all the way back in 2004, when I first designed and implemented the first version of the map data structure.  Well, it's not completely finished -- I still need to parameterize it with a way to specify the searchable directions.

Tomorrow I'm heading to GDC 2011, so I'm in for a busy week.  Still, I hope to spend a little time with this beloved project at some point.


Accomplishments:
  • Finally, after seven years, I have finished implementing the A* pathfinding algorithm for the tile maps in MHFramework.
  • Established a simple geometric pattern for giving an illusion of thickness to floors and platforms.  Tested it successfully, but then discovered the problem mentioned above with the floor details in LIME.
  • Wrote some more thorough algorithms for fixing a few of the ongoing annoyances, such as:
    • Optimizing the character data broadcasts.
    • Fixing the problem with chat messages getting lost between screen transitions.
    • Correcting the issue with the server randomly rejecting a connection after it has been accepted.
    • Correcting a tiling issue on the right-facing wall tiles generated by the MHFramework Wall Tile Transformer. (They're one pixel off from mirroring the left-facing walls and now I know why.)
  • Jotted down some notes and plans for moving forward as well.  For example:
    • The client and server responsibilities and requirements for handling the Move command have been established and pseudocoded.
    • Expanding the Wall Tile Transformer to output a greater variety of wall tile shapes, such as thin walls and walls that are perpendicular to the camera.
    • Expanding the Floor Tile Transformer to automatically generate "side" tiles compliant with the geometric patterns that I established this week.
    • Changing the background color on the LIME viewport to adapt to different tile sets.
Known Issues:
  • The floor detail layer is highly unstable and must be fixed very soon.
  • 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 color cycle control on the team creation screen throws an exception when there is only one color remaining to choose from.  This is only an issue when setting up a game with eight human players.
  • Chat messages get lost when a user in multiplayer mode switches 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:
  • Fix the problems with the floor detail layer.
  • Investigate ways to dynamically color the team uniforms.  Experiment on the placeholders.
    • If this works, add the ability to dynamically color MHFont objects too.
  • Broadcast and handle the "whose turn" message..
    • Create the "whose turn" display to show it.
  • Implement the Move action.  This will involve:
    1. Decoupling the characters from the map structure.
    2. Implementing network messages for the Move command.
    3. Implementing the UI for selecting a destination.
    4. Implementing a pathfinding algorithm.
    5. Implementing path following behavior.
Medium Priority:
  • Create the in-game chat component.
    • But first, fix the issue with the lost messages by making the data structure static.
  • Fix the team color selection for the eighth human player.
  • Create the HUD's event log display.
  • Finish voice scripts for narration.
  • Finish asset lists for current set of level designs.
  • Formalize the flowchart for the AI logic.
Low Priority:
  • Create the token factory and displays.
  • Implement the Draw Token action.
  • Implement the Heal action.
  • Implement the Attack action.
  • Finish the team creation screen.
    • Put in the floor image for the captains to stand on.
    • Replace plain gray buttons with captain character images.
  • Finish the level design guide.
  • Design the web site.
  • Get coin display graphics from the 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.

Saturday, February 19, 2011

Progress Report (02/19/2011)

I guess I owe my progress this week to Professor Burke of DePaul University.  I would have had no time to work on this project were it not for one thing:  his class irritated me to such an extreme, intolerable degree that I felt the need to just get away from it and work on something more rewarding for a little while.  Team Laser Combat gives me experience that is just as useful, and it actually leaves me with something to show for the effort that I put into it.  The same cannot be said for Professor Burke's class.  It truly, deeply saddens me to say this, because I've spent the last two years praising DePaul and the wonderful experiences I've had there, learning amazing and useful things and immediately applying them in my daily life.  I only hope that when this class is over, those feelings will recover...even if my 3.96 GPA never does.  It's beyond depressing.

So let's talk about something happier.  The major step forward this week was the creation of the actions menu -- the central hub from which all player commands originate.

Oops!  That was supposed to be a hexagon!
That's more like it!  The Next Character and Previous Character buttons already work, and the others are hopefully not far behind.
Accomplishments:
  • The actions menu is working.  Well, the buttons don't all function yet, but they soon will, one by one.  
    • There's a button labeled "TEST" on the HUD.  It simulates what will happen when you receive the notification that it's your turn.  The actions menu pops up, centers on one of your characters, and tells you how many action points are left for that character.  There are buttons for the four actions -- attack, move, heal, and draw token -- as well as buttons for cycling through all of your characters, making it easy to find them and issue commands to them.
  • Added more random tips to the game loading screen.  The new tips explain the UI customization features that I added to the design last week.
  • On the advice of some professional graphic designers, I reduced the number of fonts in the game to three.  
    • Aside from temporary placeholders, the only fonts you'll see now are Tahoma for text and GUI components, Android Nation for titles and headers, and OCR for editable or selectable data values.  Some work still remains to be done in this effort.
  • The server now determines a random play order for the teams.  It lists all the team IDs and shuffles them to produce a random ordering between matches.
  • Finally fixed the Join LAN mode!  It works better than ever!
  • The server now lists all of the map files automatically and selects one at random.  Now we can add maps without changing any code.
    • To test it, I added a map that I call "Nowhere to Hide" (file name "Nowhere.lime").  It's just one big room with no obstacles.

Known Issues:
  • 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 color cycle control on the team creation screen throws an exception when there is only one color remaining to choose from.  This is only an issue when setting up a game with eight human players.
  • Chat messages get lost when a user in multiplayer mode switches 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:
  • Investigate ways to dynamically color the team uniforms.  Experiment on the placeholders.
    • If this works, add the ability to dynamically color MHFont objects too.
  • Broadcast and handle the "whose turn" message..
    • Create the "whose turn" display to show it.
  • Implement the Move action.  This will involve:
    1. Decoupling the characters from the map structure.
    2. Implementing network messages for the Move command.
    3. Implementing the UI for selecting a destination.
    4. Implementing a pathfinding algorithm.
    5. Implementing path following behavior.
Medium Priority:
  • Create the in-game chat component.
    • But first, fix the issue with the lost messages by making the data structure static.
  • Fix the team color selection for the eighth human player.
  • Create the HUD's event log display.
  • Finish voice scripts for narration.
  • Finish asset lists for current set of level designs.
  • Formalize the flowchart for the AI logic.
Low Priority:
  • Create the token factory and displays.
  • Implement the Draw Token action.
  • Implement the Heal action.
  • Implement the Attack action.
  • Finish the team creation screen.
    • Put in the floor image for the captains to stand on.
    • Replace plain gray buttons with captain character images.
  • Finish the level design guide.
  • Design the web site.
  • Get coin display graphics from the 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.

Saturday, February 12, 2011

Progress Report (02/12/2011)

Yeah, I know I didn't post an update last week, but there was an unfortunate reason for it:  grad school!  I was overwhelmed by homework in addition to a heavy load from my job.  TLC got absolutely no time or attention from me at all last week.  This week wasn't a whole lot better, but at least I got a few minor things done.  Check it out.

The in-game menu now contains options for customizing the behavior of the user interface.
Accomplishments:
  • Redesigned some aspects of the UI for the game screen.  Decided to give the player more options for customizing the behavior of the interface.
    • Combat Results Toggle -- determines whether the user gets a full report of the factors involved in each combat interaction after the interaction has taken place.
    • Auto Defense Toggle -- determines whether the player chooses a defensive strategy when his/her team is attacked, or whether the defense is selected automatically through a set of rules.
    • Auto Attack Toggle -- determines whether the player selects a combat token for each attack, or whether a token is selected automatically based on the type of target at which the character is shooting.
  • Encountered a regression in the team configuration screen that caused the game to lock up when a user in Single Player mode made any changes to their team.  It was an easy fix.
  • Discovered another frequent cause of crashes -- the game sometimes tries to locate characters on the map when the map hasn't been loaded yet.  Another easy fix.
Known Issues:
  • Join LAN mode causes some sort of server error that gives the client an inconsistent data set.
  • 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 color cycle control on the team creation screen throws an exception when there is only one color remaining to choose from.  This is only an issue when setting up a game with eight human players.
  • Chat messages get lost when a user in multiplayer mode switches 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:
  • Create the action button menu.
  • Investigate ways to dynamically color the team uniforms.  Experiment on the placeholders.
  • Create the "whose turn" display.
Medium Priority:
  • Implement the Move action.
  • Fix the team color selection for the eighth human player.
  • Create the HUD's event log display.
  • Finish voice scripts for narration.
  • Finish asset lists for current set of level designs.
  • Formalize the flowchart for the AI logic.
Low Priority:
  • Create the token factory and displays.
  • Implement the Draw Token action.
  • Implement the Heal action.
  • Implement the Attack action.
  • Finish the team creation screen.
    • Put in the floor image for the captains to stand on.
    • Replace plain gray buttons with captain character images.
  • Finish the level design guide.
  • Design the TLC web site.
  • Get coin display graphics from the art team.
    • Add it to the team configuration screen.the character configuration screen and the recruitment screen.