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.

    Saturday, September 25, 2010

    Progress Report (09/25/2010)

    I was pleasantly surprised by my level of productivity toward the project this week.  Of course, a large part of that productivity was due to the convenient fact that my current class at DePaul involves several programming techniques that enhance the engine upon which TLC is built.
    LIME 3.3 now includes two new layers to dramatically increase versatility, reduce the workload on artists and level designers, and support more interesting game worlds.

    Accomplishments:
    • Fixed the image loading bug...finally!  (See my previous blog post for details.)
    • Upgraded the engine to use a high-resolution timer, accurately calculate and display frames per second, and separate updates from renders to smooth out frame rates.
    • Added two layers to the map data structure.  The layers, in order from the bottom up, are now Floor, Floor Detail, Items, Obstacles, Walls, Wall Detail, and Ceiling.  (See the LIME screen shot above.)  The MHFramework API documentation has been updated to reflect this new structure.
    • Continued gathering notes for level design guide.  I think it's going to be organized into these sections:  Overview of the TLC Game World,  Dimensions and Measurements, Map Cell Types, Layers and Naming Conventions, How to Make Tiles and Objects.
    Known Issues:
    • Player modes need to be tested.
    • Standalone server app does not properly register a player name.
    • Standalone server app does not display the appropriate UI at some points
    • Status bar says, "Connected to null" instead of displaying the server's IP address
    Next Steps:
    High Priority:
    • Add buttons to lobby screen.
    • Create isometric wall tile converter.
    • Define TLC screen base class.
    • Enhance client list display.
    • Redo team creation screen with custom components.  (Also awaiting Captain character models.)
    • Test and fix standalone server app.
    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.
    • Implement player descriptor system.
    • Write a level design guide.


    Tuesday, September 21, 2010

    Image Loading Bug Fixed!

    Since the beginning of the project, a minor bug has been nagging at me:  Images that come built in to the MHFramework engine (in this case, the splash screen) have not been loading when running the game as an executable JAR file.  I have discovered the source of the problem.  For future reference, here's the fix:
     
    I was loading images like this, using a relative path from the image loading code to the location of the image files:
    MHResourceManager.loadImage("../images/imageFile.jpg");

    This approach works great as long as you aren't running from a JAR file.  However, if the images are contained in a JAR file, you must use the entire path name beginning with a slash, like this:
    MHResourceManager.loadImage("/mhframework/images/imageFile.jpg");

    Now, no matter how we run the program, we have the comforting familiarity of the good old MHFramework splash screen.

    This issue is now resolved and will be removed from the issue tracking spreadsheet.  Consequently, this also means a new version number for the engine, but I will address that later after I officially check in some other recent upgrades.

    Saturday, September 18, 2010

    Progress Report (09/18/2010)

    Again, work and school (plus a family reunion) crushed my hopes of making great progress this week.  And again, a few small things were accomplished anyway.  The Force is with us!

    See those green leafy tiles?  Those are JPEGs that have been transformed dynamically by MHFramework!
    Accomplishments:
    • Added support for JPG and PNG file extensions for game world asset images.  Each tile to be loaded causes a call to a function that constructs the expected base file name, and then looks for all three extensions until it finds a match and loads it, or doesn't find a match and assumes that all tiles have been loaded for the current layer.
    • Started this development blog and posted the old progress reports to it.
    • Created issue tracking spreadsheet.  Not sure where, how, or whether to post it online.
    • Began to gather and organize notes for the level design guide.  In the process, I started considering a new structure for the game world.  Questioning my sanity now, and wondering if I'm brilliant or just sleep deprived.  Maybe both -- time will tell.
    Issues:
    • Images from MHFramework don't load when running as a standalone executable. 
    • Player modes need to be tested.
    • Standalone server app does not properly register a player  name.  
    • Standalone server app does not display the appropriate UI at some points.
    • Status bar says, "Connected to null" instead of displaying server IP address.
    • Tech design issue:  When we automate the creation of isometric walls, how does the numbering system work when turning one image into three?
    Next Steps:
    High Priority:
    • Add buttons to lobby screen
    • Create isometric wall tile converter
    • Define TLC screen base class
    • Enhance client list display
    • Redo team creation screen with custom components.
    • Test and fix standalone server app.
    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.
    • Fix MHFramework image loading bug.
    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.

    Thursday, September 16, 2010

    Paper Prototype

    Near the beginning of the project, the art team and I met at the food court at Stratford Square Mall to discuss the core game mechanics and play through a simplified tabletop prototype.  Personally, I think it was a great idea that really gave a clearer picture of the level of detail that the game server was going to be dealing with. 

    Really, this was an easy, inexpensive, and valuable design and communication tool.  The "characters" were from a bag of plastic cowboys and indians from Dollar Tree, the dice were from a ten-pack of colored dice from Dollar Tree, the graph paper and pens cost just a few bucks from Target, the cards were some of my free swag from the 2009 Game Developers Conference in San Francisco, the scratch paper was old printouts from projects past, and I carried it all (except the paper) in a cheap plastic pencil box from Wal-Mart.

    The graph paper represents a medium-sized game board.  The dice were used to simulate the random chance factors involved in every movement and combat interaction, the cards represented combat tokens, and the scratch paper served as the data model and the "pro shop" (a.k.a. the team configuration screen).

    Things that were not represented in the paper prototype include gender bonuses, training levels, Power Tokens, random events, and destructible barricades and containers.

    Saturday, September 11, 2010

    Progress Report (09/11/2010)

    Work and graduate school have kept me out of the project for most of the week, but still a few small things were accomplished...and one really big thing!

    A screen shot of LIME showing isometric floor tiles made from regular square texture images.  Just TRY and tell me that's not cool!

    Accomplishments:
    • ISOMETRIC FLOOR TILE TRANSLATOR!  Yes!  It works beautifully AND automatically, even when the texture image dimensions violate the aspect ratio constraints!
    • Discussed level design issues with Sarah, mostly regarding technical constraints.  Decided I should put together a brief level design guide for all of us, but haven't done it yet.
    • Gathered some reference materials for AI pathfinding and the particle system.

    Issues:
    • Player modes need to be more thoroughly tested.
    • Minor bugs in the standalone server app need to be fixed.
    • The status bar says "Connected to null" but should specify the server's IP address.

    Next Steps:

    High priority:
    • Add support for JPEG and PNG tile textures.
    • Create iso wall tile converter.
    • Finish putting buttons on the lobby screen.
    • Redo team creation screen with custom components.
    • Test and fix standalone server app.
    Medium priority:
    • Analyze and re-evaluate client architecture.
    • Replace boring buttons with image buttons.
    • Create team configuration screen
    • Begin building the game state.
    Low priority:
    • Change layout of main menu.  Put in placeholder for skyline backdrop.
    • Enhance lobby screen client list to show team colors and differentiate players from spectators
    • Lay out the HUD
    • Add sound capability to MHGUIButton class.
    • Start considering designs for an effective test level.
    • Write a level design guide.

    Saturday, September 4, 2010

    Progress Report (09/04/2010)

    Finally, a week of fairly significant progress!


    Accomplishments:

    • Had a fun and productive meeting where we:
      • updated the audio section of the design doc
      • reviewed the design of the team configuration screen and main menu
      • listened to a rough form of Justin's game music
      • ate delicious teriyaki (not related to the project, but still worth remembering)
    • Simplified the data model.  It's now easier to use, more closely matches the original domain model, and is now ready to support the game world itself.  Really!
    • Wrote code to use Kristen's custom components.
      • Then redid the login screen to use those custom components.
    • Added simple mouse-over effects to the large buttons.
    • Added Spectator Mode button to the main menu (and actually made it work).
    • Fixed most of the major issues with the server app.  Still has some minor bugs.
    • Thought up a strategy for integrating the isometric tile transformer into the engine:  Let's assume that we only transform images whose sizes and ratios do not match the isometric tile constraints.  That way we can still use pre-built tiles in addition to the raw square textures.
    • Got some potential volunteers!
      • Sarah Kemper volunteered to help with level design.  Sarah and I did several projects together while we were classmates at Sanford-Brown College.  In addition to level design, she thinks she may be able to convince her friends to test the gameplay and OS compatibility at a LAN party.
      • Karl Meiser volunteered to help with server and network testing.  Karl is the founder of LCIJUG (Lake County IL Java User Group) and maintains his own private web server with a static IP address.

    Issues:

    • Player modes need to be more thoroughly tested.  I've come to realize that this is complex enough to require an actual test plan, or at least a simple traceability matrix.
    • Minor bugs in the standalone server app need to be fixed.
    • The status bar says, "Connected to null".  It should specify the server's IP address, which obviously can't be null if the client is actually connected!

    Next Steps:

    High priority:

    • Finish putting buttons on the lobby screen.
    • Redo team creation screen with custom components.
    • Create iso floor and wall tile converter.
    • Test and fix standalone server app.
    Medium priority:

    • Analyze and re-evaluate client architecture.
    • Create team configuration screen
    • Replace boring buttons with image buttons.
    Low priority:

    • Change layout of main menu.  Put in placeholder for skyline backdrop.
    • Enhance lobby screen client list to show team colors and differentiate players from spectators.
    • Lay out the HUD, maybe with mock-up components.
    • Add sound capability to MHGUIButton class.
    • Start considering designs for an effective test level