Snake's Tutorial on converting SWBF2 units to SWBF1 (Updated 4/14/2012)

Started by Snake, April 20, 2010, 12:55:10 PM

Previous topic - Next topic
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.
=AaTc= Forever

SALLY....

-Retired Modder

April 20, 2010, 01:42:40 PM #1 Last Edit: April 20, 2010, 01:58:09 PM by Maveritchell
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.
=AaTc= Forever

SALLY....

-Retired Modder

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


#TYBG

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:
=AaTc= Forever

SALLY....

-Retired Modder

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.
In Progress:
--Star Wars: Battlefront - Anniversary Edition (formerly Star Wars: Battlefront - Legacy Edition)
--Endor: Imperial Base

On Hold:
--Star Wars Battlefront: Elite Squadron For SWBF1