Shannon V. OKeets -> RE: MWIF Game Interface Design (10/10/2005 6:59:02 AM)
|
I have finally finished defining all the entry types for the game record log. It runs to 28 pages so I have only put a few of the entries here. If anyone wants to see the full set of definitions, send me an email (Steve@PatternDiscovery.us) and I'll send them to you in a PDF file. ========================= Game Record Log and History File (as of October 9, 2005) I Overview MWIF maintains a record log of all events that change the game state. Each record log entry is a text string, comma delimited, that records an atomic level of detail. For example, “E1512, ULMv, T1000100, P2, U199, H2010, H2011" records Entry 1512, where Player 2 Moves the Land Unit 199 from Hex 2010 to Hex 2011, as part of transaction T1000100. There are over 400 different entry types/codes that control all modifications to the starting game state. In aggregate, the record log entries progress the starting game position incrementally through the entire game to the final game position. The record log serves as a repository for the history of a game and can be used to replay a game in its entirety. In combination with saved game files, an individual turn or impulse can be replayed. Note that each entry contains sufficient information to retract (undo) an action. What this means is that an entire game can be played backwards, starting with the end of the game and receding in reverse to the starting position. As an additional function, the record log is used for debugging the game. Record log entries are processed by the record log entry processor (RLEP) which, for PBEM games, validates entries received through email and from eMWIF. For other modes of play, all entries are generated by MWIF itself and do not need validation. The RLEP is responsible for keeping the copies of the game residing on different computers synchronized. For security’s sake, the record log file is kept encrypted during play. After a game has been completed, it is decrypted for replay and after-action reports. During a game, a player has the ability to replay the game from his own perspective, but can not see what the opponent has done (or at least no more than he can normally see during a game). Note that saving and restoring games is not part of the record log. Because different players can save the game on different computers, it is impossible to guarantee that the record logs are identical if they contain entries about saving games. However, each saved game contains the name of its associated record log and the most recent entry # in the record log at the time it was saved. In particular, the PBEM system expects players to have saved games that are out of sync on different computers. It uses the record log entries to bring each game up-to-date as play progresses through email. II Structure of Record Log Entries Each record log entry starts with its sequence number in the record log. The sequence numbers begin with 1, for selecting the mode of play, and are incremented by one for each entry thereafter and are unique. In order to retain the concept of each entry recording an atom of detail while simultaneously storing a set of entries as a logical group, transaction numbers are included. Each transaction number identifies a set of entries that happen simultaneously, and which would be nonsense if taken individually. For example, a land attack could result in units being killed, shattered, retreated and advanced. This would generate several entries in the record log, all of which would have the same transaction number. When retracting a land attack, the entire transaction has to be processed, not just an individual entry. The transaction entries begin with 1, for choosing optional rules, and are incremented by one when a new transaction occurs. They are therefore unique. Entries are generated through the actions of the players, the AI Assistant, the AI Opponent, eMWIF, and MWIF. MWIF makes entries when it comes to a place in the sequence of play that does not involve a player’s decision (e.g., randomly selecting units from the force pools during set up). Most entries pertain to moving units, but the whole gamut of game functions are covered, from choosing the scenario, declaring war, and choosing actions, through partisans, production, and political decisions. The four letter codes that follow the entry number identify the transformation that is being recorded. Commas are used as delimiters so the record log can be treated as a comma separated values (CSV) file. The number and types of parameters for each entry code vary. Often they contain a starting location followed by an ending location. For example, the life cycle for a unit is: start the game in the force pool, move to the production line, from there go to the reinforcement pool, enter the game map as a reinforcement, move around the map, and finally return to the force pool when destroyed. Each one of these events is recorded in the log as a separate entry and each entry has enough information for the unit to be moved backwards through this chain of events. The phrases “location”, “old location” and “new location” can indicate a hex on the map, a sea area, or any of the various ‘pools’ of units. III Record Log Entry Definitions (organized by World in Flames Sequence of Play) 0. Set Up 0.1 Choose mode of play Entry #, [Mode], Mode of play code, Date, Time, Name of player who starts the game (modes of play are: solitaire, head to head, internet, and PBEM) 0.2 Choose scenario Entry #, [Scen], Scenario # (scenarios are numbered 1 through 11) 0.3 Choose Optional Rules Entry #, [OptR], Transaction #, Option #, On/Off, Player name (optional rule settings and who set them) 0.4 Include Players Entry #, [AddP], Transaction #, Player name, Player #, Player alias, Add/Remove (Player names are looked up in the MWIF.INI file to determine IP addresses for Internet play and email addresses for PBEM play). Entry #, [Adde], Transaction #, Player #, eMWIF name (different names for eMWIF refer to different ISP locations for eMWIF, as set in the MWIF.INI file). 0.5 Assign Roles (e.g., countries) to players Directly Entry #, [ARDi], Transaction #, Player #, Role Code, Add/Remove (assign / remove a role to / from a player directly) 0.6 Assign Roles (e.g., countries) to players through Bidding Entry #, [Bid], Bid #, Player #, Bid amount (a player’s bid for a major power) Entry #, [ARBi], Final Bid, Player #, Bid amount, Role Code (assign a role to a player through bidding) -------------------------- 4.4.2 Port attack (s. 11.2) Air missions Entry #, [CAPP], Country #, Unit #, Old Location, New Location (unit flies CAP against port attack missions) Entry #, [WSPA], Transaction #, Country #, Unit #, Old Location, New Location, Movement Points Before, Movement Points (unit flies to a way station en route to a port attack mission) Entry#, [UAPA], Transaction #, Country #, Unit #, Old Location, New Location, Movement Points Before, Movement Points After, Air Missions Before, Air Missions After (unit flies a port attack mission, or last leg of same) Entry #, [UAIP], Country #, Unit #, Old Location, New Location (unit flies interception/escort against or in support of port attack missions) Search Entry#, [PASR], Transaction #, MWIF, Axis Search #, Axis Die Roll Modification, Axis Roll #, Allied Search #, Allied Die Roll Modification, Allied Roll # (search rolls for port attack) Entry#, [PASP], Transaction #, MWIF, Axis Surprise Points, Allied Surprise Points (port attack surprise points) Entry#, [PASE], Transaction #, MWIF, Axis/Allied, Surprise Expenditure, Unit # (how surprise points are spent; unit # is if a specific target is chosen by the attacker) [Avoid combat = 4, choose type = 4, select target = 3, inc attack col = 2, dec attack col = 2, inc air-to-air = 2, dec air-to-air = 2, inc anti-air = 2, dec anti-air = 2] Air-to-air combat Entry#, [ACRd], Transaction #, Air Combat Round # (initiate air-to-air combat round) Entry#, [ACIU], Transaction #, Unit #, Fighter or Bomber (include unit in air combat) Entry#, [ACFP], Transaction #, Country #, Unit #, Position # (position fighter for air combat) Entry#, [ACBP], Transaction #, Country #, Unit #, Position # (position bomber for air combat) Entry#, [ACAu], Transaction #, MWIF, Unit # (bomber cleared through automatically because there are no enemy fighters) Entry#, [ACOd], Transaction #, MWIF, Axis Air-to-air Strength, Allied Air-to-air Strength, Axis Odds, Allied Odds (air combat odds) Entry#, [ACRx], Transaction #, MWIF, Axis Roll #, Axis Result, Modified Result (air combat by Axis) Entry#, [ACRl], Transaction #, MWIF, Allied Roll #, Allied Result, Modified Result (air combat by Allied) Entry#, [ACAC], Transaction #, Country #, Unit #, Old Location, New Location (bomber cleared through on AC result) Entry#, [ACDC], Transaction #, Country #, Unit #, Old Location, New Location (bomber cleared through on DC result) Entry#, [ACAX], Transaction #, Country #, Unit #, Old Location, New Location (unit killed on an AX result) Entry#, [ACDX], Transaction #, Country #, Unit #, Old Location, New Location (unit killed on a DX result) Entry#, [ACAA], Transaction #, Country #, Unit #, Old Location, New Location (unit aborted on an AA result) Entry#, [ACDA], Transaction #, Country #, Unit #, Old Location, New Location (unit aborted on a DA result) Entry#, [ACBo], Transaction #, Country #, Bouncing Unit #, Bounced Unit # (bounce combat chosen) Entry#, [PLiv], Transaction #, MWIF, Unit # (pilot lives) Entry#, [CLiv], Transaction #, MWIF, Unit # (carrier pilot lives) Entry#, [PDie], Transaction #, MWIF, Unit # (pilot dies) Entry#, [CDie], Transaction #, MWIF, Unit # (carrier pilot dies) Anti-air combat Entry#, [PAAT], Transaction #, MWIF, Anti-Air Factors, # of Bombers (port attack anti-air table) Entry#, [PAAR], Transaction #, MWIF, Anti-Air Roll # (port attack anti-air roll) Air-to-sea combat Entry#, [PATL], Transaction #, MWIF, Net Air-to-Sea Factors, # of Ships (port attack air-to-sea table) Entry#, [PANR], Transaction #, MWIF, Air-to-Sea Roll # (port attack air-to-sea roll) Entry#, [PAAA], Transaction #, Country #, Unit # (naval unit disrupted instead of aborted in a port attack) Entry#, [PARB], Transaction #, Country #, Unit #, Old Location, New Location (air unit returns to base) 4.4.3 Naval air missions (s. 11.3) Entry #, [WSNv], Country #, Unit #, Old Location, New Location (unit flies to a way station en route to a naval air mission) Entry#, [UANv], Country #, Unit #, Old Location, New Location After, Air Missions Before, Air Missions After (air unit flies naval air mission or last leg of same) Entry#, [KaNv], Transaction #, Unit # (Japanese declare a kamikaze attack) 4.4.4 Naval movement (s. 11.4), transport (s. 11.4.5), interception(s. 11.4.6) [A naval move is recorded sea area by sea area - or port or sea box - but all as 1 transaction. This lets it be replayed in detail but only retracted as a transaction. Note, other possible parts of this one transaction are: (1) embarking units, (2) debarking units, (3) attempts at interception, and (4) any associated naval combat due to trying to fight through a successful interception.] Naval movement Entry#, [UJTF], Transaction #, Task Force #, Unit # (unit joins task force) Entry#, [ULTF], Transaction #, Task Force #, Unit # (unit leaves task force) Entry#, [TFMv], Transaction #, Task Force #, Old Location, New Location, Movement Points Before, Movement Points After, Range Before, Range After, Naval Moves Before, Naval Moves After (naval task force moves) Entry#, [TFM2], Transaction #, Country #, Task Force #, Movement Points Before, Movement Points After (every unit in task force pays 2 extra movement points because of the presence of the enemy) Entry#, [UNDM], Transaction #, Country #, Unit # (naval unit disrupted at end of move) ----------------------- 4.4.16 Land combat (s. 11.16) Ground attack declaration Entry#, [LAtA], Transaction #, Country #, Attacked Hex Location, Land Attacks Before, Land Attacks After (land attack announced) Entry#, [LAtU], Transaction #, Country #, Unit # (land unit joins attack) Entry#, [LANo], Transaction #, Country #, Notional Unit Yes/No (include or exclude notional unit) Air missions Entry #, [CAPu], Country #, Unit #, Old Location, New Location (unit flies CAP against ground support missions) Entry #, [WSup], Transaction #, Country #, Unit #, Old Location, New Location, Target Location, Night Mission - Yes/No, Movement Points Before, Movement Points After (unit flies to a way station en route to a ground support mission) Entry#, [UAup], Transaction #, Country#, Unit #, Old Location, New Location, Night Mission - Yes/No, Movement Points Before, Movement Points After (unit flies ground support or last leg of same) Entry #, [UAIu], Country #, Unit #, Old Location, New Location (unit flies interception/escort against or in support of ground support missions) Anti-air combat Entry#, [upAT], Transaction #, MWIF, Anti-Air Factors, # of Bombers (ground support anti-air table) Entry#, [upAR], Transaction #, MWIF, Anti-Air Roll # (ground support anti-air roll) Combat support Entry#, [LAup], Transaction #, MWIF, Air Unit #, Ground Support Factors (unit provides ground support) Entry#, [LAAB], Transaction #, Country #, Artillery Unit # (unit provides artillery bombardment) Entry#, [LAHQ], Transaction #, Country #, HQ Unit # (unit provides HQ support) Entry#, [LASB], Transaction #, Country #, Naval Unit # (unit provides shore bombardment - defensive or offensive) Combat calculations Entry#, [LCDS], Transaction #, MWIF, Unit #, Unmodified Strength, Modified Strength (unit’s defensive strength) Entry#, [LCAS], Transaction #, MWIF, Unit #, Unmodified Strength, Modified Strength (unit’s attack strength) Entry#, [LCTD], Transaction #, MWIF, Total Defending Strength (total defending strength) Entry#, [LCTA], Transaction #, MWIF, Total Attacking Strength (total attacking strength) Entry#, [LCHR], Transaction #, MWIF, Roll #, HQ Support Succeeds/Fails (HQ support resolution) Entry#, [LCOd], Transaction #, MWIF, Attack Odds, (land combat odds) Combat results Entry#, [LCTB], Transaction #, Country # or MWIF, Assault/Blitzkrieg (combat table choice; made by MWIF when assault mandatory ) Entry#, [LCRo], Transaction #, MWIF, Combat Results Table Used, Fractional Odds Probability of Success, Fractional Odds Roll #, Final Attack Odds, Land Attack Roll #, Die Roll Modification (combat die rolls) Entry#, [LCDd], Transaction #, MWIF, Combat Results Table Used, Attacker Dead, Attacker Code, Defender Dead, Defender Code (combat results; attacker codes are: 0 = disrupted, 1 = ½ disrupted, 2 = no effect, 3 = advance, 4 = blitzkrieg; defender codes are: 0 = shattered, 1 = retreated, 2 = disrupted, 3 = ½ disrupted, 4 = no effect) Entry#, [LCUX], Transaction #, Country #, Unit #, Old Location, New Location (unit killed in combat) Entry#, [LCDi], Transaction #, Country #, Unit # (unit disrupted in combat) Entry#, [LCSh], Transaction #, Country #, Unit #, Old Location, New Location (unit shattered in combat) Entry#, [LCRe], Transaction #, Country #, Unit #, Old Location, New Location (unit retreated in combat) Entry#, [LCAd], Transaction #, Country #, Group #, Unit #, Disrupted Yes/No, Old Location, New Location (unit advances after combat) Entry#, [NonC], Transaction #, MWIF, Unit #, Old Location, New Location (unit destroyed because it violated non-cooperation restrictions) ===================== There are about 450 unique entry types.
|
|
|
|