diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 894b71d356b..4e3aa86868f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -558,16 +558,10 @@ Turf and target are seperate in case you want to teleport some distance from a t moblist.Add(M) for(var/mob/new_player/M in sortmob) moblist.Add(M) - for(var/mob/living/carbon/monkey/M in sortmob) - moblist.Add(M) for(var/mob/living/carbon/slime/M in sortmob) moblist.Add(M) for(var/mob/living/simple_animal/M in sortmob) moblist.Add(M) -// for(var/mob/living/silicon/hivebot/M in world) -// mob_list.Add(M) -// for(var/mob/living/silicon/hive_mainframe/M in world) -// mob_list.Add(M) return moblist //E = MC^2 diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index dc93941ac6b..c0159f66390 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -176,7 +176,7 @@ datum/hud/New(mob/owner) if(ishuman(mymob)) human_hud(ui_style, ui_color, ui_alpha) // Pass the player the UI style chosen in preferences - else if(ismonkey(mymob)) + else if(issmall(mymob)) monkey_hud(ui_style) else if(isbrain(mymob)) brain_hud(ui_style) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 3edd0ba0bde..17121f92f32 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -50,39 +50,6 @@ /mob/living/RestrainedClickOn(var/atom/A) return -/* - Monkeys -*/ -/mob/living/carbon/monkey/UnarmedAttack(var/atom/A) - A.attack_paw(src) -/atom/proc/attack_paw(mob/user as mob) - return - -/* - Monkey RestrainedClickOn() was apparently the - one and only use of all of the restrained click code - (except to stop you from doing things while handcuffed); - moving it here instead of various hand_p's has simplified - things considerably -*/ -/mob/living/carbon/monkey/RestrainedClickOn(var/atom/A) - if(..()) - return - if(a_intent != "harm" || !ismob(A)) return - if(is_muzzled()) - return - var/mob/living/carbon/ML = A - var/dam_zone = ran_zone(pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")) - var/armor = ML.run_armor_check(dam_zone, "melee") - if(prob(75)) - ML.apply_damage(rand(1,3), BRUTE, dam_zone, armor) - for(var/mob/O in viewers(ML, null)) - O.show_message("\red [name] has bit [ML]!", 1) - if(armor >= 2) return - else - for(var/mob/O in viewers(ML, null)) - O.show_message("\red [src] has attempted to bite [ML]!", 1) - /* Aliens Defaults to same as monkey in most places diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e3459ca6d55..47fade12372 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1012,36 +1012,6 @@ datum/mind message_admins("[key_name_admin(usr)] has thrall'ed [current].") log_admin("[key_name(usr)] has thrall'ed [current].") - else if (href_list["monkey"]) - var/mob/living/L = current - if (L.notransform) - return - switch(href_list["monkey"]) - if("healthy") - if (usr.client.holder.rights & R_ADMIN) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" - sleep(0) //because deleting of virus is done through spawn(0) - if("human") - var/mob/living/carbon/monkey/M = current - if (istype(M)) - log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") - var/obj/item/weapon/dnainjector/m2h/m2h = new - var/obj/item/weapon/implant/mobfinder = new(M) //hack because humanizing deletes mind --rastaf0 - src = null - m2h.inject(M) - src = mobfinder.loc:mind - del(mobfinder) - current.radiation -= 50 - else if (href_list["silicon"]) current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["silicon"]) @@ -1396,9 +1366,6 @@ datum/mind mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) mind.active = 1 //indicates that the mind is currently synced with a client -//MONKEY -/mob/living/carbon/monkey/mind_initialize() - ..() //slime /mob/living/carbon/slime/mind_initialize() diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 29b1cd1b3d9..2ba16ac0663 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -132,7 +132,7 @@ return if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other return - if (!ishuman(usr) && !ismonkey(usr)) //Make sure they're a mob that has dna + if (!ishuman(usr) && !issmall(usr)) //Make sure they're a mob that has dna usr << "\blue Try as you might, you can not climb up into the scanner." return if (src.occupant) diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 09751412a30..44aae09ae9f 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -16,52 +16,18 @@ return user << "Our genes cry out!" - var/mob/living/carbon/C = user + var/mob/living/carbon/human/H = user - //TODO replace with monkeyize proc + if(!istype(H) || !H.species.primitive_form) + src << "We cannot perform this ability in this form!" + return + + H.visible_message("[H] transforms!") + changeling.geneticdamage = 30 + H << "Our genes cry out!" var/list/implants = list() //Try to preserve implants. - for(var/obj/item/weapon/implant/W in C) + for(var/obj/item/weapon/implant/W in H) implants += W - - C.notransform = 1 - C.canmove = 0 - C.icon = null - C.overlays.Cut() - C.invisibility = 101 - - var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("h2monkey", animation) - sleep(30) - del(animation) - - var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey(src) - O.dna = C.dna.Clone() - C.dna = null - - for(var/obj/item/W in C) - C.unEquip(W) - for(var/obj/T in C) - del(T) - - O.loc = C.loc - O.name = "monkey ([copytext(md5(C.real_name), 2, 6)])" - O.setToxLoss(C.getToxLoss()) - O.adjustBruteLoss(C.getBruteLoss()) - O.setOxyLoss(C.getOxyLoss()) - O.adjustFireLoss(C.getFireLoss()) - O.stat = C.stat - O.a_intent = "harm" - for(var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O - - C.mind.transfer_to(O) - O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null) - O.changeling_update_languages(changeling.absorbed_languages) - + H.monkeyize() feedback_add_details("changeling_powers","LF") - qdel(C) return 1 \ No newline at end of file diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 91739c16d22..d9a99767aa7 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -679,42 +679,6 @@ var/list/sacrificed = list() H.dust()//To prevent the MMI from remaining else H.gib() - for(var/mob/living/carbon/monkey/M in src.loc) - if (ticker.mode.name == "cult") - if(M.mind == ticker.mode:sacrifice_target) - if(cultsinrange.len >= 3) - sacrificed += M.mind - usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete." - else - usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual." - continue - else - if(prob(20)) - usr << "\red The Geometer of Blood accepts your meager sacrifice." - ticker.mode:grant_runeword(usr) - else - usr << "\red The Geometer of blood accepts this sacrifice." - usr << "\red However, a mere monkey is not enough to satisfy Him." - else - usr << "\red The Geometer of Blood accepts your meager sacrifice." - if(prob(20)) - ticker.mode.grant_runeword(usr) - M.gib() -/* for(var/mob/living/carbon/alien/A) - for(var/mob/K in cultsinrange) - K.say("Barhah hra zar'garis!") - A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need. - if (ticker.mode.name == "cult") - if(prob(75)) - usr << "\red The Geometer of Blood accepts your exotic sacrifice." - ticker.mode:grant_runeword(usr) - else - usr << "\red The Geometer of Blood accepts your exotic sacrifice." - usr << "\red However, this alien is not enough to gain His favor." - else - usr << "\red The Geometer of Blood accepts your exotic sacrifice." - return - return fizzle() */ /////////////////////////////////////////SIXTEENTH RUNE diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 07794377d04..ed0383660a9 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -1,167 +1,3 @@ -//this file left in for legacy support -/* -/proc/start_events() - //changed to a while(1) loop since they are more efficient. - //Moved the spawn in here to allow it to be called with advance proc call if it crashes. - //and also to stop spawn copying variables from the game ticker - spawn(3000) - while(1) - if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station - spawn(1) - dust_swarm("weak") - if(!event) - //CARN: checks to see if random events are enabled. - if(config.allow_random_events) - if(prob(eventchance)) - event() - hadevent = 1 - else - Holiday_Random_Event() - else - event = 0 - sleep(1200) - -/proc/event() - event = 1 - - var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14, 15) //so ninjas don't cause "empty" events. - - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. - eventNumbersToPickFrom += 3 - switch(pick(eventNumbersToPickFrom)) - if(1) - command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg') - spawn(100) - meteor_wave() - spawn_meteors() - spawn(700) - meteor_wave() - spawn_meteors() - - if(2) - command_announcement.Announce("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/granomalies.ogg') - var/turf/T = pick(blobstart) - var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 ) - spawn(rand(50, 300)) - del(bh) - /* - if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO - command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg') - var/list/turfs = new - var/turf/picked - for(var/turf/simulated/floor/T in world) - if((T.z in config.station_levels)) - turfs += T - for(var/turf/simulated/floor/T in turfs) - if(prob(20)) - spawn(50+rand(0,3000)) - picked = pick(turfs) - var/obj/effect/portal/P = new /obj/effect/portal( T ) - P.target = picked - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(300,600)) - del(P) - */ - if(3) - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. - space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like. - if(4) - mini_blob_event() - - if(5) - high_radiation_event() - if(6) - viral_outbreak() - if(7) - alien_infestation() - if(8) - prison_break() - if(9) - carp_migration() - if(10) - immovablerod() - if(11) - lightsout(1,2) - if(12) - appendicitis() - if(13) - IonStorm() - if(14) - spacevine_infestation() - if(15) - communications_blackout() -*/ - - - -/* -/proc/viral_outbreak(var/virus = null) -// command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') - var/virus_type - if(!virus) - virus_type = pick(/datum/disease/dnaspread,/datum/disease/advance/flu,/datum/disease/advance/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) - else - switch(virus) - if("fake gbs") - virus_type = /datum/disease/fake_gbs - if("gbs") - virus_type = /datum/disease/gbs - if("magnitis") - virus_type = /datum/disease/magnitis - if("rhumba beat") - virus_type = /datum/disease/rhumba_beat - if("brain rot") - virus_type = /datum/disease/brainrot - if("cold") - virus_type = /datum/disease/advance/cold - if("retrovirus") - virus_type = /datum/disease/dnaspread - if("flu") - virus_type = /datum/disease/advance/flu -// if("t-virus") -// virus_type = /datum/disease/t_virus - if("pierrot's throat") - virus_type = /datum/disease/pierrot_throat - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) - - var/foundAlready = 0 // don't infect someone that already has the virus - var/turf/T = get_turf(H) - if(!T) - continue - if(!(T.z in config.station_levels)) - continue - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if((!H.dna) || (H.sdisabilities & BLIND)) //A blindness disease would be the worst. - continue - var/datum/disease/dnaspread/D = new - D.strain_data["name"] = H.real_name - D.strain_data["UI"] = H.dna.uni_identity - D.strain_data["SE"] = H.dna.struc_enzymes - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - else - var/datum/disease/D = new virus_type - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - spawn(rand(1500, 3000)) //Delayed announcements to keep the crew on their toes. - command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') -*/ - /proc/alien_infestation(var/spawncount = 1) // -- TLE //command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') var/list/vents = list() @@ -218,13 +54,6 @@ else randmutg(H) domutcheck(H,null,MUTCHK_FORCED) - for(var/mob/living/carbon/monkey/M in living_mob_list) - var/turf/T = get_turf(M) - if(!T) - continue - if(!(T.z in config.station_levels)) - continue - M.apply_effect((rand(15,75)),IRRADIATE,0) sleep(100) command_announcement.Announce("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index f6b34aef591..96fe8b41027 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -118,7 +118,7 @@ //if they are holding or wearing a card that has access, that works if(src.check_access(H.get_active_hand()) || src.check_access(H.wear_id)) return 1 - else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid)) + else if(istype(M, /mob/living/carbon/alien/humanoid)) var/mob/living/carbon/george = M //they can only hold things :( if(src.check_access(george.get_active_hand())) @@ -211,14 +211,14 @@ if("Special Operations Officer") return get_all_centcom_access() + get_all_accesses() if("Nanotrasen Navy Representative") - return get_all_centcom_access() + get_all_accesses() + return get_all_centcom_access() + get_all_accesses() if("Nanotrasen Navy Officer") return get_all_centcom_access() + get_all_accesses() if("Nanotrasen Navy Captain") return get_all_centcom_access() + get_all_accesses() if("Supreme Commander") return get_all_centcom_access() + get_all_accesses() - + /proc/get_syndicate_access(job) switch(job) if("Syndicate Operative") @@ -226,12 +226,12 @@ if("Syndicate Operative Leader") return list(access_syndicate, access_syndicate_leader) if("Vox Raider") - return list(access_vox) + return list(access_vox) if("Vox Trader") - return list(access_vox) + return list(access_vox) if("Syndicate Commando") - return list(access_syndicate, access_syndicate_leader) - + return list(access_syndicate, access_syndicate_leader) + /proc/get_all_accesses() return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court, access_medical, access_genetics, access_morgue, access_rd, @@ -470,7 +470,7 @@ return "Bridge" if(access_cent_commander) return "Commander" - + /proc/get_syndicate_access_desc(A) switch(A) if(access_syndicate) @@ -534,7 +534,7 @@ return assignment return "Unknown" - + proc/GetIdCard(var/mob/living/carbon/human/H) if(H.wear_id) var/id = H.wear_id.GetID() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index fcc080124cd..c7d600bf62f 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -577,7 +577,7 @@ set name = "Enter Sleeper" set category = null set src in oview(1) - if(usr.stat != 0 || !(ishuman(usr) || ismonkey(usr))) + if(usr.stat != 0 || !(ishuman(usr) || issmall(usr))) return if(src.occupant) usr << "\blue The sleeper is already occupied!" diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index ad3939b294a..2a9b0c833e3 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -290,9 +290,6 @@ if("jacket") if (check_cost(500/efficiency)) return 0 else new/obj/item/clothing/suit/jacket/leather(src.loc) - //if("monkey") - // if (check_cost(500)) return 0 - // else new/mob/living/carbon/monkey(src.loc) processing = 0 menustat = "complete" update_icon() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 30db6a7d225..14a461474e1 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -174,7 +174,7 @@ var/on_store_message = "has entered long-term storage." var/on_store_name = "Cryogenic Oversight" var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward." - var/allow_occupant_types = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + var/allow_occupant_types = list(/mob/living/carbon/human) var/disallow_occupant_types = list() var/mob/living/occupant = null // Person waiting to be despawned. diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 367e31f7ac6..a68fe87f068 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -331,8 +331,7 @@ Class Procs: if(user.lying || user.stat) return 1 if ( ! (istype(usr, /mob/living/carbon/human) || \ - istype(usr, /mob/living/silicon) || \ - istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + istype(usr, /mob/living/silicon))) usr << "\red You don't have the dexterity to do this!" return 1 /* diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 196850255eb..4458f560715 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -128,7 +128,7 @@ eprojectile = /obj/item/projectile/beam //If it has, going to kill mode eshot_sound = 'sound/weapons/Laser.ogg' egun = 1 - + if(/obj/item/weapon/gun/energy/gun/turret) eprojectile = /obj/item/projectile/beam //If it has, going to copypaste mode eshot_sound = 'sound/weapons/Laser.ogg' @@ -210,7 +210,7 @@ /obj/machinery/porta_turret/proc/HasController() var/area/A = get_area(src) return A && A.turret_controls.len > 0 - + /obj/machinery/porta_turret/CanUseTopic(var/mob/user) if(HasController()) user << "Turrets can only be controlled using the assigned turret controller." @@ -336,9 +336,9 @@ spawn() sleep(60) attacked = 0 - + ..() - + /obj/machinery/porta_turret/emag_act(user as mob) if(!emagged) //Emagging the turret makes it go bonkers and stun everyone. It also makes @@ -450,8 +450,8 @@ assess_and_assign(ME.occupant, targets, secondarytargets) for(var/obj/spacepod/SP in view(7,src)) - assess_and_assign(SP.occupant, targets, secondarytargets) - + assess_and_assign(SP.occupant, targets, secondarytargets) + for(var/obj/vehicle/train/T in view(7,src)) assess_and_assign(T.load, targets, secondarytargets) @@ -502,7 +502,7 @@ if(iscuffed(L)) // If the target is handcuffed, leave it alone return TURRET_NOT_TARGET - if(isanimal(L) || ismonkey(L)) // Animals are not so dangerous + if(isanimal(L) || issmall(L)) // Animals are not so dangerous return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET if(isalien(L)) // Xenos are dangerous return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET @@ -524,8 +524,8 @@ var/mob/living/M = pick(targets) targets -= M if(target(M)) - return 1 - + return 1 + /obj/machinery/porta_turret/proc/popUp() //pops the turret up if(disabled) return @@ -562,7 +562,7 @@ raised = 0 invisibility = INVISIBILITY_LEVEL_TWO update_icon() - + /obj/machinery/porta_turret/on_assess_perp(mob/living/carbon/human/perp) if((check_access || attacked) && !allowed(perp)) //if the turret has been attacked or is angry, target all non-authorized personnel, see req_access @@ -616,8 +616,8 @@ // Lethal/emagged turrets use twice the power due to higher energy beams // Emagged turrets again use twice as much power due to higher firing rates - use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged)) - + use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged)) + //Shooting Code: A.current = T A.yo = U.y - T.y diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 36b74f897a6..9708dbf3304 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -82,7 +82,7 @@ race = "[H.species.name]" - else if(ismonkey(M)) + else if(issmall(M)) race = "Monkey" language = race diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 9ca78dd7f30..dbb891ca337 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -19,7 +19,7 @@ if(triggered) return - if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) + if(istype(M, /mob/living/carbon/human)) for(var/mob/O in viewers(world.view, src.loc)) O << "[M] triggered the \icon[src] [src]" triggered = 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f73a366ea94..8b1f979d4a7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -494,34 +494,6 @@ return 0 //Unsupported slot //END HUMAN - else if(ismonkey(M)) - //START MONKEY - var/mob/living/carbon/monkey/MO = M - switch(slot) - if(slot_l_hand) - if(MO.l_hand) - return 0 - return 1 - if(slot_r_hand) - if(MO.r_hand) - return 0 - return 1 - if(slot_wear_mask) - if(MO.wear_mask) - return 0 - if( !(slot_flags & SLOT_MASK) ) - return 0 - return 1 - if(slot_back) - if(MO.back) - return 0 - if( !(slot_flags & SLOT_BACK) ) - return 0 - return 1 - return 0 //Unsupported slot - - //END MONKEY - /obj/item/verb/verb_pickup() set src in oview(1) @@ -586,14 +558,6 @@ user << "\red You're going to need to remove that mask/helmet/glasses first." return - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - // you can't stab someone in the eyes wearing a mask! - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N slimes also don't have eyes! user << "\red You cannot locate any eyes on this creature!" return diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 281232f23a4..e31bfc79996 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1134,9 +1134,6 @@ var/global/list/obj/item/device/pda/PDAs = list() JFLOG("[user] used the fingerprint scanner on [C]") if (!istype(C:dna, /datum/dna)) user << "\blue No fingerprints found on [C]" - else if(!istype(C, /mob/living/carbon/monkey)) - if(!isnull(C:gloves)) - user << "\blue No fingerprints found on [C]" else user << text("\blue [C]'s Fingerprints: [md5(C:dna.uni_identity)]") if ( !(C:blood_DNA) ) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 91e264715b0..8e6216e0417 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -68,7 +68,7 @@ user.visible_message("[user] directs [src] to [M]'s eyes.", \ "You direct [src] to [M]'s eyes.") - if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected + if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind user << "[M] pupils does not react to the light!" else if(XRAY in M.mutations) //mob has X-RAY vision diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 61e24b5932c..e81b0e6e9b3 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -15,7 +15,7 @@ user << "\The [src] cannot be applied to [M]!" return 1 - if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon) || istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey")) + if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)) user << "You don't have the dexterity to do this!" return 1 diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 19dc7b0850e..659cc938e2f 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -160,7 +160,7 @@ for(var/mob/O in viewers(M, null)) O.show_message(text("\red [] has been injected with [] by [].", M, src, user), 1) //Foreach goto(192) - if (!(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))) + if (!(istype(M, /mob/living/carbon/human))) user << "\red Apparently it didn't work." return diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 44c8aaa5697..e94c806e998 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -26,7 +26,7 @@ //returns 1 if the master item's parent's MouseDrop() should be called, 0 otherwise. It's strange, but no other way of //doing it without the ability to call another proc's parent, really. /obj/item/weapon/storage/internal/proc/handle_mousedrop(mob/user as mob, obj/over_object as obj) - if (ishuman(user) || ismonkey(user)) //so monkeys can take off their backpacks -- Urist + if (ishuman(user) || issmall(user)) //so monkeys can take off their backpacks -- Urist if (istype(user.loc,/obj/mecha)) // stops inventory actions in a mech return 0 diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 07ded953aaf..cc064ca9489 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -25,7 +25,7 @@ var/use_sound = "rustle" //sound played when used. null for no sound. /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) - if (ishuman(usr) || ismonkey(usr)) //so monkeys can take off their backpacks -- Urist + if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist var/mob/M = usr if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index edc0426c5b8..df5e78ebf5f 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -59,11 +59,16 @@ unwield() /obj/item/weapon/twohanded/attack_self(mob/user as mob) - if( istype(user,/mob/living/carbon/monkey) ) - user << "It's too heavy for you to wield fully." + ..() + + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.species.is_small) + user << "It's too heavy for you to wield fully." + return + else return - ..() if(wielded) //Trying to unwield it unwield() user << "You are now carrying the [name] with one hand." diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index eb3f0a3c371..de2fef2875e 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -4,77 +4,57 @@ name = "a meat spike" icon = 'icons/obj/kitchen.dmi' icon_state = "spike" - desc = "A spike for collecting meat from animals" + desc = "A spike for collecting meat from animals." density = 1 anchored = 1 var/meat = 0 - var/occupied = 0 - var/meattype = 0 // 0 - Nothing, 1 - Monkey, 2 - Xeno + var/occupied + var/meat_type + var/victim_name = "corpse" -/obj/structure/kitchenspike - attack_paw(mob/user as mob) - return src.attack_hand(usr) - - attackby(obj/item/weapon/grab/G as obj, mob/user as mob, params) - if(!istype(G, /obj/item/weapon/grab)) - return - if(istype(G.affecting, /mob/living/carbon/monkey)) - if(src.occupied == 0) - src.icon_state = "spikebloody" - src.occupied = 1 - src.meat = 5 - src.meattype = 1 - for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!")) - del(G.affecting) - del(G) - - else - user << "\red The spike already has something on it, finish collecting its meat first!" - else if(istype(G.affecting, /mob/living/carbon/alien)) - if(src.occupied == 0) - src.icon_state = "spikebloodygreen" - src.occupied = 1 - src.meat = 5 - src.meattype = 2 - for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!")) - del(G.affecting) - del(G) - else - user << "\red The spike already has something on it, finish collecting its meat first!" +/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) + if(!istype(G, /obj/item/weapon/grab) || !G.affecting) + return + if(occupied) + user << "The spike already has something on it, finish collecting its meat first!" + else + if(spike(G.affecting)) + visible_message("[user] has forced [G.affecting] onto the spike, killing them instantly!") + del(G.affecting) + del(G) else - user << "\red They are too big for the spike, try something smaller!" - return + user << "They are too big for the spike, try something smaller!" -// MouseDrop_T(var/atom/movable/C, mob/user) -// if(istype(C, /obj/mob/carbon/monkey) -// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/slime)) -// else if(istype(C, /obj/livestock/spesscarp +/obj/structure/kitchenspike/proc/spike(var/mob/living/victim) - attack_hand(mob/user as mob) - if(..()) - return - if(src.occupied) - if(src.meattype == 1) - if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey( src.loc ) - usr << "You remove some meat from the monkey." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src.loc) - usr << "You remove the last piece of meat from the monkey!" - src.icon_state = "spike" - src.occupied = 0 - else if(src.meattype == 2) - if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/xenomeat( src.loc ) - usr << "You remove some meat from the alien." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc) - usr << "You remove the last piece of meat from the alien!" - src.icon_state = "spike" - src.occupied = 0 \ No newline at end of file + if(!istype(victim)) + return + + if(istype(victim, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = victim + if(!H.species.is_small) + return 0 + meat_type = H.species.meat_type + icon_state = "spikebloody" + else if(istype(victim, /mob/living/carbon/alien)) + meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat + icon_state = "spikebloodygreen" + else + return 0 + + victim_name = victim.name + occupied = 1 + meat = 5 + return 1 + +/obj/structure/kitchenspike/attack_hand(mob/user as mob) + if(..() || !occupied) + return + meat-- + new meat_type(get_turf(src)) + if(src.meat > 1) + user << "You remove some meat from \the [victim_name]." + else if(src.meat == 1) + user << "You remove the last piece of meat from \the [victim_name]!" + icon_state = "spike" + occupied = 0 diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index a64e798c3ec..e610994fc5c 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -40,6 +40,11 @@ var/list/mechtoys = list( density = 0 anchored = 1 layer = 4 + var/list/mobs_can_pass = list( + /mob/living/carbon/slime, + /mob/living/simple_animal/mouse, + /mob/living/silicon/robot/drone + ) /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) @@ -52,10 +57,19 @@ var/list/mechtoys = list( if(istype(A, /obj/vehicle)) //no vehicles return 0 - if(istype(A, /mob/living)) // You Shall Not Pass! - var/mob/living/M = A - if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime) && !istype(M, /mob/living/simple_animal/mouse) && !istype(M, /mob/living/silicon/robot/drone)) //If your not laying down, or a small creature, no pass. - return 0 + var/mob/living/M = A + if(istype(M)) + if(M.lying) + return ..() + for(var/mob_type in mobs_can_pass) + if(istype(A, mob_type)) + return ..() + if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.species.is_small) + return ..() + return 0 + return ..() /obj/structure/plasticflaps/ex_act(severity) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 329dbbefa1a..2a64766de41 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -167,9 +167,7 @@ // Only adds blood on the floor -- Skie /turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) - if(istype(M, /mob/living/carbon/monkey)) - blood_splatter(src,M,1) - else if( istype(M, /mob/living/carbon/alien )) + if( istype(M, /mob/living/carbon/alien )) var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) this.blood_DNA["UNKNOWN BLOOD"] = "X*" else if( istype(M, /mob/living/silicon/robot )) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 2adf60e2443..fa525e22e1f 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -101,32 +101,6 @@ death(0) suiciding = 0 -/mob/living/carbon/monkey/verb/suicide() - set hidden = 1 - - if (stat == 2) - src << "You're already dead!" - return - - if (!ticker) - src << "You can't commit suicide before the game starts!" - return - - if (suiciding) - src << "You're already committing suicide! Be patient!" - return - - var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") - - if(confirm == "Yes") - if(!canmove || restrained()) - src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))" - return - suiciding = 1 - //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while - viewers(src) << "\red [src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide." - adjustOxyLoss(max(175- getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) - updatehealth() /mob/living/silicon/ai/verb/suicide() set hidden = 1 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 2d6be2a6dbb..81086f3b3ef 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -101,7 +101,7 @@ var/global/nologevent = 0 body += "
" //Monkey - if(ismonkey(M)) + if(issmall(M)) body += "Monkeyized | " else body += "Monkeyize | " diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 363f3d504da..e6b35ef45e2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -436,9 +436,10 @@ var/list/admin_verbs_mentor = list( var/mob/living/carbon/human/H = T if (H.species) D.affected_species = list(H.species.name) - if(istype(T,/mob/living/carbon/monkey)) - var/mob/living/carbon/monkey/M = T - D.affected_species = list(M.greaterform) + if(H.species.primitive_form) + D.affected_species |= H.species.primitive_form + if(H.species.greater_form) + D.affected_species |= H.species.greater_form 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! diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ff98278ce90..738d21f0d34 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -234,7 +234,7 @@ M_job = M.job else if(isslime(M)) M_job = "slime" - else if(ismonkey(M)) + else if(issmall(M)) M_job = "Monkey" else if(isalien(M)) //aliens if(islarva(M)) @@ -355,7 +355,7 @@ dat += "New Player" else if(isobserver(M)) dat += "Ghost" - else if(ismonkey(M)) + else if(issmall(M)) dat += "Monkey" else if(isalien(M)) dat += "Alien" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 93a1e32cd79..9bd31860ac4 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -306,7 +306,7 @@ if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob, 1 ) if("human") M.change_mob_type( /mob/living/carbon/human/human , null, null, delmob, 1 ) if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 ) - if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob, 1 ) + if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 ) if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob, 1 ) if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob, 1 ) @@ -1440,44 +1440,6 @@ show_player_panel(H) //H.regenerate_icons() -/***************** BEFORE************** - - if (href_list["l_players"]) - var/dat = "Name/Real Name/Key/IP:
" - for(var/mob/M in world) - var/foo = "" - if (ismob(M) && M.client) - if(!M.client.authenticated && !M.client.authenticating) - foo += text("\[ Authorize | ", src, M) - else - foo += text("\[ Authorized | ") - if(M.start) - if(!istype(M, /mob/living/carbon/monkey)) - foo += text("Monkeyize | ", src, M) - else - foo += text("Monkeyized | ") - if(istype(M, /mob/living/silicon/ai)) - foo += text("Is an AI | ") - else - foo += text("Make AI | ", src, M) - if(!(M.z in config.admin_levels)) - foo += text("Prison | ", src, M) - foo += text("Maze | ", src, M) - else - foo += text("On Z = 2 | ") - else - foo += text("Hasn't Entered Game | ") - foo += text("Heal/Revive | ", src, M) - - foo += text("Say \]", src, M) - dat += text("N: [] R: [] (K: []) (IP: []) []
", M.name, M.real_name, (M.client ? M.client : "No client"), M.lastKnownIP, foo) - - usr << browse(dat, "window=players;size=900x480") - -*****************AFTER******************/ - -// Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable - else if(href_list["adminplayeropts"]) var/mob/M = locate(href_list["adminplayeropts"]) show_player_panel(M) @@ -2000,7 +1962,7 @@ where = "onfloor" if ( where == "inhand" ) //Can only give when human or monkey - if ( !( ishuman(usr) || ismonkey(usr) ) ) + if ( !( ishuman(usr) || issmall(usr) ) ) usr << "Can only spawn in hand when you're a human or a monkey." where = "onfloor" else if ( usr.get_active_hand() ) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 1274c48e79f..5c89bfb3f8f 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -415,18 +415,6 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1) return //all done. The ghost is auto-deleted - //check if they were a monkey - else if(findtext(G_found.real_name,"monkey")) - if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes") - var/mob/living/carbon/monkey/new_monkey = new(pick(latejoin)) - G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use - new_monkey.key = G_found.key - new_monkey << "You have been fully respawned. Enjoy the game." - message_admins("\blue [key_name_admin(usr)] has respawned [new_monkey.key] as a filthy xeno.", 1) - return //all done. The ghost is auto-deleted - - - //Ok, it's not a xeno or a monkey. So, spawn a human. var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character. diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 2cf4ecee51e..d3d0fc747b8 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -413,13 +413,13 @@ BLIND // can't see anything A.attack_hand(user) return - if ((ishuman(usr) || ismonkey(usr)) && src.loc == user) //make it harder to accidentally undress yourself + if ((ishuman(usr) || issmall(usr)) && src.loc == user) //make it harder to accidentally undress yourself return ..() /obj/item/clothing/under/MouseDrop(obj/over_object as obj) - if (ishuman(usr) || ismonkey(usr)) + if (ishuman(usr) || issmall(usr)) //makes sure that the clothing is equipped so that we can't drag it into our hand from miles away. if (!(src.loc == usr)) return diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 5daabc84799..d22c1338c38 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -58,14 +58,6 @@ randmutg(H) // Applies good mutation domutcheck(H,null,1) - - for(var/mob/living/carbon/monkey/M in living_mob_list) - var/turf/T = get_turf(M) - if(!T) - continue - if(!(T.z in config.station_levels)) - continue - M.apply_effect((rand(5,25)),IRRADIATE,0) sleep(100) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 2ad7fc08929..feb06886004 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -570,4 +570,28 @@ else return ..() +/datum/language/human/monkey + name = "Chimpanzee" + desc = "Ook ook ook." + speech_verb = "chimpers" + ask_verb = "chimpers" + exclaim_verb = "screeches" + key = "6" + +/datum/language/skrell/monkey + name = "Neara" + desc = "Squik squik squik." + key = "8" + +/datum/language/unathi/monkey + name = "Stok" + desc = "Hiss hiss hiss." + key = "7" + +/datum/language/tajaran/monkey + name = "Farwa" + desc = "Meow meow meow." + key = "9" + + #undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 66cdd111b7e..8e7f0f71622 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -256,10 +256,11 @@ if(getBrainLoss() >= 60) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(!key && brain_op_stage != 4 && stat != DEAD) - msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n" - else if(!client && brain_op_stage != 4 && stat != DEAD) - msg += "[t_He] [t_has] suddenly fallen asleep.\n" + if(species.show_ssd && (!species.has_organ["brain"] || has_brain()) && stat != DEAD) + if(!key) + msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n" + else if(!client) + msg += "[t_He] [t_has] suddenly fallen asleep.\n" var/list/wound_flavor_text = list() var/list/is_destroyed = list() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index de9680dccab..c60fce02d31 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -122,6 +122,18 @@ h_style = "Nucleation Crystals" ..(new_loc, "Nucleation") +/mob/living/carbon/human/monkey/New(var/new_loc) + ..(new_loc, "Monkey") + +/mob/living/carbon/human/farwa/New(var/new_loc) + ..(new_loc, "Farwa") + +/mob/living/carbon/human/neara/New(var/new_loc) + ..(new_loc, "Neara") + +/mob/living/carbon/human/stok/New(var/new_loc) + ..(new_loc, "Stok") + /mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) if ((!( yes ) || now_pushing)) return diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 01722c780ba..c5760170c68 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -345,10 +345,6 @@ name = "human" var/mob/living/carbon/human/target = null -/obj/effect/equip_e/monkey - name = "monkey" - var/mob/living/carbon/monkey/target = null - /obj/effect/equip_e/process() return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0a3faac7886..ad7508c5b8d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -124,6 +124,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc handle_heartattack() + if(!client) + species.handle_npc(src) + if(stat == DEAD) handle_decay() diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm new file mode 100644 index 00000000000..290c81723ee --- /dev/null +++ b/code/modules/mob/living/carbon/human/npcs.dm @@ -0,0 +1,13 @@ +/obj/item/clothing/under/punpun + name = "fancy uniform" + desc = "It looks like it was tailored for a monkey." + icon_state = "punpun" + item_color = "punpun" + species_restricted = list("Monkey") + +/mob/living/carbon/human/monkey/punpun/New() + ..() + spawn(1) + name = "Pun Pun" + real_name = name + w_uniform = new /obj/item/clothing/under/punpun(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm new file mode 100644 index 00000000000..4f00eaea20a --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -0,0 +1,88 @@ +/datum/species/monkey + name = "Monkey" + name_plural = "Monkeys" + blurb = "Ook." + + icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi' + deform = 'icons/mob/human_races/monkeys/r_monkey.dmi' + damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi' + damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' + blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' + language = null + default_language = "Chimpanzee" + greater_form = "Human" + is_small = 1 + has_fine_manipulation = 0 + show_ssd = 0 + eyes = "blank_eyes" + + gibbed_anim = "gibbed-m" + dusted_anim = "dust-m" + death_message = "lets out a faint chimper as it collapses and stops moving..." + tail = "chimptail" + + unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws) + inherent_verbs = list(/mob/living/proc/ventcrawl) + hud_type = /datum/hud_data/monkey + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey + + rarity_value = 0.1 + total_health = 75 + brute_mod = 1.5 + burn_mod = 1.5 + + flags = IS_RESTRICTED + +/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H) + if(H.stat != CONSCIOUS) + return + if(prob(33) && H.canmove && isturf(H.loc) && !H.pulledby) //won't move if being pulled + step(H, pick(cardinal)) + if(prob(1)) + H.emote(pick("scratch","jump","roll","tail")) + +/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H) + H.real_name = "[lowertext(name)] ([rand(100,999)])" + H.name = H.real_name + ..() + +/datum/species/monkey/tajaran + name = "Farwa" + name_plural = "Farwa" + + icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi' + deform = 'icons/mob/human_races/monkeys/r_farwa.dmi' + + greater_form = "Tajaran" + default_language = "Farwa" + flesh_color = "#AFA59E" + base_color = "#333333" + tail = "farwatail" + +/datum/species/monkey/skrell + name = "Neara" + name_plural = "Neara" + + icobase = 'icons/mob/human_races/monkeys/r_neara.dmi' + deform = 'icons/mob/human_races/monkeys/r_neara.dmi' + + greater_form = "Skrell" + default_language = "Neara" + flesh_color = "#8CD7A3" + blood_color = "#1D2CBF" + reagent_tag = IS_SKRELL + tail = null + +/datum/species/monkey/unathi + name = "Stok" + name_plural = "Stok" + + icobase = 'icons/mob/human_races/monkeys/r_stok.dmi' + deform = 'icons/mob/human_races/monkeys/r_stok.dmi' + + tail = "stoktail" + greater_form = "Unathi" + default_language = "Stok" + flesh_color = "#34AF10" + base_color = "#066000" + reagent_tag = IS_UNATHI diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm new file mode 100644 index 00000000000..c7cdb5b6cd9 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -0,0 +1,457 @@ +/datum/species/human + name = "Human" + icobase = 'icons/mob/human_races/r_human.dmi' + deform = 'icons/mob/human_races/r_def_human.dmi' + primitive_form = "Monkey" + path = /mob/living/carbon/human/human + language = "Sol Common" + flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT + bodyflags = HAS_SKIN_TONE + dietflags = DIET_OMNI + unarmed_type = /datum/unarmed_attack/punch + blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \ + colonies across a wide swathe of space. They hold a wide range of forms and creeds.

\ + While the central Sol government maintains control of its far-flung people, powerful corporate \ + interests, rampant cyber and bio-augmentation and secretive factions make life on most human \ + worlds tumultous at best." + +/datum/species/unathi + name = "Unathi" + icobase = 'icons/mob/human_races/r_lizard.dmi' + deform = 'icons/mob/human_races/r_def_lizard.dmi' + path = /mob/living/carbon/human/unathi + default_language = "Galactic Common" + language = "Sinta'unathi" + tail = "sogtail" + unarmed_type = /datum/unarmed_attack/claws + primitive_form = "Stok" + darksight = 3 + + blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ + Uuosa-Eso system, which roughly translates to 'burning mother'.

Coming from a harsh, radioactive \ + desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \ + else, frequently even their own lives. They prefer warmer temperatures than most species and \ + their native tongue is a heavy hissing laungage called Sinta'Unathi." + + flags = HAS_LIPS | HAS_UNDERWEAR + bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING + dietflags = DIET_CARN + + cold_level_1 = 280 //Default 260 - Lower is better + cold_level_2 = 220 //Default 200 + cold_level_3 = 140 //Default 120 + + heat_level_1 = 380 //Default 360 - Higher is better + heat_level_2 = 420 //Default 400 + heat_level_3 = 480 //Default 460 + heat_level_3_breathe = 1100 //Default 1000 + + flesh_color = "#34AF10" + + reagent_tag = IS_UNATHI + base_color = "#066000" + +/datum/species/unathi/handle_death(var/mob/living/carbon/human/H) + + H.stop_tail_wagging(1) + +/datum/species/tajaran + name = "Tajaran" + icobase = 'icons/mob/human_races/r_tajaran.dmi' + deform = 'icons/mob/human_races/r_def_tajaran.dmi' + path = /mob/living/carbon/human/tajaran + default_language = "Galactic Common" + language = "Siik'tajr" + tail = "tajtail" + unarmed_type = /datum/unarmed_attack/claws + darksight = 8 + + blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ + S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \ + influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \ + of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \ + using unique inflections their mouths form." + + cold_level_1 = 240 + cold_level_2 = 180 + cold_level_3 = 100 + + heat_level_1 = 340 + heat_level_2 = 380 + heat_level_3 = 440 + heat_level_3_breathe = 900 + + primitive_form = "Farwa" + + flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT + bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING + dietflags = DIET_OMNI + + flesh_color = "#AFA59E" + base_color = "#333333" + +/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H) + + H.stop_tail_wagging(1) + +/datum/species/vulpkanin + name = "Vulpkanin" + icobase = 'icons/mob/human_races/r_vulpkanin.dmi' + deform = 'icons/mob/human_races/r_vulpkanin.dmi' + path = /mob/living/carbon/human/vulpkanin + default_language = "Galactic Common" + language = "Canilunzt" + tail = "vulptail" + unarmed_type = /datum/unarmed_attack/claws + darksight = 8 + + blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \ + dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \ + culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \ + to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \ + which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent." + + flags = HAS_LIPS | HAS_UNDERWEAR + bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING + dietflags = DIET_OMNI + + flesh_color = "#966464" + base_color = "#BE8264" + +/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H) + + H.stop_tail_wagging(1) + +/datum/species/skrell + name = "Skrell" + icobase = 'icons/mob/human_races/r_skrell.dmi' + deform = 'icons/mob/human_races/r_def_skrell.dmi' + path = /mob/living/carbon/human/skrell + default_language = "Galactic Common" + language = "Skrellian" + primitive_form = "Neara" + unarmed_type = /datum/unarmed_attack/punch + + blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ + the royals' or 'Light of the Crown'.

Skrell are a highly advanced and logical race who live under the rule \ + of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \ + herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \ + the secrets of their empire to their allies." + + flags = HAS_LIPS | HAS_UNDERWEAR + bodyflags = HAS_SKIN_COLOR + dietflags = DIET_HERB + + flesh_color = "#8CD7A3" + blood_color = "#1D2CBF" + reagent_tag = IS_SKRELL + +/datum/species/vox + name = "Vox" + icobase = 'icons/mob/human_races/r_vox.dmi' + deform = 'icons/mob/human_races/r_def_vox.dmi' + path = /mob/living/carbon/human/vox + + default_language = "Galactic Common" + language = "Vox-pidgin" + speech_sounds = list('sound/voice/shriek1.ogg') + speech_chance = 20 + + unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too. + + blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \ + scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \ + alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \ + refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \ + smell.

Most humans will never meet a Vox raider, instead learning of this insular species through \ + dealing with their traders and merchants; those that do rarely enjoy the experience." + + warning_low_pressure = 50 + hazard_low_pressure = 0 + + cold_level_1 = 80 + cold_level_2 = 50 + cold_level_3 = 0 + + eyes = "vox_eyes_s" + + breath_type = "nitrogen" + poison_type = "oxygen" + + flags = NO_SCAN | IS_WHITELISTED + dietflags = DIET_OMNI + + blood_color = "#2299FC" + flesh_color = "#808D11" + + reagent_tag = IS_VOX + + makeName(var/gender,var/mob/living/carbon/human/H=null) + var/sounds = rand(2,8) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(vox_name_syllables) + return capitalize(newname) +/* +/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H) + + H.verbs += /mob/living/carbon/human/proc/leap + ..() */ + +/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H) + + H.verbs += /mob/living/carbon/human/proc/gut + ..() + +/datum/species/vox/armalis + name = "Vox Armalis" + icobase = 'icons/mob/human_races/r_armalis.dmi' + deform = 'icons/mob/human_races/r_armalis.dmi' + path = /mob/living/carbon/human/voxarmalis + unarmed_type = /datum/unarmed_attack/claws/armalis + + warning_low_pressure = 50 + hazard_low_pressure = 0 + + cold_level_1 = 80 + cold_level_2 = 50 + cold_level_3 = 0 + + heat_level_1 = 2000 + heat_level_2 = 3000 + heat_level_3 = 4000 + heat_level_3_breathe = 4000 + + brute_mod = 0.2 + burn_mod = 0.2 + + eyes = "blank_eyes" + breath_type = "nitrogen" + poison_type = "oxygen" + + flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED + dietflags = DIET_OMNI //should inherit this from vox, this is here just in case + + blood_color = "#2299FC" + flesh_color = "#808D11" + + reagent_tag = IS_VOX + + tail = "armalis_tail" + icon_template = 'icons/mob/human_races/r_armalis.dmi' + + has_organ = list( + "heart" = /obj/item/organ/heart, + "lungs" = /obj/item/organ/lungs, + "liver" = /obj/item/organ/liver, + "kidneys" = /obj/item/organ/kidneys, + "brain" = /obj/item/organ/brain, + "eyes" = /obj/item/organ/eyes, + "stack" = /obj/item/organ/stack/vox + ) + +/datum/species/kidan + name = "Kidan" + icobase = 'icons/mob/human_races/r_kidan.dmi' + deform = 'icons/mob/human_races/r_def_kidan.dmi' + path = /mob/living/carbon/human/kidan + default_language = "Galactic Common" + language = "Chittin" + unarmed_type = /datum/unarmed_attack/claws + + brute_mod = 0.8 + + flags = IS_WHITELISTED + bodyflags = FEET_CLAWS + dietflags = DIET_HERB + + blood_color = "#FB9800" + + +/datum/species/slime + name = "Slime People" + default_language = "Galactic Common" + language = "Bubblish" + icobase = 'icons/mob/human_races/r_slime.dmi' + deform = 'icons/mob/human_races/r_slime.dmi' + path = /mob/living/carbon/human/slime + unarmed_type = /datum/unarmed_attack/punch + + flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN + bodyflags = HAS_SKIN_COLOR + bloodflags = BLOOD_SLIME + dietflags = DIET_CARN + + //ventcrawler = 1 //ventcrawling commented out + + has_organ = list( + "brain" = /obj/item/organ/brain/slime + ) + +/datum/species/grey + name = "Grey" + icobase = 'icons/mob/human_races/r_grey.dmi' + deform = 'icons/mob/human_races/r_def_grey.dmi' + default_language = "Galactic Common" + //language = "Grey" // Perhaps if they ever get a hivemind + unarmed_type = /datum/unarmed_attack/punch + darksight = 5 // BOOSTED from 2 + eyes = "grey_eyes_s" + + brute_mod = 1.25 //greys are fragile + + default_genes = list(REMOTE_TALK) + + + flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT + dietflags = DIET_HERB + + blood_color = "#A200FF" + +/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove) + if(!remove) + C.dna.SetSEState(REMOTETALKBLOCK,1,1) + C.mutations |= REMOTE_TALK + genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) + else + C.dna.SetSEState(REMOTETALKBLOCK,0,1) + C.mutations -= REMOTE_TALK + genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) + C.update_mutations() + ..() + +/datum/species/diona + name = "Diona" + icobase = 'icons/mob/human_races/r_diona.dmi' + deform = 'icons/mob/human_races/r_def_plant.dmi' + path = /mob/living/carbon/human/diona + default_language = "Galactic Common" + language = "Rootspeak" + unarmed_type = /datum/unarmed_attack/diona + //primitive_form = "Nymph" + slowdown = 5 + + warning_low_pressure = 50 + hazard_low_pressure = -1 + + cold_level_1 = 50 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 300 + heat_level_2 = 340 + heat_level_3 = 400 + heat_level_3_breathe = 700 + + blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \ + species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \ + there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \ + Minoris primary being ringed with a cloud of singing space-station-sized entities.

The Dionaea coexist peacefully with \ + all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \ + even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ + water and other radiation." + + flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN + dietflags = 0 //Diona regenerate nutrition in light, no diet necessary + + body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not + + blood_color = "#004400" + flesh_color = "#907E4A" + + reagent_tag = IS_DIONA + + has_organ = list( + "nutrient channel" = /obj/item/organ/diona/nutrients, + "neural strata" = /obj/item/organ/diona/strata, + "response node" = /obj/item/organ/diona/node, + "gas bladder" = /obj/item/organ/diona/bladder, + "polyp segment" = /obj/item/organ/diona/polyp, + "anchoring ligament" = /obj/item/organ/diona/ligament + ) + + has_limbs = list( + "chest" = list("path" = /obj/item/organ/external/diona/chest), + "groin" = list("path" = /obj/item/organ/external/diona/groin), + "head" = list("path" = /obj/item/organ/external/diona/head), + "l_arm" = list("path" = /obj/item/organ/external/diona/arm), + "r_arm" = list("path" = /obj/item/organ/external/diona/arm/right), + "l_leg" = list("path" = /obj/item/organ/external/diona/leg), + "r_leg" = list("path" = /obj/item/organ/external/diona/leg/right), + "l_hand" = list("path" = /obj/item/organ/external/diona/hand), + "r_hand" = list("path" = /obj/item/organ/external/diona/hand/right), + "l_foot" = list("path" = /obj/item/organ/external/diona/foot), + "r_foot" = list("path" = /obj/item/organ/external/diona/foot/right) + ) + +/datum/species/diona/can_understand(var/mob/other) + var/mob/living/carbon/monkey/diona/D = other + if(istype(D)) + return 1 + return 0 + +/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H) + H.gender = NEUTER + + return ..() + +/* //overpowered and dumb as hell; they get cloning back, though. +/datum/species/diona/handle_death(var/mob/living/carbon/human/H) + + var/mob/living/carbon/monkey/diona/S = new(get_turf(H)) + + if(H.mind) + H.mind.transfer_to(S) + else + S.key = H.key + + for(var/mob/living/carbon/monkey/diona/D in H.contents) + if(D.client) + D.loc = H.loc + else + del(D) + + H.visible_message("\red[H] splits apart with a wet slithering noise!") */ + +/datum/species/machine + name = "Machine" + icobase = 'icons/mob/human_races/r_machine.dmi' + deform = 'icons/mob/human_races/r_machine.dmi' + path = /mob/living/carbon/human/machine + default_language = "Galactic Common" + language = "Trinary" + unarmed_type = /datum/unarmed_attack/punch + + eyes = "blank_eyes" + brute_mod = 1.5 + burn_mod = 1.5 + + cold_level_1 = 50 + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 500 //gives them about 25 seconds in space before taking damage + heat_level_2 = 540 + heat_level_3 = 600 + heat_level_3_breathe = 600 + + synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. + + flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS + dietflags = 0 //IPCs can't eat, so no diet + blood_color = "#1F181F" + flesh_color = "#AAAAAA" + +/datum/species/machine/handle_death(var/mob/living/carbon/human/H) + H.emote("deathgasp") + for(var/organ_name in H.organs_by_name) + if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain + continue + var/obj/item/organ/external/O = H.organs_by_name[organ_name] + if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them! + O.droplimb(1) + var/obj/item/organ/external/O = H.organs_by_name["head"] + if(O) O.droplimb(1) diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index af066547923..3b2f9d0edf7 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -7,10 +7,17 @@ var/path // Species path var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. + + // Damage overlay and masks. + var/damage_overlays = 'icons/mob/human_races/masks/dam_human.dmi' + var/damage_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi' + var/blood_mask = 'icons/mob/human_races/masks/blood_human.dmi' + var/eyes = "eyes_s" // Icon for eyes. var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen. - var/primitive // Lesser form, if any (ie. monkey for humans) + var/primitive_form // Lesser form, if any (ie. monkey for humans) + var/greater_form // Greater form, if any, ie. human for monkeys. var/tail // Name of tail image in species effects icon file. var/unarmed //For empty hand harm-intent attack var/unarmed_type = /datum/unarmed_attack @@ -60,12 +67,15 @@ var/blood_color = "#A10808" //Red. var/flesh_color = "#FFC896" //Pink. var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs + var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human var/base_color //Used when setting species. //Used in icon caching. var/race_key = 0 var/icon/icon_template + var/is_small + var/show_ssd = 1 // Language/culture vars. var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers. @@ -314,467 +324,9 @@ /datum/species/proc/can_understand(var/mob/other) return -/datum/species/human - name = "Human" - icobase = 'icons/mob/human_races/r_human.dmi' - deform = 'icons/mob/human_races/r_def_human.dmi' - primitive = /mob/living/carbon/monkey - path = /mob/living/carbon/human/human - language = "Sol Common" - flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT - bodyflags = HAS_SKIN_TONE - dietflags = DIET_OMNI - unarmed_type = /datum/unarmed_attack/punch - blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \ - colonies across a wide swathe of space. They hold a wide range of forms and creeds.

\ - While the central Sol government maintains control of its far-flung people, powerful corporate \ - interests, rampant cyber and bio-augmentation and secretive factions make life on most human \ - worlds tumultous at best." - -/datum/species/unathi - name = "Unathi" - icobase = 'icons/mob/human_races/r_lizard.dmi' - deform = 'icons/mob/human_races/r_def_lizard.dmi' - path = /mob/living/carbon/human/unathi - default_language = "Galactic Common" - language = "Sinta'unathi" - tail = "sogtail" - unarmed_type = /datum/unarmed_attack/claws - primitive = /mob/living/carbon/monkey/unathi - darksight = 3 - - blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ - Uuosa-Eso system, which roughly translates to 'burning mother'.

Coming from a harsh, radioactive \ - desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \ - else, frequently even their own lives. They prefer warmer temperatures than most species and \ - their native tongue is a heavy hissing laungage called Sinta'Unathi." - - flags = HAS_LIPS | HAS_UNDERWEAR - bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING - dietflags = DIET_CARN - - cold_level_1 = 280 //Default 260 - Lower is better - cold_level_2 = 220 //Default 200 - cold_level_3 = 140 //Default 120 - - heat_level_1 = 380 //Default 360 - Higher is better - heat_level_2 = 420 //Default 400 - heat_level_3 = 480 //Default 460 - heat_level_3_breathe = 1100 //Default 1000 - - flesh_color = "#34AF10" - - reagent_tag = IS_UNATHI - base_color = "#066000" - -/datum/species/unathi/handle_death(var/mob/living/carbon/human/H) - - H.stop_tail_wagging(1) - -/datum/species/tajaran - name = "Tajaran" - icobase = 'icons/mob/human_races/r_tajaran.dmi' - deform = 'icons/mob/human_races/r_def_tajaran.dmi' - path = /mob/living/carbon/human/tajaran - default_language = "Galactic Common" - language = "Siik'tajr" - tail = "tajtail" - unarmed_type = /datum/unarmed_attack/claws - darksight = 8 - - blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ - S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \ - influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \ - of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \ - using unique inflections their mouths form." - - cold_level_1 = 240 - cold_level_2 = 180 - cold_level_3 = 100 - - heat_level_1 = 340 - heat_level_2 = 380 - heat_level_3 = 440 - heat_level_3_breathe = 900 - - primitive = /mob/living/carbon/monkey/tajara - - flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT - bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING - dietflags = DIET_OMNI - - flesh_color = "#AFA59E" - base_color = "#333333" - -/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H) - - H.stop_tail_wagging(1) - -/datum/species/vulpkanin - name = "Vulpkanin" - icobase = 'icons/mob/human_races/r_vulpkanin.dmi' - deform = 'icons/mob/human_races/r_vulpkanin.dmi' - path = /mob/living/carbon/human/vulpkanin - default_language = "Galactic Common" - language = "Canilunzt" - primitive = /mob/living/carbon/monkey/vulpkanin - tail = "vulptail" - unarmed_type = /datum/unarmed_attack/claws - darksight = 8 - - blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \ - dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \ - culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \ - to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \ - which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent." - - flags = HAS_LIPS | HAS_UNDERWEAR - bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING - dietflags = DIET_OMNI - - flesh_color = "#966464" - base_color = "#BE8264" - -/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H) - - H.stop_tail_wagging(1) - -/datum/species/skrell - name = "Skrell" - icobase = 'icons/mob/human_races/r_skrell.dmi' - deform = 'icons/mob/human_races/r_def_skrell.dmi' - path = /mob/living/carbon/human/skrell - default_language = "Galactic Common" - language = "Skrellian" - primitive = /mob/living/carbon/monkey/skrell - unarmed_type = /datum/unarmed_attack/punch - - blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \ - the royals' or 'Light of the Crown'.

Skrell are a highly advanced and logical race who live under the rule \ - of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \ - herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \ - the secrets of their empire to their allies." - - flags = HAS_LIPS | HAS_UNDERWEAR - bodyflags = HAS_SKIN_COLOR - dietflags = DIET_HERB - - flesh_color = "#8CD7A3" - blood_color = "#1D2CBF" - reagent_tag = IS_SKRELL - -/datum/species/vox - name = "Vox" - icobase = 'icons/mob/human_races/r_vox.dmi' - deform = 'icons/mob/human_races/r_def_vox.dmi' - path = /mob/living/carbon/human/vox - - default_language = "Galactic Common" - language = "Vox-pidgin" - speech_sounds = list('sound/voice/shriek1.ogg') - speech_chance = 20 - - unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too. - - blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \ - scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \ - alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \ - refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \ - smell.

Most humans will never meet a Vox raider, instead learning of this insular species through \ - dealing with their traders and merchants; those that do rarely enjoy the experience." - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = 0 - - eyes = "vox_eyes_s" - - breath_type = "nitrogen" - poison_type = "oxygen" - - flags = NO_SCAN | IS_WHITELISTED - dietflags = DIET_OMNI - - blood_color = "#2299FC" - flesh_color = "#808D11" - - reagent_tag = IS_VOX - - makeName(var/gender,var/mob/living/carbon/human/H=null) - var/sounds = rand(2,8) - var/i = 0 - var/newname = "" - - while(i<=sounds) - i++ - newname += pick(vox_name_syllables) - return capitalize(newname) -/* -/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H) - - H.verbs += /mob/living/carbon/human/proc/leap - ..() */ - -/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H) - - H.verbs += /mob/living/carbon/human/proc/gut - ..() - -/datum/species/vox/armalis - name = "Vox Armalis" - icobase = 'icons/mob/human_races/r_armalis.dmi' - deform = 'icons/mob/human_races/r_armalis.dmi' - path = /mob/living/carbon/human/voxarmalis - unarmed_type = /datum/unarmed_attack/claws/armalis - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = 0 - - heat_level_1 = 2000 - heat_level_2 = 3000 - heat_level_3 = 4000 - heat_level_3_breathe = 4000 - - brute_mod = 0.2 - burn_mod = 0.2 - - eyes = "blank_eyes" - breath_type = "nitrogen" - poison_type = "oxygen" - - flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED - dietflags = DIET_OMNI //should inherit this from vox, this is here just in case - - blood_color = "#2299FC" - flesh_color = "#808D11" - - reagent_tag = IS_VOX - - tail = "armalis_tail" - icon_template = 'icons/mob/human_races/r_armalis.dmi' - - has_organ = list( - "heart" = /obj/item/organ/heart, - "lungs" = /obj/item/organ/lungs, - "liver" = /obj/item/organ/liver, - "kidneys" = /obj/item/organ/kidneys, - "brain" = /obj/item/organ/brain, - "eyes" = /obj/item/organ/eyes, - "stack" = /obj/item/organ/stack/vox - ) - -/datum/species/kidan - name = "Kidan" - icobase = 'icons/mob/human_races/r_kidan.dmi' - deform = 'icons/mob/human_races/r_def_kidan.dmi' - path = /mob/living/carbon/human/kidan - default_language = "Galactic Common" - language = "Chittin" - unarmed_type = /datum/unarmed_attack/claws - - brute_mod = 0.8 - - flags = IS_WHITELISTED - bodyflags = FEET_CLAWS - dietflags = DIET_HERB - - blood_color = "#FB9800" - - -/datum/species/slime - name = "Slime People" - default_language = "Galactic Common" - language = "Bubblish" - icobase = 'icons/mob/human_races/r_slime.dmi' - deform = 'icons/mob/human_races/r_slime.dmi' - path = /mob/living/carbon/human/slime - primitive = /mob/living/carbon/slime - unarmed_type = /datum/unarmed_attack/punch - - flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN - bodyflags = HAS_SKIN_COLOR - bloodflags = BLOOD_SLIME - dietflags = DIET_CARN - - //ventcrawler = 1 //ventcrawling commented out - - has_organ = list( - "brain" = /obj/item/organ/brain/slime - ) - -/datum/species/grey - name = "Grey" - icobase = 'icons/mob/human_races/r_grey.dmi' - deform = 'icons/mob/human_races/r_def_grey.dmi' - default_language = "Galactic Common" - //language = "Grey" // Perhaps if they ever get a hivemind - unarmed_type = /datum/unarmed_attack/punch - darksight = 5 // BOOSTED from 2 - eyes = "grey_eyes_s" - - brute_mod = 1.25 //greys are fragile - - default_genes = list(REMOTE_TALK) - - primitive = /mob/living/carbon/monkey // TODO - - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT - dietflags = DIET_HERB - - blood_color = "#A200FF" - -/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove) - if(!remove) - C.dna.SetSEState(REMOTETALKBLOCK,1,1) - C.mutations |= REMOTE_TALK - genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) - else - C.dna.SetSEState(REMOTETALKBLOCK,0,1) - C.mutations -= REMOTE_TALK - genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) - C.update_mutations() - ..() - -/datum/species/diona - name = "Diona" - icobase = 'icons/mob/human_races/r_diona.dmi' - deform = 'icons/mob/human_races/r_def_plant.dmi' - path = /mob/living/carbon/human/diona - default_language = "Galactic Common" - language = "Rootspeak" - unarmed_type = /datum/unarmed_attack/diona - primitive = /mob/living/carbon/monkey/diona - slowdown = 5 - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 300 - heat_level_2 = 340 - heat_level_3 = 400 - heat_level_3_breathe = 700 - - blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \ - species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \ - there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \ - Minoris primary being ringed with a cloud of singing space-station-sized entities.

The Dionaea coexist peacefully with \ - all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \ - even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ - water and other radiation." - - flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN - dietflags = 0 //Diona regenerate nutrition in light, no diet necessary - - body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not - - blood_color = "#004400" - flesh_color = "#907E4A" - - reagent_tag = IS_DIONA - - has_organ = list( - "nutrient channel" = /obj/item/organ/diona/nutrients, - "neural strata" = /obj/item/organ/diona/strata, - "response node" = /obj/item/organ/diona/node, - "gas bladder" = /obj/item/organ/diona/bladder, - "polyp segment" = /obj/item/organ/diona/polyp, - "anchoring ligament" = /obj/item/organ/diona/ligament - ) - - has_limbs = list( - "chest" = list("path" = /obj/item/organ/external/diona/chest), - "groin" = list("path" = /obj/item/organ/external/diona/groin), - "head" = list("path" = /obj/item/organ/external/diona/head), - "l_arm" = list("path" = /obj/item/organ/external/diona/arm), - "r_arm" = list("path" = /obj/item/organ/external/diona/arm/right), - "l_leg" = list("path" = /obj/item/organ/external/diona/leg), - "r_leg" = list("path" = /obj/item/organ/external/diona/leg/right), - "l_hand" = list("path" = /obj/item/organ/external/diona/hand), - "r_hand" = list("path" = /obj/item/organ/external/diona/hand/right), - "l_foot" = list("path" = /obj/item/organ/external/diona/foot), - "r_foot" = list("path" = /obj/item/organ/external/diona/foot/right) - ) - -/datum/species/diona/can_understand(var/mob/other) - var/mob/living/carbon/monkey/diona/D = other - if(istype(D)) - return 1 - return 0 - -/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H) - H.gender = NEUTER - - return ..() - -/* //overpowered and dumb as hell; they get cloning back, though. -/datum/species/diona/handle_death(var/mob/living/carbon/human/H) - - var/mob/living/carbon/monkey/diona/S = new(get_turf(H)) - - if(H.mind) - H.mind.transfer_to(S) - else - S.key = H.key - - for(var/mob/living/carbon/monkey/diona/D in H.contents) - if(D.client) - D.loc = H.loc - else - del(D) - - H.visible_message("\red[H] splits apart with a wet slithering noise!") */ - -/datum/species/machine - name = "Machine" - icobase = 'icons/mob/human_races/r_machine.dmi' - deform = 'icons/mob/human_races/r_machine.dmi' - path = /mob/living/carbon/human/machine - default_language = "Galactic Common" - language = "Trinary" - unarmed_type = /datum/unarmed_attack/punch - - eyes = "blank_eyes" - brute_mod = 1.5 - burn_mod = 1.5 - - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 500 //gives them about 25 seconds in space before taking damage - heat_level_2 = 540 - heat_level_3 = 600 - heat_level_3_breathe = 600 - - synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. - - flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS - dietflags = 0 //IPCs can't eat, so no diet - blood_color = "#1F181F" - flesh_color = "#AAAAAA" - -/datum/species/machine/handle_death(var/mob/living/carbon/human/H) - H.emote("deathgasp") - for(var/organ_name in H.organs_by_name) - if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain - continue - var/obj/item/organ/external/O = H.organs_by_name[organ_name] - if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them! - O.droplimb(1) - var/obj/item/organ/external/O = H.organs_by_name["head"] - if(O) O.droplimb(1) - +// Called in life() when the mob has no client. +/datum/species/proc/handle_npc(var/mob/living/carbon/human/H) + return //Species unarmed attacks