Ballistics

8 posts / 0 new
Last post
Spidey01
Offline
Last seen: 1 year 11 months ago
Ballistics

this is somethign I've been thinking about since 0800 EST. How to semi-accuratly computate damage/penitration for a FPS game.So far this is what I've come up with.

Take the bullet mass and muzzle volicty and calculate damage done to the target at point blank range. This equals "Raw_Damage" i.e the poetenial damage of a freashly fired round.

based on the factors that make up raw damage, you find how range effects these variables and apply loss of power to raw damage as range increases. (probably after 50-100m). So if you took an MP5 and shot some one 10,000m away and some how automagically hit him he woundn't even feel it.

Impact does raw damage to target, "penitration factor" is raw damage remaining minus object health.

Have a classed set of "impact" based damage multipliers, like

Hits wood door: X loss in power
Hits wood wall: X loss in power
Hits metal door: X loss in power

You get the picture, it would be varie based on raw damage how much penitration you got. A MP5 is weeker then an M4 so it loses more power when it penitrates. Since damage is all ready effected by range a longer range shot would have less penitration.

Finally bullet hits a target, what ever remaining raw_damage is done to target as impact_damage, if the target can't take another hit he/she is dead. Depending on the same factors of weather or not the round penitrates an object also apply. So you could make a MP5 shoot through people but not walls, and a tank shell that shoots through all walls hehehe.

Bullet mass * speed = power - loss for range / loss for objects hit = damage to target if penitration of object hit.

- minus + plus = equal * times / devide

would be like how to figure all I said into trying to shoot some one through a wall.

This is just stuff I've been thinking about, it's not how S4 does it and although I'm modding the game I don't plane to rewrite the unreal engine so don't ask
:alien:

I really want to try to make a test app to do this, with a weapon/bullet hard coded and a target behind a wall and see how damage done comes out.

What yall think, have I missed any important points of how bullet damage should be applied ???

SAS_Webmaster
Offline
Last seen: 1 month 10 hours ago

It's a reasonable model at first glance but there are things you have not considered.

You talk about damage like it can be measured as just a number. That is a fair model at some level, but really it's not enough.

You assume that damage will be less from a slower bullet. I am no expert but I expect that is not always the case. It will depend on the type of bullet and the type of target. Using my imagination here, if what you are shooting is a steel plate, slowing the speed will probably cause less damage. If you are shooting a body, perhaps a bullet would fragment more, damaging more flesh.

Does bullet orientation matter? What about a bullet that penetrates something then tumbles? Having hit an object could actually increase the damage caused to a soft target.

You need to clarify your equation. Do you mean:

mass*speed=power

(power - loss for range) / loss for objects = damage

?

SAS_WIZ
Veteran
Veteran
Offline
Last seen: 2 months 2 weeks ago

well an MP5 has less range than an M4, we know the cyclic rates of the weapons but we dont know there velocities. Plus the velocity will change depending on round type, due to mass. Also does the temperature of weapon (therefore conducted to round) effect velocity. Remembering that initial velocity effects the range, so for example if a hot round had a greater mass than a cold round of the original same mass, would that make the Mp5 have greater damage than the M4 at the same distance. Also i would imagine that altitude/ air pressure had a direct effect on the rounds flight too, as higher air pressure would resist the round more, forcing it off course. Also to bear in mind at point blank range is that the damage will be negligable for almost any military weapon, They will all make a hole in your vital organs, of course this is not correct for exit wounds, but hey were not making a pathologists game.

SAS_WIZ

Spidey01
Offline
Last seen: 1 year 11 months ago

Hooah, Feedback! I love it.

As far as computers are concerned I only know how to model damage done to a target using the idea of numbers, => N dmg kills while keeping calculations to differentiate between weapon charaistics.

The computation is:

Bullet Mass and Speed for lack of better ability equal the sum total of damage the round can do. Say a 1kg round @ 2200meters per second. We use this to figure what happens to the round, mathamaticly as close to real life as we can. (wind resisitance, resilence to penitration e.t.c.)

Raw damage, what the round can do if I stuck the muzzle in a tangos back and fired.

Loss do to range, as the bullet passes N distance it losses X power (raw damage) so a 20m shot packs more then a 200m one.

Hiting an object, gets remaining raw damage done to it if it penitrates a multiplier is used to reduce damage X with the multipler being based on mass & speed of round hitting the objects mass. So rounds lose more power if they go threw metal then wood. S4 uses mass of the target per object /w speed to penitrate it. I'd just be doing it as part of the penitration code instead of object properties. I.e. all wood doors have same level of "armor"

If it does penitrate based on mass/speed of round and raw damage of said round a multipier repisenting the power left from that penitration is fomulated to raw damage. Raw damage is then done to next object e.t.c. till it hits target or losses all of it's moementium be hitting max range or something it can't penitrate.

raw damage continulessly losses power as it files and hits and whats left is delt to the target.

So something like

bullet mass + speed factored to damage - Xloss per range factor, - X loss per penitration untill it hits a player and does remaining X to target.

Of course for realism it takes getting close enough to bullet mass/muzzle volicty (which can be gotton) and the general mass of an object generalized for gaming sake. Plus a method of figering out much range effects that.

If you want me to make more sense, I'll have to eat first:)

All feed back is very welcome.

SAS_WIZ
Veteran
Veteran
Offline
Last seen: 2 months 2 weeks ago

A 1kg round is close to real life? Whooaa Spidey's adding AS90 Bravehearts to SWAT4 yeee hah, come to daddy. dont you mean 1g? A 1kg round sure wouldnt fit into a 9mm case mate.

SAS_WIZ

Spidey01
Offline
Last seen: 1 year 11 months ago

For the sake of Discussion m8 Smile

Just to get it out of my head, and into view let's say, again without real world numbers. Say we got a gun, a wall, and a tango.

bullet mass times muzzle volicity divided by 100 = raw damage. Where mass/speed are equal to the real word and chopped up into some managibable variable where you can realisticly compare the poetential for blowing up barn doors. Let's say MP5, M16, AK47, M82 = 25, 50, 75, 100 values to raw damage respectivly. For every 100m the bullet travels down range they lose 5% of raw damage.

wood wall requires a round inbetween a MP5/M16 before it will penitrate it. Range 200M. Round hits, MP5's mass/speed is to little to penitrate so raw damage is done to the wall. M82 being a big cannon is over kill,penitrates the wall. So raw is now 90% and say physiscs say after going through that wall a round losses 15% of it's power so raw is now 75%. The tango is another 200M away so when the round hit's (200M total) it's down to 65% of what raw damage was when it actually hits the guy. The guys got no armor, so it penitrates and does a slightly smaller portion of raw damage to the guy behind e.t.c.

Now step aside from the wall and do it directly. Joe get's knocked apart with all the power of the round being fired, minus the range loss. (80% of M82s raw dmg). Not that a M82 would lose so much punch at so close range.

/* The values used are purly for the value of discussion, they are only place holders */

One idea I though of would be weather a round should richoshay or "stick in" an none killable object when it fails to penitrate. To keep it simple rather then overly complex (imho) It would be most easierly implemented via when the round hits a wall. Take two variables ask the OS to give you memory for them, If the address in memory is A B it richoshays off, if it's equal it'd of course have been able to penitrate ^_^

And Wiz I did say I was not going to rewrite the Unreal 2.x engine all by my lonesome, although I might tweek a few things on the engine side of the mod.

To redo the unreal s4 physiscs which is a real good name for them Blum 3 would take so much changing it would be [SAS] 4 not SWAT 4 mod hehe.

SAS_WIZ
Veteran
Veteran
Offline
Last seen: 2 months 2 weeks ago

funny that. Im of Irish descent, my aunt used to live next door to that bullet dodger.. Rick 'o' Shay

SAS_WIZ

Spidey01
Offline
Last seen: 1 year 11 months ago

Just in case any one is interested (I doubt it) I worked on a *very* basic concept work. I've added allot of extra comments, mostly as to whats happening and how to follow reading it.

/* A simple ballistics engine concept program */ #include <stdio.h> static int raw_damage; // global perm. Damage container. //handles fireing struct shoot { float mass; // bullet mass int vspeed; // muzzle volicity }; void fire() { struct shoot down_range; down_range.mass = 1.25; down_range.vspeed = 2200; raw_damage = down_range.mass * down_range.vspeed / 100; int range = 500; //500m to taget int tmp; int start = 0; // fired from if (start < range) { tmp = range / 100; raw_damage - tmp; //loss from range //return to main } } int wall() { int wall_strength = 1; if (wall_strength > raw_damage) { raw_damage = 0; //bullet stopped } if (wall_strength < raw_damage) { raw_damage - wall_strength; //goes through wall } //return to main } main() //program starts running here { int guy = 1; // our bullseye int G36; // just for fun fire(); //shoot the G36 read fire() wall(); // You aimed for a wall!? read wall() int impact = raw_damage - guy; //We killed a tango if (raw_damage >= guy) { printf("Tango down\n"); } if (raw_damage < guy) { printf("That was a really bad shot\n"); //He lives! } }

With the comments and some sense it's easy enough to see whats going on, just follow main() to fire() main() to wall() back to main again. With my indentation preserved (I hope), it should be easy enough on the eyes.

Heres a chart of operatorss/symbals

// and /* */ = comments int = integer, i.e hole number float = a decimel number for all intents and purposes here. < equal less then > equal greater then <= less then or equal to >= greater then or equal to Variable = Varule means just that + equal add - equal subtract * equal multiply / equal divide

It's not exactly what I have in mind, and the figures are still place holder. Treated a wall about the same as the tango for quicknesses sake rather then setting up stuff for mass & speed effecting raw power rather thne a "hitpoint" type wall.

B.T.W. The end damage done to guy was 27, but I don't have time to do any extra checking on the "range" calculation.