mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-25 04:56:29 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into heart_damage_2
# Conflicts: # code/modules/mob/living/simple_animal/hostile/giant_spider.dm # code/modules/organs/blood.dm # code/modules/organs/internal/lungs.dm # code/modules/organs/organ.dm # code/modules/organs/organ_external.dm
This commit is contained in:
@@ -19,6 +19,23 @@
|
||||
var/const/ROOM_ERR_SPACE = -1
|
||||
var/const/ROOM_ERR_TOOLARGE = -2
|
||||
|
||||
var/static/list/SPACE_AREA_TYPES = list(
|
||||
/area/space,
|
||||
/area/mine
|
||||
)
|
||||
var/static/list/SPECIAL_AREA_TYPES = list(
|
||||
/area/shuttle,
|
||||
/area/admin,
|
||||
/area/arrival,
|
||||
/area/centcom,
|
||||
/area/asteroid,
|
||||
/area/tdome,
|
||||
/area/syndicate_station,
|
||||
/area/wizard_station,
|
||||
/area/prison
|
||||
// /area/derelict //commented out, all hail derelict-rebuilders!
|
||||
)
|
||||
|
||||
/obj/item/blueprints/attack_self(mob/M as mob)
|
||||
if (!istype(M,/mob/living/carbon/human))
|
||||
M << "This stack of blue paper means nothing to you." //monkeys cannot into projecting
|
||||
@@ -48,7 +65,7 @@
|
||||
var/area/A = get_area()
|
||||
var/text = {"<HTML><head><title>[src]</title></head><BODY>
|
||||
<h2>[station_name()] blueprints</h2>
|
||||
<small>Property of [company_name]. For heads of staff only. Store in high-secure storage.</small><hr>
|
||||
<small>Property of [using_map.company_name]. For heads of staff only. Store in high-secure storage.</small><hr>
|
||||
"}
|
||||
switch (get_area_type())
|
||||
if (AREA_SPACE)
|
||||
@@ -79,22 +96,11 @@ move an amendment</a> to the drawing.</p>
|
||||
return A
|
||||
|
||||
/obj/item/blueprints/proc/get_area_type(var/area/A = get_area())
|
||||
if(istype(A, /area/space))
|
||||
return AREA_SPACE
|
||||
var/list/SPECIALS = list(
|
||||
/area/shuttle,
|
||||
/area/admin,
|
||||
/area/arrival,
|
||||
/area/centcom,
|
||||
/area/asteroid,
|
||||
/area/tdome,
|
||||
/area/syndicate_station,
|
||||
/area/wizard_station,
|
||||
/area/prison
|
||||
// /area/derelict //commented out, all hail derelict-rebuilders!
|
||||
)
|
||||
for (var/type in SPECIALS)
|
||||
if ( istype(A,type) )
|
||||
for(var/type in SPACE_AREA_TYPES)
|
||||
if(istype(A, type))
|
||||
return AREA_SPACE
|
||||
for (var/type in SPECIAL_AREA_TYPES)
|
||||
if(istype(A, type))
|
||||
return AREA_SPECIAL
|
||||
return AREA_STATION
|
||||
|
||||
|
||||
@@ -998,7 +998,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
M.apply_damage( rand(30,60) , BURN)
|
||||
message += "You feel a searing heat! Your [P] is burning!"
|
||||
if(i>=20 && i<=25) //EMP
|
||||
empulse(P.loc, 3, 6, 1)
|
||||
empulse(P.loc, 1, 2, 4, 6, 1)
|
||||
message += "Your [P] emits a wave of electromagnetic energy!"
|
||||
if(i>=25 && i<=40) //Smoke
|
||||
var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem
|
||||
|
||||
@@ -213,6 +213,17 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
update_icon()
|
||||
ui_interact(user)
|
||||
|
||||
// Proc: MouseDrop()
|
||||
//Same thing PDAs do
|
||||
/obj/item/device/communicator/MouseDrop(obj/over_object as obj)
|
||||
var/mob/M = usr
|
||||
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
|
||||
return
|
||||
if(!istype(over_object, /obj/screen))
|
||||
return attack_self(M)
|
||||
return
|
||||
|
||||
|
||||
// Proc: attack_ghost()
|
||||
// Parameters: 1 (user - the ghost clicking on the device)
|
||||
// Description: Recreates the known_devices list, so that the ghost looking at the device can see themselves, then calls ..() so that NanoUI appears.
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay
|
||||
name = "station intercom (Medbay)"
|
||||
icon_state = "secintercom"
|
||||
icon_state = "medintercom"
|
||||
frequency = MED_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/department/security
|
||||
name = "station intercom (Security)"
|
||||
icon_state = "medintercom"
|
||||
icon_state = "secintercom"
|
||||
frequency = SEC_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/entertainment
|
||||
|
||||
@@ -52,8 +52,8 @@ REAGENT SCANNER
|
||||
if (!istype(M,/mob/living/carbon/human) || M.isSynthetic())
|
||||
//these sensors are designed for organic life
|
||||
user.show_message("<span class='notice'>Analyzing Results for ERROR:\n\t Overall Status: ERROR</span>")
|
||||
user.show_message("<span class='notice'> Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font></span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: <font color='blue'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font></span>")
|
||||
user.show_message("<span class='notice'> Key: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font></span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: <font color='cyan'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font></span>")
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
user.show_message("<span class='warning'>Warning: Blood Level ERROR: --% --cl.</span> <span class='notice'>Type: ERROR</span>")
|
||||
user.show_message("<span class='notice'>Subject's pulse: <font color='red'>-- bpm.</font></span>")
|
||||
@@ -70,8 +70,8 @@ REAGENT SCANNER
|
||||
user.show_message("<span class='notice'>Overall Status: dead</span>")
|
||||
else
|
||||
user.show_message("<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.maxHealth)*100) ]% healthy"]</span>")
|
||||
user.show_message("<span class='notice'> Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font></span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: <font color='blue'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font></span>")
|
||||
user.show_message("<span class='notice'> Key: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font></span>", 1)
|
||||
user.show_message("<span class='notice'> Damage Specifics: <font color='cyan'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font></span>")
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
user.show_message("<span class='notice'>Time of Death: [M.tod]</span>")
|
||||
@@ -92,7 +92,7 @@ REAGENT SCANNER
|
||||
else
|
||||
user.show_message("<span class='notice'> Limbs are OK.</span>",1)
|
||||
|
||||
OX = M.getOxyLoss() > 50 ? "<font color='blue'><b>Severe oxygen deprivation detected</b></font>" : "Subject bloodstream oxygen level normal"
|
||||
OX = M.getOxyLoss() > 50 ? "<font color='cyan'><b>Severe oxygen deprivation detected</b></font>" : "Subject bloodstream oxygen level normal"
|
||||
TX = M.getToxLoss() > 50 ? "<font color='green'><b>Dangerous amount of toxins detected</b></font>" : "Subject bloodstream toxin level minimal"
|
||||
BU = M.getFireLoss() > 50 ? "<font color='#FFA500'><b>Severe burn damage detected</b></font>" : "Subject burn injury status O.K"
|
||||
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
//Universal translator
|
||||
/obj/item/device/universal_translator
|
||||
name = "handheld translator"
|
||||
desc = "This handy device appears to translate the languages it hears into onscreen text for a user."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "translator"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
var/mult_icons = 1 //Changes sprite when it translates
|
||||
var/visual = 1 //If you need to see to get the message
|
||||
var/audio = 0 //If you need to hear to get the message
|
||||
var/listening = 0
|
||||
var/datum/language/langset
|
||||
|
||||
/obj/item/device/universal_translator/attack_self(mob/user)
|
||||
if(!listening) //Turning ON
|
||||
langset = input(user,"Translate to which of your languages?","Language Selection") as null|anything in user.languages
|
||||
if(langset)
|
||||
if(langset && ((langset.flags & NONVERBAL) || (langset.flags & HIVEMIND)))
|
||||
to_chat(user, "<span class='warning'>\The [src] cannot output that language.</span>")
|
||||
return
|
||||
else
|
||||
listening = 1
|
||||
listening_objects |= src
|
||||
if(mult_icons)
|
||||
icon_state = "[initial(icon_state)]1"
|
||||
to_chat(user, "<span class='notice'>You enable \the [src], translating into [langset.name].</span>")
|
||||
else //Turning OFF
|
||||
listening = 0
|
||||
listening_objects -= src
|
||||
langset = null
|
||||
icon_state = "[initial(icon_state)]"
|
||||
to_chat(user, "<span class='notice'>You disable \the [src].</span>")
|
||||
|
||||
/obj/item/device/universal_translator/hear_talk(var/mob/speaker, var/message, var/vrb, var/datum/language/language)
|
||||
if(!listening || !istype(speaker))
|
||||
return
|
||||
|
||||
//Show the "I heard something" animation.
|
||||
if(mult_icons)
|
||||
flick("[initial(icon_state)]2",src)
|
||||
|
||||
//Handheld or pocket only.
|
||||
if(!isliving(loc))
|
||||
return
|
||||
|
||||
var/mob/living/L = loc
|
||||
|
||||
if (language && (language.flags & NONVERBAL))
|
||||
return //Not gonna translate sign language
|
||||
|
||||
if (visual && ((L.sdisabilities & BLIND) || L.eye_blind))
|
||||
return //Can't see the screen, don't get the message
|
||||
|
||||
if (audio && ((L.sdisabilities & DEAF) || L.ear_deaf))
|
||||
return //Can't hear the translation, don't get the message
|
||||
|
||||
//Only translate if they can't understand, otherwise pointlessly spammy
|
||||
//I'll just assume they don't look at the screen in that case
|
||||
|
||||
//They don't understand the spoken language we're translating FROM
|
||||
if(!L.say_understands(speaker,language))
|
||||
//They understand the output language
|
||||
if(L.say_understands(null,langset))
|
||||
to_chat(L, "<i><b>[src]</b> translates, </i>\"<span class='[langset.colour]'>[message]</span>\"")
|
||||
|
||||
//They don't understand the output language
|
||||
else
|
||||
to_chat(L, "<i><b>[src]</b> translates, </i>\"<span class='[langset.colour]'>[langset.scramble(message)]</span>\"")
|
||||
|
||||
//Let's try an ear-worn version
|
||||
/obj/item/device/universal_translator/ear
|
||||
name = "translator earpiece"
|
||||
desc = "This handy device appears to translate the languages it hears into another language for a user."
|
||||
icon_state = "earpiece"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
visual = 0
|
||||
audio = 1
|
||||
@@ -35,7 +35,7 @@ AI MODULES
|
||||
return
|
||||
|
||||
if(ticker && ticker.mode && ticker.mode.name == "blob")
|
||||
usr << "Law uploads have been disabled by [company_name]!"
|
||||
usr << "Law uploads have been disabled by [using_map.company_name]!"
|
||||
return
|
||||
|
||||
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
|
||||
|
||||
@@ -85,10 +85,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
body_parts_covered = 0
|
||||
var/lit = 0
|
||||
var/icon_on
|
||||
var/icon_off
|
||||
var/type_butt = null
|
||||
var/chem_volume = 0
|
||||
var/smoketime = 0
|
||||
var/is_pipe = 0 //Prevents a runtime with pipes
|
||||
var/matchmes = "USER lights NAME with FLAME"
|
||||
var/lightermes = "USER lights NAME with FLAME"
|
||||
var/zippomes = "USER lights NAME with FLAME"
|
||||
@@ -106,6 +106,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
smoketime--
|
||||
if(smoketime < 1)
|
||||
die()
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/C = loc
|
||||
to_chat(C, "<span class='notice'>Your [name] goes out.</span>")
|
||||
return
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
@@ -119,19 +122,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
/obj/item/clothing/mask/smokable/examine(mob/user)
|
||||
..()
|
||||
if(lit == 1)
|
||||
var/smoke_percent = round((smoketime / initial(smoketime)) * 100)
|
||||
switch(smoke_percent)
|
||||
if(90 to INFINITY)
|
||||
user << "[src] has just begun to burn."
|
||||
if(60 to 90)
|
||||
user << "[src] has a good amount of burn time remaining."
|
||||
if(30 to 60)
|
||||
user << "[src] is about half finished."
|
||||
if(10 to 30)
|
||||
user << "[src] is starting to burn low."
|
||||
else
|
||||
user << "[src] is nearly burnt out!"
|
||||
if(is_pipe)
|
||||
return
|
||||
var/smoke_percent = round((smoketime / initial(smoketime)) * 100)
|
||||
switch(smoke_percent)
|
||||
if(90 to INFINITY)
|
||||
user << "[src] is still fresh."
|
||||
if(60 to 90)
|
||||
user << "[src] has a good amount of burn time remaining."
|
||||
if(30 to 60)
|
||||
user << "[src] is about half finished."
|
||||
if(10 to 30)
|
||||
user << "[src] is starting to burn low."
|
||||
else
|
||||
user << "[src] is nearly burnt out!"
|
||||
|
||||
|
||||
/obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].")
|
||||
@@ -167,6 +171,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
/obj/item/clothing/mask/smokable/proc/die(var/nomessage = 0)
|
||||
var/turf/T = get_turf(src)
|
||||
set_light(0)
|
||||
processing_objects.Remove(src)
|
||||
if (type_butt)
|
||||
var/obj/item/butt = new type_butt(T)
|
||||
transfer_fingerprints_to(butt)
|
||||
@@ -175,12 +180,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
if (!nomessage)
|
||||
M << "<span class='notice'>Your [name] goes out.</span>"
|
||||
to_chat(M, "<span class='notice'>Your [name] goes out.</span>")
|
||||
M.remove_from_mob(src) //un-equip it so the overlays can update
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
processing_objects.Remove(src)
|
||||
qdel(src)
|
||||
else
|
||||
new /obj/effect/decal/cleanable/ash(T)
|
||||
@@ -189,12 +193,26 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
if (!nomessage)
|
||||
M << "<span class='notice'>Your [name] goes out, and you empty the ash.</span>"
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
icon_state = initial(icon_state)
|
||||
item_state = initial(item_state)
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
processing_objects.Remove(src)
|
||||
smoketime = 0
|
||||
reagents.clear_reagents()
|
||||
name = "empty [initial(name)]"
|
||||
|
||||
/obj/item/clothing/mask/smokable/proc/quench()
|
||||
lit = 0
|
||||
processing_objects.Remove(src)
|
||||
icon_state = initial(icon_state)
|
||||
item_state = initial(item_state)
|
||||
|
||||
if(ismob(loc))
|
||||
var/mob/living/M = loc
|
||||
M.update_inv_wear_mask(0)
|
||||
M.update_inv_l_hand(0)
|
||||
M.update_inv_r_hand(1)
|
||||
|
||||
/obj/item/clothing/mask/smokable/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
@@ -223,6 +241,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/mask/smokable/water_act(amount)
|
||||
if(amount >= 5)
|
||||
quench()
|
||||
|
||||
/obj/item/clothing/mask/smokable/cigarette
|
||||
name = "cigarette"
|
||||
desc = "A roll of tobacco and nicotine."
|
||||
@@ -233,7 +255,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
slot_flags = SLOT_EARS | SLOT_MASK
|
||||
attack_verb = list("burnt", "singed")
|
||||
icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
|
||||
icon_off = "cigoff"
|
||||
type_butt = /obj/item/weapon/cigbutt
|
||||
chem_volume = 15
|
||||
smoketime = 300
|
||||
@@ -269,8 +290,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
/obj/item/clothing/mask/smokable/cigarette/attack_self(mob/user as mob)
|
||||
if(lit == 1)
|
||||
user.visible_message("<span class='notice'>[user] calmly drops and treads on the lit [src], putting it out instantly.</span>")
|
||||
die(1)
|
||||
if(user.a_intent == I_HURT)
|
||||
user.visible_message("<span class='notice'>[user] drops and treads on the lit [src], putting it out instantly.</span>")
|
||||
die(1)
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] puts out \the [src].</span>")
|
||||
quench()
|
||||
return ..()
|
||||
|
||||
////////////
|
||||
@@ -281,7 +306,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!"
|
||||
icon_state = "cigar2off"
|
||||
icon_on = "cigar2on"
|
||||
icon_off = "cigar2off"
|
||||
type_butt = /obj/item/weapon/cigbutt/cigarbutt
|
||||
throw_speed = 0.5
|
||||
item_state = "cigaroff"
|
||||
@@ -298,14 +322,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
desc = "There's little more you could want from a cigar."
|
||||
icon_state = "cigar2off"
|
||||
icon_on = "cigar2on"
|
||||
icon_off = "cigar2off"
|
||||
|
||||
/obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
||||
name = "premium Havanian cigar"
|
||||
desc = "A cigar fit for only the best of the best."
|
||||
icon_state = "cigar2off"
|
||||
icon_on = "cigar2on"
|
||||
icon_off = "cigar2off"
|
||||
smoketime = 7200
|
||||
chem_volume = 30
|
||||
|
||||
@@ -345,7 +367,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = "pipeoff"
|
||||
item_state = "pipeoff"
|
||||
icon_on = "pipeon" //Note - these are in masks.dmi
|
||||
icon_off = "pipeoff"
|
||||
smoketime = 0
|
||||
chem_volume = 50
|
||||
matchmes = "<span class='notice'>USER lights their NAME with their FLAME.</span>"
|
||||
@@ -353,6 +374,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
zippomes = "<span class='rose'>With much care, USER lights their NAME with their FLAME.</span>"
|
||||
weldermes = "<span class='notice'>USER recklessly lights NAME with FLAME.</span>"
|
||||
ignitermes = "<span class='notice'>USER fiddles with FLAME, and manages to light their NAME with the power of science.</span>"
|
||||
is_pipe = 1
|
||||
|
||||
/obj/item/clothing/mask/smokable/pipe/New()
|
||||
..()
|
||||
@@ -375,18 +397,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
/obj/item/clothing/mask/smokable/pipe/attack_self(mob/user as mob)
|
||||
if(lit == 1)
|
||||
user.visible_message("<span class='notice'>[user] puts out [src].</span>", "<span class='notice'>You put out [src].</span>")
|
||||
lit = 0
|
||||
icon_state = icon_off
|
||||
item_state = icon_off
|
||||
processing_objects.Remove(src)
|
||||
else if (smoketime)
|
||||
var/turf/location = get_turf(user)
|
||||
user.visible_message("<span class='notice'>[user] empties out [src].</span>", "<span class='notice'>You empty out [src].</span>")
|
||||
new /obj/effect/decal/cleanable/ash(location)
|
||||
smoketime = 0
|
||||
reagents.clear_reagents()
|
||||
name = "empty [initial(name)]"
|
||||
if(user.a_intent == I_HURT)
|
||||
user.visible_message("<span class='notice'>[user] empties the lit [src] on the floor!.</span>")
|
||||
die(1)
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] puts out \the [src].</span>")
|
||||
quench()
|
||||
|
||||
/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/melee/energy/sword))
|
||||
@@ -431,7 +447,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon_state = "cobpipeoff"
|
||||
item_state = "cobpipeoff"
|
||||
icon_on = "cobpipeon" //Note - these are in masks.dmi
|
||||
icon_off = "cobpipeoff"
|
||||
chem_volume = 35
|
||||
|
||||
/////////
|
||||
|
||||
@@ -35,3 +35,22 @@
|
||||
if(istype(M, build_path))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Should be called from the constructor of any machine to automatically populate the default parts
|
||||
/obj/item/weapon/circuitboard/proc/apply_default_parts(var/obj/machinery/M)
|
||||
if(!istype(M))
|
||||
return
|
||||
if(!req_components)
|
||||
return
|
||||
M.component_parts = list()
|
||||
for(var/comp_path in req_components)
|
||||
var/comp_amt = req_components[comp_path]
|
||||
if(!comp_amt)
|
||||
continue
|
||||
|
||||
if(ispath(comp_path, /obj/item/stack))
|
||||
M.component_parts += new comp_path(contain_parts ? M : null, comp_amt)
|
||||
else
|
||||
for(var/i in 1 to comp_amt)
|
||||
M.component_parts += new comp_path(contain_parts ? M : null)
|
||||
return
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/security/New()
|
||||
..()
|
||||
network = station_networks
|
||||
network = using_map.station_networks
|
||||
|
||||
/obj/item/weapon/circuitboard/security/engineering
|
||||
name = T_BOARD("engineering camera monitor")
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/item/weapon/circuitboard/security/mining
|
||||
name = T_BOARD("mining camera monitor")
|
||||
build_path = /obj/machinery/computer/security/mining
|
||||
network = list("MINE")
|
||||
network = list("Mining Outpost")
|
||||
req_access = list()
|
||||
|
||||
/obj/item/weapon/circuitboard/security/telescreen/entertainment
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/papershredder
|
||||
name = T_BOARD("papershredder")
|
||||
build_path = /obj/machinery/papershredder
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1)
|
||||
@@ -3,12 +3,14 @@
|
||||
icon_state = "emp"
|
||||
item_state = "empgrenade"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
|
||||
var/emp_heavy = 4
|
||||
var/emp_light = 10
|
||||
var/emp_heavy = 2
|
||||
var/emp_med = 4
|
||||
var/emp_light = 7
|
||||
var/emp_long = 10
|
||||
|
||||
prime()
|
||||
..()
|
||||
if(empulse(src, emp_heavy, emp_light))
|
||||
if(empulse(src, emp_heavy, emp_med, emp_light, emp_long))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -18,4 +20,6 @@
|
||||
icon_state = "lyemp"
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
|
||||
emp_heavy = 1
|
||||
emp_light = 4
|
||||
emp_med = 2
|
||||
emp_light = 3
|
||||
emp_long = 4
|
||||
@@ -101,6 +101,10 @@ Implant Specifics:<BR>"}
|
||||
meltdown()
|
||||
if(2)
|
||||
delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time
|
||||
if(3)
|
||||
delay = rand(2*60*10,5*60*10) //from 2 to 5 minutes of free time
|
||||
if(4)
|
||||
delay = rand(0.5*60*10,1*60*10) //from .5 to 1 minutes of free time
|
||||
|
||||
spawn(delay)
|
||||
malfunction--
|
||||
@@ -227,10 +231,22 @@ Implant Specifics:<BR>"}
|
||||
return
|
||||
malfunction = MALFUNCTION_TEMPORARY
|
||||
switch (severity)
|
||||
if (2.0) //Weak EMP will make implant tear limbs off.
|
||||
if (4) //Weak EMP will make implant tear limbs off.
|
||||
if (prob(25))
|
||||
small_boom()
|
||||
if (3) //Weak EMP will make implant tear limbs off.
|
||||
if (prob(50))
|
||||
small_boom()
|
||||
if (1.0) //strong EMP will melt implant either making it go off, or disarming it
|
||||
if (2) //strong EMP will melt implant either making it go off, or disarming it
|
||||
if (prob(70))
|
||||
if (prob(75))
|
||||
small_boom()
|
||||
else
|
||||
if (prob(13))
|
||||
activate() //chance of bye bye
|
||||
else
|
||||
meltdown() //chance of implant disarming
|
||||
if (1) //strong EMP will melt implant either making it go off, or disarming it
|
||||
if (prob(70))
|
||||
if (prob(50))
|
||||
small_boom()
|
||||
@@ -320,7 +336,13 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
if(prob(60))
|
||||
activate(20)
|
||||
if(2)
|
||||
if(prob(30))
|
||||
if(prob(40))
|
||||
activate(20)
|
||||
if(3)
|
||||
if(prob(40))
|
||||
activate(5)
|
||||
if(4)
|
||||
if(prob(20))
|
||||
activate(5)
|
||||
|
||||
spawn(20)
|
||||
@@ -333,7 +355,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
/obj/item/weapon/implant/loyalty/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> [company_name] Employee Management Implant<BR>
|
||||
<b>Name:</b> [using_map.company_name] Employee Management Implant<BR>
|
||||
<b>Life:</b> Ten years.<BR>
|
||||
<b>Important Notes:</b> Personnel injected with this device tend to be much more loyal to the company.<BR>
|
||||
<HR>
|
||||
@@ -349,11 +371,11 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role)
|
||||
if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE))
|
||||
H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!")
|
||||
H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [using_map.company_name] try to invade your mind!")
|
||||
return 0
|
||||
else
|
||||
clear_antag_roles(H.mind, 1)
|
||||
H << "<span class='notice'>You feel a surge of loyalty towards [company_name].</span>"
|
||||
H << "<span class='notice'>You feel a surge of loyalty towards [using_map.company_name].</span>"
|
||||
return 1
|
||||
|
||||
|
||||
@@ -403,7 +425,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
/obj/item/weapon/implant/death_alarm/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> [company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||
<b>Name:</b> [using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
||||
<HR>
|
||||
@@ -485,7 +507,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
/obj/item/weapon/implant/compressed/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> [company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||
<b>Name:</b> [using_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
|
||||
<HR>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000)
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
|
||||
/obj/item/weapon/implanter/attack_self(var/mob/user)
|
||||
|
||||
@@ -751,7 +751,7 @@
|
||||
<br>
|
||||
<h1>The Oath</h1>
|
||||
|
||||
<i>The Medical Oath sworn by recognised medical practitioners in the employ of [company_name]</i><br>
|
||||
<i>The Medical Oath sworn by recognised medical practitioners in the employ of [using_map.company_name]</i><br>
|
||||
|
||||
<ol>
|
||||
<li>Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.</li>
|
||||
|
||||
@@ -285,4 +285,59 @@
|
||||
/obj/item/weapon/anobattery,
|
||||
/obj/item/device/ano_scanner,
|
||||
/obj/item/weapon/pickaxe/hand
|
||||
)
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack
|
||||
name = "leather fannypack"
|
||||
desc = "A dorky fannypack for keeping small items in."
|
||||
icon_state = "fannypack_leather"
|
||||
item_state = "fannypack_leather"
|
||||
max_w_class = ITEMSIZE_SMALL
|
||||
storage_slots = null
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 2
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/black
|
||||
name = "black fannypack"
|
||||
icon_state = "fannypack_black"
|
||||
item_state = "fannypack_black"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/blue
|
||||
name = "blue fannypack"
|
||||
icon_state = "fannypack_blue"
|
||||
item_state = "fannypack_blue"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/cyan
|
||||
name = "cyan fannypack"
|
||||
icon_state = "fannypack_cyan"
|
||||
item_state = "fannypack_cyan"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/green
|
||||
name = "green fannypack"
|
||||
icon_state = "fannypack_green"
|
||||
item_state = "fannypack_green"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/orange
|
||||
name = "orange fannypack"
|
||||
icon_state = "fannypack_orange"
|
||||
item_state = "fannypack_orange"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/purple
|
||||
name = "purple fannypack"
|
||||
icon_state = "fannypack_purple"
|
||||
item_state = "fannypack_purple"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/red
|
||||
name = "red fannypack"
|
||||
icon_state = "fannypack_red"
|
||||
item_state = "fannypack_red"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/white
|
||||
name = "white fannypack"
|
||||
icon_state = "fannypack_white"
|
||||
item_state = "fannypack_white"
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack/yellow
|
||||
name = "yellow fannypack"
|
||||
icon_state = "fannypack_yellow"
|
||||
item_state = "fannypack_yellow"
|
||||
|
||||
|
||||
@@ -50,10 +50,10 @@
|
||||
if (!( user.restrained() ) && !( user.stat ))
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
user.u_equip(master_item)
|
||||
user.unEquip(master_item)
|
||||
user.put_in_r_hand(master_item)
|
||||
if("l_hand")
|
||||
user.u_equip(master_item)
|
||||
user.unEquip(master_item)
|
||||
user.put_in_l_hand(master_item)
|
||||
master_item.add_fingerprint(user)
|
||||
return 0
|
||||
|
||||
@@ -77,10 +77,10 @@
|
||||
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
usr.u_equip(src)
|
||||
usr.unEquip(src)
|
||||
usr.put_in_r_hand(src)
|
||||
if("l_hand")
|
||||
usr.u_equip(src)
|
||||
usr.unEquip(src)
|
||||
usr.put_in_l_hand(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
|
||||
@@ -150,12 +150,14 @@
|
||||
//misc, formerly from code/defines/weapons.dm
|
||||
/obj/item/weapon/surgical/bonegel
|
||||
name = "bone gel"
|
||||
desc = "For fixing bones."
|
||||
icon_state = "bone-gel"
|
||||
force = 0
|
||||
throwforce = 1.0
|
||||
|
||||
/obj/item/weapon/surgical/FixOVein
|
||||
name = "FixOVein"
|
||||
desc = "Like bone gel. For veins."
|
||||
icon_state = "fixovein"
|
||||
force = 0
|
||||
throwforce = 1.0
|
||||
@@ -164,6 +166,7 @@
|
||||
|
||||
/obj/item/weapon/surgical/bonesetter
|
||||
name = "bone setter"
|
||||
desc = "Put them in their place."
|
||||
icon_state = "bone setter"
|
||||
force = 8.0
|
||||
throwforce = 9.0
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
/obj/item/weapon/tank/vox //Can't be a child of phoron or the gas amount gets screwey.
|
||||
name = "phoron tank"
|
||||
desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable."
|
||||
icon_state = "oxygen_fr"
|
||||
icon_state = "phoron_vox"
|
||||
gauge_icon = null
|
||||
flags = CONDUCT
|
||||
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
|
||||
@@ -209,4 +209,4 @@
|
||||
/obj/item/weapon/tank/nitrogen/examine(mob/user)
|
||||
if(..(user, 0) && air_contents.gas["nitrogen"] < 10)
|
||||
user << text("<span class='danger'>The meter on \the [src] indicates you are almost out of nitrogen!</span>")
|
||||
//playsound(user, 'sound/effects/alert.ogg', 50, 1)
|
||||
//playsound(user, 'sound/effects/alert.ogg', 50, 1)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/max_carry = 10
|
||||
|
||||
/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
// Drop all the things. All of them.
|
||||
overlays.Cut()
|
||||
for(var/obj/item/I in carrying)
|
||||
|
||||
Reference in New Issue
Block a user