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

Saturday, August 28, 2010

Progress Report (08/28/2010)

This being final exam week, I've been extremely busy with DeVry work, so I haven't accomplished much since last week's report.  I did get a few very small things accomplished though.  Expect a much more substantial report from me next week.  There are some VERY exciting things on the horizon and I'm dying to get to them!

 
Accomplishments:

  • Updated the GDD with details on Trooper bonuses.
  • Updated the original concept doc with current development team information.
  • Started experimenting with isometric tile automation.
  • Began an architectural analysis of the code in preparation for a very necessary refactoring effort.
The original domain model from the project's architectural planning stage.  The actual implementation wasn't jivin' with this, so I had to refactor it.

Issues:

  • The standalone server app is crashing and the UI is not being properly initialized.
  • Images from MHFramework don't load when running as a standalone executable (JAR file).
  • The game application has intermittent startup issues.


Next Steps:

High priority:

  • Add medium buttons to TLCButtonFactory class.
    • Then finish putting buttons on the lobby screen.
  • Create class for custom components.
    • Then redo login and team creation screens with custom components.

  • Diagram and analyze current architecture.
    • Then refactor it to match the architectural design
  • Fix standalone server app.

Medium priority:


  • Begin work on game state (after refactoring).
  • Begin work on team configuration screen (after refactoring).
  • Continue experiments with isometric tile generation.

Low priority:


  • Add "Spectator" option to main menu.
  • Change layout of main menu.  Put in placeholder for skyline backdrop.
  • Add sound capability to MHGUIButton class.
  • Fix MHFramework image loading
  • Create command line interface for server app so it can be launched and configured remotely.

Saturday, August 21, 2010

Progress Report (08/21/2010)

An updated main menu showing Kristen's button design.
FYI, attached is a low-quality screen shot of the latest iteration of the Main Menu, since it just got a minor face lift this week.  Mull it over and let me know how you feel about it when we critique stuff at our next meeting.  I have some ideas for how to improve it, in addition to adding Kristen's cool city skyline, of course.

And just to pat myself on the back, notice that I've accomplished almost everything in my "Next Steps" segment from last week.  Yay me!  :)




Accomplishments:

  • Finished log file integration in both client and server.
  • Put game logo on main menu.
  • Created TLCButtonFactory class for creating custom buttons.
    • Used it to add "large buttons" to main menu.
  • Reorganized TLCUI class.  Simplified access to fonts and images and created a facade for the button factory to decouple it from the screens.
  • Made a design decision regarding Troopers:  They will be given one extra, automatic AT and DF point in all combat actions against a Captain.  Combined with the MV bonus that a Trooper already receives, this creates a clear, intransitive symmetry that will give players a more tangible reason to have all three character types on their teams.
  • Wrote batch scripts for backing up project files to the Dropbox.
  • Started laying out a basic web site for the game.

Known Issues:

  • The standalone server app suddenly started crashing.  And when it does run, the UI is not being properly assembled.
  • Images from MHFramework don't load when running as a standalone executable.  (Low-priority problem that I think I know how to fix.)
  • Intermittent startup issues -- random exceptions that seem to be prevented by refreshing the JVM.
  • I was unable to reproduce the issue with player name registration.  It hasn't happened again, so maybe it's gone.

Next Steps:
High priority:

  • Update design doc with Troopers' bonuses vs. Captains
  • Update design doc with Troopers' movement bonus ('cause I don't remember if we ever added that detail after we discussed it...)
  • Finish putting buttons on the lobby screen.
  • Create a class for those cool-looking custom components.
    • ...and then redo the login and team creation screens with those components.
  • Fix standalone server app.  (I fear that the problem may point to a fundamental flaw in the architecture, so I really want to resolve this!  Plus I really need it for testing.)
Medium priority:

  • MAJOR DECISION:  Decide if team objects maintain character objects (as in the current design), or if character objects have their own data structure.  Both?  (One problem with that: We'd have to be sure to remove both references to the character if that character is retired.)
  • Diagram and analyze current architecture.  Identify candidates for refactoring before creating new screens.
  • Begin work on game state (after refactoring).
  • Begin work on team configuration screen (after refactoring).
Low priority:

  • Experiment with the idea of automating the creation of isometric floor and wall tiles.
  • Add "Spectator" option to Main Menu.
  • Change layout of main menu.  Put in placeholder for skyline backdrop.
  • Add sound capability to MHGUIButton class.
  • Update color cycle control with new buttons.
  • Add colors, icons, or both to the client list on the Lobby screen.
  • Fix MHFramework image loading bug.

Sunday, August 15, 2010

Progress Report (08/14/2010)

Team Laser Combat
Progress Report
 for the Week of
08/08/2010 - 08/14/2010

I didn't get much time to work on the project this week because I'm totally drowning in stuff to grade for my classes, but I accomplished a couple of simple things.  I'm sending this on Wednesday because I'm pretty sure I won't get any more time to work on it for the rest of this week.  If I do, I'll throw it onto next week's report.  (I'm gonna try to do this every week from now on.)

Recent Accomplishments:

  • Implemented the log file system that I mentioned in my last report.  Still need to add timestamps and client information; and also create individual server-side logs for each team, but those things are all very easy.
  • Tried unsuccessfully to recreate a bug in registering the player's name with the server.  When I want it to break, it doesn't!
  • Resized Kristen's new logo to prepare it for use on main menu screen.  Pasted it onto a mockup just to see how it'll look.  (And it looks great, BTW.)  Still need to modify the main menu code to actually display it.
  • Captured screen shots of current screens to aid in planning and demonstrating.

Next Steps:
In this exact order, probably:

  • Finish incorporating the log file system into the game server.
  • Add the game logo to the main menu.
  • TLCButtonFactory class for creating custom button objects.  (BTW, I love the new designs that have the hexagons centered instead of at the corners.  Big improvement!  This is exactly why I need real artists like you two!)
  • Finish putting the buttons on the lobby screen
  • Fix the program that runs the server as a standalone application.  I broke it a long time ago!

Next Meeting Agenda:
Here are some things I'd like to do at our next meeting...whenever that may be.

High Priority:

  • Critique of main menu screen, including star field component.
  • Preview of your custom component designs.
  • Prioritization of project phases -- game state vs. lobby screen vs. team configuration screen.
  • Testing issues (like where and how).
  • Project management -- should we be tracking our progress better?
Medium Priority:

  • Review the design for the team configuration interface.
  • Discuss button media -- Mouse-over effects?  Lights?  Animation?  Sounds?
  • Critique custom mouse cursor and discuss other possible uses (in-game commands, for example)
  • Discuss the practicality of automating the creation of isometric floor and wall tiles.  (I may have a great idea.  Experimentation is required.)
Low Priority:

  • Level design:  Should we ask for help when the time comes?
  • Discuss the feasibility of a fully graphical image font.
  • If possible, I would LOVE to hear Justin's music for the menus.

Saturday, August 7, 2010

Progress Report (08/06/2010)

Here's a quick progress report of what I've done since we last met:


  • I wrote some scripts to generate an executable JAR file for the program.  It works except for one thing:  images that come from the engine don't load properly, but other images do.  I think I know how to fix it but haven't tried yet.
  • I upgraded the engine so we can use custom mouse cursors now.  I made a mouse cursor shaped like the laser gun to test it out.  Works great, and is super easy to customize.
  • I created a utility in the engine that generates, maintains, and animates star fields with twinkling stars, appropriate for night skies or space scenes.  It's beautiful, but it needs some tweaking.
  • I did a lot more testing and uncovered a few issues to address.  Sometimes the server fails to register the player name, and on some computers, the program freezes when it tries to load the main menu.
  • To help test and troubleshoot these things, I started designing a simple log file system.  Haven't coded it yet though.