mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into newstuff
Conflicts: code/game/objects/structures/crates_lockers/closets/secure/security.dm
This commit is contained in:
@@ -66,7 +66,8 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggleattacklogs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/datum/admins/proc/show_skills,
|
||||
/client/proc/check_customitem_activity
|
||||
/client/proc/check_customitem_activity,
|
||||
///client/proc/response_team
|
||||
)
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
|
||||
@@ -551,7 +551,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
"blue wizard",
|
||||
"red wizard",
|
||||
"marisa wizard",
|
||||
"emergency rescue team",
|
||||
"emergency response team",
|
||||
"nanotrasen representative",
|
||||
"nanotrasen officer",
|
||||
"nanotrasen captain"
|
||||
@@ -817,7 +817,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.registered_name = M.real_name
|
||||
M.equip_if_possible(W, slot_wear_id)
|
||||
|
||||
if("emergency rescue team")
|
||||
if("emergency response team")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(M), slot_gloves)
|
||||
@@ -831,7 +831,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
W.icon_state = "centcom"
|
||||
W.access = get_all_accesses()
|
||||
W.access += get_all_centcom_access()
|
||||
W.assignment = "Emergency Rescue Team"
|
||||
W.assignment = "Emergency Response Team"
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
var/const/commandos_possible = 6 //if more Commandos are needed in the future
|
||||
var/global/sent_strike_team = 0
|
||||
|
||||
/client/proc/strike_team()
|
||||
if(!ticker)
|
||||
usr << "<font color='red'>The game hasn't started yet!</font>"
|
||||
|
||||
@@ -39,3 +39,5 @@
|
||||
var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days.
|
||||
var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip
|
||||
var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
|
||||
|
||||
preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server.
|
||||
|
||||
@@ -103,6 +103,14 @@
|
||||
del(src)
|
||||
return
|
||||
|
||||
// Change the way they should download resources.
|
||||
if(config.resource_urls)
|
||||
src.preload_rsc = pick(config.resource_urls)
|
||||
else src.preload_rsc = 1 // If config.resource_urls is not set, preload like normal.
|
||||
|
||||
src << "\red If the title screen is black, resources are still downloading. Please be patient until the title screen appears."
|
||||
|
||||
|
||||
clients += src
|
||||
directory[ckey] = src
|
||||
|
||||
@@ -278,4 +286,4 @@
|
||||
'icons/xenoarch_icons/chart2.jpg',
|
||||
'icons/xenoarch_icons/chart3.jpg',
|
||||
'icons/xenoarch_icons/chart4.jpg'
|
||||
)
|
||||
)
|
||||
|
||||
@@ -364,7 +364,7 @@ datum/preferences
|
||||
|
||||
user << browse(dat, "window=preferences;size=560x580")
|
||||
|
||||
proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 550, height = 550)
|
||||
proc/SetChoices(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"), width = 550, height = 550)
|
||||
if(!job_master)
|
||||
return
|
||||
|
||||
@@ -436,7 +436,7 @@ datum/preferences
|
||||
else
|
||||
HTML += " <font color=red>\[NEVER]</font>"
|
||||
if(job.alt_titles)
|
||||
HTML += "</a><br> <a href=\"byond://?src=\ref[user];preference=job;task=alt_title;job=\ref[job]\">\[[GetPlayerAltTitle(job)]\]</a></td></tr>"
|
||||
HTML += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'><a> </a></td><td><a href=\"byond://?src=\ref[user];preference=job;task=alt_title;job=\ref[job]\">\[[GetPlayerAltTitle(job)]\]</a></td></tr>"
|
||||
HTML += "</a></td></tr>"
|
||||
|
||||
HTML += "</td'></tr></table>"
|
||||
@@ -449,7 +449,7 @@ datum/preferences
|
||||
if(BE_ASSISTANT)
|
||||
HTML += "<center><br><u><a href='?_src_=prefs;preference=job;task=random'><font color=red>Be assistant if preference unavailable</font></a></u></center><br>"
|
||||
if(RETURN_TO_LOBBY)
|
||||
HTML += "<center><br><u><a href='?_src_=prefs;preference=job;task=random'><font color=purple>Return to lobby if prefernce unavailable</font></a></u></center><br>"
|
||||
HTML += "<center><br><u><a href='?_src_=prefs;preference=job;task=random'><font color=purple>Return to lobby if preference unavailable</font></a></u></center><br>"
|
||||
|
||||
HTML += "<center><a href='?_src_=prefs;preference=job;task=reset'>\[Reset\]</a></center>"
|
||||
HTML += "</tt>"
|
||||
|
||||
@@ -88,7 +88,7 @@ BLIND // can't see anything
|
||||
desc = "Comfortable-looking shoes."
|
||||
gender = PLURAL //Carn: for grammarically correct text-parsing
|
||||
var/chained = 0
|
||||
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = FEET
|
||||
slot_flags = SLOT_FEET
|
||||
|
||||
@@ -105,6 +105,7 @@ BLIND // can't see anything
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
slot_flags = SLOT_OCLOTHING
|
||||
var/blood_overlay_type = "suit"
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Spacesuit
|
||||
//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together.
|
||||
@@ -120,6 +121,7 @@ BLIND // can't see anything
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
@@ -137,6 +139,7 @@ BLIND // can't see anything
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
//Under clothing
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "ninja gloves"
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja"
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.2
|
||||
var/draining = 0
|
||||
var/candrain = 0
|
||||
var/mindrain = 200
|
||||
@@ -32,7 +32,7 @@
|
||||
name = "\improper SWAT Gloves"
|
||||
icon_state = "black"
|
||||
item_state = "swat_gl"
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
cold_protection = HANDS
|
||||
@@ -70,3 +70,4 @@
|
||||
icon_state = "leather"
|
||||
item_state = "ggloves"
|
||||
permeability_coefficient = 0.9
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
if(C.amount >= 2)
|
||||
C.use(2)
|
||||
wired = 1
|
||||
siemens_coefficient = 1
|
||||
siemens_coefficient = 3.0
|
||||
user << "<span class='notice'>You wrap some wires around [src].</span>"
|
||||
update_icon()
|
||||
else
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
|
||||
flags_inv = 0
|
||||
icon_action_button = "action_hardhat"
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
attack_self(mob/user)
|
||||
if(!isturf(user.loc))
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/head/helmet/warden
|
||||
name = "warden's hat"
|
||||
@@ -26,6 +26,7 @@
|
||||
flags = FPRINT|TABLEPASS|HEADCOVERSEYES
|
||||
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/head/helmet/swat
|
||||
name = "\improper SWAT helmet"
|
||||
@@ -37,6 +38,7 @@
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
/obj/item/clothing/head/helmet/thunderdome
|
||||
name = "\improper Thunderdome helmet"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
item_state = "chef"
|
||||
desc = "The commander in chef's head wear."
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Captain: This probably shouldn't be space-worthy
|
||||
/obj/item/clothing/head/caphat
|
||||
@@ -15,6 +16,7 @@
|
||||
desc = "It's good being the king."
|
||||
flags = FPRINT|TABLEPASS
|
||||
item_state = "caphat"
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Captain: This probably shouldn't be space-worthy
|
||||
/obj/item/clothing/head/helmet/cap
|
||||
@@ -25,6 +27,7 @@
|
||||
flags_inv = 0
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Chaplain
|
||||
/obj/item/clothing/head/chaplain_hood
|
||||
@@ -32,6 +35,7 @@
|
||||
desc = "It's hood that covers the head. It keeps you warm during the space winters."
|
||||
icon_state = "chaplain_hood"
|
||||
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Chaplain
|
||||
/obj/item/clothing/head/nun_hood
|
||||
@@ -39,6 +43,7 @@
|
||||
desc = "Maximum piety in this star system."
|
||||
icon_state = "nun_hood"
|
||||
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Mime
|
||||
/obj/item/clothing/head/beret
|
||||
@@ -46,6 +51,7 @@
|
||||
desc = "A beret, an artists favorite headwear."
|
||||
icon_state = "beret"
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/head/beret/sec
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
desc = "It's good to be emperor."
|
||||
flags = FPRINT|TABLEPASS
|
||||
item_state = "centhat"
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/hairflower
|
||||
name = "hair flower pin"
|
||||
@@ -26,6 +27,7 @@
|
||||
icon_state = "tophat"
|
||||
item_state = "that"
|
||||
flags = FPRINT|TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/redcoat
|
||||
name = "redcoat's hat"
|
||||
@@ -45,6 +47,7 @@
|
||||
icon_state = "plaguedoctor"
|
||||
flags = FPRINT | TABLEPASS
|
||||
permeability_coefficient = 0.01
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/hasturhood
|
||||
name = "hastur's hood"
|
||||
@@ -57,6 +60,7 @@
|
||||
desc = "It allows quick identification of trained medical personnel."
|
||||
icon_state = "nursehat"
|
||||
flags = FPRINT|TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/syndicatefake
|
||||
name = "red space-helmet replica"
|
||||
@@ -65,6 +69,7 @@
|
||||
desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
/obj/item/clothing/head/cueball
|
||||
name = "cueball helmet"
|
||||
@@ -82,6 +87,7 @@
|
||||
flags = FPRINT|TABLEPASS
|
||||
flags_inv = 0
|
||||
|
||||
|
||||
/obj/item/clothing/head/greenbandana
|
||||
name = "green bandana"
|
||||
desc = "It's a green bandana with some fine nanotech lining."
|
||||
@@ -132,6 +138,7 @@
|
||||
desc = "A working man's cap."
|
||||
icon_state = "flat_cap"
|
||||
item_state = "detective"
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/pirate
|
||||
name = "pirate hat"
|
||||
@@ -210,6 +217,7 @@
|
||||
icon_state = "witch"
|
||||
item_state = "witch"
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
/obj/item/clothing/head/chicken
|
||||
name = "chicken suit head"
|
||||
@@ -217,6 +225,7 @@
|
||||
icon_state = "chickenhead"
|
||||
item_state = "chickensuit"
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
/obj/item/clothing/head/bearpelt
|
||||
name = "bear pelt hat"
|
||||
@@ -224,6 +233,7 @@
|
||||
icon_state = "bearpelt"
|
||||
item_state = "bearpelt"
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
/obj/item/clothing/head/xenos
|
||||
name = "xenos helmet"
|
||||
@@ -232,3 +242,4 @@
|
||||
desc = "A helmet made out of chitinous alien hide."
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
|
||||
icon_action_button = "action_welding"
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/welding/attack_self()
|
||||
toggle()
|
||||
@@ -158,6 +159,7 @@
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/icon/mob
|
||||
var/icon/mob2
|
||||
siemens_coefficient = 1.5
|
||||
|
||||
update_icon(var/mob/living/carbon/human/user)
|
||||
if(!istype(user)) return
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
item_state = "helmet"
|
||||
color = "cargo"
|
||||
var/flipped = 0
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
dropped()
|
||||
src.icon_state = "[color]soft"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
flags = FPRINT|TABLEPASS|BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
w_class = 2
|
||||
siemens_coefficient = 3.0
|
||||
|
||||
/obj/item/clothing/mask/luchador/tecnicos
|
||||
name = "Tecnicos Mask"
|
||||
|
||||
@@ -35,4 +35,26 @@
|
||||
name = "medical mask"
|
||||
icon_state = "medical"
|
||||
item_state = "medical"
|
||||
permeability_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
|
||||
/obj/item/clothing/mask/breath/vox
|
||||
desc = "A weirdly-shaped breath mask."
|
||||
name = "vox breath mask"
|
||||
icon_state = "voxmask"
|
||||
item_state = "voxmask"
|
||||
permeability_coefficient = 0.01
|
||||
|
||||
toggle()
|
||||
set category = "Object"
|
||||
set name = "Adjust mask"
|
||||
set src in usr
|
||||
|
||||
usr << "You can't really adjust this mask - it's moulded to your beak!"
|
||||
|
||||
/obj/item/clothing/mask/breath/vox/mob_can_equip(M as mob, slot)
|
||||
var/mob/living/carbon/human/V = M
|
||||
if(V.dna.mutantrace != "vox")
|
||||
V << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
item_state = "gas_alt"
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Plague Dr suit can be found in clothing/suits/bio.dm
|
||||
/obj/item/clothing/mask/gas/plaguedoctor
|
||||
@@ -21,11 +22,13 @@
|
||||
name = "\improper SWAT mask"
|
||||
desc = "A close-fitting tactical mask that can be connected to an air supply."
|
||||
icon_state = "swat"
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/mask/gas/syndicate
|
||||
name = "syndicate mask"
|
||||
desc = "A close-fitting tactical mask that can be connected to an air supply."
|
||||
icon_state = "swat"
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/mask/gas/voice
|
||||
name = "gas mask"
|
||||
@@ -41,6 +44,7 @@
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_mask"
|
||||
vchange = 1
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
/obj/item/clothing/mask/gas/clown_hat
|
||||
name = "clown wig and mask"
|
||||
@@ -76,6 +80,7 @@
|
||||
name = "Death Commando Mask"
|
||||
icon_state = "death_commando_mask"
|
||||
item_state = "death_commando_mask"
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
/obj/item/clothing/mask/gas/cyborg
|
||||
name = "cyborg visor"
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
flags = FPRINT|TABLEPASS|BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
w_class = 2
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/mask/horsehead
|
||||
name = "horse head mask"
|
||||
@@ -91,3 +92,4 @@
|
||||
flags_inv = HIDEFACE
|
||||
w_class = 2
|
||||
var/voicechange = 0
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
flags = NOSLIP
|
||||
origin_tech = "syndicate=3"
|
||||
var/list/clothing_choices = list()
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/shoes/mime
|
||||
name = "mime shoes"
|
||||
@@ -20,7 +20,7 @@
|
||||
icon_state = "swat"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags = NOSLIP
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes.
|
||||
name = "combat boots"
|
||||
@@ -28,7 +28,7 @@
|
||||
icon_state = "swat"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags = NOSLIP
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
@@ -42,7 +42,7 @@
|
||||
permeability_coefficient = 0.01
|
||||
flags = NOSLIP
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
@@ -82,7 +82,7 @@
|
||||
icon_state = "jackboots"
|
||||
item_state = "jackboots"
|
||||
color = "hosred"
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/shoes/cult
|
||||
name = "boots"
|
||||
@@ -90,7 +90,7 @@
|
||||
icon_state = "cult"
|
||||
item_state = "cult"
|
||||
color = "cult"
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOE_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
/obj/item/clothing/head/helmet/space/unathi
|
||||
|
||||
var/up = 0 //So Unathi helmets play nicely with the weldervision check.
|
||||
mob_can_equip(M as mob, slot)
|
||||
var/mob/living/carbon/human/U = M
|
||||
if(U.dna.mutantrace != "lizard")
|
||||
U << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/suit/space/unathi/mob_can_equip(M as mob, slot)
|
||||
var/mob/living/carbon/human/U = M
|
||||
if(U.dna.mutantrace != "lizard")
|
||||
U << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/unathi/helmet_cheap
|
||||
name = "NT breacher helmet"
|
||||
@@ -39,9 +53,11 @@
|
||||
item_state = "vox-pressure"
|
||||
desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions."
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
|
||||
slowdown = 2
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/vox/carapace
|
||||
name = "alien visor"
|
||||
@@ -49,6 +65,7 @@
|
||||
item_state = "vox-carapace"
|
||||
desc = "A glowing visor, perhaps stolen from a depressed Cylon."
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
flags = HEADCOVERSEYES|STOPSPRESSUREDMAGE
|
||||
|
||||
/obj/item/clothing/suit/space/vox/carapace
|
||||
name = "alien carapace armour"
|
||||
@@ -56,7 +73,7 @@
|
||||
item_state = "vox-carapace"
|
||||
desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down."
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
|
||||
@@ -26,4 +26,4 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "ert_commander"
|
||||
item_state = "helm-command"
|
||||
armor = list(melee = 50, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/suit/space/ert
|
||||
name = "emergency response team suit"
|
||||
@@ -19,7 +19,7 @@
|
||||
/obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \
|
||||
/obj/item/device/radio, /obj/item/device/analyzer, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse_rifle, \
|
||||
/obj/item/weapon/gun/energy/taser, /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/gun)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
//Commander
|
||||
/obj/item/clothing/head/helmet/space/ert/commander
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
//Deathsquad suit
|
||||
/obj/item/clothing/head/helmet/space/deathsquad
|
||||
@@ -34,7 +34,7 @@
|
||||
icon_state = "deathsquad"
|
||||
item_state = "deathsquad"
|
||||
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
/obj/item/clothing/head/helmet/space/deathsquad/beret
|
||||
name = "officer's beret"
|
||||
@@ -42,6 +42,7 @@
|
||||
icon_state = "beret_badge"
|
||||
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
//Space santa outfit suit
|
||||
/obj/item/clothing/head/helmet/space/santahat
|
||||
@@ -68,6 +69,7 @@
|
||||
item_state = "pirate"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/suit/space/pirate
|
||||
name = "pirate coat"
|
||||
@@ -78,5 +80,6 @@
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "s-ninja_mask"
|
||||
allowed = list(/obj/item/weapon/cell)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja
|
||||
@@ -16,7 +16,7 @@
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/cell)
|
||||
slowdown = 0
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
//Important parts of the suit.
|
||||
var/mob/living/carbon/affecting = null//The wearer.
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
item_state = "syndie_helm"
|
||||
color = "syndi"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/rig/syndi
|
||||
@@ -98,7 +98,7 @@
|
||||
w_class = 3
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
|
||||
//Wizard Rig
|
||||
@@ -110,7 +110,7 @@
|
||||
color = "wiz"
|
||||
unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles!
|
||||
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/suit/space/rig/wizard
|
||||
icon_state = "rig-wiz"
|
||||
@@ -121,7 +121,7 @@
|
||||
w_class = 3
|
||||
unacidable = 1
|
||||
armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
|
||||
//Medical Rig
|
||||
@@ -148,7 +148,7 @@
|
||||
item_state = "sec_helm"
|
||||
color = "sec"
|
||||
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/suit/space/rig/security
|
||||
icon_state = "rig-sec"
|
||||
@@ -157,7 +157,7 @@
|
||||
item_state = "sec_hardsuit"
|
||||
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/melee/baton)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
|
||||
//Atmospherics Rig (BS12)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "syndicate"
|
||||
desc = "Has a tag: Totally not property of an enemy corporation, honest."
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate
|
||||
name = "red space suit"
|
||||
@@ -17,7 +17,7 @@
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
|
||||
//Green syndicate space suit
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO
|
||||
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/vest
|
||||
@@ -42,6 +42,7 @@
|
||||
slowdown = 1
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/bulletproof
|
||||
@@ -51,7 +52,7 @@
|
||||
item_state = "armor"
|
||||
blood_overlay_type = "armor"
|
||||
armor = list(melee = 10, bullet = 80, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
/obj/item/clothing/suit/armor/laserproof
|
||||
name = "Ablative Armor Vest"
|
||||
@@ -60,7 +61,7 @@
|
||||
item_state = "armor_reflec"
|
||||
blood_overlay_type = "armor"
|
||||
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/swat
|
||||
name = "swat suit"
|
||||
@@ -77,6 +78,7 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/swat/officer
|
||||
@@ -151,6 +153,7 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/heavy
|
||||
name = "heavy armor"
|
||||
@@ -162,6 +165,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 3
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/clothing/suit/armor/tdome
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/suit/bio_suit
|
||||
name = "bio suit"
|
||||
@@ -22,6 +23,7 @@
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
//Standard biosuit, orange stripe
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
|
||||
siemens_coefficient = 3.0
|
||||
|
||||
/obj/item/clothing/suit/redtag
|
||||
name = "red laser tag armour"
|
||||
@@ -25,6 +26,7 @@
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
|
||||
siemens_coefficient = 3.0
|
||||
|
||||
/*
|
||||
* Costume
|
||||
@@ -145,6 +147,7 @@
|
||||
item_state = "chickensuit"
|
||||
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET
|
||||
flags_inv = HIDESHOES|HIDEJUMPSUIT
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/monkeysuit
|
||||
@@ -154,6 +157,7 @@
|
||||
item_state = "monkeysuit"
|
||||
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
siemens_coefficient = 2.0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/holidaypriest
|
||||
@@ -269,30 +273,35 @@
|
||||
desc = "A rather skimpy pink swimsuit."
|
||||
icon_state = "stripper_p_under"
|
||||
color = "stripper_p"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/stripper/stripper_green
|
||||
name = "green swimsuit"
|
||||
desc = "A rather skimpy green swimsuit."
|
||||
icon_state = "stripper_g_under"
|
||||
color = "stripper_g"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/suit/stripper/stripper_pink
|
||||
name = "pink skimpy dress"
|
||||
desc = "A rather skimpy pink dress."
|
||||
icon_state = "stripper_p_over"
|
||||
item_state = "stripper_p"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/suit/stripper/stripper_green
|
||||
name = "green skimpy dress"
|
||||
desc = "A rather skimpy green dress."
|
||||
icon_state = "stripper_g_over"
|
||||
item_state = "stripper_g"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/stripper/mankini
|
||||
name = "the mankini"
|
||||
desc = "No honest man would wear this abomination"
|
||||
icon_state = "mankini"
|
||||
color = "mankini"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/suit/xenos
|
||||
name = "xenos suit"
|
||||
@@ -301,35 +310,42 @@
|
||||
item_state = "xenos_helm"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
siemens_coefficient = 2.0
|
||||
//swimsuit
|
||||
/obj/item/clothing/under/swimsuit/
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/swimsuit/black
|
||||
name = "black swimsuit"
|
||||
desc = "An oldfashioned black swimsuit."
|
||||
icon_state = "swim_black"
|
||||
color = "swim_black"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/swimsuit/blue
|
||||
name = "blue swimsuit"
|
||||
desc = "An oldfashioned blue swimsuit."
|
||||
icon_state = "swim_blue"
|
||||
color = "swim_blue"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/swimsuit/purple
|
||||
name = "purple swimsuit"
|
||||
desc = "An oldfashioned purple swimsuit."
|
||||
icon_state = "swim_purp"
|
||||
color = "swim_purp"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/swimsuit/green
|
||||
name = "green swimsuit"
|
||||
desc = "An oldfashioned green swimsuit."
|
||||
icon_state = "swim_green"
|
||||
color = "swim_green"
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/under/swimsuit/red
|
||||
name = "red swimsuit"
|
||||
desc = "An oldfashioned red swimsuit."
|
||||
icon_state = "swim_red"
|
||||
color = "swim_red"
|
||||
siemens_coefficient = 1
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
desc = "Strange-looking hat-wear that most certainly belongs to a real magic user."
|
||||
icon_state = "wizard"
|
||||
//Not given any special protective value since the magic robes are full-body protection --NEO
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/wizard/red
|
||||
name = "red wizard hat"
|
||||
desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user."
|
||||
icon_state = "redwizard"
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/wizard/fake
|
||||
name = "wizard hat"
|
||||
@@ -18,13 +20,20 @@
|
||||
name = "Witch Hat"
|
||||
desc = "Strange-looking hat-wear, makes you want to cast fireballs."
|
||||
icon_state = "marisa"
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/wizard/magus
|
||||
name = "Magus Helm"
|
||||
desc = "A mysterious helmet that hums with an unearthly power"
|
||||
icon_state = "magus"
|
||||
item_state = "magus"
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/wizard/amp
|
||||
name = "psychic amplifier"
|
||||
desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot."
|
||||
icon_state = "amp"
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/suit/wizrobe
|
||||
name = "wizard robe"
|
||||
@@ -37,7 +46,7 @@
|
||||
armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20)
|
||||
allowed = list(/obj/item/weapon/teleportation_scroll)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/red
|
||||
name = "red wizard robe"
|
||||
@@ -64,6 +73,11 @@
|
||||
icon_state = "magusred"
|
||||
item_state = "magusred"
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/psypurple
|
||||
name = "purple robes"
|
||||
desc = "Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash."
|
||||
icon_state = "psyamp"
|
||||
item_state = "psyamp"
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/fake
|
||||
name = "wizard robe"
|
||||
@@ -72,12 +86,14 @@
|
||||
item_state = "wizrobe"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 1.0
|
||||
|
||||
/obj/item/clothing/head/wizard/marisa/fake
|
||||
name = "Witch Hat"
|
||||
desc = "Strange-looking hat-wear, makes you want to cast fireballs."
|
||||
icon_state = "marisa"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 1.0
|
||||
|
||||
/obj/item/clothing/suit/wizrobe/marisa/fake
|
||||
name = "Witch Robe"
|
||||
@@ -86,4 +102,5 @@
|
||||
item_state = "marisarobe"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 1.0
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
color = "black"
|
||||
desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist."
|
||||
origin_tech = "syndicate=3"
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.8
|
||||
var/list/clothing_choices = list()
|
||||
|
||||
New()
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
color = "warden"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/rank/security
|
||||
name = "security officer's jumpsuit"
|
||||
@@ -25,6 +26,7 @@
|
||||
color = "secred"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/rank/dispatch
|
||||
name = "dispatcher's uniform"
|
||||
@@ -34,6 +36,7 @@
|
||||
color = "dispatch"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/rank/security2
|
||||
name = "security officer's uniform"
|
||||
@@ -43,6 +46,7 @@
|
||||
color = "redshirt2"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/*
|
||||
* Detective
|
||||
@@ -55,6 +59,7 @@
|
||||
color = "detective"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
|
||||
/obj/item/clothing/head/det_hat
|
||||
@@ -63,6 +68,7 @@
|
||||
icon_state = "detective"
|
||||
allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen)
|
||||
armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/*
|
||||
* Head of Security
|
||||
@@ -75,7 +81,7 @@
|
||||
color = "hosred"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
flags = FPRINT | TABLEPASS
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
@@ -86,7 +92,7 @@
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
flags_inv = 0
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/hos
|
||||
@@ -97,7 +103,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS/dermal
|
||||
@@ -105,6 +111,7 @@
|
||||
desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head."
|
||||
icon_state = "dermal"
|
||||
item_state = "dermal"
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
//Jensen cosplay gear
|
||||
/obj/item/clothing/under/rank/head_of_security/jensen
|
||||
@@ -113,7 +120,7 @@
|
||||
icon_state = "jensen"
|
||||
item_state = "jensen"
|
||||
color = "jensen"
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/suit/armor/hos/jensen
|
||||
name = "armored trenchcoat"
|
||||
@@ -121,4 +128,4 @@
|
||||
icon_state = "jensencoat"
|
||||
item_state = "jensencoat"
|
||||
flags_inv = 0
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.6
|
||||
@@ -131,6 +131,13 @@
|
||||
icon_state = "cloud"
|
||||
color = "cloud"
|
||||
|
||||
/obj/item/clothing/under/psysuit
|
||||
name = "dark undersuit"
|
||||
desc = "A thick, layered grey undersuit lined with power cables. Feels a little like wearing an electrical storm."
|
||||
icon_state = "psysuit"
|
||||
item_state = "psysuit"
|
||||
color = "psysuit"
|
||||
|
||||
/obj/item/clothing/under/gimmick/rank/captain/suit
|
||||
name = "captain's suit"
|
||||
desc = "A green suit and yellow necktie. Exemplifies authority."
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
color = "syndicate"
|
||||
has_sensor = 0
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/syndicate/combat
|
||||
name = "combat turtleneck"
|
||||
|
||||
@@ -381,7 +381,8 @@
|
||||
if(display_gloves)
|
||||
msg += "<span class='warning'><b>[src] has blood running from under [t_his] gloves!</b></span>\n"
|
||||
|
||||
|
||||
for(var/implant in get_visible_implants(1))
|
||||
msg += "<span class='warning'><b>[src] has \a [implant] sticking out of their flesh!</span>\n"
|
||||
if(digitalcamo)
|
||||
msg += "[t_He] [t_is] repulsively uncanny!\n"
|
||||
|
||||
|
||||
@@ -1112,3 +1112,79 @@
|
||||
if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
|
||||
del(feet_blood_DNA)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/verb/yank_out_object()
|
||||
set name = "Yank out object"
|
||||
set desc = "Remove an embedded item at the cost of bleeding and pain."
|
||||
set category = "Object"
|
||||
|
||||
if(!isliving(usr) || usr.next_move > world.time)
|
||||
return
|
||||
usr.next_move = world.time + 20
|
||||
|
||||
var/list/valid_objects = get_visible_implants(1)
|
||||
var/datum/organ/external/affected = null
|
||||
|
||||
if(!valid_objects.len)
|
||||
src << "You have nothing stuck in your wounds that is large enough to remove without surgery."
|
||||
return
|
||||
|
||||
if(src.stat == 1)
|
||||
src << "You are unconcious and cannot do that!"
|
||||
return
|
||||
|
||||
if(src.restrained())
|
||||
src << "You are restrained and cannot do that!"
|
||||
return
|
||||
|
||||
var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
|
||||
|
||||
for(var/datum/organ/external/organ in src.organs) //Grab the organ holding the implant. Messy as Hell, TBD: fix.
|
||||
for(var/obj/item/weapon/O in organ.implants)
|
||||
if(O == selection)
|
||||
affected = organ
|
||||
|
||||
src << "<span class='warning'>You attempt to get a good grip on the [selection] in your [affected] with bloody fingers.</span>"
|
||||
bloody_hands(src)
|
||||
|
||||
spawn(80)
|
||||
visible_message("<span class='warning'><b>[src] rips [selection] out of their [affected] in a welter of blood.</b></span>","<span class='warning'><b>You rip [selection] out of your [affected] in a welter of blood.</b></span>")
|
||||
selection.loc = get_turf(src)
|
||||
affected.implants -= selection
|
||||
shock_stage+=10
|
||||
|
||||
if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
|
||||
var/datum/wound/internal_bleeding/I = new (15)
|
||||
affected.wounds += I
|
||||
src.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/get_visible_implants(var/class = 0)
|
||||
|
||||
var/list/visible_implants = list()
|
||||
for(var/datum/organ/external/organ in src.organs)
|
||||
for(var/obj/item/weapon/O in organ.implants)
|
||||
if(!istype(O,/obj/item/weapon/implant) && O.w_class > class)
|
||||
visible_implants += O
|
||||
|
||||
return(visible_implants)
|
||||
|
||||
/mob/living/carbon/human/proc/handle_embedded_objects()
|
||||
|
||||
for(var/datum/organ/external/organ in src.organs)
|
||||
for(var/obj/item/weapon/O in organ.implants)
|
||||
if(!istype(O,/obj/item/weapon/implant) && prob(5)) //Moving with things stuck in you could be bad.
|
||||
// All kinds of embedded objects cause bleeding.
|
||||
var/msg = null
|
||||
switch(rand(1,3))
|
||||
if(1)
|
||||
msg ="<span class='warning'>A spike of pain jolts your [organ] as you bump [O] inside.</span>"
|
||||
if(2)
|
||||
msg ="<span class='warning'>Your movement jostles [O] in your [organ] painfully.</span>"
|
||||
if(3)
|
||||
msg ="<span class='warning'>[O] in your [organ] twists painfully as you move.</span>"
|
||||
src << msg
|
||||
|
||||
organ.status |= ORGAN_BLEEDING
|
||||
organ.take_damage(rand(1,3), 0, 0)
|
||||
src.adjustToxLoss(rand(1,3))
|
||||
@@ -190,7 +190,9 @@
|
||||
zone = "head"
|
||||
return organs_by_name[zone]
|
||||
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null)
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/obj/used_weapon = null)
|
||||
|
||||
//visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]")
|
||||
if((damagetype != BRUTE) && (damagetype != BURN))
|
||||
..(damage, damagetype, def_zone, blocked)
|
||||
return 1
|
||||
@@ -219,6 +221,22 @@
|
||||
UpdateDamageIcon()
|
||||
|
||||
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
|
||||
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
//Embedded projectile code.
|
||||
if(!organ) return
|
||||
if(istype(used_weapon,/obj/item/weapon))
|
||||
var/obj/item/weapon/W = used_weapon
|
||||
if(damage > (5*W.w_class) && (prob(damage/W.w_class) || sharp)) //The larger it is, the harder it needs to hit to stick.
|
||||
W.loc = organ //Sharp objects will always embed if they do enough damage.
|
||||
organ.implants += W
|
||||
visible_message("<span class='danger'>\The [W] sticks in the wound!</span>")
|
||||
W.add_blood(src)
|
||||
else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel.
|
||||
if(prob(50) && damagetype == BRUTE)
|
||||
var/obj/item/weapon/shard/shrapnel/S = new()
|
||||
S.loc = organ
|
||||
organ.implants += S
|
||||
visible_message("<span class='danger'>The projectile sticks in the wound!</span>")
|
||||
S.add_blood(src)
|
||||
return 1
|
||||
@@ -14,16 +14,23 @@ emp_act
|
||||
if(istype(P, /obj/item/projectile/energy/electrode))
|
||||
var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy!
|
||||
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking?
|
||||
// var/deflectchance=90 //Is it a CRITICAL HIT with that taser?
|
||||
for(var/bp in body_parts) //Make an unregulated var to pass around.
|
||||
if(!bp)
|
||||
continue //Does this thing we're shooting even exist?
|
||||
if(bp && istype(bp ,/obj/item/clothing)) // If it exists, and it's clothed
|
||||
var/obj/item/clothing/C = bp // Then call an argument C to be that clothing!
|
||||
if(C.body_parts_covered & select_area.body_part) // Is that body part being targeted covered?
|
||||
P.agony=P.agony*C.siemens_coefficient
|
||||
apply_effect(P.agony,AGONY,0)
|
||||
del P
|
||||
/* Commenting out new-old taser nerf.
|
||||
if(C.siemens_coefficient == 0) //If so, is that clothing shock proof?
|
||||
visible_message("\red <B>The [P.name] gets deflected by [src]'s [C.name]!</B>") //DEFLECT!
|
||||
del P
|
||||
|
||||
if(prob(deflectchance))
|
||||
visible_message("\red <B>The [P.name] gets deflected by [src]'s [C.name]!</B>") //DEFLECT!
|
||||
visible_message("\red <B> Taser hit for [P.damage] damage!</B>")
|
||||
del P
|
||||
*/
|
||||
/* Commenting out old Taser nerf
|
||||
if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor))
|
||||
if(istype(P, /obj/item/projectile/energy/electrode))
|
||||
@@ -32,6 +39,7 @@ emp_act
|
||||
return -1
|
||||
*/
|
||||
// END TASER NERF
|
||||
|
||||
if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
var/reflectchance = 40 - round(P.damage/3)
|
||||
@@ -162,7 +170,7 @@ emp_act
|
||||
if(armor >= 2) return 0
|
||||
if(!I.force) return 0
|
||||
|
||||
apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), I.name)
|
||||
apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), I)
|
||||
|
||||
var/bloody = 0
|
||||
if(((I.damtype == BRUTE) || (I.damtype == HALLOSS)) && prob(25 + (I.force * 2)))
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
if (istype(loc, /turf/space)) return -1 // It's hard to be slowed down in space by... anything
|
||||
|
||||
handle_embedded_objects() //Moving with objects stuck in you can cause bad times.
|
||||
|
||||
var/health_deficiency = (100 - health - halloss)
|
||||
if(health_deficiency >= 40) tally += (health_deficiency / 25)
|
||||
|
||||
|
||||
@@ -394,6 +394,7 @@
|
||||
var/oxygen_used = 0
|
||||
var/nitrogen_used = 0
|
||||
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
|
||||
var/vox_oxygen_max = 1 // For vox.
|
||||
|
||||
//Partial pressure of the O2 in our breath
|
||||
var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure
|
||||
@@ -436,6 +437,7 @@
|
||||
adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
||||
failed_last_breath = 1
|
||||
oxygen_alert = max(oxygen_alert, 1)
|
||||
|
||||
else // We're in safe limits
|
||||
failed_last_breath = 0
|
||||
adjustOxyLoss(-5)
|
||||
@@ -467,6 +469,10 @@
|
||||
if(reagents)
|
||||
reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
toxins_alert = max(toxins_alert, 1)
|
||||
else if(O2_pp > vox_oxygen_max && src.dna.mutantrace=="vox") //Oxygen is toxic to vox.
|
||||
var/ratio = (breath.oxygen/vox_oxygen_max) * 10
|
||||
adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
|
||||
toxins_alert = max(toxins_alert, 1)
|
||||
else
|
||||
toxins_alert = 0
|
||||
|
||||
@@ -596,7 +602,7 @@
|
||||
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
|
||||
pressure_alert = -1
|
||||
else
|
||||
if( !(COLD_RESISTANCE in mutations) )
|
||||
if( !(COLD_RESISTANCE in mutations) && src.dna.mutantrace!="vox")
|
||||
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
|
||||
pressure_alert = -2
|
||||
else
|
||||
@@ -961,19 +967,21 @@
|
||||
del a
|
||||
|
||||
if(halloss > 100)
|
||||
src << "<span class='notice'>You're too tired to keep going...</span>"
|
||||
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
||||
for(var/mob/O in oviewers(src, null))
|
||||
O.show_message("<B>[src]</B> slumps to the ground panting, too weak to continue fighting.", 1)
|
||||
Paralyse(3)
|
||||
O.show_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.", 1)
|
||||
Paralyse(10)
|
||||
setHalLoss(99)
|
||||
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-6)
|
||||
else if(sleeping)
|
||||
handle_dreams()
|
||||
adjustHalLoss(-5)
|
||||
adjustHalLoss(-6)
|
||||
if (mind)
|
||||
if((mind.active && client != null) || immune_to_ssd) //This also checks whether a client is connected, if not, sleep is not reduced.
|
||||
sleeping = max(sleeping-1, 0)
|
||||
@@ -982,9 +990,14 @@
|
||||
if( prob(10) && health && !hal_crit )
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
else if(resting)
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-6)
|
||||
//CONSCIOUS
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-2)
|
||||
|
||||
//Eyes
|
||||
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
|
||||
|
||||
@@ -444,9 +444,11 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if("skrell")
|
||||
race_icon = 'icons/mob/human_races/r_skrell.dmi'
|
||||
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||
|
||||
if("vox")
|
||||
race_icon = 'icons/mob/human_races/r_vox.dmi'
|
||||
deform_icon = 'icons/mob/human_races/r_def_vox.dmi'
|
||||
|
||||
else
|
||||
race_icon = 'icons/mob/human_races/r_human.dmi'
|
||||
deform_icon = 'icons/mob/human_races/r_def_human.dmi'
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
Weaken(effect/(blocked+1))
|
||||
if(PARALYZE)
|
||||
Paralyse(effect/(blocked+1))
|
||||
if(AGONY)
|
||||
halloss += effect // Useful for objects that cause "subdual" damage. PAIN!
|
||||
if(IRRADIATE)
|
||||
radiation += max((((effect - (effect*(getarmor(null, "rad")/100))))/(blocked+1)),0)//Rads auto check armor
|
||||
if(STUTTER)
|
||||
@@ -62,7 +64,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/blocked = 0)
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/blocked = 0, var/agony = 0)
|
||||
if(blocked >= 2) return 0
|
||||
if(stun) apply_effect(stun, STUN, blocked)
|
||||
if(weaken) apply_effect(weaken, WEAKEN, blocked)
|
||||
@@ -71,4 +73,5 @@
|
||||
if(stutter) apply_effect(stutter, STUTTER, blocked)
|
||||
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
|
||||
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
|
||||
if(agony) apply_effect(agony, AGONY, blocked)
|
||||
return 1
|
||||
|
||||
@@ -57,11 +57,11 @@
|
||||
P.on_hit(src,2)
|
||||
return 2
|
||||
if(!P.nodamage)
|
||||
apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone, used_weapon = "Projectile([P.name])")
|
||||
apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone, absorb, 0, P)
|
||||
P.on_hit(src, absorb)
|
||||
return absorb
|
||||
|
||||
/mob/living/hitby(atom/movable/AM as mob|obj)//Standardization and logging -Sieve
|
||||
/mob/living/hitby(atom/movable/AM as mob|obj,var/speed)//Standardization and logging -Sieve
|
||||
if(istype(AM,/obj/))
|
||||
var/obj/O = AM
|
||||
var/zone = ran_zone("chest",75)//Hits a random part of the body, geared towards the chest
|
||||
@@ -72,7 +72,7 @@
|
||||
src.visible_message("\red [src] has been hit by [O].")
|
||||
var/armor = run_armor_check(zone, "melee", "Your armor has protected your [zone].", "Your armor has softened hit to your [zone].")
|
||||
if(armor < 2)
|
||||
apply_damage(O.throwforce, dtype, zone, armor, O)
|
||||
apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O.sharp, O)
|
||||
if(!O.fingerprintslast)
|
||||
return
|
||||
var/client/assailant = directory[ckey(O.fingerprintslast)]
|
||||
|
||||
@@ -133,6 +133,8 @@ var/list/ai_list = list()
|
||||
icons += "M00X-BC"
|
||||
if (src.name == "Skuld" && src.ckey == "ravensdale")
|
||||
icons += "Skuld"
|
||||
if (src.name == "REMNANT" && src.ckey == "serithi")
|
||||
icons += "REMNANT"
|
||||
icontype = input("Please, select a display!", "AI", null/*, null*/) in icons
|
||||
if(icontype == "Clown")
|
||||
icon_state = "ai-clown2"
|
||||
@@ -170,32 +172,23 @@ var/list/ai_list = list()
|
||||
icon_state = "ai-triumvirate-malf"
|
||||
else if(icontype == "Skuld")
|
||||
icon_state = "ai-ravensdale"
|
||||
else if(icontype == "REMNANT")
|
||||
icon_state = "ai-serithi"
|
||||
//else
|
||||
//usr <<"You can only change your display once!"
|
||||
//return
|
||||
|
||||
/mob/living/silicon/ai/Stat()
|
||||
..()
|
||||
statpanel("Status")
|
||||
if (client.statpanel == "Status")
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
if (timeleft)
|
||||
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if (mind == malfai)
|
||||
if (malf.apcs >= 3)
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds")
|
||||
|
||||
if(!stat)
|
||||
stat(null, text("System integrity: [(health+100)/2]%"))
|
||||
else
|
||||
stat(null, text("Systems nonfunctional"))
|
||||
// displays the malf_ai information if the AI is the malf
|
||||
/mob/living/silicon/ai/show_malf_ai()
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if (mind == malfai) // are we the evil one?
|
||||
if (malf.apcs >= 3)
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds")
|
||||
|
||||
|
||||
/mob/living/silicon/ai/proc/ai_alerts()
|
||||
set category = "AI Commands"
|
||||
set name = "Show Alerts"
|
||||
@@ -232,17 +225,11 @@ var/list/ai_list = list()
|
||||
viewalerts = 1
|
||||
src << browse(dat, "window=aialerts&can_close=0")
|
||||
|
||||
// this verb lets the ai see the stations manifest
|
||||
/mob/living/silicon/ai/proc/ai_roster()
|
||||
set category = "AI Commands"
|
||||
set name = "Show Crew Manifest"
|
||||
var/dat
|
||||
|
||||
dat += "<h4>Crew Manifest</h4>"
|
||||
if(data_core)
|
||||
dat += data_core.get_manifest(0) // make it monochrome
|
||||
dat += "<br>"
|
||||
src << browse(dat, "window=airoster")
|
||||
onclose(src, "airoster")
|
||||
show_station_manifest()
|
||||
|
||||
/mob/living/silicon/ai/proc/ai_call_shuttle()
|
||||
set category = "AI Commands"
|
||||
@@ -350,6 +337,10 @@ var/list/ai_list = list()
|
||||
else
|
||||
src << "<span class='notice'>Unable to locate the holopad.</span>"
|
||||
|
||||
if(href_list["say_word"])
|
||||
src.announcement(href_list["say_word"])
|
||||
return
|
||||
|
||||
if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
|
||||
var/L = text2num(href_list["lawc"])
|
||||
switch(lawcheck[L+1])
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
stat = DEAD
|
||||
if (src.name == "Skuld" && src.ckey == "ravensdale")//checks ID of AI and player to see if it needs to pull the custom death sprite and goes to blue-screen if it doesn't
|
||||
icon_state = "ai-ravensdale-crash"
|
||||
else if (src.name == "REMNANT" && src.ckey == "serithi")
|
||||
icon_state = "ai-serithi-crash"
|
||||
else icon_state = "ai-crash"
|
||||
update_canmove()
|
||||
if(src.eyeobj)
|
||||
|
||||
@@ -27,3 +27,696 @@
|
||||
return "declares, \"[text]\"";
|
||||
|
||||
return "states, \"[text]\"";
|
||||
|
||||
var/announcing_vox = 0
|
||||
var/const/VOX_CHANNEL = 200
|
||||
var/const/VOX_VOLUME = 75
|
||||
|
||||
/mob/living/silicon/ai/verb/announcement_help()
|
||||
|
||||
set name = "Announcement Help"
|
||||
set desc = "Display a list of vocal words to announce to the crew."
|
||||
set category = "AI Commands"
|
||||
|
||||
|
||||
var/dat = "Here is a list of words you can type into the Announcement button to create sentences to vocally announce.<BR> \
|
||||
Do not use punctuation as you would normally, if you want a pause you can use the full stop and comma characters by separating them with spaces, like so: 'Alpha . Test , Bravo'.<BR>"
|
||||
|
||||
var/index = 0
|
||||
for(var/word in vox_sounds)
|
||||
index++
|
||||
dat += "<A href='?src=\ref[src];say_word=[word]'>[capitalize(word)]</A>"
|
||||
if(index != vox_sounds.len)
|
||||
dat += " / "
|
||||
|
||||
src << browse(dat, "window=announce_help;size=500x400")
|
||||
|
||||
|
||||
/mob/living/silicon/ai/verb/announcement(var/message as text)
|
||||
|
||||
set name = "Announcement"
|
||||
set desc = "Create a vocal announcement by typing in the available words to create a setence. More help is available in 'Announcement Help'"
|
||||
set category = "AI Commands"
|
||||
|
||||
if(!message)
|
||||
return
|
||||
//if(!announcing_vox > world.time)
|
||||
// return
|
||||
|
||||
log_game("[key_name_admin(src)] made a vocal announcement with the following message: [message].")
|
||||
|
||||
announcing_vox = world.time + 30
|
||||
|
||||
var/list/words = stringsplit(trim(message), " ")
|
||||
var/list/incorrect_words = list()
|
||||
|
||||
if(words.len > 32)
|
||||
words.len = 32
|
||||
for(var/word in words)
|
||||
word = trim(word)
|
||||
if(!word)
|
||||
continue
|
||||
if(!play_vox_word(word, src.z)) // If the word isn't speakable
|
||||
incorrect_words += word
|
||||
|
||||
if(incorrect_words.len)
|
||||
src << "<span class='notice'>These words are not available on the announcement system: [english_list(incorrect_words)].</span>"
|
||||
|
||||
/proc/play_vox_word(var/word, var/z_level)
|
||||
|
||||
word = lowertext(word)
|
||||
|
||||
if(vox_sounds[word])
|
||||
|
||||
var/sound_file = vox_sounds[word]
|
||||
var/sound/voice = sound(sound_file, wait = 1, channel = VOX_CHANNEL, volume = VOX_VOLUME)
|
||||
voice.status = SOUND_STREAM
|
||||
|
||||
// Play voice for all mobs in the z level
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
var/turf/T = get_turf(M)
|
||||
if(T.z == z_level)
|
||||
M << voice
|
||||
return 1
|
||||
return 0
|
||||
|
||||
// List is required to compile the resources into the game when it loads.
|
||||
// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
|
||||
|
||||
var/list/vox_sounds = list("," = 'sound/vox/,.wav',
|
||||
"." = 'sound/vox/..wav',
|
||||
"a" = 'sound/vox/a.wav',
|
||||
"accelerating" = 'sound/vox/accelerating.wav',
|
||||
"accelerator" = 'sound/vox/accelerator.wav',
|
||||
"accepted" = 'sound/vox/accepted.wav',
|
||||
"access" = 'sound/vox/access.wav',
|
||||
"acknowledge" = 'sound/vox/acknowledge.wav',
|
||||
"acknowledged" = 'sound/vox/acknowledged.wav',
|
||||
"acquired" = 'sound/vox/acquired.wav',
|
||||
"acquisition" = 'sound/vox/acquisition.wav',
|
||||
"across" = 'sound/vox/across.wav',
|
||||
"activate" = 'sound/vox/activate.wav',
|
||||
"activated" = 'sound/vox/activated.wav',
|
||||
"activity" = 'sound/vox/activity.wav',
|
||||
"adios" = 'sound/vox/adios.wav',
|
||||
"administration" = 'sound/vox/administration.wav',
|
||||
"advanced" = 'sound/vox/advanced.wav',
|
||||
"after" = 'sound/vox/after.wav',
|
||||
"agent" = 'sound/vox/agent.wav',
|
||||
"alarm" = 'sound/vox/alarm.wav',
|
||||
"alert" = 'sound/vox/alert.wav',
|
||||
"alien" = 'sound/vox/alien.wav',
|
||||
"aligned" = 'sound/vox/aligned.wav',
|
||||
"all" = 'sound/vox/all.wav',
|
||||
"alpha" = 'sound/vox/alpha.wav',
|
||||
"am" = 'sound/vox/am.wav',
|
||||
"amigo" = 'sound/vox/amigo.wav',
|
||||
"ammunition" = 'sound/vox/ammunition.wav',
|
||||
"an" = 'sound/vox/an.wav',
|
||||
"and" = 'sound/vox/and.wav',
|
||||
"announcement" = 'sound/vox/announcement.wav',
|
||||
"anomalous" = 'sound/vox/anomalous.wav',
|
||||
"antenna" = 'sound/vox/antenna.wav',
|
||||
"any" = 'sound/vox/any.wav',
|
||||
"apprehend" = 'sound/vox/apprehend.wav',
|
||||
"approach" = 'sound/vox/approach.wav',
|
||||
"are" = 'sound/vox/are.wav',
|
||||
"area" = 'sound/vox/area.wav',
|
||||
"arm" = 'sound/vox/arm.wav',
|
||||
"armed" = 'sound/vox/armed.wav',
|
||||
"armor" = 'sound/vox/armor.wav',
|
||||
"armory" = 'sound/vox/armory.wav',
|
||||
"arrest" = 'sound/vox/arrest.wav',
|
||||
"ass" = 'sound/vox/ass.wav',
|
||||
"at" = 'sound/vox/at.wav',
|
||||
"atomic" = 'sound/vox/atomic.wav',
|
||||
"attention" = 'sound/vox/attention.wav',
|
||||
"authorize" = 'sound/vox/authorize.wav',
|
||||
"authorized" = 'sound/vox/authorized.wav',
|
||||
"automatic" = 'sound/vox/automatic.wav',
|
||||
"away" = 'sound/vox/away.wav',
|
||||
"b" = 'sound/vox/b.wav',
|
||||
"back" = 'sound/vox/back.wav',
|
||||
"backman" = 'sound/vox/backman.wav',
|
||||
"bad" = 'sound/vox/bad.wav',
|
||||
"bag" = 'sound/vox/bag.wav',
|
||||
"bailey" = 'sound/vox/bailey.wav',
|
||||
"barracks" = 'sound/vox/barracks.wav',
|
||||
"base" = 'sound/vox/base.wav',
|
||||
"bay" = 'sound/vox/bay.wav',
|
||||
"be" = 'sound/vox/be.wav',
|
||||
"been" = 'sound/vox/been.wav',
|
||||
"before" = 'sound/vox/before.wav',
|
||||
"beyond" = 'sound/vox/beyond.wav',
|
||||
"biohazard" = 'sound/vox/biohazard.wav',
|
||||
"biological" = 'sound/vox/biological.wav',
|
||||
"birdwell" = 'sound/vox/birdwell.wav',
|
||||
"bizwarn" = 'sound/vox/bizwarn.wav',
|
||||
"black" = 'sound/vox/black.wav',
|
||||
"blast" = 'sound/vox/blast.wav',
|
||||
"blocked" = 'sound/vox/blocked.wav',
|
||||
"bloop" = 'sound/vox/bloop.wav',
|
||||
"blue" = 'sound/vox/blue.wav',
|
||||
"bottom" = 'sound/vox/bottom.wav',
|
||||
"bravo" = 'sound/vox/bravo.wav',
|
||||
"breach" = 'sound/vox/breach.wav',
|
||||
"breached" = 'sound/vox/breached.wav',
|
||||
"break" = 'sound/vox/break.wav',
|
||||
"bridge" = 'sound/vox/bridge.wav',
|
||||
"bust" = 'sound/vox/bust.wav',
|
||||
"but" = 'sound/vox/but.wav',
|
||||
"button" = 'sound/vox/button.wav',
|
||||
"buzwarn" = 'sound/vox/buzwarn.wav',
|
||||
"bypass" = 'sound/vox/bypass.wav',
|
||||
"c" = 'sound/vox/c.wav',
|
||||
"cable" = 'sound/vox/cable.wav',
|
||||
"call" = 'sound/vox/call.wav',
|
||||
"called" = 'sound/vox/called.wav',
|
||||
"canal" = 'sound/vox/canal.wav',
|
||||
"cap" = 'sound/vox/cap.wav',
|
||||
"captain" = 'sound/vox/captain.wav',
|
||||
"capture" = 'sound/vox/capture.wav',
|
||||
"ceiling" = 'sound/vox/ceiling.wav',
|
||||
"celsius" = 'sound/vox/celsius.wav',
|
||||
"center" = 'sound/vox/center.wav',
|
||||
"centi" = 'sound/vox/centi.wav',
|
||||
"central" = 'sound/vox/central.wav',
|
||||
"chamber" = 'sound/vox/chamber.wav',
|
||||
"charlie" = 'sound/vox/charlie.wav',
|
||||
"check" = 'sound/vox/check.wav',
|
||||
"checkpoint" = 'sound/vox/checkpoint.wav',
|
||||
"chemical" = 'sound/vox/chemical.wav',
|
||||
"cleanup" = 'sound/vox/cleanup.wav',
|
||||
"clear" = 'sound/vox/clear.wav',
|
||||
"clearance" = 'sound/vox/clearance.wav',
|
||||
"close" = 'sound/vox/close.wav',
|
||||
"code" = 'sound/vox/code.wav',
|
||||
"coded" = 'sound/vox/coded.wav',
|
||||
"collider" = 'sound/vox/collider.wav',
|
||||
"command" = 'sound/vox/command.wav',
|
||||
"communication" = 'sound/vox/communication.wav',
|
||||
"complex" = 'sound/vox/complex.wav',
|
||||
"computer" = 'sound/vox/computer.wav',
|
||||
"condition" = 'sound/vox/condition.wav',
|
||||
"containment" = 'sound/vox/containment.wav',
|
||||
"contamination" = 'sound/vox/contamination.wav',
|
||||
"control" = 'sound/vox/control.wav',
|
||||
"coolant" = 'sound/vox/coolant.wav',
|
||||
"coomer" = 'sound/vox/coomer.wav',
|
||||
"core" = 'sound/vox/core.wav',
|
||||
"correct" = 'sound/vox/correct.wav',
|
||||
"corridor" = 'sound/vox/corridor.wav',
|
||||
"crew" = 'sound/vox/crew.wav',
|
||||
"cross" = 'sound/vox/cross.wav',
|
||||
"cryogenic" = 'sound/vox/cryogenic.wav',
|
||||
"d" = 'sound/vox/d.wav',
|
||||
"dadeda" = 'sound/vox/dadeda.wav',
|
||||
"damage" = 'sound/vox/damage.wav',
|
||||
"damaged" = 'sound/vox/damaged.wav',
|
||||
"danger" = 'sound/vox/danger.wav',
|
||||
"day" = 'sound/vox/day.wav',
|
||||
"deactivated" = 'sound/vox/deactivated.wav',
|
||||
"decompression" = 'sound/vox/decompression.wav',
|
||||
"decontamination" = 'sound/vox/decontamination.wav',
|
||||
"deeoo" = 'sound/vox/deeoo.wav',
|
||||
"defense" = 'sound/vox/defense.wav',
|
||||
"degrees" = 'sound/vox/degrees.wav',
|
||||
"delta" = 'sound/vox/delta.wav',
|
||||
"denied" = 'sound/vox/denied.wav',
|
||||
"deploy" = 'sound/vox/deploy.wav',
|
||||
"deployed" = 'sound/vox/deployed.wav',
|
||||
"destroy" = 'sound/vox/destroy.wav',
|
||||
"destroyed" = 'sound/vox/destroyed.wav',
|
||||
"detain" = 'sound/vox/detain.wav',
|
||||
"detected" = 'sound/vox/detected.wav',
|
||||
"detonation" = 'sound/vox/detonation.wav',
|
||||
"device" = 'sound/vox/device.wav',
|
||||
"did" = 'sound/vox/did.wav',
|
||||
"die" = 'sound/vox/die.wav',
|
||||
"dimensional" = 'sound/vox/dimensional.wav',
|
||||
"dirt" = 'sound/vox/dirt.wav',
|
||||
"disengaged" = 'sound/vox/disengaged.wav',
|
||||
"dish" = 'sound/vox/dish.wav',
|
||||
"disposal" = 'sound/vox/disposal.wav',
|
||||
"distance" = 'sound/vox/distance.wav',
|
||||
"distortion" = 'sound/vox/distortion.wav',
|
||||
"do" = 'sound/vox/do.wav',
|
||||
"doctor" = 'sound/vox/doctor.wav',
|
||||
"doop" = 'sound/vox/doop.wav',
|
||||
"door" = 'sound/vox/door.wav',
|
||||
"down" = 'sound/vox/down.wav',
|
||||
"dual" = 'sound/vox/dual.wav',
|
||||
"duct" = 'sound/vox/duct.wav',
|
||||
"e" = 'sound/vox/e.wav',
|
||||
"east" = 'sound/vox/east.wav',
|
||||
"echo" = 'sound/vox/echo.wav',
|
||||
"ed" = 'sound/vox/ed.wav',
|
||||
"effect" = 'sound/vox/effect.wav',
|
||||
"egress" = 'sound/vox/egress.wav',
|
||||
"eight" = 'sound/vox/eight.wav',
|
||||
"eighteen" = 'sound/vox/eighteen.wav',
|
||||
"eighty" = 'sound/vox/eighty.wav',
|
||||
"electric" = 'sound/vox/electric.wav',
|
||||
"electromagnetic" = 'sound/vox/electromagnetic.wav',
|
||||
"elevator" = 'sound/vox/elevator.wav',
|
||||
"eleven" = 'sound/vox/eleven.wav',
|
||||
"eliminate" = 'sound/vox/eliminate.wav',
|
||||
"emergency" = 'sound/vox/emergency.wav',
|
||||
"energy" = 'sound/vox/energy.wav',
|
||||
"engage" = 'sound/vox/engage.wav',
|
||||
"engaged" = 'sound/vox/engaged.wav',
|
||||
"engine" = 'sound/vox/engine.wav',
|
||||
"enter" = 'sound/vox/enter.wav',
|
||||
"entry" = 'sound/vox/entry.wav',
|
||||
"environment" = 'sound/vox/environment.wav',
|
||||
"error" = 'sound/vox/error.wav',
|
||||
"escape" = 'sound/vox/escape.wav',
|
||||
"evacuate" = 'sound/vox/evacuate.wav',
|
||||
"exchange" = 'sound/vox/exchange.wav',
|
||||
"exit" = 'sound/vox/exit.wav',
|
||||
"expect" = 'sound/vox/expect.wav',
|
||||
"experiment" = 'sound/vox/experiment.wav',
|
||||
"experimental" = 'sound/vox/experimental.wav',
|
||||
"explode" = 'sound/vox/explode.wav',
|
||||
"explosion" = 'sound/vox/explosion.wav',
|
||||
"exposure" = 'sound/vox/exposure.wav',
|
||||
"exterminate" = 'sound/vox/exterminate.wav',
|
||||
"extinguish" = 'sound/vox/extinguish.wav',
|
||||
"extinguisher" = 'sound/vox/extinguisher.wav',
|
||||
"extreme" = 'sound/vox/extreme.wav',
|
||||
"f" = 'sound/vox/f.wav',
|
||||
"facility" = 'sound/vox/facility.wav',
|
||||
"fahrenheit" = 'sound/vox/fahrenheit.wav',
|
||||
"failed" = 'sound/vox/failed.wav',
|
||||
"failure" = 'sound/vox/failure.wav',
|
||||
"farthest" = 'sound/vox/farthest.wav',
|
||||
"fast" = 'sound/vox/fast.wav',
|
||||
"feet" = 'sound/vox/feet.wav',
|
||||
"field" = 'sound/vox/field.wav',
|
||||
"fifteen" = 'sound/vox/fifteen.wav',
|
||||
"fifth" = 'sound/vox/fifth.wav',
|
||||
"fifty" = 'sound/vox/fifty.wav',
|
||||
"final" = 'sound/vox/final.wav',
|
||||
"fine" = 'sound/vox/fine.wav',
|
||||
"fire" = 'sound/vox/fire.wav',
|
||||
"first" = 'sound/vox/first.wav',
|
||||
"five" = 'sound/vox/five.wav',
|
||||
"flooding" = 'sound/vox/flooding.wav',
|
||||
"floor" = 'sound/vox/floor.wav',
|
||||
"fool" = 'sound/vox/fool.wav',
|
||||
"for" = 'sound/vox/for.wav',
|
||||
"forbidden" = 'sound/vox/forbidden.wav',
|
||||
"force" = 'sound/vox/force.wav',
|
||||
"forms" = 'sound/vox/forms.wav',
|
||||
"found" = 'sound/vox/found.wav',
|
||||
"four" = 'sound/vox/four.wav',
|
||||
"fourteen" = 'sound/vox/fourteen.wav',
|
||||
"fourth" = 'sound/vox/fourth.wav',
|
||||
"fourty" = 'sound/vox/fourty.wav',
|
||||
"foxtrot" = 'sound/vox/foxtrot.wav',
|
||||
"freeman" = 'sound/vox/freeman.wav',
|
||||
"freezer" = 'sound/vox/freezer.wav',
|
||||
"from" = 'sound/vox/from.wav',
|
||||
"front" = 'sound/vox/front.wav',
|
||||
"fuel" = 'sound/vox/fuel.wav',
|
||||
"g" = 'sound/vox/g.wav',
|
||||
"get" = 'sound/vox/get.wav',
|
||||
"go" = 'sound/vox/go.wav',
|
||||
"going" = 'sound/vox/going.wav',
|
||||
"good" = 'sound/vox/good.wav',
|
||||
"goodbye" = 'sound/vox/goodbye.wav',
|
||||
"gordon" = 'sound/vox/gordon.wav',
|
||||
"got" = 'sound/vox/got.wav',
|
||||
"government" = 'sound/vox/government.wav',
|
||||
"granted" = 'sound/vox/granted.wav',
|
||||
"great" = 'sound/vox/great.wav',
|
||||
"green" = 'sound/vox/green.wav',
|
||||
"grenade" = 'sound/vox/grenade.wav',
|
||||
"guard" = 'sound/vox/guard.wav',
|
||||
"gulf" = 'sound/vox/gulf.wav',
|
||||
"gun" = 'sound/vox/gun.wav',
|
||||
"guthrie" = 'sound/vox/guthrie.wav',
|
||||
"handling" = 'sound/vox/handling.wav',
|
||||
"hangar" = 'sound/vox/hangar.wav',
|
||||
"has" = 'sound/vox/has.wav',
|
||||
"have" = 'sound/vox/have.wav',
|
||||
"hazard" = 'sound/vox/hazard.wav',
|
||||
"head" = 'sound/vox/head.wav',
|
||||
"health" = 'sound/vox/health.wav',
|
||||
"heat" = 'sound/vox/heat.wav',
|
||||
"helicopter" = 'sound/vox/helicopter.wav',
|
||||
"helium" = 'sound/vox/helium.wav',
|
||||
"hello" = 'sound/vox/hello.wav',
|
||||
"help" = 'sound/vox/help.wav',
|
||||
"here" = 'sound/vox/here.wav',
|
||||
"hide" = 'sound/vox/hide.wav',
|
||||
"high" = 'sound/vox/high.wav',
|
||||
"highest" = 'sound/vox/highest.wav',
|
||||
"hit" = 'sound/vox/hit.wav',
|
||||
"hole" = 'sound/vox/hole.wav',
|
||||
"hostile" = 'sound/vox/hostile.wav',
|
||||
"hot" = 'sound/vox/hot.wav',
|
||||
"hotel" = 'sound/vox/hotel.wav',
|
||||
"hour" = 'sound/vox/hour.wav',
|
||||
"hours" = 'sound/vox/hours.wav',
|
||||
"hundred" = 'sound/vox/hundred.wav',
|
||||
"hydro" = 'sound/vox/hydro.wav',
|
||||
"i" = 'sound/vox/i.wav',
|
||||
"idiot" = 'sound/vox/idiot.wav',
|
||||
"illegal" = 'sound/vox/illegal.wav',
|
||||
"immediate" = 'sound/vox/immediate.wav',
|
||||
"immediately" = 'sound/vox/immediately.wav',
|
||||
"in" = 'sound/vox/in.wav',
|
||||
"inches" = 'sound/vox/inches.wav',
|
||||
"india" = 'sound/vox/india.wav',
|
||||
"ing" = 'sound/vox/ing.wav',
|
||||
"inoperative" = 'sound/vox/inoperative.wav',
|
||||
"inside" = 'sound/vox/inside.wav',
|
||||
"inspection" = 'sound/vox/inspection.wav',
|
||||
"inspector" = 'sound/vox/inspector.wav',
|
||||
"interchange" = 'sound/vox/interchange.wav',
|
||||
"intruder" = 'sound/vox/intruder.wav',
|
||||
"invallid" = 'sound/vox/invallid.wav',
|
||||
"invasion" = 'sound/vox/invasion.wav',
|
||||
"is" = 'sound/vox/is.wav',
|
||||
"it" = 'sound/vox/it.wav',
|
||||
"johnson" = 'sound/vox/johnson.wav',
|
||||
"juliet" = 'sound/vox/juliet.wav',
|
||||
"key" = 'sound/vox/key.wav',
|
||||
"kill" = 'sound/vox/kill.wav',
|
||||
"kilo" = 'sound/vox/kilo.wav',
|
||||
"kit" = 'sound/vox/kit.wav',
|
||||
"lab" = 'sound/vox/lab.wav',
|
||||
"lambda" = 'sound/vox/lambda.wav',
|
||||
"laser" = 'sound/vox/laser.wav',
|
||||
"last" = 'sound/vox/last.wav',
|
||||
"launch" = 'sound/vox/launch.wav',
|
||||
"leak" = 'sound/vox/leak.wav',
|
||||
"leave" = 'sound/vox/leave.wav',
|
||||
"left" = 'sound/vox/left.wav',
|
||||
"legal" = 'sound/vox/legal.wav',
|
||||
"level" = 'sound/vox/level.wav',
|
||||
"lever" = 'sound/vox/lever.wav',
|
||||
"lie" = 'sound/vox/lie.wav',
|
||||
"lieutenant" = 'sound/vox/lieutenant.wav',
|
||||
"life" = 'sound/vox/life.wav',
|
||||
"light" = 'sound/vox/light.wav',
|
||||
"lima" = 'sound/vox/lima.wav',
|
||||
"liquid" = 'sound/vox/liquid.wav',
|
||||
"loading" = 'sound/vox/loading.wav',
|
||||
"locate" = 'sound/vox/locate.wav',
|
||||
"located" = 'sound/vox/located.wav',
|
||||
"location" = 'sound/vox/location.wav',
|
||||
"lock" = 'sound/vox/lock.wav',
|
||||
"locked" = 'sound/vox/locked.wav',
|
||||
"locker" = 'sound/vox/locker.wav',
|
||||
"lockout" = 'sound/vox/lockout.wav',
|
||||
"lower" = 'sound/vox/lower.wav',
|
||||
"lowest" = 'sound/vox/lowest.wav',
|
||||
"magnetic" = 'sound/vox/magnetic.wav',
|
||||
"main" = 'sound/vox/main.wav',
|
||||
"maintenance" = 'sound/vox/maintenance.wav',
|
||||
"malfunction" = 'sound/vox/malfunction.wav',
|
||||
"man" = 'sound/vox/man.wav',
|
||||
"mass" = 'sound/vox/mass.wav',
|
||||
"materials" = 'sound/vox/materials.wav',
|
||||
"maximum" = 'sound/vox/maximum.wav',
|
||||
"may" = 'sound/vox/may.wav',
|
||||
"medical" = 'sound/vox/medical.wav',
|
||||
"men" = 'sound/vox/men.wav',
|
||||
"mercy" = 'sound/vox/mercy.wav',
|
||||
"mesa" = 'sound/vox/mesa.wav',
|
||||
"message" = 'sound/vox/message.wav',
|
||||
"meter" = 'sound/vox/meter.wav',
|
||||
"micro" = 'sound/vox/micro.wav',
|
||||
"middle" = 'sound/vox/middle.wav',
|
||||
"mike" = 'sound/vox/mike.wav',
|
||||
"miles" = 'sound/vox/miles.wav',
|
||||
"military" = 'sound/vox/military.wav',
|
||||
"milli" = 'sound/vox/milli.wav',
|
||||
"million" = 'sound/vox/million.wav',
|
||||
"minefield" = 'sound/vox/minefield.wav',
|
||||
"minimum" = 'sound/vox/minimum.wav',
|
||||
"minutes" = 'sound/vox/minutes.wav',
|
||||
"mister" = 'sound/vox/mister.wav',
|
||||
"mode" = 'sound/vox/mode.wav',
|
||||
"motor" = 'sound/vox/motor.wav',
|
||||
"motorpool" = 'sound/vox/motorpool.wav',
|
||||
"move" = 'sound/vox/move.wav',
|
||||
"must" = 'sound/vox/must.wav',
|
||||
"nearest" = 'sound/vox/nearest.wav',
|
||||
"nice" = 'sound/vox/nice.wav',
|
||||
"nine" = 'sound/vox/nine.wav',
|
||||
"nineteen" = 'sound/vox/nineteen.wav',
|
||||
"ninety" = 'sound/vox/ninety.wav',
|
||||
"no" = 'sound/vox/no.wav',
|
||||
"nominal" = 'sound/vox/nominal.wav',
|
||||
"north" = 'sound/vox/north.wav',
|
||||
"not" = 'sound/vox/not.wav',
|
||||
"november" = 'sound/vox/november.wav',
|
||||
"now" = 'sound/vox/now.wav',
|
||||
"number" = 'sound/vox/number.wav',
|
||||
"objective" = 'sound/vox/objective.wav',
|
||||
"observation" = 'sound/vox/observation.wav',
|
||||
"of" = 'sound/vox/of.wav',
|
||||
"officer" = 'sound/vox/officer.wav',
|
||||
"ok" = 'sound/vox/ok.wav',
|
||||
"on" = 'sound/vox/on.wav',
|
||||
"one" = 'sound/vox/one.wav',
|
||||
"open" = 'sound/vox/open.wav',
|
||||
"operating" = 'sound/vox/operating.wav',
|
||||
"operations" = 'sound/vox/operations.wav',
|
||||
"operative" = 'sound/vox/operative.wav',
|
||||
"option" = 'sound/vox/option.wav',
|
||||
"order" = 'sound/vox/order.wav',
|
||||
"organic" = 'sound/vox/organic.wav',
|
||||
"oscar" = 'sound/vox/oscar.wav',
|
||||
"out" = 'sound/vox/out.wav',
|
||||
"outside" = 'sound/vox/outside.wav',
|
||||
"over" = 'sound/vox/over.wav',
|
||||
"overload" = 'sound/vox/overload.wav',
|
||||
"override" = 'sound/vox/override.wav',
|
||||
"pacify" = 'sound/vox/pacify.wav',
|
||||
"pain" = 'sound/vox/pain.wav',
|
||||
"pal" = 'sound/vox/pal.wav',
|
||||
"panel" = 'sound/vox/panel.wav',
|
||||
"percent" = 'sound/vox/percent.wav',
|
||||
"perimeter" = 'sound/vox/perimeter.wav',
|
||||
"permitted" = 'sound/vox/permitted.wav',
|
||||
"personnel" = 'sound/vox/personnel.wav',
|
||||
"pipe" = 'sound/vox/pipe.wav',
|
||||
"plant" = 'sound/vox/plant.wav',
|
||||
"platform" = 'sound/vox/platform.wav',
|
||||
"please" = 'sound/vox/please.wav',
|
||||
"point" = 'sound/vox/point.wav',
|
||||
"portal" = 'sound/vox/portal.wav',
|
||||
"power" = 'sound/vox/power.wav',
|
||||
"presence" = 'sound/vox/presence.wav',
|
||||
"press" = 'sound/vox/press.wav',
|
||||
"primary" = 'sound/vox/primary.wav',
|
||||
"proceed" = 'sound/vox/proceed.wav',
|
||||
"processing" = 'sound/vox/processing.wav',
|
||||
"progress" = 'sound/vox/progress.wav',
|
||||
"proper" = 'sound/vox/proper.wav',
|
||||
"propulsion" = 'sound/vox/propulsion.wav',
|
||||
"prosecute" = 'sound/vox/prosecute.wav',
|
||||
"protective" = 'sound/vox/protective.wav',
|
||||
"push" = 'sound/vox/push.wav',
|
||||
"quantum" = 'sound/vox/quantum.wav',
|
||||
"quebec" = 'sound/vox/quebec.wav',
|
||||
"question" = 'sound/vox/question.wav',
|
||||
"questioning" = 'sound/vox/questioning.wav',
|
||||
"quick" = 'sound/vox/quick.wav',
|
||||
"quit" = 'sound/vox/quit.wav',
|
||||
"radiation" = 'sound/vox/radiation.wav',
|
||||
"radioactive" = 'sound/vox/radioactive.wav',
|
||||
"rads" = 'sound/vox/rads.wav',
|
||||
"rapid" = 'sound/vox/rapid.wav',
|
||||
"reach" = 'sound/vox/reach.wav',
|
||||
"reached" = 'sound/vox/reached.wav',
|
||||
"reactor" = 'sound/vox/reactor.wav',
|
||||
"red" = 'sound/vox/red.wav',
|
||||
"relay" = 'sound/vox/relay.wav',
|
||||
"released" = 'sound/vox/released.wav',
|
||||
"remaining" = 'sound/vox/remaining.wav',
|
||||
"renegade" = 'sound/vox/renegade.wav',
|
||||
"repair" = 'sound/vox/repair.wav',
|
||||
"report" = 'sound/vox/report.wav',
|
||||
"reports" = 'sound/vox/reports.wav',
|
||||
"required" = 'sound/vox/required.wav',
|
||||
"research" = 'sound/vox/research.wav',
|
||||
"resevoir" = 'sound/vox/resevoir.wav',
|
||||
"resistance" = 'sound/vox/resistance.wav',
|
||||
"right" = 'sound/vox/right.wav',
|
||||
"rocket" = 'sound/vox/rocket.wav',
|
||||
"roger" = 'sound/vox/roger.wav',
|
||||
"romeo" = 'sound/vox/romeo.wav',
|
||||
"room" = 'sound/vox/room.wav',
|
||||
"round" = 'sound/vox/round.wav',
|
||||
"run" = 'sound/vox/run.wav',
|
||||
"safe" = 'sound/vox/safe.wav',
|
||||
"safety" = 'sound/vox/safety.wav',
|
||||
"sargeant" = 'sound/vox/sargeant.wav',
|
||||
"satellite" = 'sound/vox/satellite.wav',
|
||||
"save" = 'sound/vox/save.wav',
|
||||
"science" = 'sound/vox/science.wav',
|
||||
"scream" = 'sound/vox/scream.wav',
|
||||
"screen" = 'sound/vox/screen.wav',
|
||||
"search" = 'sound/vox/search.wav',
|
||||
"second" = 'sound/vox/second.wav',
|
||||
"secondary" = 'sound/vox/secondary.wav',
|
||||
"seconds" = 'sound/vox/seconds.wav',
|
||||
"sector" = 'sound/vox/sector.wav',
|
||||
"secure" = 'sound/vox/secure.wav',
|
||||
"secured" = 'sound/vox/secured.wav',
|
||||
"security" = 'sound/vox/security.wav',
|
||||
"select" = 'sound/vox/select.wav',
|
||||
"selected" = 'sound/vox/selected.wav',
|
||||
"service" = 'sound/vox/service.wav',
|
||||
"seven" = 'sound/vox/seven.wav',
|
||||
"seventeen" = 'sound/vox/seventeen.wav',
|
||||
"seventy" = 'sound/vox/seventy.wav',
|
||||
"severe" = 'sound/vox/severe.wav',
|
||||
"sewage" = 'sound/vox/sewage.wav',
|
||||
"sewer" = 'sound/vox/sewer.wav',
|
||||
"shield" = 'sound/vox/shield.wav',
|
||||
"shipment" = 'sound/vox/shipment.wav',
|
||||
"shock" = 'sound/vox/shock.wav',
|
||||
"shoot" = 'sound/vox/shoot.wav',
|
||||
"shower" = 'sound/vox/shower.wav',
|
||||
"shut" = 'sound/vox/shut.wav',
|
||||
"side" = 'sound/vox/side.wav',
|
||||
"sierra" = 'sound/vox/sierra.wav',
|
||||
"sight" = 'sound/vox/sight.wav',
|
||||
"silo" = 'sound/vox/silo.wav',
|
||||
"six" = 'sound/vox/six.wav',
|
||||
"sixteen" = 'sound/vox/sixteen.wav',
|
||||
"sixty" = 'sound/vox/sixty.wav',
|
||||
"slime" = 'sound/vox/slime.wav',
|
||||
"slow" = 'sound/vox/slow.wav',
|
||||
"soldier" = 'sound/vox/soldier.wav',
|
||||
"some" = 'sound/vox/some.wav',
|
||||
"someone" = 'sound/vox/someone.wav',
|
||||
"something" = 'sound/vox/something.wav',
|
||||
"son" = 'sound/vox/son.wav',
|
||||
"sorry" = 'sound/vox/sorry.wav',
|
||||
"south" = 'sound/vox/south.wav',
|
||||
"squad" = 'sound/vox/squad.wav',
|
||||
"square" = 'sound/vox/square.wav',
|
||||
"stairway" = 'sound/vox/stairway.wav',
|
||||
"status" = 'sound/vox/status.wav',
|
||||
"sterile" = 'sound/vox/sterile.wav',
|
||||
"sterilization" = 'sound/vox/sterilization.wav',
|
||||
"storage" = 'sound/vox/storage.wav',
|
||||
"sub" = 'sound/vox/sub.wav',
|
||||
"subsurface" = 'sound/vox/subsurface.wav',
|
||||
"sudden" = 'sound/vox/sudden.wav',
|
||||
"suit" = 'sound/vox/suit.wav',
|
||||
"superconducting" = 'sound/vox/superconducting.wav',
|
||||
"supercooled" = 'sound/vox/supercooled.wav',
|
||||
"supply" = 'sound/vox/supply.wav',
|
||||
"surface" = 'sound/vox/surface.wav',
|
||||
"surrender" = 'sound/vox/surrender.wav',
|
||||
"surround" = 'sound/vox/surround.wav',
|
||||
"surrounded" = 'sound/vox/surrounded.wav',
|
||||
"switch" = 'sound/vox/switch.wav',
|
||||
"system" = 'sound/vox/system.wav',
|
||||
"systems" = 'sound/vox/systems.wav',
|
||||
"tactical" = 'sound/vox/tactical.wav',
|
||||
"take" = 'sound/vox/take.wav',
|
||||
"talk" = 'sound/vox/talk.wav',
|
||||
"tango" = 'sound/vox/tango.wav',
|
||||
"tank" = 'sound/vox/tank.wav',
|
||||
"target" = 'sound/vox/target.wav',
|
||||
"team" = 'sound/vox/team.wav',
|
||||
"temperature" = 'sound/vox/temperature.wav',
|
||||
"temporal" = 'sound/vox/temporal.wav',
|
||||
"ten" = 'sound/vox/ten.wav',
|
||||
"terminal" = 'sound/vox/terminal.wav',
|
||||
"terminated" = 'sound/vox/terminated.wav',
|
||||
"termination" = 'sound/vox/termination.wav',
|
||||
"test" = 'sound/vox/test.wav',
|
||||
"that" = 'sound/vox/that.wav',
|
||||
"the" = 'sound/vox/the.wav',
|
||||
"then" = 'sound/vox/then.wav',
|
||||
"there" = 'sound/vox/there.wav',
|
||||
"third" = 'sound/vox/third.wav',
|
||||
"thirteen" = 'sound/vox/thirteen.wav',
|
||||
"thirty" = 'sound/vox/thirty.wav',
|
||||
"this" = 'sound/vox/this.wav',
|
||||
"those" = 'sound/vox/those.wav',
|
||||
"thousand" = 'sound/vox/thousand.wav',
|
||||
"threat" = 'sound/vox/threat.wav',
|
||||
"three" = 'sound/vox/three.wav',
|
||||
"through" = 'sound/vox/through.wav',
|
||||
"time" = 'sound/vox/time.wav',
|
||||
"to" = 'sound/vox/to.wav',
|
||||
"top" = 'sound/vox/top.wav',
|
||||
"topside" = 'sound/vox/topside.wav',
|
||||
"touch" = 'sound/vox/touch.wav',
|
||||
"towards" = 'sound/vox/towards.wav',
|
||||
"track" = 'sound/vox/track.wav',
|
||||
"train" = 'sound/vox/train.wav',
|
||||
"transportation" = 'sound/vox/transportation.wav',
|
||||
"truck" = 'sound/vox/truck.wav',
|
||||
"tunnel" = 'sound/vox/tunnel.wav',
|
||||
"turn" = 'sound/vox/turn.wav',
|
||||
"turret" = 'sound/vox/turret.wav',
|
||||
"twelve" = 'sound/vox/twelve.wav',
|
||||
"twenty" = 'sound/vox/twenty.wav',
|
||||
"two" = 'sound/vox/two.wav',
|
||||
"unauthorized" = 'sound/vox/unauthorized.wav',
|
||||
"under" = 'sound/vox/under.wav',
|
||||
"uniform" = 'sound/vox/uniform.wav',
|
||||
"unlocked" = 'sound/vox/unlocked.wav',
|
||||
"until" = 'sound/vox/until.wav',
|
||||
"up" = 'sound/vox/up.wav',
|
||||
"upper" = 'sound/vox/upper.wav',
|
||||
"uranium" = 'sound/vox/uranium.wav',
|
||||
"us" = 'sound/vox/us.wav',
|
||||
"usa" = 'sound/vox/usa.wav',
|
||||
"use" = 'sound/vox/use.wav',
|
||||
"used" = 'sound/vox/used.wav',
|
||||
"user" = 'sound/vox/user.wav',
|
||||
"vacate" = 'sound/vox/vacate.wav',
|
||||
"valid" = 'sound/vox/valid.wav',
|
||||
"vapor" = 'sound/vox/vapor.wav',
|
||||
"vent" = 'sound/vox/vent.wav',
|
||||
"ventillation" = 'sound/vox/ventillation.wav',
|
||||
"victor" = 'sound/vox/victor.wav',
|
||||
"violated" = 'sound/vox/violated.wav',
|
||||
"violation" = 'sound/vox/violation.wav',
|
||||
"voltage" = 'sound/vox/voltage.wav',
|
||||
"vox_login" = 'sound/vox/vox_login.wav',
|
||||
"walk" = 'sound/vox/walk.wav',
|
||||
"wall" = 'sound/vox/wall.wav',
|
||||
"want" = 'sound/vox/want.wav',
|
||||
"wanted" = 'sound/vox/wanted.wav',
|
||||
"warm" = 'sound/vox/warm.wav',
|
||||
"warn" = 'sound/vox/warn.wav',
|
||||
"warning" = 'sound/vox/warning.wav',
|
||||
"waste" = 'sound/vox/waste.wav',
|
||||
"water" = 'sound/vox/water.wav',
|
||||
"we" = 'sound/vox/we.wav',
|
||||
"weapon" = 'sound/vox/weapon.wav',
|
||||
"west" = 'sound/vox/west.wav',
|
||||
"whiskey" = 'sound/vox/whiskey.wav',
|
||||
"white" = 'sound/vox/white.wav',
|
||||
"wilco" = 'sound/vox/wilco.wav',
|
||||
"will" = 'sound/vox/will.wav',
|
||||
"with" = 'sound/vox/with.wav',
|
||||
"without" = 'sound/vox/without.wav',
|
||||
"woop" = 'sound/vox/woop.wav',
|
||||
"xeno" = 'sound/vox/xeno.wav',
|
||||
"yankee" = 'sound/vox/yankee.wav',
|
||||
"yards" = 'sound/vox/yards.wav',
|
||||
"year" = 'sound/vox/year.wav',
|
||||
"yellow" = 'sound/vox/yellow.wav',
|
||||
"yes" = 'sound/vox/yes.wav',
|
||||
"you" = 'sound/vox/you.wav',
|
||||
"your" = 'sound/vox/your.wav',
|
||||
"yourself" = 'sound/vox/yourself.wav',
|
||||
"zero" = 'sound/vox/zero.wav',
|
||||
"zone" = 'sound/vox/zone.wav',
|
||||
"zulu" = 'sound/vox/zulu.wav')
|
||||
@@ -75,23 +75,20 @@
|
||||
..()
|
||||
usr << browse_rsc('html/paigrid.png') // Go ahead and cache the interface resources as early as possible
|
||||
|
||||
|
||||
|
||||
// this function shows the information about being silenced as a pAI in the Status panel
|
||||
/mob/living/silicon/pai/proc/show_silenced()
|
||||
if(src.silence_time)
|
||||
var/timeleft = round((silence_time - world.timeofday)/10 ,1)
|
||||
stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
|
||||
|
||||
/mob/living/silicon/pai/Stat()
|
||||
..()
|
||||
statpanel("Status")
|
||||
if (src.client.statpanel == "Status")
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
if (timeleft)
|
||||
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
if(src.silence_time)
|
||||
var/timeleft = round((silence_time - world.timeofday)/10 ,1)
|
||||
stat(null, "Communications system reboot in -[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
if(!src.stat)
|
||||
stat(null, text("System integrity: [(src.health+100)/2]%"))
|
||||
else
|
||||
stat(null, text("Systems nonfunctional"))
|
||||
|
||||
show_silenced()
|
||||
|
||||
if (proc_holder_list.len)//Generic list for proc_holder objects.
|
||||
for(var/obj/effect/proc_holder/P in proc_holder_list)
|
||||
statpanel("[P.panel]","",P)
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
var/obj/item/device/mmi/mmi = null
|
||||
|
||||
var/obj/item/device/pda/ai/rbPDA = null
|
||||
|
||||
var/opened = 0
|
||||
var/emagged = 0
|
||||
var/wiresexposed = 0
|
||||
@@ -101,6 +103,12 @@
|
||||
|
||||
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
|
||||
|
||||
// setup the PDA and its name
|
||||
/mob/living/silicon/robot/proc/setup_PDA()
|
||||
if (!rbPDA)
|
||||
rbPDA = new/obj/item/device/pda/ai(src)
|
||||
rbPDA.set_name_and_job(custom_name,braintype)
|
||||
|
||||
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
|
||||
//Improved /N
|
||||
/mob/living/silicon/robot/Del()
|
||||
@@ -123,9 +131,12 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/standard(src)
|
||||
hands.icon_state = "standard"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Standard")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Standard")
|
||||
switch(icontype)
|
||||
if("Basic") icon_state = "robot_old"
|
||||
if("Lucy") icon_state = "rowtree-lucy"
|
||||
else icon_state = "robot"
|
||||
modtype = "Stand"
|
||||
feedback_inc("cyborg_standard",1)
|
||||
@@ -134,12 +145,15 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/butler(src)
|
||||
hands.icon_state = "service"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Waitress", "Bro", "Butler", "Kent", "Rich")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Waitress", "Bro", "Butler", "Kent", "Rich")
|
||||
switch(icontype)
|
||||
if("Waitress") icon_state = "Service"
|
||||
if("Kent") icon_state = "toiletbot"
|
||||
if("Bro") icon_state = "Brobot"
|
||||
if("Rich") icon_state = "maximillion"
|
||||
if("Lucy") icon_state = "rowtree-lucy"
|
||||
else icon_state = "Service2"
|
||||
modtype = "Butler"
|
||||
feedback_inc("cyborg_service",1)
|
||||
@@ -148,10 +162,13 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/miner(src)
|
||||
hands.icon_state = "miner"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Advanced Droid", "Treadhead")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Advanced Droid", "Treadhead")
|
||||
switch(icontype)
|
||||
if("Basic") icon_state = "Miner_old"
|
||||
if("Advanced Droid") icon_state = "droid-miner"
|
||||
if("Lucy") icon_state = "rowtree-lucy"
|
||||
else icon_state = "Miner"
|
||||
modtype = "Miner"
|
||||
feedback_inc("cyborg_miner",1)
|
||||
@@ -161,11 +178,14 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/medical(src)
|
||||
hands.icon_state = "medical"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Advanced Droid", "Needles", "Hoverbot")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Advanced Droid", "Needles", "Hoverbot")
|
||||
switch(icontype)
|
||||
if("Basic") icon_state = "Medbot"
|
||||
if("Advanced Droid") icon_state = "droid-medical"
|
||||
if("Needles") icon_state = "medicalrobot"
|
||||
if("Lucy") icon_state = "rowtree-medical"
|
||||
else icon_state = "surgeon"
|
||||
modtype = "Med"
|
||||
status_flags &= ~CANPUSH
|
||||
@@ -176,11 +196,14 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/security(src)
|
||||
hands.icon_state = "security"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Red Knight", "Black Knight", "Bloodhound")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Red Knight", "Black Knight", "Bloodhound")
|
||||
switch(icontype)
|
||||
if("Basic") icon_state = "secborg"
|
||||
if("Red Knight") icon_state = "Security"
|
||||
if("Black Knight") icon_state = "securityrobot"
|
||||
if("Lucy") icon_state = "rowtree-security"
|
||||
else icon_state = "bloodhound"
|
||||
modtype = "Sec"
|
||||
//speed = -1 Secborgs have nerfed tasers now, so the speed boost is not necessary
|
||||
@@ -192,10 +215,13 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/engineering(src)
|
||||
hands.icon_state = "engineer"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Antique", "Landmate")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Antique", "Landmate")
|
||||
switch(icontype)
|
||||
if("Basic") icon_state = "Engineering"
|
||||
if("Antique") icon_state = "Engineerrobot"
|
||||
if("Antique") icon_state = "engineerrobot"
|
||||
if("Lucy") icon_state = "rowtree-engineering"
|
||||
else icon_state = "landmate"
|
||||
modtype = "Eng"
|
||||
feedback_inc("cyborg_engineering",1)
|
||||
@@ -205,10 +231,13 @@
|
||||
updatename(mod)
|
||||
module = new /obj/item/weapon/robot_module/janitor(src)
|
||||
hands.icon_state = "janitor"
|
||||
var/icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Mopbot", "Zamboni")
|
||||
var/icontype
|
||||
if (src.name == "Lucy" && src.ckey == "rowtree") icontype = ("Lucy")
|
||||
else icontype = input("Select an icon!", "Robot", null, null) in list("Basic", "Mopbot", "Zamboni")
|
||||
switch(icontype)
|
||||
if("Basic") icon_state = "JanBot2"
|
||||
if("Mopbot") icon_state = "janitorrobot"
|
||||
if("Lucy") icon_state = "rowtree-lucy"
|
||||
else icon_state = "mopgearrex"
|
||||
modtype = "Jan"
|
||||
feedback_inc("cyborg_janitor",1)
|
||||
@@ -217,6 +246,8 @@
|
||||
radio.config(channels)
|
||||
updateicon()
|
||||
|
||||
/
|
||||
|
||||
/mob/living/silicon/robot/proc/updatename(var/prefix as text)
|
||||
|
||||
if(istype(mmi, /obj/item/device/mmi/posibrain))
|
||||
@@ -231,6 +262,9 @@
|
||||
changed_name = "[(prefix ? "[prefix] " : "")][braintype]-[num2text(ident)]"
|
||||
real_name = changed_name
|
||||
name = real_name
|
||||
|
||||
// if we've changed our name, we also need to update the display name for our PDA
|
||||
setup_PDA()
|
||||
|
||||
/mob/living/silicon/robot/verb/Namepick()
|
||||
if(custom_name)
|
||||
@@ -250,6 +284,13 @@
|
||||
set name = "Show Alerts"
|
||||
robot_alerts()
|
||||
|
||||
// this verb lets cyborgs see the stations manifest
|
||||
/mob/living/silicon/robot/verb/cmd_station_manifest()
|
||||
set category = "Robot Commands"
|
||||
set name = "Show Station Manifest"
|
||||
show_station_manifest()
|
||||
|
||||
|
||||
/mob/living/silicon/robot/proc/robot_alerts()
|
||||
var/dat = "<HEAD><TITLE>Current Station Alerts</TITLE><META HTTP-EQUIV='Refresh' CONTENT='10'></HEAD><BODY>\n"
|
||||
dat += "<A HREF='?src=\ref[src];mach_close=robotalerts'>Close</A><BR><BR>"
|
||||
@@ -280,35 +321,52 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
// this function shows information about the malf_ai gameplay type in the status screen
|
||||
/mob/living/silicon/robot/show_malf_ai()
|
||||
..()
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if(connected_ai)
|
||||
if(connected_ai.mind == malfai)
|
||||
if(malf.apcs >= 3)
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds")
|
||||
else if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
return 0
|
||||
|
||||
|
||||
// this function displays jetpack pressure in the stat panel
|
||||
/mob/living/silicon/robot/proc/show_jetpack_pressure()
|
||||
// if you have a jetpack, show the internal tank pressure
|
||||
var/obj/item/weapon/tank/jetpack/current_jetpack = installed_jetpack()
|
||||
if (current_jetpack)
|
||||
stat("Internal Atmosphere Info", current_jetpack.name)
|
||||
stat("Tank Pressure", current_jetpack.air_contents.return_pressure())
|
||||
|
||||
|
||||
// this function returns the robots jetpack, if one is installed
|
||||
/mob/living/silicon/robot/proc/installed_jetpack()
|
||||
if(module)
|
||||
return (locate(/obj/item/weapon/tank/jetpack) in module.modules)
|
||||
return 0
|
||||
|
||||
|
||||
// this function displays the cyborgs current cell charge in the stat panel
|
||||
/mob/living/silicon/robot/proc/show_cell_power()
|
||||
if(cell)
|
||||
stat(null, text("Charge Left: [cell.charge]/[cell.maxcharge]"))
|
||||
else
|
||||
stat(null, text("No Cell Inserted!"))
|
||||
|
||||
|
||||
// update the status screen display
|
||||
/mob/living/silicon/robot/Stat()
|
||||
..()
|
||||
statpanel("Status")
|
||||
if (client.statpanel == "Status")
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
if (timeleft)
|
||||
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if(connected_ai)
|
||||
if(connected_ai.mind == malfai)
|
||||
if(malf.apcs >= 3)
|
||||
stat(null, "Time until station control secured: [max(malf.AI_win_timeleft/(malf.apcs/3), 0)] seconds")
|
||||
else if(ticker.mode:malf_mode_declared)
|
||||
stat(null, "Time left: [max(ticker.mode:AI_win_timeleft/(ticker.mode:apcs/3), 0)]")
|
||||
|
||||
if(cell)
|
||||
stat(null, text("Charge Left: [cell.charge]/[cell.maxcharge]"))
|
||||
else
|
||||
stat(null, text("No Cell Inserted!"))
|
||||
|
||||
if(module)
|
||||
internal = locate(/obj/item/weapon/tank/jetpack) in module.modules
|
||||
if(internal)
|
||||
stat("Internal Atmosphere Info", internal.name)
|
||||
stat("Tank Pressure", internal.air_contents.return_pressure())
|
||||
show_cell_power()
|
||||
show_jetpack_pressure()
|
||||
|
||||
/mob/living/silicon/robot/restrained()
|
||||
return 0
|
||||
|
||||
@@ -144,4 +144,51 @@
|
||||
return 0
|
||||
if (bot.connected_ai == ai)
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
|
||||
// this function shows the health of the pAI in the Status panel
|
||||
/mob/living/silicon/proc/show_system_integrity()
|
||||
if(!src.stat)
|
||||
stat(null, text("System integrity: [(src.health+100)/2]%"))
|
||||
else
|
||||
stat(null, text("Systems nonfunctional"))
|
||||
|
||||
|
||||
// This is a pure virtual function, it should be overwritten by all subclasses
|
||||
/mob/living/silicon/proc/show_malf_ai()
|
||||
return 0
|
||||
|
||||
|
||||
// this function displays the station time in the status panel
|
||||
/mob/living/silicon/proc/show_station_time()
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
|
||||
|
||||
// this function displays the shuttles ETA in the status panel if the shuttle has been called
|
||||
/mob/living/silicon/proc/show_emergency_shuttle_eta()
|
||||
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||
var/timeleft = emergency_shuttle.timeleft()
|
||||
if (timeleft)
|
||||
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||
|
||||
|
||||
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
|
||||
/mob/living/silicon/Stat()
|
||||
..()
|
||||
statpanel("Status")
|
||||
if (src.client.statpanel == "Status")
|
||||
show_station_time()
|
||||
show_emergency_shuttle_eta()
|
||||
show_system_integrity()
|
||||
show_malf_ai()
|
||||
|
||||
// this function displays the stations manifest in a separate window
|
||||
/mob/living/silicon/proc/show_station_manifest()
|
||||
var/dat
|
||||
dat += "<h4>Crew Manifest</h4>"
|
||||
if(data_core)
|
||||
dat += data_core.get_manifest(0) // make it monochrome
|
||||
dat += "<br>"
|
||||
src << browse(dat, "window=airoster")
|
||||
onclose(src, "airoster")
|
||||
@@ -290,4 +290,4 @@
|
||||
if (cultist == usr) //just to be sure.
|
||||
return
|
||||
cultist.loc = usr.loc
|
||||
usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/
|
||||
usr.visible_message("\red [cultist] appears in a flash of red light as [usr] glows with power")*/
|
||||
@@ -144,8 +144,10 @@ datum/preferences
|
||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||
if("Skrell")
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
|
||||
if("Vox")
|
||||
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||
|
||||
else
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
preview_icon = new /icon(icobase, "torso_[g]")
|
||||
|
||||
@@ -740,8 +740,10 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
base = new('icons/mob/human_races/r_lizard.dmi')
|
||||
if("skrell")
|
||||
base = new('icons/mob/human_races/r_skrell.dmi')
|
||||
|
||||
if("vox")
|
||||
base = new('icons/mob/human_races/r_vox.dmi')
|
||||
|
||||
else
|
||||
base = new('icons/mob/human_races/r_human.dmi')
|
||||
if(base)
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
mouthshoot = 0
|
||||
return
|
||||
if (load_into_chamber())
|
||||
user.visible_message("<span class = 'warning'>[user] pulls the trigger. Ow.</span>")
|
||||
user.visible_message("<span class = 'warning'>[user] pulls the trigger.</span>")
|
||||
if(silenced)
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
else
|
||||
@@ -175,8 +175,10 @@
|
||||
in_chamber.on_hit(M)
|
||||
if (!in_chamber.nodamage)
|
||||
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]")
|
||||
user.death()
|
||||
else
|
||||
user << "<span class = 'notice'>You feel dumb for trying this...</span>"
|
||||
user << "<span class = 'notice'>Ow...</span>"
|
||||
user.apply_effect(110,AGONY,0)
|
||||
del(in_chamber)
|
||||
mouthshoot = 0
|
||||
return
|
||||
|
||||
@@ -166,3 +166,22 @@ obj/item/weapon/gun/energy/staff
|
||||
icon_state = "xray"
|
||||
projectile_type = "/obj/item/projectile/beam/mindflayer"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
obj/item/weapon/gun/energy/staff/focus
|
||||
name = "mental focus"
|
||||
desc = "An artefact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "focus"
|
||||
item_state = "focus"
|
||||
projectile_type = "/obj/item/projectile/forcebolt"
|
||||
/*
|
||||
attack_self(mob/living/user as mob)
|
||||
if(projectile_type == "/obj/item/projectile/forcebolt")
|
||||
charge_cost = 200
|
||||
user << "\red The [src.name] will now strike a small area."
|
||||
projectile_type = "/obj/item/projectile/forcebolt/strong"
|
||||
else
|
||||
charge_cost = 100
|
||||
user << "\red The [src.name] will now strike only a single person."
|
||||
projectile_type = "/obj/item/projectile/forcebolt"
|
||||
*/
|
||||
@@ -0,0 +1,140 @@
|
||||
/obj/item/weapon/storage/pneumatic
|
||||
name = "pneumatic cannon"
|
||||
desc = "A large gas-powered cannon."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "pneumatic"
|
||||
item_state = "pneumatic"
|
||||
w_class = 4.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
max_w_class = 3
|
||||
max_combined_w_class = 20
|
||||
|
||||
var/obj/item/weapon/tank/tank = null // Tank of gas for use in firing the cannon.
|
||||
var/obj/item/weapon/storage/tank_container = new() // Something to hold the tank item so we don't accidentally fire it.
|
||||
var/pressure_setting = 10 // Percentage of the gas in the tank used to fire the projectile.
|
||||
var/possible_pressure_amounts = list(5,10,20,25,50) // Possible pressure settings.
|
||||
var/minimum_tank_pressure = 10 // Minimum pressure to fire the gun.
|
||||
var/cooldown = 0 // Whether or not we're cooling down.
|
||||
var/cooldown_time = 50 // Time between shots.
|
||||
var/force_divisor = 400 // Force equates to speed. Speed/5 equates to a damage multiplier for whoever you hit.
|
||||
// For reference, a fully pressurized oxy tank at 50% gas release firing a health
|
||||
// analyzer with a force_divisor of 10 hit with a damage multiplier of 3000+.
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/verb/set_pressure() //set amount of tank pressure.
|
||||
|
||||
set name = "Set valve pressure"
|
||||
set category = "Object"
|
||||
set src in range(0)
|
||||
var/N = input("Percentage of tank used per shot:","[src]") as null|anything in possible_pressure_amounts
|
||||
if (N)
|
||||
pressure_setting = N
|
||||
usr << "You dial the pressure valve to [pressure_setting]%."
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/verb/eject_tank() //Remove the tank.
|
||||
|
||||
set name = "Eject tank"
|
||||
set category = "Object"
|
||||
set src in range(0)
|
||||
|
||||
if(tank)
|
||||
usr << "You twist the valve and pop the tank out of [src]."
|
||||
tank.loc = usr.loc
|
||||
tank = null
|
||||
icon_state = "pneumatic"
|
||||
item_state = "pneumatic"
|
||||
usr.update_icons()
|
||||
else
|
||||
usr << "There's no tank in [src]."
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(!tank && istype(W,/obj/item/weapon/tank))
|
||||
user.drop_item()
|
||||
tank = W
|
||||
tank.loc = src.tank_container
|
||||
user.visible_message("[user] jams [W] into [src]'s valve and twists it closed.","You jam [W] into [src]'s valve and twist it closed.")
|
||||
icon_state = "pneumatic-tank"
|
||||
item_state = "pneumatic-tank"
|
||||
user.update_icons()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/examine()
|
||||
set src in view()
|
||||
..()
|
||||
if (!(usr in view(2)) && usr!=src.loc) return
|
||||
usr << "The valve is dialed to [pressure_setting]%."
|
||||
if(tank)
|
||||
usr << "The tank dial reads [tank.air_contents.return_pressure()] kPa."
|
||||
else
|
||||
usr << "Nothing is attached to the tank valve!"
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
|
||||
if (istype(target, /obj/item/weapon/storage/backpack ))
|
||||
return
|
||||
|
||||
else if (target.loc == user.loc)
|
||||
return
|
||||
|
||||
else if (locate (/obj/structure/table, src.loc))
|
||||
return
|
||||
|
||||
else if(target == user)
|
||||
return
|
||||
|
||||
if (length(contents) == 0)
|
||||
user << "There's nothing in [src] to fire!"
|
||||
return 0
|
||||
else
|
||||
spawn(0) Fire(target,user,params)
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
|
||||
if (length(contents) > 0)
|
||||
if(user.a_intent == "hurt")
|
||||
user.visible_message("\red <b> \The [user] fires \the [src] point blank at [M]!</b>")
|
||||
Fire(M,user)
|
||||
return
|
||||
else
|
||||
Fire(M,user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/pneumatic/proc/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0)
|
||||
|
||||
if (!tank)
|
||||
user << "There is no gas tank in [src]!"
|
||||
return 0
|
||||
|
||||
if (cooldown)
|
||||
user << "The chamber hasn't built up enough pressure yet!"
|
||||
return 0
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
var/turf/curloc = get_turf(user)
|
||||
var/turf/targloc = get_turf(target)
|
||||
if (!istype(targloc) || !istype(curloc))
|
||||
return
|
||||
|
||||
var/fire_pressure = (tank.air_contents.return_pressure()/100)*pressure_setting
|
||||
|
||||
if (fire_pressure < minimum_tank_pressure)
|
||||
user << "There isn't enough gas in the tank to fire [src]."
|
||||
return 0
|
||||
|
||||
var/obj/item/object = contents[1]
|
||||
var/speed = ((fire_pressure*tank.volume)/object.w_class)/force_divisor //projectile speed.
|
||||
if(speed>80) speed = 80 //damage cap.
|
||||
|
||||
user.visible_message("<span class='danger'>[user] fires [src] and launches [object] at [target]!</span>","<span class='danger'>You fire [src] and launch [object] at [target]!</span>")
|
||||
|
||||
src.remove_from_storage(object,user.loc)
|
||||
object.throw_at(target,10,speed)
|
||||
|
||||
var/lost_gas_amount = tank.air_contents.total_moles*(pressure_setting/100)
|
||||
var/datum/gas_mixture/removed = tank.air_contents.remove(lost_gas_amount)
|
||||
user.loc.assume_air(removed)
|
||||
|
||||
cooldown = 1
|
||||
spawn(cooldown_time)
|
||||
cooldown = 0
|
||||
user << "[src]'s gauge informs you it's ready to be fired again."
|
||||
@@ -48,6 +48,7 @@
|
||||
var/stutter = 0
|
||||
var/eyeblur = 0
|
||||
var/drowsy = 0
|
||||
var/agony = 0
|
||||
|
||||
|
||||
proc/on_hit(var/atom/target, var/blocked = 0)
|
||||
@@ -55,7 +56,7 @@
|
||||
if(!isliving(target)) return 0
|
||||
if(isanimal(target)) return 0
|
||||
var/mob/living/L = target
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, blocked)
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked) // add in AGONY!
|
||||
return 1
|
||||
|
||||
proc/check_fire(var/mob/living/target as mob, var/mob/living/user as mob) //Checks if you can hit them or not.
|
||||
@@ -114,6 +115,7 @@
|
||||
msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG
|
||||
|
||||
spawn(0)
|
||||
|
||||
if(A)
|
||||
if (!forcedodge)
|
||||
forcedodge = A.bullet_act(src, def_zone) // searches for return value
|
||||
@@ -125,7 +127,6 @@
|
||||
loc = A.loc
|
||||
permutated.Add(A)
|
||||
return 0
|
||||
|
||||
if(istype(A,/turf))
|
||||
for(var/obj/O in A)
|
||||
O.bullet_act(src)
|
||||
|
||||
@@ -9,14 +9,15 @@
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
/* - Old taser bit
|
||||
nodamage = 0
|
||||
nodamage = 1
|
||||
/*
|
||||
stun = 10
|
||||
weaken = 10
|
||||
stutter = 10
|
||||
*/
|
||||
damage = 40
|
||||
agony = 40
|
||||
damage_type = HALLOSS
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/obj/item/projectile/forcebolt
|
||||
name = "force bolt"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "ice_1"
|
||||
damage = 20
|
||||
flag = "energy"
|
||||
|
||||
/obj/item/projectile/forcebolt/strong
|
||||
name = "force bolt"
|
||||
|
||||
/obj/item/projectile/forcebolt/on_hit(var/atom/target, var/blocked = 0)
|
||||
|
||||
var/obj/T = target
|
||||
var/throwdir = get_dir(firer,target)
|
||||
T.throw_at(get_edge_target_turf(target, throwdir),10,10)
|
||||
return 1
|
||||
|
||||
/*
|
||||
/obj/item/projectile/forcebolt/strong/on_hit(var/atom/target, var/blocked = 0)
|
||||
|
||||
// NONE OF THIS WORKS. DO NOT USE.
|
||||
var/throwdir = null
|
||||
|
||||
for(var/mob/M in hearers(2, src))
|
||||
if(M.loc != src.loc)
|
||||
throwdir = get_dir(src,target)
|
||||
M.throw_at(get_edge_target_turf(M, throwdir),15,1)
|
||||
return ..()
|
||||
*/
|
||||
@@ -104,6 +104,10 @@ datum
|
||||
for (var/datum/reagent/current_reagent in src.reagent_list)
|
||||
if (!current_reagent)
|
||||
continue
|
||||
if (current_reagent.id == "blood" && ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.inject_blood(my_atom, amount)
|
||||
continue
|
||||
var/current_reagent_transfer = current_reagent.volume * part
|
||||
if(preserve_data)
|
||||
trans_data = current_reagent.data
|
||||
|
||||
@@ -12,6 +12,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
var/g_amount = 0
|
||||
var/gold_amount = 0
|
||||
var/diamond_amount = 0
|
||||
var/uranium_amount = 0
|
||||
var/max_material_amount = 75000.0
|
||||
|
||||
New()
|
||||
@@ -46,7 +47,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
return
|
||||
|
||||
proc/TotalMaterials()
|
||||
return g_amount + gold_amount + diamond_amount
|
||||
return g_amount + gold_amount + diamond_amount + uranium_amount
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (shocked)
|
||||
@@ -85,19 +86,23 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
if(diamond_amount >= 2000)
|
||||
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
|
||||
G.amount = round(diamond_amount / 2000)
|
||||
if(uranium_amount >= 2000)
|
||||
var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc)
|
||||
G.amount = round(uranium_amount / 2000)
|
||||
del(src)
|
||||
return 1
|
||||
else
|
||||
user << "\red You can't load the [src.name] while it's opened."
|
||||
return 1
|
||||
if (disabled)
|
||||
user << "\The [name] appears to not be working!"
|
||||
return
|
||||
if (!linked_console)
|
||||
user << "\The [name] must be linked to an R&D console first!"
|
||||
return 1
|
||||
if (O.is_open_container())
|
||||
return 1
|
||||
if (!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond))
|
||||
if (!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond) && !istype(O, /obj/item/stack/sheet/mineral/uranium))
|
||||
user << "\red You cannot insert this item into the [name]!"
|
||||
return 1
|
||||
if (stat)
|
||||
@@ -128,6 +133,8 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
gold_amount += amount * 2000
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/diamond))
|
||||
diamond_amount += amount * 2000
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/uranium))
|
||||
uranium_amount += amount * 2000
|
||||
stack.use(amount)
|
||||
busy = 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -429,6 +429,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]))
|
||||
if("$diamond")
|
||||
linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]))
|
||||
if("$uranium")
|
||||
linked_imprinter.uranium_amount = max(0, (linked_imprinter.uranium_amount-being_built.materials[M]))
|
||||
else
|
||||
linked_imprinter.reagents.remove_reagent(M, being_built.materials[M])
|
||||
var/obj/new_item = new being_built.build_path(src)
|
||||
@@ -500,6 +502,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if("diamond")
|
||||
type = /obj/item/stack/sheet/mineral/diamond
|
||||
res_amount = "diamond_amount"
|
||||
if("uranium")
|
||||
type = /obj/item/stack/sheet/mineral/uranium
|
||||
res_amount = "uranium_amount"
|
||||
if(ispath(type) && hasvar(linked_imprinter, res_amount))
|
||||
var/obj/item/stack/sheet/sheet = new type(linked_imprinter.loc)
|
||||
var/available_num_sheets = round(linked_imprinter.vars[res_amount]/sheet.perunit)
|
||||
@@ -851,6 +856,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(D.materials[M] > linked_imprinter.gold_amount) check_materials = 0
|
||||
if("$diamond")
|
||||
if(D.materials[M] > linked_imprinter.diamond_amount) check_materials = 0
|
||||
if("$uranium")
|
||||
if(D.materials[M] > linked_imprinter.uranium_amount) check_materials = 0
|
||||
else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]))
|
||||
check_materials = 0
|
||||
if (check_materials)
|
||||
@@ -891,6 +898,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(linked_imprinter.diamond_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=1'>(1 Sheet)</A> "
|
||||
if(linked_imprinter.diamond_amount >= 10000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=5'>(5 Sheets)</A> "
|
||||
if(linked_imprinter.diamond_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=50'>(Max Sheets)</A>"
|
||||
dat += "<BR>"
|
||||
//Uranium
|
||||
dat += "* [linked_imprinter.uranium_amount] cm<sup>3</sup> of Uranium || "
|
||||
dat += "Eject: "
|
||||
if(linked_imprinter.uranium_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=uranium;imprinter_ejectsheet_amt=1'>(1 Sheet)</A> "
|
||||
if(linked_imprinter.uranium_amount >= 10000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=uranium;imprinter_ejectsheet_amt=5'>(5 Sheets)</A> "
|
||||
if(linked_imprinter.uranium_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=uranium;imprinter_ejectsheet_amt=50'>(Max Sheets)</A>"
|
||||
|
||||
user << browse("<TITLE>Research and Development Console</TITLE><HR>[dat]", "window=rdconsole;size=575x400")
|
||||
onclose(user, "rdconsole")
|
||||
|
||||
@@ -225,7 +225,7 @@ datum/tech/programming
|
||||
|
||||
datum/tech/syndicate
|
||||
name = "Illegal Technologies Research"
|
||||
desc = "The study of technologies that violate Nanotrassen regulations."
|
||||
desc = "The study of technologies that violate standard Nanotrasen regulations."
|
||||
id = "syndicate"
|
||||
|
||||
/*
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
icon_state = "statuette"
|
||||
additional_desc = "It depicts a [pick("small","ferocious","wild","pleasing","hulking")] \
|
||||
[pick("alien figure","rodent-like creature","reptilian alien","primate","unidentifiable object")] \
|
||||
[pick("performing unspeakable acts","posing heroically","in a feotal position","cheering","sobbing","making a plaintive gesture","making a rude gesture")]."
|
||||
[pick("performing unspeakable acts","posing heroically","in a fetal position","cheering","sobbing","making a plaintive gesture","making a rude gesture")]."
|
||||
if(5)
|
||||
item_type = "instrument"
|
||||
icon_state = "instrument"
|
||||
|
||||
@@ -142,8 +142,8 @@
|
||||
|
||||
/datum/surgery_step/brain/hematoma
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/FixOVein , \
|
||||
/obj/item/weapon/cable_coil
|
||||
/obj/item/weapon/FixOVein = 100, \
|
||||
/obj/item/weapon/cable_coil = 75
|
||||
)
|
||||
|
||||
min_duration = 90
|
||||
|
||||
@@ -163,19 +163,32 @@
|
||||
var/datum/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
|
||||
var/find_prob = 0
|
||||
|
||||
if (affected.implants.len)
|
||||
var/obj/item/weapon/implant/imp = affected.implants[1]
|
||||
if (imp.islegal())
|
||||
find_prob +=60
|
||||
|
||||
var/obj/item/weapon/obj = affected.implants[1]
|
||||
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
if (imp.islegal())
|
||||
find_prob +=60
|
||||
else
|
||||
find_prob +=40
|
||||
else
|
||||
find_prob +=40
|
||||
find_prob +=50
|
||||
|
||||
if (prob(find_prob))
|
||||
user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \
|
||||
"\blue You take something out of incision on [target]'s [affected.display_name]s with \the [tool]." )
|
||||
affected.implants -= imp
|
||||
imp.loc = get_turf(target)
|
||||
imp.imp_in = null
|
||||
imp.implanted = 0
|
||||
"\blue You take [obj] out of incision on [target]'s [affected.display_name]s with \the [tool]." )
|
||||
affected.implants -= obj
|
||||
obj.loc = get_turf(target)
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
imp.imp_in = null
|
||||
imp.implanted = 0
|
||||
else
|
||||
user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.display_name].", \
|
||||
"\blue There's something inside [target]'s [affected.display_name], but you just missed it this time." )
|
||||
else if (affected.hidden)
|
||||
user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \
|
||||
"\blue You take something out of incision on [target]'s [affected.display_name]s with \the [tool]." )
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
/datum/surgery_step/fix_vein
|
||||
priority = 2
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/circular_saw = 100, \
|
||||
/obj/item/weapon/hatchet = 75
|
||||
/obj/item/weapon/FixOVein = 100, \
|
||||
/obj/item/weapon/cable_coil = 75
|
||||
)
|
||||
can_infect = 1
|
||||
blood_level = 1
|
||||
|
||||
Reference in New Issue
Block a user