Kampen

Using better FSM Editor

5 posts in this topic

So I've been trying to use the BIS FSM Editor but omg the UI and whatnot just kills me. It's so clunky and hard to use. I was wondering if you could use a different FSM Editor instead? And if you can then does anyone have any suggestions on which to use?

Share this post


Link to post
Share on other sites

The only other FSM editor I found was this one:

http://www.armaholic.com/page.php?id=1184

Tbh I haven't used it but at least the description is promising. In contrast to BI's editor it has variable identifaction and command autocompletion. What doesn't look so great is the UI in my opinion. Too less space for code. But just as any other editor it may only needs some getting used to. Also it hasn't gotten any update since 2007 therefore the functionality might be broken and commands not up to date.

 

I agree with you that the FSMEditor is not very user friendly because of the reasons you mentioned and it would be awesome if something was done about it yet I haven't seen any FSM in the missions I analysed in the past 2 years even though it is a really handy tool that is said to save performance by avoiding a thousand waitUntil loops. I only started using it recently and I certainly haven't discovered every feature yet.

Share this post


Link to post
Share on other sites

Can you give a link? If you open up an fsm that you created with the editor it should look similar to what was written under the FSM entry on the BIKI.

This is one of my FSMs opened in notepad++:

Spoiler

/*%FSM<COMPILE "E:\SteamLibrary\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, directionV2">*/
/*%FSM<HEAD>*/
/*
item0[] = {"Start",0,4346,6.885117,-272.873230,96.885117,-222.873260,0.000000,"Start"};
item1[] = {"Pos_in_array",4,218,6.759949,-346.032318,96.759949,-296.032318,0.000000,"Pos in array"};
item2[] = {"Show_message",2,250,7.108200,-419.801147,97.108215,-369.801147,0.000000,"Show message"};
item3[] = {"Finish",4,218,7.253242,-490.632965,97.253250,-440.632965,0.000000,"Finish"};
item4[] = {"Markers_disabled",4,218,121.404984,-439.829468,266.044739,-354.562561,0.000000,"Markers disabled" \n "Race ended"};
item5[] = {"Exit",1,250,297.710266,-421.715302,387.710297,-371.715332,0.000000,"Exit"};
item6[] = {"Finish_message",2,250,7.137615,-565.102844,97.137634,-515.102844,0.000000,"Finish message"};
item7[] = {"",7,210,189.598343,-251.950119,197.598343,-243.950119,0.000000,""};
item8[] = {"",7,210,189.246796,-544.845642,197.246796,-536.845642,0.000000,""};
item9[] = {"",7,210,-79.958450,-544.595398,-71.958466,-536.595398,0.000000,""};
item10[] = {"",7,210,-82.792809,-323.690796,-74.792824,-315.690796,0.000000,""};
link0[] = {0,1};
link1[] = {0,7};
link2[] = {1,2};
link3[] = {2,1};
link4[] = {2,3};
link5[] = {2,4};
link6[] = {3,6};
link7[] = {4,5};
link8[] = {6,8};
link9[] = {6,9};
link10[] = {7,4};
link11[] = {8,4};
link12[] = {9,10};
link13[] = {10,1};
globals[] = {0.000000,0,0,0,0,640,480,3,16,6316128,1,-148.255035,380.712616,154.623291,-689.433411,554,884,1};
window[] = {2,-1,-1,-1,-1,883,-1842,-402,124,3,572};
*//*%FSM</HEAD>*/
class FSM
{
        fsmName = "directionV2";
        class States
        {
                /*%FSM<STATE "Start">*/
                class Start
                {
                        name = "Start";
                        itemno = 0;
                        init = /*%FSM<STATEINIT""">*/"// _obj execFSM ""fsm\directionV2.fsm""" \n
                         "params [[""_player"", objNull, [objNull]]];" \n
                         "_fncPosCheck = {" \n
                         "	params [""_positions"", [""_returnArray"",false,[false]]];" \n
                         "	{" \n
                         "		if (vehicle player inArea [_x select 0, 15, 15, 0, false]) exitWith {" \n
                         "			if (!_returnArray) then {true} else {_x};" \n
                         "		};" \n
                         "	}" \n
                         "	forEach _positions;" \n
                         "};" \n
                         "" \n
                         "// _position, angle, severity, nextcall, warning, dontcut" \n
                         "_posArray = [" \n
                         "	[[5339.54,14699.9,0], ""L"", ""6"", 0, false, true]," \n
/* Long array */
                         "];" \n
                         "_finish = [14546.2,16658.5,0];" \n
                         "" \n
                         "_sleep = [] spawn {sleep 2};"/*%FSM</STATEINIT""">*/;
                        precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
                        class Links
                        {
                                /*%FSM<LINK "Markers_disabled">*/
                                class Markers_disabled
                                {
                                        itemno = 4;
                                        priority = 0.000000;
                                        to="Exit";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"!TER_showDirections" \n
                                         "OR" \n
                                         "!TER_isRacing"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                                /*%FSM<LINK "Pos_in_array">*/
                                class Pos_in_array
                                {
                                        itemno = 1;
                                        priority = 0.000000;
                                        to="Show_message";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"[_posArray, false] call _fncPosCheck" \n
                                         "&&" \n
                                         "scriptDone _sleep"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                        };
                };
                /*%FSM</STATE>*/
                /*%FSM<STATE "Show_message">*/
                class Show_message
                {
                        name = "Show_message";
                        itemno = 2;
                        init = /*%FSM<STATEINIT""">*/"_posArr = [_posArray, true] call _fncPosCheck;" \n
                         "_posArr call TER_fnc_raceMsgV2;" \n
                         "_sleep = [] spawn {sleep 2}; //Prevent too many executions"/*%FSM</STATEINIT""">*/;
                        precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
                        class Links
                        {
                                /*%FSM<LINK "Finish">*/
                                class Finish
                                {
                                        itemno = 3;
                                        priority = 0.000000;
                                        to="Finish_message";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"vehicle player inArea [_finish, 15, 15, 0, false]"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                                /*%FSM<LINK "Markers_disabled">*/
                                class Markers_disabled
                                {
                                        itemno = 4;
                                        priority = 0.000000;
                                        to="Exit";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"!TER_showDirections" \n
                                         "OR" \n
                                         "!TER_isRacing"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                                /*%FSM<LINK "Pos_in_array">*/
                                class Pos_in_array
                                {
                                        itemno = 1;
                                        priority = 0.000000;
                                        to="Show_message";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"[_posArray, false] call _fncPosCheck" \n
                                         "&&" \n
                                         "scriptDone _sleep"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                        };
                };
                /*%FSM</STATE>*/
                /*%FSM<STATE "Exit">*/
                class Exit
                {
                        name = "Exit";
                        itemno = 5;
                        init = /*%FSM<STATEINIT""">*/"// Exit"/*%FSM</STATEINIT""">*/;
                        precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
                        class Links
                        {
                        };
                };
                /*%FSM</STATE>*/
                /*%FSM<STATE "Finish_message">*/
                class Finish_message
                {
                        name = "Finish_message";
                        itemno = 6;
                        init = /*%FSM<STATEINIT""">*/"[[5603.62,15017.8,0], ""L"", ""Finish"",0,false,false,""A3\ui_f\data\Map\Markers\HandDrawn\objective_CA.paa""] call TER_fnc_raceMsgV2;"/*%FSM</STATEINIT""">*/;
                        precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
                        class Links
                        {
                                /*%FSM<LINK "Pos_in_array">*/
                                class Pos_in_array
                                {
                                        itemno = 1;
                                        priority = 0.000000;
                                        to="Show_message";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"[_posArray, false] call _fncPosCheck" \n
                                         "&&" \n
                                         "scriptDone _sleep"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                                /*%FSM<LINK "Markers_disabled">*/
                                class Markers_disabled
                                {
                                        itemno = 4;
                                        priority = 0.000000;
                                        to="Exit";
                                        precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
                                        condition=/*%FSM<CONDITION""">*/"!TER_showDirections" \n
                                         "OR" \n
                                         "!TER_isRacing"/*%FSM</CONDITION""">*/;
                                        action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
                                };
                                /*%FSM</LINK>*/
                        };
                };
                /*%FSM</STATE>*/
        };
        initState="Start";
        finalStates[] =
        {
                "Exit",
        };
};
/*%FSM</COMPILE>*/

 

What language is this actually?

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