NOTE: This is incomplete and will be a WIP. I'll add to this whenever I have the time. Eventually I'll make this more organized and easier to read.
Braeden posted a tutorial similar to this back in SWBFmac (http://s7.invisionfree.com/SWBF_GR_Discussion). That board is offline so I thought I might remake it. It's intended for the newer people want to mod Battlefront.
What are ODF files?
The proper name is Object Definition File (I think). Every object in the game is given these ODF files. The classes, the weapons, the buildings, etc. You can change how things work and how they interact. For example, let's say we want to make a weapon fire 2x faster than it's original value. That's possible with ODF files! we'll go into that later.
What are MSH files?
The MSH files are mesh files. Long story short they are the objects/geometry appeared ingame.
In this tutorial, I will go over three different ODF files (I may add more later on).
This may look confusing at first but if you break it down, it's very easy to understand!
The first will be the soldier ODF file. 
This file is named all_inf_soldier.odf:
[GameObjectClass]
ClassLabel       = "soldier" --  Rebels, Clones, Droids, etc are all considered as a soldier. Leave this alone.
GeometryName       = "all_inf_soldier.msh" -- This has no affect ingame because GameObjectClass is for the ZeroEditor. We are editing the sides, not the world itself.
Now let's go into the next part of the ODF file:
[Properties]
FootWaterSplashEffect    = "watersplash_sm" -- When you're walking in water, you make this visual effect.
WaterSplashEffect    = "watersplash_md" -- Similar to above. It's a splash effect.
WakeWaterSplashEffect   = "watersplash_wade" -- Similar to above. Just another water effect.
UnitType      = "Trooper" -- The type of unit. Unsure of the use of this (someone else might explain and then I'll update this). Better to leave this alone.
IconTexture       = "all_soldier_icon" -- Never seen it used ingame (you find the texture in the ALL MSH folder), possibly was used for a feature that didn't make it into the final game
MapTexture       = "troop_icon" -- This is regarding the minimap.
MapScale       = 1.4 -- How big the texture is on the minimap. 1.0 is default size
GeometryName       = "all_inf_soldier" -- This is the msh of the soldier. If you changed this to all_inf_pilot.msh for example, then the soldier would appear as a pilot instead.
AnimationName      = "all_inf_snowtrooper" -- The animations of the class. Almost all of the classes use the animation of the snowtrooper.
FirstPerson      = "all\alltroop;all_1st_trooper"  -- This is the arms from the first person view. If you change it to let's say the pilot's 1st person view, it will appear as the pilot's hands.
FirstPersonFOV   = "70" -- The field of view. The field of view is how much you can view from one angle. The higher the better but if you put it too high, things will appear stretched and that is very displeasing.
ThirdPersonFOV   = "65"  -- Same as above.
GeometryLowRes      = "all_inf_soldier_low1" -- The low resolution geometry. This is what we see when an object is very far away. If you do not have a low resolution geometry, it will disappear from afar. Snipers will hate that.
OK! Now we have the camera part of the ODF file.
CAMERASECTION       = "STAND"
EyePointOffset       = "0.0 1.8 0.0"
TrackCenter      = "0.0 1.8 0.0
TrackOffset       = "0.0 0.0 3.5"
TiltValue      = "5.0"
CAMERASECTION       = "STANDZOOM"
EyePointOffset       = "0.0 1.8 0.0"
TrackCenter      = "0.0 1.8 0.0
TrackOffset       = "0.4 0.05 2.8"
TiltValue      = "3.5"
CAMERASECTION       = "CROUCH"
EyePointOffset       = "0.0 1.3 0.0"
TrackCenter      = "0.0 1.3 0.0
TrackOffset       = "0.0 0.15 3.5"
TiltValue      = "5.0"
CAMERASECTION       = "CROUCHZOOM"
EyePointOffset       = "0.0 1.3 0.0"
TrackCenter      = "0.0 1.3 0.0
TrackOffset       = "0.4 0.2 2.8"
TiltValue      = "3.5"
CAMERASECTION       = "PRONE"
EyePointOffset       = "0.0 0.5 0.0"
TrackCenter       = "0.0 0.5 0.0"
TrackOffset       = "0.0 0.0 3.0"
TiltValue      = "5.0"
CAMERASECTION       = "PRONEZOOM"
EyePointOffset       = "0.0 0.5 0.0"
TrackCenter       = "0.0 0.5 0.0"
TrackOffset       = "0.4 0.2 2.8"
TiltValue      = "3.5"
All of these regard how the camera works. You can try experimenting with these to change the camera angles ingame.
Now let's look at the interesting part. The weapons and health of the soldier!
AimValue       = "1.0" -- Have no idea what this is, I'll find out eventually.
HealthType      = "person" -- The type of health. Leave this alone if you ask me.
MaxHealth       = 300.0 -- This is how much health the soldier has.
Acceleraton       = 70.0 -- If you've studied physics in High School, you know what this is. The higher it is, the faster it is.
MaxSpeed       = 6.5 -- The maximum speed of your soldier. The higher the faster although be aware that the animations doesn't like this to be changed. Put it too high and you will literally glide.
MaxStrafeSpeed       = 4.5 -- The speed when you are going left and right.
MaxTurnSpeed       = 4.00 -- The speed when you are walking at an angle.
WeaponName1       = "all_weap_inf_rifle" -- This says that the primary weapon is the blaster rifle. If you want to give it the sniper rifle instead, change this value to all_weap_inf_ sniperrifle.
WeaponAmmo1       = 6 -- This is how much ammo you do have. You can allow it to hold more or to hold less to give yourself a challenge.
WeaponName2       = "all_weap_inf_pistol" -- The is the secondary weapon you have. You have a pistol by default. 
WeaponAmmo2       = 0 -- The pistol is a charging weapon so it will be kept to zero.
WeaponName3       = "all_weap_inf_thermaldetonator" -- This is the grenade.
WeaponAmmo3       = 3 -- This says you have 3 grenades. You can give yourself 1 grenade, 100 grenades, whatever you want.
WeaponChannel3      = 1 -- If I'm not mistaken, this means that it is to be used as a secondary weapon.
WeaponName4       = "all_weap_inf_crackgrenade" -- This is the weaker grenade.
WeaponAmmo4       = 3 -- This is self explanatory by now.
WeaponChannel4      = 1 -- This is self explanatory by now.
AimFactorPostureSpecial = 50 -- This is regarding your aim. The lower, the better.
AimFactorPostureStand    = 100 
AimFactorPostureCrouch    = 140 
AimFactorPostureProne    = 160 
AimFactorStrafe    = 60 
AimFactorMove       = 70 
Now finally the last part of the ODF file:
AISizeType      = "SOLDIER" -- Keep this alone
--The following are the different sounds the soldier will make. All of them are self explanatory.
HurtSound               = "all_inf_com_chatter_wound"
DeathSound              = "all_inf_com_chatter_death" 
AcquiredTargetSound     = "all_inf_com_chatter_acquired"
HidingSound             = "all_inf_com_chatter_hide"
ApproachingTargetSound  = "all_inf_com_chatter_approach"
FleeSound               = "all_inf_com_chatter_flee"
PreparingForDamageSound = "all_inf_com_chatter_predamage"
HeardEnemySound         = "all_inf_com_chatter_heard" 
//ShockFadeOutTime      = "0.8"
//ShockFadeInTime       = "2.0"
ShockFadeOutGain        = ""
ShockSound              = ""
ClothingRustleSound     = "" 
LowHealthSound          = "" 
//LowHealthThreshold    = ".25" 
FoleyFXClass            = "all_inf_soldier" 
// squad command VO -- All of these are the different commands that the bots say to each other like "move out" or "follow me". If you don't have any custom sounds, you're better off leaving these alone.
SCFieldMoveOutSound      = "all_inf_com_chatter_tac_moveout"
SCFieldHoldSound      = "all_inf_com_chatter_tac_hold"
SCFieldFollowSound      = "all_inf_com_chatter_tac_follow"
SCDriverGetInSound      = "all_inf_com_chatter_tac_needgunner"
SCDriverGetOutSound      = "all_inf_com_chatter_tac_moveout"
SCPassengerMoveOutSound   = "all_inf_com_chatter_tac_spreadout"
SCPassengerStopSound   = "all_inf_com_chatter_tac_stop"
SCPassengerGetInSound   = "all_inf_com_chatter_tac_needgunner"
SCPassengerGetOutSound   = "all_inf_com_chatter_tac_moveout"
SCGunnerAllClearSound   = "all_inf_com_chatter_tac_allclear"
SCGunnerSteadySound      = "all_inf_com_chatter_tac_stop"
SCGunnerGetInSound      = "all_inf_com_chatter_tac_needgunner"
SCGunnerGetOutSound      = "all_inf_com_chatter_tac_moveout"
SCResponseYessirSound   = "all_inf_com_chatter_tac_yes"
SCResponseNosirSound   = "all_inf_com_chatter_tac_no"
// AIsquad command VO -- All of these are the different commands that the bots say to each other like "move out" or "follow me". If you don't have any custom sounds, you're better off leaving these alone.
AISCFieldMoveOutSound      = "ai_all_inf_com_chatter_tac_moveout"
AISCFieldHoldSound         = "ai_all_inf_com_chatter_tac_hold"
AISCFieldFollowSound      = "ai_all_inf_com_chatter_tac_follow"
AISCDriverGetInSound      = "ai_all_inf_com_chatter_tac_needgunner"
AISCDriverGetOutSound      = "ai_all_inf_com_chatter_tac_moveout"
AISCPassengerMoveOutSound   = "ai_all_inf_com_chatter_tac_spreadout"
AISCPassengerStopSound      = "ai_all_inf_com_chatter_tac_stop"
AISCPassengerGetInSound      = "ai_all_inf_com_chatter_tac_needgunner"
AISCPassengerGetOutSound   = "ai_all_inf_com_chatter_tac_moveout"
AISCGunnerAllClearSound      = "ai_all_inf_com_chatter_tac_allclear"
AISCGunnerSteadySound      = "ai_all_inf_com_chatter_tac_stop"
AISCGunnerGetInSound      = "ai_all_inf_com_chatter_tac_needgunner"
AISCGunnerGetOutSound      = "ai_all_inf_com_chatter_tac_moveout"
AISCResponseYessirSound      = "ai_all_inf_com_chatter_tac_yes"
AISCResponseNosirSound      = "ai_all_inf_com_chatter_tac_no"
DropItemClass          = "com_item_powerup_ammo" -- When you're dead, you drop something. This is the item that it drops.
DropItemProbability    = 0.40 -- This is the probability that you will drop it. 1.00 means you will always drop it.
NextDropItem          = "-" -- uh.... Ask Pi about this...
DropItemClass          = "com_item_powerup_health100"
DropItemProbability    = 0.30
NextDropItem          = "-"
DropItemClass          = "com_item_powerup_dual"
DropItemProbability    = 0.10
			
			
			
				Mine is still here, you just have to dig a bit deep :P
			
			
			
				The topic is there but if you look inside it, it is empty.
			
			
			
				Couple of slight technicalities that just bug me cuz I'm that way :P
The water splashes are visual effects, not audio effects
WeaponAmmo values of 0 make it recharge, not the other way around.
I believe AimValue is how accurate your aim is (not 100% sure)
Might want to note in maxspeed that you will slide if you change that value. The animation just doesn't like changes
In GameObjectClass, that is only read by ZeroEditor, so the GeometryName there has no effect ingame.
			
			
			
				That is why I wub Pi. He'll correct my mistakes so that I don't have to XD
			
			
			
				Rawr.
[mod]Stickied[/mod]
			
			
			
				lol. I just noticed the ...ask pi about this :P
I have never seen it used in any ODF file, and I truly have never tested it
I do, however, have and idea of what it might do. It could be used for creating drop chains (ex you drop a health pack and an ammo pack in the same death. I'd assume the way to use it is you set the name of the next pack to drop, reading it from the drop list and checking if there is another one to drop. The - probably means "end of drops"
			
			
			
				I put the "ask Pi" prompts everywhere LOL.
			
			
			
				lol you're going to have to give me a list of questions.
I did a bit of looking, and here's what I found
IconTexture: Never seen it used ingame (you find the texture in the ALL MSH folder), possibly was used for a feature that didn't make it into the game
MapTexture: The icon that appears on the map
MapScale: resizes the MapTexture to make some units show up bigger or smaller. That's how some troops have different size map markers
Also with weaponchannel a 0 is a primary weapon (that's how nap got 3 weapons on left click once) and 1 is a secondary weapon. I haven't experimented to see if you can change it on the number 2 weapon
			
			
			
				I'll edit those tomorrow afternoon. Thanks Pi.
			
			
			
				http://www.secretsociety.com/forum/downloads/BF1/cis_hover_aat_odf_commented.txt
...from psych0fred's site. For those of you unfamiliar, psych0fred was with Pandemic when they made the Battlefront games, and his site is a wealth of information (and assets) for both Battlefront games. Most of the good information is found in the "downloads" section - the forums have information but it is all very basic.
http://www.secretsociety.com/forum/display_forum.asp
			
			
			
				I've tried looking inside the Battlefront executeable for the ODF parameters (the LUA parameters exist in the exe) but there's seemingly nothing in there for ODF commands. Normally I would assume the manual is complete but there are things that have been tried in contradiction ot the instructions that work.
It could very well be that LUA dictates what can be entered in ODF.
			
			
			
				Ya know, the ODF parameters are the biggest mystery ever to me. In the files, they are stored as a 4-byte (32 bit) integer and there is no sign of this integer anywhere in the exe file, and there is no sign of an interpreter in the munger. I could try hexing through the LUA, but highly doubt the LUA would have been used for something as mundane as that. AFAIK, ScriptCB_DoFile does all of the work for the LUA (Anything with ScriptCB on it points to a function in the battlefront EXE). And those integers are in more than just the ODFs. I've found them in the munged localization files which cannot have a plain table of xxx becomes yyy. 
			
			
			
				Quote from: ggctuk on September 21, 2009, 02:13:12 PM
I've tried looking inside the Battlefront executeable for the ODF parameters (the LUA parameters exist in the exe) but there's seemingly nothing in there for ODF commands. Normally I would assume the manual is complete but there are things that have been tried in contradiction ot the instructions that work.
It could very well be that LUA dictates what can be entered in ODF.
The BF1 tools have a list of ODF parameters for each classlabel; what are you asking?
			
 
			
			
				Quote from: Maveritchell on September 21, 2009, 08:30:22 PM
The BF1 tools have a list of ODF parameters for each classlabel; what are you asking?
It's the curiosity of where the hashes are stored. So far, the only thing I have been able to figure out is that ODF parameters are hashed by the munger. That hash must be in a global table in the EXE that determines the function of the hash. I'm saying it's a hash because the same system is used on the localization files, and those need some sort of method to read from the LUA code.
			
 
			
			
				Quote from: Radical_Pi on September 21, 2009, 09:08:49 PM
It's the curiosity of where the hashes are stored. So far, the only thing I have been able to figure out is that ODF parameters are hashed by the munger.
You've got a specific executable for every type of file munged. One of them is your ODFMunge.exe. That's probably what turns your intelligible parameters into the flags used in the .lvl files.
			
 
			
			
				No, I checked in there. There is no reference at all to the names of the parameters
Also, you can type in "PurpleMonkeysRule" as one of the parameters and the munger says nothing.
EDIT I was able to generate a list of the output hashes for an ODF, and I believe this method may be used to create a human-readable version of the munged state of a file (yes, I mean ANY file that goes in an LVL). Theoretically I could use this to create a table of ODF outputs, but that still leaves me in the dark if I want to do anything with localization files :( The only way that would work for me (I have an idea for a project that would make the macs VERY happy) is if I could figure out the exact algorithm used to generate the hashes. I've already run a checker and none of the common hash types seem to work :(
			
			
			
				Don't worry about localization, I've already cracked it. BF Mod Tools has two copies of a localization file - one in the ModID folder, and one I believe in Data/_SOURCE_PC. At munge, it combines these two files. The _SOURCE_PC version contains pretty much EVERYTHING. So all you have to do is make your new localizations, munge them and copy the munged output.
As for ODF decompiling, that's good news. If we can figure everything out now, and get an ODF decompiler assembled, perhaps a LUA decompiler isn't far off the horizon.
			
			
			
				I'm not talking only decompiling. That's why I need to figure out this hashing method they use
I've looked into decompiling the LUAs. The tools to do it are already in the mod tools, but you basically get ASM-like code instead of LUA. It's the kind of thing that a computer would have a hard time translating, but it wouldn't be impossible
			
			
			
				I don't believe it, but I think I may have found the hashing algorithm. Under a disassembly, I found a section of code filled with a seemingly random group of code that reads in a string character by character and performs seemingly random math operations on it. I monitored that code for a few loops. It is activated numerous times, but on all of the times I saw it I got nothing related to the map run through the hasher. I can confirm that it generates a hash though, since it's a 4 byte value stored inside a 4 byte register. I can't check it right now, but there is a pretty simple way to check if it is the right one. All I have to do is read what it is hashing, put that in an ODF file, and read what the munger outputs on it :tu:
			
			
			
				nice, all of this
			
			
			
				So a 'demunger' is possible for ODF files?
			
			
			
				Might be. I can already read the munged ODFs, all I have to do is make that input-output table of the hashes and I can de-munge. Of course, it would take forever to build that table, unless I could use some sort of pre-made list of ODF options *cough documentation cough* and feed it into the hasher. Plus, if I get the algorithm, then I can go one step better: an ODF munger for mac
			
			
			
				hi, i was wondering if any one can help me with the odf animation words for the force? i would like to use this in a regular troop and have it for the pilot. i would like to put a hero in place of the republic pilot and give him the foce animation. is it just words or is it more, like more files?
			
			
			
				Well, heroes usually have their force powers, but they're commented out.
			
			
			
				i can get the lightsaber animation but want the force animation. is it a different word or different files?
			
			
			
				Force animations are grouped together with the lightsaber animations.
			
			
			
				Wow I still need to finish this...
			
			
			
				i can use the lightsaber animation and i get the melee attact. i would like to have the force choke or the push.
			
			
			
				Here's my Mace Windu ODF to give you a rough guide.
[GameObjectClass]
ClassLabel 				= "soldier"
GeometryName 			= "rep_inf_macewindu.msh"
[Properties]
FootWaterSplashEffect 	= "watersplash_sm"
WaterSplashEffect 	= "watersplash_md"
WakeWaterSplashEffect	= "watersplash_wade"
UnitType				= "assault"
MapTexture 				= "troop_icon"
MapScale 				= 1.4
GeometryName 			= "rep_inf_macewindu"
GeometryLowRes			= "rep_inf_macewindu_low1"
AnimationName 			= "all_inf_snowtrooper"
JetJump 			= "21.0"		//The initial jump-push given when enabling the jet
JetPush 			= "0.0"	//The constant push given while the jet is enabled (20 is gravity)
JetEffect			= ""
JetFuelRechargeRate		= "0.1" //Additional fuel per second (fuel is 0 to 1)
JetFuelCost			= "0.0" //Cost per second when hovering (only used for jet-hovers)(fuel is 0 to 1)
JetFuelInitialCost		= "0.5" //4initial cost when jet jumping(fuel is 0 to 1)
JetFuelMinBorder		= "0.49" //minimum fuel to perform a jet jump(fuel is 0 to 1)
CollisionScale		= "0.0 0.0 0.0"
WingModel		    	= "gen_wings"
HealthType				= "person"
MaxHealth 				= 1200.0
AddHealth				= 60.0
Acceleraton 		= 70.0
MaxSpeed 		= 6.5
MaxStrafeSpeed 		= 4.5
MaxTurnSpeed 		= 4.0
WeaponName1 			= "rep_weap_lightsaber"
WeaponAmmo1 			= 0
WeaponName2 			= "rep_weap_inf_forcepush"
WeaponAmmo2 			= 0
WeaponChannel2			= 1
WeaponName3 			= "rep_weap_inf_forcepull"
WeaponAmmo3 			= 0
WeaponChannel3			= 1 
AimFactorPostureSpecial 	= 50
AimFactorPostureStand 		= 100
AimFactorPostureCrouch 		= 140
AimFactorPostureProne 		= 160
AimFactorStrafe 			= 60
AimFactorMove 			= 70
CAMERASECTION 		= "STAND"
EyePointOffset 		= "0.0 1.8 0.0"
TrackCenter		= "0.0 1.8 0.0
TrackOffset 		= "0.0 0.0 3.5"
TiltValue		= "5.0"
CAMERASECTION 		= "STANDZOOM"
EyePointOffset 		= "0.0 1.8 0.0"
TrackCenter		= "0.0 1.8 0.0
TrackOffset 		= "0.4 0.05 2.8"
TiltValue		= "3.5"
CAMERASECTION 		= "CROUCH"
EyePointOffset 		= "0.0 1.3 0.0"
TrackCenter		= "0.0 1.3 0.0
TrackOffset 		= "0.0 0.15 3.5"
TiltValue		= "5.0"
CAMERASECTION 		= "CROUCHZOOM"
EyePointOffset 		= "0.0 1.3 0.0"
TrackCenter		= "0.0 1.3 0.0
TrackOffset 		= "0.4 0.2 2.8"
TiltValue		= "3.5"
CAMERASECTION 		= "PRONE"
EyePointOffset 		= "0.0 0.5 0.0"
TrackCenter 		= "0.0 0.5 0.0"
TrackOffset 		= "0.0 0.0 3.0"
TiltValue		= "5.0"
CAMERASECTION 		= "PRONEZOOM"
EyePointOffset 		= "0.0 0.5 0.0"
TrackCenter 		= "0.0 0.5 0.0"
TrackOffset 		= "0.4 0.2 2.8"
TiltValue		= "3.5"
AimValue 				= "1.0"
HurtSound               	= ""
DeathSound              	= ""
AcquiredTargetSound     	= ""
HidingSound             	= ""
//ApproachingTargetSound	= ""
FleeSound               = ""
PreparingForDamageSound = ""
HeardEnemySound         = ""
ShockFadeOutTime        = ""
ShockFadeInTime         = ""
ShockFadeOutGain        = ""
ShockSound              = ""
ClothingRustleSound     = ""
LowHealthSound          = "com_inf_saber_ambient"
LowHealthThreshold      = "1.1"
FoleyFXClass            = "rep_inf_soldier"
NoEnterVehicles		= 1
AISizeType		= "SOLDIER"
DropItemClass = "com_item_powerup_ammo"
DropItemProbability = 0.20
NextDropItem = "-"
DropItemClass = "com_item_powerup_health25"
DropItemProbability = 0.05
NextDropItem = "-"
DropItemClass = "com_item_powerup_health100"
DropItemProbability = 0.0
			
			
			
				Quote from: ggctuk on November 03, 2009, 09:13:47 AM
Here's my Mace Windu ODF to give you a rough guide.
[GameObjectClass]
ClassLabel             = "soldier"
GeometryName          = "rep_inf_macewindu.msh"
UnitType            = "assault"
AnimationName          = "all_inf_snowtrooper"
WeaponName1          = "rep_weap_lightsaber"
WeaponName2          = "rep_weap_inf_forcepush"
WeaponName3          = "rep_weap_inf_forcepull"
[/quote]
thank you ggctuk, these are the bits i will be looking into seeing how and where i couldnt get right.
			 
			
			
				Quote from: keenmike on November 02, 2009, 03:53:37 PM
i can use the lightsaber animation and i get the melee attact. i would like to have the force choke or the push.
to get the forcepush animation use this line: FireAnim = "2" 
with this line: AnimationBank = "lightsabre"
same with the grenade throw animation (but with AnimationBank = "grenade"). 
you could have learned that from looking at the force push odf in the stock assests
and there is no force choke animation as far as i know
			
 
			
			
				is it possible to do this on a mac?
and are all of those odf and msh things located in modding tools?
i have no pcs but i would still like to make mods
			
			
			
				You can develop but not munge (compile) mods on a Mac. You'll need someone with a PC to munge it for you.
			
			
			
				Quote from: ag on November 03, 2009, 04:40:24 PM
You can develop but not munge (compile) mods on a Mac. You'll need someone with a PC to munge it for you.
tga skinning is i bet easy on a mac. but some other changes you make might not work and it is good to munge along the way to know what works. i know as for me when i tried to set up different mesh characters i worked on one troop at a time. and would munge to see if i got each character just right.
what is more important? playing swbf1 or modding the troops like i say in the topic rebel line up running in my mine?
			
 
			
			
				ummmmmmm
ive never made a mod before so i dont know anything about munge or ZE or tga or whatever taht stuff is :confused:
			
			
			
				i can help on a mic in ventrilo or teamseak or even thru xfire.
			
			
			
				ummmmm
ok ill make an xfire on the weekend
			
			
			
				Here's all the ODF types I pulled from the exe. Not sure, but I think they're all in the ODF guide included with the documentation.
explosion   
fatray  
emitterordnance 
grapplinghook   
towcable    
missile 
bolt    
laser   
haywire 
beacon  
sticky  
grenade 
shell   
bullet  
beam   
grapplinghookweapon 
towcableweapon  
catapult    
melee   
binoculars  
shield  
repair  
launcher    
remote  
detonator   
dispenser   
disguise    
destruct    
cannon  
weapon  
effectprop  
rumbleeffect    
hologram    
light   
godray  
leafpatch   
grasspatch  
cloudcluster    
dusteffect  
mine    
powerupitem 
powerupstation  
vehiclepad  
vehiclespawn    
commandwalker   
commandhover    
commandarmedanimatedbuilding    
commandarmedbuilding    
commandpost 
SoundAmbienceStreaming  
SoundAmbienceStatic 
treaded 
hover   
carrier 
flyer   
walkerdroid 
walker  
droid   
soldier 
trap    
door    
armedbuildingdynamic
armedbuilding   
armedanimatedbuilding   
animatedbuilding    
destructablebuilding    
animatedprop    
building    
prop
			
			
			
				Im confused.
No modding for me, just playing the mods  :D
			
			
			
				This here's a moddign tutorial. If you're not a modder, it's useless to you ;)
			
			
			
				where do i find odfs and what do i need to open them
			
			
			
				ODFs are found in folders called ODF, eithre inside your world folder, or inside the sides files. You can open them in Notepad.
			
			
			
				i founde them i tride editing them but it said that it could onaly be read
			
			
			
				Right-click the entire BFBuilder folder and uncheck "Read only". If a box comes up, tell it to apply to all subfolders and files, then click Apply and they should work.
			
			
			
				ok thanks
			
			
			
				i have a nother problem when i tried to give the dark trooper force lightning and heailfiremissles it crashed the game do the wepons need to b from the imp side???