mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Merge resolution.
This commit is contained in:
@@ -786,7 +786,6 @@
|
||||
#include "code\modules\clothing\masks\breath.dm"
|
||||
#include "code\modules\clothing\masks\gasmask.dm"
|
||||
#include "code\modules\clothing\masks\miscellaneous.dm"
|
||||
#include "code\modules\clothing\masks\voice.dm"
|
||||
#include "code\modules\clothing\shoes\colour.dm"
|
||||
#include "code\modules\clothing\shoes\magboots.dm"
|
||||
#include "code\modules\clothing\shoes\miscellaneous.dm"
|
||||
@@ -796,26 +795,6 @@
|
||||
#include "code\modules\clothing\spacesuits\miscellaneous.dm"
|
||||
#include "code\modules\clothing\spacesuits\spacesuits.dm"
|
||||
#include "code\modules\clothing\spacesuits\syndi.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\rig.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\rig_wiring.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\combat.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\computer.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\modules.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\ninja.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\utility.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\modules\vision.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\suits\alien.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\suits\combat.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\suits\ert.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\suits\light.dm"
|
||||
#include "code\modules\clothing\spacesuits\rig\suits\station.dm"
|
||||
#include "code\modules\clothing\spacesuits\void\merc.dm"
|
||||
#include "code\modules\clothing\spacesuits\void\station.dm"
|
||||
#include "code\modules\clothing\spacesuits\void\void.dm"
|
||||
#include "code\modules\clothing\spacesuits\void\wizard.dm"
|
||||
#include "code\modules\clothing\suits\alien.dm"
|
||||
#include "code\modules\clothing\suits\armor.dm"
|
||||
#include "code\modules\clothing\suits\bio.dm"
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
MAP_ICON_TYPE: 0
|
||||
AUTO_FILE_DIR: OFF
|
||||
*/
|
||||
// END_INTERNALS
|
||||
// END_INTERNALS
|
||||
@@ -27,6 +27,8 @@
|
||||
active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP
|
||||
var/last_power_draw = 0
|
||||
|
||||
connect_types = list(1,2,3) //connects to regular, supply and scrubbers pipes
|
||||
|
||||
var/on = 0
|
||||
var/pump_direction = 1 //0 = siphoning, 1 = releasing
|
||||
|
||||
@@ -62,7 +64,7 @@
|
||||
return
|
||||
|
||||
overlays.Cut()
|
||||
|
||||
|
||||
var/vent_icon = "vent"
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -71,7 +73,7 @@
|
||||
|
||||
if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
vent_icon += "h"
|
||||
|
||||
|
||||
if(!powered())
|
||||
vent_icon += "off"
|
||||
else
|
||||
@@ -88,8 +90,14 @@
|
||||
if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe))
|
||||
return
|
||||
else
|
||||
add_underlay(T, node1, turn(dir, -180))
|
||||
add_underlay(T, node2, dir)
|
||||
if (node1)
|
||||
add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type)
|
||||
else
|
||||
add_underlay(T, node1, turn(dir, -180))
|
||||
if (node2)
|
||||
add_underlay(T, node2, dir, node2.icon_connect_type)
|
||||
else
|
||||
add_underlay(T, node2, dir)
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i)
|
||||
update_icon()
|
||||
@@ -97,7 +105,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/process()
|
||||
..()
|
||||
|
||||
|
||||
if(stat & (NOPOWER|BROKEN) || !on)
|
||||
update_use_power(0) //usually we get here because a player turned a pump off - definitely want to update.
|
||||
last_power_draw = 0
|
||||
@@ -107,19 +115,19 @@
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
var/power_draw = -1
|
||||
|
||||
|
||||
//Figure out the target pressure difference
|
||||
var/pressure_delta = get_pressure_delta(environment)
|
||||
|
||||
if(pressure_delta > 0.5)
|
||||
if(pump_direction) //internal -> external
|
||||
if(pump_direction) //internal -> external
|
||||
if (node1 && (environment.temperature || air1.temperature))
|
||||
var/output_volume = environment.volume * environment.group_multiplier
|
||||
var/air_temperature = environment.temperature? environment.temperature : air1.temperature
|
||||
var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
|
||||
power_draw = pump_gas(src, air1, environment, transfer_moles, active_power_usage)
|
||||
|
||||
|
||||
if(power_draw >= 0 && network1)
|
||||
network1.update = 1
|
||||
else //external -> internal
|
||||
@@ -127,15 +135,15 @@
|
||||
var/output_volume = air2.volume + (network2? network2.volume : 0)
|
||||
var/air_temperature = air2.temperature? air2.temperature : environment.temperature
|
||||
var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
|
||||
//limit flow rate from turfs
|
||||
transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here
|
||||
|
||||
|
||||
power_draw = pump_gas(src, environment, air2, transfer_moles, active_power_usage)
|
||||
|
||||
|
||||
if(power_draw >= 0 && network2)
|
||||
network2.update = 1
|
||||
|
||||
|
||||
if (power_draw < 0)
|
||||
last_power_draw = 0
|
||||
last_flow_rate = 0
|
||||
@@ -149,7 +157,7 @@
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment)
|
||||
var/pressure_delta = DEFAULT_PRESSURE_DELTA
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
|
||||
|
||||
if(pump_direction) //internal -> external
|
||||
if(pressure_checks & PRESSURE_CHECK_EXTERNAL)
|
||||
pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here
|
||||
@@ -160,9 +168,9 @@
|
||||
pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here
|
||||
if(pressure_checks & PRESSURE_CHECK_OUTPUT)
|
||||
pressure_delta = min(pressure_delta, output_pressure_max - air2.return_pressure()) //increasing the pressure here
|
||||
|
||||
|
||||
return pressure_delta
|
||||
|
||||
|
||||
|
||||
//Radio remote control
|
||||
|
||||
@@ -204,6 +212,7 @@
|
||||
if(..(user, 1))
|
||||
user << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W"
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/power_change()
|
||||
var/old_stat = stat
|
||||
..()
|
||||
|
||||
@@ -292,8 +292,12 @@ mob/living/parasite/meme/verb/Agony()
|
||||
|
||||
spawn
|
||||
// backup the host incase we switch hosts after using the verb
|
||||
var/mob/host = src.host
|
||||
var/mob/living/carbon/host = src.host
|
||||
|
||||
if (host.species && (host.species.flags & NO_PAIN))
|
||||
usr << "Nothing seems to happen."
|
||||
return
|
||||
|
||||
host.paralysis = max(host.paralysis, 2)
|
||||
|
||||
host.flash_weak_pain()
|
||||
|
||||
@@ -183,12 +183,16 @@ var/list/alldepartments = list("Central Command")
|
||||
|
||||
var/msg = "\blue <b><font color='#006100'>CENTCOMM FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;CentcommFaxReply=\ref[Sender];originfax=\ref[originfax]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>"
|
||||
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender)
|
||||
var/msg = "\blue <b><font color='#1F66A0'>SOL GOVERNMENT FAX: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;SolGovFaxReply=\ref[Sender];originfax=\ref[originfax]'>RPLY</a>)</b>: Receiving '[sentname]' via secure connection ... <a href='?_src_=holder;CentcommFaxView=\ref[sent]'>view message</a>"
|
||||
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
|
||||
proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt)
|
||||
|
||||
@@ -290,9 +290,9 @@ datum/controller/vote
|
||||
var/admin = 0
|
||||
var/trialmin = 0
|
||||
if(C.holder)
|
||||
admin = 1
|
||||
if(C.holder.rights & R_ADMIN)
|
||||
trialmin = 1
|
||||
admin = 1
|
||||
trialmin = 1 // don't know why we use both of these it's really weird, but I'm 2 lasy to refactor this all to use just admin.
|
||||
voting |= C
|
||||
|
||||
. = "<html><head><title>Voting Panel</title></head><body>"
|
||||
|
||||
@@ -450,7 +450,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Wooden planks crate"
|
||||
group = "Engineering"
|
||||
|
||||
|
||||
/datum/supply_packs/plastic50
|
||||
name = "50 plastic sheets"
|
||||
contains = list(/obj/item/stack/sheet/mineral/plastic)
|
||||
@@ -980,7 +980,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/obj/item/clothing/under/rank/mailman,
|
||||
/obj/item/clothing/under/dress/dress_saloon,
|
||||
/obj/item/clothing/suit/suspenders,
|
||||
/obj/item/clothing/suit/storage/labcoat/mad,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/mad,
|
||||
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit,
|
||||
/obj/item/clothing/under/schoolgirl,
|
||||
/obj/item/clothing/under/owl,
|
||||
@@ -1003,7 +1003,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/datum/supply_packs/formal_wear
|
||||
contains = list(/obj/item/clothing/head/bowler,
|
||||
/obj/item/clothing/head/that,
|
||||
/obj/item/clothing/suit/storage/lawyer/bluejacket,
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket,
|
||||
/obj/item/clothing/suit/storage/lawyer/purpjacket,
|
||||
/obj/item/clothing/under/suit_jacket,
|
||||
/obj/item/clothing/under/suit_jacket/female,
|
||||
|
||||
@@ -39,6 +39,9 @@
|
||||
data_core.security += R
|
||||
return R
|
||||
|
||||
/proc/find_security_record(field, value)
|
||||
return find_record(field, value, data_core.security)
|
||||
|
||||
/proc/find_record(field, value, list/L)
|
||||
for(var/datum/data/record/R in L)
|
||||
if(R.fields[field] == value)
|
||||
|
||||
@@ -104,9 +104,13 @@ var/list/sacrificed = list()
|
||||
if(M.stat==2)
|
||||
continue
|
||||
usr.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!")
|
||||
M.visible_message("\red [M] writhes in pain as the markings below \him glow a bloody red.", \
|
||||
"\red AAAAAAHHHH!", \
|
||||
"\red You hear an anguished scream.")
|
||||
|
||||
if (M.species && (M.species.flags & NO_PAIN))
|
||||
M.visible_message("\red The markings below [M] glow a bloody red.")
|
||||
else
|
||||
M.visible_message("\red [M] writhes in pain as the markings below \him glow a bloody red.", \
|
||||
"\red AAAAAAHHHH!", \
|
||||
"\red You hear an anguished scream.")
|
||||
if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, "cultist"))//putting jobban check here because is_convertable uses mind as argument
|
||||
|
||||
// Mostly for the benefit of those who resist, but it makes sense for even those who join to have some.. effect.
|
||||
|
||||
@@ -34,7 +34,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
|
||||
|
||||
var/sound/announce_sound = (ticker.current_state <= GAME_STATE_SETTING_UP)? null : sound('sound/misc/boatswain.ogg', volume=20)
|
||||
captain_announcement.Announce("All hands, Captain [H.real_name] on deck!", new_sound=announce_sound)
|
||||
|
||||
|
||||
@@ -352,7 +352,7 @@
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/big(H), slot_glasses)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/cmo(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
if(H.backbag == 1)
|
||||
@@ -62,13 +62,13 @@
|
||||
switch(H.mind.role_alt_title)
|
||||
if("Emergency Physician")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/fr_jacket(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
|
||||
if("Surgeon")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/blue(H), slot_head)
|
||||
if("Virologist")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
|
||||
switch(H.backbag)
|
||||
@@ -77,7 +77,7 @@
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if("Medical Doctor")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
if("Nurse")
|
||||
if(H.gender == FEMALE)
|
||||
if(prob(50))
|
||||
@@ -89,7 +89,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
|
||||
@@ -123,7 +123,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/chemist(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
|
||||
switch(H.backbag)
|
||||
if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
|
||||
@@ -153,7 +153,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/genetics(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
switch(H.backbag)
|
||||
if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
@@ -188,7 +188,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/viro(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/virologist(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
@@ -224,7 +224,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
|
||||
if(H.backbag == 1)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
|
||||
switch(H.backbag)
|
||||
if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
@@ -58,7 +58,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
||||
switch(H.backbag)
|
||||
if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||
@@ -89,7 +89,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
|
||||
switch(H.backbag)
|
||||
if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
|
||||
@@ -122,7 +122,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
|
||||
// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand)
|
||||
if(H.backbag == 1)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
flag = CYBORG
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 0
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "your laws and the AI" //Nodrak
|
||||
selection_color = "#ddffdd"
|
||||
|
||||
@@ -348,7 +348,7 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
|
||||
|
||||
if(!H) return 0
|
||||
if(!H) return null
|
||||
|
||||
var/datum/job/job = GetJob(rank)
|
||||
var/list/spawn_in_storage = list()
|
||||
@@ -445,8 +445,7 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
switch(rank)
|
||||
if("Cyborg")
|
||||
H.Robotize()
|
||||
return 1
|
||||
return H.Robotize()
|
||||
if("AI","Clown") //don't need bag preference stuff!
|
||||
else
|
||||
switch(H.backbag) //BS12 EDIT
|
||||
@@ -525,7 +524,7 @@ var/global/datum/controller/occupations/job_master
|
||||
H.hud_updateflag |= (1 << ID_HUD)
|
||||
H.hud_updateflag |= (1 << IMPLOYAL_HUD)
|
||||
H.hud_updateflag |= (1 << SPECIALROLE_HUD)
|
||||
return 1
|
||||
return H
|
||||
|
||||
|
||||
proc/spawnId(var/mob/living/carbon/human/H, rank, title)
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
/datum/autolathe/recipe/rglass
|
||||
name = "reinforced glass sheets"
|
||||
path = /obj/item/stack/sheet/rglass
|
||||
path = /obj/item/stack/sheet/glass/reinforced
|
||||
category = "General"
|
||||
is_stack = 1
|
||||
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc )
|
||||
A.amount = 5
|
||||
|
||||
if(istype(P, /obj/item/stack/sheet/rglass))
|
||||
var/obj/item/stack/sheet/rglass/RG = P
|
||||
if(istype(P, /obj/item/stack/sheet/glass/reinforced))
|
||||
var/obj/item/stack/sheet/glass/reinforced/RG = P
|
||||
if (RG.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two sheets of glass to put in the glass panel.</span>"
|
||||
return
|
||||
@@ -161,7 +161,7 @@
|
||||
icon_state = "3b"
|
||||
else
|
||||
icon_state = "3"
|
||||
new /obj/item/stack/sheet/rglass( loc, 2 )
|
||||
new /obj/item/stack/sheet/glass/reinforced( loc, 2 )
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
@@ -216,4 +216,4 @@
|
||||
user << "\red <b>ERROR</b>: \black Unable to locate artificial intelligence."
|
||||
return
|
||||
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
* ~ Zuhayr
|
||||
*/
|
||||
|
||||
//Used for logging people entering cryosleep and important items they are carrying.
|
||||
var/global/list/frozen_crew = list()
|
||||
var/global/list/frozen_items = list()
|
||||
|
||||
//Main cryopod console.
|
||||
|
||||
@@ -20,6 +17,25 @@ var/global/list/frozen_items = list()
|
||||
circuit = "/obj/item/weapon/circuitboard/cryopodcontrol"
|
||||
var/mode = null
|
||||
|
||||
//Used for logging people entering cryosleep and important items they are carrying.
|
||||
var/list/frozen_crew = list()
|
||||
var/list/frozen_items = list()
|
||||
|
||||
var/storage_type = "crewmembers"
|
||||
var/storage_name = "Cryogenic Oversight Control"
|
||||
var/allow_items = 1
|
||||
|
||||
/obj/machinery/computer/cryopod/robot
|
||||
name = "robotic storage console"
|
||||
desc = "An interface between crew and the robotic storage systems"
|
||||
icon = 'icons/obj/robot_storage.dmi'
|
||||
icon_state = "console"
|
||||
circuit = "/obj/item/weapon/circuitboard/robotstoragecontrol"
|
||||
|
||||
storage_type = "cyborgs"
|
||||
storage_name = "Robotic Storage Control"
|
||||
allow_items = 0
|
||||
|
||||
/obj/machinery/computer/cryopod/attack_ai()
|
||||
src.attack_hand()
|
||||
|
||||
@@ -35,12 +51,13 @@ var/global/list/frozen_items = list()
|
||||
if (!( ticker ))
|
||||
return
|
||||
|
||||
dat += "<hr/><br/><b>Cryogenic Oversight Control</b><br/>"
|
||||
dat += "<hr/><br/><b>[storage_name]</b><br/>"
|
||||
dat += "<i>Welcome, [user.real_name].</i><br/><br/><hr/>"
|
||||
dat += "<a href='?src=\ref[src];log=1'>View storage log</a>.<br>"
|
||||
dat += "<a href='?src=\ref[src];view=1'>View objects</a>.<br>"
|
||||
dat += "<a href='?src=\ref[src];item=1'>Recover object</a>.<br>"
|
||||
dat += "<a href='?src=\ref[src];allitems=1'>Recover all objects</a>.<br>"
|
||||
if(allow_items)
|
||||
dat += "<a href='?src=\ref[src];view=1'>View objects</a>.<br>"
|
||||
dat += "<a href='?src=\ref[src];item=1'>Recover object</a>.<br>"
|
||||
dat += "<a href='?src=\ref[src];allitems=1'>Recover all objects</a>.<br>"
|
||||
|
||||
user << browse(dat, "window=cryopod_console")
|
||||
onclose(user, "cryopod_console")
|
||||
@@ -56,7 +73,7 @@ var/global/list/frozen_items = list()
|
||||
|
||||
if(href_list["log"])
|
||||
|
||||
var/dat = "<b>Recently stored crewmembers</b><br/><hr/><br/>"
|
||||
var/dat = "<b>Recently stored [storage_type]</b><br/><hr/><br/>"
|
||||
for(var/person in frozen_crew)
|
||||
dat += "[person]<br/>"
|
||||
dat += "<hr/>"
|
||||
@@ -64,6 +81,7 @@ var/global/list/frozen_items = list()
|
||||
user << browse(dat, "window=cryolog")
|
||||
|
||||
if(href_list["view"])
|
||||
if(!allow_items) return
|
||||
|
||||
var/dat = "<b>Recently stored objects</b><br/><hr/><br/>"
|
||||
for(var/obj/item/I in frozen_items)
|
||||
@@ -73,6 +91,7 @@ var/global/list/frozen_items = list()
|
||||
user << browse(dat, "window=cryoitems")
|
||||
|
||||
else if(href_list["item"])
|
||||
if(!allow_items) return
|
||||
|
||||
if(frozen_items.len == 0)
|
||||
user << "\blue There is nothing to recover from storage."
|
||||
@@ -92,6 +111,7 @@ var/global/list/frozen_items = list()
|
||||
frozen_items -= I
|
||||
|
||||
else if(href_list["allitems"])
|
||||
if(!allow_items) return
|
||||
|
||||
if(frozen_items.len == 0)
|
||||
user << "\blue There is nothing to recover from storage."
|
||||
@@ -111,6 +131,11 @@ var/global/list/frozen_items = list()
|
||||
build_path = "/obj/machinery/computer/cryopod"
|
||||
origin_tech = "programming=3"
|
||||
|
||||
/obj/item/weapon/circuitboard/robotstoragecontrol
|
||||
name = "Circuit board (Robotic Storage Console)"
|
||||
build_path = "/obj/machinery/computer/cryopod/robot"
|
||||
origin_tech = "programming=3"
|
||||
|
||||
//Decorative structures to go alongside cryopods.
|
||||
/obj/structure/cryofeed
|
||||
|
||||
@@ -143,12 +168,23 @@ var/global/list/frozen_items = list()
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
var/base_icon_state = "body_scanner_0"
|
||||
var/occupied_icon_state = "body_scanner_1"
|
||||
var/on_store_message = "has entered long-term storage."
|
||||
var/on_store_name = "Cryogenic Oversight"
|
||||
var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward."
|
||||
var/allow_occupant_types = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
var/disallow_occupant_types = list()
|
||||
|
||||
var/mob/occupant = null // Person waiting to be despawned.
|
||||
var/orient_right = null // Flips the sprite.
|
||||
var/time_till_despawn = 18000 // 30 minutes-ish safe period before being despawned.
|
||||
var/time_entered = 0 // Used to keep track of the safe period.
|
||||
var/obj/item/device/radio/intercom/announce //
|
||||
|
||||
var/obj/machinery/computer/cryopod/control_computer
|
||||
var/last_no_computer_message = 0
|
||||
|
||||
// These items are preserved when the process() despawn proc occurs.
|
||||
var/list/preserve_items = list(
|
||||
/obj/item/weapon/hand_tele,
|
||||
@@ -169,16 +205,64 @@ var/global/list/frozen_items = list()
|
||||
orient_right = 1
|
||||
icon_state = "body_scanner_0-r"
|
||||
|
||||
/obj/machinery/cryopod/New()
|
||||
/obj/machinery/cryopod/robot
|
||||
name = "robotic storage unit"
|
||||
desc = "A storage unit for robots."
|
||||
icon = 'icons/obj/robot_storage.dmi'
|
||||
icon_state = "pod_0"
|
||||
base_icon_state = "pod_0"
|
||||
occupied_icon_state = "pod_1"
|
||||
on_store_message = "has entered robotic storage."
|
||||
on_store_name = "Robotic Storage Oversight"
|
||||
on_enter_occupant_message = "The storage unit broadcasts a sleep signal to you. Your systems start to shut down, and you enter low-power mode."
|
||||
allow_occupant_types = list(/mob/living/silicon/robot)
|
||||
disallow_occupant_types = list(/mob/living/silicon/robot/drone)
|
||||
|
||||
/obj/machinery/cryopod/robot/right
|
||||
orient_right = 1
|
||||
icon_state = "pod_0-r"
|
||||
|
||||
/obj/machinery/cryopod/New()
|
||||
announce = new /obj/item/device/radio/intercom(src)
|
||||
|
||||
if(orient_right)
|
||||
icon_state = "body_scanner_0-r"
|
||||
icon_state = "[base_icon_state]-r"
|
||||
else
|
||||
icon_state = "body_scanner_0"
|
||||
icon_state = base_icon_state
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/cryopod/initialize()
|
||||
..()
|
||||
|
||||
find_control_computer()
|
||||
|
||||
/obj/machinery/cryopod/proc/find_control_computer(urgent=0)
|
||||
control_computer = locate(/obj/machinery/computer/cryopod) in src.loc.loc
|
||||
|
||||
// Don't send messages unless we *need* the computer, and less than five minutes have passed since last time we messaged
|
||||
if(!control_computer && urgent && last_no_computer_message + 5*60*10 < world.time)
|
||||
log_admin("Cryopod in [src.loc.loc] could not find control computer!")
|
||||
message_admins("Cryopod in [src.loc.loc] could not find control computer!")
|
||||
last_no_computer_message = world.time
|
||||
|
||||
return control_computer != null
|
||||
|
||||
/obj/machinery/cryopod/proc/check_occupant_allowed(mob/M)
|
||||
var/correct_type = 0
|
||||
for(var/type in allow_occupant_types)
|
||||
if(istype(M, type))
|
||||
correct_type = 1
|
||||
break
|
||||
|
||||
if(!correct_type) return 0
|
||||
|
||||
for(var/type in disallow_occupant_types)
|
||||
if(istype(M, type))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
//Lifted from Unity stasis.dm and refactored. ~Zuhayr
|
||||
/obj/machinery/cryopod/process()
|
||||
if(occupant)
|
||||
@@ -187,9 +271,18 @@ var/global/list/frozen_items = list()
|
||||
return
|
||||
|
||||
if(!occupant.client && occupant.stat<2) //Occupant is living and has no client.
|
||||
if(!control_computer)
|
||||
if(!find_control_computer(urgent=1))
|
||||
return
|
||||
|
||||
//Drop all items into the pod.
|
||||
for(var/obj/item/W in occupant)
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
if(istype(occupant, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = occupant
|
||||
if(R.mmi == W)
|
||||
del(W)
|
||||
continue
|
||||
occupant.drop_from_inventory(W)
|
||||
W.loc = src
|
||||
|
||||
@@ -215,8 +308,11 @@ var/global/list/frozen_items = list()
|
||||
if(!preserve)
|
||||
del(W)
|
||||
else
|
||||
frozen_items += W
|
||||
W.loc = null
|
||||
if(control_computer && control_computer.allow_items)
|
||||
control_computer.frozen_items += W
|
||||
W.loc = null
|
||||
else
|
||||
W.loc = src.loc
|
||||
|
||||
//Update any existing objectives involving this mob.
|
||||
for(var/datum/objective/O in all_objectives)
|
||||
@@ -265,9 +361,9 @@ var/global/list/frozen_items = list()
|
||||
del(G)
|
||||
|
||||
if(orient_right)
|
||||
icon_state = "body_scanner_0-r"
|
||||
icon_state = "[base_icon_state]-r"
|
||||
else
|
||||
icon_state = "body_scanner_0"
|
||||
icon_state = base_icon_state
|
||||
|
||||
//TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags?
|
||||
|
||||
@@ -275,10 +371,10 @@ var/global/list/frozen_items = list()
|
||||
occupant.ckey = null
|
||||
|
||||
//Make an announcement and log the person entering storage.
|
||||
frozen_crew += "[occupant.real_name]"
|
||||
control_computer.frozen_crew += "[occupant.real_name]"
|
||||
|
||||
announce.autosay("[occupant.real_name] has entered long-term storage.", "Cryogenic Oversight")
|
||||
visible_message("\blue The crypod hums and hisses as it moves [occupant.real_name] into storage.", 3)
|
||||
announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
|
||||
visible_message("\blue \The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3)
|
||||
|
||||
// Delete the mob.
|
||||
del(occupant)
|
||||
@@ -293,17 +389,20 @@ var/global/list/frozen_items = list()
|
||||
if(istype(G, /obj/item/weapon/grab))
|
||||
|
||||
if(occupant)
|
||||
user << "\blue The cryo pod is in use."
|
||||
user << "\blue \The [src] is in use."
|
||||
return
|
||||
|
||||
if(!ismob(G:affecting))
|
||||
return
|
||||
|
||||
if(!check_occupant_allowed(G:affecting))
|
||||
return
|
||||
|
||||
var/willing = null //We don't want to allow people to be forced into despawning.
|
||||
var/mob/M = G:affecting
|
||||
|
||||
if(M.client)
|
||||
if(alert(M,"Would you like to enter cryosleep?",,"Yes","No") == "Yes")
|
||||
if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes")
|
||||
if(!M || !G || !G:affecting) return
|
||||
willing = 1
|
||||
else
|
||||
@@ -311,7 +410,7 @@ var/global/list/frozen_items = list()
|
||||
|
||||
if(willing)
|
||||
|
||||
visible_message("[user] starts putting [G:affecting:name] into the cryo pod.", 3)
|
||||
visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3)
|
||||
|
||||
if(do_after(user, 20))
|
||||
if(!M || !G || !G:affecting) return
|
||||
@@ -323,11 +422,11 @@ var/global/list/frozen_items = list()
|
||||
M.client.eye = src
|
||||
|
||||
if(orient_right)
|
||||
icon_state = "body_scanner_1-r"
|
||||
icon_state = "[occupied_icon_state]-r"
|
||||
else
|
||||
icon_state = "body_scanner_1"
|
||||
icon_state = occupied_icon_state
|
||||
|
||||
M << "\blue You feel cool air surround you. You go numb as your senses turn inward."
|
||||
M << "\blue [on_enter_occupant_message]"
|
||||
M << "\blue <b>If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.</b>"
|
||||
occupant = M
|
||||
time_entered = world.time
|
||||
@@ -349,9 +448,9 @@ var/global/list/frozen_items = list()
|
||||
return
|
||||
|
||||
if(orient_right)
|
||||
icon_state = "body_scanner_0-r"
|
||||
icon_state = "[base_icon_state]-r"
|
||||
else
|
||||
icon_state = "body_scanner_0"
|
||||
icon_state = base_icon_state
|
||||
|
||||
//Eject any items that aren't meant to be in the pod.
|
||||
var/list/items = src.contents
|
||||
@@ -370,11 +469,11 @@ var/global/list/frozen_items = list()
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.stat != 0 || !(ishuman(usr) || ismonkey(usr)))
|
||||
if(usr.stat != 0 || !check_occupant_allowed(usr))
|
||||
return
|
||||
|
||||
if(src.occupant)
|
||||
usr << "\blue <B>The cryo pod is in use.</B>"
|
||||
usr << "\blue <B>\The [src] is in use.</B>"
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/slime/M in range(1,usr))
|
||||
@@ -382,7 +481,7 @@ var/global/list/frozen_items = list()
|
||||
usr << "You're too busy getting your life sucked out of you."
|
||||
return
|
||||
|
||||
visible_message("[usr] starts climbing into the cryo pod.", 3)
|
||||
visible_message("[usr] starts climbing into \the [src].", 3)
|
||||
|
||||
if(do_after(usr, 20))
|
||||
|
||||
@@ -390,7 +489,7 @@ var/global/list/frozen_items = list()
|
||||
return
|
||||
|
||||
if(src.occupant)
|
||||
usr << "\blue <B>The cryo pod is in use.</B>"
|
||||
usr << "\blue <B>\The [src] is in use.</B>"
|
||||
return
|
||||
|
||||
usr.stop_pulling()
|
||||
@@ -400,11 +499,11 @@ var/global/list/frozen_items = list()
|
||||
src.occupant = usr
|
||||
|
||||
if(orient_right)
|
||||
icon_state = "body_scanner_1-r"
|
||||
icon_state = "[occupied_icon_state]-r"
|
||||
else
|
||||
icon_state = "body_scanner_1"
|
||||
icon_state = occupied_icon_state
|
||||
|
||||
usr << "\blue You feel cool air surround you. You go numb as your senses turn inward."
|
||||
usr << "\blue [on_enter_occupant_message]"
|
||||
usr << "\blue <b>If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.</b>"
|
||||
occupant = usr
|
||||
time_entered = world.time
|
||||
@@ -426,9 +525,9 @@ var/global/list/frozen_items = list()
|
||||
occupant = null
|
||||
|
||||
if(orient_right)
|
||||
icon_state = "body_scanner_0-r"
|
||||
icon_state = "[base_icon_state]-r"
|
||||
else
|
||||
icon_state = "body_scanner_0"
|
||||
icon_state = base_icon_state
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -1026,7 +1026,10 @@ About the new airlock wires panel:
|
||||
S.loc = M.loc
|
||||
spawn(20)
|
||||
del(S)
|
||||
M.emote("scream")
|
||||
if (iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if (!(C.species && (C.species.flags & NO_PAIN)))
|
||||
M.emote("scream")
|
||||
var/turf/location = src.loc
|
||||
if(istype(location, /turf/simulated))
|
||||
location.add_blood(M)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
var/locked = 1
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if (!ishuman(user) && !istype(user,/mob/living/silicon/robot/drone))
|
||||
if (!ishuman(user) && !istype(user,/mob/living/silicon/robot))
|
||||
return ..(user)
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -362,8 +362,8 @@ Class Procs:
|
||||
if(id)
|
||||
perpname = id.registered_name
|
||||
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(!R || (R.fields["criminal"] == "*Arrest*"))
|
||||
var/datum/data/record/R = find_security_record("name", perpname)
|
||||
if(R && (R.fields["criminal"] == "*Arrest*"))
|
||||
threatcount += 4
|
||||
|
||||
return threatcount
|
||||
|
||||
@@ -330,14 +330,18 @@
|
||||
for(i=0,i<4,i++)
|
||||
sleep(50)
|
||||
if(src.OCCUPANT)
|
||||
if(src.issuperUV)
|
||||
var/burndamage = rand(28,35)
|
||||
OCCUPANT.take_organ_damage(0,burndamage)
|
||||
OCCUPANT.emote("scream")
|
||||
else
|
||||
var/burndamage = rand(6,10)
|
||||
OCCUPANT.take_organ_damage(0,burndamage)
|
||||
OCCUPANT.emote("scream")
|
||||
var/datum/organ/internal/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
|
||||
if (!rad_organ)
|
||||
if(src.issuperUV)
|
||||
var/burndamage = rand(28,35)
|
||||
OCCUPANT.take_organ_damage(0,burndamage)
|
||||
if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN)))
|
||||
OCCUPANT.emote("scream")
|
||||
else
|
||||
var/burndamage = rand(6,10)
|
||||
OCCUPANT.take_organ_damage(0,burndamage)
|
||||
if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN)))
|
||||
OCCUPANT.emote("scream")
|
||||
if(i==3) //End of the cycle
|
||||
if(!src.issuperUV)
|
||||
if(src.HELMET)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
id = "Hub"
|
||||
network = "tcommsat"
|
||||
autolinkers = list("hub", "relay", "c_relay", "s_relay", "m_relay", "r_relay", "science", "medical",
|
||||
"supply", "common", "command", "engineering", "security",
|
||||
"supply", "service", "common", "command", "engineering", "security",
|
||||
"receiverA", "receiverB", "broadcasterA", "broadcasterB")
|
||||
|
||||
/obj/machinery/telecomms/hub/preset_cent
|
||||
@@ -95,7 +95,7 @@
|
||||
id = "Bus 2"
|
||||
network = "tcommsat"
|
||||
freq_listening = list(SUP_FREQ, SRV_FREQ)
|
||||
autolinkers = list("processor2", "supply")
|
||||
autolinkers = list("processor2", "supply", "service")
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_three
|
||||
id = "Bus 3"
|
||||
@@ -167,8 +167,13 @@
|
||||
|
||||
/obj/machinery/telecomms/server/presets/supply
|
||||
id = "Supply Server"
|
||||
freq_listening = list(SUP_FREQ, SRV_FREQ)
|
||||
freq_listening = list(SUP_FREQ)
|
||||
autolinkers = list("supply")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/service
|
||||
id = "Service Server"
|
||||
freq_listening = list(SRV_FREQ)
|
||||
autolinkers = list("service")
|
||||
|
||||
/obj/machinery/telecomms/server/presets/common
|
||||
id = "Common Server"
|
||||
|
||||
@@ -48,6 +48,10 @@
|
||||
latejoin_cryo += loc
|
||||
del(src)
|
||||
|
||||
if("JoinLateCyborg")
|
||||
latejoin_cyborg += loc
|
||||
del(src)
|
||||
|
||||
//prisoners
|
||||
if("prisonwarp")
|
||||
prisonwarp += loc
|
||||
@@ -133,7 +137,7 @@
|
||||
/obj/effect/landmark/costume/madscientist/New()
|
||||
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
|
||||
new /obj/item/clothing/head/flatcap(src.loc)
|
||||
new /obj/item/clothing/suit/storage/labcoat/mad(src.loc)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/mad(src.loc)
|
||||
new /obj/item/clothing/glasses/gglasses(src.loc)
|
||||
del(src)
|
||||
|
||||
|
||||
@@ -135,23 +135,6 @@
|
||||
A.ai_actual_track(target)
|
||||
return
|
||||
|
||||
else if (href_list["faketrack"])
|
||||
var/mob/target = locate(href_list["track"])
|
||||
var/mob/living/silicon/ai/A = locate(href_list["track2"])
|
||||
if(A && target)
|
||||
|
||||
A:cameraFollow = target
|
||||
A << text("Now tracking [] on camera.", target.name)
|
||||
if (usr.machine == null)
|
||||
usr.machine = usr
|
||||
|
||||
while (usr:cameraFollow == target)
|
||||
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
|
||||
sleep(40)
|
||||
continue
|
||||
|
||||
return
|
||||
|
||||
else if (href_list["freq"])
|
||||
var/new_frequency = (frequency + text2num(href_list["freq"]))
|
||||
if (!freerange || (frequency < 1200 || frequency > 1600))
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
matter = list("glass" = 3750)
|
||||
origin_tech = "materials=1"
|
||||
var/created_window = /obj/structure/window/basic
|
||||
var/is_reinforced = 0
|
||||
var/list/construction_options = list("One Direction", "Full Window")
|
||||
|
||||
/obj/item/stack/sheet/glass/cyborg
|
||||
name = "glass"
|
||||
@@ -32,19 +34,24 @@
|
||||
|
||||
/obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
if(istype(W,/obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if (get_amount() < 1 || CC.get_amount() < 5)
|
||||
user << "<span class='warning>You need five lengths of coil and one sheet of glass to make wired glass.</span>"
|
||||
return
|
||||
CC.use(5)
|
||||
use(1)
|
||||
user << "<span class='notice'>You attach wire to the [name].</span>"
|
||||
new /obj/item/stack/light_w(user.loc)
|
||||
else if(istype(W, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/V = W
|
||||
if (V.get_amount() >= 1 && get_amount() >= 1)
|
||||
var/obj/item/stack/sheet/rglass/RG = new (user.loc)
|
||||
if(!is_reinforced)
|
||||
if(istype(W,/obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if (get_amount() < 1 || CC.get_amount() < 5)
|
||||
user << "<span class='warning>You need five lengths of coil and one sheet of glass to make wired glass.</span>"
|
||||
return
|
||||
|
||||
CC.use(5)
|
||||
use(1)
|
||||
user << "<span class='notice'>You attach wire to the [name].</span>"
|
||||
new /obj/item/stack/light_w(user.loc)
|
||||
else if(istype(W, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/V = W
|
||||
if (V.get_amount() < 1 || get_amount() < 1)
|
||||
user << "<span class='warning'>You need one rod and one sheet of glass to make reinforced glass.</span>"
|
||||
return
|
||||
|
||||
var/obj/item/stack/sheet/glass/reinforced/RG = new (user.loc)
|
||||
RG.add_fingerprint(user)
|
||||
RG.add_to_stacks(user)
|
||||
var/obj/item/stack/sheet/glass/G = src
|
||||
@@ -54,20 +61,15 @@
|
||||
G.use(1)
|
||||
if (!G && replace)
|
||||
user.put_in_hands(RG)
|
||||
else
|
||||
user << "<span class='warning'>You need one rod and one sheet of glass to make reinforced glass.</span>"
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/sheet/glass/proc/construct_window(mob/user as mob)
|
||||
if(!user || !src) return 0
|
||||
if(!istype(user.loc,/turf)) return 0
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return 0
|
||||
var/title = "Sheet-Glass"
|
||||
var/title = "Sheet-[name]"
|
||||
title += " ([src.amount] sheet\s left)"
|
||||
switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null))
|
||||
switch(input(title, "What would you like to construct?") as null|anything in construction_options)
|
||||
if("One Direction")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
@@ -80,7 +82,7 @@
|
||||
user << "\red There are too many windows in this location."
|
||||
return 1
|
||||
directions-=win.dir
|
||||
if(!(win.ini_dir in cardinal))
|
||||
if(!(win.dir in cardinal))
|
||||
user << "\red Can't let you do that."
|
||||
return 1
|
||||
|
||||
@@ -94,112 +96,23 @@
|
||||
if(!found)
|
||||
dir_to_set = direction
|
||||
break
|
||||
var/obj/structure/window/W
|
||||
W = new created_window( user.loc, 0 )
|
||||
W.dir = dir_to_set
|
||||
W.ini_dir = W.dir
|
||||
W.anchored = 0
|
||||
new created_window( user.loc, dir_to_set, 1 )
|
||||
src.use(1)
|
||||
if("Full Window")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
if(src.amount < 4)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
if(locate(/obj/structure/window) in user.loc)
|
||||
user << "\red There is a window in the way."
|
||||
return 1
|
||||
var/obj/structure/window/W
|
||||
W = new created_window( user.loc, 0 )
|
||||
W.dir = SOUTHWEST
|
||||
W.ini_dir = SOUTHWEST
|
||||
W.anchored = 0
|
||||
src.use(2)
|
||||
return 0
|
||||
|
||||
|
||||
/*
|
||||
* Reinforced glass sheets
|
||||
*/
|
||||
/obj/item/stack/sheet/rglass
|
||||
name = "reinforced glass"
|
||||
desc = "Glass which seems to have rods or something stuck in them."
|
||||
singular_name = "reinforced glass sheet"
|
||||
icon_state = "sheet-rglass"
|
||||
|
||||
matter = list("metal" = 1875,"glass" = 3750)
|
||||
|
||||
origin_tech = "materials=2"
|
||||
|
||||
/obj/item/stack/sheet/rglass/cyborg
|
||||
name = "reinforced glass"
|
||||
desc = "Glass which seems to have rods or something stuck in them."
|
||||
singular_name = "reinforced glass sheet"
|
||||
icon_state = "sheet-rglass"
|
||||
|
||||
/obj/item/stack/sheet/rglass/attack_self(mob/user as mob)
|
||||
construct_window(user)
|
||||
|
||||
/obj/item/stack/sheet/rglass/proc/construct_window(mob/user as mob)
|
||||
if(!user || !src) return 0
|
||||
if(!istype(user.loc,/turf)) return 0
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return 0
|
||||
var/title = "Sheet Reinf. Glass"
|
||||
title += " ([src.amount] sheet\s left)"
|
||||
switch(input(title, "Would you like full tile glass a one direction glass pane or a windoor?") in list("One Direction", "Full Window", "Windoor", "Cancel"))
|
||||
if("One Direction")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
var/list/directions = new/list(cardinal)
|
||||
var/i = 0
|
||||
for (var/obj/structure/window/win in user.loc)
|
||||
i++
|
||||
if(i >= 4)
|
||||
user << "\red There are too many windows in this location."
|
||||
return 1
|
||||
directions-=win.dir
|
||||
if(!(win.ini_dir in cardinal))
|
||||
user << "\red Can't let you do that."
|
||||
return 1
|
||||
|
||||
//Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc.
|
||||
var/dir_to_set = 2
|
||||
for(var/direction in list( user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) ))
|
||||
var/found = 0
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if(WT.dir == direction)
|
||||
found = 1
|
||||
if(!found)
|
||||
dir_to_set = direction
|
||||
break
|
||||
|
||||
var/obj/structure/window/W
|
||||
W = new /obj/structure/window/reinforced( user.loc, 1 )
|
||||
W.state = 0
|
||||
W.dir = dir_to_set
|
||||
W.ini_dir = W.dir
|
||||
W.anchored = 0
|
||||
src.use(1)
|
||||
|
||||
if("Full Window")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
if(locate(/obj/structure/window) in user.loc)
|
||||
user << "\red There is a window in the way."
|
||||
return 1
|
||||
var/obj/structure/window/W
|
||||
W = new /obj/structure/window/reinforced( user.loc, 1 )
|
||||
W.state = 0
|
||||
W.dir = SOUTHWEST
|
||||
W.ini_dir = SOUTHWEST
|
||||
W.anchored = 0
|
||||
src.use(2)
|
||||
|
||||
new created_window( user.loc, SOUTHWEST, 1 )
|
||||
src.use(4)
|
||||
if("Windoor")
|
||||
if(!is_reinforced) return 1
|
||||
|
||||
|
||||
if(!src || src.loc != user) return 1
|
||||
|
||||
if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc))
|
||||
@@ -214,31 +127,33 @@
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
|
||||
var/obj/structure/windoor_assembly/WD
|
||||
WD = new /obj/structure/windoor_assembly(user.loc)
|
||||
WD.state = "01"
|
||||
WD.anchored = 0
|
||||
new /obj/structure/windoor_assembly(user.loc, user.dir, 1)
|
||||
src.use(5)
|
||||
switch(user.dir)
|
||||
if(SOUTH)
|
||||
WD.dir = SOUTH
|
||||
WD.ini_dir = SOUTH
|
||||
if(EAST)
|
||||
WD.dir = EAST
|
||||
WD.ini_dir = EAST
|
||||
if(WEST)
|
||||
WD.dir = WEST
|
||||
WD.ini_dir = WEST
|
||||
else//If the user is facing northeast. northwest, southeast, southwest or north, default to north
|
||||
WD.dir = NORTH
|
||||
WD.ini_dir = NORTH
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
/*
|
||||
* Reinforced glass sheets
|
||||
*/
|
||||
/obj/item/stack/sheet/glass/reinforced
|
||||
name = "reinforced glass"
|
||||
desc = "Glass which has been reinforced with metal rods."
|
||||
singular_name = "reinforced glass sheet"
|
||||
icon_state = "sheet-rglass"
|
||||
|
||||
matter = list("metal" = 1875,"glass" = 3750)
|
||||
origin_tech = "materials=2"
|
||||
|
||||
created_window = /obj/structure/window/reinforced
|
||||
is_reinforced = 1
|
||||
construction_options = list("One Direction", "Full Window", "Windoor")
|
||||
|
||||
/obj/item/stack/sheet/glass/reinforced/cyborg
|
||||
name = "reinforced glass"
|
||||
desc = "Glass which has been reinforced with metal rods."
|
||||
singular_name = "reinforced glass sheet"
|
||||
icon_state = "sheet-rglass"
|
||||
|
||||
/*
|
||||
* Phoron Glass sheets
|
||||
@@ -252,9 +167,6 @@
|
||||
origin_tech = "materials=3;phorontech=2"
|
||||
created_window = /obj/structure/window/phoronbasic
|
||||
|
||||
/obj/item/stack/sheet/glass/phoronglass/attack_self(mob/user as mob)
|
||||
construct_window(user)
|
||||
|
||||
/obj/item/stack/sheet/glass/phoronglass/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
if( istype(W, /obj/item/stack/rods) )
|
||||
@@ -277,13 +189,11 @@
|
||||
*/
|
||||
/obj/item/stack/sheet/glass/phoronrglass
|
||||
name = "reinforced phoron glass"
|
||||
desc = "Phoron glass which seems to have rods or something stuck in them."
|
||||
desc = "Phoron glass which has been reinforced with metal rods."
|
||||
singular_name = "reinforced phoron glass sheet"
|
||||
icon_state = "sheet-phoronrglass"
|
||||
matter = list("glass" = 7500,"metal" = 1875)
|
||||
|
||||
origin_tech = "materials=4;phorontech=2"
|
||||
created_window = /obj/structure/window/phoronreinforced
|
||||
|
||||
/obj/item/stack/sheet/glass/phoronrglass/attack_self(mob/user as mob)
|
||||
construct_window(user)
|
||||
is_reinforced = 1
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
|
||||
/obj/structure/coatrack/update_icon()
|
||||
overlays.Cut()
|
||||
if (istype(coat, /obj/item/clothing/suit/storage/labcoat))
|
||||
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat))
|
||||
overlays += image(icon, icon_state = "coat_lab")
|
||||
if (istype(coat, /obj/item/clothing/suit/storage/labcoat/cmo))
|
||||
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo))
|
||||
overlays += image(icon, icon_state = "coat_cmo")
|
||||
if (istype(coat, /obj/item/clothing/suit/storage/det_suit))
|
||||
overlays += image(icon, icon_state = "coat_det")
|
||||
@@ -93,7 +93,7 @@
|
||||
new /obj/item/clothing/under/lawyer/black(src)
|
||||
new /obj/item/clothing/under/lawyer/red(src)
|
||||
new /obj/item/clothing/under/lawyer/bluesuit(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/bluejacket(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(src)
|
||||
new /obj/item/clothing/under/lawyer/purpsuit(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/purpjacket(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
new /obj/item/clothing/under/rank/medical(src)
|
||||
new /obj/item/clothing/under/rank/nurse(src)
|
||||
new /obj/item/clothing/under/rank/orderly(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/fr_jacket(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/fr_jacket(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
// new /obj/item/weapon/cartridge/medical(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
@@ -130,8 +130,8 @@
|
||||
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/cmoalt(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/clothing/gloves/latex(src)
|
||||
new /obj/item/clothing/shoes/brown (src)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
//new /obj/item/clothing/suit/labcoat/science(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
// new /obj/item/weapon/cartridge/signal/science(src)
|
||||
new /obj/item/device/radio/headset/headset_sci(src)
|
||||
@@ -39,7 +39,7 @@
|
||||
new /obj/item/clothing/under/rank/research_director(src)
|
||||
new /obj/item/clothing/under/rank/research_director/rdalt(src)
|
||||
new /obj/item/clothing/under/rank/research_director/dress_rd(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/weapon/cartridge/rd(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/leather(src)
|
||||
|
||||
@@ -240,9 +240,9 @@
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/under/rank/scientist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
@@ -261,8 +261,8 @@
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/roboticist(src)
|
||||
new /obj/item/clothing/under/rank/roboticist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
@@ -281,8 +281,8 @@
|
||||
new /obj/item/clothing/under/rank/chemist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/chemist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/chemist(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -297,8 +297,8 @@
|
||||
new /obj/item/clothing/under/rank/geneticist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/genetics(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/genetics(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -313,8 +313,8 @@
|
||||
new /obj/item/clothing/under/rank/virologist(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/virologist(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat/virologist(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
return
|
||||
@@ -334,8 +334,8 @@
|
||||
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
return
|
||||
|
||||
@@ -159,7 +159,7 @@ obj/structure/door_assembly
|
||||
if(do_after(user, 40))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "\blue You welded the glass panel out!"
|
||||
new /obj/item/stack/sheet/rglass(src.loc)
|
||||
new /obj/item/stack/sheet/glass/reinforced(src.loc)
|
||||
glass = 0
|
||||
else if(!anchored)
|
||||
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
|
||||
@@ -239,7 +239,7 @@ obj/structure/door_assembly
|
||||
var/obj/item/stack/sheet/S = W
|
||||
if (S)
|
||||
if (S.get_amount() >= 1)
|
||||
if(istype(S, /obj/item/stack/sheet/rglass))
|
||||
if(istype(S, /obj/item/stack/sheet/glass/reinforced))
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.")
|
||||
if(do_after(user, 40) && !glass)
|
||||
@@ -303,4 +303,4 @@ obj/structure/door_assembly
|
||||
name = "Wired "
|
||||
if(2)
|
||||
name = "Near Finished "
|
||||
name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly"
|
||||
name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly"
|
||||
|
||||
@@ -85,8 +85,8 @@
|
||||
return
|
||||
|
||||
//window placing begin
|
||||
else if(istype(W,/obj/item/stack/sheet/rglass) || istype(W,/obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/ST = W
|
||||
else if(istype(W,/obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/ST = W
|
||||
var/dir_to_set = 1
|
||||
if(loc == user.loc)
|
||||
dir_to_set = user.dir
|
||||
@@ -115,16 +115,10 @@
|
||||
if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting.
|
||||
user << "<span class='notice'>There is already a window facing this way there.</span>"
|
||||
return
|
||||
|
||||
var/wtype = ST.created_window
|
||||
if (ST.use(1))
|
||||
var/obj/structure/window/WD
|
||||
if(istype(W, /obj/item/stack/sheet/rglass))
|
||||
WD = new/obj/structure/window/reinforced(loc) //reinforced window
|
||||
else
|
||||
WD = new/obj/structure/window/basic(loc) //normal window
|
||||
WD.dir = dir_to_set
|
||||
WD.ini_dir = dir_to_set
|
||||
WD.anchored = 0
|
||||
WD.state = 0
|
||||
var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1)
|
||||
user << "<span class='notice'>You place the [WD] on [src].</span>"
|
||||
WD.update_icon()
|
||||
return
|
||||
@@ -193,4 +187,4 @@
|
||||
visible_message("<span class='danger'>[user] [attack_verb] the [src]!</span>")
|
||||
health -= damage
|
||||
spawn(1) healthcheck()
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -310,7 +310,13 @@
|
||||
|
||||
for(var/mob/living/M in contents)
|
||||
if (M.stat!=2)
|
||||
M.emote("scream")
|
||||
if (!iscarbon(M))
|
||||
M.emote("scream")
|
||||
else
|
||||
var/mob/living/carbon/C = M
|
||||
if (!(C.species && (C.species.flags & NO_PAIN)))
|
||||
C.emote("scream")
|
||||
|
||||
//Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out.
|
||||
//M.attack_log += "\[[time_stamp()]\] Has been cremated by <b>[user]/[user.ckey]</b>" //No point in this when the mob's about to be deleted
|
||||
//user.attack_log +="\[[time_stamp()]\] Cremated <b>[M]/[M.ckey]</b>"
|
||||
|
||||
@@ -18,7 +18,6 @@ obj/structure/windoor_assembly
|
||||
density = 0
|
||||
dir = NORTH
|
||||
|
||||
var/ini_dir
|
||||
var/obj/item/weapon/airlock_electronics/electronics = null
|
||||
|
||||
//Vars to help with the icon's name
|
||||
@@ -26,9 +25,17 @@ obj/structure/windoor_assembly
|
||||
var/secure = "" //Whether or not this creates a secure windoor
|
||||
var/state = "01" //How far the door assembly has progressed in terms of sprites
|
||||
|
||||
obj/structure/windoor_assembly/New(dir=NORTH)
|
||||
obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
|
||||
..()
|
||||
src.ini_dir = src.dir
|
||||
if(constructed)
|
||||
state = "01"
|
||||
anchored = 0
|
||||
switch(start_dir)
|
||||
if(NORTH, SOUTH, EAST, WEST)
|
||||
dir = start_dir
|
||||
else //If the user is facing northeast. northwest, southeast, southwest or north, default to north
|
||||
dir = NORTH
|
||||
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
obj/structure/windoor_assembly/Del()
|
||||
@@ -70,7 +77,7 @@ obj/structure/windoor_assembly/Del()
|
||||
if(do_after(user, 40))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "\blue You dissasembled the windoor assembly!"
|
||||
new /obj/item/stack/sheet/rglass(get_turf(src), 5)
|
||||
new /obj/item/stack/sheet/glass/reinforced(get_turf(src), 5)
|
||||
if(secure)
|
||||
new /obj/item/stack/rods(get_turf(src), 4)
|
||||
del(src)
|
||||
@@ -270,7 +277,6 @@ obj/structure/windoor_assembly/Del()
|
||||
if(src.state != "01")
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
src.ini_dir = src.dir
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
// var/silicate = 0 // number of units of silicate
|
||||
// var/icon/silicateIcon = null // the silicated icon
|
||||
|
||||
|
||||
/obj/structure/window/proc/take_damage(var/damage = 0, var/sound_effect = 1)
|
||||
var/initialhealth = src.health
|
||||
src.health = max(0, src.health - damage)
|
||||
@@ -85,11 +84,16 @@
|
||||
/obj/structure/window/meteorhit()
|
||||
shatter()
|
||||
|
||||
//TODO: Make full windows a separate type of window.
|
||||
//Once a full window, it will always be a full window, so there's no point
|
||||
//having the same type for both.
|
||||
/obj/structure/window/proc/is_full_window()
|
||||
return (dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST)
|
||||
|
||||
/obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return 1
|
||||
if(dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST)
|
||||
if(is_full_window())
|
||||
return 0 //full tile window, you can't move into it!
|
||||
if(get_dir(loc, target) == dir)
|
||||
return !density
|
||||
@@ -245,7 +249,6 @@
|
||||
dir = turn(dir, 90)
|
||||
// updateSilicate()
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
ini_dir = dir
|
||||
return
|
||||
|
||||
|
||||
@@ -262,7 +265,6 @@
|
||||
dir = turn(dir, 270)
|
||||
// updateSilicate()
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
ini_dir = dir
|
||||
return
|
||||
|
||||
|
||||
@@ -282,10 +284,15 @@
|
||||
*/
|
||||
|
||||
|
||||
/obj/structure/window/New(Loc,re=0)
|
||||
/obj/structure/window/New(Loc, start_dir=null, constructed=0)
|
||||
..()
|
||||
|
||||
// if(re) reinf = re
|
||||
//player-constructed windows
|
||||
if (constructed)
|
||||
anchored = 0
|
||||
|
||||
if (start_dir)
|
||||
dir = start_dir
|
||||
|
||||
health = maxhealth
|
||||
|
||||
@@ -294,8 +301,6 @@
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
update_nearby_icons()
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/window/Del()
|
||||
density = 0
|
||||
@@ -305,6 +310,7 @@
|
||||
|
||||
|
||||
/obj/structure/window/Move()
|
||||
var/ini_dir = dir
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
..()
|
||||
dir = ini_dir
|
||||
@@ -406,7 +412,14 @@
|
||||
basestate = "rwindow"
|
||||
maxhealth = 40
|
||||
reinf = 1
|
||||
glasstype = /obj/item/stack/sheet/rglass
|
||||
glasstype = /obj/item/stack/sheet/glass/reinforced
|
||||
|
||||
/obj/structure/window/New(Loc, constructed=0)
|
||||
..()
|
||||
|
||||
//player-constructed windows
|
||||
if (constructed)
|
||||
state = 0
|
||||
|
||||
/obj/structure/window/reinforced/tinted
|
||||
name = "tinted window"
|
||||
|
||||
@@ -129,6 +129,7 @@ var/list/newplayer_start = list()
|
||||
var/list/latejoin = list()
|
||||
var/list/latejoin_gateway = list()
|
||||
var/list/latejoin_cryo = list()
|
||||
var/list/latejoin_cyborg = list()
|
||||
|
||||
var/list/prisonwarp = list() //prisoners go to these
|
||||
var/list/holdingfacility = list() //captured people go here
|
||||
|
||||
@@ -281,7 +281,7 @@ var/global/floorIsLava = 0
|
||||
I.rank = "N/A"
|
||||
update_file = 1
|
||||
dat += "<font color=#008800>[I.content]</font> <i>by [I.author] ([I.rank])</i> on <i><font color=blue>[I.timestamp]</i></font> "
|
||||
if(I.author == usr.key || I.author == "Adminbot")
|
||||
if(I.author == usr.key || I.author == "Adminbot" || ishost(usr))
|
||||
dat += "<A href='?src=\ref[src];remove_player_info=[key];remove_index=[i]'>Remove</A>"
|
||||
dat += "<br><br>"
|
||||
if(update_file) info << infos
|
||||
@@ -1141,9 +1141,25 @@ var/global/floorIsLava = 0
|
||||
if(2)
|
||||
var/ref_mob = "\ref[M]"
|
||||
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>"
|
||||
if(3)
|
||||
var/ref_mob = "\ref[M]"
|
||||
return "<b>[key_name(C, link, name, highlight_special)](<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>)(<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>)</b>"
|
||||
|
||||
|
||||
|
||||
/proc/ishost(whom)
|
||||
if(!whom)
|
||||
return 0
|
||||
var/client/C
|
||||
var/mob/M
|
||||
if(istype(whom, /client))
|
||||
C = whom
|
||||
if(istype(whom, /mob))
|
||||
M = whom
|
||||
C = M.client
|
||||
if(R_HOST & C.holder.rights)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
//
|
||||
//
|
||||
//ALL DONE
|
||||
|
||||
@@ -37,7 +37,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
if("stealth") rights |= R_STEALTH
|
||||
if("rejuv","rejuvinate") rights |= R_REJUVINATE
|
||||
if("varedit") rights |= R_VAREDIT
|
||||
if("everything","host","all") rights |= R_HOST
|
||||
if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_MENTOR)
|
||||
if("sound","sounds") rights |= R_SOUNDS
|
||||
if("spawn","create") rights |= R_SPAWN
|
||||
if("mod") rights |= R_MOD
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
|
||||
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
|
||||
|
||||
/client/verb/adminhelp(msg as text)
|
||||
/client/verb/adminhelp()
|
||||
set category = "Admin"
|
||||
set name = "Adminhelp"
|
||||
|
||||
@@ -15,8 +15,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(prefs.muted & MUTE_ADMINHELP)
|
||||
src << "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted).</font>"
|
||||
return
|
||||
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
|
||||
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
|
||||
|
||||
@@ -26,6 +25,17 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
|
||||
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
|
||||
**/
|
||||
var/msg
|
||||
var/list/type = list ("Gameplay/Roleplay question", "Rule/Gameplay issue", "Bug report")
|
||||
var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type
|
||||
if(selected_type)
|
||||
msg = input("Please enter your message:", "Admin Help", null, null) as text
|
||||
|
||||
var/selected_upper = uppertext(selected_type)
|
||||
|
||||
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
|
||||
//clean the input msg
|
||||
if(!msg) return
|
||||
@@ -33,7 +43,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(!msg) return
|
||||
var/original_msg = msg
|
||||
|
||||
|
||||
|
||||
|
||||
//explode the input msg into a list
|
||||
var/list/msglist = text2list(msg, " ")
|
||||
@@ -91,11 +101,68 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(!mob) return //this doesn't happen
|
||||
|
||||
var/ref_mob = "\ref[mob]"
|
||||
var/mentor_msg = "\blue <b><font color=red>HELP: </font>[get_options_bar(mob, 2, 1, 1, 0)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
msg = "\blue <b><font color=red>HELP: </font>[get_options_bar(mob, 2, 1, 1)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
//send this msg to all admins
|
||||
var/mentor_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 0, 0, 1, 0)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
var/dev_msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 3, 0, 1, 0)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
msg = "\blue <b><font color=red>[selected_upper]: </font>[get_options_bar(mob, 2, 1, 1)][ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
||||
|
||||
|
||||
|
||||
var/admin_number_afk = 0
|
||||
|
||||
var/list/mentorholders = list()
|
||||
var/list/debugholders = list()
|
||||
var/list/adminholders = list()
|
||||
for(var/client/X in admins)
|
||||
if(R_MENTOR & X.holder.rights && !(R_ADMIN & X.holder.rights)) // we don't want to count admins twice. This list should be JUST mentors
|
||||
mentorholders += X
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
if(R_DEBUG & X.holder.rights) // Looking for anyone with +Debug which will be admins, developers, and developer mentors
|
||||
debugholders += X
|
||||
if(!(R_ADMIN & X.holder.rights))
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
if(R_ADMIN & X.holder.rights) // just admins here please
|
||||
adminholders += X
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
|
||||
switch(selected_type)
|
||||
if("Gameplay/Roleplay question")
|
||||
if(mentorholders.len)
|
||||
for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << mentor_msg
|
||||
if(adminholders.len)
|
||||
for(var/client/X in adminholders) // Admins get the full monty
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
if("Rule/Gameplay issue")
|
||||
if(adminholders.len)
|
||||
for(var/client/X in adminholders) // Admins of course get everything in their helps
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
if("Bug report")
|
||||
if(debugholders.len)
|
||||
for(var/client/X in debugholders)
|
||||
if(R_ADMIN & X.holder.rights) // Admins get every button & special highlights in theirs
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else
|
||||
if (R_DEBUG & X.holder.rights) // Just devs or devmentors get non-highlighted names, but they do get JMP and VV for their bug reports.
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << dev_msg
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*for(var/client/X in admins)
|
||||
if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights)
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
@@ -104,19 +171,19 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(X.holder.rights == R_MENTOR)
|
||||
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
|
||||
else
|
||||
X << msg
|
||||
X << msg*/
|
||||
|
||||
//show it to the person adminhelping too
|
||||
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>"
|
||||
src << "<font color='blue'>PM to-<b>Staff ([selected_type])</b>: [original_msg]</font>"
|
||||
|
||||
var/admin_number_present = admins.len - admin_number_afk
|
||||
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
|
||||
if(admin_number_present <= 0)
|
||||
if(!admin_number_afk)
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!")
|
||||
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!")
|
||||
else
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!")
|
||||
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!")
|
||||
else
|
||||
send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)]")
|
||||
send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)]")
|
||||
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
if(!istype(C,/client))
|
||||
if(holder) src << "<font color='red'>Error: Private-Message: Client not found.</font>"
|
||||
else adminhelp(msg) //admin we are replying to left. adminhelp instead
|
||||
else src << "<font color='red'>Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!</font>"
|
||||
return
|
||||
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
@@ -53,7 +53,7 @@
|
||||
if(!msg) return
|
||||
if(!C)
|
||||
if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
|
||||
else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead
|
||||
else src << "<font color='red'>Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!</font>"
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
@@ -78,7 +78,7 @@
|
||||
else
|
||||
recieve_color = "maroon"
|
||||
send_pm_type = holder.rank + " "
|
||||
if(!C.holder && holder && holder.fakekey)
|
||||
if(!C.holder && holder && holder.fakekey)
|
||||
recieve_pm_type = "Admin"
|
||||
else
|
||||
recieve_pm_type = holder.rank
|
||||
|
||||
@@ -9,8 +9,12 @@
|
||||
|
||||
log_admin("[key_name(src)] : [msg]")
|
||||
|
||||
var/color = "adminsay"
|
||||
if(ishost(usr))
|
||||
color = "headminsay"
|
||||
|
||||
if(check_rights(R_ADMIN,0))
|
||||
msg = "<span class='adminsay'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]</EM> (<a href='?_src_=holder;adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
msg = "<span class='[color]'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, 1)]</EM> (<a href='?_src_=holder;adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
if(alert("WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", "No", "Yes") == "No")
|
||||
return
|
||||
|
||||
@@ -30,11 +30,12 @@
|
||||
next_turf:
|
||||
for(var/turf/T in world)
|
||||
for(var/dir in cardinal)
|
||||
var/check = 0
|
||||
var/list/connect_types = list(1 = 0, 2 = 0, 3 = 0)
|
||||
for(var/obj/machinery/atmospherics/pipe in T)
|
||||
if(dir & pipe.initialize_directions)
|
||||
check++
|
||||
if(check > 1)
|
||||
for(var/connect_type in pipe.connect_types)
|
||||
connect_types[connect_type] += 1
|
||||
if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1)
|
||||
usr << "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])"
|
||||
continue next_turf
|
||||
usr << "Done"
|
||||
|
||||
@@ -20,8 +20,9 @@
|
||||
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
for(var/client/C in admins)
|
||||
if(C.prefs.toggles & CHAT_PRAYER)
|
||||
C << msg
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
if(C.prefs.toggles & CHAT_PRAYER)
|
||||
C << msg
|
||||
usr << "Your prayers have been received by the gods."
|
||||
|
||||
feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -30,9 +31,13 @@
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage)
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
msg = "\blue <b><font color=orange>CENTCOMM[iamessage ? " IA" : ""]:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
msg = "\blue <b><font color=crimson>ILLEGAL:</font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
admins << msg
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
name = "Scientist"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sci
|
||||
corpseuniform = /obj/item/clothing/under/rank/scientist
|
||||
corpsesuit = /obj/item/clothing/suit/storage/labcoat/science
|
||||
corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseshoes = /obj/item/clothing/shoes/white
|
||||
corpseid = 1
|
||||
|
||||
@@ -475,13 +475,13 @@ var/global/list/gear_datums = list()
|
||||
|
||||
/datum/gear/brown_jacket
|
||||
display_name = "leather jacket, brown"
|
||||
path = /obj/item/clothing/suit/storage/brown_jacket
|
||||
path = /obj/item/clothing/suit/storage/toggle/brown_jacket
|
||||
cost = 3
|
||||
slot = slot_wear_suit
|
||||
|
||||
/datum/gear/brown_jacket_nt
|
||||
display_name = "leather jacket, NanoTrasen, brown"
|
||||
path = /obj/item/clothing/suit/storage/brown_jacket/nanotrasen
|
||||
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
|
||||
cost = 3
|
||||
slot = slot_wear_suit
|
||||
|
||||
|
||||
@@ -10,6 +10,17 @@ var/list/spawntypes = list()
|
||||
var/msg //Message to display on the arrivals computer.
|
||||
var/list/turfs //List of turfs to spawn on.
|
||||
var/display_name //Name used in preference setup.
|
||||
var/list/restrict_job = null
|
||||
var/list/disallow_job = null
|
||||
|
||||
proc/check_job_spawning(job)
|
||||
if(restrict_job && !(job in restrict_job))
|
||||
return 0
|
||||
|
||||
if(disallow_job && (job in disallow_job))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/datum/spawnpoint/arrivals
|
||||
display_name = "Arrivals Shuttle"
|
||||
@@ -30,7 +41,17 @@ var/list/spawntypes = list()
|
||||
/datum/spawnpoint/cryo
|
||||
display_name = "Cryogenic Storage"
|
||||
msg = "has completed cryogenic revival"
|
||||
disallow_job = list("Cyborg")
|
||||
|
||||
/datum/spawnpoint/cryo/New()
|
||||
..()
|
||||
turfs = latejoin_cryo
|
||||
turfs = latejoin_cryo
|
||||
|
||||
/datum/spawnpoint/cyborg
|
||||
display_name = "Cyborg Storage"
|
||||
msg = "has been activated from storage"
|
||||
restrict_job = list("Cyborg")
|
||||
|
||||
/datum/spawnpoint/cyborg/New()
|
||||
..()
|
||||
turfs = latejoin_cyborg
|
||||
@@ -141,11 +141,13 @@
|
||||
sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi')
|
||||
|
||||
//Lawyer
|
||||
/obj/item/clothing/suit/storage/lawyer/bluejacket
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
|
||||
name = "Blue Suit Jacket"
|
||||
desc = "A snappy dress jacket."
|
||||
icon_state = "suitjacket_blue_open"
|
||||
item_state = "suitjacket_blue_open"
|
||||
icon_open = "suitjacket_blue_open"
|
||||
icon_closed = "suitjacket_blue"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
@@ -158,62 +160,31 @@
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
//Internal Affairs
|
||||
/obj/item/clothing/suit/storage/internalaffairs
|
||||
/obj/item/clothing/suit/storage/toggle/internalaffairs
|
||||
name = "Internal Affairs Jacket"
|
||||
desc = "A smooth black jacket."
|
||||
icon_state = "ia_jacket_open"
|
||||
item_state = "ia_jacket"
|
||||
icon_open = "ia_jacket_open"
|
||||
icon_closed = "ia_jacket"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
verb/toggle()
|
||||
set name = "Toggle Coat Buttons"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
|
||||
switch(icon_state)
|
||||
if("ia_jacket_open")
|
||||
src.icon_state = "ia_jacket"
|
||||
usr << "You button up the jacket."
|
||||
if("ia_jacket")
|
||||
src.icon_state = "ia_jacket_open"
|
||||
usr << "You unbutton the jacket."
|
||||
else
|
||||
usr << "You attempt to button-up the velcro on your [src], before promptly realising how retarded you are."
|
||||
return
|
||||
update_clothing_icon() //so our overlays update
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/suit/storage/fr_jacket
|
||||
/obj/item/clothing/suit/storage/toggle/fr_jacket
|
||||
name = "first responder jacket"
|
||||
desc = "A high-visibility jacket worn by medical first responders."
|
||||
icon_state = "fr_jacket_open"
|
||||
item_state = "fr_jacket"
|
||||
icon_open = "fr_jacket_open"
|
||||
icon_closed = "fr_jacket"
|
||||
blood_overlay_type = "armor"
|
||||
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \
|
||||
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
verb/toggle()
|
||||
set name = "Toggle Jacket Buttons"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
|
||||
switch(icon_state)
|
||||
if("fr_jacket_open")
|
||||
src.icon_state = "fr_jacket"
|
||||
usr << "You button up the jacket."
|
||||
if("fr_jacket")
|
||||
src.icon_state = "fr_jacket_open"
|
||||
usr << "You unbutton the jacket."
|
||||
update_clothing_icon() //so our overlays update
|
||||
|
||||
//Mime
|
||||
/obj/item/clothing/suit/suspenders
|
||||
name = "suspenders"
|
||||
|
||||
@@ -1,177 +1,104 @@
|
||||
/obj/item/clothing/suit/storage/labcoat
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat
|
||||
name = "labcoat"
|
||||
desc = "A suit that protects against minor chemical spills."
|
||||
icon_state = "labcoat_open"
|
||||
item_state = "labcoat" //Is this even used for anything?
|
||||
icon_open = "labcoat_open"
|
||||
icon_closed = "labcoat"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
sprite_sheets = list("Vox" = 'icons/mob/species/vox/suit.dmi')
|
||||
|
||||
verb/toggle()
|
||||
set name = "Toggle Labcoat Buttons"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
|
||||
//Why???
|
||||
switch(icon_state)
|
||||
if("labcoat_open")
|
||||
src.icon_state = "labcoat"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat")
|
||||
src.icon_state = "labcoat_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("red_labcoat_open")
|
||||
src.icon_state = "red_labcoat"
|
||||
usr << "You button up the labcoat."
|
||||
if("red_labcoat")
|
||||
src.icon_state = "red_labcoat_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("blue_labcoat_open")
|
||||
src.icon_state = "blue_labcoat"
|
||||
usr << "You button up the labcoat."
|
||||
if("blue_labcoat")
|
||||
src.icon_state = "blue_labcoat_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("purple_labcoat_open")
|
||||
src.icon_state = "purple_labcoat"
|
||||
usr << "You button up the labcoat."
|
||||
if("purple_labcoat")
|
||||
src.icon_state = "purple_labcoat_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("green_labcoat_open")
|
||||
src.icon_state = "green_labcoat"
|
||||
usr << "You button up the labcoat."
|
||||
if("green_labcoat")
|
||||
src.icon_state = "green_labcoat_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("orange_labcoat_open")
|
||||
src.icon_state = "orange_labcoat"
|
||||
usr << "You button up the labcoat."
|
||||
if("orange_labcoat")
|
||||
src.icon_state = "orange_labcoat_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labcoat_cmo_open")
|
||||
src.icon_state = "labcoat_cmo"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat_cmo")
|
||||
src.icon_state = "labcoat_cmo_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labcoat_cmoalt_open")
|
||||
src.icon_state = "labcoat_cmoalt"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat_cmoalt")
|
||||
src.icon_state = "labcoat_cmoalt_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labcoat_gen_open")
|
||||
src.icon_state = "labcoat_gen"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat_gen")
|
||||
src.icon_state = "labcoat_gen_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labcoat_chem_open")
|
||||
src.icon_state = "labcoat_chem"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat_chem")
|
||||
src.icon_state = "labcoat_chem_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labcoat_vir_open")
|
||||
src.icon_state = "labcoat_vir"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat_vir")
|
||||
src.icon_state = "labcoat_vir_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labcoat_tox_open")
|
||||
src.icon_state = "labcoat_tox"
|
||||
usr << "You button up the labcoat."
|
||||
if("labcoat_tox")
|
||||
src.icon_state = "labcoat_tox_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if("labgreen_open")
|
||||
src.icon_state = "labgreen"
|
||||
usr << "You button up the labcoat."
|
||||
if("labgreen")
|
||||
src.icon_state = "labgreen_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
if ("labcoat_black_open")
|
||||
src.icon_state = "labcoat_black"
|
||||
usr << "You button up the labcoat."
|
||||
if ("labcoat_black")
|
||||
src.icon_state = "labcoat_black_open"
|
||||
usr << "You unbutton the labcoat."
|
||||
else
|
||||
usr << "You attempt to button-up the velcro on your [src], before promptly realising how silly you are."
|
||||
return
|
||||
update_clothing_icon() //so our overlays update
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/red
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/red
|
||||
name = "red labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. This one is red."
|
||||
icon_state = "red_labcoat_open"
|
||||
item_state = "red_labcoat"
|
||||
icon_open = "red_labcoat_open"
|
||||
icon_closed = "red_labcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/blue
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/blue
|
||||
name = "blue labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. This one is blue."
|
||||
icon_state = "blue_labcoat_open"
|
||||
item_state = "blue_labcoat"
|
||||
icon_open = "blue_labcoat_open"
|
||||
icon_closed = "blue_labcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/purple
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/purple
|
||||
name = "purple labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. This one is purple."
|
||||
icon_state = "purple_labcoat_open"
|
||||
item_state = "purple_labcoat"
|
||||
icon_open = "purple_labcoat_open"
|
||||
icon_closed = "purple_labcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/orange
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/orange
|
||||
name = "orange labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. This one is orange."
|
||||
icon_state = "orange_labcoat_open"
|
||||
item_state = "orange_labcoat"
|
||||
icon_open = "orange_labcoat_open"
|
||||
icon_closed = "orange_labcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/green
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/green
|
||||
name = "green labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. This one is green."
|
||||
icon_state = "green_labcoat_open"
|
||||
item_state = "green_labcoat"
|
||||
icon_open = "green_labcoat_open"
|
||||
icon_closed = "green_labcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/cmo
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo
|
||||
name = "chief medical officer's labcoat"
|
||||
desc = "Bluer than the standard model."
|
||||
icon_state = "labcoat_cmo_open"
|
||||
item_state = "labcoat_cmo"
|
||||
icon_open = "labcoat_cmo_open"
|
||||
icon_closed = "labcoat_cmo"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/cmoalt
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt
|
||||
name = "chief medical officer labcoat"
|
||||
desc = "A labcoat with command blue highlights."
|
||||
icon_state = "labcoat_cmoalt_open"
|
||||
icon_open = "labcoat_cmoalt_open"
|
||||
icon_closed = "labcoat_cmoalt"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/mad
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/mad
|
||||
name = "The Mad's labcoat"
|
||||
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
|
||||
icon_state = "labgreen_open"
|
||||
item_state = "labgreen"
|
||||
icon_open = "labgreen_open"
|
||||
icon_closed = "labgreen"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/genetics
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/genetics
|
||||
name = "Geneticist labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
|
||||
icon_state = "labcoat_gen_open"
|
||||
icon_open = "labcoat_gen_open"
|
||||
icon_closed = "labcoat_gen"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/chemist
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/chemist
|
||||
name = "Chemist labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder."
|
||||
icon_state = "labcoat_chem_open"
|
||||
icon_open = "labcoat_chem_open"
|
||||
icon_closed = "labcoat_chem"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/virologist
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/virologist
|
||||
name = "Virologist labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
|
||||
icon_state = "labcoat_vir_open"
|
||||
icon_open = "labcoat_vir_open"
|
||||
icon_closed = "labcoat_vir"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/science
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||
name = "Scientist labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
|
||||
icon_state = "labcoat_tox_open"
|
||||
icon_open = "labcoat_tox_open"
|
||||
icon_closed = "labcoat_tox"
|
||||
|
||||
@@ -199,28 +199,6 @@
|
||||
item_state = "ianshirt"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
//Blue suit jacket toggle
|
||||
/obj/item/clothing/suit/suit/verb/toggle()
|
||||
set name = "Toggle Jacket Buttons"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
|
||||
if(src.icon_state == "suitjacket_blue_open")
|
||||
src.icon_state = "suitjacket_blue"
|
||||
src.item_state = "suitjacket_blue"
|
||||
usr << "You button up the suit jacket."
|
||||
else if(src.icon_state == "suitjacket_blue")
|
||||
src.icon_state = "suitjacket_blue_open"
|
||||
src.item_state = "suitjacket_blue_open"
|
||||
usr << "You unbutton the suit jacket."
|
||||
else
|
||||
usr << "You button-up some imaginary buttons on your [src]."
|
||||
return
|
||||
update_clothing_icon()
|
||||
|
||||
//pyjamas
|
||||
//originally intended to be pinstripes >.>
|
||||
|
||||
@@ -401,38 +379,20 @@
|
||||
icon_state = "leather_jacket_nt"
|
||||
|
||||
//This one has buttons for some reason
|
||||
/obj/item/clothing/suit/storage/brown_jacket
|
||||
/obj/item/clothing/suit/storage/toggle/brown_jacket
|
||||
name = "leather jacket"
|
||||
desc = "A brown leather coat."
|
||||
icon_state = "brown_jacket"
|
||||
item_state = "brown_jacket"
|
||||
var/open_state = "brown_jacket_open"
|
||||
icon_open = "brown_jacket_open"
|
||||
icon_closed = "brown_jacket"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/brown_jacket/nanotrasen
|
||||
/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
|
||||
desc = "A brown leather coat. The letters NT are proudly displayed on the back."
|
||||
icon_state = "brown_jacket_nt"
|
||||
open_state = "brown_jacket_nt_open"
|
||||
|
||||
/obj/item/clothing/suit/storage/brown_jacket/verb/toggle()
|
||||
set name = "Toggle Jacket Buttons"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
|
||||
//The inhand sprite (the mob sprite that appears when holding the item in your hand)
|
||||
//is unchanged, so update only icon_state, not item_state.
|
||||
if(icon_state == open_state)
|
||||
usr << "You button up the jacket."
|
||||
src.icon_state = initial(icon_state)
|
||||
|
||||
else if(icon_state == initial(icon_state))
|
||||
usr << "You unbutton the jacket."
|
||||
src.icon_state = open_state
|
||||
|
||||
update_clothing_icon() //so our overlays update
|
||||
icon_open = "brown_jacket_nt_open"
|
||||
icon_closed = "brown_jacket_nt"
|
||||
|
||||
/obj/item/clothing/suit/hoodie
|
||||
name = "grey hoodie"
|
||||
|
||||
@@ -26,4 +26,26 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/hear_talk(mob/M, var/msg)
|
||||
pockets.hear_talk(M, msg)
|
||||
..()
|
||||
..()
|
||||
|
||||
//Jackets with buttons, used for labcoats, IA jackets, First Responder jackets, and brown jackets.
|
||||
/obj/item/clothing/suit/storage/toggle
|
||||
var/icon_open
|
||||
var/icon_closed
|
||||
verb/toggle()
|
||||
set name = "Toggle Coat Buttons"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return 0
|
||||
|
||||
if(icon_state == icon_open) //Will check whether icon state is currently set to the "open" or "closed" state and switch it around with a message to the user
|
||||
icon_state = icon_closed
|
||||
usr << "You button up the coat."
|
||||
else if(icon_state == icon_closed)
|
||||
icon_state = icon_open
|
||||
usr << "You unbutton the coat."
|
||||
else //in case some goofy admin switches icon states around without switching the icon_open or icon_closed
|
||||
usr << "You attempt to button-up the velcro on your [src], before promptly realising how silly you are."
|
||||
return
|
||||
update_clothing_icon() //so our overlays update
|
||||
@@ -120,7 +120,7 @@
|
||||
New()
|
||||
..()
|
||||
var/blocked = list(/obj/item/clothing/suit/chameleon,
|
||||
/obj/item/clothing/suit/golem, /obj/item/clothing/suit/suit, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice,
|
||||
/obj/item/clothing/suit/golem, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice,
|
||||
/obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits.
|
||||
for(var/U in typesof(/obj/item/clothing/suit)-blocked)
|
||||
var/obj/item/clothing/suit/V = new U
|
||||
@@ -257,7 +257,7 @@
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
item_color = A.item_color
|
||||
|
||||
|
||||
//so our overlays update.
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
@@ -464,7 +464,7 @@
|
||||
icon_state = A.icon_state
|
||||
item_state = A.item_state
|
||||
flags_inv = A.flags_inv
|
||||
|
||||
|
||||
//so our overlays update.
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/large/fluff/nashida_bishara_1 //rukral:Nashida Bisha'ra
|
||||
name = "Nashida's Etched Beaker"
|
||||
desc = "The message: 'Please do not be removing this beaker from the chemistry lab. If lost, return to Nashida Bisha'ra' can be seen etched into the side of this 100 unit beaker."
|
||||
desc = "The message: 'Please do not be removing this beaker from the chemistry lab. If lost, return to Nashida Bisha'ra' can be seen etched into the side of this large beaker."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "beakerlarge"
|
||||
matter = list("glass" = 5000)
|
||||
@@ -870,11 +870,13 @@
|
||||
icon_state = "mitlabcoat"
|
||||
item_state = "mitlabcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/fluff/epsilon //Devildabeast: Looping Song
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/fluff/epsilon //Devildabeast: Looping Song
|
||||
name = "e UMi labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder. The abbreviation \"e UMi\" is written on the back in bold text."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "labcoat_black_open"
|
||||
icon_open = "labcoat_black_open"
|
||||
icon_closed = "labcoat_black"
|
||||
item_state = "labcoat_black"
|
||||
|
||||
/obj/item/clothing/suit/storage/det_suit/fluff/leatherjack //atomicdog92: Seth Sealis
|
||||
@@ -1415,3 +1417,86 @@
|
||||
desc = "This cane seems to have 'Ryals' engraved on its handle."
|
||||
icon_state = "cane"
|
||||
item_state = "stick"
|
||||
|
||||
////////////////////////////// Foxler - Erstatz Vryroxes /////////////////////////////////////////////////
|
||||
|
||||
/obj/item/weapon/holder/cat/fluff/bones
|
||||
name = "Bones"
|
||||
desc = "It's Bones! Meow."
|
||||
gender = MALE
|
||||
icon_state = "cat3"
|
||||
|
||||
//Use this subtype for spawning in the custom item.
|
||||
/obj/item/weapon/holder/cat/fluff/bones/custom_item
|
||||
|
||||
/obj/item/weapon/holder/cat/fluff/bones/custom_item/New()
|
||||
if (!contents.len)
|
||||
new/mob/living/simple_animal/cat/fluff/bones (src)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/cat/fluff/bones
|
||||
name = "Bones"
|
||||
desc = "That's Bones the cat. He's a laid back, black cat. Meow."
|
||||
gender = MALE
|
||||
icon_state = "cat3"
|
||||
icon_living = "cat3"
|
||||
icon_dead = "cat3_dead"
|
||||
holder_type = /obj/item/weapon/holder/cat/fluff/bones
|
||||
bff_name = "Erstatz Vryroxes"
|
||||
|
||||
/mob/living/simple_animal/cat/fluff
|
||||
var/bff_name
|
||||
var/mob/living/carbon/human/bff
|
||||
|
||||
/mob/living/simple_animal/cat/fluff/handle_movement_target()
|
||||
if (!bff)
|
||||
for (var/mob/living/carbon/human/M in player_list)
|
||||
if (M.real_name == bff_name)
|
||||
bff = M
|
||||
break
|
||||
|
||||
if (bff)
|
||||
var/follow_dist = 5
|
||||
if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit) //danger
|
||||
follow_dist = 1
|
||||
else if (bff.stat || bff.health <= 50) //danger or just sleeping
|
||||
follow_dist = 2
|
||||
var/near_dist = max(follow_dist - 3, 1)
|
||||
var/current_dist = get_dist(src, bff)
|
||||
|
||||
if (movement_target != bff)
|
||||
if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/mouse) && (bff in oview(src)))
|
||||
//stop existing movement
|
||||
walk_to(src,0)
|
||||
turns_since_scan = 0
|
||||
|
||||
//walk to bff
|
||||
stop_automated_movement = 1
|
||||
movement_target = bff
|
||||
walk_to(src, movement_target, near_dist, 4)
|
||||
|
||||
//already following and close enough, stop
|
||||
else if (current_dist <= near_dist)
|
||||
walk_to(src,0)
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
|
||||
if (!(bff && movement_target == bff))
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/cat/fluff/Life()
|
||||
..()
|
||||
if (stat || !bff)
|
||||
return
|
||||
if (get_dist(src, bff) <= 1)
|
||||
if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit)
|
||||
if (prob((bff.stat < DEAD)? 50 : 15))
|
||||
audible_emote(pick("meows in distress.", "meows anxiously."))
|
||||
else
|
||||
if (prob(5))
|
||||
visible_emote(pick("nuzzles [bff].",
|
||||
"brushes against [bff].",
|
||||
"rubs against [bff].",
|
||||
"purrs."))
|
||||
else if (bff.health <= 50)
|
||||
if (prob(10)) audible_emote("meows anxiously.")
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
// All mobs should have custom emote, really..
|
||||
//m_type == 1 --> visual.
|
||||
//m_type == 2 --> audible
|
||||
/mob/proc/custom_emote(var/m_type=1,var/message = null)
|
||||
|
||||
if(stat || !use_me && usr == src)
|
||||
|
||||
@@ -8,7 +8,19 @@
|
||||
//Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE')
|
||||
//Or someone snoring. So we make it where they won't hear it.
|
||||
return
|
||||
|
||||
|
||||
//make sure the air can transmit speech - hearer's side
|
||||
var/turf/T = get_turf(src)
|
||||
if (T)
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = (environment)? environment.return_pressure() : 0
|
||||
if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1)
|
||||
return
|
||||
|
||||
if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet
|
||||
italics = 1
|
||||
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
|
||||
|
||||
if(sleeping || stat == 1)
|
||||
hear_sleep(message)
|
||||
return
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
if(drone_only && !istype(S,/mob/living/silicon/robot/drone))
|
||||
continue
|
||||
else if(istype(S , /mob/living/silicon/ai))
|
||||
message_start = "<i><span class='game say'>[name], <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[src];trackname=[html_encode(speaker.name)]'><span class='name'>[speaker.name]</span></a>"
|
||||
message_start = "<i><span class='game say'>[name], <a href='byond://?src=\ref[S];track2=\ref[S];track=\ref[speaker];trackname=[html_encode(speaker.name)]'><span class='name'>[speaker.name]</span></a>"
|
||||
else if (!S.binarycheck())
|
||||
continue
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
/mob/living/carbon/alien/diona/New()
|
||||
|
||||
..()
|
||||
species = all_species["Diona"]
|
||||
verbs += /mob/living/carbon/proc/eat_weeds
|
||||
verbs += /mob/living/carbon/proc/fertilize_plant
|
||||
verbs += /mob/living/carbon/alien/diona/proc/steal_blood
|
||||
|
||||
@@ -499,7 +499,8 @@
|
||||
if (!( AM.anchored ))
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = AM
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/mob/living/carbon/
|
||||
gender = MALE
|
||||
var/datum/species/species //Contains icon generation and language information, set during New().
|
||||
var/list/stomach_contents = list()
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/antibodies = 0
|
||||
|
||||
@@ -72,7 +72,12 @@
|
||||
|
||||
if(B.host_brain.ckey)
|
||||
src << "\red <B>You send a punishing spike of psychic agony lancing into your host's brain.</B>"
|
||||
B.host_brain << "\red <B><FONT size=3>Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!</FONT></B>"
|
||||
|
||||
if (species && (species.flags & NO_PAIN))
|
||||
B.host_brain << "\red You feel a strange sensation as a foreign influence prods your mind."
|
||||
src << "\red <B>It doesn't seem to be as effective as you hoped.</B>"
|
||||
else
|
||||
B.host_brain << "\red <B><FONT size=3>Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!</FONT></B>"
|
||||
|
||||
/mob/living/carbon/proc/spawn_larvae()
|
||||
set category = "Abilities"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
icon_state = "body_m_s"
|
||||
|
||||
var/list/hud_list[9]
|
||||
var/datum/species/species //Contains icon generation and language information, set during New().
|
||||
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
|
||||
|
||||
/mob/living/carbon/human/New(var/new_loc, var/new_species = null)
|
||||
|
||||
@@ -351,7 +351,7 @@ This function restores all organs.
|
||||
|
||||
//Handle other types of damage
|
||||
if((damagetype != BRUTE) && (damagetype != BURN))
|
||||
if(damagetype == HALLOSS)
|
||||
if(damagetype == HALLOSS && !(species && (species.flags & NO_PAIN)))
|
||||
if ((damage > 25 && prob(20)) || (damage > 50 && prob(60)))
|
||||
emote("scream")
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
var/health_deficiency = (100 - health)
|
||||
if(health_deficiency >= 40) tally += (health_deficiency / 25)
|
||||
|
||||
if(halloss >= 10) tally += (halloss / 10)
|
||||
if (!(species && (species.flags & NO_PAIN)))
|
||||
if(halloss >= 10) tally += (halloss / 10) //halloss shouldn't slow you down if you can't even feel it
|
||||
|
||||
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
|
||||
if (hungry >= 70) tally += hungry/50
|
||||
@@ -55,8 +56,7 @@
|
||||
if (bodytemperature < 283.222)
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
|
||||
if(can_stand <= 1)
|
||||
tally += 5 //hopping around on one foot is slow
|
||||
tally += 2*stance_damage //damaged/missing feet or legs is slow
|
||||
|
||||
if(mRun in mutations)
|
||||
tally = 0
|
||||
|
||||
@@ -147,7 +147,8 @@
|
||||
if (!( AM.anchored ))
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = AM
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
@@ -61,13 +61,15 @@
|
||||
loc = M.loc
|
||||
|
||||
if(prob(15) && M.client && istype(M, /mob/living/carbon))
|
||||
M << "<span class='danger'>[pick("You can feel your body becoming weak!", \
|
||||
"You feel like you're about to die!", \
|
||||
"You feel every part of your body screaming in agony!", \
|
||||
"A low, rolling pain passes through your body!", \
|
||||
"Your body feels as if it's falling apart!", \
|
||||
"You feel extremely weak!", \
|
||||
"A sharp, deep pain bathes every inch of your body!")]</span>"
|
||||
var/mob/living/carbon/C = M
|
||||
if (!(C.species && (C.species.flags & NO_PAIN)))
|
||||
M << "<span class='danger'>[pick("You can feel your body becoming weak!", \
|
||||
"You feel like you're about to die!", \
|
||||
"You feel every part of your body screaming in agony!", \
|
||||
"A low, rolling pain passes through your body!", \
|
||||
"Your body feels as if it's falling apart!", \
|
||||
"You feel extremely weak!", \
|
||||
"A sharp, deep pain bathes every inch of your body!")]</span>"
|
||||
|
||||
if(istype(M, /mob/living/carbon))
|
||||
Victim.adjustCloneLoss(rand(5,6))
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
species = all_species[greaterform]
|
||||
add_language(species.language)
|
||||
|
||||
if(name == initial(name)) //To stop Pun-Pun becoming generic.
|
||||
name = "[name] ([rand(1, 1000)])"
|
||||
real_name = name
|
||||
@@ -78,24 +81,22 @@
|
||||
|
||||
/mob/living/carbon/monkey/unathi/New()
|
||||
|
||||
..()
|
||||
dna.mutantrace = "lizard"
|
||||
greaterform = "Unathi"
|
||||
add_language("Sinta'unathi")
|
||||
..()
|
||||
|
||||
/mob/living/carbon/monkey/skrell/New()
|
||||
|
||||
..()
|
||||
|
||||
dna.mutantrace = "skrell"
|
||||
greaterform = "Skrell"
|
||||
add_language("Skrellian")
|
||||
..()
|
||||
|
||||
/mob/living/carbon/monkey/tajara/New()
|
||||
|
||||
..()
|
||||
dna.mutantrace = "tajaran"
|
||||
greaterform = "Tajara"
|
||||
add_language("Siik'tajr")
|
||||
..()
|
||||
|
||||
/mob/living/carbon/monkey/movement_delay()
|
||||
var/tally = 0
|
||||
@@ -287,4 +288,4 @@
|
||||
|
||||
message = capitalize(trim_left(message))
|
||||
|
||||
..(message, speaking, verb, alt_name, italics, message_range, used_radios)
|
||||
..(message, speaking, verb, alt_name, italics, message_range, used_radios)
|
||||
|
||||
@@ -436,7 +436,8 @@
|
||||
else
|
||||
if (pulling)
|
||||
if (istype(pulling, /obj/structure/window))
|
||||
if(pulling:ini_dir == NORTHWEST || pulling:ini_dir == NORTHEAST || pulling:ini_dir == SOUTHWEST || pulling:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = pulling
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T)))
|
||||
stop_pulling()
|
||||
if (pulling)
|
||||
|
||||
@@ -91,22 +91,21 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
|
||||
if (speaking.flags & SIGNLANG)
|
||||
return say_signlang(message, pick(speaking.signlang_verb), speaking)
|
||||
|
||||
//make sure the air can transmit speech
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
if(environment)
|
||||
var/pressure = environment.return_pressure()
|
||||
if(pressure < SOUND_MINIMUM_PRESSURE)
|
||||
italics = 1
|
||||
message_range = 1
|
||||
|
||||
if (speech_sound)
|
||||
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
|
||||
|
||||
|
||||
var/list/listening = list()
|
||||
var/list/listening_obj = list()
|
||||
|
||||
if(T)
|
||||
//make sure the air can transmit speech - speaker's side
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = (environment)? environment.return_pressure() : 0
|
||||
if(pressure < SOUND_MINIMUM_PRESSURE)
|
||||
message_range = 1
|
||||
|
||||
if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet
|
||||
italics = 1
|
||||
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
|
||||
|
||||
var/list/hear = hear(message_range, T)
|
||||
var/list/hearturfs = list()
|
||||
|
||||
|
||||
@@ -509,24 +509,7 @@ var/list/ai_verbs_default = list(
|
||||
else
|
||||
src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]."
|
||||
return
|
||||
|
||||
else if (href_list["faketrack"])
|
||||
var/mob/target = locate(href_list["track"]) in mob_list
|
||||
var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list
|
||||
if(A && target)
|
||||
|
||||
A.cameraFollow = target
|
||||
A << text("Now tracking [] on camera.", target.name)
|
||||
if (usr.machine == null)
|
||||
usr.machine = usr
|
||||
|
||||
while (src.cameraFollow == target)
|
||||
usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)."
|
||||
sleep(40)
|
||||
continue
|
||||
|
||||
return
|
||||
|
||||
|
||||
return
|
||||
|
||||
/mob/living/silicon/ai/meteorhit(obj/O as obj)
|
||||
|
||||
@@ -27,18 +27,22 @@
|
||||
laws.clear_supplied_laws()
|
||||
|
||||
/mob/living/silicon/proc/statelaws() // -- TLE
|
||||
if(stating_laws)
|
||||
src << "<span class='notice'>You are currently stating laws.</span>"
|
||||
return
|
||||
stating_laws = 1
|
||||
|
||||
var/prefix = ""
|
||||
switch(lawchannel)
|
||||
if(MAIN_CHANNEL) prefix = ";" // Apparently defines are not constant expressions?
|
||||
if(MAIN_CHANNEL) prefix = ";"
|
||||
if("Binary") prefix = ":b "
|
||||
else
|
||||
prefix = get_radio_key_from_channel(lawchannel == "Holopad" ? "department" : lawchannel) + " "
|
||||
|
||||
dostatelaws(lawchannel, prefix)
|
||||
|
||||
/mob/living/silicon/proc/dostatelaws(var/method, var/prefix)
|
||||
if(stating_laws[prefix])
|
||||
src << "<span class='notice'>[method]: Already stating laws using this communication method.</span>"
|
||||
return
|
||||
|
||||
stating_laws[prefix] = 1
|
||||
|
||||
var/can_state = statelaw("[prefix]Current Active Laws:")
|
||||
|
||||
//src.laws_sanity_check()
|
||||
@@ -71,9 +75,8 @@
|
||||
number++
|
||||
|
||||
if(!can_state)
|
||||
src << "<span class='danger'>Unable to state laws. Communication method unavailable.</span>"
|
||||
|
||||
stating_laws = 0
|
||||
src << "<span class='danger'>[method]: Unable to state laws. Communication method unavailable.</span>"
|
||||
stating_laws[prefix] = 0
|
||||
|
||||
/mob/living/silicon/proc/statelaw(var/law)
|
||||
if(src.say(law))
|
||||
@@ -93,10 +96,7 @@
|
||||
|
||||
for (var/index = 1, index <= src.laws.ion.len, index++)
|
||||
var/law = src.laws.ion[index]
|
||||
|
||||
if (length(law) > 0)
|
||||
|
||||
|
||||
if (!src.ioncheck[index])
|
||||
src.ioncheck[index] = "Yes"
|
||||
list += {"<A href='byond://?src=\ref[src];lawi=[index]'>[src.ioncheck[index]] [ionnum()]:</A> [law]<BR>"}
|
||||
@@ -105,10 +105,8 @@
|
||||
var/number = 1
|
||||
for (var/index = 1, index <= src.laws.inherent.len, index++)
|
||||
var/law = src.laws.inherent[index]
|
||||
|
||||
if (length(law) > 0)
|
||||
src.lawcheck.len += 1
|
||||
|
||||
if (!src.lawcheck[number+1])
|
||||
src.lawcheck[number+1] = "Yes"
|
||||
list += {"<A href='byond://?src=\ref[src];lawc=[number]'>[src.lawcheck[number+1]] [number]:</A> [law]<BR>"}
|
||||
|
||||
@@ -612,7 +612,8 @@ var/list/robot_verbs_default = list(
|
||||
if (!AM.anchored)
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = AM
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
stacktypes = list(
|
||||
/obj/item/stack/sheet/metal = 50,
|
||||
/obj/item/stack/sheet/plasteel = 10,
|
||||
/obj/item/stack/sheet/rglass = 50,
|
||||
/obj/item/stack/sheet/glass/reinforced = 50,
|
||||
/obj/item/stack/rods = 50
|
||||
)
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
stacktypes = list(
|
||||
/obj/item/stack/sheet/metal = 50,
|
||||
/obj/item/stack/sheet/glass = 50,
|
||||
/obj/item/stack/sheet/rglass = 50,
|
||||
/obj/item/stack/sheet/glass/reinforced = 50,
|
||||
/obj/item/stack/cable_coil = 50,
|
||||
/obj/item/stack/rods = 15,
|
||||
/obj/item/stack/tile/plasteel = 15
|
||||
@@ -217,7 +217,7 @@
|
||||
M.amount = 50
|
||||
src.modules += M
|
||||
|
||||
var/obj/item/stack/sheet/rglass/cyborg/R = new /obj/item/stack/sheet/rglass/cyborg(src)
|
||||
var/obj/item/stack/sheet/glass/reinforced/cyborg/R = new (src)
|
||||
R.amount = 50
|
||||
src.modules += R
|
||||
|
||||
@@ -400,7 +400,7 @@
|
||||
stacktypes = list(
|
||||
/obj/item/stack/sheet/wood = 1,
|
||||
/obj/item/stack/sheet/mineral/plastic = 1,
|
||||
/obj/item/stack/sheet/rglass = 5,
|
||||
/obj/item/stack/sheet/glass/reinforced = 5,
|
||||
/obj/item/stack/tile/wood = 5,
|
||||
/obj/item/stack/rods = 15,
|
||||
/obj/item/stack/tile/plasteel = 15,
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
var/list/additional_law_channels = list("State")
|
||||
var/const/MAIN_CHANNEL = "Main Frequency"
|
||||
var/lawchannel = MAIN_CHANNEL // Default channel on which to state laws
|
||||
var/list/stating_laws = list()// Channels laws are currently being stated on
|
||||
var/lawcheck[1]
|
||||
var/ioncheck[1]
|
||||
var/stating_laws = 0
|
||||
var/obj/item/device/radio/common_radio
|
||||
|
||||
immune_to_ssd = 1
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
speak_emote = list("chirrups")
|
||||
emote_hear = list("chirrups")
|
||||
response_help = "pokes"
|
||||
response_disarm = "prods the"
|
||||
response_harm = "stomps on the"
|
||||
response_disarm = "prods"
|
||||
response_harm = "stomps on"
|
||||
icon_state = "brainslug"
|
||||
icon_living = "brainslug"
|
||||
icon_dead = "brainslug_dead"
|
||||
|
||||
@@ -79,7 +79,8 @@
|
||||
if (!( AM.anchored ))
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = AM
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
speak = list("Meow!","Esp!","Purr!","HSSSSS")
|
||||
speak_emote = list("purrs", "meows")
|
||||
emote_hear = list("meows","mews")
|
||||
emote_see = list("shakes its head", "shivers")
|
||||
emote_see = list("shakes their head", "shivers")
|
||||
speak_chance = 1
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
var/turns_since_scan = 0
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||
@@ -27,40 +27,45 @@
|
||||
//MICE!
|
||||
if((src.loc) && isturf(src.loc))
|
||||
if(!stat && !resting && !buckled)
|
||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||
for(var/mob/living/simple_animal/mouse/M in loc)
|
||||
if(!M.stat)
|
||||
M.splat()
|
||||
emote(pick("\red splats the [M]!","\red toys with the [M]","worries the [M]"))
|
||||
visible_emote(pick("bites \the [M]!","toys with \the [M].","chomps on \the [M]!"))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
break
|
||||
|
||||
..()
|
||||
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src, 3))
|
||||
if(prob(15))
|
||||
emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,5))
|
||||
if(snack.stat < DEAD && prob(15))
|
||||
audible_emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
|
||||
break
|
||||
|
||||
if(!stat && !resting && !buckled)
|
||||
turns_since_scan++
|
||||
if(turns_since_scan > 5)
|
||||
walk_to(src,0)
|
||||
turns_since_scan = 0
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
||||
if(isturf(snack.loc) && !snack.stat)
|
||||
movement_target = snack
|
||||
break
|
||||
if(movement_target)
|
||||
stop_automated_movement = 1
|
||||
walk_to(src,movement_target,0,3)
|
||||
handle_movement_target()
|
||||
|
||||
/mob/living/simple_animal/cat/proc/handle_movement_target()
|
||||
turns_since_scan++
|
||||
if(turns_since_scan > 5)
|
||||
walk_to(src,0)
|
||||
turns_since_scan = 0
|
||||
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 4)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src))
|
||||
if(isturf(snack.loc) && !snack.stat)
|
||||
movement_target = snack
|
||||
world << "[src]: mouse located."
|
||||
break
|
||||
if(movement_target)
|
||||
world << "[src]: locking on [movement_target]"
|
||||
stop_automated_movement = 1
|
||||
walk_to(src,movement_target,0,3)
|
||||
|
||||
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
|
||||
|
||||
@@ -73,10 +78,16 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/cat/get_scooped(var/mob/living/carbon/grabber)
|
||||
if (stat >= DEAD)
|
||||
return //since the holder icon looks like a living cat
|
||||
..()
|
||||
|
||||
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
||||
/mob/living/simple_animal/cat/Runtime
|
||||
name = "Runtime"
|
||||
desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
|
||||
gender = FEMALE
|
||||
icon_state = "cat"
|
||||
icon_living = "cat"
|
||||
icon_dead = "cat_dead"
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
turns_per_move = 10
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
meat_amount = 3
|
||||
response_help = "pets the"
|
||||
response_disarm = "bops the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "kicks"
|
||||
see_in_dark = 5
|
||||
var/obj/item/inventory_head
|
||||
var/obj/item/inventory_back
|
||||
@@ -58,7 +58,7 @@
|
||||
for (var/mob/M in viewers(src, null))
|
||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||
if(prob(15))
|
||||
emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face")
|
||||
visible_emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -310,10 +310,10 @@
|
||||
if(isturf(movement_target.loc) )
|
||||
UnarmedAttack(movement_target)
|
||||
else if(ishuman(movement_target.loc) && prob(20))
|
||||
custom_emote(1,"stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.")
|
||||
visible_emote("stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.")
|
||||
|
||||
if(prob(1))
|
||||
emote(pick("dances around","chases its tail"))
|
||||
visible_emote(pick("dances around","chases their tail"))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
dir = i
|
||||
@@ -350,7 +350,8 @@
|
||||
if (!( AM.anchored ))
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = AM
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
@@ -467,7 +468,7 @@
|
||||
|
||||
|
||||
if(prob(1))
|
||||
emote(pick("dances around","chases her tail"))
|
||||
visible_emote(pick("dances around","chases her tail"))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||
dir = i
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
speak_chance = 1
|
||||
turns_per_move = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "stomps the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
stop_automated_movement = 1
|
||||
friendly = "pinches"
|
||||
var/obj/item/inventory_head
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
meat_amount = 4
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
faction = "goat"
|
||||
attacktext = "kicked"
|
||||
health = 40
|
||||
@@ -99,9 +99,9 @@
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
meat_amount = 6
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
health = 50
|
||||
var/datum/reagents/udder = null
|
||||
@@ -160,9 +160,9 @@
|
||||
turns_per_move = 2
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
meat_amount = 1
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
health = 1
|
||||
var/amount_grown = 0
|
||||
@@ -201,9 +201,9 @@ var/global/chicken_count = 0
|
||||
turns_per_move = 3
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
meat_amount = 2
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
health = 10
|
||||
var/eggsleft = 0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/simple_animal/mouse
|
||||
name = "mouse"
|
||||
real_name = "mouse"
|
||||
desc = "It's a small, disease-ridden rodent."
|
||||
desc = "It's a small rodent."
|
||||
icon_state = "mouse_gray"
|
||||
icon_living = "mouse_gray"
|
||||
icon_dead = "mouse_gray_dead"
|
||||
@@ -17,9 +17,9 @@
|
||||
maxHealth = 5
|
||||
health = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "stamps on the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stamps on"
|
||||
density = 0
|
||||
var/body_color //brown, gray and white, leave blank for random
|
||||
layer = MOB_LAYER
|
||||
@@ -47,7 +47,7 @@
|
||||
icon_state = "mouse_[body_color]"
|
||||
wander = 1
|
||||
else if(prob(5))
|
||||
emote("snuffles")
|
||||
audible_emote("snuffles.")
|
||||
|
||||
/mob/living/simple_animal/mouse/New()
|
||||
..()
|
||||
@@ -110,9 +110,6 @@
|
||||
/mob/living/simple_animal/mouse/brown/Tom
|
||||
name = "Tom"
|
||||
desc = "Jerry the cat is not amused."
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "splats"
|
||||
|
||||
/mob/living/simple_animal/mouse/can_use_vents()
|
||||
return
|
||||
@@ -10,7 +10,7 @@
|
||||
maxHealth = 5
|
||||
health = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "whacks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "whacks"
|
||||
harm_intent_damage = 5
|
||||
@@ -41,7 +41,8 @@
|
||||
if (!( AM.anchored ))
|
||||
var/t = get_dir(src, AM)
|
||||
if (istype(AM, /obj/structure/window))
|
||||
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
|
||||
var/obj/structure/window/W = AM
|
||||
if(W.is_full_window())
|
||||
for(var/obj/structure/window/win in get_step(AM,t))
|
||||
now_pushing = 0
|
||||
return
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
maxHealth = 15
|
||||
health = 15
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
|
||||
response_help = "prods the"
|
||||
response_disarm = "pushes aside the"
|
||||
response_harm = "smacks the"
|
||||
response_help = "prods"
|
||||
response_disarm = "pushes aside"
|
||||
response_harm = "smacks"
|
||||
harm_intent_damage = 5
|
||||
@@ -12,9 +12,9 @@
|
||||
speak_chance = 1
|
||||
turns_per_move = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "punches the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "punches"
|
||||
var/list/insults = list(
|
||||
"Man you suck",
|
||||
"You look like the most retarded douche around",
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
icon_living = "alienh_running"
|
||||
icon_dead = "alien_l"
|
||||
icon_gib = "syndicate_gib"
|
||||
response_help = "pokes the"
|
||||
response_disarm = "shoves the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = -1
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||
maxHealth = 100
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "pokes the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "pokes"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
if(HOSTILE_STANCE_ATTACKING)
|
||||
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
|
||||
custom_emote(1, "is worn out and needs to rest" )
|
||||
custom_emote(1, "is worn out and needs to rest." )
|
||||
stance = HOSTILE_STANCE_TIRED
|
||||
stance_step = 0
|
||||
walk(src, 0) //This stops the bear's walking
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
icon_dead = "faithless_dead"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "passes through the"
|
||||
response_help = "passes through"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits the"
|
||||
response_harm = "hits"
|
||||
speed = -1
|
||||
maxHealth = 80
|
||||
health = 80
|
||||
@@ -38,7 +38,7 @@
|
||||
/mob/living/simple_animal/hostile/faithless/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("wails at [.]")
|
||||
audible_emote("wails at [.]")
|
||||
|
||||
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
turns_per_move = 5
|
||||
see_in_dark = 10
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "pokes the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "pokes"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
icon_living = "crate"
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
response_help = "touches the"
|
||||
response_disarm = "pushes the"
|
||||
response_harm = "hits the"
|
||||
response_help = "touches"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "hits"
|
||||
speed = 4
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
@@ -39,7 +39,7 @@
|
||||
/mob/living/simple_animal/hostile/mimic/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("growls at [.]")
|
||||
audible_emote("growls at [.]")
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/death()
|
||||
..()
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
icon_dead = "piratemelee_dead"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pushes the"
|
||||
response_help = "pushes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits the"
|
||||
response_harm = "hits"
|
||||
speed = 4
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 100
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/clown
|
||||
name = "Clown"
|
||||
name = "clown"
|
||||
desc = "A denizen of clown planet"
|
||||
icon_state = "clown"
|
||||
icon_living = "clown"
|
||||
@@ -7,9 +7,9 @@
|
||||
icon_gib = "clown_gib"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pokes the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pokes"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
speak = list("HONK", "Honk!", "Welcome to clown planet!")
|
||||
emote_see = list("honks")
|
||||
speak_chance = 1
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
rapid = 1
|
||||
speak_chance = 5
|
||||
turns_per_move = 3
|
||||
response_help = "pokes the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pokes"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
|
||||
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
|
||||
a_intent = "harm"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/hostile/russian
|
||||
name = "Russian"
|
||||
name = "russian"
|
||||
desc = "For the Motherland!"
|
||||
icon_state = "russianmelee"
|
||||
icon_living = "russianmelee"
|
||||
@@ -7,9 +7,9 @@
|
||||
icon_gib = "syndicate_gib"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pokes the"
|
||||
response_disarm = "shoves the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = 4
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 100
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/simple_animal/hostile/syndicate
|
||||
name = "Syndicate Operative"
|
||||
name = "\improper Syndicate operative"
|
||||
desc = "Death to Nanotrasen."
|
||||
icon_state = "syndicate"
|
||||
icon_living = "syndicate"
|
||||
@@ -7,9 +7,9 @@
|
||||
icon_gib = "syndicate_gib"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
response_help = "pokes the"
|
||||
response_disarm = "shoves the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = 4
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 100
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
response_help = "brushes the"
|
||||
response_disarm = "pushes the"
|
||||
response_harm = "hits the"
|
||||
response_help = "brushes"
|
||||
response_disarm = "pushes"
|
||||
response_harm = "hits"
|
||||
speed = -1
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
@@ -40,7 +40,7 @@
|
||||
/mob/living/simple_animal/hostile/tree/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("growls at [.]")
|
||||
audible_emote("growls at [.]")
|
||||
|
||||
/mob/living/simple_animal/hostile/tree/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
turns_per_move = 5
|
||||
see_in_dark = 6
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "kicks the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
minbodytemp = 250
|
||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
turns_per_move = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cracker/
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently moves aside the"
|
||||
response_harm = "swats the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently moves aside"
|
||||
response_harm = "swats"
|
||||
stop_automated_movement = 1
|
||||
universal_speak = 1
|
||||
|
||||
@@ -342,7 +342,7 @@
|
||||
//Search for item to steal
|
||||
parrot_interest = search_for_item()
|
||||
if(parrot_interest)
|
||||
emote("looks in [parrot_interest]'s direction and takes flight")
|
||||
visible_emote("looks in [parrot_interest]'s direction and takes flight")
|
||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||
icon_state = "parrot_fly"
|
||||
return
|
||||
@@ -364,7 +364,7 @@
|
||||
if(AM)
|
||||
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
|
||||
parrot_interest = AM
|
||||
emote("turns and flies towards [parrot_interest]")
|
||||
visible_emote("turns and flies towards [parrot_interest]")
|
||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||
return
|
||||
else //Else it's a perch
|
||||
@@ -478,11 +478,11 @@
|
||||
var/datum/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
|
||||
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
|
||||
emote(pick("pecks [H]'s [affecting]", "cuts [H]'s [affecting] with its talons"))
|
||||
visible_emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
|
||||
|
||||
else
|
||||
L.adjustBruteLoss(damage)
|
||||
emote(pick("pecks at [L]", "claws [L]"))
|
||||
visible_emote(pick("pecks at [L].", "claws [L]."))
|
||||
return
|
||||
|
||||
//Otherwise, fly towards the mob!
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
emote_hear = list("wails","screeches")
|
||||
response_help = "puts their hand through"
|
||||
response_disarm = "flails at"
|
||||
response_harm = "punches the"
|
||||
response_harm = "punches"
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 15
|
||||
attacktext = "drained the life from"
|
||||
|
||||
@@ -114,23 +114,23 @@
|
||||
else
|
||||
randomValue -= speak.len
|
||||
if(emote_see && randomValue <= emote_see.len)
|
||||
emote(pick(emote_see),1)
|
||||
visible_emote("[pick(emote_see)].")
|
||||
else
|
||||
emote(pick(emote_hear),2)
|
||||
audible_emote("[pick(emote_hear)].")
|
||||
else
|
||||
say(pick(speak))
|
||||
else
|
||||
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||
emote(pick(emote_see),1)
|
||||
visible_emote("[pick(emote_see)].")
|
||||
if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
|
||||
emote(pick(emote_hear),2)
|
||||
audible_emote("[pick(emote_hear)].")
|
||||
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||
var/length = emote_hear.len + emote_see.len
|
||||
var/pick = rand(1,length)
|
||||
if(pick <= emote_see.len)
|
||||
emote(pick(emote_see),1)
|
||||
visible_emote("[pick(emote_see)].")
|
||||
else
|
||||
emote(pick(emote_hear),2)
|
||||
audible_emote("[pick(emote_hear)].")
|
||||
|
||||
|
||||
//Atmos
|
||||
@@ -207,9 +207,14 @@
|
||||
|
||||
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
|
||||
if(act)
|
||||
if(act == "scream") act = "whimper" //ugly hack to stop animals screaming when crushed :P
|
||||
..(act, type, desc)
|
||||
|
||||
/mob/living/simple_animal/proc/visible_emote(var/act_desc)
|
||||
custom_emote(1, act_desc)
|
||||
|
||||
/mob/living/simple_animal/proc/audible_emote(var/act_desc)
|
||||
custom_emote(2, act_desc)
|
||||
|
||||
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj || Proj.nodamage)
|
||||
return
|
||||
@@ -224,9 +229,11 @@
|
||||
|
||||
if("help")
|
||||
if (health > 0)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\blue [M] [response_help] [src]")
|
||||
M.visible_message("\blue [M] [response_help] \the [src]")
|
||||
|
||||
if("disarm")
|
||||
M.visible_message("\blue [M] [response_disarm] \the [src]")
|
||||
//TODO: Push the mob away or something
|
||||
|
||||
if("grab")
|
||||
if (M == src)
|
||||
@@ -242,15 +249,11 @@
|
||||
G.affecting = src
|
||||
LAssailant = M
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
|
||||
M.visible_message("\red [M] has grabbed [src] passively!")
|
||||
|
||||
if("hurt", "disarm")
|
||||
if("hurt")
|
||||
adjustBruteLoss(harm_intent_damage)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\red [M] [response_harm] [src]")
|
||||
M.visible_message("\red [M] [response_harm] \the [src]")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
|
||||
var/universal_understand = 0 // Set to 1 to enable the mob to understand everyone, not necessarily speak
|
||||
|
||||
var/can_stand = 2 //Whether this mob have ability to stand
|
||||
var/stance_damage = 0 //Whether this mob's ability to stand has been affected
|
||||
|
||||
var/immune_to_ssd = 0
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user