Shannon V. OKeets
Posts: 22095
Joined: 5/19/2005 From: Honolulu, Hawaii Status: offline
|
May 2, 2010 Status Report for Matrix Games’ MWIF Forum Accomplishments of April 2010 Project Management I monitored all the threads in the MWIF World in Flames forum daily. Hardware and Software Theme Engine is still disabled but I expect to restore it to active duty in the next couple of weeks. Running the Delphi 2010 IDE/debugger is still very annoying. For example, as I type this I am waiting for the debugger to reach a ‘Break’ point so I can analyze variable values to see why it is having trouble returning Yes to the question of whether an Egyptian unit cooperates with Wavell. I’ll probably have to kill the IDE and restart Delphi 1020 soon. The IDE is continuously requesting more memory (from 4K to 80K) every second or so. It starts out with 130 MB and increases that up to 282 MB (currently - I monitor this all the time, and I always debug with a stopwatch near at hand so I can track how long it takes inspecting its navel). My system has 12 GB of RAM and 9GB of that is unused, so I don’t care about it requesting more memory, I just wish it wouldn’t take forever before letting me examine variables. At one point this month I resorted to progamming methods I used in the late 1960's: inserting print statements to track variable values, sigh. Beta Testing I released versions 4.01.01, 4.01.02, 4.01.03, 4.01.04 and 4.01.05 to the beta testers this month. They got a new version about every 4 days at the beginning of the month but that paced slacked off once I started working on the rewrite of the supply routines. I’ll upload version 4.01.06 to them today (either before or after I finish writing this). Almost all of the changes this month related to correcting new bugs that I introduced when making thousands of edits since the first of the year - to accommodate Delphi 2010, Theme Engine 9.10, and other libraries upgraded to support Windows 7. Those are down to only a few bugs presently, but the beta testers will undoubtedly find more as they work their way through the 152 phases/subphases/sub-subphases. Saved Games Nothing new. Map and Units Added some more naval unit writeups from Rob/Warspite. Scenarios and Optional Rules Nothing new. MWIF Game Engine and CWIF Conversion Rewrote the supply routines. I am now in the process of debugging them. So far the program correctly identifies all primary and potential secondary supply sources for all countries (major powers and minor countries). It also finds the shortest overland rail path from each secondary to a primary correctly. I am very happy with its ability to perform a directed search, wherein it makes the right choice as to which hex to explore next; one of my main concerns here was to improve the efficiency of tracing a supply path so the AIO could conduct hundreds of what-if moves and determine the effects those moves have on supply. I haven’t tested the oversea path search algorithm yet, though that code is mostly written. I also have written the code for tracing a Basic supply path from a unit to a supply source. Actually I wrote the code for unit => supply source Basic path first. And then I cloned and modified that to create the secondary => primary using a Rail path. I’ll reuse the code for searching for a Basic path to link ports to supply sources and units, and to link tertiary supply sources to secondary and other tertiary sources. I already have written the code to propagate supply from one sea area outwards. Perhaps I should explain the logic here. Every coutnry which has units maintains the following variables: // **************************************************************************** // Variables for supply links, connections, and paths. Primary sources. // **************************************************************************** PrimarySupplyCities: TSupplyCitiesList; PrimarySupplyHQsTurn: TSupplyHQsList; PrimarySupplyHQsImpulse: TSupplyHQsList; PrimarySupplyCoopCities: TSupplyCitiesList; PrimarySupplyCoopHQsTurn: TSupplyHQsList; PrimarySupplyCoopHQsImpulse: TSupplyHQsList; // **************************************************************************** // The secondary sources with All at the end are all possible secondary sources. // **************************************************************************** SecondarySupplyCitiesAll: TSupplyCitiesList; SecondarySupplyCitiesCoopAll: TSupplyCitiesList; SecondarySupplyHQsAll: TSupplyHQsList; SecondarySupplyHQsCoopAll: TSupplyHQsList; // **************************************************************************** // These secondary and tertiary variables have valid supply connections back to // a primary supply source. // **************************************************************************** SecondarySupplyCities: TSupplyCitiesList; SecondarySupplyCitiesCoop: TSupplyCitiesList; SecondarySupplyHQs: TSupplyHQsList; SecondarySupplyHQsCoop: TSupplyHQsList; TertiarySupplyCities: TSupplyCitiesList; TertiarySupplyCitiesCoop: TSupplyCitiesList; TertiarySupplyHQs: TSupplyHQsList; TertiarySupplyHQsCoop: TSupplyHQsList; // **************************************************************************** // These variables track which sea areas can be used by each country for supply. // **************************************************************************** SeaAreasSupplyPath: TSeaAreaSupply; The last variable is for keeping track of which sea areas can trace supply back to a supply source. It is defined as: // **************************************************************************** // Status. 0: unexplored; 1-4: # of basic hexes used; 5: failed; 6: impossible. // Beaufort (#9) and Kara (#10) are impossible. // **************************************************************************** TSeaAreaSupplyEntry = record Status: Byte; Path: TSupplyPath; end; // **************************************************************************** // 1st entry is for a Basic path, 2nd is for a Rail path, 3rd is for an infinite // path (Isolation). // If a RailPath exists, it's Status is always <= the Basic path's Status. // **************************************************************************** TSeaAreaSupply = array [0..SeaAreaCount - 1, 1..3] of TSeaAreaSupplyEntry; Major powers have an additional variable: // **************************************************************************** // These variables track which sea areas can be used by each major power's // aligned countries for supply. The difference between SeaAreasMPSupplyPath // and SeaAreasSupplyPath is that the former is a path to the major power's own // supply source, as opposed to one belonging to an cooperating major power. // Aligned minor countries can not trace supply to the major powers that // cooperate with its controlling major power. // **************************************************************************** SeaAreasMPSupplyPath: TSeaAreaSupply; To help you understand why major powers have the second TSeaAreaSupply variable, consider a German and a Rumanian infantry units stacked together in North Africa. The German can trace to Italian supply sources, since they cooperate. But the Rumanian can only trace to German and Rumanian sources. So, the German can trace to any of the Italian cities on the coast, while the Rumanian will have to trace to supply further inland. Here is the processing sequence for determining supply for all units on the map: // **************************************************************************** // UnitMenuTraceSupply. // **************************************************************************** // Step 1: find all valid supply sources for major powers and minors. // **************************************************************************** IdentifyMajorPowersSupplySources; IdentifyMinorsSupplySources; // **************************************************************************** // Step 2: find all valid secondary supply sources that do not go overseas. // **************************************************************************** IdentifyMajorPowersValidSecondarySupplySources; IdentifyMinorsValidSecondarySupplySources; // **************************************************************************** // Steps 3 and 4: initialize the sea area supply sources and identify all the // sea areas that can be used by major powers and minors to trace supply to a // primary supply source, by either a Basic (3rd step) or Rail (4th step) path. // **************************************************************************** InitializeSeaAreaSupply; IdentifySeaAreasSupply(True); // **************************************************************************** // Step 5: identify all the secondary supply sources for both major powers and // minors that can trace to a primary via an overseas Basic or Rail path. This // search doesn't care what the path type is. // **************************************************************************** IdentifyMajorPowersOverseasSecondary; IdentifyMinorsOverseasSecondary; // **************************************************************************** // Step 6: identify all the tertiary supply sources that do not go overseas. // **************************************************************************** IdentifyMajorPowersValidTertiarySupplySources; IdentifyMinorsValidTertiarySupplySources; // **************************************************************************** // Step 7: identify all the sea areas that can be used by major powers and // minors to trace supply to ANY supply source (which didn't become a valid // supply source by going overseas), via a Basic path. // **************************************************************************** IdentifySeaAreasSupply(False); // **************************************************************************** // Step 8: identify all the tertiary supply sources that go overseas. // **************************************************************************** IdentifyMajorPowersOverseasTertiary; IdentifyMinorsOverseasTertiary; // **************************************************************************** // Step 9: determine supply for all units, // **************************************************************************** TraceUnitSupply; My general strategy here is to determine not only supply for each unit but to also record the supply path the unit used when it last traced supply. When supply has to be redetermined, each unit will first check to see if the path it used last time is still valid. If so, there is no need do a new search for a supply path for that unit. I record each supply path as a series of links (e.g., from unit to HQ to primary supply city). Then I also record which units are using which links. This enables the AIO to immediately know which supply links are being most heavily used: for defense and for offense. I’ve created a form so players can monitor this too (see below). Player Interface Created a new form for debugging supply paths. I expect this to be part of the final product and very useful for new players to learn about supply sources and paths. The Supply Sources Display form lets you look at each major power and minor country and see (1) its different supply sources. Clicking on a supply source centers (2) the insert map on the hex. It also lists (3) the hexes and sea areas in the path that is being used. You can examine secondary to primary paths the same way. At the bottom of the form is (4) a list of the units using the supply source. I want to add the ability to list all the units that are out of supply and isolated as well. Once I get Theme Engine reenabled, I’ll post some screenshots of the form and solicit comments. Internet - NetPlay Nothing new. PBEM Nothing new. Artificial Intelligence (AI) Nothing new. Player’s Manual Nothing new. Tutorials, Training Videos, and Context Sensitive Help Nothing new. Historical Video, Music, and Sound Effects Nothing new. Marketing Andy Johnson has made enormous progress on the MWIF web site. The beta testers have been given access to the site and have been helping with content and well as critiquing how things look and feel. At this point, when it will be made available to the public depends primarily on Matrix Games management. The fan site contains a lot of different stuff: Picture & Text Tutorials, Training Videos, Articles on AI by Peter, and on playing through a turn of WIF by Patrice, Screenshots, Rules as Coded, excepts from the Players Manual (on scenarios, ADG add-ons, optional rules, sequence of play, modes of play, system requirements, etc.), an article previously published in an ADG Annual where Patrice interviewed me about game develpoment, and WW II quizzes. The last is expected to be a monthly feature on WW II trivia, WW II movies, and MWIF rules. Robert, Paul, and Michael are helping Andy with that. Meanwhile Patrice is working on a MWIF wiki for the fan site. My involvement has been close to nil, but I look it over every so often and I think it will be very well received. Communications Nothing new.
_____________________________
Steve Perfection is an elusive goal.
|