Kampen 0 Posted August 12, 2017 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
7erra 629 Posted August 12, 2017 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
Kampen 0 Posted August 12, 2017 I found some that were not made for Arma 3 but I'm not so sure they'd work. Share this post Link to post Share on other sites
7erra 629 Posted August 12, 2017 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
Kampen 0 Posted August 13, 2017 That's XML. And I found one like this but it's more general purpose. https://sourceforge.net/projects/fsme/ Share this post Link to post Share on other sites