Saturday, October 30, 2010

Progress Report (10/30/2010)

What a week it has been!  I found a couple of potential voice artists, got a critical new screen working, added a new font to the engine, had a fantastic meeting with the art team, and most important of all, Team Laser Combat has been tentatively approved for use as my masters degree capstone project!  That's a serious boost in the project's chances of success.


Accomplishments:
  • Had a great meeting with the art team where we discussed many important things.  (See the previous post to read the meeting minutes.)  Justin and Kristen are taking a necessary break from the project in order to focus on a very important project at school, but I sincerely hope they'll be back in a few months.  I need them!
  • Started talking to a couple of candidates for voice-over work.  I have tentative agreements with two of them, but the scripts and technical details still need to be worked out.
  • Created MHFont class that encapsulates both normal fonts and image fonts, and treats them uniformly using the Strategy Pattern.  
    • As a result, MHGUIComponent subclass objects now display image fonts correctly, AND image fonts can now be used on buttons as well!  Plus, all types of fonts can be scaled by percentage to make them larger or smaller, and the metrics calculate accordingly.
  • Got the medium buttons into the UI factory and added them to several screens.  Decided to call them "small buttons" instead since they ended up being really tiny.  But that'll be good when I use them to control the game HUD.
  • The standalone server app no longer treats the user as a player instead of a spectator.
  • Spectator modes no longer have a team setup screen.  
    • They do, however, have an "Upgrade Team" button on the lobby screen which should not be there.
  • Finished the Recruit menu!  If I may say so...WOOHOO!  Perhaps it should contain a legend to explain what those two-letter stat abbreviations are about.
Known Issues:
  • When a player drops off, their team data is orphaned.  The server needs to recognize this and place the orphaned team under AI control.
  • Spectator modes should not have an "Upgrade Team" button on their lobby screen.  The only button they should have is "Exit" because that is the only thing they are allowed to do other than wait for the players to be ready.
  • The server pays no attention to the number of teams selected on the Game Setup screen.  Before going into the game state, after all human players have signaled ready, the server needs to compare the number of current players with the max number of teams selected by the host, and then fill in missing teams with AI opponents.
  • Some of the UI components on the standalone server app don't render properly.  Their alignment is off.
Next Steps:
High Priority:
  • Finish creating the Android Nation and Alpha Male Modern fonts.
  • Add a legend to the Recruit menu to explain the abbreviations in the column headings.  Or better yet, help text in a dialog box accessed by a Help button.
  • Finish the team configuration screen.
    • Include a small chat client so players can talk while getting ready for the next match.
    • Create the character configuration screen.
Medium Priority:
  • Create isometric wall tile converter.
  • Create utility for exporting converted iso tiles to PNG files.
    • Necessary for the "floor tiles in the obstacle layer" optimization.
  • Finish asset lists for current set of level designs.
    • Evaluate and analyze Sarah's level designs, too.
  • Finish the lobby screen.
    • Add "Exit" and "Signal Ready" buttons.  
    • Remove the "Upgrade Team" button from the spectators' lobby.
    • Create a display for player name, team name, and team color.
    • Enhance client list display to show team colors and user roles.
  • Finish the team creation screen.
    • Redo the UI with custom components.
    • Put in the floor image for the captains to stand on.
    • Fix the UI in the standalone server app.
    Low Priority:
    • Tack on Help buttons to more components and screens.
    • In the standalone server app, the game setup screen should have an "AI Only" button that launches the game with no human players.  It should also have buttons for displaying team, character, and user data.
    • Create command line interface for server app so it can be launched and configured remotely.
    • Lay out the HUD.
    • Consider designs for an effective test level.  The existing designs will probably do, but we need a lot more of them anyway.
    • Finish the level design guide.
    • Design the TLC web site.

    Friday, October 29, 2010

    Meeting Minutes (10/29/2010)

    Time, place, and attendance:  

    • Friday, October 29, 2010, 1pm-3pm
    • Ballydoyle Irish Pub, Bloomingdale, IL.
    • Michael, Justin, and Kristen

    Things we covered from the agenda:

    • Original vector image of game logo.
      • I asked Kristen to confirm that we still had the original vector image of the game logo for two reasons.  First, we need to make sure it's backed up; and second, we need to scale it up for T-shirts and other possible merchandise.  She and Justin confirmed that they do have it.  We should put it in the Dropbox to make sure it's always backed up.
    • Levels
      • Previewed the maps and discussed the preliminary designs for the following levels:  Small House, Mansion, Cemetery, Summer Field, Autumn Field, Winter Field, Town Square, and Library.  
      • Prompted a discussion on categorization of maps based on size, and another on options for random spawn points.  (See below.)
    • Design character train/equip screen.
      • Done.  On green scratch paper.  In short, everyone liked my design and agreed with my reasoning.
    • Discuss design change on team creation screen.
      • Decided to keep the captain selector as it is because it's cool and because it will help the player feel a more immediate connection to their main character.  
      • Agreed that the removal of the option to rename the captain was OK since the renaming of all characters can be done on the character configuration screens.
    • Discuss fonts.
      • Agreed on Android Nation in silver and red for screen titles, and Alpha Male Modern in white gradient for help text and combat token displays.
    • Determine proper default movement bonus for troopers.
      • Decided to stay with the current design of 1.0.  We'll dial it back to 0.5 if, during testing, we discover that the combination of other bonuses ends up making troopers more powerful than they should be.

    Things we covered that were not on the agenda:

    • Voice-overs
      • I mentioned my idea of having a strong but friendly feminine voice to introduce screens and announce major events, and that I have tentative agreements with some good candidates.  The team liked the idea, so we're moving forward with it.  
      • First we need to finalize an asset list, which will go in the Audio section of the game design document.  
      • Then I need to upgrade the audio system in MHFramework so it can play sequences of individual words to create phrases.  I don't expect that to be a major chore.
    • Spawn points
      • We discussed the current plan to have captains spawn in random locations, and then have their supporting characters spawn nearby.  The team decided that it would be wiser and give us more control if we set specific spawn points on each map, and then selected them randomly as we were putting characters on the board at the beginning of a match.  
      • To help the level designers, Obstacle 0 in each tile set will be designated as a spawn point object, which will be removed during map loading so the space will simply be an open floor when the map has finished loading.

    Things from the agenda that we did not cover:


    • Discuss HUD layout.
      • Decided to wait until later to see how the actual game screen would look and to have time to create a checklist of necessary elements.

    Saturday, October 23, 2010

    Progress Report (10/23/2010)

    Final exam week is always crazy for everyone.  To top it off, I got deathly ill early Friday morning, and so far, the condition has stuck tight into Saturday evening.  (Yeah, I feel awful right now.)  Surprisingly, despite all of that, the week wasn't a complete loss for Team Laser Combat.  Far from it.

    The OCR Green font is just one of many enhancements to come in the process of making these hideous screens presentable.

    Accomplishments:
    • Fixed the team creation issue when running as a JAR file.  It was failing because the server log directory was missing.  After I added that to the deployment script, it worked just fine.
    • The server now broadcasts user roles to the clients.  So now the clients also know who is a player and who is a spectator.  The enhanced client list display as well as the standalone server app will need this information.
    • Created a title banner image for the team creation screen and temporarily used it on the other screens as well.  Just until Kristen gets the real one finished.  See it in the screen shot above.
    • Simplified the data model and eliminated redundancies.  This will make the team configuration process much simpler, and has gigantic implications for the game logic.
      • This also helped to fix the issue with characters being put on the wrong team.
    • Join LAN mode is now working perfectly so far.  Last week's problem was caused by an error on the server side that has now been resolved.
    • Finished the OCR Green font and set it as the default for the data in the custom components.  See the screen shot above to see it on the login screen.
      • Also identified several other fonts that may have a place in the interface.
    • Created a TLC-specific input dialog screen.  See the screen shot above.  Now, when you enter text into a component, the rest of the screen goes dark to highlight the focused component.
    • Started designing the City Street level.  Not happy with it yet, but it's a good start.
    • Came up with a third design for the Team Configuration screen.  Here's the basic idea:  The team configuration screen will show a list of characters and their stats in a grid .  Each row of the grid will be a button that accesses a screen for configuring or retiring an individual character.  That way, the team configuration screen will remain uncluttered, plus there will be more room for help text explaining what each option does.
     Known Issues:
    • MHGUIComponent subclasses do not display image fonts correctly.  I'm currently addressing the issue.  I believe a refactoring to the Strategy Pattern is the most likely fix.
    • The team color display on the Lobby screen is not rendering properly.  It's a solid mass, rather than the parallel lines you see on the Team Configuration screen.  It's quite a mystery, since both screens are inheriting the exact same method from the TLCScreenBase class.  This may not be an issue, however, if Kristen decides to make another title banner.
    • When a player drops off, their team data is orphaned.  The server needs to recognize this and place the orphaned team under AI control.
    • Spectator modes should not have a team creation screen since spectators are not players.  They should go straight from the login screen to the lobby, or to the game screen if a match is already in progress.
    • The standalone server app is treating the user as a player instead of a spectator.
    • The server pays no attention to the number of teams selected on the Game Setup screen.  Before going into the game state, after all human players have signaled ready, the server needs to compare the number of current players with the max number of teams selected by the host, and then fill in missing teams with AI opponents.
    Next Steps:
    High Priority:
    • Get the controls to display image fonts correctly.
    • Get the medium buttons into the UI factory.
    • Finish selecting and creating the image fonts.
    • Add "Exit" and "Signal Ready" buttons to lobby screen.
    • Finish the team configuration screen.
      • Include a small chat client so players can talk while getting ready for the next match.
      • Design a new screen for configuring a single character.
      • Create a Recruit Team Member menu.
    • Test and fix Spectator and Standalone Host modes.
    Medium Priority:
    • Enhance client list display on Lobby screen
    • Redo team creation screen with custom components.
    • Create isometric wall tile converter
    • Create command line interface for server app so it can be launched and configured remotely.
    • Replace boring buttons with image buttons.
    Low Priority:
    • Change layout of main menu.  Put in placeholder for skyline backdrop.
    • In the standalone server app, the game setup screen should have an "AI Only" button that launches the game with no human players.  It should also have buttons for displaying team, character, and user data.
    • Lay out the HUD.
    • Consider designs for an effective test level.
    • Finish the level design guide.
    • Design the TLC web site.

    Saturday, October 16, 2010

    Progress Report (10/16/2010)

    For the first time in over two weeks, I finally did some things that are exclusively for the purpose of this project.  Not only that, but this may be the longest list of accomplishments this project has ever seen in a single week.  Time-wise, this amounts to about two days' work.  I guess I've just been in the zone!  This has been a week of hyper-productivity in general -- with grading, grad school projects, TLC, and beyond.

    The screen shot below shows my current challenge.  Captain April of the Spiders team is showing up on my list just like she should be.  Phantom, however, is the Captain of the Cats team, and should not be on my screen.  Fixing this is my next top priority.



    Accomplishments:
    • Designed some level maps:  House, Mansion, Cemetery, Summer Field, Winter Field, and Autumn Field.
    • Enhanced the fire emitter so it can be ignited and extinguished on command, and so it burns out instead of just vanishing.
    • Further generalized the game engine's particle framework.  In TLC, it will be used for sparks, fragments of exploding containers, and perhaps some animated environments and weather effects.
    • Updated the deployment scripts to automate the packaging of the software.  The latest runnable version of the program is in Kristen's TLC Dropbox folder.
    • Started a more formal art asset list and tracking spreadsheet.  It's in Google Docs so we can all have access to it from anywhere.
    • Wrote pseudocode for the AI players.  This has to be done early because it's going to heavily influence the architecture of the game state.
    • Added sound support to MHGUIButton class.  Now you can specify sounds to play when the mouse moves over a button, when the button is clicked, both, or neither.  Tested it with the buttons on the main menu.
    • Started refactoring the server into the State Pattern to simplify the message processing code.
    • Finally made the Team Configuration screen partially functional.  It's not pretty, but it's a start.
    • Did some player mode testing.  Spectator functionality isn't there yet.  The only known issue with player functionality is some confusion between which characters are on which team.
    • Tested the color selection functionality.  Found some issues and fixed 'em.  It is now working just fine.
    • Implemented a message for registering a user type with the server.  Now it can distinguish between players and spectators.

    Known Issues:
    • The game cannot request a new team from the server when running as an executable JAR.  I have no idea why.  I/O error of some sort.
    • The host's team configuration screen is listing the characters for all players, not just the host.  The other players get exceptions when trying to access the team configuration screen because their teams are null.
    • Before going into the game state, after all human players have signaled ready, the server needs to compare the number of current players with the max number of teams selected by the host, and then fill in missing teams with AI opponents.
    • When a player drops off, their team data is orphaned.  The server needs to recognize this and place the orphaned team under AI control.
    • Spectator modes should not have a team creation screen since spectators are not players.  They should go straight from the login screen to the lobby, or to the game screen if a match is already in progress.
    • The standalone server app is treating the user as a player instead of a spectator.
    Next Steps:
    High Priority:
    • Make sure the UPDATE_TEAM messages are being received properly.
    • Make sure the characters' team IDs are correct.  It looks like they aren't.
    • Get the medium buttons into the UI factory.
    • Add "Exit" and "Signal Ready" buttons to lobby screen.
    • Finish the team configuration screen.  (MORE DESIGN WORK NEEDED FIRST!)
    • Create buy and sell buttons for team config screen.
    • Fix "Join LAN", "Spectator", and "Standalone Host" modes.
    Medium Priority:
    • Enhance client list display on Lobby screen
    • Begin building the game state.
    • Redo team creation screen with custom components.
    • Create isometric wall tile converter
    • Create command line interface for server app so it can be launched and configured remotely.
    • Create custom TLC input dialog screen
    • Replace boring buttons with image buttons.
    Low Priority:
    • Change layout of main menu.  Put in placeholder for skyline backdrop.
    • In the standalone server app, the game setup screen should have an "AI Only" button that launches the game with no human players.
    • Lay out the HUD.
    • Consider designs for an effective test level.
    • Finish the level design guide.
    • Design the TLC web site.

    Saturday, October 9, 2010

    Progress Report (10/09/2010)

    As expected, my grad school project did indeed block any work dedicated to TLC.  Nevertheless, my school project (Invaders, Possibly From Space) did encourage a few changes to the MHFramework engine.  Since all changes to the engine affect TLC as well, I'm going to claim them as accomplishments.  Who's going to argue?

    One major TLC-related accomplishment was made, however.  Check out this screen shot.  This, my friends, is a real-time, fully customizable, well-optimized, versatile fire effect provided my brand new MHFireEmitter class!  (Part of my new MHParticleSystem set.)  Now when a player destroys a destructible container in the game, it can burn for a while before revealing the item inside.

    "Burn, baby, burn!"

    Accomplishments
    • Enhanced the MHScreen class to add additional support for MHImageFont display.
    • Added more convenience methods to the MHDisplayModeChooser class to cut down on the repetition of common operations such as calculating screen dimensions.  (Need to create a new rectangle class that uses integers by default so I can stop all that casting.)
    • Added some static methods to MHGame and MHRuntimeMetrics to simplify the use of the built-in timer.  (Need to consolidate those method calls to MHGame exclusively, which can then delegate to MHRuntimeMetrics.)
    • Designed and created a general, reusable, parameterized particle framework.  Tested it out with a cellular automata fire emitter.  Check out the screen shot!
    Known Issues:
    • Server IP address needs to be prominently displayed on the game host's screen, along with instructions to tell the other players of the address.  Perhaps as a scrolling marquee.
    • Player modes need to be tested for UI, functionality and server registration.
    • Single Player mode should not have a lobby screen since there is no one to chat with or "signal ready" to.  Instead, the player should be sent straight into the team configuration screen after team creation.
    • Spectator modes should not have a team creation screen since spectators are not players.  They should go straight from the login screen to the lobby, or to the game screen if a match is already in progress.
    • Need to test team color registration for multiple clients.  I think the server may be failing to remove used colors from the list of available choices.
    • The standalone server app is treating the user as a player instead of a spectator.
    Next Steps:
    High Priority:
    • Add buttons to lobby screen
    • Create isometric wall tile converter
    • Enhance client list display
    • Redo team creation screen with custom components.
    • Display IP prominently on host's screen
    • Test and fix team color registration
    • Test and fix player modes
    Medium Priority:
    • Analyze and re-evaluate client architecture.
    • Begin building the game state.
    • Create command line interface for server app so it can be launched and configured remotely.
    • Create custom TLC input dialog screen
    • Create team configuration screen
    • Replace boring buttons with image buttons.
    Low Priority:
    • Add sound capability to MHGUIButton class.
    • Change layout of main menu.  Put in placeholder for skyline backdrop.
    • Lay out the HUD
    • Consider designs for an effective test level.
    • Write a level design guide.
    • Implement player descriptor system.

      Saturday, October 2, 2010

      Progress Report (10/02/2010)

      Until this week, I was firmly convinced that the only way to make real progress on this project was to have a large, contiguous block of hours.  While I'm still convinced that long, uninterrupted time is the ideal scenario, I've accomplished quite a bit this week just working a few minutes at a time throughout the whole week. Lesson learned:  Take what you can get and make the best of it!

      There is some troubling news on the horizon, however.  My grad school class requires me to complete two games in the next month and a half.  It's likely that TLC will be put on hold.  I sincerely hope I can keep things moving in spite of the opposition.

      Accomplishments:
      • Created TLCScreenBase class which provides support for common screen elements, such as the title banner and the status bar.  TLCScreenBase is a subclass of MHScreen, of course, so it also comes with the same capabilities built into all screens managed by the engine.
      • Tested the game setup process for several player modes.  So far, all modes need some modification, but it's mostly insignificant.
      • Fixed the "connected to null" problem.  The IP address of the server is now correctly displayed in the status bar.
      • Started work on the team configuration screen -- the second most complex screen in the entire project. 
      • Optimized MHImageFont class to make it more versatile and efficient.  We need to decide on a set of clean, readable fonts that fit the feel of the game.
      Known Issues:
      • Server IP address needs to be prominently displayed on the game host's screen, along with instructions to tell the other players of the address.  Perhaps as a scrolling marquee.
      • Player modes need to be tested for UI, functionality and server registration.
      • Single Player mode should not have a lobby screen since there is no one to chat with or "signal ready" to.  Instead, the player should be sent straight into the team configuration screen after team creation.
      • Spectator modes should not have a team creation screen since spectators are not players.  They should go straight from the login screen to the lobby, or to the game screen if a match is already in progress.
      • Need to test team color registration for multiple clients.  I think the server may be failing to remove used colors from the list of available choices.
      • The standalone server app is treating the user as a player instead of a spectator.
      Next Steps:
      High Priority:
      • Add buttons to lobby screen
      • Create isometric wall tile converter
      • Enhance client list display
      • Redo team creation screen with custom components.
      • Display IP prominently on host's screen
      • Test and fix team color registration
      • Test and fix player modes
      Medium Priority:
      • Analyze and re-evaluate client architecture.
      • Begin building the game state.
      • Create command line interface for server app so it can be launched and configured remotely.
      • Create custom TLC input dialog screen
      • Create team configuration screen
      • Replace boring buttons with image buttons.
      Low Priority:
      • Add sound capability to MHGUIButton class.
      • Change layout of main menu.  Put in placeholder for skyline backdrop.
      • Lay out the HUD
      • Consider designs for an effective test level.
      • Write a level design guide.
      • Implement player descriptor system.

      Friday, October 1, 2010

      Graphical Fonts Are Back!

      Graphical font capability has once again returned to MHFramework.  This benefits not only TLC, but potentially every future project.  To test the system, I created a custom font using characters from the old NES system font.


      Nostalgia indeed -- for the NES as well as my old MHImageFont class.