RE: When? (Full Version)

All Forums >> [New Releases from Matrix Games] >> World in Flames



Message


Shannon V. OKeets -> RE: When? (8/10/2009 9:23:48 AM)


quote:

ORIGINAL: christo


quote:

ORIGINAL: Shannon V. OKeets



Alain (Caquineur) sent me a partially edited version of the Land Unit writeups. I have put Adam and Christo in contact with him with the hope that they will author some of the missing writeups on land units.

BIG SNIP


IX. Glitz (historical video, sound effects, music, historical unit write-ups)
I have Robert on the naval unit writeups with Alain/Adam/Christo working on the same for land units. I am waiting on the sound effects from Jim and the music from Dave. There is no real hurry on the last two, though I would like to have them in hand before mid-August.



Not guilty
Would love to be in a position to help but methinks it was someone else

Christo

It is. Christo is the forum member's actual name, not his name in the Matrix Games forums.




Jagdtiger14 -> RE: Long Time Coming! (8/10/2009 4:46:40 PM)

Hidden task forces is part of 11.4.3 Task forces(SiF option 21). It reads: "As a further option you can keep your task force marker face down....You can examine your opponents task force display at any time." FYI: Every task force is required to have at least one naval unit in it.

I dont know anyone who plays with this option, because its a headache and time consumer for most people who will want to keep track of information. Plus, there is a limited number of task force markers and task force spaces on the display chart, which limits fog of war along with opponents being able to examine that display chart. MWiF could make a good naval fog of war possible if it addresses the above. I know product one will not have this feature, but possibly in an add on, or "product two"?


quote:

ORIGINAL: Shooterguy


quote:

ORIGINAL: Jagdtiger14

Are you asking about the Hidden Task Forces Option?...or a change in the naval rules?

I don't remember a hidden task force option in paper WIF, but yes that sounds like an optional rule like that would fit the bill. At least if the contents of a task force were hidden it would add some fog of war. Having limited intelligence (ie. limiting what a player sees of the enemy's forces) would be better.

There's been quite a bit written about paper WIF's number one draw back being the ability to see every counter on the board. There was an optional rule (as I remember, don't own any paper WIF copies any more) where players couldn't unstack anything on the board to add at least a little fog of war. My problem with seeing everything on the board was that it made submarines much less effective. You could simply drive around them or when you had to drive past them ensure you had enough escort to kill any submarine that dared to attack you.

I understand Steve's reply that he's not supposed to change the rules. No problem. Put out the game as written and we'll all be happy (including me)! Something like what I'm talking about could be added as an optional rule or an update later if people ask for it. [:D]





Justascratch -> RE: Long Time Coming! (8/20/2009 6:52:25 PM)

I have barely gotten into WitP AE and I'm already becoming anxious for the WIF release. If the game is half as good as this forum its gonna be fantastic.




ypsylon -> RE: Long Time Coming! (8/21/2009 1:12:26 PM)

Im anxious for the past 10 years and I dont play WitP:AE! [:D]

Also Im quite sure it will more than "half as good".




micheljq -> RE: When? (9/2/2009 2:50:39 PM)

Mmmm.  Any monthly report?  [&o]




olivier_slith -> RE: Long Time Coming! (9/3/2009 2:16:32 AM)

A friend of mine was mentioning a while back that we had talked about how it would be cool to have a computer version of WiF in the late 80s...it just took 20 years....and I'm also playing WiTP AE waiting for WiF or a AE patch, whichever comes first.




Shannon V. OKeets -> RE: Long Time Coming! (9/3/2009 4:10:20 AM)

September 1, 2009 Status Report for Matrix Games’ MWIF Forum

I. Project Management
I am not going to make the first week of November, 2009 for product release.

I really don’t know how long it will take me to fix all the bugs I am seeing. The beta testers discover the bugs, report them to me (oftentimes with saved games so I can quickly reproduce them), I recreate the problem on my computer, fault isolate the bug, fix the code, and then recreate the situation to make sure the bug is actually fixed.

This past month I focused 90% of my time and energy on fixing bugs, and it looks like that is what I will be doing in September too.

Communications
Nothing new from Mike (Players Manual), Jim (sound effects), and Dave (music).

I monitored all the threads in the MWIF World in Flames forum daily and uploaded versions 2.00.02, 2.00.03, 2.00.04, 2.00.05, 2.00.06, and 2.00.08 for the beta testers. Version 2.00.05 was short-lived since I needed to make a correction so Germany would declare war on Poland. About that bug, one of my recent changes was to check if there were no major powers capable of declaring war on minors. That situation comes up regularly in Barbarossa and one of the beta testers pointed out that that subphase of DOW should be skipped. But the logic was mistakenly applied to Germany’s DOW on Poland too, so the war got off to a slow start. Version 2.00.07 was only used by me (not the beta testers).

Orm continues to post his quasi after-action-reports on Barbarossa and Peter is continuing his on the start of Global War. Michael concluded his AAR on the Winter War.

Alain (Caquineur) has been going through the data files, field by field, looking for inconsistencies (primarily in the internal cross references). He has found a few odd bits here and there and Patrice has made the small corrections to the Map and Unit data files. For the most part this is buffing and polishing, though there were some units from the 2007 counter sheets that had a couple numbers changed that we had missed.

Patrice continued converting the existing text from the Players Manual into context sensitive help for the forms. In his spare time he has sent me a few more screen shots of forms for Section 8 of the Players Manual.

Rob Jenkins continues to do an enormous number of naval unit writeups every week.

Alain (Caquineur) sent me an updated version of the Land Unit writeups, which contained new contributions from Adam.

Peter Skoglund made progress on the convoy setups for all the major powers for the Global War scenario.

No communications with Harry Rowland or Chris Marinacci.

Hardware and Software Development Tools
I have not installed ThemeEngine July/2007.

II. Sequence of Play
Beta Testing
There were 24 respondents to my request for beta testers and we chose 13, to bring the total back up to 30 active. All of the new beta testers began testing in the beginning of August.

I uploaded six new versions for the beta testers this month, which met my goal of one a week.

Version 2.00.02 (22 changes): fixed the Stay at Sea code so the interface works cleanly, corrected problems with naval movement and naval interceptions. As usual, an odd mixture of other corrections were made.

Version 2.00.03 (31 changes) was mostly to fix bugs in naval combat, especially the use of surprise points. A couple of ground support bugs were corrected, and a bunch of other things were fixed, including several bugs in NetPlay.

Version 2.00.04 (25 changes) had corrections for partisans, USSR reserves, Flyouts, Vichy France, air-to-air combat, and fixing several air missions bugs. I became annoyed enough with the air mission problems that I started a systematic review of the code for all 8 air missions by printing out the code and “desk checking” it. For this version I completed the examination of ground support, port attacks, and strategic bombing. My newly purchased printer (first in 6 years) has the ability to do two-sided printing which made desk checking much easier. Each one of these modules is over 1500 lines of code.

Version 2.00.05 was only in use for 3 hours and replaced by 2.00.06 to correct a bug where Germany did not declare war on Poland.

Version 2.00.06 (30 changes) completed the desk checking for the other 5 air missions. There were changes to the Naval Combat Abort Queue form, air-to-air combat, land combat (to display more details on the calculation of the CRT column and die roll modifiers), anti-aircraft fire, use of surprise points, and effects of surprise impulse on defensive air units.

Version 2.00.07 was never released to the beta testers and just used by me.

Version 2.00.08 (20 changes) reformatted the saved game files to embed the date and time the saved game was made in the saved game file. This change was why version 2.00.07 wasn’t released. Other mods were for returning carrier air units to carriers when insufficient carriers remained, choosing HQs for Offensive chits, merging convoys using the Naval Review Details form, fixing several bugs for captured naval units during the Conquest phase, and correcting Vichy France bugs.

As you can see, the range of bugs is wide, and I haven’t mentioned the more obscure items. To provide some insight into this, the code for the 8 air missions covers ~9 subphases for each. In effect, there are separate code segments for ~75 subphases, just to determine which air units are permitted to fly. That comes out to over 12,000 lines of code. Other code handles the player interface for moving the air units to and from their target hexes, and there are 5 primary forms for processing air missions: air-to-air combat, anti-aircraft fire (2 forms), air attack effects on naval units, and air attack effects on other targets.

Altogether, the code for the air missions is well over 20,000 lines. Recent corrections I have made were to add the word ‘not’ in two places, move a line of code down 2 lines, switch the order in which two lines of code were executed, and move 2 lines of code down 20 lines in a routine. You could think of this as a 20,000 piece jigsaw puzzle. MWIF in toto is 300,000+ lines of code. It is difficult to get every line of code perfect, but that is what is required.

Test Script/Plan
Nothing new.

Game Engine Redesign
Nothing new on rewriting the supply routines.

Units, Map, and Scenarios
Rob continues to generate new naval unit write ups. Alain sent me his current master copy of the land unit writeups, including some new ones from Adam. There were several small changes to the map and unit data files from Patrice & Alain.

Optional Rules
Nothing new.

Saved Games
I changed the format of the saved games to accommodate a strange file date format in Europe. Most of the beta testers in Europe have operating systems that store the date a file was last modified in a format that the standard Delphi code I am using can process correctly. However, for one of the beta testers, every time the program examined the date-last-modified for a file, an error message was generated. I gave up on trying to figure out what the differences were since they were internal to the Windows operating system. Instead I now simply embed the date and time of each saved game’s creation as part of the saved game. There is no need to ever even try to look at the date-last-modified.

Was this problem important enough to warrant fixing? Well, I think of each beta tester as representing ~3% of the customer base. So if the game sells 5000 copies, that means 150 customers would have encountered that fatal error. It is clear to me that every bug has to be fixed. Simply put, software which contains 1 fatal bug is worthless.

III. Player Interface
I spiffed up the Spend Surprise Points form somewhat since I was working on that code anyway. Because there were problems reported with that function in the sequence of play, I spent some time reviewing and revising the code (adding a bunch more comments and renaming variables).

I also revised the Test LAIO Scripts form so it shows more information simultaneously.

I completed revisions to the New Owner form. This is a simple form, used rarely, that lets a player decide the new owner (major power) for units that are conquered. Sometimes the original owner chooses and sometimes the conqueror chooses.

I modified the opening screen so restoring saved games from the AutoSave directories is easy to do. Besides the saves that a player specifically requests, MWIF has the ability to save the game immediately before most of the phases. Some of the phases have the Axis as the phasing side, others have the Allies as the phasing side, and yet others are ‘general’, such as the Weather. For each scenario, MWIF maintains saved games in: Saved Games, Saved Games\AutoSave, Saved Games\AutoSave\Axis, and Saved Games\AutoSave\Allied. All 4 of these directories can now be instantly examined from the opening screen, without having to negotiate the disk file structure.

IV. NetPlay
The beta testers have tested both MWIF and NetPlayTestCom for communicating between computers. No major problems were reported but I need to translate some ‘problems’ into innocuous messages. For example, a MadExcept error message appears when the player tries to connect and he is already connected. The same is true for disconnecting. When I next get a chance to spend time on this I’ll get bidding for major power groups functioning. To that end, I have revised some code in the Start New Game module.

V. PBEM
Nothing new.

VI. AI Opponent
I spent a couple of days working on this, more or less putting all the foundation pieces in place for the next two steps of parsing scripts. That will leave me with just one step remaining to complete the parser.

Peter has been posting alternate convoy setups for each of the major powers.

VII. Documentation
I made some changes to the Players Manual Section 8, adding a few screen shots with accompanying text. There are a couple dozen forms in that section that still need some work. Section 6 is missing a lot of material on the Standing Orders forms.

VIII. Learning Aids (tutorials, training video, embedded help text)
I revised the first Training Video so it uses, and explains, the revised Opening Screen.

One mini-project I completed this month was to identify all the forms that need help messages. My previous work on that was over a year ago, and since then there were a lot of additions and a few deletions. After the dust settled, the count changed from 97 to 151 forms with help messages. Patrice is copying the text from the Players Manual for inclusion in the Help Content.txt file, but there are about 50 for which I need to write a few lines.

IX. Glitz (historical video, sound effects, music, historical unit write-ups)
I have Robert working on the naval unit writeups with Alain/Adam working on the same for land units. Robert has been getting some help from Mike Dubost on the submarine writeups. I am waiting on the sound effects from Jim and the music from Dave.

X. Marketing
Von Paul (forum member) has shown some interest it setting up the fan site but he says that the previous work done by Andy Johnson won’t be usable. The problem is Andy was using licensed software ($). Paul said he wanted to better understand what he was signing up for before getting seriously involved.

Remaining Tasks

I Tasks requiring a small number of hours

1. Historical video
Integrate these into the program (randomizing when they are shown).

2. Sound effects
Awaiting Jim’s complete set of sound effects, after which I will integrate them into the program.

3. Music
Awaiting Dave’s complete set of music, after which I will integrate them into the program.

4. Unit writeups
Rob continues to generate more naval unit writeups and Alain is editing the land unit writeups. I simply replace the old files with the new ones when they send me updates.

5. Players Manual
9 of 11 sections are done.

6. Context sensitive help
I need to write a few lines for ~50 minor forms that pop up during play. For example, there is a special form for choosing which of a group of bombers to clear through during air-to-air combat.

7. Auxiliary files
These are starter sets for new players so they can jump right into playing the game without having to make a lot of preparatory decisions. I just need to round out my collection.

8. Tutorials and training video
The Training Video is 80% done. In August I worked on debugging naval movement and combat, which needs to be perfect before I can record the training video on that topic.

9. Player Interface
With the exception of the Standing Order forms for PBEM, I have finished the forms (150+ at last count).

II Tasks requiring a medium number of hours

10. Optional Rules
For the optional rules that I want to finish, I need to fix bugs and bring them up-to-date with rules changes since 2003.

11. PBEM
The technical task of sending and receiving emails from within the program hasn’t been coded. Work on the standalone program (running on a third party computer) to generate random numbers hasn’t begun. The large task here concerns the Standing Orders: defining and instantiating internal variables, then displaying them in the forms so players can review and revise them.

III Tasks requiring a large number of hours

12. Sequence of Play
There are still tons of bugs related to the sequence of play. I just have to “keep on keeping on” with correcting them.

13. NetPlay
There isn’t a lot to do directly related to NetPlay, but the underlying performance of the program in generating Game Record Log Entries has to be perfect. That’s because the GRLs are sent to each computer in a networked game to keep them up-to-date with the decisions of all players. I need to instantiate, with actual data, the form used to monitor internet communications while a game is in progress.

14. AI Opponent
I need to finish writing the parser. Converting the AIO decision making that I have written out in plain text into rules will require a lot of time. Which then leaves the task of calibrating the rules’ performance so the AIO plays well.





micheljq -> RE: Long Time Coming! (9/3/2009 1:31:41 PM)

Version 2.00.05 would have make a very quick/short game of WiF indeed!  [:D]

Thank you very much for your report.  [:)]




SamuraiProgrmmr -> RE: Long Time Coming! (9/3/2009 4:01:38 PM)

Hang in there!

Still pulling for you




macgregor -> RE: Long Time Coming! (9/3/2009 5:31:48 PM)

It seems now that MWiF is entering it's final phase before completion. Notwithstanding the number of bugs reported, I think we can dust off our old rule books, or, the latest 'RAW'. If not November, I don't expect it to take much longer. As when I first played regular WiF, I probably won't be bidding too high. Convoys and Cruisers should be a very nice touch, as I've never played with those options.




Edfactor -> RE: Long Time Coming! (9/3/2009 6:42:09 PM)

quote:

ORIGINAL: macgregor
It seems now that MWiF is entering it's final phase before completion. Notwithstanding the number of bugs reported, I think we can dust off our old rule books, or, the latest 'RAW'. If not November, I don't expect it to take much longer. As when I first played regular WiF, I probably won't be bidding too high. Convoys and Cruisers should be a very nice touch, as I've never played with those options.



There is still alot to do, so don't get excited yet. The AIO alone will be a killer and probably very time intensive. I would hope for an April 2010 release honestly. I think it's more important to get it right then to get it out.




Jagdtiger14 -> RE: Long Time Coming! (9/3/2009 7:07:50 PM)

Besides the bugs, there is tons of other work listed.  The earliest optimistic release might be in time for Origins 2010...so maybe early June. 




composer99 -> RE: Long Time Coming! (9/3/2009 8:13:32 PM)

An Origins release would probably be more suitable for a game of this nature than a November/Christmas release.

I can see people all excited about MWiF at Origins shelling out for it. People buying MWiF for their casual gamer buddies at Christmas? Not so much (although I might have asked for it for Christmas from my family).




macgregor -> RE: Long Time Coming! (9/4/2009 4:46:25 AM)


quote:

ORIGINAL: Edfactor
There is still alot to do, so don't get excited yet. The AIO alone will be a killer and probably very time intensive. I would hope for an April 2010 release honestly. I think it's more important to get it right then to get it out.

Are you now Steve's spokesman or Matrix's? Honestly. So far Steve has said beginning of November is out. I think I'll wait to hear it from his mouth that he still needs at least 9 more months to release.




yvesp -> RE: Long Time Coming! (9/4/2009 6:18:33 AM)


quote:

ORIGINAL: macgregor


quote:

ORIGINAL: Edfactor
There is still alot to do, so don't get excited yet. The AIO alone will be a killer and probably very time intensive. I would hope for an April 2010 release honestly. I think it's more important to get it right then to get it out.

Are you now Steve's spokesman or Matrix's? Honestly. So far Steve has said beginning of November is out. I think I'll wait to hear it from his mouth that he still needs at least 9 more months to release.



You're right, and it's not good that Steve didn't say anything at all...
Or that the official site still mentions "in development" rather than a tentative release date.

If you read my answer to Steve monthly report two or three months ago, I was dubious on the November release because I wrotte then that it was a very optimistic schedule, so this setback doesn't really come as a surprise to me. I still had hoped otherwise, but previous reports were not that good either (no serious work on the AIO for three months... hum...).

I do agree that an April/May release is much more realistic, given that the AIO is still mostly in computer limbo ; the fact that all is supposedly layed down on paper is good, but vastly unsufficient. There is still a hell of a lot of work to do there.

Steve, hang on! We're behind you, and always ready to wait for a good product!

Yves




Norden_slith -> RE: Long Time Coming! (9/4/2009 2:08:29 PM)


quote:

ORIGINAL: yvesp


quote:

ORIGINAL: macgregor


quote:

ORIGINAL: Edfactor
There is still alot to do, so don't get excited yet. The AIO alone will be a killer and probably very time intensive. I would hope for an April 2010 release honestly. I think it's more important to get it right then to get it out.

Are you now Steve's spokesman or Matrix's? Honestly. So far Steve has said beginning of November is out. I think I'll wait to hear it from his mouth that he still needs at least 9 more months to release.



You're right, and it's not good that Steve didn't say anything at all...
Or that the official site still mentions "in development" rather than a tentative release date.

If you read my answer to Steve monthly report two or three months ago, I was dubious on the November release because I wrotte then that it was a very optimistic schedule, so this setback doesn't really come as a surprise to me. I still had hoped otherwise, but previous reports were not that good either (no serious work on the AIO for three months... hum...).

I do agree that an April/May release is much more realistic, given that the AIO is still mostly in computer limbo ; the fact that all is supposedly layed down on paper is good, but vastly unsufficient. There is still a hell of a lot of work to do there.

Steve, hang on! We're behind you, and always ready to wait for a good product!

Yves



And when all that AI code finally IS scripted, the bugreporting and tweaking will reach new highs, no doubt. I must admit that next summer or even later gets more and more likely. Anyway, Steves tenacity and sheer will is impressive.




brian brian -> RE: Long Time Coming! (9/4/2009 4:05:43 PM)

bugs bugs bugs, humanity would be pretty screwed without bugs




macgregor -> RE: Long Time Coming! (9/4/2009 4:14:33 PM)

I'm sure Steve takes comfort in knowing you guys have already allotted him the time he needs to complete the 'big blue' AIO you all want. Actually that doesn't do justice to your proposed AIO. The game of WiF is infinitely more complex than chess. At this point I'm just looking for a game, any game, that will suit my grognard needs. When it is released, I will be loyal to that game. Have fun gentlemen.




HansHafen -> RE: Long Time Coming! (9/4/2009 4:55:50 PM)

I am just scared the AI will be extremely hard to code and get right. WIF is so complex and any logical, methodical decision tree will be like a 300 year old Redwood at a minimum! The AI has to think point to point on the frontline, but also has to see in depth, behind the front lines for potential threats including armor, planes, Offensive chits etc. I want it to be possible, but I am concerned. It seems as though it is difficult enough just to get the sequence of play working correctly.

I am very happy with what I see so far however! It looks fantastic! I'm so excited I could pee my pants. [:)]




yvesp -> RE: Long Time Coming! (9/4/2009 9:06:07 PM)


quote:

ORIGINAL: HansHafen

I am just scared the AI will be extremely hard to code and get right. WIF is so complex and any logical, methodical decision tree will be like a 300 year old Redwood at a minimum! The AI has to think point to point on the frontline, but also has to see in depth, behind the front lines for potential threats including armor, planes, Offensive chits etc. I want it to be possible, but I am concerned.



Just my two cents there :

I believe that Steve would do very good to only build the AIO inner architecture and leave the actual script
writing to the community. He would gain some time this way. However, writing a script langage (and inner
tables) adaptable enough for the scripts to be really useful is already in itself a daunting task... In effect,
this is "just" creating a language and the compiler that goes with it...

Yves




coregames -> RE: Long Time Coming! (9/4/2009 10:19:21 PM)


quote:

ORIGINAL: yvesp

Just my two cents there :

I believe that Steve would do very good to only build the AIO inner architecture and leave the actual script
writing to the community. He would gain some time this way. However, writing a script langage (and inner
tables) adaptable enough for the scripts to be really useful is already in itself a daunting task... In effect,
this is "just" creating a language and the compiler that goes with it...

Yves


I believe that is the course that Steve has laid out, where the AIO parser is the bulk of his work, and playtesters (and subsequently, players) largely determine what the game actually chooses to do in given situations. In the 18 months following the release of the game, intricacies of strategic decision-making will be honed by feedback from the public.




Petracelli69 -> RE: Long Time Coming! (9/6/2009 10:02:24 PM)

Steve

Thanks for the update and keep up the good work. I'm for one looking forward to the release and the fruits of your hard labour.

regards

Phil




Shooterguy -> RE: Long Time Coming! (9/7/2009 1:17:32 PM)

Steve,

Keep fighting the good fight. [&o] You've got a lot of people pulling for you, and a lot of potential sales once this is done!

R/ Paul




Norden_slith -> RE: Long Time Coming! (9/7/2009 8:46:25 PM)


quote:

ORIGINAL: brian brian

bugs bugs bugs, humanity would be pretty screwed without bugs


True, luckily we dont have to report all of them [;)] .

Norden




composer99 -> RE: Long Time Coming! (9/8/2009 3:33:03 PM)

But entomologists keep wanting to classify the damn things. [;)]




Snydly -> RE: Long Time Coming! (9/9/2009 4:20:49 AM)

Keep up the Good Work Steve [;)]




Martos -> RE: Long Time Coming! (9/11/2009 9:11:05 AM)

Whew! To be fair, there appears to be a lot of work still on the plate. Here's to hoping it goes as smoothly as possible. Keep up the good work!




mavraamides -> RE: Long Time Coming! (9/11/2009 7:39:08 PM)


quote:

ORIGINAL: yvesp


quote:

ORIGINAL: HansHafen

I am just scared the AI will be extremely hard to code and get right. WIF is so complex and any logical, methodical decision tree will be like a 300 year old Redwood at a minimum! The AI has to think point to point on the frontline, but also has to see in depth, behind the front lines for potential threats including armor, planes, Offensive chits etc. I want it to be possible, but I am concerned.


AI script languages already exist. Lua comes to mind.

No need to re-invent the wheel, IMO.


Just my two cents there :

I believe that Steve would do very good to only build the AIO inner architecture and leave the actual script
writing to the community. He would gain some time this way. However, writing a script langage (and inner
tables) adaptable enough for the scripts to be really useful is already in itself a daunting task... In effect,
this is "just" creating a language and the compiler that goes with it...

Yves





Shannon V. OKeets -> RE: Long Time Coming! (9/11/2009 11:31:35 PM)

quote:

ORIGINAL: GordianKnot


quote:

ORIGINAL: yvesp


quote:

ORIGINAL: HansHafen

I am just scared the AI will be extremely hard to code and get right. WIF is so complex and any logical, methodical decision tree will be like a 300 year old Redwood at a minimum! The AI has to think point to point on the frontline, but also has to see in depth, behind the front lines for potential threats including armor, planes, Offensive chits etc. I want it to be possible, but I am concerned.


AI script languages already exist. Lua comes to mind.

No need to re-invent the wheel, IMO.


Just my two cents there :

I believe that Steve would do very good to only build the AIO inner architecture and leave the actual script
writing to the community. He would gain some time this way. However, writing a script langage (and inner
tables) adaptable enough for the scripts to be really useful is already in itself a daunting task... In effect,
this is "just" creating a language and the compiler that goes with it...

Yves



Did you have a comment here? All I see is a copy of an earlier post.
===
As for writing a script language for the casual player to use "to write his own scripts", ...

Have you stopped by a good book store and looked at the section on programming languages? Try to find a book there that is less than 100 pages. Then try to read the first 2 chapters.

I have no interest in trying to teach inexperienced programmers how to program. Nor am I interested in writing the definitive book on LAIO (Language for AI Opponent), which I've created for MWIF's AIO. To do so would require at least another year of work. Just laying out the chapters and sketching in the content for each would be time consuming. To hope that the result would be practical and used by more than a few dozen people would be very optimistic.

Here is an example of a simple script for setting up the units:

===========
// ****************************************************************************
// Persian setup script - last modified Nov. 26, 2008
// ****************************************************************************
// Local variables for Priority rules
// ******************************
CapitalDefensePriority: Integer
OilwellDefensePriority: Integer
BorderDefensePriority: Integer
MarauderDefensePriority: Integer
// ******************************
// Local variables for selecting Defense randomly
// ******************************
MaxRandomNumber: Integer
CaptialBottom: Integer
OilwellBottom: Integer
BorderBottom: Integer
MarauderBottom: Integer
RandomNumber: Integer
// ******************************
// Local variables for Defenses rules
// *******************************
MARSmall: Boolean
Location1: Hex
Location2: Hex
Location3: Hex
UnitSmall: Boolean
TargetHex: Hex
// ****************************************************************************
//
// Primary Rule for Persian Setup
//
// ****************************************************************************

R.PrimaryRule
// *******************************
// Set starting value for each defense
// *******************************
CapitalDefensePriority = 80
OilwellDefensePriority = 60
BorderDefensePriority = 60
MarauderDefensePriority = 5
// *******************************
// Modify Defense Weight if current situation makes any defenses better or worse
// *******************************
// Reinforcements might arrive
// *******************************
IF PersianReinforcementMightArrive THEN
(CapitalDefensePriority = CapitalDefensePriority + 25) AND
(BorderDefensePriority = BorderDefensePriority + 20)
// *******************************
// Defenders are might survive!
// *******************************
IF WeakAttackingForce THEN
(CapitalDefensePriority = CapitalDefensePriority + 25) AND
(BorderDefensePriority = BorderDefensePriority +- 20) AND
(MarauderDefensePriority = MarauderDefensePriority - 4)
// *******************************
// Defenders are doomed
// *******************************
IF OverwhelmingAttackingForce THEN
(CapitalDefensePriority = CapitalDefensePriority - 25) AND
(OilwellDefensePriority = OilwellDefensePriority + 20) AND
(BorderDefensePriority = BorderDefensePriority - 20) AND
(MarauderDefensePriority = MarauderDefensePriority + 5)
// *******************************
// Bad weather means stay and fight
// *******************************
IF BadWeather THEN
(CapitalDefensePriority = CapitalDefensePriority + 5) AND
(BorderDefensePriority = BorderDefensePriority + 5)
// *******************************
// Set Bottoms for selecting a Defense randomly. The cut-off values (bottoms)
// serve as the top of the defense that precedes it.
// So, Capital Defense is from 0 to OilwellBottom;
// OilwellDefense is from OilwellBottom to BorderBottom;
// *******************************
MaxRandomNumber = CapitalDefensePriority
OilwellBottom = MaxRandomNumber
IF OilwellDefenseFeasible THEN
Inc(MaxRandomNumber, OilwellDefensePriority)
// *******************************
// BorderDefense is from BorderBottom to MarauderBottom;
// *******************************
BorderBottom = MaxRandomNumber
IF BorderDefenseFeasible THEN
Inc(MaxRandomNumber, BorderDefensePriority)
// *******************************
// MarauderDefense is from MarauderBottom to MaxRandomNumber.
// *******************************
MarauderBottom = MaxRandomNumber
IF MarauderDefenseFeasible THEN
Inc(MaxRandomNumber, MarauderDefensePriority)
// *******************************
// Generate a random number and use it to choose one setup
// *******************************
RandomNumber = Random(1, MaxRandomNumber)
IF RandomNumber > MarauderBottom THEN
Setup = MarauderDefense
ELSE IF RandomNumber > BorderBottom THEN
Setup = BorderDefense
ELSE IF RandomNumber > OilwellBottom THEN
Setup = OilwellDefense
ELSE Setup = CapitalDefense
// ****************************************************************************
//
// Non-primary Rules for Persian Setup
//
// ***************************************************************************
//
// Rules that modify defense priorities
//
// ***************************************************************************

R.BadWeather
// *******************************
// Weather in Mediterranean is NOT Fine
// *******************************
Return NOT (Weather.Mediterranean = Fine)

R.PersianReinforcementMightArrive
// *******************************
// Chance for Persian MIL to arrive?
// *******************************
// *******************************
// LAIO function EstimatedImpulsesRemainingInTurn
// Returns the estimated number of impulses remaining in the current turn
// *******************************
Return (WeakAttackingForce OR EstimatedImpulsesRemainingInTurn <= 2)

R.WeakAttackingForce
// *******************************
// With the maximum estimated attack forces, possible for defenders to survive?
// Odds <= 3:1
// *******************************
Return Max(Countries.ForEach(AtWarPersiaRoughEstimateOfAttackForce, C)) >= 9

R.OverwhelmingAttackingForce
// *******************************
// Are the maximum estimated attack forces likely to take no losses? Odds >= 7:1
// *******************************
Return Max(Countries.ForEach(AtWarPersiaRoughEstimateOfAttackForce, C)) >= 21

R.AtWarPersiaRoughEstimateOfAttackForce
// *******************************
// Make a rough estimate of air and land units likely to participate in an
// attack against the defenders
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return Sum(C.Units.ForEach(UnitCloseToPersianBorder, Unit))
ELSE Return 0

R.UnitCloseToPersianBorder
// *******************************
// Strength of Land or Air unit close to the Persian Border
// The variable Unit is set when this rule is called
// *******************************
IF Unit.Organized AND
(Unit.InSupply OR
Unit.CanBeInSupply) AND
Unit.UnitType IN LandUnitSet AND
Unit.HexDist(Persia) <= 4 THEN
Return Unit.Attack
ELSE IF Unit.Organized AND
(Unit.InSupply OR
Unit.CanBeInSupply) AND
Unit.UnitType IN AirUnitSet AND
Unit.Range(Teheran) <= 4 THEN
Return Unit.Tact
ELSE Return 0
// ****************************************************************************
//
// End of rules used to modify defense priority
// Beginning of feasible defense rules
//
// ****************************************************************************

R.BorderDefenseFeasible
// *******************************
// Border defense
//
// Feasible given A and B and C
// A) No Risk of paradrop on the capital
// B) No Risk of a two front land advance on the capital
// C) No Risk of having the land unit flipped
// *******************************
Return (NOT ParadropThreatToTeheran) AND
(NOT TwoFrontLandAdvance) AND
(NOT SetupHasThreatOfLandUnitDisorganized(BorderDefense))

R.OilwellDefenceFeasible
// *******************************
// Oil well defense
//
// Feasible given A and either B or C
// A) JapanInterferenceInPersiaPossible
// B) Risk of paradrop on the oil wells
// C) Risk of invasion on the oil wells
// *******************************
Return JapanInterferenceInPersiaPossible AND
(ParadropThreatToOilwells OR
InvasionThreatToOilwells)

R.MarauderDefenseFeasible
// *******************************
// Marauder defense
//
// Feasible given A or B
// A) Chance to conquer Iraq
// B) Chance to overrun a disorganized unit
// *******************************
Return ChanceToConquerIraq OR
ChanceToOverrunDisorganizedUnit

R.JapanInterferenceInPersiaPossible
// *******************************
// JapanInterferenceInPersiaPossible
//
// IF A and B
// A) Japan plans to send units to Perisa immediately
// B) Japan is at war with attacking country or prepared to declare war on it
// *******************************
Return JapanReadyToSendUnitsToPersia AND
JapanWarWithPersianAggressor

R.JapanReadyToSendUnitsToPersia

// *******************************
// LAIO function Preparations(X, Action)
// Checks if the country X is plans to take do Action
// *******************************
IF Preparations(Japan, MasterPlanFightForOilwellsInPersia)) = False THEN
Return False
Else
// *******************************
// Can Japan send a unit to Persia?
// *******************************
// Loop over all TRS/AMPH
// *******************************
Return (MajorTransportAvailable OR
// *******************************
// Loop over all TRS/AMPH/SCS
// *******************************
MinorTransportAvailable)

R.MajorTransportAvailable
// *******************************
// Does Japan have a corps capable transport available?
// *******************************
UnitSmall = False // Unit is corps size
Return Japan.Units.FirstThat(TransportAvailable, Transport)

R.MinorTransportAvailable
// *******************************
// Does Japan have a division capable transport available?
// *******************************
UnitSmall=True // Unit is division size
Return Japan.LandUnits.FirstThat(TransportAvailable, Transport)

R.TransportAvailable
// *******************************
// Transport's type is TRS or AMPH (or SCS if the unit transport is a DIV);
// Transport is in supply, organized, and in
// the Persian Gulf or within range of it
// The variable Transport is set when this rule is called
// *******************************
IF (NOT UnitSmall) AND
(((Transport.UnitType = AMPH) AND
(NOT (Unit.UnitType IN [HQA, ARM, MECH, ART]))) OR
(Transport.UnitType = TRS)) AND
Transport.Organized AND
(Transport.InSupply OR
Transport.CanBeInSupply) AND
((Transport.SeaArea = PersianGulf) OR
Transport.Range(PersianGulf)) THEN
Return Japan.FirstThat(TransportUnitAvailable, U)
ELSE IF UnitSmall AND
(((Transport.UnitType = AMPH) AND
(NOT Unit.UnitType IN [HQA, ARM, MECH, ART])) OR
(Transport.UnitType = TRS) OR
(Option.SCSTransport AND
(Transport.UnitType = SCS) AND
(Unit.UnitType IN InfantrySet) AND
(NOT (Unit.UnitType IN MotorizedSet)))) AND
Transport.Organized AND
(Transport.InSupply OR
Transport.CanBeInSupply) AND
((Transport.SeaArea = PersianGulf) OR
(Transport.Range(PersianGulf)) THEN
Return Japan.FirstThat(TransportUnitAvailable, U)
ELSE Return False

R.TransportUnitAvailable
// *******************************
// Can any land unit be transported?
// The variable Unit is set when this rule is called
// *******************************
Return ((Unit.Hex IN [PersianGulf.CoastalHex]) OR
(Transport.Cargo = Unit)) AND
Unit.Organized AND
(Unit.Small = UnitSmall) AND
Unit.CooperatesWith(Transport) AND
(Unit.InSupply OR
Unit.CanBeInSupply)

R.JapanWarWithPersianAggressor
// *******************************
// Japan being at war with a country with which Persia is at war or Japan
// willing to declare war on same
// *******************************
Return Countries.FirstThat(CountryAtWarPersiaAndJapan, C)

R.CountryAtWarPersiaAndJapan
// *******************************
// Country war with Persia and either at war with Japan or soon to be at war
// with Japan
// *******************************
Return C.AtWar(Persia) AND
(C.AtWar(Japan) OR
// *******************************
// LAIO function Preparations(X, Action, Y)
// Checks if the country X is prepared to take Action against country Y
// *******************************
Preparations(Japan, ImminentWar, C))

R.SetupHasThreatOfLandUnitDisorganized(GivenSetup)
// *******************************
// Check if any unit in a setup has the threat of being disorganized
// The variable GivenSetup is an argument when this rule is called
// *******************************
// LAIO function SetupUnits(GivenSetup)
// Returns all units in GivenSetup
// *******************************
Return SetupUnits(GivenSetup).ForEach(LocationsGroundStrikeThreat, TargetUnit)

R.LocationsGroundStrikeThreat
// *******************************
// Checks if any of a unit's locations in a setup has the risk of being ground
// struck
// The variables GivenSetup and TargetUnit are set when this rule is called
// *******************************
// LAIO function SetupLocations(GivenSetup, TargetUnit)
// Returns all possible hexes where TargetUnit can be placed in GivenSetup
// *******************************
Return SetupLocations(GivenSetup, TargetUnit).FirstThat(NoGroundStrikeThreat,
TargetHex)

R.NoGroundStrikeThreat
// *******************************
// If No Threat of having TargetUnit ground struck
// The variable Location is set when this rule is called
// *******************************
Return NOT GroundStrikeThreat

R.GroundStrikeThreat
// *******************************
// Threat of having TargetUnit ground struck in TargetHex
// LAIO function Product multiplies probabilities of failure.
// *******************************
Return Product(Countries.ForEach(AtWarPersiaGroundStrike, C) <= .70

R.AtWarPersiaGroundStrike
// *******************************
// Countries at war with Persia and a ground strike is possible
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return Product(C.Units.ForEach(GroundStrikePossible, AttackUnit))
ELSE Return 1

R.GroundStrikePossible
// *******************************
// Ground strike possible
// The variables AttackUnit, TargetUnit, and TargetHex are set before this rule
// is called
// *******************************
IF AttackUnit.Organized AND
(AttackUnit.InSupply OR
AttackUnit.CanBeInSupply) AND
AttackUnit.CanGroundStrike AND
AttackUnit.Range(TargetHex) THEN
Return ProbUnsuccesfulGroundStrike(AttackUnit)
ELSE Return 1

R.ProbUnsuccesfulGroundStrike
// *******************************
// Chance of unsuccesful ground strike
// The variables AttackUnit, TargetUnit, and TargetHex are set before this rule
// is called
// *******************************
// Probability ground strike(s) fail; there are 2 when target unit is surprised
// *******************************
IF TargetUnit.SurprisedBy(AttackUnit) THEN
Return ((10 - AttackUnit.Tact(TargetHex))/10) *
((10 - AttackUnit.Tact(TargetHex))/10)
ELSE Return (10 - AttackUnit.Tact(TargetHex))/10

R.TwoFrontLandAdvance
// *******************************
// Threat of a two front land advance on the capital
// *******************************
// Land units on both sides of the Caspian Sea
// *******************************
Return (ThreatNWBorder AND
ThreatNEBorder) OR
// *******************************
// Land units on one side of the Caspian Sea and also in Iraq, close to the
// Persian border
// *******************************
((ThreatNWBorder OR
ThreatNEBorder) AND
ThreatWestBorder)

R.ThreatNWBorder
// *******************************
// Enemy land unit on the border close to the west side of the Caspian Sea
// *******************************
// We only need to find a single qualified unit for the threat to be real
// *******************************
Return Countries.FirstThat(AtWarPersiaGroundInvasionNW, C)

R.AtWarPersiaGroundInvasionNW
// *******************************
// Countries at war with Persia - ground invasion NW
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return C.Units.FirstThat(AttackerAvailableNW, Unit)
ELSE Return False

R.AttackerAvailableNW
// *******************************
// Enemy land unit on the NW border, and close enough to reach Teheran
// The variable Unit is set when this rule is called
// *******************************
Return FastUnitAvailable AND
LandUnitNWBorder

R.FastUnitAvailable
// *******************************
// Fast moving landunit available
// *******************************
Return Unit.Organized AND
(Unit.InSupply OR
Unit.CanBeInSupply) AND
(Unit.UnitType IN LandUnitSet) AND
// *******************************
// Possible for unit to reach Teheran in 2 moves
// ********************************
Unit.ImpulsesToReach(Teheran) <= 2

R.LandUnitNWBorder
// *******************************
// Enemy land unit on the NW border
// *******************************
// Any unit within 5 hexes of the border hex (71, 77)
// *******************************
Return Unit.HexDist(71, 77) <= 5

R.ThreatNEBorder
// *******************************
// Enemy land unit on the border close to the east side of the Caspian Sea
// *******************************
// We only need to find a single qualified unit for the threat to be real
// *******************************
Return Countries.FirstThat(AtWarPersiaGroundInvasionNE, C)

R.AtWarPersiaGroundInvasionNE
// *******************************
// Countries at war with Persia - ground invasion NE
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return C.Units.FirstThat(AttackerAvailableNE, Unit)
ELSE
Return False

R.AttackerAvailableNE
// *******************************
// Enemy land unit on the NE border, and close enough to reach Teheran
// The variable Unit is set when this rule is called
// *******************************
Return FastUnitAvailable AND
LandUnitNEBorder

R.LandUnitNEBorder
// *******************************
// Enemy land unit on the NE border
// *******************************
Return Unit.HexDist(71, 83) <= 5

R.ThreatWestBorder
// *******************************
// Land unit in Iraq, close to Persian border
// *******************************
// We only need to find a single qualified unit for the threat to be real
// *******************************
Return Countries.FirstThat(AtWarPersiaGroundInvasionWest, C)

R.AtWarPersiaGroundInvasionWest
// *******************************
// Countries at war with Persia - ground invasion west
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return C.Units.FirstThat(AttackerAvailableWest, Unit)
ELSE Return False

R.AttackerAvailableWest
// *******************************
// Enemy land unit on the west border, and close enough to reach Teheran
// The variable Unit is set when this rule is called
// *******************************
Return FastUnitAvailable AND
LandUnitWestBorder

R.LandUnitWestBorder
// *******************************
// Enemy land unit on the Iraq border
// *******************************
// Any hex in that is within two hexes of the Iraqi-Persian border
// *******************************
Return (Unit.Hex IN Iraq) AND
(Unit.HexDist(Persia) <= 2)

R.InvasionThreatToOilwells
// *******************************
// Invasion threat to oil wells (which are all in coastal hexes)
// *******************************
// Only when weather in Mediterranean is rain or fine
// *******************************
Return (Weather.Mediterranean IN [Fine, Rain]) AND
// *******************************
// Loop over all TRS/AMPH
// *******************************
(MajorInvasionAvailable OR
// *******************************
// Loop over all USSR TRS/AMPH/SCS
// *******************************
MinorInvasionAvailable)

R.MajorInvasionAvailable
// *******************************
// Major invasion available
// *******************************
MARSmall = False
// *******************************
// We only need to find a single qualified unit for the threat to be real
// *******************************
Return Countries.FirstThat(AtWarPersiaTRSAvailable, C)

R.AtWarPersiaTRSAvailable
// *******************************
// Countries at war with Persia - TRS available
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) OR
CooperatesWithCountryAtWarPersia(C) THEN
Return C.Units.FirstThat(TRSAvailable, Transport)
ELSE Return False

R.CooperatesWithCountryAtWarPersia
// *******************************
// Does a country cooperate with any country
// that is at war with Persia?
// The variable C is set when this rule is called
// *******************************
Return Countries.FirstThat(NotAtWarPersiaButCooperates, C2, C)

R.NotAtWarPersiaButCooperates
// *******************************
// Country not a war with Persia but Cooperates with that is
// The variable C2, C and set when this rule is called
// *******************************
Return NOT C2.AtWar(Persia) AND
C2.Cooperates(C)

R.MinorInvasionAvailable
// *******************************
// Major invasion available
// *******************************
MARSmall = True
Return Countries.FirstThat(AtWarPersiaDivisionTransportAvailable, C)

R.AtWarPersiaDivisionTransportAvailable
// *******************************
// Countries at war with Persia - division transport available
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) OR
CooperatesWithCountryAtWarPersia(C) THEN
Return C.Units.FirstThat(DivisionTransportAvailable, Transport)
ELSE Return False

R.TRSAvailable
// *******************************
// TRS/AMPH is available and in the sea area or within range of it
// The variable Transport is set when this rule is called
// *******************************
// Transport's type is TRS/AMPH; Transport is in supply, organized, and in
// the Persian Gulf or within range of it with the sea box >= 2
// *******************************
IF (Transport.UnitType IN [TRS, AMPH]) AND
Transport.Organized AND
(Transport.InSupply OR
Transport.CanBeInSupply) AND
(((Transport.SeaArea = PersianGulf) AND
(Transport.SeaBox >= 2)) OR
(Transport.Range(PersianGulf) AND
(Transport.Movement >= PersianGulf.Box2))) THEN
Return Countries.FirstThat(AtWarPersiaInvadingUnitAvailable, C)
ELSE Return False

R.AtWarPersiaInvadingUnitAvailable
// *******************************
// Countries at war with Persia - invading unit available
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return C.Units.FirstThat(InvadingUnitAvailable, Unit)
ELSE Return False

R.InvadingUnitAvailable
// *****************************
// Land unit available, on a coastal hex or stacked with TRS/AMPH, and the unit
// can also be carried by the available transport
// The variable Unit is set when this rule is called
// *******************************
// Non-MAR can only invade from AMPH if option AmphibiousUnits is used
// *******************************
IF Option.AmphibiousUnits AND
(NOT (Unit.UnitType IN MarineSet)) AND
(Transport.UnitType = TRS) THEN
Return False
// *******************************
// Land unit is coastal hex Persian Gulf/stacked with TRS and unit is in supply,
// is organized Infantry, and small matches MARSmall
// *******************************
ELSE IF (Unit.Hex IN [PersianGulf.CoastalHex] OR
Transport.Cargo = Unit) AND
Unit.Organized AND
(Unit.Small = MARSmall) AND
(Unit.UnitType IN InfantrySet) AND
(NOT (Unit.UnitType IN MotorizedSet) AND
Unit.CooperatesWith(Transport) AND
(Unit.InSupply OR
Unit.CanBeInSupply) THEN
Return True
ELSE Return False

R.DivisionTransportAvailable
// *******************************
// TRS/AMPH/SCS is available and in sea area or within range of it
// *******************************
// Transport's type is TRS or AMPH or SCS; transport is in supply, organized,
// and in the Persian Gulf or within range of it with the sea box >= 3
// The variable Transport is set when this rule is called
// *******************************
IF ((Transport.UnitType IN [TRS, AMPH]) OR
((Transport.UnitType = SCS) AND
Option.SCSInvasion)) AND
Transport.Organized AND
(((Transport.SeaArea = PersianGulf) AND
(Transport.SeaBox >= 3)) OR
(Transport.Range(PersianGulf) AND
(Transport.Movement >= PersianGulf.Box3))) AND
(Transport.InSupply OR
Transport.CanBeInSupply) THEN
Return Countries.FirstThat(AtWarPersiaInvadingUnitAvailable, C)
ELSE Return False

R.ParadropThreatToOilwells
// *******************************
// Paradrop threat to oil wells
// *******************************
// Only if the weather in the Mediterranean zone is neither storm nor blizzard
// *******************************
Return (NOT (Weather.Mediterranean IN [Storm, Blizzard])) AND
Countries.FirstThat(AtWarPersiaATROilWells, C)

R.AtWarPersiaATROilWells
// *******************************
// Loop over all countries at war with Persia – ATR
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return C.Units.FirstThat(ATROilwells, ATR)
ELSE Return False

R.ATROilWells
// *****************************
// Para unit available that can be carried by an ATR within range of an oil well
// *******************************
Location1 = (80, 77)
Location2 = (82, 78)
Location3 = (84, 79)

Return ATRAvailable AND
(ATR.WithinRange(Location1) OR
ATR.WithinRange(Location2) OR
ATR.WithinRange(Location3))

R.ParadropThreatToTeheran
// *******************************
// Paradrop threat to Teheran
// *******************************
// Only if the weather in the Mediterranean zone is neither storm nor blizzard
// *******************************
IF Weather.Mediterranean IN [Storm, Blizzard] THEN
Return False
// *******************************
// Loop over all attacking nations ATR
// *******************************
ELSE Return Countries.FirstThat(AtWarPersiaATRTeheran, C)

R.AtWarPersiaATRTeheran
// *******************************
// ATR's range gets it to within 3 hexes of Teheran
// The variable C is set when this rule is called
// *******************************
IF C.AtWar(Persia) THEN
Return C.Units.FirstThat(ATRCloseTeheran, ATR)
ELSE Return False

R.ATRCloseTeheran
// *******************************
// ATR can land a unit within 3 hexes of Teheran
// The variable ATR is set when this rule is called
// *******************************
Return ATRAvailable AND
ATR.Range > (ATR.HexDist(Teheran) - 3)

R.ATRAvailable
// *******************************
// Air transport available
// *******************************
// Unit is a ATR, organized, in supply, and has range to reach the target
// *******************************
IF (ATR.UnitType = ATR) AND
ATR.Organized AND
(ATR.InSupply OR
ATR.CanBeInSupply) THEN
Return Countries.FirstThat(AtWarPersiaParaAvailable, C2)
ELSE Return False

R.AtWarPersiaParaAvailable
// *******************************
// Para unit available for ATR
// The variable C2 is set when this rule is called
// *******************************
IF C2.AtWar(Persia) THEN
Return C2.Units.FirstThat(ParaAvailable, Para)
ELSE
Return False

R.ParaAvailable
// *******************************
// Para available
// *******************************
// Para is a PARA, organized, in supply, and within movement range of ATR's hex
// *******************************
Return (Para.UnitType = PARA) AND
Para.Organized AND
(Para.InSupply OR
Para.CanBeInSupply) AND
Para.MovementRange(ATR.Hex)
Para.CooperatesWith(ATR)

R.ChanceToOverrunDisorganizedUnit
// ****************************************************************************
// Chance to overrun a disorganized unit
//
// IF A, B, C, D AND E
// A) There is a disorganized Allied naval/air/supply unit(s) without a land
// unit guarding it
// B) The Persian CAV can reach it in one impulse
// C) The axis major power controlling Persia is at war with allied major power
// that controls the disorganized unit
// D) The Persian CAV can enter the country/territory that the disorganized unit
// is located in
// E) The Allies can’t move or rail a unit to protect the disorganized unit
// ****************************************************************************
Return Allied.Units.ForEach(ChanceToOverrun, U)

R.ChanceToOverrun
// *******************************
// Chance to overrun Unit?
// *******************************
Return Unit.Disrupted AND
(Unit.UnitType IN (Air, Naval, SupplyUnit)) AND
Persia.BorderHexes.FirstThat(UnitWithinFourHexes, Hex, Unit) AND
PersianCavCanReachDisorganizedUnitHex AND
(Persia.AtWar(Unit.Country) OR
Persia.ControllingMajorPower.AtWar(Unit.Country) AND
(NOT Allied.Units.FirstThat(LandUnitProtectingHex, Hex, Unit)) AND
(NOT AlliedUnitCanMoveToThreatenedHex(Unit.Hex)) AND
MinorCountryUnitsCanEnter(Persia, Unit.Hex.Country) THEN

R.AlliedUnitCanMoveToThreatenedHex
// *******************************
// Checks if the Allies can move a land unit to a threaded hex one impulse
// The variable Hex is set when this rule is called
// *******************************
TargetHex = Hex
Return Allied.Units.FirstThat(UnitCanBeMovedToTargetHex, U)

R.LandUnitProtectingHex
// *******************************
// Checks if a the land unit are in the same hex
// The variable Hex, Unit are set when this rule is called
// *******************************
Return Hex = Unit.Hex

R.UnitWithinFourHexes
// *******************************
// Checks if a the distance between two hexes are 4 or less
// The variable Hex, Unit are set when this rule is called
// *******************************
Return HexDist(Hex, Unit.Hex) <= 4

R.PersianCavCanReachDisorganizedUnitHex
// *******************************
// Checks if the Persian 3-4 CAV can reach a Hex from any Persian border hex
// The variable UnitHex is set when this rule is called
// *******************************
Return Peria.BorderHexes.FirstThat(CanReachDisorganizedUnit, Hex, UnitHex)

R.CanReachDisorganizedUnit
// *******************************
// Checks if the Persian 3-4 CAV can reach Hex X from Hex Y in one impulse
// The variable Hex, UnitHex are set when this rule is called
// *******************************
// Temporarily assign a location for specific Persian unit
// *******************************
Persia.Unit(3-4 CAV).Hex = Hex
// *******************************
// Can the Persian CAV reach the disrupted unit hex from the
// temporary location in one impulse?
// *******************************
Return Persia.Unit(3-4 CAV).ImpulsesToReach(UnitHex.Hex) = 1

R.ChanceToConquerIraq
// *******************************
// Chance to conquer Iraq
//
// IF A, B, C, D AND E
// A) Iraq is controlled/conquered by the Allies
// B) There is no allied unit in Baghdad
// C) the Persian CAV can reach Baghdad in one impulses
// D) Major power controlling Persia is at war with Major power controlling Iraq
// E) The Allies can’t move or rail a unit to Baghdad
// *******************************
Return (Iraq.Side = sdAllied) AND
(NOT AlliedUnitInBaghdad) AND
PossibleForPersianCAVToReachBaghdad AND
Persia.ControllingMajorPower.AtWar(Iraq.ControllingMajorPower) AND
(NOT AlliedUnitCanBeMovedToBaghdad) THEN

R.AlliedUnitInBaghdad
// *******************************
// Check if Baghdad is occupied by an Allied unit
// *******************************
Return MapStacks(Baghdad).FirstThat(AlliedUnit, U)

R.AlliedUnit
// *******************************
// Check if unit is controlled by the Allied side
// *******************************
Return U.Side = adAllied

R.PossibleForPersianCAVToReachBaghdad
// *******************************
// Possible for Persian CAV to reach Baghdad in 1 moves
// *******************************
Return (Persia.Unit(CAV (3-4)).ImpulsesToReach(Baghdad) = 1)

R.AlliedUnitCanMoveToBaghdad
// *******************************
// Checks if the Allies can move a unit to Baghdad in one impulse
// *******************************
TargetHex = Baghdad
Return Allied.Units.FirstThat(UnitCanMoveToTargetHex, U)

R.UnitCanMoveToTargetHex
// *******************************
// Can a unit be moved to TargetHex in one impules
// TargetHex is an input parameter to this rule.
// *******************************
IF Unit.Organized AND
(Unit.InSupply OR
Unit.CanBeInSupply) AND
(Unit.UnitType IN LandUnitSet) AND
Unit.ImpulsesToReach(TargetHex) = 1 THEN
Return True
ELSE IF Unit.Organized AND
Unit.UnitType IN LandUnitSet AND
RailMovePossible(Unit, TargetHex) AND
(RailDist(Unit.Hex, TargetHex) <= 60) THEN
Return True
ELSE Return False
// ****************************************************************************
//
// End of rules; Beginning of setups.
//
// ****************************************************************************
[Setup BorderDefense]
// *******************************
// Border Defense
// *******************************
// NW attack
// *******************************
1 CAV (3-4), (72,78) OR
1 CAV (3-4), (73,77) OR
1 CAV (3-4), (74,79) OR
// *******************************
// NE attack
// *******************************
1 CAV (3-4), Bandar Shah

[Setup OilwellDefense]
// *******************************
// Oil Well Defense
// *******************************
1 CAV (3-4), Bandar Shah OR
1 CAV (3-4), (82,78) OR
1 CAV (3-4), (83,78)

[Setup CapitalDefense]
// *******************************
// Capital Defense
// *******************************
1 CAV (3-4), Teheran

[Setup MarauderDefense]
// *******************************
// Marauder Defense
// *******************************
// Iraq attack
// *******************************
1 CAV (3-4), (75,74) OR
// *******************************
// Overrunning a disorganized unit
// Border Hexes 2 space appart if possible
// *******************************
1 CAV (3-4), (81,76) OR // Swamp E of Bandar Shaput
1 CAV (3-4), (79,76) OR
1 CAV (3-4), (77,75) OR
1 CAV (3-4), (75,74) OR
1 CAV (3-4), (73,75) OR
1 CAV (3-4), (72,75) OR
1 CAV (3-4), (71,74) OR
1 CAV (3-4), (69,74) OR
1 CAV (3-4), (70,75) OR
1 CAV (3-4), (70,76) OR
1 CAV (3-4), (72,78) OR
1 CAV (3-4), (73,83) OR // Swamp hex 2 hex NE Bandar Shah
1 CAV (3-4), (71,84) OR
1 CAV (3-4), (71,85) OR
1 CAV (3-4), (72,88) OR
1 CAV (3-4), (73,89) OR
1 CAV (3-4), (75,89) OR
1 CAV (3-4), (77,89) OR
1 CAV (3-4), (79,89) OR
1 CAV (3-4), (80,90) OR
1 CAV (3-4), (82,89) OR
1 CAV (3-4), (84,89) OR
1 CAV (3-4), (86,90) OR
1 CAV (3-4), (88,89)
===========




wworld7 -> RE: Long Time Coming! (9/12/2009 12:42:12 AM)

Steve,

All that and not even one line of code for the special Irish leadership bonus.

Bah Humbug!!!




Page: <<   < prev  44 45 [46] 47 48   next >   >>

Valid CSS!




Forum Software © ASPPlayground.NET Advanced Edition 2.4.5 ANSI
1.15625