Fixed a few runtimes.

Changed the shotgun pump proc a bit, should work better now and not teleport old shells around.
Added a config option for the jobs to be loaded from the jobs.txt rather than use the defaults.
Loyalty implanter removed.  The Limplanter was designed to be on the prison station as it took more time and was a pain to get people up there to implant them.  No prison station, no Limplanter.
Implanter lockbox moved to the armory from the HoS' locker.
Security room's table once again shrunk so people can walk around in there.
Brig lockers are now anchored to the inside of the cells and once again have their IDs set.
Warden's locker moved to his office.
Cell controls Names/IDs/Access fixed as well as once again working with the brig lockers.
Removed a few of the blast doors from the inside of the brig.
The three secure cells have blast doors controlled from a button outside of the cell.
The play admin midis toggle should be working properly now.
Morgue trays will no longer teleport anything from anywhere.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2413 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-10-22 11:32:08 +00:00
parent 64887ce41c
commit 3c68098a08
22 changed files with 8742 additions and 8667 deletions

View File

@@ -37,6 +37,7 @@
var/guest_jobban = 1
var/usewhitelist = 0
var/kick_inactive = 0 //force disconnect for inactive players
var/load_jobs_from_txt = 0
var/server
var/banappeals
@@ -187,7 +188,7 @@
config.banappeals = value
if ("guest_jobban")
config.guest_jobban = text2num(value)
config.guest_jobban = 1
if ("usewhitelist")
config.usewhitelist = 1
@@ -214,7 +215,10 @@
diary << "Incorrect probability configuration definition: [prob_name] [prob_value]."
if ("kick_inactive")
config.kick_inactive = text2num(value)
config.kick_inactive = 1
if("load_jobs_from_txt")
load_jobs_from_txt = 1
else
diary << "Unknown setting in configuration: '[name]'"

View File

@@ -16,7 +16,6 @@ datum/mind
var/has_been_rev = 0//Tracks if this mind has been a rev or not
proc/transfer_to(mob/new_character)
if(current)
current.mind = null

View File

@@ -39,10 +39,10 @@
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security
var/sound_adminhelp = 0 //If set to 1 this will play a sound when adminhelps are received.
var/midis = 1 //Check if midis should be played for someone -- Urist
var/bubbles = 1 //Check if bubbles should be displayed for someone -- Doohl
var/be_alien = 0 //Check if that guy wants to be an alien -- Urist
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI -- TLE
var/midis = 1 //Check if midis should be played for someone
var/bubbles = 1 //Check if bubbles should be displayed for someone
var/be_alien = 0 //Check if that guy wants to be an alien
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI
var/vote = null

View File

@@ -33,6 +33,7 @@
I'll make some notes on where certain variable defines should probably go.
Changing this around would probably require a good look-over the pre-existing code.
*/
var/midis = 1 //Check if midis should be played for someone
var/alien_egg_flag = 0//Have you been infected?
var/last_special = 0
var/obj/screen/zone_sel/zone_sel = null

View File

@@ -47,6 +47,7 @@
/mob/living/simple_animal/Login()
if(src && src.client)
src.client.screen = null
..()
/mob/living/simple_animal/Life()

View File

@@ -154,7 +154,8 @@
icon = 'windoor.dmi'
icon_state = "leftsecure"
base_state = "leftsecure"
var/id = 1.0
req_access = list(access_security)
var/id = null
/obj/machinery/door/window/northleft

View File

@@ -260,3 +260,42 @@ var/global/datum/controller/occupations/job_master
spawn(1)
clname(H)
return 1
proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
if(!config.load_jobs_from_txt)
return 0
var/text = file2text(jobsfile)
if(!text)
world << "No jobs.txt found, using defaults."
return
var/list/jobEntries = dd_text2list(text, "\n")
for(var/job in jobEntries)
if(!job)
continue
job = trim(job)
if (!length(job))
continue
var/pos = findtext(job, "=")
var/name = null
var/value = null
if(pos)
name = copytext(job, 1, pos)
value = copytext(job, pos + 1)
else
continue
if(name && value)
var/datum/job/J = GetJob(name)
if(!J) continue
J.total_positions = text2num(value)
J.spawn_positions = text2num(value)
return 1

View File

@@ -1,45 +1,4 @@
/*
/proc/SetupJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
return 1
var/text = file2text(jobsfile)
if(!text)
world << "No jobs.txt found, using defaults."
return
var/list/jobEntries = dd_text2list(text, "\n")
world << "\red \b Setting up jobs..."
for(var/job in jobEntries)
if (!job)
continue
job = trim(job)
if (!length(job))
continue
var/pos = findtext(job, "=")
var/name = null
var/value = null
if (pos)
name = copytext(job, 1, pos)
value = copytext(job, pos + 1)
else
continue
if(name && value)
occupations[name] = text2num(value)
if(name && value)
jobMax[name] = text2num(value)
world << "\red \b Jobs set up!"
return
*/
//TODO: put these somewhere else
/client/proc/mimewall()

View File

@@ -14,114 +14,147 @@
req_access = list(access_brig)
anchored = 1.0 // can't pick it up
density = 0 // can walk through it.
var/id = null // id of door it controls.
var/releasetime = 0 // when world.time reaches it - release the prisoneer
var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
var/childproof = 0 // boolean, when activating the door controls, locks door for 1 minute
var/picture_state // icon_state of alert picture, if not displaying text/numbers
var/list/obj/machinery/door/window/brigdoor/targetdoors = new
var/list/obj/machinery/flasher/targetflashers = new
var
id = null // id of door it controls.
releasetime = 0 // when world.time reaches it - release the prisoneer
timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
picture_state // icon_state of alert picture, if not displaying text/numbers
list/obj/machinery/targets = list()
New()
..()
pixel_x = ((src.dir & 3)? (0) : (src.dir == 4 ? 32 : -32))
pixel_y = ((src.dir & 3)? (src.dir ==1 ? 24 : -32) : (0))
spawn(20)
for(var/obj/machinery/door/window/brigdoor/M in world)
if (M.id == src.id)
targets += M
for(var/obj/machinery/flasher/F in world)
if(F.id == src.id)
targets += F
for(var/obj/structure/secure_closet/brig/C in world)
if(C.id == src.id)
targets += C
if(targets.len==0)
stat |= BROKEN
update_icon()
return
return
/obj/machinery/door_timer/New()
..()
for(var/obj/machinery/door/window/brigdoor/M in world)
if (M.id == src.id)
targetdoors += M
break
if (targetdoors.len==0)
stat |= BROKEN
targetflashers = list()
for(var/obj/machinery/flasher/F in world)
if(F.id == src.id)
targetflashers += F
update_icon()
//Main door timer loop, if it's timing and time is >0 reduce time by 1.
// if it's less than 0, open door, reset timer
// update the door_timer window and the icon
/obj/machinery/door_timer/process()
if (stat & (NOPOWER|BROKEN))
process()
if(stat & (NOPOWER|BROKEN)) return
if(src.timing)
if(world.time > src.releasetime)
src.timer_end() // open doors, reset timer, clear status screen
src.timing = 0
src.updateUsrDialog()
src.update_icon()
else
timer_end()
return
if (src.timing)
if (world.time > src.releasetime)
src.opendoor() // open doors, reset timer, clear status screen
src.timing = 0
src.updateUsrDialog()
src.update_icon()
else
opendoor()
return
// has the door power sitatuation changed, if so update icon.
/obj/machinery/door_timer/power_change()
..()
update_icon()
power_change()
..()
update_icon()
return
// open/closedoor checks if door_timer has power, if so it checks if the
// linked door is open/closed (by density) then opens it/closes it.
/obj/machinery/door_timer/proc/opendoor()
if(stat & (NOPOWER|BROKEN))
proc/timer_start()
if(stat & (NOPOWER|BROKEN)) return 0
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(door.density) continue
spawn(0)
door.close()
for(var/obj/structure/secure_closet/brig/C in targets)
if(C.broken) continue
if(!C.close()) continue
C.locked = 1
C.icon_state = C.icon_locked
return 1
proc/timer_end()
if(stat & (NOPOWER|BROKEN)) return 0
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(!door.density) continue
spawn(0)
door.open()
for(var/obj/structure/secure_closet/brig/C in targets)
if(C.broken) continue
if(C.opened) continue
C.locked = 0
C.icon_state = C.icon_closed
return 1
proc/timeleft()
. = (releasetime-world.time)/10
if(. < 0)
. = 0
proc/timeset(var/seconds)
releasetime=world.time+seconds*10
return
for (var/obj/machinery/door/window/brigdoor/targetdoor in targetdoors)
if(targetdoor.density)
spawn( 0 )
targetdoor.open()
return
/obj/machinery/door_timer/proc/closedoor()
if(stat & (NOPOWER|BROKEN))
return
for (var/obj/machinery/door/window/brigdoor/targetdoor in targetdoors)
if(!targetdoor.density)
spawn( 0 )
targetdoor.close()
return
/obj/machinery/door_timer/proc/timeleft()
. = (releasetime-world.time)/10
if (. < 0)
. = 0
/obj/machinery/door_timer/proc/timeset(var/seconds)
releasetime=world.time+seconds*10
//Allows AIs to use door_timer, see human attack_hand function below
/obj/machinery/door_timer/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
//Allows monkeys to use door_timer, see human attack_hand function below
/obj/machinery/door_timer/attack_paw(var/mob/user as mob)
return src.attack_hand(user)
//Allows humans to use door_timer
//Opens dialog window when someone clicks on door timer
// Allows altering timer and the timing boolean.
// Flasher activation limited to 150 seconds
/obj/machinery/door_timer/attack_hand(var/mob/user as mob)
if(..())
return
var/dat = "<HTML><BODY><TT><B>Door [src.id] controls</B>"
user.machine = src
var/d2
if (src.timing)
d2 = text("<A href='?src=\ref[];timing=0'>Stop Timer and open doors</A><br>", src)
else
d2 = text("<A href='?src=\ref[];timing=1'>Activate Timer and close doors</A><br>", src)
var/timeleft = timeleft()
var/second = round(timeleft % 60)
var/minute = round((timeleft - second) / 60)
dat += text("<br><HR>\nTimer System: [d2]\nTime Left: [(minute ? text("[minute]:") : null)][second] <A href='?src=\ref[src];tp=-60'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=60'>+</A>")
if (targetflashers.len)
dat += "<BR>"
for(var/obj/machinery/flasher/F in targetflashers)
if(F.last_flash && (F.last_flash + 150) > world.time)
dat += text("<BR><A href='?src=\ref[];fc=1'>Flash Cell (Charging)</A>", src)
attack_hand(var/mob/user as mob)
if(..())
return
var/second = round(timeleft() % 60)
var/minute = round((timeleft() - second) / 60)
user.machine = src
var/dat = "<HTML><BODY><TT>"
dat += "<HR>Timer System:</hr>"
dat += "<b>Door [src.id] controls</b><br/>"
if (src.timing)
dat += "<a href='?src=\ref[src];timing=0'>Stop Timer and open door</a><br/>"
else
dat += text("<BR><A href='?src=\ref[];fc=1'>Flash Cell</A>", src)
dat += text("<BR><BR><A href='?src=\ref[];mach_close=computer'>Close</A></TT></BODY></HTML>", user)
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
dat += "Time Left: [(minute ? text("[minute]:") : null)][second] <br/>"
dat += "<a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/>"
for(var/obj/machinery/flasher/F in targets)
if(F.last_flash && (F.last_flash + 150) > world.time)
dat += "<br/><A href='?src=\ref[src];fc=1'>Flash Charging</A>"
else
dat += "<br/><A href='?src=\ref[src];fc=1'>Activate Flash</A>"
dat += "<br/><br/><a href='?src=\ref[user];mach_close=computer'>Close</a>"
dat += "</TT></BODY></HTML>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
//Function for using door_timer dialog input, checks if user has permission
// href_list to
@@ -129,92 +162,135 @@
// "tp" value to modify timer
// "fc" activates flasher
// Also updates dialog window and timer icon
/obj/machinery/door_timer/Topic(href, href_list)
if(..())
return
if(!src.allowed(usr))
Topic(href, href_list)
if(..())
return
if(!src.allowed(usr))
return
usr.machine = src
if(href_list["timing"])
src.timing = text2num(href_list["timing"])
else
if(href_list["tp"]) //adjust timer, close door if not already closed
var/tp = text2num(href_list["tp"])
var/timeleft = timeleft()
timeleft += tp
timeleft = min(max(round(timeleft), 0), 600)
timeset(timeleft)
//src.timing = 1
//src.closedoor()
if(href_list["fc"])
for(var/obj/machinery/flasher/F in targets)
F.flash()
src.add_fingerprint(usr)
src.updateUsrDialog()
src.update_icon()
if(src.timing)
src.timer_start()
else
src.timer_end()
return
usr.machine = src
if (href_list["timing"])
src.timing = text2num(href_list["timing"])
else
if (href_list["tp"]) //adjust timer, close door if not already closed
var/tp = text2num(href_list["tp"])
var/timeleft = timeleft()
timeleft += tp
timeleft = min(max(round(timeleft), 0), 600)
timeset(timeleft)
//src.timing = 1
//src.closedoor()
if (href_list["fc"])
for (var/obj/machinery/flasher/F in targetflashers)
F.flash()
src.add_fingerprint(usr)
src.updateUsrDialog()
src.update_icon()
if (src.timing)
src.closedoor()
else
src.opendoor()
return
//icon update function
// if NOPOWER, display blank
// if BROKEN, display blue screen of death icon AI uses
// if timing=true, run update display function
/obj/machinery/door_timer/update_icon()
if(stat & (NOPOWER))
icon_state = "frame"
update_icon()
if(stat & (NOPOWER))
icon_state = "frame"
return
if(stat & (BROKEN))
set_picture("ai_bsod")
return
if(src.timing)
var/disp1 = uppertext(id)
var/timeleft = timeleft()
var/disp2 = "[add_zero(num2text((timeleft / 60) % 60),2)]~[add_zero(num2text(timeleft % 60), 2)]"
spawn( 5 )
update_display(disp1, disp2)
else
update_display("SET","TIME")
return
if(stat & (BROKEN))
set_picture("ai_bsod")
return
if(src.timing)
var/disp1 = uppertext(id)
var/timeleft = timeleft()
var/disp2 = "[add_zero(num2text((timeleft / 60) % 60),2)]~[add_zero(num2text(timeleft % 60), 2)]"
spawn( 5 )
update_display(disp1, disp2)
else
update_display("SET","TIME")
// Adds an icon in case the screen is broken/off, stolen from status_display.dm
/obj/machinery/door_timer/proc/set_picture(var/state)
picture_state = state
overlays = null
overlays += image('status_display.dmi', icon_state=picture_state)
proc/set_picture(var/state)
picture_state = state
overlays = null
overlays += image('status_display.dmi', icon_state=picture_state)
//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display
// Stolen from status_display
/obj/machinery/door_timer/proc/update_display(var/line1, var/line2)
if(line2 == null) // single line display
overlays = null
overlays += texticon(line1, 23, -13)
else // dual line display
overlays = null
overlays += texticon(line1, 23, -9)
overlays += texticon(line2, 23, -17)
// return an icon of a time text string (tn)
// valid characters are 0-9 and :
// px, py are pixel offsets
proc/update_display(var/line1, var/line2)
if(line2 == null) // single line display
overlays = null
overlays += texticon(line1, 23, -13)
else // dual line display
overlays = null
overlays += texticon(line1, 23, -9)
overlays += texticon(line2, 23, -17)
// return an icon of a time text string (tn)
// valid characters are 0-9 and :
// px, py are pixel offsets
//Actual string input to icon display for loop, with 5 pixel x offsets for each letter.
//Stolen from status_display
/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0)
var/image/I = image('status_display.dmi', "blank")
var/len = lentext(tn)
proc/texticon(var/tn, var/px = 0, var/py = 0)
var/image/I = image('status_display.dmi', "blank")
var/len = lentext(tn)
for(var/d = 1 to len)
var/char = copytext(tn, len-d+1, len-d+2)
if(char == " ")
continue
var/image/ID = image('status_display.dmi', icon_state=char)
ID.pixel_x = -(d-1)*5 + px
ID.pixel_y = py
I.overlays += ID
return I
for(var/d = 1 to len)
var/char = copytext(tn, len-d+1, len-d+2)
if(char == " ")
continue
var/image/ID = image('status_display.dmi', icon_state=char)
ID.pixel_x = -(d-1)*5 + px
ID.pixel_y = py
I.overlays += ID
return I
/obj/machinery/door_timer/cell_1
name = "Cell 1"
id = "Cell 1"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_2
name = "Cell 2"
id = "Cell 2"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_3
name = "Cell 3"
id = "Cell 3"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_4
name = "Cell 4"
id = "Cell 4"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_5
name = "Cell 5"
id = "Cell 5"
dir = 2
pixel_y = -32
/obj/machinery/door_timer/cell_6
name = "Cell 6"
id = "Cell 6"
dir = 4
pixel_x = 32

View File

@@ -123,22 +123,15 @@
return
/obj/structure/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if (istype(O, /obj/structure/closet/body_bag) || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src))
O.loc = src.loc
for(var/mob/B in viewers(user, 3))
if ((B.client && !( B.blinded )))
B << text("\red [] stuffs the bodybag into []!", user, src)
return
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return
if (!ismob(O))
if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag))
return
O.loc = src.loc
if (user != O)
for(var/mob/B in viewers(user, 3))
if ((B.client && !( B.blinded )))
B << text("\red [] stuffs [] into []!", user, O, src)
//Foreach goto(99)
return
/obj/structure/crematorium/proc/update()

View File

@@ -23,6 +23,7 @@ datum/controller/game_controller
job_master = new /datum/controller/occupations()
if(job_master.SetupOccupations())
world << "\red \b Job setup complete"
job_master.LoadJobs("config/jobs.txt")
if(!tension_master)
tension_master = new /datum/tension()
@@ -33,8 +34,6 @@ datum/controller/game_controller
setupgenetics()
// SetupJobs("config/jobs.txt")
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
syndicate_code_response = generate_code_phrase()

View File

@@ -55,7 +55,6 @@
new /obj/item/clothing/head/helmet(src)
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/melee/baton(src)
@@ -154,6 +153,7 @@
/obj/structure/secure_closet/brig
name = "Brig Locker"
req_access = list(access_brig)
anchored = 1
var/id = null
New()

View File

@@ -2,10 +2,11 @@
set category = "Special Verbs"
set name = "Toggle Midis"
if(usr.client.midis)
usr.client.midis=0
usr << "You will now stop receiving any sounds uploaded by admins."
else
usr.client.midis=1
usr << "You will now start receiving any sounds uploaded by admins."
return
if(istype(usr,/mob))
var/mob/M = usr
M.midis = !M.midis
if(M.client)
M.client.midis = !M.client.midis
M << "You will now [M.client.midis? "start":"stop"] receiving any sounds uploaded by admins."
return

View File

@@ -11,11 +11,13 @@
loc = location
else//Safety, in case a turf cannot be found.
loc = pick(latejoin)
if(!istype(body,/mob)) return//This needs to be recoded sometime so it has loc as its first arg
real_name = body.real_name
name = body.real_name
if(!safety)
corpse = body
verbs += /mob/dead/observer/proc/reenter_corpse
return
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 1

View File

@@ -743,10 +743,11 @@
handle_regular_hud_updates()
if(client)
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
del(hud)
if(!client) return 0
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
del(hud)
if (stat == 2 || mutations & XRAY)
sight |= SEE_TURFS

View File

@@ -25,7 +25,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
var/obj/item/device/paicard/card = locate(href_list["device"])
if(card.pai)
return
if(card && candidate)
if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate))
var/mob/living/silicon/pai/pai = new(card)
pai.name = candidate.name
pai.real_name = pai.name

View File

@@ -2,6 +2,9 @@
log_access("Login: [key_name(src)] from [src.client.address ? src.client.address : "localhost"]")
src.lastKnownIP = src.client.address
src.computer_id = src.client.computer_id
if(!src.client.midis || !src.midis)
src.client.midis = 0
src.midis = 0
if (config.log_access)
for (var/mob/M in world)
if(M == src)

View File

@@ -34,13 +34,15 @@
pumped = 0
if(current_shell)//We have a shell in the chamber
current_shell.loc = get_turf(src)//Eject casing
current_shell = null
if(in_chamber)
in_chamber = null
if(!loaded.len) return 0
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
loaded -= AC //Remove casing from loaded list.
current_shell = AC
if(AC.BB)
in_chamber = AC.BB //Load projectile into chamber.
AC.BB.loc = src //Set projectile loc to gun.
return 1

View File

@@ -82,7 +82,7 @@ HOSTEDBY Yournamehere
## Set to jobban "Guest-" accounts from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
## Set to 1 to jobban them from those positions, set to 0 to allow them.
GUEST_JOBBAN 1
# GUEST_JOBBAN
## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions.
## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans)
@@ -97,3 +97,6 @@ GUEST_JOBBAN 1
## In-game features
## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
# FEATURE_OBJECT_SPELL_SYSTEM
##Toggle for having jobs load up from the .txt
# LOAD_JOBS_FROM_TXT

File diff suppressed because it is too large Load Diff

View File

@@ -541,7 +541,6 @@
#include "code\game\objects\noticeboard.dm"
#include "code\game\objects\object_procs.dm"
#include "code\game\objects\portals.dm"
#include "code\game\objects\secure_closets.dm"
#include "code\game\objects\sign_decals.dm"
#include "code\game\objects\stool.dm"
#include "code\game\objects\structures.dm"
@@ -576,6 +575,7 @@
#include "code\game\objects\closets\secure\medical.dm"
#include "code\game\objects\closets\secure\personal.dm"
#include "code\game\objects\closets\secure\scientist.dm"
#include "code\game\objects\closets\secure\secure_closets.dm"
#include "code\game\objects\closets\secure\security.dm"
#include "code\game\objects\devices\aicard.dm"
#include "code\game\objects\devices\chameleonproj.dm"