====== Port OFP Addon To ArmA ====== [[https://www.pmctactical.org/forum/viewforum.php?f=42|ArmA 1 Forum]], [[:arma|ArmA 1 Home]], [[arma:config|ArmA 1 Config]], [[arma:tools|ArmA 1 Tools]], [[arma:file_formats|ArmA 1 File Formats]], [[arma:missions|ArmA 1 Missions]], [[arma:modeling|ArmA 1 3D Modeling]], [[arma:terrain|ArmA 1 Terrain]], [[arma:texturing|ArmA 1 Texturing]], [[arma:scripting|ArmA 1 Scripting]] **ArmA 1** aka Armed Assault (ArmA) Welcome to wonderful world of porting OFP addon to ArmA :) Don't be discouraged by many people saying that you should not port OFP addons but instead of making brand new content. Hey, if you want to port your favorite and nostalgic addon from OFP, go ahead, if the elites want to create new content, let them. Everyone is happy. //Ported OFP addon with properly merged textures and updated stuff is addon as any brand new content created from ground up...// ====== Overview ====== To port your OFP addon into ArmA, the [[ofp:file_formats:p3d|p3d]] model must be in [[ofp:file_formats:mlod|OFP MLOD]] format for ArmA to read it (by OFP we mean that it wouldn't be much of porting, if it would be already in ArmA MLOD format, now would it heh). All textures must be present, so you need to be careful to collect all those Data\ and O\ textures from CWC and Resistance addon dirs. Configs are the one part that needs "complete" overhaul. If you just want to get your model ingame, you can use the OFP texturing, but if you want to really optimize it for ArmA then you need to [[arma:texturing:merging_textures|merge the textures]] to one or perhaps two big texture files and to create normal and specular maps for the model. Also you could roughly say that porting all p3d models is the same, the backbone of the operation is same, of course configs and individual model selections and such differ, but so far I would summarize my basic porting operation to these important steps: 1) Get the model to MLOD format.\\ 2) In O2PE start by renaming the Res LODs to 1,2,3,4 etc as many as there are.\\ 3) Change proxy names as they most likely are not compatible with ArmA. You can use for example "driver", "gunner" and "commander". That's the basic backbone which helps to bring your model closer to ArmA compatibility. These three steps are just the beginning of the porting, but in most cases with those edits to the p3d model you should get it ingame with properly made/ported config file (of course with pretty much all features disabled like turrets and animations etc). ====== Aircraft ====== This is aircraft port details like Cessna and jet aircraft's. ====== Building ====== This is building port details like basic houses, gates, piers, bunkers and so on. 1) Use [[ofp:tools:odol_explorer|ODOL Explorer]] to convert the model into [[ofp:file_formats:mlod|MLOD]] and open it up in [[arma:tools:oxygen2|O2]]. 2) Use //Structure -> Check Textures// feature to see what are your missing textures (make sure the ported objects textures are NOT in o2 path). This dialog will show the path (pbo) name and texture name, its already nicely selected so you can just use copy-paste to bring it to text file if you so choose. Organize the textures so they are in proper directory (pbo) path and file name for you to use when the porting is complete and ArmA pbo created. 3) Rename the resolution LODs to 1,2,3 and 4 etc. 4) Use the //Tools -> Mass Texture & Material Renaming// tool to change the paths. This will change the paths to all LODs, so you don't have to worry about individual LODs anymore as in OFP times. 5) Check that there is no bad texturing, ie textures in geometry/memory etc LODs. 6) Add geometry **class = building** and **map = building** named properties entry's. You can also use **house**, but it then requires config.cpp for the model (I think). 7) Add **LODNoShadow = 1** into all resolution LODs (later you use ShadowVolumes). 8) Do //Points -> Merge near...// and use value 0.0001, for all LODs (just in case, should be no problem with ODOL Explorer converted models). 9) Do //Recalculate Normals// (F5) for all LODs. 10) Check that all LODs have same Surface (SHIFT-E) setting, this includes geometry's etc. Thats the basic o2 operation for the models. Then there is of course the config, if there is one for the building in question, but at this point you should be able to place these ported p3ds into WRP file already. One last tip, go through all your new objects how many are you going to port, systematically. Do not forget any of them, saves you so much time when trying them ingame the first time. ====== Car ====== This is car port details like skoda, jeep or truck. ====== Config ====== Probably the most difficult task is to port the config, while many of the config entries are the same, there is differences enough to cause confusion and many errors if you just try to drop in OFP config into ArmA addon. **WIP stuff** a) there is much new stuff b) much of the old stuff has not changed c) cfgMagazines is a new class - before weapons and magazines were part of cfgWeapons at the same time d) so some values got assigned to a different class e) ArmA inheritance is different and more advanced: class INHERITEDCLASS; class NewClass: INHERITEDCLASS { //new values }; f) nested class with turrets is a pain in the ass g) inheritance needs to be done at the correct level\\ (maybe people just add the inheritance classes before the actual cfgVehicles etc) you may only do this for classes with are at the highest level (outside other classes) like RscText or class Mode_FullAuto; h) use coding standards i) use proper indentation j) path definition has changed k) topic PBOPREFIX l) editing trick to work with folders rather than pbos ====== Helicopter ====== This is helicopter port details like uh60, Huey or hind. Here is quick dirty overview. Completely New cfgBones and cfgModels section which must be placed in model.cfg file! **cfgBones**: class VTE_HueyBones: Helicopter { isDiscrete = 1; skeletonInherit = ""; skeletonBones[] = { "vrtule staticka", "", "vrtule blur", "", "vrtule", "" }; }; **cfgModels**: class VTE_uh101: Helicopter { skeletonName = "VTE_HueyBones"; sectionsInherit = ""; sections[] = { "clan", "clan_sign", "vte_noseart", "velka vrtule staticka", "velka vrtule blur", "velka vrtule", "mala vrtule staticka", "mala vrtule blur", "mala vrtule", "zasleh" }; class Animations { class HRotor { type = "rotation"; source = "rotorH"; selection = "velka vrtule"; axis = "velka osa"; angle0 = 0; angle1 = -2 * 3.1415; }; class VRotor { type = "rotation"; source = "rotorV"; selection = "mala vrtule"; axis = "mala osa"; angle0 = 0; angle1 = 2 * 3.1415; }; }; }; Added in the cfgVehicles: mainRotorSpeed = -1; rotorBig = vrtule_velka; rotorBigBlend = vrtule_velka_bl_; rotorSmall = vrtule_mala; rotorSmallBlend = vrtule_mala_bl; Need to change the way vehicles are defined. 1) Rename all LODs to 1, 2, 3, 4 etc.\\ 2) Edit the config to reflect the new cfgBones and cfgModels entries.\\ 3) Add correct [[arma:modeling:proxy|proxys]] from ArmA to all LODs, don't forget fire-geometry. In all LODs choose zasleh selection, in Face Properties (E) put User Value to 0 and untick Enable Shadow completely. Then in Properties (SHIFT-E) set Lighting (Obsolete) setting to Normal. Its funny that it says obsolete, but if you leave it to for example Shining, then your muzzle flash is blackened out heh. ====== Mission ====== Porting a mission is semi easy with just the classnames being changed. Triggers (sensors), Radios and Gamelogic's all seem to be the same classnaming in OFP and ArmA, so there is no problems. It is merely copying the mission dir into the users dir, then initially porting over init.sqs to init.sqf as that is usually very short script. Then loading the mission first time in ArmA and the errors start to pour in. Mostly its missing OFP classnames which have to be removed or changed, mostly its just changing like missing CoC Unified Artillery pieces to "Barrels" classname, then when you finally got the mission loaded, just delete these Barrels or change them to the ArmA artillery pieces. Other classnames are always up to the mission, you just need to work your way through them either by just deleting them or changing them to ArmA counterparts. For starters the biggest thing is to get the mission loading in the mission editor. When the mission is loaded and you can preview it, you will most likely start to get errors from those SQS scripts or the other OFP style mission making. It really comes down to how complex the mission is, if its very simple one you have not much work to do, but complex missions are harder to downright impossible to port (at least 1:1 scale). ====== Soldier ====== Soldier porting is not possible at the moment, all what we have been reading on forums and in private messages is that too much have been changed and any MLOD models by default aren't working because they need brand new animations. Also all soldier models from OFP are just way way too low poly and low detail in other ways that we just need skip them. ====== Tank ====== This is tank port details like M113, M1A1 or T80. ====== Terrain (island) ====== To port terrains (or islands as they were called back in the OFP times) is somewhat easy. You should read our [[arma:terrain:wrptutorial|WRP tutorial]] first. Main thing is to use this pages information for vegetation and building objects, if those are in order, then the WRP porting itself should run pretty smoothly. ====== Vegetation ====== This is vegetation port details like trees, bushes, grass, rocks etc. Porting vegetation objects is quite easy. Here are the steps PMC used when porting over [[http://www.vtemod.com|VTE]] objects. 1) Open model in O2, renumber the **LOD**s to 1, 2, 3, 4, 5 etc.\\ 2) In **Geometry** change the **class** to //treeSoft//, //treeHard//, //bushSoft// or //bushHard// if your object is one of those.\\ 3) If you have forest objects, in **Geometry** add **placement** to //slope// property name.\\ x) Create **ShadowVolume** LOD (which PMC cannot do at the moment, *crying*. Check out [[arma:modeling:shadows|shadow tutorial]]). If you do not use geometry class = treeSoft (or bushsoft etc) then your vegetation will not "sway" in the wind. Also many of our roads had missing geometry value of map=road in them, so they did not display at ingame map view. ====== Weapon ====== This is weapon port details like hand guns, rifles and rocket launchers. 1) Open OFP MLOD into O2PE.\\ 2) Name Resolution LODs like 1,2,3 etc.\\ 3) Delete zasleh selection and the model of zasleh, on all res LODs and view-pilot too.\\ 4) Open existing model (BIS m16_proxy.p3d) and copy paste \ca\weapons\zasleh1_pilot_proxy to your model, align it properly to the barrel.\\ 5) If the model has "flat LODs" ie just alpha texture + flat face, delete them and remodel the this LOD.\\ 6) Add Memory LOD point "eye", approx the location where shooters eye would be.\\ 7) Make model.cfg entry for your new weapon.\\ 8) Create config.cpp entry. Done. There is a lot of work to be done on the config.cpp and model.cfg to get weapon animated, however the above is how to work it around the O2 modeling phase.