diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm
index f6bb7866351..0221d31c6f5 100644
--- a/code/game/dna/genes/vg_powers.dm
+++ b/code/game/dna/genes/vg_powers.dm
@@ -221,14 +221,20 @@ Obviously, requires DNA2.
/obj/effect/proc_holder/spell/wizard/targeted/remotetalk/choose_targets(mob/user = usr)
var/list/targets = new /list()
- targets += input("Choose the target to talk to.", "Targeting") as mob in living_mob_list
+ var/list/validtargets = new /list()
+ for(var/mob/M in view(usr))
+ validtargets += M
+ if(!validtargets.len || validtargets.len == 1)
+ usr << "There are no valid targets in range!"
+ start_recharge()
+ return
+ targets += input("Choose the target to talk to.", "Targeting") as mob in validtargets
perform(targets)
/obj/effect/proc_holder/spell/wizard/targeted/remotetalk/cast(list/targets)
if(!ishuman(usr)) return
-
- var/say = input ("What do you wish to say")
+ var/say = input("What do you wish to say")
for(var/mob/living/target in targets)
if(M_REMOTE_TALK in target.mutations)
@@ -267,8 +273,16 @@ Obviously, requires DNA2.
icon_power_button = "genetic_view"
/obj/effect/proc_holder/spell/wizard/targeted/remoteview/choose_targets(mob/user = usr)
- var/list/targets = new /list()
- targets += input("Choose the target to spy on.", "Targeting") as mob in living_mob_list
+ var/list/targets = living_mob_list
+ var/list/remoteviewers = new /list()
+ for(var/mob/M in targets)
+ if(M_REMOTE_VIEW in M.mutations)
+ remoteviewers += M
+ if(!remoteviewers.len || remoteviewers.len == 1)
+ usr << "No valid targets with remote view were found!"
+ start_recharge()
+ return
+ targets += input("Choose the target to spy on.", "Targeting") as mob in remoteviewers
perform(targets)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index d5ce9a990fe..06723250fa2 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -36,6 +36,7 @@
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
+ var/reflect_chance = 0 //This var dictates what % of a time an object will reflect an energy based weapon's shot
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
var/list/allowed = null //suit storage stuff.
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
@@ -557,6 +558,10 @@
/obj/item/proc/IsShield()
return 0
+/obj/item/proc/IsReflect(var/def_zone) //This proc determines if and at what% an object will reflect energy projectiles if it's in l_hand,r_hand or wear_suit
+ if(prob(reflect_chance))
+ return 1
+
/obj/item/proc/get_loc_turf()
var/atom/L = loc
while(L && !istype(L, /turf/))
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index ac63824ee10..1443ebdc671 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -30,10 +30,13 @@
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/melee/energy/sword
+ var/hacked = 0
+ var/blade_color
color
name = "energy sword"
desc = "May the force be within you."
icon_state = "sword0"
+ icon_override = 'icons/mob/in-hand/swords.dmi'
force = 3.0
throwforce = 5.0
throw_speed = 1
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 8f4a66a96d0..e3ea4d5481f 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -203,6 +203,17 @@
item_state = "Dpacket"
+/obj/item/weapon/storage/fancy/cigarettes/syndicate
+ name = "\improper Syndicate Cigarettes"
+ desc = "A packet of six evil-looking cigarettes, A label on the packaging reads, \"Donk Co\""
+ icon_state = "robustpacket"
+ item_state = "robustpacket"
+
+/obj/item/weapon/storage/fancy/cigarettes/syndicate/New()
+ ..()
+ var/new_name = pick("evil", "suspicious", "ominous", "donk-flavored", "robust", "sneaky")
+ name = "[new_name] cigarette packet"
+
/*
* Vial Box
*/
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 1a017d8a207..2a30c76ed4a 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -24,7 +24,7 @@
return 0
/obj/item/weapon/melee/energy/sword/New()
- _color = pick("red","blue","green","purple")
+ blade_color = pick("red","blue","green","purple")
/obj/item/weapon/melee/energy/sword/attack_self(mob/living/user as mob)
if ((M_CLUMSY in user.mutations) && prob(50))
@@ -36,7 +36,7 @@
if(istype(src,/obj/item/weapon/melee/energy/sword/pirate))
icon_state = "cutlass1"
else
- icon_state = "sword[_color]"
+ icon_state = "sword[blade_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
hitsound = 'sound/weapons/blade1.ogg'
@@ -67,9 +67,29 @@
user.adjustBrainLoss(10)
else
user << "You attach the ends of the two energy swords, making a single double-bladed weapon! You're cool."
- new /obj/item/weapon/twohanded/dualsaber(user.loc)
+ var/obj/item/weapon/twohanded/dualsaber/newSaber = new /obj/item/weapon/twohanded/dualsaber(user.loc)
+ if(src.hacked) // That's right, we'll only check the "original" esword.
+ newSaber.hacked = 1
+ newSaber.blade_color = "rainbow"
del(W)
del(src)
+
+ else if(istype(W, /obj/item/device/multitool))
+ if(hacked == 0)
+ hacked = 1
+ blade_color = "rainbow"
+ user << "RNBW_ENGAGE"
+
+ if(active)
+ icon_state = "swordrainbow"
+ // Updating overlays, copied from welder code.
+ // I tried calling attack_self twice, which looked cool, except it somehow didn't update the overlays!!
+ if(user.r_hand == src)
+ user.update_inv_r_hand(0)
+ else if(user.l_hand == src)
+ user.update_inv_l_hand(0)
+ else
+ user << "It's already fabulous!"
/*
* Classic Baton
*/
@@ -139,31 +159,34 @@
slot_flags = SLOT_BELT
w_class = 2
force = 3
- var/cooldown = 0
var/on = 0
+
/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob)
on = !on
if(on)
- user << "You extend the baton."
+ user.visible_message("\red With a flick of their wrist, [user] extends their telescopic baton.",\
+ "\red You extend the baton.",\
+ "You hear an ominous click.")
icon_state = "telebaton_1"
- item_state = "nullrod"
- w_class = 4 //doesnt fit in backpack when its on for balance
- force = 10 //seclite damage
- attack_verb = list("smacked", "struck", "cracked", "beaten")
+ item_state = "telebaton_1"
+ w_class = 3
+ force = 15//quite robust
+ attack_verb = list("smacked", "struck", "slapped")
else
- user << "You collapse the baton."
+ user.visible_message("\blue [user] collapses their telescopic baton.",\
+ "\blue You collapse the baton.",\
+ "You hear a click.")
icon_state = "telebaton_0"
- item_state = "telebaton_0" //no sprite in other words
- slot_flags = SLOT_BELT
+ item_state = "telebaton_0"
w_class = 2
- force = 3 //not so robust now
- attack_verb = list("hit", "poked")
+ force = 3//not so robust now
+ attack_verb = list("hit", "punched")
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
- playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
+ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
add_fingerprint(user)
if (!blood_DNA) return
if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any
@@ -180,9 +203,8 @@
/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
if(on)
- add_fingerprint(user)
- if((M_CLUMSY in user.mutations) && prob(50))
- user << "You club yourself over the head."
+ if ((M_CLUMSY in user.mutations) && prob(50))
+ user << "\red You club yourself over the head."
user.Weaken(3 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
@@ -190,28 +212,23 @@
else
user.take_organ_damage(2*force)
return
- if(isrobot(target))
- ..()
- return
- if(!isliving(target))
- return
if (user.a_intent == "harm")
if(!..()) return
- if(!isrobot(target)) return
+ if(!isrobot(target))
+ playsound(src.loc, "swing_hit", 50, 1, -1)
+ target.Weaken(4)
else
- if(cooldown <= 0)
- playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
- target.Weaken(3)
- add_logs(user, target, "stunned", object="telescopic baton")
- src.add_fingerprint(user)
- target.visible_message("[target] has been knocked down with \the [src] by [user]!")
- if(!iscarbon(user))
- target.LAssailant = null
- else
- target.LAssailant = user
- cooldown = 1
- spawn(40)
- cooldown = 0
+ playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1, -1)
+ target.Weaken(2)
+ target.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [target.name] ([target.ckey])")
+ log_attack("[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+ src.add_fingerprint(user)
+ target.visible_message("\red [target] has been stunned with \the [src] by [user]!")
+ if(!iscarbon(user))
+ target.LAssailant = null
+ else
+ target.LAssailant = user
return
else
return ..()
@@ -282,6 +299,7 @@
active = !active
if (active)
force = 10
+ reflect_chance = 80
icon_state = "eshield[active]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
@@ -290,6 +308,7 @@
force = 3
icon_state = "eshield[active]"
w_class = 1
+ reflect_chance = 0
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
user << "\blue [src] can now be concealed."
if(istype(user,/mob/living/carbon/human))
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index b070240b7af..c407144acba 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -191,6 +191,9 @@ obj/item/weapon/twohanded/
* Double-Bladed Energy Swords - Cheridan
*/
/obj/item/weapon/twohanded/dualsaber
+ var/hacked = 0
+ var/blade_color
+ icon_override = 'icons/mob/in-hand/swords.dmi'
icon_state = "dualsaber0"
name = "double-bladed energy sword"
desc = "Handle with care."
@@ -210,20 +213,16 @@ obj/item/weapon/twohanded/
edge = 1
no_embed = 1 // Like with the single-handed esword, this shouldn't be embedding in people.
-/* Here for when we can add items to left and right hands again, but currently this cannot be done due to the lack of in-hand icons for dual eswords aside from the green one.
/obj/item/weapon/twohanded/dualsaber/New()
- item_color = pick("red", "blue", "green", "purple")
+ blade_color = pick("red", "blue", "green", "purple")
/obj/item/weapon/twohanded/dualsaber/update_icon()
if(wielded)
- icon_state = "dualsaber[item_color][wielded]"
+ icon_state = "dualsaber[blade_color][wielded]"
+ reflect_chance = 80
else
icon_state = "dualsaber0"
-*/
-
-/obj/item/weapon/twohanded/dualsaber/update_icon()
- icon_state = "dualsaber[wielded]"
- return
+ reflect_chance = 0
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
..()
@@ -245,11 +244,19 @@ obj/item/weapon/twohanded/
/obj/item/weapon/twohanded/dualsaber/green
New()
- color = "green"
+ blade_color = "green"
/obj/item/weapon/twohanded/dualsaber/red
New()
- color = "red"
+ blade_color = "red"
+
+/obj/item/weapon/twohanded/dualsaber/purple
+ New()
+ blade_color = "purple"
+
+/obj/item/weapon/twohanded/dualsaber/blue
+ New()
+ blade_color = "blue"
/obj/item/weapon/twohanded/dualsaber/unwield()
..()
@@ -259,6 +266,18 @@ obj/item/weapon/twohanded/
..()
hitsound = 'sound/weapons/blade1.ogg'
+/obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if(istype(W, /obj/item/device/multitool))
+ if(hacked == 0)
+ hacked = 1
+ user << "2XRNBW_ENGAGE"
+ blade_color = "rainbow"
+ update_icon()
+ else
+ user << "It's starting to look like a triple rainbow - no, nevermind."
+
+
//spears
/obj/item/weapon/twohanded/spear
icon_state = "spearglass0"
@@ -284,4 +303,199 @@ obj/item/weapon/twohanded/
/obj/item/weapon/twohanded/spear/kidan
icon_state = "kidanspear0"
name = "Kidan spear"
- desc = "A spear brought over from the Kidan homeworld."
\ No newline at end of file
+ desc = "A spear brought over from the Kidan homeworld."
+
+
+// SINGULOHAMMER
+
+/obj/item/weapon/twohanded/singularityhammer
+ name = "singularity hammer"
+ desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
+
+ icon_override = 'icons/mob/in-hand/swords.dmi'
+ icon_state = "mjollnir0"
+ flags = CONDUCT
+ slot_flags = SLOT_BACK
+ no_embed = 1
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ throwforce = 15
+ throw_range = 1
+ w_class = 5
+ var/charged = 5
+ origin_tech = "combat=5;bluespace=4"
+
+
+
+/obj/item/weapon/twohanded/singularityhammer/New()
+ ..()
+ processing_objects.Add(src)
+
+
+/obj/item/weapon/twohanded/singularityhammer/Destroy()
+ processing_objects.Remove(src)
+ ..()
+
+
+/obj/item/weapon/twohanded/singularityhammer/process()
+ if(charged < 5)
+ charged++
+ return
+
+/obj/item/weapon/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "mjollnir[wielded]"
+ return
+
+
+/obj/item/weapon/twohanded/singularityhammer/proc/vortex(var/turf/pull as turf, mob/wielder as mob)
+ for(var/atom/X in orange(5,pull))
+ if(istype(X, /atom/movable))
+ if(X == wielder) continue
+ if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human)))
+ step_towards(X,pull)
+ step_towards(X,pull)
+ step_towards(X,pull)
+ else if(istype(X,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = X
+ if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
+ var/obj/item/clothing/shoes/magboots/M = H.shoes
+ if(M.magpulse)
+ continue
+ H.apply_effect(1, WEAKEN, 0)
+ step_towards(H,pull)
+ step_towards(H,pull)
+ step_towards(H,pull)
+ return
+
+
+
+/obj/item/weapon/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
+ if(!proximity) return
+ if(wielded)
+ if(charged == 5)
+ charged = 0
+ if(istype(A, /mob/living/))
+ var/mob/living/Z = A
+ Z.take_organ_damage(20,0)
+ playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
+ var/turf/target = get_turf(A)
+ vortex(target,user)
+
+
+/obj/item/weapon/twohanded/mjollnir
+ name = "Mjollnir"
+ desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy."
+ icon_override = 'icons/mob/in-hand/swords.dmi'
+ icon_state = "mjollnir0"
+ flags = CONDUCT
+ slot_flags = SLOT_BACK
+ no_embed = 1
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ throwforce = 30
+ throw_range = 7
+ w_class = 5
+ //var/charged = 5
+ origin_tech = "combat=5;powerstorage=5"
+
+/obj/item/weapon/twohanded/mjollnir/proc/shock(mob/living/target as mob)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
+ s.set_up(5, 1, target.loc)
+ s.start()
+ target.take_organ_damage(0,30)
+ target.visible_message("[target.name] was shocked by the [src.name]!", \
+ "You feel a powerful shock course through your body sending you flying!", \
+ "You hear a heavy electrical crack.")
+ var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
+ target.throw_at(throw_target, 200, 4)
+ return
+
+
+/obj/item/weapon/twohanded/mjollnir/attack(mob/M as mob, mob/user as mob)
+ ..()
+ spawn(0)
+ if(wielded)
+ //if(charged == 5)
+ //charged = 0
+ playsound(src.loc, "sparks", 50, 1)
+ if(istype(M, /mob/living))
+ M.Stun(10)
+ shock(M)
+
+
+/obj/item/weapon/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "mjollnir[wielded]"
+ return
+
+
+
+/obj/item/weapon/twohanded/knighthammer
+ name = "singuloth knight's hammer"
+ desc = "A hammer made of sturdy metal with a golden skull adorned with wings on either side of the head.
This weapon causes devastating damage to those it hits due to a power field sustained by a mini-singularity inside of the hammer."
+
+ icon_override = 'icons/mob/in-hand/swords.dmi'
+ icon_state = "adrhammer0"
+ flags = CONDUCT
+ slot_flags = SLOT_BACK
+ no_embed = 1
+ force = 5
+ force_unwielded = 5
+ force_wielded = 20
+ throwforce = 15
+ throw_range = 1
+ w_class = 5
+ var/charged = 5
+ origin_tech = "combat=5;bluespace=4"
+
+
+
+/obj/item/weapon/twohanded/knighthammer/New()
+ ..()
+ processing_objects.Add(src)
+
+
+/obj/item/weapon/twohanded/knighthammer/Destroy()
+ processing_objects.Remove(src)
+ ..()
+
+
+/obj/item/weapon/twohanded/knighthammer/process()
+ if(charged < 5)
+ charged++
+ return
+
+/obj/item/weapon/twohanded/knighthammer/update_icon() //Currently only here to fuck with the on-mob icons.
+ icon_state = "adrhammer[wielded]"
+ return
+
+
+/obj/item/weapon/twohanded/knighthammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
+ if(!proximity) return
+ if(wielded)
+ if(charged == 5)
+ charged = 0
+ if(istype(A, /mob/living/))
+ var/mob/living/Z = A
+ if(Z.health < 1)
+ Z.visible_message("[Z.name] was blown to peices by the power of [src.name]!", \
+ "You feel a powerful blow rip you apart!", \
+ "You hear a heavy impact and the sound of ripping flesh!.")
+ Z.gib()
+ else
+ Z.take_organ_damage(0,30)
+ Z.visible_message("[Z.name] was sent flying by a blow from the [src.name]!", \
+ "You feel a powerful blow connect with your body and send you flying!", \
+ "You hear something heavy impact flesh!.")
+ var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src)))
+ Z.throw_at(throw_target, 200, 4)
+ else if(istype(A, /turf/simulated/wall))
+ var/turf/simulated/wall/Z = A
+ Z.ex_act(2)
+ charged = 3
+ else if (istype(A, /obj/structure) || istype(A, /obj/mecha/))
+ var/obj/Z = A
+ Z.ex_act(2)
+ charged = 3
+ playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index c2fbc746027..2d58731f4f4 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -60,9 +60,17 @@
icon_state = "armor_reflec"
item_state = "armor_reflec"
blood_overlay_type = "armor"
+ reflect_chance = 40
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0
+/obj/item/clothing/suit/armor/laserproof/IsReflect(var/def_zone)
+ var/hit_reflect_chance = reflect_chance
+ if(!(def_zone in list("chest", "groin"))) //If not shot where ablative is covering you, you don't get the reflection bonus!
+ hit_reflect_chance = 0
+ if (prob(hit_reflect_chance))
+ return 1
+
/obj/item/clothing/suit/armor/swat
name = "swat suit"
desc = "A heavily armored suit that protects against moderate damage. Used in special operations."
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 73b840d96c4..616a0d2ba1d 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -12,35 +12,31 @@ emp_act
var/datum/organ/external/organ = get_organ(check_zone(def_zone))
+ if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
+ if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
+ visible_message("The [P.name] gets reflected by [src]!", \
+ "The [P.name] gets reflected by [src]!")
+ // Find a turf near or on the original location to bounce to
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.original = locate(new_x, new_y, P.z)
+ P.starting = curloc
+ P.current = curloc
+ P.firer = src
+ P.yo = new_y - curloc.y
+ P.xo = new_x - curloc.x
+
+ return -1 // complete projectile permutation
+
//Shields
if(check_shields(P.damage, "the [P.name]"))
P.on_hit(src, 2, def_zone)
return 2
- //Laserproof armour
- if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
- if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
- var/reflectchance = 40 - round(P.damage/3)
- if(!(def_zone in list("chest", "groin")))
- reflectchance /= 2
- if(prob(reflectchance))
- visible_message("\red The [P.name] gets reflected by [src]'s [wear_suit.name]!")
-
- // Find a turf near or on the original location to bounce to
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/turf/curloc = get_turf(src)
-
- // redirect the projectile
- P.original = locate(new_x, new_y, P.z)
- P.starting = curloc
- P.current = curloc
- P.firer = src
- P.yo = new_y - curloc.y
- P.xo = new_x - curloc.x
-
- return -1 // complete projectile permutation
//Shrapnel
if (P.damage_type == BRUTE)
@@ -138,6 +134,20 @@ emp_act
return 1
return 0
+/mob/living/carbon/human/proc/check_reflect(var/def_zone) //Reflection checks for anything in your l_hand, r_hand, or wear_suit based on reflect_chance var of the object
+ if(wear_suit && istype(wear_suit, /obj/item/))
+ var/obj/item/I = wear_suit
+ if(I.IsReflect(def_zone) == 1)
+ return 1
+ if(l_hand && istype(l_hand, /obj/item/))
+ var/obj/item/I = l_hand
+ if(I.IsReflect(def_zone) == 1)
+ return 1
+ if(r_hand && istype(r_hand, /obj/item/))
+ var/obj/item/I = r_hand
+ if(I.IsReflect(def_zone) == 1)
+ return 1
+ return 0
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3)
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 45461b7a69a..706ef2a2011 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -118,7 +118,8 @@
name = "\improper Bulldog shotgun"
desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors. Compatible only with specialized magazines."
icon_state = "bulldog"
- item_state = "c20r"
+ item_state = "bulldog"
+ icon_override = 'icons/mob/in-hand/guns.dmi'
w_class = 3.0
origin_tech = "combat=5;materials=4;syndicate=6"
mag_type = "/obj/item/ammo_box/magazine/m12g"
diff --git a/icons/mob/in-hand/guns.dmi b/icons/mob/in-hand/guns.dmi
new file mode 100644
index 00000000000..8b4f0fa69cd
Binary files /dev/null and b/icons/mob/in-hand/guns.dmi differ
diff --git a/icons/mob/in-hand/swords.dmi b/icons/mob/in-hand/swords.dmi
new file mode 100644
index 00000000000..7d5baa533f8
Binary files /dev/null and b/icons/mob/in-hand/swords.dmi differ
diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi
index 4aa7f8777e4..a2b7d416055 100644
Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 9e6d161ed15..c8af6b5d248 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index daccc94a722..79e7b8cb110 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/nano/debug.html b/nano/debug.html
index 374e8deb2ae..66aeec384b7 100644
--- a/nano/debug.html
+++ b/nano/debug.html
@@ -1,31 +1,31 @@
-
+