Jump to content

Photo
- - - - -

Predator UAV camera and missiles


  • Please log in to reply
8 replies to this topic
Thread Starter
*Zeewolf*
*Zeewolf*

    Sergeant

  • Members
  • 184 posts

#1

Posted 30 April 2012 - 21:43

I just put together a script for a Predator UAV simulation that I was thinking of using as a killstreak in MP missions. It's a fun MW2 style orbiting camera with TV guided missile that you can steer with the arrow keys. This is purely a virtual unit using camera calculations to perform the simulation.

Supply a position to the script, the camera will switch to a UAV which will orbit the position, during this time the player can slew the camera around a bit using "move forward", "move backward", "move left" and "move right". To fire a TV guided missile press V. The camera will then switch to a seeker head view while you guide it using the same control scheme. If the player doesn't fire a missile within one minute the script exits.

_pos = _this select 0
_removeGogs = false
?((Daytime < 17) and (Daytime > 7)) : goto "start"
?!(player hasweapon "NVGoggles"): _removeGogs = true;
player removeweapon "NVGoggles"
player addweapon "NVGoggles"
player action["NVGoggles"]
#start
_theta = random 360
_r = 900
_phi = (random 30) + 45
_vel = 6
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
_rz = _r * (sin _phi)
_camera = "camera" camCreate [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera cameraEffect ["internal","back"]
_camera camSetTarget _pos
_camera camSetFOV 0.1
_camera camCommit 0
@camCommitted _camera
_campos = GetPos _camera
_timeout = _time + 60
_direction = 1
?(random 2 > 1) : _direction = -1
_tx = _pos select 0
_ty = _pos select 1
#orbit
_theta = _theta + (_direction * 0.0688)
_theta = _theta mod 360
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
_camera camSetPos [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera camSetTarget [_tx,_ty,0]
_camera camcommit 0
@camCommitted _camera
_camera camCommand "Manual on"
_campos = getpos _camera
~0.02
?(_camera != _camera) : titletext["","BLACK OUT",0.04]; goto "fire"
_camera camCommand "Manual off"
_cx = 15*((getpos _camera select 0)-(_campos select 0))
_cy = 15*((getpos _camera select 1)-(_campos select 1))
_tx = _tx + _cx
_ty = _ty + _cy
?(_timeout > _time) : goto "orbit"
?(_removeGogs) : player removeweapon "NVGoggles"
_camera camCommand "Manual on"
_camera cameraEffect ["Terminate","back"]
_camera camcommit 0
@camcommitted _camera
camDestroy _camera
exit
#fire
titletext["","BLACK IN",10];
~0.1
_pos = [_tx,_ty,0]
?(alive _camera): camDestroy _camera
_camera = "camera" camcreate _campos
_camera cameraEffect ["internal","back"]
_camera camSetTarget _pos
_camera camSetFOV 0.7
_camera camCommit 0
titletext["","BLACK IN",0.1];
@camcommitted _camera
_vx = _vel * (cos _phi) * -(sin _theta)
_vy = _vel * (cos _phi) * -(cos _theta)
_vz = _vel * (sin _phi)
#approach
_rz = _rz - _vz
_camera camsetpos [(_campos select 0) + _vx,(_campos select 1) + _vy,_rz]
_camera camSetTarget _pos
_camera camCommit 0
@camCommitted _camera
_rx = (_campos select 0)-(_pos select 0)
_ry = (_campos select 1)-(_pos select 1)
_phi = ((_campos select 2) atan2 (sqrt((_rx^2)+(_ry^2))))
_theta = _rx atan2 _ry
_campos = GetPos _camera
_camera camCommand "Manual on"
~0.02
_cx = 15*((getpos _camera select 0)-(_campos select 0))
_cy = 15*((getpos _camera select 1)-(_campos select 1))
_pos set[0,(_pos select 0) + _cx]
_pos set[1,(_pos select 1) + _cy]
_camera camCommand "Manual off"
_vx = _vel * (cos _phi) * - (sin _theta)
_vy = _vel * (cos _phi) * - (cos _theta)
_vz = _vel * (sin _phi)
?((getpos _camera select 2) > 1) : goto "approach"
?(_removeGogs) : player removeweapon "NVGoggles"
_camera camCommand "Manual on"
_camera cameraEffect ["Terminate","back"]
_camera camcommit 0
@camcommitted _camera
camDestroy _camera
_bang = "maverick" createvehicle [_pos select 0, _pos select 1,0]

I may add some on screen titletext info like heading, AGL and time to impact etc

I'd like to add a missile smoke trail which follows the camera. Anyone got a particle array that might be suitable?

Also is it possible to create a laptop opening/closing animation in the style of the game main menu that would be run before the camera switches to the UAV and when the camera switches back to the player?

I believe it may be possible to make an AC-130 script in a similar fashion (providing keys to switch weapons is a bit convoluted a dialog may be necessary).

Oh and yes, I do know that this is all completely unrealistic... "ENEMY PREDATOR MISSILE INCOMING!!!!!"

Edited by *Zeewolf*, 30 April 2012 - 21:50.


Thread Starter
*Zeewolf*
*Zeewolf*

    Sergeant

  • Members
  • 184 posts

#2

Posted 02 May 2012 - 19:16

Ok, I got a working cutrsc for an opening laptop by using this description.ext:

class RscTitles
{
	class RscLaptopOpen
	{
		idd=-1;
		type=80;
		movingEnable=1;
		objects[]={"Laptop"};
		duration=4;
		class Laptop
		{
			duration=4;
			model="notebook.p3d";
			idc=-1;
			type=83;
			autoOpen=1;
			autoZoom=1;
			animSpeed=2;
			animation="notebook.rtm";
			position[]={0,-0.15,0.3};
			direction[]={"sin 5","sin 20 * cos 5","cos 20 * cos 5"};
			up[]={0,"cos 20","-sin 20"};
			positionBack[]={0,-0.04,0.6};
			inBack=0;
			enableZoom=0;
			zoomDuration=1;
			scale=1;
		};
	};
};

But I can't get an equivalent closing animation. I'm guessing I need to change the phase, does anyone know how?

faguss
faguss

    Staff Sergeant

  • Members
  • 242 posts

#3

Posted 03 May 2012 - 20:03

I'm afraid game engine does that automatically for it's own purposes. Create a standard 3D dialog from the bin\Resource and you'll notice there's no closing animation.

The workaround would be to define a second object with separate reversed animation.

Thread Starter
*Zeewolf*
*Zeewolf*

    Sergeant

  • Members
  • 184 posts

#4

Posted 11 May 2012 - 17:43

Thanks, I managed to get it working by creating a reversed version in RtmToolbox.

Finally got round to play testing this today. Had it running as part of an oddball MP mission as an action available to the flag carrier. It worked very well, as did a basic killcam script I tested at the same time. The main feedback I got from players was that they preferred to have the initial camera feed focus on them rather than a selected map grid as it was much less disorienting in high speed game play.

Some other refinements to the script are;
A boost function that doubles the speed of the "missile" when you press V while it's already in-flight.
Orbit view now cancelled if the player dies.
Some on screen text gubbins (AGL, bearing, bingo/time to target).

_pos = getpos player
cutrsc["RscLaptopOpen","PLAIN"]
_removeGogs = false
?((Daytime < 17) and (Daytime > 7)) : goto "start"
?!(player hasweapon "NVGoggles"): _removeGogs = true;
player removeweapon "NVGoggles"
player addweapon "NVGoggles"
player action["NVGoggles"]
#start
~0.5
_theta = random 360
_vel = 6
_r = 500
_phi = (random 30) + 45
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
_rz = _r * (sin _phi)
_camera = "camera" camCreate [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera cameraEffect ["internal","back"]
_camera camSetTarget _pos
_camera camSetFOV 0.1
_camera camCommit 0
@camCommitted _camera
cutrsc["Default","PLAIN"]
_campos = GetPos _camera
_timeout = _time + 60
_direction = 1
?(random 2 > 1) : _direction = -1
_tx = _pos select 0
_ty = _pos select 1
_i = 0
#orbit
_theta = _theta + (_direction * 0.0688)
_theta = _theta mod 360
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
_camera camSetPos [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera camSetTarget [_tx,_ty,0]
_camera camcommit 0
@camCommitted _camera
_camera camCommand "Manual on"
_campos = getpos _camera
~0.02
_i = _i + 1
?(_i == 10): _i = 0; titletext[Format["\nHeading: %1                                                                                     %2\nAGL: %3                                                                                          ", (direction _camera) - (direction _camera mod 1),(_timeout - _time),_campos select 2],"PLAIN DOWN",0.05] 
?(_camera != _camera): _pos = [_tx,_ty,0]; goto "fire"
_camera camCommand "Manual off"
_cx = 15*((getpos _camera select 0)-(_campos select 0))
_cy = 15*((getpos _camera select 1)-(_campos select 1))
_tx = _tx + _cx
_ty = _ty + _cy
?((_timeout > _time) and (alive player)) : goto "orbit"
?(_removeGogs) : player removeweapon "NVGoggles"
_camera camCommand "Manual on"
_camera cameraEffect ["Terminate","back"]
_camera camcommit 0
@camcommitted _camera
camDestroy _camera
; Laptop Close animation requires reversed .rtm
;cutrsc["RscLaptopClose","PLAIN"]
~0.5
;cutrsc["Default","PLAIN"]
exit
#fire
titletext["","BLACK IN",10];
; broadcast launch to other clients (triggers "enemy predator missile incoming" announcement)
fxcode = 1
publicvariable "fxcode"
~0.1
#boost
?(alive _camera): camDestroy _camera
_camera = "camera" camcreate _campos
_camera cameraEffect ["internal","back"]
_camera camSetTarget _pos
_camera camSetFOV 0.7
_camera camCommit 0
titletext["","BLACK IN",0.1];
@camcommitted _camera
_vx = _vel * (cos _phi) * -(sin _theta)
_vy = _vel * (cos _phi) * -(cos _theta)
_vz = _vel * (sin _phi)
_i = 0
#approach
_rz = _rz - _vz
_camera camsetpos [(_campos select 0) + _vx,(_campos select 1) + _vy,_rz]
_camera camSetTarget _pos
_camera camCommit 0
@camCommitted _camera
_rx = (_campos select 0)-(_pos select 0)
_ry = (_campos select 1)-(_pos select 1)
_distance = (sqrt((_rx^2)+(_ry^2)))
_phi = (_campos select 2) atan2 _distance
_theta = _rx atan2 _ry
_campos = GetPos _camera
_camera camCommand "Manual on"
~0.02
?(_camera != _camera):titletext["","BLACK IN",10]; _vel = 12; goto "boost"
_i = _i + 1
?(_i == 10): _i = 0; titletext[Format["\nHeading: %1                                                                                     %2\nAGL: %3                                                                                          ", (direction _camera) - (direction _camera mod 1),(_distance*0.02)/_vel,_campos select 2],"PLAIN DOWN",0.05] 
_cx = 25*((getpos _camera select 0)-(_campos select 0))
_cy = 25*((getpos _camera select 1)-(_campos select 1))
_pos set[0,(_pos select 0) + _cx]
_pos set[1,(_pos select 1) + _cy]
_camera camCommand "Manual off"
_vx = _vel * (cos _phi) * - (sin _theta)
_vy = _vel * (cos _phi) * - (cos _theta)
_vz = _vel * (sin _phi)
?((getpos _camera select 2) > 1) : goto "approach"
?(_removeGogs) : player removeweapon "NVGoggles"
_camera camCommand "Manual on"
_camera cameraEffect ["Terminate","back"]
_camera camcommit 0
@camcommitted _camera
camDestroy _camera
; Laptop Close animation requires reversed .rtm
;cutrsc["RscLaptopClose","PLAIN"]
_bang = "maverick" createvehicle [_pos select 0, _pos select 1,0]
~0.5
;cutrsc["Default","PLAIN"]
exit

EDIT: New killcam script (I forgot switchcamera worked in MP lol). Call it as a killed eventhandler or from a killed eventhandler e.g. player addeventhandler [{killed} , {_this exec {killcam.sqs}}]

_killer = _this select 1

_killer switchCamera "Internal"
_killer cameraEffect ["terminate","back"]

_timeout = _time + 5
#lp
~0.1
?(_timeout - _time > 0): titletext[format["KillCam %1",_timeout - _time],"PLAIN",0.05];
?(_timeout > _time): goto "lp"
player switchCamera "Internal"
player cameraEffect ["terminate","back"]
exit

I won't be releasing a demo mission for this. This stuff will be in the MWC/Create-A-Class/Killstreak system I'm working on but I'm not committed to publicly releasing that, hence why I thought I'd post these handy scripts.

Edited by *Zeewolf*, 02 June 2012 - 17:00.


nikiller
nikiller

    Gunnery Sergeant

  • Members
  • 420 posts

#5

Posted 11 May 2012 - 20:39

hi,

I'd like to add a missile smoke trail which follows the camera. Anyone got a particle array that might be suitable?


I wrote a missile smoke script if you are still interested. You may have to tweak the values but it works fine as it is and there's nearly no fps impact. You can also use the function missile_smoke.sqf for vapor trail on plane wings.

missile_smoke.sqs
Spoiler


missile_smoke.sqf
Spoiler


Nice UAV script BTW :)

cya.

Nikiller.

Edited by Nikiller, 11 May 2012 - 20:52.
correted code error

[LOL] ofp/ArmA clan since 2004.
No Respawns, No Crosshairs, No Muppets.
Want a good ofp/ArmA2 coop? Visit the [LOL] clan homepage | ofp [LOL] addons pack | ArmA2 [LOL] addons pack

WW4mod25 sound replacement mod v1.1 | Nikiller's scripts pack

Thread Starter
*Zeewolf*
*Zeewolf*

    Sergeant

  • Members
  • 184 posts

#6

Posted 12 May 2012 - 14:00

Thanks for that, the smoke really needs to be shown on all clients, which is really tricky considering that the player can move the target point. I may end up just generating the smoke after the missile has hit (so the final impact point is known) then generate a trail from the impact point to the position it was fired from (i.e. broadcast two positions as publicvariables), or just make a random smoke trail from the impact point to a valid orbit position (i.e. broadcast only one position).

Thread Starter
*Zeewolf*
*Zeewolf*

    Sergeant

  • Members
  • 184 posts

#7

Posted 20 May 2012 - 22:16

So I've put your particle array to good use (there's a bug in your .sqf listing by the way, in the particle array _randpos should be _rdpos and _rdpos should be calculated as (random 2) - 1).

Here's a script for MW3's "Reaper" strike chain reward. As usual, move forward, backward, left, right pans the camera; but now move up or V cycles the FOV/zoom level, move down fires a "missile" which can be guided to the target by moving the crosshairs around after launch. You get fourteen missiles and one minute to launch them.

_pos = getpos player
; Cutrsc for opening laptop
;cutrsc["RscLaptopOpen","PLAIN"]
; Setup ammo
_missiles = 14
_missileStatus = "| | | | | | | | | | | | | |"
; Set velocity (300m/s)
_vel = 6
; Setup zoom levels
_currentFOV = 2
_zooms = [0.7,0.4,0.1,0.05]
_panGain = [60,30,10,5]
; setup Night vision
_removeGogs = false
?((Daytime < 17) and (Daytime > 7)) : goto "start"
?!(player hasweapon "NVGoggles"): _removeGogs = true;
player removeweapon "NVGoggles"
player addweapon "NVGoggles"
player action["NVGoggles"]
#start
~0.5
; calculate random azimuth
_theta = random 360
; set radius (500m for MP purposes)
_r = 500
; set polar angle
_phi = (random 30) + 45
; calculate initial cartesian position
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
_rz = _r * (sin _phi)
; clear laptop cutrsc
cutrsc["Default","PLAIN"]
; create the camera
_camera = "camera" camCreate [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera cameraEffect ["internal","back"]
_camera camSetTarget _pos
_camera camSetFOV 0.1
_camera camCommit 0
@camCommitted _camera
_campos = getPos _camera
; set one minute timer
_timeout = _time + 60
; set random orbit direction
_direction = 1
?(random 2 > 1) : _direction = -1
; set initial camera target
_tx = _pos select 0
_ty = _pos select 1
; initialise frame counter
_i = 0
#orbit
; update azimuth
_theta = _theta + (_direction * 0.0688)
_theta = _theta mod 360
; update cartesian position
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
; update camera
_camera camSetPos [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera camSetTarget [_tx,_ty,0]
_camera camSetFOV (_zooms select _currentFOV)
_camera camcommit 0
@camCommitted _camera
; set camera to manual until next frame
_camera camCommand "Manual on"
; save current position
_campos = getpos _camera
; wait for next frame
~0.02
; increment frame counter
_i = _i + 1
; display status every ten frames
?(_i == 10): _i = 0; titletext[Format["\nHeading: %1                                     %2                            %3\nAGL: %4                                                                                          ", (direction _camera) - (direction _camera mod 1),_missileStatus, (_timeout - _time),_campos select 2],"PLAIN DOWN",0.05]
; detect user pressing V
?(_camera != _camera):camdestroy _camera;_ret = "orbit"; goto "zoom"
; turn manual mode off
_camera camCommand "Manual off"
; calculate change in camera position due to user input
_cx = (_panGain select _currentFOV)*((getpos _camera select 0)-(_campos select 0))
_cy = (_panGain select _currentFOV)*((getpos _camera select 1)-(_campos select 1))
_cz = (getpos _camera select 2)-(_campos select 2)
; update target position
_tx = _tx + _cx
_ty = _ty + _cy
; calculate change in height due to user input
?((_cz < -0.05) and (_cx == 0) and (_cy == 0)): goto "fire"
?((_cz > 0.05) and (_cx == 0) and (_cy == 0)): _ret = "orbit"; goto "zoom"
; check for timeout and player death
?((_timeout > _time) and (alive player)) : goto "orbit"
; reset nightvision
?(_removeGogs) : player removeweapon "NVGoggles"
; terminate and destroy camera
_camera cameraEffect ["Terminate","back"]
_camera camcommit 0
@camcommitted _camera
camDestroy _camera
; Laptop close animation requires custom reversed .rtm
;cutrsc["RscLaptopClose","PLAIN"]
~0.5
; clear laptop cutrsc
cutrsc["Default","PLAIN"]
exit
#fire
; update ammo status display
_i = 0
_missileStatus = ""
_missiles = _missiles - 1
?(_missiles == 0): _missileStatus = "              "; goto "calculateShot"
#updateStatus1
_missileStatus = format["%1| ",_missileStatus]
_i = _i + 1
?(_i < _missiles): goto "updateStatus1"
#updateStatus2
_missileStatus = format["%1  ",_missileStatus]
_i = _i + 1
?(_i < 14): goto "updateStatus2"
#calculateShot
; calculate azimuth and polar angle for missile
_mphi = (_campos select 2) atan2 _distance
_mtheta = _rx atan2 _ry
; calculate velocity vector for missile
_vx = _vel * (cos _mphi) * -(sin _mtheta)
_vy = _vel * (cos _mphi) * -(cos _mtheta)
_vz = _vel * (sin _mphi)
; calculate distance to target
_dx = (_campos select 0)-_tx
_dy = (_campos select 1)-_ty
; set initial missile position
_mx = _campos select 0
_my = _campos select 1
_mz = _campos select 2
; reset frame counter
_i = 0
#home
; update camera
_camera camSetPos [(_pos select 0) + _rx, (_pos select 1) + _ry, _rz]
_camera camSetTarget [_tx,_ty,0]
_camera camCommit 0
@camCommitted _camera
; update camera azimuth
_theta = _theta + (_direction * 0.0688)
_theta = _theta mod 360
; update camera position
_rx = _r * (sin _theta) * (cos _phi)
_ry = _r * (cos _theta) * (cos _phi)
; save camera position
_campos = GetPos _camera
; set manual mode to detect user input
_camera camCommand "Manual on"
; update distance to target
_dx = _mx-_tx
_dy = _my-_ty
_distance = (sqrt((_dx^2)+(_dy^2)))
; update missile azimuth and polar angle
_mphi = _mz atan2 _distance
_mtheta = _dx atan2 _dy
; update missile velocity vector
_vx = _vel * (cos _mphi) * - (sin _mtheta)
_vy = _vel * (cos _mphi) * - (cos _mtheta)
_vz = _vel * (sin _mphi)
; update missile position
_mx = _mx + _vx
_my = _my + _vy
_mz = _mz - _vz
; create Nikiller missile smoke
drop ["cl_basic","","Billboard",10,random(3)+3,[_mx,_my+(random 2)-1,_mz],[(random 3)-1.5,(random 3)-1.5,(random 3)-1.5],0,1.22,1,0.2,[1,5],[[0.95,0.95,0.95, 0.15],[0.95,0.95, 0.95,0]],[0],0.75,0.5,"","",""];
~0.02
; increment frame counter
_i = _i + 1
; update status display every ten frames
?(_i == 10): _i = 0; titletext[Format["\nHeading: %1                                     %2                             %3\nAGL: %4                                          %5                                          ", (direction _camera) - (direction _camera mod 1),_missileStatus, (_timeout - _time),_campos select 2,_mz],"PLAIN DOWN",0.05]
; detect change in camera position due to user input
_cx = (_panGain select _currentFOV)*((getpos _camera select 0)-(_campos select 0))
_cy = (_panGain select _currentFOV)*((getpos _camera select 1)-(_campos select 1))
_cz = (getpos _camera select 2)-(_campos select 2)
; update camera target
_tx = _tx + _cx
_ty = _ty + _cy
; detect change in camera height due to user input
?((_cz > 0.05) and (_cx == 0) and (_cy == 0)): _ret = "home"; goto "zoom"
?(_camera != _camera):camdestroy _camera;_ret = "home"; goto "zoom"
; switch manual mode off
_camera camCommand "Manual off"
; loop until missile hits ground
?(_mz > 1) : goto "home"
; spawn warhead
_bang = "maverick" createvehicle [_tx, _ty,0]
; if ammo remaining continue orbit
?(_missiles > 0): goto "orbit"
; reset nightvision
?(_removeGogs) : player removeweapon "NVGoggles"
; terminate and destroy camera
_camera cameraEffect ["Terminate","back"]
_camera camcommit 0
@camcommitted _camera
camDestroy _camera
; laptop close animation requires custom .rtm
;cutrsc["RscLaptopClose","PLAIN"]
~0.5
; clear laptop cutrsc
cutrsc["Default","PLAIN"]
exit
#zoom
; update FOV selection
_currentFOV = _currentFOV + 1
; clip FOV selection
?(_currentFOV == count _zooms): _currentFOV = 0
; black out camera
titletext["","BLACK IN",10];
; destroy old camera
camdestroy _camera
; create a new camera
_camera = "camera" camcreate _campos
_camera cameraEffect ["internal","back"]
_camera camSetTarget _pos
_camera camSetFOV (_zooms select _currentFOV)
_camera camCommit 0
@camcommitted _camera
~0.1
; black back in
titletext["","BLACK IN",0.1]
; return to caller
goto _ret

I'm sure you'll agree the missile smoke looks very nice, trouble is there is no solid object in front of it. I don't want to spawn a real missile or shell on the front of it and move it around or apply relative acceleration, because the whole purpose of this style of scripting is to cut down on bandwidth intensive commands like setpos and setvelocity. Any ideas on a way to put a solid looking object on the front of the smoke trail without broadcasting its position to other clients?

If I create an object with camcreate do updates applied by setpos commands applied to it get broadcast to other clients even though it's a local object?

Aldo15
Aldo15

    Sergeant

  • Members
  • 139 posts

#8

Posted 21 May 2012 - 22:49

Is there any demo-mission for that one
Posted Image

Thread Starter
*Zeewolf*
*Zeewolf*

    Sergeant

  • Members
  • 184 posts

#9

Posted 22 May 2012 - 18:03

Demo mission (multiupload)

Just a single player mission that I made in about 5 minutes, but it's got the predator, reaper and two versions of the AC-130 script in it and some people to fire them at. There are two versions of the mission, one calls the laptop closing animation which is held in the included mwc_anims.pbo. If you don't care about having the laptop animation then use the mission in the no addons folder. Call the scripts using the radio, click on the map when prompted to set the position the camera will orbit. I've also included sounds for the AC-130 weapons.

The glued AC130 is linked to the cessna that's droning around the village so if you want to control that just edit its waypoints.

I'm not doing a demo for the multiplayer killstreak versions of these right now, it'll take me too long to disentangle it from MWC's other scripts and addons and I'd rather spend the time working on the main framework and templates.

EDIT: Updated demo mission with fix for glued AC130 script (camera stuck at 100m AGL, not passed flyInHeight), fixed predator missile boost mode resetting target

Edited by *Zeewolf*, 17 June 2012 - 17:16.