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