This commit is contained in:
Zuhayr
2014-07-16 19:30:41 +09:30
85 changed files with 724 additions and 299 deletions
+10 -8
View File
@@ -144,8 +144,10 @@ var/list/admin_verbs_debug = list(
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
/client/proc/reload_admins,
/client/proc/reload_mentors,
/client/proc/reload_mentors,
/client/proc/restart_controller,
/client/proc/remake_distribution_map,
/client/proc/show_distribution_map,
/client/proc/enable_debug_verbs,
/client/proc/callproc,
/client/proc/toggledebuglogs,
@@ -585,22 +587,22 @@ var/list/admin_verbs_mentor = list(
feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the disease [D].", 1)
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
set category = "Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
var/datum/disease2/disease/D = new /datum/disease2/disease()
var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
D.makerandom(greater)
if (!greater)
D.infectionchance = 1
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if (H.species)
@@ -609,7 +611,7 @@ var/list/admin_verbs_mentor = list(
var/mob/living/carbon/monkey/M = T
D.affected_species = list(M.greaterform)
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
+3
View File
@@ -367,6 +367,7 @@ proc/populate_gear_list()
display_name = "engineering bandana"
path = /obj/item/clothing/head/helmet/greenbandana/fluff/taryn_kifer_1
cost = 2
slot = slot_head
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer")
//Science
@@ -381,12 +382,14 @@ proc/populate_gear_list()
display_name = "Zhan-Khazan furs"
path = /obj/item/clothing/suit/tajaran/furs
cost = 3
slot = slot_wear_suit
whitelisted = "Tajaran"
/datum/gear/zhan_scarf
display_name = "Zhan-Khazan headscarf"
path = /obj/item/clothing/head/tajaran/scarf
cost = 2
slot = slot_head
whitelisted = "Tajaran"
/datum/gear/unathi_robe
+4
View File
@@ -405,4 +405,8 @@ BLIND // can't see anything
sensor_mode = pick(0,1,2,3)
..()
/obj/item/clothing/under/emp_act(severity)
if (hastie)
hastie.emp_act(severity)
..()
+1 -1
View File
@@ -3,7 +3,7 @@
/obj/item/clothing/head/chefhat
name = "chef's hat"
desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work."
icon_state = "chef"
icon_state = "chefhat"
item_state = "chefhat"
desc = "The commander in chef's head wear."
flags = FPRINT | TABLEPASS
+2 -3
View File
@@ -13,7 +13,7 @@ datum/event/organ_failure/announce()
datum/event/organ_failure/start()
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.mind && G.mind.current && G.mind.current.stat != DEAD && G.health > 70)
if(G.mind && G.mind.current && G.mind.current.stat != DEAD && G.health > 70 && G.internal_organs)
candidates += G
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
@@ -24,8 +24,7 @@ datum/event/organ_failure/start()
var/acute = prob(15)
if (prob(75))
//internal organ infection
var/O = pick(C.internal_organs)
var/datum/organ/internal/I = C.internal_organs[O]
var/datum/organ/internal/I = pick(C.internal_organs)
if (acute)
I.germ_level = max(INFECTION_LEVEL_TWO, I.germ_level)
+1 -1
View File
@@ -116,7 +116,7 @@
H.concealed = 1
H.update_icon()
usr.visible_message("\The [usr] deals a card to \the [M].")
H.throw_at(get_step(M,M.dir),10,1)
H.throw_at(get_step(M,M.dir),10,1,H)
/obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob)
if(istype(O,/obj/item/weapon/hand))
+41 -32
View File
@@ -18,9 +18,9 @@
#define MAX_DEEP_COUNT 300
#define ITERATE_BEFORE_FAIL 200
#define RESOURCE_HIGH_MAX 3
#define RESOURCE_HIGH_MIN 0
#define RESOURCE_MID_MAX 2
#define RESOURCE_HIGH_MAX 4
#define RESOURCE_HIGH_MIN 2
#define RESOURCE_MID_MAX 3
#define RESOURCE_MID_MIN 1
#define RESOURCE_LOW_MAX 1
#define RESOURCE_LOW_MIN 0
@@ -103,6 +103,14 @@ Deep minerals:
for(var/y = 1, y <= real_size, y++)
map[MAP_CELL] = 0
/datum/ore_distribution/proc/print_distribution_map()
var/line = ""
for(var/x = 1, x <= real_size, x++)
for(var/y = 1, y <= real_size, y++)
line += num2text(round(map[MAP_CELL]/25.5))
world << line
line = ""
/datum/ore_distribution/proc/generate_distribution_map(var/x,var/y,var/input_size)
var/size = input_size
@@ -157,36 +165,37 @@ Deep minerals:
if(target_turf && target_turf.has_resources)
target_turf.resources = list()
target_turf.resources["silicates"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["carbonaceous rock"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["silicates"] = rand(3,5)
target_turf.resources["carbonaceous rock"] = rand(3,5)
if(map[MAP_CELL] > (range*0.60))
target_turf.resources["iron"] = 0
target_turf.resources["gold"] = 0
target_turf.resources["silver"] = 0
target_turf.resources["uranium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["diamond"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["phoron"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
else if(map[MAP_CELL] > (range*0.40))
target_turf.resources["iron"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["gold"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["diamond"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["phoron"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["osmium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["hydrogen"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
else
target_turf.resources["iron"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["gold"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["phoron"] = 0
target_turf.resources["osmium"] = 0
target_turf.resources["hydrogen"] = 0
switch(map[MAP_CELL])
if(0 to 100)
target_turf.resources["iron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["gold"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["diamond"] = 0
target_turf.resources["phoron"] = 0
target_turf.resources["osmium"] = 0
target_turf.resources["hydrogen"] = 0
if(100 to 124)
target_turf.resources["iron"] = 0
target_turf.resources["gold"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["diamond"] = 0
target_turf.resources["phoron"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
target_turf.resources["hydrogen"] = 0
if(125 to 255)
target_turf.resources["iron"] = 0
target_turf.resources["gold"] = 0
target_turf.resources["silver"] = 0
target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
target_turf.resources["phoron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["osmium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
tx += chunk_size
tx = origin_x
+8 -3
View File
@@ -265,13 +265,13 @@
update_icon()
/obj/machinery/mining/drill/proc/get_harvest_capacity()
return 3 * (cutter ? cutter.rating : 0)
return (cutter ? cutter.rating : 0)
/obj/machinery/mining/drill/proc/get_storage_capacity()
return 100 * (storage ? storage.rating : 0)
return 200 * (storage ? storage.rating : 0)
/obj/machinery/mining/drill/proc/get_charge_use()
return 100 - (20 * (cellmount ? cellmount.rating : 0))
return 50 - (10 * (cellmount ? cellmount.rating : 0))
/obj/machinery/mining/drill/proc/get_resource_field()
@@ -346,6 +346,11 @@
/obj/machinery/mining/brace/proc/connect()
var/turf/T = get_step(get_turf(src), src.dir)
if(!T.has_resources)
src.visible_message("\red The terrain near the brace is unsuitable!")
return
for(var/thing in T.contents)
if(istype(thing,/obj/machinery/mining/drill))
connected = thing
+54
View File
@@ -0,0 +1,54 @@
/obj/item/weapon/mining_scanner
name = "ore detector"
desc = "A complex device used to locate ore deep underground."
icon = 'icons/obj/device.dmi'
icon_state = "forensic0-old" //GET A BETTER SPRITE.
item_state = "electronic"
matter = list("metal" = 150)
origin_tech = "magnets=1;engineering=1"
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
user << "You begin sweeping \the [src] about, scanning for metal deposits."
if(!do_after(user,50)) return
if(!user || !src) return
var/list/metals = list(
"surface minerals" = 0,
"precious metals" = 0,
"nuclear fuel" = 0,
"exotic matter" = 0
)
for(var/turf/T in oview(3,get_turf(user)))
if(!T.has_resources)
continue
for(var/metal in T.resources)
var/ore_type
switch(metal)
if("silicates" || "carbonaceous rock" || "iron") ore_type = "surface minerals"
if("gold" || "silver" || "diamond") ore_type = "precious metals"
if("uranium") ore_type = "nuclear fuel"
if("phoron" || "osmium" || "hydrogen") ore_type = "exotic matter"
if(ore_type) metals[ore_type] += T.resources[metal]
user << "\icon[src] \blue The scanner beeps and displays a readout."
for(var/ore_type in metals)
var/result = "no sign"
switch(metals[ore_type])
if(1 to 50) result = "trace amounts"
if(51 to 150) result = "significant amounts"
if(151 to INFINITY) result = "huge quantities"
user << "- [result] of [ore_type]."
+11 -8
View File
@@ -142,10 +142,20 @@
/obj/machinery/mineral/processing_unit/process()
if (!active || !src.output || !src.input) return
if (!src.output || !src.input) return
var/list/tick_alloys = list()
//Grab some more ore to process this tick.
for(var/i = 0,i<sheets_per_tick,i++)
var/obj/item/weapon/ore/O = locate() in input.loc
if(!O) break
if(!isnull(ores_stored[O.oretag])) ores_stored[O.oretag]++
O.loc = null
if(!active)
return
//Process our stored ores and spit out sheets.
var/sheets = 0
for(var/metal in ores_stored)
@@ -221,11 +231,4 @@
else
continue
//Grab some more ore to process next tick.
for(var/i = 0,i<sheets_per_tick,i++)
var/obj/item/weapon/ore/O = locate() in input.loc
if(!O) break
if(!isnull(ores_stored[O.oretag])) ores_stored[O.oretag]++
O.loc = null
console.updateUsrDialog()
@@ -107,6 +107,7 @@ var/const/MAX_ACTIVE_TIME = 400
if(stat == CONSCIOUS)
icon_state = "[initial(icon_state)]"
Attach(hit_atom)
throwing = 0
/obj/item/clothing/mask/facehugger/proc/Attach(M as mob)
if( (!iscorgi(M) && !iscarbon(M)) || isalien(M))
@@ -1,2 +1,3 @@
/mob/living/carbon/brain/Login()
return ..()
..()
sleeping = 0
+1 -1
View File
@@ -330,7 +330,7 @@
*/
item.throw_at(target, item.throw_range, item.throw_speed)
item.throw_at(target, item.throw_range, item.throw_speed, src)
/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
@@ -58,7 +58,6 @@
dizziness = 0
jitteriness = 0
hud_updateflag |= 1 << HEALTH_HUD
hud_updateflag |= 1 << STATUS_HUD
@@ -117,8 +116,6 @@
ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now
return ..(gibbed)
/mob/living/carbon/human/proc/makeSkeleton()
if(SKELETON in src.mutations) return
@@ -66,8 +66,10 @@
return custom_emote(m_type, message)
if ("me")
if(silent)
return
//if(silent && silent > 0 && findtext(message,"\"",1, null) > 0)
// return //This check does not work and I have no idea why, I'm leaving it in for reference.
if (src.client)
if (client.prefs.muted & MUTE_IC)
src << "\red You cannot send IC messages (muted)."
@@ -388,7 +388,7 @@
if(display_gloves)
msg += "<span class='warning'><b>[src] has blood running from under [t_his] gloves!</b></span>\n"
for(var/implant in get_visible_implants(1))
for(var/implant in get_visible_implants(0))
msg += "<span class='warning'><b>[src] has \a [implant] sticking out of [t_his] flesh!</span>\n"
if(digitalcamo)
msg += "[t_He] [t_is] repulsively uncanny!\n"
@@ -1096,8 +1096,7 @@
H.brainmob.mind.transfer_to(src)
del(H)
for(var/E in internal_organs)
var/datum/organ/internal/I = internal_organs[E]
for(var/datum/organ/internal/I in internal_organs)
I.damage = 0
for (var/datum/disease/virus in viruses)
@@ -1109,11 +1108,11 @@
..()
/mob/living/carbon/human/proc/is_lung_ruptured()
var/datum/organ/internal/lungs/L = internal_organs["lungs"]
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
return L.is_bruised()
/mob/living/carbon/human/proc/rupture_lung()
var/datum/organ/internal/lungs/L = internal_organs["lungs"]
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
if(!L.is_bruised())
src.custom_pain("You feel a stabbing pain in your chest!", 1)
@@ -1176,7 +1175,7 @@
var/list/visible_implants = list()
for(var/datum/organ/external/organ in src.organs)
for(var/obj/item/weapon/O in organ.implants)
if(!istype(O,/obj/item/weapon/implant) && O.w_class > class)
if(!istype(O,/obj/item/weapon/implant) && (O.w_class > class) && !istype(O,/obj/item/weapon/shard/shrapnel))
visible_implants += O
return(visible_implants)
@@ -1394,7 +1393,7 @@
status_flags |= LEAPING
src.visible_message("<span class='warning'><b>\The [src]</b> leaps at [T]!</span>")
src.throw_at(get_step(get_turf(T),get_turf(src)), 5, 1)
src.throw_at(get_step(get_turf(T),get_turf(src)), 5, 1, src)
playsound(src.loc, 'sound/voice/shriek1.ogg', 50, 1)
sleep(5)
@@ -17,7 +17,7 @@
/mob/living/carbon/human/getBrainLoss()
var/res = brainloss
var/datum/organ/internal/brain/sponge = internal_organs["brain"]
var/datum/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if (sponge.is_bruised())
res += 20
if (sponge.is_broken())
@@ -307,9 +307,8 @@ This function restores all organs.
var/embed_threshold = sharp? 5*W.w_class : 15*W.w_class
//Sharp objects will always embed if they do enough damage.
if((sharp && damage > (10*W.w_class)) || (sharp && !ismob(W.loc)) || (damage > embed_threshold && prob(embed_chance)))
//Thrown objects have some momentum already and have a small chance to embed even if the damage is below the threshold
if((sharp && damage > (10*W.w_class)) || (sharp && !ismob(W.loc) && prob(damage/(10*W.w_class)*100)) || (damage > embed_threshold && prob(embed_chance)))
organ.embed(W)
else if( (damage > (5*W.w_class)) && ((!ismob(W.loc) && !sharp)) || (prob((damage - 2)/W.w_class) ) )
organ.embed(W)
return 1
@@ -282,6 +282,77 @@ emp_act
bloody_body(src)
return 1
//this proc handles being hit by a thrown atom
/mob/living/carbon/human/hitby(atom/movable/AM as mob|obj,var/speed = 5)
if(istype(AM,/obj/))
var/obj/O = AM
var/dtype = BRUTE
if(istype(O,/obj/item/weapon))
var/obj/item/weapon/W = O
dtype = W.damtype
var/throw_damage = O.throwforce*(speed/5)
var/zone
if (istype(O.thrower, /mob/living))
var/mob/living/L = O.thrower
zone = check_zone(L.zone_sel.selecting)
else
zone = ran_zone("chest",75) //Hits a random part of the body, geared towards the chest
//check if we hit
if (O.throw_source)
var/distance = get_dist(O.throw_source, loc)
zone = get_zone_with_miss_chance(zone, src, min(15*(distance-2), 0))
else
zone = get_zone_with_miss_chance(zone, src, 15)
if(!zone)
visible_message("\blue \The [O] misses [src] narrowly!")
return
O.throwing = 0 //it hit, so stop moving
if ((O.thrower != src) && check_shields(throw_damage, "[O]"))
return
var/datum/organ/external/affecting = get_organ(zone)
var/hit_area = affecting.display_name
src.visible_message("\red [src] has been hit in the [hit_area] by [O].")
var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here
if(armor < 2)
apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O)
if(ismob(O.thrower))
var/mob/M = O.thrower
var/client/assailant = M.client
if(assailant)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
// Begin BS12 momentum-transfer code.
if(O.throw_source && speed >= 15)
var/obj/item/weapon/W = O
var/momentum = speed/2
var/dir = get_dir(O.throw_source, src)
visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(!W || !src) return
if(W.loc == src && W.sharp) //Projectile is embedded and suitable for pinning.
var/turf/T = near_wall(dir,2)
if(T)
src.loc = T
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
src.anchored = 1
src.pinned += O
/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2)
if (gloves)
gloves.add_blood(source)
@@ -690,6 +690,7 @@
loc_temp = environment.temperature
if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1 && environment.phoron < MOLES_PHORON_VISIBLE)
pressure_alert = 0
return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp
//Body temperature adjusts depending on surrounding atmosphere based on your thermal protection
@@ -1098,6 +1099,9 @@
return //TODO: DEFERRED
proc/handle_regular_status_updates()
if(status_flags & GODMODE) return 0
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
silent = 0
+1 -1
View File
@@ -200,7 +200,7 @@
breath_type = "nitrogen"
poison_type = "oxygen"
flags = NO_SCAN | IS_WHITELISTED
flags = NO_SCAN
blood_color = "#2299FC"
flesh_color = "#808D11"
+46 -35
View File
@@ -65,58 +65,69 @@
P.on_hit(src, absorb, def_zone)
return absorb
//this proc handles being hit by a thrown atom
/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve
if(istype(AM,/obj/))
var/obj/O = AM
var/zone = ran_zone("chest",75)//Hits a random part of the body, geared towards the chest
var/dtype = BRUTE
if(istype(O,/obj/item/weapon))
var/obj/item/weapon/W = O
dtype = W.damtype
var/throw_damage = O.throwforce*(speed/5)
var/miss_chance = 15
if (O.throw_source)
var/distance = get_dist(O.throw_source, loc)
miss_chance = min(15*(distance-2), 0)
if (prob(miss_chance))
visible_message("\blue \The [O] misses [src] narrowly!")
return
src.visible_message("\red [src] has been hit by [O].")
var/armor = run_armor_check(zone, "melee", "Your armor has protected your [zone].", "Your armor has softened hit to your [zone].")
var/armor = run_armor_check(null, "melee")
if(armor < 2)
apply_damage(O.throwforce*(speed/5), dtype, zone, armor, is_sharp(O), has_edge(O), O)
apply_damage(throw_damage, dtype, null, armor, is_sharp(O), has_edge(O), O)
if(!O.fingerprintslast)
return
O.throwing = 0 //it hit, so stop moving
if(ismob(O.thrower))
var/mob/M = O.thrower
var/client/assailant = M.client
if(assailant)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
var/client/assailant = directory[ckey(O.fingerprintslast)]
if(assailant && assailant.mob && istype(assailant.mob,/mob))
var/mob/M = assailant.mob
// Begin BS12 momentum-transfer code.
if(O.throw_source && speed >= 15)
var/obj/item/weapon/W = O
var/momentum = speed/2
var/dir = get_dir(O.throw_source, src)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a thrown [O], last touched by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a thrown [O], last touched by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
// Begin BS12 momentum-transfer code.
if(!W || !src) return
if(W.sharp) //Projectile is suitable for pinning.
//Handles embedding for non-humans and simple_animals.
O.loc = src
src.embedded += O
if(speed >= 15)
var/obj/item/weapon/W = O
var/momentum = speed/2
var/dir = get_dir(M,src)
var/turf/T = near_wall(dir,2)
visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!")
src.throw_at(get_edge_target_turf(src,dir),1,momentum)
if(!W || !src) return
if(istype(W.loc,/mob/living) && W.sharp) //Projectile is embedded and suitable for pinning.
if(!istype(src,/mob/living/carbon/human)) //Handles embedding for non-humans and simple_animals.
O.loc = src
src.embedded += O
var/turf/T = near_wall(dir,2)
if(T)
src.loc = T
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
src.anchored = 1
src.pinned += O
if(T)
src.loc = T
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
src.anchored = 1
src.pinned += O
//This is called when the mob is thrown into a dense turf
/mob/living/proc/turf_collision(var/turf/T, var/speed)
src.take_organ_damage(speed*5)
/mob/living/proc/near_wall(var/direction,var/distance=1)
var/turf/T = get_step(get_turf(src),direction)
+1 -2
View File
@@ -1,4 +1,3 @@
#define SAY_MINIMUM_PRESSURE 10
var/list/department_radio_keys = list(
":r" = "right ear", "#r" = "right ear", ".r" = "right ear",
":l" = "left ear", "#l" = "left ear", ".l" = "left ear",
@@ -113,7 +112,7 @@ var/list/department_radio_keys = list(
var/datum/gas_mixture/environment = T.return_air()
if(environment)
var/pressure = environment.return_pressure()
if(pressure < SAY_MINIMUM_PRESSURE)
if(pressure < SOUND_MINIMUM_PRESSURE)
italics = 1
message_range = 1
+1
View File
@@ -1,4 +1,5 @@
/mob/living/silicon/Login()
sleeping = 0
if(mind && ticker && ticker.mode)
ticker.mode.remove_cultist(mind, 1)
ticker.mode.remove_revolutionary(mind, 1)
@@ -58,6 +58,7 @@
/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
R.add_language("Tradeband", 1)
R.add_language("Sol Common", 1)
R.add_language("Gutter", 0)
/obj/item/weapon/robot_module/standard
+3 -3
View File
@@ -950,7 +950,7 @@ mob/proc/yank_out_object()
if(S == U)
self = 1 // Removing object from yourself.
valid_objects = get_visible_implants(1)
valid_objects = get_visible_implants(0)
if(!valid_objects.len)
if(self)
src << "You have nothing stuck in your body that is large enough to remove."
@@ -961,9 +961,9 @@ mob/proc/yank_out_object()
var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
if(self)
src << "<span class='warning'>You attempt to get a good grip on the [selection] in your body.</span>"
src << "<span class='warning'>You attempt to get a good grip on [selection] in your body.</span>"
else
U << "<span class='warning'>You attempt to get a good grip on the [selection] in [S]'s body.</span>"
U << "<span class='warning'>You attempt to get a good grip on [selection] in [S]'s body.</span>"
if(!do_after(U, 80))
return
+5 -1
View File
@@ -142,7 +142,11 @@ proc/hasorgans(A)
*/
return zone
// Returns zone with a certain probability.
// If the probability misses, returns "chest" instead.
// If "chest" was passed in as zone, then on a "miss" will return "head", "l_arm", or "r_arm"
// Do not use this if someone is intentionally trying to hit a specific body part.
// Use get_zone_with_miss_chance() for that.
/proc/ran_zone(zone, probability)
zone = check_zone(zone)
if(!probability) probability = 90
+11
View File
@@ -134,6 +134,7 @@
return 1
if(href_list["late_join"])
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
usr << "\red The round is either not ready, or has already finished..."
return
@@ -143,6 +144,11 @@
src << alert("You are currently not whitelisted to play [client.prefs.species].")
return 0
var/datum/species/S = all_species[client.prefs.species]
if(!(S.flags & IS_WHITELISTED))
src << alert("Your current species,[client.prefs.species], is not available for play on the station.")
return 0
LateChoices()
if(href_list["manifest"])
@@ -159,6 +165,11 @@
src << alert("You are currently not whitelisted to play [client.prefs.species].")
return 0
var/datum/species/S = all_species[client.prefs.species]
if(!(S.flags & IS_WHITELISTED))
src << alert("Your current species,[client.prefs.species], is not available for play on the station.")
return 0
AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint)
return
+1 -1
View File
@@ -63,7 +63,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
var/datum/organ/internal/heart/heart = internal_organs["heart"]
var/datum/organ/internal/heart/heart = internal_organs_by_name["heart"]
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
blood_volume *= 0.8
+1 -1
View File
@@ -21,7 +21,7 @@
/datum/organ/proc/handle_antibiotics()
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
if (antibiotics < 5)
if (!germ_level || antibiotics < 5)
return
if (germ_level < INFECTION_LEVEL_ONE)
+15 -9
View File
@@ -32,6 +32,7 @@
var/damage_msg = "\red You feel an intense pain"
var/broken_description
var/vital //Lose a vital limb, die immediately.
var/status = 0
var/open = 0
var/stage = 0
@@ -98,7 +99,7 @@
return
// High brute damage or sharp objects may damage internal organs
if(internal_organs != null) if( (sharp && brute >= 5) || brute >= 10) if(prob(5))
if(internal_organs && ( (sharp && brute >= 5) || brute >= 10) && prob(5))
// Damage an internal organ
var/datum/organ/internal/I = pick(internal_organs)
I.take_damage(brute / 2)
@@ -363,7 +364,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
//** Syncing germ levels with external wounds
handle_germ_sync()
//** Handle antibiotics and curing infections
handle_antibiotics()
@@ -386,10 +387,10 @@ Note that amputating the affected organ does in fact remove the infection from t
/datum/organ/external/proc/handle_germ_effects()
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
if (germ_level < INFECTION_LEVEL_ONE && prob(60)) //this could be an else clause, but it looks cleaner this way
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE && prob(60)) //this could be an else clause, but it looks cleaner this way
germ_level-- //since germ_level increases at a rate of 1 per second with dirty wounds, prob(60) should give us about 5 minutes before level one.
if(germ_level >= INFECTION_LEVEL_ONE)
//having an infection raises your body temperature
var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 1)* min(germ_level/INFECTION_LEVEL_THREE, 1) + owner.species.body_temperature
@@ -400,7 +401,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if(prob(round(germ_level/10)))
if (antibiotics < 5)
germ_level++
if (prob(5)) //adjust this to tweak how fast people take toxin damage from infections
owner.adjustToxLoss(1)
@@ -411,7 +412,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if (I.germ_level > 0 && I.germ_level < min(germ_level, INFECTION_LEVEL_TWO)) //once the organ reaches whatever we can give it, or level two, switch to a different one
if (!target_organ || I.germ_level > target_organ.germ_level) //choose the organ with the highest germ_level
target_organ = I
if (!target_organ)
//figure out which organs we can spread germs to and pick one at random
var/list/candidate_organs = list()
@@ -420,7 +421,7 @@ Note that amputating the affected organ does in fact remove the infection from t
candidate_organs += I
if (candidate_organs.len)
target_organ = pick(candidate_organs)
if (target_organ)
target_organ.germ_level++
@@ -666,6 +667,9 @@ Note that amputating the affected organ does in fact remove the infection from t
// OK so maybe your limb just flew off, but if it was attached to a pair of cuffs then hooray! Freedom!
release_restraints()
if(vital)
owner.death()
/****************************************************
HELPERS
****************************************************/
@@ -829,7 +833,7 @@ Note that amputating the affected organ does in fact remove the infection from t
max_damage = 75
min_broken_damage = 40
body_part = UPPER_TORSO
vital = 1
/datum/organ/external/groin
name = "groin"
@@ -838,6 +842,7 @@ Note that amputating the affected organ does in fact remove the infection from t
max_damage = 50
min_broken_damage = 30
body_part = LOWER_TORSO
vital = 1
/datum/organ/external/l_arm
name = "l_arm"
@@ -931,6 +936,7 @@ Note that amputating the affected organ does in fact remove the infection from t
min_broken_damage = 40
body_part = HEAD
var/disfigured = 0
vital = 1
/datum/organ/external/head/get_icon()
if (!owner)
+3 -5
View File
@@ -27,14 +27,12 @@
var/datum/organ/external/E = H.organs_by_name[src.parent_organ]
if(E.internal_organs == null)
E.internal_organs = list()
E.internal_organs += src
H.internal_organs[src.name] = src
E.internal_organs |= src
H.internal_organs |= src
src.owner = H
/datum/organ/internal/process()
//Process infections
if (!germ_level)
return
if (robotic >= 2 || (owner.species && owner.species.flags & IS_PLANT)) //TODO make robotic internal and external organs separate types of organ instead of a flag
germ_level = 0
@@ -47,7 +45,7 @@
//** Handle the effects of infections
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
if (germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
germ_level--
if (germ_level >= INFECTION_LEVEL_ONE/2)
+1 -2
View File
@@ -102,8 +102,7 @@ mob/living/carbon/human/proc/handle_pain()
pain(damaged_organ.display_name, maxdam, 0)
// Damage to internal organs hurts a lot.
for(var/organ_name in internal_organs)
var/datum/organ/internal/I = internal_organs[organ_name]
for(var/datum/organ/internal/I in internal_organs)
if(I.damage > 2) if(prob(2))
var/datum/organ/external/parent = get_organ(I.parent_organ)
src.custom_pain("You feel a sharp pain in your [parent.display_name]", 1)
+1
View File
@@ -1288,6 +1288,7 @@
chargecount++
else
chargecount = 0
charging = 0
if(chargecount == 10)
+1 -1
View File
@@ -110,7 +110,7 @@
user.visible_message("\red [user] fires [src]!", "\red You fire [src]!")
spike.loc = get_turf(src)
spike.throw_at(target,10,fire_force)
spike.throw_at(target,10,fire_force,user)
spike = null
update_icon()
@@ -191,7 +191,7 @@
var/obj/item/weapon/arrow/A = arrow
A.loc = get_turf(user)
A.throw_at(target,10,tension*release_speed)
A.throw_at(target,10,tension*release_speed,user)
arrow = null
tension = 0
icon_state = "crossbow"
@@ -131,7 +131,7 @@
user.visible_message("<span class='danger'>[user] fires [src] and launches [object] at [target]!</span>","<span class='danger'>You fire [src] and launch [object] at [target]!</span>")
src.remove_from_storage(object,user.loc)
object.throw_at(target,10,speed)
object.throw_at(target,10,speed,user)
var/lost_gas_amount = tank.air_contents.total_moles*(pressure_setting/100)
var/datum/gas_mixture/removed = tank.air_contents.remove(lost_gas_amount)
@@ -43,7 +43,7 @@
var/obj/item/missile/M = new projectile(user.loc)
playsound(user.loc, 'sound/effects/bang.ogg', 50, 1)
M.primed = 1
M.throw_at(target, missile_range, missile_speed)
M.throw_at(target, missile_range, missile_speed,user)
message_admins("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).")
log_game("[key_name_admin(user)] used a rocket launcher ([src.name]).")
rockets -= I
+7 -6
View File
@@ -1312,7 +1312,7 @@ datum
M.eye_blind = max(M.eye_blind-5 , 0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/internal/eyes/E = H.internal_organs["eyes"]
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
if(istype(E))
if(E.damage > 0)
E.damage -= 1
@@ -1332,8 +1332,9 @@ datum
if(!M) M = holder.my_atom
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/external/chest/C = H.get_organ("chest")
for(var/datum/organ/internal/I in C.internal_organs)
//Peridaxon is hard enough to get, it's probably fair to make this all internal organs
for(var/datum/organ/internal/I in H.internal_organs)
if(I.damage > 0)
I.damage -= 0.20
..()
@@ -3036,7 +3037,7 @@ datum
M:drowsyness = max(M:drowsyness, 30)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/internal/liver/L = H.internal_organs["liver"]
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
if (istype(L))
L.take_damage(0.1, 1)
H.adjustToxLoss(0.1)
@@ -3273,13 +3274,13 @@ datum
if(prob(30)) M.adjustToxLoss(2)
if(prob(5)) if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/internal/heart/L = H.internal_organs["heart"]
var/datum/organ/internal/heart/L = H.internal_organs_by_name["heart"]
if (istype(L))
L.take_damage(5, 0)
if (300 to INFINITY)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/internal/heart/L = H.internal_organs["heart"]
var/datum/organ/internal/heart/L = H.internal_organs_by_name["heart"]
if (istype(L))
L.take_damage(100, 0)
holder.remove_reagent(src.id, FOOD_METABOLISM)
+1 -1
View File
@@ -56,7 +56,7 @@
var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
grenades -= F
F.loc = user.loc
F.throw_at(target, 30, 2)
F.throw_at(target, 30, 2, user)
message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
log_game("[key_name_admin(user)] used a grenade ([src.name]).")
F.active = 1
+8 -6
View File
@@ -123,20 +123,22 @@
shift_light(5, warning_color)
if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY)
var/stability = num2text(round((damage / explosion_point) * 100))
var/alert_msg
if(damage > emergency_point)
shift_light(7, emergency_color)
radio.autosay(addtext(emergency_alert, " Instability: ",stability,"%"), "Supermatter Monitor")
alert_msg = addtext(emergency_alert, " Instability: ",stability,"%")
lastwarning = world.timeofday
else if(damage >= damage_archived) // The damage is still going up
radio.autosay(addtext(warning_alert," Instability: ",stability,"%"), "Supermatter Monitor")
alert_msg = addtext(warning_alert," Instability: ",stability,"%")
lastwarning = world.timeofday - 150
else // Phew, we're safe
radio.autosay(safe_alert, "Supermatter Monitor")
else // Phew, we're safe
alert_msg = safe_alert
lastwarning = world.timeofday
if(!istype(L, /turf/space) && alert_msg)
radio.autosay(alert_msg, "Supermatter Monitor")
if(damage > explosion_point)
for(var/mob/living/mob in living_mob_list)
if(istype(mob, /mob/living/carbon/human))
+2 -1
View File
@@ -107,6 +107,7 @@
B.transfer_identity(target)
target.internal_organs -= B
target.internal_organs_by_name -= "brain"
target:brain_op_stage = 4.0
target.death()//You want them to die after the brain was transferred, so not to trigger client death() twice.
@@ -173,7 +174,7 @@
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\blue [user] mends hematoma in [target]'s brain with \the [tool].", \
"\blue You mend hematoma in [target]'s brain with \the [tool].")
var/datum/organ/internal/brain/sponge = target.internal_organs["brain"]
var/datum/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
if (sponge)
sponge.damage = 0
+5 -5
View File
@@ -39,7 +39,7 @@
target.blinded += 1.5
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"]
var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \
"\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" )
@@ -69,7 +69,7 @@
target.op_stage.eyes = 2
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"]
var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, damaging [target]'s eyes with \the [tool]!", \
"\red Your hand slips, damaging [target]'s eyes with \the [tool]!")
@@ -100,7 +100,7 @@
target.op_stage.eyes = 3
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"]
var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \
"\red Your hand slips, stabbing \the [tool] into [target]'s eye!")
@@ -126,7 +126,7 @@
"You are beginning to cauterize the incision around [target]'s eyes with \the [tool].")
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"]
var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
user.visible_message("\blue [user] cauterizes the incision around [target]'s eyes with \the [tool].", \
"\blue You cauterize the incision around [target]'s eyes with \the [tool].")
if (target.op_stage.eyes == 3)
@@ -136,7 +136,7 @@
target.op_stage.eyes = 0
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/eyes/eyes = target.internal_organs["eyes"]
var/datum/organ/internal/eyes/eyes = target.internal_organs_by_name["eyes"]
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\red [user]'s hand slips, searing [target]'s eyes with \the [tool]!", \
"\red Your hand slips, searing [target]'s eyes with \the [tool]!")
+8 -7
View File
@@ -202,9 +202,10 @@
var/is_chest_organ_damaged = 0
var/datum/organ/external/chest/chest = target.get_organ("chest")
for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0)
is_chest_organ_damaged = 1
break
for(var/datum/organ/internal/I in chest.internal_organs)
if(I.damage > 0)
is_chest_organ_damaged = 1
break
return ..() && is_chest_organ_damaged && target.op_stage.ribcage == 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -285,7 +286,7 @@
return 0
var/is_chest_organ_damaged = 0
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"]
var/datum/organ/external/chest/chest = target.get_organ("chest")
for(var/datum/organ/internal/I in chest.internal_organs) if(I.damage > 0)
is_chest_organ_damaged = 1
@@ -293,7 +294,7 @@
return ..() && is_chest_organ_damaged && heart.robotic == 2 && target.op_stage.ribcage == 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"]
if(heart.damage > 0)
user.visible_message("[user] starts mending the mechanisms on [target]'s heart with \the [tool].", \
@@ -302,14 +303,14 @@
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"]
if(heart.damage > 0)
user.visible_message("\blue [user] repairs [target]'s heart with \the [tool].", \
"\blue You repair [target]'s heart with \the [tool]." )
heart.damage = 0
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/internal/heart/heart = target.internal_organs["heart"]
var/datum/organ/internal/heart/heart = target.internal_organs_by_name["heart"]
user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!!" , \
"\red Your hand slips, smearing [tool] in the incision in [target]'s heart, gumming it up!")
heart.take_damage(5, 0)
+1 -1
View File
@@ -202,7 +202,7 @@
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
var/datum/organ/internal/brain/B = H.internal_organs["brain"]
var/datum/organ/internal/brain/B = H.internal_organs_by_name["brain"]
if (B.damage < B.min_broken_damage)
B.take_damage(5)
else