diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index fa53637f880..6ff11daf91c 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -11,6 +11,7 @@ icon_state = "minimoog" anchored = 1 density = 1 + w_class = 5 var/datum/song/song var/playing = 0 var/help = 0 @@ -26,6 +27,7 @@ name = "space piano" desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't." icon_state = "piano" + w_class = 15 /obj/structure/device/piano/proc/playnote(var/note as text) //world << "Note: [note]" diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index dc19fcdd7eb..ac64683ba5c 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -316,9 +316,7 @@ "With a loud thud, you land on \the [loc]!", "You hear a thud!") var/z_velocity = 5*(levels_fallen**2) - var/damage = ((30 + z_velocity) + rand(-15,15)) - apply_damage(damage, BRUTE) - apply_damage(damage, BRUTE) + var/damage = ((60 + z_velocity) + rand(-20,20)) apply_damage(damage, BRUTE) // The only piece of duplicate code. I was so close. Soooo close. :ree: @@ -351,37 +349,74 @@ "You hear an electric *whirr* right after the slam!") return FALSE - visible_message("\The [src] falls and lands on \the [loc]!", - "With a loud thud, you land on \the [loc]!", "You hear a thud!") + var/combat_roll = 1 + if(lying) + combat_roll = 0.7 //If you're sleeping, you take less damage because your body is less rigid. It's science 'n shit. + if(!sleeping) + combat_roll = 0.2 //Combat roll! + visible_message("\The [src] tucks into a roll as they hit \the [loc]!", + "You tuck into a roll as you hit \the [loc], minimizing damage!") var/z_velocity = 5*(levels_fallen**2) - var/damage = (((25 * species.fall_mod) + z_velocity) + rand(-13,13)) - if(prob(20)) //landed on their head - apply_damage(damage, BRUTE, "head") + var/damage = (((60 * species.fall_mod) + z_velocity) + rand(-20,20)) * combat_roll + var/limb_damage = rand(0,damage/2) - else if(prob(20)) //landed on their arms - apply_damage(damage, BRUTE, "l_arm") - apply_damage(damage, BRUTE, "r_arm") + if(prob(30) && combat_roll >= 1) //landed on their head + apply_damage(limb_damage, BRUTE, "head") + visible_message("\The [src] falls and lands on their face!", + "With a loud thud, you land on your head. Hard.", "You hear a thud!") + + else if(prob(30) && combat_roll >= 1) //landed on their arms + var/left_damage = rand(0,damage/4) + var/right_damage = rand(0,damage/4) + var/lefth_damage = rand(0,damage/4) + var/righth_damage = rand(0,damage/4) + + apply_damage(left_damage, BRUTE, "l_arm") + apply_damage(right_damage, BRUTE, "r_arm") if(prob(50)) - apply_damage(rand(0, (damage/2)), BRUTE, "r_hand") + apply_damage(lefth_damage, BRUTE, "r_hand") if(prob(50)) - apply_damage(rand(0, (damage/2)), BRUTE, "l_hand") + apply_damage(righth_damage, BRUTE, "l_hand") - else //landed on their legs - apply_damage(10 + rand(10, damage), BRUTE, "l_leg") - apply_damage(10 + rand(10, damage), BRUTE, "r_leg") + limb_damage = left_damage + right_damage + lefth_damage + righth_damage + + visible_message("\The [src] falls and lands arms first!", + "You brace your fall with your arms, hitting \the [loc] with a loud thud.", "You hear a thud!") + + else if(prob(30) && combat_roll >= 1)//landed on their legs + var/left_damage = rand(0,damage/2) + var/right_damage = rand(0,damage/2) + var/leftf_damage = rand(0,damage/4) + var/rightf_damage = rand(0,damage/4) + var/groin_damage = rand(0,damage/4) + + + apply_damage(left_damage, BRUTE, "l_leg") + apply_damage(right_damage, BRUTE, "r_leg") if(prob(50)) - apply_damage(rand(0, (damage/2)), BRUTE, "r_foot") + apply_damage(leftf_damage, BRUTE, "r_foot") if(prob(50)) - apply_damage(rand(0, (damage/2)), BRUTE, "l_foot") + apply_damage(leftf_damage, BRUTE, "l_foot") if(prob(50)) - apply_damage(rand(0, (damage/2)), BRUTE, "groin") + apply_damage(groin_damage, BRUTE, "groin") - apply_damage(damage, BRUTE, "chest") + visible_message("\The [src] falls and lands directly on their legs!", + "You land on your feet, and the impact brings you to your knees.") - Weaken(rand(0, damage/2)) + limb_damage = left_damage + right_damage + leftf_damage + rightf_damage + groin_damage + + else + limb_damage = 0 + if(combat_roll >= 0.5) + visible_message("\The [src] falls and lands on \the [loc]!", + "With a loud thud, you land on \the [loc]!", "You hear a thud!") + + apply_damage(damage - limb_damage, "chest") + + Weaken(rand(damage/2, damage)) updatehealth() @@ -418,10 +453,7 @@ return var/z_velocity = 5*(levels_fallen**2) - var/damage = ((40 + z_velocity) + rand(-20,20)) - take_damage(damage) - take_damage(damage) - take_damage(damage) + var/damage = ((60 + z_velocity) + rand(-20,20)) take_damage(damage) playsound(loc, "sound/effects/bang.ogg", 100, 1) @@ -433,10 +465,7 @@ return var/z_velocity = 5*(levels_fallen**2) - var/damage = ((35 + z_velocity) + rand(-18,18)) - health -= (damage * brute_dam_coeff) - health -= (damage * brute_dam_coeff) - health -= (damage * brute_dam_coeff) + var/damage = ((60 + z_velocity) + rand(-20,20)) health -= (damage * brute_dam_coeff) playsound(loc, "sound/effects/clang.ogg", 75, 1) @@ -465,12 +494,17 @@ var/weight = fall_specs[1] var/fall_force = fall_specs[2] - var/speed = (levels_fallen-1) + throw_speed - var/mass = (weight / THROWNOBJ_KNOCKBACK_DIVISOR) + density + opacity //1 - var/momentum = speed * mass //8 - var/damage = round(fall_force * (speed / THROWNOBJ_KNOCKBACK_DIVISOR) * momentum) //64 + if(weight >= 3 && fall_force <= 5) //Necessary because some big large obj's do not have a defined throw_force (mechs, lockers, pianos, etc) + fall_force = throw_range - var/miss_chance = max(15 * (levels_fallen - 1), 0) + var/speed = ((levels_fallen-1) + throw_speed) / THROWFORCE_SPEED_DIVISOR + var/mass = weight + density + opacity //1 + var/momentum = speed * mass //8 + if(weight <= 10) //Keeps damages sane. + momentum = momentum / THROWNOBJ_KNOCKBACK_DIVISOR + var/damage = round(fall_force * momentum) //64 + + var/miss_chance = max(10 * (levels_fallen), 0) if (prob(miss_chance)) return null @@ -492,14 +526,14 @@ if (ishuman(L)) var/mob/living/carbon/human/H = L - H.apply_damage(rand(damage / 2, damage), BRUTE, "head") - H.apply_damage(damage, BRUTE, "chest") + var/cranial_damage = rand(0,damage/2) + H.apply_damage(cranial_damage, BRUTE, "head") + H.apply_damage((damage - cranial_damage), BRUTE, "chest") if (damage >= THROWNOBJ_KNOCKBACK_DIVISOR) H.Weaken(rand(damage / 4, damage / 2)) else L.apply_damage(damage, BRUTE) - L.apply_damage(rand(damage / 2, damage), BRUTE) L.visible_message("\The [L] had \the [src] fall onto \him!", "You had \the [src] fall onto you and strike you!")