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.
- 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.
- 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