Jump to content

ffredyk

Member
  • Content Count

    12
  • Joined

  • Last visited

  • Medals

Community Reputation

36 Excellent

About ffredyk

  • Rank
    Private First Class

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I am actually trying to figure these out right now.. I am stuck at the diary records function, because it is completely undocumented and chaotic (code is branching into 2-3 separate logics and none of them works for me 😄 ) There is a function bin_fnc_switchMap and similar one that enables/disables which modes are available to switch between. I will document them together with other functions I have ready.. I will update this thread with all new discoveries or research that I have made so far. But I don't know when I will have time to write them down, I have been kinda overwhelmed with the work lately.
  2. So I added the compass function which is fairly simple (just toggles the compass) I didn't see any references to this shooting star effect in the functions.. Maybe it is dug deep somewhere, but I would rather assume it is created as a particle or via cutRsc somehow.. I will try to rip active scripts, entities and displays(controls) during the intro when this happens, it will take a few hours tho..
  3. Thanks, I had a lot of fun figuring these out actually😄 I want to look into these smaller function later today. Namely the simple notification function (little bar in the top middle screen space) but from the fast lookup I had on it earlier it seems it won't support custom text sadly 😕 and the danger zone functions (they are somehow interconnected with acctime management function - namely bin_fnc_initAcctime), there are some acctime enhancement functions too (timemultiplier boosting) I will take a look at the compass too. And I need to figure out how the omni-directional antenna notifying player about ongoing signals around him works..
  4. Hello, so I spent last 4 days reverse engineering and studying the new contact functions and scripting systems. I have figured out almost everything and I will update this thread as I figure out rest of what's left unexplored. Spectrum Device / EM / Radios This one was really tough to solve. The internal system is quite big and chaotic a little bit. The most important functions tend to be descripted, but the rest of the system are "unorganized" chunks of codes. [string: Antenna ID,object: Owner,int: Antenna Type] call BIN_fnc_setAntenna; This function is easy to use. You just think of some unique ID for the antenna, object that will hold the antenna and you define the type of antenna (2 -> transceiver = both receives and transmits signal) Antenna ID is also looked up in the config for predefined values. Check CfgContact >> Antennas Example: ["AlienTracker",bin_drone,2] call BIN_fnc_setAntenna; [string: Antenna ID,string: Signal classname] call BIN_fnc_addSignal; This function is easy to use too. It gives the antenna sounds (signals) we want to play on it. The signals are defined in the config CfgContact >> Signals Signals can be looped. Example: ["AlienTracker","EM_Drone_01_Tracking_01"] call BIN_fnc_addSignal; [string: Antenna ID, string: Name] call BIN_fnc_setAntennaName; Set's the visible name of the antena ie. when used on squad, instead of "Unknown squad" displays the second param Example: ["AlienTracker","Ligma ET"] call BIN_fnc_setAntennaName; [object: UGV class UAV] spawn BIN_fnc_initUGV; This sets up all the EM functionality for UGVs UGVs emit UAV Telemetry signals and listens for jamming and hacking Hold action is added to the UGV for it's destruction. All UGVs set by this functions are on the same frequency, think of that when planning placements Example in editor init: [this] spawn BIN_fnc_initUGV; [object: unit, string: Company, string: Squad] spawn BIN_fnc_initAISquad; This one is the party popper. This is the one used on unit groups. It is initialized on any unit in the group Company is string in format "C0?" where ? stands for a number from 1 to 9 (but it really just reads entries from config CfgContact >> Antennas It is C-zero-one not C-O-one Squad is a single lowercase letter from "a" to "h" and "q" which is the base (not used in this function) This function looks for units that have a radio backpack on them in the whole group, uses them as target unit if found Example in editor init: [this, "C01", "a"] spawn BIN_fnc_initAISquad; The EM system for AI Base is created automaticaly from script initAISquad, which checks if the base is already ready or not. There are missionNamespace scripted eventHandlers for signal listening and custom scripting but I didn't test these enough to tell you about them properly. Alien Drone The small alien drone can be easily placed in editor (best practice as side east) and has two types of behaviour - Aggresive and Passive. You can read about the setup on the wiki https://community.bistudio.com/wiki?title=Arma_3_Alien_Entity_Behavior Official variable naming of the drone is bin_drone There are some uncovered script functions however (please note, I didn't yet properly test all behaviour branches so information I provide may be misleading anyhow) [object: Drone,int: Max signals,int: Jamming time,array: ?next puzzle?,int: number of repetitions] call bin_fnc_puzzle_mole; This function creates what is called a puzzle - numerous signals for player to jam with their signal detector. Max signals defines how many concurent signals are visible on the spectrum at the same time Jamming time defines how long it takes to jam one signal successfuly Next puzzle is something I didn't mess up with yet, so I can't provide much information Number of repetitions define how many times a new signal emerges when one is jammed There is a scripted eventHandler for you to listen, that fires when the puzzle is completed [missionNamespace, "puzzleCompleted",{/*codehere*/}] call bis_fnc_addScriptedEventHandler; There are other event handler (self-explanatory): puzzleReset, puzzleStepCompleted, puzzleTerminated There is a lot of functions puzzle-related.. I am messing with them now, so I will fill this list when I create more robust information Example: [bin_drone,1,1,[],3] call bin_fnc_puzzle_mole; [object: Drone,int: Radius m,int: Speed m/s,int: Delay] call bin_fnc_setGravityPulse; Shield's effect is made using light entity nad sound effect (when hit, PP is also used) Shield eats away stamina and stops the player for a second when near the source. Shield shakes the player's camera and creates deep sounds when felt from far. Speed is the speed, the gravity shield reaches the Radius distance from the drone Radius define the distance from the drone the shield will reach This one creates pulsing shield around the Drone once every Delay seconds Example: [bin_drone,300,100,3] call bin_fnc_setGravityPulse; [object: AFO] call BIN_fnc_initMothershipLights; Powers up the big AFO (it's lights) CBRN There are some CBRN functions not explained in the wiki (specialized on the chemical warfare), but are tagged as incomplete or "not robust" so I will be experimenting with them and when something is proved to be working I will list it here Other There are few useful scripts for unit enhancement, you can find more of these on the wiki: https://community.bistudio.com/wiki/Arma_3_CBRN But there are some hidden ones: [object: Unit, bool: Attach/detach] spawn bin_fnc_attachChemlight; Attaches a blue glowstick on the shoulder of the unit the same way as it is seen in campaign. Best practice is to mark only soldiers with radios that can be messed up with signal detector. Example: [this, true] spawn bin_fnc_attachChemlight; [object: Ball, int: Time to decompose] spawn BIN_fnc_matterBallEffects; Effects used for the matter balls (yellow blobs the alien leaves behind) Adds lights, refraction particles and animates the ball to decompose itself Example: [this, 100] spawn bin_fnc_matterBallEffects [object: Vehicle] call BIN_fnc_empVehicle; Tunes the vehicle so it's more post-EMP Can be reverted by setting second parameter bool (destruction of the engine) Example: [this] call BIN_fnc_empVehicle; [object: Unit, vector: Force] call BIN_fnc_setRagdoll; Ragdolls the unit with the directional force Example: [player,[0,100,0]] call BIN_fnc_setRagdoll; [classname: Vision type] spawn BIN_fnc_showVision; The hallucination effect from the campaign when player completed the drone's puzzles Takes the data from config CfgContact >> VisionSequences [bool: Shown] call BIN_fnc_showHorizontalCompass; Shows or hides the horizontal compass at the top of the screen Example: [true] call BIN_fnc_showHorizontalCompass; So that's it, at least for now.. I will update this thread as I discover and study more scripts and functions the Contact DLC has to offer. Trust me, there is a lot of unused things (chemical detector for example) and I've created a lot of custom scripts to complement these features. Just take a look at this sneak peak: If there is anyone that wants to study these things with me, you just need the Functions and Config viewers. I tried to take a peak inside campaign init files, but there are mostly empty or contains unrelevant logic. The hard-way is sometimes the only way, at least for now 😄
  5. Hello, I was able to get Chemical Detector working, alien signals, gravity pulses and anomalies are all working but I am not able to figure out one thing left - that is the EM device to communicate with AI squads and base.. I tried to reverse engineer the functions to some degree, but the system is so complicated I just couldn't get it to work through multiple ways. I tried to rip initialization scripts from campaign missions (using debug console, loadFile "init.sqf" and other predefined scripts), but only init.sqf was shown to contain few scripting lines with basic player setup. Does anyone here know how the EM is initialized, assigned to AI and manipulated? Or are there any other known files other than init.sqf, initPlayerLocal.sqf and initServer.sqf that may contain any leads? Or for the best solution, can some of the devs tell me how are the functions used?
  6. I don't want the player to be able to control enemy units, and managing restrictions event based is not perfect (player is still able to manipulate AI waypoint etc.). So I just made them uneditable and rendered their icons the same way curator interface does. But when player wants to attack the enemy unit, he right-clicks it, assuming that it will work the same way as in vanilla zeus. Therefore I am trying to recreate it with DESTROY waypoints (my waypoints have exactly the same settings as the vanilla zeus ones) and AI still refuses to work as expected. So I am asking someone, who might know, how to set the DESTROY waypoints the best way, for them to work reliably. Simple said, just tell me how to create attacking waypoints for AIs that behave the same way as in zeus.
  7. That's it? Nothing can be done to make it work? Am I just supposed to release a bugged feature, without any possible solution left?
  8. Sorry, I had a snippet ready, but forgot to add it. //Event Hadler: When zeus places a waypoint (context: added when pressed RMB while hovering over an enemy unit - attack order) eh_waypointModifier = zeusModule addEventHandler ["CuratorWaypointPlaced", { params ["","_group","_waypointID"]; //Waypoint created by curator interface _wp = [_group,_waypointID]; //Waypoint array _group reveal cw_var_unitToAttack; //Revealing the enemy to ordered group (not helping) _wp setWaypointType "DESTROY"; //Sets the waypoint as "DESTROY" so AI would know it is going to attack something (Curator interface does the same) //AI usually moves towards the target, sometimes it does nothing. But it won't attack the enemy. //** Method 1 ** _wp setWaypointBehaviour "COMBAT"; //Makes the AI move towards the waypoint more reliably (Curator interface does the same) //AI moves towards the target tacticaly, it sometimes even engages against the enemy. //** Method 2 ** _wp setWaypointPosition [(position cw_var_unitToAttack),0]; //Sets the position of the waypoint so spatial DESTROY can find it's actual target more easily - does quite the opposite //AI usually stays on position //** Method 3 ** //Variable 'sys_unitToAttack' set by logic calling this EH _wp waypointAttachVehicle sys_unitToAttack; //Attaches the waypoint to the enemy unit - actually attaches the waypoint several meters away from unit, sometimes to different object (waypointAttachedVehicle still returns sys_unitToAttack) //AI usually moves towards the target, but won't attack //** Method 4 ** deleteWaypoint _wp; //Removes the waypoint created by curator interface _wp = _group addWaypoint [position sys_unitToAttack, 0]; //Creates a whole new waypoint on enemy's position _group setCurrentWaypoint _wp; //Sets the new waypoint as current so AI can't be confused which waypoint to use //AI just stands on place doing nothing. zeusModule removeEventHandler ["CuratorWaypointPlaced",eh_waypointModifier]; //Not needed anymore sys_unitToAttack = nil; //Not needed anymore }]; All units ordered by waypoints have YELLOW combat mode and NORMAL or FULL speed mode, they have all skills maxed out and their morale is disabled. Enemies are independent FIA units with normal skills, normal morale, only with stand pose set to CROUCH or STAND
  9. Hello, I am modifying curator interface, and I've run into a problem with AI following waypoints. The curator interface has only friendly units editable. Enemy units are rendered through my script separatedly so they can't be manipulated. To reinvent the functionality of "right-pressing" the enemy units with mouse to attack them, I am using CuratorWaypointPlaced event handler. I tried to modify waypoint passed from event handler, I tried to create new one and set it to waypointType "DESTROY" and delete the passed one. And I tried to set the one event handler gave me. AI just refuses to behave correctly as in vanilla zeus interface What am I trying to do: - Recreate the RMB behaviour in curator interface - Make AI move to and attack units at "DESTROY" waypoint What is actually happening: [when waypoint is attached to enemy] AI just stands on place nothing is happening, except the AI seems to guard more the direction to it's waypoint attached waypoints are offset to units they are attached to even several meters. (the position is different) sometimes attachWaypointVehicle attaches waypoint to nearby objects instead to enemy unit (but waypointAttachedVehicle still returns enemy unit) [when waypoint is spatial on ground] AI moves to position, sometimes attacking the enemy usually doing weird sh** on the way. when friendly units are too close to waypoint, unit may start killing nearby friendly units (nearby to waypoint) instead of enemy sometimes the waypoint survives for about 5 seconds before disappearing (maybe false completion?) when forced waypoint position by setWaypointPosition to position identical to enemy unit, sometimes the waypoint refuses and jumps to a nearby position What vanilla zeus does when creating a waypoint: Type: "DESTROY" Behaviour: "COMBAT" Position: under interface cursor it doesn't attach the waypoint to units, only sets position, type and behaviour. When I do the exact same, my AI's refuses to work properly (identical to vanilla zeus) //Event Hadler: When zeus places a waypoint (context: added when pressed RMB while hovering over an enemy unit - attack order) eh_waypointModifier = zeusModule addEventHandler ["CuratorWaypointPlaced", { params ["","_group","_waypointID"]; //Waypoint created by curator interface _wp = [_group,_waypointID]; //Waypoint array _group reveal cw_var_unitToAttack; //Revealing the enemy to ordered group (not helping) _wp setWaypointType "DESTROY"; //Sets the waypoint as "DESTROY" so AI would know it is going to attack something (Curator interface does the same) //AI usually moves towards the target, sometimes it does nothing. But it won't attack the enemy. //** Method 1 ** _wp setWaypointBehaviour "COMBAT"; //Makes the AI move towards the waypoint more reliably (Curator interface does the same) //AI moves towards the target tacticaly, it sometimes even engages against the enemy. //** Method 2 ** _wp setWaypointPosition [(position cw_var_unitToAttack),0]; //Sets the position of the waypoint so spatial DESTROY can find it's actual target more easily - does quite the opposite //AI usually stays on position //** Method 3 ** //Variable 'sys_unitToAttack' set by logic calling this EH _wp waypointAttachVehicle sys_unitToAttack; //Attaches the waypoint to the enemy unit - actually attaches the waypoint several meters away from unit, sometimes to different object (waypointAttachedVehicle still returns sys_unitToAttack) //AI usually moves towards the target, but won't attack //** Method 4 ** deleteWaypoint _wp; //Removes the waypoint created by curator interface _wp = _group addWaypoint [position sys_unitToAttack, 0]; //Creates a whole new waypoint on enemy's position _group setCurrentWaypoint _wp; //Sets the new waypoint as current so AI can't be confused which waypoint to use //AI just stands on place doing nothing. zeusModule removeEventHandler ["CuratorWaypointPlaced",eh_waypointModifier]; //Not needed anymore sys_unitToAttack = nil; //Not needed anymore }]; I've spend at least 7 hours figuring this nonsense out and trying several AI hacks. I want to have my scenario addon-free, just working with vanilla, so any mods are not usable to me. Only scripting hacks. This is not really a request for help. It is a request for someone from dev-team to give me some insight on how zeus waypoints works so I can successfuly and reliably replicate. Thx.
  10. I would say that substracting two arrays would be faster process than computing distance between two vectors multiple times. Try using https://community.bistudio.com/wiki/BIS_fnc_codePerformance Compare these two: [" _array250 = player nearRoads 250; _array200 = player nearRoads 200; _arrayFinal = _array250 - _array200; "] call BIS_fnc_codePerformance; [" _array250 = player nearRoads 250; _arrayFinal = []; { if(_x distance player > 200) then {_arrayFinal = _arrayFinal + [_x]} } forEach _array250; "] call BIS_fnc_codePerformance; EDIT: Surprise :confused: First code: Second code:
  11. I don't really have time for depackanging whole BIS game just to find how all the road classes are named. Can someone point me or show me some easy way on how to get them? I am making little racing court, but without navigation it's lacking main aspect of entertainment. I would like to experiment with displaying 3D icon symbol of road in the 50m front cone of player so he can see what is gonna f* him up behind the horizont. All I need is some easy way or guidance on how to get the classes of roads. I will figure the rest. Thanks for any help.
×