diff --git a/code/WorkInProgress/Tastyfish/livestock.dm b/code/WorkInProgress/Tastyfish/livestock.dm index f13e5b52918..a88c4f50e9d 100644 --- a/code/WorkInProgress/Tastyfish/livestock.dm +++ b/code/WorkInProgress/Tastyfish/livestock.dm @@ -103,7 +103,7 @@ // Cow /mob/living/simple_animal/livestock/cow - name = "cow" + name = "\improper Cow" icon_state = "cow" icon_living = "cow" icon_dead = "cow_d" @@ -137,7 +137,7 @@ // Chicken /mob/living/simple_animal/livestock/chicken - name = "chicken" + name = "\improper Chicken" icon_state = "chick" icon_living = "chick" icon_dead = "chick_d" @@ -163,7 +163,7 @@ desc = "Tasty!" /obj/structure/closet/critter - desc = "A critter crate." + desc = "\improper Critter crate." name = "Critter Crate" icon = 'storage.dmi' icon_state = "critter" @@ -172,7 +172,7 @@ icon_closed = "critter" /datum/supply_packs/chicken - name = "Chicken crate" + name = "\improper Chicken crate" contains = list("/mob/living/simple_animal/livestock/chicken", "/obj/item/weapon/reagent_containers/food/snacks/grown/corn") cost = 10 @@ -181,7 +181,7 @@ group = "Hydroponics" /datum/supply_packs/cow - name = "Cow crate" + name = "\improper Cow crate" contains = list("/mob/living/simple_animal/livestock/cow", "/obj/item/weapon/reagent_containers/food/snacks/grown/corn") cost = 50 diff --git a/code/defines/obj/clothing/jumpsuit.dm b/code/defines/obj/clothing/jumpsuit.dm index 960e194248c..c260df17670 100644 --- a/code/defines/obj/clothing/jumpsuit.dm +++ b/code/defines/obj/clothing/jumpsuit.dm @@ -183,7 +183,16 @@ name = "Chemist Jumpsuit" icon_state = "genetics" item_state = "w_suit" - color = "geneticswhite" + color = "chemistrywhite" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/virologist + desc = "Made of a special fiber that gives special protection against biohazards. Has a virologist rank stripe on it." + name = "Virology Jumpsuit" + icon_state = "virology" + item_state = "w_suit" + color = "virologywhite" permeability_coefficient = 0.50 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) diff --git a/code/game/events/Events/PowerOffline.dm b/code/game/events/Events/PowerOffline.dm index f71d9b4096e..92f4c9e643f 100644 --- a/code/game/events/Events/PowerOffline.dm +++ b/code/game/events/Events/PowerOffline.dm @@ -1,8 +1,10 @@ /datum/event/power_offline + var/list/protected_areas = list(/area/ai_monitored/storage/eva, /area/engine, /area/toxins/xenobiology, /area/turret_protected/ai) + Announce() for(var/obj/machinery/power/apc/a in world) if(!a.crit && a.z == 1) - if(istype(a.area, /area/engine) || istype(a.area, /area/toxins/xenobiology) || istype(a.area, /area/turret_protected/ai)) + if(a.area in protected_areas) continue a.eventoff = 1 a.update() diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 26139859a8a..dcc30eceecc 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -6,7 +6,8 @@ density = 1 var/deployable = 0.0 var/extended = 0.0 - var/timeleft = 60.0 + var/timeleft = 1200 + var/time_actual = 0 var/timing = 0.0 var/r_code = "ADMIN" var/code = "" @@ -22,8 +23,7 @@ /obj/machinery/nuclearbomb/process() if (src.timing) - src.timeleft-- - if (src.timeleft <= 0) + if((time_actual <= world.timeofday) && ((world.timeofday + (time_actual - world.timeofday)) <= 864000) ) explode() for(var/mob/M in viewers(1, src)) if ((M.client && M.machine == src)) @@ -35,18 +35,23 @@ /obj/machinery/nuclearbomb/attack_hand(mob/user as mob) if (src.extended) + var/time_left = time2text(time_actual-world.timeofday, "mm:ss") + if(world.timeofday + (time_actual - world.timeofday) >= 864000) + time_left = time2text(time_actual-(864000 - world.timeofday), "mm:ss") + if(!timing) + time_left = time2text(timeleft, "mm:ss") user.machine = src var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) if (src.auth) if (src.yes_code) - dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) + dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: --- [] +++
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), src, src, src, src, time_left, src, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) else - dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) else if (src.timing) - dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) else - dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) var/message = "AUTH" if (src.auth) message = text("[]", src.code) @@ -111,17 +116,22 @@ if (src.yes_code) if (href_list["time"]) var/time = text2num(href_list["time"]) - src.timeleft += time - src.timeleft = min(max(round(src.timeleft), 5), 600) + timeleft = min(max(time + (timeleft/10), 120), 900) * 10 if (href_list["timer"]) - if (src.timing == -1.0) + if (timing == -1.0) return - src.timing = !( src.timing ) - if (src.timing) + timing = !( timing ) + if (timing) + time_actual = world.timeofday + timeleft + if(time_actual >= 864000) + time_actual -= 864000 src.icon_state = "nuclearbomb2" if(!src.safety) bomb_set = 1//There can still be issues with this reseting when there are multiple bombs. Not a big deal tho for Nuke/N else + timeleft = time_actual - world.timeofday + if(timeleft < 0) + timeleft += 864000 src.icon_state = "nuclearbomb1" bomb_set = 0 if (href_list["safety"]) @@ -153,6 +163,7 @@ /obj/machinery/nuclearbomb/proc/explode() if (src.safety) src.timing = 0 + timeleft = 0 return src.timing = -1.0 src.yes_code = 0 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 31753036f56..c3ac2943d8c 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -394,7 +394,7 @@ var var/J = job var/rendered = "[part_a][N][part_b][quotedmsg][part_c]" for (var/mob/R in heard_masked) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][N] ([J]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -405,7 +405,7 @@ var var/rendered = "[part_a][M.real_name][part_b][quotedmsg][part_c]" for (var/mob/R in heard_normal) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][realname] ([job]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -419,7 +419,7 @@ var rendered = "[part_a][vname][part_b][M.voice_message][part_c]" for (var/mob/R in heard_voice) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][vname] ([job]) [part_b][vmessage]][part_c]", 2) else R.show_message(rendered, 2) @@ -435,7 +435,7 @@ var var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]" for (var/mob/R in heard_garbled) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][vname][part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 8e33bebe72e..22bac2a5936 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -83,10 +83,11 @@ areaindex[tmpname] = 1 L[tmpname] = I - var/desc = input("Please select a location to lock in.", "Locking Computer") in L - src.locked = L[desc] - for(var/mob/O in hearers(src, null)) - O.show_message("\blue Locked In", 2) + var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null + if(desc) + src.locked = L[desc] + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Locked In", 2) src.add_fingerprint(usr) return diff --git a/code/game/objects/closets/wardrobe.dm b/code/game/objects/closets/wardrobe.dm index 8f6776402c8..fc702dd65cb 100644 --- a/code/game/objects/closets/wardrobe.dm +++ b/code/game/objects/closets/wardrobe.dm @@ -339,9 +339,9 @@ obj/structure/closet/wardrobe/hop/New() new /obj/item/clothing/suit/storage/labcoat/virologist(src) new /obj/item/clothing/suit/storage/labcoat/virologist(src) new /obj/item/clothing/suit/storage/labcoat/virologist(src) - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/under/rank/medical(src) - new /obj/item/clothing/under/rank/medical(src) + new /obj/item/clothing/under/rank/virologist(src) + new /obj/item/clothing/under/rank/virologist(src) + new /obj/item/clothing/under/rank/virologist(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/white(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 161fcab6d3f..b634e20692f 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -20,7 +20,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -156,8 +156,7 @@

Growing Humans

- Why would you want to grow humans? Well I'm expecting most readers to be in the slave trade, but a few might actually - want to revive fallen comrades. Growing pod people is easy, but prone to disaster. + Maybe Genetics is damaged, or maybe you just want to experiment, either way, growing humans is rather simple.

  1. Find a dead person who is in need of cloning.
  2. @@ -182,78 +181,67 @@ dat = {" - - - - -

    How to Clone People

    - So there’s 50 dead people lying on the floor, chairs are spinning like no tomorrow and you haven’t the foggiest idea of what to do? Not to worry! This guide is intended to teach you how to clone people and how to do it right, in a simple step-by-step process! If at any point of the guide you have a mental meltdown, genetics probably isn’t for you and you should get a job-change as soon as possible before you’re sued for malpractice. - -
      -
    1. Acquire body
    2. -
    3. Strip body
    4. -
    5. Put body in cloning machine
    6. -
    7. Scan body
    8. -
    9. Clone body
    10. -
    11. Get clean Structurel Enzymes for the body
    12. -
    13. Put body in morgue
    14. -
    15. Prepare Cryo
    16. -
    17. Await cloned body
    18. -
    19. Put body in cryo
    20. -
    21. Use the clean SW injector
    22. -
    23. Give person clothes back
    24. -
    25. Send person on their way
    26. -
    - -

    Step 1: Acquire body

    - This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step. - -

    Step 2: Strip body

    - The cloning machine does not like abiotic items. What this means is you can’t clone anyone if they’re wearing clothes, so take all of it off. If it’s just one person, it’s courteous to put their possessions in the closet. If you have about seven people awaiting cloning, just leave the piles where they are, but don’t mix them around and for God’s sake don’t let the Clown in to steal them. - -

    Step 3: Put body in cloning machine

    - Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset. - -

    Step 4: Scan body

    - Go onto the computer and scan the body by pressing ‘Scan - ’. If you’re successful, they will be added to the records (note that this can be done at any time, even with living people, so that they can be cloned without a body in the event that they are lying dead on port solars and didn‘t turn on their suit sensors)! If not, and it says “Error: Mental interface failure.”, then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, click ‘Refresh‘ and try scanning them again. If there’s no success, threaten them with gibbing. Still no success? Skip over to Step 7 and don‘t continue after it, as you have an unresponsive body and it cannot be cloned. If you got “Error: Unable to locate valid genetic data.“, you are trying to clone a monkey - start over. - -

    Step 5: Clone body

    - Now that the body has a record, click ’View Records’, click the subject’s name, and then click ‘Clone’ to start the cloning process. Congratulations! You’re halfway there. Remember not to ‘Eject’ the cloning pod as this will kill the developing clone and you’ll have to start the process again. - -

    Step 6: Get clean SEs for body

    - Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when they’re done. If you’re a competent Geneticist, you will already have one ready on your working computer. If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. Go into View/Edit/Transfer Buffer, find an open slot and click “SE“ to save it. Then click ‘Injector’ to get the SEs in syringe form. Put this in your pocket or something for when the body is done. - -

    Step 7: Put body in morgue

    - Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed “CHEF MEAT” in order to avoid confusion. - -

    Step 8: Prepare cryo

    - Go to the freezer room, wrench in the cannisters, and set the freezer to lowest. Put a beaker of cryodaxone or clonexadone in on of the cryo tubes. - -

    Step 9: Await cloned body

    - Now go back to the lab and wait for your patient to be cloned. It won’t be long now, I promise. - -

    Step 10: Put body in cryo

    - Fetch a stretcher, put your patient on it, move to the freezer room, dump the body in the tube and turn it on. Patient will start regenerating once his temperature goes below 170K. Make sure there's a beaker in the tube. - -

    Step 11: Use the clean SE injector on person

    - Has your body been cloned yet? Great! As soon as the guy pops out, grab your injector and jab it in them. Once you’ve injected them, they now have clean Structural Enzymes and their defects, if any, will disappear in a short while. - -

    Step 12: Give person clothes back

    - Obviously the person will be naked after they have been cloned. Provided you weren’t an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. No matter how cruel you are, it’s simply against protocol to force your patients to walk outside naked. - -

    Step 13: Send person on their way

    - Give the patient one last check-over - make sure they don’t still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. Once you’re done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance. - -

    If you’ve gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target. - - +

    Cloning

    +

    You can clone people from scans made while they are alive and well (which is preferred). Feel free to call people to get their backups made - especially for Heads of Staff. +

    +

    Scan

    +

    The first thing that a clone needs is a record in the cloning console. Scanning requires a dead or live human body (monkeys won't work), whereas making the actual clone requires the person to be dead. +

    +
    1. Make sure the person is not wearing anything. +
      • If the person is alive, have them strip. +
      • If the person is dead, click+drag their body onto yours to bring up their clothing window, then click on the links identifying each piece of clothing to remove it. +
      +
    2. Grab the person. +
    3. Click on the DNA scanner to place them inside. +
    4. Click on the cloning console to bring up its menu. +
    5. Click Scan. +
      • Note: If you see Mental Interface Error, wait a few seconds and try again. If it still comes up, the body is not viable for cloning (they logged off) and should be taken to the morgue. +
      +
    6. Click View Records to make sure their record is listed in the cloning database. +
    +

    Making the Clone

    +

    Remember, a clone can only be made when the person you're making a clone for is dead. If they aren't dead, you'll see a "Unable to initiate cloning cycle" error in the Cloning System Control. +

    +
    1. Head to the cloning console beside the cloning pod, and click on it to open its menu. +
    2. Click View Records, select the person you wish to clone, then click Clone. +
      • Note: After clicking "Clone" the dead person will get a pop-up window asking if they want to come back to life. If they choose "No", the console will say "Unable to initiate cloning cycle". If they choose "Yes", the console will say "Cloning cycle activated", and their body will be remade in a few minutes. +
      • Note #2: When a new clone is made, that person's record is deleted from the database, so they must be scanned again if they are to be cloned a second time. +
      +
    +

    Finishing a New Clone

    +
    1. Grab the new clone and take it to Cryo, the room with large cryo cells. +
    2. Click on one of the cells to place the clone inside and set the Cryo status to On. +
    3. Take a nearby beaker filled with Cryoxadone and then click on the same cell you placed the clone in to load the beaker into the cell. +
      • Note: At this point, the clone will begin to heal slowly, shown by the increasing health indication in the cryo cell's menu. If you wish to speed up the effect, continue with the next steps. +
      +
    4. Use the nearby on both O2 canisters to secure them (if they aren't already). +
    5. Put the wrench down, then click on both O2 canisters and Open them. +
    6. Set the freezer's Target gas temperature to its lowest amount by clicking on the far-left "-" until the number in the center no longer decreases. +
    7. Set the freezer to On. +
    8. Click on the cyro cell to check on your clone. When its health reaches 100, it is considered finished and can then be ejected (right-click > Eject Occupant). +
      • Note: Though waiting for the health to reach 100 is optimum, in emergencies when the cryo cells are needed the clone can be ejected at ~50 health and finished in a sleeper. +
      +
    9. Don't forget! when you're done with the cryo room, turn everything to Off or Closed so the room doesn't get freezing cold! Also, if you still have their old body, drag it to the morgue to prevent Clone Memory Disorder (which is purely for role-play purposes). +
    +

    Clone Memory Disorder

    +

    There are a few basic rules that apply to most patients, all symptoms of Clone Memory Disorder.
    +It is caused by the unexpected circumstances after awakening in cryo (if cloned from a backup), or the traumatizing experience of death which is much worse, (if cloned from the corpse). +

    These are the usual symptoms. +

    +
    1. They will be disoriented after being cloned. +
    2. They will have forgotten about their death/everything that happened after the backup. +
    3. They will sometimes feel strange urges or fears when confronted with anything that can be directly related to their death. (Only if cloned from the corpse). See also Symptoms of Trauma for how people in reality would possibly react (read this if you are unsure how to RP Clone Memory Disorder for when you get cloned from a corpse). +
    +

    This applies for cloned criminals as well! +

    Take an example clone. He died under suspicious circumstances, but we always take good care of our patients, and we do not want them to commit suicide or fall into manic depression. As such, we will have to prevent any Post-Mortem Traumatic Relapses (Refer to it as 'complications' to less scientific personnel). +

    + "} @@ -312,10 +300,10 @@
  3. Secure the mainboard with a screwdriver.
  4. Install the peripherals control module (Not included. Use supplied datadisk to create one).
  5. Secure the peripherals control module with a screwdriver
  6. -
  7. Install the internal armor plating (Not included due to Nanotrasen regulations. Can be made using 5 metal sheets.)
  8. +
  9. Install the internal armor plating (Not included due to NanoTrasen regulations. Can be made using 5 metal sheets.)
  10. Secure the internal armor plating with a wrench
  11. Weld the internal armor plating to the chassis
  12. -
  13. Install the external reinforced armor plating (Not included due to Nanotrasen regulations. Can be made using 5 reinforced metal sheets.)
  14. +
  15. Install the external reinforced armor plating (Not included due to NanoTrasen regulations. Can be made using 5 reinforced metal sheets.)
  16. Secure the external reinforced armor plating with a wrench
  17. Weld the external reinforced armor plating to the chassis
@@ -418,7 +406,7 @@ This useful piece of equipment will suck power out of the power systems to charge a cyborg's power cell back up to full charge.

Robotics Control Console

- This useful piece of equipment can be used to immobolize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or Nanotrasen may see to it that it never happens again. + This useful piece of equipment can be used to immobolize or destroy a cyborg. A word of warning: Cyborgs are expensive pieces of equipment, do not destroy them without good reason, or NanoTrasen may see to it that it never happens again.

Cyborg Modules

@@ -565,7 +553,7 @@
  • Expose the cyborg's internal wiring
  • Check to make sure the LawSync and AI Sync lights are lit
  • If they are not lit, pulse the LawSync wire using a multitool to enable the cyborg's Law Sync
  • -
  • Proceed to a cyborg upload console. Nanotrasen usually places these in the same location as AI uplaod consoles.
  • +
  • Proceed to a cyborg upload console. NanoTrasen usually places these in the same location as AI uplaod consoles.
  • Use a "Reset" upload moduleto reset the cyborg's laws
  • Proceed to a Robotics Control console
  • Remove the lockdown on the cyborg
  • @@ -573,7 +561,7 @@

    As a last resort

    If all else fails in a case of cyborg-related emergency. There may be only one option. Using a Robotics Control console, you may have to remotely detonate the cyborg. -

    WARNING:

    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of Nanotrasen equipment, and you may be punished for detonating them without reason. +

    WARNING:

    Do not detonate a borg without an explicit reason for doing so. Cyborgs are expensive pieces of NanoTrasen equipment, and you may be punished for detonating them without reason. @@ -581,226 +569,22 @@ /obj/item/weapon/book/manual/security_space_law name = "Space Law" - desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations." + desc = "A set of NanoTrasen guidelines for keeping law and order on their space stations." icon_state = "bookSpaceLaw" - author = "Nanotrasen Inc." + author = "NanoTrasen Inc." dat = {" + -

    If you can't find the crime listed in here you need to set up a proper trial Go here: Legal Standard Operating Procedure

    -

    The time you took for bringing the suspect in and the time you spend questioning are NOT to be calculated into this. This is the pure time someone spends in a cell starring at the wall.
    - On laggy games first take a look at how quickly the cell timer tick... we don't want people to spend an eternity in jail for staling a pair of gloves. I am sure you have a system clock on your PC that you can keep an eye on.

    -

    The maximum time someone can be put in jail for is 10 minutes (exceptions are listed below)
    - Always remember that when you add crimes together!

    -


    - Note: Compare the ingame version of this found in Security with the version on the wiki regularly. If the ingame version differs, follow the rules on the wiki, since they are easier to update. - Link to the wiki page: http://wiki.baystation12.co.cc/index.php/Security_Sentences - Compare changes here: http://wiki.baystation12.co.cc/index.php?title=Security_Sentences&action=history

    - -

    Minor Crimes

    - - - - - - - - - - - - - - - - -
    Crime - Description - Punishment - Notes -
    Resisting Arrest - Not cooperating with the officer who demands you turn yourself in peacefully. Shouting "No!" or otherwise making the officer have the need to tase you to put handcuffs on. - +30 seconds to original time - See manhunt if the suspect runs away. Or attack on an officer if he fights back. This is for shouting/swearing and moving around a bit (just so you cant cuff him) only. -
    Petty Theft - Stealing non-crucial items from the ship. Items can include anything from toolboxes to metal to insulated gloves. To steal something the person must take it from a place which he doesn't have access to. - 60 seconds (Half the time of Theft) - Remember to take the items away from them and return them to where they stole them. -
    Theft - Stealing of important, dangerous or otherwise crucial items like IDs, weapons or something similar. To steal something the person must take it from a place which he doesn't have access to. - 2 minutes (2x the time of Petty Theft) - Remember to take the items away from them and return them to where they stole them. Compare Robbery. -
    Robbery - Robbery is stealing items from another person's possession. This can be the stealing of ID's, backpack contents or anything else. - 1m 30s (3m) - Remember to take the stolen items from the person and return them, if you can find the person they've been stolen from. Otherwise put them in a locker in security. Taking the items for yourself is considered stealing!! Remember to double the time if the robbed item was an ID or something else crucial or dangerous. Compare Theft and Petty Theft. -
    Assault - To assault means to attack someone without causing them to die and without the intent to kill them. - 3m - Example: Knocking someone out to take their ID yields: Assault + Robbery -
    Trespassing - Trespassing means to be in an area which you don't have access to. - Remove from area, if the crime is repeated imprison for 60s - -
    Indecent Exposure or being a nuisance - Running around the ship naked, yelling at people for no reason (don't arrest someone because they are arguing), throwing around stuff where it could hit someone, etc. - 30s - Drunks can be keep to sober up, but only if they are badly harassing other crew members. Regular drunks don't get arrested and if they are only a nuisance you keep them for the regular time. -
    -

    Medium Crimes

    - - - - - - - - - - - - - - - - - - - - -
    Crime - Description - Punishment - Notes -
    Assault with a deadly or dangerous weapon - Getting assaulted with a knife or tased without the intention of your attacker killing you. - 5m - Usual weapons: Stun baton, taser or other gun, wirecutters, knife or scalpel, crowbar or fire extinguisher/oxygen tank. -
    Assault on an officer - Assault with whichever weapon or object on an officer. An officer is defined as either a member of the security force (forensic technician included) or one of the heads of staff. - 5m - Don't abuse him. I know you want to, but don't. At least try not to. You'll get fired. Most likely. -
    Unlawful conduct or negligence resulting in ship damage or harm to crewmen. - It's impossible to list everything that can lead up to this. Starting a fire in toxins is one thing, smashing windows and major vandalism is another, as is putting someone else in harms way. If you can't put it somewhere else, bets are good that it is this. If it is still not this, you need a trial. - 3m 30s - If someone dies directly related to it, add manslaughter. -
    Manslaughter - Manslaughter is the unintentional killing of a fellow human being. If you cause a fire in toxins and someone else get's trapped and dies, that's manslaughter. - 5m - If there is the intention to kill, it's murder. -
    Theft of a high value item - Stealing something which we know traitors often want. - 3m - Theft of a rapid construction device (RCD), Captain's jumpsuit, Hand teleporter, captain's antique laser or other items which the traitors want. Note that they have to be kept in areas which this person doesn't have access to. -
    Threatening Ship Integrity - To threaten the ships integrity means to cause mediocre damage to the ships atmosphere, this means to create an air or gas leak that affects a vital part of the ship, or destroying an interior wall. - 5m - If it wasn't on purpose or if the damage is easily fixed see Unlawful conduct. -
    Threatening Power Supply - Cutting power lines, shutting down power storage units, engine's power generators, etc. - 4m + remove insulated gloves and wirecutters and anything else that might be related, like engineering access. - This does not include blowing up the Engine. See Compromising Ship Integrity further down. -
    Sparking a man-hunt or chase - This means the officer needs to chase after you to catch you. It means you actually flee from the scene. - +3m to original time - This will happen to you often... -
    Escape attempt - Attempting to escape from the brig. - +2m to current time, this can exceed the maximum jail time. - It's the job of the officer to prevent such events. -
    -

    Major Crimes

    - - - - - - - - - - - - -
    Crime - Description - Punishment - Notes -
    Identity Theft - Stealing someones ID and/or other objects of identification with the purpose to appear to others as them or to enter into areas where the suspect would normally not have access. - 10 minutes - The case of impersonation regarding ship equipment(doors, computer terminals, AI, etc) or personnel has to be proven, otherwise see Petty Theft/Robbery. Remember to double the time if the object was an ID or something similar crucial (Compare Petty Theft). -
    Syndicate collaboration - Being either a traitor, a syndicate operative or a head revolutionary - Until the end of the round
    (disregard maximum sentence time)
    or DEATH
    (if approved by the Captain) -
    You have two choices: Killing them or permabrigging them. If you choose to kill them, first ask for permission from the Captain. If permission is given, it is wise to first Adminhelp your intentions. Adminhelp something like: "I have grounds to believe X is a rev head. I have him locked in the brig and intend to kill him. If you have any objections to this action, please contact me." then wait for about a minute. If no PM comes, proceed to kill him. The other option is to permabrig them. This simply means you put them in the brig and don't ever let them out until your are going to evac. Then cuff them and secure them on one of the pods. (Note that Head Revolutionaries MUST be executed for you to win the round.) -
    Murder - Killing someone with the intent to kill. - Death Sentence if authorised by the Captain. Otherwise brigging for the rest of the round. - Not to be confused with Manslaughter. Hint: Cyborgification is a valid execution method, since he will be bound by laws. -
    Attempted Murder - Attempting to kill someone. The victim survives. - See Murder - Regardless if you succeed or not, if you try to commit murder, the punishment is the same! You have to be sure there was intent to kill though! -
    Compromising Ship Integrity - Compromising a large part of the Ships atmosphere or integrity. - 10m (You are going to evac anyway. Cuff him and secure him on a pod.) - Blowing up the Engine is included here. -
    -

    Parole Circumstances

    -

    Okay, we've covered all the punishments. Now for the parole circumstances. These circumstances will shorten your prisoner's time in jail. -

    Note that all of these add up to a maximum of 33%!! -

    - - - - - - - - - - - - - - -
    Crime - Description - Benefit - Notes -
    Good behavior - Behaving well, not attempting any problems or causing riots or screaming and yelling. - -20% of original time - It sounds like a good deal... but few will actually take it. -
    Reeducation - Getting de-converted from revolutionary, renouncing traitoring (must be arranged with admins), etc. (most of these must be arranged with admins) - -15% of original time - -
    Cooperation with prosecution or security - Being helpful to the members of security, revealing things during questioning or providing names of head revolutionaries. - -10% - In the case of revealing a head revolutionary: Immediate release -
    Surrender - Coming to the brig, confessing what you've done and taking the punishment. - -25% - Getting arrested without putting a fuss is not surrender. For this, you have to actually come to the brig yourself. -
    Immediate threat to the prisoner - Call for evac, atmospheric problems in the Brig or SecHQ area, threat of being overrun by revolutionaries, etc - Immediately move the prisoner.
    If that is not possible: Immediate Release! -
    Keep in mind the time until they get released. Exception is if the person is a CONFIRMED traitor, syndicate operative or head of revolutionary. In those cases you can leave them to die. -
    Medical reasons - The person needs immediate medical attention - Immediate escort to medbay - The sentence timer continues to tick while he's at medbay, it's not paused. -
    - + + - "} + + "} /obj/item/weapon/book/manual/engineering_guide name = "Engineering Textbook" @@ -813,7 +597,7 @@ - + @@ -826,51 +610,15 @@ icon_state = "cooked_book" author = "Lord Frenrir Cageth" - dat = {" - - - - + dat = {" + -

    Food for Dummies

    - Here is a guide on basic food recipes and also how to not poison your customers accidentally. + + + -

    Burger:

    - Put 1 meat and 1 flour into the microwave and turn it on. Then wait. + -

    Bread:

    - Put 3 flour into the microwave and then wait. - -

    Waffles:

    - Add 2 flour and 2 egg to the microwave and then wait. - -

    Popcorn:

    - Add 1 corn to the microwave and wait. - -

    Meat Steak:

    - Put 1 meat, 1 unit of salt and 1 unit of pepper into the microwave and wait. - -

    Meat Pie:

    - Put 1 meat and 2 flour into the microwave and wait. - -

    Boiled Spagetti:

    - Put 1 spagetti and 5 units of water into the microwave and wait. - -

    Donuts:

    - Add 1 egg and 1 flour to the microwave and wait. - -

    Fries:

    - Add one potato to the processor and wait. - - - - "} /obj/item/weapon/book/manual/barman_recipes @@ -944,7 +692,7 @@ ol {margin: 5px; padding: 0px 15px;}

    Detective Work

    -Between your bouts of self naration, and drinking whiskey on the rocks, you might get a case or two to solve.
    +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:

      @@ -955,7 +703,7 @@ To have the best chance to solve your case, follow these directions:
    1. Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.
    2. Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled.
    3. If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.
    4. -
    5. Look for clues from the suit fibers you found on your perp, and go about looking for more evidence with this new information, scanning as you go.
    6. +
    7. 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.
    8. Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.
    9. 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.
    10. 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.
    11. diff --git a/code/game/specops_shuttle.dm b/code/game/specops_shuttle.dm index 18838470a1a..b2d73d36ac4 100644 --- a/code/game/specops_shuttle.dm +++ b/code/game/specops_shuttle.dm @@ -232,7 +232,7 @@ var/specops_shuttle_timeleft = 0 if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return 0 for(var/obj/machinery/computer/specops_shuttle/S in world) - if(world.time <= S.specops_shuttle_timereset) + if(world.timeofday <= S.specops_shuttle_timereset) return 0 return 1 @@ -286,10 +286,10 @@ var/specops_shuttle_timeleft = 0 if (!specops_can_move()) usr << "\blue Central Command will not allow the Special Operations shuttle to return yet." - if(world.time <= specops_shuttle_timereset) - if (((world.time - specops_shuttle_timereset)/10) > 60) - usr << "\blue [-((world.time - specops_shuttle_timereset)/10)/60] minutes remain!" - usr << "\blue [-(world.time - specops_shuttle_timereset)/10] seconds remain!" + if(world.timeofday <= specops_shuttle_timereset) + if (((world.timeofday - specops_shuttle_timereset)/10) > 60) + usr << "\blue [-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!" + usr << "\blue [-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!" return usr << "\blue The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds." diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4cb7a48f3ea..8ba9a6c4bcf 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -258,11 +258,16 @@ if ((M.client && M.client.holder && (M.client.holder.level >= src.level))) alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) return - M << "\red You have been kicked from the server" - log_admin("[key_name(usr)] booted [key_name(M)].") - message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) - //M.client = null - del(M.client) + switch(alert("Are you sure?", ,"Yes", "NO, WAIT.. DAMMIT! NOT THAT BUTTON!")) + if("Yes") + if(ismob(M)) + M << "\red You have been kicked from the server" + log_admin("[key_name(usr)] booted [key_name(M)].") + message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) + //M.client = null + del(M.client) + else + src << "Looks like someone already beat you." if (href_list["removejobban"]) if ((src.rank in list("Game Admin", "Game Master" ))) @@ -1759,6 +1764,36 @@ C.files.RefreshResearch() owner:rnd_check_designs() + #define AUTOBANTIME 10 + if(href_list["warn"]) + var/mob/M = locate(href_list["warn"]) + if (ismob(M)) + var/client/user + if(istype(usr, /client)) + user = usr + else if(istype(usr, /mob)) + user = usr.client + + if(!user.holder) + src << "Only administrators may use this command." + return + if(M.client && M.client.holder && (M.client.holder.level >= user.holder.level)) + alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) + return + if(!M.client.warned) + M << "\red You have been warned by an administrator. This is the only warning you will recieve." + M.client.warned = 1 + message_admins("\blue [user.ckey] warned [M.ckey].") + else + AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME) + M << "\redYou have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\"." + M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes." + log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + message_admins("\blue [user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + feedback_inc("ban_warn",1) + + del(M.client) ///////////////////////////////////////////////////////////////////////////////////////////////Panels diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index c317f9f7073..3ccc5ff58b1 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -11,6 +11,7 @@ for(var/mob/M in mobs) if(M.ckey) var/color = "#e6e6e6" + i++ if(i%2 == 0) color = "#f2f2f2" var/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])") @@ -19,26 +20,32 @@ dat += "[M.name] \[[real]\]
      [M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])" // Adds current name if(isobserver(M)) dat += "Ghost" - if(isalien(M)) + else if(isalien(M)) dat += "Alien" - if(islarva(M)) + else if(islarva(M)) dat += "Alien larva" - if(ishuman(M)) + else if(istajaran(M)) + dat += "Tajaran" + else if(ishuman(M)) dat += "[M.job]" - if(ismetroid(M)) + else if(ismetroid(M)) dat += "Metroid" - if(ismonkey(M)) + else if(ismonkey(M)) dat += "Monkey" - if(isAI(M)) + else if(isAI(M)) dat += "AI" - if(ispAI(M)) + else if(ispAI(M)) dat += "pAI" - if(isrobot(M)) + else if(isrobot(M)) dat += "Cyborg" - if(isanimal(M)) + else if(isanimal(M)) dat += "Animal" - if(iscorgi(M)) + else if(iscorgi(M)) dat += "Corgi" + else if(istype(M,/mob/new_player)) + dat += "New Player" + else + dat += "ERROR" if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job. var/mob/living/carbon/human/H = M @@ -81,13 +88,14 @@ "} dat += {"[player_has_info(M.ckey) ? "Info" : "N/A"] - Boot | Ban | Jobban -
      [muting]
      - PP | + PM | + PP | VV | SM | JMP | - CA + CA +
      [muting]
      + Warn | Boot | Ban | Jobban "} switch(is_special_character(M)) @@ -100,7 +108,7 @@ dat += "" - usr << browse(dat, "window=players;size=905x480") + usr << browse(dat, "window=players;size=905x600") //The old one /obj/admins/proc/player_panel_old() diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 2505bee7dbe..98e5b073822 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -514,8 +514,8 @@ datum/preferences if(!selected) return ZeroSkills(1) - skills = SKILL_PRE[selected] - ZeroSkills() + for(var/V in SKILL_PRE[selected]) + skills[V] = SKILL_PRE[selected][V] used_skillpoints = 0 for(var/V in skills) used_skillpoints += skills[V] diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index a24caf0e944..a0c5ec98152 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -107,6 +107,14 @@ name = "Bedhead 2" icon_state = "hair_bedhead" + bedhead3 + name = "Bedhead 3" + icon_state = "hair_bedheadv2" + + bedhead4 + name = "Bedhead 4" + icon_state = "hair_bedheadalt" + dreadlocks name = "Dreadlocks" icon_state = "hair_dreads" @@ -124,6 +132,21 @@ icon_state = "bald" choose_female = 0 + longalt + name = "Long Hair Alt" + icon_state = "hair_longfringe" + + longestalt + name = "Longest Hair Alt" + icon_state = "hair_vlongfringe" + + himecut + name = "Hime Cut" + icon_state = "hair_himecut" + + curls + name = "Curls" + icon_state = "hair_curls" /* diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index aaa19ce3694..cf605048c7e 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -439,8 +439,10 @@ del(H) CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (istype(mover,/obj/item) && !istype(mover,/obj/item/weapon/dummy)) + if (istype(mover,/obj/item)) var/obj/item/I = mover + if(!mover.throwing) + return ..() if(prob(75)) I.loc = src for(var/mob/M in viewers(src)) @@ -450,7 +452,7 @@ M.show_message("\the [I] bounces off of \the [src]'s rim!", 3) return 0 else - return ..(mover, target, height, air_group) + return ..() //The toilet does not need to pressurized but can only handle small items. //You can also choke people by dunking them into the toilet. diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 9e066874506..7a887b8cdc8 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 50165c1498a..04c8cff10cf 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 4f5d63f107e..e54fc76e6b8 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ