Jump to content


  • Content count

  • Joined

  • Last visited

  • Medals

Everything posted by Sparker

  1. Warlords

    Yes but it is pleasant neither for me nor for my enemy if I spawn right on his head by chance. I think this check wouldn't harm much. Anyway, that's a nice mode, it was quite fun to play. It reminds me of EUTW server, but with more accessible proper weapons and bigger role of AI usage.
  2. Warlords

    Hi! A little suggestion, but might have already been mentioned: when teleporting to a location, make sure we don't spawn right next to an enemy.
  3. Thanks! You are totally right. I have corrected that in the message.
  4. > Sorry to rain on your parade but I'm glad BIS don't waste their time and bother with AI anymore Ofcourse some old players may leave, but they will be replaced by a bigger horde who prefer modder-friendly platform on a new engine over useless tries to simulate human behaviour by AI. What we(or at least I) mean by 'bad AI' here is not bots' lack of intelligence but their inability to follow a plan, either made by their planner or by a human, in the virtual world where they exist. They would often crash into everything, poorly navigate in city environments, or even get totally stuck in the middle of an open road. This could do in something like GTA where a policeman's lifespan is half a minute, until he is replaced by a new one, but when something has to happen in the big scale of ARMA it is totally inacceptable. I guess their AI code just became totally unmanageable, since it's FSM-based and as I understand it's derived from the very first iterations of Operation Flashpoint AI. I could understand this lack of will to invest effort into this as a programmer but unfortunately not as a consumer of their products. Also, as for the point 'PvP is the future', this is simply not true. I have seen lots of ARMA players who prefer more casual PvE gameplay. In order to create better dynamic PvE scenarios we obviously need NPCs which can at least do what they are told to with the provided tools, that is, the SQF scripting commands we currently have.
  5. This is an OOP implementation for SQF which is hugely inspired by a similar project, OOP.h . Why another one? I like OOP.h but as I found out, it has a big impact on performance, which lies deep in how it is done. I don't mean to say that OOP.h is bad, it just has one limitation which I was forced to work around. Then it's better to share code than not, right? So, I decided to reinvent it, but with the aim of minimizing performance impact, and here is what we have: Based on SQF preprocessor, so you need to #include a single file. Supports member variables, methods, static variables, static methods and class inheritance(no multiple inheritance yet). With a single preprocessor flag (#define OOP_ASSERT in OOP_Light.h) you can enable or disable run-time error checks, which verify most common errors, like attempts to access a non-existent member or class. If enabled, it will output errors in a human-readable way. Good performance. Really, with debug disabled, a macro like GETV(_veh, "varName"); gets expanded into "missionNamespace getVariable (_veh+"_"+"varName");", which is typically not such a great performance loss. No support for public/private/protected keywords yet, so all members are public. Currently it is in 'beta' state. It seems to work and I don't see any major game-breaking issues with it as I have tried to do a little development with it. Also there is no documentation but you can examine the example files and classes and see how it works. As an example, the project contains a few useful classes written with OOP-Light: MessageLoop, MessageReceiver and Timer. An example of how to use them is located in Example.sqf file. MessageLoop and MessageReceiver can help you easily create a message loop, a useful construction which lets you manage processing of some events in a fixed amount of SQF threads, or helps you pass data between threads. Timer class just generates messages at fixed time intervals and sends them to the specified MessageReceiver. Github link: https://github.com/Sparker95/OOP-Light I hope someone finds this useful!
  6. Thanks! You are very much right... I was looking for something like the profiling build does actually. Profiling, Performance, Arma Script Profiler, these things are so confusing!
  7. So, could we load it on a linux arma 3 server and remotely profile it? I'd like see what the engine is doing every frame. because we often have huge performance drops down to ~3 FPS and it would be very interesting to know what the hell is going on.
  8. AI Driving - Feedback topic

    Where is 2.? Having a list of known mission developers is a good argument. Why does 4. make you laugh? I'm not really aware of the structure of the company and who is responsible for what and who we should send it to, but I can imagine the collective message having more effect than our usual bumping of this thread.
  9. AI Driving - Feedback topic

    I suggest we do it like this: 1. Find scenarios and videos showing the evident failures of driving and convoy handling without any mods. 2. Collect (a sort of) signatures of people affected by this issue, most important is to find mission developers of popular scenarios. 3. Create a proper text which explains everything. 4. Send it to someone in the upper management of the company who can dispatch the resources to respond to the problems. If the company is known for its relations with the content creating community, they won't ignore this (I guess).
  10. AI Driving - Feedback topic

    You don't just say the magic word 'modular' and expect something to be magically better based on that. For instance, the issue of airplane issuing a turn-away maneuver 300 meters from target instead of 500, is it because it's not modular? Also I think there is no way to let modders access the AI code since it's written in C, not SQF. Unless they specially implement the AI code as a library, give us its source code and let us connect a different library to the game. "a way too low cost-benefit ratio (spend days, weeks fixing seemingly simple issue) " - the AI topic clearly affects mission creators like Barbolani. Upset mission creators -> less missions -> less players -> less money, I thought it should look like this from a company's point of view. I think this whole conversation is pretty pointless. Clearly, nobody is going to do anything with AI any more, ever. I have made a negative review on Arma to raise the awareness of other people about this problem. It's not something I'd like to do to my favourite game, but what else can we do?
  11. AI Driving - Feedback topic

    Sorry to post my workaround to 'convoys get stuck trying to depart' problem', but in case @barbolani needs it: if convoy is detected to get stuck by a script, try to select a new different leader for the convoy group. AI will do some replanning and eventually they will start moving... that's the best I know right now.
  12. Help on debugging FPS drop

    The BIS_fnc_safePos mentioned above, if massively called, could slow down the framerate because it asks the engine to do a search on nearby objects. However no idea how high the search radius should be to really cause a trouble.
  13. I thought that creating very many member variables in the missionNamespace might degrade the lookup time for accessing them. Though, storing the variables in sub-namespaces (engine's vehicles or other kinds of objects) might help it. But actually all these BIS_fnc functions and functions from our own missions already occupy the missionNamespace, there are about 2 thousand of them total IIRC, so probably storing member variables from 100 "objects" or so doesn't change anything much.
  14. Hi! Probably noone can tell you. Better contact the author himself at steam: https://steamcommunity.com/id/154578/ He's a cool guy and I'm sure he will help you, if he has time.
  15. I've had a look at oop.h. Naught and you probably have a degree in preprocessor magic and its applications! Really impressive. I'll give it a try some time soon! I was considering one thing though. Is it faster to store all object's methods in global namespace or can it be made faster if I create objects with createVehicle and store its member variables there? Does it make any sence to spend time doing this, what do you think? It appears to me at the first glance that manipulating variables in mission namespace is pretty fast.
  16. Hello, developers! As I see SQF having more and more functions added, this came to my mind. The title explains everything. Obviously the engine has the path finding algorithm built in, as it finds paths for AIs all the time. Other mission/mod creators might find it useful. Would it be possible to expose it to the SQF scripting language? Or are there huge problems, like it must be called asynchronously because it takes a lot of time? There are some solutions implemented already in SQF but the engine-based solution will work faster for obvious reasons. Thanks!
  17. I couldn't find any script/tool/addon which would provide such a basic functionality: how much is ARMA's SQF scheduler loaded right now? Can I run a check every X milliseconds, with the given other scripts running in background? When we are spawning many different SQF scripts with infinite loops we want to know how much the SQF scheduler is loaded with these scripts. Typically we would try to force the scheduler to execute a simple script and observe the delay between spawning the script and its output. For instance you could spawn a lightning with Zeus and estimate the delay. How it works: The script I suggest uses the same idea: it runs an infinite loop, where it tries to execute a piece of code as often as the scheduler lets and measuring time intervals between executions. If the scheduler is flooded with many heavy scripts then sequential executions of our tiny script will happen less often. The script also performs exponential averaging of measured intervals. What it shows: It shows the delay between executions described above. The delay can help us understand the maximum frequency at which your loops can run(average). It also outputs the overload, measured in percents, which is equal to: overload=100*game FPS*delay=100*game_FPS/SQF_FPS. So if the "overload" is around100%, SQF scripts are running at roughly the game's frame rate. If it is 200%, then spawned SQF scripts are running at half the game's frame rate, and so on. Why not just measure performance of single scripts with standard methods? Maybe you are running other people's scripts in the mission, or you want to get an overview, how much load all the scripts produce. How to use it: Run this locally: Measurements will be output to system chat. You can fine-tune _a to perform smaller or bigger averaging (smaller _a -> bigger averaging). [] spawn { sl_prev = time; private _i = 0; private _ds = 0; // Smoothed value of delta private _a = 0.009; // private _N = 30; while {true} do { sleep 0.001; private _t = time; // Get current time private _delta = _t - sl_prev; // Calculate time passed since previous measurement sl_prev = _t; // Store the new time back _ds = _a * _delta + (1-_a)*_ds; // Exponential averaging //Output value every N measurements _i = _i + 1; if (_i == _N) then { _i = 0; private _overloadPercent = round(100*diag_fps*_ds); systemChat ((format ["Scheduler delay: %1 ms, overload: %2", round(_ds*1000), _overloadPercent]) + "%"); // Calculate new value for N to produce outputs every 0.5 seconds _N = ceil(0.5/_ds); }; }; If you want to quickly test the script here's a dummy load you can use. Just run it a few times: for [{_i=0}, {_i<5}, {_i=_i+1}] do { [] spawn { sleep random 1; while {true} do { sleep 0.5; private _a = []; //6 ms @ Core i7 3770 _a set [70, 0]; _a = _a apply {2}; { private _sum = 0; { _sum = _sum + _x; }forEach _a; } forEach _a; }; }; }; Please share what you think about this!
  18. AI Driving - Feedback topic

    Yes indeed. Since they can't do this I was forced to make a simple controller for that, might be helpful for you. It checks the maximum separation between vehicles in convoy(that is, maximum distance between pairs of cars following each other). Then if the distance is lower or higher a threshold it changes the lead vehicle speed linearly. Those who know the control theory might implement a PID controller for that.
  19. AI Driving - Feedback topic

    If that vehicle is a part of multi-vehicle convoy group, try to select a new leading vehicle, if you notice that the convoy has stuck. It helped me a lot. Also I wouldn't do "forceFollowRoad true", because then they won't be able to drive around an obstacle in the middle of a road.
  20. AI Driving - Feedback topic

    Here's a script I made a while ago to prevent friendlies driving over friendlies to death: private _unit = _this select 0; //: Object - Object the event handler is assigned to. private _source = _this select 3; //: Object - The source unit that caused the damage. private _instigator = _this select 6; //: Object - Person who pulled the trigger if ((side _source == side _unit) && /*(_projectile == "") &&*/ (isNull _instigator)) then { 0 }; Add it to the "HandleDamage" event handler with addEventHandler of the unit you want to protect from vehicle collision dammage. Now, if you do want a specific soldier to be killed with a vehicle... just don't give him this event handler, or remove it from him.
  21. AI Driving - Feedback topic

    How exactly does the magic 'modular' design going to revive the AI? After all, the AI 'module' will have to do exactly the same things. Get data from same kinds of entities, analize what's going on around, and perform the same actions as now. Maybe the new engine's AI will be build not with FSMs but with something else? Of course if they redo the AI from 0 it might improve things, because, as you said, the core of AI has been there from OFP times. As I see it, arma's AI is pretty good, apart from some cases when it severely fails.
  22. Now it should be used like this in mission.sqm: briefingName="@STR_MISSION_NAME_SQM"; Actually now there is a hint in the mission editor saying how to use it, if you put the cursor over the mission name field.
  23. AI Driving - Feedback topic

    I've found another condition when a vehicle gets stuck: if you order an inf. group to board an assigned vehicle and assign a "MOVE" waypoint to the group at the same time. They won't even attempt to turn on the engine. But if you add the waypoint after they have boarded the car, they start moving instantly. Steps to reproduce: //m0, m1 are guys of group g0. //"car" is the vehicle m0 assignAsDriver car; m1 assignAsGunner car; [m0, m1] orderGetIn true; // If you execute the second part (below) after they get in, the car starts moving fine wp0 = g0 addWaypoint [[2700, 3800, 0], 0]; wp0 setWaypointType "MOVE"; g0 setCurrentWaypoint _wp0;
  24. AI Driving - Feedback topic

    Apart from all the things already mentioned, sometimes AI ground vehicles are stuck so much that they don't even switch on engine to move to the waypoint. Happens both whis wheeled and tracked vehicles. I have found out that assigning waypoints without index (groupName addWaypoint [center, radius] instead of ... addWaypoint [center, radius, index, name]) reduces the chance of such event a lot. Anyway they still might get stuck. Also I've found that if they get stuck, assigning a new leader usually solves the problem. I guess that their brain gets reset or something like that. If this is not going to be repaired any time soon, maybe we can get at least some commands to debug what's going on in their brain? Like why he doesn't want to move: because his pathfinding has failed or something else. Or even better, some commands to reset their FSMs, redo the planning, etc. Really, my attemts to make them move sometimes remind me of something like this:
  25. Thank you for making this! I've been using your plugin for a while and I must say it does a great job!