mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -4,8 +4,8 @@ sudo: false
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- BYOND_MAJOR="512"
|
- BYOND_MAJOR="513"
|
||||||
- BYOND_MINOR="1453"
|
- BYOND_MINOR="1502"
|
||||||
- MACRO_COUNT=4
|
- MACRO_COUNT=4
|
||||||
matrix:
|
matrix:
|
||||||
- TEST_DEFINE="MAP_TEST" TEST_FILE="code/_map_tests.dm" RUN="0"
|
- TEST_DEFINE="MAP_TEST" TEST_FILE="code/_map_tests.dm" RUN="0"
|
||||||
|
|||||||
31
code/__defines/__513_compatibility.dm
Normal file
31
code/__defines/__513_compatibility.dm
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#if DM_VERSION < 513
|
||||||
|
|
||||||
|
#define ismovableatom(A) (istype(A, /atom/movable))
|
||||||
|
|
||||||
|
#define islist(L) (istype(L, /list))
|
||||||
|
|
||||||
|
#define CLAMP01(x) (CLAMP(x, 0, 1))
|
||||||
|
|
||||||
|
#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) )
|
||||||
|
|
||||||
|
#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) )
|
||||||
|
|
||||||
|
#define TAN(x) (sin(x) / cos(x))
|
||||||
|
|
||||||
|
#define arctan(x) (arcsin(x/sqrt(1+x*x)))
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define ismovableatom(A) ismovable(A)
|
||||||
|
|
||||||
|
#define CLAMP01(x) clamp(x, 0, 1)
|
||||||
|
|
||||||
|
#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX)
|
||||||
|
|
||||||
|
#define TAN(x) tan(x)
|
||||||
|
|
||||||
|
#define ATAN2(x, y) arctan(x, y)
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
#define isdatum(D) istype(D, /datum)
|
#define isdatum(D) istype(D, /datum)
|
||||||
#define isweakref(A) istype(A, /weakref)
|
#define isweakref(A) istype(A, /weakref)
|
||||||
|
|
||||||
#define islist(D) istype(D, /list)
|
//#define islist(D) istype(D, /list) //Built in
|
||||||
|
|
||||||
//---------------
|
//---------------
|
||||||
#define isatom(D) istype(D, /atom)
|
#define isatom(D) istype(D, /atom)
|
||||||
|
|||||||
@@ -84,4 +84,4 @@
|
|||||||
#define LIGHT_COLOR_INCANDESCENT_FLASHLIGHT "#FFCC66"
|
#define LIGHT_COLOR_INCANDESCENT_FLASHLIGHT "#FFCC66"
|
||||||
|
|
||||||
//Fake ambient occlusion filter
|
//Fake ambient occlusion filter
|
||||||
#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, border=4, color="#04080FAA")
|
#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-2, size=4, offset=4, color="#04080FAA")
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(world.tick_usage - starting_tickusage))
|
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(world.tick_usage - starting_tickusage))
|
||||||
|
|
||||||
#define PERCENT(val) (round((val)*100, 0.1))
|
#define PERCENT(val) (round((val)*100, 0.1))
|
||||||
#define CLAMP01(x) (CLAMP(x, 0, 1))
|
|
||||||
|
|
||||||
//time of day but automatically adjusts to the server going into the next day within the same round.
|
//time of day but automatically adjusts to the server going into the next day within the same round.
|
||||||
//for when you need a reliable time number that doesn't depend on byond time.
|
//for when you need a reliable time number that doesn't depend on byond time.
|
||||||
@@ -30,17 +29,12 @@
|
|||||||
// round() acts like floor(x, 1) by default but can't handle other values
|
// round() acts like floor(x, 1) by default but can't handle other values
|
||||||
#define FLOOR(x, y) ( round((x) / (y)) * (y) )
|
#define FLOOR(x, y) ( round((x) / (y)) * (y) )
|
||||||
|
|
||||||
#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) )
|
|
||||||
|
|
||||||
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
|
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
|
||||||
#define WRAP(val, min, max) ( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) )
|
#define WRAP(val, min, max) ( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) )
|
||||||
|
|
||||||
// Real modulus that handles decimals
|
// Real modulus that handles decimals
|
||||||
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
|
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
|
||||||
|
|
||||||
// Tangent
|
|
||||||
#define TAN(x) (sin(x) / cos(x))
|
|
||||||
|
|
||||||
// Cotangent
|
// Cotangent
|
||||||
#define COT(x) (1 / TAN(x))
|
#define COT(x) (1 / TAN(x))
|
||||||
|
|
||||||
@@ -50,8 +44,6 @@
|
|||||||
// Cosecant
|
// Cosecant
|
||||||
#define CSC(x) (1 / sin(x))
|
#define CSC(x) (1 / sin(x))
|
||||||
|
|
||||||
#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) )
|
|
||||||
|
|
||||||
// Greatest Common Divisor - Euclid's algorithm
|
// Greatest Common Divisor - Euclid's algorithm
|
||||||
/proc/GCD(a, b)
|
/proc/GCD(a, b)
|
||||||
return b ? GCD(b, (a) % (b)) : a
|
return b ? GCD(b, (a) % (b)) : a
|
||||||
|
|||||||
@@ -325,6 +325,8 @@
|
|||||||
#define SPECIES_SKELETON "Skeleton"
|
#define SPECIES_SKELETON "Skeleton"
|
||||||
#define SPECIES_GOLEM "Golem"
|
#define SPECIES_GOLEM "Golem"
|
||||||
#define SPECIES_EVENT1 "X Occursus"
|
#define SPECIES_EVENT1 "X Occursus"
|
||||||
|
#define SPECIES_EVENT2 "X Anomalous"
|
||||||
|
#define SPECIES_EVENT3 "X Unowas"
|
||||||
|
|
||||||
// Replicant types. Currently only used for alien pods and events.
|
// Replicant types. Currently only used for alien pods and events.
|
||||||
#define SPECIES_REPLICANT "Replicant"
|
#define SPECIES_REPLICANT "Replicant"
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
#define TYPEID_NULL "0"
|
#define TYPEID_NULL "0"
|
||||||
#define TYPEID_NORMAL_LIST "f"
|
#define TYPEID_NORMAL_LIST "f"
|
||||||
//helper macros
|
//helper macros
|
||||||
#define GET_TYPEID(ref) ( ( (lentext(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, lentext(ref)-6) ) )
|
#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) )
|
||||||
#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
|
#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ json_reader
|
|||||||
src.json = json
|
src.json = json
|
||||||
. = new/list()
|
. = new/list()
|
||||||
src.i = 1
|
src.i = 1
|
||||||
while(src.i <= lentext(json))
|
while(src.i <= length(json))
|
||||||
var/char = get_char()
|
var/char = get_char()
|
||||||
if(is_whitespace(char))
|
if(is_whitespace(char))
|
||||||
i++
|
i++
|
||||||
@@ -46,7 +46,7 @@ json_reader
|
|||||||
|
|
||||||
read_word()
|
read_word()
|
||||||
var/val = ""
|
var/val = ""
|
||||||
while(i <= lentext(json))
|
while(i <= length(json))
|
||||||
var/char = get_char()
|
var/char = get_char()
|
||||||
if(is_whitespace(char) || symbols.Find(char))
|
if(is_whitespace(char) || symbols.Find(char))
|
||||||
i-- // let scanner handle this character
|
i-- // let scanner handle this character
|
||||||
@@ -58,7 +58,7 @@ json_reader
|
|||||||
var
|
var
|
||||||
escape = FALSE
|
escape = FALSE
|
||||||
val = ""
|
val = ""
|
||||||
while(++i <= lentext(json))
|
while(++i <= length(json))
|
||||||
var/char = get_char()
|
var/char = get_char()
|
||||||
if(escape)
|
if(escape)
|
||||||
switch(char)
|
switch(char)
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ json_writer
|
|||||||
var/static/list/json_escape = list("\\" = "\\\\", "\"" = "\\\"", "\n" = "\\n")
|
var/static/list/json_escape = list("\\" = "\\\\", "\"" = "\\\"", "\n" = "\\n")
|
||||||
for(var/targ in json_escape)
|
for(var/targ in json_escape)
|
||||||
var/start = 1
|
var/start = 1
|
||||||
while(start <= lentext(txt))
|
while(start <= length(txt))
|
||||||
var/i = findtext(txt, targ, start)
|
var/i = findtext(txt, targ, start)
|
||||||
if(!i)
|
if(!i)
|
||||||
break
|
break
|
||||||
|
|||||||
1
code/_global_vars/lists/misc.dm
Normal file
1
code/_global_vars/lists/misc.dm
Normal file
@@ -0,0 +1 @@
|
|||||||
|
GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u"))
|
||||||
8
code/_global_vars/lists/species.dm
Normal file
8
code/_global_vars/lists/species.dm
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
//Languages/species/whitelist.
|
||||||
|
GLOBAL_LIST_INIT(all_species, list())
|
||||||
|
GLOBAL_LIST_INIT(all_languages, list())
|
||||||
|
GLOBAL_LIST_INIT(language_keys, list()) // Table of say codes for all languages
|
||||||
|
GLOBAL_LIST_INIT(whitelisted_species, list(SPECIES_HUMAN)) // Species that require a whitelist check.
|
||||||
|
// VOREStation edit - include custom species
|
||||||
|
GLOBAL_LIST_INIT(playable_species, list(SPECIES_HUMAN, SPECIES_CUSTOM)) // A list of ALL playable species, whitelisted, latejoin or otherwise.
|
||||||
|
// VOREStation edit end
|
||||||
@@ -24,13 +24,6 @@ var/global/list/turfs = list() //list of all turfs
|
|||||||
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER,HERM) //VOREStaton Edit
|
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER,HERM) //VOREStaton Edit
|
||||||
#define all_genders_text_list list("Male","Female","Plural","Neuter","Herm") //VOREStation Edit
|
#define all_genders_text_list list("Male","Female","Plural","Neuter","Herm") //VOREStation Edit
|
||||||
|
|
||||||
//Languages/species/whitelist.
|
|
||||||
var/global/list/all_species[0]
|
|
||||||
var/global/list/all_languages[0]
|
|
||||||
var/global/list/language_keys[0] // Table of say codes for all languages
|
|
||||||
var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check.
|
|
||||||
var/global/list/playable_species = list(SPECIES_CUSTOM, SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious.
|
|
||||||
|
|
||||||
var/list/mannequins_
|
var/list/mannequins_
|
||||||
|
|
||||||
// Posters
|
// Posters
|
||||||
@@ -164,12 +157,12 @@ var/global/list/string_slot_flags = list(
|
|||||||
paths = typesof(/datum/language)-/datum/language
|
paths = typesof(/datum/language)-/datum/language
|
||||||
for(var/T in paths)
|
for(var/T in paths)
|
||||||
var/datum/language/L = new T
|
var/datum/language/L = new T
|
||||||
all_languages[L.name] = L
|
GLOB.all_languages[L.name] = L
|
||||||
|
|
||||||
for (var/language_name in all_languages)
|
for (var/language_name in GLOB.all_languages)
|
||||||
var/datum/language/L = all_languages[language_name]
|
var/datum/language/L = GLOB.all_languages[language_name]
|
||||||
if(!(L.flags & NONGLOBAL))
|
if(!(L.flags & NONGLOBAL))
|
||||||
language_keys[lowertext(L.key)] = L
|
GLOB.language_keys[lowertext(L.key)] = L
|
||||||
|
|
||||||
var/rkey = 0
|
var/rkey = 0
|
||||||
paths = typesof(/datum/species)
|
paths = typesof(/datum/species)
|
||||||
@@ -183,12 +176,12 @@ var/global/list/string_slot_flags = list(
|
|||||||
|
|
||||||
S = new T
|
S = new T
|
||||||
S.race_key = rkey //Used in mob icon caching.
|
S.race_key = rkey //Used in mob icon caching.
|
||||||
all_species[S.name] = S
|
GLOB.all_species[S.name] = S
|
||||||
|
|
||||||
if(!(S.spawn_flags & SPECIES_IS_RESTRICTED))
|
if(!(S.spawn_flags & SPECIES_IS_RESTRICTED))
|
||||||
playable_species += S.name
|
GLOB.playable_species += S.name
|
||||||
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
|
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
|
||||||
whitelisted_species += S.name
|
GLOB.whitelisted_species += S.name
|
||||||
|
|
||||||
//Posters
|
//Posters
|
||||||
paths = typesof(/datum/poster) - /datum/poster
|
paths = typesof(/datum/poster) - /datum/poster
|
||||||
|
|||||||
@@ -470,10 +470,10 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
|
|||||||
|
|
||||||
// Custom species icon bases
|
// Custom species icon bases
|
||||||
var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN) //Just ones that won't work well.
|
var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN) //Just ones that won't work well.
|
||||||
for(var/species_name in playable_species)
|
for(var/species_name in GLOB.playable_species)
|
||||||
if(species_name in blacklisted_icons)
|
if(species_name in blacklisted_icons)
|
||||||
continue
|
continue
|
||||||
var/datum/species/S = all_species[species_name]
|
var/datum/species/S = GLOB.all_species[species_name]
|
||||||
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
|
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
|
||||||
continue
|
continue
|
||||||
custom_species_bases += species_name
|
custom_species_bases += species_name
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ proc/random_facial_hair_style(gender, species = SPECIES_HUMAN)
|
|||||||
proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0)
|
proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0)
|
||||||
var/datum/species/current_species
|
var/datum/species/current_species
|
||||||
if(species)
|
if(species)
|
||||||
current_species = all_species[species]
|
current_species = GLOB.all_species[species]
|
||||||
|
|
||||||
return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot)
|
return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot)
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ proc/random_name(gender, species = SPECIES_HUMAN)
|
|||||||
|
|
||||||
var/datum/species/current_species
|
var/datum/species/current_species
|
||||||
if(species)
|
if(species)
|
||||||
current_species = all_species[species]
|
current_species = GLOB.all_species[species]
|
||||||
|
|
||||||
if(!current_species || current_species.name_language == null)
|
if(!current_species || current_species.name_language == null)
|
||||||
if(gender==FEMALE)
|
if(gender==FEMALE)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
// Run all strings to be used in an SQL query through this proc first to properly escape out injection attempts.
|
// 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)
|
/proc/sanitizeSQL(var/t as text)
|
||||||
var/sqltext = dbcon.Quote(t);
|
var/sqltext = dbcon.Quote(t);
|
||||||
return copytext(sqltext, 2, lentext(sqltext));//Quote() adds quotes around input, we already do that
|
return copytext(sqltext, 2, length(sqltext));//Quote() adds quotes around input, we already do that
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Text sanitization
|
* Text sanitization
|
||||||
@@ -249,9 +249,9 @@
|
|||||||
//This is used for fingerprints
|
//This is used for fingerprints
|
||||||
/proc/stringmerge(var/text,var/compare,replace = "*")
|
/proc/stringmerge(var/text,var/compare,replace = "*")
|
||||||
var/newtext = text
|
var/newtext = text
|
||||||
if(lentext(text) != lentext(compare))
|
if(length(text) != length(compare))
|
||||||
return 0
|
return 0
|
||||||
for(var/i = 1, i < lentext(text), i++)
|
for(var/i = 1, i < length(text), i++)
|
||||||
var/a = copytext(text,i,i+1)
|
var/a = copytext(text,i,i+1)
|
||||||
var/b = copytext(compare,i,i+1)
|
var/b = copytext(compare,i,i+1)
|
||||||
//if it isn't both the same letter, or if they are both the replacement character
|
//if it isn't both the same letter, or if they are both the replacement character
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
if(!text || !character)
|
if(!text || !character)
|
||||||
return 0
|
return 0
|
||||||
var/count = 0
|
var/count = 0
|
||||||
for(var/i = 1, i <= lentext(text), i++)
|
for(var/i = 1, i <= length(text), i++)
|
||||||
var/a = copytext(text,i,i+1)
|
var/a = copytext(text,i,i+1)
|
||||||
if(a == character)
|
if(a == character)
|
||||||
count++
|
count++
|
||||||
@@ -286,8 +286,8 @@
|
|||||||
//Used in preferences' SetFlavorText and human's set_flavor verb
|
//Used in preferences' SetFlavorText and human's set_flavor verb
|
||||||
//Previews a string of len or less length
|
//Previews a string of len or less length
|
||||||
proc/TextPreview(var/string,var/len=40)
|
proc/TextPreview(var/string,var/len=40)
|
||||||
if(lentext(string) <= len)
|
if(length(string) <= len)
|
||||||
if(!lentext(string))
|
if(!length(string))
|
||||||
return "\[...\]"
|
return "\[...\]"
|
||||||
else
|
else
|
||||||
return string
|
return string
|
||||||
|
|||||||
@@ -590,10 +590,6 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
|||||||
/proc/between(var/low, var/middle, var/high)
|
/proc/between(var/low, var/middle, var/high)
|
||||||
return max(min(middle, high), low)
|
return max(min(middle, high), low)
|
||||||
|
|
||||||
proc/arctan(x)
|
|
||||||
var/y=arcsin(x/sqrt(1+x*x))
|
|
||||||
return y
|
|
||||||
|
|
||||||
//returns random gauss number
|
//returns random gauss number
|
||||||
proc/GaussRand(var/sigma)
|
proc/GaussRand(var/sigma)
|
||||||
var/x,y,rsq
|
var/x,y,rsq
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
face_atom(A) // change direction to face what you clicked on
|
face_atom(A) // change direction to face what you clicked on
|
||||||
|
|
||||||
if(aiCamera.in_camera_mode)
|
if(aiCamera && aiCamera.in_camera_mode)
|
||||||
aiCamera.camera_mode_off()
|
aiCamera.camera_mode_off()
|
||||||
if(is_component_functioning("camera"))
|
if(is_component_functioning("camera"))
|
||||||
aiCamera.captureimage(A, usr)
|
aiCamera.captureimage(A, usr)
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ SUBSYSTEM_DEF(timer)
|
|||||||
for(var/I in second_queue)
|
for(var/I in second_queue)
|
||||||
log_world(get_timer_debug_string(I))
|
log_world(get_timer_debug_string(I))
|
||||||
|
|
||||||
var/cut_start_index = 1
|
|
||||||
var/next_clienttime_timer_index = 0
|
var/next_clienttime_timer_index = 0
|
||||||
var/len = length(clienttime_timers)
|
var/len = length(clienttime_timers)
|
||||||
|
|
||||||
@@ -101,7 +100,7 @@ SUBSYSTEM_DEF(timer)
|
|||||||
|
|
||||||
|
|
||||||
if (next_clienttime_timer_index)
|
if (next_clienttime_timer_index)
|
||||||
clienttime_timers.Cut(cut_start_index,next_clienttime_timer_index+1)
|
clienttime_timers.Cut(1, next_clienttime_timer_index+1)
|
||||||
|
|
||||||
if (MC_TICK_CHECK)
|
if (MC_TICK_CHECK)
|
||||||
return
|
return
|
||||||
@@ -259,7 +258,7 @@ SUBSYSTEM_DEF(timer)
|
|||||||
if (!length(alltimers))
|
if (!length(alltimers))
|
||||||
return
|
return
|
||||||
|
|
||||||
sortTim(alltimers, .proc/cmp_timer)
|
sortTim(alltimers, /proc/cmp_timer)
|
||||||
|
|
||||||
var/datum/timedevent/head = alltimers[1]
|
var/datum/timedevent/head = alltimers[1]
|
||||||
|
|
||||||
@@ -342,8 +341,8 @@ SUBSYSTEM_DEF(timer)
|
|||||||
|
|
||||||
if (flags & TIMER_STOPPABLE)
|
if (flags & TIMER_STOPPABLE)
|
||||||
id = num2text(nextid, 100)
|
id = num2text(nextid, 100)
|
||||||
if (nextid >= SHORT_REAL_LIMIT)
|
if (nextid >= TIMER_ID_MAX)
|
||||||
nextid += min(1, 2**round(nextid/SHORT_REAL_LIMIT))
|
nextid += min(1, 2**round(nextid/TIMER_ID_MAX))
|
||||||
else
|
else
|
||||||
nextid++
|
nextid++
|
||||||
SStimer.timer_id_dict[id] = src
|
SStimer.timer_id_dict[id] = src
|
||||||
@@ -519,4 +518,4 @@ SUBSYSTEM_DEF(timer)
|
|||||||
#undef BUCKET_LEN
|
#undef BUCKET_LEN
|
||||||
#undef BUCKET_POS
|
#undef BUCKET_POS
|
||||||
#undef TIMER_MAX
|
#undef TIMER_MAX
|
||||||
#undef TIMER_ID_MAX
|
#undef TIMER_ID_MAX
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
/decl/hierarchy/outfit/job/cargo/cargo_tech
|
/decl/hierarchy/outfit/job/cargo/cargo_tech
|
||||||
name = OUTFIT_JOB_NAME("Cargo technician")
|
name = OUTFIT_JOB_NAME("Cargo technician")
|
||||||
uniform = /obj/item/clothing/under/rank/cargotech
|
uniform = /obj/item/clothing/under/rank/cargotech
|
||||||
id_type = /obj/item/weapon/card/id/cargo/cargo_tech
|
id_type = /obj/item/weapon/card/id/cargo
|
||||||
pda_type = /obj/item/device/pda/cargo
|
pda_type = /obj/item/device/pda/cargo
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/cargo/mining
|
/decl/hierarchy/outfit/job/cargo/mining
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
l_ear = /obj/item/device/radio/headset/headset_mine
|
l_ear = /obj/item/device/radio/headset/headset_mine
|
||||||
backpack = /obj/item/weapon/storage/backpack/industrial
|
backpack = /obj/item/weapon/storage/backpack/industrial
|
||||||
satchel_one = /obj/item/weapon/storage/backpack/satchel/eng
|
satchel_one = /obj/item/weapon/storage/backpack/satchel/eng
|
||||||
id_type = /obj/item/weapon/card/id/cargo/mining
|
id_type = /obj/item/weapon/card/id/cargo
|
||||||
pda_type = /obj/item/device/pda/shaftminer
|
pda_type = /obj/item/device/pda/shaftminer
|
||||||
backpack_contents = list(/obj/item/weapon/tool/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1)
|
backpack_contents = list(/obj/item/weapon/tool/crowbar = 1, /obj/item/weapon/storage/bag/ore = 1)
|
||||||
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
|
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
/decl/hierarchy/outfit/job/service/bartender
|
/decl/hierarchy/outfit/job/service/bartender
|
||||||
name = OUTFIT_JOB_NAME("Bartender")
|
name = OUTFIT_JOB_NAME("Bartender")
|
||||||
uniform = /obj/item/clothing/under/rank/bartender
|
uniform = /obj/item/clothing/under/rank/bartender
|
||||||
id_type = /obj/item/weapon/card/id/civilian/bartender
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/bar
|
pda_type = /obj/item/device/pda/bar
|
||||||
backpack_contents = list(/obj/item/clothing/accessory/permit/gun/bar = 1)
|
backpack_contents = list(/obj/item/clothing/accessory/permit/gun/bar = 1)
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
uniform = /obj/item/clothing/under/rank/chef
|
uniform = /obj/item/clothing/under/rank/chef
|
||||||
suit = /obj/item/clothing/suit/chef
|
suit = /obj/item/clothing/suit/chef
|
||||||
head = /obj/item/clothing/head/chefhat
|
head = /obj/item/clothing/head/chefhat
|
||||||
id_type = /obj/item/weapon/card/id/civilian/chef
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/chef
|
pda_type = /obj/item/device/pda/chef
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/service/chef/cook
|
/decl/hierarchy/outfit/job/service/chef/cook
|
||||||
@@ -61,20 +61,20 @@
|
|||||||
backpack = /obj/item/weapon/storage/backpack/hydroponics
|
backpack = /obj/item/weapon/storage/backpack/hydroponics
|
||||||
satchel_one = /obj/item/weapon/storage/backpack/satchel/hyd
|
satchel_one = /obj/item/weapon/storage/backpack/satchel/hyd
|
||||||
messenger_bag = /obj/item/weapon/storage/backpack/messenger/hyd
|
messenger_bag = /obj/item/weapon/storage/backpack/messenger/hyd
|
||||||
id_type = /obj/item/weapon/card/id/civilian/botanist
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/botanist
|
pda_type = /obj/item/device/pda/botanist
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/service/janitor
|
/decl/hierarchy/outfit/job/service/janitor
|
||||||
name = OUTFIT_JOB_NAME("Janitor")
|
name = OUTFIT_JOB_NAME("Janitor")
|
||||||
uniform = /obj/item/clothing/under/rank/janitor
|
uniform = /obj/item/clothing/under/rank/janitor
|
||||||
id_type = /obj/item/weapon/card/id/civilian/janitor
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/janitor
|
pda_type = /obj/item/device/pda/janitor
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/librarian
|
/decl/hierarchy/outfit/job/librarian
|
||||||
name = OUTFIT_JOB_NAME("Librarian")
|
name = OUTFIT_JOB_NAME("Librarian")
|
||||||
uniform = /obj/item/clothing/under/suit_jacket/red
|
uniform = /obj/item/clothing/under/suit_jacket/red
|
||||||
l_hand = /obj/item/weapon/barcodescanner
|
l_hand = /obj/item/weapon/barcodescanner
|
||||||
id_type = /obj/item/weapon/card/id/civilian/librarian
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/librarian
|
pda_type = /obj/item/device/pda/librarian
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/internal_affairs_agent
|
/decl/hierarchy/outfit/job/internal_affairs_agent
|
||||||
@@ -85,14 +85,14 @@
|
|||||||
shoes = /obj/item/clothing/shoes/brown
|
shoes = /obj/item/clothing/shoes/brown
|
||||||
glasses = /obj/item/clothing/glasses/sunglasses/big
|
glasses = /obj/item/clothing/glasses/sunglasses/big
|
||||||
l_hand = /obj/item/weapon/clipboard
|
l_hand = /obj/item/weapon/clipboard
|
||||||
id_type = /obj/item/weapon/card/id/civilian/internal_affairs_agent
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/lawyer
|
pda_type = /obj/item/device/pda/lawyer
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/chaplain
|
/decl/hierarchy/outfit/job/chaplain
|
||||||
name = OUTFIT_JOB_NAME("Chaplain")
|
name = OUTFIT_JOB_NAME("Chaplain")
|
||||||
uniform = /obj/item/clothing/under/rank/chaplain
|
uniform = /obj/item/clothing/under/rank/chaplain
|
||||||
l_hand = /obj/item/weapon/storage/bible
|
l_hand = /obj/item/weapon/storage/bible
|
||||||
id_type = /obj/item/weapon/card/id/civilian/chaplain
|
id_type = /obj/item/weapon/card/id/civilian
|
||||||
pda_type = /obj/item/device/pda/chaplain
|
pda_type = /obj/item/device/pda/chaplain
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/explorer
|
/decl/hierarchy/outfit/job/explorer
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
backpack = /obj/item/weapon/storage/backpack/captain
|
backpack = /obj/item/weapon/storage/backpack/captain
|
||||||
satchel_one = /obj/item/weapon/storage/backpack/satchel/cap
|
satchel_one = /obj/item/weapon/storage/backpack/satchel/cap
|
||||||
messenger_bag = /obj/item/weapon/storage/backpack/messenger/com
|
messenger_bag = /obj/item/weapon/storage/backpack/messenger/com
|
||||||
id_type = /obj/item/weapon/card/id/gold/captain
|
id_type = /obj/item/weapon/card/id/gold
|
||||||
pda_type = /obj/item/device/pda/captain
|
pda_type = /obj/item/device/pda/captain
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H)
|
/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H)
|
||||||
@@ -28,14 +28,14 @@
|
|||||||
uniform = /obj/item/clothing/under/rank/head_of_personnel
|
uniform = /obj/item/clothing/under/rank/head_of_personnel
|
||||||
l_ear = /obj/item/device/radio/headset/heads/hop
|
l_ear = /obj/item/device/radio/headset/heads/hop
|
||||||
shoes = /obj/item/clothing/shoes/brown
|
shoes = /obj/item/clothing/shoes/brown
|
||||||
id_type = /obj/item/weapon/card/id/silver/hop
|
id_type = /obj/item/weapon/card/id/silver
|
||||||
pda_type = /obj/item/device/pda/heads/hop
|
pda_type = /obj/item/device/pda/heads/hop
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/secretary
|
/decl/hierarchy/outfit/job/secretary
|
||||||
name = OUTFIT_JOB_NAME("Command Secretary")
|
name = OUTFIT_JOB_NAME("Command Secretary")
|
||||||
l_ear = /obj/item/device/radio/headset/headset_com
|
l_ear = /obj/item/device/radio/headset/headset_com
|
||||||
shoes = /obj/item/clothing/shoes/brown
|
shoes = /obj/item/clothing/shoes/brown
|
||||||
id_type = /obj/item/weapon/card/id/silver/secretary
|
id_type = /obj/item/weapon/card/id/silver
|
||||||
pda_type = /obj/item/device/pda/heads
|
pda_type = /obj/item/device/pda/heads
|
||||||
r_hand = /obj/item/weapon/clipboard
|
r_hand = /obj/item/weapon/clipboard
|
||||||
|
|
||||||
|
|||||||
@@ -23,12 +23,12 @@
|
|||||||
name = OUTFIT_JOB_NAME("Engineer")
|
name = OUTFIT_JOB_NAME("Engineer")
|
||||||
head = /obj/item/clothing/head/hardhat
|
head = /obj/item/clothing/head/hardhat
|
||||||
uniform = /obj/item/clothing/under/rank/engineer
|
uniform = /obj/item/clothing/under/rank/engineer
|
||||||
id_type = /obj/item/weapon/card/id/engineering/engineer
|
id_type = /obj/item/weapon/card/id/engineering
|
||||||
pda_type = /obj/item/device/pda/engineering
|
pda_type = /obj/item/device/pda/engineering
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/engineering/atmos
|
/decl/hierarchy/outfit/job/engineering/atmos
|
||||||
name = OUTFIT_JOB_NAME("Atmospheric technician")
|
name = OUTFIT_JOB_NAME("Atmospheric technician")
|
||||||
uniform = /obj/item/clothing/under/rank/atmospheric_technician
|
uniform = /obj/item/clothing/under/rank/atmospheric_technician
|
||||||
belt = /obj/item/weapon/storage/belt/utility/atmostech
|
belt = /obj/item/weapon/storage/belt/utility/atmostech
|
||||||
id_type = /obj/item/weapon/card/id/engineering/atmos
|
id_type = /obj/item/weapon/card/id/engineering
|
||||||
pda_type = /obj/item/device/pda/atmos
|
pda_type = /obj/item/device/pda/atmos
|
||||||
|
|||||||
@@ -13,8 +13,11 @@
|
|||||||
|
|
||||||
flags = OUTFIT_HAS_BACKPACK
|
flags = OUTFIT_HAS_BACKPACK
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H)
|
/decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H, rank, assignment)
|
||||||
var/obj/item/weapon/card/id/C = ..()
|
var/obj/item/weapon/card/id/C = ..()
|
||||||
|
var/datum/job/J = job_master.GetJob(rank)
|
||||||
|
if(J)
|
||||||
|
C.access = J.get_access()
|
||||||
if(H.mind)
|
if(H.mind)
|
||||||
var/datum/mind/M = H.mind
|
var/datum/mind/M = H.mind
|
||||||
if(M.initial_account)
|
if(M.initial_account)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat
|
suit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||||
l_hand = /obj/item/weapon/storage/firstaid/regular
|
l_hand = /obj/item/weapon/storage/firstaid/regular
|
||||||
r_pocket = /obj/item/device/flashlight/pen
|
r_pocket = /obj/item/device/flashlight/pen
|
||||||
id_type = /obj/item/weapon/card/id/medical/doctor
|
id_type = /obj/item/weapon/card/id/medical
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/medical/doctor/emergency_physician
|
/decl/hierarchy/outfit/job/medical/doctor/emergency_physician
|
||||||
name = OUTFIT_JOB_NAME("Emergency Physician")
|
name = OUTFIT_JOB_NAME("Emergency Physician")
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/chemist
|
suit = /obj/item/clothing/suit/storage/toggle/labcoat/chemist
|
||||||
backpack = /obj/item/weapon/storage/backpack/chemistry
|
backpack = /obj/item/weapon/storage/backpack/chemistry
|
||||||
satchel_one = /obj/item/weapon/storage/backpack/satchel/chem
|
satchel_one = /obj/item/weapon/storage/backpack/satchel/chem
|
||||||
id_type = /obj/item/weapon/card/id/medical/chemist
|
id_type = /obj/item/weapon/card/id/medical
|
||||||
pda_type = /obj/item/device/pda/chemist
|
pda_type = /obj/item/device/pda/chemist
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/medical/geneticist
|
/decl/hierarchy/outfit/job/medical/geneticist
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
backpack = /obj/item/weapon/storage/backpack/genetics
|
backpack = /obj/item/weapon/storage/backpack/genetics
|
||||||
r_pocket = /obj/item/device/flashlight/pen
|
r_pocket = /obj/item/device/flashlight/pen
|
||||||
satchel_one = /obj/item/weapon/storage/backpack/satchel/gen
|
satchel_one = /obj/item/weapon/storage/backpack/satchel/gen
|
||||||
id_type = /obj/item/weapon/card/id/medical/geneticist
|
id_type = /obj/item/weapon/card/id/medical
|
||||||
pda_type = /obj/item/device/pda/geneticist
|
pda_type = /obj/item/device/pda/geneticist
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/medical/psychiatrist
|
/decl/hierarchy/outfit/job/medical/psychiatrist
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
uniform = /obj/item/clothing/under/rank/psych
|
uniform = /obj/item/clothing/under/rank/psych
|
||||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat
|
suit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||||
shoes = /obj/item/clothing/shoes/laceup
|
shoes = /obj/item/clothing/shoes/laceup
|
||||||
id_type = /obj/item/weapon/card/id/medical/psychiatrist
|
id_type = /obj/item/weapon/card/id/medical
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
/decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
||||||
name = OUTFIT_JOB_NAME("Psychologist")
|
name = OUTFIT_JOB_NAME("Psychologist")
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
l_hand = /obj/item/weapon/storage/firstaid/regular
|
l_hand = /obj/item/weapon/storage/firstaid/regular
|
||||||
belt = /obj/item/weapon/storage/belt/medical/emt
|
belt = /obj/item/weapon/storage/belt/medical/emt
|
||||||
pda_slot = slot_l_store
|
pda_slot = slot_l_store
|
||||||
id_type = /obj/item/weapon/card/id/medical/paramedic
|
id_type = /obj/item/weapon/card/id/medical
|
||||||
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
|
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/medical/paramedic/emt
|
/decl/hierarchy/outfit/job/medical/paramedic/emt
|
||||||
|
|||||||
@@ -20,13 +20,13 @@
|
|||||||
/decl/hierarchy/outfit/job/science/scientist
|
/decl/hierarchy/outfit/job/science/scientist
|
||||||
name = OUTFIT_JOB_NAME("Scientist")
|
name = OUTFIT_JOB_NAME("Scientist")
|
||||||
uniform = /obj/item/clothing/under/rank/scientist
|
uniform = /obj/item/clothing/under/rank/scientist
|
||||||
id_type = /obj/item/weapon/card/id/science/scientist
|
id_type = /obj/item/weapon/card/id/science
|
||||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
suit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/science/xenobiologist
|
/decl/hierarchy/outfit/job/science/xenobiologist
|
||||||
name = OUTFIT_JOB_NAME("Xenobiologist")
|
name = OUTFIT_JOB_NAME("Xenobiologist")
|
||||||
uniform = /obj/item/clothing/under/rank/scientist
|
uniform = /obj/item/clothing/under/rank/scientist
|
||||||
id_type = /obj/item/weapon/card/id/science/xenobiologist
|
id_type = /obj/item/weapon/card/id/science
|
||||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
suit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/science/roboticist
|
/decl/hierarchy/outfit/job/science/roboticist
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
uniform = /obj/item/clothing/under/rank/roboticist
|
uniform = /obj/item/clothing/under/rank/roboticist
|
||||||
shoes = /obj/item/clothing/shoes/black
|
shoes = /obj/item/clothing/shoes/black
|
||||||
belt = /obj/item/weapon/storage/belt/utility/full
|
belt = /obj/item/weapon/storage/belt/utility/full
|
||||||
id_type = /obj/item/weapon/card/id/science/roboticist
|
id_type = /obj/item/weapon/card/id/science
|
||||||
pda_slot = slot_r_store
|
pda_slot = slot_r_store
|
||||||
pda_type = /obj/item/device/pda/roboticist
|
pda_type = /obj/item/device/pda/roboticist
|
||||||
backpack = /obj/item/weapon/storage/backpack
|
backpack = /obj/item/weapon/storage/backpack
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
name = OUTFIT_JOB_NAME("Warden")
|
name = OUTFIT_JOB_NAME("Warden")
|
||||||
uniform = /obj/item/clothing/under/rank/warden
|
uniform = /obj/item/clothing/under/rank/warden
|
||||||
l_pocket = /obj/item/device/flash
|
l_pocket = /obj/item/device/flash
|
||||||
id_type = /obj/item/weapon/card/id/security/warden
|
id_type = /obj/item/weapon/card/id/security
|
||||||
pda_type = /obj/item/device/pda/warden
|
pda_type = /obj/item/device/pda/warden
|
||||||
|
|
||||||
/decl/hierarchy/outfit/job/security/detective
|
/decl/hierarchy/outfit/job/security/detective
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
l_pocket = /obj/item/weapon/flame/lighter/zippo
|
l_pocket = /obj/item/weapon/flame/lighter/zippo
|
||||||
shoes = /obj/item/clothing/shoes/laceup
|
shoes = /obj/item/clothing/shoes/laceup
|
||||||
r_hand = /obj/item/weapon/storage/briefcase/crimekit
|
r_hand = /obj/item/weapon/storage/briefcase/crimekit
|
||||||
id_type = /obj/item/weapon/card/id/security/detective
|
id_type = /obj/item/weapon/card/id/security
|
||||||
pda_type = /obj/item/device/pda/detective
|
pda_type = /obj/item/device/pda/detective
|
||||||
backpack = /obj/item/weapon/storage/backpack
|
backpack = /obj/item/weapon/storage/backpack
|
||||||
satchel_one = /obj/item/weapon/storage/backpack/satchel/norm
|
satchel_one = /obj/item/weapon/storage/backpack/satchel/norm
|
||||||
@@ -46,5 +46,5 @@
|
|||||||
name = OUTFIT_JOB_NAME("Security Officer")
|
name = OUTFIT_JOB_NAME("Security Officer")
|
||||||
uniform = /obj/item/clothing/under/rank/security
|
uniform = /obj/item/clothing/under/rank/security
|
||||||
l_pocket = /obj/item/device/flash
|
l_pocket = /obj/item/device/flash
|
||||||
id_type = /obj/item/weapon/card/id/security/officer
|
id_type = /obj/item/weapon/card/id/security
|
||||||
pda_type = /obj/item/device/pda/security
|
pda_type = /obj/item/device/pda/security
|
||||||
|
|||||||
34
code/datums/outfits/jobs/special_vr.dm
Normal file
34
code/datums/outfits/jobs/special_vr.dm
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/decl/hierarchy/outfit/job/centcom_officer
|
||||||
|
name = OUTFIT_JOB_NAME("CentCom Officer")
|
||||||
|
uniform = /obj/item/clothing/under/rank/centcom
|
||||||
|
gloves = /obj/item/clothing/gloves/white
|
||||||
|
shoes = /obj/item/clothing/shoes/laceup
|
||||||
|
head = /obj/item/clothing/head/beret/centcom/officer
|
||||||
|
l_ear = /obj/item/device/radio/headset/centcom
|
||||||
|
glasses = /obj/item/clothing/glasses/omnihud/all
|
||||||
|
id_type = /obj/item/weapon/card/id/centcom
|
||||||
|
pda_type = /obj/item/device/pda/centcom
|
||||||
|
|
||||||
|
/decl/hierarchy/outfit/job/clown
|
||||||
|
name = OUTFIT_JOB_NAME("Clown")
|
||||||
|
uniform = /obj/item/clothing/under/rank/clown
|
||||||
|
back = /obj/item/weapon/storage/backpack/clown
|
||||||
|
shoes = /obj/item/clothing/shoes/clown_shoes
|
||||||
|
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||||
|
backpack_contents = list(/obj/item/weapon/stamp/clown = 1, /obj/item/weapon/bikehorn = 1)
|
||||||
|
pda_type = /obj/item/device/pda/clown
|
||||||
|
flags = 0
|
||||||
|
|
||||||
|
/decl/hierarchy/outfit/job/mime
|
||||||
|
name = OUTFIT_JOB_NAME("Mime")
|
||||||
|
uniform = /obj/item/clothing/under/mime
|
||||||
|
shoes = /obj/item/clothing/shoes/mime
|
||||||
|
head = /obj/item/clothing/head/soft/mime
|
||||||
|
mask = /obj/item/clothing/mask/gas/mime
|
||||||
|
backpack_contents = list(/obj/item/weapon/pen/crayon/mime = 1)
|
||||||
|
pda_type = /obj/item/device/pda/mime
|
||||||
|
|
||||||
|
post_equip(var/mob/living/carbon/human/H)
|
||||||
|
..()
|
||||||
|
if(H.backbag == 1)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand)
|
||||||
@@ -1,180 +1,189 @@
|
|||||||
/datum/category_item/underwear/undershirt/none
|
/datum/category_item/underwear/undershirt/none
|
||||||
is_default = TRUE
|
is_default = TRUE
|
||||||
name = "None"
|
name = "None"
|
||||||
always_last = TRUE
|
always_last = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shirt
|
/datum/category_item/underwear/undershirt/shirt
|
||||||
name = "Shirt"
|
name = "Shirt"
|
||||||
icon_state = "undershirt"
|
icon_state = "undershirt"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shirt_fem
|
/datum/category_item/underwear/undershirt/shirt_fem
|
||||||
name = "Babydoll shirt"
|
name = "Babydoll shirt"
|
||||||
icon_state = "undershirt_fem"
|
icon_state = "undershirt_fem"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shirt_long
|
/datum/category_item/underwear/undershirt/shirt_long
|
||||||
name = "Longsleeve Shirt"
|
name = "Longsleeve Shirt"
|
||||||
icon_state = "undershirt_long"
|
icon_state = "undershirt_long"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shirt_long_s
|
/datum/category_item/underwear/undershirt/shirt_long_s
|
||||||
name = "Shirt, button-down"
|
name = "Shirt, button-down"
|
||||||
icon_state = "shirt_long_s"
|
icon_state = "shirt_long_s"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shirt_long_fem
|
/datum/category_item/underwear/undershirt/shirt_long_fem
|
||||||
name = "Longsleeve Shirt, feminine"
|
name = "Longsleeve Shirt, feminine"
|
||||||
icon_state = "undershirt_long_fem"
|
icon_state = "undershirt_long_fem"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shirt_long_female_s
|
/datum/category_item/underwear/undershirt/shirt_long_female_s
|
||||||
name = "Button-down Shirt, feminine"
|
name = "Button-down Shirt, feminine"
|
||||||
icon_state = "shirt_long_female_s"
|
icon_state = "shirt_long_female_s"
|
||||||
has_color = TRUE
|
has_color = TRUE
|
||||||
|
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/tank_top
|
/datum/category_item/underwear/undershirt/fishnet_simple
|
||||||
name = "Tank top"
|
name = "Fishnet shirt"
|
||||||
icon_state = "tanktop"
|
icon_state = "fishnet_simple"
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/tank_top
|
||||||
/datum/category_item/underwear/undershirt/tank_top_alt
|
name = "Tank top"
|
||||||
name = "Tank top, alt"
|
icon_state = "tanktop"
|
||||||
icon_state = "tanktop_alt"
|
has_color = TRUE
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/tank_top_alt
|
||||||
/datum/category_item/underwear/undershirt/tank_top_alt_fem
|
name = "Tank top, alt"
|
||||||
name = "Tank top, alt, feminine"
|
icon_state = "tanktop_alt"
|
||||||
icon_state = "tanktop_alt_fem"
|
has_color = TRUE
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/tank_top_alt_fem
|
||||||
/datum/category_item/underwear/undershirt/tank_top_alt_fem_vneck
|
name = "Tank top, alt, feminine"
|
||||||
name = "Tank top, feminine, v-neck"
|
icon_state = "tanktop_alt_fem"
|
||||||
icon_state = "tanktop_alt_fem_vneck"
|
has_color = TRUE
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/tank_top_alt_fem_vneck
|
||||||
/datum/category_item/underwear/undershirt/tank_top_fire
|
name = "Tank top, feminine, v-neck"
|
||||||
name = "Tank top, fire"
|
icon_state = "tanktop_alt_fem_vneck"
|
||||||
icon_state = "tank_fire_s"
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/tank_top_fire_fem
|
/datum/category_item/underwear/undershirt/tank_cropped_vneck
|
||||||
name = "Tank top, fire, feminine"
|
name = "Tank top, feminine, cropped & v-neck"
|
||||||
icon_state = "tank_fire_fem_s"
|
icon_state = "tanktop_cropped_vneck"
|
||||||
|
has_color = TRUE
|
||||||
/datum/category_item/underwear/undershirt/tank_top_rainbow
|
|
||||||
name = "Tank top, rainbow"
|
/datum/category_item/underwear/undershirt/tank_top_fire
|
||||||
icon_state = "tank_rainbow_s"
|
name = "Tank top, fire"
|
||||||
|
icon_state = "tank_fire_s"
|
||||||
/datum/category_item/underwear/undershirt/tank_top_stripes
|
|
||||||
name = "Tank top, striped"
|
/datum/category_item/underwear/undershirt/tank_top_fire_fem
|
||||||
icon_state = "tank_stripes_s"
|
name = "Tank top, fire, feminine"
|
||||||
|
icon_state = "tank_fire_fem_s"
|
||||||
/datum/category_item/underwear/undershirt/tank_top_sun
|
|
||||||
name = "Tank top, sun"
|
/datum/category_item/underwear/undershirt/tank_top_rainbow
|
||||||
icon_state = "tank_sun_s"
|
name = "Tank top, rainbow"
|
||||||
|
icon_state = "tank_rainbow_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_heart
|
|
||||||
name = "Shirt, heart"
|
/datum/category_item/underwear/undershirt/tank_top_stripes
|
||||||
icon_state = "lover_s"
|
name = "Tank top, striped"
|
||||||
|
icon_state = "tank_stripes_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_heart_fem
|
|
||||||
name = "Shirt, heart, babydoll"
|
/datum/category_item/underwear/undershirt/tank_top_sun
|
||||||
icon_state = "lover_fem_s"
|
name = "Tank top, sun"
|
||||||
|
icon_state = "tank_sun_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_nt
|
|
||||||
name = "Shirt, NT"
|
/datum/category_item/underwear/undershirt/shirt_heart
|
||||||
icon_state = "shirt_nano_s"
|
name = "Shirt, heart"
|
||||||
|
icon_state = "lover_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_love_nt
|
|
||||||
name = "Shirt, I<3NT"
|
/datum/category_item/underwear/undershirt/shirt_heart_fem
|
||||||
icon_state = "ilovent_s"
|
name = "Shirt, heart, babydoll"
|
||||||
|
icon_state = "lover_fem_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_love_nt_fem
|
|
||||||
name = "Shirt, I<3NT, babydoll"
|
/datum/category_item/underwear/undershirt/shirt_nt
|
||||||
icon_state = "ilovent_fem_s"
|
name = "Shirt, NT"
|
||||||
|
icon_state = "shirt_nano_s"
|
||||||
/datum/category_item/underwear/undershirt/shortsleeve_shirt
|
|
||||||
name = "Shortsleeve shirt"
|
/datum/category_item/underwear/undershirt/shirt_love_nt
|
||||||
icon_state = "shortsleeve"
|
name = "Shirt, I<3NT"
|
||||||
has_color = TRUE
|
icon_state = "ilovent_s"
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem
|
/datum/category_item/underwear/undershirt/shirt_love_nt_fem
|
||||||
name = "Shortsleeve babydoll shirt"
|
name = "Shirt, I<3NT, babydoll"
|
||||||
icon_state = "shortsleeve_fem"
|
icon_state = "ilovent_fem_s"
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/shortsleeve_shirt
|
||||||
/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem_vneck
|
name = "Shortsleeve shirt"
|
||||||
name = "Shortsleeve babydoll shirt, v-neck"
|
icon_state = "shortsleeve"
|
||||||
icon_state = "shortsleeve_fem_vneck"
|
has_color = TRUE
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem
|
||||||
/datum/category_item/underwear/undershirt/polo_shirt
|
name = "Shortsleeve babydoll shirt"
|
||||||
name = "Polo shirt"
|
icon_state = "shortsleeve_fem"
|
||||||
icon_state = "polo"
|
has_color = TRUE
|
||||||
has_color = TRUE
|
|
||||||
|
/datum/category_item/underwear/undershirt/shortsleeve_shirt_fem_vneck
|
||||||
/datum/category_item/underwear/undershirt/sport_shirt_green
|
name = "Shortsleeve babydoll shirt, v-neck"
|
||||||
name = "Sport shirt, green"
|
icon_state = "shortsleeve_fem_vneck"
|
||||||
icon_state = "greenshirtsport_s"
|
has_color = TRUE
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/sport_shirt_red
|
/datum/category_item/underwear/undershirt/polo_shirt
|
||||||
name = "Sport shirt, red"
|
name = "Polo shirt"
|
||||||
icon_state = "redshirtsport_s"
|
icon_state = "polo"
|
||||||
|
has_color = TRUE
|
||||||
/datum/category_item/underwear/undershirt/sport_shirt_blue
|
|
||||||
name = "Sport shirt, blue"
|
/datum/category_item/underwear/undershirt/sport_shirt_green
|
||||||
icon_state = "blueshirtsport_s"
|
name = "Sport shirt, green"
|
||||||
|
icon_state = "greenshirtsport_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_tiedye
|
|
||||||
name = "Shirt, tiedye"
|
/datum/category_item/underwear/undershirt/sport_shirt_red
|
||||||
icon_state = "shirt_tiedye_s"
|
name = "Sport shirt, red"
|
||||||
|
icon_state = "redshirtsport_s"
|
||||||
/datum/category_item/underwear/undershirt/shirt_blue_striped
|
|
||||||
name = "Shirt, blue stripes"
|
/datum/category_item/underwear/undershirt/sport_shirt_blue
|
||||||
icon_state = "shirt_stripes_s"
|
name = "Sport shirt, blue"
|
||||||
|
icon_state = "blueshirtsport_s"
|
||||||
/datum/category_item/underwear/undershirt/bowling
|
|
||||||
name = "Bowling Shirt, Red"
|
/datum/category_item/underwear/undershirt/shirt_tiedye
|
||||||
icon_state = "bowling"
|
name = "Shirt, tiedye"
|
||||||
|
icon_state = "shirt_tiedye_s"
|
||||||
/datum/category_item/underwear/undershirt/bowlingp
|
|
||||||
name = "Bowling Shirt, Pink"
|
/datum/category_item/underwear/undershirt/shirt_blue_striped
|
||||||
icon_state = "bowlingp"
|
name = "Shirt, blue stripes"
|
||||||
|
icon_state = "shirt_stripes_s"
|
||||||
/datum/category_item/underwear/undershirt/bowlinga
|
|
||||||
name = "Bowling Shirt, Aqua"
|
/datum/category_item/underwear/undershirt/bowling
|
||||||
icon_state = "bowlinga"
|
name = "Bowling Shirt, Red"
|
||||||
|
icon_state = "bowling"
|
||||||
/datum/category_item/underwear/undershirt/bowlingw
|
|
||||||
name = "Bowling Shirt, White"
|
/datum/category_item/underwear/undershirt/bowlingp
|
||||||
icon_state = "bowlingw"
|
name = "Bowling Shirt, Pink"
|
||||||
|
icon_state = "bowlingp"
|
||||||
/datum/category_item/underwear/undershirt/longjon
|
|
||||||
name = "Long John Shirt"
|
/datum/category_item/underwear/undershirt/bowlinga
|
||||||
icon_state = "ljont"
|
name = "Bowling Shirt, Aqua"
|
||||||
has_color = TRUE
|
icon_state = "bowlinga"
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/longstripe_black
|
/datum/category_item/underwear/undershirt/bowlingw
|
||||||
name = "Longsleeve Striped Shirt, Black"
|
name = "Bowling Shirt, White"
|
||||||
icon_state = "longstripe"
|
icon_state = "bowlingw"
|
||||||
|
|
||||||
/datum/category_item/underwear/undershirt/longstripe_blue
|
/datum/category_item/underwear/undershirt/longjon
|
||||||
name = "Longsleeve Striped Shirt, Blue"
|
name = "Long John Shirt"
|
||||||
icon_state = "longstripe_blue"
|
icon_state = "ljont"
|
||||||
|
has_color = TRUE
|
||||||
/datum/category_item/underwear/undershirt/tiedye
|
|
||||||
name = "Tiedye Shirt"
|
/datum/category_item/underwear/undershirt/longstripe_black
|
||||||
icon_state = "tiedye"
|
name = "Longsleeve Striped Shirt, Black"
|
||||||
|
icon_state = "longstripe"
|
||||||
/datum/category_item/underwear/undershirt/longstripe_pink
|
|
||||||
name = "Longsleeve Striped Shirt, Pink"
|
/datum/category_item/underwear/undershirt/longstripe_blue
|
||||||
icon_state = "longstripe_pink_s"
|
name = "Longsleeve Striped Shirt, Blue"
|
||||||
|
icon_state = "longstripe_blue"
|
||||||
/datum/category_item/underwear/undershirt/wingshirt
|
|
||||||
name = "Pink Wing Shirt"
|
/datum/category_item/underwear/undershirt/tiedye
|
||||||
icon_state = "wing_shirt_s"
|
name = "Tiedye Shirt"
|
||||||
|
icon_state = "tiedye"
|
||||||
/datum/category_item/underwear/undershirt/pinkblack_tshirt
|
|
||||||
name = "Pink and Black T-Shirt"
|
/datum/category_item/underwear/undershirt/longstripe_pink
|
||||||
|
name = "Longsleeve Striped Shirt, Pink"
|
||||||
|
icon_state = "longstripe_pink_s"
|
||||||
|
|
||||||
|
/datum/category_item/underwear/undershirt/wingshirt
|
||||||
|
name = "Pink Wing Shirt"
|
||||||
|
icon_state = "wing_shirt_s"
|
||||||
|
|
||||||
|
/datum/category_item/underwear/undershirt/pinkblack_tshirt
|
||||||
|
name = "Pink and Black T-Shirt"
|
||||||
icon_state = "pinkblack_tshirt"
|
icon_state = "pinkblack_tshirt"
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
return 1
|
return 1
|
||||||
else if(isnewplayer(player.current))
|
else if(isnewplayer(player.current))
|
||||||
if(player.current.client && player.current.client.prefs)
|
if(player.current.client && player.current.client.prefs)
|
||||||
var/datum/species/S = all_species[player.current.client.prefs.species]
|
var/datum/species/S = GLOB.all_species[player.current.client.prefs.species]
|
||||||
if(S && (S.flags & NO_SCAN))
|
if(S && (S.flags & NO_SCAN))
|
||||||
return 0
|
return 0
|
||||||
if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic.
|
if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
var/list/nearby_things = range(round(calculate_spell_power(4)),owner)
|
var/list/nearby_things = range(round(calculate_spell_power(4)),owner)
|
||||||
|
|
||||||
var/temp_change = calculate_spell_power(25)
|
var/temp_change = calculate_spell_power(25)
|
||||||
var/datum/species/baseline = all_species["Human"]
|
var/datum/species/baseline = GLOB.all_species["Human"]
|
||||||
var/temp_cap = baseline.heat_level_3 * 1.5
|
var/temp_cap = baseline.heat_level_3 * 1.5
|
||||||
var/fire_power = calculate_spell_power(2)
|
var/fire_power = calculate_spell_power(2)
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
var/list/nearby_mobs = range(round(calculate_spell_power(4)),owner)
|
var/list/nearby_mobs = range(round(calculate_spell_power(4)),owner)
|
||||||
|
|
||||||
var/temp_change = calculate_spell_power(40)
|
var/temp_change = calculate_spell_power(40)
|
||||||
var/datum/species/baseline = all_species["Human"]
|
var/datum/species/baseline = GLOB.all_species["Human"]
|
||||||
var/temp_cap = baseline.cold_level_2 - 5
|
var/temp_cap = baseline.cold_level_2 - 5
|
||||||
|
|
||||||
if(check_for_scepter())
|
if(check_for_scepter())
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "company officials and Corporate Regulations"
|
supervisors = "company officials and Corporate Regulations"
|
||||||
selection_color = "#1D1D4F"
|
selection_color = "#1D1D4F"
|
||||||
idtype = /obj/item/weapon/card/id/gold
|
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
access = list() //See get_access()
|
access = list() //See get_access()
|
||||||
minimal_access = list() //See get_access()
|
minimal_access = list() //See get_access()
|
||||||
@@ -44,7 +43,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the Colony Director"
|
supervisors = "the Colony Director"
|
||||||
selection_color = "#2F2F7F"
|
selection_color = "#2F2F7F"
|
||||||
idtype = /obj/item/weapon/card/id/silver/hop
|
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
minimal_player_age = 10
|
minimal_player_age = 10
|
||||||
economic_modifier = 10
|
economic_modifier = 10
|
||||||
@@ -79,7 +77,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "command staff"
|
supervisors = "command staff"
|
||||||
selection_color = "#2F2F7F"
|
selection_color = "#2F2F7F"
|
||||||
idtype = /obj/item/weapon/card/id/silver/secretary
|
|
||||||
minimal_player_age = 5
|
minimal_player_age = 5
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/bartender
|
|
||||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||||
minimal_access = list(access_bar)
|
minimal_access = list(access_bar)
|
||||||
|
|
||||||
@@ -27,7 +26,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/chef
|
|
||||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||||
minimal_access = list(access_kitchen)
|
minimal_access = list(access_kitchen)
|
||||||
|
|
||||||
@@ -44,7 +42,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/botanist
|
|
||||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||||
minimal_access = list(access_hydroponics)
|
minimal_access = list(access_hydroponics)
|
||||||
|
|
||||||
@@ -63,7 +60,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#7a4f33"
|
selection_color = "#7a4f33"
|
||||||
idtype = /obj/item/weapon/card/id/cargo/head
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||||
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
|
||||||
@@ -83,7 +79,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the quartermaster and the head of personnel"
|
supervisors = "the quartermaster and the head of personnel"
|
||||||
selection_color = "#9b633e"
|
selection_color = "#9b633e"
|
||||||
idtype = /obj/item/weapon/card/id/cargo/cargo_tech
|
|
||||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
||||||
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
|
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
|
||||||
|
|
||||||
@@ -99,7 +94,6 @@
|
|||||||
spawn_positions = 3
|
spawn_positions = 3
|
||||||
supervisors = "the quartermaster and the head of personnel"
|
supervisors = "the quartermaster and the head of personnel"
|
||||||
selection_color = "#9b633e"
|
selection_color = "#9b633e"
|
||||||
idtype = /obj/item/weapon/card/id/cargo/mining
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
||||||
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
|
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
|
||||||
@@ -118,7 +112,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/janitor
|
|
||||||
access = list(access_janitor, access_maint_tunnels)
|
access = list(access_janitor, access_maint_tunnels)
|
||||||
minimal_access = list(access_janitor, access_maint_tunnels)
|
minimal_access = list(access_janitor, access_maint_tunnels)
|
||||||
|
|
||||||
@@ -136,7 +129,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/librarian
|
|
||||||
access = list(access_library, access_maint_tunnels)
|
access = list(access_library, access_maint_tunnels)
|
||||||
minimal_access = list(access_library)
|
minimal_access = list(access_library)
|
||||||
|
|
||||||
@@ -154,7 +146,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "company officials and Corporate Regulations"
|
supervisors = "company officials and Corporate Regulations"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/internal_affairs_agent
|
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
|
access = list(access_lawyer, access_sec_doors, access_maint_tunnels, access_heads)
|
||||||
minimal_access = list(access_lawyer, access_sec_doors, access_heads)
|
minimal_access = list(access_lawyer, access_sec_doors, access_heads)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the head of personnel"
|
supervisors = "the head of personnel"
|
||||||
selection_color = "#515151"
|
selection_color = "#515151"
|
||||||
idtype = /obj/item/weapon/card/id/civilian/chaplain
|
|
||||||
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
|
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
|
||||||
minimal_access = list(access_chapel_office, access_crematorium)
|
minimal_access = list(access_chapel_office, access_crematorium)
|
||||||
alt_titles = list("Counselor")
|
alt_titles = list("Counselor")
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the Colony Director"
|
supervisors = "the Colony Director"
|
||||||
selection_color = "#7F6E2C"
|
selection_color = "#7F6E2C"
|
||||||
idtype = /obj/item/weapon/card/id/engineering/head
|
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
economic_modifier = 10
|
economic_modifier = 10
|
||||||
|
|
||||||
@@ -39,7 +38,6 @@
|
|||||||
spawn_positions = 5
|
spawn_positions = 5
|
||||||
supervisors = "the chief engineer"
|
supervisors = "the chief engineer"
|
||||||
selection_color = "#5B4D20"
|
selection_color = "#5B4D20"
|
||||||
idtype = /obj/item/weapon/card/id/engineering/engineer
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
|
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
|
||||||
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
|
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
|
||||||
@@ -59,7 +57,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the chief engineer"
|
supervisors = "the chief engineer"
|
||||||
selection_color = "#5B4D20"
|
selection_color = "#5B4D20"
|
||||||
idtype = /obj/item/weapon/card/id/engineering/atmos
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
|
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
|
||||||
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
|
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
var/current_positions = 0 // How many players have this job
|
var/current_positions = 0 // How many players have this job
|
||||||
var/supervisors = null // Supervisors, who this person answers to directly
|
var/supervisors = null // Supervisors, who this person answers to directly
|
||||||
var/selection_color = "#ffffff" // Selection screen color
|
var/selection_color = "#ffffff" // Selection screen color
|
||||||
var/idtype = /obj/item/weapon/card/id // The type of the ID the player will have
|
|
||||||
var/list/alt_titles // List of alternate titles, if any
|
var/list/alt_titles // List of alternate titles, if any
|
||||||
var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
|
var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
|
||||||
var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
|
var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
|
||||||
@@ -21,6 +20,7 @@
|
|||||||
var/head_position = 0 // Is this position Command?
|
var/head_position = 0 // Is this position Command?
|
||||||
var/minimum_character_age = 0
|
var/minimum_character_age = 0
|
||||||
var/ideal_character_age = 30
|
var/ideal_character_age = 30
|
||||||
|
var/has_headset = TRUE //Do people with this job need to be given headsets and told how to use them? E.g. Cyborgs don't.
|
||||||
|
|
||||||
var/account_allowed = 1 // Does this job type come with a station account?
|
var/account_allowed = 1 // Does this job type come with a station account?
|
||||||
var/economic_modifier = 2 // With how much does this job modify the initial account amount?
|
var/economic_modifier = 2 // With how much does this job modify the initial account amount?
|
||||||
@@ -40,13 +40,6 @@
|
|||||||
. = . || outfit_type
|
. = . || outfit_type
|
||||||
. = outfit_by_type(.)
|
. = outfit_by_type(.)
|
||||||
|
|
||||||
/datum/job/proc/equip_backpack(var/mob/living/carbon/human/H)
|
|
||||||
switch(H.backbag)
|
|
||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
|
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
|
||||||
if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
|
|
||||||
|
|
||||||
/datum/job/proc/setup_account(var/mob/living/carbon/human/H)
|
/datum/job/proc/setup_account(var/mob/living/carbon/human/H)
|
||||||
if(!account_allowed || (H.mind && H.mind.initial_account))
|
if(!account_allowed || (H.mind && H.mind.initial_account))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the Colony Director"
|
supervisors = "the Colony Director"
|
||||||
selection_color = "#026865"
|
selection_color = "#026865"
|
||||||
idtype = /obj/item/weapon/card/id/medical/head
|
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
economic_modifier = 10
|
economic_modifier = 10
|
||||||
access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
||||||
@@ -35,7 +34,6 @@
|
|||||||
spawn_positions = 3
|
spawn_positions = 3
|
||||||
supervisors = "the chief medical officer"
|
supervisors = "the chief medical officer"
|
||||||
selection_color = "#013D3B"
|
selection_color = "#013D3B"
|
||||||
idtype = /obj/item/weapon/card/id/medical/doctor
|
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva)
|
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva)
|
||||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva)
|
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva)
|
||||||
@@ -57,7 +55,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the chief medical officer"
|
supervisors = "the chief medical officer"
|
||||||
selection_color = "#013D3B"
|
selection_color = "#013D3B"
|
||||||
idtype = /obj/item/weapon/card/id/medical/chemist
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
|
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
|
||||||
minimal_access = list(access_medical, access_medical_equip, access_chemistry)
|
minimal_access = list(access_medical, access_medical_equip, access_chemistry)
|
||||||
@@ -78,7 +75,6 @@
|
|||||||
spawn_positions = 0
|
spawn_positions = 0
|
||||||
supervisors = "the chief medical officer and research director"
|
supervisors = "the chief medical officer and research director"
|
||||||
selection_color = "#013D3B"
|
selection_color = "#013D3B"
|
||||||
idtype = /obj/item/weapon/card/id/medical/geneticist
|
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
|
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
|
||||||
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
|
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
|
||||||
@@ -97,7 +93,6 @@
|
|||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
supervisors = "the chief medical officer"
|
supervisors = "the chief medical officer"
|
||||||
selection_color = "#013D3B"
|
selection_color = "#013D3B"
|
||||||
idtype = /obj/item/weapon/card/id/medical/psychiatrist
|
|
||||||
access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist)
|
access = list(access_medical, access_medical_equip, access_morgue, access_psychiatrist)
|
||||||
minimal_access = list(access_medical, access_medical_equip, access_psychiatrist)
|
minimal_access = list(access_medical, access_medical_equip, access_psychiatrist)
|
||||||
outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist
|
outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist
|
||||||
@@ -113,7 +108,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the chief medical officer"
|
supervisors = "the chief medical officer"
|
||||||
selection_color = "#013D3B"
|
selection_color = "#013D3B"
|
||||||
idtype = /obj/item/weapon/card/id/medical/paramedic
|
|
||||||
economic_modifier = 4
|
economic_modifier = 4
|
||||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist)
|
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_eva, access_maint_tunnels, access_external_airlocks, access_psychiatrist)
|
||||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks)
|
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the Colony Director"
|
supervisors = "the Colony Director"
|
||||||
selection_color = "#AD6BAD"
|
selection_color = "#AD6BAD"
|
||||||
idtype = /obj/item/weapon/card/id/science/head
|
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
economic_modifier = 15
|
economic_modifier = 15
|
||||||
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||||
@@ -39,7 +38,6 @@
|
|||||||
spawn_positions = 3
|
spawn_positions = 3
|
||||||
supervisors = "the research director"
|
supervisors = "the research director"
|
||||||
selection_color = "#633D63"
|
selection_color = "#633D63"
|
||||||
idtype = /obj/item/weapon/card/id/science/scientist
|
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
|
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
|
||||||
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch)
|
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch)
|
||||||
@@ -59,7 +57,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the research director"
|
supervisors = "the research director"
|
||||||
selection_color = "#633D63"
|
selection_color = "#633D63"
|
||||||
idtype = /obj/item/weapon/card/id/science/xenobiologist
|
|
||||||
economic_modifier = 7
|
economic_modifier = 7
|
||||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics)
|
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_hydroponics)
|
||||||
minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage)
|
minimal_access = list(access_research, access_xenobiology, access_hydroponics, access_tox_storage)
|
||||||
@@ -79,7 +76,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "research director"
|
supervisors = "research director"
|
||||||
selection_color = "#633D63"
|
selection_color = "#633D63"
|
||||||
idtype = /obj/item/weapon/card/id/science/roboticist
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||||
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the Colony Director"
|
supervisors = "the Colony Director"
|
||||||
selection_color = "#8E2929"
|
selection_color = "#8E2929"
|
||||||
idtype = /obj/item/weapon/card/id/security/head
|
|
||||||
req_admin_notify = 1
|
req_admin_notify = 1
|
||||||
economic_modifier = 10
|
economic_modifier = 10
|
||||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||||
@@ -36,7 +35,6 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "the head of security"
|
supervisors = "the head of security"
|
||||||
selection_color = "#601C1C"
|
selection_color = "#601C1C"
|
||||||
idtype = /obj/item/weapon/card/id/security/warden
|
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
||||||
@@ -53,7 +51,6 @@
|
|||||||
spawn_positions = 2
|
spawn_positions = 2
|
||||||
supervisors = "the head of security"
|
supervisors = "the head of security"
|
||||||
selection_color = "#601C1C"
|
selection_color = "#601C1C"
|
||||||
idtype = /obj/item/weapon/card/id/security/detective
|
|
||||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
||||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
|
||||||
economic_modifier = 5
|
economic_modifier = 5
|
||||||
@@ -71,7 +68,6 @@
|
|||||||
spawn_positions = 4
|
spawn_positions = 4
|
||||||
supervisors = "the head of security"
|
supervisors = "the head of security"
|
||||||
selection_color = "#601C1C"
|
selection_color = "#601C1C"
|
||||||
idtype = /obj/item/weapon/card/id/security/officer
|
|
||||||
economic_modifier = 4
|
economic_modifier = 4
|
||||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
|
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
|
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
|
||||||
|
|||||||
@@ -11,18 +11,11 @@
|
|||||||
minimal_player_age = 7
|
minimal_player_age = 7
|
||||||
account_allowed = 0
|
account_allowed = 0
|
||||||
economic_modifier = 0
|
economic_modifier = 0
|
||||||
|
has_headset = FALSE
|
||||||
|
|
||||||
/datum/job/ai/equip(var/mob/living/carbon/human/H)
|
/datum/job/ai/equip(var/mob/living/carbon/human/H)
|
||||||
if(!H) return 0
|
if(!H) return 0
|
||||||
return 1
|
return 1
|
||||||
/*
|
|
||||||
/datum/job/ai/equip_survival(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
return 1
|
|
||||||
*/
|
|
||||||
/datum/job/ai/equip_backpack(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/datum/job/ai/is_position_available()
|
/datum/job/ai/is_position_available()
|
||||||
return (empty_playable_ai_cores.len != 0)
|
return (empty_playable_ai_cores.len != 0)
|
||||||
@@ -45,19 +38,11 @@
|
|||||||
alt_titles = list("Robot", "Drone")
|
alt_titles = list("Robot", "Drone")
|
||||||
account_allowed = 0
|
account_allowed = 0
|
||||||
economic_modifier = 0
|
economic_modifier = 0
|
||||||
|
has_headset = FALSE
|
||||||
|
|
||||||
/datum/job/cyborg/equip(var/mob/living/carbon/human/H)
|
/datum/job/cyborg/equip(var/mob/living/carbon/human/H)
|
||||||
if(!H) return 0
|
if(!H) return 0
|
||||||
return 1
|
return 1
|
||||||
/*
|
|
||||||
/datum/job/cyborg/equip_survival(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
return 1
|
|
||||||
*/
|
|
||||||
/datum/job/cyborg/equip_backpack(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
return 1
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/datum/job/cyborg/equip_preview(mob/living/carbon/human/H)
|
/datum/job/cyborg/equip_preview(mob/living/carbon/human/H)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/cardborg(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/cardborg(H), slot_wear_suit)
|
||||||
|
|||||||
@@ -7,35 +7,17 @@
|
|||||||
spawn_positions = 1
|
spawn_positions = 1
|
||||||
supervisors = "company officials and Corporate Regulations"
|
supervisors = "company officials and Corporate Regulations"
|
||||||
selection_color = "#1D1D4F"
|
selection_color = "#1D1D4F"
|
||||||
idtype = /obj/item/weapon/card/id/centcom
|
|
||||||
access = list()
|
access = list()
|
||||||
minimal_access = list()
|
minimal_access = list()
|
||||||
minimal_player_age = 14
|
minimal_player_age = 14
|
||||||
economic_modifier = 20
|
economic_modifier = 20
|
||||||
whitelist_only = 1
|
whitelist_only = 1
|
||||||
latejoin_only = 1
|
latejoin_only = 1
|
||||||
|
outfit_type = /decl/hierarchy/outfit/job/centcom_officer
|
||||||
|
|
||||||
minimum_character_age = 25
|
minimum_character_age = 25
|
||||||
ideal_character_age = 40
|
ideal_character_age = 40
|
||||||
|
|
||||||
equip(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(H), slot_l_ear)
|
|
||||||
switch(H.backbag)
|
|
||||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
|
||||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
|
||||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom, slot_w_uniform)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/centcom(H), slot_belt)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(H), slot_gloves)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/omnihud/all(H), slot_l_store)
|
|
||||||
|
|
||||||
H.implant_loyalty()
|
|
||||||
|
|
||||||
return 1
|
|
||||||
|
|
||||||
get_access()
|
get_access()
|
||||||
return get_all_accesses().Copy()
|
return get_all_accesses().Copy()
|
||||||
|
|
||||||
@@ -97,23 +79,7 @@
|
|||||||
alt_titles = list("Comedian","Jester")
|
alt_titles = list("Comedian","Jester")
|
||||||
whitelist_only = 1
|
whitelist_only = 1
|
||||||
latejoin_only = 1
|
latejoin_only = 1
|
||||||
|
outfit_type = /decl/hierarchy/outfit/job/clown
|
||||||
equip(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/clown(H), slot_back)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/clown(H), slot_belt)
|
|
||||||
|
|
||||||
if(H.backbag > 0)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H.back), slot_in_backpack)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H.back), slot_in_backpack) //VOREStation Edit
|
|
||||||
else
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_l_hand)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H.back), slot_l_hand) //VOREStation Edit
|
|
||||||
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/datum/job/clown/get_access()
|
/datum/job/clown/get_access()
|
||||||
if(config.assistant_maint)
|
if(config.assistant_maint)
|
||||||
@@ -137,22 +103,7 @@
|
|||||||
alt_titles = list("Performer","Interpretive Dancer")
|
alt_titles = list("Performer","Interpretive Dancer")
|
||||||
whitelist_only = 1
|
whitelist_only = 1
|
||||||
latejoin_only = 1
|
latejoin_only = 1
|
||||||
|
outfit_type = /decl/hierarchy/outfit/job/mime
|
||||||
equip(var/mob/living/carbon/human/H)
|
|
||||||
if(!H) return 0
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/mime(H), slot_w_uniform)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/mime(H), slot_shoes)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/soft/mime(H), slot_head)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/pda/mime(H), slot_belt)
|
|
||||||
|
|
||||||
if(H.backbag > 0)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H.back), slot_in_backpack)
|
|
||||||
else
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/pen/crayon/mime(H), slot_l_hand)
|
|
||||||
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/datum/job/mime/get_access()
|
/datum/job/mime/get_access()
|
||||||
if(config.assistant_maint)
|
if(config.assistant_maint)
|
||||||
|
|||||||
@@ -380,7 +380,7 @@ var/global/datum/controller/occupations/job_master
|
|||||||
else
|
else
|
||||||
permitted = 1
|
permitted = 1
|
||||||
|
|
||||||
if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
|
if(G.whitelisted && !is_alien_whitelisted(H, GLOB.all_species[G.whitelisted]))
|
||||||
|
|
||||||
//if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted)))
|
//if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted)))
|
||||||
permitted = 0
|
permitted = 0
|
||||||
@@ -411,8 +411,6 @@ var/global/datum/controller/occupations/job_master
|
|||||||
//Equip job items.
|
//Equip job items.
|
||||||
job.setup_account(H)
|
job.setup_account(H)
|
||||||
job.equip(H, H.mind ? H.mind.role_alt_title : "")
|
job.equip(H, H.mind ? H.mind.role_alt_title : "")
|
||||||
job.equip_backpack(H)
|
|
||||||
// job.equip_survival(H)
|
|
||||||
job.apply_fingerprints(H)
|
job.apply_fingerprints(H)
|
||||||
if(job.title != "Cyborg" && job.title != "AI")
|
if(job.title != "Cyborg" && job.title != "AI")
|
||||||
H.equip_post_job()
|
H.equip_post_job()
|
||||||
@@ -499,9 +497,7 @@ var/global/datum/controller/occupations/job_master
|
|||||||
|
|
||||||
if(job.supervisors)
|
if(job.supervisors)
|
||||||
H << "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>"
|
H << "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>"
|
||||||
|
if(job.has_headset)
|
||||||
if(job.idtype)
|
|
||||||
spawnId(H, rank, alt_title)
|
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
|
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
|
||||||
H << "<b>To speak on your department's radio channel use :h. For the use of other channels, examine your headset.</b>"
|
H << "<b>To speak on your department's radio channel use :h. For the use of other channels, examine your headset.</b>"
|
||||||
|
|
||||||
@@ -543,48 +539,6 @@ var/global/datum/controller/occupations/job_master
|
|||||||
BITSET(H.hud_updateflag, SPECIALROLE_HUD)
|
BITSET(H.hud_updateflag, SPECIALROLE_HUD)
|
||||||
return H
|
return H
|
||||||
|
|
||||||
|
|
||||||
proc/spawnId(var/mob/living/carbon/human/H, rank, title)
|
|
||||||
if(!H) return 0
|
|
||||||
var/obj/item/weapon/card/id/C = H.get_equipped_item(slot_wear_id)
|
|
||||||
if(istype(C)) return 0
|
|
||||||
|
|
||||||
var/datum/job/job = null
|
|
||||||
for(var/datum/job/J in occupations)
|
|
||||||
if(J.title == rank)
|
|
||||||
job = J
|
|
||||||
break
|
|
||||||
|
|
||||||
if(job)
|
|
||||||
if(job.title == "Cyborg")
|
|
||||||
return
|
|
||||||
else
|
|
||||||
C = new job.idtype(H)
|
|
||||||
C.access = job.get_access()
|
|
||||||
else
|
|
||||||
C = new /obj/item/weapon/card/id(H)
|
|
||||||
if(C)
|
|
||||||
C.rank = rank
|
|
||||||
C.assignment = title ? title : rank
|
|
||||||
H.set_id_info(C)
|
|
||||||
|
|
||||||
//put the player's account number onto the ID
|
|
||||||
if(H.mind && H.mind.initial_account)
|
|
||||||
C.associated_account_number = H.mind.initial_account.account_number
|
|
||||||
|
|
||||||
H.equip_to_slot_or_del(C, slot_wear_id)
|
|
||||||
|
|
||||||
// H.equip_to_slot_or_del(new /obj/item/device/pda(H), slot_belt)
|
|
||||||
if(locate(/obj/item/device/pda,H))
|
|
||||||
var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H)
|
|
||||||
pda.owner = H.real_name
|
|
||||||
pda.ownjob = C.assignment
|
|
||||||
pda.ownrank = C.rank
|
|
||||||
pda.name = "PDA-[H.real_name] ([pda.ownjob])"
|
|
||||||
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
|
proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
|
||||||
if(!config.load_jobs_from_txt)
|
if(!config.load_jobs_from_txt)
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -236,9 +236,9 @@
|
|||||||
malfunctioned = TRUE
|
malfunctioned = TRUE
|
||||||
var/possible_species = list(SPECIES_HUMAN, SPECIES_VOX, SPECIES_SKRELL, SPECIES_ZADDAT, SPECIES_UNATHI, SPECIES_GOLEM, SPECIES_SHADOW)
|
var/possible_species = list(SPECIES_HUMAN, SPECIES_VOX, SPECIES_SKRELL, SPECIES_ZADDAT, SPECIES_UNATHI, SPECIES_GOLEM, SPECIES_SHADOW)
|
||||||
var/new_species = pick(possible_species)
|
var/new_species = pick(possible_species)
|
||||||
if(!all_species[new_species])
|
if(!GLOB.all_species[new_species])
|
||||||
new_species = SPECIES_HUMAN
|
new_species = SPECIES_HUMAN
|
||||||
O.species = all_species[new_species]
|
O.species = GLOB.all_species[new_species]
|
||||||
|
|
||||||
if(istype(O, /obj/item/organ/external) && !malfunctioned)
|
if(istype(O, /obj/item/organ/external) && !malfunctioned)
|
||||||
var/obj/item/organ/external/E = O
|
var/obj/item/organ/external/E = O
|
||||||
|
|||||||
@@ -314,7 +314,7 @@
|
|||||||
//Stolen from status_display
|
//Stolen from status_display
|
||||||
/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0)
|
/obj/machinery/door_timer/proc/texticon(var/tn, var/px = 0, var/py = 0)
|
||||||
var/image/I = image('icons/obj/status_display.dmi', "blank")
|
var/image/I = image('icons/obj/status_display.dmi', "blank")
|
||||||
var/len = lentext(tn)
|
var/len = length(tn)
|
||||||
|
|
||||||
for(var/d = 1 to len)
|
for(var/d = 1 to len)
|
||||||
var/char = copytext(tn, len-d+1, len-d+2)
|
var/char = copytext(tn, len-d+1, len-d+2)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
message2 = "Error"
|
message2 = "Error"
|
||||||
else if(shuttle.has_arrive_time())
|
else if(shuttle.has_arrive_time())
|
||||||
message2 = get_supply_shuttle_timer()
|
message2 = get_supply_shuttle_timer()
|
||||||
if(lentext(message2) > CHARS_PER_LINE)
|
if(length(message2) > CHARS_PER_LINE)
|
||||||
message2 = "Error"
|
message2 = "Error"
|
||||||
else if(shuttle.is_launching())
|
else if(shuttle.is_launching())
|
||||||
if(shuttle.at_station())
|
if(shuttle.at_station())
|
||||||
|
|||||||
@@ -1246,3 +1246,64 @@
|
|||||||
premium = list(/obj/item/clothing/suit/imperium_monk = 3)
|
premium = list(/obj/item/clothing/suit/imperium_monk = 3)
|
||||||
contraband = list(/obj/item/clothing/head/syndicatefake = 1,
|
contraband = list(/obj/item/clothing/head/syndicatefake = 1,
|
||||||
/obj/item/clothing/suit/syndicatefake = 1)
|
/obj/item/clothing/suit/syndicatefake = 1)
|
||||||
|
|
||||||
|
//TFF 19/12/19 - Brig version of a seed storage vendor
|
||||||
|
/obj/machinery/seed_storage/brig
|
||||||
|
name = "Prisoners' food seed storage"
|
||||||
|
starting_seeds = list(
|
||||||
|
/obj/item/seeds/appleseed = 3,
|
||||||
|
/obj/item/seeds/bananaseed = 3,
|
||||||
|
/obj/item/seeds/berryseed = 3,
|
||||||
|
/obj/item/seeds/cabbageseed = 3,
|
||||||
|
/obj/item/seeds/carrotseed = 3,
|
||||||
|
/obj/item/seeds/celery = 3,
|
||||||
|
/obj/item/seeds/chantermycelium = 3,
|
||||||
|
/obj/item/seeds/cherryseed = 3,
|
||||||
|
/obj/item/seeds/chiliseed = 3,
|
||||||
|
/obj/item/seeds/cocoapodseed = 3,
|
||||||
|
/obj/item/seeds/cornseed = 3,
|
||||||
|
/obj/item/seeds/durian = 3,
|
||||||
|
/obj/item/seeds/eggplantseed = 3,
|
||||||
|
/obj/item/seeds/grapeseed = 3,
|
||||||
|
/obj/item/seeds/grassseed = 3,
|
||||||
|
/obj/item/seeds/replicapod = 3,
|
||||||
|
/obj/item/seeds/lavenderseed = 3,
|
||||||
|
/obj/item/seeds/lemonseed = 3,
|
||||||
|
/obj/item/seeds/lettuce = 3,
|
||||||
|
/obj/item/seeds/limeseed = 3,
|
||||||
|
/obj/item/seeds/mtearseed = 2,
|
||||||
|
/obj/item/seeds/orangeseed = 3,
|
||||||
|
/obj/item/seeds/onionseed = 3,
|
||||||
|
/obj/item/seeds/peanutseed = 3,
|
||||||
|
/obj/item/seeds/plumpmycelium = 3,
|
||||||
|
/obj/item/seeds/poppyseed = 3,
|
||||||
|
/obj/item/seeds/potatoseed = 3,
|
||||||
|
/obj/item/seeds/pumpkinseed = 3,
|
||||||
|
/obj/item/seeds/rhubarb = 3,
|
||||||
|
/obj/item/seeds/riceseed = 3,
|
||||||
|
/obj/item/seeds/rose = 3,
|
||||||
|
/obj/item/seeds/soyaseed = 3,
|
||||||
|
/obj/item/seeds/spineapple = 3,
|
||||||
|
/obj/item/seeds/sugarcaneseed = 3,
|
||||||
|
/obj/item/seeds/sunflowerseed = 3,
|
||||||
|
/obj/item/seeds/shandseed = 2,
|
||||||
|
/obj/item/seeds/tobaccoseed = 3,
|
||||||
|
/obj/item/seeds/tomatoseed = 3,
|
||||||
|
/obj/item/seeds/towermycelium = 3,
|
||||||
|
/obj/item/seeds/vanilla = 3,
|
||||||
|
/obj/item/seeds/watermelonseed = 3,
|
||||||
|
/obj/item/seeds/wheatseed = 3,
|
||||||
|
/obj/item/seeds/whitebeetseed = 3,
|
||||||
|
/obj/item/seeds/wabback = 2)
|
||||||
|
|
||||||
|
//TFF 19/12/19 - Brig version of a Nutrimax
|
||||||
|
/obj/machinery/vending/hydronutrients/brig
|
||||||
|
name = "Brig NutriMax"
|
||||||
|
desc = "A plant nutrients vendor. Seems some items aren't included."
|
||||||
|
product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!"
|
||||||
|
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
|
||||||
|
icon_state = "nutri"
|
||||||
|
icon_deny = "nutri-deny"
|
||||||
|
products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20,
|
||||||
|
/obj/item/weapon/reagent_containers/glass/beaker = 4,/obj/item/weapon/storage/bag/plants = 5)
|
||||||
|
premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
|
||||||
|
|||||||
@@ -180,10 +180,14 @@
|
|||||||
The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\
|
The poster's captions explain the importance of knowing how to operate a mechatronic vehicle safely, especially near other personnel.\
|
||||||
The image seems important."
|
The image seems important."
|
||||||
|
|
||||||
|
//VOREStation Removal Start TFF 17/12/19 - lore not used in our station's own lore.
|
||||||
|
/*
|
||||||
/datum/poster/nanotrasen/nt_4
|
/datum/poster/nanotrasen/nt_4
|
||||||
icon_state = "ntposter04"
|
icon_state = "ntposter04"
|
||||||
name = "Beware Aetotheans"
|
name = "Beware Aetotheans"
|
||||||
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
|
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
|
||||||
|
*/
|
||||||
|
//VOREstation Removal End
|
||||||
|
|
||||||
/datum/poster/nanotrasen/nt_5
|
/datum/poster/nanotrasen/nt_5
|
||||||
icon_state = "ntposter05"
|
icon_state = "ntposter05"
|
||||||
|
|||||||
@@ -74,16 +74,22 @@
|
|||||||
switch(drawtype)
|
switch(drawtype)
|
||||||
if("letter")
|
if("letter")
|
||||||
drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||||
if(get_dist(target, user) > 1 || !(user.z == target.z))
|
if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype)
|
||||||
return
|
return
|
||||||
to_chat(user, "You start drawing a letter on the [target.name].")
|
to_chat(user, "You start drawing a letter on the [target.name].")
|
||||||
if("graffiti")
|
if("graffiti")
|
||||||
|
drawtype = input("Choose the graffiti.", "Crayon scribbles") in list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
|
||||||
|
if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype)
|
||||||
|
return
|
||||||
to_chat(user, "You start drawing graffiti on the [target.name].")
|
to_chat(user, "You start drawing graffiti on the [target.name].")
|
||||||
if("rune")
|
if("rune")
|
||||||
|
drawtype = input("Choose the rune.", "Crayon scribbles") in list("rune1", "rune2", "rune3", "rune4", "rune5", "rune6")
|
||||||
|
if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype)
|
||||||
|
return
|
||||||
to_chat(user, "You start drawing a rune on the [target.name].")
|
to_chat(user, "You start drawing a rune on the [target.name].")
|
||||||
if("arrow")
|
if("arrow")
|
||||||
drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down")
|
drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down")
|
||||||
if(get_dist(target, user) > 1 || !(user.z == target.z))
|
if(get_dist(target, user) > 1 || !(user.z == target.z) || !drawtype)
|
||||||
return
|
return
|
||||||
to_chat(user, "You start drawing an arrow on the [target.name].")
|
to_chat(user, "You start drawing an arrow on the [target.name].")
|
||||||
if(instant || do_after(user, 50))
|
if(instant || do_after(user, 50))
|
||||||
|
|||||||
@@ -63,6 +63,11 @@
|
|||||||
if(ghost.exonet)
|
if(ghost.exonet)
|
||||||
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(ghost.name), "address" = ghost.exonet.address, "ref" = "\ref[ghost]")
|
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(ghost.name), "address" = ghost.exonet.address, "ref" = "\ref[ghost]")
|
||||||
|
|
||||||
|
for(var/obj/item/integrated_circuit/input/EPv2/CIRC in im_contacts)
|
||||||
|
if(CIRC.exonet && CIRC.assembly)
|
||||||
|
im_contacts_ui[++im_contacts_ui.len] = list("name" = sanitize(CIRC.assembly.name), "address" = CIRC.exonet.address, "ref" = "\ref[CIRC]")
|
||||||
|
|
||||||
|
|
||||||
//Actual messages.
|
//Actual messages.
|
||||||
for(var/I in im_list)
|
for(var/I in im_list)
|
||||||
im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
|
im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
|
||||||
|
|||||||
@@ -1,162 +1,166 @@
|
|||||||
// Proc: receive_exonet_message()
|
// Proc: receive_exonet_message()
|
||||||
// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received,
|
// Parameters: 4 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received,
|
||||||
// text - message text to send if message is of type "text")
|
// text - message text to send if message is of type "text")
|
||||||
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function.
|
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response and IM function.
|
||||||
/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text)
|
/obj/item/device/communicator/receive_exonet_message(var/atom/origin_atom, origin_address, message, text)
|
||||||
if(message == "voice")
|
if(message == "voice")
|
||||||
if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator))
|
if(isobserver(origin_atom) || istype(origin_atom, /obj/item/device/communicator))
|
||||||
if(origin_atom in voice_invites)
|
if(origin_atom in voice_invites)
|
||||||
var/user = null
|
var/user = null
|
||||||
if(ismob(origin_atom.loc))
|
if(ismob(origin_atom.loc))
|
||||||
user = origin_atom.loc
|
user = origin_atom.loc
|
||||||
open_connection(user, origin_atom)
|
open_connection(user, origin_atom)
|
||||||
return
|
return
|
||||||
else if(origin_atom in voice_requests)
|
else if(origin_atom in voice_requests)
|
||||||
return //Spam prevention
|
return //Spam prevention
|
||||||
else
|
else
|
||||||
request(origin_atom)
|
request(origin_atom)
|
||||||
if(message == "ping")
|
if(message == "ping")
|
||||||
if(network_visibility)
|
if(network_visibility)
|
||||||
var/random = rand(200,350)
|
var/random = rand(200,350)
|
||||||
random = random / 10
|
random = random / 10
|
||||||
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
|
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
|
||||||
if(message == "text")
|
if(message == "text")
|
||||||
request_im(origin_atom, origin_address, text)
|
request_im(origin_atom, origin_address, text)
|
||||||
return
|
return
|
||||||
|
|
||||||
// Proc: receive_exonet_message()
|
// Proc: receive_exonet_message()
|
||||||
// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received)
|
// Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received)
|
||||||
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response.
|
// Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response.
|
||||||
/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text)
|
/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message, text)
|
||||||
if(message == "voice")
|
if(message == "voice")
|
||||||
if(istype(origin_atom, /obj/item/device/communicator))
|
if(istype(origin_atom, /obj/item/device/communicator))
|
||||||
var/obj/item/device/communicator/comm = origin_atom
|
var/obj/item/device/communicator/comm = origin_atom
|
||||||
if(src in comm.voice_invites)
|
if(src in comm.voice_invites)
|
||||||
comm.open_connection(src)
|
comm.open_connection(src)
|
||||||
return
|
return
|
||||||
to_chat(src, "<span class='notice'>\icon[origin_atom] Receiving communicator request from [origin_atom]. To answer, use the <b>Call Communicator</b> \
|
to_chat(src, "<span class='notice'>\icon[origin_atom] Receiving communicator request from [origin_atom]. To answer, use the <b>Call Communicator</b> \
|
||||||
verb, and select that name to answer the call.</span>")
|
verb, and select that name to answer the call.</span>")
|
||||||
src << 'sound/machines/defib_SafetyOn.ogg'
|
src << 'sound/machines/defib_SafetyOn.ogg'
|
||||||
comm.voice_invites |= src
|
comm.voice_invites |= src
|
||||||
if(message == "ping")
|
if(message == "ping")
|
||||||
if(client && client.prefs.communicator_visibility)
|
if(client && client.prefs.communicator_visibility)
|
||||||
var/random = rand(450,700)
|
var/random = rand(450,700)
|
||||||
random = random / 10
|
random = random / 10
|
||||||
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
|
exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms")
|
||||||
if(message == "text")
|
if(message == "text")
|
||||||
to_chat(src, "<span class='notice'>\icon[origin_atom] Received text message from [origin_atom]: <b>\"[text]\"</b></span>")
|
to_chat(src, "<span class='notice'>\icon[origin_atom] Received text message from [origin_atom]: <b>\"[text]\"</b></span>")
|
||||||
src << 'sound/machines/defib_safetyOff.ogg'
|
src << 'sound/machines/defib_safetyOff.ogg'
|
||||||
exonet_messages.Add("<b>From [origin_atom]:</b><br>[text]")
|
exonet_messages.Add("<b>From [origin_atom]:</b><br>[text]")
|
||||||
return
|
return
|
||||||
|
|
||||||
// Proc: request_im()
|
// Proc: request_im()
|
||||||
// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message)
|
// Parameters: 3 (candidate - the communicator wanting to message the device, origin_address - the address of the sender, text - the message)
|
||||||
// Description: Response to a communicator trying to message the device.
|
// Description: Response to a communicator trying to message the device.
|
||||||
// Adds them to the list of people that have messaged this device and adds the message to the message list.
|
// Adds them to the list of people that have messaged this device and adds the message to the message list.
|
||||||
/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text)
|
/obj/item/device/communicator/proc/request_im(var/atom/candidate, var/origin_address, var/text)
|
||||||
var/who = null
|
var/who = null
|
||||||
if(isobserver(candidate))
|
if(isobserver(candidate))
|
||||||
var/mob/observer/dead/ghost = candidate
|
var/mob/observer/dead/ghost = candidate
|
||||||
who = ghost
|
who = ghost
|
||||||
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
|
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
|
||||||
else if(istype(candidate, /obj/item/device/communicator))
|
else if(istype(candidate, /obj/item/device/communicator))
|
||||||
var/obj/item/device/communicator/comm = candidate
|
var/obj/item/device/communicator/comm = candidate
|
||||||
who = comm.owner
|
who = comm.owner
|
||||||
comm.im_contacts |= src
|
comm.im_contacts |= src
|
||||||
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
|
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
|
||||||
else return
|
else if(istype(candidate, /obj/item/integrated_circuit))
|
||||||
|
var/obj/item/integrated_circuit/CIRC = candidate
|
||||||
im_contacts |= candidate
|
who = CIRC
|
||||||
|
im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text))
|
||||||
if(!who)
|
else return
|
||||||
return
|
|
||||||
|
im_contacts |= candidate
|
||||||
if(ringer)
|
|
||||||
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
if(!who)
|
||||||
for (var/mob/O in hearers(2, loc))
|
return
|
||||||
O.show_message(text("\icon[src] *beep*"))
|
|
||||||
|
if(ringer)
|
||||||
alert_called = 1
|
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||||
update_icon()
|
for (var/mob/O in hearers(2, loc))
|
||||||
|
O.show_message(text("\icon[src] *beep*"))
|
||||||
//Search for holder of the device.
|
|
||||||
var/mob/living/L = null
|
alert_called = 1
|
||||||
if(loc && isliving(loc))
|
update_icon()
|
||||||
L = loc
|
|
||||||
|
//Search for holder of the device.
|
||||||
if(L)
|
var/mob/living/L = null
|
||||||
to_chat(L, "<span class='notice'>\icon[src] Message from [who].</span>")
|
if(loc && isliving(loc))
|
||||||
|
L = loc
|
||||||
// Verb: text_communicator()
|
|
||||||
// Parameters: None
|
if(L)
|
||||||
// Description: Allows a ghost to send a text message to a communicator.
|
to_chat(L, "<span class='notice'>\icon[src] Message from [who].</span>")
|
||||||
/mob/observer/dead/verb/text_communicator()
|
|
||||||
set category = "Ghost"
|
// Verb: text_communicator()
|
||||||
set name = "Text Communicator"
|
// Parameters: None
|
||||||
set desc = "If there is a communicator available, send a text message to it."
|
// Description: Allows a ghost to send a text message to a communicator.
|
||||||
|
/mob/observer/dead/verb/text_communicator()
|
||||||
if(ticker.current_state < GAME_STATE_PLAYING)
|
set category = "Ghost"
|
||||||
to_chat(src, "<span class='danger'>The game hasn't started yet!</span>")
|
set name = "Text Communicator"
|
||||||
return
|
set desc = "If there is a communicator available, send a text message to it."
|
||||||
|
|
||||||
if (!src.stat)
|
if(ticker.current_state < GAME_STATE_PLAYING)
|
||||||
return
|
to_chat(src, "<span class='danger'>The game hasn't started yet!</span>")
|
||||||
|
return
|
||||||
if (usr != src)
|
|
||||||
return //something is terribly wrong
|
if (!src.stat)
|
||||||
|
return
|
||||||
for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling.
|
|
||||||
if(src.client.prefs.real_name == L.real_name)
|
if (usr != src)
|
||||||
to_chat(src, "<span class='danger'>Your identity is already present in the game world. Please load in a different character first.</span>")
|
return //something is terribly wrong
|
||||||
return
|
|
||||||
|
for(var/mob/living/L in mob_list) //Simple check so you don't have dead people calling.
|
||||||
var/obj/machinery/exonet_node/E = get_exonet_node()
|
if(src.client.prefs.real_name == L.real_name)
|
||||||
if(!E || !E.on || !E.allow_external_communicators)
|
to_chat(src, "<span class='danger'>Your identity is already present in the game world. Please load in a different character first.</span>")
|
||||||
to_chat(src, "<span class='danger'>The Exonet node at telecommunications is down at the moment, or is actively blocking you, \
|
return
|
||||||
so your call can't go through.</span>")
|
|
||||||
return
|
var/obj/machinery/exonet_node/E = get_exonet_node()
|
||||||
|
if(!E || !E.on || !E.allow_external_communicators)
|
||||||
var/list/choices = list()
|
to_chat(src, "<span class='danger'>The Exonet node at telecommunications is down at the moment, or is actively blocking you, \
|
||||||
for(var/obj/item/device/communicator/comm in all_communicators)
|
so your call can't go through.</span>")
|
||||||
if(!comm.network_visibility || !comm.exonet || !comm.exonet.address)
|
return
|
||||||
continue
|
|
||||||
choices.Add(comm)
|
var/list/choices = list()
|
||||||
|
for(var/obj/item/device/communicator/comm in all_communicators)
|
||||||
if(!choices.len)
|
if(!comm.network_visibility || !comm.exonet || !comm.exonet.address)
|
||||||
to_chat(src, "<span class='danger'>There are no available communicators, sorry.</span>")
|
continue
|
||||||
return
|
choices.Add(comm)
|
||||||
|
|
||||||
var/choice = input(src,"Send a text message to whom?") as null|anything in choices
|
if(!choices.len)
|
||||||
if(choice)
|
to_chat(src, "<span class='danger'>There are no available communicators, sorry.</span>")
|
||||||
var/obj/item/device/communicator/chosen_communicator = choice
|
return
|
||||||
var/mob/observer/dead/O = src
|
|
||||||
var/text_message = sanitize(input(src, "What do you want the message to say?")) as message
|
var/choice = input(src,"Send a text message to whom?") as null|anything in choices
|
||||||
if(text_message && O.exonet)
|
if(choice)
|
||||||
O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message)
|
var/obj/item/device/communicator/chosen_communicator = choice
|
||||||
|
var/mob/observer/dead/O = src
|
||||||
to_chat(src, "<span class='notice'>You have sent '[text_message]' to [chosen_communicator].</span>")
|
var/text_message = sanitize(input(src, "What do you want the message to say?")) as message
|
||||||
exonet_messages.Add("<b>To [chosen_communicator]:</b><br>[text_message]")
|
if(text_message && O.exonet)
|
||||||
log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src)
|
O.exonet.send_message(chosen_communicator.exonet.address, "text", text_message)
|
||||||
for(var/mob/M in player_list)
|
|
||||||
if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
to_chat(src, "<span class='notice'>You have sent '[text_message]' to [chosen_communicator].</span>")
|
||||||
if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat)
|
exonet_messages.Add("<b>To [chosen_communicator]:</b><br>[text_message]")
|
||||||
continue
|
log_pda("(DCOMM: [src]) sent \"[text_message]\" to [chosen_communicator]", src)
|
||||||
if(M == src)
|
for(var/mob/M in player_list)
|
||||||
continue
|
if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||||
M.show_message("Comm IM - [src] -> [chosen_communicator]: [text_message]")
|
if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat)
|
||||||
|
continue
|
||||||
|
if(M == src)
|
||||||
|
continue
|
||||||
// Verb: show_text_messages()
|
M.show_message("Comm IM - [src] -> [chosen_communicator]: [text_message]")
|
||||||
// Parameters: None
|
|
||||||
// Description: Lets ghosts review messages they've sent or received.
|
|
||||||
/mob/observer/dead/verb/show_text_messages()
|
|
||||||
set category = "Ghost"
|
// Verb: show_text_messages()
|
||||||
set name = "Show Text Messages"
|
// Parameters: None
|
||||||
set desc = "Allows you to see exonet text messages you've sent and received."
|
// Description: Lets ghosts review messages they've sent or received.
|
||||||
|
/mob/observer/dead/verb/show_text_messages()
|
||||||
var/HTML = "<html><head><title>Exonet Message Log</title></head><body>"
|
set category = "Ghost"
|
||||||
for(var/line in exonet_messages)
|
set name = "Show Text Messages"
|
||||||
HTML += line + "<br>"
|
set desc = "Allows you to see exonet text messages you've sent and received."
|
||||||
HTML +="</body></html>"
|
|
||||||
usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
|
var/HTML = "<html><head><title>Exonet Message Log</title></head><body>"
|
||||||
|
for(var/line in exonet_messages)
|
||||||
|
HTML += line + "<br>"
|
||||||
|
HTML +="</body></html>"
|
||||||
|
usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
|
||||||
|
|||||||
@@ -54,6 +54,11 @@
|
|||||||
var/failmsg = ""
|
var/failmsg = ""
|
||||||
var/charge = 0
|
var/charge = 0
|
||||||
|
|
||||||
|
// Eating used bulbs gives us bulb shards
|
||||||
|
var/bulb_shards = 0
|
||||||
|
// when we get this many shards, we get a free bulb.
|
||||||
|
var/shards_required = 4
|
||||||
|
|
||||||
/obj/item/device/lightreplacer/New()
|
/obj/item/device/lightreplacer/New()
|
||||||
failmsg = "The [name]'s refill light blinks red."
|
failmsg = "The [name]'s refill light blinks red."
|
||||||
..()
|
..()
|
||||||
@@ -76,18 +81,55 @@
|
|||||||
to_chat(user, "<span class='warning'>You need one sheet of glass to replace lights.</span>")
|
to_chat(user, "<span class='warning'>You need one sheet of glass to replace lights.</span>")
|
||||||
|
|
||||||
if(istype(W, /obj/item/weapon/light))
|
if(istype(W, /obj/item/weapon/light))
|
||||||
|
var/new_bulbs = 0
|
||||||
var/obj/item/weapon/light/L = W
|
var/obj/item/weapon/light/L = W
|
||||||
if(L.status == 0) // LIGHT OKAY
|
if(L.status == 0) // LIGHT OKAY
|
||||||
if(uses < max_uses)
|
if(uses < max_uses)
|
||||||
|
if(!user.unEquip(W))
|
||||||
|
return
|
||||||
add_uses(1)
|
add_uses(1)
|
||||||
to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.")
|
|
||||||
user.drop_item()
|
|
||||||
qdel(L)
|
qdel(L)
|
||||||
return
|
|
||||||
else
|
else
|
||||||
to_chat(user, "You need a working light.")
|
if(!user.unEquip(W))
|
||||||
|
return
|
||||||
|
new_bulbs += AddShards(1)
|
||||||
|
qdel(L)
|
||||||
|
if(new_bulbs != 0)
|
||||||
|
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||||
|
to_chat(user, "You insert \the [L.name] into \the [src.name]. You have [uses] light\s remaining.")
|
||||||
|
return
|
||||||
|
|
||||||
|
if(istype(W, /obj/item/weapon/storage))
|
||||||
|
var/obj/item/weapon/storage/S = W
|
||||||
|
var/found_lightbulbs = FALSE
|
||||||
|
var/replaced_something = TRUE
|
||||||
|
|
||||||
|
for(var/obj/item/I in S.contents)
|
||||||
|
if(istype(I,/obj/item/weapon/light))
|
||||||
|
var/obj/item/weapon/light/L = I
|
||||||
|
found_lightbulbs = TRUE
|
||||||
|
if(src.uses >= max_uses)
|
||||||
|
break
|
||||||
|
if(L.status == LIGHT_OK)
|
||||||
|
replaced_something = TRUE
|
||||||
|
add_uses(1)
|
||||||
|
qdel(L)
|
||||||
|
|
||||||
|
else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED)
|
||||||
|
replaced_something = TRUE
|
||||||
|
AddShards(1)
|
||||||
|
qdel(L)
|
||||||
|
|
||||||
|
if(!found_lightbulbs)
|
||||||
|
to_chat(user, "<span class='warning'>\The [S] contains no bulbs.</span>")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(!replaced_something && src.uses == max_uses)
|
||||||
|
to_chat(user, "<span class='warning'>\The [src] is full!</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
to_chat(user, "<span class='notice'>You fill \the [src] with lights from \the [S].</span>")
|
||||||
|
|
||||||
/obj/item/device/lightreplacer/attack_self(mob/user)
|
/obj/item/device/lightreplacer/attack_self(mob/user)
|
||||||
/* // This would probably be a bit OP. If you want it though, uncomment the code.
|
/* // This would probably be a bit OP. If you want it though, uncomment the code.
|
||||||
if(isrobot(user))
|
if(isrobot(user))
|
||||||
@@ -113,6 +155,15 @@
|
|||||||
/obj/item/device/lightreplacer/proc/add_uses(var/amount = 1)
|
/obj/item/device/lightreplacer/proc/add_uses(var/amount = 1)
|
||||||
uses = min(max(uses + amount, 0), max_uses)
|
uses = min(max(uses + amount, 0), max_uses)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/device/lightreplacer/proc/AddShards(amount = 1)
|
||||||
|
bulb_shards += amount
|
||||||
|
var/new_bulbs = round(bulb_shards / shards_required)
|
||||||
|
if(new_bulbs > 0)
|
||||||
|
add_uses(new_bulbs)
|
||||||
|
bulb_shards = bulb_shards % shards_required
|
||||||
|
return new_bulbs
|
||||||
|
|
||||||
/obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1)
|
/obj/item/device/lightreplacer/proc/Charge(var/mob/user, var/amount = 1)
|
||||||
charge += amount
|
charge += amount
|
||||||
if(charge > 6)
|
if(charge > 6)
|
||||||
@@ -121,18 +172,41 @@
|
|||||||
|
|
||||||
/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U)
|
/obj/item/device/lightreplacer/proc/ReplaceLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||||
|
|
||||||
if(target.status == LIGHT_OK)
|
if(target.status != LIGHT_OK)
|
||||||
|
if(CanUse(U))
|
||||||
|
if(!Use(U)) return
|
||||||
|
to_chat(U, "<span class='notice'>You replace the [target.get_fitting_name()] with the [src].</span>")
|
||||||
|
|
||||||
|
if(target.status != LIGHT_EMPTY)
|
||||||
|
var/new_bulbs = AddShards(1)
|
||||||
|
if(new_bulbs != 0)
|
||||||
|
to_chat(U, "<span class='notice'>\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses.</span>")
|
||||||
|
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||||
|
target.status = LIGHT_EMPTY
|
||||||
|
target.update()
|
||||||
|
|
||||||
|
var/obj/item/weapon/light/L2 = new target.light_type()
|
||||||
|
|
||||||
|
target.status = L2.status
|
||||||
|
target.switchcount = L2.switchcount
|
||||||
|
target.rigged = emagged
|
||||||
|
target.brightness_range = L2.brightness_range
|
||||||
|
target.brightness_power = L2.brightness_power
|
||||||
|
target.brightness_color = L2.brightness_color
|
||||||
|
target.on = target.has_power()
|
||||||
|
target.update()
|
||||||
|
qdel(L2)
|
||||||
|
|
||||||
|
if(target.on && target.rigged)
|
||||||
|
target.explode()
|
||||||
|
return
|
||||||
|
|
||||||
|
else
|
||||||
|
to_chat(U, failmsg)
|
||||||
|
return
|
||||||
|
else
|
||||||
to_chat(U, "There is a working [target.get_fitting_name()] already inserted.")
|
to_chat(U, "There is a working [target.get_fitting_name()] already inserted.")
|
||||||
else if(!CanUse(U))
|
return
|
||||||
to_chat(U, failmsg)
|
|
||||||
else if(Use(U))
|
|
||||||
to_chat(U, "<span class='notice'>You replace the [target.get_fitting_name()] with the [src].</span>")
|
|
||||||
|
|
||||||
if(target.status != LIGHT_EMPTY)
|
|
||||||
target.remove_bulb()
|
|
||||||
|
|
||||||
var/obj/item/weapon/light/L = new target.light_type()
|
|
||||||
target.insert_bulb(L)
|
|
||||||
|
|
||||||
/obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user)
|
/obj/item/device/lightreplacer/emag_act(var/remaining_charges, var/mob/user)
|
||||||
emagged = !emagged
|
emagged = !emagged
|
||||||
@@ -153,4 +227,4 @@
|
|||||||
#undef LIGHT_OK
|
#undef LIGHT_OK
|
||||||
#undef LIGHT_EMPTY
|
#undef LIGHT_EMPTY
|
||||||
#undef LIGHT_BROKEN
|
#undef LIGHT_BROKEN
|
||||||
#undef LIGHT_BURNED
|
#undef LIGHT_BURNED
|
||||||
@@ -51,10 +51,10 @@
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/device/multitool/proc/mode_switch(mob/living/user)
|
/obj/item/device/multitool/proc/mode_switch(mob/living/user)
|
||||||
if(++mode_index > modes.len) mode_index = 1
|
if(mode_index + 1 > modes.len) mode_index = 1
|
||||||
|
|
||||||
else
|
else
|
||||||
mode_index++
|
mode_index += 1
|
||||||
|
|
||||||
toolmode = modes[mode_index]
|
toolmode = modes[mode_index]
|
||||||
to_chat(user,"<span class='notice'>\The [src] is now set to [toolmode].</span>")
|
to_chat(user,"<span class='notice'>\The [src] is now set to [toolmode].</span>")
|
||||||
|
|||||||
@@ -46,10 +46,10 @@
|
|||||||
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
|
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
|
||||||
if (channel == "special")
|
if (channel == "special")
|
||||||
if (translate_binary)
|
if (translate_binary)
|
||||||
var/datum/language/binary = all_languages["Robot Talk"]
|
var/datum/language/binary = GLOB.all_languages["Robot Talk"]
|
||||||
binary.broadcast(M, message)
|
binary.broadcast(M, message)
|
||||||
if (translate_hive)
|
if (translate_hive)
|
||||||
var/datum/language/hivemind = all_languages["Hivemind"]
|
var/datum/language/hivemind = GLOB.all_languages["Hivemind"]
|
||||||
hivemind.broadcast(M, message)
|
hivemind.broadcast(M, message)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,6 @@
|
|||||||
var/primary_color = rgb(0,0,0) // Obtained by eyedroppering the stripe in the middle of the card
|
var/primary_color = rgb(0,0,0) // Obtained by eyedroppering the stripe in the middle of the card
|
||||||
var/secondary_color = rgb(0,0,0) // Likewise for the oval in the top-left corner
|
var/secondary_color = rgb(0,0,0) // Likewise for the oval in the top-left corner
|
||||||
|
|
||||||
var/datum/job/job_access_type = /datum/job/assistant // Job type to acquire access rights from, if any
|
|
||||||
|
|
||||||
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
|
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
|
||||||
var/assignment = null //can be alt title or the actual job
|
var/assignment = null //can be alt title or the actual job
|
||||||
var/rank = null //actual job
|
var/rank = null //actual job
|
||||||
@@ -134,16 +132,6 @@
|
|||||||
icon_state = "silver"
|
icon_state = "silver"
|
||||||
item_state = "silver_id"
|
item_state = "silver_id"
|
||||||
|
|
||||||
/obj/item/weapon/card/id/silver/secretary
|
|
||||||
assignment = "Command Secretary"
|
|
||||||
rank = "Command Secretary"
|
|
||||||
job_access_type = /datum/job/secretary
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/silver/hop
|
|
||||||
assignment = "Head of Personnel"
|
|
||||||
rank = "Head of Personnel"
|
|
||||||
job_access_type = /datum/job/hop
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/gold
|
/obj/item/weapon/card/id/gold
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
desc = "A golden card which shows power and might."
|
desc = "A golden card which shows power and might."
|
||||||
@@ -154,14 +142,11 @@
|
|||||||
/obj/item/weapon/card/id/gold/captain
|
/obj/item/weapon/card/id/gold/captain
|
||||||
assignment = "Colony Director"
|
assignment = "Colony Director"
|
||||||
rank = "Colony Director"
|
rank = "Colony Director"
|
||||||
job_access_type = /datum/job/captain
|
|
||||||
preserve_item = 0
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/gold/captain/spare
|
/obj/item/weapon/card/id/gold/captain/spare
|
||||||
name = "\improper Colony Director's spare ID"
|
name = "\improper Colony Director's spare ID"
|
||||||
desc = "The spare ID of the High Lord himself."
|
desc = "The spare ID of the High Lord himself."
|
||||||
registered_name = "Colony Director"
|
registered_name = "Colony Director"
|
||||||
job_access_type = /datum/job/captain
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/synthetic
|
/obj/item/weapon/card/id/synthetic
|
||||||
name = "\improper Synthetic ID"
|
name = "\improper Synthetic ID"
|
||||||
@@ -206,31 +191,6 @@
|
|||||||
primary_color = rgb(189,237,237)
|
primary_color = rgb(189,237,237)
|
||||||
secondary_color = rgb(223,255,255)
|
secondary_color = rgb(223,255,255)
|
||||||
|
|
||||||
/obj/item/weapon/card/id/medical/doctor
|
|
||||||
assignment = "Medical Doctor"
|
|
||||||
rank = "Medical Doctor"
|
|
||||||
job_access_type = /datum/job/doctor
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/medical/chemist
|
|
||||||
assignment = "Chemist"
|
|
||||||
rank = "Chemist"
|
|
||||||
job_access_type = /datum/job/chemist
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/medical/geneticist
|
|
||||||
assignment = "Geneticist"
|
|
||||||
rank = "Geneticist"
|
|
||||||
job_access_type = /datum/job/doctor //geneticist
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/medical/psychiatrist
|
|
||||||
assignment = "Psychiatrist"
|
|
||||||
rank = "Psychiatrist"
|
|
||||||
job_access_type = /datum/job/psychiatrist
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/medical/paramedic
|
|
||||||
assignment = "Paramedic"
|
|
||||||
rank = "Paramedic"
|
|
||||||
job_access_type = /datum/job/paramedic
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/medical/head
|
/obj/item/weapon/card/id/medical/head
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
desc = "A card which represents care and compassion."
|
desc = "A card which represents care and compassion."
|
||||||
@@ -239,7 +199,6 @@
|
|||||||
secondary_color = rgb(255,223,127)
|
secondary_color = rgb(255,223,127)
|
||||||
assignment = "Chief Medical Officer"
|
assignment = "Chief Medical Officer"
|
||||||
rank = "Chief Medical Officer"
|
rank = "Chief Medical Officer"
|
||||||
job_access_type = /datum/job/cmo
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/security
|
/obj/item/weapon/card/id/security
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
@@ -248,21 +207,6 @@
|
|||||||
primary_color = rgb(189,47,0)
|
primary_color = rgb(189,47,0)
|
||||||
secondary_color = rgb(223,127,95)
|
secondary_color = rgb(223,127,95)
|
||||||
|
|
||||||
/obj/item/weapon/card/id/security/officer
|
|
||||||
assignment = "Security Officer"
|
|
||||||
rank = "Security Officer"
|
|
||||||
job_access_type = /datum/job/officer
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/security/detective
|
|
||||||
assignment = "Detective"
|
|
||||||
rank = "Detective"
|
|
||||||
job_access_type = /datum/job/detective
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/security/warden
|
|
||||||
assignment = "Warden"
|
|
||||||
rank = "Warden"
|
|
||||||
job_access_type = /datum/job/warden
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/security/head
|
/obj/item/weapon/card/id/security/head
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
desc = "A card which represents honor and protection."
|
desc = "A card which represents honor and protection."
|
||||||
@@ -271,7 +215,6 @@
|
|||||||
secondary_color = rgb(255,223,127)
|
secondary_color = rgb(255,223,127)
|
||||||
assignment = "Head of Security"
|
assignment = "Head of Security"
|
||||||
rank = "Head of Security"
|
rank = "Head of Security"
|
||||||
job_access_type = /datum/job/hos
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/engineering
|
/obj/item/weapon/card/id/engineering
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
@@ -280,16 +223,6 @@
|
|||||||
primary_color = rgb(189,94,0)
|
primary_color = rgb(189,94,0)
|
||||||
secondary_color = rgb(223,159,95)
|
secondary_color = rgb(223,159,95)
|
||||||
|
|
||||||
/obj/item/weapon/card/id/engineering/engineer
|
|
||||||
assignment = "Station Engineer"
|
|
||||||
rank = "Station Engineer"
|
|
||||||
job_access_type = /datum/job/engineer
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/engineering/atmos
|
|
||||||
assignment = "Atmospheric Technician"
|
|
||||||
rank = "Atmospheric Technician"
|
|
||||||
job_access_type = /datum/job/atmos
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/engineering/head
|
/obj/item/weapon/card/id/engineering/head
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
desc = "A card which represents creativity and ingenuity."
|
desc = "A card which represents creativity and ingenuity."
|
||||||
@@ -298,7 +231,6 @@
|
|||||||
secondary_color = rgb(255,223,127)
|
secondary_color = rgb(255,223,127)
|
||||||
assignment = "Chief Engineer"
|
assignment = "Chief Engineer"
|
||||||
rank = "Chief Engineer"
|
rank = "Chief Engineer"
|
||||||
job_access_type = /datum/job/chief_engineer
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/science
|
/obj/item/weapon/card/id/science
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
@@ -307,21 +239,6 @@
|
|||||||
primary_color = rgb(142,47,142)
|
primary_color = rgb(142,47,142)
|
||||||
secondary_color = rgb(191,127,191)
|
secondary_color = rgb(191,127,191)
|
||||||
|
|
||||||
/obj/item/weapon/card/id/science/scientist
|
|
||||||
assignment = "Scientist"
|
|
||||||
rank = "Scientist"
|
|
||||||
job_access_type = /datum/job/scientist
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/science/xenobiologist
|
|
||||||
assignment = "Xenobiologist"
|
|
||||||
rank = "Xenobiologist"
|
|
||||||
job_access_type = /datum/job/xenobiologist
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/science/roboticist
|
|
||||||
assignment = "Roboticist"
|
|
||||||
rank = "Roboticist"
|
|
||||||
job_access_type = /datum/job/roboticist
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/science/head
|
/obj/item/weapon/card/id/science/head
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
desc = "A card which represents knowledge and reasoning."
|
desc = "A card which represents knowledge and reasoning."
|
||||||
@@ -330,7 +247,6 @@
|
|||||||
secondary_color = rgb(255,223,127)
|
secondary_color = rgb(255,223,127)
|
||||||
assignment = "Research Director"
|
assignment = "Research Director"
|
||||||
rank = "Research Director"
|
rank = "Research Director"
|
||||||
job_access_type = /datum/job/rd
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/cargo
|
/obj/item/weapon/card/id/cargo
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
@@ -339,16 +255,6 @@
|
|||||||
primary_color = rgb(142,94,0)
|
primary_color = rgb(142,94,0)
|
||||||
secondary_color = rgb(191,159,95)
|
secondary_color = rgb(191,159,95)
|
||||||
|
|
||||||
/obj/item/weapon/card/id/cargo/cargo_tech
|
|
||||||
assignment = "Cargo Technician"
|
|
||||||
rank = "Cargo Technician"
|
|
||||||
job_access_type = /datum/job/cargo_tech
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/cargo/mining
|
|
||||||
assignment = "Shaft Miner"
|
|
||||||
rank = "Shaft Miner"
|
|
||||||
job_access_type = /datum/job/mining
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/cargo/head
|
/obj/item/weapon/card/id/cargo/head
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
desc = "A card which represents service and planning."
|
desc = "A card which represents service and planning."
|
||||||
@@ -357,12 +263,10 @@
|
|||||||
secondary_color = rgb(255,223,127)
|
secondary_color = rgb(255,223,127)
|
||||||
assignment = "Quartermaster"
|
assignment = "Quartermaster"
|
||||||
rank = "Quartermaster"
|
rank = "Quartermaster"
|
||||||
job_access_type = /datum/job/qm
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/assistant
|
/obj/item/weapon/card/id/assistant
|
||||||
assignment = USELESS_JOB //VOREStation Edit - Visitor not Assistant
|
assignment = USELESS_JOB //VOREStation Edit - Visitor not Assistant
|
||||||
rank = USELESS_JOB //VOREStation Edit - Visitor not Assistant
|
rank = USELESS_JOB //VOREStation Edit - Visitor not Assistant
|
||||||
job_access_type = /datum/job/assistant
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian
|
/obj/item/weapon/card/id/civilian
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
@@ -372,42 +276,6 @@
|
|||||||
secondary_color = rgb(95,159,191)
|
secondary_color = rgb(95,159,191)
|
||||||
assignment = "Civilian"
|
assignment = "Civilian"
|
||||||
rank = "Assistant"
|
rank = "Assistant"
|
||||||
job_access_type = /datum/job/assistant
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/bartender
|
|
||||||
assignment = "Bartender"
|
|
||||||
rank = "Bartender"
|
|
||||||
job_access_type = /datum/job/bartender
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/botanist
|
|
||||||
assignment = "Botanist"
|
|
||||||
rank = "Botanist"
|
|
||||||
job_access_type = /datum/job/hydro
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/chaplain
|
|
||||||
assignment = "Chaplain"
|
|
||||||
rank = "Chaplain"
|
|
||||||
job_access_type = /datum/job/chaplain
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/chef
|
|
||||||
assignment = "Chef"
|
|
||||||
rank = "Chef"
|
|
||||||
job_access_type = /datum/job/chef
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/internal_affairs_agent
|
|
||||||
assignment = "Internal Affairs Agent"
|
|
||||||
rank = "Internal Affairs Agent"
|
|
||||||
job_access_type = /datum/job/lawyer
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/janitor
|
|
||||||
assignment = "Janitor"
|
|
||||||
rank = "Janitor"
|
|
||||||
job_access_type = /datum/job/janitor
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/librarian
|
|
||||||
assignment = "Librarian"
|
|
||||||
rank = "Librarian"
|
|
||||||
job_access_type = /datum/job/librarian
|
|
||||||
|
|
||||||
/obj/item/weapon/card/id/civilian/head //This is not the HoP. There's no position that uses this right now.
|
/obj/item/weapon/card/id/civilian/head //This is not the HoP. There's no position that uses this right now.
|
||||||
name = "identification card"
|
name = "identification card"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ var/global/list/cached_icons = list()
|
|||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
New()
|
New()
|
||||||
if(paint_type && lentext(paint_type) > 0)
|
if(paint_type && length(paint_type) > 0)
|
||||||
name = paint_type + " " + name
|
name = paint_type + " " + name
|
||||||
..()
|
..()
|
||||||
reagents.add_reagent("water", volume*3/5)
|
reagents.add_reagent("water", volume*3/5)
|
||||||
|
|||||||
@@ -134,7 +134,7 @@
|
|||||||
spawn(1)
|
spawn(1)
|
||||||
var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
|
var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
|
||||||
if(!newname || newname == "")
|
if(!newname || newname == "")
|
||||||
var/datum/language/L = all_languages[vox.species.default_language]
|
var/datum/language/L = GLOB.all_languages[vox.species.default_language]
|
||||||
newname = L.get_random_name()
|
newname = L.get_random_name()
|
||||||
vox.real_name = newname
|
vox.real_name = newname
|
||||||
vox.name = vox.real_name
|
vox.name = vox.real_name
|
||||||
|
|||||||
@@ -115,12 +115,12 @@
|
|||||||
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
|
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
|
||||||
playing = 0
|
playing = 0
|
||||||
return
|
return
|
||||||
if(lentext(note) == 0)
|
if(length(note) == 0)
|
||||||
continue
|
continue
|
||||||
var/cur_note = text2ascii(note) - 96
|
var/cur_note = text2ascii(note) - 96
|
||||||
if(cur_note < 1 || cur_note > 7)
|
if(cur_note < 1 || cur_note > 7)
|
||||||
continue
|
continue
|
||||||
for(var/i=2 to lentext(note))
|
for(var/i=2 to length(note))
|
||||||
var/ni = copytext(note,i,i+1)
|
var/ni = copytext(note,i,i+1)
|
||||||
if(!text2num(ni))
|
if(!text2num(ni))
|
||||||
if(ni == "#" || ni == "b" || ni == "n")
|
if(ni == "#" || ni == "b" || ni == "n")
|
||||||
@@ -208,11 +208,11 @@
|
|||||||
t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message)
|
t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message)
|
||||||
if(!in_range(instrumentObj, usr))
|
if(!in_range(instrumentObj, usr))
|
||||||
return
|
return
|
||||||
if(lentext(t) >= INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER)
|
if(length(t) >= INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER)
|
||||||
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
|
var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
|
||||||
if(cont == "no")
|
if(cont == "no")
|
||||||
break
|
break
|
||||||
while(lentext(t) > INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER)
|
while(length(t) > INSTRUMENT_MAX_LINE_LENGTH*INSTRUMENT_MAX_LINE_NUMBER)
|
||||||
//split into lines
|
//split into lines
|
||||||
spawn()
|
spawn()
|
||||||
lines = splittext(t, "\n")
|
lines = splittext(t, "\n")
|
||||||
@@ -226,7 +226,7 @@
|
|||||||
lines.Cut(INSTRUMENT_MAX_LINE_NUMBER+1)
|
lines.Cut(INSTRUMENT_MAX_LINE_NUMBER+1)
|
||||||
var/linenum = 1
|
var/linenum = 1
|
||||||
for(var/l in lines)
|
for(var/l in lines)
|
||||||
if(lentext(l) > INSTRUMENT_MAX_LINE_LENGTH)
|
if(length(l) > INSTRUMENT_MAX_LINE_LENGTH)
|
||||||
to_chat(usr, "Line [linenum] too long!")
|
to_chat(usr, "Line [linenum] too long!")
|
||||||
lines.Remove(l)
|
lines.Remove(l)
|
||||||
else
|
else
|
||||||
@@ -256,7 +256,7 @@
|
|||||||
return
|
return
|
||||||
if(lines.len > INSTRUMENT_MAX_LINE_NUMBER)
|
if(lines.len > INSTRUMENT_MAX_LINE_NUMBER)
|
||||||
return
|
return
|
||||||
if(lentext(newline) > INSTRUMENT_MAX_LINE_LENGTH)
|
if(length(newline) > INSTRUMENT_MAX_LINE_LENGTH)
|
||||||
newline = copytext(newline, 1, INSTRUMENT_MAX_LINE_LENGTH)
|
newline = copytext(newline, 1, INSTRUMENT_MAX_LINE_LENGTH)
|
||||||
lines.Add(newline)
|
lines.Add(newline)
|
||||||
else if(href_list["deleteline"])
|
else if(href_list["deleteline"])
|
||||||
@@ -269,7 +269,7 @@
|
|||||||
var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
|
var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
|
||||||
if(!content || !in_range(instrumentObj, usr))
|
if(!content || !in_range(instrumentObj, usr))
|
||||||
return
|
return
|
||||||
if(lentext(content) > INSTRUMENT_MAX_LINE_LENGTH)
|
if(length(content) > INSTRUMENT_MAX_LINE_LENGTH)
|
||||||
content = copytext(content, 1, INSTRUMENT_MAX_LINE_LENGTH)
|
content = copytext(content, 1, INSTRUMENT_MAX_LINE_LENGTH)
|
||||||
if(num > lines.len || num < 1)
|
if(num > lines.len || num < 1)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -377,13 +377,13 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
|
|||||||
if(playercid)
|
if(playercid)
|
||||||
cidsearch = "AND computerid = '[playercid]' "
|
cidsearch = "AND computerid = '[playercid]' "
|
||||||
else
|
else
|
||||||
if(adminckey && lentext(adminckey) >= 3)
|
if(adminckey && length(adminckey) >= 3)
|
||||||
adminsearch = "AND a_ckey LIKE '[adminckey]%' "
|
adminsearch = "AND a_ckey LIKE '[adminckey]%' "
|
||||||
if(playerckey && lentext(playerckey) >= 3)
|
if(playerckey && length(playerckey) >= 3)
|
||||||
playersearch = "AND ckey LIKE '[playerckey]%' "
|
playersearch = "AND ckey LIKE '[playerckey]%' "
|
||||||
if(playerip && lentext(playerip) >= 3)
|
if(playerip && length(playerip) >= 3)
|
||||||
ipsearch = "AND ip LIKE '[playerip]%' "
|
ipsearch = "AND ip LIKE '[playerip]%' "
|
||||||
if(playercid && lentext(playercid) >= 7)
|
if(playercid && length(playercid) >= 7)
|
||||||
cidsearch = "AND computerid LIKE '[playercid]%' "
|
cidsearch = "AND computerid LIKE '[playercid]%' "
|
||||||
|
|
||||||
if(dbbantype)
|
if(dbbantype)
|
||||||
|
|||||||
@@ -192,8 +192,8 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
// language toggles
|
// language toggles
|
||||||
body += "<br><br><b>Languages:</b><br>"
|
body += "<br><br><b>Languages:</b><br>"
|
||||||
var/f = 1
|
var/f = 1
|
||||||
for(var/k in all_languages)
|
for(var/k in GLOB.all_languages)
|
||||||
var/datum/language/L = all_languages[k]
|
var/datum/language/L = GLOB.all_languages[k]
|
||||||
if(!(L.flags & INNATE))
|
if(!(L.flags & INNATE))
|
||||||
if(!f) body += " | "
|
if(!f) body += " | "
|
||||||
else f = 0
|
else f = 0
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
if(!.)
|
if(!.)
|
||||||
return
|
return
|
||||||
|
|
||||||
for(var/species in all_species)
|
for(var/species in GLOB.all_species)
|
||||||
var/datum/species/S = all_species[species]
|
var/datum/species/S = GLOB.all_species[species]
|
||||||
S.blood_color = "rainbow"
|
S.blood_color = "rainbow"
|
||||||
for(var/obj/effect/decal/cleanable/blood/B in world)
|
for(var/obj/effect/decal/cleanable/blood/B in world)
|
||||||
B.basecolor = "rainbow"
|
B.basecolor = "rainbow"
|
||||||
|
|||||||
@@ -1882,7 +1882,7 @@
|
|||||||
usr << "[M] is illegal type, must be /mob!"
|
usr << "[M] is illegal type, must be /mob!"
|
||||||
return
|
return
|
||||||
var/lang2toggle = href_list["lang"]
|
var/lang2toggle = href_list["lang"]
|
||||||
var/datum/language/L = all_languages[lang2toggle]
|
var/datum/language/L = GLOB.all_languages[lang2toggle]
|
||||||
|
|
||||||
if(L in M.languages)
|
if(L in M.languages)
|
||||||
if(!M.remove_language(lang2toggle))
|
if(!M.remove_language(lang2toggle))
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
|||||||
message_admins("<font color='blue'>Ticket [TicketHref("#[id]")] created</font>")
|
message_admins("<font color='blue'>Ticket [TicketHref("#[id]")] created</font>")
|
||||||
else
|
else
|
||||||
MessageNoRecipient(parsed_message)
|
MessageNoRecipient(parsed_message)
|
||||||
|
send2adminchat() //VOREStation Add
|
||||||
//show it to the person adminhelping too
|
//show it to the person adminhelping too
|
||||||
to_chat(C, "<span class='adminnotice'>PM to-<b>Admins</b>: [name]</span>")
|
to_chat(C, "<span class='adminnotice'>PM to-<b>Admins</b>: [name]</span>")
|
||||||
|
|
||||||
|
|||||||
@@ -55,11 +55,11 @@ GLOBAL_PROTECT(VVpixelmovement)
|
|||||||
// the type with the base type removed from the begaining
|
// the type with the base type removed from the begaining
|
||||||
var/fancytype = types[D.type]
|
var/fancytype = types[D.type]
|
||||||
if (findtext(fancytype, types[type]))
|
if (findtext(fancytype, types[type]))
|
||||||
fancytype = copytext(fancytype, lentext(types[type])+1)
|
fancytype = copytext(fancytype, length(types[type])+1)
|
||||||
var/shorttype = copytext("[D.type]", lentext("[type]")+1)
|
var/shorttype = copytext("[D.type]", length("[type]")+1)
|
||||||
if (lentext(shorttype) > lentext(fancytype))
|
if (length(shorttype) > length(fancytype))
|
||||||
shorttype = fancytype
|
shorttype = fancytype
|
||||||
if (!lentext(shorttype))
|
if (!length(shorttype))
|
||||||
shorttype = "/"
|
shorttype = "/"
|
||||||
|
|
||||||
.["[D]([shorttype])\ref[D]#[i]"] = D
|
.["[D]([shorttype])\ref[D]#[i]"] = D
|
||||||
|
|||||||
@@ -289,7 +289,7 @@
|
|||||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||||
return
|
return
|
||||||
|
|
||||||
var/new_species = input("Please choose a new species.","Species",null) as null|anything in all_species
|
var/new_species = input("Please choose a new species.","Species",null) as null|anything in GLOB.all_species
|
||||||
|
|
||||||
if(!H)
|
if(!H)
|
||||||
usr << "Mob doesn't exist anymore"
|
usr << "Mob doesn't exist anymore"
|
||||||
@@ -308,7 +308,7 @@
|
|||||||
usr << "This can only be done to instances of type /mob"
|
usr << "This can only be done to instances of type /mob"
|
||||||
return
|
return
|
||||||
|
|
||||||
var/new_language = input("Please choose a language to add.","Language",null) as null|anything in all_languages
|
var/new_language = input("Please choose a language to add.","Language",null) as null|anything in GLOB.all_languages
|
||||||
|
|
||||||
if(!new_language)
|
if(!new_language)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -423,7 +423,7 @@
|
|||||||
var/protection = H.get_cold_protection(50)
|
var/protection = H.get_cold_protection(50)
|
||||||
if(protection < 1)
|
if(protection < 1)
|
||||||
var/temp_change = 80 // Each hit can reduce temperature by up to 80 kelvin.
|
var/temp_change = 80 // Each hit can reduce temperature by up to 80 kelvin.
|
||||||
var/datum/species/baseline = all_species["Human"]
|
var/datum/species/baseline = GLOB.all_species["Human"]
|
||||||
var/temp_cap = baseline.cold_level_3 - 5 // Can't go lower than this.
|
var/temp_cap = baseline.cold_level_3 - 5 // Can't go lower than this.
|
||||||
|
|
||||||
var/cold_factor = abs(protection - 1)
|
var/cold_factor = abs(protection - 1)
|
||||||
|
|||||||
@@ -150,9 +150,9 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
|||||||
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
|
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
|
||||||
var/datum/species/S
|
var/datum/species/S
|
||||||
if(pref.species)
|
if(pref.species)
|
||||||
S = all_species[pref.species]
|
S = GLOB.all_species[pref.species]
|
||||||
else
|
else
|
||||||
S = all_species[SPECIES_HUMAN]
|
S = GLOB.all_species[SPECIES_HUMAN]
|
||||||
var/list/possible_genders = S.genders
|
var/list/possible_genders = S.genders
|
||||||
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
|
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
|
||||||
return possible_genders
|
return possible_genders
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
/datum/category_item/player_setup_item/general/language/sanitize_character()
|
/datum/category_item/player_setup_item/general/language/sanitize_character()
|
||||||
if(!islist(pref.alternate_languages)) pref.alternate_languages = list()
|
if(!islist(pref.alternate_languages)) pref.alternate_languages = list()
|
||||||
if(pref.species)
|
if(pref.species)
|
||||||
var/datum/species/S = all_species[pref.species]
|
var/datum/species/S = GLOB.all_species[pref.species]
|
||||||
if(S && pref.alternate_languages.len > S.num_alternate_languages)
|
if(S && pref.alternate_languages.len > S.num_alternate_languages)
|
||||||
pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length
|
pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length
|
||||||
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
|
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/content()
|
/datum/category_item/player_setup_item/general/language/content()
|
||||||
. += "<b>Languages</b><br>"
|
. += "<b>Languages</b><br>"
|
||||||
var/datum/species/S = all_species[pref.species]
|
var/datum/species/S = GLOB.all_species[pref.species]
|
||||||
if(S.language)
|
if(S.language)
|
||||||
. += "- [S.language]<br>"
|
. += "- [S.language]<br>"
|
||||||
if(S.default_language && S.default_language != S.language)
|
if(S.default_language && S.default_language != S.language)
|
||||||
@@ -46,13 +46,13 @@
|
|||||||
pref.alternate_languages.Cut(index, index+1)
|
pref.alternate_languages.Cut(index, index+1)
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
else if(href_list["add_language"])
|
else if(href_list["add_language"])
|
||||||
var/datum/species/S = all_species[pref.species]
|
var/datum/species/S = GLOB.all_species[pref.species]
|
||||||
if(pref.alternate_languages.len >= S.num_alternate_languages)
|
if(pref.alternate_languages.len >= S.num_alternate_languages)
|
||||||
alert(user, "You have already selected the maximum number of alternate languages for this species!")
|
alert(user, "You have already selected the maximum number of alternate languages for this species!")
|
||||||
else
|
else
|
||||||
var/list/available_languages = S.secondary_langs.Copy()
|
var/list/available_languages = S.secondary_langs.Copy()
|
||||||
for(var/L in all_languages)
|
for(var/L in GLOB.all_languages)
|
||||||
var/datum/language/lang = all_languages[L]
|
var/datum/language/lang = GLOB.all_languages[L]
|
||||||
if(!(lang.flags & RESTRICTED) && (is_lang_whitelisted(user, lang)))
|
if(!(lang.flags & RESTRICTED) && (is_lang_whitelisted(user, lang)))
|
||||||
available_languages |= L
|
available_languages |= L
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
S["body_descriptors"] << pref.body_descriptors
|
S["body_descriptors"] << pref.body_descriptors
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
|
||||||
if(!pref.species || !(pref.species in playable_species))
|
if(!pref.species || !(pref.species in GLOB.playable_species))
|
||||||
pref.species = SPECIES_HUMAN
|
pref.species = SPECIES_HUMAN
|
||||||
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
||||||
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
||||||
@@ -174,7 +174,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
last_descriptors = pref.body_descriptors.Copy()
|
last_descriptors = pref.body_descriptors.Copy()
|
||||||
pref.body_descriptors = list()
|
pref.body_descriptors = list()
|
||||||
|
|
||||||
var/datum/species/mob_species = all_species[pref.species]
|
var/datum/species/mob_species = GLOB.all_species[pref.species]
|
||||||
if(LAZYLEN(mob_species.descriptors))
|
if(LAZYLEN(mob_species.descriptors))
|
||||||
for(var/entry in mob_species.descriptors)
|
for(var/entry in mob_species.descriptors)
|
||||||
var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry]
|
var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry]
|
||||||
@@ -192,7 +192,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
pref.update_preview_icon()
|
pref.update_preview_icon()
|
||||||
user << browse_rsc(pref.preview_icon, "previewicon.png")
|
user << browse_rsc(pref.preview_icon, "previewicon.png")
|
||||||
|
|
||||||
var/datum/species/mob_species = all_species[pref.species]
|
var/datum/species/mob_species = GLOB.all_species[pref.species]
|
||||||
. += "<table><tr style='vertical-align:top'><td><b>Body</b> "
|
. += "<table><tr style='vertical-align:top'><td><b>Body</b> "
|
||||||
. += "(<a href='?src=\ref[src];random=1'>®</A>)"
|
. += "(<a href='?src=\ref[src];random=1'>®</A>)"
|
||||||
. += "<br>"
|
. += "<br>"
|
||||||
@@ -355,7 +355,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return mob_species && (mob_species.appearance_flags & flag)
|
return mob_species && (mob_species.appearance_flags & flag)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
var/datum/species/mob_species = all_species[pref.species]
|
var/datum/species/mob_species = GLOB.all_species[pref.species]
|
||||||
|
|
||||||
if(href_list["random"])
|
if(href_list["random"])
|
||||||
pref.randomize_appearance_and_body_for()
|
pref.randomize_appearance_and_body_for()
|
||||||
@@ -379,7 +379,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
|
|
||||||
else if(href_list["show_species"])
|
else if(href_list["show_species"])
|
||||||
// Actual whitelist checks are handled elsewhere, this is just for accessing the preview window.
|
// Actual whitelist checks are handled elsewhere, this is just for accessing the preview window.
|
||||||
var/choice = input("Which species would you like to look at?") as null|anything in playable_species
|
var/choice = input("Which species would you like to look at?") as null|anything in GLOB.playable_species
|
||||||
if(!choice) return
|
if(!choice) return
|
||||||
pref.species_preview = choice
|
pref.species_preview = choice
|
||||||
SetSpecies(preference_mob())
|
SetSpecies(preference_mob())
|
||||||
@@ -388,13 +388,13 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
|
|
||||||
else if(href_list["set_species"])
|
else if(href_list["set_species"])
|
||||||
user << browse(null, "window=species")
|
user << browse(null, "window=species")
|
||||||
if(!pref.species_preview || !(pref.species_preview in all_species))
|
if(!pref.species_preview || !(pref.species_preview in GLOB.all_species))
|
||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
|
|
||||||
var/datum/species/setting_species
|
var/datum/species/setting_species
|
||||||
|
|
||||||
if(all_species[href_list["set_species"]])
|
if(GLOB.all_species[href_list["set_species"]])
|
||||||
setting_species = all_species[href_list["set_species"]]
|
setting_species = GLOB.all_species[href_list["set_species"]]
|
||||||
else
|
else
|
||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
|
|
||||||
@@ -595,7 +595,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body")
|
var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body")
|
||||||
|
|
||||||
// Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy.
|
// Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy.
|
||||||
var/datum/species/current_species = all_species[pref.species]
|
var/datum/species/current_species = GLOB.all_species[pref.species]
|
||||||
if(!current_species.has_organ["brain"])
|
if(!current_species.has_organ["brain"])
|
||||||
limb_selection_list -= "Full Body"
|
limb_selection_list -= "Full Body"
|
||||||
else if(pref.organ_data[BP_TORSO] == "cyborg")
|
else if(pref.organ_data[BP_TORSO] == "cyborg")
|
||||||
@@ -827,9 +827,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
|
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
|
||||||
if(!pref.species_preview || !(pref.species_preview in all_species))
|
if(!pref.species_preview || !(pref.species_preview in GLOB.all_species))
|
||||||
pref.species_preview = SPECIES_HUMAN
|
pref.species_preview = SPECIES_HUMAN
|
||||||
var/datum/species/current_species = all_species[pref.species_preview]
|
var/datum/species/current_species = GLOB.all_species[pref.species_preview]
|
||||||
var/dat = "<body>"
|
var/dat = "<body>"
|
||||||
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"
|
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"
|
||||||
dat += "<table padding='8px'>"
|
dat += "<table padding='8px'>"
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ var/list/gear_datums = list()
|
|||||||
for(var/gear_name in gear_datums)
|
for(var/gear_name in gear_datums)
|
||||||
var/datum/gear/G = gear_datums[gear_name]
|
var/datum/gear/G = gear_datums[gear_name]
|
||||||
|
|
||||||
if(G.whitelisted && !is_alien_whitelisted(preference_mob, all_species[G.whitelisted]))
|
if(G.whitelisted && !is_alien_whitelisted(preference_mob, GLOB.all_species[G.whitelisted]))
|
||||||
continue
|
continue
|
||||||
if(max_cost && G.cost > max_cost)
|
if(max_cost && G.cost > max_cost)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -45,11 +45,11 @@
|
|||||||
|
|
||||||
/datum/gear/accessory/brown_vest
|
/datum/gear/accessory/brown_vest
|
||||||
display_name = "webbing, brown (Eng, Sec, Med, Exploration, Miner)"
|
display_name = "webbing, brown (Eng, Sec, Med, Exploration, Miner)"
|
||||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard")
|
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard")
|
||||||
|
|
||||||
/datum/gear/accessory/black_vest
|
/datum/gear/accessory/black_vest
|
||||||
display_name = "webbing, black (Eng, Sec, Med, Exploration, Miner)"
|
display_name = "webbing, black (Eng, Sec, Med, Exploration, Miner)"
|
||||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard")
|
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard")
|
||||||
|
|
||||||
/datum/gear/accessory/white_vest
|
/datum/gear/accessory/white_vest
|
||||||
display_name = "webbing, white (Medical)"
|
display_name = "webbing, white (Medical)"
|
||||||
@@ -57,11 +57,11 @@
|
|||||||
|
|
||||||
/datum/gear/accessory/brown_drop_pouches
|
/datum/gear/accessory/brown_drop_pouches
|
||||||
display_name = "drop pouches, brown (Eng, Sec, Med, Exploration, Miner)"
|
display_name = "drop pouches, brown (Eng, Sec, Med, Exploration, Miner)"
|
||||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard")
|
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard")
|
||||||
|
|
||||||
/datum/gear/accessory/black_drop_pouches
|
/datum/gear/accessory/black_drop_pouches
|
||||||
display_name = "drop pouches, black (Eng, Sec, Med, Exploration, Miner)"
|
display_name = "drop pouches, black (Eng, Sec, Med, Exploration, Miner)"
|
||||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Pathfinder","Shaft Miner", "Blueshield Guard")
|
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner", "Blueshield Guard")
|
||||||
|
|
||||||
/datum/gear/accessory/white_drop_pouches
|
/datum/gear/accessory/white_drop_pouches
|
||||||
display_name = "drop pouches, white (Medical)"
|
display_name = "drop pouches, white (Medical)"
|
||||||
|
|||||||
@@ -471,7 +471,7 @@
|
|||||||
path = /obj/item/clothing/accessory/medal/silver/unity
|
path = /obj/item/clothing/accessory/medal/silver/unity
|
||||||
display_name = "Rana's Unity Medal"
|
display_name = "Rana's Unity Medal"
|
||||||
ckeywhitelist = list("kitchifox")
|
ckeywhitelist = list("kitchifox")
|
||||||
character_name = list("Rana Uma")
|
character_name = list("Rana Starsong-Uma")
|
||||||
|
|
||||||
/datum/gear/fluff/taiga_uniform
|
/datum/gear/fluff/taiga_uniform
|
||||||
path = /obj/item/clothing/under/fluff/taiga
|
path = /obj/item/clothing/under/fluff/taiga
|
||||||
|
|||||||
@@ -517,3 +517,43 @@
|
|||||||
/datum/gear/uniform/lilacdress
|
/datum/gear/uniform/lilacdress
|
||||||
display_name = "lilac dress"
|
display_name = "lilac dress"
|
||||||
path = /obj/item/clothing/under/dress/lilacdress
|
path = /obj/item/clothing/under/dress/lilacdress
|
||||||
|
|
||||||
|
/datum/gear/uniform/polka
|
||||||
|
display_name = "polka dot dress"
|
||||||
|
path = /obj/item/clothing/under/dress/polka
|
||||||
|
|
||||||
|
/datum/gear/uniform/twistfront
|
||||||
|
display_name = "twistfront crop dress"
|
||||||
|
path = /obj/item/clothing/under/dress/twistfront
|
||||||
|
|
||||||
|
/datum/gear/uniform/cropdress
|
||||||
|
display_name = "crop dress"
|
||||||
|
path = /obj/item/clothing/under/dress/cropdress
|
||||||
|
|
||||||
|
/datum/gear/uniform/vneckdress
|
||||||
|
display_name = "v-neck dress"
|
||||||
|
path = /obj/item/clothing/under/dress/vneck
|
||||||
|
|
||||||
|
/datum/gear/uniform/bluedress
|
||||||
|
display_name = "blue dress"
|
||||||
|
path = /obj/item/clothing/under/dress/bluedress
|
||||||
|
|
||||||
|
/datum/gear/uniform/wench
|
||||||
|
display_name = "wench's dress"
|
||||||
|
path = /obj/item/clothing/under/dress/wench
|
||||||
|
|
||||||
|
/datum/gear/uniform/littleblackdress
|
||||||
|
display_name = "little black dress"
|
||||||
|
path = /obj/item/clothing/under/dress/littleblackdress
|
||||||
|
|
||||||
|
/datum/gear/uniform/pinktutu
|
||||||
|
display_name = "pink tutu"
|
||||||
|
path = /obj/item/clothing/under/dress/pinktutu
|
||||||
|
|
||||||
|
/datum/gear/uniform/festivedress
|
||||||
|
display_name = "festive dress"
|
||||||
|
path = /obj/item/clothing/under/dress/festivedress
|
||||||
|
|
||||||
|
/datum/gear/uniform/haltertop
|
||||||
|
display_name = "halter top"
|
||||||
|
path = /obj/item/clothing/under/haltertop
|
||||||
@@ -279,7 +279,7 @@
|
|||||||
return 0 //Something went wrong!
|
return 0 //Something went wrong!
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/proc/get_min_age()
|
/datum/category_item/player_setup_item/proc/get_min_age()
|
||||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"]
|
||||||
if(!is_FBP())
|
if(!is_FBP())
|
||||||
return S.min_age // If they're not a robot, we can just use the species var.
|
return S.min_age // If they're not a robot, we can just use the species var.
|
||||||
var/FBP_type = get_FBP_type()
|
var/FBP_type = get_FBP_type()
|
||||||
@@ -293,7 +293,7 @@
|
|||||||
return S.min_age // welp
|
return S.min_age // welp
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/proc/get_max_age()
|
/datum/category_item/player_setup_item/proc/get_max_age()
|
||||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"]
|
||||||
if(!is_FBP())
|
if(!is_FBP())
|
||||||
return S.max_age // If they're not a robot, we can just use the species var.
|
return S.max_age // If they're not a robot, we can just use the species var.
|
||||||
var/FBP_type = get_FBP_type()
|
var/FBP_type = get_FBP_type()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//Minimum limit is 18
|
//Minimum limit is 18
|
||||||
/datum/category_item/player_setup_item/get_min_age()
|
/datum/category_item/player_setup_item/get_min_age()
|
||||||
var/min_age = 18
|
var/min_age = 18
|
||||||
var/datum/species/S = all_species[pref.species ? pref.species : "Human"]
|
var/datum/species/S = GLOB.all_species[pref.species ? pref.species : "Human"]
|
||||||
if(!is_FBP() && S.min_age > 18)
|
if(!is_FBP() && S.min_age > 18)
|
||||||
min_age = S.min_age
|
min_age = S.min_age
|
||||||
return min_age
|
return min_age
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
if(!(path in negative_traits))
|
if(!(path in negative_traits))
|
||||||
pref.neg_traits -= path
|
pref.neg_traits -= path
|
||||||
|
|
||||||
var/datum/species/selected_species = all_species[pref.species]
|
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||||
if(selected_species.selects_bodytype)
|
if(selected_species.selects_bodytype)
|
||||||
// Allowed!
|
// Allowed!
|
||||||
else if(!pref.custom_base || !(pref.custom_base in custom_species_bases))
|
else if(!pref.custom_base || !(pref.custom_base in custom_species_bases))
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
|
|
||||||
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
|
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
|
||||||
character.custom_species = pref.custom_species
|
character.custom_species = pref.custom_species
|
||||||
var/datum/species/selected_species = all_species[pref.species]
|
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||||
if(selected_species.selects_bodytype)
|
if(selected_species.selects_bodytype)
|
||||||
var/datum/species/custom/CS = character.species
|
var/datum/species/custom/CS = character.species
|
||||||
var/S = pref.custom_base ? pref.custom_base : "Human"
|
var/S = pref.custom_base ? pref.custom_base : "Human"
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
. += "<b>Custom Species Name:</b> "
|
. += "<b>Custom Species Name:</b> "
|
||||||
. += "<a href='?src=\ref[src];custom_species=1'>[pref.custom_species ? pref.custom_species : "-Input Name-"]</a><br>"
|
. += "<a href='?src=\ref[src];custom_species=1'>[pref.custom_species ? pref.custom_species : "-Input Name-"]</a><br>"
|
||||||
|
|
||||||
var/datum/species/selected_species = all_species[pref.species]
|
var/datum/species/selected_species = GLOB.all_species[pref.species]
|
||||||
if(selected_species.selects_bodytype)
|
if(selected_species.selects_bodytype)
|
||||||
. += "<b>Icon Base: </b> "
|
. += "<b>Icon Base: </b> "
|
||||||
. += "<a href='?src=\ref[src];custom_base=1'>[pref.custom_base ? pref.custom_base : "Human"]</a><br>"
|
. += "<a href='?src=\ref[src];custom_base=1'>[pref.custom_base ? pref.custom_base : "Human"]</a><br>"
|
||||||
|
|||||||
@@ -458,6 +458,82 @@
|
|||||||
desc = "A simple black dress adorned in fake purple lilacs."
|
desc = "A simple black dress adorned in fake purple lilacs."
|
||||||
icon_state = "lilacdress"
|
icon_state = "lilacdress"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/white
|
||||||
|
name = "white wedding dress"
|
||||||
|
desc = "A fancy white dress with a blue underdress."
|
||||||
|
icon_state = "whitedress1"
|
||||||
|
flags_inv = HIDESHOES
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/white2
|
||||||
|
name = "long dress"
|
||||||
|
desc = "A long dress."
|
||||||
|
icon_state = "whitedress2"
|
||||||
|
addblends = "whitedress2_a"
|
||||||
|
flags_inv = HIDESHOES
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/white3
|
||||||
|
name = "short dress"
|
||||||
|
desc = "A short, plain dress."
|
||||||
|
icon_state = "whitedress3"
|
||||||
|
addblends = "whitedress3_a"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/white4
|
||||||
|
name = "long flared dress"
|
||||||
|
desc = "A long white dress that flares out at the bottom."
|
||||||
|
icon_state = "whitedress4"
|
||||||
|
addblends = "whitedress4_a"
|
||||||
|
flags_inv = HIDESHOES
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/darkred
|
||||||
|
name = "fancy dark red dress"
|
||||||
|
desc = "A short, red dress with a black belt. Fancy."
|
||||||
|
icon_state = "darkreddress"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/polka
|
||||||
|
name = "polka dot dress"
|
||||||
|
desc = "A sleeveless, cream colored dress with red polka dots."
|
||||||
|
icon_state = "polka"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/twistfront
|
||||||
|
name = "twistfront crop dress"
|
||||||
|
desc = "A black skirt and red twistfront croptop. Fancy!"
|
||||||
|
icon_state = "twistfront"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/cropdress
|
||||||
|
name = "crop dress"
|
||||||
|
desc = "A red skirt and longsleeved button-up crop top."
|
||||||
|
icon_state = "cropdress"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/vneck
|
||||||
|
name = "v-neck dress"
|
||||||
|
desc = "A black v-neck dress with an exaggerated neckline covered in a sheer mesh."
|
||||||
|
icon_state = "vneckdress"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/bluedress
|
||||||
|
name = "blue dress"
|
||||||
|
desc = "A plain blue dress with a white belt."
|
||||||
|
icon_state = "bluedress"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/wench
|
||||||
|
name = "wench's dress"
|
||||||
|
desc = "A white dress styled like a Ye Old Barmaid. Saucy!"
|
||||||
|
icon_state = "wench"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/littleblackdress
|
||||||
|
name = "little black dress"
|
||||||
|
desc = "A little strapless black dress with a red ribbon and flower accessory."
|
||||||
|
icon_state = "littleblackdress"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/pinktutu
|
||||||
|
name = "pink tutu"
|
||||||
|
desc = "A black leotard with a pink mesh tutu. Perfect for ballet practice."
|
||||||
|
icon_state = "pinktutu"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/dress/festivedress
|
||||||
|
name = "festive dress"
|
||||||
|
desc = "A red and white dress themed after some winter holidays. Tastefully festive!"
|
||||||
|
icon_state = "festivedress"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wedding stuff
|
* wedding stuff
|
||||||
*/
|
*/
|
||||||
@@ -495,6 +571,10 @@
|
|||||||
flags_inv = HIDESHOES
|
flags_inv = HIDESHOES
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||||
|
|
||||||
|
/*
|
||||||
|
Uniforms and such
|
||||||
|
*/
|
||||||
|
|
||||||
/obj/item/clothing/under/sundress
|
/obj/item/clothing/under/sundress
|
||||||
name = "sundress"
|
name = "sundress"
|
||||||
desc = "Makes you want to frolic in a field of daisies."
|
desc = "Makes you want to frolic in a field of daisies."
|
||||||
@@ -681,36 +761,10 @@
|
|||||||
icon_state = "gear_harness"
|
icon_state = "gear_harness"
|
||||||
body_parts_covered = 0
|
body_parts_covered = 0
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/white
|
/obj/item/clothing/under/haltertop
|
||||||
name = "white wedding dress"
|
name = "halter top"
|
||||||
desc = "A fancy white dress with a blue underdress."
|
desc = "Jean shorts and a black halter top. Perfect for casual Fridays!"
|
||||||
icon_state = "whitedress1"
|
icon_state = "haltertop"
|
||||||
flags_inv = HIDESHOES
|
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/white2
|
|
||||||
name = "long dress"
|
|
||||||
desc = "A long dress."
|
|
||||||
icon_state = "whitedress2"
|
|
||||||
addblends = "whitedress2_a"
|
|
||||||
flags_inv = HIDESHOES
|
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/white3
|
|
||||||
name = "short dress"
|
|
||||||
desc = "A short, plain dress."
|
|
||||||
icon_state = "whitedress3"
|
|
||||||
addblends = "whitedress3_a"
|
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/white4
|
|
||||||
name = "long flared dress"
|
|
||||||
desc = "A long white dress that flares out at the bottom."
|
|
||||||
icon_state = "whitedress4"
|
|
||||||
addblends = "whitedress4_a"
|
|
||||||
flags_inv = HIDESHOES
|
|
||||||
|
|
||||||
/obj/item/clothing/under/dress/darkred
|
|
||||||
name = "fancy dark red dress"
|
|
||||||
desc = "A short, red dress with a black belt. Fancy."
|
|
||||||
icon_state = "darkreddress"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* swimsuit
|
* swimsuit
|
||||||
@@ -909,7 +963,7 @@
|
|||||||
desc = "An orange cohesion suit with yellow hazard stripes intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
desc = "An orange cohesion suit with yellow hazard stripes intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||||
icon_state = "cohesionsuit_hazard"
|
icon_state = "cohesionsuit_hazard"
|
||||||
|
|
||||||
//Uniforms
|
//Ranger uniforms
|
||||||
//On-mob sprites go in icons\mob\uniform.dmi with the format "white_ranger_uniform_s" - with 'white' replaced with green, cyan, etc... of course! Note the _s - this is not optional.
|
//On-mob sprites go in icons\mob\uniform.dmi with the format "white_ranger_uniform_s" - with 'white' replaced with green, cyan, etc... of course! Note the _s - this is not optional.
|
||||||
//Item sprites go in icons\obj\clothing\ranger.dmi with the format "white_ranger_uniform"
|
//Item sprites go in icons\obj\clothing\ranger.dmi with the format "white_ranger_uniform"
|
||||||
/obj/item/clothing/under/color/ranger
|
/obj/item/clothing/under/color/ranger
|
||||||
|
|||||||
@@ -22,20 +22,21 @@
|
|||||||
/datum/event/rogue_drone/announce()
|
/datum/event/rogue_drone/announce()
|
||||||
var/msg
|
var/msg
|
||||||
var/rng = rand(1,5)
|
var/rng = rand(1,5)
|
||||||
|
//VOREStation Edit Start TFF 16/12/19 - Sif -> Virgo 3b
|
||||||
switch(rng)
|
switch(rng)
|
||||||
if(1)
|
if(1)
|
||||||
msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. If any are sighted, \
|
msg = "A combat drone wing operating in close orbit above Virgo 3b has failed to return from a anti-piracy sweep. If any are sighted, \
|
||||||
approach with caution."
|
approach with caution."
|
||||||
if(2)
|
if(2)
|
||||||
msg = "Contact has been lost with a combat drone wing in Sif orbit. If any are sighted in the area, approach with \
|
msg = "Contact has been lost with a combat drone wing in Virgo 3b orbit. If any are sighted in the area, approach with \
|
||||||
caution."
|
caution."
|
||||||
if(3)
|
if(3)
|
||||||
msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. If any are sighted in the area, approach with caution."
|
msg = "Unidentified hackers have targeted a combat drone wing deployed around Virgo 3b. If any are sighted in the area, approach with caution."
|
||||||
if(4)
|
if(4)
|
||||||
msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution."
|
msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution."
|
||||||
if(5)
|
if(5)
|
||||||
msg = "We're detecting a swarm of small objects approaching your station. Most likely a bunch of drones. Please exercise caution if you see any."
|
msg = "We're detecting a swarm of small objects approaching your station. Most likely a bunch of drones. Please exercise caution if you see any."
|
||||||
|
//VOREStation Edit End
|
||||||
command_announcement.Announce(msg, "Rogue drone alert")
|
command_announcement.Announce(msg, "Rogue drone alert")
|
||||||
|
|
||||||
/datum/event/rogue_drone/end()
|
/datum/event/rogue_drone/end()
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
proc/Intoxicated(phrase)
|
proc/Intoxicated(phrase)
|
||||||
phrase = html_decode(phrase)
|
phrase = html_decode(phrase)
|
||||||
var/leng=lentext(phrase)
|
var/leng=length(phrase)
|
||||||
var/counter=lentext(phrase)
|
var/counter=length(phrase)
|
||||||
var/newphrase=""
|
var/newphrase=""
|
||||||
var/newletter=""
|
var/newletter=""
|
||||||
while(counter>=1)
|
while(counter>=1)
|
||||||
|
|||||||
@@ -11,8 +11,11 @@
|
|||||||
|
|
||||||
var/thaler_earned
|
var/thaler_earned
|
||||||
|
|
||||||
/datum/gm_action/nanotrasen_budget_allocation/set_up()
|
/datum/gm_action/nanotrasen_budget_allocation/New()
|
||||||
|
..()
|
||||||
SC = supply_controller
|
SC = supply_controller
|
||||||
|
|
||||||
|
/datum/gm_action/nanotrasen_budget_allocation/set_up()
|
||||||
running = TRUE
|
running = TRUE
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,8 @@
|
|||||||
|
|
||||||
/area/engineering
|
/area/engineering
|
||||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||||
/area/engineering/atmos/intake
|
//TFF 11/12/19 - Minor refactor, makes mice spawn only in Atmos.
|
||||||
|
/area/engineering/atmos_intake
|
||||||
holomap_color = null
|
holomap_color = null
|
||||||
/area/maintenance/substation/engineering
|
/area/maintenance/substation/engineering
|
||||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||||
|
|||||||
@@ -423,7 +423,9 @@
|
|||||||
desc = "Enables the sending and receiving of messages on the Exonet with the EPv2 protocol."
|
desc = "Enables the sending and receiving of messages on the Exonet with the EPv2 protocol."
|
||||||
extended_desc = "An EPv2 address is a string with the format of XXXX:XXXX:XXXX:XXXX. Data can be send or received using the \
|
extended_desc = "An EPv2 address is a string with the format of XXXX:XXXX:XXXX:XXXX. Data can be send or received using the \
|
||||||
second pin on each side, with additonal data reserved for the third pin. When a message is received, the second activaiton pin \
|
second pin on each side, with additonal data reserved for the third pin. When a message is received, the second activaiton pin \
|
||||||
will pulse whatever's connected to it. Pulsing the first activation pin will send a message."
|
will pulse whatever's connected to it. Pulsing the first activation pin will send a message.\
|
||||||
|
\
|
||||||
|
When messaging Communicators, you must set data to send to the string `text` to avoid errors in reception."
|
||||||
icon_state = "signal"
|
icon_state = "signal"
|
||||||
complexity = 4
|
complexity = 4
|
||||||
inputs = list(
|
inputs = list(
|
||||||
@@ -571,7 +573,7 @@
|
|||||||
/obj/item/integrated_circuit/input/microphone/sign/Initialize()
|
/obj/item/integrated_circuit/input/microphone/sign/Initialize()
|
||||||
..()
|
..()
|
||||||
for(var/lang in readable_langs)
|
for(var/lang in readable_langs)
|
||||||
var/datum/language/newlang = all_languages[lang]
|
var/datum/language/newlang = GLOB.all_languages[lang]
|
||||||
my_langs |= newlang
|
my_langs |= newlang
|
||||||
|
|
||||||
/obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null)
|
/obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null)
|
||||||
|
|||||||
153
code/modules/library/hardcode_library/fiction/APsychonaut.dm
Normal file
153
code/modules/library/hardcode_library/fiction/APsychonaut.dm
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
/*
|
||||||
|
CKEY: APsychonaut
|
||||||
|
CATEGORY: Fiction
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// A Purrrrfect Man by Karla.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/fiction/apurrrrfectman
|
||||||
|
|
||||||
|
name = "A Purrrrfect Man"
|
||||||
|
desc = "A hardbound book titled \"A Purrrrfect Man\" Karla."
|
||||||
|
description_info = "This book is titled \"A Purrrrfect Man\" Karla. There's a blurb on the back: <br>\
|
||||||
|
A Tajaran woman and a Human man find warmth in each other to ward off the chill of Sif's night."
|
||||||
|
|
||||||
|
title = "A Purrrrfect Man"
|
||||||
|
icon_state = "book7"
|
||||||
|
origkey = "APsychonaut"
|
||||||
|
author = "Karla"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Palatino Linotype; font-size: 20px; color: #3F3A55;}
|
||||||
|
body {font-family: Times New Roman; font-size: 17px; color: #3F3A55; background-color: #B3D9DA; text-align: center;}
|
||||||
|
.border1 {border-style: double double solid solid; border-width: 7px; border-color: #3F3A55; padding: 10px; background-color: #EEEEEE;}
|
||||||
|
.border2 {border-style: dashed; border-width: 2px; border-color: #B3D9DA; padding: 6px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border1">
|
||||||
|
<div class="border2">
|
||||||
|
<h1><i>A<br>Purrrrfect Man</i></h1>
|
||||||
|
<br><br>
|
||||||
|
<i>by<br>Karla</i><br>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Times New Roman; color: #55413A; font-size: 16px; background-color: #EBE1D9;}
|
||||||
|
.border {border-style: hidden; padding: 15px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
Sasha set down his wrench with a sigh, wiping his toned forearm along his brow to clear the thin sheet of sweat that he'd built up, properly preparing the heating system. It had been a hard day of work for him so far, near alone on the cold plains of Sif. He, along with a scant few other men had been hired to help build a Tajaran lady a secretive cabin amongst the frosty tundra.<br><br>
|
||||||
|
Katya was a shy young thing, barely breaking twenty-five and already wanting to hide from the world, but if Sasha had learned anything in the last few weeks, it was that her shyness had done nothing to dull how sweet she could be. Seeing he had finished a sizeable section of work, she emerged from the blizzard tent being used as temporary shelter with a steaming hot mug of coco in hand for both of them.<br><br>
|
||||||
|
Handing over one of the little cups of warmth, she swayed her dark brown furred hips back and forth, watching Sasha take a cautious sip to test the temperature, leaving a thin milk moustache atop his stubbled lip. The little Tajaran smiled at him, and pulled a handkerchief from the waistband of her skirt to dab away at the mark.<br><br>
|
||||||
|
"Carrreful~" she said, "You'll catch yourrr death of a cold out herrrre if you're not."<br><br>
|
||||||
|
Sasha smiled back at her, one of his muscular hands going to ruffle at her hair.<br><br>
|
||||||
|
"You're so kind, miss Katya" he replied, "I just wish there was something I could do to repay such gestures."<br><br>
|
||||||
|
Katya gave a pleased little sigh at the gesture of affection, the warmth from the coco having seeped into Sasha's hand, and now flowing into her. She took him by the wrist with a cheeky smile, guiding his palm to her cheek instead. His touch was gentle as she redirected him, his tender grasp doing as much to warm her as the steaming milk in her hand.<br><br>
|
||||||
|
"It gets cold and lonely out herrre all alone. If you rrreally wish to do something morrre forrr herrrr, perrrhaps we can spend some time by the firrre tonight, togetherrrr. Beforrre you go to bed."<br><br>
|
||||||
|
<center>- 1 -</center>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Times New Roman; color: #55413A; font-size: 16px; background-color: #EBE1D9;}
|
||||||
|
.border {border-style: hidden; padding: 15px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
How could Sasha refuse such a request? He gave a bassy chuckle, leaning forward to set an affectionate kiss on the Tajaran's forehead before letting her cheek free.<br><br>
|
||||||
|
"Of course, miss Katya" he answered, "I've already split the logs from the tree I felled earlier, why don't you set up the fire and I'll finish weather proofing what I've done for the evening? It should be getting dark soon after all."<br><br>
|
||||||
|
She nodded cheerfuly and wandered off to the firepit by the tents, her tail flicking happily at the prospect of her evening's plans while Sasha lingered with his coco, appreciating every chocolatey second of the kind gesture from his employer. In near no time at all, there was a roaring fire burning at the construction site, providing nearly all the light for the evening as the sun dipped low beyond the horizon. Sasha, having finished his promised work, made his way over to join Katya.<br><br>
|
||||||
|
Sasha set himself down by the fire and leaned back against his palms spread out behind him, stretching out his weary, muscular back with a growl of satisfaction before twisting slightly to watch the Tajaran prepare for the evening proper. In one hand she carried the ingredients for s'mores, while under that same arm she lugged over a pair of weighty woolen blankets. In her other's grasp, she once again held two steaming mugs, this time filled with decaff tea to settle them in for the night.<br><br>
|
||||||
|
Katya wasted no time in getting herself close to Sasha, sitting in his lap while setting the mugs aside before spreading the blanket over them. Her tail curled up behind her, the tip wrapping its way around the back of Sasha's neck like a warm, furry scarf, sheltering the sensitive skin from the cold as he was sheltering the rest of her. He wrapped his strong arms around her, taking a moment to rest his nose and chin in her clean, but windswept hair, catching the scent of honey and vanilla from her shampoo.<br><br>
|
||||||
|
<center>- 2 -</center>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Times New Roman; color: #55413A; font-size: 16px; background-color: #EBE1D9;}
|
||||||
|
.border {border-style: hidden; padding: 15px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
There they sat for hours, first in silence as they simply appreciated each other's presence, then amidst a flurry of discussion. He asked of the woman she was, how she grew to be so reserved, why she was so sweet to those around her, what she did to whittle away the hours when she was alone with nothing but her thoughts. She asked of the man he wanted to be, where he wanted to be in the future, who the sort of person was that he envisioned himself being with, and when he wanted to settle down in the future.<br><br>
|
||||||
|
As the fires of their interest in each other grew, the fire warming the pair slowly petered out into nothingness, neither willing to get up to feed the flames of anything but their desires. Sasha had barely even been willing to relent his graps around Katya's waist, not that she had complained. She had acted the hands for both of them most of the evening, toasting s'mores and leaning back into his toned chest to reach up and pop the marshmellowy goodness into his mouth, usually accompanied by a giggle sweeter than the treat she'd just offered. Sasha had not even touched his tea, all thirst but one sated already.<br><br>
|
||||||
|
Katya had not anticipated this, however, and as the embers finally died into nothing and she begrudgingly relinquished the intimacy, she was caught off guard while whisking the now chilled mug up to clean it out. The tea spilled everywhere, most of the cool liquid soaking Sasha's work clothing, drawing a gasp of surprise from both of them.<br><br>
|
||||||
|
"She is so sorrrrry!" Katya exclaimed, hand covering her mouth in a mixture of shock and embaressment, "It was a complete accident!"<br><br>
|
||||||
|
Though Sasha did not seem remotely angry at the mistake, he was quickly losing body heat in his now soaked clothing, especially now that there was no fire to warm them.<br><br>
|
||||||
|
His teeth chattered as he replied, "I'm n-n-n-not m-m-m-mad" he replied calmly, "b-b-b-ut that was my only p-p-p-pair of d-d-d-dry clothes!"<br><br>
|
||||||
|
The Tajaran, experienced with many nights in the cold, sprung into action. "You must get out of yourrrr clothes beforrre you frrrreeze!" she said, panicing.<br><br>
|
||||||
|
"B-b-but I only h-h-have a s-s-sleeping bag!" he replied, slightly fearful.<br><br>
|
||||||
|
The Tajaran quickly helped him from his wet clothing, unperturbed by his worries.<br><br>
|
||||||
|
"You can stay in herrrr tent tonight! We will sharrre body heat, and keep you safe!"<br><br>
|
||||||
|
Now free from his chilling clothing, she quickly ushered him inside her temporary abode, and bundled under the covers with him.<br><br>
|
||||||
|
<center>- 3 -</center>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Times New Roman; color: #55413A; font-size: 16px; background-color: #EBE1D9;}
|
||||||
|
.border {border-style: hidden; padding: 15px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<br><br><br><center>\[This page has been torn out of the book by someone.\]</center><br><br><br>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Times New Roman; color: #55413A; font-size: 16px; background-color: #EBE1D9;}
|
||||||
|
.border {border-style: hidden; padding: 15px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<br><br><br><center>\[This page, too.\]</center><br><br><br>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Times New Roman; color: #55413A; font-size: 16px; background-color: #EBE1D9;}
|
||||||
|
.border {border-style: hidden; padding: 15px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
The pair of them collapsed breathlessly against each other, each basking in the afterglow of the evening. He gave a quiet, pleased growl, and she a soft purr of satisfaction while cuddling up against Sasha's heaving, sweaty pecs.<br><br>
|
||||||
|
"I hope--" he said, between growls and breaths, "I hope that you had a nice night, miss Katya..."<br><br>
|
||||||
|
Having gotten her breath back first, she gave a light nod and tilted her head back, pressing a line of affectionate kisses from chin, to temple, her teeth sinking lightly into her earlobe while she gave her reply, ASMR sending a shiver down his spine from her whispered reply.<br><br>
|
||||||
|
"It. Was. Purrrrfect..."<br><br>
|
||||||
|
Outside the wind howled, and the shantaks called to each other in the darkness, but Katya and Sasha blocked it all from their minds as they drifted off to sleep, safe and comfortable in each other's arms.<br><br>
|
||||||
|
<center>- 6 -</center>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
1268
code/modules/library/hardcode_library/fiction/PortedBooks.dm
Normal file
1268
code/modules/library/hardcode_library/fiction/PortedBooks.dm
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
CKEY: BattlefieldCommander
|
||||||
|
CATEGORY: Fiction
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// The Chronicles of Margata: Volume I by Molly Highlander
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/fiction/chroniclesofmargatavol1
|
||||||
|
name = "The Chronicles of Margata: Volume I"
|
||||||
|
desc = "A hardbound book titled \"The Chronicles of Margata: Volume I\" by Molly Highlander."
|
||||||
|
description_info = "This book is titled \"The Chronicles of Margata: Volume I\" by Molly Highlander. There's a blurb on the back: <br>\
|
||||||
|
In this first volume in the series of the Chronicles of Margata, follow a young man's journey to dispel a curse of pure evil."
|
||||||
|
|
||||||
|
title = "The Chronicles of Margata: Volume I"
|
||||||
|
icon_state = "chronicles1_battlefieldcommander"
|
||||||
|
origkey = "battlefieldcommander"
|
||||||
|
author = "Molly Highlander"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
p.font1 {font-family: MS Serif; font-size: 18px; color: #DFD35C;}
|
||||||
|
p.font2 {font-family: Times New Roman; font-size: 14px; color: #DFD35C;}
|
||||||
|
body {font-family: Times New Roman; background-color: #350D3A; text-align:center;}
|
||||||
|
.border1 {font-family: Times New Roman; font-size: 14px; color: #DFD35C; line-height: 1.0; border-style: double; border-color: #DFD35C; border-width: 5px; padding: 15px;}
|
||||||
|
.border2 {border-style: solid; border-color: #DFD35C; border-width: 3px; background-color: #56195D;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border1">
|
||||||
|
<div class="border2">
|
||||||
|
<p class="font2">
|
||||||
|
<i>The</i><br>
|
||||||
|
</p><p class="font1">
|
||||||
|
<b>CHRONICLES</b><br>
|
||||||
|
</p><p class="font2">
|
||||||
|
<i>of</i><br>
|
||||||
|
</p><p class="font1">
|
||||||
|
<b>MARGATA</b><br>
|
||||||
|
</p>
|
||||||
|
<font size="3">VOLUME I</font>
|
||||||
|
<br><br><br><br>
|
||||||
|
<font size="4">MOLLY<br>HIGHLANDER</font>
|
||||||
|
<br><br><br>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Palatino Linotype; color: #311E12; background-color: #F7F5EA; text-align: center;}
|
||||||
|
h1 {font-size: 300%; margin-top: 20px;}
|
||||||
|
h2 {margin-top: 100px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>The Chronicles of Margata</h1>
|
||||||
|
Volume I: The Wolf and the Blacksmith
|
||||||
|
<h2>By Molly Highlander</h2>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Palatino Linotype; color: #311E12; background-color: #F7F5EA; text-align: center;}
|
||||||
|
p.margin {margin-top: 150px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p class="margin">
|
||||||
|
<em>For Mercurie;<br>in the hopes that you'll be able to come up with<br>better jokes than me when you grow up.</em>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family:Palatino Linotype; color: #311E12; font-size: 14px; background-color: #F7F5EA; margin: 15px;}
|
||||||
|
div {text-indent: 30px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>In the land of Margata, nothing is ever as it seems. There have been many verifiable cases of local bakers having a secret double life as DJs. The correlation between exposure to bread and wanting to scratch out some sick beats has never been quantified, quite possibly to science being illegal in the region. That didn't happen to be the case of a young boy named Gadroc, who was neither a baker nor a DJ. In fact, his story happens to have nothing to do with either of the two. Poor Gadroc was afflicted with a terrible curse. It had been that way ever since he was born, because a witch had cursed his mother for saying "Keep the change," when there was only one cent of change left. Gadroc<6F>s curse was horrible, one that no human being should suffer through: he couldn<64>t look at butts. Whenever someone showed him a full moon, he transformed into a horrible beast with astoundingly fresh breath. Whenever this happened, he would always run to the nearest cornfield and begin uncontrollably eating corn. Why corn? Because magic, that<61>s why. That's just how it fucking works. Don't you know anything?</div>
|
||||||
|
<div>After coming home with corn stuck in his teeth for three days straight, and only having one more pair of pants that weren<65>t destroyed, Gadroc knew that he needed to do something about his curse. He went to the first person he could think of for help.</div>
|
||||||
|
<div>Carne was the town<77>s blacksmith. He wasn<73>t very wise, but he always spoke as though he was. It was for this reason that Gadroc often came to Carne for help, despite the fact that he could probably go to basically anyone else. The town beggar, who was constantly sitting in a puddle of his own pee, gave better advice than the blacksmith. Carne was the only one who knew about Gadroc<6F>s affliction. No one else knew who was ravaging the town<77>s corn population, and riots had already broken out over the severe deficit in cornbread supply.</div>
|
||||||
|
<div>"Carne, you have to help me!" Gadroc shouted as he burst through the doors of the smithy. Carne was in the middle of forging a pair of iron gauntlets, and had his back turned to Gadroc. He did not turn around.</div>
|
||||||
|
<div>"Do you need my help? Or do you need my help to help yourself?" Carne said, spouting his signature wisdom.</div>
|
||||||
|
<div>"Yes. No. What? Did you get that from a fortune cookie?" replied Gadroc.</div>
|
||||||
|
<div>"Yes, actually." Carne turned around. He was loudly crunching on some fortune cookie and inexplicably wearing the gauntlets he was working on, still glowing red hot. He held up the fortune, but Gadroc didn<64>t have time to read it, as it immediately caught fire and fell into a pile of ashes on the floor.</div>
|
||||||
|
<div>Gadroc was concerned. "Doesn<73>t that... you know... hurt?"</div>
|
||||||
|
<div>"Oh yes, extremely," Carne said with a smile. They both stared at each other for a moment.</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family:Palatino Linotype; color: #311E12; font-size: 14px; background-color: #F7F5EA; margin: 15px;}
|
||||||
|
div {text-indent: 30pt;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>"<strong>AHHHHHHHHHHHHHHHHHHHH!</strong>" screamed Carne. He flailed his arms around wildly until the gauntlets flew off. One of them flew across the room and hit a painting hanging on the wall. The painting was of our lord and president, Orcbama, and the gauntlet punched him in the face. The painting had a large scorch mark in the same place where the gauntlet had hit, indicating that this was a common occurrence.</div>
|
||||||
|
<div>"Anyways," Carne said casually, hands blistered and burnt, "What do you need to help me with?"</div>
|
||||||
|
<div>"That<61>s not what I... you know what, nevermind. Listen. I am sick and tired of this stupid werewolf bullshit! Corn used to be my favorite, and now I can<61>t stand it! I miss the days when I enjoyed cornbread..."</div>
|
||||||
|
<div>"Yeah, so do the townsfolk," the blacksmith replied.</div>
|
||||||
|
<div>"That's not helpful," Gadroc said, but Carne went on.</div>
|
||||||
|
<div>"I've always been more of a corn casserole kind of guy myself. Easier on the old gut. Y'know, when I was a boy-"</div>
|
||||||
|
<div>"Would you shut up and listen? We need to do something about this!"</div>
|
||||||
|
<div>"Right... What<61>s the problem again?" Gadroc smacked his forehead. He pointed to his own butt.</div>
|
||||||
|
<div>"Listen, son, if that's the way you're swingin', you don't have to play charades about it. Old Carne won't judge," Carne said.</div>
|
||||||
|
<div>"No, the werewolf problem!" Gadroc screamed. He fell to his knees, tears welling up in his eyes. He sniffed. "I just want to be able to look at butts. That<61>s all I want."</div>
|
||||||
|
<div>Carne walked up and put his gross, burnt hand on Gadroc<6F>s shoulder. "It<49>s alright. I<>ll help you with your problem."</div>
|
||||||
|
<div>Gadroc sniffed again. "Really?"</div>
|
||||||
|
<div>"Yes. Even if it means I<>m helping myself to help you help me-"</div>
|
||||||
|
<div>"Carne, you<6F>re not helping again."</div>
|
||||||
|
</br>
|
||||||
|
<div>CUT TO: Gadroc and Carne, scaling a mountain. Both men were equipped with the finest blades from Carne<6E>s smithy. Gadroc was feeling a little indignant, considering Carne had only given him a foam sword. Carne had taken the only finished blade in the smithy.</div>
|
||||||
|
<div>"You see that up there?" Carne said to Gadroc as they climbed. "That<61>s the ancient temple whose name is really hard to pronounce."</div>
|
||||||
|
<div>"Really?" Gadroc asked. "What's it called?"</div>
|
||||||
|
<div>"I<>d tell you, but it<69>s really hard to pronounce," explained the smith. He continued. "From what I understand, there<72>s a mystical artifact that can cure any curse. We<57>re going to use it to cure your werewolf problem."</div>
|
||||||
|
<div>"Why didn<64>t you tell me any of this on the way here? I<>ve been following you up this mountain for hours with no idea of what we<77>re doing."</div>
|
||||||
|
<div>"We took that part out in post. It was a really long and not very funny bit that didn't get much of a reaction out of anyone the first time this story was read out loud. It's a little trick the boys back home call 'the Director's Cut.'"</div>
|
||||||
|
<div>"Ah. That makes a lot of sense."</div>
|
||||||
|
<div>"Right?" The two laughed at that, looked at the camera for a moment, then back to each other. A laugh track played during this. It lasted for an uncomfortable amount of time. It was the kind of laughter that you think is about to die down, but then it kicks right back up again. There<72>s also that one lady who<68>s cackling like a hyena having a tea party with a witch. You try to unhear her, but you just keep noticing her. Why do sitcoms think laugh tracks add anything to the show? It doesn't. That shit just doesn<73>t sit right with me.</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family:Palatino Linotype; color: #311E12; font-size: 14px; background-color: #F7F5EA; margin: 15px;}
|
||||||
|
div {text-indent: 30pt;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>They continued to hike up the mountain. After a little while, they reached the temple. The door was guarded by two dog-men holding spears.</div>
|
||||||
|
<div>"Who are these guys?" Gadroc asked.</div>
|
||||||
|
<div>"Let me handle this," assured Carne. "How<6F>s it going gentlemen?" The dog-men stepped closer and crossed their spears across the door.</div>
|
||||||
|
<div>"Listen boys, there<72>s no need for the attitude," said the smith. The dog-men began to growl at him.</div>
|
||||||
|
<div>Carne frowned. "Hey now, that<61>s just rude." The dog-men responded to this by shoulder-checking Carne, knocking him to the ground. Gadroc sighed and walked up to the armored, bipedal golden retriever.</div>
|
||||||
|
<div>"Who<68>s a good boy?" Gadroc said as he began to scratch the dog behind his cutie ears. The dog-man turned his head into Gadroc<6F>s hand and began to pant.</div>
|
||||||
|
<div>Gadroc continued. "You are! You<6F>re a good boy! Oh it<69>s you!" The dog barked as if to say, "YES IT IS ME, I AM THE GOOD BOY." The dog-man eventually got down on all fours, stomped around in a circle a bit, and promptly fell asleep. The other guard whimpered. He had felt that he had been a good boy too, and that he deserved scratchies just as much as his partner, if not more. He conveyed this to Gadroc in a single bark. Gadroc turned to him.</div>
|
||||||
|
<div>"Oh I know! You<6F>ve been a good boy too!" He pet the guard for a little bit, then pulled an ear of corn out of his pocket.</div>
|
||||||
|
<div>"You want a treat boy?" Gadroc asked, as he held up the corn. The dog nodded violently and made a couple of attempts to nibble on the corn, but Gadroc pulled it away before he could.</div>
|
||||||
|
<div>"Go get it!" shouted Gadroc as he threw the corn down the mountain. The dog guard threw his spear to the side as he bounded after the corn bouncing down the path. Certain the guard had made it out of sight, Gadroc went to help Carne up.</div>
|
||||||
|
<div>"Where did you learn to deal with Canine-sapiens like that?" Carne asked.</div>
|
||||||
|
<div>"Well, if you think about it, werewolves are technically part dog. Plus, I just know a good boy when I see one."</div>
|
||||||
|
<div>The two stepped through the doors of the temple. At the end of the long, church-like room was a marble altar on a platform, with a set of stairs leading up to it. On the altar sat a small, simple wooden box. From above, a light fell gently on the box, giving it a soft, almost holy glow. The stained glass windows at the back of the room were arranged in such a way that they almost seemed to be pointing at the box. Many different flowers were arranged on either side of the box and at the foot of the altar.</div>
|
||||||
|
<div>"Call it a hunch," Carne said slowly, "but I think those flowers might be important somehow. I just get that feeling, I couldn<64>t tell you why."</div>
|
||||||
|
<div>"It<49>s the box that<61>s important, or whatever's in it," Gadroc said dryly. "The only thing that could make it more obvious is if a huge, luminescent sign dropped down with blinking arrows that read, <20>There<72>s probably a magic artifact in this box.<2E>" Just then, a huge luminescent sign with blinking arrows that read, "There<72>s probably a magic artifact in this box." dropped down. Gadroc pinched the bridge of his nose.</div>
|
||||||
|
<div>"Do you think there might be a secret compartment in the altar? I bet that<61>s where the artifact is," pondered the smith.</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family:Palatino Linotype; color: #311E12; font-size: 14px; background-color: #F7F5EA; margin: 15px;}
|
||||||
|
div {text-indent: 30pt;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>"Welcome to the temple of Ivyechneyoveen Kah<61>al, my children," came a voice.</div>
|
||||||
|
<div>"Who said that?" Gadroc asked. "So that<61>s how it<69>s pronounced," mused Carne. A figure stepped out from behind a pillar. It was a robed dog-woman, an ancient St. Bernard.</div>
|
||||||
|
<div>The dog lady spoke again. "Have you come to give your thanks to Orcville?"</div>
|
||||||
|
<div>"I<>m sorry, who?" Gadroc asked, confused.</div>
|
||||||
|
<div>"Yes, Orcville Redenbacher. He blessed the world with his glorious popcorn and saved our souls."</div>
|
||||||
|
<div>"Wait," interrupted Carne. "Then why is it called the temple of Itchyville Cable?"</div>
|
||||||
|
<div>"Ivyechneyoveen Kah<61>al," corrected the priestess with a polite smile.</div>
|
||||||
|
<div>"Yeah, that<61>s what I said."</div>
|
||||||
|
<div>"I<>d be glad to enlighten you, my child. It all started when..." The priestess lengthy explanation on the history and fine points of the religion of the dog people. It didn<64>t make the slightest bit of sense, though Carne did have a bit of a chuckle at the part where Orcville defeated the demon lord who wouldn't stop pretending to throw a ball to go fetch and then never actually throw the ball. Gadroc nearly fell asleep on his feet. He decided not to take part in the theological discussion and turned his attention back to the box. He walked up to the altar platform and climbed the steps. Carefully he opened the two small, wooden doors on the front of the box. Words could not describe his excitement. Inside the box was...</div>
|
||||||
|
<div>"A hot dog?" Gadroc asked aloud. He was thoroughly baffled. Inside the box was a golden hot dog that sparkled in the light. He couldn<64>t tell whether or not it had ketchup, mustard, or even relish on it; it was all gold.</div>
|
||||||
|
<div>"What are you doing with our sacred artifact?" shouted the dog priestess. Gadroc jumped, startled. He was too busy thinking about what gold tasted like.</div>
|
||||||
|
<div>"Uh... I need it... for... a friend," Gadroc lied, incredibly convincingly.</div>
|
||||||
|
<div>"You<6F>d better not eat that because that<61>s totally not how a magic artifact shaped like a hot dog would work!" screeched the priestess.</div>
|
||||||
|
<div>Gadroc looked again at the supposed cure to all his problems. It was right there in his hands! "You<6F>re not my mom!" he shouted, and promptly shoved the entire hot dog in his mouth and made a break for the door. Carne seemed impressed.</div>
|
||||||
|
<div>"Damn," he said. "Wish I could run that fast after stuffing an entire hot dog in my mouth. Last time I did that I got a hernia." He turned to the dog priestess.</div>
|
||||||
|
<div>"So, uh... wanna go grab some popcorn later?" The priestess slapped him across the face. "Right. I'll get goin', then. Sorry about the hot dog. We'll make you a new one." Carne began to head in Gadroc's direction.</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family:Palatino Linotype; color: #311E12; font-size: 14px; background-color: #F7F5EA; margin: 15px;}
|
||||||
|
h1 {font-family:Palatino Linotype; color: #311E12; font-size: 17px; text-align: center;}
|
||||||
|
div {text-indent: 30pt;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>"Gadroc, where are you?" Carne shouted. "You can come out now, she didn<64>t follow us." Gadroc looked around and slowly stepped out from behind a tree that didn't even come close to consealing him whatsoever.</div>
|
||||||
|
<div>"I... I don<6F>t know if it worked, Carne," the boy said nervously.</div>
|
||||||
|
<div>"Here," said the smith. He handed Gadroc a small, folded up piece of paper. Almost the exact moment Gadroc<6F>s fingers touched it, Carne leapt like an orc-lympic death hurdle sprinter and combat rolled to take cover behind a nearby fallen tree. Gadroc unfolded the paper, hands trembling. On it was a pin up of a real buff orc dude. His shirtless body was ripped and glistening with sweat. He held a wrench and his jeans were not tight around his waist. Another shot showed him crouched down in front of a sink, which was confusing because plumbing was not very popular yet. The orc<72>s loose jeans were sagging down his pants, and they revealed the glowing, firm cheeks of his fine behind. A single tear rolled down Gadroc<6F>s face.</div>
|
||||||
|
<div>"Carne," he sniffed. "It worked." Carne came out from behind the log and wiped the sweat from his brow with a "Phew!"</div>
|
||||||
|
<div>"It<49>s beautiful, Carne," Gadroc went on.</div>
|
||||||
|
<div>"Keep it, kid," the blacksmith said with a smile. "You need it more than I do. Let<65>s go home."</div>
|
||||||
|
<div>Gadroc had gold poop for a week.</div>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h1><b>Fin.</b></h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
386
code/modules/library/hardcode_library/fiction/schnayy.dm
Normal file
386
code/modules/library/hardcode_library/fiction/schnayy.dm
Normal file
@@ -0,0 +1,386 @@
|
|||||||
|
/*
|
||||||
|
CKEY: Schnayy
|
||||||
|
CATEGORY: Fiction
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Beyond the Door - Philip K. Dick
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/fiction/beyondthedoor
|
||||||
|
name = "Beyond the Door"
|
||||||
|
desc = "A hardbound book titled 'Beyond the Door' by Philip K. Dick."
|
||||||
|
description_info = "This book is titled 'Beyond the Door' by Philip K. Dick. There is a blurb on the back: <BR>\
|
||||||
|
Larry Thomas bought a cuckoo clock for his wife - without knowing the price he would have to pay."
|
||||||
|
|
||||||
|
title = "Beyond the Door"
|
||||||
|
icon_state = "book1"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Philip K. Dick"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-size: 16px; font-family: Impact; color: white; margin: 15px 0px 5px;}
|
||||||
|
h2 {font-size: 13px; font-family: Courier New; color: white; margin: 15px 0px 5px;}
|
||||||
|
body {font-size: 13px; font-family: Verdana; background-color: #000000;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<center><h1>Beyond the Door</h1>
|
||||||
|
<h2>by Philip K. Dick</h2></center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; color: black; font-family: Verdana; background-color: #FFFFFF;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<b>That night at the dinner table</b> he brought it out and set it down beside her plate. Doris stared at it, her hand to her mouth. "My God, what is it?" She looked up at him, bright-eyed.
|
||||||
|
<br><br>
|
||||||
|
"Well, open it."
|
||||||
|
<br><br>
|
||||||
|
Doris tore the ribbon and paper from the square package with her sharp nails, her bosom rising and falling. Larry stood watching her as she lifted the lid. He lit a cigarette and leaned against the wall.
|
||||||
|
<br><br>
|
||||||
|
"A cuckoo clock!" Doris cried. "A real old cuckoo clock like my mother had." She turned the clock over and over. "Just like my mother had, when Pete was still alive." Her eyes sparkled with tears.
|
||||||
|
<br><br>
|
||||||
|
"It's made in Germany," Larry said. After a moment he added, "Carl got it for me wholesale. He knows some guy in the clock business. Otherwise I wouldn't have-" He stopped.
|
||||||
|
<br><br>
|
||||||
|
Doris made a funny little sound.
|
||||||
|
<br><br>
|
||||||
|
"I mean, otherwise I wouldn't have been able to afford it." He scowled. "What's the matter with you? You've got your clock, haven't you? Isn't that what you want?"
|
||||||
|
<br><br>
|
||||||
|
Doris sat holding onto the clock, her fingers pressed against the brown wood.
|
||||||
|
<br><br>
|
||||||
|
"Well," Larry said, "what's the matter?"
|
||||||
|
<br><br>
|
||||||
|
He watched in amazement as she leaped up and ran from the room, still clutching the clock. He shook his head. "Never satisfied. They're all that way. Never get enough."
|
||||||
|
<br><br>
|
||||||
|
He sat down at the table and finished his meal.
|
||||||
|
<br><br>
|
||||||
|
The cuckoo clock was not very large. It was hand-made, however, and there were countless frets on it, little indentations and ornaments scored in the soft wood. Doris sat on the bed drying her eyes and winding the clock. She set the hands by her wristwatch. Presently she carefully moved the hands to two minutes of ten. She carried the clock over to the dresser and propped it up.
|
||||||
|
<br><br>
|
||||||
|
Then she sat waiting, her hands twisted together in her lap - waiting for the cuckoo to come out, for the hour to strike.
|
||||||
|
<br><br>
|
||||||
|
As she sat she thought about Larry and what he had said. And what she had said, too, for that matter - not that she could be blamed for any of it. After all, she couldn't keep listening to him forever without defending herself; you had to blow your own trumpet in the world.
|
||||||
|
<br><br>
|
||||||
|
She touched her handkerchief to her eyes suddenly. Why did he have to say that, about getting it wholesale? Why did he have to spoil it all? If he felt that way he needn't have got it in the first place. She clenched her fists. He was so mean, so damn mean.
|
||||||
|
<br><br>
|
||||||
|
But she was glad of the little clock sitting there ticking to itself, with its funny grilled edges and the door. Inside the door was the cuckoo, waiting to come out. Was he listening, his head cocked on one side, listening to hear the clock strike so that he would know to come out?
|
||||||
|
<br><br>
|
||||||
|
Did he sleep between hours? Well, she would soon see him: she could ask him. And she would show the clock to Bob. He would love it; Bob loved old things, even old stamps and buttons. He liked to go with her to the stores. Of course, it was a little awkward, but Larry had been staying at the office so much, and that helped. If only Larry didn't call up sometimes to-
|
||||||
|
<br><br>
|
||||||
|
There was a whirr. The clock shuddered and all at once the door opened. The cuckoo came out, sliding swiftly. He paused and looked around solemnly, scrutinizing her, the room, the furniture.
|
||||||
|
<br><br>
|
||||||
|
It was the first time he had seen her, she realized, smiling to herself in pleasure. She stood up, coming toward him shyly. "Go on," she said. "I'm waiting."
|
||||||
|
<br><br>
|
||||||
|
The cuckoo opened his bill. He whirred and chirped, quickly, rhythmically. Then, after a moment of contemplation, he retired. And the door snapped shut.
|
||||||
|
<br><br>
|
||||||
|
She was delighted. She clapped her hands and spun in a little circle. He was marvelous, perfect! And the way he had looked around, studying her, sizing her up. He liked her; she was certain of it. And she, of course, loved him at once, completely. He was just what she had hoped would come out of the little door.
|
||||||
|
<br><br>
|
||||||
|
Doris went to the clock. She bent over the little door, her lips close to the wood. "Do you hear me?" she whispered. "I think you're the most wonderful cuckoo in the world." She paused, embarrassed. "I hope you'll like it here."
|
||||||
|
<br><br>
|
||||||
|
Then she went downstairs again, slowly, her head high.
|
||||||
|
<br><br>
|
||||||
|
Larry and the cuckoo clock really never got along well from the start. Doris said it was because he didn't wind it right, and it didn't like being only half-wound all the time. Larry turned the job of winding over to her; the cuckoo came out every quarter hour and ran the spring down without remorse, and someone had to be ever after it, winding it up again.
|
||||||
|
<br><br>
|
||||||
|
Doris did her best, but she forgot a good deal of the time. Then Larry would throw his newspaper down with an elaborate weary motion and stand up. He would go into the dining-room where the clock was mounted on the wall over the fireplace. He would take the clock down and making sure that he had his thumb over the little door, he would wind it up.
|
||||||
|
<br><br>
|
||||||
|
"Why do you put your thumb over the door?" Doris asked once.
|
||||||
|
<br><br>
|
||||||
|
"You're supposed to."
|
||||||
|
<br><br>
|
||||||
|
She raised an eyebrow. "Are you sure? I wonder if it isn't that you don't want him to come out while you're standing so close."
|
||||||
|
<br><br>
|
||||||
|
"Why not?"
|
||||||
|
<br><br>
|
||||||
|
"Maybe you're afraid of him."
|
||||||
|
<br><br>
|
||||||
|
Larry laughed. He put the clock back on the wall and gingerly removed his thumb. When Doris wasn't looking he examined his thumb.
|
||||||
|
<br><br>
|
||||||
|
There was still a trace of the nick cut out of the soft part of it. Who - or what - had pecked at him?
|
||||||
|
<br><br>
|
||||||
|
One Saturday morning, when Larry was down at the office working over some important special accounts, Bob Chambers came to the front porch and rang the bell.
|
||||||
|
<br><br>
|
||||||
|
Doris was taking a quick shower. She dried herself and slipped into her robe. When she opened the door Bob stepped inside, grinning.
|
||||||
|
<br><br>
|
||||||
|
"Hi," he said, looking around.
|
||||||
|
<br><br>
|
||||||
|
"It's all right. Larry's at the office."
|
||||||
|
<br><br>
|
||||||
|
"Fine." Bob gazed at her slim legs below the hem of the robe. "How nice you look today."
|
||||||
|
<br><br>
|
||||||
|
She laughed. "Be careful! Maybe I shouldn't let you in after all."
|
||||||
|
<br><br>
|
||||||
|
They looked at one another, half amused half frightened. Presently Bob said, "If you want, I'll--"
|
||||||
|
<br><br>
|
||||||
|
"No, for God's sake." She caught hold of his sleeve. "Just get out of the doorway so I can close it. Mrs. Peters across the street, you know."
|
||||||
|
<br><br>
|
||||||
|
She closed the door. "And I want to show you something," she said. "You haven't seen it."
|
||||||
|
<br><br>
|
||||||
|
He was interested. "An antique? Or what?"
|
||||||
|
<br><br>
|
||||||
|
She took his arm, leading him toward the dining-room. "You'll love it, Bobby." She stopped, wide-eyed. "I hope you will. You must; you must love it. It means so much to me - he means so much."
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; color: black; font-family: Verdana; background-color: #FFFFFF;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
"He?" Bob frowned. "Who is he?"
|
||||||
|
<br><br>
|
||||||
|
Doris laughed. "You're jealous! Come on." A moment later they stood before the clock, looking up at it. "He'll come out in a few minutes. Wait until you see him. I know you two will get along just fine."
|
||||||
|
<br><br>
|
||||||
|
"What does Larry think of him?"
|
||||||
|
<br><br>
|
||||||
|
"They don't like each other. Sometimes when Larry's here he won't come out. Larry gets mad if he doesn't come out on time. He says--"
|
||||||
|
<br><br>
|
||||||
|
"Says what?"
|
||||||
|
<br><br>
|
||||||
|
Doris looked down. "He always says he's been robbed, even if he did get it wholesale." She brightened. "But I know he won't come out because he doesn't like Larry. When I'm here alone he comes right out for me, every fifteen minutes, even though he really only has to come out on the hour."
|
||||||
|
<br><br>
|
||||||
|
She gazed up at the clock. "He comes out for me because he wants to. We talk; I tell him things. Of course, I'd like to have him upstairs in my room, but it wouldn't be right."
|
||||||
|
<br><br>
|
||||||
|
There was the sound of footsteps on the front porch. They looked at each other, horrified.
|
||||||
|
<br><br>
|
||||||
|
Larry pushed the front door open, grunting. He set his briefcase down and took off his hat. Then he saw Bob for the first time.
|
||||||
|
<br><br>
|
||||||
|
"Chambers. I'll be damned." His eyes narrowed. "What are you doing here?" He came into the dining-room. Doris drew her robe about her helplessly, backing away.
|
||||||
|
<br><br>
|
||||||
|
"I-" Bob began. "That is, we-" He broke off, glancing at Doris. Suddenly the clock began to whirr. The cuckoo came rushing out, bursting into sound. Larry moved toward him.
|
||||||
|
<br><br>
|
||||||
|
"Shut that din off," he said. He raised his fist toward the clock. The cuckoo snapped into silence and retreated. The door closed. "That's better." Larry studied Doris and Bob, standing mutely together.
|
||||||
|
<br><br>
|
||||||
|
"I came over to look at the clock," Bob said. "Doris told me that it's a rare antique and that--"
|
||||||
|
<br><br>
|
||||||
|
"Nuts. I bought it myself." Larry walked up to him. "Get out of here." He turned to Doris. "You too. And take that damn clock with you."
|
||||||
|
<br><br>
|
||||||
|
He paused, rubbing his chin. "No. Leave the clock here. It's mine; I bought it and paid for it."
|
||||||
|
<br><br>
|
||||||
|
In the weeks that followed after Doris left, Larry and the cuckoo clock got along even worse than before. For one thing, the cuckoo stayed inside most of the time, sometimes even at twelve o'clock when he should have been busiest. And if he did come out at all he usually spoke only once or twice, never the correct number of times. And there was a sullen, uncooperative note in his voice, a jarring sound that made Larry uneasy and a little angry.
|
||||||
|
<br><br>
|
||||||
|
But he kept the clock wound, because the house was very still and quiet and it got on his nerves not to hear someone running around, talking and dropping things. And even the whirring of a clock sounded good to him.
|
||||||
|
<br><br>
|
||||||
|
But he didn't like the cuckoo at all. And sometimes he spoke to him.
|
||||||
|
<br><br>
|
||||||
|
"Listen," he said late one night to the closed little door. "I know you can hear me. I ought to give you back to the Germans-- back to the Black Forest." He paced back and forth. "I wonder what they're doing now, the two of them. That young punk with his books and his antiques. A man shouldn't be interested in antiques; that's for women."
|
||||||
|
<br><br>
|
||||||
|
He set his jaw. "Isn't that right?"
|
||||||
|
<br><br>
|
||||||
|
The clock said nothing. Larry walked up in front of it. "Isn't that right?" he demanded. "Don't you have anything to say?"
|
||||||
|
<br><br>
|
||||||
|
He looked at the face of the clock. It was almost eleven, just a few seconds before the hour. "All right. I'll wait until eleven. Then I want to hear what you have to say. You've been pretty quiet the last few weeks since she left."
|
||||||
|
<br><br>
|
||||||
|
He grinned wryly. "Maybe you don't like it here since she's gone." He scowled. "Well, I paid for you, and you're coming out whether you like it or not. You hear me?"
|
||||||
|
<br><br>
|
||||||
|
Eleven o'clock came. Far off, at the end of town, the great tower clock boomed sleepily to itself. But the little door remained shut. Nothing moved. The minute hand passed on and the cuckoo did not stir. He was someplace inside the clock, beyond the door, silent and remote.
|
||||||
|
<br><br>
|
||||||
|
"All right, if that's the way you feel," Larry murmured, his lips twisting. "But it isn't fair. It's your job to come out. We all have to do things we don't like."
|
||||||
|
<br><br>
|
||||||
|
He went unhappily into the kitchen and opened the great gleaming refrigerator. As he poured himself a drink he thought about the clock.
|
||||||
|
<br><br>
|
||||||
|
There was no doubt about it - the cuckoo should come out, Doris or no Doris. He had always liked her, from the very start. They had got along well, the two of them. Probably he liked Bob too - probably he had seen enough of Bob to get to know him. They would be quite happy together, Bob and Doris and the cuckoo.
|
||||||
|
<br><br>
|
||||||
|
Larry finished his drink. He opened the drawer at the sink and took out the hammer. He carried it carefully into the dining-room. The clock was ticking gently to itself on the wall.
|
||||||
|
<br><br>
|
||||||
|
"Look," he said, waving the hammer. "You know what I have here? You know what I'm going to do with it? I'm going to start on you - first." He smiled. "Birds of a feather, that's what you are - the three of you."
|
||||||
|
<br><br>
|
||||||
|
The room was silent.
|
||||||
|
<br><br>
|
||||||
|
"Are you coming out? Or do I have to come in and get you?"
|
||||||
|
<br><br>
|
||||||
|
The clock whirred a little.
|
||||||
|
<br><br>
|
||||||
|
"I hear you in there. You've got a lot of talking to do, enough for the last three weeks. As I figure it, you owe me--"
|
||||||
|
<br><br>
|
||||||
|
The door opened. The cuckoo came out fast, straight at him. Larry was looking down, his brow wrinkled in thought. He glanced up, and the cuckoo caught him squarely in the eye.
|
||||||
|
<br><br>
|
||||||
|
Down he went, hammer and chair and everything, hitting the floor with a tremendous crash. For a moment the cuckoo paused, its small body poised rigidly. Then it went back inside its house. The door snapped tight-shut after it.
|
||||||
|
<br><br>
|
||||||
|
The man lay on the floor, stretched out grotesquely, his head bent over to one side. Nothing moved or stirred. The room was completely silent, except, of course, for the ticking of the clock.
|
||||||
|
<br><br>
|
||||||
|
"I see," Doris said, her face tight. Bob put his arm around her, steadying her.
|
||||||
|
<br><br>
|
||||||
|
"Doctor," Bob said, "can I ask you something?"
|
||||||
|
<br><br>
|
||||||
|
"Of course," the doctor said.
|
||||||
|
<br><br>
|
||||||
|
"Is it very easy to break your neck, falling from so low a chair? It wasn't very far to fall. I wonder if it might not have been an accident. Is there any chance it might have been--"
|
||||||
|
<br><br>
|
||||||
|
"Suicide?" the doctor rubbed his jaw. "I never heard of anyone committing suicide that way. It was an accident; I'm positive."
|
||||||
|
<br><br>
|
||||||
|
"I don't mean suicide," Bob murmured under his breath, looking up at the clock on the wall. "I meant something else."
|
||||||
|
<br><br>
|
||||||
|
<center>But no one heard him.</center>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
|
|
||||||
|
/// The Man From Snowy River by A.B. "Banjo" Paterson
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/fiction/manfromsnowyriver
|
||||||
|
name = "The Man From Snowy River"
|
||||||
|
desc = "A hardbound book titled 'The Man From Snowy River' by A.B. 'Banjo' Paterson."
|
||||||
|
description_info = "This book is titled 'The Man From Snowy River' by A.B. 'Banjo' Paterson."
|
||||||
|
|
||||||
|
title = "The Man From Snowy River"
|
||||||
|
icon_state = "book3"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "A.B. Paterson"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-size: 16px; font-family: Lucida Console; color: #623A13; margin: 15px 0px 5px; border-color: #623A13; border-style: double; border-radius: 5px;}
|
||||||
|
body {font-size: 13px; font-family: Verdana; background-color: #D2C2B2;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<center><h1>The Man From Snowy River<br><br>
|
||||||
|
<font face="Times New Roman" size="4" color="#623A13">A.B. Paterson</font></h1></center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 15px; font-family: Times New Roman; color: #623A13; background-color: #F5F0EB;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<hr>
|
||||||
|
<center>
|
||||||
|
There was movement at the station, for the word had passed around<br>
|
||||||
|
That the colt from old Regret had got away,<br>
|
||||||
|
And had joined the wild bush horses - he was worth a thousand pound,<br>
|
||||||
|
So all the cracks had gathered to the fray.<br>
|
||||||
|
All the tried and noted riders from the stations near and far<br>
|
||||||
|
Had mustered at the homestead overnight,<br>
|
||||||
|
For the bushmen love hard riding where the wild bush horses are,<br>
|
||||||
|
And the stockhorse snuffs the battle with delight.<br>
|
||||||
|
<br><br>
|
||||||
|
There was Harrison, who made his pile when Pardon won the cup,<br>
|
||||||
|
The old man with his hair as white as snow;<br>
|
||||||
|
But few could ride beside him when his blood was fairly up -<br>
|
||||||
|
He would go wherever horse and man could go.<br>
|
||||||
|
And Clancy of the Overflow came down to lend a hand,<br>
|
||||||
|
No better horseman ever held the reins;<br>
|
||||||
|
For never horse could throw him while the saddle girths would stand,<br>
|
||||||
|
He learnt to ride while droving on the plains.<br>
|
||||||
|
<br><br>
|
||||||
|
And one was there, a stripling on a small and weedy beast,<br>
|
||||||
|
He was something like a racehorse undersized,<br>
|
||||||
|
With a touch of Timor pony - three parts thoroughbred at least -<br>
|
||||||
|
And such as are by mountain horsemen prized.<br>
|
||||||
|
He was hard and tough and wiry - just the sort that won't say die -<br>
|
||||||
|
There was courage in his quick impatient tread;<br>
|
||||||
|
And he bore the badge of gameness in his bright and fiery eye,<br>
|
||||||
|
And the proud and lofty carriage of his head.<br>
|
||||||
|
<br><br>
|
||||||
|
But still so slight and weedy, one would doubt his power to stay,<br>
|
||||||
|
And the old man said, "That horse will never do<br>
|
||||||
|
For a long a tiring gallop - lad, you'd better stop away,<br>
|
||||||
|
Those hills are far too rough for such as you."<br>
|
||||||
|
So he waited sad and wistful - only Clancy stood his friend -<br>
|
||||||
|
"I think we ought to let him come," he said;<br>
|
||||||
|
"I warrant he'll be with us when he's wanted at the end,<br>
|
||||||
|
For both his horse and he are mountain bred.<br>
|
||||||
|
<br><br>
|
||||||
|
"He hails from Snowy River, up by Kosciusko's side,<br>
|
||||||
|
Where the hills are twice as steep and twice as rough,<br>
|
||||||
|
Where a horse's hoofs strike firelight from the flint stones every stride,<br>
|
||||||
|
The man that holds his own is good enough.<br>
|
||||||
|
And the Snowy River riders on the mountains make their home,<br>
|
||||||
|
Where the river runs those giant hills between;<br>
|
||||||
|
I have seen full many horsemen since I first commenced to roam,<br>
|
||||||
|
But nowhere yet such horsemen have I seen."<br>
|
||||||
|
<br><br>
|
||||||
|
So he went - they found the horses by the big mimosa clump -<br>
|
||||||
|
They raced away towards the mountain's brow, <br>
|
||||||
|
And the old man gave his orders, "Boys, go at them from the jump, <br>
|
||||||
|
No use to try for fancy riding now. <br>
|
||||||
|
And, Clancy, you must wheel them, try and wheel them to the right. <br>
|
||||||
|
Ride boldly, lad, and never fear the spills, <br>
|
||||||
|
For never yet was rider that could keep the mob in sight, <br>
|
||||||
|
If once they gain the shelter of those hills."<br>
|
||||||
|
<br><br>
|
||||||
|
So Clancy rode to wheel them - he was racing on the wing <br>
|
||||||
|
Where the best and boldest riders take their place, <br>
|
||||||
|
And he raced his stockhorse past them, and he made the ranges ring <br>
|
||||||
|
With the stockwhip, as he met them face to face. <br>
|
||||||
|
Then they halted for a moment, while he swung the dreaded lash, <br>
|
||||||
|
But they saw their well-loved mountain full in view, <br>
|
||||||
|
And they charged beneath the stockwhip with a sharp and sudden dash, <br>
|
||||||
|
And off into the mountain scrub they flew.<br>
|
||||||
|
<br><br>
|
||||||
|
Then fast the horsemen followed, where the gorges deep and black <br>
|
||||||
|
Resounded to the thunder of their tread, <br>
|
||||||
|
And the stockwhips woke the echoes, and they fiercely answered back <br>
|
||||||
|
From cliffs and crags that beetled overhead. <br>
|
||||||
|
And upward, ever upward, the wild horses held their way, <br>
|
||||||
|
Where mountain ash and kurrajong grew wide; <br>
|
||||||
|
And the old man muttered fiercely, "We may bid the mob good day, <br>
|
||||||
|
No man can hold them down the other side."<br>
|
||||||
|
<br><br>
|
||||||
|
When they reached the mountain's summit, even Clancy took a pull, <br>
|
||||||
|
It well might make the boldest hold their breath, <br>
|
||||||
|
The wild hop scrub grew thickly, and the hidden ground was full <br>
|
||||||
|
Of wombat holes, and any slip was death. <br>
|
||||||
|
But the man from Snowy River let the pony have his head, <br>
|
||||||
|
And he swung his stockwhip round and gave a cheer, <br>
|
||||||
|
And he raced him down the mountain like a torrent down its bed, <br>
|
||||||
|
While the others stood and watched in very fear.<br>
|
||||||
|
<br><br>
|
||||||
|
He sent the flint stones flying, but the pony kept his feet, <br>
|
||||||
|
He cleared the fallen timber in his stride, <br>
|
||||||
|
And the man from Snowy River never shifted in his seat - <br>
|
||||||
|
It was grand to see that mountain horseman ride. <br>
|
||||||
|
Through the stringybarks and saplings, on the rough and broken ground, <br>
|
||||||
|
Down the hillside at a racing pace he went; <br>
|
||||||
|
And he never drew the bridle till he landed safe and sound, <br>
|
||||||
|
At the bottom of that terrible descent.<br>
|
||||||
|
<br><br>
|
||||||
|
He was right among the horses as they climbed the further hill, <br>
|
||||||
|
And the watchers on the mountain standing mute,<br>
|
||||||
|
Saw him ply the stockwhip fiercely, he was right among them still,<br>
|
||||||
|
As he raced across the clearing in pursuit. <br>
|
||||||
|
Then they lost him for a moment, where two mountain gullies met <br>
|
||||||
|
In the ranges, but a final glimpse reveals <br>
|
||||||
|
On a dim and distant hillside the wild horses racing yet, <br>
|
||||||
|
With the man from Snowy River at their heels.<br>
|
||||||
|
<br><br>
|
||||||
|
And he ran them single-handed till their sides were white with foam. <br>
|
||||||
|
He followed like a bloodhound on their track, <br>
|
||||||
|
Till they halted cowed and beaten, then he turned their heads for home, <br>
|
||||||
|
And alone and unassisted brought them back. <br>
|
||||||
|
But his hardy mountain pony he could scarcely raise a trot,<br>
|
||||||
|
He was blood from hip to shoulder from the spur; <br>
|
||||||
|
But his pluck was still undaunted, and his courage fiery hot, <br>
|
||||||
|
For never yet was mountain horse a cur.<br>
|
||||||
|
<br><br>
|
||||||
|
And down by Kosciusko, where the pine-clad ridges raise <br>
|
||||||
|
Their torn and rugged battlements on high, <br>
|
||||||
|
Where the air is clear as crystal, and the white stars fairly blaze <br>
|
||||||
|
At midnight in the cold and frosty sky, <br>
|
||||||
|
And where around The Overflow the reed beds sweep and sway <br>
|
||||||
|
To the breezes, and the rolling plains are wide, <br>
|
||||||
|
The man from Snowy River is a household word today, <br>
|
||||||
|
And the stockmen tell the story of his ride.<br>
|
||||||
|
</center>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
285
code/modules/library/hardcode_library/non-fiction/PortedBooks.dm
Normal file
285
code/modules/library/hardcode_library/non-fiction/PortedBooks.dm
Normal file
@@ -0,0 +1,285 @@
|
|||||||
|
/*
|
||||||
|
Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors.
|
||||||
|
Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy
|
||||||
|
|
||||||
|
Category: Non-Fiction
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Free Sirisai: Light Bulbs by Sene of Sheraeshi.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/nonfiction/freesirisailightbulbs
|
||||||
|
name = "Free Sirisai: Light Bulbs"
|
||||||
|
desc = "A hardbound book titled \"Free Sirisai: Light Bulbs\" by Sene of Sheraeshi."
|
||||||
|
description_info = "This book is titled \"Free Sirisai: Light Bulbs\" by Sene of Sheraeshi. It appears to be about the different lighting needs of different sapient species, written from a Teshari author's view."
|
||||||
|
|
||||||
|
title = "Free Sirisai: Light Bulbs"
|
||||||
|
icon_state = "book5"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Sene of Sheraeshi"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Impact; font-size: 20px; color: #2E2726;}
|
||||||
|
body {font-family: Palatino Linotype; font-size: 14px; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
p.borders {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<center><h1>LIGHT BULBS</h1><br>
|
||||||
|
<sup>by Sene of Sheraeshi.</sup></center>
|
||||||
|
<hr>
|
||||||
|
<p class="borders">
|
||||||
|
One may find the problems inherent in co-habitation well illustrated through the ubiquity of light bulbs among virtually all settlements. In colonies like the <i>NCS Northern Star</i>, where I make my residence, the bulbs are uniform in design and output. But it is clear to see that various species require different amounts of light for proper vision -- we Teshari and our Tajaran comrades require less, while Dionaea require more. In addition, these light bulbs are low-heat, which the cold-blooded Unathi would certainly not prefer.
|
||||||
|
<br><br>
|
||||||
|
In short-- the standard light bulbs aboard even a cosmopolitan space station in the Vir Cluster are calibrated for the preferences and biology of humans and Skrell. It is obvious that we Teshari would benefit greatly from having structures tailored to our own culture and anatomy, from hallway redesign to the very filaments of the light-bulbs.
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
/// The Viability of Corporate Government by Yang Simiao
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/nonfiction/viabilityofcorporategov
|
||||||
|
name = "The Viability of Corporate Government"
|
||||||
|
desc = "A harbound book titled \"The Viability of Corporate Government\" by Yang Simiao."
|
||||||
|
description_info = "This book is titled \"The Viability of Corporate Government\" by Yang Simiao. It seems to be an opinion piece on the relationship between corporations and the stations they own."
|
||||||
|
|
||||||
|
title = "The Viability of Corporate Government"
|
||||||
|
icon_state = "book5"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Yang Simiao"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Courier New; font-size: 16px; color: #91BDB7; background-color: #111514; border-style: double solid; padding: 10px; text-align: center;}
|
||||||
|
body {background-color: #44836C}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<h1>The Viability of Corporate Government<br><small><i>by Yang Simiao</i></small></h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 10px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<i>Corporations frequently act</i> as the local government of space stations that they own and operate. This works fine for small stations - in fact, it might even be necessary, with the amount of support they tend to need. However, when stations get larger, and larger, and their populations soar to five and six digits, the situation becomes untenable.<br><br>
|
||||||
|
Representative democracies have been the most stable form of government for a variety of reasons. Firstly, they are a system that is not subject to the whims of a single person, or even a few, but are controlled by the general population, which is not as likely to shift rapidly and disastrously, not to mention far less likely to cause strife for the people. The second and more critical reason is that people, especially educated people with access to proper communications, desire the ability to rule their own lives. They may surrender this for material goods, but once material needs are satisfied, they will seek out the ability to fulfill their own purposes.<br><br>
|
||||||
|
Corporate government denies the ability to do this. It denies even the possibility, as why would a company give up a position that is giving them such amazing profits? The situation is untenable. Already we can see in some stations a small but growing element that is dissatisfied with the situation. Phrases like "tyranny" and "corporate dictatorship" are thrown around, and not without justification. If corporations do not act to give people control over the rule of their homes, things will go badly - for the companies.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 10px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
In a fringe system, the Relan system, there is a history of these actions. Because of the poverty of the system, companies neglected to provide properly for stations housing families - systems such as power and gravity failed regularly, and even life support was not nearly as reliable as is required in Sol space. This pushed the natural tension between the people and the faraway rulers to the breaking point far more quickly. The people won, and companies were greatly neutered, losing about 85% of their operations on moons and asteroids within the system. There are now two governments within the system - the Relan System Authority, based on the system's only garden world, Taron, essentially a puppet-state of the companies, and the Free Relan Alliance, the 'spacer' government of the stations, asteroids, and moons that rebelled and won their freedom. Despite the planet being wealthier, and the spacers having far tougher conditions, standards of living are much higher for the spacers.<br><br>
|
||||||
|
It is without a doubt that this will happen in Solar space if nothing changes. Corporations such as NanoTrasen and Grayson must, <i>must</i> give the people of their stations the authority to govern themselves.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
|
|
||||||
|
///A Brief History Of The Rise And Fall Of The Persian Empire by Satrap.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/nonfiction/riseandfallofpersianempire
|
||||||
|
name = "The Rise And Fall Of The Persian Empire"
|
||||||
|
desc = "A hardbound book titled \"A Brief History Of The Rise And Fall Of The Persian Empire\" by Satrap."
|
||||||
|
description_info = "This book is titled \"A Brief History Of The Rise And Fall Of The Persian Empire\" by Satrap. It covers the beginning and end of Earth's Persian Empire."
|
||||||
|
|
||||||
|
title = "The Rise And Fall Of The Persian Empire"
|
||||||
|
icon_state = "book6"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Satrap"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Courier New; color: #57401E; border-style: double; border-radius: 5px; border-color: #193A54; background-color: #CAA978;}
|
||||||
|
body {background-color: #855F78;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<center>
|
||||||
|
<h1><font size="5"><small>A Brief History Of</small><br><b>The Rise And Fall Of The Persian Empire</b></font><br>
|
||||||
|
<font size="3"><i>by Satrap</i></font></h1>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<center>The Persian empire was the world's first superpower. Under the rule of Cyrus II (also known as Cyrus The Great), the Persian empire spanned from three continents, and created a lasting legacy for empires of the future. Here, I will try to briefly explain how the empire came to be, and how it collapsed.</center>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center><b>Beginnings</b></center>
|
||||||
|
<div class="border">
|
||||||
|
The Persian empire first started as a vassal to the Median empire. In the year 612 B.C., the Medes had conquered much land, including the Assyrian capital of Nineveh. The Median king, Astyges, decided that he would arrange his daughter, Mandane, to the Persian king, Cambyses I. At this time, the Persians were little more than a tribe. With this marriage, he secured an alliance with the Persian people, and they soon bore a son they named Cyrus.<br><br>
|
||||||
|
Astyges had a dream, which his priests interpreted as a bad omen. They claimed that his grandson would one day overthrow him and grow an army to spread around the continent. To challenge this dream, he assigned his general, Harpagus, to kill his daughter's first child. He was ordered to take the infant and leave him to the mountainside to be eaten by the beasts, but he could not do that. Instead, he decided to give the child to an adoptive family.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center><b>Conquests</b></center>
|
||||||
|
<div class="border">
|
||||||
|
The young Cyrus was indeed an ambitious figure. As historical records show, the Median general Harpagus decided to betray the king and assisted Cyrus in speedily taking over the throne. By capturing the Median capital of Ecbtana, Cyrus became king of both the Persians and the Medes, uniting the people as one. The neighboring country of Lydia had threatened the Medes in the past, to which Cyrus used as a justification to invade and conquered them as well. Cyrus would then be known as Cyrus the Great, and would be praised by his people for his exploits. His actions earned him the admiration of his people and rivals alike.<br><br>
|
||||||
|
Cyrus' most famous conquest would be historical Babylon. The Babylonian empire was built along the river of the Euphrates, and was regarded as a treasure of the world. Tempted by the prize, Cyrus set his course.<br><br>
|
||||||
|
Babylon was surrounded by a massive wall, with some two-hundred manned arching posts alongside it. Attacking the city head on would surely result in failure. However, since the Euphrates river also flew directly inside parts of the city, Cyrus saw his chance. He instructed his men to dam the river, allowing his troops to advance through the lowered waters. A brief surprise attack followed, and Babylon was conquered.<br><br>
|
||||||
|
What's significant about the fall of Babylon, was how the Babylonians actually praised Cyrus for it. Nabondius, the former king, was at odds with the priests. They had claimed that he had not been facilitating religious ceremonies properly, and was interfering for his own benefit. When Cyrus came to power, he immediately ordered a reconstruction of all damaged temples and allowed religious practices to be commenced of any kind; Even though the Persians followed the religion of Zoroastrianism, they never forced any of their subjects to worship the same. Because of this, Persia was one of the first lands of religious tolerance, and many different beliefs could be found. The Jews, who had been slaves to Babylon, were released and given safe passage back to Jerusalem. Cyrus had been established as perhaps the earliest believer of human rights in the world.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center><b>A Superpower</b></center>
|
||||||
|
<div class="border">
|
||||||
|
By conquering Babylon, Cyrus had ultimately defeated the major threats to his empire, and expanded his borders to cover the Middle East, parts of Modern-day Turkey, Greece, Egypt, and Asia. Not only this, but his people were infatuated with him and how smoothly he ran his empire. Cyrus never ceased to expand his empire, until his death.<br><br>
|
||||||
|
Nearing his sixties, Cyrus continued to lead his troops to conquer more land and wealth for his people. Traveling up north, he encountered a tribe of people known as the Massagetae. According to legend, the tribal queen, Tomyris, witnessed Cyrus kill her son in battle. Tomyris proceeded to decapitate Cyrus and douse his head in a bucket of his own blood. A beautiful painting by the 18th century French Renaissance painter Jean-Simon Berthelemy depicts this gruesome scene.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center><b>Dynasty</b></center>
|
||||||
|
<div class="border">
|
||||||
|
Despite the death of their leader, the Persian empire remained a stable one. Cyrus' grandson, Darius I had immediately seized the throne. Darius wasted no time to carry on his grandfather's honor. He continued to expand the empire even further, all the way to the western hemisphere, right at the doorstep of the Greeks. Darius would be famous for his administrative prowess. He introduced the Satrap system to govern his lands. Since the territories were so vast, it was difficult for one man to effectively govern it all. Many rebellions would rise and would need to be quelled. Satraps were representatives of the king himself. They would serve as a governor of each Persian city-state. They would often enjoy the luxury of complete control of their lands if the king was away. This autocratic system of government would catch on in the form of autocracy in the western world.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<center><b>Collapse</b></center>
|
||||||
|
<div class="border">
|
||||||
|
Unfortunately, the empire would not last forever. After Darius The Great passed away, his heir Xerxes had much difficulties fending off the Greeks from his empire. A series of failures both in land and in naval combat marked a decline in Persian power. Suddenly, the whole world would be shocked, as a young Macedonian king named Alexander The Great would sweep through Persia and destroy the entire empire in a single campaign. By 330 B.C., the Persian empire had collapsed into several sprawling states, never to fully see the glory of it's legacy again.<br><br>
|
||||||
|
The empire lasted approximately 250 years through several generations, and the contributions it has made to society as we know it is immeasurable.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
|
|
||||||
|
/// An Explanation of the Skrellian Caste System by Jyotirao Phule.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/nonfiction/skrelliancastesystem
|
||||||
|
|
||||||
|
name = "An Explanation of the Skrellian Caste System"
|
||||||
|
desc = "A hardbound book titled \"An Explanation of the Skrellian Caste System\" by Jyotirao Phule."
|
||||||
|
description_info = "This book is titled \"An Explanation of the Skrellian Caste System\" by Jyotirao Phule."
|
||||||
|
|
||||||
|
title = "An Explanation of the Skrellian Caste System"
|
||||||
|
icon_state = "book7"
|
||||||
|
origkey = "Schayy"
|
||||||
|
author = "Jyotirao Phule"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: MS Serif; color: #1E2527;}
|
||||||
|
body {font-family: Palatino Linotype; color: #1E2527; background-color: #F8F6ED; text-align: center;}
|
||||||
|
.border {border-style: double; border-radius: 5px; border-color: #193A54; background-color: #A8D2DE;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<div class="border">
|
||||||
|
<h1>An Explanation of the Skrellian Caste System</h1>
|
||||||
|
by Jyotirao Phule<br><br>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #1E2527; background-color: #F5F5F1;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #1E2527; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
Many Humans and Tajaran consider the Skrellian Caste system to be a relatively egalitarian social model, as it is seemingly unaccompanied by the political and economic subjugation that follows historical human and Tajaran modes of oppression. This is the model of the Caste system presented by the wealthiest parts of Skrellian space, and to judge the Caste system by how it operates on Qerr'Balak would be akin to judging laissez-faire economics based on how it operates on Luna, or the Overseer political system based on how it operated for the Overseers. In order to understand the repercussions of a social system, one must understand how it operated for the most marginalized - the out-caste. <br><br>
|
||||||
|
Skrellian education is viewed to be a life-long endeavor, and it is expected that a well-educated individual stay in formal schooling, known as Keri-Gloa, until the age of twenty-five. Keri-Gloa is not universal, however, but rather segregated into castes with education carefully selected to teach Skrell only what is befitting to someone of their social status. My own education as a member of the Kanin-Katish, for example, was heavy on education on architecture and engineering while the social sciences, arts, and research-based sciences were untouched. To drop out of this education leaves one a stigmatized Qrri-Mog, for which a very rough translation into Galactic Common would be a "lesser worker", but this does not fully encapsulate the stigma surrounding it. Qrri-Mog are viewed as unenlightened, stupid, and unworthy of job opportunities that involve any level of mental capacity, even if such a person has education from other sources. Thus, those unsatisfied with their caste's occupation is given two choices - conform, or face unemployment. Though there is no political mechanism to force conformity, there is an economic mechanism which enforces the status quo.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #1E2527; background-color: #F5F5F1;}
|
||||||
|
.border {border-style: double solid; border-radius: 5px; border-color: #1E2527; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
Qrri-Mog are also denied political opportunity to change the social structure from within. Most Skrellian city-states have a two-pronged political system, with a head of state known as the Qerr-Skria who has both executive and judiciary power, and a legislative body known as the Xaq Moglar. Both of these are highly exclusive. Let us begin with the Qerr-Skria, which is the clearest sign of caste inequality, as the Qerr-Skria is selected only from the Qerr-Katish caste, which translates roughly to "Highest Caste". A quick note on Skrellian linguistics is that the two most common prefixs are Qerr, which is high or good, and Qrii, which is low or bad. The Qerr-Katish represent a small minority of Skrell, receive the highest education available separate from other castes from the earliest levels, and are the only Skrell eligible for the position of Qerr-Skria. I hope that I do not need to explain to the reader the inequity of that. The nature of the position of Qerr-Skria, specifically their advisers, also structurally enforces caste conformity. The Qerr-Skria appoints a body of advisers known as the Qerr-Koal from the members of each caste considered to be the wisest, which directly correlates to those who best succeeded in their assigned educational path. Out-castes who pursue education outside of this path are illegible. This is true of the Xaq Moglar as well, which is composed entirely of academics, which is to say that Qrri-Mog, and thus out-castes as well, cannot be heard in legislature. With no internal voice in politics, out-castes have no choice but to either suffer in silence or make change from outside of the political system.<br><br>
|
||||||
|
Thus, the Caste system perpetuates itself and its inequity. All Skrellian citizens are given a single choice and no other options - conform, or exist outside of all available power structures. By restricting power only to those who fit within the caste system, no internal change has been possible, and the only way that it can be changed is by creating forces outside of the existing power structure, be it revolution, protest, or garnering the support of outside governments.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
371
code/modules/library/hardcode_library/reference/PortedBooks.dm
Normal file
371
code/modules/library/hardcode_library/reference/PortedBooks.dm
Normal file
@@ -0,0 +1,371 @@
|
|||||||
|
/*
|
||||||
|
Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors.
|
||||||
|
Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy
|
||||||
|
|
||||||
|
Category: Reference
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Recycling Procedures by 'Astrid Morton'.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/reference/recyclingprocedures
|
||||||
|
name = "Recycling Procedures"
|
||||||
|
desc = "A hardbound book titled \"Recycling Procedures\" by Astrid Morton."
|
||||||
|
description_info = "This book is titled \"Recycling Procedures\" by Astrid Morton. It appears to be about ways you can help recycle on your average space station."
|
||||||
|
|
||||||
|
title = "Recycling Procedures"
|
||||||
|
icon_state = "book7"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Astrid Morton"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {color: #FFFFFF; border-style: double solid; border-color: #FFFFFF;}
|
||||||
|
body {background-color: #6D8495;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<center>
|
||||||
|
<h1><font face="Impact">Recycling Procedures</font><br>
|
||||||
|
<font face="Arial" size="2">Penned by Astrid Morton</font></h1>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 17px; color: #43494F; border-style: solid; border-color: #43494F; padding: 10px;}
|
||||||
|
h2 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
p.borders {border-style: double; border-color: #43494F; padding: 7px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<h1>Station-Side Recycling Procedures</h1>
|
||||||
|
</center>
|
||||||
|
<hr>
|
||||||
|
<center>
|
||||||
|
<h2>Resource Re-purposing</h2>
|
||||||
|
</center>
|
||||||
|
<p class="borders">
|
||||||
|
<b>Cardboard Products</b><br>
|
||||||
|
Most cardboard-based products, especially any boxes you may find, can be broken down to a sheet and stacked up. From there, you can reuse it to make folders, more boxes, or anything else you may need (such as a clever disguise).
|
||||||
|
<br><br>
|
||||||
|
<b>Glass Bulbs</b><br>
|
||||||
|
Do not throw away your burnt out, broken light bulbs: collect them! These bulbs can be inserted into the nearest autolathe where their glass can be re-purposed. Broken bulbs and tubes both fit inside: just mind the sharp edges if they've been shattered.
|
||||||
|
<br><br>
|
||||||
|
<b>Glass Shards</b><br>
|
||||||
|
Did somebody break a window again? No matter, put on your welding goggles and you can re-purpose those glass shards right there on the spot by melting it down back to a more useful state.
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
p.borders {border-style: double; border-color: #43494F; padding: 7px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<hr>
|
||||||
|
<center>
|
||||||
|
<h1>Disposals Reclamation</h1>
|
||||||
|
<p class="borders">
|
||||||
|
<b>Sifting through ...stuff.</b><br>
|
||||||
|
You would be amazed at the amount of materials that get flushed down disposals: and nearly half of it isn't garbage. People flush things down disposals all the time just to get rid of it: bags, tools, boxes. For one reason or another, some idiot in medbay has thrown away a perfectly good lab coat again. The engineer? They've thrown down an entire toolbox: empty, because they've probably stuffed its contents into their own tool belt.
|
||||||
|
<br><br>
|
||||||
|
What. A. Tool.
|
||||||
|
<br><br>
|
||||||
|
All theses objects need is a quick clean and then they can be redistributed or reused by someone else, so put on some gloves and start digging!
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
<center>
|
||||||
|
<h1>Maintenance Meandering</h1>
|
||||||
|
</center>
|
||||||
|
<br>
|
||||||
|
<p class="borders">
|
||||||
|
<b>Searching for Treasure</b><br>
|
||||||
|
Like disposals, maintenance can be a 117th wonder of the universe. Lord knows how this stuff ends up in these tunnels: Drills. Shades. Cuffs. All these things can get organized and replaced in appropriate storage areas, but keep in mind: Some of that stuff's there for a reason, such as the emergency internals, gas masks, fire extinguishers, and flashlights. These types of objects should stay there: But if you find a bottle of liquor in a crate somewhere? Hell, why not bring that on home for a good time?
|
||||||
|
</p>
|
||||||
|
</center>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
|
|
||||||
|
///A Guide to FBP and Prosthetic Maintenance by Yuki Matsuda. Was edited to be more accurate and fixed typos.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/reference/fbpandprostheticmaintenance
|
||||||
|
name = "A Guide to FBP and Prosthetic Maintenance"
|
||||||
|
desc = "A hardbound book titled \"A Guide to FBP and Prosthetic Maintenance\" by Yuki Matsuda."
|
||||||
|
description_info = "This book is titled \"A Guide to FBP and Prosthetic Maintenance\" by Yuki Matsuda. It appears to cover general steps for repairing prosthetics."
|
||||||
|
|
||||||
|
title = "A Guide to FBP and Prosthetic Maintenance"
|
||||||
|
icon_state = "bookEngineering"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Yuki Matsuda"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Courier New; font-size: 17px; color: #0C1B2C; text-align: center; margin: 10px 5px;}
|
||||||
|
body {font-family: Courier New; font-size: 15px; color: #0C1B2C; text-align: center; background-color: #0C1B2C;}
|
||||||
|
.border {border-style: double solid; border-color: #0C1B2C; background-color: #C1BCB9;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<br><br>
|
||||||
|
<div class="border">
|
||||||
|
<h1><br>A Guide to <br>FBP and Prosthetic Maintenance<br><br></h1>
|
||||||
|
<b>by Yuki Matsuda</b><br><br>
|
||||||
|
<br><br>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F; text-align: center;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
.borders {border-style: double; border-color: #43494F; padding: 7px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Introduction</h1>
|
||||||
|
<div class="borders">
|
||||||
|
This is a guide for anyone interested in the field of robotics, specifically in the field of FBP and prosthetic repair and maintenance, or anyone who is looking to learn how to care for themselves or others.
|
||||||
|
<br><br>
|
||||||
|
In this guide will go through the basics of how to repair physical damage, electrical damage as well as more complex things such as repairing damage to the internal structure of the prosthetic, rewiring the inner workings of a prosthetic.
|
||||||
|
<br><br>
|
||||||
|
On top of all that we will also go over how to repair prosthetic hearts or eyes, as well as how to initiate a hard reset on an FBP's systems after a large amount of damage has been inflicted on the individual.
|
||||||
|
</div>
|
||||||
|
<h1>Tools</h1>
|
||||||
|
<div class="borders">
|
||||||
|
Before you start working on repairs, you should have the following parts on hand:<br>
|
||||||
|
<ul>
|
||||||
|
<li>Cyborg Scanner. </li>
|
||||||
|
<li>Welder. </li>
|
||||||
|
<li>Wire Cable </li>
|
||||||
|
<li>Screwdriver </li>
|
||||||
|
<li>Crowbar </li>
|
||||||
|
<li>Wire cutters </li>
|
||||||
|
<li>Multitool </li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F; text-align: center;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
.borders {border-style: double; border-color: #43494F; padding: 7px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Basic Repairs</h1>
|
||||||
|
<div class="borders">
|
||||||
|
When the damage is superficial, the following steps can be taken.
|
||||||
|
<ul>
|
||||||
|
<li>Scan the patient with your cyborg scanner.</li>
|
||||||
|
<li>If the damage is physical in nature, weld the affected area free of dents. Don't forget your welding protection.</li>
|
||||||
|
<li>If the damage appears electrical, search for burnt or damaged wires and replace them.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<h1>Advanced Repairs</h1>
|
||||||
|
<div class="borders">
|
||||||
|
When the damage is severe and extends past the surface, the following steps can be taken.
|
||||||
|
<ul>
|
||||||
|
<li>Ensure the damage is internal. If an area registers as 30 or higher on your scanners, it is internal.</li>
|
||||||
|
<li>Use a screwdriver to remove screws from the appropriate maintenance panel.
|
||||||
|
Crowbar the panel open.</li>
|
||||||
|
<li>Follow the basic steps appropriate to the damage: inner structures can be repaired through welding, while electrical damages can be rewired.</li>
|
||||||
|
<li>Crowbar the panel closed to finish.</li>
|
||||||
|
</ul>
|
||||||
|
Additionally, more delicate parts of the FBP may be damaged. For things such as the microbatteries, eyes, and brain, the following steps may help you.
|
||||||
|
<ul>
|
||||||
|
<li>Open the appropriate segment: either the head or the torso.</li>
|
||||||
|
<li>Using a screwdriver -- or preferably, nanopaste -- you may repair these parts.</li>
|
||||||
|
<li>Remember to close the segment when you are finished.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F; text-align: center;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
.borders {border-style: double; border-color: #43494F; padding: 7px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Jumper Cables</h1>
|
||||||
|
<div class="borders">
|
||||||
|
Should your patient be damaged to the point where their systems need to be jump started, you'll need your nearby jumper cables.
|
||||||
|
<ul>
|
||||||
|
<li>Repair the damages as explained above.</li>
|
||||||
|
<li>Prepare your jumper cables. You should hold the device on your back and take the paddles into both hands.</li>
|
||||||
|
<li>Place the paddles on their chest and give them a shock.</li>
|
||||||
|
<li>Sometimes, damage to the brain does not register until a jump start. Always check after a failure and repair as necessary before trying again.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<h1>Conclusion</h1>
|
||||||
|
<div class="borders">
|
||||||
|
And with that, you have all the essential steps to repairing and maintaining FBP's and prosthetics. These steps are applicable to any prosthetic limb, regardless of if the patient is an FBP. However, if an organic has a prosthetic organ and needs it repaired, it is best you refer them to medical and their team of highly trained surgeons to repair it.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
|
|
||||||
|
///A Fistful of D6's: Player's Guide by Ray Rogers
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide
|
||||||
|
|
||||||
|
name = "A Fistful of D6's: Player's Guide"
|
||||||
|
desc = "A hardbound book titled \"A Fistful of D6's: Player's Guide\" by Ray Rogers."
|
||||||
|
description_info = "This book is titled \"A Fistful of D6's: Player's Guide\" by Ray Rogers. It is a player's guide to a TTRPG."
|
||||||
|
|
||||||
|
title = "A Fistful of D6's: Player's Guide"
|
||||||
|
icon_state = "corp_regs"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Ray Rogers"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-style: Impact; font-size: 20px; text-align: center; color: #A7371C}
|
||||||
|
body {font-size: 15px; font-family: Georgia; color: #513927; background-color: #E2D9B6;}
|
||||||
|
.border {border-style: dashed; border-width: 4px; border-color: #A7371C; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>A Fistful of D6's:<br>
|
||||||
|
<small>Player's Guide</small></h1>
|
||||||
|
<center><sub>by Ray Rogers</sub></center><br>
|
||||||
|
<div class="border">
|
||||||
|
Each player starts with three attributes: <i>Vigor</i>, <i>Grit</i>, and <i>Giddyup</i>. Vigor counts how strong, how healthy, and how in-shape a cowpoke is. Grit defines how well a cowpoke can deal with wounds, how gritty his stare is, and how much ice cold water runs through their veins. Giddyup controls how agile a cowpoke is, how well they can dodge a bullet, and how well they can sling.<br><br>
|
||||||
|
When rolling an attribute, a cowpoke uses one d6. If they roll a 4 or above, they succeed. A cowpoke can roll more or less d6s depending on situational advantages/disadvantages, items they may be carrying, or abilities they may have accrued in their time moseying. As long as a cowpoke has one more success than failure, they succeed. For each additional success, up to 6, that success is enhanced or modified in some way.<br><br>
|
||||||
|
In combat, initiative is gained by pulling poker cards. Initiative is then resolved from highest to lowest suit and number. In the event of tying cards, suits are resolved in this order: Hearts, Spades, Diamonds, and then Clubs. Then the cowpoke who gets highest goes on his turn. During their turn, they can do anything they please. Whatever action they want to achieve, they describe it narratively, and then the storyteller tells them how many d6s they may roll to achieve this task.
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<center><sub>The player's guide to player A Fistful of D6s, a TTRPG (Tabletop Role-Playing Game) set in the Earth's past, inspired by early North American history.</sub></center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
///The Space Survival Guide: Depressurization by Lachina Green.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/reference/spacesurvivalguidedespressurization
|
||||||
|
|
||||||
|
name = "The Space Survival Guide: Depressurization"
|
||||||
|
desc = "A hardbound book titled \"The Space Survival Guide: Depressurization\" by Lachina Green."
|
||||||
|
description_info = "This book is titled \"The Space Survival Guide: Depressurization\" by Lachina Green. It is a guide on how to handle being in a depressurized room on a space station."
|
||||||
|
|
||||||
|
title = "The Space Survival Guide: Depressurization"
|
||||||
|
icon_state = "evabook"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Lachina Green"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 17px; color: #43494F; border-style: solid; border-color: #43494F; padding: 10px; text-align: center;}
|
||||||
|
h2 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F; text-align: center;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
.borders {border-style: double; border-color: #43494F; padding: 7px 14px;}
|
||||||
|
p.indent {text-indent: 20px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>The Space Survival Guide</h1>
|
||||||
|
<hr>
|
||||||
|
<h2>How to Survive a Mass Depressurization Event</h2>
|
||||||
|
<div class="borders">
|
||||||
|
<ul>
|
||||||
|
<li><b>Don your internals.</b></li>
|
||||||
|
</ul>
|
||||||
|
<p class="indent">This is the first thing you should do in a mass depressurization event. Take out the breath mask and emergency air tank from the emergency box in your backpack. Put on the mask and clip the air tank securely to your belt; this way, you will not lose it if you fall over or pass out. Set the distribution pressure on your air tank to at least 18 kPA to conserve air. This represents the minimum threshold for a human to maintain consciousness.</p>
|
||||||
|
<ul>
|
||||||
|
<li><b>Find more oxygen.</b></li>
|
||||||
|
</ul>
|
||||||
|
<p class="indent">You may find that your air tank will soon run out. Do not worry. There are numerous emergency oxygen closets placed throughout the station, blue in color with 'O2' written on the front in white. You can also retrieve an oxygen tank from a fire closet. When possible, fill up your air tank in one of the large, blue O2 canisters by inserting your air tank, setting the distribution pressure to max, and turning on the release valve. Just make sure to turn the release valve off before removing your oxygen tank.</p>
|
||||||
|
<ul>
|
||||||
|
<li><b>Stay aware of your surroundings.</b></li>
|
||||||
|
</ul>
|
||||||
|
<p class="indent">Keep track of the local atmosphere. What is the pressure? Is it rising or falling? A pressure of 101 kPA is optimal for human survival, but you can survive conditions as low as 80 kPA for extended periods. You can check the pressure on the air alarms placed throughout the station or with your PDA's atmospheric scanner function. Make sure to check the pressure several times in quick succession, so you can know whether it is rising or falling.</p>
|
||||||
|
<ul>
|
||||||
|
<li><b>Avoid opening fire locks.</b></li>
|
||||||
|
</ul>
|
||||||
|
<p class="indent">In the event of depressurization, the station's fire locks automatically drop in an attempt to contain the breach. However, this can also impede movement. If possible, find an alternate route to your destination or find a safe place to wait until the station's engineering team repairs the station. Do not open a fire lock without an engineer's express permission unless you are in immediate mortal danger. After you have opened a fire lock, make sure to close it immediately so as to prevent the breach from spreading.</p>
|
||||||
|
<ul>
|
||||||
|
<li><b>Listen to emergency personnel.</b></li>
|
||||||
|
</ul>
|
||||||
|
<p class="indent">Follow the instructions of engineering, medical, and security personnel, as well as the orders of the heads of staff. Engineering personnel are trained to fix these situations, and medical personnel will likely be conducting search and rescue operations. Do not impede them and follow their instructions; you are more likely to survive, and less likely to endanger your fellow crew members.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
///Security Guidelines by NanoTrasen.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/reference/securityguidelines
|
||||||
|
|
||||||
|
name = "Security Guidelines"
|
||||||
|
desc = "A hardbound book titled \"Security Guidelines\" as provided by NanoTrasen."
|
||||||
|
description_info = "This book is titled \"Security Guidelines\" as provided by NanoTrasen. It covers the basic security etiquette on NanoTrasen stations and vessels."
|
||||||
|
|
||||||
|
title = "Security Guidelines"
|
||||||
|
icon_state = "bookSpaceLaw"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "NanoTrasen"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Lucida Sans Unicode; font-size: 17px; color: #43494F; border-style: solid; border-color: #43494F; padding: 10px; text-align: center;}
|
||||||
|
h2 {font-family: Lucida Sans Unicode; font-size: 15px; color: #43494F; text-align: center;}
|
||||||
|
body {font-family: Verdana; font-size: 12px; color: ; background-color: #F6F6F1;}
|
||||||
|
.borders {border-style: double; border-color: #43494F; padding: 7px 14px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Security Guidelines</h1>
|
||||||
|
<hr>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>Golden Rule</h2>
|
||||||
|
Keep communications up at all times on the security channel and report all movements, arrests and all security matters over the radio.
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>Guidelines</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Talk first, stun second.</li>
|
||||||
|
<li>Always call for backup before attempting to confront a possibly dangerous criminal.</li>
|
||||||
|
<li>Charge your weapons after every usage.</li>
|
||||||
|
<li>Stay calm under all circumstances, anger and fear show weakness.</li>
|
||||||
|
<li>Always lock security lockers and logout of security terminals after each use.</li>
|
||||||
|
<li>Seal off crime scenes and wait for forensics personnel to arrive.</li>
|
||||||
|
<li>Avoid using force where possible.</li>
|
||||||
|
<li>Inform the warden when a criminal is wanted and set their wanted status via your security HUD if possible. Beepsky is a force to be reckoned with.</li>
|
||||||
|
<li>Respect the chain of command! The warden outranks you within the brig itself. Obey the Head of Security, but remember that the Overseer outranks him.</li>
|
||||||
|
<li><b>Remember your priorities:</b> one punch is hardly something to arrest anyone over if there is a hostage situation.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<center><sub>Security Guidelines as issued by NT</sub></center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
163
code/modules/library/hardcode_library/reference/Schnayy.dm
Normal file
163
code/modules/library/hardcode_library/reference/Schnayy.dm
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
CKEY: Schnayy
|
||||||
|
CATEGORY: Reference
|
||||||
|
*/
|
||||||
|
|
||||||
|
///Thermodynamic Reactions and Research: A Guide to Phoron Studies and Safety by I.R.I.S.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/reference/ThermodynamicReactionsandResearch
|
||||||
|
name = "Thermodynamic Reactions and Research"
|
||||||
|
desc = "A hardbound book titled \"Thermodynamic Reactions and Research: A Guide to Phoron Studies and Safety\" by I.R.I.S.."
|
||||||
|
description_info = "This book is titled \"Thermodynamic Reactions and Research: A Guide to Phoron Studies and Safety\" by I.R.I.S.. It appears to cover the fundamentals of phoron and thermodynamic research."
|
||||||
|
|
||||||
|
icon_state = "bookParticleAccelerator"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "I.R.I.S."
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Courier New; font-size: 16px; color: #B55EB5; background-color: #201E20; border-style: double solid; padding: 10px;}
|
||||||
|
body {background-color: #815C81}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<center>
|
||||||
|
<h1><br>Thermodynamic Reactions and Research:<br>
|
||||||
|
<font size="2">A Guide to Phoron Studies and Safety<br>
|
||||||
|
by I.R.I.S.</font><br><br></h1>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Courier New; color: #2E2B23; font-size: 15px;}
|
||||||
|
body {font-family: Trebuchet MS; color: #2E2B23; font-size: 12px; background-color: #EFEDE6;}
|
||||||
|
.border {border-style: solid; border-width: 2px; border-color: #2E2B23; padding: 5px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<center>
|
||||||
|
<h1>Foreword</h1>
|
||||||
|
</center>
|
||||||
|
<br>
|
||||||
|
Phoron research and study is a vital subject of research -- it has been a pillar of humanity's progress, a staple of the technology that has shaped our society. To work on expanding our knowledge and shape our future in the cosmos is a noble cause, but it should be done with caution.
|
||||||
|
<br><br>
|
||||||
|
This is not to speak on safety in your lab, but the consequences of action. Many times has man created the unthinkable, and many times we have not been prepared for such discoveries. We should not censor ourselves from advancement, but we should shape the world to be ready for what comes with it <20> and know that it is an invariable consequence there will be those who seek to abuse it.
|
||||||
|
<br><br>
|
||||||
|
You cannot take back what you give to the world.
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Trebuchet MS; color: #2E2B23; font-size: 12px; background-color: #EFEDE6;}
|
||||||
|
.border {border-style: solid; border-width: 2px; border-color: #2E2B23; padding: 5px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<center>
|
||||||
|
<b>Understanding and Operating Research</b>
|
||||||
|
</center><br>
|
||||||
|
As a phoron researcher, you will likely operate within two separate labs. The first is your department's research and development lab -- this is where you will study the elements of existing technology and build upon it. The second is your department's toxin's lab, in which all thermodynamic phoron research takes place.
|
||||||
|
<br><br>
|
||||||
|
To begin, your standard research lab will contain several machines: an autolathe, a protolathe, a circuit printer, a destructive analyzer, and a console of some form to access your database.
|
||||||
|
<br><br>
|
||||||
|
An autolathe and protolathe are similar machines in concept, but are operated in different ways. Both require materials to function: an autolathe is equipped to manipulate steel and glass, while a protolathe can make use of many more exotic kinds -- notably phoron. In order to operate an autolathe, you will interact with the machine directly. It is limited to a number of preset designs, some of which are more dangerous and locked behind internal safeties. A protolathe, however, is operated through your research console. Where an autolathe is limited in designs, a protolathe is intended to develop new ones. Through each item we analyze, our data grows, and as our data grows so too do potential designs in our protolathe.
|
||||||
|
<br><br>
|
||||||
|
The circuit printer is much the same, requiring glass and sulphuric acid to operate. It, too, will expand on designs with research from analysis, and it is operated through your console.
|
||||||
|
<br><br>
|
||||||
|
But to analyze new data, we must understand how the destructive analyzer works. This, too, is operated through your research console. In order to collect the data, the item must be destroyed through the delicate works of the analyzer. Once you are sure you wish to destroy an item for a final analysis, place it within the analyzer and open its menu on your console. Here it should predict what kind of data will be obtained from its destruction and how it compares to the existing research stored in the database. Simply confirm the analysis and the machine will activate.
|
||||||
|
<br><br>
|
||||||
|
As you advance your database, new designs will require more kinds of materials. Many research stations are affiliated with a mining outpost or department. It is advised to contact them regarding any material needs.
|
||||||
|
<br><br>
|
||||||
|
Remember that your research is valuable to your whole department -- even more so if there is a robotics division. Frequently access the settings on your console and sync your data with the database servers.
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Trebuchet MS; color: #2E2B23; font-size: 12px; background-color: #EFEDE6;}
|
||||||
|
.border {border-style: solid; border-width: 2px; border-color: #2E2B23; padding: 5px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<center>
|
||||||
|
<b>Thermodynamic Studies: Preparation</b>
|
||||||
|
</center><br>
|
||||||
|
While the research and development department is quite important to phoron studies, the toxins lab covers the relations between heat, energy, and phoron. Preparing and outfitting your lab is crucial to a successful study.
|
||||||
|
<br><br>
|
||||||
|
If your lab is not already equipped with a gas cooling system, it is recommended you seek out one to use. With some work, these are obtainable in your research lab, but aid from your station's engineering team or using an existing one -- such as those that can be found in a medical bay - are also suitable.
|
||||||
|
<br><br>
|
||||||
|
Next, note the pipes, ports, and where they all connect. Three ports should lead directly in to your mixing chamber. Two of these will pump <i>in</i> to it, while the third pumps out. There should be pumps within the airlock leading to the chamber that help operate these pipes. Two additional ports should lead to a heat exchanger. One side of the exchange should run pipes directly into the chamber, while the other only connects to the exchange. The former will heat up from an active mixing chamber, while the latter will heat the gas -- normally phoron -- in the canister attached to the port.
|
||||||
|
<br><br>
|
||||||
|
Finally, you should note where the vent control is on your mixing chamber, as it may be needed in emergencies, and where the air scrubbers are in your lab. It is advised to have these in operation when working.
|
||||||
|
<br><br>
|
||||||
|
All labs should come equipped with emergency gear. The most commonly used will be your fire safety locker -- containing a fire suit, helmet, and air tanks. Make sure to wear your safety gear before beginning any mix.
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Trebuchet MS; color: #2E2B23; font-size: 12px; background-color: #EFEDE6;}
|
||||||
|
.border {border-style: solid; border-width: 2px; border-color: #2E2B23; padding: 5px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="border">
|
||||||
|
<center>
|
||||||
|
<b>Thermodynamic Studies: The Mixing Chamber</b>
|
||||||
|
</center><br>
|
||||||
|
Before you start your mix, ensure the chamber is empty and clear. You can rid it of any contaminating gases in two ways: pumping it through the output port and into a canister, or venting the chamber of it.
|
||||||
|
<br><br>
|
||||||
|
Next, collect the necessary gas canisters. The gases going into the chamber should be able to ignite and heat the pipes lining the floor and walls. Then a canister should be hooked to the port leading to said pipe lines. The gas pumped into these will heat the exchanger. Finally, a canister of phoron should be attached to the other side of the heat exchanger. This canister will be heated to use for study.
|
||||||
|
<br><br>
|
||||||
|
Be warned that the burn chamber has limits. Once you are ready and ignite the gas, you should monitor the temperature. Once it begins to exceed 6,000K, the chamber walls will begin melting. Do not leave it unattended if there is an active fire inside.
|
||||||
|
<br><br>
|
||||||
|
If all steps are done correctly, you will have a heated canister of phoron for study.
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: Trebuchet MS; color: #2E2B23; font-size: 12px; background-color: #EFEDE6;}
|
||||||
|
.border {border-style: solid; border-width: 2px; border-color: #2E2B23; padding: 5px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class ="border">
|
||||||
|
<center>
|
||||||
|
<b>Thermodynamic Studies: What Next?</b>
|
||||||
|
</center><br>
|
||||||
|
Here is where the guidance ends. You have your heated phoron, and you have access to a gas cooling system. You may cool your available oxygen canisters and test the interaction of temperature and pressure variation.
|
||||||
|
<br><br>
|
||||||
|
A word of warning and a reminder: smaller tanks for these tests are not built for high pressures. Before filling them the pressure release valves must be welded shut. Failure to do so will result in a potentially fatal gas leak.
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
291
code/modules/library/hardcode_library/religious/PortedBooks.dm
Normal file
291
code/modules/library/hardcode_library/religious/PortedBooks.dm
Normal file
@@ -0,0 +1,291 @@
|
|||||||
|
/*
|
||||||
|
Here is where we're putting any books being ported from our old database. Should only be used for books submitted by an unknown or inactive player to try and keep ckeys tied to their authors.
|
||||||
|
Try and keep formatting clean. Also, if you add books with ugly font or color mixes, I WILL destroy you. -- Schnayy
|
||||||
|
|
||||||
|
Category: Religion
|
||||||
|
*/
|
||||||
|
|
||||||
|
///A Basic Understanding of Zoroastrianism by Satrap
|
||||||
|
|
||||||
|
/obj/item/weapon/book/bundle/custom_library/religious/zoroastrianism
|
||||||
|
name = "A Basic Understanding of Zoroastrianism"
|
||||||
|
desc = "A hardbound book titled \"A Basic Understanding of Zoroastrianism\" by Satrap."
|
||||||
|
description_info = "This book is titled \"A Basic Understanding of Zoroastrianism\" by Satrap. It covers the basics of Zoroastrianism -- an old religion originating on Earth -- as well as its influence on other religions."
|
||||||
|
|
||||||
|
title = "A Basic Understanding of Zoroastrianism"
|
||||||
|
icon_state = "triangulate"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Satrap"
|
||||||
|
|
||||||
|
pages = list({"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Courier New; color: #57401E; border-style: double; border-radius: 5px; border-color: #193A54; background-color: #CAA978;}
|
||||||
|
body {background-color: #73899B;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<br><br><br>
|
||||||
|
<center>
|
||||||
|
<h1><font size="5"><b>A Basic Understanding of Zoroastrianism</b></font><br>
|
||||||
|
<font size="3"><i>by Satrap</i></font></h1>
|
||||||
|
</center>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
p.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<p class="border">
|
||||||
|
Zoroastrianism is one of the world's oldest founded religions. Founded about 4000 years ago in what is now known as Iran, it was one of the first religions to preach monotheism, and is considered the inspiration for Judaism, Christianity, and Islam.
|
||||||
|
<br><br>
|
||||||
|
Zoroastrianism was founded by the prophet, Zoroaster. Zoroaster was a priest in an area that preached mostly polytheistic religions. He rejected these beliefs, mostly because they were used to classify people in a rigid social structure with priests controlling the ordinary people. One day, while bathing in a river, Zoroaster received a vision from God.
|
||||||
|
<br><br>
|
||||||
|
Zoroaster reportedly found the visions of a God named Ahura Mazda, or the <i>"Wise Lord"</i>. Ahura Mazda came down to Zoroaster in the form of his Amesha Spentas, or <i>"Divine Immortals"</i>. This experience changed his worldview, and he sought to spread his religion through the lands. Despite some struggles, he was successful in that the Persian Empire picked up his beliefs, and spread them far and wide (but did not do so forcefully).
|
||||||
|
<br><br>
|
||||||
|
Zoroastrianism is a simple religion. There is one God, Ahura Mazda. He is omnipotent, omnipresent, and the force behind all creation. His six Amesha Spentas are representations of himself in various aspects and forms. An analogy to think of is that he is the sun, and they are all rays of the sun. Ahura Mazda is opposed by a devil named Angra Mainyu, or the <i>"Destructive Spirit"</i>. While Ahura Mazda seeks to create life and beauty, Angra Mainyu only seeks to destroy his greatness and glory at every turn.
|
||||||
|
<hr>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"},
|
||||||
|
{"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-size: 13px; font-family: Trebuchet MS; color: #2E2726; background-color: #EFECE7;}
|
||||||
|
p.border {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<p class="border">
|
||||||
|
There are three pillars of Zoroastrianism for all followers to practice. Simply put: they are good thoughts, good words, and good deeds. By following all three of these pillars to the best of your abilities, Ahura Mazda blessed you with a life of immortality in the next life, where you'll spend your times happily in paradise.
|
||||||
|
<br><br>
|
||||||
|
Dualism plays an important role in the beliefs of a Zoroastrian. Ahura Mazda is good, while Angra Mainyu is evil. He is the sun, while she is the moon. Day and night, fire and water, life and death. The struggle between these two creates balance. However, one cannot be understood without the other. There is no day without night, no warmth if there is never cold, and so on. A balance must always exist.
|
||||||
|
<br><br>
|
||||||
|
Happiness and sadness are also important to balance. Happiness is found by following Ahura Mazda's light, while sadness is found by giving in to the demons of Angra Mainyu. Heaven and Hell, the decision must be made by every man. Zoroastrianism appeases to the good in men, claiming that overall, mankind is of good nature, and will eventually triumph over evil.
|
||||||
|
<br><br>
|
||||||
|
Funerals in Zoroastrian culture are rather usual. The corpse of the deceased is considered unholy, and a work of evil. To put this evil in contact with nature would corrupt the goodness of nature. As such, burials are strictly prohibited. The bodies of the dead are typically either preserved in stone tombs or mausoleums, or in sky towers of stone. These methods of funerals are increasingly inconvenient in the modern age, and thus, many Zoroastrians opt for cremation instead.
|
||||||
|
<br><br>
|
||||||
|
There are no specific rituals for prayer, or how often a prayer must be commenced every day. But all that is demanded is that the faithful pray to Ahura Mazda every day. If possible, they may pray to a candle or a fire, as the fire represents his warmth and guidance.
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"})
|
||||||
|
|
||||||
|
|
||||||
|
/// The Way of the Bleeding Swan by Shra'ziir Krin Enai-Rinrijar. I have no idea what this is about but it was in religion.
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/religious/wayofbleedingswan
|
||||||
|
name = "The Way of the Bleeding Swan"
|
||||||
|
desc = "A hardbound book titled \"The Way of the Bleeding Swan\" by Shra'ziir Krin Enai-Rinrijar."
|
||||||
|
description_info = "This book is titled \"The Way of the Bleeding Swan\" by Shra'ziir Krin Enai-Rinrijar. It appears religious in nature."
|
||||||
|
|
||||||
|
title = "The Way of the Bleeding Swan"
|
||||||
|
icon_state = "book"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Shra'ziir Krin Enai-Rinrijar"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-family: Impact; font-size: 20px; color: #2E2726; text-align: center;}
|
||||||
|
h2 {font-family: Palatino Linotype; font-size: 20px; color: #2E2726; text-align: center; margin: 5px}
|
||||||
|
body {font-family: Palatino Linotype; font-size: 14px; color: #2E2726; background-color: #EFECE7; text-align: center;}
|
||||||
|
.borders {border-style: double solid; border-radius: 5px; border-color: #2E2726; padding: 10px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Qoii'Jar Vahk<br><small>The Way of the Bleeding Swan</small></h1>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>I</h2>
|
||||||
|
The curse of life is the cure of want,<br>
|
||||||
|
for we are creatures of desire, cast upon the world like grains of sand in the storm.<br>
|
||||||
|
These desires are merely the fuel, mark this,<br>
|
||||||
|
it is the fuel to the fire, and we are the flame.<br>
|
||||||
|
The Way is to find meaning in balance, not in pure indulgence or abstinence.<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>II</h2>
|
||||||
|
How little you know of the world, you joyous, free folk<br>
|
||||||
|
who turn thy gaze from the sight of the suffering,<br>
|
||||||
|
who blind themselves for want of an excuse to stagnate.<br>
|
||||||
|
The Way is to engrave the image of injustice upon thy eye.<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>III</h2>
|
||||||
|
How vain the one, upon the gallows, wails and whines their time away.<br>
|
||||||
|
Hath we not said our piece? Hath we lived in such delusional immortality?<br>
|
||||||
|
The Coward dies many deaths, for he never prepares himself for his final rest<br>
|
||||||
|
The Way is to consider the end, with clarity and respect.<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>IV</h2>
|
||||||
|
Woe be stricken upon the spectator, who cries aloud when he is centerfold;<br>
|
||||||
|
Who cries "What wrong have I done?" when the blade falls down.<br>
|
||||||
|
Every action provokes change, but inaction surrenders to change the same.<br>
|
||||||
|
The Way is to hold thyself accountable without self-deceit.<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>V</h2>
|
||||||
|
Eii Aj Yokiija<br>
|
||||||
|
"Petals Must Fall"<br>
|
||||||
|
In your haste to save the seed<br>
|
||||||
|
remember you cannot catch them all.<br>
|
||||||
|
The Way is not the absence of fear, or love<br>
|
||||||
|
The Way is the way of letting go.<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>VI</h2>
|
||||||
|
Hope is the most durable of illusions;<br>
|
||||||
|
standing true of whatever might array against it.<br>
|
||||||
|
But once it breaks, the One is lost in it's absence.<br>
|
||||||
|
The Royal Swan is born stark white, like the full moon,<br>
|
||||||
|
yet walks into the red waters and bloodies it's feathers.<br>
|
||||||
|
The Way is to let go of the need for hope and embrace Yokii.<br>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="borders">
|
||||||
|
<h2>VII</h2>
|
||||||
|
All religions claim the same god under different names --
|
||||||
|
and yet we call to her still, in the dark, a myriad of tongues.
|
||||||
|
There is only one God, Yokii, "Death".
|
||||||
|
The Way is to know the long dark, so the light may be appreciated.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
/// The Sun Goddess of Korea by Korean Folklore
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/religious/sungoddessofkorea
|
||||||
|
|
||||||
|
name = "The Sun Goddess of Korea"
|
||||||
|
desc = "A hardbound book titled \"The Sun Goddess of Korea\" as provided by the Earth Religion Preservation Team."
|
||||||
|
description_info = "This book is titled \"The Sun Goddess of Korea\" as provided by the Earth Religious Preservation Team. It covers the Korean sun goddess, Hae-soon."
|
||||||
|
|
||||||
|
title = "The Sun Goddess of Korea"
|
||||||
|
icon_state = "book3"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Earth Religion Preservation"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-size: 18px; font-family: Palatino Linotype; text-align: center;}
|
||||||
|
body {font-size: 15px; font-family: Times New Roman; color: #623A13; background-color: #D7CEC4;}
|
||||||
|
p.border {border-style: double solid; border-width: 6px; border-color: #623A13; background-color: #F5F0EB; padding: 11px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>The Sun Goddess of Korea </h1>
|
||||||
|
<p class="border">
|
||||||
|
<i>Let us enjoy reading this Korean mythological story of the Sun-Goddess of Korea.</i><br><br>
|
||||||
|
Byun-soon, Dael-soon and Hae-soon were three sisters. One day a tiger came to their house, and on seeing him the girls ran out of the back door and climbed a tree.<br><br>
|
||||||
|
When the tiger began to climb the tree, the sisters prayed to the gods to save them. Their prayers were answered.<br><br>
|
||||||
|
An iron chain descended from the skies and the sisters climbed up to safety.<br><br>
|
||||||
|
They lived happily in the land of the gods, and in time, Byun-soon was transformed into a star, Dael-soon into the moon and Hae-soon into the sun.<br><br>
|
||||||
|
When Hae-soon set out across the skies on her first day out as the sun, people on earth came out of their homes to stare at her. Hae-soon was an extremely shy girl and she turned bright with embarrassment when she saw the people looking up at her.<br><br>
|
||||||
|
The more they stared, the brighter she became, till finally she became so bright that the people were blinded by her radiance and could no longer look up. This suited the shy Hae-soon and she continued to glow brightly from then on.
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
/// The Story of Lord Ganesha by Hindu Folklore
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/religious/storyoflordganesha
|
||||||
|
|
||||||
|
name = "The Story of Lord Ganesha"
|
||||||
|
desc = "A hardbound book titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team."
|
||||||
|
description_info = "This book is titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team."
|
||||||
|
|
||||||
|
title = "The Story of Lord Ganesha"
|
||||||
|
icon_state = "book3"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Earth Religion Preservation"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-size: 18px; font-family: Palatino Linotype; text-align: center;}
|
||||||
|
body {font-size: 15px; font-family: Times New Roman; color: #623A13; background-color: #D7CEC4;}
|
||||||
|
p.border {border-style: double solid; border-width: 6px; border-color: #623A13; background-color: #F5F0EB; padding: 11px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>The Story of Lord Ganesha</h1>
|
||||||
|
<p class="border">
|
||||||
|
One day, Goddess Parvathi, the wife of Lord Shiva, was getting ready for her bath and needed someone to guard her chamber.<br><br>
|
||||||
|
Therefore she made a beautiful, young boy from the sandalwood from her body. She gave him life by sprinkling the Holy Ganges water on him and entrusted him with guarding the door.<br><br>
|
||||||
|
While she was away, Lord Shiva returned and was surprised to find a little boy standing at the entrance to his wife's chamber. When he tried to enter, the boy blocked his path. <br><br>
|
||||||
|
"Who are you and why are you blocking my path?" demanded Lord Shiva.<br><br>
|
||||||
|
"No one enters my mother's chamber," declared the boy boldly.<br><br>
|
||||||
|
Taken aback, Lord Shiva replied, "Step away; I have the right to enter my wife's chamber."<br><br>
|
||||||
|
But the young and courageous boy did not move but stood his ground.<br><br>
|
||||||
|
Not knowing that this was his own son, Lord Shiva who was quick to anger grew enraged. Not used to be disobeyed he cut off the boy's head.<br><br>
|
||||||
|
Goddess Parvathi on returning from her bath saw her son lying dead and was overcome with grief. She was filled with both anger and sorrow.<br><br>
|
||||||
|
Seeing this Lord Shiva sent his soldiers to fetch the head of the first beast that they saw. The men rushed and finally came upon an elephant. They immediately took the head to Lord Shiva, who quickly attached it onto the body of the slain boy and gave him life once again.<br><br>
|
||||||
|
To further appease his grief-stricken wife he promised that her son would be worshiped first, before all other Gods.<br><br>
|
||||||
|
Even today at the entrance of all temples one would find the idol of the elephant-headed God, Lord Ganesha.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
/// Feast of Kubera by Hindu Folklore
|
||||||
|
|
||||||
|
/obj/item/weapon/book/custom_library/religious/feastofkubera
|
||||||
|
|
||||||
|
name = "Feast of Kubera"
|
||||||
|
desc = "A hardbound book titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team."
|
||||||
|
description_info = "This book is titled \"The Story of Lord Ganesha\" as provided by the Earth Religion Preservation Team."
|
||||||
|
|
||||||
|
title = "Feast of Kubera"
|
||||||
|
icon_state = "book3"
|
||||||
|
origkey = "Schnayy"
|
||||||
|
author = "Earth Religion Preservation"
|
||||||
|
|
||||||
|
dat = {"<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
h1 {font-size: 18px; font-family: Palatino Linotype; text-align: center;}
|
||||||
|
body {font-size: 15px; font-family: Times New Roman; color: #623A13; background-color: #D7CEC4;}
|
||||||
|
p.border {border-style: double solid; border-width: 6px; border-color: #623A13; background-color: #F5F0EB; padding: 11px;}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Feast of Kubera</h1>
|
||||||
|
<p class="border">
|
||||||
|
Kubera, god of wealth, had become arrogant. One day he decided to host an extravagant feast for the gods, such a feast as never had been hosted before. It would increase his prestige and show all men and gods the extent of his wealth and influence.<br><br>
|
||||||
|
Accordingly, he went to Mount Kailash to invite Lord Shiva. Shiva was his patron. Kubera owed all his wealth to Shiva who, pleased with his devotion, had given him the boon that his wealth would never diminish, no matter how much he spent.<br><br>
|
||||||
|
Shiva declined to come but said he would send his son, Ganesha. Kubera was disappointed. Shiva's presence would have been a feather in his cap. But at least he was sending Ganesha. It would have been a terrible snub if no one from the family were to come. Kubera resolved to make the feast so grand that Shiva's absence would not be felt.<br><br>
|
||||||
|
The guests were many, thousands of them, both gods and men. They were accommodated in a huge hall built especially for the purpose. The chief guest, Ganesha, was the last to come.<br><br>
|
||||||
|
The moment he entered, he began to ask for food. He was shown to a seat of honor and tantalizing dishes were set before him. He gulped them down and asked for more. He was given a second helping and then a third but his appetite remained undiminished.<br><br>
|
||||||
|
Kubera ordered his army of cooks to produce more food but they could not keep pace with Ganesha's eating frenzy. The elephant-god was eating food meant for thousands. When he had finished all the food set before him, he began to shout, "Give me more, give me more!" and then getting impatiently to his feet, rushed to the enormous kitchen and devoured all the food there.<br><br>
|
||||||
|
Kubera was aghast. All the food was gone and the guests had not been fed. Worse, Ganesha was still hungry.<br><br>
|
||||||
|
"You call this a feast?" Ganesha admonished Kubera. "There's no food here. I'm going home."<br><br>
|
||||||
|
Kubera pleaded with him to stay, promising him more food in a little while but his young guest was in no mood to listen. He got on his mount and sped away. Kubera, fearing Shiva's wrath, followed in his own vehicle. When he arrived at Kailash, he found Ganesha complaining loudly to his father about the lack of food at his feast.<br><br>
|
||||||
|
"What's this I hear, Kubera?" asked Shiva, turning to the god. "No food at your feast?"<br><br>
|
||||||
|
"I... I...," mumbled Kubera.<br><br>
|
||||||
|
"Go in and ask your mother for some food," said Shiva to his son. "I'm sure Kubera did his best."<br><br>
|
||||||
|
"I did, I did, my lord," said Kubera, feeling miserable. His feast had turned into a farce. Instead of adding to his prestige it had made him a laughing stock. But he was relieved to see that Shiva did not appear to be angry.<br><br>
|
||||||
|
He fell at his patron's feet and begged forgiveness for his pride.
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"}
|
||||||
@@ -527,17 +527,34 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
|||||||
density = 1
|
density = 1
|
||||||
|
|
||||||
/obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob)
|
/obj/machinery/bookbinder/attackby(var/obj/O as obj, var/mob/user as mob)
|
||||||
if(istype(O, /obj/item/weapon/paper))
|
if(istype(O, /obj/item/weapon/paper) || istype(O, /obj/item/weapon/paper_bundle))
|
||||||
user.drop_item()
|
if(istype(O, /obj/item/weapon/paper))
|
||||||
O.loc = src
|
user.drop_item()
|
||||||
user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].")
|
O.loc = src
|
||||||
src.visible_message("[src] begins to hum as it warms up its printing drums.")
|
user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].")
|
||||||
sleep(rand(200,400))
|
src.visible_message("[src] begins to hum as it warms up its printing drums.")
|
||||||
src.visible_message("[src] whirs as it prints and binds a new book.")
|
sleep(rand(200,400))
|
||||||
var/obj/item/weapon/book/b = new(src.loc)
|
src.visible_message("[src] whirs as it prints and binds a new book.")
|
||||||
b.dat = O:info
|
var/obj/item/weapon/book/b = new(src.loc)
|
||||||
b.name = "Print Job #" + "[rand(100, 999)]"
|
b.dat = O:info
|
||||||
b.icon_state = "book[rand(1,7)]"
|
b.name = "Print Job #" + "[rand(100, 999)]"
|
||||||
qdel(O)
|
b.icon_state = "book[rand(1,7)]"
|
||||||
|
qdel(O)
|
||||||
|
else
|
||||||
|
user.drop_item()
|
||||||
|
O.loc = src
|
||||||
|
user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].")
|
||||||
|
src.visible_message("[src] begins to hum as it warms up its printing drums.")
|
||||||
|
sleep(rand(300,500))
|
||||||
|
src.visible_message("[src] whirs as it prints and binds a new book.")
|
||||||
|
var/obj/item/weapon/book/bundle/b = new(src.loc)
|
||||||
|
b.pages = O:pages
|
||||||
|
for(var/obj/item/weapon/paper/P in O.contents)
|
||||||
|
P.forceMove(b)
|
||||||
|
for(var/obj/item/weapon/photo/P in O.contents)
|
||||||
|
P.forceMove(b)
|
||||||
|
b.name = "Print Job #" + "[rand(100, 999)]"
|
||||||
|
b.icon_state = "book[rand(1,7)]"
|
||||||
|
qdel(O)
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -1,170 +1,170 @@
|
|||||||
//Meant for simple animals to drop lootable human bodies.
|
//Meant for simple animals to drop lootable human bodies.
|
||||||
|
|
||||||
//If someone can do this in a neater way, be my guest-Kor
|
//If someone can do this in a neater way, be my guest-Kor
|
||||||
|
|
||||||
//This has to be seperate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these.
|
//This has to be seperate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these.
|
||||||
|
|
||||||
//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now).
|
//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now).
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse
|
/obj/effect/landmark/mobcorpse
|
||||||
name = "Unknown"
|
name = "Unknown"
|
||||||
var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now
|
var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now
|
||||||
var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse.
|
var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse.
|
||||||
var/corpsesuit = null
|
var/corpsesuit = null
|
||||||
var/corpseshoes = null
|
var/corpseshoes = null
|
||||||
var/corpsegloves = null
|
var/corpsegloves = null
|
||||||
var/corpseradio = null
|
var/corpseradio = null
|
||||||
var/corpseglasses = null
|
var/corpseglasses = null
|
||||||
var/corpsemask = null
|
var/corpsemask = null
|
||||||
var/corpsehelmet = null
|
var/corpsehelmet = null
|
||||||
var/corpsebelt = null
|
var/corpsebelt = null
|
||||||
var/corpsepocket1 = null
|
var/corpsepocket1 = null
|
||||||
var/corpsepocket2 = null
|
var/corpsepocket2 = null
|
||||||
var/corpseback = null
|
var/corpseback = null
|
||||||
var/corpseid = 0 //Just set to 1 if you want them to have an ID
|
var/corpseid = 0 //Just set to 1 if you want them to have an ID
|
||||||
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||||
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
||||||
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/New()
|
/obj/effect/landmark/mobcorpse/New()
|
||||||
createCorpse()
|
createCorpse()
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||||
M.real_name = src.name
|
M.real_name = src.name
|
||||||
M.stat = 2 //Kills the new mob
|
M.stat = 2 //Kills the new mob
|
||||||
if(src.corpseuniform)
|
if(src.corpseuniform)
|
||||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||||
if(src.corpsesuit)
|
if(src.corpsesuit)
|
||||||
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
||||||
if(src.corpseshoes)
|
if(src.corpseshoes)
|
||||||
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
||||||
if(src.corpsegloves)
|
if(src.corpsegloves)
|
||||||
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
|
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
|
||||||
if(src.corpseradio)
|
if(src.corpseradio)
|
||||||
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
|
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
|
||||||
if(src.corpseglasses)
|
if(src.corpseglasses)
|
||||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||||
if(src.corpsemask)
|
if(src.corpsemask)
|
||||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||||
if(src.corpsehelmet)
|
if(src.corpsehelmet)
|
||||||
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
|
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
|
||||||
if(src.corpsebelt)
|
if(src.corpsebelt)
|
||||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||||
if(src.corpsepocket1)
|
if(src.corpsepocket1)
|
||||||
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
|
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
|
||||||
if(src.corpsepocket2)
|
if(src.corpsepocket2)
|
||||||
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
|
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
|
||||||
if(src.corpseback)
|
if(src.corpseback)
|
||||||
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
||||||
if(src.corpseid == 1)
|
if(src.corpseid == 1)
|
||||||
var/obj/item/weapon/card/id/W = new(M)
|
var/obj/item/weapon/card/id/W = new(M)
|
||||||
W.name = "[M.real_name]'s ID Card"
|
W.name = "[M.real_name]'s ID Card"
|
||||||
var/datum/job/jobdatum
|
var/datum/job/jobdatum
|
||||||
for(var/jobtype in typesof(/datum/job))
|
for(var/jobtype in typesof(/datum/job))
|
||||||
var/datum/job/J = new jobtype
|
var/datum/job/J = new jobtype
|
||||||
if(J.title == corpseidaccess)
|
if(J.title == corpseidaccess)
|
||||||
jobdatum = J
|
jobdatum = J
|
||||||
break
|
break
|
||||||
if(src.corpseidicon)
|
if(src.corpseidicon)
|
||||||
W.icon_state = corpseidicon
|
W.icon_state = corpseidicon
|
||||||
if(src.corpseidaccess)
|
if(src.corpseidaccess)
|
||||||
if(jobdatum)
|
if(jobdatum)
|
||||||
W.access = jobdatum.get_access()
|
W.access = jobdatum.get_access()
|
||||||
else
|
else
|
||||||
W.access = list()
|
W.access = list()
|
||||||
if(corpseidjob)
|
if(corpseidjob)
|
||||||
W.assignment = corpseidjob
|
W.assignment = corpseidjob
|
||||||
W.registered_name = M.real_name
|
W.registered_name = M.real_name
|
||||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||||
delete_me = 1
|
delete_me = 1
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//List of different corpse types
|
//List of different corpse types
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/syndicatesoldier
|
/obj/effect/landmark/mobcorpse/syndicatesoldier
|
||||||
name = "Mercenary"
|
name = "Mercenary"
|
||||||
corpseuniform = /obj/item/clothing/under/syndicate
|
corpseuniform = /obj/item/clothing/under/syndicate
|
||||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||||
corpsegloves = /obj/item/clothing/gloves/swat
|
corpsegloves = /obj/item/clothing/gloves/swat
|
||||||
corpseradio = /obj/item/device/radio/headset
|
corpseradio = /obj/item/device/radio/headset
|
||||||
corpsemask = /obj/item/clothing/mask/gas
|
corpsemask = /obj/item/clothing/mask/gas
|
||||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||||
corpseback = /obj/item/weapon/storage/backpack
|
corpseback = /obj/item/weapon/storage/backpack
|
||||||
corpseid = 1
|
corpseid = 1
|
||||||
corpseidjob = "Operative"
|
corpseidjob = "Operative"
|
||||||
corpseidaccess = "Syndicate"
|
corpseidaccess = "Syndicate"
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/solarpeacekeeper
|
/obj/effect/landmark/mobcorpse/solarpeacekeeper
|
||||||
name = "Mercenary"
|
name = "Mercenary"
|
||||||
corpseuniform = /obj/item/clothing/under/syndicate
|
corpseuniform = /obj/item/clothing/under/syndicate
|
||||||
corpsesuit = /obj/item/clothing/suit/armor/pcarrier/blue/sol
|
corpsesuit = /obj/item/clothing/suit/armor/pcarrier/blue/sol
|
||||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||||
corpsegloves = /obj/item/clothing/gloves/swat
|
corpsegloves = /obj/item/clothing/gloves/swat
|
||||||
corpseradio = /obj/item/device/radio/headset
|
corpseradio = /obj/item/device/radio/headset
|
||||||
corpsemask = /obj/item/clothing/mask/gas
|
corpsemask = /obj/item/clothing/mask/gas
|
||||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||||
corpseback = /obj/item/weapon/storage/backpack
|
corpseback = /obj/item/weapon/storage/backpack
|
||||||
corpseid = 1
|
corpseid = 1
|
||||||
corpseidjob = "Peacekeeper"
|
corpseidjob = "Peacekeeper"
|
||||||
corpseidaccess = "Syndicate"
|
corpseidaccess = "Syndicate"
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/syndicatecommando
|
/obj/effect/landmark/mobcorpse/syndicatecommando
|
||||||
name = "Syndicate Commando"
|
name = "Syndicate Commando"
|
||||||
corpseuniform = /obj/item/clothing/under/syndicate
|
corpseuniform = /obj/item/clothing/under/syndicate
|
||||||
corpsesuit = /obj/item/clothing/suit/space/void/merc
|
corpsesuit = /obj/item/clothing/suit/space/void/merc
|
||||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||||
corpsegloves = /obj/item/clothing/gloves/swat
|
corpsegloves = /obj/item/clothing/gloves/swat
|
||||||
corpseradio = /obj/item/device/radio/headset
|
corpseradio = /obj/item/device/radio/headset
|
||||||
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
||||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc
|
corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc
|
||||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||||
corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen
|
corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen
|
||||||
corpseid = 1
|
corpseid = 1
|
||||||
corpseidjob = "Operative"
|
corpseidjob = "Operative"
|
||||||
corpseidaccess = "Syndicate"
|
corpseidaccess = "Syndicate"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/clown
|
/obj/effect/landmark/mobcorpse/clown
|
||||||
name = "Clown"
|
name = "Clown"
|
||||||
corpseuniform = /obj/item/clothing/under/rank/clown
|
corpseuniform = /obj/item/clothing/under/rank/clown
|
||||||
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
||||||
corpseradio = /obj/item/device/radio/headset
|
corpseradio = /obj/item/device/radio/headset
|
||||||
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
||||||
corpsepocket1 = /obj/item/weapon/bikehorn
|
corpsepocket1 = /obj/item/weapon/bikehorn
|
||||||
corpseback = /obj/item/weapon/storage/backpack/clown
|
corpseback = /obj/item/weapon/storage/backpack/clown
|
||||||
corpseid = 1
|
corpseid = 1
|
||||||
corpseidjob = "Clown"
|
corpseidjob = "Clown"
|
||||||
corpseidaccess = "Clown"
|
corpseidaccess = "Clown"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/pirate
|
/obj/effect/landmark/mobcorpse/pirate
|
||||||
name = "Pirate"
|
name = "Pirate"
|
||||||
corpseuniform = /obj/item/clothing/under/pirate
|
corpseuniform = /obj/item/clothing/under/pirate
|
||||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||||
corpseglasses = /obj/item/clothing/glasses/eyepatch
|
corpseglasses = /obj/item/clothing/glasses/eyepatch
|
||||||
corpsehelmet = /obj/item/clothing/head/bandana
|
corpsehelmet = /obj/item/clothing/head/bandana
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/pirate/ranged
|
/obj/effect/landmark/mobcorpse/pirate/ranged
|
||||||
name = "Pirate Gunner"
|
name = "Pirate Gunner"
|
||||||
corpsesuit = /obj/item/clothing/suit/pirate
|
corpsesuit = /obj/item/clothing/suit/pirate
|
||||||
corpsehelmet = /obj/item/clothing/head/pirate
|
corpsehelmet = /obj/item/clothing/head/pirate
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/russian
|
/obj/effect/landmark/mobcorpse/russian
|
||||||
name = "Russian"
|
name = "Russian"
|
||||||
corpseuniform = /obj/item/clothing/under/soviet
|
corpseuniform = /obj/item/clothing/under/soviet
|
||||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||||
corpsehelmet = /obj/item/clothing/head/bearpelt
|
corpsehelmet = /obj/item/clothing/head/bearpelt
|
||||||
|
|
||||||
/obj/effect/landmark/mobcorpse/russian/ranged
|
/obj/effect/landmark/mobcorpse/russian/ranged
|
||||||
corpsehelmet = /obj/item/clothing/head/ushanka
|
corpsehelmet = /obj/item/clothing/head/ushanka
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
|
|
||||||
if (message)
|
if (message)
|
||||||
message = say_emphasis(message)
|
message = encode_html_emphasis(message)
|
||||||
|
|
||||||
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
|
||||||
// Maybe some people are okay with that.
|
// Maybe some people are okay with that.
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
else
|
else
|
||||||
input = message
|
input = message
|
||||||
|
|
||||||
input = say_emphasis(input)
|
input = encode_html_emphasis(input)
|
||||||
|
|
||||||
if(input)
|
if(input)
|
||||||
log_ghostemote(input, src)
|
log_ghostemote(input, src)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
if(italics)
|
if(italics)
|
||||||
message = "<i>[message]</i>"
|
message = "<i>[message]</i>"
|
||||||
|
|
||||||
message = say_emphasis(message)
|
message = encode_html_emphasis(message)
|
||||||
|
|
||||||
var/track = null
|
var/track = null
|
||||||
if(istype(src, /mob/observer/dead))
|
if(istype(src, /mob/observer/dead))
|
||||||
@@ -115,36 +115,14 @@
|
|||||||
/mob/living/silicon/ai/special_mentions()
|
/mob/living/silicon/ai/special_mentions()
|
||||||
return list("AI") // AI door!
|
return list("AI") // AI door!
|
||||||
|
|
||||||
// Converts specific characters, like +, |, and _ to formatted output.
|
/proc/encode_html_emphasis(message)
|
||||||
/mob/proc/say_emphasis(var/message)
|
var/tagged_message = message
|
||||||
message = encode_html_emphasis(message, "|", "i")
|
for(var/delimiter in GLOB.speech_toppings)
|
||||||
message = encode_html_emphasis(message, "+", "b")
|
var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g")
|
||||||
message = encode_html_emphasis(message, "_", "u")
|
var/tag = GLOB.speech_toppings[delimiter]
|
||||||
return message
|
tagged_message = R.Replace(tagged_message,"<[tag]>$1</[tag]>")
|
||||||
|
|
||||||
// Replaces a character inside message with html tags. Note that html var must not include brackets.
|
return tagged_message
|
||||||
// Will not create an open html tag if it would not have a closing one.
|
|
||||||
/proc/encode_html_emphasis(var/message, var/char, var/html)
|
|
||||||
var/i = 20 // Infinite loop safety.
|
|
||||||
var/pattern = "(?<!<)\\" + char
|
|
||||||
var/regex/re = regex(pattern,"i") // This matches results which do not have a < next to them, to avoid stripping slashes from closing html tags.
|
|
||||||
var/first = re.Find(message) // Find first occurance.
|
|
||||||
var/second = re.Find(message, first + 1) // Then the second.
|
|
||||||
while(first && second && i)
|
|
||||||
// Calculate how far foward the second char is, as the first replacetext() will displace it.
|
|
||||||
var/length_increase = length("<[html]>") - 1
|
|
||||||
|
|
||||||
// Now replace both.
|
|
||||||
message = replacetext(message, char, "<[html]>", first, first + 1)
|
|
||||||
message = replacetext(message, char, "</[html]>", second + length_increase, second + length_increase + 1)
|
|
||||||
|
|
||||||
// Check again to see if we need to keep going.
|
|
||||||
first = re.Find(message)
|
|
||||||
second = re.Find(message, first + 1)
|
|
||||||
i--
|
|
||||||
if(!i)
|
|
||||||
CRASH("Possible infinite loop occured in encode_html_emphasis().")
|
|
||||||
return message
|
|
||||||
|
|
||||||
/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
|
/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="")
|
||||||
|
|
||||||
@@ -240,7 +218,7 @@
|
|||||||
speaker_name = "[speaker.real_name] ([speaker_name])"
|
speaker_name = "[speaker.real_name] ([speaker_name])"
|
||||||
track = "[speaker_name] ([ghost_follow_link(speaker, src)])"
|
track = "[speaker_name] ([ghost_follow_link(speaker, src)])"
|
||||||
|
|
||||||
message = say_emphasis(message)
|
message = encode_html_emphasis(message)
|
||||||
|
|
||||||
var/formatted
|
var/formatted
|
||||||
if(language)
|
if(language)
|
||||||
@@ -317,7 +295,7 @@
|
|||||||
if(copytext(heardword,1, 1) in punctuation)
|
if(copytext(heardword,1, 1) in punctuation)
|
||||||
heardword = copytext(heardword,2)
|
heardword = copytext(heardword,2)
|
||||||
if(copytext(heardword,-1) in punctuation)
|
if(copytext(heardword,-1) in punctuation)
|
||||||
heardword = copytext(heardword,1,lentext(heardword))
|
heardword = copytext(heardword,1,length(heardword))
|
||||||
heard = "<span class = 'game_say'>...You hear something about...[heardword]</span>"
|
heard = "<span class = 'game_say'>...You hear something about...[heardword]</span>"
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -179,7 +179,7 @@
|
|||||||
// Language handling.
|
// Language handling.
|
||||||
/mob/proc/add_language(var/language)
|
/mob/proc/add_language(var/language)
|
||||||
|
|
||||||
var/datum/language/new_language = all_languages[language]
|
var/datum/language/new_language = GLOB.all_languages[language]
|
||||||
|
|
||||||
if(!istype(new_language) || (new_language in languages))
|
if(!istype(new_language) || (new_language in languages))
|
||||||
return 0
|
return 0
|
||||||
@@ -188,12 +188,12 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/proc/remove_language(var/rem_language)
|
/mob/proc/remove_language(var/rem_language)
|
||||||
var/datum/language/L = all_languages[rem_language]
|
var/datum/language/L = GLOB.all_languages[rem_language]
|
||||||
. = (L in languages)
|
. = (L in languages)
|
||||||
languages.Remove(L)
|
languages.Remove(L)
|
||||||
|
|
||||||
/mob/living/remove_language(rem_language)
|
/mob/living/remove_language(rem_language)
|
||||||
var/datum/language/L = all_languages[rem_language]
|
var/datum/language/L = GLOB.all_languages[rem_language]
|
||||||
if(default_language == L)
|
if(default_language == L)
|
||||||
default_language = null
|
default_language = null
|
||||||
return ..()
|
return ..()
|
||||||
@@ -205,10 +205,10 @@
|
|||||||
log_debug("[src] attempted to speak a null language.")
|
log_debug("[src] attempted to speak a null language.")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(speaking == all_languages["Noise"])
|
if(speaking == GLOB.all_languages["Noise"])
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if (only_species_language && speaking != all_languages[species_language])
|
if (only_species_language && speaking != GLOB.all_languages[species_language])
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(speaking.can_speak_special(src))
|
if(speaking.can_speak_special(src))
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
if(href_list["default_lang"])
|
if(href_list["default_lang"])
|
||||||
if(href_list["default_lang"] == "reset")
|
if(href_list["default_lang"] == "reset")
|
||||||
if (species_language)
|
if (species_language)
|
||||||
set_default_language(all_languages[species_language])
|
set_default_language(GLOB.all_languages[species_language])
|
||||||
else
|
else
|
||||||
set_default_language(null)
|
set_default_language(null)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
if (!message)
|
if (!message)
|
||||||
return
|
return
|
||||||
|
|
||||||
message = speaker.say_emphasis(message)
|
message = encode_html_emphasis(message)
|
||||||
|
|
||||||
var/message_start = "<i><span class='game say'>[name], <span class='name'>[speaker.name]</span>"
|
var/message_start = "<i><span class='game say'>[name], <span class='name'>[speaker.name]</span>"
|
||||||
var/message_body = "<span class='message'>[speaker.say_quote(message)], \"[message]\"</span></span></i>"
|
var/message_body = "<span class='message'>[speaker.say_quote(message)], \"[message]\"</span></span></i>"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
..()
|
..()
|
||||||
update_icons()
|
update_icons()
|
||||||
|
|
||||||
default_language = all_languages[LANGUAGE_GALCOM]
|
default_language = GLOB.all_languages[LANGUAGE_GALCOM]
|
||||||
|
|
||||||
botcard = new /obj/item/weapon/card/id(src)
|
botcard = new /obj/item/weapon/card/id(src)
|
||||||
botcard.access = botcard_access.Copy()
|
botcard.access = botcard_access.Copy()
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
/mob/living/carbon/alien/diona/Initialize()
|
/mob/living/carbon/alien/diona/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
species = all_species[SPECIES_DIONA]
|
species = GLOB.all_species[SPECIES_DIONA]
|
||||||
add_language(LANGUAGE_ROOTGLOBAL)
|
add_language(LANGUAGE_ROOTGLOBAL)
|
||||||
add_language(LANGUAGE_GALCOM)
|
add_language(LANGUAGE_GALCOM)
|
||||||
verbs += /mob/living/carbon/alien/diona/proc/merge
|
verbs += /mob/living/carbon/alien/diona/proc/merge
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/mob/living/carbon/alien/diona/confirm_evolution()
|
/mob/living/carbon/alien/diona/confirm_evolution()
|
||||||
|
|
||||||
if(!is_alien_whitelisted(src, all_species[SPECIES_DIONA]))
|
if(!is_alien_whitelisted(src, GLOB.all_species[SPECIES_DIONA]))
|
||||||
src << alert("You are currently not whitelisted to play as a full diona.")
|
src << alert("You are currently not whitelisted to play as a full diona.")
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
touching = new/datum/reagents/metabolism/touch(500, src)
|
touching = new/datum/reagents/metabolism/touch(500, src)
|
||||||
reagents = bloodstr
|
reagents = bloodstr
|
||||||
if (!default_language && species_language)
|
if (!default_language && species_language)
|
||||||
default_language = all_languages[species_language]
|
default_language = GLOB.all_languages[species_language]
|
||||||
|
|
||||||
/mob/living/carbon/Life()
|
/mob/living/carbon/Life()
|
||||||
..()
|
..()
|
||||||
@@ -378,12 +378,12 @@
|
|||||||
if(can_speak(default_language))
|
if(can_speak(default_language))
|
||||||
return default_language
|
return default_language
|
||||||
else
|
else
|
||||||
return all_languages[LANGUAGE_GIBBERISH]
|
return GLOB.all_languages[LANGUAGE_GIBBERISH]
|
||||||
|
|
||||||
if(!species)
|
if(!species)
|
||||||
return null
|
return null
|
||||||
|
|
||||||
return species.default_language ? all_languages[species.default_language] : null
|
return species.default_language ? GLOB.all_languages[species.default_language] : null
|
||||||
|
|
||||||
/mob/living/carbon/proc/should_have_organ(var/organ_check)
|
/mob/living/carbon/proc/should_have_organ(var/organ_check)
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user