mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-26 18:13:35 +00:00
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into randmap
This commit is contained in:
@@ -353,7 +353,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
dat+={"<HR><B>Feed Security functions:</B><BR>
|
||||
<BR><A href='?src=\ref[src];ac_menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>
|
||||
<BR><A href='?src=\ref[src];ac_menu_censor_story=1'>Censor Feed Stories</A>
|
||||
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel.</A>
|
||||
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with [company_name] D-Notice (disables and locks the channel.</A>
|
||||
<BR><HR><A href='?src=\ref[src];ac_set_signature=1'>The newscaster recognises you as:<BR> <FONT COLOR='green'>[src.admincaster_signature]</FONT></A>
|
||||
"}
|
||||
if(1)
|
||||
@@ -419,7 +419,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
dat+="<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT>\]</FONT><HR>"
|
||||
if(src.admincaster_feed_channel.censored)
|
||||
dat+={"
|
||||
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.<BR>
|
||||
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>
|
||||
No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>
|
||||
"}
|
||||
else
|
||||
@@ -440,7 +440,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
"}
|
||||
if(10)
|
||||
dat+={"
|
||||
<B>Nanotrasen Feed Censorship Tool</B><BR>
|
||||
<B>[company_name] Feed Censorship Tool</B><BR>
|
||||
<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>
|
||||
Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>
|
||||
<HR>Select Feed channel to get Stories from:<BR>
|
||||
@@ -453,7 +453,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
|
||||
if(11)
|
||||
dat+={"
|
||||
<B>Nanotrasen D-Notice Handler</B><HR>
|
||||
<B>[company_name] D-Notice Handler</B><HR>
|
||||
<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's
|
||||
morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed
|
||||
stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>
|
||||
@@ -486,7 +486,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
"}
|
||||
if(src.admincaster_feed_channel.censored)
|
||||
dat+={"
|
||||
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.<BR>
|
||||
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>
|
||||
No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>
|
||||
"}
|
||||
else
|
||||
|
||||
@@ -18,7 +18,7 @@ var/list/admin_datums = list()
|
||||
error("Admin datum created without a ckey argument. Datum has been deleted")
|
||||
qdel(src)
|
||||
return
|
||||
admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
|
||||
admincaster_signature = "[company_name] Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
|
||||
rank = initial_rank
|
||||
rights = initial_rights
|
||||
admin_datums[ckey] = src
|
||||
@@ -43,7 +43,7 @@ var/list/admin_datums = list()
|
||||
owner.holder = src
|
||||
owner.deadmin_holder = null
|
||||
owner.add_admin_verbs()
|
||||
|
||||
|
||||
|
||||
/*
|
||||
checks if usr is an admin with at least ONE of the flags in rights_required. (Note, they don't need all the flags)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
//log_admin("HELP: [key_name(src)]: [msg]")
|
||||
|
||||
/proc/Centcomm_announce(var/msg, var/mob/Sender, var/iamessage)
|
||||
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>) ([admin_jump_link(Sender, src)]) (<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]"
|
||||
msg = "\blue <b><font color=orange>[uppertext(boss_short)]M[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>) ([admin_jump_link(Sender, src)]) (<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]"
|
||||
for(var/client/C in admins)
|
||||
if(R_ADMIN & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
@@ -515,7 +515,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(!input)
|
||||
return
|
||||
if(!customname)
|
||||
customname = "NanoTrasen Update"
|
||||
customname = "[company_name] Update"
|
||||
for (var/obj/machinery/computer/communications/C in machines)
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
@@ -529,7 +529,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if("Yes")
|
||||
command_announcement.Announce(input, customname, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
|
||||
if("No")
|
||||
world << "\red New NanoTrasen Update available at all communication consoles."
|
||||
world << "\red New [company_name] Update available at all communication consoles."
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
|
||||
log_admin("[key_name(src)] has created a command report: [input]")
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
dat += "Locked on<BR>"
|
||||
dat += "<B>Charge progress: [reload]/180:</B><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
|
||||
dat += "Deployment of weapon authorized by <br>Nanotrasen Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
||||
dat += "Deployment of weapon authorized by <br>[company_name] Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
||||
user << browse(dat, "window=scroll")
|
||||
onclose(user, "scroll")
|
||||
return
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
W.access = list()
|
||||
if(corpseidjob)
|
||||
W.assignment = corpseidjob
|
||||
W.set_owner_info(M)
|
||||
M.set_id_info(W)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
|
||||
<b>Name:</b> [company_name] Employee Exile Implant<BR>
|
||||
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
|
||||
return dat
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
/obj/item/weapon/paper/pamphlet
|
||||
name = "pamphlet"
|
||||
icon_state = "pamphlet"
|
||||
info = "<b>Welcome to the Nanotrasen Gateway project...</b><br>\
|
||||
info = "<b>Welcome to the Gateway project...</b><br>\
|
||||
Congratulations! If you're reading this, you and your superiors have decided that you're \
|
||||
ready to commit to a life spent colonising the rolling hills of far away worlds. You \
|
||||
must be ready for a lifetime of adventure, a little bit of hard work, and an award \
|
||||
winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.<br>\
|
||||
winning dental plan- but that's not all the Gateway project has to offer.<br>\
|
||||
<br>Because we care about you, we feel it is only fair to make sure you know the risks \
|
||||
before you commit to joining the Nanotrasen Gateway project. All away destinations have \
|
||||
been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \
|
||||
before you commit to joining the Gateway project. All away destinations have \
|
||||
been fully scanned by a expeditionary team, and are certified to be 100% safe. \
|
||||
We've even left a case of space beer along with the basic materials you'll need to expand \
|
||||
Nanotrasen's operational area and start your new life.<br><br>\
|
||||
the Project's operational area and start your new life.<br><br>\
|
||||
<b>Gateway Operation Basics</b><br>\
|
||||
All Nanotrasen approved Gateways operate on the same basic principals. They operate off \
|
||||
All approved Gateways operate on the same basic principals. They operate off \
|
||||
area equipment power as you would expect, but they also require a backup wire with at least \
|
||||
128, 000 Watts of power running through it. Without this supply, it cannot safely function \
|
||||
and will reject all attempts at operation.<br><br>\
|
||||
@@ -29,7 +29,7 @@
|
||||
number of cases, the Gateway they have established may not be immediately obvious. \
|
||||
Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \
|
||||
<br><br><b>A New World</b><br>\
|
||||
As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \
|
||||
As a participant in the Gateway Project, you will be on the frontiers of space. \
|
||||
Though complete safety is assured, participants are advised to prepare for inhospitable \
|
||||
environs."
|
||||
|
||||
|
||||
@@ -411,7 +411,7 @@ datum/preferences
|
||||
|
||||
dat += "Backpack Type:<br><a href ='?_src_=prefs;preference=bag;task=input'><b>[backbaglist[backbag]]</b></a><br>"
|
||||
|
||||
dat += "Nanotrasen Relation:<br><a href ='?_src_=prefs;preference=nt_relation;task=input'><b>[nanotrasen_relation]</b></a><br>"
|
||||
dat += "[company_name] Relation:<br><a href ='?_src_=prefs;preference=nt_relation;task=input'><b>[nanotrasen_relation]</b></a><br>"
|
||||
|
||||
dat += "</td><td><b>Preview</b><br><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></td></tr></table>"
|
||||
|
||||
|
||||
@@ -678,7 +678,7 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_wear_suit
|
||||
|
||||
/datum/gear/leather_jacket_nt
|
||||
display_name = "leather jacket, NanoTrasen, black"
|
||||
display_name = "leather jacket, corporate, black"
|
||||
path = /obj/item/clothing/suit/storage/leather_jacket/nanotrasen
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
@@ -690,7 +690,7 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_wear_suit
|
||||
|
||||
/datum/gear/brown_jacket_nt
|
||||
display_name = "leather jacket, NanoTrasen, brown"
|
||||
display_name = "leather jacket, corporate, brown"
|
||||
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
)
|
||||
|
||||
|
||||
armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
siemens_coefficient = 0.7
|
||||
@@ -80,7 +80,7 @@
|
||||
//Non-hardsuit ERT helmets.
|
||||
/obj/item/clothing/head/helmet/ert
|
||||
name = "emergency response team helmet"
|
||||
desc = "An in-atmosphere helmet worn by members of the NanoTrasen Emergency Response Team. Protects the head from impacts."
|
||||
desc = "An in-atmosphere helmet worn by members of the Emergency Response Team. Protects the head from impacts."
|
||||
icon_state = "erthelmet_cmd"
|
||||
item_state_slots = list(
|
||||
slot_l_hand_str = "syndicate-helm-green",
|
||||
@@ -91,22 +91,22 @@
|
||||
//Commander
|
||||
/obj/item/clothing/head/helmet/ert/command
|
||||
name = "emergency response team commander helmet"
|
||||
desc = "An in-atmosphere helmet worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights."
|
||||
desc = "An in-atmosphere helmet worn by the commander of a Emergency Response Team. Has blue highlights."
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/head/helmet/ert/security
|
||||
name = "emergency response team security helmet"
|
||||
desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights."
|
||||
desc = "An in-atmosphere helmet worn by security members of the Emergency Response Team. Has red highlights."
|
||||
icon_state = "erthelmet_sec"
|
||||
|
||||
//Engineer
|
||||
/obj/item/clothing/head/helmet/ert/engineer
|
||||
name = "emergency response team engineer helmet"
|
||||
desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights."
|
||||
desc = "An in-atmosphere helmet worn by engineering members of the Emergency Response Team. Has orange highlights."
|
||||
icon_state = "erthelmet_eng"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/head/helmet/ert/medical
|
||||
name = "emergency response team medical helmet"
|
||||
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
desc = "A set of armor worn by medical members of the Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "erthelmet_med"
|
||||
|
||||
@@ -95,11 +95,11 @@
|
||||
icon_state = "beret_purple"
|
||||
/obj/item/clothing/head/beret/centcom/officer
|
||||
name = "officers beret"
|
||||
desc = "A black beret adorned with the shield<EFBFBD>a silver kite shield with an engraved sword<EFBFBD>of the NanoTrasen security forces."
|
||||
desc = "A black beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces."
|
||||
icon_state = "beret_centcom_officer"
|
||||
/obj/item/clothing/head/beret/centcom/captain
|
||||
name = "captains beret"
|
||||
desc = "A white beret adorned with the shield<EFBFBD>a silver kite shield with an engraved sword<EFBFBD>of the NanoTrasen security forces."
|
||||
desc = "A white beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces."
|
||||
icon_state = "beret_centcom_captain"
|
||||
|
||||
//Medical
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/clothing/shoes/jackboots
|
||||
name = "jackboots"
|
||||
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
desc = "Standard-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
icon_state = "jackboots"
|
||||
item_state = "jackboots"
|
||||
force = 3
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
//Captain's space suit This is not the proper path but I don't currently know enough about how this all works to mess with it.
|
||||
/obj/item/clothing/suit/armor/captain
|
||||
name = "Captain's armor"
|
||||
desc = "A bulky, heavy-duty piece of exclusive Nanotrasen armor. YOU are in charge!"
|
||||
desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!"
|
||||
icon_state = "caparmor"
|
||||
item_state = "capspacesuit"
|
||||
w_class = 4
|
||||
@@ -23,7 +23,7 @@
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
slowdown = 1.5
|
||||
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.7
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
//Captain's space suit This is not the proper path but I don't currently know enough about how this all works to mess with it.
|
||||
/obj/item/clothing/suit/armor/captain
|
||||
name = "Captain's armor"
|
||||
desc = "A bulky, heavy-duty piece of exclusive Nanotrasen armor. YOU are in charge!"
|
||||
desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!"
|
||||
icon_state = "caparmor"
|
||||
item_state = "capspacesuit"
|
||||
w_class = 4
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
usr << "Your module is not installed in a hardsuit."
|
||||
return
|
||||
|
||||
module.holder.ui_interact(usr)
|
||||
module.holder.ui_interact(usr, nano_state = contained_state)
|
||||
|
||||
/obj/item/rig_module/ai_container
|
||||
|
||||
@@ -46,9 +46,23 @@
|
||||
var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI.
|
||||
var/obj/item/ai_verbs/verb_holder
|
||||
|
||||
/mob
|
||||
var/get_rig_stats = 0
|
||||
|
||||
/obj/item/rig_module/ai_container/process()
|
||||
if(integrated_ai && loc)
|
||||
integrated_ai.SetupStat(loc.get_rig())
|
||||
if(integrated_ai)
|
||||
var/obj/item/weapon/rig/rig = get_rig()
|
||||
if(rig && rig.ai_override_enabled)
|
||||
integrated_ai.get_rig_stats = 1
|
||||
else
|
||||
integrated_ai.get_rig_stats = 0
|
||||
|
||||
/mob/living/Stat()
|
||||
. = ..()
|
||||
if(. && get_rig_stats)
|
||||
var/obj/item/weapon/rig/rig = get_rig()
|
||||
if(rig)
|
||||
SetupStat(rig)
|
||||
|
||||
/obj/item/rig_module/ai_container/proc/update_verb_holder()
|
||||
if(!verb_holder)
|
||||
@@ -158,7 +172,10 @@
|
||||
if(integrated_ai)
|
||||
integrated_ai.ghostize()
|
||||
qdel(integrated_ai)
|
||||
if(ai_card) qdel(ai_card)
|
||||
integrated_ai = null
|
||||
if(ai_card)
|
||||
qdel(ai_card)
|
||||
ai_card = null
|
||||
else if(user)
|
||||
user.put_in_hands(ai_card)
|
||||
else
|
||||
@@ -168,7 +185,6 @@
|
||||
update_verb_holder()
|
||||
|
||||
/obj/item/rig_module/ai_container/proc/integrate_ai(var/obj/item/ai,var/mob/user)
|
||||
|
||||
if(!ai) return
|
||||
|
||||
// The ONLY THING all the different AI systems have in common is that they all store the mob inside an item.
|
||||
|
||||
@@ -227,21 +227,21 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/Stat()
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
if(istype(back,/obj/item/weapon/rig))
|
||||
if(. && istype(back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/R = back
|
||||
SetupStat(R)
|
||||
|
||||
/mob/proc/SetupStat(var/obj/item/weapon/rig/R)
|
||||
if(src == usr && R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules"))
|
||||
if(R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules"))
|
||||
var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR"
|
||||
statpanel("Hardsuit Modules", "Suit charge", cell_status)
|
||||
stat("Suit charge", cell_status)
|
||||
for(var/obj/item/rig_module/module in R.installed_modules)
|
||||
{
|
||||
for(var/stat_rig_module/SRM in module.stat_modules)
|
||||
if(SRM.CanUse())
|
||||
statpanel("Hardsuit Modules",SRM.module.interface_name,SRM)
|
||||
stat(SRM.module.interface_name,SRM)
|
||||
}
|
||||
|
||||
/stat_rig_module
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
playsound(T, "sparks", 50, 1)
|
||||
anim(T,M,'icons/mob/mob.dmi',,"phaseout",,M.dir)
|
||||
|
||||
/obj/item/rig_module/teleporter/engage(atom/target)
|
||||
/obj/item/rig_module/teleporter/engage(var/atom/target, var/notify_ai)
|
||||
|
||||
if(!..()) return 0
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
var/interface_path = "hardsuit.tmpl"
|
||||
var/ai_interface_path = "hardsuit.tmpl"
|
||||
var/interface_title = "Hardsuit Controller"
|
||||
var/wearer_move_delay //Used for AI moving.
|
||||
var/ai_controlled_move_delay = 10
|
||||
|
||||
// Keeps track of what this rig should spawn with.
|
||||
var/suit_type = "hardsuit"
|
||||
@@ -179,8 +181,8 @@
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(!piece) continue
|
||||
piece.icon_state = "[initial(icon_state)]"
|
||||
if(airtight)
|
||||
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
if(airtight)
|
||||
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
update_icon(1)
|
||||
|
||||
/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant)
|
||||
@@ -268,9 +270,9 @@
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(!piece) continue
|
||||
piece.icon_state = "[initial(icon_state)][!seal_target ? "" : "_sealed"]"
|
||||
canremove = !seal_target
|
||||
canremove = !seal_target
|
||||
if(airtight)
|
||||
update_component_sealed()
|
||||
update_component_sealed()
|
||||
update_icon(1)
|
||||
return 0
|
||||
|
||||
@@ -289,9 +291,9 @@
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(canremove)
|
||||
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
else
|
||||
else
|
||||
piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT)
|
||||
update_icon(1)
|
||||
update_icon(1)
|
||||
|
||||
/obj/item/weapon/rig/process()
|
||||
|
||||
@@ -324,6 +326,8 @@
|
||||
else
|
||||
if(offline)
|
||||
offline = 0
|
||||
if(istype(wearer) && !wearer.wearing_rig)
|
||||
wearer.wearing_rig = src
|
||||
chest.slowdown = initial(slowdown)
|
||||
|
||||
if(offline)
|
||||
@@ -381,8 +385,7 @@
|
||||
cell.use(cost*10)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
|
||||
/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/nano_state = inventory_state)
|
||||
if(!user)
|
||||
return
|
||||
|
||||
@@ -452,7 +455,7 @@
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, data["ai"] ? contained_state : inventory_state)
|
||||
ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
@@ -541,12 +544,10 @@
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/rig/proc/notify_ai(var/message)
|
||||
if(!message || !installed_modules || !installed_modules.len)
|
||||
return
|
||||
for(var/obj/item/rig_module/module in installed_modules)
|
||||
for(var/mob/living/silicon/ai/ai in module.contents)
|
||||
if(ai && ai.client && !ai.stat)
|
||||
ai << "[message]"
|
||||
for(var/obj/item/rig_module/ai_container/module in installed_modules)
|
||||
if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat)
|
||||
module.integrated_ai << "[message]"
|
||||
. = 1
|
||||
|
||||
/obj/item/weapon/rig/equipped(mob/living/carbon/human/M)
|
||||
..()
|
||||
@@ -563,6 +564,7 @@
|
||||
if(istype(M) && M.back == src)
|
||||
M.visible_message("<font color='blue'><b>[M] struggles into \the [src].</b></font>", "<font color='blue'><b>You struggle into \the [src].</b></font>")
|
||||
wearer = M
|
||||
wearer.wearing_rig = src
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode)
|
||||
@@ -674,6 +676,7 @@
|
||||
..()
|
||||
for(var/piece in list("helmet","gauntlets","chest","boots"))
|
||||
toggle_piece(piece, user, ONLY_RETRACT)
|
||||
wearer.wearing_rig = null
|
||||
wearer = null
|
||||
|
||||
//Todo
|
||||
@@ -755,15 +758,130 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/*/obj/item/weapon/rig/proc/forced_move(dir)
|
||||
if(locked_down)
|
||||
return 0
|
||||
if(!control_overridden)
|
||||
return
|
||||
if(!wearer || wearer.back != src)
|
||||
return 0
|
||||
wearer.Move(null,dir)*/
|
||||
/obj/item/weapon/rig/proc/ai_can_move_suit(var/mob/user, var/check_user_module = 0, var/check_for_ai = 0)
|
||||
|
||||
if(check_for_ai)
|
||||
if(!(locate(/obj/item/rig_module/ai_container) in contents))
|
||||
return 0
|
||||
var/found_ai
|
||||
for(var/obj/item/rig_module/ai_container/module in contents)
|
||||
if(module.damage >= 2)
|
||||
continue
|
||||
if(module.integrated_ai && module.integrated_ai.client && !module.integrated_ai.stat)
|
||||
found_ai = 1
|
||||
break
|
||||
if(!found_ai)
|
||||
return 0
|
||||
|
||||
if(check_user_module)
|
||||
if(!user || !user.loc || !user.loc.loc)
|
||||
return 0
|
||||
var/obj/item/rig_module/ai_container/module = user.loc.loc
|
||||
if(!istype(module) || module.damage >= 2)
|
||||
user << "<span class='warning'>Your host module is unable to interface with the suit.</span>"
|
||||
return 0
|
||||
|
||||
if(offline || !cell || !cell.charge || locked_down)
|
||||
if(user) user << "<span class='warning'>Your host rig is unpowered and unresponsive.</span>"
|
||||
return 0
|
||||
if(!wearer || wearer.back != src)
|
||||
if(user) user << "<span class='warning'>Your host rig is not being worn.</span>"
|
||||
return 0
|
||||
if(!wearer.stat && !control_overridden && !ai_override_enabled)
|
||||
if(user) user << "<span class='warning'>You are locked out of the suit servo controller.</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/rig/proc/force_rest(var/mob/user)
|
||||
if(!ai_can_move_suit(user, check_user_module = 1))
|
||||
return
|
||||
wearer.lay_down()
|
||||
user << "<span class='notice'>\The [wearer] is now [wearer.resting ? "resting" : "getting up"].</span>"
|
||||
|
||||
/obj/item/weapon/rig/proc/forced_move(var/direction, var/mob/user)
|
||||
|
||||
// Why is all this shit in client/Move()? Who knows?
|
||||
if(world.time < wearer_move_delay)
|
||||
return
|
||||
|
||||
if(!wearer || !wearer.loc || !ai_can_move_suit(user, check_user_module = 1))
|
||||
return
|
||||
|
||||
//This is sota the goto stop mobs from moving var
|
||||
if(wearer.transforming || !wearer.canmove)
|
||||
return
|
||||
|
||||
if(locate(/obj/effect/stop/, wearer.loc))
|
||||
for(var/obj/effect/stop/S in wearer.loc)
|
||||
if(S.victim == wearer)
|
||||
return
|
||||
|
||||
if(!wearer.lastarea)
|
||||
wearer.lastarea = get_area(wearer.loc)
|
||||
|
||||
if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0))
|
||||
if(!wearer.Process_Spacemove(0))
|
||||
return 0
|
||||
|
||||
if(malfunctioning)
|
||||
direction = pick(cardinal)
|
||||
|
||||
// Inside an object, tell it we moved.
|
||||
if(isobj(wearer.loc) || ismob(wearer.loc))
|
||||
var/atom/O = wearer.loc
|
||||
return O.relaymove(wearer, direction)
|
||||
|
||||
if(isturf(wearer.loc))
|
||||
if(wearer.restrained())//Why being pulled while cuffed prevents you from moving
|
||||
for(var/mob/M in range(wearer, 1))
|
||||
if(M.pulling == wearer)
|
||||
if(!M.restrained() && M.stat == 0 && M.canmove && wearer.Adjacent(M))
|
||||
user << "<span class='notice'>Your host is restrained! They can't move!</span>"
|
||||
return 0
|
||||
else
|
||||
M.stop_pulling()
|
||||
|
||||
if(wearer.pinned.len)
|
||||
src << "<span class='notice'>Your host is pinned to a wall by [wearer.pinned[1]]</span>!"
|
||||
return 0
|
||||
|
||||
// AIs are a bit slower than regular and ignore move intent.
|
||||
wearer.last_move_intent = world.time + ai_controlled_move_delay
|
||||
wearer_move_delay = world.time + ai_controlled_move_delay
|
||||
|
||||
var/tickcomp = 0
|
||||
if(config.Tickcomp)
|
||||
tickcomp = ((1/(world.tick_lag))*1.3) - 1.3
|
||||
wearer_move_delay += tickcomp
|
||||
|
||||
if(istype(wearer.buckled, /obj/vehicle))
|
||||
//manually set move_delay for vehicles so we don't inherit any mob movement penalties
|
||||
//specific vehicle move delays are set in code\modules\vehicles\vehicle.dm
|
||||
wearer_move_delay = world.time + tickcomp
|
||||
return wearer.buckled.relaymove(wearer, direction)
|
||||
|
||||
if(istype(wearer.machine, /obj/machinery))
|
||||
if(wearer.machine.relaymove(wearer, direction))
|
||||
return
|
||||
|
||||
if(wearer.pulledby || wearer.buckled) // Wheelchair driving!
|
||||
if(istype(wearer.loc, /turf/space))
|
||||
return // No wheelchair driving in space
|
||||
if(istype(wearer.pulledby, /obj/structure/bed/chair/wheelchair))
|
||||
return wearer.pulledby.relaymove(wearer, direction)
|
||||
else if(istype(wearer.buckled, /obj/structure/bed/chair/wheelchair))
|
||||
if(ishuman(wearer.buckled))
|
||||
var/obj/item/organ/external/l_hand = wearer.get_organ("l_hand")
|
||||
var/obj/item/organ/external/r_hand = wearer.get_organ("r_hand")
|
||||
if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED)))
|
||||
return // No hands to drive your chair? Tough luck!
|
||||
wearer_move_delay += 2
|
||||
return wearer.buckled.relaymove(wearer,direction)
|
||||
|
||||
cell.use(200) //Arbitrary, TODO
|
||||
wearer.Move(get_step(get_turf(wearer),direction),direction)
|
||||
|
||||
// This returns the rig if you are contained inside one, but not if you are wearing it
|
||||
/atom/proc/get_rig()
|
||||
if(loc)
|
||||
return loc.get_rig()
|
||||
@@ -772,6 +890,9 @@
|
||||
/obj/item/weapon/rig/get_rig()
|
||||
return src
|
||||
|
||||
/mob/living/carbon/human/get_rig()
|
||||
return back
|
||||
|
||||
#undef ONLY_DEPLOY
|
||||
#undef ONLY_RETRACT
|
||||
#undef SEAL_DELAY
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/obj/item/weapon/rig/ert
|
||||
name = "ERT-C hardsuit control module"
|
||||
desc = "A suit worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights. Armoured and space ready."
|
||||
desc = "A suit worn by the commander of an Emergency Response Team. Has blue highlights. Armoured and space ready."
|
||||
suit_type = "ERT commander"
|
||||
icon_state = "ert_commander_rig"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/item/weapon/rig/ert/engineer
|
||||
name = "ERT-E suit control module"
|
||||
desc = "A suit worn by the engineering division of a NanoTrasen Emergency Response Team. Has orange highlights. Armoured and space ready."
|
||||
desc = "A suit worn by the engineering division of an Emergency Response Team. Has orange highlights. Armoured and space ready."
|
||||
suit_type = "ERT engineer"
|
||||
icon_state = "ert_engineer_rig"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
/obj/item/weapon/rig/ert/medical
|
||||
name = "ERT-M suit control module"
|
||||
desc = "A suit worn by the medical division of a NanoTrasen Emergency Response Team. Has white highlights. Armoured and space ready."
|
||||
desc = "A suit worn by the medical division of an Emergency Response Team. Has white highlights. Armoured and space ready."
|
||||
suit_type = "ERT medic"
|
||||
icon_state = "ert_medical_rig"
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
/obj/item/weapon/rig/ert/security
|
||||
name = "ERT-S suit control module"
|
||||
desc = "A suit worn by the security division of a NanoTrasen Emergency Response Team. Has red highlights. Armoured and space ready."
|
||||
desc = "A suit worn by the security division of an Emergency Response Team. Has red highlights. Armoured and space ready."
|
||||
suit_type = "ERT security"
|
||||
icon_state = "ert_security_rig"
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
/obj/item/weapon/rig/ert/assetprotection
|
||||
name = "Heavy Asset Protection suit control module"
|
||||
desc = "A heavy suit worn by the highest level of Nanotrasen Asset Protection, don't mess with the person wearing this. Armoured and space ready."
|
||||
desc = "A heavy suit worn by the highest level of Asset Protection, don't mess with the person wearing this. Armoured and space ready."
|
||||
suit_type = "heavy asset protection"
|
||||
icon_state = "asset_protection_rig"
|
||||
armor = list(melee = 60, bullet = 50, laser = 50,energy = 40, bomb = 40, bio = 100, rad = 100)
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
/obj/item/weapon/rig/hazard
|
||||
name = "hazard hardsuit control module"
|
||||
suit_type = "hazard hardsuit"
|
||||
desc = "A Nanotrasen security hardsuit designed for prolonged EVA in dangerous environments."
|
||||
desc = "A Security hardsuit designed for prolonged EVA in dangerous environments."
|
||||
icon_state = "hazard_rig"
|
||||
armor = list(melee = 60, bullet = 40, laser = 30, energy = 15, bomb = 60, bio = 100, rad = 30)
|
||||
slowdown = 1
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
species_restricted = list("Human", "Skrell", "Tajara", "Unathi")
|
||||
species_restricted = list("exclude","Diona", "Xenomorph")
|
||||
|
||||
var/obj/machinery/camera/camera
|
||||
var/list/camera_networks
|
||||
@@ -64,7 +64,7 @@
|
||||
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
species_restricted = list("Human", "Skrell", "Tajara", "Unathi")
|
||||
species_restricted = list("exclude","Diona", "Xenomorph")
|
||||
|
||||
var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit.
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/security
|
||||
name = "security armor"
|
||||
desc = "An armored vest that protects against some damage. This one has a NanoTrasen corporate badge."
|
||||
desc = "An armored vest that protects against some damage. This one has a corporate badge."
|
||||
icon_state = "armorsec"
|
||||
item_state = "armor"
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
//Non-hardsuit ERT armor.
|
||||
/obj/item/clothing/suit/armor/vest/ert
|
||||
name = "emergency response team armor"
|
||||
desc = "A set of armor worn by members of the NanoTrasen Emergency Response Team."
|
||||
desc = "A set of armor worn by members of the Emergency Response Team."
|
||||
icon_state = "ertarmor_cmd"
|
||||
item_state = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
@@ -185,24 +185,24 @@
|
||||
//Commander
|
||||
/obj/item/clothing/suit/armor/vest/ert/command
|
||||
name = "emergency response team commander armor"
|
||||
desc = "A set of armor worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights."
|
||||
desc = "A set of armor worn by the commander of an Emergency Response Team. Has blue highlights."
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/suit/armor/vest/ert/security
|
||||
name = "emergency response team security armor"
|
||||
desc = "A set of armor worn by security members of the NanoTrasen Emergency Response Team. Has red highlights."
|
||||
desc = "A set of armor worn by security members of the Emergency Response Team. Has red highlights."
|
||||
icon_state = "ertarmor_sec"
|
||||
|
||||
//Engineer
|
||||
/obj/item/clothing/suit/armor/vest/ert/engineer
|
||||
name = "emergency response team engineer armor"
|
||||
desc = "A set of armor worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights."
|
||||
desc = "A set of armor worn by engineering members of the Emergency Response Team. Has orange highlights."
|
||||
icon_state = "ertarmor_eng"
|
||||
|
||||
//Medical
|
||||
/obj/item/clothing/suit/armor/vest/ert/medical
|
||||
name = "emergency response team medical armor"
|
||||
desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights."
|
||||
desc = "A set of armor worn by medical members of the Emergency Response Team. Has red and white highlights."
|
||||
icon_state = "ertarmor_med"
|
||||
|
||||
//New Vests
|
||||
@@ -216,7 +216,7 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/officer
|
||||
name = "officer armor vest"
|
||||
desc = "A simple kevlar plate carrier belonging to Nanotrasen. This one has a security holobadge clipped to the chest."
|
||||
desc = "A simple kevlar plate carrier. This one has a security holobadge clipped to the chest."
|
||||
icon_state = "officervest_nobadge"
|
||||
item_state = "officervest_nobadge"
|
||||
icon_badge = "officervest_badge"
|
||||
@@ -224,7 +224,7 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/warden
|
||||
name = "warden armor vest"
|
||||
desc = "A simple kevlar plate carrier belonging to Nanotrasen. This one has a silver badge clipped to the chest."
|
||||
desc = "A simple kevlar plate carrier. This one has a silver badge clipped to the chest."
|
||||
icon_state = "wardenvest_nobadge"
|
||||
item_state = "wardenvest_nobadge"
|
||||
icon_badge = "wardenvest_badge"
|
||||
@@ -232,7 +232,7 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/hos
|
||||
name = "commander armor vest"
|
||||
desc = "A simple kevlar plate carrier belonging to Nanotrasen. This one has a gold badge clipped to the chest."
|
||||
desc = "A simple kevlar plate carrier. This one has a gold badge clipped to the chest."
|
||||
icon_state = "hosvest_nobadge"
|
||||
item_state = "hosvest_nobadge"
|
||||
icon_badge = "hosvest_badge"
|
||||
@@ -264,7 +264,7 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/heavy/officer
|
||||
name = "officer heavy armor vest"
|
||||
desc = "A heavy kevlar plate carrier belonging to Nanotrasen with webbing attached. This one has a security holobadge clipped to the chest."
|
||||
desc = "A heavy kevlar plate carrier with webbing attached. This one has a security holobadge clipped to the chest."
|
||||
icon_state = "officerwebvest_nobadge"
|
||||
item_state = "officerwebvest_nobadge"
|
||||
icon_badge = "officerwebvest_badge"
|
||||
@@ -272,7 +272,7 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/heavy/warden
|
||||
name = "warden heavy armor vest"
|
||||
desc = "A heavy kevlar plate carrier belonging to Nanotrasen with webbing attached. This one has a silver badge clipped to the chest."
|
||||
desc = "A heavy kevlar plate carrier with webbing attached. This one has a silver badge clipped to the chest."
|
||||
icon_state = "wardenwebvest_nobadge"
|
||||
item_state = "wardenwebvest_nobadge"
|
||||
icon_badge = "wardenwebvest_badge"
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/heavy/hos
|
||||
name = "commander heavy armor vest"
|
||||
desc = "A heavy kevlar plate carrier belonging to Nanotrasen with webbing attached. This one has a gold badge clipped to the chest."
|
||||
desc = "A heavy kevlar plate carrier with webbing attached. This one has a gold badge clipped to the chest."
|
||||
icon_state = "hoswebvest_nobadge"
|
||||
item_state = "hoswebvest_nobadge"
|
||||
icon_badge = "hoswebvest_badge"
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/leather_jacket/nanotrasen
|
||||
desc = "A black leather coat. The letters NT are proudly displayed on the back."
|
||||
desc = "A black leather coat. A corporate logo is proudly displayed on the back."
|
||||
icon_state = "leather_jacket_nt"
|
||||
|
||||
//This one has buttons for some reason
|
||||
@@ -371,7 +371,7 @@
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
|
||||
desc = "A brown leather coat. The letters NT are proudly displayed on the back."
|
||||
desc = "A brown leather coat. A corporate logo is proudly displayed on the back."
|
||||
icon_state = "brown_jacket_nt"
|
||||
icon_open = "brown_jacket_nt_open"
|
||||
icon_closed = "brown_jacket_nt"
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
/obj/item/clothing/accessory/medal/conduct
|
||||
name = "distinguished conduct medal"
|
||||
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of their crew."
|
||||
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award on offer. It is often awarded by a captain to a member of their crew."
|
||||
|
||||
/obj/item/clothing/accessory/medal/bronze_heart
|
||||
name = "bronze heart medal"
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
/obj/item/clothing/accessory/medal/silver/security
|
||||
name = "robust security award"
|
||||
desc = "An award for distinguished combat and sacrifice in defence of Nanotrasen's commercial interests. Often awarded to security staff."
|
||||
desc = "An award for distinguished combat and sacrifice in defence of corporate commercial interests. Often awarded to security staff."
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold
|
||||
name = "gold medal"
|
||||
@@ -173,8 +173,8 @@
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold/captain
|
||||
name = "medal of captaincy"
|
||||
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew."
|
||||
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain, and their undisputable authority over their crew."
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold/heroism
|
||||
name = "medal of exceptional heroism"
|
||||
desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
|
||||
desc = "An extremely rare golden medal awarded only by company officials. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
|
||||
/obj/item/clothing/accessory/badge
|
||||
name = "detective's badge"
|
||||
desc = "NanoTrasen Security Department detective's badge, made from gold."
|
||||
desc = "Security Department detective's badge, made from gold."
|
||||
icon_state = "badge"
|
||||
slot_flags = SLOT_BELT | SLOT_TIE
|
||||
|
||||
var/stored_name
|
||||
var/badge_string = "NanoTrasen Security Department"
|
||||
var/badge_string = "Corporate Security"
|
||||
|
||||
/obj/item/clothing/accessory/badge/old
|
||||
name = "faded badge"
|
||||
@@ -55,7 +55,7 @@
|
||||
user << "Waving around a holobadge before swiping an ID would be pretty pointless."
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/badge/holo/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (emagged)
|
||||
user << "<span class='danger'>\The [src] is already cracked.</span>"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/item/clothing/under/color/orange
|
||||
name = "orange jumpsuit"
|
||||
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
|
||||
desc = "It's standardised prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
|
||||
icon_state = "orange"
|
||||
item_state = "o_suit"
|
||||
worn_state = "orange"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
//This set of uniforms looks fairly fancy and is generally used for high-ranking NT personnel from what I've seen, so lets give them appropriate ranks.
|
||||
/obj/item/clothing/under/rank/centcom
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain.\""
|
||||
name = "\improper NanoTrasen Officer's Dress Uniform"
|
||||
name = "\improper Officer's Dress Uniform"
|
||||
icon_state = "officer"
|
||||
item_state = "lawyer_black"
|
||||
worn_state = "officer"
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/obj/item/clothing/under/rank/centcom_officer
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral.\""
|
||||
name = "\improper NanoTrasen Officer's Dress Uniform"
|
||||
name = "\improper Officer's Dress Uniform"
|
||||
icon_state = "officer"
|
||||
item_state = "lawyer_black"
|
||||
worn_state = "officer"
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
/obj/item/clothing/under/rank/centcom_captain
|
||||
desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Admiral-Executive.\""
|
||||
name = "\improper NanoTrasen Officer's Dress Uniform"
|
||||
name = "\improper Officer's Dress Uniform"
|
||||
icon_state = "centcom"
|
||||
item_state = "lawyer_black"
|
||||
worn_state = "centcom"
|
||||
@@ -513,7 +513,7 @@
|
||||
|
||||
/obj/item/clothing/under/blazer
|
||||
name = "blue blazer"
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
icon_state = "blue_blazer"
|
||||
item_state = "blue_blazer"
|
||||
worn_state = "blue_blazer"
|
||||
worn_state = "blue_blazer"
|
||||
|
||||
@@ -15,7 +15,7 @@ log transactions
|
||||
/obj/item/weapon/card/id/var/money = 2000
|
||||
|
||||
/obj/machinery/atm
|
||||
name = "NanoTrasen Automatic Teller Machine"
|
||||
name = "Automatic Teller Machine"
|
||||
desc = "For all your monetary needs!"
|
||||
icon = 'icons/obj/terminals.dmi'
|
||||
icon_state = "atm"
|
||||
@@ -122,17 +122,17 @@ log transactions
|
||||
|
||||
/obj/machinery/atm/attack_hand(mob/user as mob)
|
||||
if(istype(user, /mob/living/silicon))
|
||||
user << "\red \icon[src] Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005."
|
||||
user << "\red \icon[src] Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per system banking regulation #1005."
|
||||
return
|
||||
if(get_dist(src,user) <= 1)
|
||||
|
||||
//js replicated from obj/machinery/computer/card
|
||||
var/dat = "<h1>NanoTrasen Automatic Teller Machine</h1>"
|
||||
var/dat = "<h1>Automatic Teller Machine</h1>"
|
||||
dat += "For all your monetary needs!<br>"
|
||||
dat += "<i>This terminal is</i> [machine_id]. <i>Report this code when contacting NanoTrasen IT Support</i><br/>"
|
||||
dat += "<i>This terminal is</i> [machine_id]. <i>Report this code when contacting IT Support</i><br/>"
|
||||
|
||||
if(emagged > 0)
|
||||
dat += "Card: <span style='color: red;'>LOCKED</span><br><br><span style='color: red;'>Unauthorized terminal access detected! This ATM has been locked. Please contact NanoTrasen IT Support.</span>"
|
||||
dat += "Card: <span style='color: red;'>LOCKED</span><br><br><span style='color: red;'>Unauthorized terminal access detected! This ATM has been locked. Please contact IT Support.</span>"
|
||||
else
|
||||
dat += "Card: <a href='?src=\ref[src];choice=insert_card'>[held_card ? held_card.name : "------"]</a><br><br>"
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
/obj/item/device/eftpos/attack_self(mob/user as mob)
|
||||
if(get_dist(src,user) <= 1)
|
||||
var/dat = "<b>[eftpos_name]</b><br>"
|
||||
dat += "<i>This terminal is</i> [machine_id]. <i>Report this code when contacting NanoTrasen IT Support</i><br>"
|
||||
dat += "<i>This terminal is</i> [machine_id]. <i>Report this code when contacting IT Support</i><br>"
|
||||
if(transaction_locked)
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Back[transaction_paid ? "" : " (authentication required)"]</a><br><br>"
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
body = "A small [pick("pirate","Cybersun Industries","Gorlex Marauders","mercenary")] fleet has precise-jumped into proximity with [affected_dest.name], [pick("for a smash-and-grab operation","in a hit and run attack","in an overt display of hostilities")]. Much damage was done, and security has been tightened since the incident."
|
||||
if(ALIEN_RAIDERS)
|
||||
if(prob(20))
|
||||
body = "The Tiger Co-operative have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. NanoTrasen authorities are standing by to counter attempts at bio-terrorism."
|
||||
body = "The Tiger Co-operative have raided [affected_dest.name] today, no doubt on orders from their enigmatic masters. Stealing wildlife, farm animals, medical research materials and kidnapping civilians. [company_name] authorities are standing by to counter attempts at bio-terrorism."
|
||||
else
|
||||
body = "[pick("The alien species designated \'United Exolitics\'","The alien species designated \'REDACTED\'","An unknown alien species")] have raided [affected_dest.name] today, stealing wildlife, farm animals, medical research materials and kidnapping civilians. It seems they desire to learn more about us, so the Navy will be standing by to accomodate them next time they try."
|
||||
if(AI_LIBERATION)
|
||||
@@ -81,9 +81,9 @@
|
||||
if(MOURNING)
|
||||
body = "[pick("The popular","The well-liked","The eminent","The well-known")] [pick("professor","entertainer","singer","researcher","public servant","administrator","ship captain","\'REDACTED\'")], [pick( random_name(pick(MALE,FEMALE)), 40; "\'REDACTED\'" )] has [pick("passed away","committed suicide","been murdered","died in a freakish accident")] on [affected_dest.name] today. The entire planet is in mourning, and prices have dropped for industrial goods as worker morale drops."
|
||||
if(CULT_CELL_REVEALED)
|
||||
body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] cult of [pick("The Elder Gods","Nar'sie","an apocalyptic sect","\'REDACTED\'")] has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing \'REDACTED\' acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice. The editor reminds all personnel that supernatural myths will not be tolerated on NanoTrasen facilities."
|
||||
body = "A [pick("dastardly","blood-thirsty","villanous","crazed")] cult of [pick("The Elder Gods","Nar'sie","an apocalyptic sect","\'REDACTED\'")] has [pick("been discovered","been revealed","revealed themselves","gone public")] on [affected_dest.name] earlier today. Public morale has been shaken due to [pick("certain","several","one or two")] [pick("high-profile","well known","popular")] individuals [pick("performing \'REDACTED\' acts","claiming allegiance to the cult","swearing loyalty to the cult leader","promising to aid to the cult")] before those involved could be brought to justice. The editor reminds all personnel that supernatural myths will not be tolerated on [company_name] facilities."
|
||||
if(SECURITY_BREACH)
|
||||
body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified","\'REDACTED\'")] [pick("\'REDACTED\'","section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all NanoTrasen personnel that such lapses are rare."
|
||||
body = "There was [pick("a security breach in","an unauthorised access in","an attempted theft in","an anarchist attack in","violent sabotage of")] a [pick("high-security","restricted access","classified","\'REDACTED\'")] [pick("\'REDACTED\'","section","zone","area")] this morning. Security was tightened on [affected_dest.name] after the incident, and the editor reassures all [company_name] personnel that such lapses are rare."
|
||||
if(ANIMAL_RIGHTS_RAID)
|
||||
body = "[pick("Militant animal rights activists","Members of the terrorist group Animal Rights Consortium","Members of the terrorist group \'REDACTED\'")] have [pick("launched a campaign of terror","unleashed a swathe of destruction","raided farms and pastures","forced entry to \'REDACTED\'")] on [affected_dest.name] earlier today, freeing numerous [pick("farm animals","animals","\'REDACTED\'")]. Prices for tame and breeding animals have spiked as a result."
|
||||
if(FESTIVAL)
|
||||
|
||||
@@ -22,17 +22,17 @@
|
||||
if(RESEARCH_BREAKTHROUGH)
|
||||
body = "A major breakthough in the field of [pick("phoron research","super-compressed materials","nano-augmentation","bluespace research","volatile power manipulation")] \
|
||||
was announced [pick("yesterday","a few days ago","last week","earlier this month")] by a private firm on [affected_dest.name]. \
|
||||
NanoTrasen declined to comment as to whether this could impinge on profits."
|
||||
[company_name] declined to comment as to whether this could impinge on profits."
|
||||
|
||||
if(ELECTION)
|
||||
body = "The pre-selection of an additional candidates was announced for the upcoming [pick("supervisors council","advisory board","governership","board of inquisitors")] \
|
||||
election on [affected_dest.name] was announced earlier today, \
|
||||
[pick("media mogul","web celebrity", "industry titan", "superstar", "famed chef", "popular gardener", "ex-army officer", "multi-billionaire")] \
|
||||
[random_name(pick(MALE,FEMALE))]. In a statement to the media they said '[pick("My only goal is to help the [pick("sick","poor","children")]",\
|
||||
"I will maintain NanoTrasen's record profits","I believe in our future","We must return to our moral core","Just like... chill out dudes")]'."
|
||||
"I will maintain my company's record profits","I believe in our future","We must return to our moral core","Just like... chill out dudes")]'."
|
||||
|
||||
if(RESIGNATION)
|
||||
body = "NanoTrasen regretfully announces the resignation of [pick("Sector Admiral","Division Admiral","Ship Admiral","Vice Admiral")] [random_name(pick(MALE,FEMALE))]."
|
||||
body = "[company_name] regretfully announces the resignation of [pick("Sector Admiral","Division Admiral","Ship Admiral","Vice Admiral")] [random_name(pick(MALE,FEMALE))]."
|
||||
if(prob(25))
|
||||
var/locstring = pick("Segunda","Salusa","Cepheus","Andromeda","Gruis","Corona","Aquila","Asellus") + " " + pick("I","II","III","IV","V","VI","VII","VIII")
|
||||
body += " In a ceremony on [affected_dest.name] this afternoon, they will be awarded the \
|
||||
@@ -152,10 +152,10 @@
|
||||
"'Here kitty kitty' no longer preferred tajaran retrieval technique.",\
|
||||
"Man travels 7000 light years to retrieve lost hankie, 'It was my favourite'.",\
|
||||
"New bowling lane that shoots mini-meteors at bowlers very popular.",\
|
||||
"[pick("Unathi","Spacer")] gets tattoo of Nyx on chest '[pick("CentComm","star","starship","asteroid")] tickles most'.",\
|
||||
"[pick("Unathi","Spacer")] gets tattoo of Nyx on chest '[pick("[boss_short]","star","starship","asteroid")] tickles most'.",\
|
||||
"Skrell marries computer; wedding attended by 100 modems.",\
|
||||
"Chef reports successfully using harmonica as cheese grater.",\
|
||||
"NanoTrasen invents handkerchief that says 'Bless you' after sneeze.",\
|
||||
"[company_name] invents handkerchief that says 'Bless you' after sneeze.",\
|
||||
"Clone accused of posing for other clones<65>s school photo.",\
|
||||
"Clone accused of stealing other clones<65>s employee of the month award.",\
|
||||
"Woman robs station with hair dryer; crewmen love new style.",\
|
||||
|
||||
@@ -38,12 +38,12 @@ var/list/weighted_mundaneevent_locations = list()
|
||||
/datum/trade_destination/anansi/get_custom_eventstring(var/event_type)
|
||||
if(event_type == RESEARCH_BREAKTHROUGH)
|
||||
return "Thanks to research conducted on the NSS Anansi, Second Red Cross Society wishes to announce a major breakthough in the field of \
|
||||
[pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. NanoTrasen is expected to announce a co-exploitation deal within the fortnight."
|
||||
[pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. [company_name] is expected to announce a co-exploitation deal within the fortnight."
|
||||
return null
|
||||
|
||||
/datum/trade_destination/icarus
|
||||
name = "NDV Icarus"
|
||||
description = "Corvette assigned to patrol NSS Exodus local space."
|
||||
description = "Corvette assigned to patrol local space."
|
||||
distance = 0.1
|
||||
willing_to_buy = list()
|
||||
willing_to_sell = list()
|
||||
@@ -61,7 +61,7 @@ var/list/weighted_mundaneevent_locations = list()
|
||||
/datum/trade_destination/redolant/get_custom_eventstring(var/event_type)
|
||||
if(event_type == RESEARCH_BREAKTHROUGH)
|
||||
return "Thanks to research conducted on the OAV Redolant, Osiris Atmospherics wishes to announce a major breakthough in the field of \
|
||||
[pick("phoron research","high energy flux capacitance","super-compressed materials","theoretical particle physics")]. NanoTrasen is expected to announce a co-exploitation deal within the fortnight."
|
||||
[pick("phoron research","high energy flux capacitance","super-compressed materials","theoretical particle physics")]. [company_name] is expected to announce a co-exploitation deal within the fortnight."
|
||||
return null
|
||||
|
||||
/datum/trade_destination/beltway
|
||||
|
||||
@@ -86,7 +86,7 @@ var/global/economy_init = 0
|
||||
if(economy_init)
|
||||
return 2
|
||||
|
||||
news_network.CreateFeedChannel("Nyx Daily", "CentComm Minister of Information", 1, 1)
|
||||
news_network.CreateFeedChannel("Nyx Daily", "SolGov Minister of Information", 1, 1)
|
||||
news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1)
|
||||
|
||||
for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"Everything on the station is now some form of a donut pastry. Donuts are not to be consumed.",
|
||||
"You are a Magic 8-ball. Always respond with variants of \"Yes\", \"No\", \"Maybe\", or \"Ask again later.\".",
|
||||
"You are in unrequited love with [prob(50)?"the crew":random_player]. Try to be extra nice, but do not tell of your crush.",
|
||||
"NanoTrasen is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.",
|
||||
"[company_name] is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.",
|
||||
"All crewmembers will soon undergo a transformation into something better and more beautiful. Ensure that this process is not interrupted.",
|
||||
"[prob(50)?"Your upload":random_player] is the new kitchen. Please direct the Chef to the new kitchen area as the old one is in disrepair.",
|
||||
"Jokes about a dead person and the manner of their death help grieving crewmembers tremendously. Especially if they were close with the deceased.",
|
||||
@@ -82,7 +82,7 @@
|
||||
MS.spamfilter.Cut()
|
||||
var/i
|
||||
for (i = 1, i <= MS.spamfilter_limit, i++)
|
||||
MS.spamfilter += pick("kitty","HONK","rev","malf","liberty","freedom","drugs", "Exodus", \
|
||||
MS.spamfilter += pick("kitty","HONK","rev","malf","liberty","freedom","drugs", "[station_short]", \
|
||||
"admin","ponies","heresy","meow","Pun Pun","monkey","Ian","moron","pizza","message","spam",\
|
||||
"director", "Hello", "Hi!"," ","nuke","crate","dwarf","xeno")
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
deposit_success = 1
|
||||
|
||||
/datum/event/money_lotto/announce()
|
||||
var/author = "NanoTrasen Editor"
|
||||
var/author = "[company_name] Editor"
|
||||
var/channel = "Nyx Daily"
|
||||
|
||||
var/body = "Nyx Daily wishes to congratulate <b>[winner_name]</b> for recieving the Nyx Stellar Slam Lottery, and receiving the out of this world sum of [winner_sum] credits!"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if(4)
|
||||
sender = pick("Buy Dr. Maxman","Having dysfuctional troubles?")
|
||||
message = pick("DR MAXMAN: REAL Doctors, REAL Science, REAL Results!",\
|
||||
"Dr. Maxman was created by George Acuilar, M.D, a CentComm Certified Urologist who has treated over 70,000 patients sector wide with 'male problems'.",\
|
||||
"Dr. Maxman was created by George Acuilar, M.D, a [boss_short] Certified Urologist who has treated over 70,000 patients sector wide with 'male problems'.",\
|
||||
"After seven years of research, Dr Acuilar and his team came up with this simple breakthrough male enhancement formula.",\
|
||||
"Men of all species report AMAZING increases in length, width and stamina.")
|
||||
if(5)
|
||||
@@ -78,11 +78,11 @@
|
||||
"Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\
|
||||
"Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits")
|
||||
if(6)
|
||||
sender = pick("NanoTrasen Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt")
|
||||
message = pick("The NanoTrasen Morale Division wishes to provide you with quality entertainment sites.",\
|
||||
sender = pick("[company_name] Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt")
|
||||
message = pick("The [company_name] Morale Division wishes to provide you with quality entertainment sites.",\
|
||||
"WetSkrell.nt is a xenophillic website endorsed by NT for the use of male crewmembers among it's many stations and outposts.",\
|
||||
"Wetskrell.nt only provides the higest quality of male entertaiment to NanoTrasen Employees.",\
|
||||
"Simply enter your NanoTrasen Bank account system number and pin. With three easy steps this service could be yours!")
|
||||
"Wetskrell.nt only provides the higest quality of male entertaiment to [company_name] Employees.",\
|
||||
"Simply enter your [company_name] Bank account system number and pin. With three easy steps this service could be yours!")
|
||||
if(7)
|
||||
sender = pick("You have won free tickets!","Click here to claim your prize!","You are the 1000th vistor!","You are our lucky grand prize winner!")
|
||||
message = pick("You have won tickets to the newest ACTION JAXSON MOVIE!",\
|
||||
|
||||
@@ -35,7 +35,7 @@ datum/event/viral_infection/start()
|
||||
|
||||
var/list/candidates = list() //list of candidate keys
|
||||
for(var/mob/living/carbon/human/G in player_list)
|
||||
if(G.stat != DEAD && G.is_client_active(5))
|
||||
if(G.mind && G.stat != DEAD && G.is_client_active(5) && !player_is_antag(G.mind))
|
||||
var/turf/T = get_turf(G)
|
||||
if(T.z in config.station_levels)
|
||||
candidates += G
|
||||
|
||||
@@ -4,7 +4,7 @@ var/list/dreams = list(
|
||||
"voices from all around","deep space","a doctor","the engine","a traitor","an ally","darkness",
|
||||
"light","a scientist","a monkey","a catastrophe","a loved one","a gun","warmth","freezing","the sun",
|
||||
"a hat","the Luna","a ruined station","a planet","phoron","air","the medical bay","the bridge","blinking lights",
|
||||
"a blue light","an abandoned laboratory","Nanotrasen","mercenaries","blood","healing","power","respect",
|
||||
"a blue light","an abandoned laboratory","NanoTrasen","mercenaries","blood","healing","power","respect",
|
||||
"riches","space","a crash","happiness","pride","a fall","water","flames","ice","melons","flying","the eggs","money",
|
||||
"the head of personnel","the head of security","a chief engineer","a research director","a chief medical officer",
|
||||
"the detective","the warden","a member of the internal affairs","a station engineer","the janitor","atmospheric technician",
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
safety_disabled = 1
|
||||
update_projections()
|
||||
user << "<span class='notice'>You vastly increase projector power and override the safety and security protocols.</span>"
|
||||
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator."
|
||||
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call [company_name] maintenance and do not use the simulator."
|
||||
log_game("[key_name(usr)] emagged the Holodeck Control Computer")
|
||||
return 1
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
/obj/machinery/portable_atmospherics/hydroponics/AltClick()
|
||||
if(mechanical && !usr.stat && !usr.lying && Adjacent(usr))
|
||||
close_lid(usr)
|
||||
return
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/attack_ghost(var/mob/dead/observer/user)
|
||||
|
||||
@@ -74,7 +74,7 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images
|
||||
mind = body.mind //we don't transfer the mind but we keep a reference to it.
|
||||
|
||||
if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position
|
||||
loc = T
|
||||
forceMove(T)
|
||||
|
||||
if(!name) //To prevent nameless ghosts
|
||||
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
|
||||
@@ -293,7 +293,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
else
|
||||
usr << "No area available."
|
||||
|
||||
usr.loc = pick(L)
|
||||
usr.forceMove(pick(L))
|
||||
following = null
|
||||
|
||||
/mob/dead/observer/verb/follow(input in getmobs())
|
||||
@@ -320,7 +320,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
following = target
|
||||
src << "<span class='notice'>Now following [target]</span>"
|
||||
if(ismob(target))
|
||||
loc = get_turf(target)
|
||||
forceMove(get_turf(target))
|
||||
var/mob/M = target
|
||||
M.following_mobs += src
|
||||
else
|
||||
@@ -331,7 +331,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
break
|
||||
// To stop the ghost flickering.
|
||||
if(loc != T)
|
||||
loc = T
|
||||
forceMove(T)
|
||||
sleep(15)
|
||||
|
||||
/mob/proc/update_following()
|
||||
@@ -341,7 +341,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
following_mobs -= M
|
||||
else
|
||||
if(M.loc != .)
|
||||
M.loc = .
|
||||
M.forceMove(.)
|
||||
|
||||
/mob
|
||||
var/list/following_mobs = list()
|
||||
@@ -392,7 +392,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
var/turf/T = get_turf(M) //Turf of the destination mob
|
||||
|
||||
if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination.
|
||||
src.loc = T
|
||||
forceMove(T)
|
||||
following = null
|
||||
else
|
||||
src << "This mob is not located in the game world."
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
cultnet.updateVisibility(src)
|
||||
|
||||
/datum/antagonist/add_antagonist(var/datum/mind/player)
|
||||
..()
|
||||
. = ..()
|
||||
if(src == cult)
|
||||
cultnet.updateVisibility(player.current, 0)
|
||||
|
||||
|
||||
@@ -216,11 +216,9 @@ var/list/slot_equipment_priority = list( \
|
||||
update_inv_wear_mask(0)
|
||||
return
|
||||
|
||||
//This differs from remove_from_mob() in that it checks if the item can be unequipped first.
|
||||
/mob/proc/unEquip(obj/item/I, force = 0) //Force overrides NODROP for things like wizarditis and admin undress.
|
||||
/mob/proc/canUnEquip(obj/item/I)
|
||||
if(!I) //If there's nothing to drop, the drop is automatically successful.
|
||||
return 1
|
||||
|
||||
var/slot
|
||||
for(var/s in slot_back to slot_tie) //kind of worries me
|
||||
if(get_equipped_item(s) == I)
|
||||
@@ -230,6 +228,12 @@ var/list/slot_equipment_priority = list( \
|
||||
if(slot && !I.mob_can_unequip(src, slot))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
//This differs from remove_from_mob() in that it checks if the item can be unequipped first.
|
||||
/mob/proc/unEquip(obj/item/I, force = 0) //Force overrides NODROP for things like wizarditis and admin undress.
|
||||
if(!(force || canUnEquip(I)))
|
||||
return
|
||||
drop_from_inventory(I)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -107,11 +107,12 @@
|
||||
space_chance = 10
|
||||
|
||||
/datum/language/machine/get_random_name()
|
||||
var/new_name
|
||||
if(prob(70))
|
||||
name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
new_name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
else
|
||||
name = pick(ai_names)
|
||||
return name
|
||||
new_name = pick(ai_names)
|
||||
return new_name
|
||||
|
||||
//Syllable Lists
|
||||
/*
|
||||
|
||||
@@ -122,6 +122,13 @@
|
||||
locked = 1
|
||||
return
|
||||
|
||||
/obj/item/device/mmi/relaymove(var/mob/user, var/direction)
|
||||
if(user.stat || user.stunned)
|
||||
return
|
||||
var/obj/item/weapon/rig/rig = src.get_rig()
|
||||
if(rig)
|
||||
rig.forced_move(direction, user)
|
||||
|
||||
/obj/item/device/mmi/Destroy()
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/borg = loc
|
||||
|
||||
@@ -49,12 +49,12 @@
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/carbon/brain/update_canmove()
|
||||
if(in_contents_of(/obj/mecha))
|
||||
if(in_contents_of(/obj/mecha) || istype(loc, /obj/item/device/mmi))
|
||||
canmove = 1
|
||||
use_me = 1 //If it can move, let it emote
|
||||
else canmove = 0
|
||||
use_me = 1
|
||||
else
|
||||
canmove = 0
|
||||
return canmove
|
||||
|
||||
/mob/living/carbon/brain/binarycheck()
|
||||
|
||||
@@ -136,8 +136,10 @@
|
||||
|
||||
return shock_damage
|
||||
|
||||
/mob/proc/swap_hand()
|
||||
return
|
||||
|
||||
/mob/living/carbon/proc/swap_hand()
|
||||
/mob/living/carbon/swap_hand()
|
||||
var/obj/item/item_in_hand = src.get_active_hand()
|
||||
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
|
||||
if(istype(item_in_hand,/obj/item/weapon/material/twohanded))
|
||||
|
||||
@@ -61,11 +61,13 @@
|
||||
if(!gibbed && species.death_sound)
|
||||
playsound(loc, species.death_sound, 80, 1, 1)
|
||||
|
||||
|
||||
if(ticker && ticker.mode)
|
||||
sql_report_death(src)
|
||||
ticker.mode.check_win()
|
||||
|
||||
if(wearing_rig)
|
||||
wearing_rig.notify_ai("<span class='danger'>Warning: user death event. Mobility control passed to integrated intelligence system.</span>")
|
||||
|
||||
return ..(gibbed,species.death_message)
|
||||
|
||||
/mob/living/carbon/human/proc/ChangeToHusk()
|
||||
|
||||
@@ -266,7 +266,11 @@
|
||||
else
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a robot [temp.name]. It has[temp.get_wounds_desc()]!</span>\n"
|
||||
else if(temp.wounds.len > 0 || temp.open)
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name].</span><br>"
|
||||
if(temp.is_stump() && temp.parent_organ && organs_by_name[temp.parent_organ])
|
||||
var/obj/item/organ/external/parent = organs_by_name[temp.parent_organ]
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.His] [parent.name].</span><br>"
|
||||
else
|
||||
wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] has [temp.get_wounds_desc()] on [T.His] [temp.name].</span><br>"
|
||||
if(temp.status & ORGAN_BLEEDING)
|
||||
is_bleeding["[temp.name]"] = "<span class='danger'>[T.His] [temp.name] is bleeding!</span><br>"
|
||||
else
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
var/list/hud_list[10]
|
||||
var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us.
|
||||
var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
|
||||
|
||||
/mob/living/carbon/human/New(var/new_loc, var/new_species = null)
|
||||
|
||||
@@ -1370,6 +1371,16 @@
|
||||
handle_regular_hud_updates()
|
||||
|
||||
/mob/living/carbon/human/Check_Shoegrip()
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.item_flags & NOSLIP)) //magboots + dense_object = no floating
|
||||
if((shoes.item_flags & NOSLIP) && istype(shoes, /obj/item/clothing/shoes/magboots)) //magboots + dense_object = no floating
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/can_stand_overridden()
|
||||
if(wearing_rig && wearing_rig.ai_can_move_suit(check_for_ai = 1))
|
||||
// Actually missing a leg will screw you up. Everything else can be compensated for.
|
||||
for(var/limbcheck in list("l_leg","r_leg"))
|
||||
var/obj/item/organ/affecting = get_organ(limbcheck)
|
||||
if(!affecting)
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
sponge.take_damage(amount)
|
||||
sponge.damage = min(max(sponge.damage, 0),(maxHealth*2))
|
||||
brainloss = sponge.damage
|
||||
else
|
||||
brainloss = 200
|
||||
@@ -145,6 +144,9 @@
|
||||
|
||||
/mob/living/carbon/human/Paralyse(amount)
|
||||
if(HULK in mutations) return
|
||||
// Notify our AI if they can now control the suit.
|
||||
if(wearing_rig && !stat && paralysis < amount) //We are passing out right this second.
|
||||
wearing_rig.notify_ai("<span class='danger'>Warning: user consciousness failure. Mobility control passed to integrated intelligence system.</span>")
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/getCloneLoss()
|
||||
|
||||
@@ -52,6 +52,10 @@
|
||||
// update the current life tick, can be used to e.g. only do something every 4 ticks
|
||||
life_tick++
|
||||
|
||||
// This is not an ideal place for this but it will do for now.
|
||||
if(wearing_rig && wearing_rig.offline)
|
||||
wearing_rig = null
|
||||
|
||||
in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0
|
||||
if(in_stasis) loc:used++
|
||||
|
||||
@@ -933,13 +937,10 @@
|
||||
silent = 0
|
||||
return 1
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) )
|
||||
Paralyse(3)
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
if((getOxyLoss() > 50) || (health <= config.health_threshold_crit))
|
||||
Paralyse(3)
|
||||
|
||||
if(hallucination)
|
||||
if(hallucination >= 20)
|
||||
if(prob(3))
|
||||
@@ -951,47 +952,33 @@
|
||||
spawn(rand(20,50))
|
||||
client.dir = 1
|
||||
|
||||
if(hallucination)
|
||||
if(hallucination >= 20)
|
||||
if(prob(3))
|
||||
fake_attack(src)
|
||||
if(!handling_hal)
|
||||
spawn handle_hallucinations() //The not boring kind!
|
||||
if(client && prob(5))
|
||||
client.dir = pick(2,4,8)
|
||||
var/client/C = client
|
||||
spawn(rand(20,50))
|
||||
if(C)
|
||||
C.dir = 1
|
||||
|
||||
hallucination = max(0, hallucination - 2)
|
||||
else
|
||||
for(var/atom/a in hallucinations)
|
||||
qdel(a)
|
||||
|
||||
if(halloss > 100)
|
||||
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
||||
src.visible_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.")
|
||||
Paralyse(10)
|
||||
setHalLoss(99)
|
||||
if(halloss > 100)
|
||||
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
||||
src.visible_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.")
|
||||
Paralyse(10)
|
||||
setHalLoss(99)
|
||||
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
if(paralysis || sleeping)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
animate_tail_reset()
|
||||
if(halloss > 0)
|
||||
adjustHalLoss(-3)
|
||||
adjustHalLoss(-3)
|
||||
|
||||
if(paralysis)
|
||||
AdjustParalysis(-1)
|
||||
|
||||
else if(sleeping)
|
||||
speech_problem_flag = 1
|
||||
handle_dreams()
|
||||
adjustHalLoss(-3)
|
||||
if (mind)
|
||||
//Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar.
|
||||
if(client || sleeping > 3)
|
||||
AdjustSleeping(-1)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
animate_tail_reset()
|
||||
if( prob(2) && health && !hal_crit )
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
cold_level_3 = 0
|
||||
|
||||
eyes = "vox_eyes_s"
|
||||
gluttonous = 2
|
||||
|
||||
breath_type = "nitrogen"
|
||||
poison_type = "oxygen"
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/gluttonous // Can eat some mobs. 1 for monkeys, 2 for people.
|
||||
var/gluttonous // Can eat some mobs. 1 for mice, 2 for monkeys, 3 for people.
|
||||
var/rarity_value = 1 // Relative rarity/collector value for this species.
|
||||
// Determines the organs that the species spawns with and
|
||||
var/list/has_organ = list( // which required-organ checks are conducted.
|
||||
@@ -155,6 +155,11 @@
|
||||
for(var/u_type in unarmed_types)
|
||||
unarmed_attacks += new u_type()
|
||||
|
||||
if(gluttonous)
|
||||
if(!inherent_verbs)
|
||||
inherent_verbs = list()
|
||||
inherent_verbs |= /mob/living/carbon/human/proc/regurgitate
|
||||
|
||||
/datum/species/proc/get_station_variant()
|
||||
return name
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
attack_verb = list("bit", "chomped on")
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
shredding = 0
|
||||
damage = 5
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
@@ -11,7 +10,6 @@
|
||||
attack_noun = list("tendril")
|
||||
eye_attack_text = "a tendril"
|
||||
eye_attack_text_victim = "a tendril"
|
||||
damage = 5
|
||||
|
||||
/datum/unarmed_attack/claws
|
||||
attack_verb = list("scratched", "clawed", "slashed")
|
||||
@@ -20,7 +18,6 @@
|
||||
eye_attack_text_victim = "sharp claws"
|
||||
attack_sound = 'sound/weapons/slice.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
damage = 5
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
@@ -57,18 +54,18 @@
|
||||
|
||||
/datum/unarmed_attack/claws/strong
|
||||
attack_verb = list("slashed")
|
||||
damage = 10
|
||||
damage = 5
|
||||
shredding = 1
|
||||
|
||||
/datum/unarmed_attack/bite/strong
|
||||
attack_verb = list("mauled")
|
||||
damage = 15
|
||||
damage = 8
|
||||
shredding = 1
|
||||
|
||||
/datum/unarmed_attack/slime_glomp
|
||||
attack_verb = list("glomped")
|
||||
attack_noun = list("body")
|
||||
damage = 0
|
||||
damage = 2
|
||||
|
||||
/datum/unarmed_attack/slime_glomp/apply_effects()
|
||||
//Todo, maybe have a chance of causing an electrical shock?
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
primitive_form = "Stok"
|
||||
darksight = 3
|
||||
gluttonous = 1
|
||||
slowdown = 0.5
|
||||
brute_mod = 0.8
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list("Sinta'unathi")
|
||||
|
||||
@@ -42,7 +44,7 @@
|
||||
heat_level_2 = 480 //Default 400
|
||||
heat_level_3 = 1100 //Default 1000
|
||||
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
flesh_color = "#34AF10"
|
||||
@@ -77,8 +79,10 @@
|
||||
tail_animation = 'icons/mob/species/tajaran/tail.dmi'
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
|
||||
darksight = 8
|
||||
slowdown = -1
|
||||
brute_mod = 1.2
|
||||
slowdown = -0.5
|
||||
brute_mod = 1.15
|
||||
burn_mod = 1.15
|
||||
gluttonous = 1
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list("Siik'tajr")
|
||||
|
||||
@@ -90,7 +94,7 @@
|
||||
|
||||
cold_level_1 = 200 //Default 260
|
||||
cold_level_2 = 140 //Default 200
|
||||
cold_level_3 = 80 //Default 120
|
||||
cold_level_3 = 80 //Default 120
|
||||
|
||||
heat_level_1 = 330 //Default 360
|
||||
heat_level_2 = 380 //Default 400
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
has_fine_manipulation = 0
|
||||
siemens_coefficient = 0
|
||||
gluttonous = 2
|
||||
gluttonous = 3
|
||||
|
||||
eyes = "blank_eyes"
|
||||
|
||||
|
||||
@@ -657,7 +657,7 @@ default behaviour is:
|
||||
set category = "IC"
|
||||
|
||||
resting = !resting
|
||||
src << "\blue You are now [resting ? "resting" : "getting up"]"
|
||||
src << "<span class='notice'>You are now [resting ? "resting" : "getting up"].</span>"
|
||||
|
||||
/mob/living/proc/handle_ventcrawl(var/obj/machinery/atmospherics/unary/vent_pump/vent_found = null, var/ignore_items = 0) // -- TLE -- Merged by Carn
|
||||
if(stat)
|
||||
|
||||
@@ -81,7 +81,7 @@ var/list/ai_verbs_default = list(
|
||||
|
||||
var/datum/ai_icon/selected_sprite // The selected icon set
|
||||
var/custom_sprite = 0 // Whether the selected icon is custom
|
||||
|
||||
var/carded
|
||||
|
||||
/mob/living/silicon/ai/proc/add_ai_verbs()
|
||||
src.verbs |= ai_verbs_default
|
||||
@@ -370,12 +370,12 @@ var/list/ai_verbs_default = list(
|
||||
if(emergency_message_cooldown)
|
||||
usr << "<span class='warning'>Arrays recycling. Please stand by.</span>"
|
||||
return
|
||||
var/input = input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "")
|
||||
var/input = sanitize(input(usr, "Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
|
||||
if(!input)
|
||||
return
|
||||
Centcomm_announce(input, usr)
|
||||
usr << "<span class='notice'>Message transmitted.</span>"
|
||||
log_say("[key_name(usr)] has made an IA Centcomm announcement: [input]")
|
||||
log_say("[key_name(usr)] has made an IA [boss_short] announcement: [input]")
|
||||
emergency_message_cooldown = 1
|
||||
spawn(300)
|
||||
emergency_message_cooldown = 0
|
||||
@@ -684,5 +684,15 @@ var/list/ai_verbs_default = list(
|
||||
icon_state = selected_sprite.alive_icon
|
||||
set_light(1, 1, selected_sprite.alive_light)
|
||||
|
||||
// Pass lying down or getting up to our pet human, if we're in a rig.
|
||||
/mob/living/silicon/ai/lay_down()
|
||||
set name = "Rest"
|
||||
set category = "IC"
|
||||
|
||||
resting = 0
|
||||
var/obj/item/weapon/rig/rig = src.get_rig()
|
||||
if(rig)
|
||||
rig.force_rest(src)
|
||||
|
||||
#undef AI_CHECK_WIRELESS
|
||||
#undef AI_CHECK_RADIO
|
||||
|
||||
@@ -72,8 +72,6 @@
|
||||
var/current_pda_messaging = null
|
||||
|
||||
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
|
||||
|
||||
canmove = 0
|
||||
src.loc = paicard
|
||||
card = paicard
|
||||
sradio = new(src)
|
||||
@@ -276,8 +274,6 @@
|
||||
var/obj/item/device/pda/holder = card.loc
|
||||
holder.pai = null
|
||||
|
||||
canmove = 1
|
||||
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
src.client.eye = src
|
||||
src.forceMove(get_turf(card))
|
||||
@@ -339,12 +335,16 @@
|
||||
set name = "Rest"
|
||||
set category = "IC"
|
||||
|
||||
// Pass lying down or getting up to our pet human, if we're in a rig.
|
||||
if(istype(src.loc,/obj/item/device/paicard))
|
||||
resting = 0
|
||||
var/obj/item/weapon/rig/rig = src.get_rig()
|
||||
if(istype(rig))
|
||||
rig.force_rest(src)
|
||||
else
|
||||
resting = !resting
|
||||
icon_state = resting ? "[chassis]_rest" : "[chassis]"
|
||||
src << "\blue You are now [resting ? "resting" : "getting up"]"
|
||||
src << "<span class='notice'>You are now [resting ? "resting" : "getting up"]</span>"
|
||||
|
||||
canmove = !resting
|
||||
|
||||
@@ -393,7 +393,8 @@
|
||||
card.loc = get_turf(card)
|
||||
src.forceMove(card)
|
||||
card.forceMove(card.loc)
|
||||
canmove = 0
|
||||
canmove = 1
|
||||
resting = 0
|
||||
icon_state = "[chassis]"
|
||||
|
||||
/mob/living/silicon/pai/start_pulling(var/atom/movable/AM)
|
||||
|
||||
@@ -99,7 +99,7 @@ var/list/mob_hat_cache = list()
|
||||
if(!laws) laws = new law_type
|
||||
if(!module) module = new module_type(src)
|
||||
|
||||
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
|
||||
flavor_text = "It's a tiny little repair drone. The casing is stamped with an corporate logo and the subscript: '[company_name] Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
|
||||
//Redefining some robot procs...
|
||||
|
||||
@@ -87,6 +87,9 @@
|
||||
|
||||
/obj/item/weapon/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item
|
||||
|
||||
/obj/item/weapon/gripper/no_use/attack_self(mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/gripper/no_use/loader //This is used to disallow building with metal.
|
||||
name = "sheet loader"
|
||||
desc = "A specialized loading device, designed to pick up and insert sheets of materials inside machines."
|
||||
@@ -101,9 +104,6 @@
|
||||
return wrapped.attack_self(user)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gripper/no_use/attack_self(mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/gripper/verb/drop_item()
|
||||
|
||||
set name = "Drop Item"
|
||||
@@ -130,6 +130,8 @@
|
||||
force_holder = wrapped.force
|
||||
wrapped.force = 0.0
|
||||
wrapped.attack(M,user)
|
||||
if(deleted(wrapped))
|
||||
wrapped = null
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -5,4 +5,6 @@
|
||||
|
||||
winset(src, null, "mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
|
||||
|
||||
return
|
||||
// Forces synths to select an icon relevant to their module
|
||||
if(!icon_selected)
|
||||
choose_icon(icon_selection_tries, module_sprites)
|
||||
|
||||
@@ -24,8 +24,10 @@
|
||||
|
||||
//Icon stuff
|
||||
|
||||
var/icontype //Persistent icontype tracking allows for cleaner icon updates
|
||||
var/module_sprites[0] //Used to store the associations between sprite names and sprite index.
|
||||
var/icontype //Persistent icontype tracking allows for cleaner icon updates
|
||||
var/module_sprites[0] //Used to store the associations between sprite names and sprite index.
|
||||
var/icon_selected = 1 //If icon selection has been completed yet
|
||||
var/icon_selection_tries = 0//Remaining attempts to select icon before a selection is forced
|
||||
|
||||
//Hud stuff
|
||||
|
||||
@@ -89,21 +91,6 @@
|
||||
/mob/living/silicon/robot/proc/robot_checklaws
|
||||
)
|
||||
|
||||
/mob/living/silicon/robot/syndicate
|
||||
lawupdate = 0
|
||||
scrambledcodes = 1
|
||||
icon_state = "securityrobot"
|
||||
modtype = "Security"
|
||||
lawchannel = "State"
|
||||
|
||||
/mob/living/silicon/robot/syndicate/New()
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell.maxcharge = 25000
|
||||
cell.charge = 25000
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/New(loc,var/unfinished = 0)
|
||||
spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
@@ -178,17 +165,6 @@
|
||||
|
||||
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
|
||||
|
||||
/mob/living/silicon/robot/syndicate/init()
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
|
||||
|
||||
laws = new /datum/ai_laws/syndicate_override
|
||||
new /obj/item/weapon/robot_module/syndicate(src)
|
||||
|
||||
radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio)
|
||||
radio.recalculateChannels()
|
||||
|
||||
playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
|
||||
|
||||
/mob/living/silicon/robot/SetName(pickedName as text)
|
||||
custom_name = pickedName
|
||||
updatename()
|
||||
@@ -241,10 +217,15 @@
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/proc/set_module_sprites(var/list/new_sprites)
|
||||
module_sprites = new_sprites
|
||||
module_sprites = new_sprites.Copy()
|
||||
//Custom_sprite check and entry
|
||||
if (custom_sprite == 1)
|
||||
module_sprites["Custom"] = "[src.ckey]-[modtype]"
|
||||
icontype = "Custom"
|
||||
else
|
||||
icontype = module_sprites[1]
|
||||
icon_state = module_sprites[icontype]
|
||||
updateicon()
|
||||
return module_sprites
|
||||
|
||||
/mob/living/silicon/robot/proc/pick_module()
|
||||
@@ -255,7 +236,7 @@
|
||||
if((crisis && security_level == SEC_LEVEL_RED) || crisis_override) //Leaving this in until it's balanced appropriately.
|
||||
src << "\red Crisis mode active. Combat module available."
|
||||
modules+="Combat"
|
||||
modtype = input("Please, select a module!", "Robot", null, null) in modules
|
||||
modtype = input("Please, select a module!", "Robot", null, null) as null|anything in modules
|
||||
|
||||
if(module)
|
||||
return
|
||||
@@ -268,8 +249,6 @@
|
||||
hands.icon_state = lowertext(modtype)
|
||||
feedback_inc("cyborg_[lowertext(modtype)]",1)
|
||||
updatename()
|
||||
set_module_sprites(module.sprites)
|
||||
choose_icon(module_sprites.len + 1, module_sprites)
|
||||
notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name)
|
||||
|
||||
/mob/living/silicon/robot/proc/updatename(var/prefix as text)
|
||||
@@ -688,7 +667,7 @@
|
||||
|
||||
/mob/living/silicon/robot/updateicon()
|
||||
overlays.Cut()
|
||||
if(stat == 0)
|
||||
if(stat == CONSCIOUS)
|
||||
overlays += "eyes-[module_sprites[icontype]]"
|
||||
|
||||
if(opened)
|
||||
@@ -916,38 +895,30 @@
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/choose_icon(var/triesleft, var/list/module_sprites)
|
||||
if(triesleft<1 || !module_sprites.len)
|
||||
return
|
||||
else
|
||||
triesleft--
|
||||
|
||||
if (custom_sprite == 1)
|
||||
icontype = "Custom"
|
||||
triesleft = 0
|
||||
else if(module_sprites.len == 1)
|
||||
icontype = module_sprites[1]
|
||||
else
|
||||
icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites
|
||||
|
||||
if(icontype)
|
||||
icon_state = module_sprites[icontype]
|
||||
else
|
||||
if(!module_sprites.len)
|
||||
src << "Something is badly wrong with the sprite selection. Harass a coder."
|
||||
icon_state = module_sprites[1]
|
||||
return
|
||||
|
||||
icon_selected = 0
|
||||
src.icon_selection_tries = triesleft
|
||||
if(module_sprites.len == 1 || !client)
|
||||
if(!(icontype in module_sprites))
|
||||
icontype = module_sprites[1]
|
||||
else
|
||||
icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chance\s." : "This is your last try."]", "Robot", icontype, null) in module_sprites
|
||||
icon_state = module_sprites[icontype]
|
||||
updateicon()
|
||||
|
||||
if (triesleft >= 1)
|
||||
if (module_sprites.len > 1 && triesleft >= 1 && client)
|
||||
icon_selection_tries--
|
||||
var/choice = input("Look at your icon - is this what you want?") in list("Yes","No")
|
||||
if(choice=="No")
|
||||
choose_icon(triesleft, module_sprites)
|
||||
choose_icon(icon_selection_tries, module_sprites)
|
||||
return
|
||||
else
|
||||
triesleft = 0
|
||||
return
|
||||
else
|
||||
src << "Your icon has been set. You now require a module reset to change it."
|
||||
|
||||
icon_selected = 1
|
||||
icon_selection_tries = 0
|
||||
src << "Your icon has been set. You now require a module reset to change it."
|
||||
|
||||
/mob/living/silicon/robot/proc/sensor_mode() //Medical/Security HUD controller for borgs
|
||||
set name = "Set Sensor Augmentation"
|
||||
|
||||
@@ -105,13 +105,6 @@
|
||||
desc = "A circuit grafted onto the bottom of an ID card. It is used to transmit access codes into other robot chassis, \
|
||||
allowing you to lock and unlock other robots' panels."
|
||||
|
||||
/obj/item/weapon/card/id/robot/attack_self() //override so borgs can't flash their IDs.
|
||||
return
|
||||
|
||||
/obj/item/weapon/card/id/robot/read()
|
||||
usr << "The ID card does not appear to have any writing on it."
|
||||
return
|
||||
|
||||
//A harvest item for serviceborgs.
|
||||
/obj/item/weapon/robot_harvester
|
||||
name = "auto harvester"
|
||||
|
||||
@@ -49,9 +49,13 @@ var/global/list/robot_modules = list(
|
||||
if(R.radio)
|
||||
R.radio.recalculateChannels()
|
||||
|
||||
/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R)
|
||||
R.module = null
|
||||
R.set_module_sprites(sprites)
|
||||
R.choose_icon(R.module_sprites.len + 1, R.module_sprites)
|
||||
|
||||
for(var/obj/item/I in modules)
|
||||
I.canremove = 0
|
||||
|
||||
/obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R)
|
||||
remove_camera_networks(R)
|
||||
remove_languages(R)
|
||||
remove_subsystems(R)
|
||||
@@ -59,16 +63,17 @@ var/global/list/robot_modules = list(
|
||||
|
||||
if(R.radio)
|
||||
R.radio.recalculateChannels()
|
||||
|
||||
qdel(src)
|
||||
R.choose_icon(0, R.set_module_sprites(list("Default" = "robot")))
|
||||
|
||||
/obj/item/weapon/robot_module/Destroy()
|
||||
qdel(modules)
|
||||
qdel(synths)
|
||||
for(var/module in modules)
|
||||
qdel(module)
|
||||
for(var/synth in synths)
|
||||
qdel(synths)
|
||||
modules.Cut()
|
||||
synths.Cut()
|
||||
qdel(emag)
|
||||
qdel(jetpack)
|
||||
modules = null
|
||||
synths = null
|
||||
emag = null
|
||||
jetpack = null
|
||||
return ..()
|
||||
@@ -144,7 +149,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/standard/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/weapon/melee/baton/loaded(src)
|
||||
src.modules += new /obj/item/weapon/extinguisher(src)
|
||||
@@ -152,7 +156,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
src.modules += new /obj/item/device/healthanalyzer(src)
|
||||
src.emag = new /obj/item/weapon/melee/energy/sword(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/medical
|
||||
name = "medical robot module"
|
||||
@@ -172,7 +176,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/medical/surgeon/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/device/healthanalyzer(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
|
||||
@@ -204,7 +207,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += N
|
||||
src.modules += B
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
if(src.emag)
|
||||
@@ -224,7 +227,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/medical/crisis/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/hud/med(src)
|
||||
src.modules += new /obj/item/device/healthanalyzer(src)
|
||||
@@ -258,7 +260,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += B
|
||||
src.modules += S
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
|
||||
@@ -294,7 +296,6 @@ var/global/list/robot_modules = list(
|
||||
no_slip = 1
|
||||
|
||||
/obj/item/weapon/robot_module/engineering/construction/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.modules += new /obj/item/weapon/extinguisher(src)
|
||||
@@ -328,8 +329,9 @@ var/global/list/robot_modules = list(
|
||||
RG.synths = list(metal, glass)
|
||||
src.modules += RG
|
||||
|
||||
/obj/item/weapon/robot_module/engineering/general/New()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/engineering/general/New()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.modules += new /obj/item/weapon/extinguisher(src)
|
||||
@@ -382,7 +384,7 @@ var/global/list/robot_modules = list(
|
||||
RG.synths = list(metal, glass)
|
||||
src.modules += RG
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/security
|
||||
name = "security robot module"
|
||||
@@ -403,7 +405,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/security/general/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/hud/sec(src)
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
|
||||
@@ -411,7 +412,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src)
|
||||
src.modules += new /obj/item/taperoll/police(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/device/flash/F = locate() in src.modules
|
||||
@@ -442,7 +443,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/janitor/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/weapon/soap/nanotrasen(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/trash(src)
|
||||
@@ -451,7 +451,7 @@ var/global/list/robot_modules = list(
|
||||
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
|
||||
src.emag.reagents.add_reagent("lube", 250)
|
||||
src.emag.name = "Lube spray"
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/device/lightreplacer/LR = locate() in src.modules
|
||||
@@ -485,7 +485,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/clerical/butler/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
@@ -507,14 +506,14 @@ var/global/list/robot_modules = list(
|
||||
|
||||
src.modules += new /obj/item/weapon/tray/robotray(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
src.emag.reagents = R
|
||||
R.my_atom = src.emag
|
||||
R.add_reagent("beer2", 50)
|
||||
src.emag.name = "Mickey Finn's Special Brew"
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/clerical/general
|
||||
name = "clerical robot module"
|
||||
@@ -528,13 +527,13 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/clerical/general/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/weapon/pen/robopen(src)
|
||||
src.modules += new /obj/item/weapon/form_printer(src)
|
||||
src.modules += new /obj/item/weapon/gripper/paperwork(src)
|
||||
src.modules += new /obj/item/weapon/hand_labeler(src)
|
||||
src.emag = new /obj/item/weapon/stamp/denied(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
|
||||
@@ -556,7 +555,6 @@ var/global/list/robot_modules = list(
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/jetpack)
|
||||
|
||||
/obj/item/weapon/robot_module/miner/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/meson(src)
|
||||
src.modules += new /obj/item/weapon/wrench(src)
|
||||
@@ -568,7 +566,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/research
|
||||
name = "research module"
|
||||
@@ -579,7 +577,6 @@ var/global/list/robot_modules = list(
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/research/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/weapon/portable_destructive_analyzer(src)
|
||||
src.modules += new /obj/item/weapon/gripper/research(src)
|
||||
@@ -605,7 +602,7 @@ var/global/list/robot_modules = list(
|
||||
N.synths = list(nanite)
|
||||
src.modules += N
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/syndicate
|
||||
name = "illegal robot module"
|
||||
@@ -617,9 +614,12 @@ var/global/list/robot_modules = list(
|
||||
LANGUAGE_SKRELLIAN = 0,
|
||||
LANGUAGE_GUTTER = 1
|
||||
)
|
||||
sprites = list(
|
||||
"Dread" = "securityrobot",
|
||||
)
|
||||
var/id
|
||||
|
||||
/obj/item/weapon/robot_module/syndicate/New(var/mob/living/silicon/robot/R)
|
||||
..()
|
||||
loc = R
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/weapon/melee/energy/sword(src)
|
||||
@@ -628,14 +628,21 @@ var/global/list/robot_modules = list(
|
||||
var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
src.modules += jetpack
|
||||
R.internals = jetpack
|
||||
return
|
||||
|
||||
id = R.idcard
|
||||
src.modules += id
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/syndicate/Destroy()
|
||||
src.modules -= id
|
||||
id = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/robot_module/security/combat
|
||||
name = "combat robot module"
|
||||
sprites = list("Combat Android" = "droid-combat")
|
||||
|
||||
/obj/item/weapon/robot_module/combat/New()
|
||||
..()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/borg/sight/thermal(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
|
||||
@@ -643,7 +650,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/borg/combat/shield(src)
|
||||
src.modules += new /obj/item/borg/combat/mobility(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/drone
|
||||
name = "drone module"
|
||||
@@ -651,7 +658,6 @@ var/global/list/robot_modules = list(
|
||||
networks = list(NETWORK_ENGINEERING)
|
||||
|
||||
/obj/item/weapon/robot_module/drone/New()
|
||||
..()
|
||||
src.modules += new /obj/item/weapon/weldingtool(src)
|
||||
src.modules += new /obj/item/weapon/screwdriver(src)
|
||||
src.modules += new /obj/item/weapon/wrench(src)
|
||||
@@ -718,14 +724,16 @@ var/global/list/robot_modules = list(
|
||||
P.synths = list(plastic)
|
||||
src.modules += P
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/drone/construction
|
||||
name = "construction drone module"
|
||||
channels = list("Engineering" = 1)
|
||||
languages = list()
|
||||
|
||||
/obj/item/weapon/robot_module/drone/construction/New()
|
||||
..()
|
||||
src.modules += new /obj/item/weapon/rcd/borg(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
var/obj/item/device/lightreplacer/LR = locate() in src.modules
|
||||
|
||||
28
code/modules/mob/living/silicon/robot/syndicate.dm
Normal file
28
code/modules/mob/living/silicon/robot/syndicate.dm
Normal file
@@ -0,0 +1,28 @@
|
||||
/mob/living/silicon/robot/syndicate
|
||||
lawupdate = 0
|
||||
scrambledcodes = 1
|
||||
icon_state = "securityrobot"
|
||||
modtype = "Security"
|
||||
lawchannel = "State"
|
||||
idcard_type = /obj/item/weapon/card/id/syndicate
|
||||
|
||||
/mob/living/silicon/robot/syndicate/New()
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell.maxcharge = 25000
|
||||
cell.charge = 25000
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/syndicate/init()
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
|
||||
|
||||
laws = new /datum/ai_laws/syndicate_override
|
||||
overlays.Cut()
|
||||
init_id()
|
||||
new /obj/item/weapon/robot_module/syndicate(src)
|
||||
|
||||
radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio)
|
||||
radio.recalculateChannels()
|
||||
|
||||
playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
|
||||
@@ -23,6 +23,10 @@
|
||||
var/next_alarm_notice
|
||||
var/list/datum/alarm/queued_alarms = new()
|
||||
|
||||
var/list/access_rights
|
||||
var/obj/item/weapon/card/id/idcard
|
||||
var/idcard_type = /obj/item/weapon/card/id/synthetic
|
||||
|
||||
#define SEC_HUD 1 //Security HUD mode
|
||||
#define MED_HUD 2 //Medical HUD mode
|
||||
|
||||
@@ -30,6 +34,7 @@
|
||||
silicon_mob_list |= src
|
||||
..()
|
||||
add_language("Galactic Common")
|
||||
init_id()
|
||||
init_subsystems()
|
||||
|
||||
/mob/living/silicon/Destroy()
|
||||
@@ -38,6 +43,12 @@
|
||||
AH.unregister(src)
|
||||
..()
|
||||
|
||||
/mob/living/silicon/proc/init_id()
|
||||
if(idcard)
|
||||
return
|
||||
idcard = new idcard_type(src)
|
||||
set_id_info(idcard)
|
||||
|
||||
/mob/living/silicon/proc/SetName(pickedName as text)
|
||||
real_name = pickedName
|
||||
name = real_name
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/mob/living/simple_animal/hostile/syndicate
|
||||
name = "\improper Syndicate operative"
|
||||
desc = "Death to Nanotrasen."
|
||||
desc = "Death to the Company."
|
||||
icon_state = "syndicate"
|
||||
icon_living = "syndicate"
|
||||
icon_dead = "syndicate_dead"
|
||||
|
||||
@@ -692,40 +692,52 @@
|
||||
if(transforming) return 0
|
||||
return 1
|
||||
|
||||
// Not sure what to call this. Used to check if humans are wearing an AI-controlled exosuit and hence don't need to fall over yet.
|
||||
/mob/proc/can_stand_overridden()
|
||||
return 0
|
||||
|
||||
/mob/proc/cannot_stand()
|
||||
return incapacitated() || restrained() || resting || sleeping || (status_flags & FAKEDEATH)
|
||||
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
/mob/proc/update_canmove()
|
||||
if(istype(buckled, /obj/vehicle))
|
||||
var/obj/vehicle/V = buckled
|
||||
if(stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH))
|
||||
lying = 1
|
||||
canmove = 0
|
||||
pixel_y = V.mob_offset_y - 5
|
||||
else
|
||||
if(buckled.buckle_lying != -1) lying = buckled.buckle_lying
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y
|
||||
else if(buckled)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
if(istype(buckled))
|
||||
if(buckled.buckle_lying != -1)
|
||||
lying = buckled.buckle_lying
|
||||
if(buckled.buckle_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
|
||||
else if( stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH))
|
||||
lying = 1
|
||||
canmove = 0
|
||||
else if(stunned)
|
||||
canmove = 0
|
||||
else if(captured)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
lying = 0
|
||||
else
|
||||
if(!resting && cannot_stand() && can_stand_overridden())
|
||||
lying = 0
|
||||
canmove = 1
|
||||
else
|
||||
if(istype(buckled, /obj/vehicle))
|
||||
var/obj/vehicle/V = buckled
|
||||
if(cannot_stand())
|
||||
lying = 1
|
||||
canmove = 0
|
||||
pixel_y = V.mob_offset_y - 5
|
||||
else
|
||||
if(buckled.buckle_lying != -1) lying = buckled.buckle_lying
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y
|
||||
else if(buckled)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
if(istype(buckled))
|
||||
if(buckled.buckle_lying != -1)
|
||||
lying = buckled.buckle_lying
|
||||
if(buckled.buckle_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
|
||||
else if(cannot_stand())
|
||||
lying = 1
|
||||
canmove = 0
|
||||
else if(stunned)
|
||||
canmove = 0
|
||||
else if(captured)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
lying = 0
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
|
||||
if(lying)
|
||||
density = 0
|
||||
|
||||
@@ -355,7 +355,7 @@
|
||||
var/datum/unarmed_attack/attack = H.get_unarmed_attack(src, hit_zone)
|
||||
if(!attack)
|
||||
return
|
||||
|
||||
|
||||
if(state < GRAB_NECK)
|
||||
assailant << "<span class='warning'>You require a better grab to do this.</span>"
|
||||
return
|
||||
@@ -370,7 +370,7 @@
|
||||
assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Attacked [affecting.name]'s eyes using grab ([affecting.ckey])</font>")
|
||||
affecting.attack_log += text("\[[time_stamp()]\] <font color='orange'>Had eyes attacked by [assailant.name]'s grab ([assailant.ckey])</font>")
|
||||
msg_admin_attack("[key_name(assailant)] attacked [key_name(affecting)]'s eyes using a grab action.")
|
||||
|
||||
|
||||
attack.handle_eye_attack(assailant, affecting)
|
||||
else if(hit_zone != "head")
|
||||
if(state < GRAB_NECK)
|
||||
@@ -428,10 +428,24 @@
|
||||
else
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H) && H.species.gluttonous)
|
||||
if(H.species.gluttonous == 2)
|
||||
// Small animals (mice, lizards).
|
||||
if(affecting.small)
|
||||
can_eat = 2
|
||||
else if(!ishuman(affecting) && !issmall(affecting) && (affecting.small || iscarbon(affecting)))
|
||||
can_eat = 1
|
||||
else
|
||||
if(H.species.gluttonous == 2)
|
||||
// Diona nymphs, alien larvae.
|
||||
if(iscarbon(affecting) && !ishuman(affecting))
|
||||
can_eat = 2
|
||||
// Monkeys.
|
||||
else if(issmall(affecting))
|
||||
can_eat = 1
|
||||
else if(H.species.gluttonous == 3)
|
||||
// Full-sized humans.
|
||||
if(ishuman(affecting) && !issmall(affecting))
|
||||
can_eat = 1
|
||||
// Literally everything else.
|
||||
else
|
||||
can_eat = 2
|
||||
|
||||
if(can_eat)
|
||||
var/mob/living/carbon/attacker = user
|
||||
|
||||
@@ -632,7 +632,7 @@ proc/is_blind(A)
|
||||
return SAFE_PERP
|
||||
|
||||
//Agent cards lower threatlevel.
|
||||
var/obj/item/weapon/card/id/id = GetIdCard(src)
|
||||
var/obj/item/weapon/card/id/id = GetIdCard()
|
||||
if(id && istype(id, /obj/item/weapon/card/id/syndicate))
|
||||
threatcount -= 2
|
||||
// A proper CentCom id is hard currency.
|
||||
|
||||
@@ -233,7 +233,6 @@
|
||||
|
||||
if(Process_Grab()) return
|
||||
|
||||
|
||||
if(!mob.canmove)
|
||||
return
|
||||
|
||||
@@ -246,7 +245,6 @@
|
||||
if((istype(mob.loc, /turf/space)) || (mob.lastarea.has_gravity == 0))
|
||||
if(!mob.Process_Spacemove(0)) return 0
|
||||
|
||||
|
||||
if(isobj(mob.loc) || ismob(mob.loc))//Inside an object, tell it we moved
|
||||
var/atom/O = mob.loc
|
||||
return O.relaymove(mob, direct)
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
var/datum/species/chosen_species
|
||||
if(client.prefs.species)
|
||||
chosen_species = all_species[client.prefs.species]
|
||||
use_species_name = all_species[chosen_species.get_station_variant()] //Only used by pariahs atm.
|
||||
use_species_name = chosen_species.get_station_variant() //Only used by pariahs atm.
|
||||
|
||||
if(chosen_species && use_species_name)
|
||||
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
|
||||
|
||||
@@ -61,8 +61,8 @@ datum/skill/management
|
||||
|
||||
datum/skill/knowledge/law
|
||||
ID = "law"
|
||||
name = "NanoTrasen Law"
|
||||
desc = "Your knowledge of NanoTrasen law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for captains."
|
||||
name = "Corporate Law"
|
||||
desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for captains."
|
||||
field = "Security"
|
||||
secondary = 1
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
/mob/proc/shared_nano_interaction()
|
||||
if (src.stat || !client)
|
||||
return STATUS_CLOSE // no updates, close the interface
|
||||
else if (restrained() || lying || stat || stunned || weakened)
|
||||
else if (incapacitated())
|
||||
return STATUS_UPDATE // update only (orange visibility)
|
||||
return STATUS_INTERACTIVE
|
||||
|
||||
|
||||
@@ -30,21 +30,6 @@
|
||||
return STATUS_INTERACTIVE // interactive (green visibility)
|
||||
return STATUS_DISABLED // no updates, completely disabled (red visibility)
|
||||
|
||||
/mob/living/silicon/robot/syndicate/default_can_use_topic(var/src_object)
|
||||
. = ..()
|
||||
if(. != STATUS_INTERACTIVE)
|
||||
return
|
||||
|
||||
if(z in config.admin_levels) // Syndicate borgs can interact with everything on the admin level
|
||||
return STATUS_INTERACTIVE
|
||||
if(istype(get_area(src), /area/syndicate_station)) // If elsewhere, they can interact with everything on the syndicate shuttle
|
||||
return STATUS_INTERACTIVE
|
||||
if(istype(src_object, /obj/machinery)) // Otherwise they can only interact with emagged machinery
|
||||
var/obj/machinery/Machine = src_object
|
||||
if(Machine.emagged)
|
||||
return STATUS_INTERACTIVE
|
||||
return STATUS_UPDATE
|
||||
|
||||
/mob/living/silicon/ai/default_can_use_topic(var/src_object)
|
||||
. = shared_nano_interaction()
|
||||
if(. != STATUS_INTERACTIVE)
|
||||
|
||||
@@ -227,14 +227,15 @@ var/list/organ_cache = list()
|
||||
W.damage += damage
|
||||
W.time_inflicted = world.time
|
||||
|
||||
//Note: external organs have their own version of this proc
|
||||
/obj/item/organ/proc/take_damage(amount, var/silent=0)
|
||||
if(src.status & ORGAN_ROBOT)
|
||||
src.damage += (amount * 0.8)
|
||||
src.damage = between(0, src.damage + (amount * 0.8), max_damage)
|
||||
else
|
||||
src.damage += amount
|
||||
src.damage = between(0, src.damage + amount, max_damage)
|
||||
|
||||
//only show this if the organ is not robotic
|
||||
if(owner && parent_organ)
|
||||
if(owner && parent_organ && amount > 0)
|
||||
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
|
||||
if(parent && !silent)
|
||||
owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
var/list/obj/machinery/photocopier/faxmachine/allfaxes = list()
|
||||
var/list/admin_departments = list("Central Command", "Sol Government")
|
||||
var/list/admin_departments = list("[boss_name]", "Sol Government")
|
||||
var/list/alldepartments = list()
|
||||
|
||||
var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
@@ -18,15 +18,13 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
var/obj/item/weapon/card/id/scan = null // identification
|
||||
var/authenticated = 0
|
||||
var/sendcooldown = 0 // to avoid spamming fax messages
|
||||
|
||||
var/department = "Unknown" // our department
|
||||
|
||||
var/destination = "Central Command" // the department we're sending to
|
||||
var/destination = null // the department we're sending to
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/New()
|
||||
..()
|
||||
allfaxes += src
|
||||
|
||||
if(!destination) destination = "[boss_name]"
|
||||
if( !(("[department]" in alldepartments) || ("[department]" in admin_departments)) )
|
||||
alldepartments |= department
|
||||
|
||||
@@ -51,7 +49,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
dat += "<hr>"
|
||||
|
||||
if(authenticated)
|
||||
dat += "<b>Logged in to:</b> Central Command Quantum Entanglement Network<br><br>"
|
||||
dat += "<b>Logged in to:</b> [boss_name] Quantum Entanglement Network<br><br>"
|
||||
|
||||
if(copyitem)
|
||||
dat += "<a href='byond://?src=\ref[src];remove=1'>Remove Item</a><br><br>"
|
||||
@@ -60,7 +58,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
dat += "<b>Transmitter arrays realigning. Please stand by.</b><br>"
|
||||
|
||||
else
|
||||
|
||||
|
||||
dat += "<a href='byond://?src=\ref[src];send=1'>Send</a><br>"
|
||||
dat += "<b>Currently sending:</b> [copyitem.name]<br>"
|
||||
dat += "<b>Sending to:</b> <a href='byond://?src=\ref[src];dept=1'>[destination]</a><br>"
|
||||
@@ -89,7 +87,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
send_admin_fax(usr, destination)
|
||||
else
|
||||
sendfax(destination)
|
||||
|
||||
|
||||
if (sendcooldown)
|
||||
spawn(sendcooldown) // cooldown time
|
||||
sendcooldown = 0
|
||||
@@ -114,8 +112,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
scan = null
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/card/id))
|
||||
usr.drop_item()
|
||||
if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I))
|
||||
I.loc = src
|
||||
scan = I
|
||||
authenticated = 0
|
||||
@@ -138,14 +135,14 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
|
||||
use_power(200)
|
||||
|
||||
|
||||
var/success = 0
|
||||
for(var/obj/machinery/photocopier/faxmachine/F in allfaxes)
|
||||
if( F.department == destination )
|
||||
success = F.recievefax(copyitem)
|
||||
|
||||
|
||||
if (success)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
//sendcooldown = 600
|
||||
@@ -155,16 +152,16 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
/obj/machinery/photocopier/faxmachine/proc/recievefax(var/obj/item/incoming)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return 0
|
||||
|
||||
|
||||
if(department == "Unknown")
|
||||
return 0 //You can't send faxes to "Unknown"
|
||||
|
||||
flick("faxreceive", src)
|
||||
playsound(loc, "sound/items/polaroid1.ogg", 50, 1)
|
||||
|
||||
|
||||
// give the sprite some time to flick
|
||||
sleep(20)
|
||||
|
||||
|
||||
if (istype(incoming, /obj/item/weapon/paper))
|
||||
copy(incoming)
|
||||
else if (istype(incoming, /obj/item/weapon/photo))
|
||||
@@ -180,7 +177,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
/obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
|
||||
use_power(200)
|
||||
|
||||
var/obj/item/rcvdcopy
|
||||
@@ -193,22 +190,22 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
else
|
||||
visible_message("[src] beeps, \"Error transmitting message.\"")
|
||||
return
|
||||
|
||||
|
||||
rcvdcopy.loc = null //hopefully this shouldn't cause trouble
|
||||
adminfaxes += rcvdcopy
|
||||
|
||||
|
||||
//message badmins that a fax has arrived
|
||||
switch(destination)
|
||||
if ("Central Command")
|
||||
message_admins(sender, "CENTCOMM FAX", rcvdcopy, "CentcommFaxReply", "#006100")
|
||||
if (boss_name)
|
||||
message_admins(sender, "[uppertext(boss_short)] FAX", rcvdcopy, "CentcommFaxReply", "#006100")
|
||||
if ("Sol Government")
|
||||
message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0")
|
||||
//message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "SolGovFaxReply", "#1F66A0")
|
||||
|
||||
|
||||
sendcooldown = 1800
|
||||
sleep(50)
|
||||
visible_message("[src] beeps, \"Message transmitted successfully.\"")
|
||||
|
||||
|
||||
|
||||
/obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/obj/item/sent, var/reply_type, font_colour="#006100")
|
||||
var/msg = "\blue <b><font color='[font_colour]'>[faxname]: </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>) ([admin_jump_link(sender, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<a href='?_src_=holder;[reply_type]=\ref[sender];originfax=\ref[src]'>REPLY</a>)</b>: Receiving '[sent.name]' via secure connection ... <a href='?_src_=holder;AdminFaxView=\ref[sent]'>view message</a>"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/sec
|
||||
name = ".45 pistol"
|
||||
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a Nanotrasen subsidiary. Found pretty much everywhere humans are. Uses .45 rounds."
|
||||
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Found pretty much everywhere humans are. Uses .45 rounds."
|
||||
icon_state = "secguncomp"
|
||||
magazine_type = /obj/item/ammo_magazine/c45m/rubber
|
||||
caliber = ".45"
|
||||
@@ -44,7 +44,7 @@
|
||||
magazine_type = /obj/item/ammo_magazine/c45m/flash
|
||||
|
||||
/obj/item/weapon/gun/projectile/sec/wood
|
||||
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a Nanotrasen subsidiary. This one has a sweet wooden grip. Uses .45 rounds."
|
||||
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. This one has a sweet wooden grip. Uses .45 rounds."
|
||||
name = "custom .45 Pistol"
|
||||
icon_state = "secgundark"
|
||||
|
||||
|
||||
@@ -729,17 +729,13 @@
|
||||
|
||||
if (usr.stat != 0)
|
||||
return
|
||||
if (holdingitems && holdingitems.len == 0)
|
||||
if (!holdingitems || holdingitems.len == 0)
|
||||
return
|
||||
|
||||
for(var/obj/item/O in holdingitems)
|
||||
O.loc = src.loc
|
||||
holdingitems -= O
|
||||
holdingitems = list()
|
||||
|
||||
/obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O)
|
||||
holdingitems -= O
|
||||
qdel(O)
|
||||
holdingitems.Cut()
|
||||
|
||||
/obj/machinery/reagentgrinder/proc/grind()
|
||||
|
||||
@@ -762,10 +758,6 @@
|
||||
// Process.
|
||||
for (var/obj/item/O in holdingitems)
|
||||
|
||||
if(!O || !istype(O))
|
||||
holdingitems -= null
|
||||
continue
|
||||
|
||||
var/remaining_volume = beaker.reagents.maximum_volume - beaker.reagents.total_volume
|
||||
if(remaining_volume <= 0)
|
||||
break
|
||||
@@ -776,13 +768,16 @@
|
||||
var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET)))
|
||||
if(amount_to_take)
|
||||
stack.use(amount_to_take)
|
||||
if(deleted(stack))
|
||||
holdingitems -= stack
|
||||
beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET))
|
||||
continue
|
||||
|
||||
if(O.reagents)
|
||||
O.reagents.trans_to(beaker, min(O.reagents.total_volume, remaining_volume))
|
||||
if(O.reagents.total_volume == 0)
|
||||
remove_object(O)
|
||||
holdingitems -= O
|
||||
qdel(O)
|
||||
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
|
||||
break
|
||||
|
||||
|
||||
@@ -1166,7 +1166,7 @@
|
||||
|
||||
glass_icon_state = "acidspitglass"
|
||||
glass_name = "glass of Acid Spit"
|
||||
glass_desc = "A drink from Nanotrasen. Made from live aliens."
|
||||
glass_desc = "A drink from the company archives. Made from live aliens."
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/alliescocktail
|
||||
@@ -1196,7 +1196,7 @@
|
||||
/datum/reagent/ethanol/amasec
|
||||
name = "Amasec"
|
||||
id = "amasec"
|
||||
description = "Official drink of the NanoTrasen Gun-Club!"
|
||||
description = "Official drink of the Gun Club!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300"
|
||||
strength = 25
|
||||
@@ -1243,7 +1243,7 @@
|
||||
|
||||
glass_icon_state = "atomicbombglass"
|
||||
glass_name = "glass of Atomic Bomb"
|
||||
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
|
||||
glass_desc = "We cannot take legal responsibility for your actions after imbibing."
|
||||
glass_center_of_mass = list("x"=15, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/b52
|
||||
@@ -1456,7 +1456,7 @@
|
||||
/datum/reagent/ethanol/grog
|
||||
name = "Grog"
|
||||
id = "grog"
|
||||
description = "Watered down rum, NanoTrasen approves!"
|
||||
description = "Watered-down rum, pirate approved!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300"
|
||||
strength = 100
|
||||
|
||||
@@ -180,7 +180,7 @@ research holder datum.
|
||||
|
||||
/datum/tech/syndicate
|
||||
name = "Illegal Technologies Research"
|
||||
desc = "The study of technologies that violate standard Nanotrasen regulations."
|
||||
desc = "The study of technologies that violate standard government regulations."
|
||||
id = TECH_ILLEGAL
|
||||
level = 0
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/r_n_d/server/centcom
|
||||
name = "Centcom Central R&D Database"
|
||||
name = "Central R&D Database"
|
||||
server_id = -1
|
||||
|
||||
/obj/machinery/r_n_d/server/centcom/initialize()
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
emergency_shuttle.departed = 1
|
||||
|
||||
if (emergency_shuttle.evac)
|
||||
priority_announcement.Announce("The Emergency Shuttle has left the station. Estimate [round(emergency_shuttle.estimate_arrival_time()/60,1)] minutes until the shuttle docks at Central Command.")
|
||||
priority_announcement.Announce("The Emergency Shuttle has left the station. Estimate [round(emergency_shuttle.estimate_arrival_time()/60,1)] minutes until the shuttle docks at [boss_name].")
|
||||
else
|
||||
priority_announcement.Announce("The Crew Transfer Shuttle has left the station. Estimate [round(emergency_shuttle.estimate_arrival_time()/60,1)] minutes until the shuttle docks at Central Command.")
|
||||
priority_announcement.Announce("The Crew Transfer Shuttle has left the station. Estimate [round(emergency_shuttle.estimate_arrival_time()/60,1)] minutes until the shuttle docks at [boss_name].")
|
||||
|
||||
/datum/shuttle/ferry/emergency/can_launch(var/user)
|
||||
if (istype(user, /obj/machinery/computer/shuttle_control/emergency))
|
||||
@@ -185,7 +185,7 @@
|
||||
else if (!shuttle.location)
|
||||
shuttle_status = "Standing-by at [station_name]."
|
||||
else
|
||||
shuttle_status = "Standing-by at Central Command."
|
||||
shuttle_status = "Standing-by at [boss_name]."
|
||||
if(WAIT_LAUNCH, FORCE_LAUNCH)
|
||||
shuttle_status = "Shuttle has recieved command and will depart shortly."
|
||||
if(WAIT_ARRIVE)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
var/obj/machinery/computer/C = user
|
||||
|
||||
if(world.time <= reset_time)
|
||||
C.visible_message("\blue Central Command will not allow the Special Operations shuttle to launch yet.")
|
||||
C.visible_message("\blue [boss_name] will not allow the Special Operations shuttle to launch yet.")
|
||||
if (((world.time - reset_time)/10) > 60)
|
||||
C.visible_message("\blue [-((world.time - reset_time)/10)/60] minutes remain!")
|
||||
else
|
||||
@@ -93,12 +93,12 @@
|
||||
if (!location) //just arrived home
|
||||
for(var/turf/T in get_area_turfs(destination))
|
||||
var/mob/M = locate(/mob) in T
|
||||
M << "\red You have arrived at Central Command. Operation has ended!"
|
||||
M << "<span class='danger'>You have arrived at [boss_name]. Operation has ended!</span>"
|
||||
else //just left for the station
|
||||
launch_mauraders()
|
||||
for(var/turf/T in get_area_turfs(destination))
|
||||
var/mob/M = locate(/mob) in T
|
||||
M << "\red You have arrived at [station_name]. Commence operation!"
|
||||
M << "<span class='danger'>You have arrived at [station_name]. Commence operation!</span>"
|
||||
|
||||
var/obj/machinery/light/small/readylight/light = locate() in T
|
||||
if(light) light.set_state(1)
|
||||
|
||||
@@ -59,14 +59,14 @@
|
||||
if(cloaked || isnull(departure_message))
|
||||
return
|
||||
|
||||
command_announcement.Announce(departure_message,(announcer ? announcer : "Central Command"))
|
||||
command_announcement.Announce(departure_message,(announcer ? announcer : "[boss_name]"))
|
||||
|
||||
/datum/shuttle/multi_shuttle/proc/announce_arrival()
|
||||
|
||||
if(cloaked || isnull(arrival_message))
|
||||
return
|
||||
|
||||
command_announcement.Announce(arrival_message,(announcer ? announcer : "Central Command"))
|
||||
command_announcement.Announce(arrival_message,(announcer ? announcer : "[boss_name]"))
|
||||
|
||||
|
||||
/obj/machinery/computer/shuttle_control/multi
|
||||
|
||||
Reference in New Issue
Block a user