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