Page 1 of 5 12345 LastLast
Results 1 to 10 of 46

  Click here to go to the first Developer post in this thread.  

Thread: FSM File

  1. #1
    Still have yet to see anything on the wiki or hear about the FSM file format? Anyone tried anything yet? or do we as a community have to walk around in the dark for 6 months (as usual) before BIS turns the light on?

  2. #2
    I posted a small example some time ago in the AI tread, ill post something here aswell..

    <table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Code Sample </td></tr><tr><td id="CODE">class FSM
    {
    ***fsmName = &#34;Formation&#34;;
    ***class States
    ***{
    *** ***/*%FSM&#60;STATE &#34;Init&#34;&#62;*/
    *** ***class Init
    *** ***{
    *** *** ***name = &#34;Init&#34;;
    *** *** ***init = /*%FSM&#60;STATEINIT&#34;&#34;&#34;&#62;*/&#34;private &#91;&#34;&#34;_destination&#34;&#34;, &#34;&#34;_timeNow&#34;&#34;, &#34;&#34;_vehicle&#34;&#34;, &#34;&#34;_isMan&#34;&#34;, &#34;&#34;_commander&#34;&#34;, &#34;&#34;_simulation&#34;&#34;, &#34;&#34;_type&#34;&#34;&#93;;&#34; &#92;n &#34;_vehicle = vehicle _this;&#34; &#92;n &#34;&#34; &#92;n &#34;_isMan = true;&#34; &#92;n &#34;if &#40;_vehicle &#33;= _this&#41; then &#34; &#92;n &#34;{&#34; &#92;n &#34; _isMan = false;&#34; &#92;n &#34;};&#34; &#92;n &#34;&#34; &#92;n &#34;_commander = effectiveCommander _vehicle;&#34; &#92;n &#34;&#34; &#92;n &#34;comment &#34;&#34;Returns the current task of the closest formation member.&#34;&#34;;&#34; &#92;n &#34;private &#91;&#34;&#34;_funcNeighbourTask&#34;&#34;&#93;;& #34; &#92;n &#34;_funcNeighbourTask = ***&#34; &#92;n &#34;{&#34; &#92;n &#34; private &#91;&#34;&#34;_neighbour&#34;&#34;, &#34;&#34;_minDist&#34;&#34;, &#34;&#34;_formMembers&#34;&#34;&#93;;&#34; &#92;n &#34; _formMembers = formationMembers _commander;&#34; &#92;n &#34;&#34; &#92;n &#34; for &#34;&#34;_i&#34;&#34; from 0 to &#40;&#40;count _formMembers&#41; - 1&#41; do &#34; &#92;n &#34; {&#34; &#92;n &#34; private &#91;&#34;&#34;_compareTo&#34;&#34;&#93;;&#34; &#92;n &#34; _compareTo = _formMembers select _i;&#34; &#92;n &#34; if &#40;&#40;_compareTo &#33;= _commander&#41; && &#40;_compareTo &#33;= player&#41;&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; private &#91;&#34;&#34;_dist&#34;&#34;&#93;;&#34; &#92;n &#34; _dist = _compareTo distance _commander; &#34; &#92;n &#34;&#34; &#92;n &#34; if &#40;isNil &#34;&#34;_minDist&#34;&#34;&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; _neighbour = _compareTo;&#34; &#92;n &#34; _minDist = _dist;&#34; &#92;n &#34; } &#34; &#92;n &#34; else &#34; &#92;n &#34; {&#34; &#92;n &#34; if &#40;_dist &#60; _minDist&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; _neighbour = _compareTo;&#34; &#92;n &#34; _minDist = _dist;&#34; &#92;n &#34; };&#34; &#92;n &#34; };&#34; &#92;n &#34; };&#34; &#92;n &#34; };&#34; &#92;n &#34;&#34; &#92;n &#34; formationTask _neighbour&#34; &#92;n &#34;};&#34; &#92;n &#34;&#34; &#92;n &#34;comment &#34;&#34;Returns the amount of currently covering formation members.&#34;&#34;;&#34; &#92;n &#34;private &#91;&#34;&#34;_funcCoveringMembers&#34;&#34;&#93; ;&#34; &#92;n &#34;_funcCoveringMembers = &#34; &#92;n &#34;{&#34; &#92;n &#34; private &#91;&#34;&#34;_coveringMembers&#34;&#34;, &#34;&#34;_formMembers&#34;&#34;&#93;;&#34; &#92;n &#34; _coveringMembers = 0;&#34; &#92;n &#34; _formMembers = formationMembers _commander;&#34; &#92;n &#34;&#34; &#92;n &#34; for &#34;&#34;_i&#34;&#34; from 0 to &#40;&#40;count _formMembers&#41; - 1&#41; do &#34; &#92;n &#34; {&#34; &#92;n &#34; if &#40;&#40;formationTask &#40;_formMembers select _i&#41;&#41; == &#34;&#34;COVER&#34;&#34;&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; _coveringMembers = _coveringMembers + 1;&#34; &#92;n &#34; };&#34; &#92;n &#34; };&#34; &#92;n &#34;&#34; &#92;n &#34; _coveringMembers&#34; &#92;n &#34;};&#34; &#92;n &#34;&#34; &#92;n &#34;private &#91;&#34;&#34;_coverInterval&#34;&#34;, &#34;&#34;_timeLastCover&#34;&#34;&#93;;&#34; &#92;n &#34;_coverInterval = 10 + &#40;random 15&#41;;&#34; &#92;n &#34;_timeLastCover = time;&#34; &#92;n &#34;&#34; &#92;n &#34;private &#91;&#34;&#34;_useCover&#34;&#34;&#93;;&#34; &#92;n &#34;_useCover = random 1;&#34; &#92;n &#34;&#34; &#92;n &#34;&#34; &#92;n &#34;comment &#34;&#34;On several places there is debug output, based on the value of this variable.&#34;&#34;;&#34; &#92;n &#34;private &#91;&#34;&#34;_debug&#34;&#34;&#93;;&#34; &#92;n &#34;_debug = false;&#34; &#92;n &#34;&#34; &#92;n &#34;private &#91;&#34;&#34;_source&#34;&#34;, &#34;&#34;_source2&#34;&#34;, &#34;&#34;_white&#34;&#34;, &#34;&#34;_red&#34;&#34;, &#34;&#34;_blue&#34;&#34;, &#34;&#34;_black&#34;&#34;, &#34;&#34;_yellow&#34;&#34;, &#34;&#34;_green&#34;&#34;, &#34;&#34;_partArray&#34;&#34;, &#34;&#34;_up&#34;&#34;, &#34;&#34;_neutral&#34;&#34;&#93;;&#34; &#92;n &#34;if &#40;_debug&#41; then &#34; &#92;n &#34;{&#34; &#92;n &#34; _source = &#34;&#34;#particlesource&#34;&#34; createVehicleLocal position player;&#34; &#92;n &#34; _source setDropInterval 0.1;&#34; &#92;n &#34;&#34; &#92;n &#34; _source2 = &#34;&#34;#particlesource&#34;&#34; createVehicleLocal position player;&#34; &#92;n &#34; _source2 setDropInterval 0.1;&#34; &#92;n &#34;&#34; &#92;n &#34; _white = &#91;&#91;1, 1, 1, 1&#93;, &#91;1, 1, 1, 0&#93;&#93;;&#34; &#92;n &#34; _red = &#91;&#91;1, 0, 0, 1&#93;, &#91;1, 0, 0, 0&#93;&#93;;&#34; &#92;n &#34; _blue = &#91;&#91;0, 0, 1, 1&#93;, &#91;0, 0, 1, 0&#93;&#93;;&#34; &#92;n &#34; _yellow = &#91;&#91;1, 1, 0, 1&#93;, &#91;1, 1, 0, 0&#93;&#93;;&#34; &#92;n &#34; _green = &#91;&#91;0, 1, 0, 1&#93;, &#91;0, 1, 0, 0&#93;&#93;;&#34; &#92;n &#34; _black = &#91;&#91;0, 0, 0, 1&#93;, &#91;0, 0, 0, 0&#93;&#93;;&#34; &#92;n &#34;&#34; &#92;n &#34; _up = &#91;0, 0, 2&#93;;&#34; &#92;n &#34; _neutral = &#91;0, 0, 0&#93;;&#34; &#92;n &#34;&#34; &#92;n &#34; _partArray = &#91;&#34;&#34;&#92;ca&#92;data&#92;cl_basic&#34;& #34;, &#34;&#34;&#34;&#34;, &#34;&#34;Billboard&#34;&#34;, 1, 30, &#91;0, 0, 0&#93;, _neutral, 0, 1.275, 1, 0, &#91;0.3&#93;, _white, &#91;0&#93;, 0, 0, &#34;&#34;&#34;&#34;, &#34;&#34;&#34;&#34;, _vehicle&#93;;&#34; &#92;n &#34;};&#34;/*%FSM&#60;/STATEINIT&#34;&#34;&#34;&#62;*/;
    *** *** ***class Links
    *** *** ***{
    *** *** *** ***/*%FSM&#60;LINK &#34;Always&#34;&#62;*/
    *** *** *** ***class Always
    *** *** *** ***{
    *** *** *** *** ***priority = 0.000000;
    *** *** *** *** ***to=&#34;Start&#34;;
    *** *** *** *** ***condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;true&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** ***action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** ***};
    *** *** *** ***/*%FSM&#60;/LINK&#62;*/
    *** *** ***};
    *** ***};
    *** ***/*%FSM&#60;/STATE&#62;*/
    *** ***/*%FSM&#60;STATE &#34;Combat&#34;&#62;*/
    *** ***class Combat
    *** ***{
    *** *** ***name = &#34;Combat&#34;;
    *** *** ***init = /*%FSM&#60;STATEINIT&#34;&#34;&#34;&#62;*/&#34;_vehicle = vehicle _this;&#34; &#92;n &#34;_commander = effectiveCommander _vehicle;&#34;/*%FSM&#60;/STATEINIT&#34;&#34;&#34;&#62;*/;
    *** *** ***class Links
    *** *** ***{
    *** *** *** ***/*%FSM&#60;LINK &#34;Member&#34;&#62;*/
    *** *** *** ***class Member
    *** *** *** ***{
    *** *** *** *** ***priority = 1.000000;
    *** *** *** *** ***to=&#34;Member&#34;;
    *** *** *** *** ***condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;&#33;&#40;isFormationLeader _commander&#41;&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** ***action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** ***};
    *** *** *** ***/*%FSM&#60;/LINK&#62;*/
    *** *** *** ***/*%FSM&#60;LINK &#34;Leader&#34;&#62;*/
    *** *** *** ***class Leader
    *** *** *** ***{
    *** *** *** *** ***priority = 0.000000;
    *** *** *** *** ***to=&#34;Leader&#34;;
    *** *** *** *** ***condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;true&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** ***action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** ***};
    *** *** *** ***/*%FSM&#60;/LINK&#62;*/
    *** *** ***};
    *** ***};[/QUOTE]

    This comes from the formation.fsm in the characters.pbo, there is much more but it would fill the whole page, and there are more .fsm files in this ***PBO, i havent even checked the other PBOs yet

    It looks.. confusing

    EDIT: I hope that BIS will give us at least some tips in the near future, but its certainly interesting




  3. #3
    Master Gunnery Sergeant
    Join Date
    Oct 24 2001
    Posts
    1,260
    Author of the Thread
    Awesome.


    Exactly what I needed.

    Kudos to you ***

    Edit: ***This is far more flexible than I thought. I was thinking we&#39;d get limited ability to control individual units using existing commads such as doThis and commandThat within a framework... but no... this is wow

    You can even create custom HUD info based on what I am seeing. That drop command is for the little yellow marker when in cadet mode..isnt it? The links are customizable between members and leader? oh WOW ***

    This is more than I expected...




  4. #4
    It seems BI is generating these FSM files with an editor.
    Hopefully it&#39;ll be released..

    And no, those drop commands just drop effects into the game to show what the FSM is telling the soldiers to do sortof. It&#39;s only a debug thing and not active in cadet mode.

  5. #5
    oida ouk eidos raedor's Avatar
    Join Date
    Sep 30 2002
    Location
    Germany, Austria
    Posts
    5,284
    There&#39;s a video about FSMs in VBS2: VBS2 Agent AI.

  6. #6
    Now this is just brilliant&#33; I can&#39;t wait to get my hands on this. And by getting my hands on this, I mean waiting for CrashDome to write up a tutorial about this.

  7. #7
    Master Gunnery Sergeant
    Join Date
    Oct 24 2001
    Posts
    1,260
    Author of the Thread
    To be honest, I don&#39;t think that BIS is going to release the AI editor from the VBS2 movie. From the looks of it, it has some serious tie-ins to the product (running in tandem with VBS2 for debugging).

    However, the good news is that the reason I am so excited about the FSM file is that I have a concept for a graphical AI editor I wish to write. The bad news is that I was not aware it would be this flexible. While it doesn&#39;t affect my idea, it may prolong the release of such a tool because there is so much more here (that I can tell) than I expected.

    Hmmm... I am generating even more ideas as I speak.

    I&#39;ll keep everyone updated when I get something together that works, but figure that won&#39;t appear until after US release of ArmA (or online release).

    Quote Originally Posted by [b
    Quote[/b] ]And no, those drop commands just drop effects into the game to show what the FSM is telling the soldiers to do sortof. It&#39;s only a debug thing and not active in cadet mode.
    Either way, it still allows for graphical effects during a state change. Imagine for a moment hand signal animations during a change of state by squad members.... Imagine..... Imagine a guy passing gas while guarding a gate and a green cloud appearing behind him... silly yes.. but gets my point across&#33;

    There is potential here for some serious code abuse, but overall looks like it is pretty open.

    If I am understanding this correctly, not only are scripts depreciated to functions, but ALL OFP coding styles as we know it can be completely tossed in the trash. Good thing too. No more needing to put triggers down to cover an area and gather up all the AI units... code in an FSM and let it do the dirty work. Eventhandlers and FSM I can see will be the primary coding structures from now on. How well they work and the limits are yet to be seen though... man... I wish I had a copy (and some spare time)....




  8. #8
    Amazing. Crashdome looks at that snippet and sees a world of opportunity. I look at it and I see...czech or some other language I don&#39;t understand.

    Thank goodness we have some serious computer guys involved in this game.


    BTW, Crashdome, SOW&#39;s forum&#39;s don&#39;t seem to be working.

  9. #9
    Hehe, Nubbin if you look carefully you will see that this time the comments are in English - major improvement&#33;

    For me it helped a lot to write it with some linebreaks, like this

    <table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Code Sample </td></tr><tr><td id="CODE">class FSM
    {
    fsmName = &#34;Formation&#34;;
    class States
    {
    *** /*%FSM&#60;STATE &#34;Init&#34;&#62;*/
    *** class Init
    *** {
    *** *** name = &#34;Init&#34;;
    *** *** init =

    *** *** /*%FSM&#60;STATEINIT&#34;&#34;&#34;&#62;*/
    *** *** &#34;private &#91;&#34;&#34;_destination&#34;&#34;, &#34;&#34;_timeNow&#34;&#34;, &#34;&#34;_vehicle&#34;&#34;, &#34;&#34;_isMan&#34;&#34;, &#34;&#34;_commander&#34;&#34;, &#34;&#34;_simulation&#34;&#34;, &#34;&#34;_type&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34;_vehicle = vehicle _this;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;_isMan = true;
    *** *** &#34; &#92;n &#34; if &#40;_vehicle &#33;= _this&#41; then &#34; &#92;n &#34;{&#34; &#92;n &#34; _isMan = false;
    *** *** &#34; &#92;n &#34;};
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;_commander = effectiveCommander _vehicle;

    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;comment &#34;&#34;Returns the current task of the closest formation member.&#34;&#34;;
    *** *** &#34; &#92;n &#34;private &#91;&#34;&#34;_funcNeighbourTask&#34;&#34;&#93 ;;
    *** *** &#34; &#92;n &#34;_funcNeighbourTask = ***&#34; &#92;n &#34;{&#34; &#92;n &#34; private &#91;&#34;&#34;_neighbour&#34;&#34;, &#34;&#34;_minDist&#34;&#34;, &#34;&#34;_formMembers&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34; _formMembers = formationMembers _commander;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; for &#34;&#34;_i&#34;&#34; from 0 to &#40;&#40;count _formMembers&#41; - 1&#41; do &#34; &#92;n &#34; {&#34; &#92;n &#34; private &#91;&#34;&#34;_compareTo&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34; _compareTo = _formMembers select _i;
    *** *** &#34; &#92;n &#34; if &#40;&#40;_compareTo &#33;= _commander&#41; && &#40;_compareTo &#33;= player&#41;&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; private &#91;&#34;&#34;_dist&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34; _dist = _compareTo distance _commander;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; if &#40;isNil &#34;&#34;_minDist&#34;&#34;&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; _neighbour = _compareTo;
    *** *** &#34; &#92;n &#34; _minDist = _dist;
    *** *** &#34; &#92;n &#34; } &#34; &#92;n &#34; else &#34; &#92;n &#34; {&#34; &#92;n &#34; if &#40;_dist &#60; _minDist&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; _neighbour = _compareTo;
    *** *** &#34; &#92;n &#34; _minDist = _dist;
    *** *** &#34; &#92;n &#34; };
    *** *** &#34; &#92;n &#34; };
    *** *** &#34; &#92;n &#34; };
    *** *** &#34; &#92;n &#34; };
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; formationTask _neighbour&#34; &#92;n &#34;};

    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;comment &#34;&#34;Returns the amount of currently covering formation members.&#34;&#34;;
    *** *** &#34; &#92;n &#34;private &#91;&#34;&#34;_funcCoveringMembers&#34;&#34;&#93; ;
    *** *** &#34; &#92;n &#34;_funcCoveringMembers = &#34; &#92;n &#34;{&#34; &#92;n &#34; private &#91;&#34;&#34;_coveringMembers&#34;&#34;, &#34;&#34;_formMembers&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34; _coveringMembers = 0;
    *** *** &#34; &#92;n &#34; _formMembers = formationMembers _commander;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; for &#34;&#34;_i&#34;&#34; from 0 to &#40;&#40;count _formMembers&#41; - 1&#41; do &#34; &#92;n &#34; {&#34; &#92;n &#34; if &#40;&#40;formationTask &#40;_formMembers select _i&#41;&#41; == &#34;&#34;COVER&#34;&#34;&#41; then &#34; &#92;n &#34; {&#34; &#92;n &#34; _coveringMembers = _coveringMembers + 1;
    *** *** &#34; &#92;n &#34; };
    *** *** &#34; &#92;n &#34; };
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; _coveringMembers&#34; &#92;n &#34;};
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;private &#91;&#34;&#34;_coverInterval&#34;&#34;, &#34;&#34;_timeLastCover&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34;_coverInterval = 10 + &#40;random 15&#41;;
    *** *** &#34; &#92;n &#34;_timeLastCover = time;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;private &#91;&#34;&#34;_useCover&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34;_useCover = random 1;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;&#34; &#92;n &#34;comment &#34;&#34;On several places there is debug output, based on the value of this variable.&#34;&#34;;
    *** *** &#34; &#92;n &#34;private &#91;&#34;&#34;_debug&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34;_debug = false;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34;private &#91;&#34;&#34;_source&#34;&#34;, &#34;&#34;_source2&#34;&#34;, &#34;&#34;_white&#34;&#34;, &#34;&#34;_red&#34;&#34;, &#34;&#34;_blue&#34;&#34;, &#34;&#34;_black&#34;&#34;, &#34;&#34;_yellow&#34;&#34;, &#34;&#34;_green&#34;&#34;, &#34;&#34;_partArray&#34;&#34;, &#34;&#34;_up&#34;&#34;, &#34;&#34;_neutral&#34;&#34;&#93;;
    *** *** &#34; &#92;n &#34;if &#40;_debug&#41; then &#34; &#92;n &#34;{&#34; &#92;n &#34; _source = &#34;&#34;#particlesource&#34;&#34; createVehicleLocal position player;
    *** *** &#34; &#92;n &#34; _source setDropInterval 0.1;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; _source2 = &#34;&#34;#particlesource&#34;&#34; createVehicleLocal position player;
    *** *** &#34; &#92;n &#34; _source2 setDropInterval 0.1;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; _white = &#91;&#91;1, 1, 1, 1&#93;, &#91;1, 1, 1, 0&#93;&#93;;
    *** *** &#34; &#92;n &#34; _red = &#91;&#91;1, 0, 0, 1&#93;, &#91;1, 0, 0, 0&#93;&#93;;
    *** *** &#34; &#92;n &#34; _blue = &#91;&#91;0, 0, 1, 1&#93;, &#91;0, 0, 1, 0&#93;&#93;;
    *** *** &#34; &#92;n &#34; _yellow = &#91;&#91;1, 1, 0, 1&#93;, &#91;1, 1, 0, 0&#93;&#93;;
    *** *** &#34; &#92;n &#34; _green = &#91;&#91;0, 1, 0, 1&#93;, &#91;0, 1, 0, 0&#93;&#93;;
    *** *** &#34; &#92;n &#34; _black = &#91;&#91;0, 0, 0, 1&#93;, &#91;0, 0, 0, 0&#93;&#93;;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; _up = &#91;0, 0, 2&#93;;
    *** *** &#34; &#92;n &#34; _neutral = &#91;0, 0, 0&#93;;
    *** *** &#34; &#92;n &#34;&#34; &#92;n &#34; _partArray = &#91;&#34;&#34;&#92;ca&#92;data&#92;cl_basic&#34;& #34;, &#34;&#34;&#34;&#34;, &#34;&#34;Billboard&#34;&#34;, 1, 30, &#91;0, 0, 0&#93;, _neutral, 0, 1.275, 1, 0, &#91;0.3&#93;, _white, &#91;0&#93;, 0, 0, &#34;&#34;&#34;&#34;, &#34;&#34;&#34;&#34;, _vehicle&#93;;
    *** *** &#34; &#92;n &#34;};
    *** *** &#34;/*%FSM&#60;/STATEINIT&#34;&#34;&#34;&#62;*/;
    *** *** class Links
    *** *** {
    *** *** *** /*%FSM&#60;LINK &#34;Always&#34;&#62;*/
    *** *** *** class Always
    *** *** *** {
    *** *** *** *** priority = 0.000000;
    *** *** *** *** to=&#34;Start&#34;;
    *** *** *** *** condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;true&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** };
    *** *** *** /*%FSM&#60;/LINK&#62;*/
    *** *** };
    *** };
    *** /*%FSM&#60;/STATE&#62;*/
    *** /*%FSM&#60;STATE &#34;Combat&#34;&#62;*/
    *** class Combat
    *** {
    *** *** name = &#34;Combat&#34;;
    *** *** init =
    /*%FSM&#60;STATEINIT&#34;&#34;&#34;&#62;*/
    &#34;_vehicle = vehicle _this;
    &#34; &#92;n &#34;_commander = effectiveCommander _vehicle;
    &#34;/*%FSM&#60;/STATEINIT&#34;&#34;&#34;&#62;*/;
    *** *** class Links
    *** *** {
    *** *** *** /*%FSM&#60;LINK &#34;Member&#34;&#62;*/
    *** *** *** class Member
    *** *** *** {
    *** *** *** *** priority = 1.000000;
    *** *** *** *** to=&#34;Member&#34;;
    *** *** *** *** condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;&#33;&#40;isFormationLeader _commander&#41;&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** };
    *** *** *** /*%FSM&#60;/LINK&#62;*/
    *** *** *** /*%FSM&#60;LINK &#34;Leader&#34;&#62;*/
    *** *** *** class Leader
    *** *** *** {
    *** *** *** *** priority = 0.000000;
    *** *** *** *** to=&#34;Leader&#34;;
    *** *** *** *** condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;true&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** };
    *** *** *** /*%FSM&#60;/LINK&#62;*/
    *** *** };
    *** };
    *** *** *** /*%FSM&#60;LINK &#34;Leader&#34;&#62;*/
    *** *** *** class Leader
    *** *** *** {
    *** *** *** *** priority = 0.000000;
    *** *** *** *** to=&#34;Leader&#34;;
    *** *** *** *** condition=/*%FSM&#60;CONDITION&#34;&#34;&#34;&#62;*/&#34;true&#34;/*%FSM&#60;/CONDITION&#34;&#34;&#34;&#62;*/;
    *** *** *** *** action=/*%FSM&#60;ACTION&#34;&#34;&#34;&#62;*/&#34;&#34;/*%FSM&#60;/ACTION&#34;&#34;&#34;&#62;*/;
    *** *** *** };
    *** *** *** /*%FSM&#60;/LINK&#62;*/
    *** *** };
    *** };[/QUOTE]

    It does look like it could be pretty powerful, but it could also be just a useful addition rather than a revolution from how I read this small piece of code. Definitely a step in the right direction though...I am optimistic



    ArmA is inferior to OFP only in one aspect - no way to save and retrieve data in multiplayer...get it fixed please.

  10. #10
    Master Gunnery Sergeant
    Join Date
    Oct 24 2001
    Posts
    1,260
    Author of the Thread
    OK I cracked the code.

    Well, actually, I cracked it yesterday.

    Well,... ok.. I didn&#39;t really "crack" the code as much as I just figured out how to create an FSM file and what it does. It is actually pretty easy because most of the stuff in the file posted above is GUI data for what I assume is their in-house or VBS2 AI editor.

    You will probably see a definition of it on the biki by this weekend along with a glimpse of something.... useful... I am in the process of developing. Hopefully this will push BIS to release an official guide or atleast a confirmation that I am correct in my assumptions. since I do not have ArmA for testing, I can only assume I am right.

    I won&#39;t guarantee anything regarding this weekend though because I am so busy with the new house I bought (moving/painting/etc) after work hours that I will have to actually do the biki info in my free time while at work or over my lunch period. If I suddenly get swamped (which I doubt), it may wait until next Monday.

    Cheers

Page 1 of 5 12345 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •