Goonstation Forums
cyalume sabers pass right trough force fields. - Printable Version

+- Goonstation Forums (https://forum.ss13.co)
+-- Forum: Discussion (https://forum.ss13.co/forumdisplay.php?fid=6)
+--- Forum: Bug Reports (https://forum.ss13.co/forumdisplay.php?fid=9)
+--- Thread: cyalume sabers pass right trough force fields. (/showthread.php?tid=6725)



cyalume sabers pass right trough force fields. - Erik - 07-07-2016

See title, they pass right trough both the force, and the heat shields.


RE: cyalume sabers pass right trough force fields. - Noah Buttes - 07-07-2016

Can you explain the issue in a bit more detail?


RE: cyalume sabers pass right trough force fields. - Erik - 07-07-2016

(07-07-2016, 11:29 AM)Noah Buttes Wrote: Can you explain the issue in a bit more detail?

* Obtain Cyborg with heat and force shields.
* Obtain cyalume saber.
* Hit cyborg with cyalume saber.
* ???


RE: cyalume sabers pass right trough force fields. - Noah Buttes - 07-07-2016

I'm on mobile now, so I can't look into the code, but I think force shields only mitigate damage if the source is too strong to be blocked.

Could be wrong.


RE: cyalume sabers pass right trough force fields. - Noah Buttes - 07-07-2016

Okay, I was right.

Disregarding the various special circumstances for the various borg shields (bullets, blobs, meteors, explosions), we are left with this bit of code:

Code:
    TakeDamage(zone, brute, burn)
        brute = max(brute, 0)
        burn = max(burn, 0)
        if (burn == 0 && brute == 0)
            return 0
        for (var/obj/item/roboupgrade/R in src.upgrades)
            if (istype(R, /obj/item/roboupgrade/fireshield) && R.activated)
                burn = max(burn - 25, 0)
                playsound(get_turf(src), "sound/effects/shieldhit2.ogg", 40, 1)
            if (istype(R, /obj/item/roboupgrade/physshield) && R.activated)
                brute = max(brute - 25, 0)
                playsound(get_turf(src), "sound/effects/shieldhit2.ogg", 40, 1)
        if (burn == 0 && brute == 0)
            boutput(usr, "<span style=\"color:blue\">Your shield completely blocks the attack!</span>")
            return 0

In other words, if a borg with an active shield takes damage from a source that isn't totally negated by the shield prior to the damage check, it will run it through that bit of code. Since melee isn't covered by any pre-damage code, it just goes straight into this. 

Now, let's check the stats on a cyalume saber.

When turned on, a cyalume saber has force = 60. It does brute damage, so let's run it through physshield code.

max(brute - 25, 0) = max(60 - 25, 0) = max(35, 0) = 35.

A cyalume saber should hit through a borg's active force shield for around 35 damage without taking any other factors into account.


Now, the question is whether a c-saber is weakened to this level in practice or if there's some bug causing borgs to take the full 60 damage. The only way I can think of to test this would be to smack a borg with an active c-saber both with and without shields on and to then compare the damage inflicted.