As some of you may know, I made earlier today a widget that allowed Charon to drop a Claymore it carried, give the Claymore order to drop its bomb and then repick it up before the Claymore fell to ground. Code here:
[Spoiler]quote:
function widget:GetInfo() return { name = "ClaymoreBombing", desc = "Allows Claymores to drop bombs while transported. Version 0,9", author = "terve886", date = "2019", license = "PD", -- should be compatible with Spring layer = 0, enabled = true -- loaded by default? } end
local CMD_FORCE_DROP_UNIT = 35000 local CMD_INSERT = 1 local CMD_DROP_BOMB = 35000 local GetUnitPosition = Spring.GetUnitPosition local GetMyAllyTeamID = Spring.GetMyAllyTeamID local GiveOrderToUnit = Spring.GiveOrderToUnit local GetUnitAllyTeam = Spring.GetUnitAllyTeam local GetMyTeamID = Spring.GetMyTeamID local GetUnitDefID = Spring.GetUnitDefID local nearest = Spring.GetUnitNearestAlly local IsUnitSelected = Spring.IsUnitSelected local Echo = Spring.Echo local Charon_NAME = "gunshiptrans" local Claymore_NAME = "hoverdepthcharge" local GetSpecState = Spring.GetSpectatingState local GetUnitIsTransporting = Spring.GetUnitIsTransporting
function widget:UnitCommand(unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag)
if (cmdID==CMD_INSERT and cmdParams[2]==CMD_FORCE_DROP_UNIT and UnitDefs[unitDefID].name==Charon_NAME) then Echo("Drop command given to Charon:" .. unitID) transportedUnit = GetUnitIsTransporting(unitID) if (transportedUnit[1] == nil) then Echo("No unit being transported") return end transportedUnitID = transportedUnit[1] Echo("Transported unit is:" .. transportedUnitID) DefID = GetUnitDefID(transportedUnitID) Echo("Transported unit DefID is:" .. DefID) if (UnitDefs[DefID].name == Claymore_NAME) then GiveOrderToUnit(transportedUnitID, CMD_DROP_BOMB, {},0) Echo("Bomb drop order given to unit:" .. transportedUnitID) GiveOrderToUnit(unitID, CMD.INSERT,{0, CMD.LOAD_UNITS, CMD.OPT_SHIFT, transportedUnitID}, {"alt"}) Echo("Load order given to unit:" .. unitID) end end end
-- The rest of the code is there to disable the widget for spectators local function DisableForSpec() if GetSpecState() then widgetHandler:RemoveWidget() end end
function widget:Initialize() DisableForSpec() end
function widget:PlayerChanged (playerID) DisableForSpec() end
|
The result is basically a Raven with timed, large AoE bomb. However, because Charons have so low amount of health, they are easily, almost instantly taken down by any form of AA and even many non-AA units are able to shoot down easily a low flying Charon. As such, I suggest that the health of Charon is increased to 700.
While it may seem selfish to request that Charon gets buffed based on solely on a widget I made, I would like to point out that in general the transports can't be used offensively because of the low health pool they have and any other uses, such as moving units closer to frontlines from factory doesn't seem to get used that much either.
For example, trying to launch a quick assault on enemy lines by transporting a squad of units to enemy lines doesn't work because Charons get shot down too quickly and of course that results in fall damage to the units being carried. Giving Charons more health would open up this possibility
Now, lets compare Raven to Charon + Claymore combo:
* 300 metal versus 330 + 100 = 430
* 1000 health versus 300 + 1650 = 1950
* 800 damage AoE 16 versus 900 damage AoE 145 and timer
* Speed 234 versus ?<234 not sure of the exact speed, but Charon carrying Claymore moves slower than a Raven.
* Needs to stop at airport/pad to reload versus needs to unload to ground to reload (reloading is disabled while Claymore is being transported).
* Altitude 220 versus 140
Even if Charon had 700 health, I would say it would be safe to assume that Raven would still be far superior as bomber due to higher mobility, health and altitude, that would probably apply even if Charon had 1000 health like Raven does.
Overrall I would like to see transport units like Charon getting more use. Other such unit that doesn't get much use is Djinn probably due to its high metal cost.