mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 21:19:44 +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:
@@ -333,7 +333,7 @@ steam.start() -- spawns the effect
|
||||
spawn(0)
|
||||
var/turf/T = get_turf(src.holder)
|
||||
if(T != src.oldposition)
|
||||
if(istype(T, /turf/space))
|
||||
if(isturf(T))
|
||||
var/obj/effect/effect/ion_trails/I = PoolOrNew(/obj/effect/effect/ion_trails, src.oldposition)
|
||||
src.oldposition = T
|
||||
I.set_dir(src.holder.dir)
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
|
||||
new /obj/item/clothing/head/flatcap(src.loc)
|
||||
new /obj/item/clothing/mask/smokable/cigarette/cigar/havana(src.loc)
|
||||
new /obj/item/clothing/shoes/jackboots(src.loc)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src.loc)
|
||||
delete_me = 1
|
||||
|
||||
/obj/effect/landmark/costume/nyangirl/New()
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
desc = "They seem to pulse slightly with an inner life"
|
||||
icon_state = "eggs"
|
||||
var/amount_grown = 0
|
||||
var/spiders_min = 6
|
||||
var/spiders_max = 24
|
||||
New()
|
||||
pixel_x = rand(3,-3)
|
||||
pixel_y = rand(3,-3)
|
||||
@@ -97,7 +99,7 @@
|
||||
/obj/effect/spider/eggcluster/process()
|
||||
amount_grown += rand(0,2)
|
||||
if(amount_grown >= 100)
|
||||
var/num = rand(6,24)
|
||||
var/num = rand(spiders_min, spiders_max)
|
||||
var/obj/item/organ/external/O = null
|
||||
if(istype(loc, /obj/item/organ/external))
|
||||
O = loc
|
||||
@@ -108,6 +110,10 @@
|
||||
O.implants += spiderling
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/eggcluster/small
|
||||
spiders_min = 1
|
||||
spiders_max = 3
|
||||
|
||||
/obj/effect/spider/spiderling
|
||||
name = "spiderling"
|
||||
desc = "It never stays still for long."
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// This artificially splits a ZAS zone, useful if you wish to prevent massive super-zones which can cause lag.
|
||||
/obj/effect/zone_divider
|
||||
name = "zone divider"
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "x3"
|
||||
invisibility = 101 //nope, can't see this
|
||||
anchored = 1
|
||||
density = 0
|
||||
opacity = 0
|
||||
|
||||
/obj/effect/zone_divider/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
// Special case to prevent us from being part of a zone during the first air master tick.
|
||||
// We must merge ourselves into a zone on next tick. This will cause a bit of lag on
|
||||
// startup, but it can't really be helped you know?
|
||||
if(air_master && air_master.current_cycle == 0)
|
||||
spawn(1)
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
return 0
|
||||
return !air_group // Anything except zones can pass
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
|
||||
// #define EMPDEBUG 10
|
||||
|
||||
proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
|
||||
proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_range, log=0)
|
||||
if(!epicenter) return
|
||||
|
||||
if(!istype(epicenter, /turf))
|
||||
epicenter = get_turf(epicenter.loc)
|
||||
|
||||
if(log)
|
||||
message_admins("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
|
||||
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
|
||||
message_admins("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ")
|
||||
log_game("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ")
|
||||
|
||||
if(heavy_range > 1)
|
||||
if(first_range > 1)
|
||||
var/obj/effect/overlay/pulse = PoolOrNew(/obj/effect/overlay, epicenter)
|
||||
pulse.icon = 'icons/effects/effects.dmi'
|
||||
pulse.icon_state = "emppulse"
|
||||
@@ -23,28 +23,50 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
|
||||
spawn(20)
|
||||
qdel(pulse)
|
||||
|
||||
if(heavy_range > light_range)
|
||||
light_range = heavy_range
|
||||
if(first_range > second_range)
|
||||
second_range = first_range
|
||||
if(second_range > third_range)
|
||||
third_range = second_range
|
||||
if(third_range > fourth_range)
|
||||
fourth_range = third_range
|
||||
|
||||
for(var/mob/M in range(heavy_range, epicenter))
|
||||
for(var/mob/M in range(first_range, epicenter))
|
||||
M << 'sound/effects/EMPulse.ogg'
|
||||
|
||||
for(var/atom/T in range(light_range, epicenter))
|
||||
for(var/atom/T in range(fourth_range, epicenter))
|
||||
#ifdef EMPDEBUG
|
||||
var/time = world.timeofday
|
||||
#endif
|
||||
var/distance = get_dist(epicenter, T)
|
||||
if(distance < 0)
|
||||
distance = 0
|
||||
if(distance < heavy_range)
|
||||
//Worst effects, really hurts
|
||||
if(distance < first_range)
|
||||
T.emp_act(1)
|
||||
else if(distance == heavy_range)
|
||||
else if(distance == first_range)
|
||||
if(prob(50))
|
||||
T.emp_act(1)
|
||||
else
|
||||
T.emp_act(2)
|
||||
else if(distance <= light_range)
|
||||
//Slightly less painful
|
||||
else if(distance <= second_range)
|
||||
T.emp_act(2)
|
||||
else if(distance == second_range)
|
||||
if(prob(50))
|
||||
T.emp_act(2)
|
||||
else
|
||||
T.emp_act(3)
|
||||
//Even less slightly less painful
|
||||
else if(distance <= third_range)
|
||||
T.emp_act(3)
|
||||
else if(distance == third_range)
|
||||
if(prob(50))
|
||||
T.emp_act(2)
|
||||
else
|
||||
T.emp_act(3)
|
||||
//This should be more or less harmless
|
||||
else if(distance <= fourth_range)
|
||||
T.emp_act(4)
|
||||
#ifdef EMPDEBUG
|
||||
if((world.timeofday - time) >= EMPDEBUG)
|
||||
log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -630,9 +630,9 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(1);/obj/item/weapon/grenade/flashbang,
|
||||
prob(1);/obj/item/weapon/melee/baton,
|
||||
prob(1);/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
prob(3);/obj/item/clothing/shoes/jackboots,
|
||||
prob(1);/obj/item/clothing/shoes/swat,
|
||||
prob(1);/obj/item/clothing/shoes/combat,
|
||||
prob(3);/obj/item/clothing/shoes/boots/jackboots,
|
||||
prob(1);/obj/item/clothing/shoes/boots/swat,
|
||||
prob(1);/obj/item/clothing/shoes/boots/combat,
|
||||
prob(1);/obj/item/clothing/gloves/swat,
|
||||
prob(1);/obj/item/clothing/gloves/combat,
|
||||
prob(1);/obj/item/clothing/glasses/sunglasses/big,
|
||||
@@ -684,7 +684,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(3);/obj/item/weapon/storage/box/gloves,
|
||||
prob(2);/obj/item/weapon/storage/belt/medical/emt,
|
||||
prob(2);/obj/item/weapon/storage/belt/medical,
|
||||
prob(1);/obj/item/clothing/shoes/combat,
|
||||
prob(1);/obj/item/clothing/shoes/boots/combat,
|
||||
prob(3);/obj/item/clothing/shoes/white,
|
||||
prob(2);/obj/item/clothing/gloves/latex,
|
||||
prob(5);/obj/item/clothing/gloves/white,
|
||||
@@ -730,7 +730,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(2);/obj/item/clothing/head/welding,
|
||||
prob(4);/obj/item/clothing/suit/storage/hazardvest,
|
||||
prob(2);/obj/item/clothing/under/overalls,
|
||||
prob(3);/obj/item/clothing/shoes/workboots,
|
||||
prob(3);/obj/item/clothing/shoes/boots/workboots,
|
||||
prob(1);/obj/item/clothing/shoes/magboots,
|
||||
prob(2);/obj/item/clothing/accessory/storage/black_vest,
|
||||
prob(2);/obj/item/clothing/accessory/storage/brown_vest,
|
||||
@@ -839,4 +839,60 @@ var/list/random_useful_
|
||||
random_junk_ -= /obj/item/trash/tray
|
||||
return pick(random_junk_)
|
||||
// Misc. actually useful stuff
|
||||
return get_random_useful_type()
|
||||
return get_random_useful_type()
|
||||
|
||||
/*
|
||||
Selects one spawn point out of a group of points with the same ID and asks it to generate its items
|
||||
*/
|
||||
var/list/multi_point_spawns
|
||||
|
||||
/obj/random_multi
|
||||
name = "random object spawn point"
|
||||
desc = "This item type is used to spawn random objects at round-start. Only one spawn point for a given group id is selected."
|
||||
icon = 'icons/misc/mark.dmi'
|
||||
icon_state = "x3"
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
var/id // Group id
|
||||
var/weight // Probability weight for this spawn point
|
||||
|
||||
/obj/random_multi/initialize()
|
||||
..()
|
||||
weight = max(1, round(weight))
|
||||
|
||||
if(!multi_point_spawns)
|
||||
multi_point_spawns = list()
|
||||
var/list/spawnpoints = multi_point_spawns[id]
|
||||
if(!spawnpoints)
|
||||
spawnpoints = list()
|
||||
multi_point_spawns[id] = spawnpoints
|
||||
spawnpoints[src] = weight
|
||||
|
||||
/obj/random_multi/Destroy()
|
||||
var/list/spawnpoints = multi_point_spawns[id]
|
||||
spawnpoints -= src
|
||||
if(!spawnpoints.len)
|
||||
multi_point_spawns -= id
|
||||
. = ..()
|
||||
|
||||
/obj/random_multi/proc/generate_items()
|
||||
return
|
||||
|
||||
/obj/random_multi/single_item
|
||||
var/item_path // Item type to spawn
|
||||
|
||||
/obj/random_multi/single_item/generate_items()
|
||||
new item_path(loc)
|
||||
|
||||
/hook/roundstart/proc/generate_multi_spawn_items()
|
||||
for(var/id in multi_point_spawns)
|
||||
var/list/spawn_points = multi_point_spawns[id]
|
||||
var/obj/random_multi/rm = pickweight(spawn_points)
|
||||
rm.generate_items()
|
||||
for(var/entry in spawn_points)
|
||||
qdel(entry)
|
||||
return 1
|
||||
|
||||
/obj/random_multi/single_item/captains_spare_id
|
||||
name = "Multi Point - Captain's Spare"
|
||||
id = "Captain's spare id"
|
||||
item_path = /obj/item/weapon/card/id/captains_spare
|
||||
@@ -65,8 +65,8 @@
|
||||
new /obj/item/clothing/head/helmet/swat(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/shoes/swat(src)
|
||||
new /obj/item/clothing/shoes/swat(src)
|
||||
new /obj/item/clothing/shoes/boots/swat(src)
|
||||
new /obj/item/clothing/shoes/boots/swat(src)
|
||||
new /obj/item/clothing/suit/armor/swat(src)
|
||||
new /obj/item/clothing/suit/armor/swat(src)
|
||||
new /obj/item/clothing/under/syndicate/tacticool(src)
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/emt(src)
|
||||
new /obj/item/device/radio/headset/headset_med/alt(src)
|
||||
new /obj/item/weapon/cartridge/medical(src)
|
||||
new /obj/item/weapon/storage/briefcase/inflatable(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/weapon/tank/emergency/oxygen/engi(src)
|
||||
new /obj/item/clothing/glasses/hud/health(src)
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
new /obj/item/clothing/under/rank/security2(src)
|
||||
new /obj/item/clothing/under/rank/security2(src)
|
||||
new /obj/item/clothing/under/rank/security2(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/head/soft/sec(src)
|
||||
new /obj/item/clothing/head/soft/sec(src)
|
||||
new /obj/item/clothing/head/soft/sec(src)
|
||||
@@ -190,8 +190,8 @@
|
||||
new /obj/item/clothing/shoes/sandal(src)
|
||||
new /obj/item/clothing/shoes/sandal(src)
|
||||
new /obj/item/clothing/shoes/sandal(src)
|
||||
new /obj/item/clothing/shoes/winterboots(src)
|
||||
new /obj/item/clothing/shoes/winterboots(src)
|
||||
new /obj/item/clothing/shoes/boots/winter(src)
|
||||
new /obj/item/clothing/shoes/boots/winter(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat(src)
|
||||
return
|
||||
@@ -294,9 +294,9 @@
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
|
||||
new /obj/item/clothing/shoes/workboots(src)
|
||||
new /obj/item/clothing/shoes/workboots(src)
|
||||
new /obj/item/clothing/shoes/workboots(src)
|
||||
new /obj/item/clothing/shoes/boots/workboots(src)
|
||||
new /obj/item/clothing/shoes/boots/workboots(src)
|
||||
new /obj/item/clothing/shoes/boots/workboots(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -564,7 +564,7 @@
|
||||
new /obj/item/weapon/storage/belt/security/tactical(src)
|
||||
if(prob(10))
|
||||
new /obj/item/clothing/mask/bandana/skull(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/under/pants/camo(src)
|
||||
return
|
||||
@@ -582,7 +582,7 @@
|
||||
new /obj/item/clothing/under/syndicate/combat(src)
|
||||
new /obj/item/device/radio/headset/ert/alt(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/clothing/shoes/swat(src)
|
||||
new /obj/item/clothing/shoes/boots/swat(src)
|
||||
new /obj/item/clothing/gloves/swat(src)
|
||||
new /obj/item/clothing/mask/balaclava/tactical(src)
|
||||
new /obj/item/clothing/mask/balaclava(src)
|
||||
|
||||
@@ -283,9 +283,9 @@
|
||||
/obj/structure/closet/crate/rcd
|
||||
name = "\improper RCD crate"
|
||||
desc = "A crate with rapid construction device."
|
||||
icon_state = "crate"
|
||||
icon_opened = "crateopen"
|
||||
icon_closed = "crate"
|
||||
icon_state = "engi_crate"
|
||||
icon_opened = "engi_crateopen"
|
||||
icon_closed = "engi_crate"
|
||||
|
||||
/obj/structure/closet/crate/rcd/New()
|
||||
..()
|
||||
@@ -427,6 +427,20 @@
|
||||
icon_opened = "hydrosecurecrateopen"
|
||||
icon_closed = "hydrosecurecrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/engineering
|
||||
desc = "A crate with a lock on it, painted in the scheme of the station's engineers."
|
||||
name = "secure engineering crate"
|
||||
icon_state = "engi_secure_crate"
|
||||
icon_opened = "engi_secure_crateopen"
|
||||
icon_closed = "engi_secure_crate"
|
||||
|
||||
/obj/structure/closet/crate/secure/science
|
||||
name = "secure science crate"
|
||||
desc = "A crate with a lock on it, painted in the scheme of the station's scientists."
|
||||
icon_state = "scisecurecrate"
|
||||
icon_opened = "scisecurecrateopen"
|
||||
icon_closed = "scisecurecrate"
|
||||
|
||||
/obj/structure/closet/crate/secure/bin
|
||||
name = "secure bin"
|
||||
desc = "A secure bin."
|
||||
@@ -499,6 +513,23 @@
|
||||
icon_opened = "largermetalopen"
|
||||
icon_closed = "largermetal"
|
||||
|
||||
/obj/structure/closet/crate/engineering
|
||||
name = "engineering crate"
|
||||
icon_state = "engi_crate"
|
||||
icon_opened = "engi_crateopen"
|
||||
icon_closed = "engi_crate"
|
||||
|
||||
/obj/structure/closet/crate/engineering/electrical
|
||||
icon_state = "engi_e_crate"
|
||||
icon_opened = "engi_crateopen"
|
||||
icon_closed = "engi_e_crate"
|
||||
|
||||
/obj/structure/closet/crate/science
|
||||
name = "science crate"
|
||||
icon_state = "scicrate"
|
||||
icon_opened = "scicrateopen"
|
||||
icon_closed = "scicrate"
|
||||
|
||||
/obj/structure/closet/crate/hydroponics
|
||||
name = "hydroponics crate"
|
||||
desc = "All you need to destroy those pesky weeds and pests."
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
/obj/structure/largecrate/animal/goat
|
||||
name = "goat crate"
|
||||
held_type = /mob/living/simple_animal/hostile/retaliate/goat
|
||||
held_type = /mob/living/simple_animal/retaliate/goat
|
||||
|
||||
/obj/structure/largecrate/animal/cat
|
||||
name = "cat carrier"
|
||||
|
||||
@@ -107,6 +107,16 @@
|
||||
airlock_type = "/highsecurity"
|
||||
glass = -1
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_voidcraft
|
||||
base_icon_state = "voidcraft"
|
||||
base_name = "voidcraft hatch"
|
||||
airlock_type = "/voidcraft"
|
||||
glass = -1
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_voidcraft/vertical
|
||||
base_icon_state = "voidcraft_vertical"
|
||||
airlock_type = "/voidcraft/vertical"
|
||||
|
||||
/obj/structure/door_assembly/multi_tile
|
||||
icon = 'icons/obj/doors/door_assembly2x1.dmi'
|
||||
dir = EAST
|
||||
|
||||
@@ -32,6 +32,19 @@
|
||||
..()
|
||||
icon_state = "tree_[rand(1, 6)]"
|
||||
|
||||
/obj/structure/flora/tree/sif
|
||||
name = "glowing tree"
|
||||
desc = "It's a tree, except this one seems quite alien. It glows a deep blue."
|
||||
icon = 'icons/obj/flora/deadtrees.dmi'
|
||||
icon_state = "tree_sif"
|
||||
|
||||
/obj/structure/flora/tree/sif/New()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/flora/tree/sif/update_icon()
|
||||
set_light(5, 1, "#33ccff")
|
||||
overlays.Cut()
|
||||
overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1))
|
||||
|
||||
//grass
|
||||
/obj/structure/flora/grass
|
||||
@@ -79,10 +92,6 @@
|
||||
icon = 'icons/obj/plants.dmi'
|
||||
icon_state = "plant-26"
|
||||
|
||||
/obj/structure/flora/pottedplant/xmas/New()
|
||||
..()
|
||||
icon_state = "plant-xmas"
|
||||
|
||||
|
||||
//newbushes
|
||||
|
||||
@@ -205,4 +214,149 @@
|
||||
name = "hanging skeleton model"
|
||||
icon = 'icons/obj/plants.dmi'
|
||||
icon_state = "hangskele"
|
||||
desc = "It's an anatomical model of a human skeletal system made of plaster."
|
||||
desc = "It's an anatomical model of a human skeletal system made of plaster."
|
||||
|
||||
|
||||
//potted plants credit: Flashkirby
|
||||
/obj/structure/flora/pottedplant
|
||||
name = "potted plant"
|
||||
desc = "Really brings the room together."
|
||||
icon = 'icons/obj/plants.dmi'
|
||||
icon_state = "plant-01"
|
||||
|
||||
/obj/structure/flora/pottedplant/large
|
||||
name = "large potted plant"
|
||||
desc = "This is a large plant. Three branches support pairs of waxy leaves."
|
||||
icon_state = "plant-26"
|
||||
|
||||
/obj/structure/flora/pottedplant/fern
|
||||
name = "potted fern"
|
||||
desc = "This is an ordinary looking fern. It looks like it could do with some water."
|
||||
icon_state = "plant-02"
|
||||
|
||||
/obj/structure/flora/pottedplant/overgrown
|
||||
name = "overgrown potted plants"
|
||||
desc = "This is an assortment of colourful plants. Some parts are overgrown."
|
||||
icon_state = "plant-03"
|
||||
|
||||
/obj/structure/flora/pottedplant/bamboo
|
||||
name = "potted bamboo"
|
||||
desc = "These are bamboo shoots. The tops looks like they've been cut short."
|
||||
icon_state = "plant-04"
|
||||
|
||||
/obj/structure/flora/pottedplant/largebush
|
||||
name = "large potted bush"
|
||||
desc = "This is a large bush. The leaves stick upwards in an odd fashion."
|
||||
icon_state = "plant-05"
|
||||
|
||||
/obj/structure/flora/pottedplant/thinbush
|
||||
name = "thin potted bush"
|
||||
desc = "This is a thin bush. It appears to be flowering."
|
||||
icon_state = "plant-06"
|
||||
|
||||
/obj/structure/flora/pottedplant/mysterious
|
||||
name = "mysterious potted bulbs"
|
||||
desc = "This is a mysterious looking plant. Touching the bulbs cause them to shrink."
|
||||
icon_state = "plant-07"
|
||||
|
||||
/obj/structure/flora/pottedplant/smalltree
|
||||
name = "small potted tree"
|
||||
desc = "This is a small tree. It is rather pleasant."
|
||||
icon_state = "plant-08"
|
||||
|
||||
/obj/structure/flora/pottedplant/unusual
|
||||
name = "unusual potted plant"
|
||||
desc = "This is an unusual plant. It's bulbous ends emit a soft blue light."
|
||||
icon_state = "plant-09"
|
||||
set_light(l_range = 1, l_power = 0.5, l_color = "#0000FF")
|
||||
|
||||
/obj/structure/flora/pottedplant/orientaltree
|
||||
name = "potted oriental tree"
|
||||
desc = "This is a rather oriental style tree. It's flowers are bright pink."
|
||||
icon_state = "plant-10"
|
||||
|
||||
/obj/structure/flora/pottedplant/smallcactus
|
||||
name = "small potted cactus"
|
||||
desc = "This is a small cactus. Its needles are sharp."
|
||||
icon_state = "plant-11"
|
||||
|
||||
/obj/structure/flora/pottedplant/tall
|
||||
name = "tall potted plant"
|
||||
desc = "This is a tall plant. Tiny pores line its surface."
|
||||
icon_state = "plant-12"
|
||||
|
||||
/obj/structure/flora/pottedplant/sticky
|
||||
name = "styicky potted plant"
|
||||
desc = "This is an odd plant. Its sticky leaves trap insects."
|
||||
icon_state = "plant-13"
|
||||
|
||||
/obj/structure/flora/pottedplant/smelly
|
||||
name = "smelly potted plant"
|
||||
desc = "This is some kind of tropical plant. It reeks of rotten eggs."
|
||||
icon_state = "plant-14"
|
||||
|
||||
/obj/structure/flora/pottedplant/small
|
||||
name = "small potted plant"
|
||||
desc = "This is a pot of assorted small flora. Some look familiar."
|
||||
icon_state = "plant-15"
|
||||
|
||||
/obj/structure/flora/pottedplant/aquatic
|
||||
name = "aquatic potted plant"
|
||||
desc = "This is apparently an aquatic plant. It's probably fake."
|
||||
icon_state = "plant-16"
|
||||
|
||||
/obj/structure/flora/pottedplant/shoot
|
||||
name = "small potted shoot"
|
||||
desc = "This is a small shoot. It still needs time to grow."
|
||||
icon_state = "plant-17"
|
||||
|
||||
/obj/structure/flora/pottedplant/flower
|
||||
name = "potted flower"
|
||||
desc = "This is a slim plant. Sweet smelling flowers are supported by spindly stems."
|
||||
icon_state = "plant-18"
|
||||
|
||||
/obj/structure/flora/pottedplant/crystal
|
||||
name = "crystalline potted plant"
|
||||
desc = "These are rather cubic plants. Odd crystal formations grow on the end."
|
||||
icon_state = "plant-19"
|
||||
|
||||
/obj/structure/flora/pottedplant/subterranean
|
||||
name = "subterranean potted plant"
|
||||
desc = "This is a subterranean plant. It's bulbous ends glow faintly."
|
||||
icon_state = "plant-20"
|
||||
set_light(l_range = 1, l_power = 0.5, l_color = "#FF6633")
|
||||
|
||||
/obj/structure/flora/pottedplant/minitree
|
||||
name = "potted tree"
|
||||
desc = "This is a miniature tree. Apparently it was grown to 1/5 scale."
|
||||
icon_state = "plant-21"
|
||||
|
||||
/obj/structure/flora/pottedplant/stoutbush
|
||||
name = "stout potted bush"
|
||||
desc = "This is a stout bush. Its leaves point up and outwards."
|
||||
icon_state = "plant-22"
|
||||
|
||||
/obj/structure/flora/pottedplant/drooping
|
||||
name = "drooping potted plant"
|
||||
desc = "This is a small plant. The drooping leaves make it look like its wilted."
|
||||
icon_state = "plant-23"
|
||||
|
||||
/obj/structure/flora/pottedplant/tropical
|
||||
name = "tropical potted plant"
|
||||
desc = "This is some kind of tropical plant. It hasn't begun to flower yet."
|
||||
icon_state = "plant-24"
|
||||
|
||||
/obj/structure/flora/pottedplant/dead
|
||||
name = "dead potted plant"
|
||||
desc = "This is the dried up remains of a dead plant. Someone should replace it."
|
||||
icon_state = "plant-25"
|
||||
|
||||
/obj/structure/flora/pottedplant/decorative
|
||||
name = "decorative potted plant"
|
||||
desc = "This is a decorative shrub. It's been trimmed into the shape of an apple."
|
||||
icon_state = "applebush"
|
||||
|
||||
/obj/structure/flora/pottedplant/xmas
|
||||
name = "small christmas tree"
|
||||
desc = "This is a tiny well lit decorative christmas tree."
|
||||
icon_state = "plant-xmas"
|
||||
@@ -34,6 +34,11 @@
|
||||
if(locate(/obj/structure/lattice, get_step(src, dir)))
|
||||
L = locate(/obj/structure/lattice, get_step(src, dir))
|
||||
L.updateOverlays(src.loc)
|
||||
if(istype(loc, /turf/simulated/open))
|
||||
var/turf/simulated/open/O = loc
|
||||
spawn(1)
|
||||
if(O) // If we built a new floor with the lattice, the open turf won't exist anymore.
|
||||
O.update() // This lattice may be supporting things on top of it. If it's being deleted, they need to fall down.
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/ex_act(severity)
|
||||
|
||||
@@ -122,6 +122,108 @@
|
||||
desc = "A warning sign which reads 'NO SMOKING'."
|
||||
icon_state = "nosmoking2"
|
||||
|
||||
/obj/structure/sign/warning
|
||||
name = "\improper WARNING"
|
||||
icon_state = "securearea"
|
||||
|
||||
/obj/structure/sign/warning/New()
|
||||
..()
|
||||
desc = "A warning sign which reads '[name]'."
|
||||
|
||||
/obj/structure/sign/warning/airlock
|
||||
name = "\improper EXTERNAL AIRLOCK"
|
||||
icon_state = "doors"
|
||||
|
||||
/obj/structure/sign/warning/biohazard
|
||||
name = "\improper BIOHAZARD"
|
||||
icon_state = "bio"
|
||||
|
||||
/obj/structure/sign/warning/bomb_range
|
||||
name = "\improper BOMB RANGE"
|
||||
icon_state = "blast"
|
||||
|
||||
/obj/structure/sign/warning/caution
|
||||
name = "\improper CAUTION"
|
||||
|
||||
/obj/structure/sign/warning/compressed_gas
|
||||
name = "\improper COMPRESSED GAS"
|
||||
icon_state = "hikpa"
|
||||
|
||||
/obj/structure/sign/warning/deathsposal
|
||||
name = "\improper DISPOSAL LEADS TO SPACE"
|
||||
icon_state = "deathsposal"
|
||||
|
||||
/obj/structure/sign/warning/docking_area
|
||||
name = "\improper KEEP CLEAR: DOCKING AREA"
|
||||
|
||||
/obj/structure/sign/warning/engineering_access
|
||||
name = "\improper ENGINEERING ACCESS"
|
||||
|
||||
/obj/structure/sign/warning/fire
|
||||
name = "\improper DANGER: FIRE"
|
||||
icon_state = "fire"
|
||||
|
||||
/obj/structure/sign/warning/high_voltage
|
||||
name = "\improper HIGH VOLTAGE"
|
||||
icon_state = "shock"
|
||||
|
||||
/obj/structure/sign/warning/hot_exhaust
|
||||
name = "\improper HOT EXHAUST"
|
||||
icon_state = "fire"
|
||||
|
||||
/obj/structure/sign/warning/internals_required
|
||||
name = "\improper INTERNALS REQUIRED"
|
||||
|
||||
/obj/structure/sign/warning/lethal_turrets
|
||||
name = "\improper LETHAL TURRETS"
|
||||
icon_state = "turrets"
|
||||
|
||||
/obj/structure/sign/warning/lethal_turrets/New()
|
||||
..()
|
||||
desc += " Enter at own risk!."
|
||||
|
||||
/obj/structure/sign/warning/mail_delivery
|
||||
name = "\improper MAIL DELIVERY"
|
||||
|
||||
/obj/structure/sign/warning/moving_parts
|
||||
name = "\improper MOVING PARTS"
|
||||
|
||||
/obj/structure/sign/warning/nosmoking_1
|
||||
name = "\improper NO SMOKING"
|
||||
icon_state = "nosmoking"
|
||||
|
||||
/obj/structure/sign/warning/nosmoking_2
|
||||
name = "\improper NO SMOKING"
|
||||
icon_state = "nosmoking2"
|
||||
|
||||
/obj/structure/sign/warning/pods
|
||||
name = "\improper ESCAPE PODS"
|
||||
icon_state = "pods"
|
||||
|
||||
/obj/structure/sign/warning/radioactive
|
||||
name = "\improper RADIOACTIVE AREA"
|
||||
icon_state = "radiation"
|
||||
|
||||
/obj/structure/sign/warning/secure_area
|
||||
name = "\improper SECURE AREA"
|
||||
|
||||
/obj/structure/sign/warning/secure_area/armory
|
||||
name = "\improper ARMORY"
|
||||
|
||||
/obj/structure/sign/warning/server_room
|
||||
name = "\improper SERVER ROOM"
|
||||
|
||||
/obj/structure/sign/warning/siphon_valve
|
||||
name = "\improper SIPHON VALVE"
|
||||
|
||||
/obj/structure/sign/warning/vacuum
|
||||
name = "\improper HARD VACUUM AHEAD"
|
||||
icon_state = "space"
|
||||
|
||||
/obj/structure/sign/warning/vent_port
|
||||
name = "\improper EJECTION/VENTING PORT"
|
||||
|
||||
|
||||
/obj/structure/sign/redcross
|
||||
name = "medbay"
|
||||
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
user << "<span class='notice'>\The [src] already has someone buckled to it.</span>"
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] attempts to buckle [affecting] into \the [src]!</span>")
|
||||
if(do_after(user, 20))
|
||||
if(do_after(user, 20, G.affecting))
|
||||
affecting.loc = loc
|
||||
spawn(0)
|
||||
if(buckle_mob(affecting))
|
||||
|
||||
@@ -18,8 +18,9 @@
|
||||
|
||||
/obj/structure/toilet/attack_hand(mob/living/user as mob)
|
||||
if(swirlie)
|
||||
usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
usr.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie.name]'s head!</span>", "<span class='notice'>You slam the toilet seat onto [swirlie.name]'s head!</span>", "You hear reverberating porcelain.")
|
||||
swirlie.adjustBruteLoss(8)
|
||||
swirlie.adjustBruteLoss(5)
|
||||
return
|
||||
|
||||
if(cistern && !open)
|
||||
@@ -53,6 +54,7 @@
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
var/obj/item/weapon/grab/G = I
|
||||
|
||||
if(isliving(G.affecting))
|
||||
@@ -65,14 +67,14 @@
|
||||
if(open && !swirlie)
|
||||
user.visible_message("<span class='danger'>[user] starts to give [GM.name] a swirlie!</span>", "<span class='notice'>You start to give [GM.name] a swirlie!</span>")
|
||||
swirlie = GM
|
||||
if(do_after(user, 30, 5, 0))
|
||||
if(do_after(user, 30, GM))
|
||||
user.visible_message("<span class='danger'>[user] gives [GM.name] a swirlie!</span>", "<span class='notice'>You give [GM.name] a swirlie!</span>", "You hear a toilet flushing.")
|
||||
if(!GM.internal)
|
||||
GM.adjustOxyLoss(5)
|
||||
swirlie = null
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] slams [GM.name] into the [src]!</span>", "<span class='notice'>You slam [GM.name] into the [src]!</span>")
|
||||
GM.adjustBruteLoss(8)
|
||||
GM.adjustBruteLoss(5)
|
||||
else
|
||||
user << "<span class='notice'>You need a tighter grip.</span>"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user