Active Protection Systems

Bug #895297 reported by Bug Importer
This bug affects 2 people
Affects Status Importance Assigned to Milestone
In Progress

Bug Description

Let's boil this down to its most basic ok?

Active Protection Systems as a feature for Ares would be a definable ability to cause any projectile attack to impact or detonate a minimum of 1 cell before the actual target. (Like how real active protection systems are)

At its simplest it would involve 2 tags:

APS= ;Does this unit/structure have an active protection system? (Default no)
APSChance= ;Percent chance an attack will be 'intercepted' by the active protection system. (Default 0%)

Going more complicated, it can be expanded further into these tags:

APSRange= ;Range of 'intercept' (Default 1)
APSAnim= ;Animation played per 'intercept' (Default none)
APSForbidden= ;types of things forbidden from being intercepted. Read as a list like EliteAbilities=. Things forbidden would be based on weapon/projectile tags such as Inviso, IsLaser, Lobber, Inaccurate, FlakScatter, and more. (Default none)
APSROF= ;frequency between APS interception attempts. Similar to ROF on weapons. (Default 0)

Opinions? Comments? Skepticism over feasibility?

Revision history for this message
Bug Importer (bug-importer) wrote :

The name Active Protection System sounds kind of like a force-field to me... is that the effect you are going for or are you going for more of a "Point defense laser" like in generals?

Revision history for this message
Renegade (renegade) wrote :
Download full text (4.5 KiB)

APS= is unnecessary.
If somebody wanted an APS, he wouldn't set
and, conversely
makes no sense, either.

As such, a simple "If this has an APSChance of greater than 0, it has an APS" is enough.

I'm not a fan of APSForbidden=; I believe APS.Intercept= would be a better solution, because it allows you to specifically choose what it works on, rather than having to put everything else.
This is especially important in terms of testing and human memory. If you want it to work against bullets, missiles and flak, it is likely you'll test bullets, missiles and flak. If you define the negative, you'll have to test every single other weapon, just to ensure they don't work - that'll inevitably lead to forgotten flags, missed weapons, etc., increasing the number of buggy systems.

As for APS.Range=, it may be better to set that in leptons rather than cells...for one, it's (at least subjectively) finer-grained, and for two, it's less confusing to the user. If a user sets APS.Range=1, he may expect the entire surrounding ring of cells to be a protected zone (as in, "APS.Range=1 means 1 cell next to me in each direction is protected"), when, in reality, it'd be 1 cell from the location of the unit, making it a perfect circle cutting in the middle of surrounding cells.
Leptons would also make working with small values easier, if someone wants to make a small personnel APS.

So, personally, I'd say
APS.Chance=0% ; percentage chance of interception
APS.Range=256 ; in leptons
APS.Intercept=[list] ; projectile types to intercept
APS.ROF=15 ; rate of fire of the APS, in frames
APS.Anim=[animation] ; animation to play on projectile destruction
would be preferable.

That all being said: I've long hoped for an actual shield logic in the game. Since the way I envision that isn't too far away (basically, it's a second health bar & animations to play when shots strike the shield), and there was never a shortage of sci-fi mods in the community, it might makes sense to combine these two and just create a general, customizable shield logic, which can be set to behave like the APS described here.

I think the shield could easily be described as
Shield.Chance=100% ; percentage chance of interception
Shield.Health=500 ; how much damage to take before the shield collapses
Shield.Range=256 ; in leptons
Shield.Intercept=[list] ; projectile types to intercept
Shield.ROF=0 ; rate of fire of the shield, in frames
Shield.Anim=[animation] ; animation to play on projectile destruction
Shield.ShieldAnim=[animation] ; general surrounding forcefield anim
Come to think of it, APS.Health + secondary health bar could easily be used to show how much ammo the APS has left. Would just need a switch somewhere to toggle between "deduct 1 for each hit" for APS and "deduct $damage for each hit" for shields.

The more I think about it, the more I think just creating a full shield logic that is customizable enough to allow usage as an APS is the best way.
(Ultimately, you just know if we added an APS as described, the sci-fi people would abuse it to create shields anyway. One way or another, the system will be used...


Revision history for this message
WoRmINaToR (worminator) wrote :

I was wondering, is it possible with current projectile codes to make shield and APS systems (as you are coding them) intercept inviso= projectiles, like gunfire and lasers? I am most concerned with shields, as I would make heavy use of them in my mod.

Also, for the Intercepts= [list], will there be an easier way for us to tell it to intercept ALL projectile threats, short of listing every projectile in our mod?

(Oh and a sidenote; I support the above thought train about just making shield logic, as it is almost identical to APS, with flexibility enough to behave like an APS with light modifications.)

Revision history for this message
Droke (droke) wrote :

This is a feature I would definitely use. I do, however, have a number of questions about it's implementation.

Is the projectile detonated or deleted? Some AP Systems can prevent proper detonation, while shields would act more wall like.

I'm also curious about cellspead, specially since this is a projectile based logic. Should the projectile detonate, would the unit take damage? APS would have the bonus of distance, but otherwise lack the protection shielding would provide. Also, would indirect attacks trigger damage absorption?

What about regeneration? I would assume shields would recharge while APS would dock. I also suggest making Shield.Heath=0 or another value to unlimit the usage, leaving Shield.ROF to handle balance.

Perhaps something like these would work?
Shield=true ; sets Shield.Health and CellSpread handling
Shield.RestoreValue=10 ; how much to regenerate, 0 implies docking
Shield.RestoreRate=6 ; how fast to regenerate, in frames
Shield.Disarm=false ; projectile goes boom

This is just what came to mind, any iteration would be useful to me.

Revision history for this message
WoRmINaToR (worminator) wrote :

that is actually a very useful set of ideas; I would definitely like to see this being worked on.

How big of an issue is this to code Renegade/DCoder? If it's a pain in the ass I understand, but do you have any idea when you may be able to look into it?

Revision history for this message
DCoder DCoder (dcoder1337) wrote :

"Target version: 0.3"

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Related blueprints

Remote bug watches

Bug watches keep track of this bug in other bug trackers.