/mob/living/carbon/Life() ..() // Increase germ_level regularly if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level germ_level++ /mob/living/carbon/Move(NewLoc, direct) . = ..() if(.) if(src.nutrition && src.stat != 2) src.nutrition -= HUNGER_FACTOR/10 if(src.m_intent == "run") src.nutrition -= HUNGER_FACTOR/10 if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) src.bodytemperature += 2 // Moving around increases germ_level faster if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) germ_level++ /mob/living/carbon/relaymove(var/mob/user, direction) if(user in src.stomach_contents) if(prob(40)) for(var/mob/M in hearers(4, src)) if(M.client) M.show_message(text("\red You hear something rumbling inside [src]'s stomach..."), 2) var/obj/item/I = user.get_active_hand() if(I && I.force) var/d = rand(round(I.force / 4), I.force) if(istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src var/organ = H.get_organ("chest") if (istype(organ, /datum/organ/external)) var/datum/organ/external/temp = organ if(temp.take_damage(d, 0)) H.UpdateDamageIcon() H.updatehealth() else src.take_organ_damage(d) for(var/mob/M in viewers(user, null)) if(M.client) M.show_message(text("\red [user] attacks [src]'s stomach wall with the [I.name]!"), 2) playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) if(prob(src.getBruteLoss() - 50)) for(var/atom/movable/A in stomach_contents) A.loc = loc stomach_contents.Remove(A) src.gib() /mob/living/carbon/gib() for(var/mob/M in src) if(M in src.stomach_contents) src.stomach_contents.Remove(M) M.loc = src.loc for(var/mob/N in viewers(src, null)) if(N.client) N.show_message(text("\red [M] bursts out of [src]!"), 2) . = ..(null,1) /mob/living/carbon/attack_hand(mob/M as mob) if(!istype(M, /mob/living/carbon)) return if (hasorgans(M)) var/datum/organ/external/temp = M:organs_by_name["r_hand"] if (M.hand) temp = M:organs_by_name["l_hand"] if(temp && !temp.is_usable()) M << "\red You can't use your [temp.display_name]" return for(var/datum/disease/D in viruses) if(D.spread_by_touch()) M.contract_disease(D, 0, 1, CONTACT_HANDS) for(var/datum/disease/D in M.viruses) if(D.spread_by_touch()) contract_disease(D, 0, 1, CONTACT_HANDS) return /mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null) if(status_flags & GODMODE) return 0 //godmode shock_damage *= siemens_coeff if (shock_damage<1) return 0 src.apply_damage(shock_damage, BURN, def_zone, used_weapon="Electrocution") playsound(loc, "sparks", 50, 1, -1) if (shock_damage > 10) src.visible_message( "\red [src] was shocked by the [source]!", \ "\red You feel a powerful shock course through your body!", \ "\red You hear a heavy electrical crack." \ ) Stun(10)//This should work for now, more is really silly and makes you lay there forever Weaken(10) else src.visible_message( "\red [src] was mildly shocked by the [source].", \ "\red You feel a mild shock course through your body.", \ "\red You hear a light zapping." \ ) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, loc) s.start() return shock_damage /mob/living/carbon/proc/swap_hand() var/obj/item/item_in_hand = src.get_active_hand() if(item_in_hand) //this segment checks if the item in your hand is twohanded. if(istype(item_in_hand,/obj/item/weapon/twohanded)) if(item_in_hand:wielded == 1) usr << "Your other hand is too busy holding the [item_in_hand.name]" return src.hand = !( src.hand ) if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) if(hand) //This being 1 means the left hand is in use hud_used.l_hand_hud_object.icon_state = "hand_active" hud_used.r_hand_hud_object.icon_state = "hand_inactive" else hud_used.l_hand_hud_object.icon_state = "hand_inactive" hud_used.r_hand_hud_object.icon_state = "hand_active" /*if (!( src.hand )) src.hands.set_dir(NORTH) else src.hands.set_dir(SOUTH)*/ return /mob/living/carbon/proc/activate_hand(var/selhand) //0 or "r" or "right" for right hand; 1 or "l" or "left" for left hand. if(istext(selhand)) selhand = lowertext(selhand) if(selhand == "right" || selhand == "r") selhand = 0 if(selhand == "left" || selhand == "l") selhand = 1 if(selhand != src.hand) swap_hand() /mob/living/carbon/proc/help_shake_act(mob/living/carbon/M) if (src.health >= config.health_threshold_crit) if(src == M && istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src src.visible_message( \ text("\blue [src] examines [].",src.gender==MALE?"himself":"herself"), \ "\blue You check yourself for injuries." \ ) for(var/datum/organ/external/org in H.organs) var/status = "" var/brutedamage = org.brute_dam var/burndamage = org.burn_dam if(halloss > 0) if(prob(30)) brutedamage += halloss if(prob(30)) burndamage += halloss if(brutedamage > 0) status = "bruised" if(brutedamage > 20) status = "bleeding" if(brutedamage > 40) status = "mangled" if(brutedamage > 0 && burndamage > 0) status += " and " if(burndamage > 40) status += "peeling away" else if(burndamage > 10) status += "blistered" else if(burndamage > 0) status += "numb" if(org.status & ORGAN_DESTROYED) status = "MISSING!" if(org.status & ORGAN_MUTATED) status = "weirdly shapen." if(status == "") status = "OK" src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.display_name,status),1) if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit)) H.play_xylophone() else var/t_him = "it" if (src.gender == MALE) t_him = "him" else if (src.gender == FEMALE) t_him = "her" if (istype(src,/mob/living/carbon/human) && src:w_uniform) var/mob/living/carbon/human/H = src H.w_uniform.add_fingerprint(M) if(lying || src.sleeping) src.sleeping = max(0,src.sleeping-5) if(src.sleeping == 0) src.resting = 0 M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ "You shake [src] trying to wake [t_him] up!") else var/mob/living/carbon/human/H = M if(istype(H)) H.species.hug(H,src) else M.visible_message("[M] hugs [src] to make [t_him] feel better!", \ "You hug [src] to make [t_him] feel better!") AdjustParalysis(-3) AdjustStunned(-3) AdjustWeakened(-3) playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) /mob/living/carbon/proc/eyecheck() return 0 // ++++ROCKDTBEN++++ MOB PROCS -- Ask me before touching. // Stop! ... Hammertime! ~Carn /mob/living/carbon/proc/getDNA() return dna /mob/living/carbon/proc/setDNA(var/datum/dna/newDNA) dna = newDNA // ++++ROCKDTBEN++++ MOB PROCS //END /mob/living/carbon/clean_blood() . = ..() if(ishuman(src)) var/mob/living/carbon/human/H = src if(H.gloves) if(H.gloves.clean_blood()) H.update_inv_gloves(0) H.gloves.germ_level = 0 else if(H.bloody_hands) H.bloody_hands = 0 H.update_inv_gloves(0) H.germ_level = 0 update_icons() //apply the now updated overlays to the mob //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() if (src.in_throw_mode) throw_mode_off() else throw_mode_on() /mob/living/carbon/proc/throw_mode_off() src.in_throw_mode = 0 if(src.throw_icon) //in case we don't have the HUD and we use the hotkey src.throw_icon.icon_state = "act_throw_off" /mob/living/carbon/proc/throw_mode_on() src.in_throw_mode = 1 if(src.throw_icon) src.throw_icon.icon_state = "act_throw_on" /mob/proc/throw_item(atom/target) return /mob/living/carbon/throw_item(atom/target) src.throw_mode_off() if(usr.stat || !target) return if(target.type == /obj/screen) return var/atom/movable/item = src.get_active_hand() if(!item) return if (istype(item, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = item item = G.throw() //throw the person instead of the grab if(ismob(item)) var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) if(start_T && end_T) var/mob/M = item var/start_T_descriptor = "tile at [start_T.x], [start_T.y], [start_T.z] in area [get_area(start_T)]" var/end_T_descriptor = "tile at [end_T.x], [end_T.y], [end_T.z] in area [get_area(end_T)]" M.attack_log += text("\[[time_stamp()]\] Has been thrown by [usr.name] ([usr.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]") usr.attack_log += text("\[[time_stamp()]\] Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]") msg_admin_attack("[usr.name] ([usr.ckey]) has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor] (JMP)") if(!item) return //Grab processing has a chance of returning null item.layer = initial(item.layer) u_equip(item) update_icons() if (istype(usr, /mob/living/carbon)) //Check if a carbon mob is throwing. Modify/remove this line as required. item.loc = src.loc if(src.client) src.client.screen -= item if(istype(item, /obj/item)) item:dropped(src) // let it know it's been dropped //actually throw it! if (item) src.visible_message("\red [src] has thrown [item].") if(!src.lastarea) src.lastarea = get_area(src.loc) if((istype(src.loc, /turf/space)) || (src.lastarea.has_gravity == 0)) src.inertia_dir = get_dir(target, src) step(src, inertia_dir) /* if(istype(src.loc, /turf/space) || (src.flags & NOGRAV)) //they're in space, move em one space in the opposite direction src.inertia_dir = get_dir(target, src) step(src, inertia_dir) */ item.throw_at(target, item.throw_range, item.throw_speed, src) /mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10) /mob/living/carbon/can_use_hands() if(handcuffed) return 0 if(buckled && ! istype(buckled, /obj/structure/stool/bed/chair)) // buckling does not restrict hands return 0 return 1 /mob/living/carbon/restrained() if (handcuffed) return 1 return /mob/living/carbon/u_equip(obj/item/W as obj) if(!W) return 0 else if (W == handcuffed) handcuffed = null update_inv_handcuffed() else if (W == legcuffed) legcuffed = null update_inv_legcuffed() else ..() return /mob/living/carbon/show_inv(mob/living/carbon/user as mob) user.set_machine(src) var/dat = {"
[name]



Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
Left Hand: [(l_hand ? l_hand : "Nothing")]
Right Hand: [(r_hand ? r_hand : "Nothing")]
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
[(internal ? text("Remove Internal") : "")]
Empty Pockets
Refresh
Close
"} user << browse(dat, text("window=mob[];size=325x500", name)) onclose(user, "mob[name]") return //generates realistic-ish pulse output based on preset levels /mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate var/temp = 0 //see setup.dm:694 switch(src.pulse) if(PULSE_NONE) return "0" if(PULSE_SLOW) temp = rand(40, 60) return num2text(method ? temp : temp + rand(-10, 10)) if(PULSE_NORM) temp = rand(60, 90) return num2text(method ? temp : temp + rand(-10, 10)) if(PULSE_FAST) temp = rand(90, 120) return num2text(method ? temp : temp + rand(-10, 10)) if(PULSE_2FAST) temp = rand(120, 160) return num2text(method ? temp : temp + rand(-10, 10)) if(PULSE_THREADY) return method ? ">250" : "extremely weak and fast, patient's artery feels like a thread" // output for machines^ ^^^^^^^output for people^^^^^^^^^ /mob/living/carbon/verb/mob_sleep() set name = "Sleep" set category = "IC" if(usr.sleeping) usr << "\red You are already sleeping" return if(alert(src,"You sure you want to sleep for a while?","Sleep","Yes","No") == "Yes") usr.sleeping = 20 //Short nap /mob/living/carbon/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) if ((!( yes ) || now_pushing)) return now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM if( istype(tmob, /mob/living/carbon) && prob(10) ) src.spread_disease_to(AM, "Contact") if(istype(tmob, /mob/living/carbon/human)) if(HULK in tmob.mutations) if(prob(70)) usr << "\red You fail to push [tmob]'s fat ass out of the way." now_pushing = 0 return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return for(var/mob/M in range(tmob, 1)) if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) ) if ( !(world.time % 5) ) src << "\red [tmob] is restrained, you cannot push past" now_pushing = 0 return if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) ) if ( !(world.time % 5) ) src << "\red [tmob] is restraining [M], you cannot push past" now_pushing = 0 return //Leaping mobs just land on the tile, no pushing, no anything. if(status_flags & LEAPING) loc = tmob.loc status_flags &= ~LEAPING now_pushing = 0 return // Step over drones. // I have no idea why the hell this isn't already happening. How do mice do it? if(istype(tmob,/mob/living/silicon/robot/drone)) loc = tmob.loc now_pushing = 0 return if((tmob.a_intent == "help" || tmob.restrained()) && (a_intent == "help" || src.restrained()) && tmob.canmove && !tmob.buckled && canmove) // mutual brohugs all around! var/turf/oldloc = loc loc = tmob.loc tmob.loc = oldloc now_pushing = 0 for(var/mob/living/carbon/slime/slime in view(1,tmob)) if(slime.Victim == tmob) slime.UpdateFeed() return if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) if(prob(40) && !(FAT in src.mutations)) src << "\red You fail to push [tmob]'s fat ass out of the way." now_pushing = 0 return if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot)) if(prob(99)) now_pushing = 0 return if(tmob.l_hand && istype(tmob.l_hand, /obj/item/weapon/shield/riot)) if(prob(99)) now_pushing = 0 return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return tmob.LAssailant = src now_pushing = 0 ..() if (!( istype(AM, /atom/movable) )) return if (!( now_pushing )) now_pushing = 1 if (!( AM.anchored )) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) var/obj/structure/window/W = AM if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return step(AM, t) now_pushing = 0 return return /mob/living/carbon/can_use_vents() return