mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 09:54:52 +00:00
more changes
This commit is contained in:
@@ -997,13 +997,15 @@ Proc for attack log creation, because really why not
|
||||
* * base_roll- Base wounding ability of an attack is a random number from 1 to (dealt_damage ** WOUND_DAMAGE_EXPONENT). This is the number that was rolled in there, before mods
|
||||
*/
|
||||
/proc/log_wound(atom/victim, datum/wound/suffered_wound, dealt_damage, dealt_wound_bonus, dealt_bare_wound_bonus, base_roll)
|
||||
var/message = "has suffered: [suffered_wound] to [suffered_wound.limb.name]" // maybe indicate if it's a promote/demote?
|
||||
if(QDELETED(victim) || !suffered_wound)
|
||||
return
|
||||
var/message = "has suffered: [suffered_wound][suffered_wound.limb ? " to [suffered_wound.limb.name]" : null]"// maybe indicate if it's a promote/demote?
|
||||
|
||||
if(dealt_damage)
|
||||
message += " | Damage: [dealt_damage]"
|
||||
// The base roll is useful since it can show how lucky someone got with the given attack. For example, dealing a cut
|
||||
if(base_roll)
|
||||
message += "(rolled [base_roll]/[dealt_damage ** WOUND_DAMAGE_EXPONENT])"
|
||||
message += " (rolled [base_roll]/[dealt_damage ** WOUND_DAMAGE_EXPONENT])"
|
||||
|
||||
if(dealt_wound_bonus)
|
||||
message += " | WB: [dealt_wound_bonus]"
|
||||
|
||||
@@ -542,8 +542,12 @@ GENETICS SCANNER
|
||||
render_list += "</span>"
|
||||
|
||||
if(render_list == "")
|
||||
playsound(scanner, 'sound/machines/ping.ogg', 50, FALSE)
|
||||
to_chat(user, "<span class='notice'>\The [scanner] makes a happy ping and briefly displays a smiley face with several exclamation points! It's really excited to report that [patient] has no wounds!</span>")
|
||||
if(istype(scanner))
|
||||
// Only emit the cheerful scanner message if this scan came from a scanner
|
||||
playsound(scanner, 'sound/machines/ping.ogg', 50, FALSE)
|
||||
to_chat(user, "<span class='notice'>\The [scanner] makes a happy ping and briefly displays a smiley face with several exclamation points! It's really excited to report that [patient] has no wounds!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice ml-1'>No wounds detected in subject.</span>")
|
||||
else
|
||||
to_chat(user, jointext(render_list, ""))
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "wizard"
|
||||
gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE
|
||||
permeability_coefficient = 0.01
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100, "wound" = 20)
|
||||
strip_delay = 50
|
||||
equip_delay_other = 50
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
@@ -5,10 +5,8 @@
|
||||
icon_state = "explorer"
|
||||
item_state = "explorer"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
cold_protection = CHEST|GROIN|LEGS|ARMS
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
heat_protection = CHEST|GROIN|LEGS|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
hoodtype = /obj/item/clothing/head/hooded/explorer
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50)
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAUR
|
||||
@@ -24,8 +22,6 @@
|
||||
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
cold_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
heat_protection = HEAD
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50, "wound" = 10)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
if(hit_atom.density && isturf(hit_atom))
|
||||
if(hurt)
|
||||
DefaultCombatKnockdown(20)
|
||||
take_bodypart_damage(10 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed)
|
||||
take_bodypart_damage(10 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5)
|
||||
if(iscarbon(hit_atom) && hit_atom != src)
|
||||
var/mob/living/carbon/victim = hit_atom
|
||||
if(victim.movement_type & FLYING)
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
#define SWOOP_DAMAGEABLE 1
|
||||
#define SWOOP_INVULNERABLE 2
|
||||
|
||||
///used whenever the drake generates a hotspot
|
||||
#define DRAKE_FIRE_TEMP 500
|
||||
///used whenever the drake generates a hotspot
|
||||
#define DRAKE_FIRE_EXPOSURE 50
|
||||
|
||||
/*
|
||||
|
||||
ASH DRAKE
|
||||
@@ -148,7 +153,7 @@ Difficulty: Medium
|
||||
break
|
||||
range--
|
||||
new /obj/effect/hotspot(J)
|
||||
J.hotspot_expose(700,50,1)
|
||||
J.hotspot_expose(DRAKE_FIRE_TEMP, DRAKE_FIRE_EXPOSURE, 1)
|
||||
for(var/mob/living/L in J.contents - hit_things)
|
||||
if(istype(L, /mob/living/simple_animal/hostile/megafauna/dragon))
|
||||
continue
|
||||
@@ -404,7 +409,7 @@ Difficulty: Medium
|
||||
if(istype(T, /turf/closed))
|
||||
break
|
||||
new /obj/effect/hotspot(T)
|
||||
T.hotspot_expose(700,50,1)
|
||||
T.hotspot_expose(DRAKE_FIRE_TEMP,DRAKE_FIRE_EXPOSURE,1)
|
||||
for(var/mob/living/L in T.contents)
|
||||
if(L in hit_list || L == source)
|
||||
continue
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
rogue_types = list(/datum/nanite_program/toxic)
|
||||
|
||||
/datum/nanite_program/self_scan/register_extra_settings()
|
||||
extra_settings[NES_SCAN_TYPE] = new /datum/nanite_extra_setting/type("Medical", list("Medical", "Chemical", "Nanite"))
|
||||
extra_settings[NES_SCAN_TYPE] = new /datum/nanite_extra_setting/type("Medical", list("Medical", "Chemical", "Wound", "Nanite"))
|
||||
|
||||
/datum/nanite_program/self_scan/on_trigger(comm_message)
|
||||
if(host_mob.stat == DEAD)
|
||||
@@ -62,6 +62,8 @@
|
||||
healthscan(host_mob, host_mob)
|
||||
if("Chemical")
|
||||
chemscan(host_mob, host_mob)
|
||||
if("Wound")
|
||||
woundscan(host_mob, host_mob)
|
||||
if("Nanite")
|
||||
SEND_SIGNAL(host_mob, COMSIG_NANITE_SCAN, host_mob, TRUE)
|
||||
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
sharpness = IS_SHARP_ACCURATE
|
||||
tool_behaviour = TOOL_SCALPEL
|
||||
toolspeed = 1
|
||||
bare_wound_bonus = 20
|
||||
|
||||
/obj/item/scalpel/Initialize()
|
||||
. = ..()
|
||||
@@ -247,6 +248,8 @@
|
||||
sharpness = IS_SHARP
|
||||
tool_behaviour = TOOL_SAW
|
||||
toolspeed = 1
|
||||
wound_bonus = 10
|
||||
bare_wound_bonus = 15
|
||||
|
||||
/obj/item/circular_saw/Initialize()
|
||||
. = ..()
|
||||
@@ -374,3 +377,18 @@
|
||||
advanced_surgeries |= OC.advanced_surgeries
|
||||
return TRUE
|
||||
return
|
||||
|
||||
/obj/item/bonesetter
|
||||
name = "bonesetter"
|
||||
desc = "For setting things right."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "bone setter"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
custom_materials = list(/datum/material/iron=5000, /datum/material/glass=2500)
|
||||
flags_1 = CONDUCT_1
|
||||
item_flags = SURGICAL_TOOL
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("corrected", "properly set")
|
||||
tool_behaviour = TOOL_BONESET
|
||||
toolspeed = 1
|
||||
|
||||
@@ -479,7 +479,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
|
||||
var/crit_case
|
||||
if(crit)
|
||||
crit_case = rand(1,5)
|
||||
crit_case = rand(1,6)
|
||||
|
||||
if(forcecrit)
|
||||
crit_case = forcecrit
|
||||
@@ -491,7 +491,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
if(istype(C))
|
||||
var/crit_rebate = 0 // lessen the normal damage we deal for some of the crits
|
||||
|
||||
if(crit_case != 5) // the head asplode case has its own description
|
||||
if(crit_case < 5) // the head asplode case has its own description
|
||||
C.visible_message("<span class='danger'>[C] is crushed by [src]!</span>", \
|
||||
"<span class='userdanger'>You are crushed by [src]!</span>")
|
||||
|
||||
@@ -501,10 +501,10 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
C.bleed(150)
|
||||
var/obj/item/bodypart/l_leg/l = C.get_bodypart(BODY_ZONE_L_LEG)
|
||||
if(l)
|
||||
l.receive_damage(brute=200, updating_health=TRUE)
|
||||
l.receive_damage(brute=200)
|
||||
var/obj/item/bodypart/r_leg/r = C.get_bodypart(BODY_ZONE_R_LEG)
|
||||
if(r)
|
||||
r.receive_damage(brute=200, updating_health=TRUE)
|
||||
r.receive_damage(brute=200)
|
||||
if(l || r)
|
||||
C.visible_message("<span class='danger'>[C]'s legs shatter with a sickening crunch!</span>", \
|
||||
"<span class='userdanger'>Your legs shatter with a sickening crunch!</span>")
|
||||
@@ -526,7 +526,18 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
// the new paraplegic gets like 4 lines of losing their legs so skip them
|
||||
visible_message("<span class='danger'>[C]'s spinal cord is obliterated with a sickening crunch!</span>", ignored_mobs = list(C))
|
||||
C.gain_trauma(/datum/brain_trauma/severe/paralysis/spinesnapped)
|
||||
if(5) // skull squish!
|
||||
if(5) // limb squish!
|
||||
for(var/i in C.bodyparts)
|
||||
var/obj/item/bodypart/squish_part = i
|
||||
if(squish_part.is_organic_limb())
|
||||
//var/type_wound = pick(WOUND_LIST_BONE)
|
||||
var/type_wound = pick(list(/datum/wound/brute/bone/critical, /datum/wound/brute/bone/severe, /datum/wound/brute/bone/critical, /datum/wound/brute/bone/severe, /datum/wound/brute/bone/moderate))
|
||||
squish_part.force_wound_upwards(type_wound)
|
||||
else
|
||||
squish_part.receive_damage(brute=30)
|
||||
C.visible_message("<span class='danger'>[C]'s body is maimed underneath the mass of [src]!</span>", \
|
||||
"<span class='userdanger'>Your body is maimed underneath the mass of [src]!</span>")
|
||||
if(6) // skull squish!
|
||||
var/obj/item/bodypart/head/O = C.get_bodypart(BODY_ZONE_HEAD)
|
||||
if(O)
|
||||
C.visible_message("<span class='danger'>[O] explodes in a shower of gore beneath [src]!</span>", \
|
||||
@@ -536,7 +547,11 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
qdel(O)
|
||||
new /obj/effect/gibspawner/human/bodypartless(get_turf(C))
|
||||
|
||||
C.apply_damage(max(0, squish_damage - crit_rebate), forced=TRUE, spread_damage=TRUE)
|
||||
if(prob(30))
|
||||
C.apply_damage(max(0, squish_damage - crit_rebate), forced=TRUE, spread_damage=TRUE) // the 30% chance to spread the damage means you escape breaking any bones
|
||||
else
|
||||
C.take_bodypart_damage((squish_damage - crit_rebate)*0.5, wound_bonus = 5) // otherwise, deal it to 2 random limbs (or the same one) which will likely shatter something
|
||||
C.take_bodypart_damage((squish_damage - crit_rebate)*0.5, wound_bonus = 5)
|
||||
C.AddElement(/datum/element/squish, 18 SECONDS)
|
||||
else
|
||||
L.visible_message("<span class='danger'>[L] is crushed by [src]!</span>", \
|
||||
|
||||
@@ -29,7 +29,12 @@
|
||||
/obj/item/storage/hypospraykit/brute = 2,
|
||||
/obj/item/storage/hypospraykit/enlarge = 2,
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small = 5,
|
||||
/obj/item/storage/briefcase/medical = 2)
|
||||
/obj/item/storage/briefcase/medical = 2,
|
||||
/obj/item/stack/sticky_tape/surgical = 3,
|
||||
/obj/item/healthanalyzer/wound = 4,
|
||||
/obj/item/stack/medical/ointment = 2,
|
||||
/obj/item/stack/medical/suture = 2,
|
||||
/obj/item/stack/medical/bone_gel = 4)
|
||||
contraband = list(/obj/item/reagent_containers/pill/tox = 3,
|
||||
/obj/item/reagent_containers/pill/morphine = 4,
|
||||
/obj/item/reagent_containers/pill/charcoal = 6)
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
/obj/item/reagent_containers/medspray/silver_sulf = 2,
|
||||
/obj/item/reagent_containers/pill/charcoal = 2,
|
||||
/obj/item/reagent_containers/medspray/sterilizine = 1,
|
||||
/obj/item/healthanalyzer/wound = 2,
|
||||
/obj/item/stack/medical/bone_gel = 2,
|
||||
/obj/item/reagent_containers/syringe/dart = 10)
|
||||
contraband = list(/obj/item/reagent_containers/pill/tox = 2,
|
||||
/obj/item/reagent_containers/pill/morphine = 2)
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
force = 21 // Just enough to break airlocks with melee attacks
|
||||
damtype = "brute"
|
||||
total_mass = TOTAL_MASS_HAND_REPLACEMENT
|
||||
sharpness = IS_SHARP
|
||||
wound_bonus = -30
|
||||
bare_wound_bonus = 15
|
||||
|
||||
/obj/item/zombie_hand/Initialize()
|
||||
. = ..()
|
||||
|
||||
Reference in New Issue
Block a user