mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-12 15:47:04 +01:00
Merge branch 'master' of github.com:Baystation12/Baystation12
Conflicts: baystation12.dme
This commit is contained in:
@@ -80,6 +80,7 @@
|
||||
#define FILE_DIR "code/game/objects/stacks"
|
||||
#define FILE_DIR "code/game/objects/storage"
|
||||
#define FILE_DIR "code/game/objects/tanks"
|
||||
#define FILE_DIR "code/game/player"
|
||||
#define FILE_DIR "code/game/verbs"
|
||||
#define FILE_DIR "code/js"
|
||||
#define FILE_DIR "code/modules"
|
||||
@@ -143,6 +144,7 @@
|
||||
#define FILE_DIR "code/unused/pda2"
|
||||
#define FILE_DIR "code/unused/spacecraft"
|
||||
#define FILE_DIR "code/WorkInProgress"
|
||||
#define FILE_DIR "code/WorkInProgress/Apples"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara"
|
||||
#define FILE_DIR "code/WorkInProgress/mapload"
|
||||
@@ -724,6 +726,7 @@
|
||||
#include "code\game\objects\tanks\emergency.dm"
|
||||
#include "code\game\objects\tanks\jetpack.dm"
|
||||
#include "code\game\objects\tanks\oxygen.dm"
|
||||
#include "code\game\player\news.dm"
|
||||
#include "code\game\verbs\AI_status.dm"
|
||||
#include "code\game\verbs\checkkarma.dm"
|
||||
#include "code\game\verbs\ooc.dm"
|
||||
|
||||
@@ -253,11 +253,19 @@ obj/machinery/atmospherics/pipe
|
||||
name="Scrubbers pipe"
|
||||
color="red"
|
||||
icon_state = ""
|
||||
initialize()
|
||||
..()
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe/simple/supply) || istype(node1, /obj/machinery/atmospherics/pipe/simple/supply))
|
||||
log_admin("Warning, scrubber pipeline connected to supply pipeline at [x], [y], [z]!")
|
||||
|
||||
simple/supply
|
||||
name="Air supply pipe"
|
||||
color="blue"
|
||||
icon_state = ""
|
||||
initialize()
|
||||
..()
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe/simple/scrubbers) || istype(node1, /obj/machinery/atmospherics/pipe/simple/scrubbers))
|
||||
log_admin("Warning, supply pipeline connected to scrubber pipeline at [x], [y], [z]!")
|
||||
|
||||
simple/supplymain
|
||||
name="Main air supply pipe"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/max_fuel = 350
|
||||
|
||||
/obj/item/weapon/weldpack/New()
|
||||
var/datum/reagents/R = new/datum/reagents(max_fuel) //5 refills
|
||||
var/datum/reagents/R = new/datum/reagents(max_fuel) //Lotsa refills
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("fuel", max_fuel)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
var/level = 2
|
||||
var/flags = FPRINT
|
||||
var/list/fingerprints = list()
|
||||
var/list/fingerprintshidden = new/list()
|
||||
var/list/fingerprintshidden = list()
|
||||
var/fingerprintslast = null
|
||||
var/list/blood_DNA = list()
|
||||
var/last_bumped = 0
|
||||
|
||||
@@ -860,7 +860,7 @@
|
||||
yield = 2
|
||||
potency = 10
|
||||
plant_type = 0
|
||||
growthstages = 6
|
||||
growthstages = 5
|
||||
|
||||
/* // Maybe one day when I get it to work like a grenade which exlodes gibs.
|
||||
/obj/item/seeds/gibtomatoseed
|
||||
|
||||
@@ -90,7 +90,7 @@ I decided to scrap round-specific objectives since keeping track of them would r
|
||||
When I already created about 4 new objectives, this doesn't seem terribly important or needed.
|
||||
*/
|
||||
|
||||
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
|
||||
/var/global/toggle_space_ninja = 0//If ninjas can spawn or not.
|
||||
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
|
||||
|
||||
/proc/space_ninja_arrival()
|
||||
|
||||
@@ -4,6 +4,7 @@ var/global/datum/controller/occupations/job_master
|
||||
var
|
||||
//List of all jobs
|
||||
list/occupations = list()
|
||||
list/occupations2 = list()
|
||||
//Players who need jobs
|
||||
list/unassigned = list()
|
||||
//Debug info
|
||||
@@ -159,7 +160,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(unassigned.len == 0) return 0
|
||||
//Shuffle players and jobs
|
||||
unassigned = shuffle(unassigned)
|
||||
// occupations = shuffle(occupations) check and see if we can do this one
|
||||
occupations2 = shuffle(occupations)
|
||||
|
||||
//Assistants are checked first
|
||||
Debug("DO, Running Assistant Check 1")
|
||||
@@ -185,7 +186,7 @@ var/global/datum/controller/occupations/job_master
|
||||
//Other jobs are now checked
|
||||
Debug("DO, Running Standard Check")
|
||||
for(var/level = 1 to 3)
|
||||
for(var/datum/job/job in occupations)
|
||||
for(var/datum/job/job in occupations2)
|
||||
Debug("Checking job: [job]")
|
||||
if(!job) continue
|
||||
if(!unassigned.len) break
|
||||
|
||||
@@ -307,6 +307,12 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
target_types += /obj/effect/decal/cleanable/vomit
|
||||
target_types += /obj/effect/decal/cleanable/robot_debris
|
||||
target_types += /obj/effect/decal/cleanable/crayon
|
||||
target_types += /obj/effect/decal/cleanable/mucus
|
||||
target_types += /obj/effect/decal/cleanable/robot_debris
|
||||
target_types += /obj/effect/decal/cleanable/molten_item
|
||||
target_types += /obj/effect/decal/cleanable/tomato_smudge
|
||||
target_types += /obj/effect/decal/cleanable/egg_smudge
|
||||
target_types += /obj/effect/decal/cleanable/pie_smudge
|
||||
|
||||
if(src.blood)
|
||||
target_types += /obj/effect/decal/cleanable/xenoblood/
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/last_found = 0
|
||||
var/last_newpatient_speak = 0 //Don't spam the "HEY I'M COMING" messages
|
||||
var/currently_healing = 0
|
||||
var/injection_amount = 15 //How much reagent do we inject at a time?
|
||||
var/injection_amount = 5 //How much reagent do we inject at a time?
|
||||
var/heal_threshold = 15 //Start healing when they have this much damage in a category
|
||||
var/use_beaker = 1 //Use reagents in beaker instead of default treatment agents.
|
||||
//Setting which reagents to use to treat what by default. By id.
|
||||
@@ -375,25 +375,21 @@
|
||||
if((src.use_beaker) && (src.reagent_glass) && (src.reagent_glass.reagents.total_volume))
|
||||
if(always_inject)
|
||||
reagent_id = "internal_beaker"
|
||||
else if (C.getBruteLoss() >= heal_threshold)
|
||||
if(C.reagents.has_reagent(src.treatment_brute))
|
||||
reagent_id = "internal_beaker"
|
||||
else if (C.getBruteLoss() >= heal_threshold && reagent_glass.reagents.has_reagent(src.treatment_brute))
|
||||
reagent_id = "internal_beaker"
|
||||
|
||||
else if (C.getOxyLoss() >= (15 + heal_threshold))
|
||||
if(C.reagents.has_reagent(src.treatment_oxy))
|
||||
reagent_id = "internal_beaker"
|
||||
else if (C.getOxyLoss() >= (15 + heal_threshold) && reagent_glass.reagents.has_reagent(src.treatment_oxy))
|
||||
reagent_id = "internal_beaker"
|
||||
|
||||
else if (C.getFireLoss() >= heal_threshold)
|
||||
if(C.reagents.has_reagent(src.treatment_fire))
|
||||
reagent_id = "internal_beaker"
|
||||
else if (C.getFireLoss() >= heal_threshold && reagent_glass.reagents.has_reagent(src.treatment_fire))
|
||||
reagent_id = "internal_beaker"
|
||||
|
||||
else if (C.getToxLoss() >= heal_threshold)
|
||||
if(C.reagents.has_reagent(src.treatment_tox))
|
||||
reagent_id = "internal_beaker"
|
||||
else if (C.getToxLoss() >= heal_threshold && reagent_glass.reagents.has_reagent(src.treatment_tox))
|
||||
reagent_id = "internal_beaker"
|
||||
|
||||
else if (100 - C.health >= heal_threshold && reagent_glass.reagents.has_reagent("tricordrazine"))
|
||||
reagent_id = "internal_beaker"
|
||||
|
||||
else if (100 - C.health >= heal_threshold)
|
||||
if(C.reagents.has_reagent("tricordrazine"))
|
||||
reagent_id = "internal_beaker"
|
||||
|
||||
if(src.emagged) //Emagged! Time to poison everybody.
|
||||
reagent_id = "toxin"
|
||||
@@ -425,8 +421,6 @@
|
||||
reagent_id = "inaprovaline"
|
||||
return
|
||||
|
||||
// src.speak(reagent_id)
|
||||
reagent_id = null
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -1496,6 +1496,8 @@ About the new airlock wires panel:
|
||||
return
|
||||
if (istype(C, /obj/item/device/hacktool))
|
||||
return src.attack_ai(user, C)
|
||||
if(ismob(C))
|
||||
return ..(C, user)
|
||||
src.add_fingerprint(user)
|
||||
switch(removal_step)
|
||||
if(0)
|
||||
|
||||
@@ -62,9 +62,9 @@ MASS SPECTROMETER
|
||||
/obj/item/device/detective_scanner
|
||||
name = "Scanner"
|
||||
desc = "Used to scan objects for DNA and fingerprints."
|
||||
icon_state = "forensic0"
|
||||
icon_state = "forensic1"
|
||||
var/amount = 20.0
|
||||
var/printing = 0.0
|
||||
// var/printing = 0.0
|
||||
var/list/stored = list()
|
||||
w_class = 3.0
|
||||
item_state = "electronic"
|
||||
@@ -90,15 +90,15 @@ MASS SPECTROMETER
|
||||
W.add_fingerprint(user)
|
||||
return
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.printing = !( src.printing )
|
||||
if(src.printing)
|
||||
user << "\blue Printing turned on"
|
||||
else
|
||||
user << "\blue Printing turned off"
|
||||
src.icon_state = text("forensic[]", src.printing)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
// attack_self(mob/user as mob)
|
||||
// src.printing = !( src.printing )
|
||||
// if(src.printing)
|
||||
// user << "\blue Printing turned on"
|
||||
// else
|
||||
// user << "\blue Printing turned off"
|
||||
// src.icon_state = text("forensic[]", src.printing)
|
||||
// add_fingerprint(user)
|
||||
// return
|
||||
|
||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if (!ishuman(M))
|
||||
@@ -108,11 +108,12 @@ MASS SPECTROMETER
|
||||
user << "\blue No fingerprints found on [M]"
|
||||
return 0
|
||||
else
|
||||
if ((src.amount < 1 && src.printing))
|
||||
if (src.amount < 1)
|
||||
user << text("\blue Fingerprints scanned on [M]. Need more cards to print.")
|
||||
src.printing = 0
|
||||
src.icon_state = text("forensic[]", src.printing)
|
||||
if (src.printing)
|
||||
// src.printing = 0
|
||||
// src.icon_state = text("forensic[]", src.printing)
|
||||
// if (src.printing)
|
||||
else
|
||||
src.amount--
|
||||
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
|
||||
F.amount = 1
|
||||
|
||||
Regular → Executable
+1
@@ -79,6 +79,7 @@ AI MODULES
|
||||
src.transmitInstructions(comp.current, usr)
|
||||
comp.current << "These are your laws now:"
|
||||
comp.current.show_laws()
|
||||
|
||||
usr << "Upload complete. The AI's laws have been modified."
|
||||
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ CIRCULAR SAW
|
||||
for(var/datum/disease/alien_embryo in M.viruses)
|
||||
alien_embryo.cure()
|
||||
return
|
||||
return
|
||||
|
||||
if(user.zone_sel.selecting == "groin")
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
@@ -55,7 +54,7 @@ CIRCULAR SAW
|
||||
M << "\red [user] begins to retract the flap in your abdomen with [src]!"
|
||||
user << "\red You retract the flap in [M]'s abdomen with [src]!"
|
||||
M:appendix_op_stage = 3.0
|
||||
return
|
||||
return
|
||||
|
||||
if (user.zone_sel.selecting == "eyes")
|
||||
|
||||
@@ -101,11 +100,11 @@ CIRCULAR SAW
|
||||
M.take_organ_damage(15)
|
||||
|
||||
M:eye_op_stage = 2.0
|
||||
return
|
||||
|
||||
else
|
||||
// bone surgery doable?
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
// bone surgery doable?
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/retractor/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
|
||||
if(!istype(H))
|
||||
@@ -194,6 +193,7 @@ CIRCULAR SAW
|
||||
M << "\red [user] begins to clamp bleeders in your abdomen with [src]!"
|
||||
user << "\red You clamp bleeders in [M]'s abdomen with [src]!"
|
||||
M:appendix_op_stage = 2.0
|
||||
return
|
||||
if(4.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
@@ -207,7 +207,7 @@ CIRCULAR SAW
|
||||
return
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(M))
|
||||
M:appendix_op_stage = 5.0
|
||||
return
|
||||
return
|
||||
|
||||
if (user.zone_sel.selecting == "eyes")
|
||||
|
||||
@@ -252,7 +252,8 @@ CIRCULAR SAW
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
M:eye_op_stage = 3.0
|
||||
else if(user.zone_sel.selecting == "head")
|
||||
return
|
||||
if(user.zone_sel.selecting == "head")
|
||||
if(istype(M, /mob/living/carbon/human) && M:brain_op_stage == 1)
|
||||
M:brain_op_stage = 0
|
||||
var/datum/organ/external/S = M:organs["head"]
|
||||
@@ -264,10 +265,9 @@ CIRCULAR SAW
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
else
|
||||
// bone surgery doable?
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
// bone surgery doable?
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/hemostat/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
|
||||
@@ -357,7 +357,7 @@ CIRCULAR SAW
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/verb/print_data()
|
||||
set src in view(usr, 1)
|
||||
if(usr.stat == 2)
|
||||
if(usr.stat)
|
||||
src << "No."
|
||||
return
|
||||
|
||||
@@ -411,7 +411,7 @@ CIRCULAR SAW
|
||||
n++
|
||||
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message("\red The [src] rattles and prints out a sheet of paper.", 1)
|
||||
O.show_message("\red \the [src] rattles and prints out a sheet of paper.", 1)
|
||||
|
||||
sleep(10)
|
||||
|
||||
@@ -441,7 +441,7 @@ CIRCULAR SAW
|
||||
usr << "<b>You have to cut the limb open first!</b>"
|
||||
return
|
||||
for(var/mob/O in viewers(M))
|
||||
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with the [src.name]", 1)
|
||||
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with \the [src.name]", 1)
|
||||
|
||||
src.add_data(S)
|
||||
|
||||
@@ -469,8 +469,6 @@ CIRCULAR SAW
|
||||
user << "\red You cauterize the incision in [M]'s torso with [src]!"
|
||||
M:embryo_op_stage = 0.0
|
||||
return
|
||||
else
|
||||
try_bone_surgery(M, user)
|
||||
|
||||
if(user.zone_sel.selecting == "groin")
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
@@ -485,9 +483,7 @@ CIRCULAR SAW
|
||||
for(var/datum/disease/appendicitis in M.viruses)
|
||||
appendicitis.cure()
|
||||
M.resistances += appendicitis
|
||||
else
|
||||
try_bone_surgery(M, user)
|
||||
return
|
||||
return
|
||||
|
||||
if (user.zone_sel.selecting == "eyes")
|
||||
|
||||
@@ -533,12 +529,10 @@ CIRCULAR SAW
|
||||
M.take_organ_damage(15)
|
||||
M.disabilities &= ~128
|
||||
M:eye_op_stage = 0.0
|
||||
return
|
||||
|
||||
else
|
||||
// bone surgery doable?
|
||||
try_bone_surgery(M, user)
|
||||
// if(!try_bone_surgery(M, user))
|
||||
// return ..()
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/cautery/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
|
||||
if(!istype(H))
|
||||
@@ -562,7 +556,7 @@ CIRCULAR SAW
|
||||
"\red [user] begins to cauterize the incision in \his [S.display_name] with [src]!", \
|
||||
"\red You begin to cauterize the incision in your [S.display_name] with [src]!")
|
||||
|
||||
if(do_mob(user, H, 100))
|
||||
if(do_mob(user, H, rand(70,100)))
|
||||
if(H != user)
|
||||
H.visible_message( \
|
||||
"\red [user] cauterizes the incision in [H]'s [S.display_name] with [src]!", \
|
||||
@@ -763,9 +757,9 @@ CIRCULAR SAW
|
||||
M:brain_op_stage = 3.0
|
||||
else
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
else if(user.zone_sel.selecting == "eyes")
|
||||
if(user.zone_sel.selecting == "eyes")
|
||||
user << "\blue So far so good."
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -812,10 +806,9 @@ CIRCULAR SAW
|
||||
M.updatehealth()
|
||||
M:eye_op_stage = 1.0
|
||||
user << "\blue So far so good after."
|
||||
else
|
||||
// bone surgery doable?
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
return
|
||||
if(!try_bone_surgery(M, user))
|
||||
return ..()
|
||||
|
||||
/* wat
|
||||
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
directory: player
|
||||
content: Anything relating to out-of-character, player related features, including saves, announcements and so on.
|
||||
@@ -0,0 +1,232 @@
|
||||
// a single news datum
|
||||
datum/news/var
|
||||
ID // the ID of the news
|
||||
title // the title of the news
|
||||
body // a body with an exact explanation
|
||||
author // key of the author
|
||||
date // date on which this was created
|
||||
|
||||
datum/news_topic_handler
|
||||
Topic(href,href_list)
|
||||
var/client/C = locate(href_list["client"])
|
||||
if(href_list["action"] == "show_all_news")
|
||||
C.display_all_news_list()
|
||||
else if(href_list["action"] == "remove")
|
||||
C.remove_news(text2num(href_list["ID"]))
|
||||
else if(href_list["action"] == "edit")
|
||||
C.edit_news(text2num(href_list["ID"]))
|
||||
else if(href_list["action"] == "show_news")
|
||||
C.display_news_list()
|
||||
else if(href_list["action"] == "add_news")
|
||||
C.add_news()
|
||||
|
||||
var/datum/news_topic_handler/news_topic_handler
|
||||
|
||||
world/New()
|
||||
..()
|
||||
news_topic_handler = new
|
||||
|
||||
proc/savefile_path(mob/user)
|
||||
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav"
|
||||
|
||||
// add a new news datums
|
||||
proc/make_news(title, body, author)
|
||||
var/savefile/News = new("data/news.sav")
|
||||
var/list/news
|
||||
var/lastID
|
||||
|
||||
News["news"] >> news
|
||||
News["lastID"] >> lastID
|
||||
|
||||
if(!news) news = list()
|
||||
if(!lastID) lastID = 0
|
||||
|
||||
var/datum/news/created = new()
|
||||
created.ID = ++lastID
|
||||
created.title = title
|
||||
created.body = body
|
||||
created.author = author
|
||||
created.date = world.realtime
|
||||
|
||||
news.Insert(1, created)
|
||||
|
||||
News["news"] << news
|
||||
News["lastID"] << lastID
|
||||
|
||||
// load the news from disk
|
||||
proc/load_news()
|
||||
var/savefile/News = new("data/news.sav")
|
||||
var/list/news
|
||||
|
||||
News["news"] >> news
|
||||
|
||||
if(!news) news = list()
|
||||
|
||||
return news
|
||||
|
||||
// save the news to disk
|
||||
proc/save_news(var/list/news)
|
||||
var/savefile/News = new("data/news.sav")
|
||||
News << news
|
||||
|
||||
// check if there are any news in the player's "inbox"
|
||||
client/proc/has_news()
|
||||
var/list/news = load_news()
|
||||
|
||||
// load the list of news already read by this player
|
||||
var/path = savefile_path(src.mob)
|
||||
if(!fexists(path))
|
||||
return
|
||||
|
||||
var/savefile/F = new(path)
|
||||
var/list/read_news = list()
|
||||
F["read_news"] >> read_news
|
||||
|
||||
for(var/datum/news/N in news)
|
||||
if(N.ID in read_news)
|
||||
continue
|
||||
else return 1
|
||||
|
||||
return 0
|
||||
|
||||
// display only the news that haven't been read yet
|
||||
client/proc/display_news_list()
|
||||
var/list/news = load_news()
|
||||
|
||||
var/output = ""
|
||||
if(has_news())
|
||||
// load the list of news already read by this player
|
||||
var/path = savefile_path(src.mob)
|
||||
if(!fexists(path))
|
||||
return
|
||||
|
||||
var/savefile/F = new(path)
|
||||
var/list/read_news
|
||||
F["read_news"] >> read_news
|
||||
if(!read_news) read_news = list()
|
||||
|
||||
for(var/datum/news/N in news)
|
||||
if(N.ID in read_news)
|
||||
continue
|
||||
read_news += N.ID
|
||||
output += "<b>[N.title]</b><br>"
|
||||
output += "[N.body]<br>"
|
||||
output += "<small>authored by <i>[N.author]</i></small><br>"
|
||||
output += "<br>"
|
||||
|
||||
F["read_news"] << read_news
|
||||
else
|
||||
output += "<b>Nothing new!</b><br><br>"
|
||||
|
||||
output += "<a href='?src=\ref[news_topic_handler];client=\ref[src];action=show_all_news'>Display All</a><br>"
|
||||
if(src.holder)
|
||||
output += "<a href='?src=\ref[news_topic_handler];client=\ref[src];action=add_news'>Add</a> <a href=http://baystation12.net/forums/index.php/topic,3680.0.html>Guidelines</a><br>"
|
||||
|
||||
usr << browse(output, "window=news;size=600x400")
|
||||
|
||||
|
||||
// display all news, even the ones read already
|
||||
client/proc/display_all_news_list()
|
||||
var/list/news = load_news()
|
||||
|
||||
var/admin = (src.holder)
|
||||
|
||||
// load the list of news already read by this player
|
||||
var/path = savefile_path(src.mob)
|
||||
if(!fexists(path))
|
||||
return
|
||||
|
||||
var/savefile/F = new(path)
|
||||
var/list/read_news
|
||||
F["read_news"] >> read_news
|
||||
if(!read_news) read_news = list()
|
||||
|
||||
var/output = ""
|
||||
for(var/datum/news/N in news)
|
||||
if(!(N.ID in read_news))
|
||||
read_news += N.ID
|
||||
var/date = time2text(N.date,"MM/DD")
|
||||
output += "[date] <b>[N.title]</b><br>"
|
||||
output += "[N.body]<br>"
|
||||
output += "<small>authored by <i>[N.author]</i></small>"
|
||||
if(admin && N.author == src.key)
|
||||
output += " <a href='?src=\ref[news_topic_handler];client=\ref[src];action=remove;ID=[N.ID]'>Delete</a> <a href='?src=\ref[news_topic_handler];client=\ref[src];action=edit;ID=[N.ID]'>Edit</a>"
|
||||
output += "<br>"
|
||||
output += "<br>"
|
||||
F["read_news"] << read_news
|
||||
if(admin)
|
||||
output += "<a href='?src=\ref[news_topic_handler];client=\ref[src];action=add_news'>Add</a> <a href=http://baystation12.net/forums/index.php/topic,3680.0.html>Guidelines</a><br>"
|
||||
usr << browse(output, "window=news;size=600x400")
|
||||
|
||||
|
||||
client/proc/add_news()
|
||||
if(!src.holder)
|
||||
src << "<b>You tried to modify the news, but you're not an admin!"
|
||||
return
|
||||
|
||||
var/title = input(src.mob, "Select a title for the news", "Title") as null|text
|
||||
if(!title) return
|
||||
|
||||
var/body = input(src.mob, "Enter a body for the news", "Body") as null|message
|
||||
if(!body) return
|
||||
|
||||
make_news(title, body, key)
|
||||
|
||||
spawn(1)
|
||||
display_all_news_list()
|
||||
|
||||
client/verb/read_news()
|
||||
set name = "Read News"
|
||||
set category = "OOC"
|
||||
set desc = "Read important news and updates"
|
||||
display_all_news_list()
|
||||
|
||||
client/proc/remove_news(ID as num)
|
||||
if(src.holder)
|
||||
src << "<b>You tried to modify the news, but you're not an admin!"
|
||||
return
|
||||
|
||||
var/savefile/News = new("data/news.sav")
|
||||
var/list/news
|
||||
|
||||
News["news"] >> news
|
||||
|
||||
for(var/datum/news/N in news)
|
||||
if(N.ID == ID)
|
||||
news.Remove(N)
|
||||
|
||||
News["news"] << news
|
||||
|
||||
spawn(1)
|
||||
display_all_news_list()
|
||||
|
||||
client/proc/edit_news(ID as num)
|
||||
if(src.holder)
|
||||
src << "<b>You tried to modify the news, but you're not an admin!"
|
||||
return
|
||||
|
||||
var/savefile/News = new("data/news.sav")
|
||||
var/list/news
|
||||
|
||||
News["news"] >> news
|
||||
|
||||
var/datum/news/found
|
||||
for(var/datum/news/N in news)
|
||||
if(N.ID == ID)
|
||||
found = N
|
||||
if(!found) src << "<b>* An error occured, sorry.</b>"
|
||||
|
||||
var/title = input(src.mob, "Select a title for the news", "Title") as null|text
|
||||
if(!title) return
|
||||
|
||||
var/body = input(src.mob, "Enter a body for the news", "Body") as null|message
|
||||
if(!body) return
|
||||
|
||||
found.title = title
|
||||
found.body = body
|
||||
|
||||
|
||||
News["news"] << news
|
||||
|
||||
spawn(1)
|
||||
display_all_news_list()
|
||||
+7
-7
@@ -1207,13 +1207,6 @@ turf/simulated/floor/return_siding_icon_state()
|
||||
if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels
|
||||
return
|
||||
|
||||
if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
|
||||
if(istype(A, /mob/living))
|
||||
var/mob/living/MM = A
|
||||
if(MM.client)
|
||||
MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
|
||||
return
|
||||
|
||||
// else if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") Sandbox_Spacemove(A)
|
||||
|
||||
else
|
||||
@@ -1222,6 +1215,13 @@ turf/simulated/floor/return_siding_icon_state()
|
||||
del(A)
|
||||
return
|
||||
|
||||
if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear)))
|
||||
if(istype(A, /mob/living))
|
||||
var/mob/living/MM = A
|
||||
if(MM.client)
|
||||
MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is."
|
||||
return
|
||||
|
||||
var/move_to_z_str = pickweight(accessable_z_levels)
|
||||
|
||||
var/move_to_z = text2num(move_to_z_str)
|
||||
|
||||
@@ -92,13 +92,16 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data = ""
|
||||
scan_name = ""
|
||||
scan_process = 0
|
||||
booked = 0
|
||||
|
||||
req_access = list(access_forensics_lockers)
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/book/manual/detective(get_turf(src))
|
||||
if(!booked)
|
||||
new /obj/item/weapon/book/manual/detective(get_turf(src))
|
||||
booked = 1
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
/obj/item/weapon/evidencebag/afterattack(obj/item/O, mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/storage) && O in user)
|
||||
user << "You put the evidence bag into the [O]."
|
||||
return ..()
|
||||
if(!(O && istype(O)) || O.anchored == 1)
|
||||
user << "You can't put that inside the [src]!"
|
||||
|
||||
@@ -1747,7 +1747,18 @@
|
||||
J.spawn_positions = -1
|
||||
message_admins("[key_name_admin(usr)] has removed the cap on security officers.")
|
||||
return
|
||||
//hahaha
|
||||
if (href_list["rnd_max"])
|
||||
for(var/obj/machinery/computer/rdconsole/C in world)
|
||||
for(var/datum/tech/T in C.files.known_tech)
|
||||
T.level = 6
|
||||
C.files.RefreshResearch()
|
||||
|
||||
for(var/obj/machinery/r_n_d/server/C in world)
|
||||
for(var/datum/tech/T in C.files.known_tech)
|
||||
T.level = 6
|
||||
C.files.RefreshResearch()
|
||||
|
||||
owner:rnd_check_designs()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
|
||||
@@ -141,6 +141,7 @@
|
||||
verbs += /client/proc/callprocobj
|
||||
verbs += /client/proc/cmd_debug_prints
|
||||
verbs += /client/proc/cmd_debug_blood
|
||||
verbs += /client/proc/rnd_check_designs
|
||||
|
||||
if (holder.level >= 5)//Game Admin********************************************************************
|
||||
verbs += /obj/admins/proc/view_txt_log
|
||||
@@ -422,6 +423,7 @@
|
||||
verbs -= /client/proc/radioalert
|
||||
verbs -= /client/proc/cmd_debug_prints
|
||||
verbs -= /client/proc/cmd_debug_blood
|
||||
verbs -= /client/proc/rnd_check_designs
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -862,4 +862,31 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
ticker.random_players = 1
|
||||
|
||||
/client/proc/rnd_check_designs()
|
||||
set category = "Debug"
|
||||
set name = "Check RnD Designs"
|
||||
set desc = "Check validity of RnD data of the consoles and server."
|
||||
|
||||
if (!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
|
||||
var/dat = "<head><title>RnD Check</title></head>"
|
||||
|
||||
for(var/obj/machinery/computer/rdconsole/C in world)
|
||||
dat += "<b>[C.name] - RnD Console</b><br>"
|
||||
for(var/datum/design/D in C.files.known_designs)
|
||||
if(!text2path(D.build_path))
|
||||
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
|
||||
dat += "<br>"
|
||||
|
||||
for(var/obj/machinery/r_n_d/server/C in world)
|
||||
dat += "<b>[C.name] - Server</b><br>"
|
||||
for(var/datum/design/D in C.files.known_designs)
|
||||
if(!text2path(D.build_path))
|
||||
dat += "[D.name]'s has invalid build path [D.build_path]<br>"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<hr><a href='?src=\ref[holder];rnd_max=1'>Max out tech levels.</a>"
|
||||
|
||||
usr << browse(dat, "window=chk_design")
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
/obj/machinery/chem_dispenser/process()
|
||||
if(stat & NOPOWER) return
|
||||
if(!charging_reagents) return
|
||||
if(!charging_reagents || src.energy > 30) return
|
||||
|
||||
use_power(10000)
|
||||
src.energy += 0.05
|
||||
@@ -331,7 +331,7 @@
|
||||
else if(href_list["pill_sprite"])
|
||||
pillsprite = href_list["pill_sprite"]
|
||||
else if(href_list["bottle_sprite"])
|
||||
bottlesprite = href_list["bottlesprite"]
|
||||
bottlesprite = href_list["bottle_sprite"]
|
||||
else
|
||||
usr << browse(null, "window=chem_master")
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
|
||||
icon_state = "rig-engineering"
|
||||
item_state = "rig_helm"
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 60)
|
||||
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
|
||||
allowed = list(/obj/item/device/flashlight)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/mining
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A hood that protects the head and face from biological comtaminants."
|
||||
permeability_coefficient = 0.01
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 10)
|
||||
|
||||
/obj/item/clothing/suit/bio_suit
|
||||
name = "bio suit"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
icon_state = "rad"
|
||||
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 20)
|
||||
|
||||
/obj/item/clothing/suit/radiation
|
||||
name = "Radiation suit"
|
||||
|
||||
@@ -42,6 +42,14 @@
|
||||
else
|
||||
usr << "\blue [src.name] has a \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face."
|
||||
|
||||
if (src.head)
|
||||
usr << "\blue [src.name] is wearing a[src.head.blood_DNA.len ? " bloody " : " "] \icon[src.head] [src.head.name] on [t_his] head!"
|
||||
|
||||
if (src.glasses)
|
||||
usr << "\blue [src.name] is wearing a pair of [src.glasses.blood_DNA.len ? " bloody " : " "] \icon[src.glasses] [src.glasses.name]!"
|
||||
|
||||
|
||||
|
||||
if (src.l_hand)
|
||||
if (src.l_hand.blood_DNA.len)
|
||||
usr << "\red [src.name] has a[src.l_hand.blood_DNA.len ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
/obj/effect/equip_e/human/process()
|
||||
if (item)
|
||||
item.add_fingerprint(source)
|
||||
var/item_loc = 0
|
||||
if (!item)
|
||||
switch(place)
|
||||
if("mask")
|
||||
@@ -1481,9 +1482,65 @@
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
switch(place)
|
||||
if("mask")
|
||||
if(target.wear_mask)
|
||||
item_loc = 1
|
||||
if("l_hand")
|
||||
if(target.l_hand)
|
||||
item_loc = 1
|
||||
if("r_hand")
|
||||
if(target.r_hand)
|
||||
item_loc = 1
|
||||
if("gloves")
|
||||
if(target.gloves)
|
||||
item_loc = 1
|
||||
if("eyes")
|
||||
if(target.glasses)
|
||||
item_loc = 1
|
||||
if("l_ear")
|
||||
if(target.l_ear)
|
||||
item_loc = 1
|
||||
if("r_ear")
|
||||
if(target.r_ear)
|
||||
item_loc = 1
|
||||
if("head")
|
||||
if(target.head)
|
||||
item_loc = 1
|
||||
if("shoes")
|
||||
if(target.shoes)
|
||||
item_loc = 1
|
||||
if("belt")
|
||||
if(target.belt)
|
||||
item_loc = 1
|
||||
if("suit")
|
||||
if(target.wear_suit)
|
||||
item_loc = 1
|
||||
if("back")
|
||||
if(target.back)
|
||||
item_loc = 1
|
||||
if("uniform")
|
||||
if(target.w_uniform)
|
||||
item_loc = 1
|
||||
if("s_store")
|
||||
if(target.s_store)
|
||||
item_loc = 1
|
||||
if("h_store")
|
||||
if(target.h_store)
|
||||
item_loc = 1
|
||||
if("id")
|
||||
if(target.wear_id)
|
||||
item_loc = 1
|
||||
if("internal")
|
||||
if (target.internal)
|
||||
item_loc = 1
|
||||
if("handcuff")
|
||||
if (target.handcuffed)
|
||||
item_loc = 1
|
||||
|
||||
var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel")
|
||||
if ((item && !( L.Find(place) )))
|
||||
if (item && !L.Find(place) && !item_loc)
|
||||
if(isrobot(source) && place != "handcuff")
|
||||
del(src)
|
||||
return
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
isbreathing = 1
|
||||
holdbreath = 0
|
||||
lyingcheck = 0
|
||||
buckle_check = 0
|
||||
|
||||
/mob/living/carbon/human/Life()
|
||||
set invisibility = 0
|
||||
@@ -24,6 +25,22 @@
|
||||
if(!loc) // Fixing a null error that occurs when the mob isn't found in the world -- TLE
|
||||
return
|
||||
|
||||
//Being buckled to a chair or bed
|
||||
check_if_buckled()
|
||||
|
||||
// Update clothing
|
||||
// update_clothing()
|
||||
if((lyingcheck != lying) || (buckle_check != (buckled ? 1 : 0))) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every
|
||||
spawn(5)
|
||||
update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared
|
||||
lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal.
|
||||
|
||||
if(stat == 2)
|
||||
if((!lying || !lyingcheck) && !buckled)
|
||||
lying = 1
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
life_tick++
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
@@ -85,18 +102,9 @@
|
||||
// Some mobs heal slowly, others die slowly
|
||||
handle_health_updates()
|
||||
|
||||
// Update clothing
|
||||
// update_clothing()
|
||||
if(lyingcheck != lying) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every
|
||||
update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared
|
||||
lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal.
|
||||
|
||||
if(client)
|
||||
handle_regular_hud_updates()
|
||||
|
||||
//Being buckled to a chair or bed
|
||||
check_if_buckled()
|
||||
|
||||
// Yup.
|
||||
update_canmove()
|
||||
|
||||
@@ -317,6 +325,15 @@
|
||||
//As close as I could find to where to put it
|
||||
grav_delay = max(grav_delay-3,0)
|
||||
|
||||
/** Overview of breathing code:
|
||||
- first it's determined whether the human is capable of breathing
|
||||
- then it's determined whether the human is holding his breath intentionally
|
||||
- the isbreathing variable is set according to this
|
||||
|
||||
- next, we look for any air that the mob could breathe, first internals, then in the air around him
|
||||
- if the human isn't breathing, it counts as vacuum
|
||||
- then we check if the air we found is breathable, if not, we inflict oxygen damage
|
||||
**/
|
||||
breathe()
|
||||
|
||||
if(reagents.has_reagent("lexorin")) return
|
||||
@@ -324,25 +341,15 @@
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/datum/air_group/breath
|
||||
|
||||
// HACK NEED CHANGING LATER
|
||||
if(health < config.health_threshold_dead)
|
||||
losebreath++
|
||||
isbreathing = 0
|
||||
if(isbreathing && health < config.health_threshold_crit)
|
||||
spawn emote("stopbreath")
|
||||
isbreathing = 0
|
||||
|
||||
if(holdbreath)
|
||||
isbreathing = 0
|
||||
if(losebreath > 0)
|
||||
// inaprovaline prevents the need to breathe for a while
|
||||
if(reagents.has_reagent("inaprovaline"))
|
||||
losebreath = 0
|
||||
else
|
||||
losebreath--
|
||||
// we're running out of air, gasp for it!
|
||||
if (prob(25)) //High chance of gasping for air
|
||||
spawn emote("gasp")
|
||||
isbreathing = 0
|
||||
else if(health >= 0 && !isbreathing)
|
||||
else if(health >= config.health_threshold_crit && !isbreathing)
|
||||
if(holdbreath)
|
||||
// we're simply holding our breath, see if we can hold it longer
|
||||
if(health < 30)
|
||||
@@ -434,6 +441,8 @@
|
||||
|
||||
oxygen_alert = max(oxygen_alert, 1)
|
||||
|
||||
if(isbreathing && prob(20)) spawn(0) emote("gasp")
|
||||
|
||||
return 0
|
||||
|
||||
var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
|
||||
@@ -454,7 +463,7 @@
|
||||
//var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value
|
||||
|
||||
if(O2_pp < safe_oxygen_min) // Too little oxygen
|
||||
if(prob(20))
|
||||
if(prob(20) && isbreathing)
|
||||
spawn(0) emote("gasp")
|
||||
if(O2_pp > 0)
|
||||
var/ratio = safe_oxygen_min/O2_pp
|
||||
@@ -485,7 +494,7 @@
|
||||
oxyloss += 3 // Lets hurt em a little, let them know we mean business
|
||||
if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
|
||||
oxyloss += 8
|
||||
if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
|
||||
if(prob(20) && isbreathing) // Lets give them some chance to know somethings not right though I guess.
|
||||
spawn(0) emote("cough")
|
||||
|
||||
else
|
||||
@@ -506,7 +515,7 @@
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
sleeping = max(sleeping, 2)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
if(prob(20))
|
||||
if(prob(20) && isbreathing)
|
||||
spawn(0) emote(pick("giggle", "laugh"))
|
||||
SA.moles = 0 //Hack to stop the damned surgeon from giggling.
|
||||
|
||||
@@ -830,9 +839,6 @@
|
||||
else if(health < config.health_threshold_crit)
|
||||
if(health <= 20 && prob(1)) spawn(0) emote("gasp")
|
||||
|
||||
//if(!rejuv) oxyloss++
|
||||
if(!reagents.has_reagent("inaprovaline")) oxyloss++
|
||||
|
||||
if(stat != 2) stat = 1
|
||||
Paralyse(5)
|
||||
|
||||
@@ -1190,13 +1196,18 @@
|
||||
|
||||
|
||||
check_if_buckled()
|
||||
if (buckled)
|
||||
lying = istype(buckled, /obj/structure/stool/bed) || istype(buckled, /obj/machinery/conveyor)
|
||||
if(lying)
|
||||
if(buckle_check != (buckled ? 1 : 0))
|
||||
buckle_check = (buckled ? 1 : 0)
|
||||
if (buckled)
|
||||
lying = istype(buckled, /obj/structure/stool/bed) || istype(buckled, /obj/machinery/conveyor)
|
||||
if(lying)
|
||||
drop_item()
|
||||
density = 1
|
||||
else
|
||||
density = !lying
|
||||
if(buckle_check)
|
||||
if(istype(buckled, /obj/structure/stool/bed) || istype(buckled, /obj/machinery/conveyor))
|
||||
drop_item()
|
||||
density = 1
|
||||
else
|
||||
density = !lying
|
||||
|
||||
handle_stomach()
|
||||
spawn(0)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if(PARALYZE)
|
||||
Paralyse(effect/(blocked+1))
|
||||
if(IRRADIATE)
|
||||
radiation += min((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
|
||||
radiation += max((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
|
||||
if(STUTTER)
|
||||
stuttering = max(stuttering,(effect/(blocked+1)))
|
||||
if(SLUR)
|
||||
|
||||
Regular → Executable
+18
@@ -20,33 +20,51 @@
|
||||
if (!src.laws)
|
||||
src.laws = new /datum/ai_laws/nanotrasen
|
||||
|
||||
/mob/living/silicon/ai/proc/notify_linked_cyborgs()
|
||||
for (var/mob/living/silicon/robot/A in world)
|
||||
if(A.stat == 2)
|
||||
continue
|
||||
if(!islinked(A, src))
|
||||
continue
|
||||
|
||||
A << "These are your laws now:"
|
||||
A.show_laws()
|
||||
|
||||
/mob/living/silicon/ai/proc/set_zeroth_law(var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.set_zeroth_law(law)
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
/mob/living/silicon/ai/proc/add_inherent_law(var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.add_inherent_law(law)
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
/mob/living/silicon/ai/proc/clear_inherent_laws()
|
||||
src.laws_sanity_check()
|
||||
src.laws.clear_inherent_laws()
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
/mob/living/silicon/ai/proc/add_ion_law(var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.add_ion_law(law)
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
/mob/living/silicon/ai/proc/clear_ion_laws()
|
||||
src.laws_sanity_check()
|
||||
src.laws.clear_ion_laws()
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
|
||||
src.laws_sanity_check()
|
||||
src.laws.add_supplied_law(number, law)
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
/mob/living/silicon/ai/proc/clear_supplied_laws()
|
||||
src.laws_sanity_check()
|
||||
src.laws.clear_supplied_laws()
|
||||
src.notify_linked_cyborgs()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -48,6 +48,9 @@
|
||||
if(preferences.pregame_music)
|
||||
spawn() Playmusic() // git some tunes up in heeyaa~
|
||||
|
||||
if(client.has_news())
|
||||
src << "<b><font color=blue>There are some unread <a href='?src=\ref[news_topic_handler];client=\ref[client];action=show_news'>news</a> for you! Please make sure to read all news, as they may contain important updates about roleplay rules or canon.</font></b>"
|
||||
|
||||
new_player_panel()
|
||||
//PDA Resource Initialisation =======================================================>
|
||||
/*
|
||||
|
||||
@@ -216,8 +216,9 @@ var/global/list/uneatable = list(
|
||||
step_towards(X,src)
|
||||
else if(istype(X,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = X
|
||||
H << "\red The singularity has you in it's gravitational pull! It's hard to break free!"
|
||||
H.grav_delay = 20 //No running this time!
|
||||
if(prob(25))
|
||||
H << "\red The singularity has you in it's gravitational pull! It's hard to break free!"
|
||||
H.grav_delay = 15 //No running this time!
|
||||
if(istype(H.shoes,/obj/item/clothing/shoes/magboots) && !(src.current_size >= 9))
|
||||
var/obj/item/clothing/shoes/magboots/M = H.shoes
|
||||
if(M.magpulse)
|
||||
@@ -405,8 +406,8 @@ var/global/list/uneatable = list(
|
||||
for(var/mob/living/M in view(toxrange, src.loc))
|
||||
if(istype(M,/mob/living/))
|
||||
M.apply_effect(rand(radiation), IRRADIATE)
|
||||
toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
|
||||
M.apply_effect(toxdamage, TOX)
|
||||
var/tdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
|
||||
M.apply_effect(tdamage, TOX)
|
||||
return
|
||||
|
||||
|
||||
@@ -432,6 +433,17 @@ var/global/list/uneatable = list(
|
||||
for(var/obj/machinery/power/rad_collector/R in orange(15,src))
|
||||
if(istype(R,/obj/machinery/power/rad_collector))
|
||||
R.receive_pulse(energy)
|
||||
|
||||
// when we radiate rad collectors, naturally we radiate everything else, too
|
||||
if(prob(10))
|
||||
var/toxrange = 20
|
||||
var/radiation = 20
|
||||
if (src.energy>200)
|
||||
radiation = round(((src.energy-150)/50)*20,1)
|
||||
for(var/mob/living/M in view(toxrange, src.loc))
|
||||
if(istype(M,/mob/living/))
|
||||
var/damage = radiation / (get_dist(M, src) + 5)
|
||||
M.apply_effect(rand(damage), IRRADIATE)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -221,8 +221,7 @@
|
||||
/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/packageWrap))
|
||||
var/obj/item/weapon/packageWrap/C = I
|
||||
if(!istype(src.loc,/turf))
|
||||
user << "\red You need to place the item on the ground or a table before wrapping it!"
|
||||
if(anchored)
|
||||
return
|
||||
else if (C.amount > 1)
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))
|
||||
|
||||
@@ -330,6 +330,7 @@ datum
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/supplycomp"
|
||||
|
||||
/* is not a thing
|
||||
mining
|
||||
name = "Circuit Design (Outpost Status Display)"
|
||||
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
|
||||
@@ -338,6 +339,7 @@ datum
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/mining"
|
||||
*/
|
||||
|
||||
firealarm
|
||||
name = "Circuit Design (Fire Alarm)"
|
||||
@@ -533,30 +535,34 @@ datum
|
||||
req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/telecomms/receiver"
|
||||
|
||||
telecomms_bus
|
||||
name = "Circuit Design (Bus Mainframe)"
|
||||
name = "Circuit Design (Telecom Bus Mainframe)"
|
||||
desc = "Allows for the construction of Telecommunications Bus Mainframes."
|
||||
id = "s-bus"
|
||||
req_tech = list("programming" = 4, "engineering" = 4)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/telecomms/bus"
|
||||
|
||||
telecomms_processor
|
||||
name = "Circuit Design (Processor Unit)"
|
||||
name = "Circuit Design (Telecom Processor Unit)"
|
||||
desc = "Allows for the construction of Telecommunications Processor equipment."
|
||||
id = "s-processor"
|
||||
req_tech = list("programming" = 4, "engineering" = 4)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/telecomms/processor"
|
||||
|
||||
telecomms_server
|
||||
name = "Circuit Design (Subspace Receiver)"
|
||||
name = "Circuit Design (Telecom Server)"
|
||||
desc = "Allows for the construction of Telecommunications Servers."
|
||||
id = "s-server"
|
||||
req_tech = list("programming" = 4, "engineering" = 4)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/telecomms/server"
|
||||
|
||||
subspace_broadcaster
|
||||
name = "Circuit Design (Subspace Broadcaster)"
|
||||
@@ -565,6 +571,7 @@ datum
|
||||
req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 2000, "acid" = 20)
|
||||
build_path = "/obj/item/weapon/circuitboard/telecomms/broadcaster"
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 63 KiB |
+2826
-2220
File diff suppressed because it is too large
Load Diff
@@ -505,8 +505,8 @@
|
||||
"ajK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig)
|
||||
"ajL" = (/obj/structure/stool/bed,/obj/machinery/camera{c_tag = "Secure Cell 1"; dir = 4; name = "Security Camera"; network = "Security"},/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
|
||||
"ajM" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
|
||||
"ajN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
|
||||
"ajO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
|
||||
"ajN" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
|
||||
"ajO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
|
||||
"ajP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = -1},/turf/simulated/floor,/area/security/brig)
|
||||
"ajQ" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor,/area/security/brig)
|
||||
"ajR" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/floor,/area/security/brig)
|
||||
@@ -523,7 +523,7 @@
|
||||
"akc" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
|
||||
"akd" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/auxport)
|
||||
"ake" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig)
|
||||
"akf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "SC1"; name = "Secure Cell 1 Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass/glass_security{name = "Secure Holding Cell 1"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
|
||||
"akf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "SC1"; name = "Secure Cell 1 Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass/glass_security{name = "Secure Holding Cell 1"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
|
||||
"akg" = (/obj/structure/table,/obj/item/device/flash,/turf/simulated/floor,/area/security/brig)
|
||||
"akh" = (/obj/structure/table,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/security/brig)
|
||||
"aki" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
|
||||
@@ -3609,7 +3609,7 @@
|
||||
"bru" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AftH"; location = "AIW"},/obj/machinery/door/firedoor/border_only{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft)
|
||||
"brv" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=HOP"; location = "AIE"},/turf/simulated/floor,/area/hallway/primary/aft)
|
||||
"brw" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/hallway/primary/aft)
|
||||
"brx" = (/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = list("Courtroom")},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
|
||||
"brx" = (/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"},/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j1s"; sortType = list("Courtroom")},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
|
||||
"bry" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Kitchen Delivery"; req_access_txt = "28"},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/kitchen)
|
||||
"brz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen)
|
||||
"brA" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/cafeteria)
|
||||
@@ -4978,7 +4978,7 @@
|
||||
"bRL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Assembly Line Maintenance"; req_access_txt = "12;29"},/turf/simulated/floor/plating,/area/assembly/assembly_line)
|
||||
"bRM" = (/obj/structure/table,/obj/structure/disposalpipe/segment,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
"bRN" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
"bRO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
"bRO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine,/obj/item/weapon/reagent_containers/glass/beaker/tricordrazine,/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
"bRP" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_y = 5},/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
"bRQ" = (/obj/machinery/computer/rdconsole{id = 2; name = "Robotics R&D Console"; req_access = null; req_access_txt = "29"},/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
"bRR" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/assembly/assembly_line)
|
||||
|
||||
Reference in New Issue
Block a user