From de9accc64dd0a65473b4d85d1d81161fc9b5b1c0 Mon Sep 17 00:00:00 2001 From: DZD Date: Sun, 8 Feb 2015 19:42:01 -0500 Subject: [PATCH 01/37] TG Changeling Port This would've been multiple commits, but I kept forgetting to ACTUALLY commit things. Changes logged in the PR. --- code/_onclick/click.dm | 22 +- code/datums/mind.dm | 17 +- code/game/dna/dna2.dm | 7 +- code/game/gamemodes/changeling/changeling.dm | 135 ++- .../gamemodes/changeling/changeling_power.dm | 79 ++ .../gamemodes/changeling/changeling_powers.dm | 944 ------------------ .../gamemodes/changeling/evolution_menu.dm | 404 ++++++++ .../gamemodes/changeling/modularchangling.dm | 506 ---------- .../gamemodes/changeling/powers/absorb.dm | 107 ++ .../changeling/powers/augmented_eyesight.dm | 24 + .../changeling/powers/digitalcamo.dm | 17 + .../changeling/powers/epinephrine.dm | 27 + .../gamemodes/changeling/powers/fakedeath.dm | 36 + .../gamemodes/changeling/powers/fleshmend.dm | 25 + .../gamemodes/changeling/powers/glands.dm | 13 + .../gamemodes/changeling/powers/hivemind.dm | 92 ++ .../gamemodes/changeling/powers/humanform.dm | 74 ++ .../gamemodes/changeling/powers/lesserform.dm | 67 ++ .../changeling/powers/mimic_voice.dm | 28 + .../gamemodes/changeling/powers/mutations.dm | 339 +++++++ .../gamemodes/changeling/powers/panacea.dm | 25 + .../gamemodes/changeling/powers/revive.dm | 73 ++ .../gamemodes/changeling/powers/shriek.dm | 46 + .../gamemodes/changeling/powers/spiders.dm | 16 + .../changeling/powers/strained_muscles.dm | 51 + .../gamemodes/changeling/powers/tiny_prick.dm | 186 ++++ .../gamemodes/changeling/powers/transform.dm | 37 + code/modules/mob/mob.dm | 8 + icons/mob/head.dmi | Bin 165382 -> 166602 bytes icons/mob/in-hand/changeling.dmi | Bin 0 -> 1302 bytes icons/mob/suit.dmi | Bin 297729 -> 302146 bytes icons/obj/weapons.dmi | Bin 38814 -> 41359 bytes paradise.dme | 23 +- 33 files changed, 1928 insertions(+), 1500 deletions(-) create mode 100644 code/game/gamemodes/changeling/changeling_power.dm delete mode 100644 code/game/gamemodes/changeling/changeling_powers.dm create mode 100644 code/game/gamemodes/changeling/evolution_menu.dm delete mode 100644 code/game/gamemodes/changeling/modularchangling.dm create mode 100644 code/game/gamemodes/changeling/powers/absorb.dm create mode 100644 code/game/gamemodes/changeling/powers/augmented_eyesight.dm create mode 100644 code/game/gamemodes/changeling/powers/digitalcamo.dm create mode 100644 code/game/gamemodes/changeling/powers/epinephrine.dm create mode 100644 code/game/gamemodes/changeling/powers/fakedeath.dm create mode 100644 code/game/gamemodes/changeling/powers/fleshmend.dm create mode 100644 code/game/gamemodes/changeling/powers/glands.dm create mode 100644 code/game/gamemodes/changeling/powers/hivemind.dm create mode 100644 code/game/gamemodes/changeling/powers/humanform.dm create mode 100644 code/game/gamemodes/changeling/powers/lesserform.dm create mode 100644 code/game/gamemodes/changeling/powers/mimic_voice.dm create mode 100644 code/game/gamemodes/changeling/powers/mutations.dm create mode 100644 code/game/gamemodes/changeling/powers/panacea.dm create mode 100644 code/game/gamemodes/changeling/powers/revive.dm create mode 100644 code/game/gamemodes/changeling/powers/shriek.dm create mode 100644 code/game/gamemodes/changeling/powers/spiders.dm create mode 100644 code/game/gamemodes/changeling/powers/strained_muscles.dm create mode 100644 code/game/gamemodes/changeling/powers/tiny_prick.dm create mode 100644 code/game/gamemodes/changeling/powers/transform.dm create mode 100644 icons/mob/in-hand/changeling.dmi diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index bb288fc7d48..6db47b0c09f 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -209,6 +209,13 @@ A.point() return +/mob/living/carbon/MiddleClickOn(var/atom/A) + if(!src.stat && src.mind && src.mind.changeling && src.mind.changeling.chosen_sting && (istype(A, /mob/living/carbon)) && (A != src)) + next_click = world.time + 5 + mind.changeling.chosen_sting.try_to_sting(src, A) + else + A.point() + // In case of use break glass /* /atom/proc/MiddleClick(var/mob/M as mob) @@ -251,6 +258,13 @@ A.AltClick(src) return +/mob/living/carbon/AltClickOn(var/atom/A) + if(!src.stat && src.mind && src.mind.changeling && src.mind.changeling.chosen_sting && (istype(A, /mob/living/carbon)) && (A != src)) + next_click = world.time + 5 + mind.changeling.chosen_sting.try_to_sting(src, A) + else + ..() + /atom/proc/AltClick(var/mob/user) var/turf/T = get_turf(src) if(T && user.TurfAdjacent(T)) @@ -273,16 +287,16 @@ return /atom/proc/CtrlShiftClick(var/mob/user) - return + return /mob/proc/AltShiftClickOn(var/atom/A) A.AltShiftClick(src) return /atom/proc/AltShiftClick(var/mob/user) - return - - + return + + /* Misc helpers diff --git a/code/datums/mind.dm b/code/datums/mind.dm index d03909fefbe..3ab2bdb0ca8 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -70,11 +70,6 @@ datum/mind if(!istype(new_character)) world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn" if(current) //remove ourself from our old body's mind variable - if(changeling) - current.remove_changeling_powers() - current.verbs -= /datum/changeling/proc/EvolutionMenu - if(vampire) - current.remove_vampire_powers() current.mind = null if(new_character.mind) //remove any mind currently in our new body's mind variable @@ -85,10 +80,6 @@ datum/mind current = new_character //link ourself to our new body new_character.mind = src //and link our new body to ourself - if(changeling) - new_character.make_changeling() - if(vampire) - new_character.make_vampire() if(active) new_character.key = key //now transfer the key to link the client to our new body @@ -475,7 +466,7 @@ datum/mind if(!def_value)//If it's a custom objective, it will be an empty string. def_value = "custom" - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "destroy", "maroon", "custom") + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "harm", "speciesist", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "destroy", "maroon", "identity theft", "custom") if (!new_obj_type) return var/datum/objective/new_objective = null @@ -588,6 +579,11 @@ datum/mind new_objective.owner = src new_objective.target_amount = target_number + if("identity theft") + new_objective = new /datum/objective/escape/escape_with_identity + new_objective.owner = src + new_objective.find_target() + if ("custom") var/expl = copytext(sanitize(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null),1,MAX_MESSAGE_LEN) if (!expl) return @@ -843,7 +839,6 @@ datum/mind ticker.mode.changelings -= src special_role = null current.remove_changeling_powers() - current.verbs -= /datum/changeling/proc/EvolutionMenu if(changeling) del(changeling) current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" log_admin("[key_name_admin(usr)] has de-changeling'ed [current].") diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index d4b1a0d44a6..e028702a44e 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -163,7 +163,7 @@ var/global/list/bad_blocks[0] // Set a DNA UI block's raw value. /datum/dna/proc/SetUIValue(var/block,var/value,var/defer=0) if (block<=0) return - ASSERT(value>=0) + ASSERT(value>0) ASSERT(value<=4095) UI[block]=value dirtyUI=1 @@ -178,7 +178,10 @@ var/global/list/bad_blocks[0] // Set a DNA UI block's value, given a value and a max possible value. // Used in hair and facial styles (value being the index and maxvalue being the len of the hairstyle list) /datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue,var/defer=0) - if (block<=0) return + if (block<=0) + return + if(value == 0) + value = 1 ASSERT(maxvalue<=4095) var/range = (4095 / maxvalue) if(value) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 27bae141374..971fb7f5706 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -90,31 +90,53 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" var/datum/objective/absorb/absorb_objective = new absorb_objective.owner = changeling - absorb_objective.gen_amount_goal(2, 3) + absorb_objective.gen_amount_goal(6, 8) changeling.objectives += absorb_objective - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = changeling - kill_objective.find_target() - changeling.objectives += kill_objective + if(prob(60)) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = changeling + steal_objective.find_target() + changeling.objectives += steal_objective + else + var/datum/objective/debrain/debrain_objective = new + debrain_objective.owner = changeling + debrain_objective.find_target() + changeling.objectives += debrain_objective - var/datum/objective/steal/steal_objective = new - steal_objective.owner = changeling - steal_objective.find_target() - changeling.objectives += steal_objective + var/list/active_ais = active_ais() + if(active_ais.len && prob(100/num_players())) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = changeling + destroy_objective.find_target() + changeling.objectives += destroy_objective + else + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = changeling + kill_objective.find_target() + changeling.objectives += kill_objective + if (!(locate(/datum/objective/escape) in changeling.objectives)) + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = changeling + identity_theft.target = kill_objective.target + if(identity_theft.target && identity_theft.target.current) + var/target_real_name = identity_theft.target.current.real_name + identity_theft.explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [identity_theft.target.assigned_role] while wearing their identification card." + else + identity_theft.explanation_text = "Free objective" + changeling.objectives += identity_theft - switch(rand(1,100)) - if(1 to 80) - if (!(locate(/datum/objective/escape) in changeling.objectives)) - var/datum/objective/escape/escape_objective = new - escape_objective.owner = changeling - changeling.objectives += escape_objective + if (!(locate(/datum/objective/escape) in changeling.objectives)) + if(prob(70)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = changeling + changeling.objectives += escape_objective else - if (!(locate(/datum/objective/survive) in changeling.objectives)) - var/datum/objective/survive/survive_objective = new - survive_objective.owner = changeling - changeling.objectives += survive_objective + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = changeling + identity_theft.find_target() + changeling.objectives += identity_theft return /datum/game_mode/proc/greet_changeling(var/datum/mind/changeling, var/you_are=1) @@ -162,7 +184,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" /datum/game_mode/proc/auto_declare_completion_changeling() if(changelings.len) - var/text = "The changelings were:" + var/text = "The changelings were:" for(var/datum/mind/changeling in changelings) var/changelingwin = 1 @@ -181,7 +203,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" //Removed sanity if(changeling) because we -want- a runtime to inform us that the changelings list is incorrect and needs to be fixed. text += "
Changeling ID: [changeling.changeling.changelingID]." - text += "
Genomes Absorbed: [changeling.changeling.absorbedcount]" + text += "
Genomes Extracted: [changeling.changeling.absorbedcount]" if(changeling.objectives.len) var/count = 1 @@ -209,19 +231,25 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" /datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) var/list/absorbed_dna = list() - var/list/absorbed_species = list() var/list/absorbed_languages = list() - var/absorbedcount = 0 + var/list/protected_dna = list() //DNA that is not lost when capacity is otherwise full. + var/dna_max = 4 //How many extra DNA strands the changeling can store for transformation. + var/absorbedcount = 1 //Would require at least 1 sample to take on the form of a human var/chem_charges = 20 var/chem_recharge_rate = 0.5 + var/chem_recharge_slowdown = 0 var/chem_storage = 50 - var/sting_range = 1 + var/sting_range = 2 var/changelingID = "Changeling" var/geneticdamage = 0 var/isabsorbing = 0 - var/geneticpoints = 5 + var/geneticpoints = 10 var/purchasedpowers = list() var/mimicing = "" + var/canrespec = 0 + var/changeling_speak = 0 + var/datum/dna/chosen_dna + var/obj/effect/proc_holder/changeling/sting/chosen_sting /datum/changeling/New(var/gender=FEMALE) ..() @@ -234,16 +262,61 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changelingID = "[honorific] [changelingID]" else changelingID = "[honorific] [rand(1,999)]" + absorbed_dna.len = dna_max /datum/changeling/proc/regenerate() - chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage) + chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) geneticdamage = max(0, geneticdamage-1) /datum/changeling/proc/GetDNA(var/dna_owner) - var/datum/dna/chosen_dna - for(var/datum/dna/DNA in absorbed_dna) + for(var/datum/dna/DNA in (absorbed_dna + protected_dna)) if(dna_owner == DNA.real_name) - chosen_dna = DNA - break - return chosen_dna + return DNA + +/datum/changeling/proc/has_dna(var/datum/dna/tDNA) + for(var/datum/dna/D in (absorbed_dna + protected_dna)) + if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species == D.species) + return 1 + return 0 + +/datum/changeling/proc/can_absorb_dna(var/mob/living/carbon/user, var/mob/living/carbon/target) + if(absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it. + user << "We have reached our capacity to store genetic information! We must transform before absorbing more." + return + + if(!target || !target.dna) + user << "This creature does not have any DNA." + return + + var/mob/living/carbon/human/T = target + if(!istype(T)) + user << "[T] is not compatible with our biology." + return + + if((M_NOCLONE || SKELETON || M_HUSK) in T.mutations) + user << "DNA of [target] is ruined beyond usability!" + return + + if(T.species.flags & IS_SYNTHETIC) + user << "This creature does not have DNA!" + return + + if(T.species.flags & NO_SCAN) + user << "We do not know how to parse this creature's DNA!" + return + + if(has_dna(target.dna)) + user << "We already have this DNA in storage!" + + return 1 + +//More snowflake stuff, but for languages. +/datum/changeling/proc/changeling_update_languages(var/updated_languages, var/mob/living/carbon/user) + if(!istype(user) || !user) + return + user.languages = list() + for(var/language in updated_languages) + user.languages += language + + return \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm new file mode 100644 index 00000000000..36df179ae32 --- /dev/null +++ b/code/game/gamemodes/changeling/changeling_power.dm @@ -0,0 +1,79 @@ +/* + * Don't use the apostrophe in name or desc. Causes script errors. + * TODO: combine atleast some of the functionality with /proc_holder/spell + */ + +/obj/effect/proc_holder/changeling + panel = "Changeling" + name = "Prototype Sting" + desc = "" // Fluff + var/helptext = "" // Details + var/chemical_cost = 0 // negative chemical cost is for passive abilities (chemical glands) + var/dna_cost = -1 //cost of the sting in dna points. 0 = auto-purchase, -1 = cannot be purchased + var/req_dna = 0 //amount of dna needed to use this ability. Changelings always have atleast 1 + var/req_human = 0 //if you need to be human to use this ability + var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD + var/genetic_damage = 0 // genetic damage caused by using the sting. Nothing to do with cloneloss. + var/max_genetic_damage = 100 // hard counter for spamming abilities. Not used/balanced much yet. + +/obj/effect/proc_holder/changeling/proc/on_purchase(var/mob/user) + return + +/obj/effect/proc_holder/changeling/Click() + var/mob/user = usr + if(!user || !user.mind || !user.mind.changeling) + return + try_to_sting(user) + +/obj/effect/proc_holder/changeling/proc/try_to_sting(var/mob/user, var/mob/target) + if(!user.mind || !user.mind.changeling) + return + if(!can_sting(user, target)) + return + var/datum/changeling/c = user.mind.changeling + if(sting_action(user, target)) + sting_feedback(user, target) + take_chemical_cost(c) + +/obj/effect/proc_holder/changeling/proc/sting_action(var/mob/user, var/mob/target) + return 0 + +/obj/effect/proc_holder/changeling/proc/sting_feedback(var/mob/user, var/mob/target) + return 0 + +/obj/effect/proc_holder/changeling/proc/take_chemical_cost(var/datum/changeling/changeling) + changeling.chem_charges -= chemical_cost + changeling.geneticdamage += genetic_damage + +//Fairly important to remember to return 1 on success >.< +/obj/effect/proc_holder/changeling/proc/can_sting(var/mob/user, var/mob/target) + if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards + return 0 + if(req_human && !ishuman(user)) + user << "We cannot do that in this form!" + return 0 + var/datum/changeling/c = user.mind.changeling + if(c.chem_chargesWe require at least [chemical_cost] unit\s of chemicals to do that!" + return 0 + if(c.absorbedcountWe require at least [req_dna] sample\s of compatible DNA." + return 0 + if(req_stat < user.stat) + user << "We are incapacitated." + return 0 + if((user.status_flags & FAKEDEATH) && name!="Regenerate") + user << "We are incapacitated." + return 0 + if(c.geneticdamage > max_genetic_damage) + user << "Our genomes are still reassembling. We need time to recover first." + return 0 + return 1 + +//used in /mob/Stat() +/obj/effect/proc_holder/changeling/proc/can_be_used_by(var/mob/user) + if(!ishuman(user) && !ismonkey(user)) + return 0 + if(req_human && !ishuman(user)) + return 0 + return 1 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm deleted file mode 100644 index c6df778144d..00000000000 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ /dev/null @@ -1,944 +0,0 @@ -//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human -/mob/proc/make_changeling() - - if(!mind) return - if(!mind.changeling) mind.changeling = new /datum/changeling(gender) - if(!ishuman(src) && !ismonkey(src)) return - verbs += /datum/changeling/proc/EvolutionMenu - - var/lesser_form = !ishuman(src) - - if(!powerinstances.len) - for(var/P in powers) - powerinstances += new P() - - // Code to auto-purchase free powers. - for(var/datum/power/changeling/P in powerinstances) - if(!P.genomecost) // Is it free? - if(!(P in mind.changeling.purchasedpowers)) // Do we not have it already? - mind.changeling.purchasePower(mind, P.name, 0)// Purchase it. Don't remake our verbs, we're doing it after this. - - for(var/datum/power/changeling/P in mind.changeling.purchasedpowers) - if(P.isVerb) - if(lesser_form && !P.allowduringlesserform) continue - if(!(P in src.verbs)) - src.verbs += P.verbpath - - mind.changeling.absorbed_dna |= dna - - var/mob/living/carbon/human/H = src - if(istype(H)) - mind.changeling.absorbed_species += H.species.name - - for(var/language in languages) - if(!(language in mind.changeling.absorbed_languages)) - mind.changeling.absorbed_languages += language - - return 1 - -//removes our changeling verbs -/mob/proc/remove_changeling_powers() - if(!mind || !mind.changeling) return - for(var/datum/power/changeling/P in mind.changeling.purchasedpowers) - if(P.isVerb) - verbs -= P.verbpath - - -//Helper proc. Does all the checks and stuff for us to avoid copypasta -/mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0) - - if(!src.mind) return - if(!iscarbon(src)) return - - var/datum/changeling/changeling = src.mind.changeling - if(!changeling) - world.log << "[src] has the changeling_transform() verb but is not a changeling." - return - - if(src.stat > max_stat) - src << "We are incapacitated." - return - - if(changeling.absorbed_dna.len < required_dna) - src << "We require at least [required_dna] samples of compatible DNA." - return - - if(changeling.chem_charges < required_chems) - src << "We require at least [required_chems] units of chemicals to do that!" - return - - if(changeling.geneticdamage > max_genetic_damage) - src << "Our geneomes are still reassembling. We need time to recover first." - return - - return changeling - - -//Used to dump the languages from the changeling datum into the actual mob. -/mob/proc/changeling_update_languages(var/updated_languages) - - languages = list() - for(var/language in updated_languages) - languages += language - - return - -//Used to switch species based on the changeling datum. -/mob/proc/changeling_change_species() - - set category = "Changeling" - set name = "Change Species (5)" - - var/mob/living/carbon/human/H = src - if(!istype(H)) - src << "We may only use this power while in humanoid form." - return - - var/datum/changeling/changeling = changeling_power(5,1,0) - if(!changeling) return - - if(changeling.absorbed_species.len < 2) - src << "We do not know of any other species genomes to use." - return - - var/S = input("Select the target species: ", "Target Species", null) as null|anything in changeling.absorbed_species - if(!S) return - - domutcheck(src, null) - - changeling.chem_charges -= 5 - changeling.geneticdamage = 30 - - src.visible_message("[src] transforms!") - - src.verbs -= /mob/proc/changeling_change_species - H.set_species(S,null,1) //Until someone moves body colour into DNA, they're going to have to use the default. - - spawn(10) - src.verbs += /mob/proc/changeling_change_species - src.regenerate_icons() - - changeling_update_languages(changeling.absorbed_languages) - feedback_add_details("changeling_powers","TR") - - return 1 - -//Absorbs the victim's DNA making them uncloneable. Requires a strong grip on the victim. -//Doesn't cost anything as it's the most basic ability. -/mob/proc/changeling_absorb_dna() - set category = "Changeling" - set name = "Absorb DNA" - - var/datum/changeling/changeling = changeling_power(0,0,100) - if(!changeling) return - - var/obj/item/weapon/grab/G = src.get_active_hand() - if(!istype(G)) - src << "We must be grabbing a creature in our active hand to absorb them." - return - - var/mob/living/carbon/human/T = G.affecting - if(!istype(T)) - src << "[T] is not compatible with our biology." - return - - if(T.species.flags & NO_SCAN) - src << "We do not know how to parse this creature's DNA!" - return - - if((M_NOCLONE || SKELETON) in T.mutations) - src << "This creature's DNA is ruined beyond useability!" - return - - if(!G.state == GRAB_KILL) - src << "We must have a tighter grip to absorb this creature." - return - - if(changeling.isabsorbing) - src << "We are already absorbing!" - return - - changeling.isabsorbing = 1 - for(var/stage = 1, stage<=3, stage++) - switch(stage) - if(1) - src << "This creature is compatible. We must hold still..." - if(2) - src << "We extend a proboscis." - src.visible_message("[src] extends a proboscis!") - if(3) - src << "We stab [T] with the proboscis." - src.visible_message("[src] stabs [T] with the proboscis!") - T << "You feel a sharp stabbing pain!" - var/datum/organ/external/affecting = T.get_organ(src.zone_sel.selecting) - if(affecting.take_damage(39,0,1,0,"large organic needle")) - T:UpdateDamageIcon() - continue - - feedback_add_details("changeling_powers","A[stage]") - if(!do_mob(src, T, 150)) - src << "Our absorption of [T] has been interrupted!" - changeling.isabsorbing = 0 - return - - src << "We have absorbed [T]!" - src.visible_message("[src] sucks the fluids from [T]!") - T << "You have been absorbed by the changeling!" - - T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. - changeling.absorbed_dna |= T.dna - if(src.nutrition < 400) src.nutrition = min((src.nutrition + T.nutrition), 400) - - changeling.chem_charges += 10 - changeling.geneticpoints += 2 - - //Steal all of their languages! - for(var/language in T.languages) - if(!(language in changeling.absorbed_languages)) - changeling.absorbed_languages += language - - changeling_update_languages(changeling.absorbed_languages) - - //Steal their species! - if(T.species && !(T.species.name in changeling.absorbed_species)) - changeling.absorbed_species += T.species.name - - if(T.mind && T.mind.changeling) - if(T.mind.changeling.absorbed_dna) - for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot - if(dna_data in changeling.absorbed_dna) - continue - changeling.absorbed_dna += dna_data - changeling.absorbedcount++ - T.mind.changeling.absorbed_dna.len = 1 - - if(T.mind.changeling.purchasedpowers) - for(var/datum/power/changeling/Tp in T.mind.changeling.purchasedpowers) - if(Tp in changeling.purchasedpowers) - continue - else - changeling.purchasedpowers += Tp - - if(!Tp.isVerb) - call(Tp.verbpath)() - else - changeling.purchasedpowers += Tp - - if(!Tp.isVerb) - call(Tp.verbpath)() - else - src.make_changeling() - - changeling.chem_charges += T.mind.changeling.chem_charges - changeling.geneticpoints += T.mind.changeling.geneticpoints - T.mind.changeling.chem_charges = 0 - T.mind.changeling.geneticpoints = 0 - T.mind.changeling.absorbedcount = 0 - - changeling.absorbedcount++ - changeling.isabsorbing = 0 - - T.death(0) - T.Drain() - return 1 - - -//Change our DNA to that of somebody we've absorbed. -/mob/proc/changeling_transform() - set category = "Changeling" - set name = "Transform (5)" - - var/datum/changeling/changeling = changeling_power(5,1,0) - if(!changeling) return - - var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - names += "[DNA.real_name]" - - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!S) return - - var/datum/dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - changeling.chem_charges -= 5 - src.visible_message("[src] transforms!") - changeling.geneticdamage = 30 - src.dna = chosen_dna.Clone() - src.real_name = chosen_dna.real_name - src.flavor_text = "" - if(ishuman(src)) - var/mob/living/carbon/human/H = src - H.set_species() - src.UpdateAppearance() - domutcheck(src, null) - - src.verbs -= /mob/proc/changeling_transform - spawn(10) src.verbs += /mob/proc/changeling_transform - - feedback_add_details("changeling_powers","TR") - return 1 - - -//Transform into a monkey. -/mob/proc/changeling_lesser_form() - set category = "Changeling" - set name = "Lesser Form (1)" - - var/datum/changeling/changeling = changeling_power(1,0,0) - if(!changeling) return - - if(src.has_brain_worms()) - src << "We cannot perform this ability at the present time!" - return - - var/mob/living/carbon/C = src - changeling.chem_charges-- - C.remove_changeling_powers() - C.visible_message("[C] transforms!") - changeling.geneticdamage = 30 - C << "Our genes cry out!" - - //TODO replace with monkeyize proc - var/list/implants = list() //Try to preserve implants. - for(var/obj/item/weapon/implant/W in C) - implants += W - - C.monkeyizing = 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(48) - 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.drop_from_inventory(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.make_changeling(1) - O.verbs += /mob/proc/changeling_lesser_transform - O.changeling_update_languages(changeling.absorbed_languages) - - feedback_add_details("changeling_powers","LF") - del(C) - return 1 - - -//Transform into a human -/mob/proc/changeling_lesser_transform() - set category = "Changeling" - set name = "Transform (1)" - - var/datum/changeling/changeling = changeling_power(1,1,0) - if(!changeling) return - - var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - names += "[DNA.real_name]" - - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!S) return - - var/datum/dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - var/mob/living/carbon/C = src - - changeling.chem_charges-- - C.remove_changeling_powers() - C.visible_message("[C] transforms!") - C.dna = chosen_dna.Clone() - - var/list/implants = list() - for (var/obj/item/weapon/implant/I in C) //Still preserving implants - implants += I - - C.monkeyizing = 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("monkey2h", animation) - sleep(48) - del(animation) - - for(var/obj/item/W in src) - C.u_equip(W) - if (C.client) - C.client.screen -= W - if (W) - W.loc = C.loc - W.dropped(C) - W.layer = initial(W.layer) - - var/mob/living/carbon/human/O = new /mob/living/carbon/human( src, delay_ready_dna=1 ) - if (C.dna.GetUIState(DNA_UI_GENDER)) - O.gender = FEMALE - else - O.gender = MALE - O.dna = C.dna.Clone() - C.dna = null - O.real_name = chosen_dna.real_name - O.set_species() - for(var/obj/T in C) - del(T) - - O.loc = C.loc - - O.UpdateAppearance() - domutcheck(O, null) - O.setToxLoss(C.getToxLoss()) - O.adjustBruteLoss(C.getBruteLoss()) - O.setOxyLoss(C.getOxyLoss()) - O.adjustFireLoss(C.getFireLoss()) - O.stat = C.stat - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O - - C.mind.transfer_to(O) - O.make_changeling() - O.changeling_update_languages(changeling.absorbed_languages) - - feedback_add_details("changeling_powers","LFT") - del(C) - return 1 - - -//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. -/* -/mob/verb/honk() - set name = "OH HOLY FUCK" - set category = "Debug" - var/yes = 0 - if(src in mob_list) - yes = 1 - else - var/mob/M = locate(src) in mob_list - if(M == src) - yes = 1 - usr << "[yes ? "\blue" : "\red"] You are [yes ? "" : "not "]in the mob list" -*/ -/mob/proc/changeling_returntolife() - set category = "Changeling" - set name = "Return To Life (20)" - var/datum/changeling/changeling = changeling_power(20,1,100,DEAD) - if(!changeling) return - - var/mob/living/carbon/C = src - if(changeling_power(20,1,100,DEAD)) - changeling.chem_charges -= 20 - dead_mob_list -= C - living_mob_list |= C - C.stat = CONSCIOUS - C.tod = null - C.setToxLoss(0) - C.setOxyLoss(0) - C.setCloneLoss(0) - C.setBrainLoss(0) - C.SetParalysis(0) - C.SetStunned(0) - C.SetWeakened(0) - C.radiation = 0 - C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss()) - C.reagents.clear_reagents() - C.germ_level = 0 - C.next_pain_time = 0 - C.traumatic_shock = 0 - if(ishuman(C)) - var/mob/living/carbon/human/H = C - H.vessel.reagent_list = list() - H.vessel.add_reagent("blood",560) - H.shock_stage = 0 - spawn(1) - H.fixblood() - for(var/organ_name in H.organs_by_name) - var/datum/organ/external/O = H.organs_by_name[organ_name] - for(var/obj/item/weapon/shard/shrapnel/s in O.implants) - if(istype(s)) - O.implants -= s - H.contents -= s - del(s) - O.amputated = 0 - O.brute_dam = 0 - O.burn_dam = 0 - O.damage_state = "00" - O.germ_level = 0 - O.hidden = null - O.number_wounds = 0 - O.open = 0 - O.perma_injury = 0 - O.stage = 0 - O.status = 0 - O.trace_chemicals = list() - O.wounds = list() - O.wound_update_accuracy = 1 - for(var/n in H.internal_organs_by_name) - var/datum/organ/internal/IO = H.internal_organs_by_name[n] - IO.damage = 0 - IO.trace_chemicals = list() - H.updatehealth() - C << "We have regenerated." - C.visible_message("[src] appears to wake from the dead, having healed all wounds.") - C.status_flags &= ~(FAKEDEATH) - C.update_canmove() - C.make_changeling() - src.verbs -= /mob/proc/changeling_returntolife - feedback_add_details("changeling_powers","RJ") - -/mob/proc/changeling_fakedeath() - set category = "Changeling" - set name = "Regenerative Stasis (20)" - - var/datum/changeling/changeling = changeling_power(20,1,100,DEAD) - if(!changeling) return - - var/mob/living/carbon/C = src - if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death - return - C << "We will attempt to regenerate our form." - - C.status_flags |= FAKEDEATH //play dead - C.update_canmove() - C.remove_changeling_powers() - - C.emote("deathgasp") - C.tod = worldtime2text() - - spawn(rand(800,1200)) - src << "We are now ready to regenerate." - src.verbs += /mob/proc/changeling_returntolife - feedback_add_details("changeling_powers","FD") - return 1 - - -//Boosts the range of your next sting attack by 1 -/mob/proc/changeling_boost_range() - set category = "Changeling" - set name = "Ranged Sting (10)" - set desc="Your next sting ability can be used against targets 2 squares away." - - var/datum/changeling/changeling = changeling_power(10,0,100) - if(!changeling) return 0 - changeling.chem_charges -= 10 - src << "Your throat adjusts to launch the sting." - changeling.sting_range = 2 - src.verbs -= /mob/proc/changeling_boost_range - spawn(5) src.verbs += /mob/proc/changeling_boost_range - feedback_add_details("changeling_powers","RS") - return 1 - - -//Recover from stuns. -/mob/proc/changeling_unstun() - set category = "Changeling" - set name = "Epinephrine Sacs (45)" - set desc = "Removes all stuns" - - var/datum/changeling/changeling = changeling_power(45,0,100,UNCONSCIOUS) - if(!changeling) return 0 - changeling.chem_charges -= 45 - - var/mob/living/carbon/human/C = src - C.stat = 0 - C.SetParalysis(0) - C.SetStunned(0) - C.SetWeakened(0) - C.adjustStaminaLoss(-75) - C.reagents.add_reagent("synaptizine", 20) - C.lying = 0 - C.update_canmove() - - src.verbs -= /mob/proc/changeling_unstun - spawn(5) src.verbs += /mob/proc/changeling_unstun - feedback_add_details("changeling_powers","UNS") - return 1 - - -//Speeds up chemical regeneration -/mob/proc/changeling_fastchemical() - src.mind.changeling.chem_recharge_rate *= 2 - return 1 - -//Increases macimum chemical storage -/mob/proc/changeling_engorgedglands() - src.mind.changeling.chem_storage += 25 - return 1 - - -//Prevents AIs tracking you but makes you easily detectable to the human-eye. -/mob/proc/changeling_digitalcamo() - set category = "Changeling" - set name = "Toggle Digital Camoflague" - set desc = "The AI can no longer track us, but we will look different if examined. Has a constant cost while active." - - var/datum/changeling/changeling = changeling_power() - if(!changeling) return 0 - - var/mob/living/carbon/human/C = src - if(C.digitalcamo) C << "We return to normal." - else C << "We distort our form to prevent AI-tracking." - C.digitalcamo = !C.digitalcamo - - spawn(0) - while(C && C.digitalcamo && C.mind && C.mind.changeling) - C.mind.changeling.chem_charges = max(C.mind.changeling.chem_charges - 1, 0) - sleep(40) - - src.verbs -= /mob/proc/changeling_digitalcamo - spawn(5) src.verbs += /mob/proc/changeling_digitalcamo - feedback_add_details("changeling_powers","CAM") - return 1 - - -//Starts healing you every second for 10 seconds. Can be used whilst unconscious. -/mob/proc/changeling_rapidregen() - set category = "Changeling" - set name = "Rapid Regeneration (30)" - set desc = "Begins rapidly regenerating. Does not effect stuns or chemicals." - - var/datum/changeling/changeling = changeling_power(30,0,100,UNCONSCIOUS) - if(!changeling) return 0 - src.mind.changeling.chem_charges -= 30 - - var/mob/living/carbon/human/C = src - if(ishuman(src)) - var/mob/living/carbon/human/H=src - if(H.said_last_words) - H.said_last_words=0 - - spawn(0) - for(var/i = 0, i<10,i++) - if(C) - C.adjustBruteLoss(-10) - C.adjustToxLoss(-10) - C.adjustOxyLoss(-10) - C.adjustFireLoss(-10) - sleep(10) - - src.verbs -= /mob/proc/changeling_rapidregen - spawn(5) src.verbs += /mob/proc/changeling_rapidregen - feedback_add_details("changeling_powers","RR") - return 1 - -// HIVE MIND UPLOAD/DOWNLOAD DNA - -var/list/datum/dna/hivemind_bank = list() - -/mob/proc/changeling_hiveupload() - set category = "Changeling" - set name = "Hive Channel (10)" - set desc = "Allows you to channel DNA in the airwaves to allow other changelings to absorb it." - - var/datum/changeling/changeling = changeling_power(10,1) - if(!changeling) return - - var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - if(!(DNA in hivemind_bank)) - names += DNA.real_name - - if(names.len <= 0) - src << "The airwaves already have all of our DNA." - return - - var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names - if(!S) return - - var/datum/dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - changeling.chem_charges -= 10 - hivemind_bank += chosen_dna - src << "We channel the DNA of [S] to the air." - feedback_add_details("changeling_powers","HU") - return 1 - -/mob/proc/changeling_hivedownload() - set category = "Changeling" - set name = "Hive Absorb (20)" - set desc = "Allows you to absorb DNA that is being channelled in the airwaves." - - var/datum/changeling/changeling = changeling_power(20,1) - if(!changeling) return - - var/list/names = list() - for(var/datum/dna/DNA in hivemind_bank) - if(!(DNA in changeling.absorbed_dna)) - names[DNA.real_name] = DNA - - if(names.len <= 0) - src << "There's no new DNA to absorb from the air." - return - - var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names - if(!S) return - var/datum/dna/chosen_dna = names[S] - if(!chosen_dna) - return - - changeling.chem_charges -= 20 - changeling.absorbed_dna += chosen_dna - src << "We absorb the DNA of [S] from the air." - feedback_add_details("changeling_powers","HD") - return 1 - -// Fake Voice - -/mob/proc/changeling_mimicvoice() - set category = "Changeling" - set name = "Mimic Voice" - set desc = "Shape our vocal glands to form a voice of someone we choose. We cannot regenerate chemicals when mimicing." - - - var/datum/changeling/changeling = changeling_power() - if(!changeling) return - - if(changeling.mimicing) - changeling.mimicing = "" - src << "We return our vocal glands to their original location." - return - - var/mimic_voice = stripped_input(usr, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN) - if(!mimic_voice) - return - - changeling.mimicing = mimic_voice - - src << "We shape our glands to take the voice of [mimic_voice], this will stop us from regenerating chemicals while active." - src << "Use this power again to return to our original voice and reproduce chemicals again." - - feedback_add_details("changeling_powers","MV") - - spawn(0) - while(src && src.mind && src.mind.changeling && src.mind.changeling.mimicing) - src.mind.changeling.chem_charges = max(src.mind.changeling.chem_charges - 1, 0) - sleep(40) - if(src && src.mind && src.mind.changeling) - src.mind.changeling.mimicing = "" - ////////// - //STINGS// //They get a pretty header because there's just so fucking many of them ;_; - ////////// - -/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1) - if(M.loc == src.loc) return 1 //target and source are in the same thing - if(!isturf(src.loc) || !isturf(M.loc)) return 0 //One is inside, the other is outside something. - if(AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, sting_range)) //If a path exists, good! - return 1 - return 0 - -//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities) -/mob/proc/changeling_sting(var/required_chems=0, var/verb_path) - var/datum/changeling/changeling = changeling_power(required_chems) - if(!changeling) return - - var/list/victims = list() - for(var/mob/living/carbon/C in oview(changeling.sting_range)) - victims += C - var/mob/living/carbon/T = input(src, "Who will we sting?") as null|anything in victims - - if(!T) return - if(!(T in view(changeling.sting_range))) return - if(!sting_can_reach(T, changeling.sting_range)) return - if(!changeling_power(required_chems)) return - - if(ishuman(T)) - var/mob/living/carbon/human/H = T - if(H.species.flags & IS_SYNTHETIC) - src << "This won't work on synthetics." - return - - changeling.chem_charges -= required_chems - changeling.sting_range = 1 - src.verbs -= verb_path - spawn(10) src.verbs += verb_path - - src << "We stealthily sting [T]." - if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting - T << "You feel a tiny prick." - return - - -/mob/proc/changeling_lsdsting() - set category = "Changeling" - set name = "Hallucination Sting (15)" - set desc = "Causes terror in the target." - - var/mob/living/carbon/T = changeling_sting(15,/mob/proc/changeling_lsdsting) - if(!T) return 0 - spawn(rand(300,600)) - if(T) T.hallucination += 400 - feedback_add_details("changeling_powers","HS") - return 1 - -/mob/proc/changeling_silence_sting() - set category = "Changeling" - set name = "Silence sting (10)" - set desc="Sting target" - - var/mob/living/carbon/T = changeling_sting(10,/mob/proc/changeling_silence_sting) - if(!T) return 0 - T.silent += 30 - feedback_add_details("changeling_powers","SS") - return 1 - -/mob/proc/changeling_blind_sting() - set category = "Changeling" - set name = "Blind sting (20)" - set desc="Sting target" - - var/mob/living/carbon/T = changeling_sting(20,/mob/proc/changeling_blind_sting) - if(!T) return 0 - T << "Your eyes burn horrificly!" - T.disabilities |= NEARSIGHTED - spawn(300) T.disabilities &= ~NEARSIGHTED - T.eye_blind = 10 - T.eye_blurry = 20 - feedback_add_details("changeling_powers","BS") - return 1 - -/mob/proc/changeling_deaf_sting() - set category = "Changeling" - set name = "Deaf sting (5)" - set desc="Sting target:" - - var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_deaf_sting) - if(!T) return 0 - T << "Your ears pop and begin ringing loudly!" - T.sdisabilities |= DEAF - spawn(300) T.sdisabilities &= ~DEAF - feedback_add_details("changeling_powers","DS") - return 1 - -/mob/proc/changeling_paralysis_sting() - set category = "Changeling" - set name = "Paralysis sting (30)" - set desc="Sting target" - - var/mob/living/carbon/T = changeling_sting(30,/mob/proc/changeling_paralysis_sting) - if(!T) return 0 - T << "Your muscles begin to painfully tighten." - T.Weaken(20) - feedback_add_details("changeling_powers","PS") - return 1 - -/mob/proc/changeling_transformation_sting() - set category = "Changeling" - set name = "Transformation sting (40)" - set desc="Sting target" - - var/datum/changeling/changeling = changeling_power(40) - if(!changeling) return 0 - - - - var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - names += "[DNA.real_name]" - - var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!S) return - - var/datum/dna/chosen_dna = changeling.GetDNA(S) - if(!chosen_dna) - return - - var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting) - if(!T) return 0 - if((M_HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T))) - src << "Our sting appears ineffective against its DNA." - return 0 - T.visible_message("[T] transforms!") - T.dna = chosen_dna.Clone() - T.real_name = chosen_dna.real_name - T.UpdateAppearance() - domutcheck(T, null) - feedback_add_details("changeling_powers","TS") - return 1 - -/mob/proc/changeling_unfat_sting() - set category = "Changeling" - set name = "Unfat sting (5)" - set desc = "Sting target" - - var/mob/living/carbon/T = changeling_sting(5,/mob/proc/changeling_unfat_sting) - if(!T) return 0 - T << "You feel a small prick as stomach churns violently and you become to feel skinnier." - T.overeatduration = 0 - T.nutrition -= 100 - feedback_add_details("changeling_powers","US") - return 1 - -/mob/proc/changeling_DEATHsting() - set category = "Changeling" - set name = "Death Sting (40)" - set desc = "Causes spasms onto death." - - var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_DEATHsting) - if(!T) return 0 - T << "You feel a small prick and your chest becomes tight." - T.silent = 10 - T.Paralyse(10) - T.Jitter(1000) - if(T.reagents) T.reagents.add_reagent("lexorin", 40) - feedback_add_details("changeling_powers","DTHS") - return 1 - -/mob/proc/changeling_extract_dna_sting() - set category = "Changeling" - set name = "Extract DNA Sting (40)" - set desc="Stealthily sting a target to extract their DNA." - - var/datum/changeling/changeling = null - if(src.mind && src.mind.changeling) - changeling = src.mind.changeling - if(!changeling) - return 0 - - var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting) - if(!T) return 0 - if(T.species.flags & NO_SCAN) // Yeah, this needs the same protection, otherwise you can steal DNA from Slime People and then blood overdose when you turn into one. - src << "We do not know how to parse this creature's DNA!" - changeling.chem_charges += 40 - return 0 - - T.dna.real_name = T.real_name - changeling.absorbed_dna |= T.dna - if(T.species && !(T.species.name in changeling.absorbed_species)) - changeling.absorbed_species += T.species.name - - feedback_add_details("changeling_powers","ED") - return 1 diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm new file mode 100644 index 00000000000..370a65d42a0 --- /dev/null +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -0,0 +1,404 @@ +var/list/sting_paths +// totally stolen from the new player panel. YAYY + +/obj/effect/proc_holder/changeling/evolution_menu + name = "-Evolution Menu-" //Dashes are so it's listed before all the other abilities. + desc = "Choose our method of subjugation." + dna_cost = 0 + +/obj/effect/proc_holder/changeling/evolution_menu/Click() + if(!usr || !usr.mind || !usr.mind.changeling) + return + var/datum/changeling/changeling = usr.mind.changeling + + if(!sting_paths) + sting_paths = init_subtypes(/obj/effect/proc_holder/changeling) + + var/dat = create_menu(changeling) + usr << browse(dat, "window=powers;size=600x700")//900x480 + + +/obj/effect/proc_holder/changeling/evolution_menu/proc/create_menu(var/datum/changeling/changeling) + var/dat + dat +="Changling Evolution Menu" + + //javascript, the part that does most of the work~ + dat += {" + + + + + + + "} + + //body tag start + onload and onkeypress (onkeyup) javascript event calls + dat += "" + + //title + search bar + dat += {" + + + + + + + + +
+ Changeling Evolution Menu
+ Hover over a power to see more information
+ Current ability choices remaining: [changeling.geneticpoints]
+ By rendering a lifeform to a husk, we gain enough power to alter and adapt our evolutions.
+ (Readapt)
+

+

+ Search: +
+ + "} + + //player table header + dat += {" + + "} + + var/i = 1 + for(var/obj/effect/proc_holder/changeling/cling_power in sting_paths) + + if(cling_power.dna_cost <= 0) //Let's skip the crap we start with. Keeps the evolution menu uncluttered. + continue + + var/ownsthis = changeling.has_sting(cling_power) + + var/color + if(ownsthis) + if(i%2 == 0) + color = "#d8ebd8" + else + color = "#c3dec3" + else + if(i%2 == 0) + color = "#f2f2f2" + else + color = "#e6e6e6" + + + dat += {" + + + + + + "} + + i++ + + + //player table ending + dat += {" +
+ + + Evolve [cling_power][ownsthis ? " - Purchased" : (cling_power.req_dna>changeling.absorbedcount ? " - Requires [cling_power.req_dna] absorptions" : " - Cost: [cling_power.dna_cost]")] + +
+
+
+ + + + "} + return dat + + +/obj/effect/proc_holder/changeling/evolution_menu/Topic(href, href_list) + ..() + if(!(iscarbon(usr) && usr.mind && usr.mind.changeling)) + return + + if(href_list["P"]) + usr.mind.changeling.purchasePower(usr, href_list["P"]) + else if(href_list["readapt"]) + usr.mind.changeling.lingRespec(usr) + var/dat = create_menu(usr.mind.changeling) + usr << browse(dat, "window=powers;size=600x700") +///// + +/datum/changeling/proc/purchasePower(var/mob/living/carbon/user, var/sting_name) + + var/obj/effect/proc_holder/changeling/thepower = null + + if(!sting_paths) + sting_paths = init_subtypes(/obj/effect/proc_holder/changeling) + for(var/obj/effect/proc_holder/changeling/cling_sting in sting_paths) + if(cling_sting.name == sting_name) + thepower = cling_sting + + if(thepower == null) + user << "This is awkward. Changeling power purchase failed, please report this bug to a coder!" + return + + if(absorbedcount < thepower.req_dna) + user << "We lack the energy to evolve this ability!" + return + + if(has_sting(thepower)) + user << "We have already evolved this ability!" + return + + if(thepower.dna_cost < 0) + user << "We cannot evolve this ability." + return + + if(geneticpoints < thepower.dna_cost) + user << "We have reached our capacity for abilities." + return + + if(user.status_flags & FAKEDEATH)//To avoid potential exploits by buying new powers while in stasis, which clears your verblist. + user << "We lack the energy to evolve new abilities right now." + return + + geneticpoints -= thepower.dna_cost + purchasedpowers += thepower + thepower.on_purchase(user) + +//Reselect powers +/datum/changeling/proc/lingRespec(var/mob/user) + if(!ishuman(user)) + user << "We can't remove our evolutions in this form!" + return + if(canrespec) + user << "We have removed our evolutions from this form, and are now ready to readapt." + user.remove_changeling_powers(1) + canrespec = 0 + user.make_changeling() + return 1 + else + user << "You lack the power to readapt your evolutions!" + return 0 + +/mob/proc/make_changeling() + if(!mind) + return + if(!ishuman(src) && !ismonkey(src)) + return + if(!mind.changeling) + mind.changeling = new /datum/changeling(gender) + if(!sting_paths) + sting_paths = init_subtypes(/obj/effect/proc_holder/changeling) + if(mind.changeling.purchasedpowers) + remove_changeling_powers(1) + + for(var/language in languages) + if(!(language in mind.changeling.absorbed_languages)) + mind.changeling.absorbed_languages += language + + // purchase free powers. + for(var/obj/effect/proc_holder/changeling/path in sting_paths) + //var/obj/effect/proc_holder/changeling/S = new path() + if(!path.dna_cost) + if(!mind.changeling.has_sting(path)) + mind.changeling.purchasedpowers += path + path.on_purchase(src) + + var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste + mind.changeling.absorbed_dna |= C.dna + return 1 + +/datum/changeling/proc/reset() + chosen_sting = null + geneticpoints = initial(geneticpoints) + sting_range = initial(sting_range) + chem_storage = initial(chem_storage) + chem_recharge_rate = initial(chem_recharge_rate) + chem_charges = min(chem_charges, chem_storage) + chem_recharge_slowdown = initial(chem_recharge_slowdown) + mimicing = "" + +/mob/proc/remove_changeling_powers(var/keep_free_powers=0) + if(ishuman(src) || ismonkey(src)) + if(mind && mind.changeling) + digitalcamo = 0 + mind.changeling.changeling_speak = 0 + mind.changeling.reset() + for(var/obj/effect/proc_holder/changeling/p in mind.changeling.purchasedpowers) + if(!(p.dna_cost == 0 && keep_free_powers)) + mind.changeling.purchasedpowers -= p + +/datum/changeling/proc/has_sting(obj/effect/proc_holder/changeling/power) + for(var/obj/effect/proc_holder/changeling/P in purchasedpowers) + if(power.name == P.name) + return 1 + return 0 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm deleted file mode 100644 index 68458760855..00000000000 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ /dev/null @@ -1,506 +0,0 @@ -// READ: Don't use the apostrophe in name or desc. Causes script errors. - -var/list/powers = typesof(/datum/power/changeling) - /datum/power/changeling //needed for the badmin verb for now -var/list/datum/power/changeling/powerinstances = list() - -/datum/power //Could be used by other antags too - var/name = "Power" - var/desc = "Placeholder" - var/helptext = "" - var/isVerb = 1 // Is it an active power, or passive? - var/verbpath // Path to a verb that contains the effects. - -/datum/power/changeling - var/allowduringlesserform = 0 - var/genomecost = 500000 // Cost for the changling to evolve this power. - -/datum/power/changeling/absorb_dna - name = "Absorb DNA" - desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger." - genomecost = 0 - verbpath = /mob/proc/changeling_absorb_dna - -/datum/power/changeling/transform - name = "Transform" - desc = "We take on the apperance and voice of one we have absorbed." - genomecost = 0 - verbpath = /mob/proc/changeling_transform - -/datum/power/changeling/change_species - name = "Change Species" - desc = "We take on the apperance of a species that we have absorbed." - genomecost = 0 - verbpath = /mob/proc/changeling_change_species - -/datum/power/changeling/fakedeath - name = "Regenerative Stasis" - desc = "We become weakened to a death-like state, where we will rise again from death." - helptext = "Can be used before or after death. Duration varies greatly." - genomecost = 0 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_fakedeath - -// Hivemind - -/datum/power/changeling/hive_upload - name = "Hive Channel" - desc = "We can channel a DNA into the airwaves, allowing our fellow changelings to absorb it and transform into it as if they acquired the DNA themselves." - helptext = "Allows other changelings to absorb the DNA you channel from the airwaves. Will not help them towards their absorb objectives." - genomecost = 0 - verbpath = /mob/proc/changeling_hiveupload - -/datum/power/changeling/hive_download - name = "Hive Absorb" - desc = "We can absorb a single DNA from the airwaves, allowing us to use more disguises with help from our fellow changelings." - helptext = "Allows you to absorb a single DNA and use it. Does not count towards your absorb objective." - genomecost = 0 - verbpath = /mob/proc/changeling_hivedownload - -/datum/power/changeling/lesser_form - name = "Lesser Form" - desc = "We debase ourselves and become lesser. We become a monkey." - genomecost = 1 - verbpath = /mob/proc/changeling_lesser_form - -/datum/power/changeling/deaf_sting - name = "Deaf Sting" - desc = "We silently sting a human, completely deafening them for a short time." - genomecost = 1 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_deaf_sting - -/datum/power/changeling/blind_sting - name = "Blind Sting" - desc = "We silently sting a human, completely blinding them for a short time." - genomecost = 2 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_blind_sting - -/datum/power/changeling/silence_sting - name = "Silence Sting" - desc = "We silently sting a human, completely silencing them for a short time." - helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and cannot." - genomecost = 3 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_silence_sting - -/datum/power/changeling/mimicvoice - name = "Mimic Voice" - desc = "We shape our vocal glands to sound like a desired voice." - helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this" - genomecost = 3 - verbpath = /mob/proc/changeling_mimicvoice - -/datum/power/changeling/extractdna - name = "Extract DNA" - desc = "We stealthily sting a target and extract the DNA from them." - helptext = "Will give you the DNA of your target, allowing you to transform into them. Does not count towards absorb objectives." - genomecost = 4 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_extract_dna_sting - -/datum/power/changeling/transformation_sting - name = "Transformation Sting" - desc = "We silently sting a human, injecting a retrovirus that forces them to transform into another." - helptext = "Does not provide a warning to others. The victim will transform much like a changeling would." - genomecost = 3 - verbpath = /mob/proc/changeling_transformation_sting - -/datum/power/changeling/paralysis_sting - name = "Paralysis Sting" - desc = "We silently sting a human, paralyzing them for a short time." - genomecost = 4 - verbpath = /mob/proc/changeling_paralysis_sting - -/datum/power/changeling/LSDSting - name = "Hallucination Sting" - desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical." - helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds." - genomecost = 3 - verbpath = /mob/proc/changeling_lsdsting - -/datum/power/changeling/DeathSting - name = "Death Sting" - desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured." - genomecost = 10 - verbpath = /mob/proc/changeling_DEATHsting - -/datum/power/changeling/unfat_sting - name = "Unfat Sting" - desc = "We silently sting a human, forcing them to rapidly metobolize their fat." - genomecost = 1 - verbpath = /mob/proc/changeling_unfat_sting - -/datum/power/changeling/boost_range - name = "Boost Range" - desc = "We evolve the ability to shoot our stingers at humans, with some preperation." - genomecost = 2 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_boost_range - -/datum/power/changeling/Epinephrine - name = "Epinephrine sacs" - desc = "We evolve additional sacs of adrenaline throughout our body." - helptext = "Gives the ability to instantly recover from stuns. High chemical cost." - genomecost = 4 - verbpath = /mob/proc/changeling_unstun - -/datum/power/changeling/ChemicalSynth - name = "Rapid Chemical-Synthesis" - desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster." - helptext = "Doubles the rate at which we naturally recharge chemicals." - genomecost = 4 - isVerb = 0 - verbpath = /mob/proc/changeling_fastchemical -/* -/datum/power/changeling/AdvChemicalSynth - name = "Advanced Chemical-Synthesis" - desc = "We evolve new pathways for producing our necessary chemicals, permitting us to naturally create them faster." - helptext = "Doubles the rate at which we naturally recharge chemicals." - genomecost = 8 - isVerb = 0 - verbpath = /mob/proc/changeling_fastchemical -*/ -/datum/power/changeling/EngorgedGlands - name = "Engorged Chemical Glands" - desc = "Our chemical glands swell, permitting us to store more chemicals inside of them." - helptext = "Allows us to store an extra 25 units of chemicals." - genomecost = 4 - isVerb = 0 - verbpath = /mob/proc/changeling_engorgedglands - -/datum/power/changeling/DigitalCamoflague - name = "Digital Camoflauge" - desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras." - helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us.. uncanny. We must constantly expend chemicals to maintain our form like this." - genomecost = 3 - allowduringlesserform = 1 - verbpath = /mob/proc/changeling_digitalcamo - -/datum/power/changeling/rapidregeneration - name = "Rapid Regeneration" - desc = "We evolve the ability to rapidly regenerate, negating the need for stasis." - helptext = "Heals a moderate amount of damage every tick." - genomecost = 8 - verbpath = /mob/proc/changeling_rapidregen - - - -// Modularchangling, totally stolen from the new player panel. YAYY -/datum/changeling/proc/EvolutionMenu()//The new one - set category = "Changeling" - set desc = "Level up!" - - if(!usr || !usr.mind || !usr.mind.changeling) return - src = usr.mind.changeling - - if(!powerinstances.len) - for(var/P in powers) - powerinstances += new P() - - var/dat = "Changling Evolution Menu" - - //javascript, the part that does most of the work~ - dat += {" - - - - - - - "} - - //body tag start + onload and onkeypress (onkeyup) javascript event calls - dat += "" - - //title + search bar - dat += {" - - - - - - - - -
- Changling Evolution Menu
- Hover over a power to see more information
- Current evolution points left to evolve with: [geneticpoints]
- Absorb genomes to acquire more evolution points -

-

- Search: -
- - "} - - //player table header - dat += {" - - "} - - var/i = 1 - for(var/datum/power/changeling/P in powerinstances) - var/ownsthis = 0 - - if(P in purchasedpowers) - ownsthis = 1 - - - var/color = "#e6e6e6" - if(i%2 == 0) - color = "#f2f2f2" - - - dat += {" - - - - - - "} - - i++ - - - //player table ending - dat += {" -
- - - Evolve [P] - Cost: [ownsthis ? "Purchased" : P.genomecost] - -
-
-
- - - - "} - - usr << browse(dat, "window=powers;size=900x480") - - -/datum/changeling/Topic(href, href_list) - ..() - if(!ismob(usr)) - return - - if(href_list["P"]) - var/datum/mind/M = usr.mind - if(!istype(M)) - return - purchasePower(M, href_list["P"]) - call(/datum/changeling/proc/EvolutionMenu)() - - - -/datum/changeling/proc/purchasePower(var/datum/mind/M, var/Pname, var/remake_verbs = 1) - if(!M || !M.changeling) - return - - var/datum/power/changeling/Thepower = Pname - - - for (var/datum/power/changeling/P in powerinstances) - //world << "[P] - [Pname] = [P.name == Pname ? "True" : "False"]" - if(P.name == Pname) - Thepower = P - break - - - if(Thepower == null) - M.current << "This is awkward. Changeling power purchase failed, please report this bug to a coder!" - return - - if(Thepower in purchasedpowers) - M.current << "We have already evolved this ability!" - return - - - if(geneticpoints < Thepower.genomecost) - M.current << "We cannot evolve this... yet. We must acquire more DNA." - return - - geneticpoints -= Thepower.genomecost - - purchasedpowers += Thepower - - if(!Thepower.isVerb && Thepower.verbpath) - call(M.current, Thepower.verbpath)() - else if(remake_verbs) - M.current.make_changeling() - diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm new file mode 100644 index 00000000000..6acb6e5a66d --- /dev/null +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -0,0 +1,107 @@ +/obj/effect/proc_holder/changeling/absorbDNA + name = "Absorb DNA" + desc = "Absorb the DNA of our victim." + chemical_cost = 0 + dna_cost = 0 + req_human = 1 + max_genetic_damage = 100 + +/obj/effect/proc_holder/changeling/absorbDNA/can_sting(var/mob/living/carbon/user) + if(!..()) + return + + var/datum/changeling/changeling = user.mind.changeling + if(changeling.isabsorbing) + user << "We are already absorbing!" + return + + var/obj/item/weapon/grab/G = user.get_active_hand() + if(!istype(G)) + user << "We must be grabbing a creature in our active hand to absorb them." + return + if(G.state <= GRAB_NECK) + user << "We must have a tighter grip to absorb this creature." + return + + var/mob/living/carbon/target = G.affecting + return changeling.can_absorb_dna(user,target) + + + +/obj/effect/proc_holder/changeling/absorbDNA/sting_action(var/mob/user) + var/datum/changeling/changeling = user.mind.changeling + var/obj/item/weapon/grab/G = user.get_active_hand() + var/mob/living/carbon/human/target = G.affecting + changeling.isabsorbing = 1 + for(var/stage = 1, stage<=3, stage++) + switch(stage) + if(1) + user << "This creature is compatible. We must hold still..." + if(2) + user << "We extend a proboscis." + user.visible_message("[user] extends a proboscis!") + if(3) + user << "We stab [target] with the proboscis." + user.visible_message("[user] stabs [target] with the proboscis!") + target << "You feel a sharp stabbing pain!" + target.take_overall_damage(40) + feedback_add_details("changeling_powers","A[stage]") + if(!do_mob(user, target, 150)) + user << "Our absorption of [target] has been interrupted!" + changeling.isabsorbing = 0 + return + + user << "We have absorbed [target]!" + user.visible_message("[user] sucks the fluids from [target]!") + target << "You have been absorbed by the changeling!" + + if(!changeling.has_dna(target.dna)) + changeling.absorb_dna(target, user) + + if(user.nutrition < 450) // Nutrition level before overeat_duration starts ticking for you to become obese. + user.nutrition = min((user.nutrition + target.nutrition), 450) + + if(target.mind)//if the victim has got a mind + + target.mind.show_memory(src, 0) //I can read your mind, kekeke. Output all their notes. + + if(target.mind.changeling)//If the target was a changeling, suck out their extra juice and objective points! + changeling.chem_charges += min(target.mind.changeling.chem_charges, changeling.chem_storage) + changeling.absorbedcount += (target.mind.changeling.absorbedcount) + + target.mind.changeling.absorbed_dna.len = 1 + target.mind.changeling.absorbedcount = 0 + + + changeling.chem_charges=min(changeling.chem_charges+10, changeling.chem_storage) + + changeling.isabsorbing = 0 + changeling.canrespec = 1 + + target.death(0) + target.Drain() + return 1 + + + +//Absorbs the target DNA. +/datum/changeling/proc/absorb_dna(mob/living/carbon/T, var/mob/user) + if(absorbed_dna.len) + absorbed_dna.Cut(1,2) + T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. + var/datum/dna/new_dna = T.dna.Clone() + //Steal all of their languages! + for(var/language in T.languages) + if(!(language in absorbed_languages)) + absorbed_languages += language + changeling_update_languages(absorbed_languages, user) + + absorbedcount++ + store_dna(new_dna, user) + +/datum/changeling/proc/store_dna(var/datum/dna/new_dna, var/mob/user) + for(var/datum/objective/escape/escape_with_identity/E in user.mind.objectives) + if(E.target_real_name == new_dna.real_name) + protected_dna |= new_dna + return + absorbed_dna |= new_dna diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm new file mode 100644 index 00000000000..e2f88ac9d9f --- /dev/null +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -0,0 +1,24 @@ +//Augmented Eyesight: Gives you thermal and night vision - bye bye, flashlights. Also, high DNA cost because of how powerful it is. +//Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though. + +/obj/effect/proc_holder/changeling/augmented_eyesight + name = "Augmented Eyesight" + desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability." + helptext = "Grants us night vision and thermal vision. It may be toggled on or off." + chemical_cost = 0 + dna_cost = 2 //Would be 1 without thermal vision + var/active = 0 //Whether or not vision is enhanced + +/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(var/mob/user) + active = !active + if(active) + user << "We feel a minute twitch in our eyes, and darkness creeps away." + else + user << "Our vision dulls. Shadows gather." + user.sight -= SEE_MOBS + while(active) + user.see_in_dark = 8 + user.see_invisible = 2 + user.sight |= SEE_MOBS + sleep(1) //BAD THINGS HAPPEN WITHOUT THIS. + return 1 diff --git a/code/game/gamemodes/changeling/powers/digitalcamo.dm b/code/game/gamemodes/changeling/powers/digitalcamo.dm new file mode 100644 index 00000000000..92ae8e7781e --- /dev/null +++ b/code/game/gamemodes/changeling/powers/digitalcamo.dm @@ -0,0 +1,17 @@ +/obj/effect/proc_holder/changeling/digitalcamo + name = "Digital Camouflage" + desc = "By evolving the ability to distort our form and proprotions, we defeat common altgorithms used to detect lifeforms on cameras." + helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us... uncanny." + dna_cost = 1 + +//Prevents AIs tracking you but makes you easily detectable to the human-eye. +/obj/effect/proc_holder/changeling/digitalcamo/sting_action(var/mob/user) + + if(user.digitalcamo) + user << "We return to normal." + else + user << "We distort our form to prevent AI-tracking." + user.digitalcamo = !user.digitalcamo + + feedback_add_details("changeling_powers","CAM") + return 1 diff --git a/code/game/gamemodes/changeling/powers/epinephrine.dm b/code/game/gamemodes/changeling/powers/epinephrine.dm new file mode 100644 index 00000000000..55ce85cf88d --- /dev/null +++ b/code/game/gamemodes/changeling/powers/epinephrine.dm @@ -0,0 +1,27 @@ +/obj/effect/proc_holder/changeling/epinephrine + name = "Epinephrine Overdose" + desc = "We evolve additional sacs of adrenaline throughout our body." + helptext = "Removes all stuns instantly and adds a short-term reduction in further stuns. Can be used while unconscious. Continued use poisons the body." + chemical_cost = 30 + dna_cost = 2 + req_human = 1 + req_stat = UNCONSCIOUS + +//Recover from stuns. +/obj/effect/proc_holder/changeling/epinephrine/sting_action(var/mob/living/user) + + if(user.lying) + user << "We arise." + else + user << "Adrenaline rushes through us." + user.stat = 0 + user.SetParalysis(0) + user.SetStunned(0) + user.SetWeakened(0) + user.lying = 0 + user.update_canmove() + user.reagents.add_reagent("synaptizine", 20) + user.adjustStaminaLoss(-75) + + feedback_add_details("changeling_powers","UNS") + return 1 diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm new file mode 100644 index 00000000000..9a4b144cc71 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -0,0 +1,36 @@ +/obj/effect/proc_holder/changeling/fakedeath + name = "Regenerative Stasis" + desc = "We fall into a stasis, allowing us to regenerate." + chemical_cost = 15 + dna_cost = 0 + req_dna = 1 + req_stat = DEAD + max_genetic_damage = 100 + + +//Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. +/obj/effect/proc_holder/changeling/fakedeath/sting_action(var/mob/living/user) + + user << "We begin our stasis, preparing energy to arise once more." + + user.status_flags |= FAKEDEATH //play dead + user.update_canmove() + + if(user.stat != DEAD) + user.emote("deathgasp") + user.tod = worldtime2text() + + spawn(800) + if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers) + user << "We are ready to regenerate." + user.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null) + + feedback_add_details("changeling_powers","FD") + return 1 + +/obj/effect/proc_holder/changeling/fakedeath/can_sting(var/mob/user) + if(user.status_flags & FAKEDEATH) + return + if(!user.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death + return + return ..() \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm new file mode 100644 index 00000000000..97889d1c9e3 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -0,0 +1,25 @@ +/obj/effect/proc_holder/changeling/fleshmend + name = "Fleshmend" + desc = "Our flesh rapidly regenerates, healing our wounds." + helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious." + chemical_cost = 25 + dna_cost = 2 + req_stat = UNCONSCIOUS + +//Starts healing you every second for 10 seconds. Can be used whilst unconscious. +/obj/effect/proc_holder/changeling/fleshmend/sting_action(var/mob/living/user) + user << "We begin to heal rapidly." + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.restore_blood() + H.shock_stage = 0 + spawn(1) + H.fixblood() + spawn(0) + for(var/i = 0, i<10,i++) + user.heal_overall_damage(10, 10) + user.adjustOxyLoss(-10) + sleep(10) + + feedback_add_details("changeling_powers","RR") + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/glands.dm b/code/game/gamemodes/changeling/powers/glands.dm new file mode 100644 index 00000000000..d08bd3021aa --- /dev/null +++ b/code/game/gamemodes/changeling/powers/glands.dm @@ -0,0 +1,13 @@ +/obj/effect/proc_holder/changeling/glands + name = "Engorged Chemical Glands" + desc = "Our chemical glands swell, permitting us to store more chemicals inside of them." + helptext = "Allows us to store an extra 25 units of chemicals, and doubles production rate." + dna_cost = 2 + chemical_cost = -1 + +/obj/effect/proc_holder/changeling/glands/on_purchase(var/mob/user) + ..() + var/datum/changeling/changeling=user.mind.changeling + changeling.chem_storage += 25 + changeling.chem_recharge_rate *=2 + return \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm new file mode 100644 index 00000000000..853b7081fed --- /dev/null +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -0,0 +1,92 @@ +//HIVEMIND COMMUNICATION (:g) +/obj/effect/proc_holder/changeling/hivemind_comms + name = "Hivemind Communication" + desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings." + helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." + dna_cost = 0 + chemical_cost = -1 + +/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(var/mob/user) + ..() + var/datum/changeling/changeling=user.mind.changeling + changeling.changeling_speak = 1 + user << "Use say \":g message\" to communicate with the other changelings." + var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new + if(!changeling.has_sting(S1)) + changeling.purchasedpowers+=S1 + var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new + if(!changeling.has_sting(S2)) + changeling.purchasedpowers+=S2 + return + +// HIVE MIND UPLOAD/DOWNLOAD DNA +var/list/datum/dna/hivemind_bank = list() + +/obj/effect/proc_holder/changeling/hivemind_upload + name = "Hive Channel DNA" + desc = "Allows us to channel DNA in the airwaves to allow other changelings to absorb it." + chemical_cost = 10 + dna_cost = -1 + +/obj/effect/proc_holder/changeling/hivemind_upload/sting_action(var/mob/user) + var/datum/changeling/changeling = user.mind.changeling + var/list/names = list() + for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna)) + if(!(DNA in hivemind_bank)) + names += DNA.real_name + + if(names.len <= 0) + user << "The airwaves already have all of our DNA." + return + + var/chosen_name = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names + if(!chosen_name) + return + + var/datum/dna/chosen_dna = changeling.GetDNA(chosen_name) + if(!chosen_dna) + return + + hivemind_bank += chosen_dna + user << "We channel the DNA of [chosen_name] to the air." + feedback_add_details("changeling_powers","HU") + return 1 + +/obj/effect/proc_holder/changeling/hivemind_download + name = "Hive Absorb DNA" + desc = "Allows us to absorb DNA that has been channeled to the airwaves. Does not count towards absorb objectives." + chemical_cost = 10 + dna_cost = -1 + +/obj/effect/proc_holder/changeling/hivemind_download/can_sting(var/mob/living/carbon/user) + if(!..()) + return + var/datum/changeling/changeling = user.mind.changeling + if(changeling.absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it. + user << "We have reached our capacity to store genetic information! We must transform before absorbing more." + return + return 1 + +/obj/effect/proc_holder/changeling/hivemind_download/sting_action(var/mob/user) + var/datum/changeling/changeling = user.mind.changeling + var/list/names = list() + for(var/datum/dna/DNA in hivemind_bank) + if(!(DNA in changeling.absorbed_dna)) + names[DNA.real_name] = DNA + + if(names.len <= 0) + user << "There's no new DNA to absorb from the air." + return + + var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names + if(!S) return + var/datum/dna/chosen_dna = names[S] + if(!chosen_dna) + return + + if(changeling.absorbed_dna.len) + changeling.absorbed_dna.Cut(1,2) + changeling.store_dna(chosen_dna, user) + user << "We absorb the DNA of [S] from the air." + feedback_add_details("changeling_powers","HD") + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm new file mode 100644 index 00000000000..b50c23197c4 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -0,0 +1,74 @@ +/obj/effect/proc_holder/changeling/humanform + name = "Human form" + desc = "We change into a human." + chemical_cost = 5 + genetic_damage = 3 + req_dna = 1 + max_genetic_damage = 3 + + +//Transform into a human. +/obj/effect/proc_holder/changeling/humanform/sting_action(var/mob/living/carbon/user) + var/datum/changeling/changeling = user.mind.changeling + var/list/names = list() + for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna)) + names += "[DNA.real_name]" + + var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names + if(!chosen_name) + return + + var/datum/dna/chosen_dna = changeling.GetDNA(chosen_name) + if(!chosen_dna) + return + if(!user) + return 0 + user << "We transform our appearance." + user.dna = chosen_dna + + var/list/implants = list() + for (var/obj/item/weapon/implant/I in user) //Still preserving implants + implants += I + + for(var/obj/item/W in src) + user.u_equip(W) + if (user.client) + user.client.screen -= W + if (W) + W.loc = user.loc + W.dropped(user) + W.layer = initial(W.layer) + + var/mob/living/carbon/human/O = new /mob/living/carbon/human( user, delay_ready_dna=1 ) + if (user.dna.GetUIState(DNA_UI_GENDER)) + O.gender = FEMALE + else + O.gender = MALE + O.dna = user.dna.Clone() + user.dna = null + O.real_name = chosen_dna.real_name + O.set_species() + for(var/obj/T in user) + del(T) + + O.loc = user.loc + + O.UpdateAppearance() + domutcheck(O, null) + O.setToxLoss(user.getToxLoss()) + O.adjustBruteLoss(user.getBruteLoss()) + O.setOxyLoss(user.getOxyLoss()) + O.adjustFireLoss(user.getFireLoss()) + O.stat = user.stat + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O + + user.mind.transfer_to(O) + O.mind.changeling.changeling_update_languages(changeling.absorbed_languages) + O.mind.changeling.purchasedpowers -= src + //O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/lesserform(null) + feedback_add_details("changeling_powers","LFT") + qdel(user) + return 1 + diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm new file mode 100644 index 00000000000..0069b7cbfd2 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -0,0 +1,67 @@ +/obj/effect/proc_holder/changeling/lesserform + name = "Lesser form" + desc = "We debase ourselves and become lesser. We become a monkey." + chemical_cost = 5 + dna_cost = 1 + genetic_damage = 3 + req_human = 1 + +//Transform into a monkey. +/obj/effect/proc_holder/changeling/lesserform/sting_action(var/mob/living/carbon/human/user) + var/datum/changeling/changeling = user.mind.changeling + if(!user) + return 0 + if(user.has_brain_worms()) + user << "We cannot perform this ability at the present time!" + return + user << "Our genes cry out!" + + var/mob/living/carbon/C = user + + //TODO replace with monkeyize proc + var/list/implants = list() //Try to preserve implants. + for(var/obj/item/weapon/implant/W in C) + implants += W + + C.monkeyizing = 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.drop_from_inventory(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.mind.changeling.changeling_update_languages(changeling.absorbed_languages) + + feedback_add_details("changeling_powers","LF") + qdel(C) + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/mimic_voice.dm b/code/game/gamemodes/changeling/powers/mimic_voice.dm new file mode 100644 index 00000000000..9d637245196 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/mimic_voice.dm @@ -0,0 +1,28 @@ +/obj/effect/proc_holder/changeling/mimicvoice + name = "Mimic Voice" + desc = "We shape our vocal glands to sound like a desired voice." + helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this." + chemical_cost = 0 //constant chemical drain hardcoded + dna_cost = 1 + req_human = 1 + + +// Fake Voice +/obj/effect/proc_holder/changeling/mimicvoice/sting_action(var/mob/user) + var/datum/changeling/changeling=user.mind.changeling + if(changeling.mimicing) + changeling.mimicing = "" + changeling.chem_recharge_slowdown -= 0.5 + user << "We return our vocal glands to their original position." + return + + var/mimic_voice = stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN) + if(!mimic_voice) + return + + changeling.mimicing = mimic_voice + changeling.chem_recharge_slowdown += 0.5 + user << "We shape our glands to take the voice of [mimic_voice], this will stop us from regenerating chemicals while active." + user << "Use this power again to return to our original voice and reproduce chemicals again." + + feedback_add_details("changeling_powers","MV") diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm new file mode 100644 index 00000000000..31fd7c577dd --- /dev/null +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -0,0 +1,339 @@ +/* + Changeling Mutations! ~By Miauw (ALL OF IT :V) + Contains: + Arm Blade + Space Suit + Shield + Armor +*/ + + +//Parent to shields and blades because muh copypasted code. +/obj/effect/proc_holder/changeling/weapon + name = "Organic Weapon" + desc = "Go tell a coder if you see this" + helptext = "Yell at coderbus" + chemical_cost = 1000 + dna_cost = -1 + genetic_damage = 1000 + + var/weapon_type + var/weapon_name_simple + +/obj/effect/proc_holder/changeling/weapon/try_to_sting(var/mob/user, var/mob/target) + if(istype(user.l_hand, weapon_type)) //Not the nicest way to do it, but eh + qdel(user.l_hand) + user.visible_message("With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "With a sickening crunch, [user] reforms his [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "[H] casts off their [suit_name_simple]!", "We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]", "You hear the organic matter ripping and tearing!") + qdel(H.wear_suit) + qdel(H.head) + H.update_inv_wear_suit() + H.update_inv_head() + H.update_hair() + + if(blood_on_castoff) + var/turf/simulated/T = get_turf(H) + if(istype(T)) + T.add_blood(H) //So real blood decals + playsound(H.loc, 'sound/effects/splat.ogg', 50, 1) //So real sounds + + changeling.geneticdamage += genetic_damage //Casting off a space suit leaves you weak for a few seconds. + changeling.chem_recharge_slowdown -= recharge_slowdown + return + ..(H, target) + +/obj/effect/proc_holder/changeling/suit/sting_action(var/mob/living/carbon/human/user) + if(user.wear_suit && !user.wear_suit.canremove) + user << "\the [user.wear_suit] is stuck to your body, you cannot grow a [suit_name_simple] over it!" + return + if(user.head && !user.head.canremove) + user << "\the [user.head] is stuck on your head, you cannot grow a [helmet_name_simple] over it!" + return + + user.u_equip(user.head) + user.u_equip(user.wear_suit) + + user.equip_to_slot_if_possible(new suit_type(user), slot_wear_suit, 1, 1, 1) + user.equip_to_slot_if_possible(new helmet_type(user), slot_head, 1, 1, 1) + + var/datum/changeling/changeling = user.mind.changeling + changeling.chem_recharge_slowdown += recharge_slowdown + return 1 + + +//fancy headers yo +/***************************************\ +|***************ARM BLADE***************| +\***************************************/ +/obj/effect/proc_holder/changeling/weapon/arm_blade + name = "Arm Blade" + desc = "We reform one of our arms into a deadly blade." + helptext = "Cannot be used while in lesser form." + chemical_cost = 20 + dna_cost = 2 + genetic_damage = 10 + req_human = 1 + max_genetic_damage = 20 + weapon_type = /obj/item/weapon/melee/arm_blade + weapon_name_simple = "blade" + +/obj/item/weapon/melee/arm_blade + name = "arm blade" + desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter" + icon = 'icons/obj/weapons.dmi' + icon_state = "arm_blade" + item_state = "arm_blade" + icon_override = 'icons/mob/in-hand/changeling.dmi' + w_class = 5.0 + sharp = 1 + edge = 1 + canremove = 0 + force = 25 + throwforce = 0 //Just to be on the safe side + throw_range = 0 + throw_speed = 0 + +/obj/item/weapon/melee/arm_blade/New() + ..() + if(ismob(loc)) + loc.visible_message("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!") + +/obj/item/weapon/melee/arm_blade/dropped(mob/user) + user.visible_message("With a sickening crunch, [user] reforms his blade into an arm!", "We assimilate the blade back into our body.", "" + return + + else if(A.locked) + user << "The airlock's bolts prevent it from being forced." + return + + else + //user.say("Heeeeeeeeeerrre's Johnny!") + user.visible_message("[user] forces the door to open with \his [src]!", "We force the door to open.", "You hear a metal screeching sound.") + A.open(1) + + +/***************************************\ +|****************SHIELD*****************| +\***************************************/ +/obj/effect/proc_holder/changeling/weapon/shield + name = "Organic Shield" + desc = "We reform one of our arms into a hard shield." + helptext = "Organic tissue cannot resist damage forever, the shield will break after it is hit too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form." + chemical_cost = 20 + dna_cost = 1 + genetic_damage = 12 + req_human = 1 + max_genetic_damage = 20 + + weapon_type = /obj/item/weapon/shield/changeling + weapon_name_simple = "shield" + +/obj/effect/proc_holder/changeling/weapon/shield/sting_action(var/mob/user) + var/datum/changeling/changeling = user.mind.changeling //So we can read the absorbedcount. + if(!changeling) + return + + var/obj/item/weapon/shield/changeling/S = ..(user) + S.remaining_uses = round(changeling.absorbedcount * 3) + return 1 + +/obj/item/weapon/shield/changeling + name = "shield-like mass" + desc = "A mass of tough, boney tissue. You can still see the fingers as a twisted pattern in the shield." + canremove = 0 + icon = 'icons/obj/weapons.dmi' + icon_state = "ling_shield" + icon_override = 'icons/mob/in-hand/changeling.dmi' + + var/remaining_uses //Set by the changeling ability. + +/obj/item/weapon/shield/changeling/New() + ..() + if(ismob(loc)) + loc.visible_message("The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!", "We inflate our hand into a strong shield.", "You hear organic matter ripping and tearing!") + +/obj/item/weapon/shield/changeling/dropped() + qdel(src) + +/obj/item/weapon/shield/changeling/IsShield() + if(remaining_uses < 1) + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.visible_message("With a sickening crunch, [H] reforms his shield into an arm!", "We assimilate our shield into our body", "[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body!", "We inflate our flesh, creating a spaceproof suit!", "You hear organic matter ripping and tearing!") + processing_objects += src + +/obj/item/clothing/suit/space/changeling/dropped() + qdel(src) + +/obj/item/clothing/suit/space/changeling/process() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.reagents.add_reagent("dexalinp", REAGENTS_METABOLISM) + +/obj/item/clothing/head/helmet/space/changeling + name = "flesh mass" + icon_state = "lingspacehelmet" + desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front." + flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + canremove = 0 + +/obj/item/clothing/head/helmet/space/changeling/dropped() + qdel(src) + + +/***************************************\ +|*****************ARMOR*****************| +\***************************************/ +/obj/effect/proc_holder/changeling/suit/armor + name = "Chitinous Armor" + desc = "We turn our skin into tough chitin to protect us from damage." + helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Retreating the armor damages our genomes. Cannot be used in lesser form." + chemical_cost = 20 + dna_cost = 2 + genetic_damage = 11 + req_human = 1 + max_genetic_damage = 20 + + suit_type = /obj/item/clothing/suit/armor/changeling + helmet_type = /obj/item/clothing/head/helmet/changeling + suit_name_simple = "armor" + helmet_name_simple = "helmet" + recharge_slowdown = 0.25 + +/obj/item/clothing/suit/armor/changeling + name = "chitinous mass" + desc = "A tough, hard covering of black chitin." + icon_state = "lingarmor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + slowdown = 2 + armor = list(melee = 65, bullet = 20, laser = 10, energy = 13, bomb = 0, bio = 0, rad = 0) + canremove = 0 + flags_inv = HIDEJUMPSUIT + cold_protection = 0 + heat_protection = 0 + +/obj/item/clothing/suit/armor/changeling/New() + ..() + if(ismob(loc)) + loc.visible_message("[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!", "We harden our flesh, creating a suit of armor!", "You hear organic matter ripping and tearing!") + +/obj/item/clothing/suit/armor/changeling/dropped() + qdel(src) + +/obj/item/clothing/head/helmet/changeling + name = "chitinous mass" + desc = "A tough, hard covering of black chitin with transparent chitin in front." + icon_state = "lingarmorhelmet" + flags = HEADCOVERSEYES | BLOCKHAIR + armor = list(melee = 70, bullet = 15, laser = 7,energy = 10, bomb = 5, bio = 2, rad = 0) + canremove = 0 + flags_inv = HIDEEARS + +/obj/item/clothing/head/helmet/changeling/dropped() + qdel(src) diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm new file mode 100644 index 00000000000..f6721af7f47 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -0,0 +1,25 @@ +/obj/effect/proc_holder/changeling/panacea + name = "Anatomic Panacea" + desc = "Expels impurifications from our form; curing diseases, removing toxins and radiation, and resetting our genetic code completely." + helptext = "Can be used while unconscious." + chemical_cost = 20 + dna_cost = 1 + req_stat = UNCONSCIOUS + +//Heals the things that the other regenerative abilities don't. +/obj/effect/proc_holder/changeling/panacea/sting_action(var/mob/user) + + user << "We cleanse impurities from our form." + user.reagents.add_reagent("ryetalyn", 10) + user.reagents.add_reagent("hyronalin", 10) + user.reagents.add_reagent("anti_toxin", 20) + + if(istype(user, /mob/living/carbon)) + var/mob/living/carbon/C = user + if(C.virus2.len) + for (var/ID in C.virus2) + var/datum/disease2/disease/V = C.virus2[ID] + C.antibodies |= V.antigen + + feedback_add_details("changeling_powers","AP") + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm new file mode 100644 index 00000000000..526172fdf38 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -0,0 +1,73 @@ +/obj/effect/proc_holder/changeling/revive + name = "Regenerate" + desc = "We regenerate, healing all damage from our form." + req_stat = DEAD + +//Revive from regenerative stasis +/obj/effect/proc_holder/changeling/revive/sting_action(var/mob/living/carbon/user) + + if(user.stat == DEAD) + dead_mob_list -= user + living_mob_list += user + user.stat = CONSCIOUS + user.tod = null + user.setToxLoss(0) + user.setOxyLoss(0) + user.setCloneLoss(0) + user.setBrainLoss(0) + user.SetParalysis(0) + user.SetStunned(0) + user.SetWeakened(0) + user.radiation = 0 + user.eye_blind = 0 + user.eye_blurry = 0 + user.ear_deaf = 0 + user.ear_damage = 0 + user.heal_overall_damage(user.getBruteLoss(), user.getFireLoss()) + user.reagents.clear_reagents() + user.germ_level = 0 + user.next_pain_time = 0 + user.traumatic_shock = 0 + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.restore_blood() + H.shock_stage = 0 + spawn(1) + H.fixblood() + for(var/organ_name in H.organs_by_name) + var/datum/organ/external/O = H.organs_by_name[organ_name] + for(var/obj/item/weapon/shard/shrapnel/s in O.implants) + if(istype(s)) + O.implants -= s + H.contents -= s + del(s) + O.amputated = 0 + O.brute_dam = 0 + O.burn_dam = 0 + O.damage_state = "00" + O.germ_level = 0 + O.hidden = null + O.number_wounds = 0 + O.open = 0 + O.perma_injury = 0 + O.stage = 0 + O.status = 0 + O.trace_chemicals = list() + O.wounds = list() + O.wound_update_accuracy = 1 + for(var/n in H.internal_organs_by_name) + var/datum/organ/internal/IO = H.internal_organs_by_name[n] + IO.damage = 0 + IO.trace_chemicals = list() + H.updatehealth() + user << "We have regenerated." + + user.regenerate_icons() + user.hud_updateflag |= 1 << HEALTH_HUD + user.hud_updateflag |= 1 << STATUS_HUD + + user.status_flags &= ~(FAKEDEATH) + user.update_canmove() + user.mind.changeling.purchasedpowers -= src + feedback_add_details("changeling_powers","CR") + return 1 diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm new file mode 100644 index 00000000000..cb9cc06c62b --- /dev/null +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -0,0 +1,46 @@ +/obj/effect/proc_holder/changeling/resonant_shriek + name = "Resonant Shriek" + desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded." + helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors." + chemical_cost = 20 + dna_cost = 1 + req_human = 1 + +//A flashy ability, good for crowd control and sewing chaos. +/obj/effect/proc_holder/changeling/resonant_shriek/sting_action(var/mob/user) + for(var/mob/living/M in get_mobs_in_view(4, user)) + if(iscarbon(M)) + if(!M.mind || !M.mind.changeling) + M.ear_deaf = max(0, M.ear_deaf + 30) + M.ear_damage = max(0, M.ear_damage) + M.confused += 20 + M.Jitter(50) + else + M << sound('sound/effects/screech.ogg') + + if(issilicon(M)) + M << sound('sound/weapons/flash.ogg') + M.Weaken(rand(5,10)) + + for(var/obj/machinery/light/L in range(4, user)) + L.on = 1 + L.broken() + + feedback_add_details("changeling_powers","RS") + return 1 + +/obj/effect/proc_holder/changeling/dissonant_shriek + name = "Dissonant Shriek" + desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics." + chemical_cost = 20 + dna_cost = 1 + +//A flashy ability, good for crowd control and sewing chaos. +/obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(var/mob/user) + for(var/obj/machinery/light/L in range(5, usr)) + L.on = 1 + L.broken() + empulse(get_turf(user), 2, 5, 1) + return 1 + + diff --git a/code/game/gamemodes/changeling/powers/spiders.dm b/code/game/gamemodes/changeling/powers/spiders.dm new file mode 100644 index 00000000000..52f8ecd31bd --- /dev/null +++ b/code/game/gamemodes/changeling/powers/spiders.dm @@ -0,0 +1,16 @@ +/obj/effect/proc_holder/changeling/spiders + name = "Spread Infestation" + desc = "Our form divides, creating arachnids which will grow into deadly beasts." + helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 5 DNA absorptions." + chemical_cost = 45 + dna_cost = 1 + req_dna = 5 + +//Makes some spiderlings. Good for setting traps and causing general trouble. +/obj/effect/proc_holder/changeling/spiders/sting_action(var/mob/user) + for(var/i=0, i<4, i++) + var/obj/effect/spider/spiderling/S = new(user.loc) + S.grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter + + feedback_add_details("changeling_powers","SI") + return 1 diff --git a/code/game/gamemodes/changeling/powers/strained_muscles.dm b/code/game/gamemodes/changeling/powers/strained_muscles.dm new file mode 100644 index 00000000000..7c5cded0c91 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/strained_muscles.dm @@ -0,0 +1,51 @@ +//Strained Muscles: Temporary speed boost at the cost of rapid damage +//Limited because of hardsuits and such; ideally, used for a quick getaway + +/obj/effect/proc_holder/changeling/strained_muscles + name = "Strained Muscles" + desc = "We evolve the ability to reduce the acid buildup in our muscles, allowing us to move much faster." + helptext = "The strain will make us tired, and we will rapidly become fatigued. Standard weight restrictions, like hardsuits, still apply. Cannot be used in lesser form." + chemical_cost = 0 + dna_cost = 1 + req_human = 1 + var/stacks = 0 //Increments every 5 seconds; damage increases over time + var/active = 0 //Whether or not you are a hedgehog + +/obj/effect/proc_holder/changeling/strained_muscles/sting_action(var/mob/living/carbon/user) + active = !active + if(active) + user << "Our muscles tense and strengthen." + else + user.status_flags &= ~GOTTAGOFAST + user << "Our muscles relax." + if(stacks >= 10) + user << "We collapse in exhaustion." + user.Weaken(3) + user.emote("gasp") + + while(active) + user.status_flags |= GOTTAGOFAST + if(user.stat || user.staminaloss >= 90) + active = 0 //Let's use something exact instead of !active where we can. + user << "Our muscles relax without the energy to strengthen them." + user.status_flags &= ~GOTTAGOFAST + user.Weaken(2) + user.emote("gasp") + break + + stacks++ + //user.take_organ_damage(stacks * 0.03, 0) + user.staminaloss += stacks * 1.3 //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack + + if(stacks == 11) //Warning message that the stacks are getting too high + user << "Our legs are really starting to hurt..." + + sleep(40) + + while(!active) //Damage stacks decrease fairly rapidly while not in sanic mode + if(stacks >= 1) + stacks-- + sleep(20) + + feedback_add_details("changeling_powers","SANIC") + return 1 diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm new file mode 100644 index 00000000000..f63fdd6d862 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -0,0 +1,186 @@ +/obj/effect/proc_holder/changeling/sting + name = "Tiny Prick" + desc = "Stabby stabby" + var/sting_icon = null + +/obj/effect/proc_holder/changeling/sting/Click() + var/mob/user = usr + if(!user || !user.mind || !user.mind.changeling) + return + if(!(user.mind.changeling.chosen_sting)) + set_sting(user) + else + unset_sting(user) + return + +/obj/effect/proc_holder/changeling/sting/proc/set_sting(var/mob/user) + user << "We prepare our sting, use alt+click or middle mouse button on target to sting them." + user.mind.changeling.chosen_sting = src + +/obj/effect/proc_holder/changeling/sting/proc/unset_sting(var/mob/user) + user << "We retract our sting, we can't sting anyone for now." + user.mind.changeling.chosen_sting = null + +/mob/living/carbon/proc/unset_sting() + if(mind && mind.changeling && mind.changeling.chosen_sting) + src.mind.changeling.chosen_sting.unset_sting(src) + +/obj/effect/proc_holder/changeling/sting/can_sting(var/mob/user, var/mob/target) + if(!..()) + return + if(!user.mind.changeling.chosen_sting) + user << "We haven't prepared our sting yet!" + if(!iscarbon(target)) + return + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.species.flags & IS_SYNTHETIC) + user << "This won't work on synthetics." + return + if(!isturf(user.loc)) + return + if(get_dist(user, target) > (user.mind.changeling.sting_range)) + return //sanity check as AStar is still throwing insane stunts + if(!AStar(user.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, user.mind.changeling.sting_range)) + return //hope this ancient magic still works + if(target.mind && target.mind.changeling) + sting_feedback(user,target) + take_chemical_cost(user.mind.changeling) + return + return 1 + +/obj/effect/proc_holder/changeling/sting/sting_feedback(var/mob/user, var/mob/target) + if(!target) + return + user << "We stealthily sting [target.name]." + if(target.mind && target.mind.changeling) + target << "You feel a tiny prick." + add_logs(target, user, "unsuccessfully stung") + return 1 + + +/obj/effect/proc_holder/changeling/sting/transformation + name = "Transformation Sting" + desc = "We silently sting a human, injecting a retrovirus that forces them to transform." + helptext = "Does not provide a warning to others. The victim will transform much like a changeling would." + sting_icon = "sting_transform" + chemical_cost = 40 + dna_cost = 2 + var/datum/dna/selected_dna = null + +/obj/effect/proc_holder/changeling/sting/transformation/Click() + var/mob/user = usr + var/datum/changeling/changeling = user.mind.changeling + if(changeling.chosen_sting) + unset_sting(user) + return + selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") + if(!selected_dna) + return + ..() + +/obj/effect/proc_holder/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target) + if(!..()) + return + if((M_HUSK in target.mutations) || (!ishuman(target) && !ismonkey(target))) + user << "Our sting appears ineffective against its DNA." + return 0 + return 1 + +/obj/effect/proc_holder/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target) + add_logs(target, user, "stung", object="transformation sting", addition=" new identity is [selected_dna.real_name]") + var/datum/dna/NewDNA = selected_dna + if(ismonkey(target)) + user << "We stealthily sting [target.name]." + target.dna = NewDNA.Clone() + target.real_name = NewDNA.real_name + var/mob/living/carbon/human/H = target + if(istype(H)) + H.set_species() + target.UpdateAppearance() + domutcheck(target, null) + feedback_add_details("changeling_powers","TS") + return 1 + +obj/effect/proc_holder/changeling/sting/extract_dna + name = "Extract DNA Sting" + desc = "We stealthily sting a target and extract their DNA." + helptext = "Will give you the DNA of your target, allowing you to transform into them." + sting_icon = "sting_extract" + chemical_cost = 25 + dna_cost = 0 + +/obj/effect/proc_holder/changeling/sting/extract_dna/can_sting(var/mob/user, var/mob/target) + if(..()) + return user.mind.changeling.can_absorb_dna(user, target) + +/obj/effect/proc_holder/changeling/sting/extract_dna/sting_action(var/mob/user, var/mob/living/carbon/human/target) + add_logs(target, user, "stung", object="extraction sting") + if(!(user.mind.changeling.has_dna(target.dna))) + user.mind.changeling.absorb_dna(target, user) + feedback_add_details("changeling_powers","ED") + return 1 + +obj/effect/proc_holder/changeling/sting/mute + name = "Mute Sting" + desc = "We silently sting a human, completely silencing them for a short time." + helptext = "Does not provide a warning to the victim that they have been stung, until they try to speak and cannot." + sting_icon = "sting_mute" + chemical_cost = 20 + dna_cost = 2 + +/obj/effect/proc_holder/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target) + add_logs(target, user, "stung", object="mute sting") + target.silent += 30 + feedback_add_details("changeling_powers","MS") + return 1 + +obj/effect/proc_holder/changeling/sting/blind + name = "Blind Sting" + desc = "Temporarily blinds the target." + helptext = "This sting completely blinds a target for a short time." + sting_icon = "sting_blind" + chemical_cost = 25 + dna_cost = 1 + +/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/user, var/mob/target) + add_logs(target, user, "stung", object="blind sting") + target << "Your eyes burn horrifically!" + target.disabilities |= NEARSIGHTED + target.eye_blind = 20 + target.eye_blurry = 40 + feedback_add_details("changeling_powers","BS") + return 1 + +obj/effect/proc_holder/changeling/sting/LSD + name = "Hallucination Sting" + desc = "Causes terror in the target." + helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." + sting_icon = "sting_lsd" + chemical_cost = 10 + dna_cost = 1 + +/obj/effect/proc_holder/changeling/sting/LSD/sting_action(var/mob/user, var/mob/living/carbon/target) + add_logs(target, user, "stung", object="LSD sting") + spawn(rand(300,600)) + if(target) + target.hallucination = max(400, target.hallucination) + feedback_add_details("changeling_powers","HS") + return 1 +/* +obj/effect/proc_holder/changeling/sting/cryo //Enable when mob cooling is fixed so that frostoil actually makes you cold, instead of mostly just hungry. + name = "Cryogenic Sting" + desc = "We silently sting a human with a cocktail of chemicals that freeze them." + helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing." + sting_icon = "sting_cryo" + chemical_cost = 15 + dna_cost = 2 + +/obj/effect/proc_holder/changeling/sting/cryo/sting_action(var/mob/user, var/mob/target) + add_logs(target, user, "stung", object="cryo sting") + if(target.reagents) + target.reagents.add_reagent("frostoil", 30) + target.reagents.add_reagent("ice", 30) + feedback_add_details("changeling_powers","CS") + return 1 +*/ diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm new file mode 100644 index 00000000000..b6a9cf0af30 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -0,0 +1,37 @@ +/obj/effect/proc_holder/changeling/transform + name = "Transform" + desc = "We take on the appearance and voice of one we have absorbed." + chemical_cost = 5 + dna_cost = 0 + req_dna = 1 + req_human = 1 + max_genetic_damage = 3 + +//Change our DNA to that of somebody we've absorbed. +/obj/effect/proc_holder/changeling/transform/sting_action(var/mob/living/carbon/human/user) + var/datum/changeling/changeling = user.mind.changeling + var/datum/dna/chosen_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") + + if(!chosen_dna) + return + user.dna = chosen_dna.Clone() + user.real_name = chosen_dna.real_name + user.flavor_text = "" + if(ishuman(user)) + user.set_species() + user.UpdateAppearance() + domutcheck(user, null) + + feedback_add_details("changeling_powers","TR") + return 1 + +/datum/changeling/proc/select_dna(var/prompt, var/title) + var/list/names = list() + for(var/datum/dna/DNA in (absorbed_dna+protected_dna)) + names += "[DNA.real_name]" + + var/chosen_name = input(prompt, title, null) as null|anything in names + if(!chosen_name) + return + var/datum/dna/chosen_dna = GetDNA(chosen_name) + return chosen_dna \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0f008d9f81a..4daefa505d5 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -898,6 +898,9 @@ var/list/slot_equipment_priority = list( \ continue statpanel(listed_turf.name, null, A) + if(mind && mind.changeling) + add_stings_to_statpanel(mind.changeling.purchasedpowers) + if(spell_list && spell_list.len) for(var/obj/effect/proc_holder/spell/wizard/S in spell_list) switch(S.charge_type) @@ -908,6 +911,11 @@ var/list/slot_equipment_priority = list( \ if("holdervar") statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S) + +/mob/proc/add_stings_to_statpanel(var/list/stings) + for(var/obj/effect/proc_holder/changeling/S in stings) + if(S.chemical_cost >=0 && S.can_be_used_by(src)) + statpanel("[S.panel]",((S.chemical_cost > 0) ? "[S.chemical_cost]" : ""),S) /* // Why have a duplicate set of turfs in the stat panel? if(listed_turf) if(get_dist(listed_turf,src) > 1) diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f0cc991cef584ca850dcb7f1c0a319b2a4d07772..a37ad8de5e82f50aa1dbae3915a689b314fb2c52 100644 GIT binary patch delta 11176 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 diff --git a/icons/mob/in-hand/changeling.dmi b/icons/mob/in-hand/changeling.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ab9e08573123d25a84d394b7445fcb1c6f1eeedb GIT binary patch literal 1302 zcmV+x1?l>UP)cgPAV!YlL-m`003qHGcy1)%m6c)05kspGXMYp|1&clx$YYP0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRL zOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DX}OwJ}D^zQ_wFKKu90X@^eOh zxktUDZP^wddZ*jq_!KKK3%Wh9iJe+=!`=2#0`tRZb-|!_SDAwL9s~zJf&orztKg`E z)z?gd_96J*tC^_IM~uMfnk}fZn$=YgF@kDGpRx(IP^-fUicwXf5cYkLmsQbIC{d!s zcLCH7Xi2AtpyI>aiOyQ^hiPNUT3=)6pI}22dWeF`ML%zxRY1RvCVVFo_+3XysJ(qv zL8XEbkX}oR(Gg04?_+8Ims|lbL55Q~uIinFm!fT29+R2~OWO zv#{DeHcQNr?=Mk;_eXj9omsNeYBdQ4=Yz^Sovzt+ZZvT}ko$#~xNYpB*~*Q<4uSs4 zpXn-{!&Cdn!ZZfl5B!Tq9v}K2ZAOU_B^2C2(TLxWoHtP+4IZ#6FON9V%^6*8W_H)n z;{qF@rtnr1(CbC??(;GY<5h&!lbM>gff5X9z|xSehFCpWD}p+E1ijOUhI~UXT~OlN34d7}utIqc=*=NoaIhJl5Esl(%NjUFE-YoO^#1rxO1V~Z@D z-3&nQ{U{EmDS^iqWU<@-l7CW5a05U<_%xRE?{uG64+PafnIag%85oy$aVowZVDrBa zth1=`1dq`bBY7W?*9g{kS%O0Nfk(fT_$ff zQ3S}R?8*_7bW0#`g8VMz+mRFSZ#38}A&9~dTf$Q9J-uFlUN;&&N1NjnQH&9|^ezi& zezS9d)3KDP0>Z;sVg!M<1cV@xTyDOUh)Q@$DFc?xQI`+d#Kk|w5+%MX*slci2bw!j zs5A3Y+Wmo>Jj~ECG(L;9A;InshL2BFKnV>oGyY6=e-I?*1R)^HnXv}DKL~hC#VsUo z`BHD%{lPMlzt0f@Vm?52e{d6B-_J4QwPJe9>JKI~S-~9nQzw?dXe_dD#~)1SEel7_ zfS^GdI;-6u@IR>xZ{ZR=Qa8+w)gO2)e3Bgd={K1ENZS1YdzPcf5QP$0{eerriaAa| zbpoqD@RolC-w=X2k-7rAKk%pwMiL>2b_i_#z@?0SLhNlE3u6zg{=jA8ek2frP(;Q& zHhj8X)P?CG3lT08t4a4wY4I_5c6? M07*qoM6N<$f-VzETmS$7 literal 0 HcmV?d00001 diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 254c1abce7582d9edbe8e7c53e8d4eaca1d0a9c8..7ec4cacf0d83ea41cf9c030b707bf4504df24869 100644 GIT binary patch delta 29466 zcmbTdbyO8m-!^;*2>~f->6Y$J=~PO(yGt5|1|638grwqiHsB@F0mXh=x}Gvt9v1F)uAX)-&Jc)C_Sei2 zXEFhtzOh+Nv;l2{X{Ap&0qA%yh3Let5D2TcqhDp2kh{|lsjr1u8mQS{wuPvp1ZD4F z?!~$nNcC=ZXg~Uv* z?_&yL_o=K$|0!BW%1G%X=Ur+NZ#QC6pMAJy@}fk9;)N}ZY1FGCVGOEs%y?7|EY~!i zNAKT8I_T!TnEk&ZQ~>Ym^ipDbQI!y2cts<~bugQ-BD1r_$Kj2o}5zjl^1bj{r%*xx!FbkEy@TK`#b6j&OO#Vc1;%y!vg z%MhU&;U6On+1|;xfyroLPv_lLsf^44HdK~KstlSY$we0X2C1Ki)3%U9M$CcHc~(4P zR9~vvuJ}`^U-o=!SLL&TKilnC;n)}FrqbdNGeJ7VdSqW%hOE%tR2$b z#?g_xhym4zXsxi(q^mtcAA4FDpVseQbX2k16KPow`2Hs*zQ_wj^lj_91uC}0F@h1{ zx0hS!&(ps$y%E#MLoaplV9N$r9ZYhCODx)VKWo{qSz)E{GjbVmji8t|?KI8*(&v%ygoqFJFr7KakJ}*@Nx}#F*k=Ry}hjX;!&2hPwH5 zuxrhDNHiOD4t3WDw1r1Ri0o98)Ei0g7!Q*(GMU`H>Yl9pNd$R_1itJTB{#qNm(8?fxq}FKDt^6NUg~@%zCJzh5pjabbT9GS2me z(Kdc{z+bl}9T*`v5TI>rl+HMov={nz`}~c4QE7Q@F0(erbKY&UUAe%JLBbBfM*aTt z=z9Tvqzfw~cCM*5lgh@qc_mRBI$cSuUIzBWvFw65Sc5_1`vbR;g#{<(>K7D)W1C zPr#24QrzW9tK$co+hI8xJy@U1h)tcpZAK2FH2JT3AUdP4M-80?ZTKvqmgVwZ^%*a>LZ!urq$+w#RQ=52x zEn^NNbLc|7D0Si$l2am_=W!r=2Ut68S@g7LONhXshRj-~P!s zT5VpElo>727&!a#hWLop37PU6ht7Kav|K$#0A6R&D@H1^Y!}KzP2=CDBtsp~nf`_L zgr`aJY2?@cnxK!5%c97-N)P!qK#%Dy>f+77@j^6AVw*%I9v^2mq}W%-v;XB!9j*B+Z)ec

o+)=qsbQxsN=Vx2xq7%a{%KONOC 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℘gC=B;p=Qr4hhGLcuhh;J%o*+9 zJY@}O3PFrZ5;T=muqv8tc7JJ5k|a)U#CjDB_f{WbL%=}P+5JoL6^;T*08_P!aSqO_ zepp3Thkd@J*hOUj{u5+r)7WjO`taeBSL-=z;Bn(Twm!+T`*^~D=G)!tM7vLIG%bSS z$s-4=p__mzEbVUqG(rm%uxC^t!c|5Yz8K-5RMr@zfE`(*ZV3xh7Znw``ISeYLD?2K zf!ePsuhOz1epGy3J=dY^Tw6;azbnj2c5z!AfxGkNHhx%lyYy|6Y=q@rf3!1)sPFe# z&wB^5{t;hiZ)vyqoRFz1*xvQXb~yhz37seIACbRn7ZGS_d(IBa^x3;^Aiy!|DnYp+ z&T;TOWbWm2Mm)LC-fMLMA&x2qRJu-A_3ISYzS0EgwEORRvTrZ5hDDO>UTw0CLShtu zpP(kUQ01zxC8~wLbRIOOhDC4M^kyjD?}co~H4Qks<5^?tg76>zAa;!1iXwfaZ~;vq z^hI8Uvrw=yYpe?xXrCnUISa06SVCBHUzI8k$i?n@vaAF=_3#H}(&bcenw~Iy4w|Nd^;hD|`KTB*p#2zrW z>5tzPlibsin1Z0luz!`4Rt?sE>Y`*lJc`WJ8JK^c#F0ut0 zlQd3pR;e4nC8N>kpi=igyg)n=7e@}fwHbOiyP5yRj=*o~odn7?zr{E*2?V@6{V-sC zJgqa+diLmWuWhu%;gS$>X7xeL?G{Z!#VF6PNbyK~Z^MeA0%TwRE>f)2T5*T(8w2Q( zVK>kdRF!JgPK$NOq=7rJzx|<^i{JsL`2qF`?UbGPYppi-;ghp~b;a^FCVq!fH#Y8_ zxYc0(-8UT^#9}L?NpqaR(VLDOuW-Erhn~y2suQ<1QX*1XN(LGH4rP2WU*7gzQcY5? z8mEP!F+;7+zj12w)|r~Lq05+TcG{%`pJM)Rp}^ zPZ}OnW!EKN$x)8v-qN&R=YZzw8%XER2ZLWfw-d3GSv+c zwjfdRb3oWhc=o$Gk?B&(3bSR!MRK>b>8$qcPjB+bav2C#UZFHW?h5Mx62Z@*Z?gJBsNp7~#${xPqY z{js3Zt+tpY@Mb{paZkGxsiwV{o~c_y1}#ut~I`MoRnPKi;Zk^M)5vS4edEzl11c}k`anF$`>yIs|6XbqL& z2XJo>dmT#_UlUN=;Q`89u>GTc`(G&*fjVQNlls^7OVm@^-)k4Bf4sahD$0^?`t5iY zdi`HV=3wQ$!Yn>%w#tlZ9EaPE5!LN~T`W^DZ|Ic40s*jnMwmQJ;XqC1ZuWUrx=3&L z2Z#Z^tnbPVr1dD+@VBeiA8E2cDkH7l+H2A|M3{6C*O$(F%HKW%$IH6C+K~LQEki?}zmM63@fPQ%)W}0xzhx4)LKWv}4NZt#P!9+z z4|FZwiXN5R{S_ihur)sG3DR)+>mNmNZuTC$$Y>z4dNgE^e0iiB`if46F|< z&~Qe`1FbD8COKFw2wwOY@awL~9yKp~A8j17#=}>1qDe{z=Op|ve>Y)QmED0vIss)e zt3H3*`1llw&gJ*cF;7VBb`i;py)qmEAee3zWKAU=N@Nw>y$35W7$o!Jr=oX1hj8aomY=BMx*gRkAf9b8i z$^BAV@;0wwZ(FMV*jE~p(rDHyJ2-sLCrC%*eK_SYa2|(Ha@%>mH(^F}_yzEIO_;dK zjTA=2oMw4`m$20!T-x%rf7vL5L@1%|Jd}yE!-F-8SQ=|vIAnXAeKSGxM`O&F#zP>1 zwJ8TUUO*nssQ54a&|yNic&zjwX&l+Wm28C1acr34ob#Y^!4NSLZ+EXht8x59*NvND zmJi}27+eS*J2tHrS}?TEoz1|&>!v}yS=Pfo{nC&7p8uZ(RYMJcG6@P&y1NP%7CEyu zot-Lo^~)7R0`d?bxF6QcqGV(&nmqB+OQ<;c-qY+3(t)JUGr}H|TKeaGc8bq-Sh<+;l6TI}#sx2c+i#Z3`R=CBUZ81)N`qFuX;I5Mu?7jmit)KaFEv;6^8h zo8iNuv(ED;F&@(nquZlk(7M{eY3W%6GeOvUjNGTWxiPHlBo<&0$wr;r>eA+@f%|7_ z+bMcgz=(2&6%Q-f4K#H5Up4RGlc*R;XHx8;v!4RE&tQ~w;z}bDAALRU8ZLaFt&R)E z=7i-P>;6k|lcRVP7N&?G=|oiNU61kX$j-E*%{K72++Y@d9HQ$w?CbH;_Ek_7xh$7; zzt8ldfBorS@Rw_u{$EZwJqwlwgswf@=f{2V)xtqL@a|!4gyKu%)rNvenh^7rl0M#;Qz_iTX>HAw-WM0@2 z<`FPTIF5{rTwV^JesO*QKua3LSJkUDpF#kWWV;trOAQLAp8Vek6YwaXyY1E`!=r<& z>XbX$DOp&^qPuW`J`yBXu<6yzfQuU=5NKVHALZN31|FdF^7g%ZSbL3i*ww-yb>Qdc zcS~HHjxPGa+@Ns8OR1iwfYjG+!)T}Zp$Aa;Gr>m4r~$oCtPqpw#;)PM?iBFlnV0w` zf8gs^zf`ScZ!guf_6?DimDc&6{(D6f0(*MHH5-j9vX%4GYsFohfeeIcNyn#WXF0jK zDuHs}7EQ*cL&xLe<0C;4MpGFeT24<-H4h2-uxdiAd=S(@V0*48Dk|!%owB@!#Wsy|&qcCw*Jl*K!9?DRgf^!$DBF`AAKz4Xf9!T)FS->rq@qR=5uC{S&+F1-bc6yrHaayojC3INhMOs zknh8$qpea+>ICJvTefj?cH`XGCFj)Nag~}j<0_+DY2LNYPSasa>q%>KU4{%c%2r+1 z-fasiQ`)d}2#OHxXc{w@&?SZ=Y_9yk2xH#OX%lS0u_A=131p)bJm=b49e7pv=GN@vUh>QeP z9^fi4nC+dr`1tl2X(XhJhrU!q_=3X1O07@sV5X)FQ{VKMjefZ=F0P&p#K=?4WZ)Z@d_{g<}6sa_e5lsvD=YG&2x9?Ve+Fe%*_j z-|1Oc-~h#hi*EJ1tIiidlv1TW(zR4Yz;j&ST>tk;!XS(qb85kXqRt4WkLyY^FS4La zbr#+e%;KaE1*3Wj)`%5kZQZ`S2h`h^pxxwwVA|J*2}a5yW7O-;vkjlvbT(+1n3)m7 z!$IJ7t*otczJ3kucE5Atcj;&on!9r~JxJh$IXfIF2x&$2%6fTtaEOS|06D&d>k>Y4 zV&a!`Yqi=BiKx>TMbD$<$Ox1*yA3r1;+8>Y0sML+tpP6`9f%qfCUGI+;~&_z(2`sO z<%0=HNdy^MJa7Lh3FYSHDQ0Uc6g^j`?uZb92d@79blbtMJ%3ymroch@GgH6dV@* z_;C)pClSiXh+V0jQ!;->Gc`SJF3R-u#fxiMLy^9*4>gOf6(MaG_D{86yrA9h2X>P? z#T!f>S@&{JEz|Cj7xG`3s6+R>yiVKBv2vac4$Ml}pubq1R`%*R{<(Lad6m_}gRi%c zyNP9otq*5(iO5;tTfe^2JZXNcHeX*5~@fzr_+*pWZr(2?)8@5I_=uz zI78U7byZ4fN|F+^F7!fpJfYW$h#(X^@3XBm>BGJG!Q{E@%*m?UMC9#) ziZjvudo_XncR`0WyJ{x4dX_dbO0Wmi^K^vqWK7AdaKY5IgLTV5ro^ADT%sGz)*%ua zD$(dGwl2m5rV9_I50&UTOjcgIf4tREapA9Dq622RHcXf98*}MuU&>%NKtf6wserNTr$-wb}edRc^n=tVXPa0Ks=3! ziTU#F8wrr6)zv$*XUbpYSnXWxqfA$>!)eyn*TJNQx97tl7W7t^!KZg}?!0g|1~P)s zy^{*GPHzZmTd73%SqE#pCOp)zBp~8d5_8h|Az7an?`N7c=6#KFk zAW~pevB={6d#Wb3T2W<96EK^)c_8JIM{`Rqi$br=ByY&*`&$YEpn{i~yKDP1dfvE? zo|YCtaS9WZm6b(Rx4Xvogy!Vj?5$iNea-VOZ#X^v2`S0$G5$J+_~+0|!(rk5GsnC= z9nSs`4PXzI;L^GL^#WJWj}JVr#$gHX-z#2sQdK4N_49kp=m}=%Q7D&N%f-lV!ZS?T zldIh-)Ue1%=vMf=ZcYz@+5rk{39Y9^L`2@Fr7`bo=7!lOqB7FbGzMA)`Gwx9+$4(Z z0P@){))Que94zFaD4(zn^M=cpCAyYio)%p`TNieXqkPy{pdN&d$3N#x6gMJXHCx-v z*Ef~PggO!|IYYx#u2dyp5WnaauQlT#h=bSGUf;e!g76Se7uv(pANls8iRXe>k8k3xqH0LF*TL?9LCp$_x90Yr)0!)-R=GIwf zR5X;wKD3%VRc9A{P0zX#le>ALtwruh7%DWRa_6t_92cG25NJhmJa#>!4Vb=pffg~m z?LF@W&qf5smj|_f%8}Un<@p^dl5p^Xk|Z3w=1lAbHgg#Jv1g;DX5&Nx+<{9Drcp_5 z&RZ@lZ%tr>cCg2e@vnjo_rs5KG5GE)@9MQN2@AP zh9oV~mF`2o@$gV69&6t?TsnDoE4|Bt>K>m=a?5}{~!Ufav}V z5*Z10lP&17pqV=uM&tOesoL<$` z@YaTUDnU;yj?_=`>mEymBg7Vi_W09Z-(B~a173k42^hI-`wBfRB_CZ??QGBps>F8yTKwc-#J-LvRoW@{Ve z6#6K$cVgmmq3_!}Aws9>v&oiA}p9j}~62lcl2|!_;Xwq1mcMT5@4?XGJT;^~W!NZMK!YE5h{umz)MpqN6LCes8TH z3$k!Q zM~h{(Xu`i54|gmIuDD5phm~+j;n}_rKo2~b-XTn;nW${-+hAjX5Qf{n^C46D+M(~S zRX1S3c4eOM;AVO+5tF@}@P-^Z7->vVo?lJADgydS_x|@~X=!P2s+nMlpp?|Rs$#um z1!n=Rj~^AXwZBwV(G)X}?*X3bhbYL@_Ki@g4|#?xg<`8y>FeiJ&0bD;K&bXX_h#KfXEKcw}CRo#>V^IKipAT6At21@N3eZn*g~fgBZ4X z-X<%64iw*)H6Jm}1soeA(uQW6{pjcY_pgh2S)Eew?!)2fA5AI9$(PccTiRwDmqa^a zkc5ILe3+s`0H;$eGsrn<-@ftaG4wdE0(4daUMWO8BJl%|4QOg=c79AJwWO~4S8VM@ z{o=(7(DMviEuAisH>aARm42Hyc-Bev_Ko(Z1vGD*?x$<QOO~fLpRJ`ygsRf7#A3S)FV+WD=TwX-`1C1nX z_;(lx+mcNK85KmCGe3RePLadzGdA|^4H}IL!`jGf&Pko`IHn|YQ<2h7DQQfE_EU-W zWli&ac%{E;uqKv|oQ9Lq3yO+{WoL8xpDaegU?sYwu#?>minV&6sP11+xcqVkw9$bv zEy#^7(BBAj2ZLPKM|r)Q=NK^9mS#6F-eKIRy`h!SqGukOclbf#5ul1^1zJyMqv-|y zXrV1FEe~X=NOk^xM{X>7HWp37ulM{)($Cf=a;i-;>5Kkx&%Ei46te} zJx}qpYPd$$JcwW7m5!{T$1N2`gWOpN!CwD1-un@{kuDFhftUrov!e!i!xj~@x+6o0Ms zpKT}d@`A}C*aZzLtT5H~`NA3`zlPu$f7Mh^utCni3fI6dk^fMxqstrtDu>?)db9M} z1c39eh)ydb*l-ypP(D9DpQ|q^>}R)coLvH2u?(>3JdbEx{5)JbR+`0SRc^Dewrc8wBt zb`4;|?m5z5z9eauJg9#K^(DF9cbfSk66fA^%bKO;z*V5`ES#p<7}YF734q zf{&Y$l8pDA=Ror!st^&@@;6efGfuVWS3B(tQ3R9h0U#iQ0L4m#k4qG;1QJShftZHd zLPUMFpuZ1dZVtO(PnvRY!J^MCDCj`#BL6`>)8LSkA$?sbIZ_o zcC1*>H78fa1LHk)<;)I^uI0j$tvc0+r4UKqNKZlhnkf@GkapkFOE9W_>6D)v&3Nvf z3lV+70xJs1w;SoVs6hjcQS=82DD3R7(Z%ND*M}Qv?%5*`kU@P`!e|dErYFDzgF(-` z4y%fF%0U|Qs7DJ;KmSnD@;8J*QRw=D&PGp-G6JY%NnmT% z(MrM}e>}vSJ#iIevb`wN2`2D6_yk#IN(hrVT}jNbHhcSi#-+P6@pmXa=ucf#P3sv; z@I?0ThS(Q;w+sfjha85cjbo6c)NgtG-k1Ld=uv*7ueGU1Xj>2j@QqwqA8@X^?_)p& zRKCtcAtomwV%V;4^M#&YE9I;|{mGG=xa#NuKuy3^+2MjP1&DQZbaa3pGZ$n)A3d^Q zMC6Ufzr{n4d6=7X0&m#9C>Z;IWWZ}psS&aL<|6smcG7BCS`gb)L_Yd*OL3f zLE9_`JIAiPe{SjI1i(Wrl+VX&tgeDR55-%Dlo``J^G%YQ#5-RfD~1KpaC1vYe|=K9 ztK+)7Am%hF{baA8@3+gBT6zHW^ESrKy%j%{(KbUbo)k5q>Dc<;EljafAqn2HameUQhS@A z8kQvG*KG3f7CO(ilPjhC5bm7mj9I!p?)!A!gtuU&xBjwGWew&+KM zZk%rQGWj?uH~xC@9)`;!w>)qC7wc#~e$2^24mOM$XDtT^-@tYT5PHFfZP7))lI$Wj z6j=vG1gHTB37|w`VBkhK$LvMHX!NwC-KUap!v|W}oHT_T=&n3_D-(-~pP#f+Hf6)* zvalXN!AD1)z9l!#_9|cqyQ+f&kIn5h#f4u~Adr6?b=nMk_A#K~upOfeeYKd%g!Tup z%ctvK2ARa9=f+&KUlsYHPZ1j0zjI$oN*$6O{%}ilBt7q#e)hu^4i{54FtV;h$WRdm z9l(aPjMUxeOxwy6oDWl(J2skPNv<>X%G0U;f|JxhJPEd&G8~GGh@k#}f!_d&$7;xx zTKQ(VVF@fJ(KHt)4Pl%6iD#whdHRc@@}0kr0lT}hqJrc{t*iiyvZNmWCZWQH>^$i?srkXRY^!sk1-RxZGiM@$A*USLm7Cm z(fV1@bGzDU0J^>cRL~fz*vph)99R@PJvyZ>7JjxepJw=ydxYL?Vy7UY7T_&F^bjMs zjldCp)-IG{iHQ=M$6uS9WvyBN^Xd%q-Cl-xm*vpr9!8L1HjuKgSt9_y$zg?AugPjbZ1L8V z2y3-tR6lhB-bIihXW`J-hHscA)$nEm1_J=-2egO+j`ZETcMG=mUs2)Hk#BneS&8*JVzaYCXW$7Il-0Ty zaig+IUspd01TjBwX2B8Oc8BX>ws?qq58x=l-60$*r{)99TRO#rn0c#K|Hyrtb&%uX5JM|dve9`+)jm}SL0q2VcikJ}N;}L)^?;X!c#FY7Dsshpo+(Ag2S-%*d|GuRh z*7E6<;`g}L1vaP9+q3WHjb=py4oT%E)s$aYC-I|sV%b2qMX(RG?|k}j1j%zoG*nbj z;lvW~S22QcS@x>IFxD=Xpf@%a7LzQC<&XjhR#uz33Pf6+dNPj{5_BLzBt zJq=QIWCm zA0J=Q>9}3B5QKWmSu^Q?)fNCU`>BYT%DjWPfOiJyf~Ephq%x<~s(ov$@L{e6KUZ-Z zNUDD_)bGQuhbw_~*8{ReclR|oRwn?ZkaM5lr5(l_&cn0lAqDmmc1vYuYEkf3?Ep|? zQuyE?L#x1w8_hiU`NUpURw5}YUaFQk62e?E>|ejIha7r_Dc5J5a(9LnyMBi_14c7` z6}4>mghH#-Km?_0snR;Q6=7*hbnZ0w@h&NaiuAC}#^J>5NGOPc0pm#ku*wHJYAiKW zD(&SmvC~6aEY@&b+f~Vxae`$5_R#IZ3uN85f&}|CD(CS(1Z=IZE9vP$$Pa5hraasl z*=k@*r7inB`r8Reg1;>E+lYJI0I&_|q-Nv|n;7VXXgdoeBu8rB4zp^jUs*xxfwd{2 ztxp7#$a}8T@9Evz!aWFe+Nxjt~~0*x{VICr`C?61U-j7(8!oK6$04rX(7i ra(wGXyB|zR!~mEzW-v1?q*oMq$1|f!Q08YC_^0+jOQlrFEaZOx+@?WF delta 24945 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 literal 38814 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 Date: Sun, 8 Feb 2015 19:49:23 -0500 Subject: [PATCH 02/37] Fix merge conflicts Fixes merge conflicts with icons\mob\head.dmi and icons\mob\suit.dmi --- icons/mob/head.dmi | Bin 166602 -> 167796 bytes icons/mob/suit.dmi | Bin 302146 -> 305730 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index a37ad8de5e82f50aa1dbae3915a689b314fb2c52..944bd928e1e63a87634ddfc7341caf1d6e1ea739 100644 GIT binary patch delta 12381 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 G_x}a+F+sop delta 11177 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 QG6#T$%5!D7qSf2~2RXcz$p8QV diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 7ec4cacf0d83ea41cf9c030b707bf4504df24869..f9244eace024a424f02bf1c13bb5e1e94b7d8a63 100644 GIT binary patch delta 32585 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

nDuz$%Hx)E1U;QBlImPmfVe~N zX4_sAo7wq(25^c~MzEOYctNv0dL+P80%MCk`@MvWR*O_-FMYrEI9szdHi01ciQl<~ z=(`U_JVyaUmLjy{HM1`l23cOYG9``|`ajS112?l@h%H?g0gDFQ01!k6uhp!_SzbY| zOhojO8^;21<)ra{gt3ZF@Prus)^HJ+r zlWAMePax&3Q5I&|i7XUgdSU!M%YE??+2sp(+89*qY^S=9Rw{~v))+o9MCkD!JEMV9 zjd_j*Ln4tI`}3(X`lZU)~ z^-4jO21Ksb>UnP!qvIs61Hmmc&B&a$Pa>evBUzYW^rQpmR>5jO>Q+q<3asw5Wa~KD z?}Q{MWJ12RxjZ^bfkirAi-(hWA!~%j1F2kOzIptp{KpU~Z)Ha#r`?F7SYMg;F$9j*ewpWgWVo(f;uL z%d(JIP_*XjFh&2`eC0>ttsCF5mg)LPCjBWx;|so-&AJMl8bPS;B*s(p z1^UrirmSGA%~o@d?Ae!7Be2>uAF72r`uW@xm`}1r#_X?QhPErRHSZ&?uHIEoZ<0KmzNUKmn3;Sqdt+su>ZyI(J}HRj0A`pv_%04y zAQ<+OSTt(`O;63dA2Kd2mvTVJs->$d=wT`*E#%`P1>SGa#VH-o$ccW_)>{m85*6GA zCRBIiu;CPq8kbX?sh=K)h50=3KNCwhB{c-bcHMSGnwOLN}*s~8NYl$z!u}Fp3ggN+H3~V1! z#Ak0B98w-L0L>fN*N~7bHSxG>wvP5YcPLlh5iqUOfix1ZKyA{Rv<7Eq!xk16-YJ&k z=M%NIwr=e0b)IeN}X?NVgBb{)oV|Pc2g5ZIZM-U#}HXh6y^vU zZ~7{7L02pV$*P!#VVo4`_#Oq}c=4N?G0y{=-$G=aZfX@Op*F@M$T1>z;g+A_L*aPpLdy1m(gc6vql=3lIBaj0M)a3>9r(*P^1PzUiEYu-_pSNDSy16|*i+BxT zP5(3IXpV>=12NgsR7PA}*&?fU$)au1ZV*421`X;Skb8mC2zMoX!g|Y0=&siswy%%q zf(^%NU41=92?c~=5MV703-3fatWQi$+h^q9Z}*!U{K{*!-i0ep0jzJZL6@I7=bxp> zoC9^@f$ipQ2ck|A^A21H7Z(O2ZSP!?SGyU@D7zO0dA((*Iysx8Mk~L#8Iy(sFTA$i z-E}Q$WN1$=SwDF9sCEvRQd>O5@4x@-~qB+2ZsPdfCs5M_C zqveyXhtgF@XS)36JjITQToBevH~$4KLR&W=%+3~Y&n}ck&{1*dBr)W=Z7Bopz^NS{tYC0fB+OnOrZZ@IZP31k~WQ`uh67a6ZfdbqEN&ZoshB)=y3A zV2vBc_tv3%Bj@MOg_&AM-JwCB8VSczeb(0X4<9ymcG_zl*CW4wmuIR!xv)2=b0WN1 z3(~TTXBW>1C8HrnSMim1?;?W&-&H?ZiZaU3o(Cob^yhqw8|Z-vI%zinr>O7lQKrxO zm@Mdao^;@@-z=#ARG!KK|A&o@eb9nKX1sa0%uIIw6IIsS!@ejzVPeKw79H7&gj@-1zEj7p8)~gWek}qJik? z1D>$97CPGh*gxS+*(P;#c=^VSh>}wsh^FySPy#u)CnMhlt(EBSQHOvU!v19AC2#Mu z%e%2dmwy0mFgv^3W-FS+0 znLf6g1w?O>vx=`ZUU5VRe}XA08r{4?p+;VR<-(QEIH>CM4Qpqjhv-#Z9$RQPW5YEK zsxFk|0qnt{p8VC<7Yi7sDv%oinnxf`-ykMd0P10tlS*a%y*Ahc;wp>xzhyGvx_WqI z0dk7jqkp?5poZuXqbXJ6Q1JGaF(F=m0f^`rL{Yv-(ZZAs__)l9vRin9g1SaJK|uY2 z?d&f-w=5*fbhJBN)?wVzVDj*@@Vy~b)NF+XTS47aAR4K}_*nb%!<0*{fS|10I$9v; zAp!xJjPfemuDOc~{WT`S^?|gmE}^?s294i#GcqbK=Rk_d7ia3RNdN8Q$UuAQhUG>O zH%a*yI2{ZGcjixU`t%CQ#5>#n7!>ef(7;tMbhB|Yj8QCH-#_;h?pf^XP0h%*dOZ5viBXjnB;vn-{d7VUi>x$K!og^oH%xgGQ*$itEyu6Zm5?x z1JSBqzkan${kBdqkHqm#QD1K>8QBzHbW!^FardiW_RpVk1!Ke0HF7}957gIS>TMG` zep_xv$j!}N3gpKckZ03{VkXhb?2*s2Z_v@=aT@dv zT<6cTo!)ThGmr3tF%kUWC-N?=5U6ZHQ6lcV6W?oZ(9-x*i7E#?)Azt5akAUYCDTU#YC$cotv z45Ll2O~k~JEnAqU0bbn3!===VI7V6TX+Z&ivJ3&?MlU4-Uj6D}twHcRMIWa`FuA;z zI!9~_>U$zk)`1Pi5CW)XK>C~>W+D2BoqZ)|?l{)lbap~=hVW*0r^(F=UE@lL8BfqC zt;{I#jEDB4g!)bY-A&n!k57U3_Vf%+O??AS8c-{5z{u%$cK*6=46?Wzy?OJmlytMY z7dlvYdpT)2B~C`sKVR>w3VIAn_O=c4LT+6bUNa0N9>?n1zK~K zbJ3g{!zqLHb#<0%lTW~f1jro#fiRujgxr<=R=_Ev5upt`#<7p2-&UVc*kDssQX-fQ zj=dSleWPHE2!I@*v~e0?8$O)?Bm2_Q3?M@*)Gp{9u*Zsv_b&5=wmPEg<0mQ?a3L;7lhb zCITe5v&VA$)Eqh%@P+}L_yu>&i8V-lsH{!}P_w+UK&jKkS%tmEVU@@yt*#>abi%zc z6`bh59?|N@KiL}gc}k2M|B(Q7$T|_EqWvFyPxDr`A0WvKkY@pT9aH+`|d^g)Vg z9bz-E={&H3>e34fN#4JIFJ6D7@)*>5f43J}{ZB$_kvl#7n`v%UvdAhEmTTCT!)ThB z>Zl`I(TiDoU?H9-LrTo+>u{u|Yq1aLj>FQqdbW>Nd*wMS&^VeNzuWGWMV&AIAm1nc5M4X_9Ir0 z4u6(xK(vFdXp(>%R2OT(#(S|ymSk{(2KO)SkB40d+Z@e*KF0XjbY$&#`pJCM?Dl3&8(=1rZim0wI2HSFSrxT%E8;ST8%*~Dq}rkAXy^% zb`z#z0}wAulrqNpK8)mKl$TQ=!b!PCtpb9A*qE7NASjjU^1k>rhM7^V`~Zy%j;_$( zuHlqK^eeWfT-!W zXg}{3+rOSi*-)kyR#*-;R=x8JF96UE?_}2_RuxyZE>-Q@) z2Kzy>WB+@hyP!pbF_mk;dnAC(fR<08xpA;t3c&uAS6hX9<4hkvBh)h!>PvhWBASl7 zA}$)buY8TC%|j{>J`M0Ba!TlrWV4iVj+C_}U!8nLOJE|cXKE}y$!CsrNgVaqGhVLy zSff@5MgVEGt{vE!*~eftN0ZaiO7?jkzwz6Huij6!5B2{DQUNv=7GK8dr>Yj9K?Axq z;&0Kaa-AP*j~%74Ll=Ozz*DVAiH!6CDtd6$W&&?+pr{cKoQnTj$(3QN!(es%TE7jOG$1 z@UU1knLRnJ*NQ+WX^1y(h@He2{I~5xS|1Zl*2IgRgyp@;ZTnPRe-FV5*+?iQfAVZdLy8-4DUjh-tT7z(a6pBYD zego(sMjA49&M^6zT1Rhx|K#v=2oU-kSK|T>u>}RhA`W+}=ZA$`j6QwJF+z z?ChKgE`NK+H8~wabr+821boZtHVsDCon#ThlHb)B&Xgip!(PxG|FDW4*G-#YU1sRSx#=%_bq2x_fC z(HnZ?WUw*(O#r`p=KMjfGw_l@1@d0Iq9wtf+;x6I6$r9^umI31yT@YO?(Xi!)gbQ@ zfPKpZ3lhC8)&Q{hyXs(OZZ4mpot2jtEb0NAyU4?b@A_AJOKoO}Y7O9Zg!isXloXd% z*UVpQYqyzKWSr@&<8E(ny?FEH8B;G_vj?wF#gsU3#5}aL#{cS|+W^{4J`%cgQBMq5 zPxS~l+*gZbohL%8-L(^PE+{FnoeZf>;}Jn3^dEyrG3y)IV51OnOeZ#G&j(v9P3Zr# z1S(_PIJU`7LDC{^k5|*RKK1_?iI3G<*4;dosBc^}&KAWr2PtORCn$h)+PLvrn*X}} zMCda3)+*h~JE*0b$)>?E?YgzI{t(xvRUH_6qx?$40VQ7>S{8j`WLkhm`IU{NSu7L! zhuYWhvykq9=GdmG*_0y+)>xioto&WN0B{~-uF=MNkjeqq&B{u z-+8*eJk#BRrcJ8#_LUU8SFP+NW6kP-#lf(U1H+O-F`ge|UB1(J&2gBF6lqcDF1?z(miF}0YO zY2&|8(B}eS-sw#cBwUlnVdK&hx-ZqbF-IsEy1e&C`AY;p8zin-~7S+%&4#^IaFJ!j6Svne;=@4h+slF4N{gk^q>#?;kR5lX|6lB zCl2j~tdox^#X;qXtaF$wG3xRzk0LPSkmRFpLlMKy_PY>-l&--U%WW*idn{%x6(}$I zE`jeTFX$Q~CyVw6hvi4bGD<<*UuqlGEK@AYF9_htFsqZARDbF5Yh0?QL!EK`Q66H% zK#3;rH4%u45r3D6j=znKR%YPaOe-j`R8C`wGr8N4-3&B2vjGi}Lx-}&rM6HwkM^sQ zf-zn9YjG;8hpAV+MwX~^CO2FkN1K1V;TH+Ikge#loK2w$PMyz;U4Bq5{!s68=$Z6k zJ0;BLqk{D?D89n=-`qIlpTP5?U#>}7?6x`jAlH=$@k-1-eo0kg|LZk3z_%9b_nWfT z2lR@x0TpB!FgTPz0h4oJVb)f+@5p?l!0My_2ukN;*np%8U6rs%RyM#Zp-+{_P8U+-C zjKPBQKx$ZW7@coPlSz^@MDu!Ri0cMfP;my9h2|?k`=uuh^mHMP$-+_@6WjKyJ-0`{ zb~uT8+v?F$*e*79-nKXy2>eq} zv|Z{st&VSwwzRduJk{#CFk^Y;8-=2DZx08@ z#sUGyDjfd%#cyFgUuI~v zORyGY9ae7Oe3PMo!LY-@4-P=DWvX;H!sl^8uSOAoJ)YZJ8_TtDKYnR%dJwo_k|`>b z;xZr~*pyfyFflC?dqfWc#;>=o$NQ)J5?^dEHhG}v!SWmYqQ{gc&`X3ry7xu5V9W#v z>$_$(Mvmb{v#ba?9KqFedDsuX^& zuCC4ietA5s*^uv*;y9=CyW~|`T&!On!9*{A=P6UTJrZgIhk6b%Z6gZ0rT{UCi2umB z3W26*@M)(pIJTrf+8hLCP{V^87|0*wck%DzsKmPB;<&R2n2+m)xLyEb%eS>`*^Y|( z3!t{_>WL0d9NGS^@!wUf^Tu*=pTwW43e#Z%aAs2m7C5Ag=1mFLm-skNMMb)fmqL?E z=K&z7{Qc8bnwfzGB5)}Lx)-26QkNiHyIpV}fGeQ)0D2K&j%O~PPan7}F%9@cn9`%M zjm_P_xU-L$k+rq;OMQJQ^Xt7X`{1$#_H?f23ybb{Ywgqj(brXkn1H%3a8nDppEp2? z|5-sJ{oj|gwE0rf0<&EYP(r_rwJg&E{aPF_;HJI=G1F`&m((H+9ek}7vy`N3uE}MJ zn|Z(yn?QdWMh|DJFjiyoOUutQci~cj^9-hf&NjTY7VYgV%m_kREiQ=jwz delta 29051 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 MxTm95qGBHMKXLqJu>b%7 From 6bd247dd409d8fd0cf9c64db2ffd698f7d76a6bb Mon Sep 17 00:00:00 2001 From: Svej Date: Mon, 9 Feb 2015 16:40:52 +0100 Subject: [PATCH 03/37] [FEATURE] Laptop Recharger + Changelog button 1. Adds in a Laptop Recharger that can only recharge laptops. Could potentially be placed near the latop vendor, and the detectives office. 2. The changelog button now links to Github instead of the outdated forum changelog --- code/game/machinery/laprecharger.dm | 101 ++++++++++++++++++++++++++++ interface/interface.dm | 4 +- 2 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 code/game/machinery/laprecharger.dm diff --git a/code/game/machinery/laprecharger.dm b/code/game/machinery/laprecharger.dm new file mode 100644 index 00000000000..7570227d755 --- /dev/null +++ b/code/game/machinery/laprecharger.dm @@ -0,0 +1,101 @@ +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/obj/machinery/laprecharger + name = "laptop recharger" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "recharger0" + anchored = 1 + use_power = 1 + idle_power_usage = 40 + active_power_usage = 2500 + var/obj/item/charging = null + var/icon_state_charged = "recharger2" + var/icon_state_charging = "recharger1" + var/icon_state_idle = "recharger0" + +/obj/machinery/laprecharger/attackby(obj/item/weapon/G as obj, mob/user as mob) + if(istype(user,/mob/living/silicon)) + return + if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton)) + user << "\red The laptop recharger blinks red as you try to insert the item!" + return + if(istype(G,/obj/item/device/laptop)) + if(charging) + return + + + // Checks to make sure he's not in space doing it, and that the area got proper power. + var/area/a = get_area(src) + if(!isarea(a)) + user << "\red The [name] blinks red as you try to insert the item!" + return + if(a.power_equip == 0) + user << "\red The [name] blinks red as you try to insert the item!" + return + + if(istype(G, /obj/item/device/laptop)) + var/obj/item/device/laptop/L = G + if(!L.stored_computer.battery) + user << "There's no battery in it!" + return + user.drop_item() + G.loc = src + charging = G + use_power = 2 + update_icon() + else if(istype(G, /obj/item/weapon/wrench)) + if(charging) + user << "\red Remove the laptop first!" + return + anchored = !anchored + user << "You [anchored ? "attached" : "detached"] the recharger." + playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + +/obj/machinery/laprecharger/attack_hand(mob/user as mob) + add_fingerprint(user) + + if(charging) + charging.update_icon() + charging.loc = loc + charging = null + use_power = 1 + update_icon() + +/obj/machinery/laprecharger/attack_paw(mob/user as mob) + return attack_hand(user) + +/obj/machinery/laprecharger/process() + if(stat & (NOPOWER|BROKEN) || !anchored) + return + + if(charging) + if(istype(charging, /obj/item/device/laptop)) + var/obj/item/device/laptop/L = charging + if(L.stored_computer.battery.charge < L.stored_computer.battery.maxcharge) + L.stored_computer.battery.give(1000) + icon_state = icon_state_charging + use_power(2500) + else + icon_state = icon_state_charged + return + + +/obj/machinery/laprecharger/emp_act(severity) + if(stat & (NOPOWER|BROKEN) || !anchored) + ..(severity) + return + +/obj/machinery/laprecharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. + if(charging) + icon_state = icon_state_charging + else + icon_state = icon_state_idle + +// Atlantis: No need for that copy-pasta code, just use var to store icon_states instead. +obj/machinery/laprecharger/wallcharger + name = "wall laptop recharger" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "wrecharger0" + icon_state_idle = "wrecharger0" + icon_state_charging = "wrecharger1" + icon_state_charged = "wrecharger2" diff --git a/interface/interface.dm b/interface/interface.dm index 54a26a29cf8..e4d6a082d8e 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -13,10 +13,10 @@ src << "The wiki URL is not set in the server configuration." return -#define CHANGELOG "http://nanotrasen.se/phpBB3/viewtopic.php?f=10&t=36" +#define CHANGELOG "https://github.com/ParadiseSS13/Paradise/commits/master" /client/verb/changes() set name = "Changelog" - set desc = "Visit the forum to check out the changelog." + set desc = "Visit Github to check out the commits." set hidden = 1 if(alert("This will open the changelog in your browser. Are you sure?",,"Yes","No")=="No") From 28bc45ce04e989bf048e99e458654c30b5f68919 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Mon, 9 Feb 2015 17:47:54 +0100 Subject: [PATCH 04/37] Craaaaaa.. P --- code/game/machinery/atmoalter/canister.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 968a166a153..580783b6df1 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -67,7 +67,7 @@ /obj/machinery/portable_atmospherics/canister/sleeping_agent name = "Canister: \[N2O\]" icon_state = "redws" - _color = list("redsw", null, null, null) + _color = list("redws", null, null, null) can_label = 0 /obj/machinery/portable_atmospherics/canister/nitrogen name = "Canister: \[N2\]" From 752bd825acff8e6b140ef13d555c6541ed38b1a3 Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 13:28:48 -0500 Subject: [PATCH 05/37] Cling Test, Syringe Changes, Species Edge Cases - Syringes take 30 seconds to extract blood, 60 seconds if target is in a hardsuit, instant if target is user. - Slime people can no longer be lings. - Species with NO_SCAN not affected by transform sting. - Adds reaction between blood and welding fuel. If the blood is normal, destroys the blood and gives a message, giving a specific message if the blood belonged to a changeling. --- code/game/gamemodes/changeling/changeling.dm | 2 +- .../gamemodes/changeling/powers/tiny_prick.dm | 2 ++ .../game/gamemodes/changeling/traitor_chan.dm | 6 ++--- code/modules/reagents/Chemistry-Recipes.dm | 26 ++++++++++++++++++- .../reagents/reagent_containers/syringes.dm | 24 ++++++++++++++--- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 971fb7f5706..2d26e788c3e 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -9,7 +9,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" config_tag = "changeling" restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent") - protected_species = list("Machine") + protected_species = list("Machine", "Slime People") required_players = 2 required_players_secret = 10 required_enemies = 1 diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index f63fdd6d862..2e6883196bc 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -37,6 +37,8 @@ if(H.species.flags & IS_SYNTHETIC) user << "This won't work on synthetics." return + if(H.species.flags & NO_SCAN) //Prevents transforming slimes and killing them instantly + user << "This won't work on a creature with abnormal genetic material." if(!isturf(user.loc)) return if(get_dist(user, target) > (user.mind.changeling.sting_range)) diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index 193a2e3574d..ce4c8f77887 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -7,7 +7,7 @@ required_players_secret = 10 required_enemies = 2 recommended_enemies = 3 - var/protected_species_changeling = list("Machine") + var/protected_species_changeling = list("Machine", "Slime People") /datum/game_mode/traitor/changeling/announce() world << "The current game mode is - Traitor+Changeling!" @@ -24,11 +24,11 @@ for(var/job in restricted_jobs)//Removing robots from the list if(player.assigned_role == job) possible_changelings -= player - + for(var/mob/new_player/player in player_list) if((player.mind in possible_changelings) && (player.client.prefs.species in protected_species_changeling)) possible_changelings -= player.mind - + if(possible_changelings.len>0) var/datum/mind/changeling = pick(possible_changelings) //possible_changelings-=changeling diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index e768546c883..fafb26fedd2 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -730,7 +730,31 @@ datum required_reagents = list("chlorine" = 1, "hydrogen" = 1, "nitrogen" = 1) result_amount = 3 - +///////Changeling Blood Test///////////// + changeling_test + name = "Changeling blood test" + id = "changelingblood" + result = "blood" + required_reagents = list("blood" = 5) + required_catalysts = list("fuel") + result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred. + on_reaction(var/datum/reagents/holder, var/created_volume) + if(!holder.reagent_list) //reagent_list is not null + return + var/datum/reagent/blood/B = locate() in holder.reagent_list + if(!B) //B is not null + return + var/mob/living/carbon/human/H = B.data["donor"] + if(!H) //H is not null. + return + if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling. + for(var/mob/M in viewers(get_turf_loc(holder.my_atom), null)) + M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2) + else + for(var/mob/M in viewers(get_turf_loc(holder.my_atom), null)) + M.show_message( "The blood seems to break apart in the fuel.", 1) + holder.del_reagent("blood") + return /////////////////////////////////////OLD SLIME CORE REACTIONS /////////////////////////////// /* slimepepper diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index a7332fc5b92..e24bcb4c90a 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -90,6 +90,23 @@ user << "\red You are unable to locate any blood." return + + var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port. + if(istype(target,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = T + if((H.species.bloodflags & BLOOD_SLIME) || (H.species.flags & NO_BLOOD)) + usr << "You are unable to locate any blood." + return + if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) + time = 60 + if(target == user) + time = 0 + else + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] is trying to take a blood sample from []!", user, target), 1) + if(!do_mob(user, target, time)) + return + var/datum/reagent/B if(istype(T,/mob/living/carbon/human)) var/mob/living/carbon/human/H = T @@ -105,9 +122,10 @@ src.reagents.update_total() src.on_reagent_change() src.reagents.handle_reactions() - user << "\blue You take a blood sample from [target]" - for(var/mob/O in viewers(4, user)) - O.show_message("\red [user] takes a blood sample from [target].", 1) + + user << "\blue You take a blood sample from [target]" + for(var/mob/O in viewers(4, user)) + O.show_message("\red [user] takes a blood sample from [target].", 1) else //if not mob if(!target.reagents.total_volume) From e10be98880c0a39d43d4e385c5b20640fe625ef5 Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 15:50:10 -0500 Subject: [PATCH 06/37] Tones down chance for AI kill objective. Seeing a lot of rounds with 3-4 traitors being tasked with killing the AI, that's more than a little bit problematic. --- code/game/gamemodes/changeling/changeling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 2d26e788c3e..ddb2a228a06 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -105,7 +105,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.objectives += debrain_objective var/list/active_ais = active_ais() - if(active_ais.len && prob(100/num_players())) + if(active_ais.len && prob(100/(num_players()*3))) var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = changeling destroy_objective.find_target() From 4e15500d4501a842e9fc451c7c5a9cca232f982c Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 15:53:04 -0500 Subject: [PATCH 07/37] Decrease chance for Destroy AI objective. A lot of autotraitor/traitor+ling rounds have had most of the traitors having to kill the AI. --- code/game/gamemodes/traitor/traitor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 150911e29d6..604f1b7fde4 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -107,7 +107,7 @@ assign_exchange_role(exchange_blue) else var/list/active_ais = active_ais() - if(active_ais.len && prob(100/num_players())) + if(active_ais.len && prob(100/(num_players()*3))) var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = traitor destroy_objective.find_target() From 879190b98b898315c5e3985f27a604b7577bd193 Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 15:56:21 -0500 Subject: [PATCH 08/37] Minor objective fix - Fixes traitors with the exchange/backstab objectives getting the "die a glorious death" objective. --- code/game/gamemodes/traitor/traitor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 604f1b7fde4..227a6bb25c2 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -143,7 +143,7 @@ traitor.objectives += steal_objective switch(rand(1,100)) if(1 to 30) // Die glorious death - if (!(locate(/datum/objective/die) in traitor.objectives) && !(locate(/datum/objective/steal) in traitor.objectives)) + if (!(locate(/datum/objective/die) in traitor.objectives) && !(locate(/datum/objective/steal) in traitor.objectives) && !(locate(/datum/objective/steal/exchange) in traitor.objectives) && !(locate(/datum/objective/steal/exchange/backstab) in traitor.objectives)) var/datum/objective/die/die_objective = new die_objective.owner = traitor traitor.objectives += die_objective From 2df5e97a7ed887e4e521d4ffb6c78b88b7a1a458 Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 16:07:18 -0500 Subject: [PATCH 09/37] Flat chance for Destroy AI num_players() proc isn't particularly nice during autotraitor, flat 10% chance instead. --- code/game/gamemodes/traitor/traitor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 227a6bb25c2..52a398f19fc 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -107,7 +107,7 @@ assign_exchange_role(exchange_blue) else var/list/active_ais = active_ais() - if(active_ais.len && prob(100/(num_players()*3))) + if(active_ais.len && prob(10)) // Leaving this at a flat chance for now, problems with the num_players() proc. var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = traitor destroy_objective.find_target() From 59975a19492fff993664ee2837554727036aa07f Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 16:15:21 -0500 Subject: [PATCH 10/37] Flat chance for Destroy AI Prevents problem with it always being assigned mid-round due to the num_players() proc being designed for roundstart. --- code/game/gamemodes/changeling/changeling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index ddb2a228a06..f780594701c 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -105,7 +105,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.objectives += debrain_objective var/list/active_ais = active_ais() - if(active_ais.len && prob(100/(num_players()*3))) + if(active_ais.len && prob(10)) // num_players() proc is designed for roundstart, changed to fixed value to prevent problems with mid-round objective randomization. var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = changeling destroy_objective.find_target() From e900f12d8ce82fc2b65b4e501f5062843efc929e Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 16:43:05 -0500 Subject: [PATCH 11/37] Destroy AI Name Fix - Target AI will now show name after the AI changes its name, rather than its original name. --- code/game/gamemodes/objective.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 964001722af..f80b943cf76 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -743,7 +743,7 @@ datum/objective/destroy var/mob/living/silicon/ai/target_ai = pick(possible_targets) target = target_ai.mind if(target && target.current) - explanation_text = "Destroy [target.name], the experimental AI." + explanation_text = "Destroy [target.current.real_name], the experimental AI." else explanation_text = "Free Objective" return target From cd37a7fe1babf0803b45203017a05188ea1cc809 Mon Sep 17 00:00:00 2001 From: DZD Date: Mon, 9 Feb 2015 18:24:34 -0500 Subject: [PATCH 12/37] Fixes merge conflict Fixes merge conflict with icons/obj/weapons.dmi --- icons/obj/weapons.dmi | Bin 41408 -> 42546 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index e2f6452cdcd3a90180609608af89d1f9083eeac6..f441c3d5ac4bd802ff66edc6b18bc416fcb04cec 100644 GIT binary patch delta 22250 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 YfESn#s+BCuiy`ncKXcx=#Ly+;Kiw$%wEzGB delta 21067 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 Date: Mon, 9 Feb 2015 22:41:20 -0500 Subject: [PATCH 13/37] Tuned Singuloth Knight item balance. --- code/game/objects/items/weapons/twohanded.dm | 42 ++++++++++---------- code/game/objects/items/weapons/weaponry.dm | 5 +++ code/modules/admin/verbs/debug.dm | 2 +- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index f38c9b477f3..4d80110cc2a 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -444,7 +444,7 @@ obj/item/weapon/twohanded/ no_embed = 1 force = 5 force_unwielded = 5 - force_wielded = 20 + force_wielded = 30 throwforce = 15 throw_range = 1 w_class = 5 @@ -475,29 +475,31 @@ obj/item/weapon/twohanded/ /obj/item/weapon/twohanded/knighthammer/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) if(!proximity) return - if(wielded) - if(charged == 5) - charged = 0 - if(istype(A, /mob/living/)) - var/mob/living/Z = A - if(Z.health < 1) - Z.visible_message("[Z.name] was blown to peices by the power of [src.name]!", \ - "You feel a powerful blow rip you apart!", \ - "You hear a heavy impact and the sound of ripping flesh!.") - Z.gib() - else - Z.take_organ_damage(0,30) - Z.visible_message("[Z.name] was sent flying by a blow from the [src.name]!", \ - "You feel a powerful blow connect with your body and send you flying!", \ - "You hear something heavy impact flesh!.") - var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src))) - Z.throw_at(throw_target, 200, 4) - else if(istype(A, /turf/simulated/wall)) + if(charged == 5) + charged = 0 + if(istype(A, /mob/living/)) + var/mob/living/Z = A + if(Z.health >= 1) + Z.visible_message("[Z.name] was sent flying by a blow from the [src.name]!", \ + "You feel a powerful blow connect with your body and send you flying!", \ + "You hear something heavy impact flesh!.") + var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src))) + Z.throw_at(throw_target, 200, 4) + playsound(user, 'sound/weapons/marauder.ogg', 50, 1) + else if(wielded && Z.health < 1) + Z.visible_message("[Z.name] was blown to peices by the power of [src.name]!", \ + "You feel a powerful blow rip you apart!", \ + "You hear a heavy impact and the sound of ripping flesh!.") + Z.gib() + playsound(user, 'sound/weapons/marauder.ogg', 50, 1) + if(wielded) + if(istype(A, /turf/simulated/wall)) var/turf/simulated/wall/Z = A Z.ex_act(2) charged = 3 + playsound(user, 'sound/weapons/marauder.ogg', 50, 1) else if (istype(A, /obj/structure) || istype(A, /obj/mecha/)) var/obj/Z = A Z.ex_act(2) charged = 3 - playsound(user, 'sound/weapons/marauder.ogg', 50, 1) + playsound(user, 'sound/weapons/marauder.ogg', 50, 1) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 43618e46b73..c420450e5f4 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -113,6 +113,11 @@ viewers(user) << "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide." return(BRUTELOSS) +/obj/item/weapon/claymore/ceremonial + name = "ceremonial claymore" + desc = "An engraved and fancy version of the claymore. It appears to be less sharp than it's more functional cousin." + force = 20 + /obj/item/weapon/katana name = "katana" desc = "Woefully underpowered in D20" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index abd1f40f15a..ce1cde9640f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -1025,7 +1025,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/cyber(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/singuloth(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/claymore(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/weapon/claymore/ceremonial(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(M), slot_s_store) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/knighthammer(M), slot_back) From d708d53a6cfd102bbc120a8d4c69f463a9dd8c79 Mon Sep 17 00:00:00 2001 From: Artorp Date: Tue, 10 Feb 2015 07:32:14 +0100 Subject: [PATCH 14/37] Fixes ambience sound preference --- code/game/area/areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 3c04e9cf951..70909088ce0 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -355,7 +355,7 @@ thunk(L) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch - if(L && L.client && (L.client.prefs.toggles & SOUND_AMBIENCE)) + if(L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE)) if(!L.client.ambience_playing) L.client.ambience_playing = 1 L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2) From e3de04412e0aa7282b9a7d77e53c077078b98ce3 Mon Sep 17 00:00:00 2001 From: Artorp Date: Tue, 10 Feb 2015 07:47:58 +0100 Subject: [PATCH 15/37] Fixes detective polietape --- code/game/objects/items/policetape.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm index 8a1cc09c7ec..b26ae8cb769 100644 --- a/code/game/objects/items/policetape.dm +++ b/code/game/objects/items/policetape.dm @@ -27,7 +27,7 @@ /obj/item/tape/police name = "police tape" desc = "A length of police tape. Do not cross." - req_access = list(access_security) + req_one_access = list(access_security,access_forensics_lockers) icon_base = "police" /obj/item/taperoll/engineering From 236552fb8163ab1527629a1d5cccd9b1ecaf44f7 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Tue, 10 Feb 2015 05:18:59 -0500 Subject: [PATCH 16/37] Fixes Alternate Job Titles --- code/modules/client/preferences_mysql.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index c4f86593d10..171353f7eb9 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -186,7 +186,7 @@ firstquery.Execute() while(firstquery.NextRow()) if(text2num(firstquery.item[1]) == default_slot) - var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET OOC_Notes='[sql_sanitize_text(metadata)]',real_name='[sql_sanitize_text(real_name)]',name_is_always_random='[be_random_name]',gender='[gender]',age='[age]',species='[sql_sanitize_text(species)]',language='[sql_sanitize_text(language)]',hair_red='[r_hair]',hair_green='[g_hair]',hair_blue='[b_hair]',facial_red='[r_facial]',facial_green='[g_facial]',facial_blue='[b_facial]',skin_tone='[s_tone]',skin_red='[r_skin]',skin_green='[g_skin]',skin_blue='[b_skin]',hair_style_name='[sql_sanitize_text(h_style)]',facial_style_name='[sql_sanitize_text(f_style)]',eyes_red='[r_eyes]',eyes_green='[g_eyes]',eyes_blue='[b_eyes]',underwear='[underwear]',undershirt='[undershirt]',backbag='[backbag]',b_type='[b_type]',alternate_option='[alternate_option]',job_support_high='[job_support_high]',job_support_med='[job_support_med]',job_support_low='[job_support_low]',job_medsci_high='[job_medsci_high]',job_medsci_med='[job_medsci_med]',job_medsci_low='[job_medsci_low]',job_engsec_high='[job_engsec_high]',job_engsec_med='[job_engsec_med]',job_engsec_low='[job_engsec_low]',job_karma_high='[job_karma_high]',job_karma_med='[job_karma_med]',job_karma_low='[job_karma_low]',flavor_text='[sql_sanitize_text(flavor_text)]',med_record='[sql_sanitize_text(med_record)]',sec_record='[sql_sanitize_text(sec_record)]',gen_record='[sql_sanitize_text(gen_record)]',player_alt_titles='[sql_sanitize_text(playertitlelist)]',be_special='[be_special]',disabilities='[disabilities]',organ_data='[organlist]',nanotrasen_relation='[nanotrasen_relation]', speciesprefs='[speciesprefs]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'") + var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET OOC_Notes='[sql_sanitize_text(metadata)]',real_name='[sql_sanitize_text(real_name)]',name_is_always_random='[be_random_name]',gender='[gender]',age='[age]',species='[sql_sanitize_text(species)]',language='[sql_sanitize_text(language)]',hair_red='[r_hair]',hair_green='[g_hair]',hair_blue='[b_hair]',facial_red='[r_facial]',facial_green='[g_facial]',facial_blue='[b_facial]',skin_tone='[s_tone]',skin_red='[r_skin]',skin_green='[g_skin]',skin_blue='[b_skin]',hair_style_name='[sql_sanitize_text(h_style)]',facial_style_name='[sql_sanitize_text(f_style)]',eyes_red='[r_eyes]',eyes_green='[g_eyes]',eyes_blue='[b_eyes]',underwear='[underwear]',undershirt='[undershirt]',backbag='[backbag]',b_type='[b_type]',alternate_option='[alternate_option]',job_support_high='[job_support_high]',job_support_med='[job_support_med]',job_support_low='[job_support_low]',job_medsci_high='[job_medsci_high]',job_medsci_med='[job_medsci_med]',job_medsci_low='[job_medsci_low]',job_engsec_high='[job_engsec_high]',job_engsec_med='[job_engsec_med]',job_engsec_low='[job_engsec_low]',job_karma_high='[job_karma_high]',job_karma_med='[job_karma_med]',job_karma_low='[job_karma_low]',flavor_text='[sql_sanitize_text(flavor_text)]',med_record='[sql_sanitize_text(med_record)]',sec_record='[sql_sanitize_text(sec_record)]',gen_record='[sql_sanitize_text(gen_record)]',player_alt_titles='[playertitlelist]',be_special='[be_special]',disabilities='[disabilities]',organ_data='[organlist]',nanotrasen_relation='[nanotrasen_relation]', speciesprefs='[speciesprefs]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'") if(!query.Execute()) var/err = query.ErrorMsg() log_game("SQL ERROR during character slot saving. Error : \[[err]\]\n") From 3cb4f40d87689ce15717b2a6a403a16933fe2a3f Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Tue, 10 Feb 2015 05:40:48 -0500 Subject: [PATCH 17/37] Fixes #282 --- code/game/supplyshuttle.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 93449c76156..6a649a098f8 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -210,15 +210,14 @@ var/list/mechtoys = list( if(slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense points += points_per_slip find_slip = 0 - continue // Sell phoron - if(istype(A, /obj/item/stack/sheet/mineral/plasma)) + else if(istype(A, /obj/item/stack/sheet/mineral/plasma)) var/obj/item/stack/sheet/mineral/plasma/P = A plasma_count += P.amount // Sell platinum - if(istype(A, /obj/item/stack/sheet/mineral/platinum)) + else if(istype(A, /obj/item/stack/sheet/mineral/platinum)) var/obj/item/stack/sheet/mineral/platinum/P = A plat_count += P.amount From dd54bf52a4e51cc73199f3a61bff1f2cb5dda36b Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Tue, 10 Feb 2015 07:32:14 -0500 Subject: [PATCH 18/37] [Feature] Food Carts Adds brand new Food Carts! - Can carry 6 food items and 6 drink items - One spawns in the kitchen, additional ones may be ordered from cargo for 10 supply points each - Thanks to Tigercat2000 for the base sprite image Removes the OPENCONTAINER flag and transfer amount from the engicart. - This resolves a runtime only Cole would encounter, but still won't let him put vodka in the engicart. --- code/datums/supplypacks.dm | 2413 +++++++++++----------- code/game/objects/structures/engicart.dm | 3 - code/game/objects/structures/foodcart.dm | 216 ++ icons/obj/foodcart.dmi | Bin 0 -> 1049 bytes maps/cyberiad.dmm | 3 +- paradise.dme | 3 +- 6 files changed, 1429 insertions(+), 1209 deletions(-) create mode 100644 code/game/objects/structures/foodcart.dm create mode 100644 icons/obj/foodcart.dmi diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 5c6ef778390..19a01eb7a6e 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1,1204 +1,1209 @@ -//SUPPLY PACKS -//NOTE: only secure crate types use the access var (and are lockable) -//NOTE: hidden packs only show up when the computer has been hacked. -//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards. -//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle. -//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points. - -var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Medical / Science","Hydroponics","Organic") - -/datum/supply_packs - var/name = null - var/list/contains = list() - var/manifest = "" - var/amount = null - var/cost = null - var/containertype = null - var/containername = null - var/access = null - var/hidden = 0 - var/contraband = 0 - var/group = "Operations" - -/datum/supply_packs/New() - manifest += "

" - -/datum/supply_packs/specialops - name = "Special Ops supplies" - contains = list(/obj/item/weapon/storage/box/emps, - /obj/item/weapon/grenade/smokebomb, - /obj/item/weapon/grenade/smokebomb, - /obj/item/weapon/grenade/smokebomb, - /obj/item/weapon/pen/paralysis, - /obj/item/weapon/grenade/chem_grenade/incendiary) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Special Ops crate" - group = "Security" - hidden = 1 - -/datum/supply_packs/syndicate - name = "ERROR_NULL_ENTRY" - contains = list(/obj/item/weapon/storage/box/syndicate) - cost = 140 - containertype = /obj/structure/closet/crate - containername = "crate" - hidden = 1 - -/datum/supply_packs/food - name = "Food crate" - contains = list(/obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/snacks/flour, - /obj/item/weapon/reagent_containers/food/drinks/milk, - /obj/item/weapon/reagent_containers/food/drinks/milk, - /obj/item/weapon/storage/fancy/egg_box, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana) - cost = 10 - containertype = /obj/structure/closet/crate/freezer - containername = "Food crate" - group = "Hospitality" - -/datum/supply_packs/monkey - name = "Monkey crate" - contains = list (/obj/item/weapon/storage/box/monkeycubes) - cost = 20 - containertype = /obj/structure/closet/crate/freezer - containername = "Monkey crate" - group = "Hydroponics" - -/datum/supply_packs/farwa - name = "Farwa crate" - contains = list (/obj/item/weapon/storage/box/farwacubes) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "Farwa crate" - group = "Hydroponics" - -/datum/supply_packs/skrell - name = "Neaera crate" - contains = list (/obj/item/weapon/storage/box/neaeracubes) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "Neaera crate" - group = "Hydroponics" - -/datum/supply_packs/stok - name = "Stok crate" - contains = list (/obj/item/weapon/storage/box/stokcubes) - cost = 30 - containertype = /obj/structure/closet/crate/freezer - containername = "Stok crate" - group = "Hydroponics" - -/datum/supply_packs/beanbagammo - name = "Beanbag shells" - contains = list(/obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag, - /obj/item/ammo_casing/shotgun/beanbag) - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Beanbag shells" - group = "Security" - -/datum/supply_packs/toner - name = "Toner Cartridges" - contains = list(/obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner) - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Toner Cartridges" - group = "Operations" - -/datum/supply_packs/party - name = "Party equipment" - contains = list(/obj/item/weapon/storage/box/drinkingglasses, - /obj/item/weapon/reagent_containers/food/drinks/shaker, - /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, - /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, - /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, - /obj/item/weapon/lipstick/random, - /obj/item/weapon/reagent_containers/food/drinks/cans/ale, - /obj/item/weapon/reagent_containers/food/drinks/cans/ale, - /obj/item/weapon/reagent_containers/food/drinks/cans/beer, - /obj/item/weapon/reagent_containers/food/drinks/cans/beer, - /obj/item/weapon/reagent_containers/food/drinks/cans/beer, - /obj/item/weapon/reagent_containers/food/drinks/cans/beer) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Party equipment" - group = "Hospitality" - -/datum/supply_packs/internals - name = "Internals crate" - contains = list(/obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/weapon/tank/air, - /obj/item/weapon/tank/air, - /obj/item/weapon/tank/air) - cost = 10 - containertype = /obj/structure/closet/crate/internals - containername = "Internals crate" - group = "Engineering" - -/datum/supply_packs/evacuation - name = "Emergency equipment" - contains = list(/obj/item/weapon/storage/toolbox/emergency, - /obj/item/weapon/storage/toolbox/emergency, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/weapon/tank/emergency_oxygen, - /obj/item/weapon/tank/emergency_oxygen, - /obj/item/weapon/tank/emergency_oxygen, - /obj/item/weapon/tank/emergency_oxygen, - /obj/item/weapon/tank/emergency_oxygen, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas) - cost = 35 - containertype = /obj/structure/closet/crate/internals - containername = "Emergency Crate" - group = "Engineering" - -/datum/supply_packs/inflatable - name = "Inflatable barriers" - contains = list(/obj/item/weapon/storage/briefcase/inflatable, - /obj/item/weapon/storage/briefcase/inflatable, - /obj/item/weapon/storage/briefcase/inflatable) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Inflatable Barrier Crate" - group = "Engineering" - -/datum/supply_packs/janitor - name = "Janitorial supplies" - contains = list(/obj/item/weapon/reagent_containers/glass/bucket, - /obj/item/weapon/reagent_containers/glass/bucket, - /obj/item/weapon/reagent_containers/glass/bucket, - /obj/item/weapon/mop, - /obj/item/weapon/caution, - /obj/item/weapon/caution, - /obj/item/weapon/caution, - /obj/item/weapon/storage/bag/trash, - /obj/item/weapon/reagent_containers/spray/cleaner, - /obj/item/weapon/reagent_containers/glass/rag, - /obj/item/weapon/grenade/chem_grenade/cleaner, - /obj/item/weapon/grenade/chem_grenade/cleaner, - /obj/item/weapon/grenade/chem_grenade/cleaner) - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Janitorial supplies" - group = "Operations" - -/datum/supply_packs/janicart - name = "Janitorial Cart and Galoshes crate" - contains = list(/obj/structure/janitorialcart, - /obj/item/clothing/shoes/galoshes) - cost = 10 - containertype = /obj/structure/largecrate - containername = "janitorial cart crate" - -/datum/supply_packs/lightbulbs - name = "Replacement lights" - contains = list(/obj/item/weapon/storage/box/lights/mixed, - /obj/item/weapon/storage/box/lights/mixed, - /obj/item/weapon/storage/box/lights/mixed) - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Replacement lights" - group = "Engineering" - -/datum/supply_packs/costume - name = "Standard Costume crate" - contains = list(/obj/item/weapon/storage/backpack/clown, - /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/under/rank/clown, - /obj/item/weapon/bikehorn, - /obj/item/clothing/under/mime, - /obj/item/clothing/shoes/black, - /obj/item/clothing/gloves/color/white, - /obj/item/clothing/mask/gas/mime, - /obj/item/clothing/head/beret, - /obj/item/clothing/suit/suspenders, - /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing) - cost = 10 - containertype = /obj/structure/closet/crate/secure - containername = "Standard Costumes" - access = access_theatre - group = "Operations" - -/datum/supply_packs/wizard - name = "Wizard costume" - contains = list(/obj/item/weapon/staff, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/head/wizard/fake) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Wizard costume crate" - group = "Operations" - -/datum/supply_packs/mule - name = "MULEbot Crate" - contains = list(/obj/machinery/bot/mulebot) - cost = 20 - containertype = /obj/structure/largecrate/mule - containername = "MULEbot Crate" - group = "Operations" - -/datum/supply_packs/cargotrain - name = "Cargo Train Tug" - contains = list(/obj/vehicle/train/cargo/engine) - cost = 45 - containertype = /obj/structure/largecrate - containername = "Cargo Train Tug Crate" - group = "Operations" - -/datum/supply_packs/cargotrailer - name = "Cargo Train Trolley" - contains = list(/obj/vehicle/train/cargo/trolley) - cost = 15 - containertype = /obj/structure/largecrate - containername = "Cargo Train Trolley Crate" - group = "Operations" - -/datum/supply_packs/hydroponics // -- Skie - name = "Hydroponics Supply Crate" - contains = list(/obj/item/weapon/reagent_containers/spray/plantbgone, - /obj/item/weapon/reagent_containers/spray/plantbgone, - /obj/item/weapon/reagent_containers/glass/bottle/ammonia, - /obj/item/weapon/reagent_containers/glass/bottle/ammonia, - /obj/item/weapon/hatchet, - /obj/item/weapon/minihoe, - /obj/item/device/analyzer/plant_analyzer, - /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron, - /obj/item/weapon/minihoe, - /obj/item/weapon/storage/box/botanydisk - ) // Updated with new things - cost = 15 - containertype = /obj/structure/closet/crate/hydroponics - containername = "Hydroponics crate" - access = access_hydroponics - group = "Hydroponics" - -//////// livestock -/datum/supply_packs/organic/cow - name = "Cow Crate" - cost = 30 - containertype = /obj/structure/largecrate/cow - containername = "cow crate" - group = "Organic" - -/datum/supply_packs/organic/goat - name = "Goat Crate" - cost = 25 - containertype = /obj/structure/largecrate/goat - containername = "goat crate" - group = "Organic" - -/datum/supply_packs/organic/chicken - name = "Chicken Crate" - cost = 20 - containertype = /obj/structure/largecrate/chick - containername = "chicken crate" - group = "Organic" - -/datum/supply_packs/organic/corgi - name = "Corgi Crate" - cost = 50 - containertype = /obj/structure/largecrate/lisa - containername = "corgi crate" - group = "Organic" - -/datum/supply_packs/organic/cat - name = "Cat crate" - cost = 50 //Cats are worth as much as corgis. - containertype = /obj/structure/largecrate/cat - containername = "cat crate" - group = "Organic" - -/datum/supply_packs/organic/fox - name = "Fox Crate" - cost = 55 //Foxes are cool. - containertype = /obj/structure/closet/critter/fox - containername = "fox crate" - group = "Organic" - -/datum/supply_packs/seeds - name = "Seeds Crate" - contains = list(/obj/item/seeds/chiliseed, - /obj/item/seeds/berryseed, - /obj/item/seeds/cornseed, - /obj/item/seeds/eggplantseed, - /obj/item/seeds/tomatoseed, - /obj/item/seeds/soyaseed, - /obj/item/seeds/wheatseed, - /obj/item/seeds/carrotseed, - /obj/item/seeds/sunflowerseed, - /obj/item/seeds/chantermycelium, - /obj/item/seeds/potatoseed, - /obj/item/seeds/sugarcaneseed) - cost = 10 - containertype = /obj/structure/closet/crate/hydroponics - containername = "Seeds crate" - access = access_hydroponics - group = "Hydroponics" - -/datum/supply_packs/weedcontrol - name = "Weed Control Crate" - contains = list(/obj/item/weapon/scythe, - /obj/item/clothing/mask/gas, - /obj/item/weapon/grenade/chem_grenade/antiweed, - /obj/item/weapon/grenade/chem_grenade/antiweed) - cost = 20 - containertype = /obj/structure/closet/crate/secure/hydrosec - containername = "Weed control crate" - access = access_hydroponics - group = "Hydroponics" - -/datum/supply_packs/exoticseeds - name = "Exotic Seeds Crate" - contains = list(/obj/item/seeds/nettleseed, - /obj/item/seeds/replicapod, - /obj/item/seeds/replicapod, - /obj/item/seeds/replicapod, - /obj/item/seeds/plumpmycelium, - /obj/item/seeds/libertymycelium, - /obj/item/seeds/amanitamycelium, - /obj/item/seeds/reishimycelium, - /obj/item/seeds/bananaseed, - /obj/item/seeds/eggyseed, - /obj/item/seeds/bloodtomatoseed) - cost = 15 - containertype = /obj/structure/closet/crate/hydroponics - containername = "Exotic Seeds crate" - access = access_hydroponics - group = "Hydroponics" - -/datum/supply_packs/medical - name = "Medical crate" - contains = list(/obj/item/weapon/storage/firstaid/regular, - /obj/item/weapon/storage/firstaid/fire, - /obj/item/weapon/storage/firstaid/toxin, - /obj/item/weapon/storage/firstaid/o2, - /obj/item/weapon/storage/firstaid/adv, - /obj/item/weapon/reagent_containers/glass/bottle/antitoxin, - /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, - /obj/item/weapon/reagent_containers/glass/bottle/stoxin, - /obj/item/weapon/storage/box/syringes, - /obj/item/weapon/storage/box/autoinjectors) - cost = 10 - containertype = /obj/structure/closet/crate/medical - containername = "Medical crate" - group = "Medical / Science" - -/datum/supply_packs/virus - name = "Virus crate" -/* contains = list(/obj/item/weapon/reagent_containers/glass/bottle/flu_virion, - /obj/item/weapon/reagent_containers/glass/bottle/cold, - /obj/item/weapon/reagent_containers/glass/bottle/epiglottis_virion, - /obj/item/weapon/reagent_containers/glass/bottle/liver_enhance_virion, - /obj/item/weapon/reagent_containers/glass/bottle/fake_gbs, - /obj/item/weapon/reagent_containers/glass/bottle/magnitis, - /obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat, - /obj/item/weapon/reagent_containers/glass/bottle/brainrot, - /obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion, - /obj/item/weapon/storage/box/syringes, - /obj/item/weapon/storage/box/beakers, - /obj/item/weapon/reagent_containers/glass/bottle/mutagen)*/ - contains = list(/obj/item/weapon/virusdish/random, - /obj/item/weapon/virusdish/random, - /obj/item/weapon/virusdish/random, - /obj/item/weapon/virusdish/random) - cost = 25 - containertype = "/obj/structure/closet/crate/secure" - containername = "Virus crate" - access = access_cmo - group = "Medical / Science" - -/datum/supply_packs/metal50 - name = "50 Metal Sheets" - contains = list(/obj/item/stack/sheet/metal) - amount = 50 - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Metal sheets crate" - group = "Engineering" - -/datum/supply_packs/glass50 - name = "50 Glass Sheets" - contains = list(/obj/item/stack/sheet/glass) - amount = 50 - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Glass sheets crate" - group = "Engineering" - -/datum/supply_packs/electrical - name = "Electrical maintenance crate" - contains = list(/obj/item/weapon/storage/toolbox/electrical, - /obj/item/weapon/storage/toolbox/electrical, - /obj/item/clothing/gloves/yellow, - /obj/item/clothing/gloves/yellow, - /obj/item/weapon/stock_parts/cell, - /obj/item/weapon/stock_parts/cell, - /obj/item/weapon/stock_parts/cell/high, - /obj/item/weapon/stock_parts/cell/high) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "Electrical maintenance crate" - group = "Engineering" - -/datum/supply_packs/mechanical - name = "Mechanical maintenance crate" - contains = list(/obj/item/weapon/storage/belt/utility/full, - /obj/item/weapon/storage/belt/utility/full, - /obj/item/weapon/storage/belt/utility/full, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/hardhat) - cost = 10 - containertype = /obj/structure/closet/crate - containername = "Mechanical maintenance crate" - group = "Engineering" - -/datum/supply_packs/watertank - name = "Water tank crate" - contains = list(/obj/structure/reagent_dispensers/watertank) - cost = 8 - containertype = /obj/structure/largecrate - containername = "water tank crate" - group = "Hydroponics" - -/datum/supply_packs/fueltank - name = "Fuel tank crate" - contains = list(/obj/structure/reagent_dispensers/fueltank) - cost = 8 - containertype = /obj/structure/largecrate - containername = "fuel tank crate" - group = "Engineering" - -/datum/supply_packs/coolanttank - name = "Coolant tank crate" - contains = list(/obj/structure/reagent_dispensers/coolanttank) - cost = 16 - containertype = /obj/structure/largecrate - containername = "coolant tank crate" - group = "Medical / Science" - - -/datum/supply_packs/solar - name = "Solar Pack crate" - contains = list(/obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller - /obj/item/weapon/circuitboard/solar_control, - /obj/item/weapon/tracker_electronics, - /obj/item/weapon/paper/solar) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "solar pack crate" - group = "Engineering" - -/datum/supply_packs/engine - name = "Emitter crate" - contains = list(/obj/machinery/power/emitter, - /obj/machinery/power/emitter) - cost = 10 - containertype = /obj/structure/closet/crate/secure - containername = "Emitter crate" - access = access_ce - group = "Engineering" - -/datum/supply_packs/engine/field_gen - name = "Field Generator crate" - contains = list(/obj/machinery/field_generator, - /obj/machinery/field_generator) - containertype = /obj/structure/closet/crate/secure - containername = "Field Generator crate" - access = access_ce - group = "Engineering" - -/datum/supply_packs/engine/sing_gen - name = "Singularity Generator crate" - contains = list(/obj/machinery/the_singularitygen) - containertype = /obj/structure/closet/crate/secure - containername = "Singularity Generator crate" - access = access_ce - group = "Engineering" - -/datum/supply_packs/engine/collector - name = "Collector crate" - contains = list(/obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector) - containername = "Collector crate" - group = "Engineering" - -/datum/supply_packs/engine/PA - name = "Particle Accelerator crate" - cost = 40 - contains = list(/obj/structure/particle_accelerator/fuel_chamber, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap) - containertype = /obj/structure/closet/crate/secure - containername = "Particle Accelerator crate" - access = access_ce - group = "Engineering" - -/datum/supply_packs/mecha_ripley - name = "Circuit Crate (\"Ripley\" APLU)" - contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair, - /obj/item/weapon/circuitboard/mecha/ripley/main, //TEMPORARY due to lack of circuitboard printer - /obj/item/weapon/circuitboard/mecha/ripley/peripherals) //TEMPORARY due to lack of circuitboard printer - cost = 30 - containertype = /obj/structure/closet/crate/secure - containername = "APLU \"Ripley\" Circuit Crate" - access = access_robotics - group = "Engineering" - -/datum/supply_packs/mecha_odysseus - name = "Circuit Crate (\"Odysseus\")" - contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, //TEMPORARY due to lack of circuitboard printer - /obj/item/weapon/circuitboard/mecha/odysseus/main) //TEMPORARY due to lack of circuitboard printer - cost = 25 - containertype = /obj/structure/closet/crate/secure - containername = "\"Odysseus\" Circuit Crate" - access = access_robotics - group = "Engineering" - - -/datum/supply_packs/robotics - name = "Robotics Assembly Crate" - contains = list(/obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/weapon/storage/toolbox/electrical, - /obj/item/device/flash, - /obj/item/device/flash, - /obj/item/device/flash, - /obj/item/device/flash, - /obj/item/weapon/stock_parts/cell/high, - /obj/item/weapon/stock_parts/cell/high) - cost = 10 - containertype = /obj/structure/closet/crate/secure/gear - containername = "Robotics Assembly" - access = access_robotics - group = "Engineering" - -/datum/supply_packs/plasma - name = "Plasma assembly crate" - contains = list(/obj/item/weapon/tank/plasma, - /obj/item/weapon/tank/plasma, - /obj/item/weapon/tank/plasma, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/transfer_valve, - /obj/item/device/transfer_valve, - /obj/item/device/transfer_valve, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/timer) - cost = 10 - containertype = /obj/structure/closet/crate/secure/plasma - containername = "Plasma assembly crate" - access = access_tox_storage - group = "Medical / Science" - -/datum/supply_packs/weapons - name = "Weapons crate" - contains = list(/obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/gun/energy/laser, - /obj/item/weapon/gun/energy/laser, - /obj/item/weapon/gun/energy/advtaser, - /obj/item/weapon/gun/energy/advtaser, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/storage/box/flashbangs) - cost = 30 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "Weapons crate" - access = access_security - group = "Security" - -/datum/supply_packs/disabler - name = "Disabler Crate" - contains = list(/obj/item/weapon/gun/energy/disabler, - /obj/item/weapon/gun/energy/disabler, - /obj/item/weapon/gun/energy/disabler) - cost = 10 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "disabler crate" - access = access_security - group = "Security" - -/datum/supply_packs/eweapons - name = "Experimental weapons crate" - contains = list(/obj/item/weapon/flamethrower/full, - /obj/item/weapon/tank/plasma, - /obj/item/weapon/tank/plasma, - /obj/item/weapon/tank/plasma, - /obj/item/weapon/grenade/chem_grenade/incendiary, - /obj/item/weapon/grenade/chem_grenade/incendiary, - /obj/item/weapon/grenade/chem_grenade/incendiary) - cost = 25 - containertype = /obj/structure/closet/crate/secure/weapon - containername = "Experimental weapons crate" - access = access_heads - group = "Security" - -/datum/supply_packs/armor - name = "Armor crate" - contains = list(/obj/item/clothing/head/helmet, - /obj/item/clothing/head/helmet, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest) - cost = 15 - containertype = /obj/structure/closet/crate/secure - containername = "Armor crate" - access = access_security - group = "Security" - -/datum/supply_packs/riot - name = "Riot gear crate" - contains = list(/obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/melee/baton/loaded, - /obj/item/weapon/shield/riot, - /obj/item/weapon/shield/riot, - /obj/item/weapon/shield/riot, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/storage/box/flashbangs, - /obj/item/weapon/handcuffs, - /obj/item/weapon/handcuffs, - /obj/item/weapon/handcuffs, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "Riot gear crate" - access = access_armory - group = "Security" - -/datum/supply_packs/loyalty - name = "Loyalty implant crate" - contains = list (/obj/item/weapon/storage/lockbox/loyalty) - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "Loyalty implant crate" - access = access_armory - group = "Security" - -/datum/supply_packs/ballistic - name = "Ballistic gear crate" - contains = list(/obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/weapon/storage/belt/bandolier, - /obj/item/weapon/storage/belt/bandolier, - /obj/item/weapon/gun/projectile/shotgun/combat, - /obj/item/weapon/gun/projectile/shotgun/combat) - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "Ballistic gear crate" - access = access_armory - group = "Security" - -/datum/supply_packs/shotgunammo - name = "Shotgun shells" - contains = list(/obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "Shotgun shells" - access = access_armory - group = "Security" - -/datum/supply_packs/expenergy - name = "Experimental energy gear crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/weapon/gun/energy/gun, - /obj/item/weapon/gun/energy/gun) - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "Experimental energy gear crate" - access = access_armory - group = "Security" - -/datum/supply_packs/exparmor - name = "Experimental armor crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot) - cost = 35 - containertype = /obj/structure/closet/crate/secure - containername = "Experimental armor crate" - access = access_armory - group = "Security" - -/datum/supply_packs/securitybarriers - name = "Security Barriers" - contains = list(/obj/machinery/deployable/barrier, - /obj/machinery/deployable/barrier, - /obj/machinery/deployable/barrier, - /obj/machinery/deployable/barrier) - cost = 20 - containertype = /obj/structure/closet/crate/secure/gear - containername = "Security Barriers crate" - group = "Security" - -/datum/supply_packs/securitybarriers - name = "Shield Generators" - contains = list(/obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen) - cost = 20 - containertype = /obj/structure/closet/crate/secure - containername = "Shield Generators crate" - access = access_teleporter - group = "Security" - -/datum/supply_packs/randomised - var/num_contained = 3 //number of items picked to be contained in a randomised crate - contains = list(/obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat) - name = "Collectable hat crate!" - cost = 200 - containertype = /obj/structure/closet/crate - containername = "Collectable hats crate! Brought to you by Bass.inc!" - group = "Operations" - -/datum/supply_packs/randomised/New() - manifest += "Contains any [num_contained] of:" - ..() - -/datum/supply_packs/artscrafts - name = "Arts and Crafts supplies" - contains = list(/obj/item/weapon/storage/fancy/crayons, - /obj/item/device/camera, - /obj/item/device/camera_film, - /obj/item/device/camera_film, - /obj/item/weapon/storage/photo_album, - /obj/item/weapon/packageWrap, - /obj/item/weapon/reagent_containers/glass/paint/red, - /obj/item/weapon/reagent_containers/glass/paint/green, - /obj/item/weapon/reagent_containers/glass/paint/blue, - /obj/item/weapon/reagent_containers/glass/paint/yellow, - /obj/item/weapon/reagent_containers/glass/paint/violet, - /obj/item/weapon/reagent_containers/glass/paint/black, - /obj/item/weapon/reagent_containers/glass/paint/white, - /obj/item/weapon/reagent_containers/glass/paint/remover, - /obj/item/weapon/contraband/poster, - /obj/item/weapon/wrapping_paper, - /obj/item/weapon/wrapping_paper, - /obj/item/weapon/wrapping_paper) - cost = 10 - containertype = "/obj/structure/closet/crate" - containername = "Arts and Crafts crate" - group = "Operations" - - -/datum/supply_packs/randomised/contraband - num_contained = 6 - contains = list(/obj/item/weapon/storage/pill_bottle/zoom, - /obj/item/weapon/storage/pill_bottle/happy, - /obj/item/weapon/storage/pill_bottle/random_drug_bottle, - /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, - /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims, - /obj/item/weapon/grenade/smokebomb, - /obj/item/clothing/mask/cigarette/cigar/cohiba, - /obj/item/weapon/reagent_containers/food/drinks/cans/ale, - /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, - /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, - /obj/item/weapon/lipstick/random) - - name = "Contraband crate" - cost = 30 - containertype = /obj/structure/closet/crate - containername = "Unlabeled crate" - contraband = 1 - group = "Operations" - -/datum/supply_packs/boxes - name = "Empty Box supplies" - contains = list(/obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box, - /obj/item/weapon/storage/box) - cost = 10 - containertype = "/obj/structure/closet/crate" - containername = "Empty Box crate" - group = "Operations" - -/datum/supply_packs/surgery - name = "Surgery crate" - contains = list(/obj/item/weapon/cautery, - /obj/item/weapon/surgicaldrill, - /obj/item/clothing/mask/breath/medical, - /obj/item/weapon/tank/anesthetic, - /obj/item/weapon/FixOVein, - /obj/item/weapon/hemostat, - /obj/item/weapon/scalpel, - /obj/item/weapon/bonegel, - /obj/item/weapon/retractor, - /obj/item/weapon/bonesetter, - /obj/item/weapon/circular_saw) - cost = 25 - containertype = "/obj/structure/closet/crate/secure" - containername = "Surgery crate" - access = access_medical - group = "Medical / Science" - -/datum/supply_packs/sterile - name = "Sterile equipment crate" - contains = list(/obj/item/clothing/under/rank/medical/green, - /obj/item/clothing/under/rank/medical/green, - /obj/item/weapon/storage/box/masks, - /obj/item/weapon/storage/box/gloves) - cost = 15 - containertype = "/obj/structure/closet/crate" - containername = "Sterile equipment crate" - group = "Medical / Science" - -/datum/supply_packs/randomised/pizza - num_contained = 5 - contains = list(/obj/item/pizzabox/margherita, - /obj/item/pizzabox/mushroom, - /obj/item/pizzabox/meat, - /obj/item/pizzabox/vegetable) - name = "Surprise pack of five dozen pizzas" - cost = 15 - containertype = /obj/structure/closet/crate/freezer - containername = "Pizza crate" - group = "Hospitality" - -/datum/supply_packs/formal_wear - contains = list(/obj/item/clothing/head/that, - /obj/item/clothing/suit/storage/lawyer/bluejacket, - /obj/item/clothing/suit/storage/lawyer/purpjacket, - /obj/item/clothing/under/suit_jacket, - /obj/item/clothing/under/suit_jacket/female, - /obj/item/clothing/under/suit_jacket/really_black, - /obj/item/clothing/under/suit_jacket/red, - /obj/item/clothing/shoes/black, - /obj/item/clothing/shoes/black, - /obj/item/clothing/suit/wcoat) - name = "Formalwear closet" - cost = 30 - containertype = /obj/structure/closet - containername = "Formalwear for the best occasions." - group = "Operations" -/* -/datum/supply_packs/rust_injector - contains = list(/obj/machinery/power/rust_fuel_injector) - name = "RUST fuel injector" - cost = 50 - containertype = /obj/structure/closet/crate/secure/large - containername = "RUST injector crate" - group = "Engineering" - access = access_engine - -/datum/supply_packs/rust_compressor - contains = list(/obj/item/weapon/module/rust_fuel_compressor) - name = "RUST fuel compressor circuitry" - cost = 60 - containertype = /obj/structure/closet/crate/secure - containername = "RUST fuel compressor circuitry" - group = "Engineering" - access = access_engine - -/datum/supply_packs/rust_assembly_port - contains = list(/obj/item/weapon/module/rust_fuel_port) - name = "RUST fuel assembly port circuitry" - cost = 40 - containertype = /obj/structure/closet/crate/secure - containername = "RUST fuel assembly port circuitry" - group = "Engineering" - access = access_engine - -/datum/supply_packs/rust_core - contains = list(/obj/machinery/power/rust_core) - name = "RUST Tokamak Core" - cost = 75 - containertype = /obj/structure/closet/crate/secure/large - containername = "RUST tokamak crate" - group = "Engineering" - access = access_engine -*/ -/datum/supply_packs/shield_gen - contains = list(/obj/item/weapon/circuitboard/shield_gen) - name = "Experimental shield generator circuitry" - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "Experimental shield generator" - group = "Engineering" - access = access_ce - -/datum/supply_packs/shield_cap - contains = list(/obj/item/weapon/circuitboard/shield_cap) - name = "Experimental shield capacitor circuitry" - cost = 50 - containertype = /obj/structure/closet/crate/secure - containername = "Experimental shield capacitor" - group = "Engineering" - access = access_ce - -/datum/supply_packs/eftpos - contains = list(/obj/item/device/eftpos) - name = "EFTPOS scanner" - cost = 10 - containertype = /obj/structure/closet/crate - containername = "EFTPOS crate" - group = "Operations" - -/datum/supply_packs/teg - contains = list(/obj/machinery/power/generator) - name = "Mark I Thermoelectric Generator" - cost = 75 - containertype = /obj/structure/closet/crate/secure/large - containername = "Mk1 TEG crate" - group = "Engineering" - access = access_engine - -/datum/supply_packs/circulator - contains = list(/obj/machinery/atmospherics/binary/circulator) - name = "Binary atmospheric circulator" - cost = 60 - containertype = /obj/structure/closet/crate/secure/large - containername = "Atmospheric circulator crate" - group = "Engineering" - access = access_engine - -/datum/supply_packs/bee_keeper - name = "Beekeeping Crate" - contains = list(/obj/item/beezeez, - /obj/item/beezeez, - /obj/item/weapon/bee_net, - /obj/item/apiary, - /obj/item/queen_bee, - /obj/item/queen_bee, - /obj/item/queen_bee) - cost = 20 - containertype = /obj/structure/closet/crate/hydroponics - containername = "Beekeeping crate" - access = access_hydroponics - group = "Hydroponics" - -/datum/supply_packs/misc/lasertag - name = "Laser Tag Crate" - contains = list(/obj/item/weapon/gun/energy/laser/redtag, - /obj/item/weapon/gun/energy/laser/redtag, - /obj/item/weapon/gun/energy/laser/redtag, - /obj/item/weapon/gun/energy/laser/bluetag, - /obj/item/weapon/gun/energy/laser/bluetag, - /obj/item/weapon/gun/energy/laser/bluetag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/bluetaghelm) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "laser tag crate" - group = "Operations" - -/datum/supply_packs/vending - name = "Bartending Supply Crate" - contains = list(/obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/boozeomat, - /obj/item/weapon/vending_refill/coffee, - /obj/item/weapon/vending_refill/coffee, - /obj/item/weapon/vending_refill/coffee) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "bartending supply crate" - group = "Operations" - -/datum/supply_packs/vending/snack - name = "Snack Supply Crate" - contains = list(/obj/item/weapon/vending_refill/snack, - /obj/item/weapon/vending_refill/snack, - /obj/item/weapon/vending_refill/snack) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "snacks supply crate" - group = "Operations" - -/datum/supply_packs/vending/cola - name = "Softdrinks Supply Crate" - contains = list(/obj/item/weapon/vending_refill/cola, - /obj/item/weapon/vending_refill/cola, - /obj/item/weapon/vending_refill/cola) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "softdrinks supply crate" - group = "Operations" - -/datum/supply_packs/vending/cigarette - name = "Cigarette Supply Crate" - contains = list(/obj/item/weapon/vending_refill/cigarette, - /obj/item/weapon/vending_refill/cigarette, - /obj/item/weapon/vending_refill/cigarette) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "cigarette supply crate" - group = "Operations" - -/datum/supply_packs/autodrobe - name = "Autodrobe Supply crate" - contains = list(/obj/item/weapon/vending_refill/autodrobe, - /obj/item/weapon/vending_refill/autodrobe, - /obj/item/weapon/vending_refill/autodrobe) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "autodrobe supply crate" - group = "Operations" - -/datum/supply_packs/clothingvendor - name = "Clothing Vendor Supply crate" - contains = list(/obj/item/weapon/vending_refill/hatdispenser, - /obj/item/weapon/vending_refill/hatdispenser, - /obj/item/weapon/vending_refill/hatdispenser, - /obj/item/weapon/vending_refill/suitdispenser, - /obj/item/weapon/vending_refill/suitdispenser, - /obj/item/weapon/vending_refill/suitdispenser, - /obj/item/weapon/vending_refill/shoedispenser, - /obj/item/weapon/vending_refill/shoedispenser, - /obj/item/weapon/vending_refill/shoedispenser) - cost = 30 - containertype = /obj/structure/closet/crate - containername = "clothing vendor supply crate" - group = "Operations" - -/datum/supply_packs/mafia - name = "Mafia Supply crate" - contains = list(/obj/item/clothing/suit/browntrenchcoat =1,/obj/item/clothing/suit/blacktrenchcoat =1,/obj/item/clothing/head/fedora/whitefedora =1, - /obj/item/clothing/head/fedora/brownfedora =1,/obj/item/clothing/head/fedora =1,/obj/item/clothing/under/flappers =1,/obj/item/clothing/under/mafia =1,/obj/item/clothing/under/mafia/vest =1,/obj/item/clothing/under/mafia/white =1, - /obj/item/clothing/under/mafia/sue =1,/obj/item/clothing/under/mafia/tan =1, /obj/item/toy/crossbow/tommygun =2) - cost = 15 - containertype = /obj/structure/closet/crate - containername = "mafia supply crate" - group = "Operations" - -/datum/supply_packs/fabric - name = "Fabric crate" - contains = list(/obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric, - /obj/item/weapon/ore/fabric) - cost = 30 - containertype = /obj/structure/closet/crate - containername = "Fabric crate" - group = "Operations" +//SUPPLY PACKS +//NOTE: only secure crate types use the access var (and are lockable) +//NOTE: hidden packs only show up when the computer has been hacked. +//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards. +//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle. +//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points. + +var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Medical / Science","Hydroponics","Organic") + +/datum/supply_packs + var/name = null + var/list/contains = list() + var/manifest = "" + var/amount = null + var/cost = null + var/containertype = null + var/containername = null + var/access = null + var/hidden = 0 + var/contraband = 0 + var/group = "Operations" + +/datum/supply_packs/New() + manifest += "
    " + for(var/path in contains) + if(!path) continue + var/atom/movable/AM = new path() + manifest += "
  • [AM.name]
  • " + AM.loc = null //just to make sure they're deleted by the garbage collector + manifest += "
" + +/datum/supply_packs/specialops + name = "Special Ops supplies" + contains = list(/obj/item/weapon/storage/box/emps, + /obj/item/weapon/grenade/smokebomb, + /obj/item/weapon/grenade/smokebomb, + /obj/item/weapon/grenade/smokebomb, + /obj/item/weapon/pen/paralysis, + /obj/item/weapon/grenade/chem_grenade/incendiary) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Special Ops crate" + group = "Security" + hidden = 1 + +/datum/supply_packs/syndicate + name = "ERROR_NULL_ENTRY" + contains = list(/obj/item/weapon/storage/box/syndicate) + cost = 140 + containertype = /obj/structure/closet/crate + containername = "crate" + hidden = 1 + +/datum/supply_packs/food + name = "Food crate" + contains = list(/obj/item/weapon/reagent_containers/food/snacks/flour, + /obj/item/weapon/reagent_containers/food/snacks/flour, + /obj/item/weapon/reagent_containers/food/snacks/flour, + /obj/item/weapon/reagent_containers/food/snacks/flour, + /obj/item/weapon/reagent_containers/food/drinks/milk, + /obj/item/weapon/reagent_containers/food/drinks/milk, + /obj/item/weapon/storage/fancy/egg_box, + /obj/item/weapon/reagent_containers/food/snacks/grown/banana, + /obj/item/weapon/reagent_containers/food/snacks/grown/banana) + cost = 10 + containertype = /obj/structure/closet/crate/freezer + containername = "Food crate" + group = "Hospitality" + +/datum/supply_packs/monkey + name = "Monkey crate" + contains = list (/obj/item/weapon/storage/box/monkeycubes) + cost = 20 + containertype = /obj/structure/closet/crate/freezer + containername = "Monkey crate" + group = "Hydroponics" + +/datum/supply_packs/farwa + name = "Farwa crate" + contains = list (/obj/item/weapon/storage/box/farwacubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Farwa crate" + group = "Hydroponics" + +/datum/supply_packs/skrell + name = "Neaera crate" + contains = list (/obj/item/weapon/storage/box/neaeracubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Neaera crate" + group = "Hydroponics" + +/datum/supply_packs/stok + name = "Stok crate" + contains = list (/obj/item/weapon/storage/box/stokcubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Stok crate" + group = "Hydroponics" + +/datum/supply_packs/beanbagammo + name = "Beanbag shells" + contains = list(/obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag, + /obj/item/ammo_casing/shotgun/beanbag) + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Beanbag shells" + group = "Security" + +/datum/supply_packs/toner + name = "Toner Cartridges" + contains = list(/obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner) + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Toner Cartridges" + group = "Operations" + +/datum/supply_packs/party + name = "Party equipment" + contains = list(/obj/item/weapon/storage/box/drinkingglasses, + /obj/item/weapon/reagent_containers/food/drinks/shaker, + /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, + /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, + /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, + /obj/item/weapon/lipstick/random, + /obj/item/weapon/reagent_containers/food/drinks/cans/ale, + /obj/item/weapon/reagent_containers/food/drinks/cans/ale, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Party equipment" + group = "Hospitality" + +/datum/supply_packs/internals + name = "Internals crate" + contains = list(/obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/weapon/tank/air, + /obj/item/weapon/tank/air, + /obj/item/weapon/tank/air) + cost = 10 + containertype = /obj/structure/closet/crate/internals + containername = "Internals crate" + group = "Engineering" + +/datum/supply_packs/evacuation + name = "Emergency equipment" + contains = list(/obj/item/weapon/storage/toolbox/emergency, + /obj/item/weapon/storage/toolbox/emergency, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/weapon/tank/emergency_oxygen, + /obj/item/weapon/tank/emergency_oxygen, + /obj/item/weapon/tank/emergency_oxygen, + /obj/item/weapon/tank/emergency_oxygen, + /obj/item/weapon/tank/emergency_oxygen, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas) + cost = 35 + containertype = /obj/structure/closet/crate/internals + containername = "Emergency Crate" + group = "Engineering" + +/datum/supply_packs/inflatable + name = "Inflatable barriers" + contains = list(/obj/item/weapon/storage/briefcase/inflatable, + /obj/item/weapon/storage/briefcase/inflatable, + /obj/item/weapon/storage/briefcase/inflatable) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Inflatable Barrier Crate" + group = "Engineering" + +/datum/supply_packs/janitor + name = "Janitorial supplies" + contains = list(/obj/item/weapon/reagent_containers/glass/bucket, + /obj/item/weapon/reagent_containers/glass/bucket, + /obj/item/weapon/reagent_containers/glass/bucket, + /obj/item/weapon/mop, + /obj/item/weapon/caution, + /obj/item/weapon/caution, + /obj/item/weapon/caution, + /obj/item/weapon/storage/bag/trash, + /obj/item/weapon/reagent_containers/spray/cleaner, + /obj/item/weapon/reagent_containers/glass/rag, + /obj/item/weapon/grenade/chem_grenade/cleaner, + /obj/item/weapon/grenade/chem_grenade/cleaner, + /obj/item/weapon/grenade/chem_grenade/cleaner) + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Janitorial supplies" + group = "Operations" + +/datum/supply_packs/janicart + name = "Janitorial Cart and Galoshes crate" + contains = list(/obj/structure/janitorialcart, + /obj/item/clothing/shoes/galoshes) + cost = 10 + containertype = /obj/structure/largecrate + containername = "janitorial cart crate" + +/datum/supply_packs/lightbulbs + name = "Replacement lights" + contains = list(/obj/item/weapon/storage/box/lights/mixed, + /obj/item/weapon/storage/box/lights/mixed, + /obj/item/weapon/storage/box/lights/mixed) + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Replacement lights" + group = "Engineering" + +/datum/supply_packs/costume + name = "Standard Costume crate" + contains = list(/obj/item/weapon/storage/backpack/clown, + /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/under/rank/clown, + /obj/item/weapon/bikehorn, + /obj/item/clothing/under/mime, + /obj/item/clothing/shoes/black, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/mask/gas/mime, + /obj/item/clothing/head/beret, + /obj/item/clothing/suit/suspenders, + /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing) + cost = 10 + containertype = /obj/structure/closet/crate/secure + containername = "Standard Costumes" + access = access_theatre + group = "Operations" + +/datum/supply_packs/wizard + name = "Wizard costume" + contains = list(/obj/item/weapon/staff, + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/shoes/sandal, + /obj/item/clothing/head/wizard/fake) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Wizard costume crate" + group = "Operations" + +/datum/supply_packs/mule + name = "MULEbot Crate" + contains = list(/obj/machinery/bot/mulebot) + cost = 20 + containertype = /obj/structure/largecrate/mule + containername = "MULEbot Crate" + group = "Operations" + +/datum/supply_packs/cargotrain + name = "Cargo Train Tug" + contains = list(/obj/vehicle/train/cargo/engine) + cost = 45 + containertype = /obj/structure/largecrate + containername = "Cargo Train Tug Crate" + group = "Operations" + +/datum/supply_packs/cargotrailer + name = "Cargo Train Trolley" + contains = list(/obj/vehicle/train/cargo/trolley) + cost = 15 + containertype = /obj/structure/largecrate + containername = "Cargo Train Trolley Crate" + group = "Operations" + +/datum/supply_packs/hydroponics // -- Skie + name = "Hydroponics Supply Crate" + contains = list(/obj/item/weapon/reagent_containers/spray/plantbgone, + /obj/item/weapon/reagent_containers/spray/plantbgone, + /obj/item/weapon/reagent_containers/glass/bottle/ammonia, + /obj/item/weapon/reagent_containers/glass/bottle/ammonia, + /obj/item/weapon/hatchet, + /obj/item/weapon/minihoe, + /obj/item/device/analyzer/plant_analyzer, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/suit/apron, + /obj/item/weapon/minihoe, + /obj/item/weapon/storage/box/botanydisk + ) // Updated with new things + cost = 15 + containertype = /obj/structure/closet/crate/hydroponics + containername = "Hydroponics crate" + access = access_hydroponics + group = "Hydroponics" + +//////// livestock +/datum/supply_packs/organic/cow + name = "Cow Crate" + cost = 30 + containertype = /obj/structure/largecrate/cow + containername = "cow crate" + group = "Organic" + +/datum/supply_packs/organic/goat + name = "Goat Crate" + cost = 25 + containertype = /obj/structure/largecrate/goat + containername = "goat crate" + group = "Organic" + +/datum/supply_packs/organic/chicken + name = "Chicken Crate" + cost = 20 + containertype = /obj/structure/largecrate/chick + containername = "chicken crate" + group = "Organic" + +/datum/supply_packs/organic/corgi + name = "Corgi Crate" + cost = 50 + containertype = /obj/structure/largecrate/lisa + containername = "corgi crate" + group = "Organic" + +/datum/supply_packs/organic/cat + name = "Cat crate" + cost = 50 //Cats are worth as much as corgis. + containertype = /obj/structure/largecrate/cat + containername = "cat crate" + group = "Organic" + +/datum/supply_packs/organic/fox + name = "Fox Crate" + cost = 55 //Foxes are cool. + containertype = /obj/structure/closet/critter/fox + containername = "fox crate" + group = "Organic" + +/datum/supply_packs/seeds + name = "Seeds Crate" + contains = list(/obj/item/seeds/chiliseed, + /obj/item/seeds/berryseed, + /obj/item/seeds/cornseed, + /obj/item/seeds/eggplantseed, + /obj/item/seeds/tomatoseed, + /obj/item/seeds/soyaseed, + /obj/item/seeds/wheatseed, + /obj/item/seeds/carrotseed, + /obj/item/seeds/sunflowerseed, + /obj/item/seeds/chantermycelium, + /obj/item/seeds/potatoseed, + /obj/item/seeds/sugarcaneseed) + cost = 10 + containertype = /obj/structure/closet/crate/hydroponics + containername = "Seeds crate" + access = access_hydroponics + group = "Hydroponics" + +/datum/supply_packs/weedcontrol + name = "Weed Control Crate" + contains = list(/obj/item/weapon/scythe, + /obj/item/clothing/mask/gas, + /obj/item/weapon/grenade/chem_grenade/antiweed, + /obj/item/weapon/grenade/chem_grenade/antiweed) + cost = 20 + containertype = /obj/structure/closet/crate/secure/hydrosec + containername = "Weed control crate" + access = access_hydroponics + group = "Hydroponics" + +/datum/supply_packs/exoticseeds + name = "Exotic Seeds Crate" + contains = list(/obj/item/seeds/nettleseed, + /obj/item/seeds/replicapod, + /obj/item/seeds/replicapod, + /obj/item/seeds/replicapod, + /obj/item/seeds/plumpmycelium, + /obj/item/seeds/libertymycelium, + /obj/item/seeds/amanitamycelium, + /obj/item/seeds/reishimycelium, + /obj/item/seeds/bananaseed, + /obj/item/seeds/eggyseed, + /obj/item/seeds/bloodtomatoseed) + cost = 15 + containertype = /obj/structure/closet/crate/hydroponics + containername = "Exotic Seeds crate" + access = access_hydroponics + group = "Hydroponics" + +/datum/supply_packs/medical + name = "Medical crate" + contains = list(/obj/item/weapon/storage/firstaid/regular, + /obj/item/weapon/storage/firstaid/fire, + /obj/item/weapon/storage/firstaid/toxin, + /obj/item/weapon/storage/firstaid/o2, + /obj/item/weapon/storage/firstaid/adv, + /obj/item/weapon/reagent_containers/glass/bottle/antitoxin, + /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, + /obj/item/weapon/reagent_containers/glass/bottle/stoxin, + /obj/item/weapon/storage/box/syringes, + /obj/item/weapon/storage/box/autoinjectors) + cost = 10 + containertype = /obj/structure/closet/crate/medical + containername = "Medical crate" + group = "Medical / Science" + +/datum/supply_packs/virus + name = "Virus crate" +/* contains = list(/obj/item/weapon/reagent_containers/glass/bottle/flu_virion, + /obj/item/weapon/reagent_containers/glass/bottle/cold, + /obj/item/weapon/reagent_containers/glass/bottle/epiglottis_virion, + /obj/item/weapon/reagent_containers/glass/bottle/liver_enhance_virion, + /obj/item/weapon/reagent_containers/glass/bottle/fake_gbs, + /obj/item/weapon/reagent_containers/glass/bottle/magnitis, + /obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat, + /obj/item/weapon/reagent_containers/glass/bottle/brainrot, + /obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion, + /obj/item/weapon/storage/box/syringes, + /obj/item/weapon/storage/box/beakers, + /obj/item/weapon/reagent_containers/glass/bottle/mutagen)*/ + contains = list(/obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random, + /obj/item/weapon/virusdish/random) + cost = 25 + containertype = "/obj/structure/closet/crate/secure" + containername = "Virus crate" + access = access_cmo + group = "Medical / Science" + +/datum/supply_packs/metal50 + name = "50 Metal Sheets" + contains = list(/obj/item/stack/sheet/metal) + amount = 50 + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Metal sheets crate" + group = "Engineering" + +/datum/supply_packs/glass50 + name = "50 Glass Sheets" + contains = list(/obj/item/stack/sheet/glass) + amount = 50 + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Glass sheets crate" + group = "Engineering" + +/datum/supply_packs/electrical + name = "Electrical maintenance crate" + contains = list(/obj/item/weapon/storage/toolbox/electrical, + /obj/item/weapon/storage/toolbox/electrical, + /obj/item/clothing/gloves/yellow, + /obj/item/clothing/gloves/yellow, + /obj/item/weapon/stock_parts/cell, + /obj/item/weapon/stock_parts/cell, + /obj/item/weapon/stock_parts/cell/high, + /obj/item/weapon/stock_parts/cell/high) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "Electrical maintenance crate" + group = "Engineering" + +/datum/supply_packs/mechanical + name = "Mechanical maintenance crate" + contains = list(/obj/item/weapon/storage/belt/utility/full, + /obj/item/weapon/storage/belt/utility/full, + /obj/item/weapon/storage/belt/utility/full, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/hardhat) + cost = 10 + containertype = /obj/structure/closet/crate + containername = "Mechanical maintenance crate" + group = "Engineering" + +/datum/supply_packs/watertank + name = "Water tank crate" + contains = list(/obj/structure/reagent_dispensers/watertank) + cost = 8 + containertype = /obj/structure/largecrate + containername = "water tank crate" + group = "Hydroponics" + +/datum/supply_packs/fueltank + name = "Fuel tank crate" + contains = list(/obj/structure/reagent_dispensers/fueltank) + cost = 8 + containertype = /obj/structure/largecrate + containername = "fuel tank crate" + group = "Engineering" + +/datum/supply_packs/coolanttank + name = "Coolant tank crate" + contains = list(/obj/structure/reagent_dispensers/coolanttank) + cost = 16 + containertype = /obj/structure/largecrate + containername = "coolant tank crate" + group = "Medical / Science" + + +/datum/supply_packs/solar + name = "Solar Pack crate" + contains = list(/obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller + /obj/item/weapon/circuitboard/solar_control, + /obj/item/weapon/tracker_electronics, + /obj/item/weapon/paper/solar) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "solar pack crate" + group = "Engineering" + +/datum/supply_packs/engine + name = "Emitter crate" + contains = list(/obj/machinery/power/emitter, + /obj/machinery/power/emitter) + cost = 10 + containertype = /obj/structure/closet/crate/secure + containername = "Emitter crate" + access = access_ce + group = "Engineering" + +/datum/supply_packs/engine/field_gen + name = "Field Generator crate" + contains = list(/obj/machinery/field_generator, + /obj/machinery/field_generator) + containertype = /obj/structure/closet/crate/secure + containername = "Field Generator crate" + access = access_ce + group = "Engineering" + +/datum/supply_packs/engine/sing_gen + name = "Singularity Generator crate" + contains = list(/obj/machinery/the_singularitygen) + containertype = /obj/structure/closet/crate/secure + containername = "Singularity Generator crate" + access = access_ce + group = "Engineering" + +/datum/supply_packs/engine/collector + name = "Collector crate" + contains = list(/obj/machinery/power/rad_collector, + /obj/machinery/power/rad_collector, + /obj/machinery/power/rad_collector) + containername = "Collector crate" + group = "Engineering" + +/datum/supply_packs/engine/PA + name = "Particle Accelerator crate" + cost = 40 + contains = list(/obj/structure/particle_accelerator/fuel_chamber, + /obj/machinery/particle_accelerator/control_box, + /obj/structure/particle_accelerator/particle_emitter/center, + /obj/structure/particle_accelerator/particle_emitter/left, + /obj/structure/particle_accelerator/particle_emitter/right, + /obj/structure/particle_accelerator/power_box, + /obj/structure/particle_accelerator/end_cap) + containertype = /obj/structure/closet/crate/secure + containername = "Particle Accelerator crate" + access = access_ce + group = "Engineering" + +/datum/supply_packs/mecha_ripley + name = "Circuit Crate (\"Ripley\" APLU)" + contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair, + /obj/item/weapon/circuitboard/mecha/ripley/main, //TEMPORARY due to lack of circuitboard printer + /obj/item/weapon/circuitboard/mecha/ripley/peripherals) //TEMPORARY due to lack of circuitboard printer + cost = 30 + containertype = /obj/structure/closet/crate/secure + containername = "APLU \"Ripley\" Circuit Crate" + access = access_robotics + group = "Engineering" + +/datum/supply_packs/mecha_odysseus + name = "Circuit Crate (\"Odysseus\")" + contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, //TEMPORARY due to lack of circuitboard printer + /obj/item/weapon/circuitboard/mecha/odysseus/main) //TEMPORARY due to lack of circuitboard printer + cost = 25 + containertype = /obj/structure/closet/crate/secure + containername = "\"Odysseus\" Circuit Crate" + access = access_robotics + group = "Engineering" + + +/datum/supply_packs/robotics + name = "Robotics Assembly Crate" + contains = list(/obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/weapon/storage/toolbox/electrical, + /obj/item/device/flash, + /obj/item/device/flash, + /obj/item/device/flash, + /obj/item/device/flash, + /obj/item/weapon/stock_parts/cell/high, + /obj/item/weapon/stock_parts/cell/high) + cost = 10 + containertype = /obj/structure/closet/crate/secure/gear + containername = "Robotics Assembly" + access = access_robotics + group = "Engineering" + +/datum/supply_packs/plasma + name = "Plasma assembly crate" + contains = list(/obj/item/weapon/tank/plasma, + /obj/item/weapon/tank/plasma, + /obj/item/weapon/tank/plasma, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/transfer_valve, + /obj/item/device/transfer_valve, + /obj/item/device/transfer_valve, + /obj/item/device/assembly/timer, + /obj/item/device/assembly/timer, + /obj/item/device/assembly/timer) + cost = 10 + containertype = /obj/structure/closet/crate/secure/plasma + containername = "Plasma assembly crate" + access = access_tox_storage + group = "Medical / Science" + +/datum/supply_packs/weapons + name = "Weapons crate" + contains = list(/obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/gun/energy/laser, + /obj/item/weapon/gun/energy/laser, + /obj/item/weapon/gun/energy/advtaser, + /obj/item/weapon/gun/energy/advtaser, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/storage/box/flashbangs) + cost = 30 + containertype = /obj/structure/closet/crate/secure/weapon + containername = "Weapons crate" + access = access_security + group = "Security" + +/datum/supply_packs/disabler + name = "Disabler Crate" + contains = list(/obj/item/weapon/gun/energy/disabler, + /obj/item/weapon/gun/energy/disabler, + /obj/item/weapon/gun/energy/disabler) + cost = 10 + containertype = /obj/structure/closet/crate/secure/weapon + containername = "disabler crate" + access = access_security + group = "Security" + +/datum/supply_packs/eweapons + name = "Experimental weapons crate" + contains = list(/obj/item/weapon/flamethrower/full, + /obj/item/weapon/tank/plasma, + /obj/item/weapon/tank/plasma, + /obj/item/weapon/tank/plasma, + /obj/item/weapon/grenade/chem_grenade/incendiary, + /obj/item/weapon/grenade/chem_grenade/incendiary, + /obj/item/weapon/grenade/chem_grenade/incendiary) + cost = 25 + containertype = /obj/structure/closet/crate/secure/weapon + containername = "Experimental weapons crate" + access = access_heads + group = "Security" + +/datum/supply_packs/armor + name = "Armor crate" + contains = list(/obj/item/clothing/head/helmet, + /obj/item/clothing/head/helmet, + /obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest) + cost = 15 + containertype = /obj/structure/closet/crate/secure + containername = "Armor crate" + access = access_security + group = "Security" + +/datum/supply_packs/riot + name = "Riot gear crate" + contains = list(/obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/melee/baton/loaded, + /obj/item/weapon/shield/riot, + /obj/item/weapon/shield/riot, + /obj/item/weapon/shield/riot, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/storage/box/flashbangs, + /obj/item/weapon/handcuffs, + /obj/item/weapon/handcuffs, + /obj/item/weapon/handcuffs, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/suit/armor/riot) + cost = 60 + containertype = /obj/structure/closet/crate/secure + containername = "Riot gear crate" + access = access_armory + group = "Security" + +/datum/supply_packs/loyalty + name = "Loyalty implant crate" + contains = list (/obj/item/weapon/storage/lockbox/loyalty) + cost = 60 + containertype = /obj/structure/closet/crate/secure + containername = "Loyalty implant crate" + access = access_armory + group = "Security" + +/datum/supply_packs/ballistic + name = "Ballistic gear crate" + contains = list(/obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/weapon/storage/belt/bandolier, + /obj/item/weapon/storage/belt/bandolier, + /obj/item/weapon/gun/projectile/shotgun/combat, + /obj/item/weapon/gun/projectile/shotgun/combat) + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Ballistic gear crate" + access = access_armory + group = "Security" + +/datum/supply_packs/shotgunammo + name = "Shotgun shells" + contains = list(/obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_casing/shotgun) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Shotgun shells" + access = access_armory + group = "Security" + +/datum/supply_packs/expenergy + name = "Experimental energy gear crate" + contains = list(/obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/armor/laserproof, + /obj/item/weapon/gun/energy/gun, + /obj/item/weapon/gun/energy/gun) + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Experimental energy gear crate" + access = access_armory + group = "Security" + +/datum/supply_packs/exparmor + name = "Experimental armor crate" + contains = list(/obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/suit/armor/riot) + cost = 35 + containertype = /obj/structure/closet/crate/secure + containername = "Experimental armor crate" + access = access_armory + group = "Security" + +/datum/supply_packs/securitybarriers + name = "Security Barriers" + contains = list(/obj/machinery/deployable/barrier, + /obj/machinery/deployable/barrier, + /obj/machinery/deployable/barrier, + /obj/machinery/deployable/barrier) + cost = 20 + containertype = /obj/structure/closet/crate/secure/gear + containername = "Security Barriers crate" + group = "Security" + +/datum/supply_packs/securitybarriers + name = "Shield Generators" + contains = list(/obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Shield Generators crate" + access = access_teleporter + group = "Security" + +/datum/supply_packs/randomised + var/num_contained = 3 //number of items picked to be contained in a randomised crate + contains = list(/obj/item/clothing/head/collectable/chef, + /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/collectable/tophat, + /obj/item/clothing/head/collectable/captain, + /obj/item/clothing/head/collectable/beret, + /obj/item/clothing/head/collectable/welding, + /obj/item/clothing/head/collectable/flatcap, + /obj/item/clothing/head/collectable/pirate, + /obj/item/clothing/head/collectable/kitty, + /obj/item/clothing/head/collectable/rabbitears, + /obj/item/clothing/head/collectable/wizard, + /obj/item/clothing/head/collectable/hardhat, + /obj/item/clothing/head/collectable/HoS, + /obj/item/clothing/head/collectable/thunderdome, + /obj/item/clothing/head/collectable/swat, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/police, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/xenom, + /obj/item/clothing/head/collectable/petehat) + name = "Collectable hat crate!" + cost = 200 + containertype = /obj/structure/closet/crate + containername = "Collectable hats crate! Brought to you by Bass.inc!" + group = "Operations" + +/datum/supply_packs/randomised/New() + manifest += "Contains any [num_contained] of:" + ..() + +/datum/supply_packs/artscrafts + name = "Arts and Crafts supplies" + contains = list(/obj/item/weapon/storage/fancy/crayons, + /obj/item/device/camera, + /obj/item/device/camera_film, + /obj/item/device/camera_film, + /obj/item/weapon/storage/photo_album, + /obj/item/weapon/packageWrap, + /obj/item/weapon/reagent_containers/glass/paint/red, + /obj/item/weapon/reagent_containers/glass/paint/green, + /obj/item/weapon/reagent_containers/glass/paint/blue, + /obj/item/weapon/reagent_containers/glass/paint/yellow, + /obj/item/weapon/reagent_containers/glass/paint/violet, + /obj/item/weapon/reagent_containers/glass/paint/black, + /obj/item/weapon/reagent_containers/glass/paint/white, + /obj/item/weapon/reagent_containers/glass/paint/remover, + /obj/item/weapon/contraband/poster, + /obj/item/weapon/wrapping_paper, + /obj/item/weapon/wrapping_paper, + /obj/item/weapon/wrapping_paper) + cost = 10 + containertype = "/obj/structure/closet/crate" + containername = "Arts and Crafts crate" + group = "Operations" + + +/datum/supply_packs/randomised/contraband + num_contained = 6 + contains = list(/obj/item/weapon/storage/pill_bottle/zoom, + /obj/item/weapon/storage/pill_bottle/happy, + /obj/item/weapon/storage/pill_bottle/random_drug_bottle, + /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, + /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims, + /obj/item/weapon/grenade/smokebomb, + /obj/item/clothing/mask/cigarette/cigar/cohiba, + /obj/item/weapon/reagent_containers/food/drinks/cans/ale, + /obj/item/weapon/reagent_containers/food/drinks/bottle/patron, + /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, + /obj/item/weapon/lipstick/random) + + name = "Contraband crate" + cost = 30 + containertype = /obj/structure/closet/crate + containername = "Unlabeled crate" + contraband = 1 + group = "Operations" + +/datum/supply_packs/boxes + name = "Empty Box supplies" + contains = list(/obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box, + /obj/item/weapon/storage/box) + cost = 10 + containertype = "/obj/structure/closet/crate" + containername = "Empty Box crate" + group = "Operations" + +/datum/supply_packs/surgery + name = "Surgery crate" + contains = list(/obj/item/weapon/cautery, + /obj/item/weapon/surgicaldrill, + /obj/item/clothing/mask/breath/medical, + /obj/item/weapon/tank/anesthetic, + /obj/item/weapon/FixOVein, + /obj/item/weapon/hemostat, + /obj/item/weapon/scalpel, + /obj/item/weapon/bonegel, + /obj/item/weapon/retractor, + /obj/item/weapon/bonesetter, + /obj/item/weapon/circular_saw) + cost = 25 + containertype = "/obj/structure/closet/crate/secure" + containername = "Surgery crate" + access = access_medical + group = "Medical / Science" + +/datum/supply_packs/sterile + name = "Sterile equipment crate" + contains = list(/obj/item/clothing/under/rank/medical/green, + /obj/item/clothing/under/rank/medical/green, + /obj/item/weapon/storage/box/masks, + /obj/item/weapon/storage/box/gloves) + cost = 15 + containertype = "/obj/structure/closet/crate" + containername = "Sterile equipment crate" + group = "Medical / Science" + +/datum/supply_packs/randomised/pizza + num_contained = 5 + contains = list(/obj/item/pizzabox/margherita, + /obj/item/pizzabox/mushroom, + /obj/item/pizzabox/meat, + /obj/item/pizzabox/vegetable) + name = "Surprise pack of five dozen pizzas" + cost = 15 + containertype = /obj/structure/closet/crate/freezer + containername = "Pizza crate" + group = "Hospitality" + +/datum/supply_packs/foodcart + name = "Food Cart crate" + contains = list(/obj/structure/foodcart) + cost = 10 + containertype = /obj/structure/largecrate + containername = "food cart crate" + group = "Hospitality" + +/datum/supply_packs/formal_wear + contains = list(/obj/item/clothing/head/that, + /obj/item/clothing/suit/storage/lawyer/bluejacket, + /obj/item/clothing/suit/storage/lawyer/purpjacket, + /obj/item/clothing/under/suit_jacket, + /obj/item/clothing/under/suit_jacket/female, + /obj/item/clothing/under/suit_jacket/really_black, + /obj/item/clothing/under/suit_jacket/red, + /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/black, + /obj/item/clothing/suit/wcoat) + name = "Formalwear closet" + cost = 30 + containertype = /obj/structure/closet + containername = "Formalwear for the best occasions." + group = "Operations" +/* +/datum/supply_packs/rust_injector + contains = list(/obj/machinery/power/rust_fuel_injector) + name = "RUST fuel injector" + cost = 50 + containertype = /obj/structure/closet/crate/secure/large + containername = "RUST injector crate" + group = "Engineering" + access = access_engine +/datum/supply_packs/rust_compressor + contains = list(/obj/item/weapon/module/rust_fuel_compressor) + name = "RUST fuel compressor circuitry" + cost = 60 + containertype = /obj/structure/closet/crate/secure + containername = "RUST fuel compressor circuitry" + group = "Engineering" + access = access_engine +/datum/supply_packs/rust_assembly_port + contains = list(/obj/item/weapon/module/rust_fuel_port) + name = "RUST fuel assembly port circuitry" + cost = 40 + containertype = /obj/structure/closet/crate/secure + containername = "RUST fuel assembly port circuitry" + group = "Engineering" + access = access_engine +/datum/supply_packs/rust_core + contains = list(/obj/machinery/power/rust_core) + name = "RUST Tokamak Core" + cost = 75 + containertype = /obj/structure/closet/crate/secure/large + containername = "RUST tokamak crate" + group = "Engineering" + access = access_engine +*/ +/datum/supply_packs/shield_gen + contains = list(/obj/item/weapon/circuitboard/shield_gen) + name = "Experimental shield generator circuitry" + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Experimental shield generator" + group = "Engineering" + access = access_ce + +/datum/supply_packs/shield_cap + contains = list(/obj/item/weapon/circuitboard/shield_cap) + name = "Experimental shield capacitor circuitry" + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Experimental shield capacitor" + group = "Engineering" + access = access_ce + +/datum/supply_packs/eftpos + contains = list(/obj/item/device/eftpos) + name = "EFTPOS scanner" + cost = 10 + containertype = /obj/structure/closet/crate + containername = "EFTPOS crate" + group = "Operations" + +/datum/supply_packs/teg + contains = list(/obj/machinery/power/generator) + name = "Mark I Thermoelectric Generator" + cost = 75 + containertype = /obj/structure/closet/crate/secure/large + containername = "Mk1 TEG crate" + group = "Engineering" + access = access_engine + +/datum/supply_packs/circulator + contains = list(/obj/machinery/atmospherics/binary/circulator) + name = "Binary atmospheric circulator" + cost = 60 + containertype = /obj/structure/closet/crate/secure/large + containername = "Atmospheric circulator crate" + group = "Engineering" + access = access_engine + +/datum/supply_packs/bee_keeper + name = "Beekeeping Crate" + contains = list(/obj/item/beezeez, + /obj/item/beezeez, + /obj/item/weapon/bee_net, + /obj/item/apiary, + /obj/item/queen_bee, + /obj/item/queen_bee, + /obj/item/queen_bee) + cost = 20 + containertype = /obj/structure/closet/crate/hydroponics + containername = "Beekeeping crate" + access = access_hydroponics + group = "Hydroponics" + +/datum/supply_packs/misc/lasertag + name = "Laser Tag Crate" + contains = list(/obj/item/weapon/gun/energy/laser/redtag, + /obj/item/weapon/gun/energy/laser/redtag, + /obj/item/weapon/gun/energy/laser/redtag, + /obj/item/weapon/gun/energy/laser/bluetag, + /obj/item/weapon/gun/energy/laser/bluetag, + /obj/item/weapon/gun/energy/laser/bluetag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/bluetaghelm) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "laser tag crate" + group = "Operations" + +/datum/supply_packs/vending + name = "Bartending Supply Crate" + contains = list(/obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/boozeomat, + /obj/item/weapon/vending_refill/coffee, + /obj/item/weapon/vending_refill/coffee, + /obj/item/weapon/vending_refill/coffee) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "bartending supply crate" + group = "Operations" + +/datum/supply_packs/vending/snack + name = "Snack Supply Crate" + contains = list(/obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack, + /obj/item/weapon/vending_refill/snack) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "snacks supply crate" + group = "Operations" + +/datum/supply_packs/vending/cola + name = "Softdrinks Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola, + /obj/item/weapon/vending_refill/cola) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "softdrinks supply crate" + group = "Operations" + +/datum/supply_packs/vending/cigarette + name = "Cigarette Supply Crate" + contains = list(/obj/item/weapon/vending_refill/cigarette, + /obj/item/weapon/vending_refill/cigarette, + /obj/item/weapon/vending_refill/cigarette) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "cigarette supply crate" + group = "Operations" + +/datum/supply_packs/autodrobe + name = "Autodrobe Supply crate" + contains = list(/obj/item/weapon/vending_refill/autodrobe, + /obj/item/weapon/vending_refill/autodrobe, + /obj/item/weapon/vending_refill/autodrobe) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "autodrobe supply crate" + group = "Operations" + +/datum/supply_packs/clothingvendor + name = "Clothing Vendor Supply crate" + contains = list(/obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/hatdispenser, + /obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/suitdispenser, + /obj/item/weapon/vending_refill/shoedispenser, + /obj/item/weapon/vending_refill/shoedispenser, + /obj/item/weapon/vending_refill/shoedispenser) + cost = 30 + containertype = /obj/structure/closet/crate + containername = "clothing vendor supply crate" + group = "Operations" + +/datum/supply_packs/mafia + name = "Mafia Supply crate" + contains = list(/obj/item/clothing/suit/browntrenchcoat =1,/obj/item/clothing/suit/blacktrenchcoat =1,/obj/item/clothing/head/fedora/whitefedora =1, + /obj/item/clothing/head/fedora/brownfedora =1,/obj/item/clothing/head/fedora =1,/obj/item/clothing/under/flappers =1,/obj/item/clothing/under/mafia =1,/obj/item/clothing/under/mafia/vest =1,/obj/item/clothing/under/mafia/white =1, + /obj/item/clothing/under/mafia/sue =1,/obj/item/clothing/under/mafia/tan =1, /obj/item/toy/crossbow/tommygun =2) + cost = 15 + containertype = /obj/structure/closet/crate + containername = "mafia supply crate" + group = "Operations" + +/datum/supply_packs/fabric + name = "Fabric crate" + contains = list(/obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric, + /obj/item/weapon/ore/fabric) + cost = 30 + containertype = /obj/structure/closet/crate + containername = "Fabric crate" + group = "Operations" \ No newline at end of file diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 1697fff9c48..8a57ecfff9f 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -5,9 +5,6 @@ icon_state = "cart" anchored = 0 density = 1 - flags = OPENCONTAINER - //copypaste sorry - var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite var/obj/item/stack/sheet/glass/myglass = null var/obj/item/stack/sheet/metal/mymetal = null var/obj/item/stack/sheet/plasteel/myplasteel = null diff --git a/code/game/objects/structures/foodcart.dm b/code/game/objects/structures/foodcart.dm new file mode 100644 index 00000000000..edd701a8104 --- /dev/null +++ b/code/game/objects/structures/foodcart.dm @@ -0,0 +1,216 @@ +/obj/structure/foodcart + name = "food cart" + desc = "A cart for transporting food and drinks." + icon = 'icons/obj/foodcart.dmi' + icon_state = "cart" + anchored = 0 + density = 1 + //Food slots + var/obj/item/weapon/reagent_containers/food/snacks/food1 = null + var/obj/item/weapon/reagent_containers/food/snacks/food2 = null + var/obj/item/weapon/reagent_containers/food/snacks/food3 = null + var/obj/item/weapon/reagent_containers/food/snacks/food4 = null + var/obj/item/weapon/reagent_containers/food/snacks/food5 = null + var/obj/item/weapon/reagent_containers/food/snacks/food6 = null + //Drink slots + var/obj/item/weapon/reagent_containers/food/drinks/drink1 = null + var/obj/item/weapon/reagent_containers/food/drinks/drink2 = null + var/obj/item/weapon/reagent_containers/food/drinks/drink3 = null + var/obj/item/weapon/reagent_containers/food/drinks/drink4 = null + var/obj/item/weapon/reagent_containers/food/drinks/drink5 = null + var/obj/item/weapon/reagent_containers/food/drinks/drink6 = null + +/obj/structure/foodcart/proc/put_in_cart(obj/item/I, mob/user) + user.drop_item() + I.loc = src + updateUsrDialog() + user << "You put [I] into [src]." + return + +/obj/structure/foodcart/attackby(obj/item/I, mob/user) + var/fail_msg = "There are no open spaces for this in [src]." + if(!I.is_robot_module()) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + if(!food1) + put_in_cart(I, user) + food1=I + update_icon() + else if(!food2) + put_in_cart(I, user) + food2=I + update_icon() + else if(!food3) + put_in_cart(I, user) + food3=I + update_icon() + else if(!food4) + put_in_cart(I, user) + food4=I + update_icon() + else if(!food5) + put_in_cart(I, user) + food5=I + update_icon() + else if(!food6) + put_in_cart(I, user) + food6=I + update_icon() + else + user << fail_msg + else if(istype(I, /obj/item/weapon/reagent_containers/food/drinks)) + if(!drink1) + put_in_cart(I, user) + drink1=I + update_icon() + else if(!drink2) + put_in_cart(I, user) + drink2=I + update_icon() + else if(!drink3) + put_in_cart(I, user) + drink3=I + update_icon() + else if(!drink4) + put_in_cart(I, user) + drink4=I + update_icon() + else if(!drink5) + put_in_cart(I, user) + drink5=I + update_icon() + else if(!drink6) + put_in_cart(I, user) + drink6=I + update_icon() + else + user << fail_msg + else + usr << "You cannot interface your modules [src]!" + +/obj/structure/foodcart/attack_hand(mob/user) + user.set_machine(src) + var/dat + if(food1) + dat += "
[food1.name]
" + if(food2) + dat += "[food2.name]
" + if(food3) + dat += "[food3.name]
" + if(food4) + dat += "[food4.name]
" + if(food5) + dat += "[food5.name]
" + if(food6) + dat += "[food6.name]
" + if(drink1) + dat += "[drink1.name]
" + if(drink2) + dat += "[drink2.name]
" + if(drink3) + dat += "[drink3.name]
" + if(drink4) + dat += "[drink4.name]
" + if(drink5) + dat += "[drink5.name]
" + if(drink6) + dat += "[drink6.name]
" + var/datum/browser/popup = new(user, "foodcart", name, 240, 160) + popup.set_content(dat) + popup.open() + +/obj/structure/foodcart/Topic(href, href_list) + if(!in_range(src, usr)) + return + if(!isliving(usr)) + return + var/mob/living/user = usr + if(href_list["f1"]) + if(food1) + user.put_in_hands(food1) + user << "You take [food1] from [src]." + food1 = null + if(href_list["f2"]) + if(food2) + user.put_in_hands(food2) + user << "You take [food2] from [src]." + food2 = null + if(href_list["f3"]) + if(food3) + user.put_in_hands(food3) + user << "You take [food3] from [src]." + food3 = null + if(href_list["f4"]) + if(food4) + user.put_in_hands(food4) + user << "You take [food4] from [src]." + food4 = null + if(href_list["f5"]) + if(food5) + user.put_in_hands(food5) + user << "You take [food5] from [src]." + food5 = null + if(href_list["f6"]) + if(food6) + user.put_in_hands(food6) + user << "You take [food6] from [src]." + food6 = null + if(href_list["d1"]) + if(drink1) + user.put_in_hands(drink1) + user << "You take [drink1] from [src]." + drink1 = null + if(href_list["d2"]) + if(drink2) + user.put_in_hands(drink2) + user << "You take [drink2] from [src]." + drink2 = null + if(href_list["d3"]) + if(drink3) + user.put_in_hands(drink3) + user << "You take [drink3] from [src]." + drink3 = null + if(href_list["d4"]) + if(drink4) + user.put_in_hands(drink4) + user << "You take [drink4] from [src]." + drink4 = null + if(href_list["d5"]) + if(drink5) + user.put_in_hands(drink5) + user << "You take [drink5] from [src]." + drink5 = null + if(href_list["d6"]) + if(drink6) + user.put_in_hands(drink6) + user << "You take [drink6] from [src]." + drink6 = null + + update_icon() + updateUsrDialog() + +/obj/structure/foodcart/update_icon() + overlays = null + if(food1) + overlays += "cart_food1" + if(food2) + overlays += "cart_food2" + if(food3) + overlays += "cart_food3" + if(food4) + overlays += "cart_food4" + if(food5) + overlays += "cart_food5" + if(food6) + overlays += "cart_food6" + if(drink1) + overlays += "cart_drink1" + if(drink2) + overlays += "cart_drink2" + if(drink3) + overlays += "cart_drink3" + if(drink4) + overlays += "cart_drink4" + if(drink5) + overlays += "cart_drink5" + if(drink6) + overlays += "cart_drink6" \ No newline at end of file diff --git a/icons/obj/foodcart.dmi b/icons/obj/foodcart.dmi new file mode 100644 index 0000000000000000000000000000000000000000..470af70eb1fb4fb912d08ea4550b791ff59cde5b GIT binary patch literal 1049 zcmV+!1m^pRP)C0002wP)t-sz`(#v zOiXEMX@rD?yu7@%wY8|IsH>~1qN1X#tgNJ@q>74)f`WpKjEsYWgNccWj*gCykdU*p zv%9;y!otGC!^6eJ#m2_Qjg5`W05dZ)%zuA>z`($Vhli1ok<4Z@W|_=}hK91TvbMIi zrKP2qn3%1tt(TXVnwpw3nE*3p0DypiuCA`Hudkb%o1mbey}iAmp`ntJlDN3Ir>Cd6 zxw)#Us-2ykg@uLx|NoPdlV4w70GTuY005aYnalv0|IB7)GXVdYW-~JYnE(LHW&oLH z%>T?Y|Cuwuz`$nAGyngYq(l+S00001bW%=J06^y0W&i*Hp?XwUbVOxyV{&P5bZKvH z004NLjncge!Y~wu;W@dAL%WOp(al9#q=UT$2_`i`Y#=%4?Hf)f2jSb!2ha3!YC4aX zX{O;i>9&k`?#X@V1`~Ux+-GQ{mvK?8* z-LidNY5D_Ry*FP-l(bX=0P)Jg1IllHic4Ji7kKPXNC%0-Sfx^_R%u^w@aYkd{J)WYtY`i2fPNCfQDANRmq2+N{qk8=N=>bf8(;h;h%Z* zYl!E0&1z~gA^ZCVj}bI{$yYr3>1XbkPCbRZz$L)&4at0cd@31yCQy=Qv+NgUGl|Fk z0Kfrx%oQ6jpU(vcEPSy6zArcc0Di+AB{Cog?t(yM0NFkeI)T5}l438rrwR!O!(|w< zmqpQi6crLcwhx!=Wn}xPm33in(U7STNT-t=Aa=kL-Y6 zug4C^@hHB2$_n^H6Yz6PV4XDq00000004k}!vE*L`M&wz12%#K000000DzMp&`(Y~ TG>pKV00000NkvXXu0mjfRQULe literal 0 HcmV?d00001 diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index cbaf629896a..8d56da4d315 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -8991,6 +8991,7 @@ "dqU" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r"; icon_state = "burst_r"},/turf/space,/area/supply/dock) "dqV" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "dqW" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) +"dqX" = (/obj/structure/foodcart,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "dqY" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "dqZ" = (/obj/structure/table,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "dra" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) @@ -12671,7 +12672,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaGbayaaTzaAPaGdaUYaUZaVaaVbaGdaAPaVcaVdayaaVeaPTaTzaVfaVgaTCaTCaTDaySaVhaRHaDyaTGaRJaViaVjaVkaRLaRLaVlaVmaVnaRLaVoaVpaVqaVpaVraVsaVpaVpaVtaVpaVpaVuaVvaVpaVwaVpaVxaRLaRLaRLaVyaVzaVAaVBaVCaVDaVCaVEaVFaVEaVEaVEaVEaVEaVEaVGaVHaVIaVIaVIaVIaVJaVIaVKaVLaVIaVIaVMaVNaVOaVOaVOaVOaVOaVOaVOaVPaSEaSEaaqaVQaVRaVSaVTaVTaVUaVVaUuaSMaVWaaqaaqaaqaaqaaqaVXaaqaVYaVZaWaaWbaQVaWcaaqaWdaWeaWfaWgaWhaWiaWjaWkaaqaPvaJuaaqaWlaWmaNRaWnaWoaNRaWpaWpaaqaWqaWraWsaaqaWtaWuaWvaMvaMvaWwaWxaOeaWyaaqaWzaUQaURaWAaWBaUQaUQaWCaWDaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaySaDwaTuaPSaERaDyaDyaESaPSaTuaPSaWEaWFaWGaWHaDwaWIaWIaREaWIaRFaySaWJaRHaDyaySaPYaPYaWKaPYaPYaPYaPYaPYaPYaWLaWMaPYaPYaPYaPYaPYaPYaWNaWOaWNaPYaWPaPYaWQaVjaWRaWSaWTaWUaRLaWVaPYaWWaWWaWXaWXaWXaWYaQCaQCaQCaQCaQCaQCaQCaaiaWZaXaaXbaXaaXcaXcaXdaXeaXfaXgaXhaaiaXiaQCaQCaQCaQCaQCaQCaXjaXkaXkaXkaaqaXlaXmaXnaXnaXnaXnaXoaKyaXpaXqaXraXsaXtaXuaXvaXwaaqaaqaXxaXiaXyaQCaXzaaqaXAaXBaXCaXCaXCaXCaXDaXEaaqaXFaJuaaqaXGaNRaWnaWnaWoaWnaNRaXHaaqaXIaXJaXKaaqaMvaXLaXMaXNaXNaXOaXPaXQaXRabZaXSaXTaXUaXVaUSaUQaUQaXWaWDaaaaaaaaaaaaaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCyaXXaDyaXYaXZaYaaYbaYcaYdaYbaYeaYfaYbaYbbcOaYhaYiaYjaYkaYkaYkaYlaYkaYmaYnaySaYoaYpaYqaYraYsaYtaYuaYvaYwaYxaYyaYzaYAaYBaYCaYDaYEaYFaYGaYHaYEaYIaPYaPYaYJaPYaPYaPYaPYaYKaYLaPYaYMaWWaYNaSeaSjaYOaaaaaaaaaaaaaaaaaaaaaaaiaYPaYQaYRaYSaYTaYUaYVaYWaYXaYYaYZaaiaaaaaaaaaaaaaaaaaaaaaaEFaZaaSEaZbaaqaZcaXmaXqaXqaXqaXqaXqaZdaZeaXqaXqaXqaXtaZfaZfaZgaZhaZiaZjaZkaZlaZmaZnaaqaZoaZpaZqaZraZraZqaZsaZtaaqaPvaZuaaqaZvaZwaNRaWnaWoaNRaZxaZxaaqaaqaZyaaqaaqaZzaWuaWxaZAaZAaZBaWxaOeaaqaaqaZCaUQaZDaZDaZEaZDaUQaZFaWDaaaaaaaaaaZGaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDwaZHaZIaZHaZHaZHaZHaZHaZHaZIaZHaZHaZJaDyaZKaZLaDyaDyaZMaDyaZNaZOaZPaZQaZRaySaYpaYpaZSaYraZTaYxaYxaYxaYxaYxaYyaZUaYxaYxaYxaYxaYEaZVaZWaZXaYEaYIaZYaZZbaababbacaYMbadbaebafbagbahbaiaYNaSeaSjaYOaaaaaaaaaaaaaaiaaiaaiaaibajbakbalbambanbaobapbaqbarbasbataaiaaiaaiaaiaaaaaaaaaaaaaEFaZaaSEaSEbauaXqbavbawbaxaXqbaybazaJabaAbaBbaCaXqaXtaZfaZfbaDbaEaZfbaFbaGbaHbaIaZfbaJbaKbaLaZqaZraZraZqbaMbaNaaqaPvbaOaaqaXGaNRaWnaWnaWoaWnaNRaNRbaPbaQaNRbaRaaqbaSbaTbaUaZAaZAbaVbaUbaWaaqbaXbaYaUQbaZbaZbbabaZaUQaXWbbbbbcbbdbbdbbeaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDwaZHaZIaZHaZHaZHaZHaZHaZHaZIaZHaZHaZJaDyaZKaZLaDyaDyaZMaDyaZNaZOaZPaZQaZRaySaYpaYpaZSaYraZTaYxaYxaYxaYxaYxaYyaZUaYxaYxaYxaYxaYEaZVaZWaZXaYEaYIaZYaZZbaababbacaYMbadbaebafbagbahbaiaYNaSeaSjaYOaaaaaaaaaaaaaaiaaiaaiaaibajbakbalbambanbaobapbaqbarbasbataaiaaiaaiaaiaaaaaaaaaaaaaEFaZaaSEaSEbauaXqbavbawbaxaXqbaybazaJabaAbaBbaCaXqaXtdqXaZfbaDbaEaZfbaFbaGbaHbaIaZfbaJbaKbaLaZqaZraZraZqbaMbaNaaqaPvbaOaaqaXGaNRaWnaWnaWoaWnaNRaNRbaPbaQaNRbaRaaqbaSbaTbaUaZAaZAbaVbaUbaWaaqbaXbaYaUQbaZbaZbbabaZaUQaXWbbbbbcbbdbbdbbeaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayabbfbbgbbgbbgbbgbbgbbgbbgaGjayaaySbbhbbiaySbbjbbjbbjbbjbbjbbkaySaySaySaySaYpbblbbmaYrbbnaYxaYxbbobbpbbqbbrbboaYxaYxaYxbbsaYEbbtbbubbvaYEaYIaZYbbwbbxbbybbzaYMbbAbbBbbCbbDbbEbbFbbGbbHaSjbbIaoJaaiaaiaaiaaibbJbbKbbLbbMbbNbbNbbObbPbbNbbQbbNbbRbbSbbTbbUbbVbbWaaiaaiaaiaaiaXibbXaZaaSEaSEaaqbbYbavbaBbaxaXqbbZbcaaXqbcbbccbaCaXqaXtaZfaZfbcdbcebcfbcgbchbcibcjaZfbckbaKbclaZqaZraZrbcmbcnbaNaaqaPvbcoaaqbcpbcqbcraWnaWobcsaNRaNRbctaNRbcubcvaaqbcwbcxbcyaZAaZAbczbcybcAaaqbcBbaYaUQaUQaUQaUSaUQaUQbcCbcDbcEbcFbcGbcHaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcIbcIbcIbcIbcIbcIbcIbcIbcIbcIbcIbcIaabbcJaGeaDAbcKbbjbcLbcMbcNbcRbcPbcQbhlbcSbbjbcTbcUbcVbcWaYrbcXaYxaYxbbobbqbcYbcZbboaYxaYxbdabdbaYEaYEaYEaYEaYEaYIaZYaZYaZYaZYaZYaYMbdcbbDbddbbDbdebbFaYNbdfaSjaSkaSkbdgbdhbdiaaibdjbalbdkbbNbbNbbNbdlbdmbdnbdmbdobdpbdqbdmbdrbdsbdtaaibdubdhbdvbdwbdxaZaaSEaSEbauaXqbdyaXqaXqaXqbdzbdAaXqbcbbdBbaCaXqaXtaZfaZfbdCbdDbdEbdFbdGbdHbcjbdIaaqbdJbclaZqaZraZraZqbcnbdKaaqbdLaaqaaqaaJaaqaaqbdMaWobdNbdOaNRbdPbdQaRlbdRabZbdSbdTbdUbdVbdVbdWbdXbdYabZbdZbeaaUQbebaUQaUSaUQaUQbecbedbbcbbdbbdbeeaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcIbcIbcIbcIbcIbcIbcIbcIbcIbcIbcIbcIbcIbefbegbehaERaZKbbjbcLbeibejbcLbekbelbembenbbjbeobepbeqberaYrbesbetbeubevbewbexbeybezbezbezbeAbeBaYrbeCbcUbeDbeEbeFbblbblbeGberbeHaYMbeIbeJbeKbeLbeMbeNaYNbdfaSeaSeaSebeObePbeQbeRbeSbeTbbNbeUbeVbeWbeXbeYbeZbfabfbbfcbfdbfebeSbffbfgbfhbfibfjbfkbflbfmbfnaSEbfoaaqaXqbfpbfqbaCaXqbfrbfsaXqbftbfubaCaXqaXtaZfaZfaZfaZgaZfbfvaZfbdHbcjbfwaaqbfxbclaZqaZraZraZqbcnbfyaaqbfzbfAbfAbfBbfCbfDbfEbfFbfGbfGbfGbfGbfGbfGbfHbfIbfJaZAaZAaZAaZAaZAaZAbfKbfLbfMbaYaUQaUQaUQaUSaUQaUQbfNaWDbfObfObfOaWDaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaKPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/paradise.dme b/paradise.dme index 9b9c24ac5ad..1e5fe1c92c2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -772,6 +772,7 @@ #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\false_walls.dm" #include "code\game\objects\structures\flora.dm" +#include "code\game\objects\structures\foodcart.dm" #include "code\game\objects\structures\fullwindow.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" @@ -1340,7 +1341,7 @@ #include "code\modules\mob\living\simple_animal\friendly\corgi.dm" #include "code\modules\mob\living\simple_animal\friendly\crab.dm" #include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" -#include "code\modules\mob\living\simple_animal\friendly\fox.dm" +#include "code\modules\mob\living\simple_animal\friendly\Fox.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" #include "code\modules\mob\living\simple_animal\friendly\slime.dm" From 1d009e9c91dd003a64d02cd7579c2cb926cd9db6 Mon Sep 17 00:00:00 2001 From: DZD Date: Tue, 10 Feb 2015 08:45:23 -0500 Subject: [PATCH 19/37] Destroy AI chance and Cling surgery - Decreased destroy objective chance from 10% to 4% for clings and traitors. Should be so slightly rarer than hijack, so you should stop seeing it every round. - Changeling arm blades can be used as ghetto circular saws, this will help changelings with their debrain objectives a bit, a ghetto scalpel is easily found in the form of a glass shard already. --- code/game/gamemodes/changeling/changeling.dm | 2 +- code/game/gamemodes/traitor/traitor.dm | 2 +- code/modules/surgery/braincore.dm | 6 ++++-- code/modules/surgery/generic.dm | 3 ++- code/modules/surgery/ribcage.dm | 5 +++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index f780594701c..76d198d796f 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -105,7 +105,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.objectives += debrain_objective var/list/active_ais = active_ais() - if(active_ais.len && prob(10)) // num_players() proc is designed for roundstart, changed to fixed value to prevent problems with mid-round objective randomization. + if(active_ais.len && prob(4)) // Leaving this at a flat chance for now, problems with the num_players() proc due to latejoin antags. var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = changeling destroy_objective.find_target() diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 52a398f19fc..e5c19a016be 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -107,7 +107,7 @@ assign_exchange_role(exchange_blue) else var/list/active_ais = active_ais() - if(active_ais.len && prob(10)) // Leaving this at a flat chance for now, problems with the num_players() proc. + if(active_ais.len && prob(4)) // Leaving this at a flat chance for now, problems with the num_players() proc due to latejoin antags. var/datum/objective/destroy/destroy_objective = new destroy_objective.owner = traitor destroy_objective.find_target() diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index 3ce95d81553..92e2124b619 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -12,7 +12,8 @@ /datum/surgery_step/brain/saw_skull allowed_tools = list( /obj/item/weapon/circular_saw = 100, \ - /obj/item/weapon/hatchet = 75 + /obj/item/weapon/hatchet = 75, \ + /obj/item/weapon/melee/arm_blade = 60 // Dr. Chang E. Ling, MD ) min_duration = 50 @@ -67,7 +68,8 @@ /datum/surgery_step/brain/saw_spine allowed_tools = list( /obj/item/weapon/circular_saw = 100, \ - /obj/item/weapon/hatchet = 75 + /obj/item/weapon/hatchet = 75, \ + /obj/item/weapon/melee/arm_blade = 60 ) min_duration = 50 diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 17b926ae99a..37e465946bd 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -187,7 +187,8 @@ /datum/surgery_step/generic/cut_limb allowed_tools = list( /obj/item/weapon/circular_saw = 100, \ - /obj/item/weapon/hatchet = 75 + /obj/item/weapon/hatchet = 75, \ + /obj/item/weapon/melee/arm_blade = 60 ) min_duration = 110 diff --git a/code/modules/surgery/ribcage.dm b/code/modules/surgery/ribcage.dm index cce3a13375b..e9707c1a181 100644 --- a/code/modules/surgery/ribcage.dm +++ b/code/modules/surgery/ribcage.dm @@ -12,7 +12,8 @@ /datum/surgery_step/ribcage/saw_ribcage allowed_tools = list( /obj/item/weapon/circular_saw = 100, \ - /obj/item/weapon/hatchet = 75 + /obj/item/weapon/hatchet = 75, \ + /obj/item/weapon/melee/arm_blade = 60 ) min_duration = 50 @@ -146,7 +147,7 @@ user.visible_message(msg, self_msg) target.op_stage.ribcage = 0 - + ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // ////////////////////////////////////////////////////////////////// From 03d0699637fb429243e5cdf229536ca63a975e49 Mon Sep 17 00:00:00 2001 From: DZD Date: Tue, 10 Feb 2015 09:25:54 -0500 Subject: [PATCH 20/37] Fixes runtime with getting inventory - Fixes runtime at living.dm line 195, when return_inv() is called for suits and accessories that store items. - Fixes use of 'stat == 2' instead of 'stat == DEAD' in objective.dm --- code/game/gamemodes/objective.dm | 2 +- code/modules/clothing/suits/storage.dm | 16 +++++++++++++++- .../clothing/under/accessories/storage.dm | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index f80b943cf76..3f9117f07b7 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -420,7 +420,7 @@ datum/objective/escape return 0 if(!emergency_shuttle.returned()) return 0 - if(!owner.current || owner.current.stat ==2) + if(!owner.current || owner.current.stat == DEAD) return 0 var/turf/location = get_turf(owner.current.loc) if(!location) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index cb03feb5997..c3b5c6f616a 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -26,4 +26,18 @@ /obj/item/clothing/suit/storage/hear_talk(mob/M, var/msg) pockets.hear_talk(M, msg) - ..() \ No newline at end of file + ..() + +/obj/item/clothing/suit/storage/proc/return_inv() + + var/list/L = list( ) + + L += src.contents + + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + for(var/obj/item/weapon/gift/G in src) + L += G.gift + if (istype(G.gift, /obj/item/weapon/storage)) + L += G.gift:return_inv() + return L \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 8a215233b08..caa7638befd 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -40,6 +40,20 @@ hold.hear_talk(M, msg, verb, speaking) ..() +/obj/item/clothing/accessory/storage/proc/return_inv() + + var/list/L = list( ) + + L += src.contents + + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + for(var/obj/item/weapon/gift/G in src) + L += G.gift + if (istype(G.gift, /obj/item/weapon/storage)) + L += G.gift:return_inv() + return L + /obj/item/clothing/accessory/storage/attack_self(mob/user as mob) if (has_suit) //if we are part of a suit hold.open(user) From e2a3c2adb704a9192e31abd4dba026bdb86f4927 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Tue, 10 Feb 2015 11:08:00 -0500 Subject: [PATCH 21/37] Fox fix Renames Fox.dm to fox.dm because Github can't download the right one. --- paradise.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paradise.dme b/paradise.dme index 1e5fe1c92c2..ac2f26dd60a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1341,7 +1341,7 @@ #include "code\modules\mob\living\simple_animal\friendly\corgi.dm" #include "code\modules\mob\living\simple_animal\friendly\crab.dm" #include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" -#include "code\modules\mob\living\simple_animal\friendly\Fox.dm" +#include "code\modules\mob\living\simple_animal\friendly\fox.dm" #include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" #include "code\modules\mob\living\simple_animal\friendly\slime.dm" From 2291981c15b0559bb920da2841f48c3332b853d4 Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Tue, 10 Feb 2015 17:16:32 +0100 Subject: [PATCH 22/37] Rename Fox.dm to fox.dm For some reason this didn't stick --- .../mob/living/simple_animal/friendly/{Fox.dm => fox.dm} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename code/modules/mob/living/simple_animal/friendly/{Fox.dm => fox.dm} (97%) diff --git a/code/modules/mob/living/simple_animal/friendly/Fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm similarity index 97% rename from code/modules/mob/living/simple_animal/friendly/Fox.dm rename to code/modules/mob/living/simple_animal/friendly/fox.dm index 095445069ca..da38c222b42 100644 --- a/code/modules/mob/living/simple_animal/friendly/Fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -30,4 +30,4 @@ icon_living = "Syndifox" icon_dead = "Syndifox_dead" flags = IS_SYNTHETIC|NO_BREATHE - faction = list("syndicate") \ No newline at end of file + faction = list("syndicate") From 72ef4f38d542c8624f315aa4c043406a5f39cc5e Mon Sep 17 00:00:00 2001 From: DZD Date: Tue, 10 Feb 2015 11:25:07 -0500 Subject: [PATCH 23/37] Fixes Runtimes Fixes runtimes with Assume Direct Control from View Vars, and observing from the main menu. Morgue sprite code is the cause of both runtimes, and this may break morgue tray sprites. --- code/modules/mob/login.dm | 8 +++++--- code/modules/mob/logout.dm | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 27127a83e4e..39a1fb53631 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -57,18 +57,20 @@ client.verbs |= H.species.abilities CallHook("Login", list("client" = src.client, "mob" = src)) - + //Update morgues on login/logout if (stat == DEAD) var/obj/structure/morgue/Morgue = null var/mob/living/carbon/human/C = null if (istype(src,/mob/dead/observer)) //We're a ghost, let's find our corpse var/mob/dead/observer/G = src + if(!G.mind) //This'll probably break morgue sprites, but the line under the next If statement causes runtimes with Assume Direct Control. + return if (G.can_reenter_corpse && G.mind.current) C = G.mind.current else if (istype(src,/mob/living/carbon/human)) C = src - + if (C) //We found our corpse, is it inside a morgue? if (istype(C.loc,/obj/structure/morgue)) Morgue = C.loc @@ -78,4 +80,4 @@ Morgue = B.loc if (Morgue) Morgue.update() - + diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 45449c1e1c7..36df2619e38 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -10,18 +10,20 @@ if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. send2adminirc("[key_name(src)] logged out - no more admins online.") ..() - + //Update morgues on login/logout if (stat == DEAD) var/obj/structure/morgue/Morgue = null var/mob/living/carbon/human/C = null if (istype(src,/mob/dead/observer)) //We're a ghost, let's find our corpse var/mob/dead/observer/G = src + if(!G.mind) //This'll probably break morgue sprites, but the line under the next If statement causes runtimes with Assume Direct Control. + return 1 if (G.can_reenter_corpse && G.mind.current) C = G.mind.current else if (istype(src,/mob/living/carbon/human)) C = src - + if (C) //We found our corpse, is it inside a morgue? if (istype(C.loc,/obj/structure/morgue)) Morgue = C.loc From f14b5ee7a5a933d5e70d7a56a674987ef3a45e7d Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 10 Feb 2015 21:44:30 +0100 Subject: [PATCH 24/37] UGH I HATE YOU BYOND --- code/game/machinery/atmoalter/canister.dm | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 580783b6df1..2a3d803e640 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -67,7 +67,7 @@ /obj/machinery/portable_atmospherics/canister/sleeping_agent name = "Canister: \[N2O\]" icon_state = "redws" - _color = list("redws", null, null, null) + _color = list("redsw", null, null, null) can_label = 0 /obj/machinery/portable_atmospherics/canister/nitrogen name = "Canister: \[N2\]" @@ -119,11 +119,16 @@ else update_flag |= 32 - if(oldcolor != _color || olddecals != decals) + if(list2params(oldcolor) == list2params(_color)) update_flag |= 64 - olddecals = decals + else oldcolor = _color + if(list2params(olddecals) == list2params(decals)) + update_flag |= 128 + else + olddecals = decals + if(update_flag == old_flag) return 1 else @@ -138,7 +143,8 @@ update_flag 8 = tank_pressure < ONE_ATMOS 16 = tank_pressure < 15*ONE_ATMOS 32 = tank_pressure go boom. -64 = decals/colors got changed +64 = colors +128 = decals */ if (src.destroyed) @@ -177,6 +183,7 @@ update_flag overlays += "can-o2" else if(update_flag & 32) overlays += "can-o3" + check_change()//call this here to update the bitflag, incase the canister gets relabeled instantly after again return /obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -416,7 +423,12 @@ update_flag decals = list() - var/list/tempposdecals = possibledecals + var/list/tempposdecals = list() + + for(var/d in possibledecals)//populate the temp list + tempposdecals.Add(d) + tempposdecals[d] = possibledecals[d] + while (src && !src.gc_destroyed && usr)//allow the user to select (theoretically) INFINITE DECALS!!! var/newdecal = input("Choose canister label", "Decal") as anything in tempposdecals if (newdecal == "Done") From 80112d8decc41287e0f7e4bb284e97c2ad056b8d Mon Sep 17 00:00:00 2001 From: Artorp Date: Wed, 11 Feb 2015 00:20:50 +0100 Subject: [PATCH 25/37] Fix canister N2O sprite --- code/game/machinery/atmoalter/canister.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 2a3d803e640..bc0cfb1f7a4 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -67,7 +67,7 @@ /obj/machinery/portable_atmospherics/canister/sleeping_agent name = "Canister: \[N2O\]" icon_state = "redws" - _color = list("redsw", null, null, null) + _color = list("redws", null, null, null) can_label = 0 /obj/machinery/portable_atmospherics/canister/nitrogen name = "Canister: \[N2\]" From 72273b8f56416a7b55a78afc2571c71a099e1ab2 Mon Sep 17 00:00:00 2001 From: FalseIncarnate Date: Tue, 10 Feb 2015 23:32:59 -0500 Subject: [PATCH 26/37] Food Cart Re-Sprite and Adjustments Swaps food cart sprite to use TG's food cart. - Old sprite is present in code for possible future use. Adds ability to wrench carts into place to prevent them from being moved. Food cart code adjusted to use lists instead of separate variables for each slot. - Slot variables have been commented out but left in code in case we want to switch back for some reason. Minor rearrangement of Janicart attackby checks to avoid potential issues with trying to use wrenches or crowbars on the cart while a trash bag is present. --- code/game/objects/structures/engicart.dm | 15 ++ code/game/objects/structures/foodcart.dm | 260 +++++++++++------------ code/game/objects/structures/janicart.dm | 19 +- icons/obj/foodcart.dmi | Bin 1049 -> 1767 bytes 4 files changed, 156 insertions(+), 138 deletions(-) diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 8a57ecfff9f..1257195ddf7 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -79,6 +79,21 @@ update_icon() else user << fail_msg + else if(istype(I, /obj/item/weapon/wrench)) + if (!anchored && !isinspace()) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] tightens \the [src]'s casters.", \ + " You have tightened \the [src]'s casters.", \ + "You hear ratchet.") + anchored = 1 + else if(anchored) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] loosens \the [src]'s casters.", \ + " You have loosened \the [src]'s casters.", \ + "You hear ratchet.") + anchored = 0 else usr << "You cannot interface your modules [src]!" diff --git a/code/game/objects/structures/foodcart.dm b/code/game/objects/structures/foodcart.dm index edd701a8104..37c030aba81 100644 --- a/code/game/objects/structures/foodcart.dm +++ b/code/game/objects/structures/foodcart.dm @@ -6,19 +6,21 @@ anchored = 0 density = 1 //Food slots - var/obj/item/weapon/reagent_containers/food/snacks/food1 = null - var/obj/item/weapon/reagent_containers/food/snacks/food2 = null - var/obj/item/weapon/reagent_containers/food/snacks/food3 = null - var/obj/item/weapon/reagent_containers/food/snacks/food4 = null - var/obj/item/weapon/reagent_containers/food/snacks/food5 = null - var/obj/item/weapon/reagent_containers/food/snacks/food6 = null + var/list/food_slots[6] + //var/obj/item/weapon/reagent_containers/food/snacks/food1 = null + //var/obj/item/weapon/reagent_containers/food/snacks/food2 = null + //var/obj/item/weapon/reagent_containers/food/snacks/food3 = null + //var/obj/item/weapon/reagent_containers/food/snacks/food4 = null + //var/obj/item/weapon/reagent_containers/food/snacks/food5 = null + //var/obj/item/weapon/reagent_containers/food/snacks/food6 = null //Drink slots - var/obj/item/weapon/reagent_containers/food/drinks/drink1 = null - var/obj/item/weapon/reagent_containers/food/drinks/drink2 = null - var/obj/item/weapon/reagent_containers/food/drinks/drink3 = null - var/obj/item/weapon/reagent_containers/food/drinks/drink4 = null - var/obj/item/weapon/reagent_containers/food/drinks/drink5 = null - var/obj/item/weapon/reagent_containers/food/drinks/drink6 = null + var/list/drink_slots[6] + //var/obj/item/weapon/reagent_containers/food/drinks/drink1 = null + //var/obj/item/weapon/reagent_containers/food/drinks/drink2 = null + //var/obj/item/weapon/reagent_containers/food/drinks/drink3 = null + //var/obj/item/weapon/reagent_containers/food/drinks/drink4 = null + //var/obj/item/weapon/reagent_containers/food/drinks/drink5 = null + //var/obj/item/weapon/reagent_containers/food/drinks/drink6 = null /obj/structure/foodcart/proc/put_in_cart(obj/item/I, mob/user) user.drop_item() @@ -31,89 +33,72 @@ var/fail_msg = "There are no open spaces for this in [src]." if(!I.is_robot_module()) if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) - if(!food1) - put_in_cart(I, user) - food1=I - update_icon() - else if(!food2) - put_in_cart(I, user) - food2=I - update_icon() - else if(!food3) - put_in_cart(I, user) - food3=I - update_icon() - else if(!food4) - put_in_cart(I, user) - food4=I - update_icon() - else if(!food5) - put_in_cart(I, user) - food5=I - update_icon() - else if(!food6) - put_in_cart(I, user) - food6=I - update_icon() - else + var/success = 0 + for(var/s=1,s<=6,s++) + if(!food_slots[s]) + put_in_cart(I, user) + food_slots[s]=I + update_icon() + success = 1 + break; + if(!success) user << fail_msg else if(istype(I, /obj/item/weapon/reagent_containers/food/drinks)) - if(!drink1) - put_in_cart(I, user) - drink1=I - update_icon() - else if(!drink2) - put_in_cart(I, user) - drink2=I - update_icon() - else if(!drink3) - put_in_cart(I, user) - drink3=I - update_icon() - else if(!drink4) - put_in_cart(I, user) - drink4=I - update_icon() - else if(!drink5) - put_in_cart(I, user) - drink5=I - update_icon() - else if(!drink6) - put_in_cart(I, user) - drink6=I - update_icon() - else + var/success = 0 + for(var/s=1,s<=6,s++) + if(!drink_slots[s]) + put_in_cart(I, user) + drink_slots[s]=I + update_icon() + success = 1 + break; + if(!success) user << fail_msg + else if(istype(I, /obj/item/weapon/wrench)) + if (!anchored && !isinspace()) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] tightens \the [src]'s casters.", \ + " You have tightened \the [src]'s casters.", \ + "You hear ratchet.") + anchored = 1 + else if(anchored) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] loosens \the [src]'s casters.", \ + " You have loosened \the [src]'s casters.", \ + "You hear ratchet.") + anchored = 0 else usr << "You cannot interface your modules [src]!" /obj/structure/foodcart/attack_hand(mob/user) user.set_machine(src) var/dat - if(food1) - dat += "[food1.name]
" - if(food2) - dat += "[food2.name]
" - if(food3) - dat += "[food3.name]
" - if(food4) - dat += "[food4.name]
" - if(food5) - dat += "[food5.name]
" - if(food6) - dat += "[food6.name]
" - if(drink1) - dat += "[drink1.name]
" - if(drink2) - dat += "[drink2.name]
" - if(drink3) - dat += "[drink3.name]
" - if(drink4) - dat += "[drink4.name]
" - if(drink5) - dat += "[drink5.name]
" - if(drink6) - dat += "[drink6.name]
" + if(food_slots[1]) + dat += "[food_slots[1]]
" + if(food_slots[2]) + dat += "[food_slots[2]]
" + if(food_slots[3]) + dat += "[food_slots[3]]
" + if(food_slots[4]) + dat += "[food_slots[4]]
" + if(food_slots[5]) + dat += "[food_slots[5]]
" + if(food_slots[6]) + dat += "[food_slots[6]]
" + if(drink_slots[1]) + dat += "[drink_slots[1]]
" + if(drink_slots[2]) + dat += "[drink_slots[2]]
" + if(drink_slots[3]) + dat += "[drink_slots[3]]
" + if(drink_slots[4]) + dat += "[drink_slots[4]]
" + if(drink_slots[5]) + dat += "[drink_slots[5]]
" + if(drink_slots[6]) + dat += "[drink_slots[6]]
" var/datum/browser/popup = new(user, "foodcart", name, 240, 160) popup.set_content(dat) popup.open() @@ -125,69 +110,71 @@ return var/mob/living/user = usr if(href_list["f1"]) - if(food1) - user.put_in_hands(food1) - user << "You take [food1] from [src]." - food1 = null + if(food_slots[1]) + user.put_in_hands(food_slots[1]) + user << "You take [food_slots[1]] from [src]." + food_slots[1] = null if(href_list["f2"]) - if(food2) - user.put_in_hands(food2) - user << "You take [food2] from [src]." - food2 = null + if(food_slots[2]) + user.put_in_hands(food_slots[2]) + user << "You take [food_slots[2]] from [src]." + food_slots[2] = null if(href_list["f3"]) - if(food3) - user.put_in_hands(food3) - user << "You take [food3] from [src]." - food3 = null + if(food_slots[3]) + user.put_in_hands(food_slots[3]) + user << "You take [food_slots[3]] from [src]." + food_slots[3] = null if(href_list["f4"]) - if(food4) - user.put_in_hands(food4) - user << "You take [food4] from [src]." - food4 = null + if(food_slots[4]) + user.put_in_hands(food_slots[4]) + user << "You take [food_slots[4]] from [src]." + food_slots[4] = null if(href_list["f5"]) - if(food5) - user.put_in_hands(food5) - user << "You take [food5] from [src]." - food5 = null + if(food_slots[5]) + user.put_in_hands(food_slots[5]) + user << "You take [food_slots[5]] from [src]." + food_slots[5] = null if(href_list["f6"]) - if(food6) - user.put_in_hands(food6) - user << "You take [food6] from [src]." - food6 = null + if(food_slots[6]) + user.put_in_hands(food_slots[6]) + user << "You take [food_slots[6]] from [src]." + food_slots[6] = null if(href_list["d1"]) - if(drink1) - user.put_in_hands(drink1) - user << "You take [drink1] from [src]." - drink1 = null + if(drink_slots[1]) + user.put_in_hands(drink_slots[1]) + user << "You take [drink_slots[1]] from [src]." + drink_slots[1] = null if(href_list["d2"]) - if(drink2) - user.put_in_hands(drink2) - user << "You take [drink2] from [src]." - drink2 = null + if(drink_slots[2]) + user.put_in_hands(drink_slots[2]) + user << "You take [drink_slots[2]] from [src]." + drink_slots[2] = null if(href_list["d3"]) - if(drink3) - user.put_in_hands(drink3) - user << "You take [drink3] from [src]." - drink3 = null + if(drink_slots[3]) + user.put_in_hands(drink_slots[3]) + user << "You take [drink_slots[3]] from [src]." + drink_slots[3] = null if(href_list["d4"]) - if(drink4) - user.put_in_hands(drink4) - user << "You take [drink4] from [src]." - drink4 = null + if(drink_slots[4]) + user.put_in_hands(drink_slots[4]) + user << "You take [drink_slots[4]] from [src]." + drink_slots[4] = null if(href_list["d5"]) - if(drink5) - user.put_in_hands(drink5) - user << "You take [drink5] from [src]." - drink5 = null + if(drink_slots[5]) + user.put_in_hands(drink_slots[5]) + user << "You take [drink_slots[5]] from [src]." + drink_slots[5] = null if(href_list["d6"]) - if(drink6) - user.put_in_hands(drink6) - user << "You take [drink6] from [src]." - drink6 = null + if(drink_slots[6]) + user.put_in_hands(drink_slots[6]) + user << "You take [drink_slots[6]] from [src]." + drink_slots[6] = null - update_icon() + update_icon() //Not really needed without overlays, but keeping just in case updateUsrDialog() +/* +Overlays for cart_unused /obj/structure/foodcart/update_icon() overlays = null if(food1) @@ -213,4 +200,5 @@ if(drink5) overlays += "cart_drink5" if(drink6) - overlays += "cart_drink6" \ No newline at end of file + overlays += "cart_drink6" +*/ \ No newline at end of file diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 9ca2d7cbdb4..e6c7105796c 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -482,14 +482,29 @@ update_icon() else user << "[src] can't hold any more signs." - else if(mybag) - mybag.attackby(I, user) else if(istype(I, /obj/item/weapon/crowbar)) user.visible_message("[user] begins to empty the contents of [src].") if(do_after(user, 30)) usr << "You empty the contents of [src]'s bucket onto the floor." reagents.reaction(src.loc) src.reagents.clear_reagents() + else if(istype(I, /obj/item/weapon/wrench)) + if (!anchored && !isinspace()) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] tightens \the [src]'s casters.", \ + " You have tightened \the [src]'s casters.", \ + "You hear ratchet.") + anchored = 1 + else if(anchored) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] loosens \the [src]'s casters.", \ + " You have loosened \the [src]'s casters.", \ + "You hear ratchet.") + anchored = 0 + else if(mybag) + mybag.attackby(I, user) else usr << "You cannot interface your modules [src]!" diff --git a/icons/obj/foodcart.dmi b/icons/obj/foodcart.dmi index 470af70eb1fb4fb912d08ea4550b791ff59cde5b..334eb512993aac1e9373aeb4881cb36ad40c7a03 100644 GIT binary patch delta 1614 zcmV-U2C?~>2w~07fbffPer?E)e+m0Pw625Lh5iFc2Ra6*M3VI3N)CC=fFs3p*qXLMRS4AqyB8 zA0;O+X=!NynUUWp48Xv^X3R7H|CvloOp!7|9)Ev-hlhuek&%XmhO)A&zy)I{f>U;?&a1GZoUwqOOeU=zy3DA zt~shh7XSbRCrLy>RCt{2nT=B#M;M2%SkzmN#IFFKYonBFHRH#HvSXu zpOBRgWS%cq#}E0` z;jDk-&9C~Y|Fpj*K;%Y&b^rpspY&4CrylC}`+4I6M0UM>fisK-gXYMtHV6a)X99r+ z0on{$1MR3l02CSog27-YMCribXM>*)ogF#{+ratu2s9%Y*0gXq91PLHFD_h+3=dx# zj$9o15={W|6(#CWv~Y+HT!_Rjaf6Ys&;)3Ig>PBAk4F77)TVE!1xS>HS#w>^grS zNl{6H>%hS=>cUE|8L&%X=rCV${eUSTNg)Pqq(JaLV|;wvT7ij)35x|LRci%Q)nWmG zK=3cP$*@u&nY@`yS}6eWNlPnmbh*Va?{=Hf7J*diRw`xQEuFrdPPat>;!~|uAPov_ z5fBIj0)gN^Oe>$^+uG;Oox7%gI5mGYW!h(Qa?-TVz3J&D0(Z>?W@cv01zPwhK7Fs5 zz+0+-+Cl}Un^iy{5C{YUfj}S-2n2%HvHUy#*&k<*h`^jx0<(s|-1r+ok(>JmF!F)S z{VESQ^Yily3yX`{?83twlEBjarF?!VzpU$e;ZcE6eO^QqSXo_L|EXBiH}rqpA!q_W zGlA8awZ}!hPmX3h0#Bc2Id}pq`U55aYhY`u zTrNMWfhO?yKp?kO@0G<8$UM|HYXS$OXP^oE+Lto~o@EWTx3_=86hfO_f95jJUwonyVhYI934A7>a@bZt` zD?SHnudRW~GK#>mKL08YH@`fv^CurW2lD?y$uFu;D(v5oN~N;0V6eLj`DziP1j}kh z%~jaluT;n0UL^-Fpa>MzVy4u1d@obPseqK(-*5iH{(c4{zrFko4dxPIe>Y_k+5i9m M07*qoM6N<$f<~vu&j0`b delta 865 zcmV-n1D^cn4Veg#BM$)NP)t-sz`(#vOiXEMX_Hj}LN?3*Gcz;He}8|#z`%!xhmnzy z%w{uYnaqZUhO)A{WnV_uYUN#cc-}^4!>*jw z-6XEGvLWR%8?BaPUT(X8&~1s)HaKl@+Tpav=>exljM@~|CzwDi*gz~8K`dB7ESN#; z-wrj6^B{l!^#$ddvU5kXt+D_B0yarRK~#90?b-crnm`=KaUHEn5urW|+bPglYRjCn z>&k`?#X@V1`~Ux+-GQ{mvK?8*-LidNY5D_Ry*FP-l(bX=0P)Jg1IllHic4Ji7kKPX zNC%0-Sfx^_R%UQcMh9b0hV=QS?ss8?Ni&%9dPzuYYtkSI6yysah^2+izKk$l5B71 zpMY7513DzYk%@~7IhGYr2(zgj(g1P~42O>6Ty7N+a7FDO>^}!6!`&{qfB@IMa^3xd z(vg2Q*akeGJyk>i+1`CMfe+_O8gMD6Mx)V3UiUx}(24_6V}f76Cw&{BIy;BW39o?u zwK+(xff}EAid#VU`t!{;U`#JP`H680kYqgx=#UAh-4wS=px=B^ZsTjv-n$392A6<_ zR=HKlho4G}zsBbtBl~~jvcKV=$M;iO2o`zyW#86&o<0&jkl8e6az(FE{`Ie#0FlG9U=< zf<{9{KN7*!xvq; z=HcOy`G>33in(U7STNT-t=Aa=kL-Y6ug4C^@hHB2$_n^H6Yz6PV4XDq00000004k} r!vE*L`M&wz12%#K000000DzMp&`(Y~G>pKV00000NkvXXu0mjfN&J?3 From 017c63dfa24cadd165b10683633dfc7aea9efaf2 Mon Sep 17 00:00:00 2001 From: DZD Date: Wed, 11 Feb 2015 17:20:22 -0500 Subject: [PATCH 27/37] Fixes - Fixes #294, #296. - Purges use of 2 instead of DEAD when checking for stat in objective.dm --- .../changeling/powers/augmented_eyesight.dm | 2 +- .../gamemodes/changeling/powers/tiny_prick.dm | 7 +++-- code/game/gamemodes/objective.dm | 31 ++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index e2f88ac9d9f..d40da71fff1 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -15,7 +15,7 @@ user << "We feel a minute twitch in our eyes, and darkness creeps away." else user << "Our vision dulls. Shadows gather." - user.sight -= SEE_MOBS + user.sight &= ~SEE_MOBS while(active) user.see_in_dark = 8 user.see_invisible = 2 diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 2e6883196bc..d7820d11188 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -37,8 +37,6 @@ if(H.species.flags & IS_SYNTHETIC) user << "This won't work on synthetics." return - if(H.species.flags & NO_SCAN) //Prevents transforming slimes and killing them instantly - user << "This won't work on a creature with abnormal genetic material." if(!isturf(user.loc)) return if(get_dist(user, target) > (user.mind.changeling.sting_range)) @@ -87,6 +85,11 @@ if((M_HUSK in target.mutations) || (!ishuman(target) && !ismonkey(target))) user << "Our sting appears ineffective against its DNA." return 0 + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.species.flags & NO_SCAN) //Prevents transforming slimes and killing them instantly + user << "This won't work on a creature with abnormal genetic material." + return 0 return 1 /obj/effect/proc_holder/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3f9117f07b7..e5157e50bd9 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -30,7 +30,7 @@ datum/objective proc/find_target() var/list/possible_targets = list() for(var/datum/mind/possible_target in ticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD)) possible_targets += possible_target if(possible_targets.len > 0) target = pick(possible_targets) @@ -38,7 +38,7 @@ datum/objective proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned. var/list/possible_targets = list() for(var/datum/mind/possible_target in ticker.minds) - if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) && (possible_target.current.stat != 2) ) + if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) && (possible_target.current.stat != DEAD) ) possible_targets += possible_target if(possible_targets.len > 0) target = pick(possible_targets) @@ -47,7 +47,7 @@ datum/objective proc/find_target_with_special_role(role) var/list/possible_targets = list() for(var/datum/mind/possible_target in ticker.minds) - if((possible_target != owner) && ishuman(possible_target.current) && (role && possible_target.special_role == role || !role && possible_target.special_role) && (possible_target.current.stat != 2) ) + if((possible_target != owner) && ishuman(possible_target.current) && (role && possible_target.special_role == role || !role && possible_target.special_role) && (possible_target.current.stat != DEAD) ) possible_targets += possible_target if(possible_targets.len > 0) target = pick(possible_targets) @@ -385,7 +385,7 @@ datum/objective/block for(var/mob/living/player in player_list) if(player.type in protected_mobs) continue if (player.mind) - if (player.stat != 2) + if (player.stat != DEAD) if (get_turf(player) in shuttle) return 0 return 1 @@ -451,7 +451,14 @@ datum/objective/escape/escape_with_identity var/target_real_name // Has to be stored because the target's real_name can change over the course of the round find_target() - target = ..() + var/list/possible_targets = list() //Copypasta because NO_SCAN races, yay for snowflakes. + for(var/datum/mind/possible_target in ticker.minds) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD)) + var/mob/living/carbon/human/H = possible_target.current + if(!(H.species.flags & NO_SCAN)) + possible_targets += possible_target + if(possible_targets.len > 0) + target = pick(possible_targets) if(target && target.current) target_real_name = target.current.real_name explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing their identification card." @@ -658,7 +665,7 @@ datum/objective/download check_completion() if(!ishuman(owner.current)) return 0 - if(!owner.current || owner.current.stat == 2) + if(!owner.current || owner.current.stat == DEAD) return 0 if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized)) return 0 @@ -685,25 +692,25 @@ datum/objective/capture var/captured_amount = 0 var/area/ninja/holding/A = locate() for(var/mob/living/carbon/human/M in A)//Humans. - if(M.stat==2)//Dead folks are worth less. + if(M.stat == DEAD)//Dead folks are worth less. captured_amount+=0.5 continue captured_amount+=1 for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure. captured_amount+=0.1 for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research. - if(M.stat==2) + if(M.stat == DEAD) captured_amount+=0.5 continue captured_amount+=1 for(var/mob/living/carbon/alien/humanoid/M in A)//Aliens are worth twice as much as humans. if(istype(M, /mob/living/carbon/alien/humanoid/queen))//Queens are worth three times as much as humans. - if(M.stat==2) + if(M.stat == DEAD) captured_amount+=1.5 else captured_amount+=3 continue - if(M.stat==2) + if(M.stat == DEAD) captured_amount+=1 continue captured_amount+=2 @@ -845,7 +852,7 @@ datum/objective/heist/kidnap var/list/priority_targets = list() for(var/datum/mind/possible_target in ticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (possible_target.assigned_role != "MODE")) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != "MODE")) possible_targets += possible_target for(var/role in roles) if(possible_target.assigned_role == role) @@ -865,7 +872,7 @@ datum/objective/heist/kidnap check_completion() if(target && target.current) - if (target.current.stat == 2) + if (target.current.stat == DEAD) return 0 // They're dead. Fail. //if (!target.current.restrained()) // return 0 // They're loose. Close but no cigar. From 7cf86e2cfe4070e5c0001185e58ed76ac3396c2b Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 01:23:16 -0500 Subject: [PATCH 28/37] Fixes light going through walls. --- code/controllers/_DynamicAreaLighting_TG.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/_DynamicAreaLighting_TG.dm b/code/controllers/_DynamicAreaLighting_TG.dm index 8168ef50aad..15e0b2e9c8f 100644 --- a/code/controllers/_DynamicAreaLighting_TG.dm +++ b/code/controllers/_DynamicAreaLighting_TG.dm @@ -94,7 +94,7 @@ datum/light_source if(owner.loc && owner.luminosity > 0) readrgb(owner.l_color) effect = list() - for(var/turf/T in view(owner.get_light_range(),owner)) + for(var/turf/T in view(owner.get_light_range(),get_turf(owner))) var/delta_lumen = lum(T) if(delta_lumen > 0) effect[T] = delta_lumen From 239c996b1c5c28108803b102c943c7e1a9083e5c Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 01:58:34 -0500 Subject: [PATCH 29/37] Moved grenade logging from adminlog to attacklog --- code/game/objects/effects/effect_system.dm | 4 ++-- code/game/objects/items/weapons/grenades/grenade.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index beee3a49494..10ac7a44994 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -469,10 +469,10 @@ steam.start() -- spawns the effect var/more = "" if(M) more = "(?)" - message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) + msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") else - message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) + msg_admin_attack("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") start() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 909dff136e2..bd02b527144 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -63,7 +63,7 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) var/log_str = "[key_name(usr)]? has primed a [name] for detonation at [A.name] (JMP)." - message_admins(log_str) + msg_admin_attack(log_str) log_game(log_str) bombers += "[log_str]" if(iscarbon(user)) From 4d2ccff974d9957167fee004c8b8b3f88931b6c6 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:04:32 -0500 Subject: [PATCH 30/37] Moved bomb logging from adminlog to attacklog --- code/game/objects/items/devices/transfer_valve.dm | 12 ++++++------ code/modules/assembly/bomb.dm | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 282abc1b2bc..a3e0d2f7b78 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -51,8 +51,8 @@ A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). bombers += "[key_name(user)] attached a [item] to a transfer valve." - message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") - log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") + msg_admin_attack("[key_name_admin(user)] attached [item] to a transfer valve.") + log_game("[key_name_admin(user)] attached [item] to a transfer valve.") attacher = user nanomanager.update_uis(src) // update all UIs attached to src return @@ -66,7 +66,7 @@ /obj/item/device/transfer_valve/attack_self(mob/user as mob) ui_interact(user) - + /obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) // this is the data which will be sent to the ui @@ -77,13 +77,13 @@ data["valveOpen"] = valve_open ? 1 : 0 // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui.set_initial_data(data) // open the new ui window ui.open() // auto update every Master Controller tick @@ -190,7 +190,7 @@ log_str += " Last touched by: [src.fingerprintslast][last_touch_info]" bombers += log_str - message_admins(log_str, 0, 1) + msg_admin_attack(log_str, 0, 1) log_game(log_str) merge_gases() spawn(20) // In case one tank bursts diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index c8d2c29e92c..d2d6225377f 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -45,7 +45,7 @@ if(!status) status = 1 bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" - message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]") + msg_admin_attack("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]") user << "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited." else status = 0 From a3716dbea477d9460ce3e5666aab899972e393a4 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:06:44 -0500 Subject: [PATCH 31/37] Moved fueltankbomb logging from adminlong to attacklog --- code/modules/reagents/reagent_dispenser.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index b95ea0c97a9..1d69fd6fecd 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -144,7 +144,7 @@ var/obj/item/device/assembly_holder/H = W if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) - message_admins("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.") + msg_admin_attack("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.") log_game("[key_name(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.") rig = W From e9b413b1ff1a520a5f511dbcdca274ed88218d67 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:16:55 -0500 Subject: [PATCH 32/37] Moved broken/deanchored window logging from adminlog to attacklog --- code/game/objects/structures/window.dm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 1c101cf58f4..8cdc2666bc2 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -65,7 +65,7 @@ var/global/wcColored if(health <= 0) var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window destroyed by [Proj.firer.name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!") + msg_admin_attack("Window destroyed by [Proj.firer.name] ([formatPlayerPanel(Proj.firer,Proj.firer.ckey)]) via \an [Proj]! pdiff = [pdiff] at [formatJumpTo(loc)]!") log_admin("Window destroyed by ([Proj.firer.ckey]) via \an [Proj]! pdiff = [pdiff] at [loc]!") destroy() return @@ -135,19 +135,19 @@ var/global/wcColored var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) if(M) - message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!") + msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!") log_admin("Window with pdiff [pdiff] at [loc] deanchored by [M.real_name] ([M.ckey])!") else - message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!") + msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] deanchored by [AM]!") log_admin("Window with pdiff [pdiff] at [loc] deanchored by [AM]!") if(health <= 0) var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) if(M) - message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!") + msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [M.real_name] ([formatPlayerPanel(M,M.ckey)])!") log_admin("Window with pdiff [pdiff] at [loc] destroyed by [M.real_name] ([M.ckey])!") else - message_admins("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!") + msg_admin_attack("Window with pdiff [pdiff] at [formatJumpTo(loc)] destroyed by [AM]!") log_admin("Window with pdiff [pdiff] at [loc] destroyed by [AM]!") destroy() @@ -158,7 +158,7 @@ var/global/wcColored user.visible_message("[user] smashes through [src]!") var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!") + msg_admin_attack("Window destroyed by hulk [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!") log_admin("Window destroyed by hulk [user.real_name] ([user.ckey]) with pdiff [pdiff] at [loc]!") destroy() else if (usr.a_intent == "harm") @@ -183,7 +183,7 @@ var/global/wcColored user.visible_message("[user] smashes through [src]!") var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!") + msg_admin_attack("Window destroyed by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) with pdiff [pdiff] at [formatJumpTo(loc)]!") destroy() else //for nicer text~ user.visible_message("[user] smashes into [src]!") @@ -240,7 +240,7 @@ var/global/wcColored return if(W.flags & NOBLUDGEON) return - + if(istype(W, /obj/item/weapon/screwdriver)) if(reinf && state >= 1) state = 3 - state @@ -254,7 +254,7 @@ var/global/wcColored if(!anchored) var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!") + msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!") log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!") else if(!reinf) anchored = !anchored @@ -264,7 +264,7 @@ var/global/wcColored if(!anchored) var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!") + msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!") log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!") else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1) state = 1 - state @@ -305,7 +305,7 @@ var/global/wcColored step(src, get_dir(user, src)) var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!") + msg_admin_attack("Window with pdiff [pdiff] deanchored by [user.real_name] ([formatPlayerPanel(user,user.ckey)]) at [formatJumpTo(loc)]!") log_admin("Window with pdiff [pdiff] deanchored by [user.real_name] ([user.ckey]) at [loc]!") else playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) @@ -325,7 +325,7 @@ var/global/wcColored if(health <= 0) var/pdiff=performWallPressureCheck(src.loc) if(pdiff>0) - message_admins("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!") + msg_admin_attack("Window with pdiff [pdiff] broken at [formatJumpTo(loc)]!") destroy() return From 453b23961d616951092bc97aa70e6682d366a55d Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:17:48 -0500 Subject: [PATCH 33/37] Moved singulo logging from adminlog to attacklog --- code/modules/power/singularity/field_generator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index da470fbee52..72bbc3804ea 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -350,6 +350,6 @@ field_generator power level display if(O.last_warning && temp) if((world.time - O.last_warning) > 50) //to stop message-spam temp = 0 - message_admins("A singulo exists and a containment field has failed.",1) + msg_admin_attack("A singulo exists and a containment field has failed.",1) investigate_log("has failed whilst a singulo exists.","singulo") O.last_warning = world.time From fea89953f1cf67068a01caaff87d26196f94d198 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:21:23 -0500 Subject: [PATCH 34/37] Moved emitter deletions from adminlog to attacklog --- code/modules/power/singularity/emitter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 4142778e1e3..601d7191f7b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -40,7 +40,7 @@ src.directwired = 1 /obj/machinery/power/emitter/Destroy() - message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) + msg_admin_attack("Emitter deleted at ([x],[y],[z] - JMP)",0,1) log_game("Emitter deleted at ([x],[y],[z])") investigate_log("deleted at ([x],[y],[z])","singulo") ..() From 6cf4852a604fce85c49071f6a29e56c1c642c3f2 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:41:33 -0500 Subject: [PATCH 35/37] More nade logging from adminlog to attacklog --- code/game/objects/items/weapons/grenades/chem_grenade.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 2a6def07dca..ba7fae62304 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -96,7 +96,7 @@ else if(clown_check(user)) // This used to go before the assembly check, but that has absolutely zero to do with priming the damn thing. You could spam the admins with it. var/log_str = "[key_name(usr)]? has primed a [name] for detonation at [A.name] (JMP)." - message_admins(log_str) + msg_admin_attack(log_str) log_game(log_str) bombers += "[log_str]" user << "You prime the [name]! [det_time / 10] second\s!" @@ -144,7 +144,7 @@ var/turf/bombturf = get_turf(loc) var/area/A = bombturf.loc var/log_str = "[key_name(usr)]? has completed [name] at [A.name] (JMP) [contained]." - message_admins(log_str) + msg_admin_attack(log_str) log_game(log_str) else user << "You need to add at least one beaker before locking the assembly." From d0d000160b1a8b7ca20c50e14fd853c578ffd01e Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 02:44:28 -0500 Subject: [PATCH 36/37] And even moar nade logging from adminlog to attacklog --- code/game/machinery/syndicatebomb.dm | 2 +- code/game/objects/items/weapons/grenades/ghettobomb.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index fcce1742ff9..2aff4b378e7 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -138,7 +138,7 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) if(payload && !istype(payload, /obj/item/weapon/bombcore/training)) - message_admins("[key_name(user)]? has primed a [name] ([payload]) for detonation at [A.name] (JMP).") + msg_admin_attack("[key_name(user)]? has primed a [name] ([payload]) for detonation at [A.name] (JMP).") log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") payload.adminlog = "The [src.name] that [key_name(user)] had primed detonated!" diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index e1240629ed2..830e2052bb0 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -72,7 +72,7 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) var/log_str = "[key_name(usr)]? has primed a [name] for detonation at [A.name] (JMP)." - message_admins(log_str) + msg_admin_attack(log_str) log_game(log_str) bombers += "[log_str]" if(iscarbon(user)) From cee11d4718c00a07f913c9a9b0abeb97c56ce7f7 Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Thu, 12 Feb 2015 03:06:59 -0500 Subject: [PATCH 37/37] Attack log some cyborg killswitch stuff --- code/game/machinery/computer/robot.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 632fe6aae60..7692b31e3e4 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -123,7 +123,7 @@ if (istype(I)) if(src.check_access(I)) if (!status) - message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!") + msg_admin_attack("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!") log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!") use_log += text("\[[time_stamp()]\] [usr.name] ([usr.ckey]) has initiated the global cyborg killswitch!") src.status = 1 @@ -169,7 +169,7 @@ R.ResetSecurityCodes() else - message_admins("\blue [key_name_admin(usr)] detonated [R.name]!") + msg_admin_attack("\blue [key_name_admin(usr)] detonated [R.name]!") log_game("\blue [key_name_admin(usr)] detonated [R.name]!") use_log += text("\[[time_stamp()]\] [usr.name] ([usr.ckey]) detonated [R.name] ([R.ckey])!") R.self_destruct() @@ -183,7 +183,7 @@ var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") if(choice == "Confirm") if(R && istype(R)) - message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") + msg_admin_attack("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") R.canmove = !R.canmove if (R.lockcharge) @@ -208,7 +208,7 @@ var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort") if(choice == "Confirm") if(R && istype(R)) -// message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!") + msg_admin_attack("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!") log_game("[key_name(usr)] emagged [R.name] using robotic console!") R.emagged = 1 if(R.hud_used)