From 026074d6c576eeec0458b69a2bb8818bb00407b1 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Sun, 6 May 2012 22:53:39 +0100 Subject: [PATCH] TG: (Might very possibly be broken. Didn't port most of the stuff due to it having been rewritten. - Erthilo) Adds BS12 dismemberment. Not all features of it are implemented yet, but it should be equal to our previous system. Adds greater changeling code, but doesn't change the genome count yet on it. Renames registered to registered_name on IDs because bs12 had it and it seemed like a good idea to do last night. For some reason. Adds an afterattack to mobs that can be used. (In fairness, lots of shit in attack_hand should be in there instead, like stungloves and stuff, to minimize duplicated code) Revision: r3537 Author: VivianFoxfoot --- baystation12.dme | 2 +- .../Cael_Aislinn/Tajara/tajaran.dm | 100 +++++++++++++++- .../Cael_Aislinn/Tajara/tajaran_face.dmi | Bin 10901 -> 16070 bytes code/datums/helper_datums/tension.dm | 4 + code/datums/shuttle_controller.dm | 3 +- code/defines/obj/computer.dm | 26 ---- code/defines/obj/decal.dm | 1 + code/defines/obj/weapon.dm | 3 +- code/defines/procs/helpers.dm | 6 +- code/game/atom_procs.dm | 30 +++++ .../gamemodes/changeling/changeling_powers.dm | 111 ++++++++++++++++++ .../gamemodes/changeling/modularchangling.dm | 2 +- .../machinery/computer/{id.dm => card.dm} | 35 +++--- code/game/machinery/computer/security.dm | 26 ++++ code/game/machinery/computer/shuttle.dm | 1 + code/game/objects/closets/secure/personal.dm | 8 +- code/game/objects/items.dm | 3 +- code/game/objects/items/item.dm | 1 + code/game/objects/items/weapons/cards_ids.dm | 35 ++++-- code/modules/admin/admin_verbs.dm | 4 +- code/modules/admin/verbs/onlyone.dm | 1 + code/modules/admin/verbs/striketeam.dm | 2 +- code/modules/chemical/Chemistry-Reagents.dm | 100 +++++++++------- code/modules/clothing/costume.dm | 2 +- code/modules/critters/critter_defenses.dm | 12 +- code/modules/mob/living/carbon/brain/brain.dm | 17 ++- code/modules/mob/living/carbon/brain/death.dm | 2 +- code/modules/mob/living/carbon/brain/life.dm | 5 +- code/modules/mob/living/carbon/brain/say.dm | 3 +- code/modules/mob/living/carbon/carbon.dm | 4 +- code/modules/mob/living/carbon/human/human.dm | 27 +++-- .../living/carbon/human/human_attackhand.dm | 39 +++--- .../mob/living/carbon/human/human_defense.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 33 ++++-- code/modules/mob/living/carbon/human/say.dm | 3 + code/modules/mob/mob_defines.dm | 1 + code/modules/mob/mob_helpers.dm | 8 +- code/modules/mob/organ/organ.dm | 5 +- code/modules/mob/organ/organ_external.dm | 13 ++ code/unused/computer2/med_rec.dm | 2 +- code/unused/gamemodes/ctf.dm | 4 +- code/unused/gamemodes/deathmatch.dm | 2 +- code/unused/pda2/pda2.dm | 4 +- 43 files changed, 521 insertions(+), 172 deletions(-) rename code/game/machinery/computer/{id.dm => card.dm} (97%) diff --git a/baystation12.dme b/baystation12.dme index 978db2d5c0..02a7c5e836 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -538,13 +538,13 @@ #include "code\game\machinery\computer\atmos_alert.dm" #include "code\game\machinery\computer\buildandrepair.dm" #include "code\game\machinery\computer\camera_monitor.dm" +#include "code\game\machinery\computer\card.dm" #include "code\game\machinery\computer\cloning.dm" #include "code\game\machinery\computer\communications.dm" #include "code\game\machinery\computer\computer.dm" #include "code\game\machinery\computer\crew.dm" #include "code\game\machinery\computer\HolodeckControl.dm" #include "code\game\machinery\computer\hologram.dm" -#include "code\game\machinery\computer\id.dm" #include "code\game\machinery\computer\law.dm" #include "code\game\machinery\computer\lockdown.dm" #include "code\game\machinery\computer\medical.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index 63549e5b1a..728ca9f823 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -2,7 +2,7 @@ name = "tajaran" real_name = "tajaran" voice_name = "tajaran" - icon = 'mob.dmi' + icon = 'tajaran.dmi' icon_state = "m-none" var/list/tajspeak_letters // @@ -41,10 +41,10 @@ var/fat = "" /*if (mutations & FAT) fat = "fat"*/ - +/* if (mutations & HULK) overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk[fat][!lying ? "_s" : "_l"]") - +*/ if (mutations & COLD_RESISTANCE) overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[fat][!lying ? "_s" : "_l"]") @@ -489,6 +489,8 @@ stand_icon = new /icon('tajaran.dmi', "torso_[g]_s") lying_icon = new /icon('tajaran.dmi', "torso_[g]_l") + + var/husk = (mutations & HUSK) //var/obese = (mutations & FAT) @@ -620,4 +622,94 @@ del(eyes_s) /mob/living/carbon/human/tajaran/co2overloadtime = null -/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70 \ No newline at end of file +/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70 + +//I just need this for some vars, please don't hurt me. -- Erthilo + +/mob/living/carbon/human/tajaran/Emissary/ + unacidable = 1 + var/aegis = 1 + +/mob/living/carbon/human/tajaran/Emissary/New() + + ..() + + reagents.add_reagent("hyperzine", 5000) //From the dark, to the light, it's a supersonic flight! + // Gotta keep it going! + if (!(mutations & HULK)) + mutations |= HULK + + if (!(mutations & LASER)) + mutations |= LASER + + if (!(mutations & XRAY)) + mutations |= XRAY + sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) + see_in_dark = 8 + see_invisible = 2 + + if (!(mutations & COLD_RESISTANCE)) + mutations |= COLD_RESISTANCE + + if (!(mutations & TK)) + mutations |= TK + + if(!(mutations & HEAL)) + mutations |= HEAL + + spawn(0) + while(src) + adjustBruteLoss(-10) + adjustToxLoss(-10) + adjustOxyLoss(-10) + adjustFireLoss(-10) + sleep(10) + + +/mob/living/carbon/human/tajaran/Emissary/ex_act() + return + +/mob/living/carbon/human/tajaran/Emissary/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) + if(istype(target , /obj/machinery/door/airlock)) + if(target:locked) + target:locked = 0 + if(!target:density) + return 1 + if(target:operating > 0) + return + if(!ticker) + return 0 + if(!target:operating) + target:operating = 1 + + target:animate("opening") + target:sd_SetOpacity(0) + sleep(10) + target:layer = 2.7 + target:density = 0 + target:update_icon() + target:sd_SetOpacity(0) + target:update_nearby_tiles() + + target:operating = -1 + + user << "You force the door open, shearing the bolts and burning out the motor." + + if(target:operating) + target:operating = -1 + else if(istype(target , /obj/machinery/door/firedoor)) + target:open() + +/mob/living/carbon/human/tajaran/Emissary/Life() + + ..() + + if (!(mutations & HULK)) + mutations |= HULK + + + if((stat == 2) && aegis) + src.show_message("\red [src]'s eyes open suddenlly.", 3, "\red \"I gave a solemn vow to never die for long.\"", 2) + src.heal_overall_damage(9001,9001) + src.stat = 0 + aegis = 0 \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_face.dmi b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran_face.dmi index 9835ba8764715eb8d01ea5be16718648c71c03fd..440983184dbe936a33386f053e6db2c0832acd0c 100644 GIT binary patch literal 16070 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 lh_c6qS-JkdjFZDhw1JF9*STvq<{ 1e5) // midnight rollover protection timeleft = 0 diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm index b49a1f36e7..fdf0304167 100644 --- a/code/defines/obj/computer.dm +++ b/code/defines/obj/computer.dm @@ -71,32 +71,6 @@ var/h_b = 245.0 -/obj/machinery/computer/secure_data - name = "Security Records" - desc = "Used to view and edit personnel's security records" - icon_state = "security" - req_access = list(access_security) - circuit = "/obj/item/weapon/circuitboard/secure_data" - var/obj/item/weapon/card/id/scan = null - var/obj/item/weapon/disk/records/disk = null - var/authenticated = null - var/rank = null - var/screen = null - var/datum/data/record/active1 = null - var/datum/data/record/active2 = null - var/a_id = null - var/temp = null - var/printing = null - var/can_change_id = 0 - var/list/Perp - var/tempname = null - - -/obj/machinery/computer/secure_data/detective_computer - icon = 'computer.dmi' - icon_state = "messyfiles" - - /obj/machinery/computer/security name = "Security Cameras" desc = "Used to access the various cameras on the station." diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 01e41a3b76..3e2a0e8220 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -77,6 +77,7 @@ if(B != src) del(B) + /obj/effect/decal/cleanable/blood/drip name = "drips of blood" desc = "It's red." diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 7acf6677f3..c950eef2d5 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -572,7 +572,8 @@ icon_state = "id" item_state = "card-id" var/access = list() - var/registered_name = null + var/registered_name = null // The name registered_name on the card + var/assignment = null var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit var/dorm = 0 // determines if this ID has claimed a dorm already diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index 0e65f4f618..0fc40b94b3 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -740,9 +740,9 @@ Turf and target are seperate in case you want to teleport some distance from a t pda.name = "PDA-[newname] ([pda.ownjob])" break for(var/obj/item/weapon/card/id/id in M.contents) - if(id.registered == oldname) - id.registered = newname - id.name = "[id.registered]'s ID Card ([id.assignment])" + if(id.registered_name == oldname) + id.registered_name = newname + id.name = "[id.registered_name]'s ID Card ([id.assignment])" break*/ /proc/ionnum() diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index ff0a4c034c..d3cdcfc799 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -678,6 +678,25 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl if ( !animal.restrained() ) attack_animal(animal) + + + + + + + + + + + + + + + + + + + /atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE // world << "checking if this shit gets called at all" @@ -908,7 +927,18 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl // ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND ------- if (istype(usr, /mob/living/carbon/human)) // ------- YOU ARE HUMAN ------- +/* if(usr.hand) // if he's using his left hand. + var/datum/organ/external/temp = usr:get_organ("l_hand") + if(temp.destroyed) + usr << "\blue You look at your stump." + return + else + var/datum/organ/external/temp = usr:get_organ("r_hand") + if(temp.destroyed) + usr << "\blue You look at your stump." + return*/ src.attack_hand(usr, usr.hand) +// usr:afterattack(src, usr, (t5 ? 1 : 0), params) else // ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED ------- if (istype(usr, /mob/living/carbon/monkey)) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 94d09b30f4..61d51839b7 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -403,6 +403,117 @@ del(usr) return +/* +/client/proc/changeling_greater_form() // Oh shit, it's on now. + + set category = "Changeling" + set name = "Greater Form" + set desc = "Become onto the Goddess" + + if (usr.monkeyizing) + return + for(var/obj/item/W in src) + usr.drop_from_slot(W) + usr.update_clothing() + usr.monkeyizing = 1 + usr.canmove = 0 + usr.icon = null + usr.invisibility = 101 + for(var/datum/organ/external/organ in usr:organs) + del(organ) + + var/atom/movable/overlay/animation = new /atom/movable/overlay( usr.loc ) + animation.icon_state = "blank" + animation.icon = 'mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + //animation = null + var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src ) + del(animation) + + O.real_name = usr.real_name + O.name = usr.name + O.dna = usr.dna + usr.dna = null + O.changeling = usr.changeling + updateappearance(O,O.dna.uni_identity) + O.loc = usr.loc + O.viruses = usr.viruses + usr.viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + O.universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans + + if (usr.client) + usr.client.mob = O + if(usr.mind) + usr.mind.transfer_to(O) + + spawn(300) + command_alert("Extreme danger. A level four biological entity has been detected on board the station. Emergancy evacuation procedures have begun. Civilian staff, do NOT engage the creature if spotted. Renforcements are on route.") + emergency_shuttle.online = 1 + emergency_shuttle.settimeleft(10) + spawn(10) + var/list/candidates = list() + + for(var/mob/dead/observer/G in world) + candidates += G + + for(var/mob/dead/observer/G in candidates) + if(!G.client || !G.key) + candidates.Remove(G) + + for(var/obj/structure/stool/bed/chair/C in locate(/area/shuttle/escape/transit)) + + var/mob/living/carbon/human/new_commando = create_death_commando(C, 0) + + if(candidates.len) + var/mob/dead/observer/G = pick(candidates) + new_commando.mind.key = G.key//For mind stuff. + new_commando.key = G.key + new_commando.internal = new_commando.s_store + new_commando.internals.icon_state = "internal1" + candidates -= G + del(G) + else + break + + //So they don't forget their code or mission. + new_commando.mind.store_memory("Mission: \red Assist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained.") + + new_commando << "\blue You are a Special Ops Commando in the service of Central Command. \nYour current mission is: \redAssist in mobilizing station crew against the hostile entity. Do not allow the hostile entity to escape. Do not leave or permit anyone to leave until the entity is contained." + spawn(100) + emergency_shuttle.online = 0 + command_alert("The emergancy shuttle will hold until the hostile entity has been terminated. During evacuation, do NOT use escape pods. To avoid the chance of a hostile entity escaping, the Thunderchild will be firing on and destorying any escape pods leaving the station") + O << "Your way out has arrived. Obtain the ID of three heads to override the holding protocol and escape. Let none stand in your way, for you are a perfect creature." + for(var/datum/objective/objective in O.mind.objectives) + O.mind.objectives.Remove(objective) + del(objective) + var/datum/objective/new_objective = null + new_objective = new /datum/objective/escape + new_objective.owner = O.mind + O.mind.objectives += new_objective + + spawn(0) + while(emergency_shuttle.online == 0) + sleep(10) + command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.") + spawn(900) + for(var/mob/M in locate(/area/shuttle/escape_pod1/transit)) + M.gib() + for(var/mob/M in locate(/area/shuttle/escape_pod2/transit)) + M.gib() + for(var/mob/M in locate(/area/shuttle/escape_pod3/transit)) + M.gib() + for(var/mob/M in locate(/area/shuttle/escape_pod5/transit)) + M.gib() + while(emergency_shuttle.online == 1) + sleep(10) + if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) ) + command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.") + +*/ /client/proc/changeling_fakedeath() set category = "Changeling" set name = "Regenerative Stasis (20)" diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index bb48441a34..d6d692cc9c 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -47,7 +47,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list() desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance." genomecost = 250 - // doesn't happen lol. Yet! +// verbpath = /client/proc/changeling_greater_form /obj/effect/proc_holder/power/fakedeath name = "Fake Death" diff --git a/code/game/machinery/computer/id.dm b/code/game/machinery/computer/card.dm similarity index 97% rename from code/game/machinery/computer/id.dm rename to code/game/machinery/computer/card.dm index d14fa30a0a..6613a8aeab 100644 --- a/code/game/machinery/computer/id.dm +++ b/code/game/machinery/computer/card.dm @@ -2,22 +2,17 @@ name = "Identification Computer" desc = "A computer used to modify ID cards." icon_state = "id" - circuit = "/obj/item/weapon/circuitboard/card" - var/obj/item/weapon/card/id/scan = null - var/obj/item/weapon/card/id/modify = null - var/authenticated = 0.0 - var/mode = 0.0 - var/printing = null req_access = list(access_change_ids) + circuit = "/obj/item/weapon/circuitboard/card" + var + obj/item/weapon/card/id/scan = null + obj/item/weapon/card/id/modify = null + authenticated = 0.0 + mode = 0.0 + printing = null -/obj/machinery/computer/card/centcom - name = "CentCom Identification Computer" - circuit = "/obj/item/weapon/circuitboard/card/centcom" - req_access = list(access_cent_captain) - - -/obj/machinery/computer/card/attackby(O as obj, user as mob) +/obj/machinery/computer/card/attackby(O as obj, user as mob)//TODO:SANITY if(istype(O, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/idcard = O if(access_change_ids in idcard.access) @@ -37,12 +32,15 @@ else ..() + /obj/machinery/computer/card/attack_ai(var/mob/user as mob) return attack_hand(user) + /obj/machinery/computer/card/attack_paw(var/mob/user as mob) return attack_hand(user) + /obj/machinery/computer/card/attack_hand(var/mob/user as mob) if(..()) return @@ -169,6 +167,7 @@ onclose(user, "id_com") return + /obj/machinery/computer/card/Topic(href, href_list) if(..()) return @@ -267,4 +266,12 @@ if (modify) modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])") updateUsrDialog() - return \ No newline at end of file + return + + + +/obj/machinery/computer/card/centcom + name = "CentCom Identification Computer" + circuit = "/obj/item/weapon/circuitboard/card/centcom" + req_access = list(access_cent_captain) + diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 7cc8685c26..df2616b8b3 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -1,3 +1,25 @@ +/obj/machinery/computer/secure_data + name = "Security Records" + desc = "Used to view and edit personnel's security records" + icon_state = "security" + req_access = list(access_security) + circuit = "/obj/item/weapon/circuitboard/secure_data" + var + obj/item/weapon/card/id/scan = null + obj/item/weapon/disk/records/disk = null + authenticated = null + rank = null + screen = null + datum/data/record/active1 = null + datum/data/record/active2 = null + a_id = null + temp = null + printing = null + can_change_id = 0 + list/Perp + tempname = null + + /obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob) if(istype(O, /obj/item/weapon/card/id) && !scan) usr.drop_item() @@ -523,6 +545,10 @@ What a mess.*/ updateUsrDialog() return +/obj/machinery/computer/secure_data/detective_computer + icon = 'computer.dmi' + icon_state = "messyfiles" + /obj/item/weapon/disk/records name = "Crew Records Disk" desc = "Stores security and medical records." diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index e17df88129..2270faa327 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -39,6 +39,7 @@ message_admins("[key_name_admin(user)] has launched the shuttle") log_game("[user.ckey] has launched the shuttle early") world << "\blue Alert: Shuttle launch time shortened to 10 seconds!" + emergency_shuttle.online = 1 emergency_shuttle.settimeleft(10) //src.authorized = null del(src.authorized) diff --git a/code/game/objects/closets/secure/personal.dm b/code/game/objects/closets/secure/personal.dm index 2b0b8ad3b9..c9f05e3a3e 100644 --- a/code/game/objects/closets/secure/personal.dm +++ b/code/game/objects/closets/secure/personal.dm @@ -1,4 +1,4 @@ -/obj/structure/closet/secure_closet/personal/var/registered = null +/obj/structure/closet/secure_closet/personal/var/registered_name = null /obj/structure/closet/secure_closet/personal/req_access = list(access_all_personal_lockers) /obj/structure/closet/secure_closet/personal/New() @@ -42,14 +42,14 @@ return var/obj/item/weapon/card/id/I = W if(!I || !I.registered_name) return - if(src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered_name))) + if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name))) //they can open all lockers, or nobody owns this, or they own this locker src.locked = !( src.locked ) if(src.locked) src.icon_state = src.icon_locked else src.icon_state = src.icon_closed - if(!src.registered) - src.registered = I.registered_name + if(!src.registered_name) + src.registered_name = I.registered_name src.desc = "Owned by [I.registered_name]." src.name = "Personal Closet - [I.registered_name]" else diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 45c7100ece..a7dba9299a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -463,7 +463,7 @@ if (is_sharp(W)) burst() -/proc/is_sharp(obj/item/W as obj) +/proc/is_sharp(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT? return ( \ istype(W, /obj/item/weapon/screwdriver) || \ istype(W, /obj/item/weapon/pen) || \ @@ -483,6 +483,7 @@ istype(W, /obj/item/weapon/shard) || \ istype(W, /obj/item/weapon/reagent_containers/syringe) || \ istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" || \ + istype(W, /obj/item/weapon/twohanded/fireaxe) || \ istype(W,/obj/item/projectile)\ ) diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index a9e65abf4e..82ef5fa4d2 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -105,6 +105,7 @@ var/datum/organ/external/temp = user:organs["r_hand"] if(temp.destroyed) user << "\blue Yo- wait a minute." + if (istype(src.loc, /obj/item/weapon/storage)) for(var/mob/M in range(1, src.loc)) if (M.s_active == src.loc) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 1f4b10b370..6363c06b3f 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -67,18 +67,39 @@ FINGERPRINT CARD return /obj/item/weapon/card/id/syndicate/var/mob/registered_user = null /obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob) - if(!registered_user) - registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name) - assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant") - name = "[src.registered_name]'s ID Card ([src.assignment])" + if(!src.registered_name) + //Stop giving the players unsanitized unputs! You are giving ways for players to intentionally crash clients! -Nodrak + var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26) + if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm + alert("Invalid name.") + return + src.registered_name = t + + var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN) + if(!u) + alert("Invalid assignment.") + src.registered_name = "" + return + src.assignment = u + src.name = "[src.registered_name]'s ID Card ([src.assignment])" user << "\blue You successfully forge the ID card." registered_user = user else if(registered_user == user) switch(alert("Would you like to display the ID, or retitle it?","Choose.","Rename","Show")) if("Rename") - registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name) - assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant") - name = "[src.registered_name]'s ID Card ([src.assignment])" + var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name)),1,26) + if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/new_player/prefrences.dm + alert("Invalid name.") + return + src.registered_name = t + + var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")),1,MAX_MESSAGE_LEN) + if(!u) + alert("Invalid assignment.") + src.registered_name = "" + return + src.assignment = u + src.name = "[src.registered_name]'s ID Card ([src.assignment])" user << "\blue You successfully forge the ID card." return if("Show") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7d032cc4f7..4435bbf8f2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -198,6 +198,7 @@ verbs += /client/proc/toggleadminhelpsound verbs += /proc/possess verbs += /proc/release + verbs += /client/proc/make_tajaran verbs += /client/proc/admin_deny_shuttle verbs += /client/proc/cmd_admin_christmas verbs += /client/proc/editappear @@ -274,7 +275,6 @@ verbs += /client/proc/delbook verbs += /client/proc/Force_Event_admin verbs += /client/proc/radioalert - verbs += /client/proc/make_tajaran verbs += /client/proc/CarbonCopy verbs += /client/proc/jump_to_dead_group else return @@ -431,7 +431,6 @@ verbs -= /client/proc/Force_Event_admin verbs -= /client/proc/radioalert verbs -= /client/proc/rnd_check_designs - verbs -= /client/proc/make_tajaran verbs -= /client/proc/CarbonCopy verbs -= /proc/possess verbs -= /proc/release @@ -451,6 +450,7 @@ verbs -= /client/proc/togglebuildmodeself verbs -= /client/proc/kill_airgroup verbs -= /client/proc/debug_master_controller + verbs -= /client/proc/make_tajaran verbs -= /client/proc/admin_deny_shuttle verbs -= /client/proc/cmd_admin_christmas verbs -= /client/proc/editappear diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 65e09faf50..30ea5b5c79 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -8,6 +8,7 @@ if(alert("BEGIN THE TOURNAMENT?",,"Yes","No")=="No") return + //feedback_add_details("admin_verb","TCBOO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! for(var/mob/living/carbon/human/H in world) if(H.stat == 2 || !(H.client)) continue if(is_special_character(H)) continue diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 2b6d2adcbe..79eb5baec5 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -135,7 +135,7 @@ var/global/sent_strike_team = 0 if(!(new_commando.mind in ticker.mode.traitors))//If they weren't already an extra traitor. ticker.mode.traitors += new_commando.mind//Adds them to current traitor list. Which is really the extra antagonist list. new_commando.equip_death_commando(leader_selected) - del(spawn_location) +// del(spawn_location) return new_commando /mob/living/carbon/human/proc/equip_death_commando(leader_selected = 0) diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 2aefdc5492..c8f93e7c8c 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -735,29 +735,32 @@ datum del (M:wear_mask) M << "\red Your mask melts away but protects you from the acid!" return + if(!M.unacidable) + if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30) - if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30) - var/datum/organ/external/head/affecting = M:get_organ("head") - if(affecting) - affecting.disfigured = 1 - affecting.take_damage(25, 0) - M:UpdateDamageIcon() - M:emote("scream") - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() - else - M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl + var/datum/organ/external/head/affecting = M:get_organ("head") + if(affecting) + affecting.disfigured = 1 + affecting.take_damage(25, 0) + M:UpdateDamageIcon() + M:emote("scream") + M << "\red Your face has become disfigured!" + M.real_name = "Unknown" + M.warn_flavor_changed() + else + M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl else - M.take_organ_damage(min(15, volume * 2)) + if(!M.unacidable) + M.take_organ_damage(min(15, volume * 2)) reaction_obj(var/obj/O, var/volume) if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(10)) - var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) - I.desc = "Looks like this was \an [O] some time ago." - for(var/mob/M in viewers(5, O)) - M << "\red \the [O] melts." - del(O) + if(!O.unacidable) + var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) + I.desc = "Looks like this was \an [O] some time ago." + for(var/mob/M in viewers(5, O)) + M << "\red \the [O] melts." + del(O) pacid name = "Polytrinic acid" @@ -788,42 +791,49 @@ datum else M << "\red Your helmet protects you from the acid!" return - var/datum/organ/external/head/affecting = M:get_organ("head") - affecting.take_damage(15, 0) - M:UpdateDamageIcon() - M:emote("scream") - if(prob(15)) - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() - affecting.disfigured = 1 + + if(!M.unacidable) + var/datum/organ/external/head/affecting = M:get_organ("head") + affecting.take_damage(15, 0) + M:UpdateDamageIcon() + M:emote("scream") + if(prob(15)) + M << "\red Your face has become disfigured!" + M.real_name = "Unknown" + M.warn_flavor_changed() + affecting.disfigured = 1 else if(istype(M, /mob/living/carbon/monkey) && M:wear_mask) del (M:wear_mask) M << "\red Your mask melts away but protects you from the acid!" return - M.take_organ_damage(min(15, volume * 4)) // same deal as sulphuric acid + + + if(!M.unacidable) + M.take_organ_damage(min(15, volume * 4)) // same deal as sulphuric acid else - if(istype(M, /mob/living/carbon/human)) - var/datum/organ/external/head/affecting = M:get_organ("head") - affecting.take_damage(15, 0) - M:UpdateDamageIcon() - M:emote("scream") - if(prob(15)) - M << "\red Your face has become disfigured!" - M.real_name = "Unknown" - M.warn_flavor_changed() - affecting.disfigured = 1 - else - M.take_organ_damage(min(15, volume * 4)) + if(!M.unacidable) + if(istype(M, /mob/living/carbon/human)) + var/datum/organ/external/head/affecting = M:get_organ("head") + affecting.take_damage(15, 0) + M:UpdateDamageIcon() + M:emote("scream") + if(prob(15)) + M << "\red Your face has become disfigured!" + M.real_name = "Unknown" + M.warn_flavor_changed() + affecting.disfigured = 1 + else + M.take_organ_damage(min(15, volume * 4)) reaction_obj(var/obj/O, var/volume) if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom))) - var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) - I.desc = "Looks like this was \an [O] some time ago." - for(var/mob/M in viewers(5, O)) - M << "\red \the [O] melts." - del(O) + if(!O.unacidable) + var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) + I.desc = "Looks like this was \an [O] some time ago." + for(var/mob/M in viewers(5, O)) + M << "\red \the [O] melts." + del(O) glycerol name = "Glycerol" diff --git a/code/modules/clothing/costume.dm b/code/modules/clothing/costume.dm index f59854cb23..13f6d073a4 100644 --- a/code/modules/clothing/costume.dm +++ b/code/modules/clothing/costume.dm @@ -162,6 +162,6 @@ W.name = "Fake Cyborg Card" W.access = list(access_theatre) W.assignment = "Kill all humans! Beep. Boop." - W.registered = name + W.registered_name = name del(src) */ \ No newline at end of file diff --git a/code/modules/critters/critter_defenses.dm b/code/modules/critters/critter_defenses.dm index 6033748bb3..766a9d63b5 100644 --- a/code/modules/critters/critter_defenses.dm +++ b/code/modules/critters/critter_defenses.dm @@ -22,7 +22,12 @@ Contains the procs that control attacking critters if (user.a_intent == "hurt") TakeDamage(rand(1,2) * brutevuln) - if(istype(user, /mob/living/carbon/human)) + if(istajaran(user)) + for(var/mob/O in viewers(src, null)) + O.show_message("\red [user] has slashed at [src]!", 1) + playsound(src.loc, 'slice.ogg', 25, 1, -1) + + else if(istype(user, /mob/living/carbon/human)) for(var/mob/O in viewers(src, null)) O.show_message("\red [user] has punched [src]!", 1) playsound(src.loc, pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'), 100, 1) @@ -32,10 +37,7 @@ Contains the procs that control attacking critters O.show_message("\red [user] has slashed at [src]!", 1) playsound(src.loc, 'slice.ogg', 25, 1, -1) - else if(user.type == /mob/living/carbon/human/tajaran) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [user] has slashed at [src]!", 1) - playsound(src.loc, 'slice.ogg', 25, 1, -1) + else for(var/mob/O in viewers(src, null)) diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index acab259780..fc7e81cf2a 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -1,6 +1,6 @@ /mob/living/carbon/brain var - obj/item/device/mmi/container = null + obj/item/container = null timeofhostdeath = 0 New() @@ -31,9 +31,14 @@ return 1 return ..() - Login() - if(!container) - verbs += /mob/proc/ghost - Logout() - verbs -= /mob/proc/ghost \ No newline at end of file +/mob/living/carbon/brain/Login() + ..() + + if (!isturf(src.loc)) + src.client.eye = src.loc + src.client.perspective = EYE_PERSPECTIVE + if (!container || !istype(container, /obj/item/device/mmi)) + src.verbs += /mob/proc/ghost + + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index 24e868aaf7..021ef285d9 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -1,5 +1,5 @@ /mob/living/carbon/brain/death(gibbed) - if(!gibbed && container)//If not gibbed but in a container. + if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container. for(var/mob/O in viewers(container, null)) O.show_message(text("\red []'s MMI flatlines!", src), 1, "\red You hear something flatline.", 2) container.icon_state = "mmi_dead" diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index ac1fe5e727..ea528b7e03 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -40,6 +40,8 @@ clamp_values() + + proc clamp_values() @@ -318,4 +320,5 @@ if(bodytemperature > 409) for(var/datum/disease/D in viruses) D.cure() - return \ No newline at end of file + return + diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index ae306dc6ca..0650033917 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -1,3 +1,4 @@ /mob/living/carbon/brain/say(var/message) - if(!container) return //No container, can't speak, bucko./N + if(!(container && istype(container, /obj/item/device/mmi))) + return //No MMI, can't speak, bucko./N else ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index d61d24d29b..7dfe4cb590 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -193,7 +193,6 @@ var/status = "" var/brutedamage = org.brute_dam var/burndamage = org.burn_dam - if(halloss > 0) if(prob(30)) brutedamage += halloss @@ -215,6 +214,9 @@ status += "blistered" else if(burndamage > 0) status += "numb" + if(org.destroyed) + status = "MISSING!" + if(status == "") status = "OK" src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.getDisplayName(),status),1) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f6a9024996..4ac8972b60 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -70,11 +70,17 @@ /mob/living/carbon/human/New() + + ..() + + + var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src - if(!dna) dna = new /datum/dna(null) + if(!dna) + dna = new /datum/dna(null) new /datum/organ/external/chest(src) new /datum/organ/external/groin(src) @@ -123,19 +129,24 @@ gender = MALE g = "m" - spawn (1) - if(!stand_icon) - stand_icon = new /icon('human.dmi', "body_[g]_s") - if(!lying_icon) - lying_icon = new /icon('human.dmi', "body_[g]_l") + spawn(1) + stand_icon = new /icon('human.dmi', "body_[g]_s") + lying_icon = new /icon('human.dmi', "body_[g]_l") icon = stand_icon update_clothing() + src << "\blue Your icons have been generated!" + + spawn(10) // Failsafe for.. weirdness. + update_clothing() + update_body() + vessel = new/datum/reagents(600) vessel.my_atom = src vessel.add_reagent("blood",560) - spawn(1) fixblood() + spawn(1) + fixblood() ..() /*var/known_languages = list() @@ -267,6 +278,7 @@ var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80 if (hungry >= 70) tally += hungry/50 + for(var/organ in list("l_leg","l_foot","r_leg","r_foot")) var/datum/organ/external/o = organs["[organ]"] if(o.broken) @@ -1484,7 +1496,6 @@ del(face_standing) del(face_lying) return - if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now del(face_standing) del(face_lying) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 0340f2a925..0e4eef4282 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -119,35 +119,36 @@ if("lizard") attack_verb = "scratch" if("plant") - attack_verb = "slash" + attack_verb = "whip" else attack_verb = "punch" - if(M.type == /mob/living/carbon/human/tajaran) + if(istajaran(M)) attack_verb = "slash" var/damage = rand(0, 5) if(!damage) - if(M.mutantrace == "lizard") - playsound(loc, 'slashmiss.ogg', 25, 1, -1) - else if(M.type != /mob/living/carbon/human/tajaran) - playsound(loc, 'punchmiss.ogg', 25, 1, -1) - else if (M.type == /mob/living/carbon/human/tajaran) - playsound(loc, 'slashmiss.ogg', 25, 1, -1) + switch(attack_verb) + if(("slash") || ("scratch")) + playsound(loc, 'slashmiss.ogg', 25, 1, -1) + else + playsound(loc, 'punchmiss.ogg', 25, 1, -1) + visible_message("\red [M] has attempted to [attack_verb] [src]!") return 0 + + var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting)) var/armor_block = run_armor_check(affecting, "melee") if(M.mutations & HULK) damage += 5 - if(M.mutantrace == "lizard") - damage += 10 - playsound(loc, 'slice.ogg', 25, 1, -1) - else if(M.type != /mob/living/carbon/human/tajaran) - playsound(loc, "punch", 25, 1, -1) - else if (M.type == /mob/living/carbon/human/tajaran) - damage += 10 - playsound(loc, 'slice.ogg', 25, 1, -1) + + switch(attack_verb) + if(("slash") || ("scratch")) + damage += 10 + playsound(loc, 'slice.ogg', 25, 1, -1) + else + playsound(loc, "punch", 25, 1, -1) visible_message("\red [M] has [attack_verb]ed [src]!") @@ -157,11 +158,10 @@ apply_effect(2, WEAKEN, armor_block) UpdateDamageIcon() - if("disarm") M.attack_log += text("\[[time_stamp()]\] Disarmed [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] Has been disarmed by [M.name] ([M.ckey])") - + log_admin("ATTACK: [src] ([src.ckey]) disarmed [M] ([M.ckey]).") log_attack("[M.name] ([M.ckey]) disarmed [src.name] ([src.ckey])") @@ -212,4 +212,7 @@ playsound(loc, 'punchmiss.ogg', 25, 1, -1) visible_message("\red [M] attempted to disarm [src]!") update_clothing() + return + +/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4b96f26273..9ffbb5dc45 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -119,10 +119,9 @@ emp_act if(!I || !user) return 0 var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting)) + var/hit_area = affecting.display_name - - if((user != src) && check_shields(I.force, "the [I.name]")) return 0 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index b746b3e518..1d5156013d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1148,22 +1148,41 @@ if (mutantrace == "lizard" || mutantrace == "metroid") see_in_dark = 3 see_invisible = 1 + + else if (istajaran(src)) + see_in_dark = 8 + else if (druggy) // If drugged~ see_in_dark = 2 //see_invisible regulated by drugs themselves. else see_in_dark = 2 - var/seer = 0 - for(var/obj/effect/rune/R in world) - if(loc==R.loc && R.word1==wordsee && R.word2==wordhell && R.word3==wordjoin) - seer = 1 - if(!seer) - see_invisible = 0 - else if(istype(head, /obj/item/clothing/head/helmet/welding)) + var/seer = 0 + for(var/obj/effect/rune/R in world) + if(loc==R.loc && R.word1==wordsee && R.word2==wordhell && R.word3==wordjoin) + seer = 1 + if(!seer) + see_invisible = 0 + + + + + + + + else if(istype(head, /obj/item/clothing/head/helmet/welding)) // wat. This is never fucking called. if(!head:up && tinted_weldhelh) see_in_dark = 1 + + + + + + + + /* HUD shit goes here, as long as it doesn't modify src.sight flags */ // The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl if(istype(glasses, /obj/item/clothing/glasses/hud/health)) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index f77e48e980..b647811511 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,4 +1,7 @@ /mob/living/carbon/human/say(var/message) +/* if(src.mutantrace == "lizard") + if(copytext(message, 1, 2) != "*") + message = dd_replaceText(message, "s", stutter("ss"))*///Just here for reference. -- Erthilo if(src.mutantrace == "metroid" && prob(5)) if(copytext(message, 1, 2) != "*") if(copytext(message, 1, 2) == ";") diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 9dc5bf406c..a4bbfeb6b4 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -113,6 +113,7 @@ var/canmove = 1.0 var/eye_stat = null//Living, potentially Carbon var/lastpuke = 0 + var/unacidable = 0 var/name_archive //For admin things like possession diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index bf3df67ac3..b84e24a47f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -56,7 +56,7 @@ return 0 /proc/iscat(A) - if(istype(A, /mob/living/simple_animal/cat)) + if(istype(A, /mob/living/simple_animal/cat/)) return 1 return 0 @@ -115,12 +115,16 @@ proc/hasorgans(A) return 1 return 0 + + + /proc/hsl2rgb(h, s, l) return /proc/check_zone(zone) - if(!zone) return "chest" + if(!zone) + return "chest" switch(zone) if("eyes") zone = "head" diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm index 398cb8687a..bc0d6ac5c7 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -91,7 +91,8 @@ brute *= 0.66 //~2/3 damage for ROBOLIMBS burn *= 0.66 //~2/3 damage for ROBOLIMBS - if(owner && !robot) owner.pain(display_name, (brute+burn)*3, 1) + if(owner && !robot) + owner.pain(display_name, (brute+burn)*3, 1) if(sharp) var/nux = brute * rand(10,15) if(brute_dam >= max_damage) @@ -382,7 +383,7 @@ destspawn = 1 if(!robot) owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\ - "\red Your [display_name] goes flying off!",\ + "Your [display_name] goes flying off!",\ "You hear a terrible sound of ripping tendons and flesh.") else owner.visible_message("\red [owner.name]'s [display_name] explodes violently!",\ diff --git a/code/modules/mob/organ/organ_external.dm b/code/modules/mob/organ/organ_external.dm index 49e47ec16d..881e3623a6 100644 --- a/code/modules/mob/organ/organ_external.dm +++ b/code/modules/mob/organ/organ_external.dm @@ -84,6 +84,8 @@ min_broken_damage = 15 body_part = HAND_LEFT + + obj/item/weapon/organ icon = 'human.dmi' @@ -112,6 +114,12 @@ obj/item/weapon/organ/head var/mob/living/carbon/brain/brainmob var/brain_op_stage = 0 +obj/item/weapon/organ/head/New() + ..() + spawn(5) + if(brainmob && brainmob.client) + brainmob.client.screen.len = null //clear the hud + obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->head brainmob = new(src) brainmob.name = H.real_name @@ -119,6 +127,11 @@ obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H) brainmob.dna = H.dna if(H.mind) H.mind.transfer_to(brainmob) + brainmob.container = src + if (brainmob.client) + spawn(10) + if(brainmob.client) + verbs += /mob/proc/ghost obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/scalpel)) diff --git a/code/unused/computer2/med_rec.dm b/code/unused/computer2/med_rec.dm index c4a4e2245d..6d8e7e62e4 100644 --- a/code/unused/computer2/med_rec.dm +++ b/code/unused/computer2/med_rec.dm @@ -119,7 +119,7 @@ src.active1 = null src.active2 = null if (src.check_access(src.master.authid)) - src.authenticated = src.master.authid.registered + src.authenticated = src.master.authid.registered_name src.rank = src.master.authid.assignment src.screen = 1 if (src.authenticated) diff --git a/code/unused/gamemodes/ctf.dm b/code/unused/gamemodes/ctf.dm index 8a957b9a32..5a464c0ce2 100644 --- a/code/unused/gamemodes/ctf.dm +++ b/code/unused/gamemodes/ctf.dm @@ -58,7 +58,7 @@ W.name = "[M.real_name]'s ID card (Red Team)" W.access = access_red W.assignment = "Red Team" - W.registered = M.real_name + W.registered_name = M.real_name M.wear_id = W M.wear_id.layer = 20 if(R) @@ -98,7 +98,7 @@ W.name = "[M.real_name]'s ID card (Green Team)" W.access = access_green W.assignment = "Green Team" - W.registered = M.real_name + W.registered_name = M.real_name M.wear_id = W M.wear_id.layer = 20 if(G) diff --git a/code/unused/gamemodes/deathmatch.dm b/code/unused/gamemodes/deathmatch.dm index 662a96a58b..6e7736ac68 100644 --- a/code/unused/gamemodes/deathmatch.dm +++ b/code/unused/gamemodes/deathmatch.dm @@ -58,7 +58,7 @@ W.access = get_all_accesses() W.name = "[newname]'s ID card (Death Commando)" W.assignment = "Death Commando" - W.registered = newname + W.registered_name = newname M.equip_if_possible(W, M.slot_wear_id) ..() diff --git a/code/unused/pda2/pda2.dm b/code/unused/pda2/pda2.dm index f77136d1bf..29d3556292 100644 --- a/code/unused/pda2/pda2.dm +++ b/code/unused/pda2/pda2.dm @@ -159,8 +159,8 @@ src.cartridge = C src.updateSelfDialog() - else if (istype(C, /obj/item/weapon/card/id) && !src.owner && C:registered) - src.owner = C:registered + else if (istype(C, /obj/item/weapon/card/id) && !src.owner && C:registered_name) + src.owner = C:registered_name src.name = "PDA-[src.owner]" user << "\blue Card scanned." src.updateSelfDialog()