Jump to content

Rocket Scatter Overhaul


Amineri

Recommended Posts

I've been working on a modlet that complete overhauls the Rocket Scatter mechanic.
I'm posting up some of the ideas I'm working toward so I can get some feedback and how to configure it to make it easier to balance.
The existing Rocket Scatter mechanic does the following:
  • Computes Scatter Chance
  • Rolls against scatter chance, same as any other to-hit roll
  • If hits, then rocket lands exactly at aim point
  • If misses, then rocket scatter by 10 to 24 degrees -- amount of angle is uniformly chosen
The scatter chance is notionally a formula based on (<soldier Aim stat> - <some amount for distance>), but it is clamped to be no lower than 90%, and Heavy aim is generally low, so in practice it is a fixed 90% scatter chance.
This leads to two issues (in my opinion)
  1. Aim is an un-important statistic for a Rocket-using soldier
  2. Scatter varies wildly between perfect accuracy and completely wild shots
----------------------------------
There are two separate aspects to the modlet:
  1. Altering range / movement characteristics of rockets
  2. Altering scatter chance rules
Range / Movement
I found the range characteristics of rockets while digging through the code relating to grenade throw range and the Bombard perk (this mod will include changes to the Bombard perk as well).
Currently both rocket abilities (regular and shredder) are capped to no more than visual range.
This modlet will change the maximum targeting distance of the rocket abilities to be defined by the iRange field for the Rocket/Blaster Launcher. In practice a maximum range of about 60-70 is the limit due to limitations of the camera -- the camera is locked to stay within sight distance of the rocket firing unit. I'm not sure why this is so yet, as grenades do not exhibit this behavior. Regardless, 60-70 units is around 40-45 tiles ... quite a substantial range increase.
I have included the option for a new perk (using ePerk_FirstBlood = 29) that increases Rocket range by 34%. (number can be configured via a hex edit).
I've also included code that reduces the maximum range of the rocket abilities to 50% (and capped at visual range) if the unit moved. Note that this does not allow the unit to move and fire a rocket : that capability has to be unlocked separately.
I'm considering decreasing the amount of range penalty if the Rocket-using soldier has the SnapShot perk (normally useful only for Snipers). In that case the range penalty would be reduced to 75% of maximum, with no limitation to visual range.
-------------------------------------
Scatter chance rules:
The new scatter mechanic I'm working on is a little bit more mathematically sophisticated than most of the randomization I've seen in vanilla XCOM.
  • All rocket shots always scatter
  • It uses two normally distributed (bell curve) random values to adjust the aim point in both the range and cross range
  • Amount of scatter scales linearly with distance -- longer range shot means more scatter
  • Amount of scatter scales with soldier aim -- higher aim means less scatter
  • Blaster Launcher will now scatter, but 50% less than the Rocket Launcher
The basic formula for scatter is:
ave_scatter = base_scatter / (soldier_aim - 40)

This is the average amount of scatter, measured in XCOM distance units, at a distance of 20 (~13.33 tiles) from the soldier. The base_scatter amount is set using the MIN_SCATTER field in the DGC.ini. Note that 3 XCOM distance units is about 2 tiles. Soldier visual range is defined as 27, which in practice works out to about 18 tiles.

I found that a base_scatter amount of 70 provided a decent amount of scatter for rookie soldiers.
Examples:

base_scatter = 70, soldier_aim = 65 (hypothetical rookie, for lower bound)
ave_scatter = 70 / (65 - 40) = 70 / 25 = 2.8
2.8 is the average amount of scatter applied in both range and cross range at a distance of 20 (mathematically it is the std dev of the normal r.v.)
In tiles, 2.8 ~= 1.87 tiles
The total average scatter is sqrt(2) * this amount, or 3.9 distance = 2.6 tiles
At visual range of 27:
average scatter is increased by 27/20 to 3.78 distance = 2.52 tiles in range and cross-range
total average scatter distance is 5.27 distance = 3.51 tiles
In comparison, the default explosion radius of the rocket launcher iRadius = 336, which translates to 5.25 distance = 3.5 tiles.
At maximum range, with rookie aim, the average scatter ~= blast radius. For a normally distributed r.v. this means there is ~68% chance that the target point will be within the blast radius. At closer ranges the odds are improved considerably.
Higher aim reduces scatter considerably. Increasing aim from 65 to 90 halves the amount of scatter at a given range.
At visual range of 27, with aim = 90, the total average scatter distance would be reduced to 2.63 = 1.76 tiles.

Having scatter amount based on aim encourages the use of scopes and makes higher ranked soldiers more accurate with rockets than lower rank soldiers.
As a further possibility, I'm considering adding an increase to the amount of scatter if the soldier has moved. Default would be doubling the amount of scatter if the soldier has moved this turn. Note that this would not allow the fire rocket ability to be used .. that would have to be unlocked separately (most likely by removing eWP_MoveLimited from the Rocket Launcher)
I'm also considering making the SnapShot perk reduce the amount of scatter increase for rocket-using soldiers. By default I'm thinking that the scatter amount would be increased by only 50% if the soldier had ePerk_Snapshot.
--------------------------------------------
To help provide feedback to the player, instead of a to-hit number, the UI will display the average amount of scatter for the current shot location (which depends on both the range and the soldier's aim).
Following is a sample screenshot showing all of this in action. Note that I turned off the fog of war (using the dev console). I also had set the maximum range to be 60 for this test.
http://wiki.tesnexus.com/images/1/1d/Rocket_Scatter_preview.jpg
This example is using a squaddie Heavy (67 aim, so minimum). The range is at about +60% of normal maximum range.

Also, you might notice that the Rocket-using soldier is equipped with an Assault Rifle instead of an LMG ... consider this a sneak preview :smile:

The 5.1 scatter number in the infobox indicates that the average amount of scatter for this shot is ~5.1 tiles. Comparatively, rocket radius is 3.5 tiles, which makes it fairly likely to completely miss at this range.
The targeting reticle shows 10x the scatter number, displayed with a "%" still. This display is coded in the TargetingReticle actionscript, making it a bit hard to get at, so I'm leaving it alone for now.
---------------------
Any thoughts / suggestions / feedback on this would be greatly appreciated.
Link to comment
Share on other sites

I love it!

Thinking about visualizing the effect in-game... ¿could it be possible to apply the same scatter formula to display that blue bubble randomly poping up at different places around the mouse cursor, according to *possible* scatter values? I've come fond of the trembling bubble that shows with explosives random radius, it's kind of it feels less certain than a number, even if you know the numbers. Not sure how it could feel that in game though, it may end looking like a mass of boiling water with all this bubbles poping around the target.

 

Another idea I've had is to alter the rocket radius *before* shooting so it displays the area where the explosion can be centered, depending on distance and soldier's skill, so the further it aims the bigger it's. This way there's no telling of the possible area of the explosion, so you have to guess that. Then on using the ability and once the center of the explosion has been established, the radius could revert back to it's value in order to calculate the actual blast radius. Testings with explosives random radius have confirmed that radius gets re-calculated upon using the ability, so the last displayed radius isn't necessarily the one applying in game, ergo we can display a radius (and hopefuly a position) and actualy use another one. So this way you'd have a steady blue circle that would grow larger as you aim it further, but that would only tell you where the rocket may fall, so you'd got to picture the blast area in your mind (and this combined with big randomness factor like up to radius x2 can be pretty interesting) so no certainty at all about the possible outcome

 

And last, since you're meddling with this matters, and as I know you have plans regarding weapon damage customization... could shotguns be tweaked so their radius increases with distance and the damage gets reduced? Maybe the AoE increase can be small, just covering 3 tiles wide at max range wich can deal 1 dmg or 2, but having shotguns do greater damage when closer would be very nice. In fact maybe every ballistic weapon could do extra damage at close range, perhaps a constant +1...

 

Any possibility to apply this same principles to hand grenades? Maybe using a lower scatter value, or the same one because they're thrown closer so they'll get more accurate.

 

A perk or an equipment a la "Laser-guided rockets" that grants 100% accuracy? Only on enemies that have been holo-targeted? (so you'd need both, the laser or thermic rocket-guide device and holo-targetting an alien)... Some sort of magnetic device that increases accuracy agains robotic units?

 

What about the blaster launcher? The animation suggest it's pretty accurate... maybe it could have some other sort of drawback, ... maybe instead of having greater range and lower accuracy it could require squadsight (if it were a targeted ability) so it requires visual contact for at least one xcom unit; or make it cannot be used after moving while regular rocket launcher do; or since it's so slow it could trigger the "flush" animation so the aliens around rush for cover, so big explosion but only those really close to the center get damaged... that'd be hilarious

 

Anyway you're doing a great job, I'm sure I'll love any final form this mod takes

Link to comment
Share on other sites

@ anUser

 

Wow, lots of great ideas :)

 

First off, could you give me some clues as to how you got the SnapShot perk to combine with the Rocket Launcher? I'd really like to make it so that a perk is necessary to unlock the move/shoot-with-rocket launcher ability, but I'm not sure how.

 

--------------------

 

So far I haven't played at all with the damage radius of the rockets, just the scattering mechanism. I might work on some a mod later to alter radius, but two random effects on top of each other (random scatter + random radius would be quite a bit :o )

 

Your radius randomization mod should be perfectly compatible with this, though, so combining the two should generate interesting results :)

 

I tried to alter the Frag Grenade ability to give the the eProp_ScatterTarget like Fire Rocket and Shredder Rocket, but it didn't work properly so there must some other factor going on. Further, when I increased grenade range to 100, I discovered that the camera is not locked to stay within visual range of the throwing unit as is the case with the rocket ablility.

 

I like the idea about increasing the displayed blast radius to simulate the area in which the rocket could land, but I'm a little concerned that it would be confusing, since players are already conditioned to expect the displayed blast radius to be the size of the blast.

 

Shotgun damage ... I'll take that into consideration when I start working on the new damage randomization stuff. It should be possible to smoothly (continuously) adjust the mean of the normal distribution that the damage is drawn from. Reducing damage by 0.2 shifts the odds to slightly increase the chance of a lower damage shot and decrease the chance of a higher damage shot, even though the damage range may not shift.

 

Unfortunately many of the aim-related perks don't apply to Rockets, because there is no targeted unit. This includes Height Advantage, Damn Good Ground, Holotargeting, etc. Things that do affect Heavy aim are Scopes, Combat Drugs (I think), the Aim ability.

 

Similarly, it's unknown to the code whether there is a robotic target in the blast radius. Well, at least I'm not sure how to find it. Clearly it knows when an XCOM soldier is in the blast radius, but I'm not sure where that code is or how to feed the info back to the scatter code. Might be possible.

 

Blaster Launcher is a bit of a puzzle how to handle. It's definitely going to have non-LOS operation. My current default design is that it would have 1/2 the scatter (so in the hands of a high-rank soldier it will be very accurate), and has the built in +50% damage. To balance that I figured I'd give it a slightly lower radius than the Rocket Launcher. The scatter amount for the Blaster Launcher is a constant value hex edit, so it's pretty easily changed. Range for both Rocket/Blaster Launcher is configured in the DGC.ini, so should be easy enough to reconfigure. It's also possible to set the Blaster Launcher to have a slightly smaller (or larger) blast radius than the Rocket Launcher.

 

When I get to the point of trying to add a new weapon, the first thing I'm going to try is adding a third Rocket Launcher option to sit in between the Rocket Launcher and Blaster Launcher, since Rocket Launcher is a starter item and Blaster Launcher is pretty late game. Maybe an "Alloy Launcher".

 

-------------------

 

Thanks for the encouragement. An alpha version should be out as soon as I add in the additional scatter for moving and do a little initial testing to weed out the obvious problems.

Link to comment
Share on other sites

I think I didn't anything special to get the snap shot perk working with rockets, maybe that was when I had the rocket launcher in the Assault class in the small item slot... or removing the backpack or secondary property in the ini. Definitively I did it editting the ini file, no hex edit.

 

If the scatter formula or function could be called from GetDamageRadius iirc you could get this "boiling water" effect, with the blue bubble showing the actual radius but moving constantly from one place to another to show where it might be placed. If combined with random radius it's totally boiling water, but if not it's only the real blast area moving slightly but swiftly around the cursor.

Link to comment
Share on other sites

My concern is that there be a means to adjust the basic amount of variation in scatter.

 

By which I mean a 'tile' represents, what? 3 feet? So your example image has a scatter possibility of 15.3 feet? The US M72 LAW has an effective range of 200 meters. Even for rookies, that is too much scatter for the range represented, though not necessarily at 200 meters, based upon my RL experience (as a rookie). Now, coupled with the ammo mod that enables more than one chance to use a rocket, scatter variation gives an excellent reason to desire more that one shot. But just a one tile variation turns the rocket from a reasonable shot to a 1 in 9 chance of hitting the target. A 5 tile variation makes it worthless: 1 in 100 tiles. Yes, the chance of inflicting some damage is higher, but no-one is TRYING for a near miss. (A hit on the cover instead of the alien, yes; but that's really just a different target point.)

 

May I suggest what would make the difference in appeal to a player (as opposed to creators trying to make the game more difficult) in this mod is tying the damage inflicted to the amount of scatter variation, rather than the chance to hit.

 

-Dubious-

Edited by dubiousintent
Link to comment
Share on other sites

I suppose it depends on the way you look at it.

 

With an explosion radius of 3.5 tiles, a variance of 1 tile means a 100% chance that the targeted square will be hit by the blast. What we're really talking about here is the possibility of hitting multiple aliens, especially multiple aliens that are near the edges of a targeted blast.

 

A lot of it depends on how many rocket shots are available, and what aim boosts are granted to the Rocketeer. Part of my inspriration for working on this mod was to correct the (perceived) dichotomy between perfectly accurate and wildly inaccurate shots, partly to make aim have meaning for a soldier whose primary armament is the Rocket Launcher, and partly to put in place a balance factor to allow for extending Rocket Range beyond visual range.

 

The current 90% fixed perfect accuracy would be quite broken if Rocket range were extended to double visual range, I think.

 

That said, I have put in place a pretty straightforward way to configure the overall deviation scaling. I've taken over the MIN_SCATTER DGC.ini variable to provide scaling.

 

With regard to RL weapons and their representations in the game, it's good to draw some inspiration, but clearly there is already a lot of abstraction going on. Presumably "rookies" aren't truly fresh-out-of-bootcamp soldiers, just rookies at fighting aliens. Yet at a distance of 9 tiles (27 feet by your estimation), they only have a 2/3 chance of hitting a completely exposed target with an assault rifle, which is pretty horrendous aim. That's just the way the game is modeled to make it entertaining, so I've tried to work up a system that can be balanced against that kind of 'power level'.

 

Sorry for the continuing delays ... I keep finding things I've forgotten to put in.

 

I verified that removing the eWP_MoveLimited allows the Rocket Launcher to be shot after moving. I've got a decrease in range and an increase in scatter as a result of moving to try to balance that a bit. I've also put in code to reduce the scatter increase if the Snapshot perk is taken, but I forgot to reduce the amount of range loss if the perk is taken.

 

Hopefully soon :)

Link to comment
Share on other sites

Okay, here it finally is!

 

Finally have the code running in what (I hope) is a good enough state for some beta testing.

 

This is really two modlets merged into one, but they interact a bit so I combined them together. The first part revises the free aim distance calculations, including changes to the Bombard perk as well as Rocket abilities. The second part revises the Rocket Scatter algorithm completely.

 

Features:

  • Makes Bombard perk work if granted to XCOM soldiers
  • Makes Bombard perk work with Frag Grenades, Smoke Grenades and Battlescanners in addition to Alien Grenades
  • Revises Bombard effects to +50% range as defined by weapon (default value) (original made it equal to visual range)
  • Adjusts AI so alien units plan for the altered Bombard distance
  • Makes Fire Rocket and Shredder Rocket abilities use the distance defined on the Rocket/Blaster Launcher (original was limited to visual range)
  • Added support for new "Javelin Rockets" perk (ePerk_FirstBlood = 29) that grants +34% (default value) range to rocket abilities
  • Firing a rocket after moving reduces maximum range to 50% of normal (stacks with above perk)
  • If soldier has ePerk_Snapshot = 16, maximum range is instead reduced to 67% of normal
  • Complete rework of rocket scatter mechanics
  • Rockets always scatter, but amount of scatter is dependent on soldier aim
  • Rocket scatter scales linearly with range
  • Rocket scatter distance is based on a bell curve, not uniformly distributed
  • Average number of tiles of scatter is displayed and updated dynamically as the cursor is moved
  • Rocket scatter is +100% (default) if the soldier moved before firing
  • If soldier has ePerk_Snapshot, Rocket scatter is only increased by +50% (default)
  • Blaster Launcher should now scatter but only 50% of the amount of the Rocket Launcher
  • Blaster Launcher still can fire non-LOS
  • Scatter amount can be controlled by changing the MIN_SCATTER value in the DGC.ini

Following are the hex code changes to implement the modlet:

 

 

 

Cumulative changes to Free Aim distances and Rocket Scatter Mechanics:


XGAbility_Targeted.RollForHit -- portion altered that controls Rocket Scatter -- any ability with eProp_ScatterTarget = 45 

original hex, scatter portion: (1098 bytes) (0x612=1554 memory) +456  (total virtual 0x1665)
07 BF 06 84 82 77 00 D1 7C 00 00 2A 16 18 22 00 72 19 00 D1 7C 00 00 09 00 DE 82 00 00 00 01 DE 82 00 00 2A 16 16 18 1F 00 82 1B 9A 36 00 00 00 00 00 00 24 21 16 18 0E 00 81 1B 77 36 00 00 00 00 00 00 26 16 16 16 16 07 98 04 1B 9A 36 00 00 00 00 00 00 24 2D 16 0F 00 D5 7C 00 00 E1 D8 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 01 12 BC 00 00 16 16 0F 00 D6 7C 00 00 38 3F 1B 8A 34 00 00 00 00 00 00 00 D5 7C 00 00 16 0F 00 D2 7C 00 00 12 20 BC 4D 00 00 2C 00 6B 4D 00 00 00 1C 6E 4D 00 00 2C 64 A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 07 09 02 84 B2 38 3F 00 D2 7C 00 00 00 D6 7C 00 00 16 18 35 00 19 19 00 D1 7C 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 5C 7D 00 00 00 1B F6 3C 00 00 00 00 00 00 16 16 06 7D 04 0F 00 CE 7C 00 00 D8 01 12 BC 00 00 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 16 0F 35 3B FA FF FF 5E F9 FF FF 00 01 00 CD 7C 00 00 38 44 AB 1E 5E 0B 36 43 38 3F 92 2C 0A 12 20 BC 4D 00 00 2C 00 6B 4D 00 00 00 1C 6E 4D 00 00 2C 0F A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 16 16 07 2C 03 9A 12 20 BC 4D 00 00 2C 00 6B 4D 00 00 00 1C 6E 4D 00 00 2C 02 A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 25 16 0F 35 3B FA FF FF 5E F9 FF FF 00 01 00 CD 7C 00 00 8F 35 3B FA FF FF 5E F9 FF FF 00 00 00 CD 7C 00 00 16 0F 00 CE 7C 00 00 61 14 00 CE 7C 00 00 00 CD 7C 00 00 16 0F 00 CF 7C 00 00 E2 00 CE 7C 00 00 16 0F 00 D4 7C 00 00 AE AB 1E 00 00 20 40 38 3F 2C 64 16 38 3F 12 20 BC 4D 00 00 37 00 6B 4D 00 00 00 1C 6E 4D 00 00 38 44 AB 1E 00 00 C0 3F 38 3F 2C 64 16 A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 16 B7 00 D4 7C 00 00 38 3F 2C 64 16 B8 00 D4 7C 00 00 AE 00 D5 7C 00 00 38 3F 2C 0A 16 16 0F 01 12 BC 00 00 D7 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 D4 00 CF 7C 00 00 00 D4 7C 00 00 16 16 19 00 D1 7C 00 00 13 00 00 00 00 00 00 1B FB 62 00 00 00 00 00 00 01 12 BC 00 00 16 19 01 E6 7B 00 00 13 00 00 00 00 00 00 61 18 1E 00 00 40 40 28 21 98 19 00 00 00 00 00 00 4A 16 14 2D 01 E2 BB 00 00 28 14 2D 01 22 BC 00 00 27 06 B3 06 0F 01 1A BC 00 00 AC E1 D8 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 01 12 BC 00 00 16 16 38 3F 2C 40 16 0F 01 17 BC 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 A5 00 CE 76 00 00 00 1B C8 0E 00 00 00 00 00 00 38 3A 19 01 E8 BB 00 00 0A 00 E8 9B 00 00 00 1B 92 30 00 00 00 00 00 00 16 19 19 01 E6 7B 00 00 0A 00 63 B4 00 00 00 1B 7B 31 00 00 00 00 00 00 16 09 00 C3 A2 00 00 00 01 C3 A2 00 00 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 01 1A BC 00 00 19 01 E6 7B 00 00 0A 00 B2 33 00 00 00 1B 18 3E 00 00 00 00 00 00 16 16 14 2D 01 E2 BB 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 59 00 DC 76 00 00 00 1B 93 5E 00 00 00 00 00 00 AB 38 3F 01 17 BC 00 00 1E 0A D7 23 3C 16 19 19 01 E6 7B 00 00 0A 00 63 B4 00 00 00 1B 7B 31 00 00 00 00 00 00 16 09 00 C3 A2 00 00 00 01 C3 A2 00 00 00 D7 7C 00 00 16 07 B3 06 2D 01 E2 BB 00 00 06 B3 06 1B C3 0E 00 00 00 00 00 00 16 04 0B 



new hex: (1057 file bytes) (total virtual 0x1665) 
07 BF 06 84 82 77 00 D1 7C 00 00 2A 16 18 22 00 72 19 00 D1 7C 00 00 09 00 DE 82 00 00 00 01 DE 82 00 00 2A 16 16 18 1F 00 82 1B 9A 36 00 00 00 00 00 00 24 21 16 18 0E 00 81 1B 77 36 00 00 00 00 00 00 26 16 16 16 16 0F 00 CE 7C 00 00 D8 01 12 BC 00 00 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 16 0F 01 1A BC 00 00 E1 00 CE 7C 00 00 16 07 70 05 1B 9A 36 00 00 00 00 00 00 24 2D 16 0F 00 D5 7C 00 00 12 20 BC 4D 00 00 2A 00 6F 4D 00 00 00 1C 71 4D 00 00 A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 0F 00 D4 7C 00 00 12 20 BC 4D 00 00 2A 00 6F 4D 00 00 00 1C 71 4D 00 00 A8 A8 38 57 01 04 FA FF FF 38 57 61 1C 16 16 38 57 1C B5 FC FF FF 16 16 16 0F 00 D2 7C 00 00 AB C1 BA AB 1E 00 00 00 40 C0 00 D5 7C 00 00 16 16 16 16 BC AB 1E DB 0F C9 40 00 D4 7C 00 00 16 16 16 0F 00 D6 7C 00 00 AB C1 BA AB 1E 00 00 00 40 C0 00 D5 7C 00 00 16 16 16 16 BB AB 1E DB 0F C9 40 00 D4 7C 00 00 16 16 16 0F 00 D4 7C 00 00 12 20 23 78 00 00 09 00 70 0F 00 00 00 02 70 0F 00 00 B7 00 D4 7C 00 00 38 3F 93 FA 2C 32 19 01 E6 7B 00 00 0A 00 16 B3 00 00 00 1B BE 33 00 00 00 00 00 00 16 16 2C 28 16 16 07 34 03 97 19 01 E6 7B 00 00 09 00 B6 30 00 00 00 01 B6 30 00 00 25 16 07 24 03 19 19 01 E6 7B 00 00 0A 00 63 B4 00 00 00 1B 7B 31 00 00 00 00 00 00 16 0C 00 EA A2 00 00 00 1B B8 36 00 00 00 00 00 00 2C 10 16 B6 00 D4 7C 00 00 1E 00 00 C0 3F 16 06 34 03 B6 00 D4 7C 00 00 1E 00 00 00 40 16 07 7B 03 19 19 00 D1 7C 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 5C 7D 00 00 00 1B F6 3C 00 00 00 00 00 00 16 B6 00 D4 7C 00 00 1E 00 00 00 3F 16 0F 35 3B FA FF FF 5E F9 FF FF 00 01 00 CD 7C 00 00 38 44 AB AB BE AC 00 D4 7C 00 00 1E 00 00 A0 41 16 16 00 D2 7C 00 00 16 1E E0 F8 22 46 16 0F 00 CE 7C 00 00 61 14 00 CE 7C 00 00 00 CD 7C 00 00 16 0F 00 CF 7C 00 00 E2 00 CE 7C 00 00 16 B6 00 D6 7C 00 00 AB 00 D4 7C 00 00 AC 01 1A BC 00 00 1E 00 00 A0 41 16 16 16 B8 00 D6 7C 00 00 01 1A BC 00 00 16 0F 00 CE 7C 00 00 01 12 BC 00 00 0F 01 12 BC 00 00 D7 19 01 E6 7B 00 00 0A 00 D7 32 00 00 00 1B FE 32 00 00 00 00 00 00 16 D4 00 CF 7C 00 00 00 D6 7C 00 00 16 16 19 00 D1 7C 00 00 13 00 00 00 00 00 00 1B FB 62 00 00 00 00 00 00 01 12 BC 00 00 16 07 EE 04 B1 E1 D8 00 CE 7C 00 00 01 12 BC 00 00 16 16 1E 00 00 A0 43 16 19 01 E6 7B 00 00 13 00 00 00 00 00 00 61 18 1E 00 00 40 40 28 21 98 19 00 00 00 00 00 00 4A 16 14 2D 01 E2 BB 00 00 28 14 2D 01 22 BC 00 00 27 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 00 D6 7C 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 06 B3 06 0F 01 17 BC 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 A5 00 CE 76 00 00 00 1B C8 0E 00 00 00 00 00 00 38 3A 19 01 E8 BB 00 00 0A 00 E8 9B 00 00 00 1B 92 30 00 00 00 00 00 00 16 2A 2A 19 01 E6 7B 00 00 0A 00 B2 33 00 00 00 1B 18 3E 00 00 00 00 00 00 16 16 14 2D 01 E2 BB 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 59 00 DC 76 00 00 00 1B 93 5E 00 00 00 00 00 00 AB 38 3F 01 17 BC 00 00 1E 0A D7 23 3C 16 2A 00 D7 7C 00 00 16 1B C3 0E 00 00 00 00 00 00 16 04 0B 


--------------------------------------------------------------

XcomGame.int

Localization change:
m_sOverheatedHelp="This weapon is overheated. You must wait for it to cool down."

change to:
m_sOverheatedHelp="scatter"


--------------------------------------------------------------


Rewrite XGAbility_Targeted.GetScatterChance to return expected Rocket Deviation

original hex:
header:
DF 7C 00 00 50 55 00 00 00 00 00 00 C7 7C 00 00 00 00 00 00 00 00 00 00 CA 7C 00 00 00 00 00 00 ED 02 00 00 6A 65 00 00 79 01 00 00 01 01 00 00 

body: (257 file)
07 6B 00 82 77 19 1C 69 FC FF FF 16 09 00 B9 F9 FF FF 00 01 B9 F9 FF FF 2A 16 18 3F 00 19 2E DA 72 00 00 19 1C 69 FC FF FF 16 09 00 B9 F9 FF FF 00 01 B9 F9 FF FF 0A 00 15 6F 00 00 00 2D 01 15 6F 00 00 16 04 2C 64 0F 00 CA 7C 00 00 AC 00 CA 7C 00 00 38 3F 2C 60 16 0F 00 C8 7C 00 00 38 3F 93 1A 26 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 FB 38 44 AB 1E CD CC 4C 3E AA AF 00 CA 7C 00 00 38 3F 2C 0F 16 38 3F 2C 02 16 16 25 2C 28 16 16 07 2C 01 B0 00 C8 7C 00 00 12 20 23 78 00 00 09 00 70 0F 00 00 00 02 70 0F 00 00 16 0F 00 C8 7C 00 00 12 20 23 78 00 00 09 00 70 0F 00 00 00 02 70 0F 00 00 06 4D 01 07 4D 01 B1 00 C8 7C 00 00 38 3F 2C 64 16 0F 00 C8 7C 00 00 1E 00 00 C8 42 0F 01 19 BC 00 00 38 44 00 C8 7C 00 00 04 38 44 00 C8 7C 00 00 04 3A C9 7C 00 00 53 

new hex: (virtual 0x161) 
header:
DF 7C 00 00 50 55 00 00 00 00 00 00 C7 7C 00 00 00 00 00 00 00 00 00 00 CA 7C 00 00 00 00 00 00 ED 02 00 00 6A 65 00 00 61 01 00 00 01 01 00 00 

body:
0F 00 C8 7C 00 00 AB AC 12 20 23 78 00 00 09 00 70 0F 00 00 00 02 70 0F 00 00 38 3F 93 FA 2C 32 1A 26 19 01 E6 7B 00 00 09 00 0D 31 00 00 00 01 0D 31 00 00 16 2C 28 16 16 AB AC 00 CA 7C 00 00 1E 00 00 F0 44 16 AB C1 38 3F 2C 02 16 38 3F 2C 0A 16 16 16 07 F4 00 97 19 01 E6 7B 00 00 09 00 B6 30 00 00 00 01 B6 30 00 00 25 16 07 E4 00 19 19 01 E6 7B 00 00 09 00 0A 31 00 00 00 01 0A 31 00 00 0C 00 EA A2 00 00 00 1B B8 36 00 00 00 00 00 00 2C 10 16 B6 00 C8 7C 00 00 1E 00 00 C0 3F 16 06 F4 00 B6 00 C8 7C 00 00 1E 00 00 00 40 16 07 3E 01 19 19 01 E6 7B 00 00 09 00 0A 31 00 00 00 1B CC 32 00 00 00 00 00 00 16 0C 00 56 A6 00 00 00 1B 83 36 00 00 00 00 00 00 24 13 16 B6 00 C8 7C 00 00 1E 00 00 00 3F 16 0F 01 19 BC 00 00 38 44 00 C8 7C 00 00 04 01 19 BC 00 00 0B 0B 0B 53 

--------------------------------------------------------------

Change to part of XGTacticalHUD_InfoPanel.Update to diplay scatter amount

original hex: 0xC94
07 EC 03 97 00 E4 25 00 00 25 16 07 58 03 97 36 35 D2 25 00 00 D8 25 00 00 00 00 00 DD 25 00 00 25 16 06 58 03 07 E9 03 82 82 77 00 DF 25 00 00 2A 16 18 22 00 77 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 2A 16 16 18 35 00 19 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 E7 7C 00 00 00 1B 13 64 00 00 00 00 00 00 16 16 1C 1B 26 00 00 01 9B 25 00 00 70 38 53 00 E4 25 00 00 1F 25 00 16 16 06 7D 04 07 7D 04 82 82 77 00 DF 25 00 00 2A 16 18 22 00 77 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 2A 16 16 18 35 00 19 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 E7 7C 00 00 00 1B 13 64 00 00 00 00 00 00 16 16 1C 1B 26 00 00 01 9B 25 00 00 70 38 53 00 E3 25 00 00 1F 25 00 16 16 07 6E 05 82 82 82 97 00 E5 25 00 00 1D FF FF FF FF 16 18 0D 00 77 00 DF 25 00 00 2A 16 16 18 35 00 19 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 E3 7C 00 00 00 1B 15 64 00 00 00 00 00 00 16 16 18 6A 00 81 19 19 00 DF 25 00 00 09 00 41 BC 00 00 00 01 41 BC 00 00 3D 00 2C 34 00 00 00 1B B3 3C 00 00 00 00 00 00 19 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 09 00 E2 7B 00 00 00 01 E2 7B 00 00 16 16 16 1C 21 26 00 00 01 97 25 00 00 70 38 53 00 E5 25 00 00 1F 25 00 16 16 06 7C 05 1C 21 26 00 00 1F 00 1F 00 16


new hex: 0xC94
07 CC 04 82 77 00 DF 25 00 00 2A 16 18 22 00 77 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 2A 16 16 07 B5 03 19 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 E7 7C 00 00 00 1B 13 64 00 00 00 00 00 00 16 1C 1B 26 00 00 01 9B 25 00 00 70 38 53 FA 00 E4 25 00 00 25 16 1F 25 00 16 16 07 BB 04 82 97 00 E5 25 00 00 1D FF FF FF FF 16 18 6A 00 81 19 19 00 DF 25 00 00 09 00 41 BC 00 00 00 01 41 BC 00 00 3D 00 2C 34 00 00 00 1B B3 3C 00 00 00 00 00 00 19 19 00 DF 25 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 09 00 E2 7B 00 00 00 01 E2 7B 00 00 16 16 16 07 95 04 19 00 E8 25 00 00 0C 00 44 7C 00 00 00 1B 9A 36 00 00 00 00 00 00 24 2D 16 1C 21 26 00 00 01 9D 25 00 00 70 70 38 53 91 00 E5 25 00 00 2C 0A 16 1F 2E 00 16 38 53 FD 00 E5 25 00 00 2C 0A 16 16 16 06 B8 04 1C 21 26 00 00 01 97 25 00 00 70 38 53 00 E5 25 00 00 1F 25 00 16 16 06 C9 04 1C 21 26 00 00 1F 00 1F 00 16 06 DA 04 1C 21 26 00 00 1F 00 1F 00 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 00 E5 25 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 

--------------------------------------------------------------


Rewrite XGAbility_Targeted.ShouldShowPercentage to show to-hit percentage for Blaster Launcher


original hex:
header:
F8 7C 00 00 50 55 00 00 00 00 00 00 E1 7C 00 00 00 00 00 00 00 00 00 00 E3 7C 00 00 00 00 00 00 C9 04 00 00 BB A8 00 00 FF 00 00 00 D7 00 00 00 

body:
0F 00 E2 7C 00 00 2E 65 85 00 00 19 01 E6 7B 00 00 0A 00 B9 B5 00 00 00 1B E4 30 00 00 00 00 00 00 16 04 84 84 82 82 9A 1B 74 31 00 00 00 00 00 00 16 26 16 18 0F 00 81 1B 9A 36 00 00 00 00 00 00 24 24 16 16 16 18 1D 00 82 1B 9B 1A 00 00 00 00 00 00 16 18 0E 00 97 1B B7 33 00 00 00 00 00 00 16 25 16 16 16 18 1F 00 82 1B 9A 36 00 00 00 00 00 00 24 20 16 18 0E 00 97 1B B7 33 00 00 00 00 00 00 16 25 16 16 16 18 59 00 82 1B 9A 36 00 00 00 00 00 00 24 2D 16 18 48 00 82 77 00 E2 7C 00 00 2A 16 18 37 00 81 19 19 00 E2 7C 00 00 09 00 DD 82 00 00 00 01 DD 82 00 00 0A 00 5C 7D 00 00 00 1B F6 3C 00 00 00 00 00 00 16 16 16 16 16 04 3A E3 7C 00 00 53 


new hex: (virtual 0xEB)
header:
F8 7C 00 00 50 55 00 00 00 00 00 00 E1 7C 00 00 00 00 00 00 00 00 00 00 E3 7C 00 00 00 00 00 00 C9 04 00 00 BB A8 00 00 EB 00 00 00 D7 00 00 00 

body:
0F 00 E2 7C 00 00 2E 65 85 00 00 19 01 E6 7B 00 00 0A 00 B9 B5 00 00 00 1B E4 30 00 00 00 00 00 00 16 04 84 84 82 82 9A 1B 74 31 00 00 00 00 00 00 16 26 16 18 0F 00 81 1B 9A 36 00 00 00 00 00 00 24 24 16 16 16 18 1D 00 82 1B 9B 1A 00 00 00 00 00 00 16 18 0E 00 97 1B B7 33 00 00 00 00 00 00 16 25 16 16 16 18 1F 00 82 1B 9A 36 00 00 00 00 00 00 24 20 16 18 0E 00 97 1B B7 33 00 00 00 00 00 00 16 25 16 16 16 18 0D 00 1B 9A 36 00 00 00 00 00 00 24 2D 16 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 3A E3 7C 00 00 53 


--------------------------------------------------------------


Modify XGUnit.HasBombardAbility to return true if Unit has Bombard perk (82)



original XGUnit.HasBombardAbility hex code:
header:
F8 B5 00 00 50 55 00 00 00 00 00 00 E1 B5 00 00 00 00 00 00 00 00 00 00 E3 B5 00 00 00 00 00 00 BE 25 00 00 A0 BF 04 00 91 00 00 00 69 00 00 00 0F 00 E2 B5 00 00 35 D3 0D 00 00 D5 0D 00 00 00 00 19 1B 7B 31 00 00 00 00 00 00 16 09 00 C3 A2 00 00 00 01 C3 A2 00 00 07 84 00 84 84 84 9A 00 E2 B5 00 00 2C 0A 16 18 0E 00 9A 00 E2 B5 00 00 2C 0B 16 16 18 0E 00 9A 00 E2 B5 00 00 2C 08 16 16 18 0E 00 9A 00 E2 B5 00 00 2C 10 16 16 04 27 04 28 04 3A E3 B5 00 00 53 

new:
F8 B5 00 00 50 55 00 00 00 00 00 00 E1 B5 00 00 00 00 00 00 00 00 00 00 E3 B5 00 00 00 00 00 00 BE 25 00 00 A0 BF 04 00 85 00 00 00 69 00 00 00 05 D3 0D 00 00 00 35 D3 0D 00 00 D5 0D 00 00 00 00 19 01 0A 31 00 00 09 00 C3 A2 00 00 00 01 C3 A2 00 00 0A 40 00 24 08 0A 45 00 24 0A 0A 4A 00 24 0B 0A 51 00 24 10 04 27 0A FF FF 07 7B 00 19 1B 7B 31 00 00 00 00 00 00 16 0C 00 EA A2 00 00 00 1B B8 36 00 00 00 00 00 00 2C 52 16 04 27 04 28 0B 0B 0B 0B 0B 04 0B 53


-------------------------------------------------

Modify XGAIBehavior.GetGrenadeThrowRange to add 50% to weapon range instead of visual range

XGAIBehavior.GetGrenadeThrowRange
original hex:
header:
99 8B 00 00 50 55 00 00 00 00 00 00 83 8B 00 00 00 00 00 00 00 00 00 00 84 8B 00 00 00 00 00 00 10 04 00 00 CB 98 00 00 89 00 00 00 69 00 00 00 

body:
07 48 00 19 01 B8 8A 00 00 0A 00 E3 B5 00 00 00 1B 65 36 00 00 00 00 00 00 16 04 38 3F 90 19 01 B8 8A 00 00 0A 00 94 31 00 00 00 1B A6 34 00 00 00 00 00 00 16 2C 40 16 04 19 19 01 B8 8A 00 00 0A 00 5F B4 00 00 00 1B CC 32 00 00 00 00 00 00 16 0A 00 14 0A 00 00 00 1B 93 32 00 00 00 00 00 00 16 04 3A 84 8B 00 00 53 



new hex: (virtual 0x81)
header:
99 8B 00 00 50 55 00 00 00 00 00 00 83 8B 00 00 00 00 00 00 00 00 00 00 84 8B 00 00 00 00 00 00 10 04 00 00 CB 98 00 00 81 00 00 00 69 00 00 00 

body:
04 AB 19 19 01 B8 8A 00 00 0A 00 5F B4 00 00 00 1B CC 32 00 00 00 00 00 00 16 0A 00 14 0A 00 00 00 1B 93 32 00 00 00 00 00 00 16 45 19 01 B8 8A 00 00 0A 00 E3 B5 00 00 00 1B 65 36 00 00 00 00 00 00 16 05 00 1E 00 00 C0 3F 05 00 1E 00 00 80 3F 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 3A 84 8B 00 00 53 


-------------------------------------------------


Rewrite XGAction_Fire.SetChainedDistance to :

1) Allow Bombadier to work with Frag, Smoke, and Battlescanners
2) Make Bombadier grant +50% (default) range instead of visual range
3) Allow mods of Psi Inspiration, Telekinetic Field, and Plague
4) Change rocket distance calculation from visual range to:
	a) Set by weapon stat in DGC.ini
	b) Reduced if unit moved (max range = visual range)
		i) to 67% (default) if has perk ePerk_SnapShot (16)
		i) to 50% (default) otherwise 
	c) increased by 33% (default) if ePerk_FirstBlood (29) is available

original hex:
header:
26 84 00 00 50 55 00 00 00 00 00 00 0D 84 00 00 00 00 00 00 00 00 00 00 11 84 00 00 00 00 00 00 1F 07 00 00 82 00 01 00 39 05 00 00 99 03 00 00 

body:
0B 07 2C 05 1B CE 00 00 00 00 00 00 00 00 11 84 00 00 16 05 11 84 00 00 00 00 11 84 00 00 0A F6 00 24 16 0F 00 0E 84 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 0C 00 78 76 00 00 00 1B 1C 35 00 00 00 00 00 00 2C 55 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 35 A2 0D 00 00 AA 0D 00 00 00 00 00 0E 84 00 00 2C 40 16 0F 48 10 84 00 00 1E 00 00 80 3F 06 2A 05 0A 2B 02 24 18 0F 00 0E 84 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 0C 00 78 76 00 00 00 1B 1C 35 00 00 00 00 00 00 2C 58 16 07 D8 01 19 01 41 BC 00 00 0A 00 E3 B5 00 00 00 1B 65 36 00 00 00 00 00 00 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 19 01 41 BC 00 00 0A 00 94 31 00 00 00 1B A6 34 00 00 00 00 00 00 16 2C 40 16 06 19 02 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 35 A2 0D 00 00 AA 0D 00 00 00 00 00 0E 84 00 00 2C 40 16 0F 48 10 84 00 00 1E 00 00 80 3F 06 2A 05 0A F7 02 24 17 0F 00 0E 84 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 0C 00 78 76 00 00 00 1B 1C 35 00 00 00 00 00 00 2C 56 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 35 A2 0D 00 00 AA 0D 00 00 00 00 00 0E 84 00 00 2C 40 16 0F 48 10 84 00 00 1E 00 00 80 3F 06 2A 05 0A C3 03 24 47 0F 00 0E 84 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 0C 00 78 76 00 00 00 1B 1C 35 00 00 00 00 00 00 2C 63 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 35 A2 0D 00 00 AA 0D 00 00 00 00 00 0E 84 00 00 2C 40 16 0F 48 10 84 00 00 1E 00 00 80 3F 06 2A 05 0A 62 04 24 49 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 AB 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 05 00 F0 2C 00 00 00 1E 00 00 C8 42 38 3F 2C 40 16 0F 48 10 84 00 00 1E 00 00 80 3F 06 2A 05 0A 67 04 24 4C 0A 6C 04 24 4A 0A C7 04 24 23 0F 48 10 84 00 00 1E 00 00 80 3F 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 19 01 41 BC 00 00 0A 00 94 31 00 00 00 1B A6 34 00 00 00 00 00 00 16 2C 40 16 06 2A 05 0A CC 04 24 19 0A 27 05 24 42 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 19 01 41 BC 00 00 0A 00 94 31 00 00 00 1B A6 34 00 00 00 00 00 00 16 2C 40 16 0F 48 10 84 00 00 1E 00 00 80 3F 06 2A 05 0A FF FF 04 27 04 28 04 3A 0F 84 00 00 53 


new hex: (virtual 0x509)
header:
26 84 00 00 50 55 00 00 00 00 00 00 0D 84 00 00 00 00 00 00 00 00 00 00 11 84 00 00 00 00 00 00 1F 07 00 00 82 00 01 00 09 05 00 00 99 03 00 00 

body: 
0B 07 F3 04 1B CE 00 00 00 00 00 00 00 00 11 84 00 00 16 0F 48 10 84 00 00 38 3F 26 05 11 84 00 00 00 00 11 84 00 00 0A 4B 00 24 16 0F 00 D9 83 00 00 2C 55 06 8D 00 0A 5F 00 24 18 0F 00 D9 83 00 00 2C 58 06 8D 00 0A 73 00 24 17 0F 00 D9 83 00 00 2C 56 06 8D 00 0A 87 00 24 47 0F 00 D9 83 00 00 2C 63 06 8D 00 0A FF FF 06 8D 00 07 9F 01 9B 00 D9 83 00 00 25 16 0F 00 0E 84 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 13 00 78 76 00 00 00 1B 1C 35 00 00 00 00 00 00 00 D9 83 00 00 16 0F 00 D9 83 00 00 90 35 A2 0D 00 00 AA 0D 00 00 00 00 00 0E 84 00 00 2C 40 16 07 73 01 19 01 41 BC 00 00 0A 00 E3 B5 00 00 00 1B 65 36 00 00 00 00 00 00 16 9F 00 D9 83 00 00 1E 00 00 C0 3F 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 00 D9 83 00 00 04 27 07 DD 01 9A 38 3A 00 11 84 00 00 2C 49 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 AB 1E 00 00 C8 42 38 3F 2C 40 16 04 27 05 11 84 00 00 00 00 11 84 00 00 0A 04 02 24 4C 0F 00 D9 83 00 00 2C 1B 06 32 02 0A 18 02 24 4A 0F 00 D9 83 00 00 2C 1B 06 32 02 0A 2C 02 24 23 0F 00 D9 83 00 00 2C 1B 06 32 02 0A FF FF 06 32 02 07 A5 02 9B 00 D9 83 00 00 25 16 0F 00 D9 83 00 00 F9 00 D9 83 00 00 19 01 41 BC 00 00 0A 00 94 31 00 00 00 1B A6 34 00 00 00 00 00 00 16 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 90 00 D9 83 00 00 2C 40 16 04 27 05 11 84 00 00 00 00 11 84 00 00 0A BD 02 24 19 0A EE 04 24 42 07 0B 03 19 19 01 41 BC 00 00 0A 00 5F B4 00 00 00 1B CC 32 00 00 00 00 00 00 16 0C 00 56 A6 00 00 00 1B 83 36 00 00 00 00 00 00 24 13 16 0F 00 D9 83 00 00 2C 13 06 17 03 0F 00 D9 83 00 00 2C 07 0F 00 0E 84 00 00 19 19 2E FE 2C 00 00 19 12 20 4F FE FF FF 0A 00 D8 F9 FF FF 00 1C F6 FB FF FF 16 09 00 98 F9 FF FF 00 01 98 F9 FF FF 09 00 F0 2C 00 00 00 01 F0 2C 00 00 13 00 78 76 00 00 00 1B 1C 35 00 00 00 00 00 00 00 D9 83 00 00 16 0F 00 D9 83 00 00 90 35 A2 0D 00 00 AA 0D 00 00 00 00 00 0E 84 00 00 2C 40 16 07 06 04 19 19 01 41 BC 00 00 0A 00 63 B4 00 00 00 1B 7B 31 00 00 00 00 00 00 16 0C 00 EA A2 00 00 00 1B B8 36 00 00 00 00 00 00 2C 1D 16 9F 00 D9 83 00 00 1E 1F 85 AB 3F 16 07 BF 04 97 19 01 41 BC 00 00 09 00 B6 30 00 00 00 01 B6 30 00 00 25 16 07 77 04 19 19 01 41 BC 00 00 0A 00 63 B4 00 00 00 1B 7B 31 00 00 00 00 00 00 16 0C 00 EA A2 00 00 00 1B B8 36 00 00 00 00 00 00 2C 10 16 9F 00 D9 83 00 00 1E 1E 85 2B 3F 16 06 87 04 9F 00 D9 83 00 00 1E 00 00 00 3F 16 0F 00 D9 83 00 00 F9 00 D9 83 00 00 90 19 01 41 BC 00 00 0A 00 94 31 00 00 00 1B A6 34 00 00 00 00 00 00 16 2C 40 16 16 0F 19 01 3F BC 00 00 09 00 DF 2D 00 00 00 01 DF 2D 00 00 38 3F 00 D9 83 00 00 04 27 06 F3 04 0A FF FF 04 28 04 28 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 3A 0F 84 00 00 53  

 

 

 

A few notes about configuration:

  • The DGC.ini Weapon= ranges for Rocket Launcher and Blaster Launcher should be configured as desired.
  • I estimated the default value to work fairly well for Rocket Launcher range = 30, Blaster Launcher range = 24
  • MIN_SCATTER should probably be in the range from 40 to 90 depending on desired accuracy
  • Most of my testing used 70, although 50 works well for a longer-range design, more accurate design
  • MIN_SCATTER = 70 is a little bit designed around giving a few more rocket charges than vanilla
  • To enable Rocket/Blaster Launcher to be able to move after firing, remove the eWP_MoveLimited property. This is optional.
  • Another option for improving aim is to give the Rocket Launcher the eAbility_Aim, which grants +20 aim the following turn.

Details:

 

The formula for average scatter = MIN_SCATTER / (Soldier_Aim - 40)

This provides the average range / cross-range scatter distance in XCOM units at a distance of 20.0. To convert to tiles, divide by 1.5. Distance of 20.0 ~= 13.3 tiles. Soldier aim is clamped to be no less than 50 for this calculation (only applies if soldier is poisoned or mindfrayed, I think).

 

Examples:

 

 

MIN_SCATTER = 70, Soldier_Aim = 65

average_scatter = 70 / (65-40) = 70/25 = 2.8.

 

At distance 20.0, this is the scatter applied in both range and cross-range. In tiles, this is 1.87 tiles. Total_average_scatter = Sqrt(2) * average_scatter = 3.9 = 2.6 tiles.

 

At visual range of 27, scatter is increased by 27/20. average_scatter = 27/20 * 2.8 = 3.8 = 2.5 tiles. Total_average_scatter = Sqrt(2) * average_scatter 5.3 = 3.5 tiles. Since Rocket explosion radius is 3.5, this gives a rookie rocketeer (with 65 aim) around a 70% chance to catch a targeted alien in the blast, when firing at the edge of visual range.

 

-------------------

 

MIN_SCATTER = 70, Soldier_Aim = 85

This assumes a vanilla aim progression Heavy Colonel with a scope

average scatter = 70 / (85 - 45) = 1.55, almost half the scatter amount of a rookie. At visual range this yields an average scatter of ~2 tiles.

 

If the "Javelin Missiles" perk is taken and maximum range is 40 (26.7 tiles), then the average scatter would be 1.55 * 40/20 * sqrt(2) / 1.5 = 2.9 tiles.

 

 

 

 

Link to comment
Share on other sites

I do understand about the need to trade off some 'realism' for game balance. But when someone is overhauling some of the mechanics, I can't help but try to strike a note to improve the realism where feasible. As I said, an optional setting would be my preferred solution.

 

For instance, the typical XCOM rookie's aim wouldn't qualify them to leave boot camp. During the height of the Vietnam war, when US Army standards were generally considered 'relaxed', you still couldn't get out of boot camp if you couldn't score at least 70% with an M14 (7.62mm/30.06 cal). (They just recycled you through again until you did qualify.) These 65 aim scores are definitely NOT what anyone would consider 'quality' troops for an elite unit, much less experienced soldiers. But it's not too far enough off the mark to be unlivable.

 

With a rocket launcher you are expected to hit a target circle measured in inches, not feet. The fact that there is an AoE don't matter when you have to punch through armor in the correct place. The plasma charge from an anti-armor piercing round is only effective in a small diameter of an inch or so. If it gets started early, a mere matter of a couple of inches too soon, it won't do the job. Which is why 'stand-off armor' is now employed. Some degrees of 'balance compromise' simply ignore the fundamental realities. A HEAT round or rocket is a shaped charge, not just an explosive, nor is a grenade anything like either. A rocket is not a grenade with a motor. They are performing fundamentally different roles and are constructed to fit those roles. Lose the distinction and you might as well not bother to have both items.

 

But you are correct that you have to stick within the parameters the game forces upon you. Additional options simply give us more opportunities to tweak to our preference, but you have to not only find some place to shoehorn them in, but then choose between needs. Not an enviable position.

 

'Nuff said on the matter. I look forward to seeing the mod.

 

-Dubious-

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...