Merge branch 'master' into midnight-fluffles

This commit is contained in:
FlattestGuitar
2017-05-25 18:45:58 +02:00
106 changed files with 2095 additions and 889 deletions
+40
View File
@@ -140,3 +140,43 @@ DEBUG
jobban_savebanfile()
return 1
return 0
/mob/verb/displayjobbans()
set category = "OOC"
set name = "Display Current Jobbans"
set desc = "Displays all of your current jobbans."
if(!client || !ckey)
return
if(config.ban_legacy_system)
//using the legacy .txt ban system
to_chat(src, "The server is using the legacy ban system. Ask an administrator for help!")
else
//using the SQL ban system
var/is_actually_banned = FALSE
var/DBQuery/select_query = dbcon.NewQuery("SELECT bantime, bantype, reason, job, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey like '[ckey]' AND ((bantype like 'JOB_TEMPBAN' AND expiration_time > Now()) OR (bantype like 'JOB_PERMABAN')) AND isnull(unbanned) ORDER BY bantime DESC LIMIT 100")
select_query.Execute()
while(select_query.NextRow())
var/bantime = select_query.item[1]
var/bantype = select_query.item[2]
var/reason = select_query.item[3]
var/job = select_query.item[4]
var/duration = select_query.item[5]
var/expiration = select_query.item[6]
var/ackey = select_query.item[7]
if(bantype == "JOB_PERMABAN")
to_chat(src, "<span class='warning'>[bantype]: [job] - REASON: [reason], by [ackey]; [bantime]</span>")
else if(bantype == "JOB_TEMPBAN")
to_chat(src, "<span class='warning'>[bantype]: [job] - REASON: [reason], by [ackey]; [bantime]; [duration]; expires [expiration]</span>")
is_actually_banned = TRUE
if(is_actually_banned)
if(config.banappeals)
to_chat(src, "<span class='warning'>You can appeal the bans at: [config.banappeals]</span>")
else
to_chat(src, "<span class='warning'>You have no active jobbans!</span>")
+6 -7
View File
@@ -150,12 +150,11 @@
adminhelp(reply) //sender has left, adminhelp instead
return
// for emoji, we have to define a specific span for jquery to look for
msg = "<span class='emoji_enabled'>[msg]</span>"
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]</b>: [msg]</span>"
var/emoji_msg = "<span class='emoji_enabled'>[msg]</span>"
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]</b>: [emoji_msg]</span>"
to_chat(C, recieve_message)
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[key_name(C, src, holder ? 1 : 0, type)]</b>: [msg]</font>")
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[key_name(C, src, holder ? 1 : 0, type)]</b>: [emoji_msg]</font>")
/*if(holder && !C.holder)
C.last_pm_recieved = world.time
@@ -176,13 +175,13 @@
switch(type)
if("Mentorhelp")
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [msg]</span>")
to_chat(X, "<span class='mentorhelp'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [emoji_msg]</span>")
if("Adminhelp")
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [msg]</span>")
to_chat(X, "<span class='adminhelp'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [emoji_msg]</span>")
else
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [msg]</span>")
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, X, 0, type)]-&gt;[key_name(C, X, 0, type)]: [emoji_msg]</span>")
/client/proc/cmd_admin_irc_pm()
if(prefs.muted & MUTE_ADMINHELP)
@@ -134,8 +134,13 @@
display_name = "cowboy shirt, short sleeved navy"
path = /obj/item/clothing/accessory/cowboyshirt/navy/short_sleeved
/datum/gear/accessory/locket
display_name = "gold locket"
path = /obj/item/clothing/accessory/necklace/locket
/datum/gear/accessory/necklace
display_name = "simple necklace"
path = /obj/item/clothing/accessory/necklace
@@ -68,6 +68,11 @@
path = /obj/item/clothing/under/rank/medical/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic","Brig Physician")
/datum/gear/uniform/skirt/job/phys
display_name = "skirt, physician"
path = /obj/item/clothing/under/rank/security/brigphys/skirt
allowed_roles = list("Brig Physician")
/datum/gear/uniform/skirt/job/sci
display_name = "skirt, scientist"
path = /obj/item/clothing/under/rank/scientist/skirt
@@ -98,6 +103,17 @@
path = /obj/item/clothing/under/rank/head_of_security/skirt
allowed_roles = list("Head of Security")
/datum/gear/uniform/skirt/job/ntrep
display_name = "skirt, nt rep"
path = /obj/item/clothing/under/rank/ntrep/skirt
allowed_roles = list("Nanotrasen Representative")
/datum/gear/uniform/skirt/job/blueshield
display_name = "skirt, blueshield"
path = /obj/item/clothing/under/rank/blueshield/skirt
allowed_roles = list("Blueshield")
/datum/gear/uniform/medical
subtype_path = /datum/gear/uniform/medical
+109 -66
View File
@@ -28,9 +28,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
)
/proc/player_old_enough_antag(client/C, role)
if(available_in_days_antag(C, role) == 0)
return 1 //Available in 0 days = available right now = player is old enough to play.
return 0
if(available_in_days_antag(C, role))
return 0 //available_in_days>0 = still some days required = player not old enough
if(role_available_in_playtime(C, role))
return 0 //available_in_playtime>0 = still some more playtime required = they are not eligible
return 1
/proc/available_in_days_antag(client/C, role)
if(!C)
@@ -147,6 +149,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/alt_head = "None" //Alt head style.
var/species = "Human"
var/language = "None" //Secondary language
var/autohiss_mode = AUTOHISS_OFF //Species autohiss level. OFF, BASIC, FULL.
var/body_accessory = null
@@ -259,6 +262,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(current_tab)
if(TAB_CHAR) // Character Settings
var/datum/species/S = all_species[species]
if(!istype(S)) //The species was invalid. Set the species to the default, fetch the datum for that species and generate a random character.
species = initial(species)
S = all_species[species]
random_character()
dat += "<div class='statusDisplay' style='max-width: 128px; position: absolute; left: 150px; top: 150px'><img src=previewicon.png class='charPreview'><img src=previewicon2.png class='charPreview'></div>"
dat += "<table width='100%'><tr><td width='405px' height='25px' valign='top'>"
dat += "<b>Name: </b>"
@@ -289,9 +298,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(species == "Grey")
dat += "<b>Voice:</b> <a href ='?_src_=prefs;preference=speciesprefs;task=input'>[speciesprefs ? "Wingdings" : "Normal"]</a><BR>"
dat += "<b>Secondary Language:</b> <a href='?_src_=prefs;preference=language;task=input'>[language]</a><br>"
if(S.autohiss_basic_map)
dat += "<b>Auto-accent:</b> <a href='?_src_=prefs;preference=autohiss_mode;task=input'>[autohiss_mode == AUTOHISS_FULL ? "Full" : (autohiss_mode == AUTOHISS_BASIC ? "Basic" : "Off")]</a><br>"
dat += "<b>Blood Type:</b> <a href='?_src_=prefs;preference=b_type;task=input'>[b_type]</a><br>"
if(species in list("Human", "Drask", "Vox"))
dat += "<b>Skin Tone:</b> <a href='?_src_=prefs;preference=s_tone;task=input'>[species == "Vox" ? "[s_tone]" : "[-s_tone + 35]/220"]</a><br>"
if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE))
dat += "<b>Skin Tone:</b> <a href='?_src_=prefs;preference=s_tone;task=input'>[S.bodyflags & HAS_ICON_SKIN_TONE ? "[s_tone]" : "[-s_tone + 35]/220"]</a><br>"
dat += "<b>Disabilities:</b> <a href='?_src_=prefs;preference=disabilities'>\[Set\]</a><br>"
dat += "<b>Nanotrasen Relation:</b> <a href ='?_src_=prefs;preference=nt_relation;task=input'>[nanotrasen_relation]</a><br>"
dat += "<a href='byond://?_src_=prefs;preference=flavor_text;task=input'>Set Flavor Text</a><br>"
@@ -302,7 +313,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<h2>Hair & Accessories</h2>"
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine", "Kidan")) //Species that have head accessories.
if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories.
var/headaccessoryname = "Head Accessory: "
if(species == "Unathi")
headaccessoryname = "Horns: "
@@ -310,15 +321,15 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<a href='?_src_=prefs;preference=ha_style;task=input'>[ha_style]</a> "
dat += "<a href='?_src_=prefs;preference=headaccessory;task=input'>Color</a> [color_square(r_headacc, g_headacc, b_headacc)]<br>"
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin", "Kidan")) //Species with head markings.
if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
dat += "<b>Head Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_head;task=input'>[m_styles["head"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_head_colour;task=input'>Color</a> [color_square(color2R(m_colours["head"]), color2G(m_colours["head"]), color2B(m_colours["head"]))]<br>"
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask", "Kidan")) //Species with body markings/tattoos.
if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos.
dat += "<b>Body Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_body;task=input'>[m_styles["body"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_body_colour;task=input'>Color</a> [color_square(color2R(m_colours["body"]), color2G(m_colours["body"]), color2B(m_colours["body"]))]<br>"
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
dat += "<b>Tail Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_tail;task=input'>[m_styles["tail"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_tail_colour;task=input'>Color</a> [color_square(color2R(m_colours["tail"]), color2G(m_colours["tail"]), color2B(m_colours["tail"]))]<br>"
@@ -340,11 +351,11 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<br>"
if(species != "Machine")
if(!(S.flags & ALL_RPARTS))
dat += "<b>Eyes:</b> "
dat += "<a href='?_src_=prefs;preference=eyes;task=input'>Color</a> [color_square(r_eyes, g_eyes, b_eyes)]<br>"
if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins
if((S.bodyflags & HAS_SKIN_COLOR) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins
dat += "<b>Body Color:</b> "
dat += "<a href='?_src_=prefs;preference=skin;task=input'>Color</a> [color_square(r_skin, g_skin, b_skin)]<br>"
@@ -361,7 +372,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<a href=\"byond://?_src_=prefs;preference=records;record=1\">Character Records</a><br>"
dat += "<h2>Limbs</h2>"
if(species in list("Unathi")) //Species with alt heads.
if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads.
dat += "<b>Alternate Head:</b> "
dat += "<a href='?_src_=prefs;preference=alt_head;task=input'>[alt_head]</a><br>"
dat += "<b>Limbs and Parts:</b> <a href='?_src_=prefs;preference=limbs;task=input'>Adjust</a><br>"
@@ -412,9 +423,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
else dat += "<br>"
dat += "<h2>Clothing</h2>"
dat += "<b>Underwear:</b> <a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><BR>"
dat += "<b>Undershirt:</b> <a href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a><BR>"
dat += "<b>Socks:</b> <a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><BR>"
if(S.clothing_flags & HAS_UNDERWEAR)
dat += "<b>Underwear:</b> <a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><BR>"
if(S.clothing_flags & HAS_UNDERSHIRT)
dat += "<b>Undershirt:</b> <a href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a><BR>"
if(S.clothing_flags & HAS_SOCKS)
dat += "<b>Socks:</b> <a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><BR>"
dat += "<b>Backpack Type:</b> <a href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a><br>"
dat += "</td></tr></table>"
@@ -460,9 +474,15 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
for(var/i in special_roles)
if(jobban_isbanned(user, i))
dat += "<b>Be [capitalize(i)]:</b> <font color=red><b> \[BANNED]</b></font><br>"
else if(!player_old_enough_antag(user.client,i))
var/available_in_days_antag = available_in_days_antag(user.client,i)
dat += "<b>Be [capitalize(i)]:</b> <font color=red><b> \[IN [(available_in_days_antag)] DAYS]</b></font><br>"
else if(!player_old_enough_antag(user.client, i))
var/available_in_days_antag = available_in_days_antag(user.client, i)
var/role_available_in_playtime = get_exp_format(role_available_in_playtime(user.client, i))
if(available_in_days_antag)
dat += "<b>Be [capitalize(i)]:</b> <font color=red><b> \[IN [(available_in_days_antag)] DAYS]</b></font><br>"
else if(role_available_in_playtime)
dat += "<b>Be [capitalize(i)]:</b> <font color=red><b> \[IN [(role_available_in_playtime)]]</b></font><br>"
else
dat += "<b>Be [capitalize(i)]:</b> <font color=red><b> \[ERROR]</b></font><br>"
else
dat += "<b>Be [capitalize(i)]:</b> <a href='?_src_=prefs;preference=be_special;role=[i]'><b>[(i in src.be_special) ? "Yes" : "No"]</b></a><br>"
dat += "</td></tr></table>"
@@ -556,7 +576,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
metadata["[tweak]"] = new_metadata
/datum/preferences/proc/SetChoices(mob/user, limit = 12, list/splitJobs = list("Civilian","Research Director","AI","Bartender"), width = 760, height = 790)
/datum/preferences/proc/SetChoices(mob/user, limit = 13, list/splitJobs = list("Civilian","Research Director","AI","Bartender"), width = 760, height = 790)
if(!job_master)
return
@@ -806,7 +826,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
return 1
/datum/preferences/proc/ShowDisabilityState(mob/user,flag,label)
if(flag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey"))
var/datum/species/S = all_species[species]
if(flag==DISABILITY_FLAG_FAT && !(S.flags & CAN_BE_FAT))
return "<li><i>[species] cannot be fat.</i></li>"
return "<li><b>[label]:</b> <a href=\"?_src_=prefs;task=input;preference=disabilities;disability=[flag]\">[disabilities & flag ? "Yes" : "No"]</a></li>"
@@ -1068,7 +1089,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("input")
var/dflag=text2num(href_list["disability"])
if(dflag >= 0)
if(!(dflag==DISABILITY_FLAG_FAT && species!=("Human" || "Tajaran" || "Grey")))
if(!(dflag==DISABILITY_FLAG_FAT && !(S.flags & CAN_BE_FAT))) //If the disability isn't fatness, toggle it. If it IS fatness, check to see if the species can be fat before going ahead.
disabilities ^= text2num(href_list["disability"]) //MAGIC
SetDisabilities(user)
else
@@ -1154,7 +1175,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(href_list["task"])
if("random")
var/datum/robolimb/robohead
if(species == "Machine")
if(S.flags & ALL_RPARTS)
var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]"
robohead = all_robolimbs[head_model]
switch(href_list["preference"])
@@ -1187,30 +1208,30 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("f_style")
f_style = random_facial_hair_style(gender, species, robohead)
if("headaccessory")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories.
r_headacc = rand(0,255)
g_headacc = rand(0,255)
b_headacc = rand(0,255)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories.
ha_style = random_head_accessory(species)
if("m_style_head")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin", "Kidan")) //Species with head markings.
if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head)
if("m_head_colour")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin", "Kidan")) //Species with head markings.
if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
m_colours["head"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("m_style_body")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask", "Kidan")) //Species with body markings.
if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings.
m_styles["body"] = random_marking_style("body", species)
if("m_body_colour")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask", "Kidan")) //Species with body markings.
if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings.
m_colours["body"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("m_style_tail")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
m_styles["tail"] = random_marking_style("tail", species, null, body_accessory)
if("m_tail_colour")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
m_colours["tail"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("underwear")
underwear = random_underwear(gender, species)
@@ -1226,10 +1247,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
g_eyes = rand(0,255)
b_eyes = rand(0,255)
if("s_tone")
if(species in list("Human", "Drask", "Vox"))
if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE))
s_tone = random_skin_tone()
if("s_color")
if(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Wryn", "Vulpkanin", "Machine"))
if(S.bodyflags & HAS_SKIN_COLOR)
r_skin = rand(0,255)
g_skin = rand(0,255)
b_skin = rand(0,255)
@@ -1253,7 +1274,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("age")
var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null
if(new_age)
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
age = max(min(round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("species")
var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
var/prev_species = species
@@ -1271,11 +1292,15 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
species = input("Please select a species", "Character Generation", null) in new_species
var/datum/species/NS = all_species[species]
if(!istype(NS)) //The species was invalid. Notify the user and fail out.
species = prev_species
to_chat(user, "<span class='warning'>Invalid species, please pick something else.</span>")
return
if(prev_species != species)
if(NS.has_gender && gender == PLURAL)
gender = pick(MALE,FEMALE)
var/datum/robolimb/robohead
if(species == "Machine")
if(NS.flags & ALL_RPARTS)
var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]"
robohead = all_robolimbs[head_model]
//grab one of the valid hair styles for the newly chosen species
@@ -1284,7 +1309,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
//grab one of the valid facial hair styles for the newly chosen species
f_style = random_facial_hair_style(gender, species, robohead)
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
if(NS.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories.
ha_style = random_head_accessory(species)
else
ha_style = "None" // No Vulp ears on Unathi
@@ -1292,19 +1317,19 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
g_headacc = 0
b_headacc = 0
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin", "Kidan")) //Species with head markings.
if(NS.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head)
else
m_styles["head"] = "None"
m_colours["head"] = "#000000"
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask", "Kidan")) //Species with body markings/tattoos.
if(NS.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos.
m_styles["body"] = random_marking_style("body", species)
else
m_styles["body"] = "None"
m_colours["body"] = "#000000"
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
if(NS.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
m_styles["tail"] = random_marking_style("tail", species, null, body_accessory)
else
m_styles["tail"] = "None"
@@ -1324,12 +1349,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
socks = random_socks(gender, species)
//reset skin tone and colour
if(species in list("Human", "Drask", "Vox"))
if(NS.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE))
random_skin_tone(species)
else
s_tone = 0
if(!(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")))
if(!(NS.bodyflags & HAS_SKIN_COLOR))
r_skin = 0
g_skin = 0
b_skin = 0
@@ -1342,6 +1367,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
//Reset prosthetics.
organ_data = list()
rlimb_data = list()
if(!(NS.autohiss_basic_map))
autohiss_mode = AUTOHISS_OFF
if("speciesprefs")
speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0.
if("language")
@@ -1366,6 +1394,12 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
language = input("Please select a secondary language", "Character Generation", null) in new_languages
if("autohiss_mode")
if(S.autohiss_basic_map)
var/list/autohiss_choice = list("Off" = AUTOHISS_OFF, "Basic" = AUTOHISS_BASIC, "Full" = AUTOHISS_FULL)
var/new_autohiss_pref = input(user, "Choose your character's auto-accent level:", "Character Preference") as null|anything in autohiss_choice
autohiss_mode = autohiss_choice[new_autohiss_pref]
if("metadata")
var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null
if(new_metadata)
@@ -1377,7 +1411,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_type = new_b_type
if("hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have hair. (No HAS_HAIR flag)
var/input = "Choose your character's hair colour:"
var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null
if(new_hair)
@@ -1403,7 +1437,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if(species == "Machine") //Species that can use prosthetic heads.
if(S.flags & ALL_RPARTS) //Species that can use prosthetic heads.
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
head_model = "Morpheus Cyberkinetics"
@@ -1425,7 +1459,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
h_style = new_h_style
if("headaccessory")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine", "Kidan")) //Species with head accessories.
if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories.
var/input = "Choose the colour of your your character's head accessory:"
var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null
if(new_head_accessory)
@@ -1434,7 +1468,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_headacc = color2B(new_head_accessory)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine", "Kidan")) //Species with head accessories.
if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories.
var/list/valid_head_accessory_styles = list()
for(var/head_accessory_style in head_accessory_styles_list)
var/datum/sprite_accessory/H = head_accessory_styles_list[head_accessory_style]
@@ -1450,7 +1484,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("alt_head")
if(organ_data["head"] == "cyborg")
return
if(species in list("Unathi")) //Species with alt heads.
if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads.
var/list/valid_alt_heads = list()
valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option
for(var/alternate_head in alt_heads_list)
@@ -1470,7 +1504,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
m_styles["head"] = "None"
if("m_style_head")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin", "Kidan")) //Species with head markings.
if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
@@ -1486,7 +1520,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(M.heads_allowed && !("All" in M.heads_allowed))
continue
if(species == "Machine") //Species that can use prosthetic heads.
if(S.flags & ALL_RPARTS) //Species that can use prosthetic heads.
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
head_model = "Morpheus Cyberkinetics"
@@ -1506,14 +1540,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
m_styles["head"] = new_marking_style
if("m_head_colour")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin", "Kidan")) //Species with head markings.
if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
var/input = "Choose the colour of your your character's head markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["head"]) as color|null
if(new_markings)
m_colours["head"] = new_markings
if("m_style_body")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask", "Kidan")) //Species with body markings/tattoos.
if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
@@ -1530,14 +1564,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
m_styles["body"] = new_marking_style
if("m_body_colour")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask", "Kidan")) //Species with body markings/tattoos.
if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos.
var/input = "Choose the colour of your your character's body markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["body"]) as color|null
if(new_markings)
m_colours["body"] = new_markings
if("m_style_tail")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
@@ -1560,7 +1594,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
m_styles["tail"] = new_marking_style
if("m_tail_colour")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
var/input = "Choose the colour of your your character's tail markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["tail"]) as color|null
if(new_markings)
@@ -1585,7 +1619,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
body_accessory = (new_body_accessory == "None") ? null : new_body_accessory
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have facial hair. (No HAS_HAIR_FACIAL flag)
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null
if(new_facial)
r_facial = color2R(new_facial)
@@ -1614,7 +1648,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
continue
if(gender == FEMALE && SA.gender == MALE)
continue
if(species == "Machine") //Species that can use prosthetic heads.
if(S.flags & ALL_RPARTS) //Species that can use prosthetic heads.
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
head_model = "Morpheus Cyberkinetics"
@@ -1690,17 +1724,26 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_eyes = color2B(new_eyes)
if("s_tone")
if(species == "Human" || species == "Drask")
if(S.bodyflags & HAS_SKIN_TONE)
var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null
if(new_s_tone)
s_tone = 35 - max(min(round(new_s_tone), 220), 1)
else if(species == "Vox")
var/skin_c = input(user, "Choose your Vox's skin color:\n(1 = Default Green, 2 = Dark Green, 3 = Brown, 4 = Grey, \n5 = Emerald, 6 = Azure)", "Character Preference") as num|null
if(skin_c)
s_tone = max(min(round(skin_c), 6), 1)
else if(S.bodyflags & HAS_ICON_SKIN_TONE)
var/const/MAX_LINE_ENTRIES = 4
var/prompt = "Choose your character's skin tone: 1-[S.icon_skin_tones.len]\n("
for(var/i = 1 to S.icon_skin_tones.len)
if(i > MAX_LINE_ENTRIES && !((i - 1) % MAX_LINE_ENTRIES))
prompt += "\n"
prompt += "[i] = [S.icon_skin_tones[i]]"
if(i != S.icon_skin_tones.len)
prompt += ", "
prompt += ")"
var/skin_c = input(user, prompt, "Character Preference") as num|null
if(isnum(skin_c))
s_tone = max(min(round(skin_c), S.icon_skin_tones.len), 1)
if("skin")
if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user))
if((S.bodyflags & HAS_SKIN_COLOR) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user))
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null
if(new_skin)
r_skin = color2R(new_skin)
@@ -1734,7 +1777,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("limbs")
var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand")
if(species == "Machine")
if(S.flags & ALL_RPARTS)
valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand")
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs
if(!limb_name) return
@@ -1770,19 +1813,19 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
second_limb = "r_hand"
if("Left Foot")
limb = "l_foot"
if(species != "Machine")
if(!(S.flags & ALL_RPARTS))
third_limb = "l_leg"
if("Right Foot")
limb = "r_foot"
if(species != "Machine")
if(!(S.flags & ALL_RPARTS))
third_limb = "r_leg"
if("Left Hand")
limb = "l_hand"
if(species != "Machine")
if(!(S.flags & ALL_RPARTS))
third_limb = "l_arm"
if("Right Hand")
limb = "r_hand"
if(species != "Machine")
if(!(S.flags & ALL_RPARTS))
third_limb = "r_arm"
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states
@@ -1838,7 +1881,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(subchoice)
choice = subchoice
if(limb in list("head", "chest", "groin"))
if(species != "Machine")
if(!(S.flags & ALL_RPARTS))
return
if(limb == "head")
ha_style = "None"
@@ -175,7 +175,8 @@
speciesprefs,
socks,
body_accessory,
gear
gear,
autohiss
FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' AND slot='[slot]'"})
if(!query.Execute())
var/err = query.ErrorMsg()
@@ -268,6 +269,7 @@
socks = query.item[63]
body_accessory = query.item[64]
gear = params2list(query.item[65])
autohiss_mode = text2num(query.item[66])
//Sanitize
var/datum/species/SP = all_species[species]
@@ -315,6 +317,7 @@
undershirt = sanitize_text(undershirt, initial(undershirt))
backbag = sanitize_text(backbag, initial(backbag))
b_type = sanitize_text(b_type, initial(b_type))
autohiss_mode = sanitize_integer(autohiss_mode, 0, 2, initial(autohiss_mode))
alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option))
job_support_high = sanitize_integer(job_support_high, 0, 65535, initial(job_support_high))
@@ -427,7 +430,8 @@
speciesprefs='[speciesprefs]',
socks='[socks]',
body_accessory='[body_accessory]',
gear='[gearlist]'
gear='[gearlist]',
autohiss='[autohiss_mode]'
WHERE ckey='[C.ckey]'
AND slot='[default_slot]'"}
)
@@ -467,7 +471,7 @@
gen_record,
player_alt_titles,
disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs,
socks, body_accessory, gear)
socks, body_accessory, gear, autohiss)
VALUES
('[C.ckey]', '[default_slot]', '[sanitizeSQL(metadata)]', '[sanitizeSQL(real_name)]', '[be_random_name]','[gender]',
@@ -497,7 +501,7 @@
'[sanitizeSQL(gen_record)]',
'[playertitlelist]',
'[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]',
'[socks]', '[body_accessory]', '[gearlist]')
'[socks]', '[body_accessory]', '[gearlist]', '[autohiss_mode]')
"}
)
+9 -21
View File
@@ -175,27 +175,15 @@
item_color = "noble_boot"
item_state = "noble_boot"
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/shoe_silencer))
silence_steps = 1
shoe_sound = null
user.unEquip(I)
qdel(I)
else . = ..()
/obj/item/shoe_silencer
name = "shoe rags"
desc = "Looks sneaky."
icon_state = "sheet-cloth"
/datum/crafting_recipe/shoe_rags
name = "Shoe Rags"
result = /obj/item/shoe_silencer
reqs = list(/obj/item/stack/tape_roll = 10)
tools = list(/obj/item/weapon/wirecutters)
time = 40
category = CAT_MISC
if(istype(I, /obj/item/stack/tape_roll))
var/obj/item/stack/tape_roll/TR = I
if((!silence_steps || shoe_sound) && TR.use(4))
silence_steps = 1
shoe_sound = null
to_chat(user, "You tape the soles of [src] to silence their footsteps.")
else
return ..()
/obj/item/clothing/shoes/sandal/white
name = "White Sandals"
@@ -255,4 +243,4 @@
name = "pink cowgirl boots"
desc = "For a Rustlin' tustlin' cowgirl."
icon_state = "cowboyboots_pink"
item_color = "cowboyboots_pink"
item_color = "cowboyboots_pink"
@@ -107,14 +107,14 @@
name = "plasmaman atmospheric suit"
icon_state = "plasmamanAtmos_suit"
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
name = "plasmaman atmospheric helmet"
icon_state = "plasmamanAtmos_helmet0"
base_state = "plasmamanAtmos_helmet"
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
/obj/item/clothing/suit/space/eva/plasmaman/engineer
name = "plasmaman engineer suit"
@@ -130,13 +130,14 @@
/obj/item/clothing/suit/space/eva/plasmaman/engineer/ce
name = "plasmaman chief engineer suit"
icon_state = "plasmaman_CE"
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer/ce
name = "plasmaman chief engineer helmet"
icon_state = "plasmaman_CE_helmet0"
base_state = "plasmaman_CE_helmet"
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
//SERVICE
@@ -384,6 +384,66 @@
icon_state = "stripedbluescarf"
item_color = "stripedbluescarf"
//Necklaces
/obj/item/clothing/accessory/necklace
name = "necklace"
desc = "A simple necklace."
icon_state = "necklace"
item_state = "necklace"
item_color = "necklace"
slot_flags = SLOT_MASK | SLOT_TIE
/obj/item/clothing/accessory/necklace/locket
name = "gold locket"
desc = "A gold locket that seems to have space for a photo within."
icon_state = "locket"
item_state = "locket"
item_color = "locket"
slot_flags = SLOT_MASK | SLOT_TIE
var/base_icon
var/open
var/obj/item/held //Item inside locket.
/obj/item/clothing/accessory/necklace/locket/Destroy()
QDEL_NULL(held)
return ..()
/obj/item/clothing/accessory/necklace/locket/attack_self(mob/user as mob)
if(!base_icon)
base_icon = icon_state
if(!("[base_icon]_open" in icon_states(icon)))
to_chat(user, "[src] doesn't seem to open.")
return
open = !open
to_chat(user, "You flip [src] [open?"open":"closed"].")
if(open)
icon_state = "[base_icon]_open"
if(held)
to_chat(user, "[held] falls out!")
held.forceMove(get_turf(user))
held = null
else
icon_state = "[base_icon]"
/obj/item/clothing/accessory/necklace/locket/attackby(var/obj/item/O as obj, mob/user as mob)
if(!open)
to_chat(user, "You have to open it first.")
return
if(istype(O,/obj/item/weapon/paper) || istype(O, /obj/item/weapon/photo) && !(istype(O, /obj/item/weapon/paper/talisman)))
if(held)
to_chat(usr, "[src] already has something inside it.")
else
to_chat(usr, "You slip [O] into [src].")
user.drop_item()
O.forceMove(src)
held = O
else
return ..()
//Cowboy Shirts
/obj/item/clothing/accessory/cowboyshirt
name = "black cowboy shirt"
@@ -119,6 +119,14 @@
item_color = "internalaffairs"
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/rank/ntrep/skirt
desc = "A silky smooth black and gold representative uniform with blue markings."
name = "representative skirt"
icon_state = "ntrepf"
item_state = "ntrepf"
item_color = "ntrepf"
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/rank/janitor
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
name = "janitor's jumpsuit"
@@ -182,6 +182,16 @@
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
flags_size = ONESIZEFITSALL
/obj/item/clothing/under/rank/security/brigphys/skirt
desc = "A skirted Brig Physician uniform. It has both security and medical protection."
name = "brig physician's jumpskirt"
icon_state = "brig_physf"
item_state = "brig_physf"
item_color = "brig_physf"
permeability_coefficient = 0.50
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
flags_size = ONESIZEFITSALL
//Pod Pilot
/obj/item/clothing/under/rank/security/pod_pilot
desc = "Suit for your regular pod pilot."
@@ -153,6 +153,14 @@
item_color = "ert_uniform"
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/under/rank/blueshield/skirt
name = "blueshield skirt"
desc = "A short, black and grey with blue markings skirted uniform. For the feminine Blueshield officers."
icon_state = "blueshieldf"
item_state = "blueshieldf"
item_color = "blueshieldf"
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/under/space
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
+12 -27
View File
@@ -453,14 +453,10 @@
sallet.put_on_delay = helm.put_on_delay
sallet.burn_state = helm.burn_state
sallet.flags_cover = helm.flags_cover
if(helm.up)
sallet.flags &= ~helm.visor_flags
sallet.flags_inv &= ~helm.visor_flags_inv
if(!BLOCKHAIR in sallet.flags)
sallet.visor_flags = helm.visor_flags
sallet.visor_flags_inv = helm.visor_flags_inv
if(!(BLOCKHAIR in sallet.flags))
sallet.flags |= BLOCKHAIR
for(var/flag in list(HIDEMASK, HIDEFACE, HIDEEYES, HIDEEARS)) //Check for and apply missing flags.
if(!(sallet.flags_inv & flag))
sallet.flags_inv |= flag
sallet.add_fingerprint(H)
target.transfer_fingerprints_to(sallet)
@@ -591,11 +587,8 @@
if(choice && choice != state && !user.incapacitated() && Adjacent(user))
var/list/new_state = options[choice]
var/list/old_state = options[state]
icon_state = new_state["icon_state"]
flags_inv &= ~(old_state["visor_flags"]|old_state["mask_flags"])
state = choice
flags_inv |= (new_state["visor_flags"]|new_state["mask_flags"])
to_chat(user, "You adjust the sallet.")
playsound(src.loc, "[toggle_sound]", 100, 0, 4)
user.update_inv_head()
@@ -982,21 +975,13 @@
icon_state = options[choice]
to_chat(user, "Your strange witch hat has now shapeshifted into it's [choice] form!")
return 1
/obj/item/weapon/reagent_containers/food/drinks/bottle/fluff/moonshine //nethiafins : Serhij Zozulia
name = "Cloudy Bottle"
desc = "The contents of this bottle are vile. You should only drink it when you hit rock bottom."
icon = 'icons/obj/custom_items.dmi'
icon_state = "questionable_liquid"
item_state = "questionable_liquid"
amount_per_transfer_from_this = 5
list_reagents = list("moonshine" = 100)
/obj/item/weapon/storage/box/fluff/moonshine_kit //nethiafins : Serhij Zozulia
name = "Moonshine Serving box"
/obj/item/weapon/storage/box/fluff/moonshine_kit/New()
..()
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src)
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/fluff/moonshine(src)
/obj/item/clothing/accessory/necklace/locket/fluff/fethasnecklace //Fethas: Sefra'neem
name = "Orange gemmed locket"
desc = "A locket with a orange gem set on the front, the picture inside seems to be of a Tajaran."
icon = 'icons/obj/custom_items.dmi'
icon_state = "fethasnecklace"
item_state = "fethasnecklace"
item_color = "fethasnecklace"
slot_flags = SLOT_MASK | SLOT_TIE
+33
View File
@@ -0,0 +1,33 @@
/hook/startup/proc/setup_title_screen()
var/list/provisional_title_screens = flist("config/title_screens/images/")
var/list/title_screens = list()
var/use_rare_screens = prob(1)
for(var/S in provisional_title_screens)
var/list/L = splittext(S,"+")
if(L.len == 1 && L[1] != "blank.png")
title_screens += S
else if(L.len > 1)
if(use_rare_screens && lowertext(L[1]) == "rare")
title_screens += S
else if(lowertext(L[1]) == lowertext(MAP_NAME))
title_screens += S
if(!isemptylist(title_screens))
if(length(title_screens) > 1)
for(var/S in title_screens)
var/list/L = splittext(S,".")
if(L.len != 2 || L[1] != "default")
continue
title_screens -= S
break
var/file_path = "config/title_screens/images/[pick(title_screens)]"
var/icon/icon = new(fcopy_rsc(file_path))
for(var/turf/unsimulated/wall/splashscreen/splash in world)
splash.icon = icon
return TRUE
return FALSE
@@ -216,7 +216,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
name = "Chateau De Baton Premium Cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
desc = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle"
list_reagents = list("cognac" = 100)
@@ -228,7 +228,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Extra-Strong Absinthe"
desc = "An strong alcoholic drink brewed and distributed by"
desc = "A strong alcoholic drink brewed and distributed by REDACTED."
icon_state = "absinthebottle"
list_reagents = list("absinthe" = 100)
@@ -123,7 +123,7 @@
return
if(!ishuman(victim) || issmall(victim))
to_chat(user, "<span class='danger'>This is not suitable for the [src]]!</span>")
to_chat(user, "<span class='danger'>This is not suitable for the [src]!</span>")
return
if(victim.abiotic(1))
@@ -133,7 +133,7 @@
user.visible_message("<span class='danger'>[user] starts to put [victim] into the [src]!</span>")
add_fingerprint(user)
if(do_after(user, 30, target = victim) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
user.visible_message("<span class='danger'>[user] stuffs [victim] into the [src]]!</span>")
user.visible_message("<span class='danger'>[user] stuffs [victim] into the [src]!</span>")
victim.forceMove(src)
occupant = victim
+5 -16
View File
@@ -1,29 +1,18 @@
#define AUTOHISS_OFF 0
#define AUTOHISS_BASIC 1
#define AUTOHISS_FULL 2
#define AUTOHISS_NUM 3
/mob/living/proc/handle_autohiss(message, datum/language/L)
return message // no autohiss at this level
/mob/living/carbon/human/handle_autohiss(message, datum/language/L)
if(!client || client.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off
if(!client || client.prefs.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off
return message
return species.handle_autohiss(message, L, client.autohiss_mode)
/client
var/autohiss_mode = AUTOHISS_OFF
return species.handle_autohiss(message, L, client.prefs.autohiss_mode)
/client/verb/toggle_autohiss()
set name = "Toggle Auto-Accent"
set desc = "Toggle automatic accents for your species"
set category = "OOC"
autohiss_mode = (autohiss_mode + 1) % AUTOHISS_NUM
switch(autohiss_mode)
prefs.autohiss_mode = (prefs.autohiss_mode + 1) % AUTOHISS_NUM
switch(prefs.autohiss_mode)
if(AUTOHISS_OFF)
to_chat(src, "Auto-hiss is now OFF.")
if(AUTOHISS_BASIC)
@@ -31,7 +20,7 @@
if(AUTOHISS_FULL)
to_chat(src, "Auto-hiss is now FULL.")
else
autohiss_mode = AUTOHISS_OFF
prefs.autohiss_mode = AUTOHISS_OFF
to_chat(src, "Auto-hiss is now OFF.")
/datum/species
@@ -66,6 +66,12 @@
else //Everyone else fails, skip the emote attempt
return
if("hiss", "hisses")
if(species.name == "Unathi") //Only Unathi can hiss.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("scream", "screams")
on_CD = handle_emote_CD(50) //longer cooldown
if("fart", "farts", "flip", "flips", "snap", "snaps")
@@ -141,6 +147,13 @@
playsound(loc, 'sound/effects/Kidanclack2.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("hiss", "hisses")
var/M = handle_emote_param(param)
message = "<B>[src]</B> hisses[M ? " at [M]" : ""]."
playsound(loc, 'sound/effects/unathihiss.ogg', 50, 0) //Credit to Jamius (freesound.org) for the sound.
m_type = 2
if("yes")
var/M = handle_emote_param(param)
@@ -899,7 +899,7 @@
oxy_mod = 0
death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..."
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | RADIMMUNE | ALL_RPARTS| NOTRANSSTING
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | RADIMMUNE | ALL_RPARTS | NOTRANSSTING
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY
dietflags = 0 //IPCs can't eat, so no diet
@@ -15,7 +15,9 @@
/obj/item/weapon/firelock_electronics,
/obj/item/weapon/intercom_electronics,
/obj/item/weapon/apc_electronics,
/obj/item/weapon/tracker_electronics,
/obj/item/weapon/stock_parts,
/obj/item/weapon/vending_refill,
/obj/item/mounted/frame/light_fixture,
/obj/item/mounted/frame/apc_frame,
/obj/item/mounted/frame/alarm_frame,
@@ -658,6 +658,20 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(CORONER)
clothes_s = new /icon(uniform_dmi, "medical_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
if(prob(1))
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "mortician"), ICON_OVERLAY)
else
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
if(GENETICIST)
clothes_s = new /icon(uniform_dmi, "geneticswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+1
View File
@@ -178,6 +178,7 @@ nanoui is used to open and update nano browser uis
var/name = "[src_object]"
var/list/config_data = list(
"title" = title,
"map" = MAP_NAME,
"srcObject" = list("name" = name),
"stateKey" = state_key,
"status" = status,
@@ -70,3 +70,16 @@
/obj/item/weapon/gun/energy/pulse/pistol/m1911/isHandgun()
return 1
/obj/item/weapon/gun/energy/pulse/turret
name = "pulse turret gun"
desc = "A heavy, turret-mounted pulse energy cannon."
icon_state = "turretlaser"
item_state = "turretlaser"
slot_flags = null
w_class = 5
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser/pulse)
weapon_weight = WEAPON_MEDIUM
can_flashlight = 0
trigger_guard = TRIGGER_GUARD_NONE
ammo_x_offset = 2
@@ -145,6 +145,8 @@
name = "rubber pellet"
damage = 3
stamina = 25
embed = 0
sharp = 0
icon_state = "bullet-r"
/obj/item/projectile/bullet/stunshot//taser slugs for shotguns, nothing special
@@ -201,11 +203,14 @@
stun = 4
/obj/item/projectile/bullet/honker
name = "banana"
damage = 0
weaken = 5
stun = 5
forcedodge = 1
nodamage = 1
embed = 0
sharp = 0
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
hitsound = 'sound/items/bikehorn.ogg'
icon = 'icons/obj/hydroponics/harvest.dmi'
@@ -819,10 +819,11 @@
drink_desc = "A drink that is guaranteed to knock you silly."
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/M)
M.Weaken(3)
if(current_cycle >=55)
if(current_cycle >= 13)
M.Weaken(3)
if(current_cycle >= 55)
M.Druggy(55)
if(current_cycle >=200)
if(current_cycle >= 200)
M.adjustToxLoss(2)
..()
@@ -883,7 +883,7 @@
category = list("Exosuit Equipment")
/datum/design/mech_laser
name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)"
name = "Exosuit Weapon (CH-PL \"Firedart\" Laser)"
desc = "Allows for the construction of CH-PS Laser."
id = "mech_laser"
build_type = MECHFAB
@@ -893,6 +893,17 @@
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_disabler
name = "Exosuit Weapon (CH-PD Disabler)"
desc = "Allows for the construction of CH-PD Disabler."
id = "mech_laser"
build_type = MECHFAB
req_tech = list("combat" = 3, "magnets" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler
materials = list(MAT_METAL=10000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_carbine
name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)"
desc = "Allows for the construction of FNX-99 \"Hades\" Carbine."
@@ -959,6 +970,28 @@
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_tesla
name = "Exosuit Weapon (P-X Tesla Cannon)"
desc = "Allows for the construction of P-X Tesla Cannon."
id = "mech_tesla"
build_type = MECHFAB
req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla
materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000)
construction_time = 100
category = list("Exosuit Equipment")
/datum/design/mech_immolator
name = "Exosuit Weapon (ZFI Immolation Beam Gun)"
desc = "Allows for the construction of ZFI Immolation Beam Gun."
id = "mech_tesla"
build_type = MECHFAB
req_tech = list("combat" = 4, "materials" = 4, "plasmatech" = 2, "magnets" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator
materials = list(MAT_METAL = 4000, MAT_GLASS = 1000, MAT_SILVER = 3000, MAT_PLASMA = 2000)
construction_time = 100
category = list("Exosuit Equipment")
//Cyborg Upgrade Modules
/datum/design/borg_upgrade_reset
+4
View File
@@ -262,6 +262,10 @@
mode = SHUTTLE_ESCAPE
timer = world.time
priority_announcement.Announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.")
for(var/mob/M in player_list)
if(!isnewplayer(M) && !M.client.karma_spent && !M.get_preference(DISABLE_KARMA_REMINDER))
to_chat(M, "<i>You have not yet spent your karma for the round; was there a player worthy of receiving your reward? Look under OOC tab, Award Karma.</i>")
if(SHUTTLE_ESCAPE)
if(time_left <= 0)
//move each escape pod to its corresponding escape dock