HWR 2.0 modding changes

Hey gang, let’s centralize all modding discussion re: 2.0 patch here for now. New features, porting requirements, etc. That way @bitvenom doesn’t have a million threads to chase down.

Also as always, please feel free to suggest changes and additions, and requested items for the HWMOD wiki. I want to make it as good and useful as Karos was.

Also gonna summon @Kadeshi @cloaked, @evillejedi, @avetorian, @pouk, @concordion2k (and any other beta testers I missed) to verify if there’s anything I’m misremembering or presenting incorrectly.

And without further adieu, here’s some of the 2.0 goodies in regards to modding.

HWR .ship file additions

setTacticsMults(NewShipType, “MAXSPEED”, 0.80, 1.10, 1.0)
setTacticsMults(NewShipType, “ENGINEACCEL”, 1.20, 0.80, 1.0)
setTacticsMults(NewShipType, “ENGINEBRAKE”, 1.0, 1.0, 1.0)
setTacticsMults(NewShipType, “THRUSTER”, 1.0, 1.0, 1.0)
setTacticsMults(NewShipType, “THRUSTERACCEL”, 1.20, 0.80, 1.0)
setTacticsMults(NewShipType, “THRUSTERBRAKE”, 1.0, 1.0, 1.0)
setTacticsMults(NewShipType, “ROTATION”, 1.0, 1.10, 1.0)
setTacticsMults(NewShipType, “ROTATIONACCEL”, 1.0, 1.10, 1.0)
setTacticsMults(NewShipType, “ROTATIONBRAKE”, 1.0, 1.0, 1.0)
setTacticsMults(NewShipType, “WEAPONACCURACY”, 1.0, 1.0, 1.0)
setTacticsMults(NewShipType, “WEAPONDAMAGE”, 1.20, 1.0, 1.0)
setTacticsMults(NewShipType, “BULLETSPEED”, 1.15, 1.0, 1.0)
setTacticsMults(NewShipType, “DAMAGEAPPLIED”, 1.10, 0.90, 1.0)
setTacticsMults(NewShipType, “FIRERATE”, 1.0, 1.25, 1.0)
setSpeedvsAccuracyApplied(NewShipType,100.0,5.0,120,1.0,250,1.0,388,0.98,535,0.70)
NewShipType.minFalloffDamageDist=15
NewShipType.maxFalloffDamageDist=153
NewShipType.maxFalloffScuttleDamageDist=15
6
NewShipType.explosiveScuttleDamageOnDeath=15
NewShipType.maxFalloffForce=15*10
NewShipType.explosiveDamageOnDeath=3.4
NewShipType.radiusDamageEvadeMod=1.1
NewShipType.hideNormalAttackUICooldown=1
NewShipType.agileFlight=1
NewShipType.SquadronSize=getShipNum(NewShipType, “SquadronSize”, 1)
NewShipType.buildBatch=getShipNum(NewShipType, “buildBatch”, 5)
NewShipType.batchFormation="Batch_delta"
NewShipType.noCombatGrouping=1

HWR .wepn file additions

setMissProperties(NewWeaponType, 0.02, 0.04, 0.20, 0.30, 0.50, 0.50);
setSpeedvsAccuracyAgainst(NewWeaponType, 1, 50.0, 1.5, 75, 1.0, 300, 1.0, 487, 0.90, 535, 0.60);
setLifetimeMult(NewWeaponType, 1.75);
setDamageFalloff(NewWeaponType, 0.25/2000.0, 0.1);
setAccuracyFalloff(NewWeaponType, 0.25/2000.0, 0.1);
setBallistics(NewWeaponType,0,0.0);
setMissileKiller(NewWeaponType,1);

10 Likes

New HOD format:

3 Likes

Looking back, this is probably the removal of goblin meshes

1 Like

Scrubbed list reposted from the beta forum

.hod

  • new Hodor will be needed to export to new .hod format and 'ship patch files’
    Example of a patch file (ship/shipname/patches/patchxxx.lua)

Patch_Priority = 3.0
Patch_Exclusive = 0
Patch_Ops = {
hp_0 = {
root = “Root”,
name = “Hardpoint_TurretTop_Position”,
pos = { 0.0, 75.0, 0.0 },
rot = { 0.0, 0.0, 0.0 },
axis = { 0.0, 0.0, 0.0 },
},
}

can replace textures and markers, joints etc

  • HODOR/RODOH update shortly after patch release - tons of stuff needs to be made public-friendly. New HOD format is NOT compatible with existing tools, majority of internal data is now in blocks optimized for load speed.
  • .dds will be required for certain files (skybox reflections, etc).
  • max per mesh vertices (not tris) of approximately 32K, less if there are lots of hard edges/UV transitions, new HODOR will perform some splits to sub meshes automatically, but ideally only split meshes for separate texture/shaders
  • Maximum 16 ship navlight lights maximum (hangar, bridge, engines, needs to include explosion, scene and FX light budget so practical light limit is lower)
  • elimination of GOBLINS
  • turrets are now all instanced subsystems including innate
  • changes to rendering/collisions - max size of 8km for both.
  • Rest and direction are no longer required for weapons that are foxed and gimble weapons
  • hodor will have a proxy mesh export capability eventually
  • markers should follow animations
  • Weapons and dockpaths will never follow animations, trigger them at the extent of the animation with code red or docking bay door triggers
  • changes to salvage latch points
  • Hods now share textures correctly, textures must be uniquely named or they will be reused (could be used to improve performance if uniqueness is not needed)

.ship

  • setTacticsMults(NewShipType, “MODIFIER”, Aggressive, Evasive, Neutral) // Stance based multipliers

Valid modifier types:
MAXSPEED
ENGINEACCEL
ENGINEBRAKE
THRUSTER
THRUSTERACCEL
THRUSTERBRAKE
ROTATION
ROTATIONACCEL
ROTATIONBRAKE
WEAPONACCURACY
WEAPONDAMAGE
BULLETSPEED
DAMAGEAPPLIED
FIRERATE

  • setSpeedvsAccuracyApplied(NewShipType, Speed, Mult) //Accuracy adjustments against this ship based on its speed. Maximum of 8 ranges supported.
    Note that this is not a straight mult above 1.0, ie 1.2 is not 1.2x more likely to hit. Example tables:

    Accuracy| Mult| Adjusted Accuracy
    0.8 1.2 0.83
    0.5 1.2 0.583
    0.25 1.2 0.375
    0.15 1.2 0.291
    0.05 1.2 0.208

    0.8 5.0 0.96
    0.5 5.0 0.90
    0.25 5.0 0.85
    0.15 5.0 0.83
    0.05 5.0 0.81

    At 1.0 and below it’s a straight mult:
    0.8 0.9 0.72
    0.5 0.9 0.45
    0.25 0.9 0.225
    0.15 0.9 0.135
    0.05 0.9 0.045

NewShipType.defaultROE=“ROE” // default Rules of Engagement for the ship on creation
Valid ROE types:
Offensive
Defensive
Passive

Rules of Engagement:

Offensive. Ships will attack all enemy ships that enter range.
Defensive. Ships will retaliate against attackers of allies and themselves.
Passive. Ships will not retaliate, even when fired upon.

NewShipType.defaultStance=“Stance” // default Stance for the ship on creation
Valid Stance types:
Aggressive
Evasive
Neutral

Stances:
Aggressive. Aggressive strike craft receive bonuses to weapon damage but penalties to speed. Aggressive ships will fight at closer ranges and will fight and stay in formation during combat.

Evasive. Evasive strike craft receive bonuses to speed, acceleration, and take reduced damage. Evasive ships will break formation as soon as they enter combat and attempt to dodge incoming fire. Evasive strike craft fight at longer range. This stance is intended as a delaying or harassing action.

Neutral. Normal power shunting, ships receive no bonuses or penalties.

Notes:
ROE/Stance buttons are located in the bottom left of the screen and are color coded. They are hot-keyed (F4 through F8)

ROE/Stance buttons are color coded:

Offensive and Aggressive: Red
Defensive and Evasive: Blue
Passive and Neutral: Yellow

  • setSupplyValue() allows fractional supply cap assignments to multiple supply cap categories

  • NewShipType.minFalloffDamageDist= starting distance for scuttle/death damage

  • NewShipType.maxFalloffDamageDist= ending distance for scuttle/death damage (linear falloff)

  • NewShipType.maxFalloffScuttleDamageDist= ending distance for scuttle/death damage (linear falloff)

  • NewShipType.maxFalloffDamage= maximum damage to do at zero falloff distance

  • NewShipType.explosiveScuttleDamageOnDeath= damage dealt when scuttling

  • NewShipType.maxFalloffForce=force applied on explosion

  • NewShipType.explosiveDamageOnDeath= damage dealt when killed

  • NewShipType.radiusDamageEvadeMod= multiplier to how far friendly ships will evade an explosion

  • NewShipType.hideNormalAttackUICooldown= Boolean. Whether to show weapon refire timer in the UI

  • NewShipType.agileFlight= ?? linked to new movement and evasive code

  • NewShipType.canSurround= Boolean. Whether the ship can be surrounded by a Sphere formation

  • NewShipType.strikeGroupSpeed= The slowest ship is the leader of a formation. This allows a ship to falsely report a faster or slower speed to influence whether it should be a leader. Set to a high number like 5000 for ships that are poor formation leaders.

  • set targetbox has been expanded to allow multiple regions up to 5, not sure of the syntax

  • NewShipType.useLayoutBounds= When fighters guard a battlecruiser in sphere formation, the layout bounds below can specify a box to form around. If disabled, ships will just use sphere bounds instead.

  • NewShipType.layoutBoundX=

  • NewShipType.layoutBoundY=

  • NewShipType.layoutBoundZ=

  • NewShipType.layoutCenterX=

  • NewShipType.layoutCenterY=

  • NewShipType.layoutCenterZ=

  • NewShipType.canJoinStrikeGroup= enable/disable joining strike groups

  • NewShipType.AttackPriorityMultiplier= Influences a ship’s position up or down in the target priority list.

  • NewShipType.noCombatGrouping= ?? assume related to formations

  • NewShipType.holdSlots= Ships can now occupy a certain number of slots in hangars.

  • NewShipType.buildBatch=getShipNum(NewShipType, “buildBatch”, 5) allows building in squadrons

  • NewShipType.CombatFamily=“Fighter_Special” Used by defense fighter, not sure what it enables

.event

  • References to markers in the hod that are not present will cause a crash, this improves performance, there should be log info to help debug

.subs

  • some changes to how damage is passed through for damagable/destroyable subsystems using “Ship” subsystem type (used for integral weapons)
  • subs hods are part of collision/weapon hit detection (need clarification)

.wepn

Legacy bug fixes of original Homeworld 2 code:

-When a bullet was marked as a miss, the “noise” added to its trajectory was not calculated from the direction the bullet was aimed, causing ships shooting at diagonal angles to not miss correctly.

-The decision gate that determined when a weapon could fire again was not set up properly. In fighter versus fighter engagements this manifested in fighters having trouble shooting at fast moving targets because they were disallowed from firing. This has been fixed.

New Weapon features:

setLifetimeMult(NewWeaponType, MULT);

//Bullet life is normally a ratio of speed and weapon range multiplied by a fixed percent to add padding. This percent is now exposed as a multiplier on a per weapon basis allowing for missed bullets to travel further than the range they were initially fired within, striking targets beyond what they were aimed at.

setDamageFalloff(NewWeaponType, FALLOFF/RANGE, PERCENTAGESTART);

//Bullet damage can be reduced based on distance of bullet travel. Shot damage can be multiplied against how much damage is lost in meters per second over the range of the weapon, beginning at a defined point. The damage falloff starts at the defined point, which is expressed as a percent of the total weapon range (i.e. You can have a weapon that loses damage over the entire lifetime of the bullet or a weapon that does full damage for 80 percent of its travel but does diminishing damage to targets within the last 20 percent of its range.

setAccuracyFalloff(NewWeaponType, FALLOFF/RANGE, PERCENTAGESTART);

//Same as damage falloff. For Homeworld 2 style bullet steering, it acts as a multiplier against the weapon accuracy against its target, reducing the chance the bullet will steer into its target. For ballistics enabled weapons it acts as a multiplier against the weapon accuracy against its target, reducing the chance the bullet will be considered an aimed shot if it strikes its target.

setMissProperties(NewWeaponType, MissConeHorizontal,MissConeVertical, MissLowDamage,MissHighDamage,MissSpeed,MissLifetime);

Miss Cone

//In Homeworld 2 accuracy modeling, if a bullet is marked as a miss, bullet steering was turned off and “noise” was added to the bullet trajectory to make it fire off-center. The amount of noise added to the initial trajectory (up or down plus left or right) created a miss cone. The miss cone is now definable on a per weapon basis and can be expanded or contracted (to zero).

Miss Hi/Lo damage

//If a bullet is marked as a miss and strikes a target anyway, the damage is multiplied against a range defined as high and low damage. Expressed as a percent of the damage had it been marked as a hit.

Miss speed

//Bullets marked as a miss can travel at a reduced speed. Multiplied against the original bullet speed.

Miss Lifetime

//Bullets marked as a miss can travel over a reduced range, simulating misfires

setSpeedvsAccuracyAgainst(NewWeaponType, SPEED, MULT); //Accuracy adjustments for this weapon against targets traveling within SPEEDRANGES

setBallistics(NewWeaponType,BOOL,FIREAHEAD,FIREBEHIND); //Bool turns on/off ballistic modeling on the weapon. FIREAHEAD/FIREBEHIND are optional and allows the weapon to fire in front or behind the target.

Ballistic Modeling

//Weapon steering can be enabled or disabled on a per weapon basis.

  1. On weapons with steering (non ballistic), the engine ensures that a percentage of shots fired will strike the target based on the accuracy table within the weapon.
  2. On weapons without steering (ballistic), the weapon aims directly at the target and fires (or ahead of/behind, if deflection capable), and whether it hits or not is subject to bullet speed, target speed, weapon range and target behavior.

The accuracy table is used to determine the number of shots that are considered “aimed”. An aimed shot does full damage if it strikes the target , an unaimed shot is subject to the miss rules (miss cone, Hi/Lo damage, miss speed and miss lifetime) to determine bullet damage and behavior.

Multiple combinations exist to create several hybridizations of ballistic modeling. Almost all strike craft and ships designed to counter strike craft now utilize some form of ballistic modeling.

setMissileKiller(NewWeaponType,BOOL);

Missile Killers

//The requirement for a ship to be able to lay mines in order to consider firing at a missile has been removed. Weapons marked as missile killers can fire upon missile based weaponry (torpedoes, missiles, mines, NOT bullets).

setRangeByStance(NewWeaponType, AgRange, EvRange, NeRange); // All as percents of the range set during creation.

setFireMultFactor(NewWeaponType, MULT);
setFrustratedTimers

.missile

  • setTacticsMults(); parameter to modify Attributes by tactics
  • setLeading(); sets the missile leading values ??

strikegroups, flightmanuvers & formations

lots of changes, need help documenting

race specific filters

  • stances specific multipliers for weapons, maneuvering, etc
  • limits for number of ships that can participate
  • ability to disable flight maneuvers by stance
  • abitlity to set distance from target and break from target
  • ability to set leader and follower attack styles by class
  • ability to set icons, text for stance
  • ability to create elaborate nesting arrangements and groupings based on ship types
  • ability to prevent ships from being formation leaders
  • budget system for flight maneuvers to reduce excessive target picking or evasive maneuvers
  • performance graphs to adjust how effective factors are based on ship population in the formation
  • Aggressive is ‘Shape’ - stuff stays in large groups by combatFamily.
  • Neutral is ‘Batch’ - small groups like HW2, without the sub-formation splits (or evasive flight style).
  • Defensive is ‘Subs’ - batches but sub-batch when possible, lots of evasive movement.
  • stance aware spacing
  • FlyToSameHeightAsTargetDelay = shared facetarget timer / maxTimeToSpendTryingToMatchHeight = face timer
  • everything is a strike group
    StanceGrouping = "Batch"
    StanceGroupingAg = "Shape"
    StanceGroupingEv = “Subs”

Those can be:

None - No grouping by type/combatFamily, everything stays together.
Shape - Break into sub-formations by ‘combatGrouping’ or CombatFamily.
Batch - Break into single ships or by squadron-batch.
Subs - Same as Batch, but with ‘sub squadron’ population limits, aka ‘peel off’ logic from HW2.
Name = "Batch_Dart"
Hint = "$4953"
Title = "$5463"
Hotkey = 106

Tags = “sgf_vgr”

UIAlias = “Vgr_Dart”

BatchRestrict = 1

DeathDamage = 0.90
FriendlyFire = { 0.8, 0.0, 0.0 } – Base, Pop, PopSqrt

SpacingRange = { 25, 1.50, 150, 1.50 }
SpacingRangeAg = { 25, 1.10, 150, 1.10 }
SpacingRangeEv = { 25, 1.50, 150, 1.50 }

DefaultFollowAttackStyle = "follow_strikegroup_lead"
FollowAttackStyles =
{
{
familyname = “Fighter”,
filename = “follow_strikegroup_lead”,
},
{
shipname = “Hgn_Destroyer”,
filename = “follow_strikegroup_lead_broadside”,
},
{
shipname = “Vgr_Destroyer”,
filename = “follow_strikegroup_lead_broadside”,
},
}

Attackstyles

I’m not sure if new functions were added, need help here

  • MovetoTarget and shoot now has a timed face target option
  • heal beam can have different attack styles (fixed bug)

– Ships will fly at this distance from the target’s surface
distanceFromTarget = 1500.0,
distanceFromTargetAg = {500.0,300,1},
distanceFromTargetEv = {1900.0,100,1},

– Multiply DistanceFromTarget by from 1-DistanceVariation to 1+DistanceVariation
distanceVariation = 0.1,
distanceVariationAg = 0.1,
distanceVariationEv = 0.2,

– Percentage chance that after completing a segment of the circle a ship will cut across the circle
percentChanceOfCutting = 5.0,
percentChanceOfCuttingAg = 15.0,
percentChanceOfCuttingEv = 1.0,

attackEngineMult = 1,
attackEngineMultAg = 0.8,
attackEngineMultEv = 1.09,

breakEngineMult = 1,
breakEngineMultAg = 1.1,
breakEngineMultEv = 1.09,

– delays for the things the attack style can do (in seconds)
flyToLeaderBecauseItsFarOutOfRangeDelay = 2.0,
flyToLeaderBecauseItsMovingAwayDelay = 2.0,

– Make sure strike group members face their flight direction while following the leader rather than face their target as the follow
strikeGroupFaceFlightDir = 1,

– Once past this amount * the weapon range the ship will stop and face the target
inRangeFactor = 0.85,
inRangeFactorAg = 0.55,
inRangeFactorEv = 0.85,

safeDistanceFromTargetToDoActions = 600.0,
safeDistanceFromTargetToDoActionsAg = 500.0,
safeDistanceFromTargetToDoActionsEv = 800.0,

tuning.lua

tweakables added to docking and batch timing

.wf

no know changes?

Shaders

  • improved hooks for shaders to take parameters from ship lua scripts
  • potential to do building animations using a variable tracked in a lua and passed to the shaders to do a scissor rather than a fade
  • ability to hide/show/scale nav-lights in LUA
  • new tool for setting shader properties on ships/subs - and changing them via LUA (IE name plates and kill badges)

UI

??

unit caps

  • implemented a new supply limit concept

sound & soundscript

No known changes

General Lua

  • some expanded sobgroup management functions were mentioned including tactics managment??
  • sobgroup functions to change stance
  • SobGroup_LeaveStrikeGroup() with sob membership history
  • you can tell who killed what in LUA now, it sends events.

replacements for setdefault tactics and set tactics

Player_SetGlobalROE (PlayerNumber, OffensiveROE/DefensiveROE/PassiveROE)
SobGroup_SetROE (SobGroupName, OffensiveROE/DefensiveROE/PassiveROE)

Player_SetGlobalStance (PlayerNumber, AggressiveStance/EvasiveStance/NeutralStance)
SobGroup_SetStance (SobGroupName, AggressiveStance/EvasiveStance/NeutralStance)

ART & effect

no known changes

backgrounds

  • waiting on starfield tool

.resource & .cloud

No known changes

Maps / .level

Bitvenom said the tool exists internally to convert from proxy to .level but is not released
*addSensorsPlane(6000.0, 0.7, {0.75, 0.37, 0.20, 0.21}); Allows for ghosted out structures in sensor manager

The following nebulas will appear as black boxes, and must be replaced with alternate code. The first 4 are identical replacements, however the last nebula must be substituted with a similar looking nebula.

  • addNebula(“polysurface5”, “M05_DustCloud_Nebula”,
    ---->addCloud(“polysurface5”, “Cloud_NoRes”,
  • addNebula(“polysurface5”, “M05_NebualDustCloud_NoRes”,
    ---->addCloud(“polysurface5”, “Cloud_NoRes”,
  • addNebula(“polysurface5”, “M05_NebualDustCloud_NoRes2”,
    ---->addCloud(“polysurface5”, “Cloud_NoRes2”,
  • addNebula(“polysurface5”, “M05_NebualDustCloud_NoRes3”,
    ---->addCloud(“polysurface5”, “Cloud_NoRes3”,
  • addNebula(“polysurface5”, “Nebula_Hiding”,
    ---->closest substitute: addNebula(“polysurface5”, “m11_bentusi_debris”,

NIS

Still no way to edit, but Bitvenom said the tool exists internally to convert from proxy to NIS

MISC

  • hard coded population and unit caps were introduced to prevent crashes
  • looping waypoints are automatically considered attack moves

Command Line

  • -GameRules=GameTypeName: sets the default game type

  • -lvlPassTags=balance: allows you to see balance maps, you can use this for any map tags

  • -superzoom and -screenshotcam are new screenshot options

-fakeFullscreen
– FS without any border, doesn’t respond to window focus changes the same way either. Handy for testing FS on a multi-mon system.

-uiLeft=0.3
-uiRight=0.7
-uiTop=0.0
-uiBottom=1.0
– Move where UI is on screen - usually that’s the full screen 0->1 - but for some systems it is better to lock it to the center screen, or side screen, etc.

-BACK_FOV=70
– Force the Background FOV to match the foreground (which defaults to 70) - useful because:

-facetCount 24
– Multi-view rendering for ‘fish eye’. Useful for very wide screens - removes distortion, done right can be used to do full 360 screens (as I’ve posted). The # is the number of sub-splits - 24 max. So the game is drawn that many times. Not as bad for performance as you’d think. A small # of things are busted with this active.

If you use -fakeFullscreen or -facetCount, it is often best to manually set the X/Y of your window and the W/H. Here are some I use for 360 shots (the math is just right for 24 splits to come back around clean)…

can create simulatneous MP instances and log to different files with -logfilename=LOGFILEPATH (eg. C:\Test\Logs\Player1.log)

In-Game Chat Commands
/playername
/t will auto-complete to team

5 Likes

Yay!

Does this mean we can finally now have “animated” weapons systems (like pop-out turrets)?

Eh? What are these?

Looks like I have some work to do, lol.

2 Likes

Yes, though I think we always could, technically. https://youtu.be/muaKYpb5JgY?t=51s

1 Like

Oh man, I could have all of EVE turret open and close animations…this might take a while to rebuild…

2 Likes

The one caveat I think is that if you have deploying weapons like this, they have to be in the main HOD, not just as instanced hardpoints. So you’re gonna be dealing with a crapton more joints.

1 Like

Cant a subsystem have a codered? :stuck_out_tongue:

1 Like

Cataclysm style ? oO

THIS I’d like to know ! :slight_smile:

2 Likes

Missile

setLeading(NewShipType, TargetLeadingEffectiveness, DistanceLeadingFullyEnabled, DistanceLeadingEnabled)

//Sets target leading properties. First value determines by how much the missile will lead the target, second value is the range from target leading is fully enabled, third value is range target leading is enabled(?).

Unit Caps

  • Supply limit can be modified on per-unit basis for game balancing (i.e. 7-batch interceptor can be set to count as 5 individual units/a 5-batch group in the unitcap list).

  • LayOut is non-visible category for grouping specific units (i.e. “Lance Fighter” and “Interceptor” unitcap families can be categorized together in Fighter layout).

Attackstyles

  • Budgeting system - flight maneuvers use a defined value subtracted from the total budget value used to determine when the ship will search for a new target to acquire(?).

  • New functions ending in “Ag” and “Ev” are specific to aggressive and evasive tactics, respectively. Not supported for attackscripts using “Dogfight”.

attackEngineMult = BOOL //Engine max speed multiplier when performing attack run on target.
breakEngineMult = BOOL //Engine max speed multiplier when ship is decelerating (used when ships perform turns?)

3 Likes

That’s a multiplier for max speed when a ship (fighter) is flying away from a target after an attack run. It’s a float, not a bool. As @EvilleJedi posted, there are versions for aggressive and evasive tactics:

breakEngineMult
breakEngineMultAg
breakEngineMultEv

attackEngineMult
attackEngineMultAg
attackEngineMultEv

These multipliers can be used to make a fighter or bomber slow down while attacking and speed up when they break off.


[quote]setSpeedvsAccuracyApplied(NewShipType, Speed, Mult)
        Accuracy adjustments against this ship based on its speed. Maximum of 8 ranges supported.
        Note that this is not a straight mult above 1.0, ie 1.2 is not 1.2x more likely to hit.
Example tables: [snip][/quote]

@BitVenom How is the adjusted accuracy calculated for a multiplier above 1.0?

1 Like

I’ll see if I can find the code. The basic idea is ‘4 times more accurate (5.0, since 1.0 is ‘neutral’)’ - so not just a mult. If you are 80% likely to hit, and apply a 5.0, that should mean 4/5s of the chance to miss (20%). So:

5.0 = 80%+(20%*4/5)… 96%.
10.0 = 80%+(20%*9/10)… 98%.

0.5 is ‘50% as likely’ - so an easy mult…
2.0 is ‘twice as likely’ - so half of the chance to miss, whatever that was.

Doing it as a raw mult (2.0 is used as a raw mult) would have been useless and resulted in many accuracies multiplied well past 100%. Twice as likely to hit should never mean ‘can’t miss’…

2 Likes

[code]Accuracy | Mult | Adjusted Accuracy
0.8 1.2 0.83
0.5 1.2 0.583
0.25 1.2 0.375
0.15 1.2 0.291
0.05 1.2 0.208

0.8 5.0 0.96
0.5 5.0 0.90
0.25 5.0 0.85
0.15 5.0 0.83
0.05 5.0 0.81[/code]

So…
Adjusted_Accuracy = Accuracy + [ (1 - Accuracy) * ((Multiplier - 1) / Multiplier) ]

That appears to line up with your table, ty

Been doing some testing on the new weapons systems lately. I’ve found that setBallistics(0,1,1) gives better results for accuracy than (0,0,0), (0,1,0), or (0,0,1). Weirdly while (0,1,1) gave better results than (0,1,0), (0,0,1) and (0,0,0) gave apparently identical results. 50 consecutive tests of each permutation gave exactly identical outputs for those two inputs. Dunknow what’s up with that but it’s weird.

If you feed the first setMissProperties (0,0,1,1,1,1) then missing is effectively identical to hitting, so long as you’ve got the first value of setBallistics to zero. If you want to give pure ballistics a try doing this and then adding a little to the first two numerical parameters of the set miss properties will get you something. However the miss cone looks a bit werd, I haven’t tested it extensively but sometimes I’ve ended up with it shooting at the corners of a box around the target but nowhere inside that box. So that’s a bit weird

A good way to test though has been giving a defender type ship a max fire rate gun and letting it have at a stationary target. Lots of bullet volume, you get to see the range of possibilities for your values pretty quick.

High volume bullet testing:

Rediscovering that miss cones are in radians instead of degrees:

Slowed down the shots to better see:

And finally, testing with varied weapon speed and bullet lifetime on miss.

Not sure what you might do with this practically but it’s neat!

4 Likes

Re-posting this info for reference where I can find it. :slight_smile:

Its an old post from 2016 on the Private Patch Beta forum. Note, some of this stuff might not work in the current public builds.

Also here’s another thread on the turbo commands:

More weapon changes:

Also some more modding changes that may not be in this thread already, are listed here:

2 Likes

Is there a complete list of command line switches for HWRM anywhere?