Jump to content
Sign in to follow this  
miles teg

Fire Geometry / indestructable APC problems

Recommended Posts

I've spent a long time searching the forums and so far I can't find anyone specifically talking about this problem and I also searched the BI Wiki...so here are the problems.

In my mod (The Lost Brothers Mod), we have an Achzarit heavy APC model that worked fine in ArmA1 with no problems. However in ArmA2, for some reasons the tank is immune to all dammage no matter how low I set the armor values at.

Here is an example of the config:

#define TEast 0
#define TWest 1
#define TGuerrila 2
#define TCivilian 3
#define TSideUnknown 4
#define TEnemy 5
#define TFriendly 6
#define TLogic 7

#define true 1
#define false 0

// type scope
#define private 0
#define protected 1
#define public 2

class CfgPatches
{
class achzrit
   	{
     		units[] = {};
	requiredVersion = 1.0;
};

};
#include <CfgSkeletons.h>


class CfgFactionClasses {
class IDF {
	displayName = "Israeli Defence Force";
	priority = 5;
	side = "TWest";
};
};


class CfgVehicleClasses
{
class idf_armor_corp
{
	displayName = "IDF Armor Corp";
};
};



class CfgVehicles {

class Land;	// External class reference

class LandVehicle : Land {
	class NewTurret;	// External class reference
	class ViewOptics;	// External class reference
};

class Tank : LandVehicle 
{

	weapons[] = {};
	magazines[] = {};

	class Turrets {
	class MainTurret : NewTurret {
		class Turrets {
		class CommanderOptics : NewTurret {};
			};
		};
	};		
	class ViewOptics : ViewOptics {};
};
class m1a1 : tank{};
class achzrit : m1a1
{
	displayName = "achzrit";

	model = "\achzrit\achzrit.p3d";
	selectionLeftOffset = "pasanimL";
	selectionRightOffset = "pasanimP";
	scope=2;
	faction = "IDF";
	vehicleClass = "idf_armor_corp";
	side = 1;
	accuracy = 0.8;		
	picture = "\ca\tracked\Data\ico\M1_abrams_CA.paa";
	Icon = "\Ca\tracked\Data\map_ico\icomap_m1a1_CA.paa";
	mapSize = 7;
	armor = 500;
	maxSpeed = 50;
	hiddenSelections[] = {""};
	hiddenSelectionsTextures[] = {""};
	transportSoldier = 7;
	hasCommander = true;
	crew = "IDF_Tanker";
	canFloat = 0;
	driverInAction = "BMP2_Driver";
	soundGetIn[] = {"\ca\Tracked\Data\Sound\metal_door2", 0.01, 1};
	soundGetOut[] = {"\ca\Tracked\Data\Sound\metal_door2", 0.00316228, 1};
	soundEnviron[] = {"\ca\Tracked\Data\Sound\M1A2_track_v2", 5.01187, 1};
	soundEngine[] = {"\achzrit\Sound\mk3engine.wav",10,1};
	memoryPointTrack1L = "Stopa ll";

	memoryPointTrack1R = "Stopa lr";
	memoryPointTrack2L = "Stopa rl";
	memoryPointTrack2R = "Stopa rr";
	cargoIsCoDriver[] = {0};
	cargoAction[] ={"Stryker_Cargo01","Stryker_Cargo01","Stryker_Cargo01","Stryker_Cargo01","Stryker_Cargo01","Stryker_Cargo01","Stryker_Cargo01","BMP2_Commander"};
	driverForceOptics = 0;
 class AnimationSources
{
	class Ramp // Should be the same as your selection name.
	{
 		 source = "user"; //The controller is defined as a user animation.
  		 animPeriod = 4;  //The animation period used for this controller.
  		 initPhase=0;     //Initial phase when object is created. 0 = CLOSED
	};
	class Ramp1 // Should be the same as your selection name.
	{
 		 source = "user"; //The controller is defined as a user animation.
  		 animPeriod = 4;  //The animation period used for this controller.
  		 initPhase=0;     //Initial phase when object is created. 0 = CLOSED
	};
};

	class Turrets : Turrets {
		class MainTurret : MainTurret {
			gunnerAction = "Abrams_Gunner";
			gunnerInAction = "Abrams_Gunner";
			animationSourceHatch = "hatchGunner";
			weapons[] = {"M240_veh","SmokeLauncher"};
			body = "otocvez";
			gun = "otochlaven";
			hasGunner = 1;
			soundServo[] = {"\ca\Weapons\Data\Sound\gun_elevate", 0.00316228, 1.0};
			magazines[] = {"1200Rnd_762x51_M240", "1200Rnd_762x51_M240","SmokeLauncherMag","SmokeLauncherMag"};
			forceHideGunner = 0;
			GunnerForceOptics = 0;
			gunnerOpticsModel = "\ca\Tracked\optika_tank_gunner";
			minElev = -33;
			maxElev = 33;
			initElev = 0;

			class ViewOptics {
				initAngleX = 0;
				minAngleX = -30;
				maxAngleX = 30;
				initAngleY = 0;
				minAngleY = -100;
				maxAngleY = 100;
				initFov = 0.166;
				minFov = 0.025;
				maxFov = 0.333;
			};

			class Turrets : Turrets {
				class CommanderOptics : CommanderOptics {
					gunBeg = "gun_muzzle";
					gunEnd = "gun_chamber";
					body = "otocvelitele";
					gun = "otochlavenvelitele";
					GunnerForceOptics = 1;
					minElev = -30;
					maxElev = 30;
					initElev = 0;
					minTurn = -200;
					maxTurn = 200;
					initTurn = 0;
					outGunnerMayFire = 1;
					inGunnerMayFire = 1;
					gunnerAction = "T72_CommanderOUT";
					gunnerInAction = "T72_CommanderOUT";
					gunnerOpticsModel = "\ca\weapons\optika_empty";
				};
			};
		};
	};




	class EventHandlers
	{
		GetIn = "_this exec ""\achzrit\rampin.sqs""";
		GetOut = "_this exec ""\achzrit\rampin.sqs""";
	}; // class EventHandlers
	class UserActions
	{
		class Openramp
		{
			displayName="lower ramp";
			position="pos_action";
			radius=7.500000;
			onlyForPlayer= false;
			condition="this animationPhase ""ramp1"" < 0.5 AND (PLAYER == driver this)";
			statement="this animate [""ramp"", 1];this animate [""ramp1"", 1]";
		};
		class CloseDoors
		{
			displayName="raise ramp";
			position="pos_action";
			radius=7.500000;
			onlyForPlayer= false;
			condition="this animationPhase ""ramp1"" >= 0.5 AND (PLAYER == driver this)";
			statement="this animate [""ramp"", 0];this animate [""ramp1"", 0]";
		};
	};
};

};
};

Below is a example of the model.cfg:

class CfgSkeletons 
{ 
  class Tank; //Define base class.
  class achzritBones : Tank
  {
isDiscrete=1;
skeletonInherit = ""; //Inherit all bones from class Car.
skeletonBones[]=
{
	"levy predni","",
	"levy dalsi","",
	"levy prostredni","",
	"levy zadni","",
	"pravy predni","",
	"pravy dalsi","",
	"pravy prostredni","",
	"pravy zadni","",
	"OtocVez","",
	"OtocHlaven","OtocVez",
	"otocvelitele","",
	"otochlavenvelitele", "otocvelitele",
	"kolol1","",
	"kolol2","",
	"kolol3","",
	"kolol4","",
	"kolol5","",
	"kolol6","",
	"koll1","",
	"koll2","",
	"kolop1","",
	"kolop2","",
	"kolop3","",
	"kolop4","",
	"kolop5","",
	"kolop6","",
	"Poklop_Gunner","",
	"poklop_Driver","",
	"ramp","",
	"ramp1","",
	"kolp1","",
	"kolp2",""

};
  };
};
class CfgModels
{
  class Tank; //Declare base class.
  class achzrit: TANK
  {
sectionsInherit = "";                     
sections[] ={"pas_P","koll1","koll2","kolp1","kolp2","koloL1","koloL2","koloL3","koloL4","koloL5","koloL6","kolP1","koloP1","koloP2","koloP3","koloP4","koloP5","koloP6","pravy zadni","pasanimL","pasanimP","levy zadni","L svetlo","HatchGunner", "otocvelitele" ,"otochlavenvelitele", "HatchDriver", "P svetlo"};
skeletonName = "achzritBones"; 
class Animations 
{
	class OtocVez
	{
     			type = "rotationY";
     			source = "mainTurret";
			selection = "OtocVez";
		axis = "OsaVeze";
		memory = true; 
		sourceAddress = "loop";
		minValue = rad -360;
             	    	maxValue = rad +360;
                   	angle0 = rad -360; 
     			angle1 = "rad 360"; 
  		};
	class OtocHlaven
	{
     			type = "rotationX";
     			source = "mainGun";
			selection = "OtocHlaven";
		axis = "OsaHlavne";
		memory = true; 
		sourceAddress = "clamp";
		minValue = "rad -20.5";
             	    	maxValue = "rad 35";
                   	angle0 = "rad -20.5"; 
     			angle1 = "rad 35"; 
  		};
class otocvelitele
{
type = "rotationY";
source = "obsTurret";
selection = "otocvelitele";
axis = "osavelitele";
memory = true; 
sourceAddress = "loop";
minValue = rad -200;
maxValue = rad +230;
angle0 = rad -230; 
     angle1 = "rad 200"; 
 };


class otochlavenvelitele
{
type = "rotationX";
source = "obsGun";
selection = "otochlavenvelitele";
axis = "osahlavnevelitele";
memory = true; 
sourceAddress = "clamp";
minValue = "rad -30";
maxValue = "rad 30";
angle0 = "rad -30"; 
angle1 = "rad 30"; 
};
  		class achkoloL1
	{
     			type = "rotationX";
     			source = "wheelL";
			selection = "kolol1";
		axis = "";
		memory = true; 
		sourceAddress = "loop";
		minValue = 0;
             	    	maxValue = 1;
                   	angle0 = 0; 
     			angle1 = "rad -360"; 
  		}; 
	class achkoloL2 :achkoloL1
	{
		selection = "kolol2";
	};
	class achkoloL3 :achkoloL1
	{
		selection = "kolol3";
	};
	class achkoloL4 :achkoloL1
	{
		selection = "kolol4";
	};
	class achkoloL5 :achkoloL1
	{
		selection = "kolol5";
	};
	class achkoloL6 :achkoloL1
	{
		selection = "kolol6";
	};
	class achkoll1 :achkoloL1
	{
		selection = "koll1";
	};
	class achkoll2 :achkoloL1
	{
		selection = "koll2";
	};

  		class achkolop1
	{
     			type = "rotationX";
     			source = "wheelr";
			selection = "kolop1";
		axis = "";
		memory = true; 
		sourceAddress = "loop";
		minValue = 0;
             	    	maxValue = 1;
                   	angle0 = 0; 
     			angle1 = "rad -360"; 
  		}; 
	class achkolop2 :achkolop1
	{
		selection = "kolop2";
	};
	class achkolop3 :achkolop1
	{
		selection = "kolop3";
	};
	class achkolop4 :achkolop1
	{
		selection = "kolop4";
	};
	class achkolop5 :achkolop1
	{
		selection = "kolop5";
	};
	class achkolop6 :achkolop1
	{
		selection = "kolop6";
	};
	class achkolop7 :achkolop1
	{
		selection = "kolop7";
	};
	class achkolop8 :achkolop1
	{
		selection = "kolop8";
	};
	class achkolop9 :achkolop1
	{
		selection = "kolop9";
	};
	class achkolp1 :achkolop1
	{
		selection = "kolp1";
	};
	class achkolp2 :achkolop1
	{
		selection = "kolp2";
	};


  		class mkDrivingWheel
	{
     			type = "rotationZ";
     			source = "drivingWheel";
			selection = "volant";
		axis = "osavolantkon";
		memory = true; 
		sourceAddress = "mirror";
		minValue = -1;
             	    	maxValue = 1;
                   	angle0 = "rad -35"; 
     			angle1 = "rad 35"; 
  		}; 
class HatchGunner
{
type = "rotation";
     source = "HatchGunner";
selection="poklop_gunner";
axis="osa_poklop_gunner";
minValue = 0;
                 maxValue = 1;
                   angle0 = 0; 
     angle1= rad -90;
};

class HatchDriver
{
type = "rotation";
     source = "HatchDriver";
selection="poklop_driver";
axis="osa_poklop_driver";
minValue = 0;
                 maxValue = 1;
                   angle0 = 0; 
     		angle1= rad -90;
};
		 class RAMP
		{
		type ="rotation";
		sourceAddress="clamp";
		source ="user";
		initPhase=1;
		animPeriod =4;
		selection ="RAMP";
		axis ="osa_ramp";
		angle0 =0;
		angle1=-1.396258;
		};
		 class RAMP1
		{
		type ="rotation";
		sourceAddress="clamp";
		source ="user";
		initPhase=1;
		animPeriod =4;
		selection ="RAMP1";
		axis ="osa_ramp1";
		angle0 =0;
		angle1=0.226892;
		};
};
   };
};

I looked at the fire geometry, checked topology and everything is fine (although proxies light up which I guess is normal). I then checked Convexity and two points light up, but I'm not sure if those would cause this issue as otherwise it is an extremely simple box-like LOD. If anything if there was a problem with the convexity I would assume that I would have the 2nd related problem that I'm dealing with on a CH-53 model in which bullets go through parts of the model where they shouldn't (and kill the troops inside). When I selected component convext hull to fix the convexity issues, I then got the opposite problem which is that despite the fact that it left the rear of the chopper and door areas open, bullets now do not hit the exposed door gunners or the infantry in the back as it did before. In other words it removed all gaps/holes in the model through which bullets could go through...which is not what I wanted. Very frustrating!!!

I should add that these models were not made by me, but by SFC. ITZHAK (who is very hard to get ahold of) who made them for our mod. I only edit models/textures and so I'm not an addon "maker". As such I never did grasp many of the subtle aspects of addon design. ArmA2 (and demand for higher quality and more features) has also made the process infinitely more complex compared to the easy days of OFP addon making. Adding to the problems are how ports from ArmA1 often have a ton of problems when trying to get them to work in ArmA2.

Another question however: Are there any solid tutorials on the ins and outs of geometry/fire-geometry/hit-point geometry LOD's? I've read MondKalps addon making tutorial but it didn't answer my issues and the BI Wiki info was very basic. I'm wondering if there is some kind of relationship between the geometry, hit-point, and fire-geometry LOD's? Do the geometry and fire-geometry LOD's have to be identical? If anyone can help me on these issues I will be very appreciative and if they want I can post pictures of the LOD's in question. Thank you in advance.

Chris G.

aka-Miles Teg<GD>

Team Leader of the Lost Brothers Mod (The oldest surviving mod from the OFP days)

Edited by Miles Teg

Share this post


Link to post
Share on other sites

Hi Miles

I think pictures of your LODs would be good.

I, for one, like pictures ...

and it might help to narrow down your problem

Share this post


Link to post
Share on other sites

AFAIK there can be no concavities. If you have any concave components, you can just split the component into two (or more) separate convex components.

The firegeoLOD and the geoLOD need not be anything alike.

Hit points do damage to systems based on the hit's proximity to the corresponding hitpoint. That's all the information I have on that. So, I speculate the answer to your question is that the firegeoLOD is responsible for adjucating whether projectiles land or miss, and the hitpointsLOD finds whether or not those projectiles that do hit are close enough to do damage to the system it represents.

These LODs only have to be some approximation of what you want the collision / damage behaviour to be. They need not resemble the resLODs at all, although a certain resemblence is inevitable. Those special resLODs do not need to be structured like a real object, either.

Edited by Max Power

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  

×