Jump to content

Recommended Posts

Its BBQ time kids!

Download Demo Mission

 

Features 3 styles of BBQ compositions:

  • Spit roast large animal (goat, sheep, boars, etc.)
  • Grill fish or small food items directly over fire.
  • Cannibal roticery (as seen in my Property of Mabunga mission)

 

Credit:  I want to thank @F2kSel for the roll function that rotates the roticery.

 

init.sqf:

Spoiler

call compile PreprocessFileLineNumbers "Scripts\JBOY_BBQ.sqf";

// ******************************************************************************
// BBQ a goat on a spit above fire.  First parameter is name of a burning campfire object.
// ******************************************************************************
_n=[bbqFire1] spawn {params["_fire"]; sleep 2; _n=[_fire,"Goat_random_F",true] spawn JBOY_BBQ;};
// ******************************************************************************
// BBQ some fish on an imaginary grill or pan close to fire.  First parameter is name of a burning campfire object.
// ******************************************************************************
[grillFire1,["Mullet_F", "Ornate_random_F", "Salema_F", "Mackerel_F"]] spawn JBOY_makeCookingFood;
// ******************************************************************************
// BBQ a man ("long pork"!) on a roticery.  Note:  Due to position of animal center,
// they don't look good on roticery.  Maybe someone else can make that work...
// ******************************************************************************
null=[longpork] spawn JBOY_Roticery ;

 

 

JBOY_BBQ scripts

Spoiler

//[bbq1,"Goat_random_F"] spawn JBOY_BBQ; 
// From init.sqf, spawn with delay: _n=[_x] spawn {params["_fire"]; sleep 2; _n=[_fire,"Goat_random_F",true] spawn JBOY_BBQ;};
JBOY_BBQ =
{
	params["_fire","_animalType",["_addSkulls",false]];
	_critter = createAgent [_animalType, getPosATL player, [], 5, "NONE"];
	_critter setdamage 1;
	sleep 2; // wait long enough for death animation complete.  They look better dead on bbq.
	_critter enableSimulation false;
	_poleStart = createVehicle ["Pole_F", _fire modelToWorld [1.1,0,-.5], [], 0, "CAN_COLLIDE"];
	_poleStart enableSimulation false;
	_poleEnd   = createVehicle ["Pole_F", _fire modelToWorld [-1.1, 0, -.5], [], 0, "CAN_COLLIDE"];
	_poleEnd enableSimulation false;
	_skewer = createVehicle ["Pole_F", getpos _fire vectorAdd [0,-.05,.5], [], 0, "CAN_COLLIDE"];
	_skewer setdir getdir _poleStart;
	_skewer enablesimulationGlobal false; 
	_skewer setdir (([_poleStart,_poleEnd] call BIS_fnc_dirTo) + 90); 
	[_skewer,0,90] call BIS_fnc_setPitchBank; 

	_dirTo = ([_poleStart,_poleEnd] call BIS_fnc_dirTo);
	// color the poles
	{_x SetObjectTextureGlobal [0,"#(rgb,8,8,3)color(0,1,0,0.01)"]; } foreach [_skewer,_poleStart,_poleEnd];
	{_x SetObjectTextureGlobal [1,"#(rgb,8,8,3)color(0,1,0,0.01)"]; } foreach [_skewer,_poleStart,_poleEnd];
	if (_addSkulls) then
	{
		_skullStart = createVehicle ["Land_HumanSkull_F", [0,0,1], [], 0, "CAN_COLLIDE"];
		_skullEnd   = createVehicle ["Land_HumanSkull_F", [0,0,2], [], 0, "CAN_COLLIDE"];
		_skullStart enableSimulation false;
		_skullEnd enableSimulation false;
		// null=[_skullStart,[-.04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;  
		// null=[_skullStart,[ .04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;
		// null=[_skullEnd,[-.04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;  
		// null=[_skullEnd,[ .04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;
		// _skullStart attachTo [_poleStart,[0,0,1]];
		// _skullEnd attachTo [_poleEnd,[0,0,1]];
		_skullStart setpos (_poleStart modelToWorld [0,0,1]);
		_skullEnd setpos (_poleEnd modelToWorld [0,0,1]);
		_skullStart setdir ([_fire,_poleStart] call BIS_fnc_dirTo);
		_skullEnd setdir ([_fire,_poleEnd] call BIS_fnc_dirTo);
	};
	_critter setdir (getdir _fire + 90);
	_critter setpos (_fire modelToWorld [-.3,-.01, (getpos _skewer select 2) + .5]);
	[_critter,0,60] call BIS_fnc_setPitchBank;
};
// ************************************************************************
// [cookFire1,["Item_Fod_Fish_B", "Item_Fod_Turtle_B","Item_Fod_Corn_B","Item_Fod_Chicken_B","Catshark_F","Mullet_F"]] spawn JBOY_makeCookingFood;
// "Item_Fod_Fish_B", "Item_Fod_Turtle_B","Item_Fod_Corn_B"
// ************************************************************************
JBOY_makeCookingFood = 
{
	params["_fire","_foodTypes"];
	//sleep 1;
	_food1 = createSimpleObject [selectRandom _foodTypes,[0,0,0]]; 
	//_food1 attachTo [_fire,[0.05,0,.25]];
	_food1 attachTo [_fire,[0.1,0,.25]];
	_food1 setdir (getdir _fire +170);
	_food2 = createSimpleObject [selectRandom _foodTypes,[0,0,0]]; 
	//_food2 attachTo [_fire,[-0.06,-.16,.25]];
	_food2 attachTo [_fire,[-0.01,0,.25]];
	_food3 = createSimpleObject [selectRandom _foodTypes,[0,0,0]]; 
	//_food3 attachTo [_fire,[0.1,0.14,.25]];
	_food3 attachTo [_fire,[-0.1,0,.25]];
	[_food1,0,90] call BIS_fnc_setPitchBank;
	[_food2,0,90] call BIS_fnc_setPitchBank;
	[_food3,0,90] call BIS_fnc_setPitchBank;
	food3 = _food3;
	//_fire setdir (random 360);
};
// ***********************************************************
// Puts a man on a roticery, for your cannibal bbq pleasure.
// Tried it with animals, but its too difficult to center them for rotating, so it looks bad on animals.
// ***********************************************************
JBOY_Roticery =
{
	// null=[lunchObj] execvm "Scripts\roticery.sqf" ;
	if (! isServer) exitwith {}; 
	params["_lunch"];

	_lunch setUnitPos "DOWN";
	// Give time for unit to go prone.
	sleep 2;
	//_lunch setdamage 1;

	_skewerHeight = .85;
	_skewerZOffset = -.4;

	// Height .85 Offset .4 good for man
	if (( typeOf _lunch) find "Animal" >=0) then 
	{  // its a man
		_skewerHeight = .85;
		_skewerZOffset = -.1;
	};
	// {  // its a goat
		// _skewerHeight = .85;
		// _skewerZOffset = -.4;
	// };

	_lunch enablesimulationGlobal false; 
	_lunch setpos [getpos _lunch select 0, getpos _lunch select 1, _skewerHeight]; 

	// Create a skewer and orient it to skewer the horizontal lunch object
	_skewer = createVehicle ["Pole_F", [0,0,1.5], [], 0, "CAN_COLLIDE"];
	_lunch enableCollisionWith _skewer;
	//_lunch setdir (getdir _skewer) +180;

	_skewer enablesimulationGlobal false; 
	_skewer setpos [getpos _lunch select 0, (getpos _lunch select 1), (getpos _lunch select 2)+_skewerZOffset];
	_skewer setVectorDirAndUp [[0,1,0],[1,0,0]];
	_lunch setVectorDir [1,0,0];

	// Create a fire and two poles to hold up the skewer.
	_fire = createVehicle ["Campfire_burning_F", [getpos _lunch select 0, getpos _lunch select 1, 0], [], 0, "CAN_COLLIDE"];
	_fire setdir getdir _lunch;

	if (( typeOf _lunch) find "Animal" >=0) then 
	{  // center of dead animal is at its butt instead of center, so shift him over
		_lunch setpos (_lunch modelToWorld [0,-.5,.2]);
		null = [_lunch,0,60] call BIS_fnc_setPitchBank;
		
		// center of boar:    ball attachTo [snack,[-.2,.3,.1]];
	};
	_poleStart = createVehicle ["Pole_F", _fire modelToWorld [0,1.1,0], [], 0, "CAN_COLLIDE"];
	_poleEnd   = createVehicle ["Pole_F", _fire modelToWorld [0,-1.1,0], [], 0, "CAN_COLLIDE"];
	_skullStart = createVehicle ["Land_HumanSkull_F", [0,0,1], [], 0, "CAN_COLLIDE"];
	_skullEnd   = createVehicle ["Land_HumanSkull_F", [0,0,2], [], 0, "CAN_COLLIDE"];
	// null=[_skullStart,[-.04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;  
	// null=[_skullStart,[ .04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;
	// null=[_skullEnd,[-.04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;  
	// null=[_skullEnd,[ .04, -.07, 0.028]] execvm "Scripts\createEye.sqf" ;

	_skullStart attachTo [_poleStart,[0,0,1]];
	_skullEnd attachTo [_poleEnd,[0,0,1]];
	_skullEnd setdir (getdir _skullStart + 180);

	_generator = createVehicle ["Land_Portable_generator_F", _fire modelToWorld [0,-1.5,0], [], 0, "CAN_COLLIDE"];
	{_x enablesimulationGlobal false; } foreach [_poleStart,_poleEnd];
	{_x SetObjectTextureGlobal [0,"#(rgb,8,8,3)color(0,1,0,0.01)"]; } foreach [_skewer,_poleStart,_poleEnd];
	{_x SetObjectTextureGlobal [1,"#(rgb,8,8,3)color(0,1,0,0.01)"]; } foreach [_skewer,_poleStart,_poleEnd];
	[_lunch,360000,0.05] call f2ksel_roll;
//	[[[_lunch,360000,0.05],"Scripts\roll.sqf"],"BIS_fnc_execVM",true,true] call BIS_fnc_MP;
	//null=[_lunch,360*10,0.1] execvm "Scripts\roll.sqf" ;
};
f2ksel_roll =
{
	//null=[air1,360,0.01] execvm "Scripts\roll.sqf" ;
	// by f2ksel (Thank you f2ksel for this great rotation script!
	// nul=[planename,degrees,transitionspeed] execvm "Scripts\roll.sqf" ;
	// null=[air1,360,0.01] execvm "roll.sqf" ;
	// degrees 360 would = 1 roll, 720 = two rolls, pick a large number for multiple rolls.
	// transition = the speed of the roll, the smaller the number the faster the roll 
	diag_log ["roll.sqf",_this];
	_obj = _this select 0;

	_pitchbank = _obj call BIS_fnc_getPitchBank;
	_pitch     = _pitchbank select 0;
	_bank      = _pitchbank select 1;
	_deg       = _this select 1;
	_transpeed = _this select 2;

	_down = 0; // 0.5 amount used to force the plane down.

	//diag_log [_this,_pitch,_bank];

	// input new bank angle
	_p = 0;
	for [{_p = _bank},{_p < _bank + _deg},{_p = _p + 1}] do {
	 sleep _transpeed;
	   //diag_log [_obj,_pitch,_p];x
	   [_obj,_pitch, _p] call BIS_fnc_setPitchBank;
	//   _obj setpos (_obj worldToModel _centerPos);
	   if (simulationEnabled _obj) exitWith {};
		  //if (getpos _obj select 2 < 20) exitWith {};// height at which roll should stop
	  //_pitch  = _pitch  -0.05;// This will force it down a little quicker  
	 };
};

 

 

  • Like 7
  • Thanks 2
  • Haha 4

Share this post


Link to post
Share on other sites

Finger lickin' good. 

  • Haha 3

Share this post


Link to post
Share on other sites

Pushing again arma 3 to new paths !

Keep a human stake for me as well ! :rofl:

 

Nice work johnnyboy !

  • Haha 3

Share this post


Link to post
Share on other sites

I read one book about war, modern warfare. There was a scene of the execution of the pilot of aircraft by civilian, whom he bombed before. He was tied to an iron bed and slowly roasted over a fire. In your video (1:08), replace the stick on a metal mesh bed and you get that episode from the book.

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

×