diff --git a/baystation12.dme b/baystation12.dme index 4d995fb5723..c82f08c0d55 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -447,7 +447,7 @@ #include "code\game\jobs\jobs.dm" #include "code\game\jobs\whitelist.dm" #include "code\game\jobs\job\assistant.dm" -#include "code\game\jobs\job\captian.dm" +#include "code\game\jobs\job\captain.dm" #include "code\game\jobs\job\civilian.dm" #include "code\game\jobs\job\civilian_chaplain.dm" #include "code\game\jobs\job\engineering.dm" @@ -462,6 +462,7 @@ #include "code\game\machinery\alarm.dm" #include "code\game\machinery\atmo_control.dm" #include "code\game\machinery\autolathe.dm" +#include "code\game\machinery\Beacon.dm" #include "code\game\machinery\biogenerator.dm" #include "code\game\machinery\camera.dm" #include "code\game\machinery\camera_circuit.dm" @@ -995,6 +996,7 @@ #include "code\modules\mob\organ\organ_internal.dm" #include "code\modules\mob\organ\pain.dm" #include "code\modules\mob\simple_animal\cat.dm" +#include "code\modules\mob\simple_animal\constructs.dm" #include "code\modules\mob\simple_animal\corgi.dm" #include "code\modules\mob\simple_animal\crab.dm" #include "code\modules\mob\simple_animal\life.dm" diff --git a/code/defines/atom.dm b/code/defines/atom.dm index 7a249386de6..1991e1c3bf3 100644 --- a/code/defines/atom.dm +++ b/code/defines/atom.dm @@ -169,7 +169,6 @@ obj src.m_flag = 1 if ((A != src.loc && A && A.z == src.z)) src.last_move = get_dir(A, src.loc) - src.moved_recently = 1 return /* diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm index 391effd7799..cda3510df6a 100755 --- a/code/defines/obj/vending.dm +++ b/code/defines/obj/vending.dm @@ -40,6 +40,33 @@ var/wires = 15 var/obj/item/weapon/coin/coin var/charge_type +/* + +/obj/machinery/vending/[vendors name here] // --vending machine template :) + name = "" + desc = "" + icon = '' + icon_state = "" + product_paths = "" + product_amounts = "" + vend_delay = 15 + product_hidden = "" + product_hideamt = "" + product_slogans = "" + product_ads = "" + +*/ + +/* +/obj/machinery/vending/atmospherics //Commenting this out until someone ponies up some actual working, broken, and unpowered sprites - Quarxink + name = "Tank Vendor" + desc = "A vendor with a wide variety of masks and gas tanks." + icon = 'objects.dmi' + icon_state = "dispenser" + product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/plasma;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath" + product_amounts = "10;10;10;5;25" + vend_delay = 0 +*/ /obj/machinery/vending/boozeomat name = "Booze-O-Mat" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 73dd0acc6bc..0f3e5536624 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -936,6 +936,16 @@ var/text_underline = 0 var/text_break = 0 +/obj/item/weapon/pen/blue + desc = "It's a normal blue ink pen." + icon_state = "pen_blue" + text_color = "#00000F" + +/obj/item/weapon/pen/red + desc = "It's a normal red ink pen." + icon_state = "pen_red" + text_color = "#FF0000" + /obj/item/weapon/pen/multi desc = "It's a cool looking pen. Lots of colors!" name = "multicolor pen" @@ -1591,6 +1601,7 @@ sides = 12 icon_state = "d20" item_state = "dice" + /obj/item/weapon/pai_cable desc = "A flexible coated cable with a universal jack on one end." desc = "Some spacey cable." diff --git a/code/game/communications.dm b/code/game/communications.dm index fcf45c668eb..be87e6bb1b2 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -291,4 +291,4 @@ datum/signal else . = "signal = {source = '[source]' ()\n" for (var/i in data) - . += "data\[\"[i]\"\] = \"[data[i]]\"\n" \ No newline at end of file + . += "data\[\"[i]\"\] = \"[data[i]]\"\n" diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 89c5a1773d4..9054cbe5975 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -170,7 +170,6 @@ return 1 if(special_action()) return 1 - return 0 proc/consume_air() @@ -184,6 +183,7 @@ if(temperature > T0C+200) health -= 0.01 * temperature update() + proc/expand(var/turf/T = null) if(!prob(health)) return//TODO: Change this to prob(health + o2 mols or such) if(!T) 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/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 479eff19316..d7cb81bf739 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -50,7 +50,7 @@ if ((usr.contents.Find(src) || (in_range(src,usr) && istype(src.loc, /turf)))) usr.machine = src if(href_list["spell_choice"]) - if(src.uses >= 1 && href_list["spell_choice"] != 14) + if(src.uses >= 1 && href_list["spell_choice"] != 16) src.uses-- if(spell_type == "verb") switch(href_list["spell_choice"]) @@ -125,49 +125,64 @@ if(!already_knows) switch(href_list["spell_choice"]) if ("1") + feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(usr) src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage." if ("2") + feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr) src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you." // if ("3") // usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr) // src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown." + src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown." if ("4") + feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech(usr) src.temp = "This spell disables all weapons, cameras and most other technology in range." if ("5") + feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/smoke(usr) src.temp = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." if ("6") + feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/trigger/blind(usr) src.temp = "This spell temporarly blinds a single person and does not require wizard garb." if ("7") + feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(usr) src.temp = "This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process." if ("8") + feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(usr) src.temp = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb." if ("9") + feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(usr) src.temp = "This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience." if ("10") + feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(usr) src.temp = "This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable." if ("11") + feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/genetic/mutate(usr) src.temp = "This spell causes you to turn into a hulk and gain telekinesis for a short while." if ("12") + feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(usr) src.temp = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls." if ("13") + feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr) src.temp = "This spell opens nearby doors and does not require wizard garb." if ("14") + feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/gun/energy/staff(get_turf(usr)) src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.max_uses-- if ("15") + feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr)) src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying" src.max_uses-- @@ -177,6 +192,7 @@ src.uses = src.max_uses usr.spellremove(usr,spell_type) src.temp = "All spells have been removed. You may now memorize a new set of spells." + feedback_add_details("wizard_spell_learned","UM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells else src.temp = "You may only re-memorize spells whilst located inside the wizard sanctuary." else @@ -362,4 +378,4 @@ del(src.master) del(src) - return \ No newline at end of file + return diff --git a/code/game/jobs/job/captian.dm b/code/game/jobs/job/captain.dm similarity index 97% rename from code/game/jobs/job/captian.dm rename to code/game/jobs/job/captain.dm index 60e68e43d17..e1fa773119e 100644 --- a/code/game/jobs/job/captian.dm +++ b/code/game/jobs/job/captain.dm @@ -1,52 +1,52 @@ -/datum/job/captain - title = "Captain" - flag = CAPTAIN - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "Nanotrasen officials and Space law" - - - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(H), H.slot_ears) - H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back) - H.equip_if_possible(new /obj/item/clothing/under/rank/captain(H), H.slot_w_uniform) - H.equip_if_possible(new /obj/item/device/pda/captain(H), H.slot_belt) - H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes) - H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head) - H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses) - H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack) - var/datum/organ/external/O = H.organs[pick(H.organs)] - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) - O.implant += L - L.imp_in = H - L.implanted = 1 - world << "[H.real_name] is the captain!" - return 1 - - - -/datum/job/hop - title = "Head of Personnel" - flag = HOP - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - - - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(H), H.slot_ears) - H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back) - H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(H), H.slot_w_uniform) - H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes) - H.equip_if_possible(new /obj/item/device/pda/heads/hop(H), H.slot_belt) - H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit) - H.equip_if_possible(new /obj/item/clothing/head/helmet(H), H.slot_head) - H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack) - H.equip_if_possible(new /obj/item/clothing/gloves/blue(H), H.slot_gloves) - return 1 +/datum/job/captain + title = "Captain" + flag = CAPTAIN + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "Nanotrasen officials and Space law" + + + equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(H), H.slot_ears) + H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back) + H.equip_if_possible(new /obj/item/clothing/under/rank/captain(H), H.slot_w_uniform) + H.equip_if_possible(new /obj/item/device/pda/captain(H), H.slot_belt) + H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes) + H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head) + H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses) + H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack) + var/datum/organ/external/O = H.organs[pick(H.organs)] + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O) + O.implant += L + L.imp_in = H + L.implanted = 1 + world << "[H.real_name] is the captain!" + return 1 + + + +/datum/job/hop + title = "Head of Personnel" + flag = HOP + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + + + equip(var/mob/living/carbon/human/H) + if(!H) return 0 + H.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(H), H.slot_ears) + H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back) + H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(H), H.slot_w_uniform) + H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes) + H.equip_if_possible(new /obj/item/device/pda/heads/hop(H), H.slot_belt) + H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit) + H.equip_if_possible(new /obj/item/clothing/head/helmet(H), H.slot_head) + H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack) + H.equip_if_possible(new /obj/item/clothing/gloves/blue(H), H.slot_gloves) + return 1 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 769ee4ec8db..c7945cda4f7 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -49,7 +49,7 @@ H.equip_if_possible(new /obj/item/clothing/under/rank/warden(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/shoes/jackboots(H), H.slot_shoes) H.equip_if_possible(new /obj/item/device/pda/security(H), H.slot_belt) - H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit) + H.equip_if_possible(new /obj/item/clothing/suit/armor/vest/warden(H), H.slot_wear_suit) H.equip_if_possible(new /obj/item/clothing/head/helmet/warden(H), H.slot_head) H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves) H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses) diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index f18aa2323f9..f249ada8cbc 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -20,7 +20,7 @@ faction = "Station" total_positions = 0 spawn_positions = 1 - + supervisors = "your laws and the AI" //Nodrak equip(var/mob/living/carbon/human/H) if(!H) return 0 diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm new file mode 100644 index 00000000000..73adecbabdc --- /dev/null +++ b/code/game/machinery/Beacon.dm @@ -0,0 +1,55 @@ +/obj/machinery/bluespace_beacon + + icon = 'objects.dmi' + icon_state = "floor_beaconf" + name = "Bluespace Gigabeacon" + desc = "A device that draws power from bluespace and creates a permanent tracking beacon." + level = 1 // underfloor + layer = 2.5 + anchored = 1 + use_power = 1 + idle_power_usage = 0 + var/obj/item/device/radio/beacon/Beacon + + New() + ..() + var/turf/T = loc + Beacon = new /obj/item/device/radio/beacon + Beacon.invisibility = 100 + Beacon.loc = T + + hide(T.intact) + + Del() + if(Beacon) + del(Beacon) + ..() + + // update the invisibility and icon + hide(var/intact) + invisibility = intact ? 101 : 0 + updateicon() + + // update the icon_state + proc/updateicon() + var/state="floor_beacon" + + if(invisibility) + icon_state = "[state]f" + + else + icon_state = "[state]" + + process() + if(!Beacon) + var/turf/T = loc + Beacon = new /obj/item/device/radio/beacon + Beacon.invisibility = 100 + Beacon.loc = T + if(Beacon) + if(Beacon.loc != loc) + Beacon.loc = loc + + updateicon() + + 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/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0ec248edc49..81c0dd07d50 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -70,6 +70,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. var aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. + hackProof = 0 // if 1, this door can't be hacked by the AI synDoorHacked = 0 // Has it been hacked? bool 1 = yes / 0 = no synHacking = 0 // Is hack in process y/n? secondsMainPowerLost = 0 //The number of seconds until power is restored. @@ -812,7 +813,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }. canAIHack() - return ((src.aiControlDisabled==1) && (!src.isAllPowerCut())); + return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerCut())); canSynControl() 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/devices/scanners.dm b/code/game/objects/devices/scanners.dm index 085910a4517..103d7c2a990 100644 --- a/code/game/objects/devices/scanners.dm +++ b/code/game/objects/devices/scanners.dm @@ -278,6 +278,7 @@ MASS SPECTROMETER throw_range = 10 m_amt = 200 origin_tech = "magnets=1;biotech=1" + var/mode = 1; proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob) var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss()))) @@ -285,10 +286,19 @@ proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob) user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1) user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1) else - user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1) + user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1) user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1) user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + var/list/damaged = H.get_damaged_organs(1,1) + user.show_message("\blue Localized Damage, Brute/Burn:",1) + if(length(damaged)>0) + for(var/datum/organ/external/org in damaged) + user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1) + else + user.show_message("\blue \t Limbs are OK.",1) if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder"))) user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1) else @@ -348,6 +358,17 @@ proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob) src.add_fingerprint(user) return +/obj/item/device/healthanalyzer/verb/toggle_mode() + set name = "Switch Verbosity" + set category = "Object" + + mode = !mode + switch (mode) + if(1) + usr << "The scanner now shows specific limb damage." + if(0) + usr << "The scanner no longer shows limb damage." + /obj/item/device/analyzer desc = "A hand-held environmental scanner which reports current gas levels." diff --git a/code/game/objects/grille.dm b/code/game/objects/grille.dm index 6c89401cdcc..23a05cf7be3 100644 --- a/code/game/objects/grille.dm +++ b/code/game/objects/grille.dm @@ -81,6 +81,15 @@ healthcheck() return + attack_animal(var/mob/living/simple_animal/M as mob) + if(M.melee_damage_upper == 0) return + playsound(src.loc, 'grillehit.ogg', 80, 1) + M.visible_message("[M.name] smashes against the [src.name].", \ + "You smash against the [src.name].", \ + "You hear a noise") + src.health -= rand(4) + healthcheck() + return CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0)) return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9b77697bb57..f75bfc718e8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -405,6 +405,7 @@ else if(temp_sides == 20 && result == 1) comment = "Ouch, bad luck." user << text("\red You throw a [src]. It lands on a [result]. [comment]") + icon_state = "[name][result]" for(var/mob/O in viewers(user, null)) if(O == (user)) continue diff --git a/code/game/objects/items/robot_items.dm b/code/game/objects/items/robot_items.dm index 23fb752b312..c1f5cfc9870 100644 --- a/code/game/objects/items/robot_items.dm +++ b/code/game/objects/items/robot_items.dm @@ -181,21 +181,22 @@ force = 5.0 w_class = 3.0 var - datum/effect/effect/system/spark_spread/spark_system + // datum/effect/effect/system/spark_spread/spark_system working = 0 mode = 1 + disabled = 0 - +/* New() src.spark_system = new /datum/effect/effect/system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) return - +*/ proc/activate() - spark_system.set_up(5, 0, src) - src.spark_system.start() +// spark_system.set_up(5, 0, src) +// src.spark_system.start() playsound(src.loc, 'Deconstruct.ogg', 50, 1) @@ -205,22 +206,26 @@ if(mode == 1) mode = 2 user << "Changed mode to 'Airlock'" - src.spark_system.start() +// src.spark_system.start() return if(mode == 2) mode = 3 user << "Changed mode to 'Deconstruct'" - src.spark_system.start() +// src.spark_system.start() return if(mode == 3) mode = 1 user << "Changed mode to 'Floor & Walls'" - src.spark_system.start() +// src.spark_system.start() return afterattack(atom/A, mob/user as mob) - if(!isrobot(user)) return + if(istype(A,/area/shuttle))//||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve + disabled = 1 + else + disabled = 0 + if(!isrobot(user)|| disabled == 1) return if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock))) return var/mob/living/silicon/robot/R = user @@ -268,13 +273,7 @@ A:ReplaceWithPlating() return - if(istype(A, /turf/simulated/wall/r_wall)) - if(!cell.use(300)) return - user << "Deconstructing RWall..." - playsound(src.loc, 'click.ogg', 50, 1) - if(do_after(user, 60)) - activate() - A:ReplaceWithWall() + if(istype(A, /turf/simulated/wall/r_wall)) //by order of muskets -pete return if(istype(A, /turf/simulated/floor)) 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