mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-16 21:23:20 +00:00
Protolathe and CI build procs moved to them from RD console. Protolathe and CI now have a build queue. Designs take varying time to build. P and CI material storage is now a list instead of a set of vars. origin_tech is now a list. All sheets now contain exactly 2000 units of matter. In design datum, chemicals and materials are two separate lists. Designs are now sorted. The method is kinda hacky but flexible. They have a var, sort_string. Designs are sorted alphabetically using it. Circuits how show whether they build a machine or a computer in CI menu. Adds item construction, for now protolathe is used.
166 lines
4.0 KiB
Plaintext
166 lines
4.0 KiB
Plaintext
// I am deciding that for sayustation's purposes directories are right out,
|
|
// we can't even get backpacks to work right with recursion, and that
|
|
// actually fucking matters. Metadata too, that can be added if ever needed.
|
|
|
|
/*
|
|
Files are datums that can be stored in digital storage devices
|
|
*/
|
|
|
|
/datum/file
|
|
var/name = "File"
|
|
var/extension = "dat"
|
|
var/volume = 10 // in KB
|
|
var/image = 'icons/ntos/file.png' // determines the icon to use, found in icons/ntos
|
|
var/obj/machinery/computer3/computer // the parent computer, if fixed
|
|
var/obj/item/part/computer/storage/device // the device that is containing this file
|
|
var/hidden_file = 0 // Prevents file from showing up on NTOS program list.
|
|
var/drm = 0 // Copy protection, called by copy() and move()
|
|
var/readonly = 0 // Edit protection, called by edit(), which is just a failcheck proc
|
|
|
|
proc/execute(var/datum/file/source)
|
|
return
|
|
|
|
//
|
|
// Copy file to device.
|
|
// If you overwrite this function, use the return value to make sure it succeeded
|
|
//
|
|
proc/copy(var/obj/item/part/computer/storage/dest)
|
|
if(!computer) return null
|
|
if(drm)
|
|
if(!computer.emagged)
|
|
return null
|
|
var/datum/file/F = new type()
|
|
if(!dest.addfile(F))
|
|
return null // todo: arf here even though the player can't do a damn thing due to concurrency
|
|
return F
|
|
|
|
//
|
|
// Move file to device
|
|
// Returns null on failure even though the existing file doesn't go away
|
|
//
|
|
proc/move(var/obj/item/part/computer/storage/dest)
|
|
if(!computer) return null
|
|
if(drm)
|
|
if(!computer.emagged)
|
|
return null
|
|
var/obj/item/part/computer/storage/current = device
|
|
if(!dest.addfile(src))
|
|
return null
|
|
current.removefile(src)
|
|
return src
|
|
|
|
//
|
|
// Determines if the file is editable. This does not use the DRM flag,
|
|
// but instead the readonly flag.
|
|
//
|
|
|
|
proc/edit()
|
|
if(!computer)
|
|
return 0
|
|
if(readonly && !computer.emagged)
|
|
return 0 //
|
|
return 1
|
|
|
|
/*
|
|
Centcom root authorization certificate
|
|
|
|
Non-destructive, officially sanctioned.
|
|
Has the same effect on computers as an emag.
|
|
*/
|
|
/datum/file/centcom_auth
|
|
name = "Centcom Root Access Token"
|
|
extension = "auth"
|
|
volume = 100
|
|
copy()
|
|
return null
|
|
|
|
/*
|
|
A file that contains information
|
|
*/
|
|
|
|
/datum/file/data
|
|
|
|
var/content = "content goes here"
|
|
var/file_increment = 1
|
|
var/binary = 0 // determines if the file can't be opened by editor
|
|
|
|
// Set the content to a specific amount, increase filesize appropriately.
|
|
proc/set_content(var/text)
|
|
content = text
|
|
if(file_increment > 1)
|
|
volume = round(file_increment * length(text))
|
|
|
|
copy(var/obj/O)
|
|
var/datum/file/data/D = ..(O)
|
|
if(D)
|
|
D.content = content
|
|
D.readonly = readonly
|
|
|
|
New()
|
|
if(content)
|
|
if(file_increment > 1)
|
|
volume = round(file_increment * length(content))
|
|
|
|
/*
|
|
A generic file that contains text
|
|
*/
|
|
|
|
/datum/file/data/text
|
|
name = "Text File"
|
|
extension = "txt"
|
|
image = 'icons/ntos/file.png'
|
|
content = ""
|
|
file_increment = 0.002 // 0.002 kilobytes per character (1024 characters per KB)
|
|
|
|
/datum/file/data/text/ClownProphecy
|
|
name = "Clown Prophecy"
|
|
content = "HONKhHONKeHONKlHONKpHONKHONmKHONKeHONKHONKpHONKlHONKeHONKaHONKsHONKe"
|
|
|
|
|
|
/*
|
|
A file that contains research
|
|
*/
|
|
|
|
/datum/file/data/research
|
|
name = "Untitled Research"
|
|
binary = 1
|
|
content = "Untitled Tier X Research"
|
|
var/datum/tech/stored // the actual tech contents
|
|
volume = 1440
|
|
|
|
/*
|
|
A file that contains genetic information
|
|
*/
|
|
|
|
/datum/file/data/genome
|
|
name = "Genetic Buffer"
|
|
binary = 1
|
|
var/real_name = "Poop"
|
|
|
|
|
|
/datum/file/data/genome/SE
|
|
name = "Structural Enzymes"
|
|
|
|
/datum/file/data/genome/UE
|
|
name = "Unique Enzymes"
|
|
|
|
/*
|
|
the way genome computers now work, a subtype is the wrong way to do this;
|
|
it will no longer be picked up. You can change this later if you need to.
|
|
for now put it on a disk
|
|
|
|
/datum/file/data/genome/UE/GodEmperorOfMankind
|
|
name = "G.E.M.K."
|
|
content = "066000033000000000AF00330660FF4DB002690"
|
|
label = "God Emperor of Mankind"
|
|
*/
|
|
/datum/file/data/genome/UI
|
|
name = "Unique Identifier"
|
|
|
|
/datum/file/data/genome/UI/UE
|
|
name = "Unique Identifier + Unique Enzymes"
|
|
|
|
/datum/file/data/genome/cloning
|
|
name = "Cloning Data"
|
|
var/datum/data/record/record
|