Jump to content
Sign in to follow this  
crashdome

FSM File

Recommended Posts

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?

Share this post


Link to post
Share on other sites

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 = "Formation";

 class States

 {

   /*%FSM<STATE "Init">*/

   class Init

   {

     name = "Init";

     init = /*%FSM<STATEINIT""">*/"private [""_destination"", ""_timeNow"", ""_vehicle"", ""_isMan"", ""_commander"", ""_simulation"", ""_type""];" \n "_vehicle = vehicle _this;" \n "" \n "_isMan = true;" \n "if (_vehicle != _this) then " \n "{" \n " _isMan = false;" \n "};" \n "" \n "_commander = effectiveCommander _vehicle;" \n "" \n "comment ""Returns the current task of the closest formation member."";" \n "private [""_funcNeighbourTask""];" \n "_funcNeighbourTask =  " \n "{" \n " private [""_neighbour"", ""_minDist"", ""_formMembers""];" \n " _formMembers = formationMembers _commander;" \n "" \n " for ""_i"" from 0 to ((count _formMembers) - 1) do " \n " {" \n " private [""_compareTo""];" \n " _compareTo = _formMembers select _i;" \n " if ((_compareTo != _commander) && (_compareTo != player)) then " \n " {" \n " private [""_dist""];" \n " _dist = _compareTo distance _commander; " \n "" \n " if (isNil ""_minDist"") then " \n " {" \n " _neighbour = _compareTo;" \n " _minDist = _dist;" \n " } " \n " else " \n " {" \n " if (_dist < _minDist) then " \n " {" \n " _neighbour = _compareTo;" \n " _minDist = _dist;" \n " };" \n " };" \n " };" \n " };" \n "" \n " formationTask _neighbour" \n "};" \n "" \n "comment ""Returns the amount of currently covering formation members."";" \n "private [""_funcCoveringMembers""];" \n "_funcCoveringMembers = " \n "{" \n " private [""_coveringMembers"", ""_formMembers""];" \n " _coveringMembers = 0;" \n " _formMembers = formationMembers _commander;" \n "" \n " for ""_i"" from 0 to ((count _formMembers) - 1) do " \n " {" \n " if ((formationTask (_formMembers select _i)) == ""COVER"") then " \n " {" \n " _coveringMembers = _coveringMembers + 1;" \n " };" \n " };" \n "" \n " _coveringMembers" \n "};" \n "" \n "private [""_coverInterval"", ""_timeLastCover""];" \n "_coverInterval = 10 + (random 15);" \n "_timeLastCover = time;" \n "" \n "private [""_useCover""];" \n "_useCover = random 1;" \n "" \n "" \n "comment ""On several places there is debug output, based on the value of this variable."";" \n "private [""_debug""];" \n "_debug = false;" \n "" \n "private [""_source"", ""_source2"", ""_white"", ""_red"", ""_blue"", ""_black"", ""_yellow"", ""_green"", ""_partArray"", ""_up"", ""_neutral""];" \n "if (_debug) then " \n "{" \n " _source = ""#particlesource"" createVehicleLocal position player;" \n " _source setDropInterval 0.1;" \n "" \n " _source2 = ""#particlesource"" createVehicleLocal position player;" \n " _source2 setDropInterval 0.1;" \n "" \n " _white = [[1, 1, 1, 1], [1, 1, 1, 0]];" \n " _red = [[1, 0, 0, 1], [1, 0, 0, 0]];" \n " _blue = [[0, 0, 1, 1], [0, 0, 1, 0]];" \n " _yellow = [[1, 1, 0, 1], [1, 1, 0, 0]];" \n " _green = [[0, 1, 0, 1], [0, 1, 0, 0]];" \n " _black = [[0, 0, 0, 1], [0, 0, 0, 0]];" \n "" \n " _up = [0, 0, 2];" \n " _neutral = [0, 0, 0];" \n "" \n " _partArray = [""\ca\data\cl_basic"", """", ""Billboard"", 1, 30, [0, 0, 0], _neutral, 0, 1.275, 1, 0, [0.3], _white, [0], 0, 0, """", """", _vehicle];" \n "};"/*%FSM</STATEINIT""">*/;

     class Links

     {

       /*%FSM<LINK "Always">*/

       class Always

       {

         priority = 0.000000;

         to="Start";

         condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;

         action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

       };

       /*%FSM</LINK>*/

     };

   };

   /*%FSM</STATE>*/

   /*%FSM<STATE "Combat">*/

   class Combat

   {

     name = "Combat";

     init = /*%FSM<STATEINIT""">*/"_vehicle = vehicle _this;" \n "_commander = effectiveCommander _vehicle;"/*%FSM</STATEINIT""">*/;

     class Links

     {

       /*%FSM<LINK "Member">*/

       class Member

       {

         priority = 1.000000;

         to="Member";

         condition=/*%FSM<CONDITION""">*/"!(isFormationLeader _commander)"/*%FSM</CONDITION""">*/;

         action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

       };

       /*%FSM</LINK>*/

       /*%FSM<LINK "Leader">*/

       class Leader

       {

         priority = 0.000000;

         to="Leader";

         condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;

         action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

       };

       /*%FSM</LINK>*/

     };

   };

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 wink_o.gif

It looks.. confusing tounge2.gif

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

Share this post


Link to post
Share on other sites

Awesome.

Exactly what I needed.

Kudos to you  thumbs-up.gif

Edit:  This is far more flexible than I thought. I was thinking we'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  wow_o.gif

This is more than I expected...

Share this post


Link to post
Share on other sites

It seems BI is generating these FSM files with an editor.

Hopefully it'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's only a debug thing and not active in cadet mode.

Share this post


Link to post
Share on other sites

Now this is just brilliant! I can'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. tounge2.gif

Share this post


Link to post
Share on other sites

To be honest, I don'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'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'll keep everyone updated when I get something together that works, but figure that won't appear until after US release of ArmA (or online release).

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'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! biggrin_o.gif

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)....

Share this post


Link to post
Share on other sites

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't understand.

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

BTW, Crashdome, SOW's forum's don't seem to be working.

Share this post


Link to post
Share on other sites

Hehe, Nubbin if you look carefully you will see that this time the comments are in English - major improvement! biggrin_o.gif

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 = "Formation";

class States

{

  /*%FSM<STATE "Init">*/

  class Init

  {

    name = "Init";

    init =

    /*%FSM<STATEINIT""">*/

    "private [""_destination"", ""_timeNow"", ""_vehicle"", ""_isMan"", ""_commander"", ""_simulation"", ""_type""];

    " \n "_vehicle = vehicle _this;

    " \n "" \n "_isMan = true;

    " \n " if (_vehicle != _this) then " \n "{" \n " _isMan = false;

    " \n "};

    " \n "" \n "_commander = effectiveCommander _vehicle;

    " \n "" \n "comment ""Returns the current task of the closest formation member."";

    " \n "private [""_funcNeighbourTask""];

    " \n "_funcNeighbourTask =  " \n "{" \n " private [""_neighbour"", ""_minDist"", ""_formMembers""];

    " \n " _formMembers = formationMembers _commander;

    " \n "" \n " for ""_i"" from 0 to ((count _formMembers) - 1) do " \n " {" \n " private [""_compareTo""];

    " \n " _compareTo = _formMembers select _i;

    " \n " if ((_compareTo != _commander) && (_compareTo != player)) then " \n " {" \n " private [""_dist""];

    " \n " _dist = _compareTo distance _commander;

    " \n "" \n " if (isNil ""_minDist"") then " \n " {" \n " _neighbour = _compareTo;

    " \n " _minDist = _dist;

    " \n " } " \n " else " \n " {" \n " if (_dist < _minDist) then " \n " {" \n " _neighbour = _compareTo;

    " \n " _minDist = _dist;

    " \n " };

    " \n " };

    " \n " };

    " \n " };

    " \n "" \n " formationTask _neighbour" \n "};

    " \n "" \n "comment ""Returns the amount of currently covering formation members."";

    " \n "private [""_funcCoveringMembers""];

    " \n "_funcCoveringMembers = " \n "{" \n " private [""_coveringMembers"", ""_formMembers""];

    " \n " _coveringMembers = 0;

    " \n " _formMembers = formationMembers _commander;

    " \n "" \n " for ""_i"" from 0 to ((count _formMembers) - 1) do " \n " {" \n " if ((formationTask (_formMembers select _i)) == ""COVER"") then " \n " {" \n " _coveringMembers = _coveringMembers + 1;

    " \n " };

    " \n " };

    " \n "" \n " _coveringMembers" \n "};

    " \n "" \n "private [""_coverInterval"", ""_timeLastCover""];

    " \n "_coverInterval = 10 + (random 15);

    " \n "_timeLastCover = time;

    " \n "" \n "private [""_useCover""];

    " \n "_useCover = random 1;

    " \n "" \n "" \n "comment ""On several places there is debug output, based on the value of this variable."";

    " \n "private [""_debug""];

    " \n "_debug = false;

    " \n "" \n "private [""_source"", ""_source2"", ""_white"", ""_red"", ""_blue"", ""_black"", ""_yellow"", ""_green"", ""_partArray"", ""_up"", ""_neutral""];

    " \n "if (_debug) then " \n "{" \n " _source = ""#particlesource"" createVehicleLocal position player;

    " \n " _source setDropInterval 0.1;

    " \n "" \n " _source2 = ""#particlesource"" createVehicleLocal position player;

    " \n " _source2 setDropInterval 0.1;

    " \n "" \n " _white = [[1, 1, 1, 1], [1, 1, 1, 0]];

    " \n " _red = [[1, 0, 0, 1], [1, 0, 0, 0]];

    " \n " _blue = [[0, 0, 1, 1], [0, 0, 1, 0]];

    " \n " _yellow = [[1, 1, 0, 1], [1, 1, 0, 0]];

    " \n " _green = [[0, 1, 0, 1], [0, 1, 0, 0]];

    " \n " _black = [[0, 0, 0, 1], [0, 0, 0, 0]];

    " \n "" \n " _up = [0, 0, 2];

    " \n " _neutral = [0, 0, 0];

    " \n "" \n " _partArray = [""\ca\data\cl_basic"", """", ""Billboard"", 1, 30, [0, 0, 0], _neutral, 0, 1.275, 1, 0, [0.3], _white, [0], 0, 0, """", """", _vehicle];

    " \n "};

    "/*%FSM</STATEINIT""">*/;

    class Links

    {

      /*%FSM<LINK "Always">*/

      class Always

      {

        priority = 0.000000;

        to="Start";

        condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;

        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

      };

      /*%FSM</LINK>*/

    };

  };

  /*%FSM</STATE>*/

  /*%FSM<STATE "Combat">*/

  class Combat

  {

    name = "Combat";

    init =

/*%FSM<STATEINIT""">*/

"_vehicle = vehicle _this;

" \n "_commander = effectiveCommander _vehicle;

"/*%FSM</STATEINIT""">*/;

    class Links

    {

      /*%FSM<LINK "Member">*/

      class Member

      {

        priority = 1.000000;

        to="Member";

        condition=/*%FSM<CONDITION""">*/"!(isFormationLeader _commander)"/*%FSM</CONDITION""">*/;

        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

      };

      /*%FSM</LINK>*/

      /*%FSM<LINK "Leader">*/

      class Leader

      {

        priority = 0.000000;

        to="Leader";

        condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;

        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

      };

      /*%FSM</LINK>*/

    };

  };

      /*%FSM<LINK "Leader">*/

      class Leader

      {

        priority = 0.000000;

        to="Leader";

        condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;

        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;

      };

      /*%FSM</LINK>*/

    };

  };

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 smile_o.gif

Share this post


Link to post
Share on other sites

OK I cracked the code.

Well, actually, I cracked it yesterday.

Well,... ok.. I didn't really "crack" the code as much as I just figured out how to create an FSM file and what it does. wink_o.gif 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'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

Share this post


Link to post
Share on other sites

Lot's of comments usage in this code (/* ... */) which makes it hard to read.

I've remove these comments and tried a somewhat resembling indented code, with I'm sure many indenting and {} errors in it, but that should hopefully make it more understandable :

<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Code Sample </td></tr><tr><td id="CODE">cat FSM | sed 's/\/\\*.*\\*\///g'

class FSM

{

fsmName = "Formation";

class States

{

class Init

{

name = "Init";

init = {

private [""_destination"", ""_timeNow"", ""_vehicle"", ""_isMan"", ""_commander"", ""_simulation"", ""_type""];

_vehicle = vehicle _this;

_isMan = true;

if (_vehicle != _this) then {_isMan = false;};

_commander = effectiveCommander _vehicle;

comment ""Returns the current task of the closest formation member."";

private [""_funcNeighbourTask""];

_funcNeighbourTask = {

private [""_neighbour"", ""_minDist"", ""_formMembers""];

_formMembers = formationMembers _commander;

for ""_i"" from 0 to ((count _formMembers) - 1) do {

private [""_compareTo""];

_compareTo = _formMembers select _i;

if ((_compareTo != _commander) && (_compareTo != player)) then {

private [""_dist""];

_dist = _compareTo distance _commander;

if (isNil ""_minDist"") then {

_neighbour = _compareTo;

_minDist = _dist;

}

else {

if (_dist < _minDist) then {

_neighbour = _compareTo;

_minDist = _dist;

};

};

};

};

formationTask _neighbour //Note Whis' : return value of function

};

comment ""Returns the amount of currently covering formation members."";

private [""_funcCoveringMembers""];

_funcCoveringMembers = {

private [""_coveringMembers"", ""_formMembers""];

_coveringMembers = 0;

_formMembers = formationMembers _commander;

for ""_i"" from 0 to ((count _formMembers) - 1) do {

if ((formationTask (_formMembers select _i)) == ""COVER"") then {_coveringMembers = _coveringMembers + 1;};

};

_coveringMembers //Note Whis' : return value of function

};

private [""_coverInterval"", ""_timeLastCover""];

_coverInterval = 10 + (random 15);

_timeLastCover = time;

private [""_useCover""];

_useCover = random 1;

comment ""On several places there is debug output, based on the value of this variable."";

private [""_debug""];

_debug = false;

private [""_source"", ""_source2"", ""_white"", ""_red"", ""_blue"", ""_black"", ""_yellow"", ""_green"", ""_partArray"", ""_up"", ""_neutral""];

if (_debug) then {

_source = ""#particlesource"" createVehicleLocal position player;

_source setDropInterval 0.1;

_source2 = ""#particlesource"" createVehicleLocal position player;

_source2 setDropInterval 0.1;

_white = [[1, 1, 1, 1], [1, 1, 1, 0]];

_red = [[1, 0, 0, 1], [1, 0, 0, 0]];

_blue = [[0, 0, 1, 1], [0, 0, 1, 0]];

_yellow = [[1, 1, 0, 1], [1, 1, 0, 0]];

_green = [[0, 1, 0, 1], [0, 1, 0, 0]];

_black = [[0, 0, 0, 1], [0, 0, 0, 0]];

_up = [0, 0, 2];

_neutral = [0, 0, 0];

_partArray = [""\ca\data\cl_basic"", """", ""Billboard"", 1, 30, [0, 0, 0], _neutral, 0, 1.275, 1, 0, [0.3], _white, [0], 0, 0, """", """", _vehicle];

}

};

class Links

{

class Always

{

priority = 0.000000;

to="Start";

condition=;

action=;

};

};

class Combat

{

name = "Combat";

init = {

_vehicle = vehicle _this;

_commander = effectiveCommander _vehicle;

};

class Links

{

class Member

{

priority = 1.000000;

to="Member";

condition=;

action=;

};

class Leader

{

priority = 0.000000;

to="Leader";

condition=;

action=;

};

};

};

class Leader

{

priority = 0.000000;

to="Leader";

condition=;

action=;

};

};

};

It looks strange to me, defining local functions that are unused in the local space, no action bound to conditions...

Share this post


Link to post
Share on other sites

are you allowed to put the actual files up that come with arma ? arnt these copyrighted ?

Share this post


Link to post
Share on other sites
are you allowed to put the actual files up that come with arma ? arnt these copyrighted ?

Well then modifying them to make mods would be illegal.

Share this post


Link to post
Share on other sites
are you allowed to put the actual files up that come with arma ? arnt these copyrighted ?

Yeah it crossed my mind when uploading it, but then i thought of all the total conversion mods which (almost always) use a modified version of the original config.bin. Hell, you cant use this file in any way without buying the game (except for looking at it in notepad), so i figured that it didnt really matter. If i would be spreading the music then it would probably be a different matter, as yuo can listen to the music without using the game.

Share this post


Link to post
Share on other sites

If the file being shared in noway benefits someone who hasn't bought the game then it's fine.

What isn't fine is uploading the campaign because someone warezed the game no longer has the image and messed up their campaign (for example).

Share this post


Link to post
Share on other sites
Lot's of comments usage in this code (/* ... */) which makes it hard to read.

...

...

...

It looks strange to me, defining local functions that are unused in the local space, no action bound to conditions...

Yes, first thing I did was remove the comments. The comments appear like XML tags. The AI editor they must use the tags, but by commenting them the engine will ignore them.... because if the engine used those tags why would they be commented out??

Same with all the "\n" characters everywhere. I assume this is so that it will format within their graphical editor.

The "HEADER" portion appears to itemize all the states as integers so that they appear in a sorted order. The "Links" with the integer array after it appear to link item to item. I am not positive yet, but it would seem this data is redundant because of the "to" property within the links themselves. My conclusion is this header section is ... again.. for the graphical editor.

Once you eliminate all that, and if you understand the concept of an FSM the code itself becomes amazingly clear.

I am writing a wiki entry btw... and I will deliver it this weekend as promised - IF I can get someone to help me test my theory and work out any unknowns.

Share this post


Link to post
Share on other sites

I just read the article draft in your Sandbox, CrashDome, and I found it concise and thorough. Your experience at editing is reflected in your writing skills!

I don't know much about OFP editing, but it seems that FSM will make AI modeling much easier and more intuitive. Soldier mods can now come with complete rules of engagement matching their respective doctrines!

Share this post


Link to post
Share on other sites
Lot's of comments usage in this code (/* ... */) which makes it hard to read.

...

...

...

It looks strange to me, defining local functions that are unused in the local space, no action bound to conditions...

Yes, first thing I did was remove the comments. The comments appear like XML tags. The AI editor they must use the tags, but by commenting them the engine will ignore them.... because if the engine used those tags why would they be commented out??

Same with all the "\n" characters everywhere. I assume this is so that it will format within their graphical editor.

The "HEADER" portion appears to itemize all the states as integers so that they appear in a sorted order. The "Links" with the integer array after it appear to link item to item. I am not positive yet, but it would seem this data is redundant because of the "to" property within the links themselves. My conclusion is this header section is ... again.. for the graphical editor.

Once you eliminate all that, and if you understand the concept of an FSM the code itself becomes amazingly clear.

I am writing a wiki entry btw... and I will deliver it this weekend as promised - IF I can get someone to help me test my theory and work out any unknowns.

Depends if I recieve my DVD in time wink_o.gif

Share this post


Link to post
Share on other sites

It looks like the config.bin for the animals addon might actually contain quite a few more clues as to what's going on in the fsm definitions.

Here's a little excerpt from it:

<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Code Sample </td></tr><tr><td id="CODE">class CfgFSMs {

class Dragonfly {

class States {

class Random_Move {

name = "Random_Move";

class Init {

function = "randomMove";

parameters = {1, -0.100000, 1.200000, 5.000000};

thresholds = {};

};

class Links {

class MoveCompleted {

priority = 1.000000;

to = "SetRandom3";

class Condition {

function = "moveCompleted";

parameters = {};

threshold = 0;

};

class Action {

function = "nothing";

parameters = {};

thresholds = {};

};

};

class TimeElapsed {

priority = 0.000000;

to = "SetRandom2";

class Condition {

function = "timeElapsed";

parameters = {};

threshold = 0;

};

class Action {

function = "nothing";

parameters = {};

thresholds = {};

};

};

};

};

Not that I can make too much sense out of it yet, but the more sample data, the better... wink_o.gif

Share this post


Link to post
Share on other sites

You guys should do some reading on Finite State Machines... might help with you're moding down the line...

Share this post


Link to post
Share on other sites

The concept is pretty logical and straightforward.

It's the syntax and the class requirements that ArmA needs that's hard to figure out without documentation...

Share this post


Link to post
Share on other sites
You guys should do some reading on Finite State Machines... might help with you're moding down the line...

I've done plenty of reading thank you.

Quote[/b] ]The concept is pretty logical and straightforward.

It's the syntax and the class requirements that ArmA needs that's hard to figure out without documentation...

Thats the part that's really difficult mainly because I have no test-bed. I am dependant on others who have the product.

Kronzky,

Is that file from ArmA? The only thing that confuses me is that the formation FSM was using properties for conditions and actions whereas the file you posted has them as classes???

If it is from ArmA I am totally confused as to why they would allow for both. Seems like bad ... yeah... I won't go there.

In other news:

sowfsmeditor.jpg

Not nearly a finished project (1 days worth of work) but when I finish moving and I can get confirmation of the fsm file working... I will have better idea about how it will look/operate.

Share this post


Link to post
Share on other sites
Kronzky,

Is that file from ArmA? The only thing that confuses me is that the formation FSM was using properties for conditions and actions whereas the file you posted has them as classes???

If it is from ArmA I am totally confused as to why they would allow for both. Seems like bad ... yeah... I won't go there.

Yes, it's from the config.bin in the animals.pbo.

You know how to get to it, right?

I've posted the full, decoded file here, but I'm not sure if it passes the Placebo Test ("If the file being shared in noway benefits someone who hasn't bought the game then it's fine."), so it may disappear again... wink_o.gif

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×