diff --git a/baystation12.dme b/baystation12.dme index 4d995fb572..c82f08c0d5 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 7a249386de..1991e1c3bf 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 391effd779..cda3510df6 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 73dd0acc6b..0f3e553662 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 fcf45c668e..be87e6bb1b 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 89c5a1773d..9054cbe597 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 0dcbdf15d4..632fdca82f 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 479eff1931..d7cb81bf73 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 60e68e43d1..e1fa773119 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 769ee4ec8d..c7945cda4f 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 f18aa2323f..f249ada8cb 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 0000000000..73adecbabd --- /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 4fa1630dd5..eb4135f410 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 dd496bbfb3..eabfdd003a 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 b2e1f3f557..c6c2eac929 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 8098200a4e..3ae6770cea 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 0ec248edc4..81c0dd07d5 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 80ea9a50cc..01dd2e422e 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 bbb8d7c027..b4c6af06d2 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 730d2dc6c9..6ae193e14d 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 085910a451..103d7c2a99 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 6c89401cdc..23a05cf7be 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 9b77697bb5..f75bfc718e 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 23fb752b31..c1f5cfc987 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 b634e20692..bb00b0e1f2 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