diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 72cccdd1..a6a44189 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -869,4 +869,73 @@ var/list/datum/dna/hivemind_bank = list()
changeling.absorbed_dna |= T.dna
feedback_add_details("changeling_powers","ED")
- return 1
\ No newline at end of file
+ return 1
+
+/mob/proc/armblades()
+ set category = "Changeling"
+ set name = "Form Blades"
+ set desc="Rupture the flesh and mend the bone of your hand into a deadly blade."
+
+ if(!src.get_active_hand())
+ var/obj/item/weapon/melee/changeling/armblade/W = new()
+ src.put_in_hands(W)
+ src.visible_message("A grotesque blade forms around [src]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!")
+ else if(!src.get_inactive_hand())
+ var/obj/item/weapon/melee/changeling/armblade/W = new()
+ src.put_in_hands(W)
+ src.visible_message("A grotesque blade forms around [src]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!")
+ else
+ src << "\red Try dropping an item first."
+ return 1
+
+/obj/item/weapon/melee/changeling/armblade
+ name = "arm blade"
+ desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter"
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "arm_blade"
+ item_state = "arm_blade"
+ w_class = 5.0
+ force = 30
+ throwforce = 0 //Just to be on the safe side
+ throw_range = 0
+ throw_speed = 0
+
+/obj/item/weapon/melee/changeling/armblade/dropped()
+ del(src)
+ return
+
+/obj/item/weapon/melee/changeling/armblade/proc/throw()
+ del(src)
+ return
+
+/mob/proc/changeling_shield()
+ set category = "Changeling"
+ set name = "Form Shield"
+ set desc="Bend the flesh and bone of your hand into a grotesque shield."
+
+ if(!src.get_active_hand())
+ var/obj/item/weapon/shield/riot/changelingshield/W = new()
+ src.put_in_hands(W)
+ src.visible_message("The end of [src]\'s hand inflates rapidly, forming a huge shield-like mass!", "We inflate our hand into a robust shield.", "You hear organic matter ripping and tearing!")
+
+ else if(!src.get_inactive_hand())
+ var/obj/item/weapon/shield/riot/changelingshield/W = new()
+ src.put_in_hands(W)
+ src.visible_message("The end of [src]\'s hand inflates rapidly, forming a huge shield-like mass!", "We inflate our hand into a robust shield.", "You hear organic matter ripping and tearing!")
+ else
+ src << "\red Try dropping an item first."
+ return 1
+
+/obj/item/weapon/shield/riot/changelingshield
+ name = "shield-like mass"
+ desc = "A mass of tough, boney tissue. You can still see the fingers as a twisted pattern in the shield."
+ icon_state = "ling_shield"
+ item_state = "ling_shield"
+
+/obj/item/weapon/shield/riot/changelingshield/dropped()
+ del(src)
+ return
+
+/obj/item/weapon/shield/riot/changelingshield/proc/throw()
+ del(src)
+ return
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm
index 0210a5e9..25f63b66 100644
--- a/code/game/gamemodes/changeling/modularchangling.dm
+++ b/code/game/gamemodes/changeling/modularchangling.dm
@@ -184,6 +184,17 @@ var/list/datum/power/changeling/powerinstances = list()
genomecost = 7
verbpath = /mob/proc/changeling_rapidregen
+/datum/power/changeling/armblades
+ name = "Mutate Armblades"
+ desc = "Permits us to reshape our arms into a deadly blade."
+ genomecost = 1
+ verbpath = /mob/proc/armblades
+
+/datum/power/changeling/changeling_shield
+ name = "Mutate Shield"
+ desc = "Permits us to bloat our hands into a robust shield."
+ genomecost = 3
+ verbpath = /mob/proc/changeling_shield
// Modularchangling, totally stolen from the new player panel. YAYY
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 25bf4144..8165a4eb 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -23,7 +23,7 @@
var/parts = /obj/item/weapon/table_parts
var/flipped = 0
- var/health = 100
+ var/health = 200
/obj/structure/table/proc/update_adjacent()
for(var/direction in list(1,2,4,8,5,6,9,10))
@@ -314,14 +314,14 @@
if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close
return 1
if (get_turf(P.original) == cover)
- var/chance = 20
+ var/chance = 30
if (ismob(P.original))
var/mob/M = P.original
if (M.lying)
- chance += 20 //Lying down lets you catch less bullets
+ chance += 50 //Lying down lets you catch less bullets
if(flipped)
if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets
- chance += 20
+ chance += 50
else
return 1 //But only from one side
if(prob(chance))
@@ -370,6 +370,7 @@
visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!")
msg_admin_attack("[key_name_admin(user)] slams [key_name_admin(M)]'s face against \the [src]! - JMP")
playsound(src.loc, 'sound/weapons/tablehit1.ogg', 50, 1)
+ return
else
user << "\red You need a better grip to do that!"
return
@@ -377,7 +378,7 @@
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("\red [G.assailant] puts [G.affecting] on \the [src].")
- del(W)
+ del(W)
return
if (istype(W, /obj/item/weapon/wrench))
@@ -400,6 +401,11 @@
O.show_message("\blue The [src] was sliced apart by [user]!", 1, "\red You hear [src] coming apart.", 2)
destroy()
+ if(istype(W, /obj/item/weapon/melee/changeling/armblade))
+ for(var/mob/O in viewers(user, 4))
+ O.show_message("\blue The [src] was sliced apart by [user]'s grotesque armblade!", 1, "\red You hear [src] coming apart.", 2)
+ destroy()
+
user.drop_item(src)
return
@@ -520,7 +526,7 @@
desc = "Do not apply fire to this. Rumour says it burns easily."
icon_state = "wood_table"
parts = /obj/item/weapon/table_parts/wood
- health = 50
+ health = 100
/*
* Reinforced tables
*/
@@ -528,7 +534,7 @@
name = "reinforced table"
desc = "A version of the four legged table. It is stronger."
icon_state = "reinf_table"
- health = 200
+ health = 400
var/status = 2
parts = /obj/item/weapon/table_parts/reinforced
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 2da640ed..761e22a7 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -139,4 +139,80 @@
emp_act(severity)
if(prob(50/severity))
wired = 0
- ..()
\ No newline at end of file
+ ..()
+
+ /*
+ 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."
+
+*/
\ No newline at end of file
diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm
index f950aa3a..0e8afb7b 100644
--- a/code/modules/clothing/gloves/stungloves.dm
+++ b/code/modules/clothing/gloves/stungloves.dm
@@ -3,29 +3,33 @@
user << "That won't work." //i'm not putting my lips on that!
..()
return
-
+ else if(istype(src, /obj/item/clothing/gloves/force))
+ user << "That seems like a terrible idea."
+ ..()
+ return
+
//add wires
if(istype(W, /obj/item/weapon/cable_coil))
var/obj/item/weapon/cable_coil/C = W
if (clipped)
user << "The [src] are too badly mangled for wiring."
return
-
+
if(wired)
user << "The [src] are already wired."
return
-
+
if(C.amount < 2)
user << "There is not enough wire to cover the [src]."
return
-
+
C.use(2)
wired = 1
siemens_coefficient = 3.0
user << "You wrap some wires around the [src]."
update_icon()
return
-
+
//add cell
else if(istype(W, /obj/item/weapon/cell))
if(!wired)
@@ -56,12 +60,12 @@
user << "You cut the wires away from the [src]."
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]
They have had the fingertips cut off of them."
@@ -73,9 +77,9 @@
user << "The [src] have already been clipped!"
update_icon()
return
-
+
return
-
+
..()
/obj/item/clothing/gloves/update_icon()
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 855d256b..09aa48f1 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -37,7 +37,7 @@
visible_message("\red [src] has been touched with the stun gloves by [M]!")
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 [M] has weakened [src]!")
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("[M] gets a strong grip on [src]!")
+ return 1
visible_message("[M] has grabbed [src] passively!")
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 [M] [pick(attack.attack_verb)]ed [src]!")
@@ -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 [M] has pushed [src]!")
- 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 [M] hurls [src] to the floor!")
+ 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 [M] has pushed [src]!")
+ 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 [M] shoves, sending [src] flying!")
+ 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 [M] has broken [src]'s grip on [pulling]!")
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index fcf70d03..1e8c1a98 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -193,6 +193,17 @@ emp_act
visible_message("\red [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 [src] has been knocked unconscious!")
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 [src] has been knocked down!")
@@ -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
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 7f0ccf7a..f383fb50 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 441c7bf2..30636b09 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index ea13a5c4..401851a8 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ