Jump to content
Sign in to follow this  
-Coulum-

Ai suppression script help

Recommended Posts

Awesome! But Now I won't be able to fall asleep. See you later.

Me neither!

This stuff is great you two -thanks for sharing this and LOS stuff with us. I'd like to give better feedback but Im too enamored with playing CQB scenarios right now :)

Share this post


Link to post
Share on other sites
Me neither!

This stuff is great you two -thanks for sharing this and LOS stuff with us. I'd like to give better feedback but Im too enamored with playing CQB scenarios right now :)

Excellent, a happy customer!

Share this post


Link to post
Share on other sites

F%$&

Setvariable doesn't work on bullets.

On the other hand, I have worked out a simple way to stop units being suppressed by their own side:

// UNITS WILL DROP IF SHOT AT 
// Original code idea by -Coulum-
// TPW 20120618 

private ["_supnextime","_unit","_bc","_shots","_side"]; 

//Start hint
sleep 1;
hintsilent "AI suppress active";

//Main function
tpw_sup =  
{ 
   {
_unit = _x; 
_SupNextTime = _unit getVariable ["SupNextTime", -1]; 
if (_SupNextTime == -1) then 
	{
	_unit setVariable ["SupNextTime", diag_tickTime];
	_unit setvariable ["SIDE", (side _unit)];
	_unit addeventhandler ["Fired",{tpw_fired = (_this select 0) getvariable "SIDE"}];
	};
if (diag_tickTime >= _SupNextTime) then {_unit setVariable ["Shots", 0]}; 
_side = _unit getVariable "SIDE";
_bc = count ((getposatl _unit) nearobjects ["Bulletbase",10]);
if ((_bc > 0) and (tpw_fired != _side))then 
	{
	//hint format ["%1",tpw_fired];
	_unit setVariable ["SupNextTime", diag_tickTime + 3 + random 5];
	_shots = _unit getVariable "Shots";
	_unit setVariable ["Shots", _shots + _bc];
	};
_shots = _unit getVariable "Shots";
if (_shots == 0) then {_unit setunitpos "auto"};
if (_shots > 0) then {_unit setunitpos "middle"};
if (_shots > 5) then {_unit setunitpos "down"};
} forEach allunits;
}; 

[tpw_sup,0] call cba_fnc_addPerFrameHandler;

This code definitely works, a unit won't be suppressed by its own bullets, or those from anyone else on its side. I'm not sure how realistic that is though. To be honest, if I heard a bullet whiz past my ear, I'd hit the bloody deck quick smart and wouldn't ask whose gun it came from. I'm very pissed off about setvariable not working on bullets, that would have solved everything!

So here's a different approach, in which units are not suppressed by bullets fired by another unit less than 20m away, regardless of side:

// UNITS WILL DROP IF SHOT AT 
// Original code idea by -Coulum-
// TPW 20120618 

private ["_supnextime","_unit","_bc","_shots","_dist"]; 

//Start hint
sleep 1;
hintsilent "AI suppress active";

//Main function
tpw_sup =  
{ 
   {
_unit = _x; 
_SupNextTime = _unit getVariable ["SupNextTime", -1]; 
if (_SupNextTime == -1) then 
	{
	_unit setVariable ["SupNextTime", diag_tickTime];
	_unit addeventhandler ["Fired",{tpw_fired = getposatl (_this select 0)}];
	};
if (diag_tickTime >= _SupNextTime) then {_unit setVariable ["Shots", 0]}; 
_bc = count ((getposatl _unit) nearobjects ["Bulletbase",10]);
if (_bc > 0) then 
	{
	_dist = tpw_fired distance _unit;
	if (_dist > 20) then 
		{
		_unit setVariable ["SupNextTime", diag_tickTime + 3 + random 5];
		_shots = _unit getVariable "Shots";
		_unit setVariable ["Shots", _shots + _bc];
		}
	};
_shots = _unit getVariable "Shots";
if (_shots == 0) then {_unit setunitpos "auto"};
if (_shots > 0) then {_unit setunitpos "middle"};
if (_shots > 5) then {_unit setunitpos "down"};
} forEach allunits;
}; 

[tpw_sup,0] call cba_fnc_addPerFrameHandler;

Edited by tpw

Share this post


Link to post
Share on other sites

Maybe I confused matters earlier, or maybe I'm confused now, but some of the most recent posts on the issue of suppressed/not suppressed seem to muddle the firer with the 'target'. I was not suggesting that a target unit should cease to be suppressed if <25m from any enemy unit, which would be rather unrealistic.

Consider a reasonable scenario:

Player has a squad split into 2 teams A & B. B is positioned, say, 150 m from an enemy group, E, and is suppressing it. Team A flanks & moves in. Even when part or all of team A is less than 25 m from E, E should still be suppressed because while they will ignore bullets from team A (for those A units <25m away), the MG units, etc., in team B are still firing from much further away - so team B's bullets continue to suppress E.

Suppression should only be inactive for bullets fired from <25m away, bullets from firers >25m away should still suppress. I think it would look a bit weird if a suppressed enemy suddenly popped up from behind cover just because there was an enemy unit <25m away - the whole point of suppression is to keep them pinned down. That makes successful flank attacks possible.

In the reverse scenario - player (or another group leader) is static and enemy are attacking, the 25m exclusion boundary from defending firing units would allow the attacker to ignore suppression only from close units. Those units firing at the enemy from further away would still suppress. That seems realistic to me. No sane human approaching an enemy would stand up or even crouch simply because he was <25m away from one or more defenders whilst lots of bullets are whistling past just above him. He would continue to crawl & fire from a prone position as necessary. The effect will vary with the terrain in 'natural' ways - fer example, in an urban environment there will be a lot of cover, especially buildings, that might prevent any suppressive fire from >25 m away.

I think my suggestion of using the squad leader's position for distance measurements would be inappropriate for a player group - many players would likely choose to lead the flanking attack - but AI leaders generally order squad members into the attack (usually as single units, unhappily, but that's another problem).

Share this post


Link to post
Share on other sites

I hear you Orcinus. Have a look at my revised script in my edited post above, I think that takes care of your worries.

Share this post


Link to post
Share on other sites

That looks great, despite work I'll try to squeeze in some testing tonight in between wading through spreadsheets & report writing.

Cheers, and thanks!

Share this post


Link to post
Share on other sites
F%$&

Setvariable doesn't work on bullets.

Ah that's a shame. Oh well.

On the other hand, I have worked out a simple way to stop units being suppressed by their own side: Spoiler:

show spoiler

This code definitely works, a unit won't be suppressed by its own bullets, or those from anyone else on its side. I'm not sure how realistic that is though. To be honest, if I heard a bullet whiz past my ear, I'd hit the bloody deck quick smart and wouldn't ask whose gun it came from. I'm very pissed off about setvariable not working on bullets, that would have solved everything!

That looks really good. the "side" idea actually might be more realistic than you think. If your side is throwing more fire down range you will think you are "winning the fight" and thus might not get suppressed as easily. Of course this looses validity when there are multiple fire fights going on.

So here's a different approach, in which units are not suppressed by bullets fired by another unit less than 20m away, regardless of side: Spoiler:

That ones pretty much the same as what I had in post 45 right, except suppression looses effect at 20 metres not 25? or am I missing something?

Great job tpw. I'm going to try it out later today.

Share this post


Link to post
Share on other sites
That ones pretty much the same as what I had in post 45 right, except suppression looses effect at 20 metres not 25? or am I missing something?

Great job tpw. I'm going to try it out later today.

You know what? You're right! I reinvented the bloody wheel... Actually there are few slight differences, my version doesn't bother with the distance calculations to the shooter unless there are bullets around the shooter, which might slightly lessen the load.

I've been doing some more experimenting and can use the fired event handler to get the magazine of the shooter. Which can then be used to exclude pistol and SMG rounds from suppressing. I'd hoped that I could do it by simply looking at the model used for teh bullet but it's always either tracer-red.p3d, tracer-green.p3d or shell.p3d. So a pistol might use shell.p3d, but so does an AK. Just got to find all the 9mm ammo classnames and I can try it out.

Share this post


Link to post
Share on other sites
You know what? You're right! I reinvented the bloody wheel... Actually there are few slight differences, my version doesn't bother with the distance calculations to the shooter unless there are bullets around the shooter, which might slightly lessen the load.

Okay, just wanted to make sure I wasn't missing something. I think I like the one that gets the side of the shooter better anyways.

I've been doing some more experimenting and can use the fired event handler to get the magazine of the shooter. Which can then be used to exclude pistol and SMG rounds from suppressing. I'd hoped that I could do it by simply looking at the model used for teh bullet but it's always either tracer-red.p3d, tracer-green.p3d or shell.p3d. So a pistol might use shell.p3d, but so does an AK. Just got to find all the 9mm ammo classnames and I can try it out.

that sounds good. Another idea I had is measuring the speed of each bullet, and if it is not fast wnough (ie. pistol or smg speed) not counting it. you'd use something like this.

 _Bulletcount = 0;
		_Nearbybullets = ((position _unit) nearObjects ["BulletBase", 10]);
		{if (speed _x > 1500 or speed _x < 100) then {_bulletcount = _bulletcount + 1;}} foreach _Nearbybullets;
		sleep 0.01;
		if (_Bulletcount >= 1) then {run the suppression effects

The less than 100 part is to make it so bullet impacts are still register. 1500 is about the speed of a pistol shot. This could cause problems for assault rifle though, at very long ranges. I am not sure how a bullets speed decreases over time. Just an idea though. Anyways, I've gotta go, I'll be back in a couple of hours by which time you probably will be gone... a damn these time zones.

Share this post


Link to post
Share on other sites

I prefer the distance version, so perhaps when this goes "official" we'll release the two!

Anyway, here's a version which ignores pistol and SMG rounds based on magazine name. I'm pretty sure there's less calculation overhead than determining projectile speed for every bullet around every unit every frame, but as you know by now, I'm fairly useless so my opinions should be discounted.

// ALL UNITS ON MAP WILL DROP IF BULLETS FROM SHOOTERS MORE THAN 20m AWAY PASS WITHIN 10m
// BULLETS FROM SMG AND PISTOLS ARE IGNORED
// Original code idea by -Coulum-
// TPW 20120618 

//Start hint
0 = [] spawn {sleep 3;hintsilent "AI suppress active"};

private ["_supnextime","_unit","_bc","_shots","_dist"]; 

//Pistol and SMG  ammo to ignore
tpw_mags =["30rnd_9x19_MP5",
"30rnd_9x19_MP5SD",
"15Rnd_9x19_M9",
"15Rnd_9x19_M9SD",
"7Rnd_45ACP_1911",
"8Rnd_9x18_Makarov",
"8Rnd_9x18_MakarovSD",
"64Rnd_9x19_Bizon",
"64Rnd_9x19_SD_Bizon",
"13Rnd_9mm_SLP",
"17Rnd_9x19_glock17",
"6Rnd_45ACP",
"30Rnd_9x19_UZI",
"30Rnd_9x19_UZI_SD"];

//Main function
tpw_sup =  
{ 
   {
_unit = _x; 
_SupNextTime = _unit getVariable ["SupNextTime", -1]; 
if (_SupNextTime == -1) then 
	{
	_unit setVariable ["SupNextTime", diag_tickTime];
	_unit addeventhandler ["Fired",{tpw_fired = _this select 0;tpw_mag = _this select 5}];
	};
if (diag_tickTime >= _SupNextTime) then {_unit setVariable ["Shots", 0]}; 
_bc = count ((getposatl _unit) nearobjects ["Bulletbase",10]);
if (_bc > 0) then 
	{
	_dist = tpw_fired distance _unit;
	if (_dist > 25) then 
		{
		if !(tpw_mag in tpw_mags) then {
			_unit setVariable ["SupNextTime", diag_tickTime + 3 + random 5];
			_shots = _unit getVariable "Shots";
			_unit setVariable ["Shots", _shots + _bc];
			}
		}
	};
_shots = _unit getVariable "Shots";
if (_shots == 0) then {_unit setunitpos "auto"};
if (_shots > 0) then {_unit setunitpos "middle"};
if (_shots > 5) then {_unit setunitpos "down"};
} forEach allunits;
}; 

//Call function using per frame eventhandler so computer doesn't explode
[tpw_sup,0] call cba_fnc_addPerFrameHandler;

Edited by tpw

Share this post


Link to post
Share on other sites

Yes indeed that looks much easier than measuring the speed of each bullet. Good one.

I prefer the distance version, so perhaps when this goes "official" we'll release the two!

Ya to each his own I guess. I like the idea of the distance version but the problem is, when two units fire simultaneously one of them will suffer from self suppression and in a firefight simultaneous shots are actually pretty common. The side method encounters the same problem, but at least if two friendly units fire simultaneously, neither of them will suppress themselves.

First post updated with the most recent scripts using both "distance" and "side".

Share this post


Link to post
Share on other sites

Thanks, guys :)

Will test asap with up to 300 units or so.

Share this post


Link to post
Share on other sites
Thanks, guys

Will test asap with up to 300 units or so.

Oh Boy that certainly will be a test! I just used it on aliabad in the latest mission I have been making and I saw almost no difference in terms of fps. maybe 2 or 3 fps at times. But that only had around 50 units on the map at anyone time. I am interested to know how 300 will go over.

Share this post


Link to post
Share on other sites

Heh, that particular test won't be tonight. It's a HAC+DAC mission on Chernarus, rather demanding & gives a variable FPS depending on what's happening. Never the same twice so I would have to run repeatedly, logging ave & min FPS to the RPT then averaging them, both with & without a suppression script. Probably save time & get better results with a quick'n'dirty port to Takistan, no forests etc. so inherently less demanding than Chernarus. That's a weekend project, though.

Re buller velocity: do you have Kronsky's splendid "Moveable Target Range"? - you can adjust the distance to the target, select a wide variety of weapons, & when you fir the mission reports the distance to the impact point and the projectile velocity at time of impact.`

So an M16A4 ACOG fired from prone at a target 400 m away hits at a velocity of 695 m/s, a SCAR-H (MK17) Sniper hits at about 750m/s (vanilla OA). An M9 at 40m impacts at a velocity f ~400 m/s, & ~230 m/s at 250m (though I've never been entirely sure that the pistol measurements aren't bugged).

Share this post


Link to post
Share on other sites

Hey guys,

Been following this one closely. Would this suppress script work for all AI made AFTER the start of the mission (for instance spawned on the fly )? Would be sweet if it could, or if not, could it be placed in EACH AIs init ?

Share this post


Link to post
Share on other sites

Kremator, the script will work for any units, either placed or spawned. It only needs to be called once.

---------- Post added at 07:15 ---------- Previous post was at 07:08 ----------

Oh Boy that certainly will be a test! I just used it on aliabad in the latest mission I have been making and I saw almost no difference in terms of fps. maybe 2 or 3 fps at times. But that only had around 50 units on the map at anyone time. I am interested to know how 300 will go over.

I've got some ideas to wrap the whole thing in an if which checks whether there is actually a bullet object present. Only then does it do the rest of the bullet checking etc. That should really keep the CPU load down, might make 300 unit engagements possible.

Oh, and you might want to reword the first post slightly. AIsuppress1.sqf prevents a unit from being suppressed by any friendly fire. AIsuppress2.sqf prevents a unit from being suppressed by any fire from less than 20m away. You should mention that units are not suppressed by pistol or SMG rounds too. Not that I'm telling my grandma how to suck eggs...

EDIT: OK I got the bullet existence check happening, so the computationally expensive bit (the checking for bullets around each unit), only happens if there is a bullet object (eg tracer_red.p3d) on the map. Bring on the 300 unit engagements!

Distance script:

// ALL UNITS ON MAP WILL DROP IF ANY BULLETS PASS WITHIN 10m
// BULLETS FIRED FROM LESS THAN 20m ARE IGNORED 
// BULLETS FROM SMG AND PISTOLS ARE IGNORED
// Original code idea by -Coulum-
// TPW 20120619 

//Start hint
0 = [] spawn {sleep 3;hintsilent "AI suppress active"; sleep 3; hintsilent ""};

private ["_supnextime","_unit","_bc","_shots","_dist"]; 

//Pistol and SMG  ammo to ignore
tpw_mags =["30rnd_9x19_MP5",
"30rnd_9x19_MP5SD",
"15Rnd_9x19_M9",
"15Rnd_9x19_M9SD",
"7Rnd_45ACP_1911",
"8Rnd_9x18_Makarov",
"8Rnd_9x18_MakarovSD",
"64Rnd_9x19_Bizon",
"64Rnd_9x19_SD_Bizon",
"13Rnd_9mm_SLP",
"17Rnd_9x19_glock17",
"6Rnd_45ACP",
"30Rnd_9x19_UZI",
"30Rnd_9x19_UZI_SD"];

//Main function
tpw_sup =  
{ 
   {
_unit = _x; 
_SupNextTime = _unit getVariable ["SupNextTime", -1]; 
if (_SupNextTime == -1) then 
	{
	_unit setVariable ["SupNextTime", diag_tickTime];
	_unit addeventhandler ["Fired",{tpw_fired = _this select 0;tpw_mag = _this select 5; tpw_bullet = _this select 6}];
	};
if (diag_tickTime >= _SupNextTime) then {_unit setVariable ["Shots", 0]}; 
_bc = 0;
if !(isnull tpw_bullet) then 
	{
	_bc = count ((getposatl _unit) nearobjects ["Bulletbase",10])
	};
if (_bc > 0) then 
	{
	_dist = tpw_fired distance _unit;
	if (_dist > 25) then 
		{
		if !(tpw_mag in tpw_mags) then {
			_unit setVariable ["SupNextTime", diag_tickTime + 3 + random 5];
			_shots = _unit getVariable "Shots";
			_unit setVariable ["Shots", _shots + _bc];
			}
		}
	};
_shots = _unit getVariable "Shots";
if (_shots == 0) then {_unit setunitpos "auto"};
if (_shots > 0) then {_unit setunitpos "middle"};
if (_shots > 5) then {_unit setunitpos "down"};

} forEach allunits;
}; 

//Call function using per frame eventhandler so computer doesn't explode
[tpw_sup,0] call cba_fnc_addPerFrameHandler;

Side script:

// ALL UNITS ON MAP WILL DROP IF BULLETS FROM ENEMIES AWAY PASS WITHIN 10m
// BULLETS FROM OWN SIDE ARE IGNORED
// BULLETS FROM SMG AND PISTOLS ARE IGNORED
// Original code idea by -Coulum-
// TPW 20120619 

//Start hint
0 = [] spawn {sleep 3;hintsilent "AI suppress active"; sleep 3; hintsilent ""};

private ["_supnextime","_unit","_bc","_shots","_side"]; 

//Pistol and SMG  ammo to ignore
tpw_mags =["30rnd_9x19_MP5",
"30rnd_9x19_MP5SD",
"15Rnd_9x19_M9",
"15Rnd_9x19_M9SD",
"7Rnd_45ACP_1911",
"8Rnd_9x18_Makarov",
"8Rnd_9x18_MakarovSD",
"64Rnd_9x19_Bizon",
"64Rnd_9x19_SD_Bizon",
"13Rnd_9mm_SLP",
"17Rnd_9x19_glock17",
"6Rnd_45ACP",
"30Rnd_9x19_UZI",
"30Rnd_9x19_UZI_SD"];

//Main function
tpw_sup =  
{ 
   {
_unit = _x; 
_SupNextTime = _unit getVariable ["SupNextTime", -1]; 
if (_SupNextTime == -1) then 
	{
	_unit setVariable ["SupNextTime", diag_tickTime];
	_unit setvariable ["SIDE", (side _unit)];  
       _unit addeventhandler ["Fired",{tpw_fired = (_this select 0) getvariable "SIDE";tpw_mag = _this select 5;tpw_bullet = _this select 6}]; };
if (diag_tickTime >= _SupNextTime) then {_unit setVariable ["Shots", 0]}; 
_bc = 0;
if !(isnull tpw_bullet) then 
	{
	_bc = count ((getposatl _unit) nearobjects ["Bulletbase",10])
	};
if (_bc > 0) then 
	{
	_side = _unit getvariable "SIDE";
	if (_side != tpw_fired) then 
		{
		if !(tpw_mag in tpw_mags) then {
			_unit setVariable ["SupNextTime", diag_tickTime + 3 + random 5];
			_shots = _unit getVariable "Shots";
			_unit setVariable ["Shots", _shots + _bc];
			}
		}
	};
_shots = _unit getVariable "Shots";
if (_shots == 0) then {_unit setunitpos "auto"};
if (_shots > 0) then {_unit setunitpos "middle"};
if (_shots > 5) then {_unit setunitpos "down"};

} forEach allunits;
}; 

//Call function using per frame eventhandler so computer doesn't explode
[tpw_sup,0] call cba_fnc_addPerFrameHandler;

Edited by tpw

Share this post


Link to post
Share on other sites
Oh, and you might want to reword the first post slightly. AIsuppress1.sqf prevents a unit from being suppressed by any friendly fire. AIsuppress2.sqf prevents a unit from being suppressed by any fire from less than 20m away. You should mention that units are not suppressed by pistol or SMG rounds too. Not that I'm telling my grandma how to suck eggs...
Yes thanks for pointing those out. Your much better at describing this stuff than I am.
Would this suppress script work for all AI made AFTER the start of the mission (for instance spawned on the fly )? Would be sweet if it could, or if not, could it be placed in EACH AIs init ?
Yep it works for all units no matter how or when they get on the map, and as tpw said it only needs to be called once. It works for spawned units because every frame, it literally runs a check for every single unit on the map. So every frame it re-evaluates how many units to check for suppression.. or at least that's how I understand it. The more I think of it, the more I am amazed my computer doesn't explode.
I've got some ideas to wrap the whole thing in an if which checks whether there is actually a bullet object present. Only then does it do the rest of the bullet checking etc. That should really keep the CPU load down, might make 300 unit engagements possible.
That sounds like an interesting idea. I have absolutely zero knowledge on how to optimize code, but my first thought is "wouldn't the cpu usage needed to check if any bullets are present make up for any cpu usage that was saved?". But Like I said I don't really know anything about optimization. I guess it would all depend on how you check for whether bullets are present.

Share this post


Link to post
Share on other sites

That sounds like an interesting idea. I have absolutely zero knowledge on how to optimize code, but my first thought is "wouldn't the cpu usage needed to check if any bullets are present make up for any cpu usage that was saved?". But Like I said I don't really know anything about optimization. I guess it would all depend on how you check for whether bullets are present.

I think nearestobjects is a bit expensive, certainly compared to a single !(isnull object) check each pass through the script. Hey, the whole thing might be like chicken soup when you have the flu: doesn't help, but doesn't hurt!

Check my edit above for the scripts with bullet existence checking -Coulum-.

Share this post


Link to post
Share on other sites
I think nearestobjects is a bit expensive, certainly compared to a single !(isnull object) check each pass through the script. Hey, the whole thing might be like chicken soup when you have the flu: doesn't help, but doesn't hurt!

Okay that makes alot of sense actually. Like I said, I know nothing about optimization. Thanks tpw. I'll update it in the original post.

Share this post


Link to post
Share on other sites

No worries. While you're updating, you'd better mention that it requires CBA.

Share this post


Link to post
Share on other sites
No worries. While you're updating, you'd better mention that it requires CBA.

Doa! Of course can't forget that! Thanks tpw.

Share this post


Link to post
Share on other sites

Hi, I ran the latest tpw Side version with approx 300 combatants a few times and it seems to cut the FPS by 2/3 for large battles.

Average FPS 300 combatants with Suppression: 8-10

Average Average FPS 300 combatants without Suppression: 28-32

Average FPS 200 combatants with Suppression: 17-22

Average FPS 200 combatants without Suppression:48-55

Rig:

I2500k @ 4.5

16 gig ram with 12 gb RamDisk

Nvidia 680 gtx 2mb

Win 7

Mods: CBA

Edited by froggyluv
Bad numbers!

Share this post


Link to post
Share on other sites

Holy crap, thanks Froggyluv. Were all these combatants in combat simultaneously or was it only a couple units in contact at a time? I'm guessing the performance drop is exponential, because with smaller numbers (50) I see a drop of maybe 5%.

Share this post


Link to post
Share on other sites

All in combat in condensed area using Utes. I think your right and the 200 didnt 'feel' laggy despite the drop tho the 300 obviously did.

Share this post


Link to post
Share on other sites

Any vehicles or just Infantry?

I don't have time to try anything now (off to bed) but Some possible things to change in order to increase performance are:

Make it so units in vehicles aren't checked for suppression.

Make it so units in static weapons aren't checked for suppression.

Make the detail of suppression for units far away from the player (1000m) less - Ie. instead of checking every bullet to see if suppression is applied, check every other bullet, but make it so that units will go crouched by default, and go prone from 2 or 3 shots in 5 seconds rather than 5 shots. Just spitballing. I'll look into it deeper tomorrow hopefully.

the 200 didnt 'feel' laggy
So was it pretty constant fps then? would you say it was "playable"?

And holy crap, 70 fps with 200 units is pretty damn good. I am lucky to get 30 with over 60... I need to upgrade!

Edited by -Coulum-

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  

×