Shannon V. OKeets
From: Honolulu, Hawaii
May 1, 2012 Status Report for Matrix Games’ MWIF Forum
Accomplishments of April 2012
I monitored all the threads in the MWIF World in Flames forum daily.
Hardware and Software
Matrix Games programmers fixed the problem with dropped server messages when using the NetPlay Forum to communicate with other players that are logged in. That capability is crucial for starting/restarting a NetPlay game. The same correction was made to the game server, which is used when playing an game over the internet. They also enabled deleting Seeking Opponent requests. This means that players are able to delete their posted requests to the Seeking Opponent database once an opponent has been found; therefore all listed posts should be active.
The open items for Theme Engine remain unchanged: (1) scroll bars for the detailed map, and (2) its inability to display detailed listings of file directories (i.e., the dates and stuff when opening or saving a file).
I released versions 9.06.00 (9 fixes), 9.06.01 (10 fixes), 9.06.02 (1 fix), 9.06.03 (8 fixes), 9.06.04 (6 fixes), 9.06.05 (12 fixes), and 9.06.07 (19 fixes) to the beta testers in April. Version 9.06.06 was used by me but never uploaded to the beta testers. This is about my normal number of new versions (7) but half my typical fixes (65).
One reason there were so few fixes this month is that I have been running alpha testing for NetPlay, besides being time consuming (working with two computers), that means I was both discovering and fixing bugs rather than dividing the labor between the beta testers (finding) and me (fixing).
I fixed one bug in creating detailed maps which must have dated back to 2005. I’m kind of baffled that anything worked with this bug present (there were two separate copies of the detailed maps). See the comments regarding NetPlay below for most of the changes I made for the new versions I uploaded for the beta testers.
I revised the format for saved games (*.GAM) a couple of times so it contains the necessary data for switching decision makers (e.g., USSR, US, Italy) during setup for a NetPlay game. This was the reason version 9.06.06 was never uploaded for the beta testers.
Restoring NetPlay games now works. To accomplish this required a handful of coding changes. For instance, the autosaved games needed to be synchronized so they are created simultaneously on all computers. The program checks that both players are restoring the same game at the same point in the sequence of play. To make that determination, the program uses the Game Number and the Next Entry Number, which are written out to the GAM file. Prior to restoring a game, players should check those numbers to make sure they match. The program displays that information for each saved game when a player ‘considers’ whether or not to restore a game. When NetPlay executes, it checks for matching numbers and reports any discrepancy. The same system will be used for PBEM games.
Map, Units, and Scenarios
I removed Ceylon as part of the setup area for the Commonwealth in Guadalcanal. I also updated the naval unit writeups with the latest from Rob J.
Getting NetPlay to work forced me to revise the code for the Weather phase. It is now what I consider ‘beautiful’ code. Rarely do I go to the effort of writing code that might be considered beautiful. But the requirements for the weather phase are both few and weird. Having the weather preset for some scenarios but not for all of them is one strange aspect. Having it rolled every other impulse is another. In addition, MWIF rolls for the weather and reports it to both players. In practice that means reporting it for one major power for each player. After all players have closed the weather report form, the game advances to the next phase.
This combination of unusual requirements dictated that the code had to be crystal clear. Previously I had been patching the CWIF code to implement the weather phase, but the result became so confusing. So I more or less started over. Now the weather phase has its own module, similar in structure to all the other phases. Not a lot of code but it’s very easy to understand how it handles the unusual weather rules.
Setup is one of the most complex phases and I finally admitted that it also needed its own module with 3 subphases: (1) lend lease at the start of the game between major power on the same side, (2) placing each major power’s units on the map, and (3) placing partisan units on the map after all other units have been set up. I think of these as: lend lease, set up major powers, and set up partisans. It was a struggle to get these to execute correctly for NetPlay.
Lend lease involves all the major powers on a side which make decisions simultaneously. On the other hand, setting up the major powers is processed by each major power in a rigidly defined order. That is also preceded by a scrap units sub-subphase prior to randomly drawing units from the force pools. Always a pain to code was setting up the Nationalist Chinese and then the Communist Chinese - because they are one “major power” set up by two major powers. Setting up partisans is similar to setting up major powers, but with the kicker that there might not be an available hex for some units (“No room for the partisan unit on the map.”).
Here are the routines I gathered together in the Setup Phase module:
function SettingUpPartisans: Boolean;
procedure Setup__ChangeSubPhase(const NewSubPhase: TSetupSubPhase);
procedure Setup__TerminateMajorPower(const MPI: TMajorCountries);
Many other phases of the game needed revisions to support NetPlay. The most common problem is how to process an event so it is only done once, by one major power, but gets reported to all the players (e.g., setting up reserves). Again, the changes I made here were also required by PBEM. Mandatory DOW on major powers was a major hassle to revise but that now functions correctly. I currently have a similar problem with the mandatory DOW by Germany on Poland - that’s next on my list of things to fix.
Internet - NetPlay
I spent the month mostly working on NetPlay. I finished the code for working with the JSON data structure, which is used for Seeking Opponent requests. Players can post a request and reply to other players requests. The intention of this functionality is to enable players to easily find opponents for NetPlay games.
I also finished the code for players to send and receive messages and game data when playing over the internet. Getting that accomplished let me take the last couple of screenshots for the Players Manual. A typical game starts with 13,000 game record logs being created and transmitted between computers. That’s a pretty severe test for the game server.
Sending and receiving messages while logged into the NetPlay Forum is useful for resolving any outstanding issues about starting a NetPlay game (e.g., negotiating about optional rules). It can also be helpful just before starting/restarting a game to coordinate when to start and how long the session will last.
One aspect of NetPlay that I now have working correctly is that the flags in the main form accurately report which major powers currently have decisions to make. Those flags also indicate whether the local player controls the major power or not: a large image means the local player control the major power, a small image means he does not. In addition there is a little ‘Waiting’ message in the main form when a player is waiting for another player to make a decision.
I’ve been able to run the Barbarossa, Global War, and Missed the Bus scenarios through to the completion of setup in NetPlay mode. A couple of beta testers have been able to do the same for Global War. I’ve actually run Barbarossa through several impulses, but that was by taking mostly Pass actions for both sides. Testing NetPlay takes a lot of effort because it involves either two people or running two computers with a lot of back and forth. Now that I have saving and restoring NetPlay games working it will be much easier. That starting every game from the very beginning got old super fast.
Nothing new, other than the comments above about saved games and the game engine.
Artificial Intelligence (AI)
In making changes to support NetPlay I reviewed, and made a couple of changes to, the code determining which major powers are decision makers (I was able to reduce the code from over 1000 lines to 825). The important thing was to enable a player, who currently has no decisions to make, to have full access to the map, units, and various forms to review the status of his position vis-a-vis his opponent.
Another change I made for NetPlay, that has direct bearing on the AI Opponent code, was that I created a separate thread to run some code “in the background”. It is a minor technicality but I am happy to now have a working example of how to code background threads using Delphi. Virtually all the AIO code will execute in separate (i.e., background) threads. The intent is to have the AIO figure out what to do, while its human opponent is moving and clicking the mouse and using the keyboard. When the time comes for the AIO to decide something, it should be able to do so quickly.
I have finished with the text and screenshots for the Players Manual and Rules as Coded. Next up for my involvement with the documentation is proof reading the final layouts for how those will appear in print.
Tutorials, Training Videos, and Context Sensitive Help
Content Sensitive Help messages are finished (350+ messages totaling 693 kb). The 20 tutorials are also finished, although Rob W. is still worrying over the text for the interactive tutorials (261 kb). Rob wrote the text for all 10 of the interactive tutorials and Peter v. diligently went through them all, checking for clarity and typos. I made a bunch of code changes to support the interactive tutorials; there are still a couple of coding loose ends that I need to look into.
All that really remains here is for me to re-record the 6th and create the last three Training Videoes: 10, 11, and 12. The 6th (main form and drop down menus) needs redoing because I have seriously modified some of the forms since I recorded that video in December of 2009. The last 3 training videos are for naval movement, naval combat, and production/politics.
Historical Video, Music, and Sound Effects
I now have all the files I need for this except for the Italian National Anthem. For that I have a MP3 file, but I need a WAV file. All the sound files are WAV and the video files are WMV.
< Message edited by Shannon V. OKeets -- 6/3/2012 2:44:23 AM >
Perfection is an elusive goal.