Posted by: SGJackson Sep 7 2010, 20:08
Hay guise!
I barely learned how to make addons for ArmA1, now, is it different in OA? (I bet it is)
I'm really good at 3Ds Max 2011, and I'd like to know some things:
1- I make a model, I import it to O2? Or is there other program used for OA?
2- How to wrap textures in a way that they're all connected in a single file and when I apply it in O2 it automaticly adjusts to the model?
3- What would be an example of a config.cpp that places the addon in the 'Empty' section?
Thanks!
Posted by: D@V£ Sep 7 2010, 21:21
Exactly the same way as done with ArmA.1. The only differences are with the way ammo crates are defined (though I think you can use the ArmA.1 method too), and the faction system.
Defining an object into a faction is as simple as creating a new faction class:
CODE
class CfgFactionClasses
{
class Myfaction
{
displayName = "My Faction";
priority = 67;
side = TWest;
};
};
Then using this line in your vehicle class:
CODE
faction="Myfaction";
http://www.armatechsquad.com/ArmA2Class/ contains the a list of ArmA.2 and OA classes you can inherit from, along with pictures and such. (No BAF classes yet unfortunately)
Posted by: SGJackson Sep 7 2010, 22:23
Okay, now, explain:
CODE
faction="Myfaction";
CODE
class CfgFactionClasses
{
class Myfaction
{
displayName = "My Faction";
priority = 67;
side = TWest;
};
};
It would be nice if you could explain the config.cpp and each line in it, and the faction system. If you already explained it and I didn't get it, then please make it easier
XD
Thanks!
Posted by: D@V£ Sep 8 2010, 03:10
QUOTE(SGJackson @ Sep 7 2010, 22:23)
Okay, now, explain:
CODE
faction="Myfaction";
CODE
class CfgFactionClasses
{
class Myfaction
{
displayName = "My Faction";
priority = 67;
side = TWest;
};
};
It would be nice if you could explain the config.cpp and each line in it, and the faction system. If you already explained it and I didn't get it, then please make it easier
XD
Thanks!
Unfortunately, a full description is too big to fit in the confines of this forums posting ability!
My personal advice, and this is how I learned to make configs, so I know it's a method that works, is to look at other people's work, most addon makers won't mind you have a poke around their configs, if you're just looking to see how they've created their addons, as long as the stuff you release is your own, then it's "kosher".
Some examples though:
This is essentially a "stripped down" version of my SLA pack. (Though I've also expanded on some bits)
CODE
//Basic Definitions
#define true 1
#define false 0
#define VSoft 0
#define VArmor 1
#define VAir 2
#define private 0
#define protected 1
#define public 2
#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 ReadAndWrite 0
#define ReadAndCreate 1
#define ReadOnly 2
#define ReadOnlyVerified 3
#define DefaultManWeapons Throw,Put
//This is the basic definations of ArmA, just have everything above this line at the start of your config and it'll save a lot of time!
//cfgpatches is always at the start of your config file, it's the "base" of your config, and tells the engine what to expect from the pbo
class CfgPatches
{
class HSO_EXAMPLE //It's best to keep this the same as the name of your pbo, for simplicity
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] = {"CAweapons"};
};
};
//Factions are pretty self explainatory, if you're creating a unit for any of the default factions, or just a weapons pack, you don't need to include this.
class CfgFactionClasses
{
class HSO_SLA_Faction //The classname of the faction
{
displayName = "SLA"; //The ingame name of the faction, can also be a string
priority = 15; //The priority of the faction, where it appears in the editor
side = TEast; //The side the faction is on. We can use the easily understood "TEast", rather than the engine defination of the east (OPFOR) side, which is "0", due to the basic definations at the top of the file
};
};
CfgVehicleClasses gives us classes for vehicles:
class CfgVehicleClasses
{
class HSO_Softskin_Class
{
displayName = "Soft-skinned vehicles"; //The display name of the vehicle class, can also be a string
};
};
//It's good practice to include this before your cfgweapons section, so the firemodes will inherit correctly
class Mode_SemiAuto
{
displayName = $STR_DN_MODE_SEMIAUTO;
};
class Mode_Burst: Mode_SemiAuto
{
displayName = $STR_DN_MODE_BURST;
};
class Mode_FullAuto: Mode_SemiAuto
{
displayName = $STR_DN_MODE_FULLAUTO;
};
//cfgweapons contains all the information about weapons, whether they're hand-held or mounted on a turret.
class cfgWeapons
{
class AK_74;
class HSO_AIM74: AK_74
{
model="\HSO_ARMA2_Weaps\AIMS74"; //The directory of the model for the weapon
displayname="AIM-74"; //The display name ingame
picture="\HSO_ArmA2_Weaps\ico\AIM74.paa"; //The picture, as shown in the inventory screen
class Single: Mode_SemiAuto //The semiautomatic firemode class
{
begin1[] = {"ca\sounds\weapons\rifles\AK74_single2",1.77828,1,1000}; //The firing sound
soundBegin[] = {"begin1",1}; //As above, this is a coding relic, to when weapons made different sounds for semi or auto fire back in OFP
reloadTime = 0.1; //How fast the weapon fires
recoil = "recoil_single_primary_4outof10"; //The recoil, as defined in cfgrecoils, you'll usually just want to use one of the predefined values for this
recoilProne = "recoil_single_primary_prone_4outof10"; //As above, but for prone-firing
dispersion = 0.00125; //The dispersion
minRange = 2;minRangeProbab = 0.3; //For AI, the minimum engagement range with this weapon
midRange = 300;midRangeProbab = 0.7; //For AI, the medium engagement range with this weapon
maxRange = 600;maxRangeProbab = 0.04; //For AI, the maximum engagement range with this weapon
};
class Burst: Mode_Burst
{
begin1[] = {"ca\sounds\weapons\rifles\AK74_single2",1.77828,1,1000};
soundBegin[] = {"begin1",1};
soundBurst = 0;
reloadTime = 0.1;
ffCount = 3;
recoil = "recoil_auto_primary_3outof10";
recoilProne = "recoil_auto_primary_prone_3outof10";
dispersion = 0.00125;
minRange = 50;minRangeProbab = 0.3;
midRange = 200;midRangeProbab = 0.7;
maxRange = 500;maxRangeProbab = 0.05;
};
class FullAuto: Mode_FullAuto
{
begin1[] = {"ca\sounds\weapons\rifles\AK74_single2",1.77828,1,1000};
soundBegin[] = {"begin1",1};
reloadTime = 0.1;
ffCount = 30;
recoil = "recoil_auto_primary_4outof10";
recoilProne = "recoil_auto_primary_prone_4outof10";
dispersion = 0.00125;
minRange = 0;minRangeProbab = 0.1;
midRange = 150;midRangeProbab = 0.7;
maxRange = 300;maxRangeProbab = 0.05;
};
};
};
//Class cfgvehicles contains all the stuff you'll find in the editor (unless it's hidden, of course!)
class CfgVehicles
{
//External class references
class Man;
class CAManBase: Man
{
class TalkTopics;
class HitPoints
{
class HitHead;
class HitBody;
};
};
class SoldierEB: CAManBase
{
class TalkTopics: TalkTopics{};
};
class UAZ;
class HSO_SLA_Soldier: SoldierEB
{
faction="HSO_SLA_Faction"; //This is the faction our soldier or vehicle belongs to, as defined in CfgFactionClasses
side = TEast; //The side, again
identityTypes[] = {"Head_CDF","RU_Glasses"}; //The sorts of identity this soldier should have, in this case, CDF style faces and voices and russian style glasses
faceType = "Man"; //The head model used. Keep it like this unless you want soldier to wear a balaclava or similar
genericNames = "RussianMen"; //The sort of names the soldier should have
vehicleClass = "Men"; //The vehicle class for the soldier
portrait = "\HSO_SLAINF\portraits\soldier_ca"; //The command panel portrait for the soldier
model="\HSO_SLAInf\INFSoldier"; //The soldier's model
picture = "\Ca\characters\data\Ico\i_null_CA.paa"; //Not too sure what this one does
icon = "\Ca\characters2\data\icon\i_soldier_CA.paa"; // The icon in the editor
accuracy = 2; //The basic accuracy of the soldier, best keep it at this sort of value
camouflage = 1.4; //How well camouflaged the unit is
sensitivity = "0.5 *2"; //How sensitive the unit is
minFireTime = 10; //Not too sure what this one does, think it determines how "triggerhappy" the soldier is
scope = 2; //Determines if the soldier appears in the editor or not, any values less than 2 and the vehicles won't appear in the editor
cost = 40000; //Used to work out the score at the end of scenario if this unit is KIA
weapons[] = {"HSO_AIMS74","Throw","Put","ItemMap","ItemCompass","ItemWatch","ItemRadio"}; //The weapons this unit starts with, by default
magazines[] = {"30Rnd_545x39_AK","30Rnd_545x39_AK","30Rnd_545x39_AK","30Rnd_545x39_AK","30Rnd_545x39_AK","30Rnd_545x39_AK","HandGrenade_East","HandGrenade_East"}; // The magazines this unit starts with, by default
respawnWeapons[] = {"HSO_AIMS74","Throw","Put","ItemMap","ItemCompass","ItemWatch","ItemRadio"}; //The weapons this unit respawns with (in MP) by default
respawnMagazines[] = {"30Rnd_545x39_AK","30Rnd_545x39_AK","30Rnd_545x39_AK","30Rnd_545x39_AK","HandGrenade_East"}; //Ditto, but for magazines
class Wounds
{
tex[] = {};
mat[] = {"ca\characters2\Rus\DATA\soldier_flora_vsr_vest.RVmat","ca\characters2\Rus\DATA\soldier_flora_vsr_vest_w1.RVmat","ca\characters2\Rus\DATA\soldier_flora_vsr_vest_w2.RVmat",
"ca\characters2\Rus\DATA\soldier_co_flora_vsr_vest.RVmat","ca\characters2\Rus\DATA\soldier_co_flora_vsr_vest_w1.RVmat","ca\characters2\Rus\DATA\soldier_co_flora_vsr_vest_w2.RVmat",
"ca\characters2\Rus\DATA\soldier_mg_flora_vsr_vest.RVmat","ca\characters2\Rus\DATA\soldier_mg_flora_vsr_vest_w1.RVmat","ca\characters2\Rus\DATA\soldier_mg_flora_vsr_vest_w2.RVmat",
"ca\characters2\Rus\DATA\soldier_at_flora_VSR_vest.RVmat","ca\characters2\Rus\DATA\soldier_at_flora_VSR_vest_w1.RVmat","ca\characters2\Rus\DATA\soldier_at_flora_VSR_vest_w2.RVmat",
"ca\characters2\Rus\DATA\soldier_pilot_flora_vsr.RVmat","ca\characters2\Rus\DATA\soldier_pilot_flora_vsr_w1.RVmat","ca\characters2\Rus\DATA\soldier_pilot_flora_vsr_w2.RVmat",
"ca\characters2\Rus\DATA\soldier_crew_flora_vsr.RVmat","ca\characters2\Rus\DATA\soldier_crew_flora_vsr_w1.RVmat","ca\characters2\Rus\DATA\soldier_crew_flora_vsr_w2.RVmat",
"ca\characters2\Rus\DATA\Commander.rvmat","ca\characters2\Rus\DATA\W1_Commander.rvmat","ca\characters2\Rus\DATA\W2_Commander.rvmat"};
};
//The wound texture bit, there are 3 levels of wounding for each material or texture, healthy, light wounding, or heavy wounding, this is defined here.
class TalkTopics: TalkTopics
{
core_cz = "Core_Full";
};
languages[] = {"CZ"}; //Which languages this unit understands
};
class HSO_Scouter: Uaz
{
model="\HSO_SLAInf\Scouter.p3d"; //The model for the vehicle
crew= HSO_SLA_Soldier; //The crew for the vehicle
vehicleClass="HSO_Softskin_Class"; //The class of the vehicle
displayName="Scout Car"; //The display name for this vehicle
maxSpeed=75; //The maximum speed of this vehicle, in km/h
cargoAction[] = {Hatchback_Cargo01}; //The animation soldiers in cargo should play
transportSoldier = 3; //How many soldiers can ride in the vehicle
driverAction = Hatchback_Driver; //The animation the driver should play
cargoIsCoDriver[] = {true, false}; //Determines whether this driver or gunner should lead if there isn't a commander in the vehicle.
class Library {libTextDesc = "A basic scout car";}; //The description of this unit in the armoury
};
};
I know I've forgotten something, so apologies for this in advance
Posted by: SGJackson Sep 9 2010, 15:17
HOLY ********************************************!!
Hmh... Well, I actually don't know what to say :S...
I didn't fully understood what's the config for(Weapons, Vehicles, Soldiers)... It may be a part of all those (?)
Still, my questions still are:
1- I make a model, I import it to O2? Or is there other program used for OA?
2- How to wrap textures in a way that they're all connected in a single file and when I apply it in O2 (or other program) it automaticly adjusts to the model?
In case you might've missunderstood, I DON'T know how to wrap textures
Really good job Dave... Still this sh*t's kinda messy for me, I rather prefer stick to my questions
Posted by: D@V£ Sep 9 2010, 20:14
The config tells the game how objects work.
Anyways... your questions...
1. O2 is still used for making models in the p3d format. You'll also want texview 2, to convert your textures into .paa format.
2. UV mapping should be done in the program you're using to make the models, before you import them into O2, at which point you only need to set up the path to the texture. You can also edit UV maps in oxygen, but it's pretty messy, so I'd advise against it unless you just want to make modifications to an existing UV map. If you're not sure what this means, then I'd advise you use separate textures for now.
Bear in mind, before attempting to use a UV map, that you can not have textures tiling, without a significant performance drop.
Posted by: SGJackson Sep 12 2010, 17:21
Alright, look, let's make it easier: Just give me a tut(s) that explain how to create addons and, while the guy's good, i'll understand. Thanks!
Posted by: D@V£ Sep 13 2010, 17:57
QUOTE(SGJackson @ Sep 12 2010, 17:21)
Alright, look, let's make it easier: Just give me a tut(s) that explain how to create addons and, while the guy's good, i'll understand. Thanks!
I'd love to, unfortunately, to the best of my knowledge no such tutorial exists, so I'd need to write one myself.
Might do some time... it'd take a lot of time though... time being something I seem to be able to less of with each day...