here goes
There have been some issues with fighter/bomber aircraft for a long time:
- fighters dive dangerously close toward ground targets and often bump into them
- aircraft clump together when moving and turning (especially if collisions are disabled)
- sometimes when you order them to move back to avoid going into enemy AA they turn the wrong way (take the long turn)
- if the game devs want maneuverable aircraft (ex: using maxRudder,etc. = 0.02 instead of 0.005 or 0.01), aircraft noticeably shake when taking off and adjusting trajectory
- maneuverable aircraft keep flying straight after flying past a target for longer than they need to (and no way to control that)
(others?)
to try to solve these issues the following pull requests were created:
add attackSafetyDistance unitDef
(merged in 99.0 rc4 !)
miscellaneous aircraft-related improvements
(postponed for next spring version)
these bring new unitdefs:
- attackSafetyDistance : fighters abort dive toward target if within attackSafetyDistance and climb back to normal altitude (default 0 = disabled, for a typical 600 range fighter a good value may be 300)
- airManeuverabilitySpread : fighter/bomber aircraft maneuverability parameter randomness (previously hardcoded to 0.02, which is the new default. Larger values like 0.25 can be used to significantly reduce clumping in zk fighters, note that it doesn't change max velocity)
- attackOverflyDistance : controls how far fighter/bomber aircraft move after overflying target. Default value of 0 is converted internally to max(turnRadius, maxWeaponRange). Only applies if attacking and against targets moving at less than 25% of the aircraft's speed.
note that i've tried to make it so the new properties have default values that work with existing games as-is, and from the tests i've made in XTA, ZK and BA and S44 (not the latest) and MF, they sort of do.
opinions?
miscellaneous aircraft-related improvements
Moderator: Moderators
Re: miscellaneous aircraft-related improvements
Sounds good! Thanks!
Re: miscellaneous aircraft-related improvements
politenessKloot wrote:FOR FUCK'S SAKE ... viewtopic.php?f=12&t=33575#p570401
my priority is to resolve the issues, not go into a screaming contest
When I first made the changes, people told me to make behavior configurable. Then I looked at how to add unitDefs and it seemed easy enough.
attackOverflyDistance's default is probably good enough and airManeuverabilitySpread is a cheap way to spread out aircraft without fancy (and probably computationally expensive) coding.
I'd use the defaults on my game. They should work for other games as well....Those unitDefs could be removed, but do we really gain much from removing them? Why?
We could use a Lua way to dinamically flag specific units to use custom unitdef trees (with weapondefs, movedefs, etc.) that can be updated and reloaded in-game. But that implies attributes being registered as unitDefs in the first place.
- Silentwings
- Posts: 3720
- Joined: 25 Oct 2008, 00:23
Re: miscellaneous aircraft-related improvements
Split general discussion of unitdef tags versus lua callins to viewtopic.php?f=12&t=33575
Re: miscellaneous aircraft-related improvements
the attackSafetyDistance unitdef was added in 99.0 but replaced by devs in 100.0 (?%#!) with a lua workaround.
example code for gadget:
[code]local specialCases = {
aven_ace = 9999.0
}
local DEFAULT_DISTANCE = 350.0
if (gadgetHandler:IsSyncedCode()) then
function gadget:UnitCreated(unitID, unitDefID, unitTeam)
if (UnitDefs[unitDefID].canFly and UnitDefs[unitDefID].isStrafingAirUnit and not UnitDefs[unitDefID].hoverAttack) then
local dist = DEFAULT_DISTANCE
local name = UnitDefs[unitDefID].name
if specialCases[name] then
dist = specialCases[name]
end
Spring.MoveCtrl.SetAirMoveTypeData(unitID,{attackSafetyDistance=dist})
end
end
end[/code]
this example makes all fighter aircraft use safety distance of 350 except "aven_ace" (which is classified by engine as a fighter but is a bomber that shoots a tracking mini-nuke : setting to 9999 makes it fly like a normal bomber).
There was also a bug that made spring crash when SetAirMoveTypeData with that parameter was called for construction aircraft, that's why i used the apparently redundant tests on my code. I can't find it on mantis though, maybe it was sneakfixed.
I've been focusing on finishing other stuff but plan to work some more in the aircraft code in the next week or so.
example code for gadget:
[code]local specialCases = {
aven_ace = 9999.0
}
local DEFAULT_DISTANCE = 350.0
if (gadgetHandler:IsSyncedCode()) then
function gadget:UnitCreated(unitID, unitDefID, unitTeam)
if (UnitDefs[unitDefID].canFly and UnitDefs[unitDefID].isStrafingAirUnit and not UnitDefs[unitDefID].hoverAttack) then
local dist = DEFAULT_DISTANCE
local name = UnitDefs[unitDefID].name
if specialCases[name] then
dist = specialCases[name]
end
Spring.MoveCtrl.SetAirMoveTypeData(unitID,{attackSafetyDistance=dist})
end
end
end[/code]
this example makes all fighter aircraft use safety distance of 350 except "aven_ace" (which is classified by engine as a fighter but is a bomber that shoots a tracking mini-nuke : setting to 9999 makes it fly like a normal bomber).
There was also a bug that made spring crash when SetAirMoveTypeData with that parameter was called for construction aircraft, that's why i used the apparently redundant tests on my code. I can't find it on mantis though, maybe it was sneakfixed.
I've been focusing on finishing other stuff but plan to work some more in the aircraft code in the next week or so.
Re: miscellaneous aircraft-related improvements
Feel free to put the relevant code also in xta if you have the energy: you have better knowledge of these issues than anyone else.