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 5
  • Thanks 1
  • Haha 4

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

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×