mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-07-19 20:23:07 +01:00
[MIRROR] Adds Gooborgs & Toggleable Stomach Glowing for Borgs (#10418)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
4a4293a9e4
commit
2cd485cbba
@@ -8,6 +8,12 @@
|
||||
/obj/item/melee/robotic/proc/weapon_flag_check(var/flag_to_check) //Checks for the flag of the gun.
|
||||
return (borg_flags & flag_to_check)
|
||||
|
||||
// THESE ARE OUTLIERS THAT SHOULD BE INCLUDED IN /MELEE BUT ARE SO HARDCODED THAT DOING SUCH WOULD BE A NIGHTMARE.
|
||||
// THIS LIST SHOULD BE SHORT AND ONLY INCLUDE THINGS THAT ARE ABSOLUTELY NECESSARY.
|
||||
/obj/item/pickaxe/proc/weapon_flag_check(var/flag_to_check) //Checks for the flag of the gun.
|
||||
return (borg_flags & flag_to_check)
|
||||
|
||||
|
||||
/// The base gun types. Build off these four.
|
||||
/obj/item/gun/energy/robotic
|
||||
name = "Cybernetic Gun"
|
||||
@@ -190,7 +196,7 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker
|
||||
/obj/item/melee/robotic/borg_combat_shocker //Like a baton, but is always on.
|
||||
name = "combat shocker"
|
||||
icon = 'icons/mob/dogborg_vr.dmi'
|
||||
icon_state = "combatshocker"
|
||||
@@ -203,12 +209,26 @@
|
||||
var/charge_cost = 15
|
||||
var/dogborg = FALSE
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker/proc/deductcharge()
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/obj/item/cell/bcell
|
||||
if(istype(R))
|
||||
bcell = R.cell
|
||||
if(!bcell)
|
||||
return FALSE
|
||||
if(bcell.checked_use(600))
|
||||
return TRUE
|
||||
return null
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker/attack(mob/M, mob/user)
|
||||
deductcharge(600)
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
if(isrobot(target))
|
||||
return ..()
|
||||
|
||||
var/agony = 60 // Copied from stun batons
|
||||
var/stun = 0 // ... same
|
||||
var/agony = 60
|
||||
|
||||
var/obj/item/organ/external/affecting = null
|
||||
if(ishuman(target))
|
||||
@@ -216,11 +236,8 @@
|
||||
affecting = H.get_organ(hit_zone)
|
||||
|
||||
if(user.a_intent == I_HURT)
|
||||
// Parent handles messages
|
||||
. = ..()
|
||||
//whacking someone causes a much poorer electrical contact than deliberately prodding them.
|
||||
agony *= 0.5
|
||||
stun *= 0.5
|
||||
else
|
||||
if(affecting)
|
||||
if(dogborg)
|
||||
@@ -232,21 +249,13 @@
|
||||
target.visible_message(span_danger("[target] has been zap-chomped with [src] by [user]!"))
|
||||
else
|
||||
target.visible_message(span_danger("[target] has been zapped with [src] by [user]!"))
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
|
||||
// Try to use power
|
||||
var/stunning = FALSE
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R.cell?.use(charge_cost) == charge_cost)
|
||||
stunning = TRUE
|
||||
|
||||
if(stunning)
|
||||
target.stun_effect_act(stun, agony, hit_zone, src)
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.forcesay(hit_appends)
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
target.stun_effect_act(0, agony, hit_zone, src)
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
/obj/item/melee/robotic/blade //For downstreams that use blade
|
||||
name = "Robotic Blade"
|
||||
@@ -277,3 +286,183 @@
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced")
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic
|
||||
name = "ionic rapier"
|
||||
desc = "Designed specifically for disrupting electronics at close range, it is extremely deadly against synthetics, but almost harmless to pure organic targets."
|
||||
description_info = "This is a dangerous melee weapon that will deliver a moderately powerful electromagnetic pulse to whatever it strikes. \
|
||||
Striking a lesser robotic entity will compel it to attack you, as well. It also does extra burn damage to robotic entities, but it does \
|
||||
very little damage to purely organic targets."
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic/afterattack(var/atom/movable/AM, var/mob/living/user, var/proximity)
|
||||
if(istype(AM, /obj) && proximity)
|
||||
// EMP stuff.
|
||||
var/obj/O = AM
|
||||
O.emp_act(3) // A weaker severity is used because this has infinite uses.
|
||||
playsound(O, 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
user.setClickCooldown(user.get_attack_speed(src)) // A lot of objects don't set click delay.
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
. = ..()
|
||||
if(target.isSynthetic())
|
||||
// Do some extra damage. Not a whole lot more since emp_act() is pretty nasty on FBPs already.
|
||||
target.emp_act(3) // A weaker severity is used because this has infinite uses.
|
||||
playsound(target, 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
target.adjustFireLoss(force * 3) // 15 Burn, for 20 total.
|
||||
playsound(target, 'sound/weapons/blade1.ogg', 100, 1)
|
||||
|
||||
// Make lesser robots really mad at us.
|
||||
if(target.mob_class & MOB_CLASS_SYNTHETIC)
|
||||
if(target.has_AI())
|
||||
target.taunt(user)
|
||||
target.adjustFireLoss(force * 6) // 30 Burn, for 50 total.
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic/lance
|
||||
name = "zero-point lance"
|
||||
desc = "Designed specifically for disrupting electronics at relatively close range, however it is still capable of dealing some damage to living beings."
|
||||
force = 20
|
||||
armor_penetration = 15
|
||||
reach = 2
|
||||
|
||||
/obj/item/melee/robotic/baton
|
||||
name = "stunbaton"
|
||||
desc = "A stun baton for incapacitating people with."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "stunbaton_active"
|
||||
item_state = "baton"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
sharp = FALSE
|
||||
edge = FALSE
|
||||
flags = NOCONDUCT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
drop_sound = 'sound/items/drop/metalweapon.ogg'
|
||||
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
attack_verb = list("beaten")
|
||||
var/stunforce = 0
|
||||
var/agonyforce = 60
|
||||
var/hitcost = 500
|
||||
var/status = 1 //On by default.
|
||||
var/lightcolor = "#FF6A00"
|
||||
borg_flags = COUNTS_AS_ROBOTIC_MELEE
|
||||
|
||||
/obj/item/melee/robotic/baton/update_icon()
|
||||
if(status)
|
||||
icon_state = "[initial(name)]_active"
|
||||
else
|
||||
icon_state = "[initial(name)]"
|
||||
if(icon_state == "[initial(name)]_active")
|
||||
set_light(2, 1, lightcolor)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/item/melee/robotic/baton/attack_hand(mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/melee/robotic/baton/attack_self(mob/user)
|
||||
status = !status
|
||||
to_chat(user, span_notice("[src] is now [status ? "on" : "off"]."))
|
||||
playsound(src, "sparks", 75, 1, -1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/melee/robotic/baton/attackby(obj/item/W, mob/user)
|
||||
return
|
||||
|
||||
/obj/item/melee/robotic/baton/proc/deductcharge()
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/obj/item/cell/bcell
|
||||
if(istype(R))
|
||||
bcell = R.cell
|
||||
if(!bcell)
|
||||
return FALSE
|
||||
if(bcell.checked_use(hitcost))
|
||||
return TRUE
|
||||
return null
|
||||
|
||||
/obj/item/melee/robotic/baton/attack(mob/M, mob/user)
|
||||
if(status)
|
||||
deductcharge(hitcost)
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/robotic/baton/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
if(isrobot(target))
|
||||
return ..()
|
||||
|
||||
var/agony = agonyforce
|
||||
var/stun = stunforce
|
||||
var/obj/item/organ/external/affecting = null
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
affecting = H.get_organ(hit_zone)
|
||||
|
||||
if(user.a_intent == I_HURT)
|
||||
. = ..()
|
||||
//whacking someone causes a much poorer electrical contact than deliberately prodding them.
|
||||
agony *= 0.5
|
||||
stun *= 0.5
|
||||
|
||||
//We are off!
|
||||
if(!status)
|
||||
if(affecting)
|
||||
target.visible_message(span_warning("[target] has been prodded in the [affecting.name] with [src] by [user]. Luckily it was off."))
|
||||
else
|
||||
target.visible_message(span_warning("[target] has been prodded with [src] by [user]. Luckily it was off."))
|
||||
return
|
||||
|
||||
//We are on!
|
||||
if(affecting)
|
||||
target.visible_message(span_danger("[target] has been prodded in the [affecting.name] with [src] by [user]!"))
|
||||
else
|
||||
target.visible_message(span_danger("[target] has been prodded with [src] by [user]!"))
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
target.stun_effect_act(stun, agony, hit_zone, src)
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
/obj/item/melee/robotic/baton/arm
|
||||
name = "electrified arm"
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
icon_state = "shock"
|
||||
|
||||
hitcost = 750
|
||||
agonyforce = 70
|
||||
|
||||
/obj/item/melee/robotic/baton/shocker
|
||||
name = "shocker"
|
||||
desc = "A device that appears to arc electricity into a target to incapacitate or otherwise hurt them, similar to a stun baton. It looks inefficent."
|
||||
description_info = "Hitting a lesser lifeform with this while it is on will compel them to attack you above other nearby targets. Otherwise \
|
||||
it works like a regular stun baton, just less effectively."
|
||||
icon_state = "shocker_active"
|
||||
force = 10
|
||||
agonyforce = 25 // Less efficent than a regular baton.
|
||||
attack_verb = list("poked")
|
||||
|
||||
/obj/item/melee/robotic/baton/shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
..(target, user, hit_zone)
|
||||
if(target.has_AI())
|
||||
target.taunt(user)
|
||||
|
||||
/obj/item/melee/robotic/baton/slime
|
||||
hitcost = 200
|
||||
|
||||
/obj/item/melee/robotic/baton/slime/attack(mob/living/L, mob/user, hit_zone)
|
||||
if(!istype(L))
|
||||
return ..()
|
||||
|
||||
if(L.mob_class & MOB_CLASS_SLIME) // Are they some kind of slime? (Prommies might pass this check someday).
|
||||
if(isslime(L))
|
||||
var/mob/living/simple_mob/slime/S = L
|
||||
S.slimebatoned(user, 5) // Feral and xenobio slimes will react differently to this.
|
||||
else
|
||||
L.Weaken(5)
|
||||
|
||||
// Now for prommies.
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.species && H.species.name == SPECIES_PROMETHEAN)
|
||||
H.apply_damage(35, HALLOSS)
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user