diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm
index 6f363c595c0..2ac5c83977e 100644
--- a/code/defines/obj/storage.dm
+++ b/code/defines/obj/storage.dm
@@ -327,14 +327,15 @@
var/selfdamage = 0
- afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
- if(contents.len && istype(user.loc, /turf) && prob(10))
- // have a chance to swing open
- user.visible_message("\red \The [src] swings wide open and its contents are scattered on the floor!")
- for(var/obj/O in contents)
- O.loc = user.loc
- if(prob(50)) step_rand(O)
- ..()
+/obj/item/weapon/storage/toolbox/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
+ if(contents.len && istype(user.loc, /turf) && prob(10))
+ // have a chance to swing open
+ user.visible_message("\red \The [src] swings wide open and its contents are scattered on the floor!")
+ for(var/obj/O in contents)
+ O.loc = user.loc
+ O.layer = OBJ_LAYER
+ if(prob(50)) step_rand(O)
+ ..()
/obj/item/weapon/storage/toolbox/emergency
name = "emergency toolbox"
diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm
index 6abd5f12319..621352351c4 100755
--- a/code/game/objects/items/item.dm
+++ b/code/game/objects/items/item.dm
@@ -269,6 +269,12 @@ mob/proc/flash_weak_pain()
/////////////////////////
var/power = src.force
+
+ // EXPERIMENTAL: scale power and time to the weight class
+ if(w_class >= 4.0)
+ power = power * 2
+ user.next_move = max(user.next_move, world.time + 20)
+
if(!istype(M, /mob/living/carbon/human))
if(istype(M, /mob/living/carbon/metroid))
var/mob/living/carbon/metroid/Metroid = M
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 537ce19aff8..3f43ffc3548 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -99,50 +99,68 @@ emp_act
var/armor = run_armor_check(affecting, "melee", "Your armor has protected you from a hit to the [hit_area].", "Your armor has softened hit to your [hit_area].")
if(armor >= 2) return 0
if(!I.force) return 0
- apply_damage(I.force, I.damtype, affecting, armor, is_cut(I), I.name)
+
+ // make heavy weapons do more damage
+ var/power = I.force
+ if(I.w_class >= 4)
+ power *= 2
+ apply_damage(, I.damtype, affecting, armor, is_cut(I), I.name)
var/bloody = 0
if((I.damtype == BRUTE) && prob(25 + (I.force * 2)))
I.add_blood(src)
- if(prob(33))
- bloody = 1
- var/turf/location = loc
- if(istype(location, /turf/simulated))
- location.add_blood(src)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.wear_suit) H.wear_suit.add_blood(src)
- else if(H.w_uniform) H.w_uniform.add_blood(src)
- if(H.shoes) H.shoes.add_blood(src)
- if (H.gloves)
- H.gloves.add_blood(H)
- H.gloves.transfer_blood = 2
- H.gloves.bloody_hands_mob = H
- else
- H.add_blood(H)
- H.bloody_hands = 2
- H.bloody_hands_mob = H
+ bloody = 1
+ var/turf/location = loc
+ if(istype(location, /turf/simulated))
+ location.add_blood(src)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.wear_suit) H.wear_suit.add_blood(src)
+ else if(H.w_uniform) H.w_uniform.add_blood(src)
+ if(H.shoes) H.shoes.add_blood(src)
+ if (H.gloves)
+ H.gloves.add_blood(H)
+ H.gloves.transfer_blood = 2
+ H.gloves.bloody_hands_mob = H
+ else
+ H.add_blood(H)
+ H.bloody_hands = 2
+ H.bloody_hands_mob = H
- switch(hit_area)
- if("head")//Harder to score a stun but if you do it lasts a bit longer
- if(prob(I.force))
- apply_effect(20, PARALYZE, armor)
- visible_message("\red [src] has been knocked unconscious!")
- if(src != user)
- ticker.mode.remove_revolutionary(mind)
+ switch(hit_area)
+ if("head")//Harder to score a stun but if you do it lasts a bit longer
+ var/knockout_chance = 0
+ if(power >= 4)
+ knockout_chance += 5
+ if(power >= 10)
+ knockout_chance += 20
+ knockout_chance += power
+ if(health <= 40) knockout_chance += 40
+ if(prob(knockout_chance))
+ apply_effect(20, PARALYZE, armor)
+ visible_message("\red [src] has been knocked unconscious!")
+ if(src != user)
+ ticker.mode.remove_revolutionary(mind)
- if(bloody)//Apply blood
- if(wear_mask) wear_mask.add_blood(src)
- if(head) head.add_blood(src)
- if(glasses && prob(33)) glasses.add_blood(src)
+ if(bloody)//Apply blood
+ if(wear_mask) wear_mask.add_blood(src)
+ if(head) head.add_blood(src)
+ if(glasses && prob(33)) glasses.add_blood(src)
- if("chest")//Easier to score a stun but lasts less time
- if(prob((I.force + 10)))
- apply_effect(5, WEAKEN, armor)
- visible_message("\red [src] has been knocked down!")
+ if("chest")//Easier to score a stun but lasts less time
+ var/knockdown_chance = 0
+ if(power >= 10)
+ knockdown_chance += 10
+ if(I.w_class >= 4)
+ knockdown_chance *= 4
+ knockdown_chance = min(knockdown_chance, 50)
+ if(prob(knockdown_chance))
+ apply_effect(5, WEAKEN, armor)
+ visible_message("\red [src] has been knocked down!")
+
+ if(bloody)
+ if(src.wear_suit) src.wear_suit.add_blood(src)
+ if(src.w_uniform) src.w_uniform.add_blood(src)
- if(bloody)
- if(src.wear_suit) src.wear_suit.add_blood(src)
- if(src.w_uniform) src.w_uniform.add_blood(src)
UpdateDamageIcon()
update_clothing()
\ No newline at end of file