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