diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 0dcbdf15d47..632fdca82f7 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -237,7 +237,7 @@ datum/objective/block datum/objective/escape - explanation_text = "Escape on the shuttle alive." + explanation_text = "Escape on the shuttle or an escape pod alive." check_completion() diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 4fa1630dd50..eb4135f4104 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -565,13 +565,13 @@ process_bot() sleep(2) process_bot() + sleep(2) + process_bot() + sleep(2) + process_bot() if(2) process_bot() - spawn(2) - process_bot() - sleep(2) - process_bot() - sleep(2) + spawn(4) process_bot() if(3) process_bot() diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index dd496bbfb35..eabfdd003ab 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -51,7 +51,7 @@ if(!charging || (stat & (BROKEN|NOPOWER)) ) return - var/added = charging.give(50) + var/added = charging.give(500) use_power(added / CELLRATE) updateicon() \ No newline at end of file diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b2e1f3f5578..c6c2eac9296 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -7,10 +7,10 @@ var/name_part1 var/name_part2 - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Rape ", "Pwn ", "Own ") + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ") - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Faggot ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "Metroid", "Griefer", "ERPer", "Homosexual", "Lizard Man", "Unicorn") + name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "Metroid", "Griefer", "ERPer", "Lizard Man", "Unicorn") src.enemy_name = dd_replacetext((name_part1 + name_part2), "the ", "") src.name = (name_action + name_part1 + name_part2) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 8098200a4ee..3ae6770ceaa 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -163,7 +163,7 @@ to destroy them and players will be able to make replacements. build_path = "/obj/machinery/r_n_d/destructive_analyzer" board_type = "machine" origin_tech = "magnets=2;engineering=2;programming=2" - frame_desc = "Requires 2 Scanning Modules, 1 Manipulator, and 1 Micro-Laser." + frame_desc = "Requires 1 Scanning Module, 1 Manipulator, and 1 Micro-Laser." req_components = list( "/obj/item/weapon/stock_parts/scanning_module" = 1, "/obj/item/weapon/stock_parts/manipulator" = 1, diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 80ea9a50cca..01dd2e422e1 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -113,6 +113,10 @@ "Misc"=list(/obj/item/mecha_parts/mecha_tracking) ) + + + + New() ..() component_parts = list() @@ -408,6 +412,12 @@ proc/sync(silent=null) + if(queue.len) + if(!silent) + temp = "Error. Please clear processing queue before updating!" + src.updateUsrDialog() + return + if(!silent) temp = "Updating local R&D database..." src.updateUsrDialog() diff --git a/code/game/objects/closets.dm b/code/game/objects/closets.dm index bbb8d7c027b..b4c6af06d29 100644 --- a/code/game/objects/closets.dm +++ b/code/game/objects/closets.dm @@ -20,6 +20,9 @@ for(var/obj/item/I in src) I.loc = src.loc + for(var/obj/mecha/working/ripley/deathripley/I in src) + I.loc = src.loc + for(var/mob/M in src) M.loc = src.loc if(M.client) @@ -54,6 +57,9 @@ if(!I.anchored) I.loc = src + for(var/obj/mecha/working/ripley/deathripley/I in src.loc) + I.loc = src + for(var/mob/M in src.loc) if(istype (M, /mob/dead/observer)) continue diff --git a/code/game/objects/closets/secure/cargo.dm b/code/game/objects/closets/secure/cargo.dm index 730d2dc6c9c..6ae193e14d7 100644 --- a/code/game/objects/closets/secure/cargo.dm +++ b/code/game/objects/closets/secure/cargo.dm @@ -1,3 +1,24 @@ +/obj/structure/closet/secure_closet/cargotech + name = "Cargo Technician's Locker" + req_access = list(access_cargo) + //icon_state = "secureeng1" + //icon_closed = "secureeng" + //icon_locked = "secureeng1" + //icon_opened = "toolclosetopen" + //icon_broken = "secureengbroken" + //icon_off = "secureengoff" + + //Needs proper sprites + + New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/cargo(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/device/radio/headset/headset_cargo(src) + new /obj/item/clothing/gloves/black(src) + new /obj/item/weapon/cartridge/quartermaster(src) + return /obj/structure/closet/secure_closet/qm_personal name = "Quartermaster's Locker" diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index b634e20692f..bb00b0e1f2a 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -306,6 +306,14 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
  • Install the external reinforced armor plating (Not included due to NanoTrasen regulations. Can be made using 5 reinforced metal sheets.)
  • Secure the external reinforced armor plating with a wrench
  • Weld the external reinforced armor plating to the chassis
  • +
  • +
  • Additional Information:
  • +
  • The firefighting variation is made in a similar fashion.
  • +
  • A firesuit must be connected to the Firefighter chassis for heat shielding.
  • +
  • Internal armor is plasteel for additional strength.
  • +
  • External armor must be installed in 2 parts, totaling 10 sheets.
  • +
  • Completed mech is more resiliant against fire, and is a bit more durable overall
  • +
  • Nanotrasen is determined to the safety of its investments employees.
  • @@ -343,7 +351,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned Those are the basic steps to furthing science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter.

    The R&D Console

    - The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controled. More on those systems in their own sections. On it's own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, because if it gets damaged, you'll lose your data! In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database. + The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controled. More on those systems in their own sections. On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, because if it gets damaged, you'll lose your data! In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database. NOTE: The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices.

    Destructive Analyzer

    @@ -359,7 +367,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned As it has been stated, many devices when they're first discovered do not have a 100% reliablity when you first discover them. Instead, the reliablity of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. Once the device reachs a certain minimum reliability, you'll gain tech advancements from it.

    Building a Better Machine

    - Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, it's attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. + Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, its attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine. "} @@ -410,7 +418,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned

    Cyborg Modules

    - When a cyborg is created it picks out of an array of modules to designate it's purpose. There are 6 different cyborg modules. + When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules.

    Standard Cyborg

    The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.
    A Standard Cyborg comes with: @@ -584,7 +592,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned - "} + "} /obj/item/weapon/book/manual/engineering_guide name = "Engineering Textbook" @@ -680,37 +688,37 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned author = "NanoTrasen" dat = {" - - - - -

    Detective Work

    + + + + +

    Detective Work

    -Between your bouts of self-narration, and drinking whiskey on the rocks, you might get a case or two to solve.
    -To have the best chance to solve your case, follow these directions: -

    -

      -
    1. Go to the crime scene.
    2. -
    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog.)
    4. -
    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
    6. -
    7. Return to your office.
    8. -
    9. Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.
    10. -
    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
    12. -
    13. If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.
    14. -
    15. Look for clues from the suit fibres you found on your perp, and go about looking for more evidence with this new information, scanning as you go.
    16. -
    17. Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.
    18. -
    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
    20. -
    21. Since you now have both your dossier and the name of the person, print both out as evidence, and get security to nab your baddie.
    22. -
    23. Give yourself a pat on the back and a bottle of the ships finest vodka, you did it!.
    24. -
    -

    -It really is that easy! Good luck! + Between your bouts of self-narration, and drinking whiskey on the rocks, you might get a case or two to solve.
    + To have the best chance to solve your case, follow these directions: +

    +

      +
    1. Go to the crime scene.
    2. +
    3. Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog.)
    4. +
    5. Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too.
    6. +
    7. Return to your office.
    8. +
    9. Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.
    10. +
    11. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
    12. +
    13. If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.
    14. +
    15. Look for clues from the suit fibres you found on your perp, and go about looking for more evidence with this new information, scanning as you go.
    16. +
    17. Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.
    18. +
    19. Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it.
    20. +
    21. Since you now have both your dossier and the name of the person, print both out as evidence, and get security to nab your baddie.
    22. +
    23. Give yourself a pat on the back and a bottle of the ships finest vodka, you did it!.
    24. +
    +

    + It really is that easy! Good luck! - -"} \ No newline at end of file + + "} \ No newline at end of file diff --git a/code/game/objects/items/weapons/plant_bag.dm b/code/game/objects/items/weapons/plant_bag.dm index b4cda59a166..1cbb6f7903c 100644 --- a/code/game/objects/items/weapons/plant_bag.dm +++ b/code/game/objects/items/weapons/plant_bag.dm @@ -6,7 +6,7 @@ icon_state = "plantbag" name = "Plant Bag" var/mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/capacity = 10; //the number of plant pieces it can carry. + var/capacity = 50; //the number of plant pieces it can carry. flags = FPRINT | TABLEPASS | ONBELT w_class = 1 diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 53e58c3c4ff..d4e838e9f91 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -65,6 +65,23 @@ var/list/supply_groups = new() if (prob(5)) del(src) +/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates + name = "\improper Airtight plastic flaps" + desc = "Heavy duty, airtight, plastic flaps." + + New() //set the turf below the flaps to block air + var/turf/T = get_turf(src.loc) + if(T) + T.blocks_air = 1 + ..() + + Del() //lazy hack to set the turf to allow air to pass if it's a simulated floor + var/turf/T = get_turf(src.loc) + if(T) + if(istype(T, /turf/simulated/floor)) + T.blocks_air = 0 + ..() + /area/supplyshuttle name = "Supply Shuttle" icon_state = "supply" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index e4c40b1e788..3fe2c278f9d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -562,6 +562,20 @@ var/global/BSACooldown = 0 alert("The AI can't be monkeyized!", null, null, null, null, null) return + if (href_list["corgione"]) + if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) + var/mob/M = locate(href_list["corgione"]) + if(!ismob(M)) + return + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/N = M + log_admin("[key_name(usr)] attempting to corgize [key_name(M)]") + message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(M)]", 1) + N.corgize() + if(istype(M, /mob/living/silicon)) + alert("The AI can't be corgized!", null, null, null, null, null) + return + if (href_list["forcespeech"]) if ((src.rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) var/mob/M = locate(href_list["forcespeech"]) @@ -1287,6 +1301,13 @@ var/global/BSACooldown = 0 spawn(0) H.monkeyize() ok = 1 + if("corgi") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","M") + for(var/mob/living/carbon/human/H in world) + spawn(0) + H.corgize() + ok = 1 if("power") log_admin("[key_name(usr)] made all areas powered", 1) message_admins("\blue [key_name_admin(usr)] made all areas powered", 1) @@ -1927,6 +1948,10 @@ var/global/BSACooldown = 0 foo += text("Monkeyize | ") else foo += text("Monkeyized | ") + if(!iscorgi(M)) + foo += text("Corgize | ") + else + foo += text("Corgized | ") if(isAI(M)) foo += text("Is an AI | ") else if(ishuman(M)) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 9361b689074..a250adb9926 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -80,7 +80,7 @@ verbs += /client/proc/jumptokey verbs += /client/proc/jumptomob verbs += /client/proc/jumptoturf - + verbs += /client/proc/jumptocoord verbs += /client/proc/cmd_admin_add_freeform_ai_law verbs += /client/proc/cmd_admin_rejuvenate verbs += /client/proc/cmd_admin_drop_everything @@ -213,6 +213,7 @@ verbs += /client/proc/togglebuildmodeself verbs += /client/proc/hide_most_verbs verbs += /client/proc/tension_report + verbs += /client/proc/jumptocoord if (holder.level >= 3)//Trial Admin******************************************************************** verbs += /obj/admins/proc/toggleaban //abandon mob @@ -921,4 +922,4 @@ C.CarbonCopy2(NewObj) else NewObj.vars[V] = vars[V] - return NewObj + return NewObj diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 6c9bee0fe0f..696fa42ce66 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -51,6 +51,24 @@ message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) else A << "This mob is not located in the game world." + +/client/proc/jumptocoord(tx as num, ty as num, tz as num) + set category = "Admin" + set name = "Jump to Coordinate" + + if (!holder) + src << "Only administrators may use this command." + return + + if (config.allow_admin_jump) + if(src.mob) + var/mob/A = src.mob + A.x = tx + A.y = ty + A.z = tz + feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") + else alert("Admin jumping disabled") diff --git a/code/modules/clothing/gimmick.dm b/code/modules/clothing/gimmick.dm index 5639690fc1d..756309a9bbb 100644 --- a/code/modules/clothing/gimmick.dm +++ b/code/modules/clothing/gimmick.dm @@ -548,6 +548,21 @@ obj/item/clothing/suit/justice item_state = "justice" flags = FPRINT | TABLEPASS +/obj/item/clothing/under/gladiator + name = "gladiator uniform" + desc = "Are you not entertained? Is that not why you are here?" + icon_state = "gladiator" + item_state = "gladiator" + color = "gladiator" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + +/obj/item/clothing/head/helmet/gladiator + name = "gladiator helmet" + desc = "Ave, Imperator, morituri te salutant." + icon_state = "gladiator" + flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR + item_state="gladiator" + //stylish new hats /obj/item/clothing/head/bowlerhat diff --git a/code/modules/mob/simple_animal/corgi.dm b/code/modules/mob/simple_animal/corgi.dm index c2925685f6f..b0741d3f6a3 100644 --- a/code/modules/mob/simple_animal/corgi.dm +++ b/code/modules/mob/simple_animal/corgi.dm @@ -367,6 +367,13 @@ now_pushing = null return return +//PC stuff-Sieve + +/mob/living/simple_animal/corgi/proc/mind_initialize(mob/G) + mind = new + mind.current = src + mind.assigned_role = "Corgi" + mind.key = G.key /obj/item/weapon/reagent_containers/food/snacks/sliceable/meat/corgi name = "Corgi meat" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index cb8f388b9a4..3a6ee96ea11 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -308,6 +308,30 @@ new_metroid.a_intent = "hurt" new_metroid << "You are now a baby Metroid." + spawn(0)//To prevent the proc from returning null. + del(src) + return + +/mob/living/carbon/human/proc/corgize() + if (monkeyizing) + return + for(var/obj/item/W in src) + drop_from_slot(W) + update_clothing() + monkeyizing = 1 + canmove = 0 + icon = null + invisibility = 101 + for(var/t in organs) + del(t) + + var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc) + + new_corgi.mind_initialize(src) + new_corgi.key = key + + new_corgi.a_intent = "hurt" + new_corgi << "You are now a Corgi!." spawn(0)//To prevent the proc from returning null. del(src) return \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 6579ac6f4c9..46adc70108f 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -690,6 +690,7 @@ datum materials = list("$glass" = 2000, "acid" = 20) build_path = "/obj/item/weapon/circuitboard/mecha/durand/targeting" + honker_main name = "Circuit Design (\"H.O.N.K\" Central Control module)" desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." @@ -849,6 +850,7 @@ datum req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) build_path = "/obj/item/mecha_parts/mecha_equipment/generator/nuclear" + //////////////////////////////////////// //////////Disk Construction Disks/////// //////////////////////////////////////// @@ -1014,6 +1016,8 @@ datum reliability_base = 75 build_path = "/obj/item/weapon/stock_parts/matter_bin/super" + + subspace_ansible name = "Subspace Ansible" desc = "A compact module capable of sensing extradimensional activity." @@ -1113,7 +1117,7 @@ datum name = "Hyper-Capacity Power Cell" desc = "A power cell that holds 30000 units of energy" id = "hyper_cell" - req_tech = list("powerstorage" = 6, "materials" = 4) + req_tech = list("powerstorage" = 5, "materials" = 4) reliability_base = 85 build_type = PROTOLATHE materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index e70762f9803..a4eda36f22d 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 6f2da6e2f46..3a0c0715d39 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index d8d6cdcad04..81bd8126b52 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 2a4d79e7205..fdaaa510399 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/sound/machines/copier.ogg b/sound/machines/copier.ogg new file mode 100644 index 00000000000..4e407a573d4 Binary files /dev/null and b/sound/machines/copier.ogg differ