Well I thought this would help some so AG please put this in the tut section. I will be talking today about how to change SWBF2 units to SWBF1. This is fairly complicated, but more SWBF2-ish, way. Things you need pay attention to (notes, names, etc) will be in red. Things you will be taking from SWBF2 and putting it in SWBF1 are inorange. (It looks more like yellow, I know.) Things from SWBF1 you will be replacing with SWBF2 are in blue.
It will help if you make this mental picture in your mind:
so one .odf makes one unit in SWBF1, but in SWBF2 it takes several to make one unit. The "default" unit .odf(example: rep_inf_default_marine.odf) + the actual unit .odf (example: rep_inf_ep3_marine.odf) + the SIDE "default" unit .odf(example: rep_inf_default.odf) = one unit.
It goes in a chain like this: com_inf_default(not editable) -> rep_inf_default -> rep_inf_default_marine -> rep_inf_ep3_marine You get more and more specific as the chain goes on.
All of those have different parts to make the full unit. So since SWBF1 only uses one .odf, you have to get all the info you need from those 3 .odf's in SWBF2 to make one in SWBF1.
Alright so I will be using a republic ep3 marine from SWBF2 and putting it in the place of a republic trooper from SWBF1.
First off let's look at the SWBF2 trooper. (You must have the SWBF2 Mod Tools. Go to assets > sides > rep > odf)
In the rep odf folder scroll down until you see rep_inf_ep3_marine open it up and you will see:
[GameObjectClass]
ClassParent = "rep_inf_default_marine"
[Properties]
GeometryName = "rep_inf_ep3trooper"
GeometryLowRes = "rep_inf_ep3trooper_low1"
FirstPerson = "REP\reptroop;rep_1st_trooper"
Now you might be saying "What the heck? This doesn't look anything like a SWBF1 odf" well that's why we are having this in the first place. This odf has stuff that swbf1 troops have, but alot less. It has Geometry, first person and lowres, but it also has ClassParent. Now what in the world is that? It is the next part of this odf that we need to make 1 odf in SWBF1. So this says the next thing we need to get is rep_inf_default_marine. So let's go up some and find rep_inf_default_marine. When you open it, it should look like this:
[spoiler][GameObjectClass]
ClassParent = "rep_inf_default"
[Properties]
UnitType = "assault"
MaxSpeed = 6.0 // base forward speed
MaxStrafeSpeed = 4.5 // base right/left speed
WEAPONSECTION = 1
WeaponName = "rep_weap_inf_rifle"
WeaponAmmo = 4
WEAPONSECTION = 2
WeaponName = "rep_weap_inf_rocket_launcher"
WeaponAmmo = 4
WEAPONSECTION = 3
WeaponName = "rep_weap_inf_thermaldetonator"
WeaponAmmo = 4
WeaponChannel = 1
WEAPONSECTION = 4
WeaponName = "rep_weap_award_rifle"
WeaponAmmo = 4
VOUnitType = 121
[/spoiler]
So we see some stuff we recognize, weapons, speed and stuff like that. Well this still does not have everything that we need. It has ANOTHER ClassParent called rep_inf_default. So let's go up a little more and find rep_inf_default. Open it and you will see:
[spoiler]
[GameObjectClass]
// Base class for all rep soldiers, inherits from com_inf_default
ClassParent = "com_inf_default"
GeometryName = "rep_inf_trooper.msh"
[Properties]
// Mostly sound and general VO in this file
HurtSound = "rep_inf_com_chatter_wound"
DeathSound = "rep_inf_com_chatter_death"
DamageRegionSound = "repmalechoke"
//AcquiredTargetSound = "rep_inf_com_chatter_acquired"
//HidingSound = "rep_inf_com_chatter_hide"
//ApproachingTargetSound = "rep_inf_com_chatter_approach"
//FleeSound = "rep_inf_com_chatter_flee"
//PreparingForDamageSound = "rep1_inf_chatter_PreparingForDamageSound"
//Charge = "rep1_inf_chatter_Charge"
//HeardEnemySound = "rep_inf_com_chatter_heard"
//ShockFadeOutTime = "0.8"
//ShockFadeInTime = "2.0"
ShockFadeOutGain = ""
ShockSound = ""
ClothingRustleSound = ""
LowHealthSound = ""
//LowHealthThreshold = ".25"
FoleyFXClass = "rep_inf_trooper"
VOSound = "rep_command_follow SC_Follow"
VOSound = "rep_command_stopFollow SC_StopFollow"
VOSound = "rep_command_stopVehicle SC_VehicleWaitUp"
VOSound = "rep_command_getIn SC_GetIn"
VOSound = "rep_command_getOut SC_GetOut"
VOSound = "rep_response_follow SC_FollowResponse"
VOSound = "rep_response_stopFollow SC_StopFollowResponse"
VOSound = "rep_response_stopVehicle SC_VehicleWaitUpResponse"
VOSound = "rep_response_getIn SC_GetInResponse"
VOSound = "rep_response_getOut SC_GetOutResponse"
VOSound = "rep1_inf_pc_com_hostile SpottedVO"
VOSound = "rep1_inf_pc_com_bacta NeedMedicVO"
VOSound = "rep1_inf_pc_com_mechanic NeedRepairVO"
VOSound = "rep1_inf_pc_com_ammo NeedAmmoVO"
VOSound = "rep1_inf_pc_com_transport NeedPickupVO"
VOSound = "rep1_inf_pc_com_backup NeedBackupVO"
VOSound = "rep1_inf_pc_com_clear_area AttackPositionVO"
VOSound = "rep1_inf_pc_com_defend DefendPositionVO"
VOSound = "rep1_inf_pc_com_hostile_inVehicle SpottedVO +InVehicle"
VOSound = "rep1_inf_pc_com_bacta_inVehicle NeedMedicVO +InVehicle"
VOSound = "rep1_inf_pc_com_mechanic_inVehicle NeedRepairVO +InVehicle"
VOSound = "rep1_inf_pc_com_ammo_inVehicle NeedAmmoVO +InVehicle"
VOSound = "rep1_inf_pc_com_transport_inVehicle NeedPickupVO +InVehicle"
VOSound = "rep1_inf_pc_com_backup_inVehicle NeedBackupVO +InVehicle"
VOSound = "rep1_inf_pc_com_clear_area_inVehicle AttackPositionVO +InVehicle"
VOSound = "rep1_inf_pc_com_defend_inVehicle DefendPositionVO +InVehicle"
VOSound = "rep1_inf_chatter_AcquiredTarget_Above_VOUnitNum41 AcquiredTarget +Above +VOUnitNum41"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum41 AcquiredTarget +VOUnitNum41"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum42 AcquiredTarget +VOUnitNum42"
VOSound = "rep1_inf_chatter_AcquiredTarget_left AcquiredTarget +left"
VOSound = "rep1_inf_chatter_AcquiredTarget_right AcquiredTarget +right"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum49 NotShootingCriticalHit +VOUnitNum49"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum49 AcquiredTarget +VOUnitNum49"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum51 NotShootingCriticalHit +VOUnitNum51"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum51 AcquiredTarget +VOUnitNum51"
VOSound = "rep1_inf_chatter_NearbyEnemySlaughter NearbyEnemySlaughter"
VOSound = "rep1_inf_chatter_NearbyFriendlySlaughter NearbyFriendlySlaughter"
VOSound = "rep1_inf_chatter_KillingSpree4 KillingSpree4"
VOSound = "rep1_inf_chatter_KillingSpree8 KillingSpree8"
VOSound = "rep1_inf_chatter_HeadshotKill HeadshotKill"
VOSound = "rep1_inf_chatter_Grenade Grenade"
VOSound = "rep1_inf_chatter_MissileIncoming MissileIncoming"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsSniper_VOUnitNum44 AcquiredTarget +IsSniper +VOUnitNum44"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsSniper_VOUnitNum84 AcquiredTarget +IsSniper +VOUnitNum84"
VOSound = "rep1_inf_chatter_FriendlyFire FriendlyFire"
VOSound = "rep1_inf_chatter_RebelsShootDeadBody RebelsShootDeadBody"
VOSound = "rep1_inf_chatter_GivePowerup GivePowerup"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsTurret AcquiredTarget +IsTurret"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum81 AcquiredTarget +VOUnitNum81"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum82 AcquiredTarget +VOUnitNum82"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum83 AcquiredTarget +VOUnitNum83"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum85 AcquiredTarget +VOUnitNum85"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum86 AcquiredTarget +VOUnitNum86"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum86 NotShootingCriticalHit +VOUnitNum86"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum87 AcquiredTarget +VOUnitNum87"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum87 NotShootingCriticalHit +VOUnitNum87"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum88 AcquiredTarget +VOUnitNum88"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum88 NotShootingCriticalHit +VOUnitNum88"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum191 AcquiredTarget +VOUnitNum191"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum192 AcquiredTarget +VOUnitNum192"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum193 AcquiredTarget +VOUnitNum193"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum194 AcquiredTarget +VOUnitNum194"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum197 AcquiredTarget +VOUnitNum197"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum198 AcquiredTarget +VOUnitNum198"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum196 AcquiredTarget +VOUnitNum196"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum195 AcquiredTarget +VOUnitNum195"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum181 AcquiredTarget +VOUnitNum181"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum171 AcquiredTarget +VOUnitNum171"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum199 AcquiredTarget +VOUnitNum199"
VOSound = "rep1_inf_chatter_RepairStart_IsHover RepairStart +IsHover"
VOSound = "rep1_inf_chatter_RepairEnd_IsHover RepairEnd +IsHover"
VOSound = "rep1_inf_chatter_RepairStart_IsWalker RepairStart +IsWalker"
VOSound = "rep1_inf_chatter_RepairEnd_IsWalker RepairEnd +IsWalker"
VOSound = "rep1_inf_chatter_RepairStart_IsFlyer RepairStart +IsFlyer"
VOSound = "rep1_inf_chatter_RepairEnd_IsFlyer RepairEnd +IsFlyer"
VOSound = "rep1_inf_chatter_RepairStart_IsTurret RepairStart +IsTurret"
VOSound = "rep1_inf_chatter_RepairEnd_IsTurret RepairEnd +IsTurret"
VOSound = "rep1_inf_chatter_AcquiredTarget AcquiredTarget"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum176 AcquiredTarget +VOUnitNum176"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum175 AcquiredTarget +VOUnitNum175"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum177 AcquiredTarget +VOUnitNum177"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum2 AcquiredTarget +VOUnitNum2"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum172 AcquiredTarget +VOUnitNum172"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum174 AcquiredTarget +VOUnitNum174"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum173 AcquiredTarget +VOUnitNum173"
VOSound = "rep1_inf_chatter_AcquiredTarget_Above_VOUnitNum41_InHover AcquiredTarget +Above +VOUnitNum41 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum41_InHover AcquiredTarget +VOUnitNum41 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum42_InHover AcquiredTarget +VOUnitNum42 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_left_InHover AcquiredTarget +left +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_right_InHover AcquiredTarget +right +InHover"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum49_InHover NotShootingCriticalHit +VOUnitNum49 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum49_InHover AcquiredTarget +VOUnitNum49 +InHover"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum51_InHover NotShootingCriticalHit +VOUnitNum51 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum51_InHover AcquiredTarget +VOUnitNum51 +InHover"
VOSound = "rep1_inf_chatter_NearbyEnemySlaughter NearbyEnemySlaughter"
VOSound = "rep1_inf_chatter_NearbyFriendlySlaughter NearbyFriendlySlaughter"
VOSound = "rep1_inf_chatter_KillingSpree4_InHover KillingSpree4 +InHover"
VOSound = "rep1_inf_chatter_KillingSpree8_InHover KillingSpree8 +InHover"
VOSound = "rep1_inf_chatter_HeadshotKill_InHover HeadshotKill +InHover"
VOSound = "rep1_inf_chatter_Grenade_InHover Grenade +InHover"
VOSound = "rep1_inf_chatter_MissileIncoming_InHover MissileIncoming +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsSniper_InHover_VOUnitNum44 AcquiredTarget +IsSniper +InHover +VOUnitNum44"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsSniper_InHover_VOUnitNum84 AcquiredTarget +IsSniper +InHover +VOUnitNum84"
VOSound = "rep1_inf_chatter_FriendlyFire_InHover FriendlyFire +InHover"
VOSound = "rep1_inf_chatter_RebelsShootDeadBody_InHover RebelsShootDeadBody +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsTurret_InHover AcquiredTarget +IsTurret +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum81_InHover AcquiredTarget +VOUnitNum81 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum82_InHover AcquiredTarget +VOUnitNum82 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum83_InHover AcquiredTarget +VOUnitNum83 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum85_InHover AcquiredTarget +VOUnitNum85 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum86_InHover AcquiredTarget +VOUnitNum86 +InHover"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum86_InHover NotShootingCriticalHit +VOUnitNum86 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum87_InHover AcquiredTarget +VOUnitNum87 +InHover"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum87_InHover NotShootingCriticalHit +VOUnitNum87 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum88_InHover AcquiredTarget +VOUnitNum88 +InHover"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum88_InHover NotShootingCriticalHit +VOUnitNum88 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum191_InHover AcquiredTarget +VOUnitNum191 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum192_InHover AcquiredTarget +VOUnitNum192 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum193_InHover AcquiredTarget +VOUnitNum193 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum194_InHover AcquiredTarget +VOUnitNum194 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum197_InHover AcquiredTarget +VOUnitNum197 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum198_InHover AcquiredTarget +VOUnitNum198 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum196_InHover AcquiredTarget +VOUnitNum196 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum195_InHover AcquiredTarget +VOUnitNum195 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum181_InHover AcquiredTarget +VOUnitNum181 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum171_InHover AcquiredTarget +VOUnitNum171 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum199_InHover AcquiredTarget +VOUnitNum199 +InHover"
VOSound = "rep1_inf_chatter_RepairStart_IsHover_InHover RepairStart +IsHover +InHover"
VOSound = "rep1_inf_chatter_RepairEnd_IsHover_InHover RepairEnd +IsHover +InHover"
VOSound = "rep1_inf_chatter_RepairStart_IsWalker_InHover RepairStart +IsWalker +InHover"
VOSound = "rep1_inf_chatter_RepairEnd_IsWalker_InHover RepairEnd +IsWalker +InHover"
VOSound = "rep1_inf_chatter_RepairStart_IsFlyer_InHover RepairStart +IsFlyer +InHover"
VOSound = "rep1_inf_chatter_RepairEnd_IsFlyer_InHover RepairEnd +IsFlyer +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_InHover AcquiredTarget +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum176_InHover AcquiredTarget +VOUnitNum176 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum175_InHover AcquiredTarget +VOUnitNum175 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum177_InHover AcquiredTarget +VOUnitNum177 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum2_InHover AcquiredTarget +VOUnitNum2 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum172_InHover AcquiredTarget +VOUnitNum172 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum174_InHover AcquiredTarget +VOUnitNum174 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum173_InHover AcquiredTarget +VOUnitNum173 +InHover"
VOSound = "rep1_inf_chatter_AcquiredTarget_Above_VOUnitNum41_InWalker AcquiredTarget +Above +VOUnitNum41 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum41_InWalker AcquiredTarget +VOUnitNum41 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum42_InWalker AcquiredTarget +VOUnitNum42 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_left_InWalker AcquiredTarget +left +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_right_InWalker AcquiredTarget +right +InWalker"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum49_InWalker NotShootingCriticalHit +VOUnitNum49 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum49_InWalker AcquiredTarget +VOUnitNum49 +InWalker"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum51_InWalker NotShootingCriticalHit +VOUnitNum51 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum51_InWalker AcquiredTarget +VOUnitNum51 +InWalker"
VOSound = "rep1_inf_chatter_NearbyEnemySlaughter NearbyEnemySlaughter"
VOSound = "rep1_inf_chatter_NearbyFriendlySlaughter NearbyFriendlySlaughter"
VOSound = "rep1_inf_chatter_KillingSpree4_InWalker KillingSpree4 +InWalker"
VOSound = "rep1_inf_chatter_KillingSpree8_InWalker KillingSpree8 +InWalker"
VOSound = "rep1_inf_chatter_HeadshotKill_InWalker HeadshotKill +InWalker"
VOSound = "rep1_inf_chatter_Grenade_InWalker Grenade +InWalker"
VOSound = "rep1_inf_chatter_MissileIncoming_InWalker MissileIncoming +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsSniper_InWalker_VOUnitNum44 AcquiredTarget +IsSniper +InWalker +VOUnitNum44"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsSniper_InWalker_VOUnitNum84 AcquiredTarget +IsSniper +InWalker +VOUnitNum84"
VOSound = "rep1_inf_chatter_FriendlyFire_InWalker FriendlyFire +InWalker"
VOSound = "rep1_inf_chatter_RebelsShootDeadBody_InWalker RebelsShootDeadBody +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_IsTurret_InWalker AcquiredTarget +IsTurret +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum81_InWalker AcquiredTarget +VOUnitNum81 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum82_InWalker AcquiredTarget +VOUnitNum82 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum83_InWalker AcquiredTarget +VOUnitNum83 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum85_InWalker AcquiredTarget +VOUnitNum85 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum86_InWalker AcquiredTarget +VOUnitNum86 +InWalker"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum86_InWalker NotShootingCriticalHit +VOUnitNum86 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum87_InWalker AcquiredTarget +VOUnitNum87 +InWalker"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum87_InWalker NotShootingCriticalHit +VOUnitNum87 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum88_InWalker AcquiredTarget +VOUnitNum88 +InWalker"
VOSound = "rep1_inf_chatter_NotShootingCriticalHit_VOUnitNum88_InWalker NotShootingCriticalHit +VOUnitNum88 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum191_InWalker AcquiredTarget +VOUnitNum191 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum192_InWalker AcquiredTarget +VOUnitNum192 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum193_InWalker AcquiredTarget +VOUnitNum193 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum194_InWalker AcquiredTarget +VOUnitNum194 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum197_InWalker AcquiredTarget +VOUnitNum197 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum198_InWalker AcquiredTarget +VOUnitNum198 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum196_InWalker AcquiredTarget +VOUnitNum196 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum195_InWalker AcquiredTarget +VOUnitNum195 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum181_InWalker AcquiredTarget +VOUnitNum181 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum171_InWalker AcquiredTarget +VOUnitNum171 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum199_InWalker AcquiredTarget +VOUnitNum199 +InWalker"
VOSound = "rep1_inf_chatter_RepairStart_IsHover_InWalker RepairStart +IsHover +InWalker"
VOSound = "rep1_inf_chatter_RepairEnd_IsHover_InWalker RepairEnd +IsHover +InWalker"
VOSound = "rep1_inf_chatter_RepairStart_IsWalker_InWalker RepairStart +IsWalker +InWalker"
VOSound = "rep1_inf_chatter_RepairEnd_IsWalker_InWalker RepairEnd +IsWalker +InWalker"
VOSound = "rep1_inf_chatter_RepairStart_IsFlyer_InWalker RepairStart +IsFlyer +InWalker"
VOSound = "rep1_inf_chatter_RepairEnd_IsFlyer_InWalker RepairEnd +IsFlyer +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_InWalker AcquiredTarget +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum176_InWalker AcquiredTarget +VOUnitNum176 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum175_InWalker AcquiredTarget +VOUnitNum175 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum177_InWalker AcquiredTarget +VOUnitNum177 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum2_InWalker AcquiredTarget +VOUnitNum2 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum172_InWalker AcquiredTarget +VOUnitNum172 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum174_InWalker AcquiredTarget +VOUnitNum174 +InWalker"
VOSound = "rep1_inf_chatter_AcquiredTarget_VOUnitNum173_InWalker AcquiredTarget +VOUnitNum173 +InWalker"
[/spoiler]
So the first thing you are thinking is "wow" well don't let your brains get fried just yet, this mostly has to do with Sound(I never use it because I doubt it works in SWBF1). So we have the 3 puzzle pieces to this trooper. Well at the top it has one more ClassParent called com_inf_default. Now this ClassParent is probably hardwired in the game. So it is unchangeable. It is a constant in all units. So lets take the 3 puzzle pieces we have and put them up side by side. Now open your SWBF1 mod tools and go to your SIDE. I will be using a republic trooper for this.
So let's look at the SWBF1 rep trooper:
[spoiler]
[GameObjectClass]
ClassLabel = "soldier"
GeometryName = "rep_inf_trooper.msh"
[Properties]
FootWaterSplashEffect = "watersplash_sm"
WaterSplashEffect = "watersplash_md"
WakeWaterSplashEffect = "watersplash_wade"
Label = "Republic Trooper"
UnitType = "trooper"
IconTexture = "rep_trooper_icon"
MapTexture = "troop_icon"
MapScale = 1.4
GeometryName = "rep_inf_trooper"
GeometryLowRes = "rep_inf_trooper_low1"
FirstPerson = "REP\reptroop;rep_1st_trooper"
FirstPersonFOV = "70"
ThirdPersonFOV = "65"
AnimationName = "all_inf_snowtrooper" - This can be changed in some special units but for troopers it can stay like this.
CAMERASECTION = "STAND" - The entire CAMERASECTION can be pasted over if you copy the SWBF2 units CAMERASECTION (yes it will work) but this is not necessary for republic trooper.
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"
MaxHealth = 300.0
Acceleraton = 70.0
MaxSpeed = 6.5
MaxStrafeSpeed = 4.5
MaxTurnSpeed = 4.0
**NOTE** 1.) You cannot simply paste the names of the weapons from the SWBF2 unit into this .odf. 2.) You cannot simply copy and paste all the files of the SWBF2 weapons and put them in the SWBF1 SIDE folder. I will make a tut on converting SWBF2 weapons later. 3.) It IS POSSIBLE to get SWBF1 weapons to be exactly (and/or close to) the SWBF2 weapons.
WeaponName1 = "rep_weap_inf_commando_pistol"
WeaponAmmo1 = 0
WeaponName2 = "rep_weap_inf_pistol"
WeaponAmmo2 = 0
WeaponName3 = "rep_weap_inf_haywiredetonator"
WeaponAmmo3 = 3
WeaponChannel3 = 1
WeaponName4 = "rep_weap_inf_crackgrenade"
WeaponAmmo4 = 2
WeaponChannel4 = 1
AimFactorPostureSpecial = 50
AimFactorPostureStand = 100
AimFactorPostureCrouch = 140
AimFactorPostureProne = 160
AimFactorStrafe = 60
AimFactorMove = 70
HurtSound = "rep_inf_com_chatter_wound"
DeathSound = "rep_inf_com_chatter_death"
AcquiredTargetSound = "rep_inf_com_chatter_acquired"
HidingSound = "rep_inf_com_chatter_hide"
ApproachingTargetSound = "rep_inf_com_chatter_approach"
FleeSound = "rep_inf_com_chatter_flee"
PreparingForDamageSound = "rep_inf_com_chatter_predamage"
HeardEnemySound = "rep_inf_com_chatter_heard"
ShockFadeOutTime = ""
ShockFadeInTime = ""
ShockFadeOutGain = ""
ShockSound = ""
ClothingRustleSound = ""
LowHealthSound = ""
//LowHealthThreshold = ".25"
FoleyFXClass = "rep_inf_trooper" - can be changed but not really necessary
// squad command VO
SCFieldMoveOutSound = "rep_inf_com_chatter_tac_moveout"
SCFieldHoldSound = "rep_inf_com_chatter_tac_hold"
SCFieldFollowSound = "rep_inf_com_chatter_tac_follow"
SCDriverGetInSound = "rep_inf_com_chatter_tac_needgunner"
SCDriverGetOutSound = "rep_inf_com_chatter_tac_moveout"
SCPassengerMoveOutSound = "rep_inf_com_chatter_tac_spreadout"
SCPassengerStopSound = "rep_inf_com_chatter_tac_stop"
SCPassengerGetInSound = "rep_inf_com_chatter_tac_needgunner"
SCPassengerGetOutSound = "rep_inf_com_chatter_tac_moveout"
SCGunnerAllClearSound = "rep_inf_com_chatter_tac_allclear"
SCGunnerSteadySound = "rep_inf_com_chatter_tac_stop"
SCGunnerGetInSound = "rep_inf_com_chatter_tac_needgunner"
SCGunnerGetOutSound = "rep_inf_com_chatter_tac_moveout"
SCResponseYessirSound = "rep_inf_com_chatter_tac_yes"
SCResponseNosirSound = "rep_inf_com_chatter_tac_no"
//ChargeSound = "rep_inf_com_chatter_tac_charge"
// AI squad command VO
AISCFieldMoveOutSound = "ai_rep_inf_com_chatter_tac_moveout"
AISCFieldHoldSound = "ai_rep_inf_com_chatter_tac_hold"
AISCFieldFollowSound = "ai_rep_inf_com_chatter_tac_follow"
AISCDriverGetInSound = "ai_rep_inf_com_chatter_tac_needgunner"
AISCDriverGetOutSound = "ai_rep_inf_com_chatter_tac_moveout"
AISCPassengerMoveOutSound = "ai_rep_inf_com_chatter_tac_spreadout"
AISCPassengerStopSound = "ai_rep_inf_com_chatter_tac_stop"
AISCPassengerGetInSound = "ai_rep_inf_com_chatter_tac_needgunner"
AISCPassengerGetOutSound = "ai_rep_inf_com_chatter_tac_moveout"
AISCGunnerAllClearSound = "ai_rep_inf_com_chatter_tac_allclear"
AISCGunnerSteadySound = "ai_rep_inf_com_chatter_tac_stop"
AISCGunnerGetInSound = "ai_rep_inf_com_chatter_tac_needgunner"
AISCGunnerGetOutSound = "ai_rep_inf_com_chatter_tac_moveout"
AISCResponseYessirSound = "ai_rep_inf_com_chatter_tac_yes"
AISCResponseNosirSound = "ai_rep_inf_com_chatter_tac_no"
AISCGunnerGetOutSound = "ai_rep_inf_com_chatter_tac_moveout"
AISizeType = "SOLDIER"
DropItemClass = "com_item_powerup_ammo"
DropItemProbability = 0.40
NextDropItem = "-"
DropItemClass = "com_item_powerup_health100"
DropItemProbability = 0.30
NextDropItem = "-"
DropItemClass = "com_item_powerup_dual"
DropItemProbability = 0.10
[/spoiler]
Now we need to change everything that has to do with the SWBF1 republic trooper (blue) to the SWBF2 ep3 trooper (orange). First make sure you have the SWBF2 troopers .req, .msh/.tga, and munged files, and copy and paste any effects that are in the SWBF2 rep folder to the SWBF1 rep folder. (If you don't have an effects folder in the SWBF1 rep folder make one and name it "effects" then copy and paste all the SWBF2 effects there.) Now let's get to changing.
Notes for converting other units:
When you see something like
ComboAnimationBank
or ClothODF
Don't use it! SWBF1 does not have "combos" so it cannot be used. Also SWBF1 does not have any kind of "addon" AnimatedAddon ClothODF or GeometryAddon. It won't work! So we need to just change the stuff about the Geometry and the Weapons. It is hard but in a simple way (If that makes sense). Keep your eye out for anything you don't see in any SWBF1 odf's.
Hope this helps! If anyone needs further help please post questions and I will add them to this tutorial.
You are overcomplicating a simple process, and "conversion" is a bit of a misnomer.
1) Open SWBF1 .odf
2) Replace geometry with SWBF2 geometry
Done.
There's nothing "hardwired" about classparents, it's just a shortcut the devs made for SWBF2 to make things cleaner. Any classparent is just another .odf file, and all you have to do - if you really want to do it the backwards way you describe - is merge the data from any parent .odfs into the child .odf.
Not all weapons are going to work, your sounds are going to reference different things, and there will be extraneous parameters (e.g. awards), so like I said it's really a waste of time to do it the way you mention above. It's far simpler to make your unit and then just copy the geometry. If you want to use the same weapons you would just change the references in your .odfs to those weapon .odfs. I don't know why you would - you're asking for a huge hassle because the common effects/textures used in either game have different names - but if you did, that's the simplest way.
Quote from: Maveritchell on April 20, 2010, 01:42:40 PM
You are overcomplicating a simple process, and "conversion" is a bit of a misnomer.
1) Open SWBF1 .odf
2) Replace geometry with SWBF2 geometry
Done.
There's nothing "hardwired" about classparents, it's just a shortcut the devs made for SWBF2 to make things cleaner. Any classparent is just another .odf file, and all you have to do - if you really want to do it the backwards way you describe - is merge the data from any parent .odfs into the child .odf.
Not all weapons are going to work, your sounds are going to reference different things, and there will be extraneous parameters (e.g. awards), so like I said it's really a waste of time to do it the way you mention above. It's far simpler to make your unit and then just copy the geometry. If you want to use the same weapons you would just change the references in your .odfs to those weapon .odfs. I don't know why you would - you're asking for a huge hassle because the common effects/textures used in either game have different names - but if you did, that's the simplest way.
Ok.
This will help people anyway.
Despite all the work put into this topic... Mav just showed the easier way. Either way, I'll keep it in the tutorials section. As always, a big thanks for your hard work on writing tutorials!
--AG
Yeah, well usually when things are told the easy way people have questions on more advanced aspects of the simple thing. I think this will still help new modders. :P :shrug:
Quote from: Snake on April 20, 2010, 03:44:15 PM
Yeah, well usually when things are told the easy way people have questions on more advanced aspects of the simple thing.
I don't see any problem with helping, but the reason I posted what I posted is because your explanation makes a simple process more complicated and more intimidating than it needs to be. It's not so much that it touches on anything "more advanced;" it's a bit extraneous and obfuscatory. A great rule of thumb for giving instructions - only expand on your instructions when they need to be.
Maybe it will help someone - I don't know. My only concern is that what your explanation gives is analogous to disassembling a car to get a person outside rather than the person using the car door to get outside.
On the mark on many points. It is good to read odf files and search for clues. I wonder if the sholders of the bald models I used could be more round.
Quote from: Maveritchell on April 20, 2010, 01:42:40 PM
You are overcomplicating a simple process, and "conversion" is a bit of a misnomer.
1) Open SWBF1 .odf
2) Replace geometry with SWBF2 geometry
Done.
There's nothing "hardwired" about classparents, it's just a shortcut the devs made for SWBF2 to make things cleaner. Any classparent is just another .odf file, and all you have to do - if you really want to do it the backwards way you describe - is merge the data from any parent .odfs into the child .odf.
Not all weapons are going to work, your sounds are going to reference different things, and there will be extraneous parameters (e.g. awards), so like I said it's really a waste of time to do it the way you mention above. It's far simpler to make your unit and then just copy the geometry. If you want to use the same weapons you would just change the references in your .odfs to those weapon .odfs. I don't know why you would - you're asking for a huge hassle because the common effects/textures used in either game have different names - but if you did, that's the simplest way.
This is the way everybody I know, including myself, did it.
Also, addons do work but you need to be very careful as only certain addons work. AnimatedAddon DOES work in BF1. Count Dooku and Darth Vader have this for their capes.