sword arms, forcegloves

changeling sword arms + riot shield growth abilities.  as far as i can
tell, bug free.

forcegloves: see thread on forum for details.  i personally think it's a
great idea to make them standard issue for sec or at least put them in
the armoury.  they amp melee damage (varedit amplification if you want
ingame shenanigans with them) and also interact with harm-grab-disarm.
This commit is contained in:
Duck-
2015-03-20 18:49:41 -04:00
parent 4b0ec3d9bd
commit bac5f3e6c0
10 changed files with 239 additions and 33 deletions
+77 -1
View File
@@ -139,4 +139,80 @@
emp_act(severity)
if(prob(50/severity))
wired = 0
..()
..()
/*
Forcegloves. They amplify force from melee hits as well as muck up disarm and stuff a little.
Has bits of code in item_attack.dm, stungloves.dm, human_attackhand, human_defense
*/
/obj/item/clothing/gloves/force // this pair should be put in r&d if you choose to do so. and also the hos office locker. do it okay
desc = "These gloves bend gravity and bluespace, dampening inertia and augmenting the wearer's melee capabilities."
name = "force gloves"
icon_state = "black"
item_state = "swat_gl"
siemens_coefficient = 0.6
permeability_coefficient = 0.05
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
var/active = 1 //i am actually too lazy to code an on/off switch so if you want it off, take them off for now. yes.
var/amplification = 2
/obj/item/clothing/gloves/force/basic //dooo iiiitttttt
desc = "These gloves bend gravity and bluespace, providing a cheap boost to the effectiveness of your average security staff."
name = "basic force gloves" //do it skull do it give it to all sec the forums agree go
amplification = 1 //just do it
/obj/item/clothing/gloves/force/syndicate //for syndies. pda, *maybe* nuke team or ert. up to you. maybe just use the amp 2 variant.
desc = "These gloves bend gravity and bluespace, dampening inertia and augmenting the wearer's melee capabilities."
name = "enhanced force gloves"
icon_state = "black"
item_state = "swat_gl"
amplification = 2.5 //because *2.5 is kind of scary okay. sometimes you want the scary effect. sometimes not.
/* this is too cluttered. i'd rather keep it simple.
verb/toggleGloves() //also this doesn't actually do anything yet. if you want to code in on/off, it needs interactions with the human attackhand file.
set category = "Object"
set name = "Toggle Forceglove Activity"
set src in usr
if (active == 0)
active = 1
amplification = 1.5
usr << "You squeeze twice, activating the gloves and amplifying the force of your blows. Your hands tingle pleasantly."
else if (active == 1)
active = 0
amplification = 1
usr << "You deactivate the forcegloves. Your hands feel heavy."
verb/toggleForceAmp()
set category = "Object"
set name = "Toggle Force-Amplification Level"
set src in usr
if (active == 0)
usr << "You wiggle your fingers, but the gloves aren't active. You activate them, setting the gloves to their lowest setting: Lethal. You will now hit 1.5x as hard."
amplification = 1.5
else if (amplification < 1.5 || amplification == 2.5 )
amplification = 1.5
usr << "You wiggle your fingers, setting the gloves to their lowest setting: Lethal. You will now hit 1.5x as hard."
else if (amplification == 1.5)
amplification = 2
usr << "You wiggle your fingers, setting the gloves to the medium setting: Very Lethal. You will now hit twice as hard."
else if (amplification == 2)
amplification = 2.5
usr << "You wiggle your fingers, setting the gloves to the highest setting: Extremely Lethal. You will now hit 2.5x as hard."
*/
+13 -9
View File
@@ -3,29 +3,33 @@
user << "<span class='notice'>That won't work.</span>" //i'm not putting my lips on that!
..()
return
else if(istype(src, /obj/item/clothing/gloves/force))
user << "<span class='notice'>That seems like a terrible idea.</span>"
..()
return
//add wires
if(istype(W, /obj/item/weapon/cable_coil))
var/obj/item/weapon/cable_coil/C = W
if (clipped)
user << "<span class='notice'>The [src] are too badly mangled for wiring.</span>"
return
if(wired)
user << "<span class='notice'>The [src] are already wired.</span>"
return
if(C.amount < 2)
user << "<span class='notice'>There is not enough wire to cover the [src].</span>"
return
C.use(2)
wired = 1
siemens_coefficient = 3.0
user << "<span class='notice'>You wrap some wires around the [src].</span>"
update_icon()
return
//add cell
else if(istype(W, /obj/item/weapon/cell))
if(!wired)
@@ -56,12 +60,12 @@
user << "<span class='notice'>You cut the wires away from the [src].</span>"
update_icon()
return
//clipping fingertips
if(!clipped)
playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
clipped = 1
name = "mangled [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
@@ -73,9 +77,9 @@
user << "<span class='notice'>The [src] have already been clipped!</span>"
update_icon()
return
return
..()
/obj/item/clothing/gloves/update_icon()
@@ -37,7 +37,7 @@
visible_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>")
return
if(istype(M.gloves , /obj/item/clothing/gloves/boxing/hologlove))
else if(istype(M.gloves , /obj/item/clothing/gloves/boxing/hologlove))
var/damage = rand(0, 9)
if(!damage)
@@ -57,7 +57,6 @@
if(damage >= 9)
visible_message("\red <B>[M] has weakened [src]!</B>")
apply_effect(4, WEAKEN, armor_block)
return
else
if(istype(M,/mob/living/carbon))
@@ -104,9 +103,15 @@
M.put_in_active_hand(G)
grabbed_by += G
G.synch()
LAssailant = M
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves/force))
G.state = GRAB_AGGRESSIVE
G.icon_state = "grabbed1"
visible_message("<span class='warning'>[M] gets a strong grip on [src]!</span>")
return 1
visible_message("<span class='warning'>[M] has grabbed [src] passively!</span>")
return 1
@@ -158,8 +163,9 @@
var/armor_block = run_armor_check(affecting, "melee")
if(HULK in M.mutations) damage += 5
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves/force))
var/obj/item/clothing/gloves/force/X = M.gloves
damage *= X.amplification
playsound(loc, attack.attack_sound, 25, 1, -1)
visible_message("\red <B>[M] [pick(attack.attack_verb)]ed [src]!</B>")
@@ -204,14 +210,37 @@
var/randn = rand(1, 100)
if (randn <= 25)
apply_effect(3, WEAKEN, run_armor_check(affecting, "melee"))
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("\red <B>[M] has pushed [src]!</B>")
return
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves/force))
apply_effect(6, WEAKEN, run_armor_check(affecting, "melee"))
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("\red <B>[M] hurls [src] to the floor!</B>")
step_away(src,M,15)
sleep(3)
step_away(src,M,15)
return
else
apply_effect(3, WEAKEN, run_armor_check(affecting, "melee"))
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("\red <B>[M] has pushed [src]!</B>")
return
var/talked = 0 // BubbleWrap
if(randn <= 60)
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves/force))
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("\red <B>[M] shoves, sending [src] flying!</B>")
step_away(src,M,15)
sleep(1)
step_away(src,M,15)
sleep(1)
step_away(src,M,15)
sleep(1)
step_away(src,M,15)
sleep(1)
apply_effect(1, WEAKEN, run_armor_check(affecting, "melee"))
return
//BubbleWrap: Disarming breaks a pull
if(pulling)
visible_message("\red <b>[M] has broken [src]'s grip on [pulling]!</B>")
@@ -193,6 +193,17 @@ emp_act
visible_message("\red <B>[user] misses [src] with \the [I]!")
return 0
//hulk and forceglove stuff
var/power = I.force
if(HULK in user.mutations)
power *= 2
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/X = user
if(X.gloves && istype(X.gloves,/obj/item/clothing/gloves/force))
var/obj/item/clothing/gloves/force/G = X.gloves
power *= G.amplification
var/datum/organ/external/affecting = get_organ(target_zone)
if (!affecting)
return 0
@@ -201,7 +212,7 @@ emp_act
return 0
var/hit_area = affecting.display_name
if((user != src) && check_shields(I.force, "the [I.name]"))
if((user != src) && check_shields(power, "the [I.name]"))
return 0
if(istype(I,/obj/item/weapon/card/emag))
@@ -230,13 +241,13 @@ emp_act
weapon_edge = 0
if(armor >= 2) return 0
if(!I.force) return 0
if(!power) return 0
// var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
apply_damage(I.force, I.damtype, affecting, armor, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
apply_damage(power, I.damtype, affecting, armor, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
var/bloody = 0
if(((I.damtype == BRUTE) || (I.damtype == HALLOSS)) && prob(25 + (I.force * 2)))
if(((I.damtype == BRUTE) || (I.damtype == HALLOSS)) && prob(25 + (power * 2)))
I.add_blood(src) //Make the weapon bloody, not the person.
// if(user.hand) user.update_inv_l_hand() //updates the attacker's overlay for the (now bloodied) weapon
// else user.update_inv_r_hand() //removed because weapons don't have on-mob blood overlays
@@ -253,7 +264,7 @@ emp_act
switch(hit_area)
if("head")//Harder to score a stun but if you do it lasts a bit longer
if(prob(I.force))
if(prob(power))
apply_effect(20, PARALYZE, armor)
visible_message("\red <B>[src] has been knocked unconscious!</B>")
if(src != user && I.damtype == BRUTE)
@@ -271,7 +282,7 @@ emp_act
update_inv_glasses(0)
if("chest")//Easier to score a stun but lasts less time
if(prob((I.force + 10)))
if(prob((power + 10)))
apply_effect(6, WEAKEN, armor)
visible_message("\red <B>[src] has been knocked down!</B>")
@@ -283,7 +294,7 @@ emp_act
//Melee weapon embedded object code.
if (I.damtype == BRUTE && !I.is_robot_module())
var/damage = I.force
var/damage = power
if (armor)
damage /= armor+1