Changes to the file structure!

There are many files, folders and chunks of code in areas that make absolutely no sense and thanks to the defines being located mostly in a completely separate file, it can be damn-near impossible to find something. Before moving defines to where the rest of their code is located; I'm going to move some code around into places that actually make sense to begin with. I'll mainly be focusing on the code/game/objects folder.

This commit mainly lays the groundwork for the work I'll be doing by adding in the effects, structures, decals and turfs folders. I'll slowly be moving appropriate files and code into these folders. I may end up moving machinery into 'objects' and mech stuff into its own module folder but I'll ask for some opinions on coderbus before doing that.

I've also gotten rid of the /magic/ folder. I've moved the library stuff into its own folder in modules/library, the cult stuff is now in gamemode/cult with the rest of it and musician.dm is now in objects/structures since the piano is a structure apparently.


I think I've got the hang of how DM and SVN handles folders and files but it's quite possible that something will break simply by svn committing it oddly. Please let me know if that's the case!

Remember to clean compile.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4513 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
johnsonmt88@gmail.com
2012-08-22 15:50:09 +00:00
parent 0338759071
commit 19135de9eb
11 changed files with 1382 additions and 1379 deletions

View File

@@ -1,12 +1,24 @@
/* /*
* Holds procs designed to help with filtering text * Holds procs designed to help with filtering text
* Contains groups: * Contains groups:
* SQL sanitization
* Text sanitization * Text sanitization
* Text searches * Text searches
* Text modification * Text modification
* Misc * Misc
*/ */
/*
* SQL sanitization
*/
// Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts.
/proc/sanitizeSQL(var/t as text)
var/sanitized_text = dd_replacetext(t, "'", "\\'")
sanitized_text = dd_replacetext(sanitized_text, "\"", "\\\"")
return sanitized_text
/* /*
* Text sanitization * Text sanitization
*/ */

View File

@@ -23,7 +23,6 @@
icon_state = "motion0" icon_state = "motion0"
stat |= NOPOWER stat |= NOPOWER
/obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses) /obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses)
src.disabled = disabled src.disabled = disabled
src.uses = uses src.uses = uses

View File

@@ -0,0 +1,236 @@
/* Library Items
*
* Contains:
* Bookcase
* Book
* Barcode Scanner
*/
/*
* Bookcase
*/
/obj/structure/bookcase
name = "bookcase"
icon = 'icons/obj/library.dmi'
icon_state = "book-0"
anchored = 1
density = 1
opacity = 1
/obj/structure/bookcase/attackby(obj/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/book))
user.drop_item()
O.loc = src
update_icon()
else if(istype(O, /obj/item/weapon/pen))
var/newname = copytext(sanitize(input("What would you like to title this bookshelf?") as text|null),1,MAX_MESSAGE_LEN)
if(!newname)
return
else
name = ("bookcase ([sanitize(newname)])")
else
..()
/obj/structure/bookcase/attack_hand(var/mob/user as mob)
if(contents.len)
var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") in contents as obj|null
if(choice)
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
return
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(choice)
else
choice.loc = get_turf(src)
update_icon()
/obj/structure/bookcase/ex_act(severity)
switch(severity)
if(1.0)
for(var/obj/item/weapon/book/b in contents)
del(b)
del(src)
return
if(2.0)
for(var/obj/item/weapon/book/b in contents)
if (prob(50)) b.loc = (get_turf(src))
else del(b)
del(src)
return
if(3.0)
if (prob(50))
for(var/obj/item/weapon/book/b in contents)
b.loc = (get_turf(src))
del(src)
return
else
return
/obj/structure/bookcase/update_icon()
if(contents.len < 5)
icon_state = "book-[contents.len]"
else
icon_state = "book-5"
/obj/structure/bookcase/manuals/medical
name = "Medical Manuals bookcase"
New()
..()
new /obj/item/weapon/book/manual/medical_cloning(src)
update_icon()
/obj/structure/bookcase/manuals/engineering
name = "Engineering Manuals bookcase"
New()
..()
new /obj/item/weapon/book/manual/engineering_construction(src)
new /obj/item/weapon/book/manual/engineering_particle_accelerator(src)
new /obj/item/weapon/book/manual/engineering_hacking(src)
new /obj/item/weapon/book/manual/engineering_guide(src)
new /obj/item/weapon/book/manual/engineering_singularity_safety(src)
new /obj/item/weapon/book/manual/robotics_cyborgs(src)
update_icon()
/obj/structure/bookcase/manuals/research_and_development
name = "R&D Manuals bookcase"
New()
..()
new /obj/item/weapon/book/manual/research_and_development(src)
update_icon()
/*
* Book
*/
/obj/item/weapon/book
name = "book"
icon = 'icons/obj/library.dmi'
icon_state ="book"
throw_speed = 1
throw_range = 5
w_class = 1.0
flags = FPRINT | TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
var/dat // Actual page content
var/due_date = 0 // Game time in 1/10th seconds
var/author // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
var/unique = 0 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
var/title // The real name of the book.
/obj/item/weapon/book/attack_self(var/mob/user as mob)
if(src.dat)
user << browse("<TT><I>Penned by [author].</I></TT> <BR>" + "[dat]", "window=book")
user.visible_message("[user] opens a book titled \"[src.title]\" and begins reading intently.")
onclose(user, "book")
else
user << "This book is completely blank!"
/obj/item/weapon/book/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
if(unique)
user << "These pages don't seem to take the ink well. Looks like you can't modify it."
return
var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
switch(choice)
if("Title")
var/newtitle = copytext(reject_bad_text(input("Write a new title:") as text|null),1,MAX_MESSAGE_LEN)
if(!newtitle)
usr << "The title is invalid."
return
else
src.name = newtitle
src.title = newtitle
if("Contents")
var/content = strip_html(input("Write your book's contents (HTML NOT allowed):"),8192) as message|null
if(!content)
usr << "The content is invalid."
return
else
src.dat += content
if("Author")
var/newauthor = copytext(sanitize(input("Write the author's name:") as text|null),1,MAX_NAME_LEN)
if(!newauthor)
usr << "The name is invalid."
return
else
src.author = newauthor
else
return
else if(istype(W, /obj/item/weapon/barcodescanner))
var/obj/item/weapon/barcodescanner/scanner = W
if(!scanner.computer)
user << "[W]'s screen flashes: 'No associated computer found!'"
else
switch(scanner.mode)
if(0)
scanner.book = src
user << "[W]'s screen flashes: 'Book stored in buffer.'"
if(1)
scanner.book = src
scanner.computer.buffer_book = src.name
user << "[W]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'"
if(2)
scanner.book = src
for(var/datum/borrowbook/b in scanner.computer.checkouts)
if(b.bookname == src.name)
scanner.computer.checkouts.Remove(b)
user << "[W]'s screen flashes: 'Book stored in buffer. Book has been checked in.'"
return
user << "[W]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'"
if(3)
scanner.book = src
for(var/obj/item/weapon/book in scanner.computer.inventory)
if(book == src)
user << "[W]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'"
return
scanner.computer.inventory.Add(src)
user << "[W]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
else
..()
/*
* Barcode Scanner
*/
/obj/item/weapon/barcodescanner
name = "barcode scanner"
icon = 'icons/obj/library.dmi'
icon_state ="scanner"
throw_speed = 1
throw_range = 5
w_class = 1.0
flags = FPRINT | TABLEPASS
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
attack_self(mob/user as mob)
mode += 1
if(mode > 3)
mode = 0
user << "[src] Status Display:"
var/modedesc
switch(mode)
if(0)
modedesc = "Scan book to local buffer."
if(1)
modedesc = "Scan book to local buffer and set associated computer buffer to match."
if(2)
modedesc = "Scan book to local buffer, attempt to check in scanned book."
if(3)
modedesc = "Scan book to local buffer, attempt to add book to general inventory."
else
modedesc = "ERROR"
user << " - Mode [mode] : [modedesc]"
if(src.computer)
user << "<font color=green>Computer has been associated with this unit.</font>"
else
user << "<font color=red>No associated computer found. Only local scans will function properly.</font>"
user << "\n"

View File

@@ -1,330 +1,25 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 /* Library Machines
*
//******************************* * Contains:
// * Borrowbook datum
// Library SQL Configuration * Library Public Computer
// * Library Computer
//******************************* * Library Scanner
* Book Binder
// Deprecated! See global.dm for new SQL config vars -- TLE */
/*
#define SQL_ADDRESS ""
#define SQL_DB ""
#define SQL_PORT "3306"
#define SQL_LOGIN ""
#define SQL_PASS ""
*/
//*******************************
// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB )
/* /*
The Library * Borrowbook datum
------------ */
A place for the crew to go, relax, and enjoy a good book.
Aspiring authors can even self publish and, if they're lucky
convince the on-staff Librarian to submit it to the Archives
to be chronicled in history forever - some say even persisting
through alternate dimensions.
Written by TLE for /tg/station 13
Feel free to use this as you like. Some credit would be cool.
Check us out at http://nanotrasen.com/ if you're so inclined.
*/
// CONTAINS:
// Objects:
// - bookcase
// - book
// - barcode scanner
// Machinery:
// - library computer
// - visitor's computer
// - book binder
// - book scanner
// Datum:
// - borrowbook
// Ideas for the future
// ---------------------
// - Visitor's computer should be able to search the current in-round library inventory (that the Librarian has stocked and checked in)
// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents.
// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game.
// -- If this gets implemented, allow Librarians to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?).
// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table.
// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Librarian is a useless fuck there are at least a few books around.
// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside.
// - Make books/book cases burn when exposed to flame.
// - Make book binder hackable.
// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource.
// Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts.
/proc/sanitizeSQL(var/t as text)
var/sanitized_text = dd_replacetext(t, "'", "\\'")
sanitized_text = dd_replacetext(sanitized_text, "\"", "\\\"")
return sanitized_text
/obj/structure/bookcase
name = "bookcase"
icon = 'icons/obj/library.dmi'
icon_state = "book-0"
anchored = 1
density = 1
opacity = 1
/obj/structure/bookcase/attackby(obj/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/book))
user.drop_item()
O.loc = src
update_icon()
else if(istype(O, /obj/item/weapon/pen))
var/newname = copytext(sanitize(input("What would you like to title this bookshelf?") as text|null),1,MAX_MESSAGE_LEN)
if(!newname)
return
else
name = ("bookcase ([sanitize(newname)])")
else
..()
/obj/structure/bookcase/attack_hand(var/mob/user as mob)
if(contents.len)
var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") in contents as obj|null
if(choice)
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
return
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(choice)
else
choice.loc = get_turf(src)
update_icon()
/obj/structure/bookcase/ex_act(severity)
switch(severity)
if(1.0)
for(var/obj/item/weapon/book/b in contents)
del(b)
del(src)
return
if(2.0)
for(var/obj/item/weapon/book/b in contents)
if (prob(50)) b.loc = (get_turf(src))
else del(b)
del(src)
return
if(3.0)
if (prob(50))
for(var/obj/item/weapon/book/b in contents)
b.loc = (get_turf(src))
del(src)
return
else
return
/obj/structure/bookcase/update_icon()
if(contents.len < 5)
icon_state = "book-[contents.len]"
else
icon_state = "book-5"
/obj/structure/bookcase/manuals/medical
name = "Medical Manuals bookcase"
New()
..()
new /obj/item/weapon/book/manual/medical_cloning(src)
update_icon()
/obj/structure/bookcase/manuals/engineering
name = "Engineering Manuals bookcase"
New()
..()
new /obj/item/weapon/book/manual/engineering_construction(src)
new /obj/item/weapon/book/manual/engineering_particle_accelerator(src)
new /obj/item/weapon/book/manual/engineering_hacking(src)
new /obj/item/weapon/book/manual/engineering_guide(src)
new /obj/item/weapon/book/manual/engineering_singularity_safety(src)
new /obj/item/weapon/book/manual/robotics_cyborgs(src)
update_icon()
/obj/structure/bookcase/manuals/research_and_development
name = "R&D Manuals bookcase"
New()
..()
new /obj/item/weapon/book/manual/research_and_development(src)
update_icon()
/obj/item/weapon/book
name = "book"
icon = 'icons/obj/library.dmi'
icon_state ="book"
throw_speed = 1
throw_range = 5
w_class = 1.0
flags = FPRINT | TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
var/dat // Actual page content
var/due_date = 0 // Game time in 1/10th seconds
var/author // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
var/unique = 0 // 0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
var/title // The real name of the book.
/obj/item/weapon/book/attack_self(var/mob/user as mob)
if(src.dat)
user << browse("<TT><I>Penned by [author].</I></TT> <BR>" + "[dat]", "window=book")
user.visible_message("[user] opens a book titled \"[src.title]\" and begins reading intently.")
onclose(user, "book")
else
user << "This book is completely blank!"
/obj/item/weapon/book/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen))
if(unique)
user << "These pages don't seem to take the ink well. Looks like you can't modify it."
return
var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
switch(choice)
if("Title")
var/newtitle = copytext(reject_bad_text(input("Write a new title:") as text|null),1,MAX_MESSAGE_LEN)
if(!newtitle)
usr << "The title is invalid."
return
else
src.name = newtitle
src.title = newtitle
if("Contents")
var/content = strip_html(input("Write your book's contents (HTML NOT allowed):"),8192) as message|null
if(!content)
usr << "The content is invalid."
return
else
src.dat += content
if("Author")
var/newauthor = copytext(sanitize(input("Write the author's name:") as text|null),1,MAX_NAME_LEN)
if(!newauthor)
usr << "The name is invalid."
return
else
src.author = newauthor
else
return
else if(istype(W, /obj/item/weapon/barcodescanner))
var/obj/item/weapon/barcodescanner/scanner = W
if(!scanner.computer)
user << "[W]'s screen flashes: 'No associated computer found!'"
else
switch(scanner.mode)
if(0)
scanner.book = src
user << "[W]'s screen flashes: 'Book stored in buffer.'"
if(1)
scanner.book = src
scanner.computer.buffer_book = src.name
user << "[W]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'"
if(2)
scanner.book = src
for(var/datum/borrowbook/b in scanner.computer.checkouts)
if(b.bookname == src.name)
scanner.computer.checkouts.Remove(b)
user << "[W]'s screen flashes: 'Book stored in buffer. Book has been checked in.'"
return
user << "[W]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'"
if(3)
scanner.book = src
for(var/obj/item/weapon/book in scanner.computer.inventory)
if(book == src)
user << "[W]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'"
return
scanner.computer.inventory.Add(src)
user << "[W]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'"
else
..()
/obj/item/weapon/barcodescanner
name = "barcode scanner"
icon = 'icons/obj/library.dmi'
icon_state ="scanner"
throw_speed = 1
throw_range = 5
w_class = 1.0
flags = FPRINT | TABLEPASS
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
attack_self(mob/user as mob)
mode += 1
if(mode > 3)
mode = 0
user << "[src] Status Display:"
var/modedesc
switch(mode)
if(0)
modedesc = "Scan book to local buffer."
if(1)
modedesc = "Scan book to local buffer and set associated computer buffer to match."
if(2)
modedesc = "Scan book to local buffer, attempt to check in scanned book."
if(3)
modedesc = "Scan book to local buffer, attempt to add book to general inventory."
else
modedesc = "ERROR"
user << " - Mode [mode] : [modedesc]"
if(src.computer)
user << "<font color=green>Computer has been associated with this unit.</font>"
else
user << "<font color=red>No associated computer found. Only local scans will function properly.</font>"
user << "\n"
datum/borrowbook // Datum used to keep track of who has borrowed what when and for how long. datum/borrowbook // Datum used to keep track of who has borrowed what when and for how long.
var/bookname var/bookname
var/mobname var/mobname
var/getdate var/getdate
var/duedate var/duedate
/*
* Library Public Computer
*/
/obj/machinery/librarypubliccomp /obj/machinery/librarypubliccomp
name = "visitor computer" name = "visitor computer"
icon = 'icons/obj/library.dmi' icon = 'icons/obj/library.dmi'
@@ -337,7 +32,6 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
var/author var/author
var/SQLquery var/SQLquery
/obj/machinery/librarypubliccomp/attack_hand(var/mob/user as mob) /obj/machinery/librarypubliccomp/attack_hand(var/mob/user as mob)
usr.machine = src usr.machine = src
var/dat = "<HEAD><TITLE>Library Visitor</TITLE></HEAD><BODY>\n" // <META HTTP-EQUIV='Refresh' CONTENT='10'> var/dat = "<HEAD><TITLE>Library Visitor</TITLE></HEAD><BODY>\n" // <META HTTP-EQUIV='Refresh' CONTENT='10'>
@@ -374,7 +68,6 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
user << browse(dat, "window=publiclibrary") user << browse(dat, "window=publiclibrary")
onclose(user, "publiclibrary") onclose(user, "publiclibrary")
/obj/machinery/librarypubliccomp/Topic(href, href_list) /obj/machinery/librarypubliccomp/Topic(href, href_list)
if(..()) if(..())
usr << browse(null, "window=publiclibrary") usr << browse(null, "window=publiclibrary")
@@ -418,9 +111,11 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
return return
/*
* Library Computer
*/
// TODO: Make this an actual /obj/machinery/computer that can be crafted from circuit boards and such // TODO: Make this an actual /obj/machinery/computer that can be crafted from circuit boards and such
// It is August 22nd, 2012... This TODO has already been here for months.. I wonder how long it'll last before someone does something about it.
/obj/machinery/librarycomp /obj/machinery/librarycomp
name = "Check-In/Out Computer" name = "Check-In/Out Computer"
icon = 'icons/obj/library.dmi' icon = 'icons/obj/library.dmi'
@@ -699,6 +394,9 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
src.updateUsrDialog() src.updateUsrDialog()
return return
/*
* Library Scanner
*/
/obj/machinery/libraryscanner /obj/machinery/libraryscanner
name = "scanner" name = "scanner"
icon = 'icons/obj/library.dmi' icon = 'icons/obj/library.dmi'
@@ -707,14 +405,11 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
density = 1 density = 1
var/obj/item/weapon/book/cache // Last scanned book var/obj/item/weapon/book/cache // Last scanned book
/obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob) /obj/machinery/libraryscanner/attackby(var/obj/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/book)) if(istype(O, /obj/item/weapon/book))
user.drop_item() user.drop_item()
O.loc = src O.loc = src
/obj/machinery/libraryscanner/attack_hand(var/mob/user as mob) /obj/machinery/libraryscanner/attack_hand(var/mob/user as mob)
usr.machine = src usr.machine = src
var/dat = "<HEAD><TITLE>Scanner Control Interface</TITLE></HEAD><BODY>\n" // <META HTTP-EQUIV='Refresh' CONTENT='10'> var/dat = "<HEAD><TITLE>Scanner Control Interface</TITLE></HEAD><BODY>\n" // <META HTTP-EQUIV='Refresh' CONTENT='10'>
@@ -750,12 +445,9 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
return return
/*
* Book binder
*/
/obj/machinery/bookbinder /obj/machinery/bookbinder
name = "Book Binder" name = "Book Binder"
icon = 'icons/obj/library.dmi' icon = 'icons/obj/library.dmi'

View File

@@ -0,0 +1,61 @@
//*******************************
//
// Library SQL Configuration
//
//*******************************
// Deprecated! See global.dm for new SQL config vars -- TLE
/*
#define SQL_ADDRESS ""
#define SQL_DB ""
#define SQL_PORT "3306"
#define SQL_LOGIN ""
#define SQL_PASS ""
*/
//*******************************
// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB )
/*
The Library
------------
A place for the crew to go, relax, and enjoy a good book.
Aspiring authors can even self publish and, if they're lucky
convince the on-staff Librarian to submit it to the Archives
to be chronicled in history forever - some say even persisting
through alternate dimensions.
Written by TLE for /tg/station 13
Feel free to use this as you like. Some credit would be cool.
Check us out at http://nanotrasen.com/ if you're so inclined.
*/
// CONTAINS:
// Objects:
// - bookcase
// - book
// - barcode scanner
// Machinery:
// - library computer
// - visitor's computer
// - book binder
// - book scanner
// Datum:
// - borrowbook
// Ideas for the future
// ---------------------
// - Visitor's computer should be able to search the current in-round library inventory (that the Librarian has stocked and checked in)
// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents.
// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game.
// -- If this gets implemented, allow Librarians to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?).
// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table.
// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Librarian is a useless fuck there are at least a few books around.
// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside.
// - Make books/book cases burn when exposed to flame.
// - Make book binder hackable.
// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource.

View File

@@ -50,8 +50,6 @@
#define FILE_DIR "code/game/machinery/kitchen" #define FILE_DIR "code/game/machinery/kitchen"
#define FILE_DIR "code/game/machinery/pipe" #define FILE_DIR "code/game/machinery/pipe"
#define FILE_DIR "code/game/machinery/telecomms" #define FILE_DIR "code/game/machinery/telecomms"
#define FILE_DIR "code/game/magic"
#define FILE_DIR "code/game/magic/cultist"
#define FILE_DIR "code/game/mecha" #define FILE_DIR "code/game/mecha"
#define FILE_DIR "code/game/mecha/combat" #define FILE_DIR "code/game/mecha/combat"
#define FILE_DIR "code/game/mecha/equipment" #define FILE_DIR "code/game/mecha/equipment"
@@ -73,7 +71,9 @@
#define FILE_DIR "code/game/objects/secstorage" #define FILE_DIR "code/game/objects/secstorage"
#define FILE_DIR "code/game/objects/stacks" #define FILE_DIR "code/game/objects/stacks"
#define FILE_DIR "code/game/objects/storage" #define FILE_DIR "code/game/objects/storage"
#define FILE_DIR "code/game/objects/structures"
#define FILE_DIR "code/game/objects/tanks" #define FILE_DIR "code/game/objects/tanks"
#define FILE_DIR "code/game/turfs"
#define FILE_DIR "code/game/vehicles" #define FILE_DIR "code/game/vehicles"
#define FILE_DIR "code/game/vehicles/airtight" #define FILE_DIR "code/game/vehicles/airtight"
#define FILE_DIR "code/game/verbs" #define FILE_DIR "code/game/verbs"
@@ -99,6 +99,7 @@
#define FILE_DIR "code/modules/detectivework" #define FILE_DIR "code/modules/detectivework"
#define FILE_DIR "code/modules/flufftext" #define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food" #define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/library"
#define FILE_DIR "code/modules/maps" #define FILE_DIR "code/modules/maps"
#define FILE_DIR "code/modules/mining" #define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob" #define FILE_DIR "code/modules/mob"
@@ -361,7 +362,6 @@
#include "code\game\syndicate_specops_shuttle.dm" #include "code\game\syndicate_specops_shuttle.dm"
#include "code\game\throwing.dm" #include "code\game\throwing.dm"
#include "code\game\topic.dm" #include "code\game\topic.dm"
#include "code\game\turf.dm"
#include "code\game\vote.dm" #include "code\game\vote.dm"
#include "code\game\area\ai_monitored.dm" #include "code\game\area\ai_monitored.dm"
#include "code\game\area\areas.dm" #include "code\game\area\areas.dm"
@@ -390,6 +390,9 @@
#include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\cult\cult.dm"
#include "code\game\gamemodes\cult\cult_items.dm" #include "code\game\gamemodes\cult\cult_items.dm"
#include "code\game\gamemodes\cult\cult_structures.dm" #include "code\game\gamemodes\cult\cult_structures.dm"
#include "code\game\gamemodes\cult\ritual.dm"
#include "code\game\gamemodes\cult\runes.dm"
#include "code\game\gamemodes\cult\talisman.dm"
#include "code\game\gamemodes\events\black_hole.dm" #include "code\game\gamemodes\events\black_hole.dm"
#include "code\game\gamemodes\events\clang.dm" #include "code\game\gamemodes\events\clang.dm"
#include "code\game\gamemodes\events\dust.dm" #include "code\game\gamemodes\events\dust.dm"
@@ -542,11 +545,6 @@
#include "code\game\machinery\telecomms\telecomunications.dm" #include "code\game\machinery\telecomms\telecomunications.dm"
#include "code\game\machinery\telecomms\telemonitor.dm" #include "code\game\machinery\telecomms\telemonitor.dm"
#include "code\game\machinery\telecomms\traffic_control.dm" #include "code\game\machinery\telecomms\traffic_control.dm"
#include "code\game\magic\library.dm"
#include "code\game\magic\musician.dm"
#include "code\game\magic\cultist\ritual.dm"
#include "code\game\magic\cultist\runes.dm"
#include "code\game\magic\cultist\talisman.dm"
#include "code\game\mecha\mech_bay.dm" #include "code\game\mecha\mech_bay.dm"
#include "code\game\mecha\mech_fabricator.dm" #include "code\game\mecha\mech_fabricator.dm"
#include "code\game\mecha\mecha.dm" #include "code\game\mecha\mecha.dm"
@@ -739,9 +737,11 @@
#include "code\game\objects\storage\storage.dm" #include "code\game\objects\storage\storage.dm"
#include "code\game\objects\storage\toolbox.dm" #include "code\game\objects\storage\toolbox.dm"
#include "code\game\objects\storage\uplink_kits.dm" #include "code\game\objects\storage\uplink_kits.dm"
#include "code\game\objects\structures\musician.dm"
#include "code\game\objects\tanks\emergency.dm" #include "code\game\objects\tanks\emergency.dm"
#include "code\game\objects\tanks\jetpack.dm" #include "code\game\objects\tanks\jetpack.dm"
#include "code\game\objects\tanks\oxygen.dm" #include "code\game\objects\tanks\oxygen.dm"
#include "code\game\turfs\turf.dm"
#include "code\game\vehicles\vehicle.dm" #include "code\game\vehicles\vehicle.dm"
#include "code\game\vehicles\airtight\airtight.dm" #include "code\game\vehicles\airtight\airtight.dm"
#include "code\game\vehicles\airtight\land.dm" #include "code\game\vehicles\airtight\land.dm"
@@ -854,6 +854,9 @@
#include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm" #include "code\modules\flufftext\TextFilters.dm"
#include "code\modules\food\recipes_microwave.dm" #include "code\modules\food\recipes_microwave.dm"
#include "code\modules\library\lib_items.dm"
#include "code\modules\library\lib_machines.dm"
#include "code\modules\library\lib_readme.dm"
#include "code\modules\maps\dmm_suite.dm" #include "code\modules\maps\dmm_suite.dm"
#include "code\modules\maps\randomZlevel.dm" #include "code\modules\maps\randomZlevel.dm"
#include "code\modules\maps\reader.dm" #include "code\modules\maps\reader.dm"