Jump to content
JCass

config.cpp assistance for first mod

Recommended Posts

The title says it all. I'm trying to wrap my head around making units for arma, but running into problems as usual. I have spent a lot of time with the mission editor and have gotten somewhat comfortable with basic scripting but I'm afraid I'm going to need some help with this one. here is a rundown of my problem:

I've put together my .p3d for my unit (a dune buggy). This vehicle has no windows, so I omitted the glass hitpoint memory LODs in my model. Using the config.ccp from the arma car sample, i attempted to edit this to reflect my buggy. In doing so I removed the references to glass hitpoints but seem to have damaged something in the process. As this is my first addon attempt, I'm sure some of the smarter people around here can find numerous other errors also (one i know about already is my gunner seating position). I'm pretty good at trial and error, but I have poured over this file and I cant find the problem. Here is the error I'm getting:
 

Quote

File P:\Vehicles\Buggy\config.cpp, line 84: Config: 'p' encountered instead of '{'


and here is my config.cpp:
 

Quote

 

#include "basicdefines_A3.hpp"
class DefaultEventhandlers;

class CfgPatches {
    class Buggy{
        units[] = {"Buggy"};
        weapons[] = {};
        requiredVersion = 0.1;
        requiredAddons[] = {A3_Soft_F};
    };
};

class WeaponFireGun;
class WeaponCloudsGun;
class WeaponFireMGun;
class WeaponCloudsMGun;

class CfgVehicles
{
    class Car;
    class Car_F: Car
    {
        class HitPoints /// we want to use hitpoints predefined for all cars
        {
            class HitLFWheel;
            class HitLF2Wheel;
            class HitRFWheel;
            class HitRF2Wheel;
            class HitBody;
        };
        class EventHandlers;
    };

    class Buggy: Car_F
    {
        model     = "\Vehicles\Buggy\Buggy.p3d";  /// simple path to model
        picture    = "\A3\Weapons_F\Data\placeholder_co.paa"; /// just some icon in command bar
        Icon    = "\A3\Weapons_F\Data\placeholder_co.paa"; /// icon in map

        displayName = "Jons Buggy Test"; /// displayed in Editor

        hiddenSelections[] = {"camo1"}; ///we want to allow changing the color of this selection

        terrainCoef     = 6.5;     /// different surface affects this car more, stick to tarmac
        turnCoef         = 2.5;     /// should match the wheel turn radius
        precision         = 10;     /// how much freedom has the AI for its internal waypoints - lower number means more precise but slower approach to way
        brakeDistance     = 3.0;     /// how many internal waypoints should the AI plan braking in advance
        acceleration     = 15;     /// how fast acceleration does the AI think the car has

        fireResistance     = 5;     /// lesser protection against fire than tanks
        armor             = 32;     /// just some protection against missiles, collisions and explosions
        cost            = 50000; /// how likely is the enemy going to target this vehicle

        transportMaxBackpacks     = 2; /// just some backpacks fit the trunk by default
        transportSoldier         = 2; /// number of cargo except driver

        /// some values from parent class to show how to set them up
        wheelDamageRadiusCoef     = 0.9;             /// for precision tweaking of damaged wheel size
        wheelDestroyRadiusCoef     = 0.4;            /// for tweaking of rims size to fit ground
        maxFordingDepth         = 0.5;            /// how high water would damage the engine of the car
        waterResistance         = 1;            /// if the depth of water is bigger than maxFordingDepth it starts to damage the engine after this time
        crewCrashProtection        = 0.25;            /// multiplier of damage to crew of the vehicle => low number means better protection
        driverLeftHandAnimName     = "drivewheel"; /// according to what bone in model of car does hand move
        driverRightHandAnimName = "drivewheel";    /// beware, non-existent bones may cause game crashes (even if the bones are hidden during play)

        class TransportItems /// some first aid kits in trunk according to safety regulations
        {
            item_xx(FirstAidKit,4);
        };

        class Turrets{}; /// doesn't have any gunner nor commander
        class HitPoints: HitPoints
        {
            class HitLFWheel: HitLFWheel    {armor=0.125; passThrough=0;}; /// it is easier to destroy wheels than hull of the vehicle
            class HitLF2Wheel: HitLF2Wheel    {armor=0.125; passThrough=0;};

            class HitRFWheel: HitRFWheel    {armor=0.125; passThrough=0;};
            class HitRF2Wheel: HitRF2Wheel     {armor=0.125; passThrough=0;};

            class HitFuel             {armor=0.50; material=-1; name="fueltank"; visual=""; passThrough=0.2;}; /// correct points for fuel tank, some of the damage is aFRLied to the whole
            class HitEngine         {armor=0.50; material=-1; name="engine"; visual=""; passThrough=0.2;};
            class HitBody: HitBody     {name = "body"; visual="camo1"; passThrough=1;}; /// all damage to the hull is aFRLied to total damage
        };

        driverAction         = driver_low01; /// what action is going the driver take inside the vehicle. Non-existent action makes the vehicle inaccessible
        cargoAction[]         = passenger_low01; /// the same of all the crew
        gunnerAction        = amv\gunner;
        hideWeaponsDriver = true;
        hideWeaponsCargo = true;
        getInAction         = GetInLow;         /// how does driver look while getting in
        getOutAction         = GetOutLow;         /// and out
        cargoGetInAction[]     = {"GetInLow"};     /// and the same for the rest, if the array has fewer members than the count of crew, the last one is used for the rest
        cargoGetOutAction[] = {"GetOutLow"};     /// that means all use the same in this case
        gunnerGetInAction    = GetInLow;
        gunnerGetOutAction    = GetOutLow;

        #include "sounds.hpp"    /// sounds are in a separate file to make this one simple
        #include "pip.hpp"        /// PiPs are in a separate file to make this one simple
        #include "physx.hpp"    /// PhysX settings are in a separate file to make this one simple

        class PlayerSteeringCoefficients /// steering sensitivity configuration
        {
             turnIncreaseConst     = 0.3; // basic sensitivity value, higher value = faster steering
             turnIncreaseLinear = 1.0; // higher value means less sensitive steering in higher speed, more sensitive in lower speeds
             turnIncreaseTime     = 1.0; // higher value means smoother steering around the center and more sensitive when the actual steering angle gets closer to the max. steering angle

             turnDecreaseConst     = 5.0; // basic caster effect value, higher value = the faster the wheels align in the direction of travel
             turnDecreaseLinear = 3.0; // higher value means faster wheel re-centering in higher speed, slower in lower speeds
             turnDecreaseTime     = 0.0; // higher value means stronger caster effect at the max. steering angle and weaker once the wheels are closer to centered position

             maxTurnHundred     = 0.7; // coefficient of the maximum turning angle @ 100km/h; limit goes linearly to the default max. turn. angle @ 0km/h
        };

        /// memory points where do tracks of the wheel appear
        // front left track, left offset
        memoryPointTrackFLL = "TrackFLL";
        // front left track, right offset
        memoryPointTrackFLR = "TrackFLR";
        // back left track, left offset
        memoryPointTrackBLL = "TrackBLL";
        // back left track, right offset
        memoryPointTrackBLR = "TrackBLR";
        // front right track, left offset
        memoryPointTrackFRL = "TrackFRL";
        // front right track, right offset
        memoryPointTrackFRR = "TrackFRR";
        // back right track, left offset
        memoryPointTrackBRL = "TrackBRL";
        // back right track, right offset
        memoryPointTrackBRR = "TrackBRR";

        class Damage /// damage changes material in specific places (visual in hitPoint)
        {
            tex[]={};
            mat[]=
            {
                "A3\data_f\glass_veh_int.rvmat",         /// material mapped in model
                "A3\data_f\Glass_veh_damage.rvmat",     /// changes to this one once damage of the part reaches 0.5
                "A3\data_f\Glass_veh_damage.rvmat",        /// changes to this one once damage of the part reaches 1

                "A3\data_f\glass_veh.rvmat",            /// another material
                "A3\data_f\Glass_veh_damage.rvmat",        /// changes into different ones
                "A3\data_f\Glass_veh_damage.rvmat"
            };
        };

        class Exhausts /// specific exhaust effects for the car
        {
            class Exhaust1 /// the car has two exhausts - each on one side
            {
                position     = "exhaust1_pos";          /// name of initial memory point
                direction     = "exhaust1_dir";    /// name of memory point for exhaust direction
                effect         = "ExhaustsEffectOffroad";    /// what particle effect is it going to use
            };

            class Exhaust2
            {
                position     = "exhaust2_pos";
                direction     = "exhaust2_dir";
                effect         = "ExhaustsEffectOffroad";
            };
        };

        class Reflectors    /// only front lights are considered to be reflectors to save CPU
        {
            class LightCarHeadL01     /// lights on each side consist of two bulbs with different flares
            {
                color[]         = {1900, 1800, 1700};        /// approximate colour of standard lights
                ambient[]        = {5, 5, 5};                /// nearly a white one
                position         = "LightCarHeadL01";        /// memory point for start of the light and flare
                direction         = "LightCarHeadL01_end";    /// memory point for the light direction
                hitpoint         = "Light_L";                /// point(s) in hitpoint lod for the light (hitPoints are created by engine)
                selection         = "Light_L";                /// selection for artificial glow around the bulb, not much used any more
                size             = 1;                        /// size of the light point seen from distance
                innerAngle         = 100;                        /// angle of full light
                outerAngle         = 179;                        /// angle of some light
                coneFadeCoef     = 10;                        /// attenuation of light between the above angles
                intensity         = 1;                        /// strength of the light
                useFlare         = true;                        /// does the light use flare?
                dayLight         = false;                    /// switching light off during day saves CPU a lot
                flareSize         = 1.0;                        /// how big is the flare

                class Attenuation
                {
                    start             = 1.0;
                    constant         = 0;
                    linear             = 0;
                    quadratic         = 0.25;
                    hardLimitStart     = 30;        /// it is good to have some limit otherwise the light would shine to infinite distance
                    hardLimitEnd     = 60;        /// this allows adding more lights into scene
                };
            };

            class LightCarHeadL02: LightCarHeadL01
            {
                position     = "LightCarHeadL02";
                direction     = "LightCarHeadL02_end";
                FlareSize     = 0.5;                        /// side bulbs aren't that strong
            };

            class LightCarHeadR01: LightCarHeadL01
            {
                position     = "LightCarHeadR01";
                direction     = "LightCarHeadR01_end";
                hitpoint     = "Light_R";
                selection     = "Light_R";
            };

            class LightCarHeadR02: LightCarHeadR01
            {
                position     = "LightCarHeadR02";
                direction     = "LightCarHeadR02_end";
                FlareSize     = 0.5;
            };
        };

        aggregateReflectors[] = {{"LightCarHeadL01", "LightCarHeadL02"}, {"LightCarHeadR01", "LightCarHeadR02"}}; /// aggregating reflectors helps the engine a lot
        /// it might be even good to aggregate all lights into one source as it is done for most of the cars
        {
            class Buggy // Source class
            {
                scope    = 2;
                scopeCurator=2;
                crew    = "C_man_1";
                side    = 3;
                faction = "BLU_F";
                displayName="Buggy";
                author=$STR_J0N; // Author of the skin
                hiddenSelectionsTextures[] = {"Vehicles\Buggy\data\Tex_0019_1.paa"};
            };
            
        };

 


Thanks in advance for any assistance. I have so many vehicles I want to build, if I can just figure out this final part of the process!

  • Like 1

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

×