• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

Code BallisticCoefficient

Greenh0rn

Grizzled Veteran
Nov 15, 2010
69
41
Hello i ask for a little help. How can i caluclate BallisticCoefficient. Another thing how the original Ro calculates penetration values i mean

PenetrationTable(0)=11
PenetrationTable(1)=11
PenetrationTable(2)=10
PenetrationTable(3)=10
PenetrationTable(4)=10
PenetrationTable(5)=9
PenetrationTable(6)=8
PenetrationTable(7)=8
PenetrationTable(8)=7
PenetrationTable(9)=6
PenetrationTable(10)=6

how can i calculate which how many cm or mm?
 
Upvote 0
The ballistic coefficient is most often calculated and published by the ammunition manufacturer, when talking about modern commercially available ammunition. In the case of Red Orchestra, the manufacturer information isn't available, so it is computed using a formula. This wikipedia page tells you all about calculating BCs.

http://en.wikipedia.org/wiki/Ballistic_coefficient[url]http://en.wikipedia.org/wiki/Ballistic_coefficient[/URL]


I already try this formula and it isnt working for ro. for testing i calculated out the Tigers BC whit 3 type of ammo but non of the calc get near the values in game.. i think it is calculated from other formula
10,2/(0,04*88)=2,84 but in the script they wright 3,3
 
Last edited:
Upvote 0
Also keep in mind that ballistics calcs use a whole bunch of "constants", one of which is the Bc. We start with what we can find in terms of Bc, plus shooting tables, then retro-fit our own Bc from the data. The reason is that we have simplified some of the equations down, where we don't care about variations in air pressure or temp, for instance. And (for performance reasons) we tend to simplify down as far as possible - if we introduce errors in single-figure percentages, those are so small that we can live with them for the sake of improved performance on the calcs. Just consider a map with 4 tanks, 2 MG42s, couple of DPs, 5 PPSh all in action at once - that is over 200 rounds PER SECOND being introduced to the environment. Thats a lot of ballistic calcs going on at once!
 
Upvote 0
Also keep in mind that ballistics calcs use a whole bunch of "constants", one of which is the Bc. We start with what we can find in terms of Bc, plus shooting tables, then retro-fit our own Bc from the data. The reason is that we have simplified some of the equations down, where we don't care about variations in air pressure or temp, for instance. And (for performance reasons) we tend to simplify down as far as possible - if we introduce errors in single-figure percentages, those are so small that we can live with them for the sake of improved performance on the calcs. Just consider a map with 4 tanks, 2 MG42s, couple of DPs, 5 PPSh all in action at once - that is over 200 rounds PER SECOND being introduced to the environment. Thats a lot of ballistic calcs going on at once!
THX for anwering i understad (i know this is the reason why the mg 42 isnt shooting real 1200 rpm) but i just need the calculation method in RO because in Revenge of the Turul i am the guy who made the tank penetration values but sadly i cannot calculate out the BC because the original formula isnt good so i think your team use their own formula for that and i asking for that formula because, i dont find any informations in the scrips how to calculate out it. for the hand weapons i got datas but because the original Bc isnt good it isnt working right. So please tell me how RO calulates BC
 
Upvote 0
Hello,

My understanding of the numbers you posted in the table above is as follows:

PenetrationTable(0)=11 (penetration at 0m is 11 armour points)
PenetrationTable(1)=11 (Penetration at 100m is 11 armour points)
PenetrationTable(2)=10 (Penetration at 200m is 10 armour points)
PenetrationTable(3)=10 (and so on and so on)
PenetrationTable(4)=10
PenetrationTable(5)=9
PenetrationTable(6)=8
PenetrationTable(7)=8
PenetrationTable(8)=7
PenetrationTable(9)=6
PenetrationTable(10)=6 (it looks as though a penetration over 1000m is treated as being as for 1000m and a constant penetration of 6 armour points)

Each tank has a armor factor for front side and rear. I believe the numbers above in the table are armor factor numbers and not ballistic coefficients, but I could be wrong.

My understanding is that 1 armour point is approximately 10mm of armour equivalent at 90 degrees in reality. eg 11 armour points is 110mm of armour.

Regards

Alan.
 
Upvote 0
Hallo,

The tankcannonshell.uc data file for each weapon looks like this: (each one has of course different numbers but the format is almost always the same, this one is taken from the Russian BT7, note that the values are way overblown, no 45mm could ever penetrate 110mm of armour 11 armorfactor in real life)


//===================================================================
// BT7Cannon
//
// Red Orchestra Source - William Miller
// Copyright (C) 2007 Tripwire Interactive, LLC
// edited 2011 by OLt Witti
//
// BT7 tank cannon shell class
//===================================================================
class PzD_BT7CannonShell extends ROTankCannonShell;

defaultproperties
{
MechanicalRanges(0)=(RangeValue=-5.000000)
MechanicalRanges(1)=(Range=250,RangeValue=-40.000000)
MechanicalRanges(2)=(Range=500,RangeValue=-70.000000)
MechanicalRanges(3)=(Range=1000,RangeValue=-145.000000)
MechanicalRanges(4)=(Range=1500,RangeValue=-205.000000)
MechanicalRanges(5)=(Range=2000,RangeValue=-255.000000)
MechanicalRanges(6)=(Range=2500,RangeValue=-265.000000)
OpticalRanges(0)=(RangeValue=0.480000)
OpticalRanges(1)=(Range=250,RangeValue=0.496000)
OpticalRanges(2)=(Range=500,RangeValue=0.512000)
OpticalRanges(3)=(Range=1000,RangeValue=0.542600)
OpticalRanges(4)=(Range=1500,RangeValue=0.588500)
OpticalRanges(5)=(Range=2000,RangeValue=0.644100)
OpticalRanges(6)=(Range=2500,RangeValue=0.705300)
bMechanicalAiming=Wahr
bOpticalAiming=Wahr
PenetrationTable(0)=11
PenetrationTable(1)=11
PenetrationTable(2)=10
PenetrationTable(3)=10
PenetrationTable(4)=10
PenetrationTable(5)=9
PenetrationTable(6)=8
PenetrationTable(7)=8
PenetrationTable(8)=7
PenetrationTable(9)=6
PenetrationTable(10)=6
ImpactDamage=70
BallisticCoefficient=0.700000
SpeedFudgeScale=0.500000
Speed=45806.000000 (divide this by 60 you get metres per second)
MaxSpeed=45806.000000
}

Near the bottom, three lines up is a listing for Ballistic coefficient, my guess is that this is where RO calculates the ballistic coefficient, in other words the curve at which the shell travels through the air once fired.

Hope this is what you are looking for.

Cheers

Alan
 
Upvote 0
thx but i know where i can find the BC in the scripts, i know what is BC, i know how in reallife it is been calculated but my problem is that the guys who made ro the used their own formula for calculating it out, and i dont find any data how to calculate out the BC in RO. So for to be sure i need the RO BC calculation formula
 
Upvote 0
Hallo,

I read somewhere in a similar thread that they just playtested the BC by trial and error until it "looked" right, there was not a lot of science to it. I would link to where I read that, it was from one of the game development team, however I cannot find it.

The BC number itself just describes a mathematical curve, with 0 being a straight line and anything else +ve being a sine curve.

One could try and use the actual BC from the weapon itself and see how that looked ingame, there are plenty of good websites and books with weapon tables in them that describe the flight curve of the shell.

It is something I am looking at doing myself.

Cheers

Alan
 
Upvote 0
this is the only thing what they wright there
BallisticCoefficient; // Ballistic coefficient for this bullet

I really want somebody from TWI who can answer this because as i read the fourms this is not just my problem


Hello,


My one has lots more info in it, here is a copy of the text:

//=============================================================================
// ROBallisticProjectile
//=============================================================================
// Projectiles that do true ballistics calculations. Calculations
// are done in native code for this class and its subclasses when
// the physics are set to PHYS_Projectile
//=============================================================================
// Red Orchestra Source
// Copyright (C) 2005 John Gibson
//=============================================================================

class ROBallisticProjectile extends Projectile
abstract
native;

//=============================================================================
// Variables
//=============================================================================

var float AmbientVolumeScale; // Amount to scale this projectiles ambient sound

// Constants
const ScaleFactor = 18.4; // 18.4 unreal units = 1 foot in our game.
const ScaleFactorInverse = 0.0543; // 1/Scalefactor

// Behavior
var() float BallisticCoefficient; // Ballistic coefficient for this bullet
var float BCInverse;

// Debug
var bool bDebugBallistics; // Set to true to turn on ballistics debugging
var float FlightTime;
var Vector OrigLoc;
var Vector TraceHitLoc;

var bool bTrueBallistics; // If this is true do the true ballistics calcs in native, instead of standard projectile calcs
var bool bInitialAcceleration; // If this is true and bTrueBallistics is true, the projectile will accellerate to full speed over .1 seconds. This prevents the problem where a just spawned projectile passes right through something without colliding
var() float SpeedFudgeScale; // Scales the velocity by this amount. Used to keep the proper ballistic trajectory while making the projectile phyically move slower
var() float MinFudgeScale; // When bInitalAcceleration and bTrueBallistics are true, the projectile will accellerate from MinFudgeScale up to SpeedFudgeScale over InitialAccelerationTime seconds
var() float InitialAccelerationTime;// Time in seconds it takes for the shell to get up to the full SpeedFudgeScale
//=============================================================================
// Functions
//=============================================================================

//-----------------------------------------------------------------------------
// PostBeginPlay
//-----------------------------------------------------------------------------

simulated function PostBeginPlay()
{
local Vector HitNormal;
local Actor TraceHitActor;

Velocity = Vector(Rotation) * Speed;
BCInverse = 1 / BallisticCoefficient;

if (Role == ROLE_Authority && Instigator.HeadVolume.bWaterVolume)
Velocity *= 0.5;

if (bDebugBallistics)
{
FlightTime = 0;
OrigLoc = Location;

TraceHitActor = Trace(TraceHitLoc, HitNormal, Location + 65355 * Vector(Rotation), Location + (Instigator.CollisionRadius + 5) * vector(Rotation), true);

if( TraceHitActor.IsA('ROBulletWhipAttachment'))
{
TraceHitActor = Trace(TraceHitLoc, HitNormal, Location + 65355 * Vector(Rotation), TraceHitLoc + 5 * Vector(Rotation), true);
}
// super slow debugging
//Spawn(class 'RODebugTracerGreen',self,,TraceHitLoc,Rotation);
log("Debug Tracing TraceHitActor ="$TraceHitActor);
}
}

simulated function HitWall(vector HitNormal, actor Wall)
{

if (bDebugBallistics)
{
log("BulletImpactVel = "$VSize(Velocity) / ScaleFactor$" BulletDist = "$(VSize(Location - OrigLoc) / 60.352)$" BulletDrop = "$(((TraceHitLoc.Z - Location.Z) / ScaleFactor) * 12));

if (Level.NetMode != NM_DedicatedServer)
Spawn(class 'RODebugTracer',self,,Location,Rotation);

// ROPawn(Instigator).BulletImpactVel = VSize(Velocity) / ScaleFactor;
// ROPawn(Instigator).BulletFlightTime = FlightTime;
// ROPawn(Instigator).BulletDist = VSize(Location - OrigLoc) / ScaleFactor;
// ROPawn(Instigator).BulletRefDist = VSize(TraceHitLoc - OrigLoc) / ScaleFactor;
// ROPawn(Instigator).BulletDrop = ((TraceHitLoc.Z - Location.Z) / ScaleFactor) * 12;
}

}

defaultproperties
{
AmbientVolumeScale = 1.0;
BallisticCoefficient=0.3 // just a fallback
Physics=PHYS_Projectile
TossZ=0.0
bTrueBallistics=true
SpeedFudgeScale=1.0
MinFudgeScale=0.025
InitialAccelerationTime=0.1
bInitialAcceleration=true

Gru
 
Upvote 0