Citadel's folder's end (#5828)
* ERP, miscreants, clothing * github pls * guns, dogborg, areas, vendor * finishes moving around the last of the stuffs * cleaned up shit. italics on subtle messages vore code to modular_citadel too * updates codeowners and recompiles tgui because it's a healthy thing to do * reee, I had that spawner set byond * cleans up a bad pipe does the thing I've been meaning to do for a while now as well. * bumps up xenobio console requirements inb4 reee * snowflake commenting
This commit is contained in:
@@ -0,0 +1,306 @@
|
||||
|
||||
//For custom items.
|
||||
|
||||
/obj/item/custom/ceb_soap
|
||||
name = "Cebutris' Soap"
|
||||
desc = "A generic bar of soap that doesn't really seem to work right."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "cebu"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
flags_1 = NOBLUDGEON_1
|
||||
|
||||
/obj/item/soap/cebu //real versions, for admin shenanigans. Adminspawn only
|
||||
desc = "A bright blue bar of soap that smells of wolves"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "cebu"
|
||||
|
||||
/obj/item/soap/cebu/fast //speedyquick cleaning version. Still not as fast as Syndiesoap. Adminspawn only.
|
||||
cleanspeed = 15
|
||||
|
||||
|
||||
/*Inferno707*/
|
||||
|
||||
/obj/item/clothing/neck/cloak/inferno
|
||||
name = "Kiara's Cloak"
|
||||
desc = "The design on this seems a little too familiar."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "infcloak"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "infcloak"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
|
||||
/obj/item/clothing/neck/petcollar/inferno
|
||||
name = "Kiara's Collar"
|
||||
desc = "A soft black collar that seems to stretch to fit whoever wears it."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "infcollar"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "infcollar"
|
||||
item_color = null
|
||||
tagname = null
|
||||
|
||||
/obj/item/clothing/accessory/medal/steele
|
||||
name = "Insignia Of Steele"
|
||||
desc = "An intricate pendant given to those who help a key member of the Steele Corporation."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "steele"
|
||||
item_color = "steele"
|
||||
medaltype = "medal-silver"
|
||||
|
||||
/*DirtyOldHarry*/
|
||||
|
||||
/obj/item/lighter/gold
|
||||
name = "\improper Engraved Zippo"
|
||||
desc = "A shiny and relatively expensive zippo lighter. There's a small etched in verse on the bottom that reads, 'No Gods, No Masters, Only Man.'"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "gold_zippo"
|
||||
item_state = "gold_zippo"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
heat = 1500
|
||||
resistance_flags = FIRE_PROOF
|
||||
light_color = LIGHT_COLOR_FIRE
|
||||
|
||||
|
||||
/*Zombierobin*/
|
||||
|
||||
/obj/item/clothing/neck/scarf/zomb //Default white color, same functionality as beanies.
|
||||
name = "A special scarf"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "zombscarf"
|
||||
desc = "A fashionable collar"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_color = "zombscarf"
|
||||
dog_fashion = /datum/dog_fashion/head
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/mad/red
|
||||
name = "\improper The Mad's labcoat"
|
||||
desc = "An oddly special looking coat."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "labred"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "labred"
|
||||
|
||||
|
||||
/*Improvedname*/
|
||||
|
||||
/obj/item/toy/plush/carrot
|
||||
name = "carrot plushie"
|
||||
desc = "While a normal carrot would be good for your eyes, this one seems a bit more for hugging then eating."
|
||||
icon = 'icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "carrot"
|
||||
item_state = "carrot"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("slapped")
|
||||
resistance_flags = FLAMMABLE
|
||||
squeak_override = list('sound/items/bikehorn.ogg'= 1)
|
||||
|
||||
/obj/item/clothing/neck/cloak/carrot
|
||||
name = "carrot cloak"
|
||||
desc = "A cloak in the shape and color of a carrot!"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
icon_state = "carrotcloak"
|
||||
item_state = "carrotcloak"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
|
||||
/obj/item/storage/backpack/satchel/carrot
|
||||
name = "carrot satchel"
|
||||
desc = "An satchel that is designed to look like an carrot"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "satchel_carrot"
|
||||
item_state = "satchel_carrot"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
|
||||
/obj/item/storage/backpack/satchel/carrot/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/squeak, list('sound/items/toysqueak1.ogg'=1), 50)
|
||||
|
||||
/*PLACEHOLDER*/
|
||||
|
||||
/obj/item/toy/plush/tree
|
||||
name = "christmass tree plushie"
|
||||
desc = "A festive plush that squeeks when you squeeze it!"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "pine_c"
|
||||
item_state = "pine_c"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("slapped")
|
||||
resistance_flags = FLAMMABLE
|
||||
squeak_override = list('sound/misc/server-ready.ogg'= 1)
|
||||
|
||||
/obj/item/clothing/neck/cloak/festive
|
||||
name = "Celebratory Cloak of Morozko"
|
||||
desc = " It probably will protect from snow, charcoal or elves."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "festive"
|
||||
item_state = "festive"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
|
||||
|
||||
/*Zigfie*/
|
||||
|
||||
/obj/item/clothing/mask/luchador/zigfie
|
||||
name = "Alboroto Rosa mask"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "lucharzigfie"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "lucharzigfie"
|
||||
|
||||
|
||||
/*PLACEHOLDER*/
|
||||
|
||||
/obj/item/clothing/head/hardhat/reindeer/fluff
|
||||
name = "novelty reindeer hat"
|
||||
desc = "Some fake antlers and a very fake red nose - Sponsored by PWR Game(tm)"
|
||||
icon_state = "hardhat0_reindeer"
|
||||
item_state = "hardhat0_reindeer"
|
||||
item_color = "reindeer"
|
||||
flags_inv = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
brightness_on = 0 //luminosity when on
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
/obj/item/clothing/head/santa/fluff
|
||||
name = "santa's hat"
|
||||
desc = "On the first day of christmas my employer gave to me! - From Vlad with Salad"
|
||||
icon_state = "santahatnorm"
|
||||
item_state = "that"
|
||||
dog_fashion = /datum/dog_fashion/head/santa
|
||||
|
||||
//Removed all of the space flags from this suit so it utilizes nothing special.
|
||||
/obj/item/clothing/suit/space/santa/fluff
|
||||
name = "Santa's suit"
|
||||
desc = "Festive!"
|
||||
icon_state = "santa"
|
||||
item_state = "santa"
|
||||
slowdown = 0
|
||||
|
||||
/obj/item/clothing/mask/sexymime
|
||||
name = "The Hollow heart"
|
||||
desc = "Sometimes things are too much to hide."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
icon_state = "sexymime"
|
||||
item_state = "sexymime"
|
||||
flags_inv = HIDEFACE|HIDEFACIALHAIR
|
||||
|
||||
|
||||
/*Brian*/
|
||||
|
||||
/obj/item/clothing/suit/trenchcoat/green
|
||||
name = "Reece's Great Coat"
|
||||
desc = "You would swear this was in your nightmares after eating too many veggies."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "hos-g"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "hos-g"
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS
|
||||
|
||||
|
||||
/*Slomek*/
|
||||
/obj/item/reagent_containers/food/drinks/flask/russian
|
||||
name = "russian flask"
|
||||
desc = "Every good russian spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "russianflask"
|
||||
volume = 60
|
||||
|
||||
/obj/item/clothing/mask/gas/stalker
|
||||
name = "S.T.A.L.K.E.R. mask"
|
||||
desc = "Smells like reactor four."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
item_state = "stalker"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
icon_state = "stalker"
|
||||
|
||||
|
||||
/*Sylas*/
|
||||
/obj/item/clothing/neck/petcollar/stripe //don't really wear this though please c'mon seriously guys
|
||||
name = "collar"
|
||||
desc = "It's a collar..."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "petcollar-stripe"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "petcollar-stripe"
|
||||
tagname = null
|
||||
|
||||
|
||||
/*PLACEHOLDER*/
|
||||
/obj/item/clothing/under/singery/custom
|
||||
name = "bluish performer's outfit"
|
||||
desc = "Just looking at this makes you want to sing."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "singer"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "singer"
|
||||
item_color = "singer"
|
||||
fitted = NO_FEMALE_UNIFORM
|
||||
alternate_worn_layer = ABOVE_SHOES_LAYER
|
||||
can_adjust = 0
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/sneakers/pink
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "pink"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
item_state = "pink"
|
||||
|
||||
/obj/item/clothing/neck/tie/bloodred
|
||||
name = "Blood Red Tie"
|
||||
desc = "A neosilk clip-on tie. This one has a black S on the tipping and looks rather unique."
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "bloodredtie"
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
|
||||
|
||||
/*Fractious*/
|
||||
|
||||
/obj/item/clothing/suit/vermillion
|
||||
name = "vermillion clothing"
|
||||
desc = "Some clothing."
|
||||
icon_state = "vermillion"
|
||||
item_state = "vermillion"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_override = 'icons/mob/custom_w.dmi'
|
||||
|
||||
/*TechnicalMagi*/
|
||||
/obj/item/clothing/under/bb_sweater/black/naomi
|
||||
name = "worn black sweater"
|
||||
desc = "A well-loved sweater, showing signs of several cleanings and re-stitchings. And a few stains. Is that cat fur?"
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi
|
||||
name = "worn pet collar"
|
||||
desc = "a pet collar that looks well used."
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/examine(mob/user)
|
||||
. = ..()
|
||||
if(usr.ckey != "technicalmagi")
|
||||
to_chat(user, "There's something odd about the it. You probably shouldn't wear it...")//warn people not to wear it if they're not Naomi, lest they become as crazy as she is
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/equipped()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/dropped()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/process()
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(loc))
|
||||
H = loc
|
||||
if(!H)
|
||||
return
|
||||
else if(H.get_item_by_slot(slot_neck) == src)
|
||||
if(H.arousalloss < H.max_arousal / 3)
|
||||
H.arousalloss = H.max_arousal / 3
|
||||
if(prob(5) && H.hallucination < 15)
|
||||
H.hallucination += 10
|
||||
@@ -0,0 +1,61 @@
|
||||
|
||||
//Proc that does the actual loading of items to mob
|
||||
/*Itemlists are formatted as
|
||||
"[typepath]" = number_of_it_to_spawn
|
||||
*/
|
||||
|
||||
#define DROP_TO_FLOOR 0
|
||||
#define LOADING_TO_HUMAN 1
|
||||
|
||||
/proc/handle_roundstart_items(mob/living/M, ckey_override, job_override, special_override)
|
||||
if(!istype(M) || (!M.ckey && !ckey_override) || (!M.mind && (!job_override || !special_override)))
|
||||
return FALSE
|
||||
return load_itemlist_to_mob(M, parse_custom_roundstart_items(ckey_override? ckey_override : M.ckey, M.name, job_override? job_override : M.mind.assigned_role, special_override? special_override : M.mind.special_role), TRUE, TRUE, FALSE)
|
||||
|
||||
//Just incase there's extra mob selections in the future.....
|
||||
/proc/load_itemlist_to_mob(mob/living/L, list/itemlist, drop_on_floor_if_full = TRUE, load_to_all_slots = TRUE, replace_slots = FALSE)
|
||||
if(!istype(L) || !islist(itemlist))
|
||||
return FALSE
|
||||
var/loading_mode = DROP_TO_FLOOR
|
||||
var/turf/current_turf = get_turf(L)
|
||||
if(ishuman(L))
|
||||
loading_mode = LOADING_TO_HUMAN
|
||||
switch(loading_mode)
|
||||
if(DROP_TO_FLOOR)
|
||||
for(var/I in itemlist)
|
||||
var/typepath = text2path(I)
|
||||
if(!typepath)
|
||||
continue
|
||||
for(var/i = 0, i < itemlist[I], i++)
|
||||
new typepath(current_turf)
|
||||
return TRUE
|
||||
if(LOADING_TO_HUMAN)
|
||||
return load_itemlist_to_human(L, itemlist, drop_on_floor_if_full, load_to_all_slots, replace_slots)
|
||||
|
||||
/proc/load_itemlist_to_human(mob/living/carbon/human/H, list/itemlist, drop_on_floor_if_full = TRUE, load_to_all_slots = TRUE, replace_slots = FALSE)
|
||||
if(!istype(H) || !islist(itemlist))
|
||||
return FALSE
|
||||
var/turf/T = get_turf(H)
|
||||
for(var/item in itemlist)
|
||||
var/path = item
|
||||
if(!ispath(path))
|
||||
path = text2path(path)
|
||||
if(!path)
|
||||
continue
|
||||
var/amount = itemlist[item]
|
||||
for(var/i in 1 to amount)
|
||||
var/atom/movable/loaded_atom = new path
|
||||
if(!istype(loaded_atom))
|
||||
QDEL_NULL(loaded_atom)
|
||||
continue
|
||||
if(!istype(loaded_atom, /obj/item))
|
||||
loaded_atom.forceMove(T)
|
||||
continue
|
||||
var/obj/item/loaded = loaded_atom
|
||||
var/obj/item/storage/S = H.get_item_by_slot(slot_back)
|
||||
if(istype(S))
|
||||
S.handle_item_insertion(loaded, TRUE, H) //Force it into their backpack
|
||||
continue
|
||||
if(!H.put_in_hands(loaded)) //They don't have one/somehow that failed, put it in their hands
|
||||
loaded.forceMove(T) //Guess we're just dumping it on the floor!
|
||||
return TRUE
|
||||
@@ -0,0 +1,71 @@
|
||||
|
||||
GLOBAL_LIST(custom_item_list)
|
||||
//Layered list in form of custom_item_list[ckey][job][items][amounts]
|
||||
//ckey is key, job is specific jobs, or "ALL" for all jobs, items for items, amounts for amount of item.
|
||||
|
||||
//File should be in the format of ckey|exact job name/exact job name/or put ALL instead of any job names|/path/to/item=amount;/path/to/item=amount
|
||||
//Each ckey should be in a different line
|
||||
//if there's multiple entries of a single ckey the later ones will add to the earlier definitions.
|
||||
|
||||
/proc/reload_custom_roundstart_items_list(custom_filelist)
|
||||
if(!custom_filelist)
|
||||
custom_filelist = "config/custom_roundstart_items.txt"
|
||||
GLOB.custom_item_list = list()
|
||||
var/list/file_lines = world.file2list(custom_filelist)
|
||||
for(var/line in file_lines)
|
||||
if(length(line) == 0) //Emptyline, no one cares.
|
||||
continue
|
||||
if(copytext(line,1,3) == "//") //Commented line, ignore.
|
||||
continue
|
||||
var/ckey_str_sep = findtext(line, "|") //Process our stuff..
|
||||
var/char_str_sep = findtext(line, "|", ckey_str_sep+1)
|
||||
var/job_str_sep = findtext(line, "|", char_str_sep+1)
|
||||
var/item_str_sep = findtext(line, "|", job_str_sep+1)
|
||||
var/ckey_str = ckey(copytext(line, 1, ckey_str_sep))
|
||||
var/char_str = copytext(line, ckey_str_sep+1, char_str_sep)
|
||||
var/job_str = copytext(line, char_str_sep+1, job_str_sep)
|
||||
var/item_str = copytext(line, job_str_sep+1, item_str_sep)
|
||||
if(!ckey_str || !char_str || !job_str || !item_str || !length(ckey_str) || !length(char_str) || !length(job_str) || !length(item_str))
|
||||
log_admin("Errored custom_items_whitelist line: [line] - Component/separator missing!")
|
||||
if(!islist(GLOB.custom_item_list[ckey_str]))
|
||||
GLOB.custom_item_list[ckey_str] = list() //Initialize list for this ckey if it isn't initialized..
|
||||
var/list/characters = splittext(char_str, "/")
|
||||
for(var/character in characters)
|
||||
if(!islist(GLOB.custom_item_list[ckey_str][character]))
|
||||
GLOB.custom_item_list[ckey_str][character] = list()
|
||||
var/list/jobs = splittext(job_str, "/")
|
||||
for(var/job in jobs)
|
||||
for(var/character in characters)
|
||||
if(!islist(GLOB.custom_item_list[ckey_str][character][job]))
|
||||
GLOB.custom_item_list[ckey_str][character][job] = list() //Initialize item list for this job of this ckey if not already initialized.
|
||||
var/list/item_strings = splittext(item_str, ";") //Get item strings in format of /path/to/item=amount
|
||||
for(var/item_string in item_strings)
|
||||
var/path_str_sep = findtext(item_string, "=")
|
||||
var/path = copytext(item_string, 1, path_str_sep) //Path to spawn
|
||||
var/amount = copytext(item_string, path_str_sep+1) //Amount to spawn
|
||||
//world << "DEBUG: Item string [item_string] processed"
|
||||
amount = text2num(amount)
|
||||
path = text2path(path)
|
||||
if(!ispath(path) || !isnum(amount))
|
||||
log_admin("Errored custom_items_whitelist line: [line] - Path/number for item missing or invalid.")
|
||||
for(var/character in characters)
|
||||
for(var/job in jobs)
|
||||
if(!GLOB.custom_item_list[ckey_str][character][job][path]) //Doesn't exist, make it exist!
|
||||
GLOB.custom_item_list[ckey_str][character][job][path] = amount
|
||||
else
|
||||
GLOB.custom_item_list[ckey_str][character][job][path] += amount //Exists, we want more~
|
||||
return GLOB.custom_item_list
|
||||
|
||||
/proc/parse_custom_roundstart_items(ckey, char_name = "ALL", job_name = "ALL", special_role)
|
||||
var/list/ret = list()
|
||||
if(GLOB.custom_item_list[ckey])
|
||||
for(var/char in GLOB.custom_item_list[ckey])
|
||||
if((char_name == char) || (char_name == "ALL") || (char == "ALL"))
|
||||
for(var/job in GLOB.custom_item_list[ckey][char])
|
||||
if((job_name == job) || (job == "ALL") || (job_name == "ALL") || (special_role && (job == special_role)))
|
||||
for(var/item_path in GLOB.custom_item_list[ckey][char][job])
|
||||
if(ret[item_path])
|
||||
ret[item_path] += GLOB.custom_item_list[ckey][char][job][item_path]
|
||||
else
|
||||
ret[item_path] = GLOB.custom_item_list[ckey][char][job][item_path]
|
||||
return ret
|
||||
Reference in New Issue
Block a user