Merge branch 'master' into Cargo_rebalance
This commit is contained in:
@@ -423,6 +423,25 @@
|
||||
if(GLOB.master_mode == "secret")
|
||||
dat += "<A href='?src=[REF(src)];[HrefToken()];f_secret=1'>(Force Secret Mode)</A><br>"
|
||||
|
||||
if(GLOB.master_mode == "dynamic")
|
||||
if(SSticker.current_state <= GAME_STATE_PREGAME)
|
||||
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart=1'>(Force Roundstart Rulesets)</A><br>"
|
||||
if (GLOB.dynamic_forced_roundstart_ruleset.len > 0)
|
||||
for(var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset)
|
||||
dat += {"<A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_remove=\ref[rule]'>-> [rule.name] <-</A><br>"}
|
||||
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_clear=1'>(Clear Rulesets)</A><br>"
|
||||
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_options=1'>(Dynamic mode options)</A><br>"
|
||||
else if (SSticker.IsRoundInProgress())
|
||||
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_latejoin=1'>(Force Next Latejoin Ruleset)</A><br>"
|
||||
if (SSticker && SSticker.mode && istype(SSticker.mode,/datum/game_mode/dynamic))
|
||||
var/datum/game_mode/dynamic/mode = SSticker.mode
|
||||
if (mode.forced_latejoin_rule)
|
||||
dat += {"<A href='?src=[REF(src)];[HrefToken()];f_dynamic_latejoin_clear=1'>-> [mode.forced_latejoin_rule.name] <-</A><br>"}
|
||||
dat += "<A href='?src=[REF(src)];[HrefToken()];f_dynamic_midround=1'>(Execute Midround Ruleset!)</A><br>"
|
||||
dat += "<hr/>"
|
||||
if(SSticker.IsRoundInProgress())
|
||||
dat += "<a href='?src=[REF(src)];[HrefToken()];gamemode_panel=1'>(Game Mode Panel)</a><BR>"
|
||||
|
||||
dat += {"
|
||||
<BR>
|
||||
<A href='?src=[REF(src)];[HrefToken()];create_object=1'>Create Object</A><br>
|
||||
@@ -839,6 +858,44 @@
|
||||
browser.set_content(dat.Join())
|
||||
browser.open()
|
||||
|
||||
/datum/admins/proc/dynamic_mode_options(mob/user)
|
||||
var/dat = {"
|
||||
<center><B><h2>Dynamic Mode Options</h2></B></center><hr>
|
||||
<br/>
|
||||
<h3>Common options</h3>
|
||||
<i>All these options can be changed midround.</i> <br/>
|
||||
<br/>
|
||||
<b>Force extended:</b> - Option is <a href='?src=[REF(src)];[HrefToken()];f_dynamic_force_extended=1'> <b>[GLOB.dynamic_forced_extended ? "ON" : "OFF"]</a></b>.
|
||||
<br/>This will force the round to be extended. No rulesets will be drafted. <br/>
|
||||
<br/>
|
||||
<b>No stacking:</b> - Option is <a href='?src=[REF(src)];[HrefToken()];f_dynamic_no_stacking=1'> <b>[GLOB.dynamic_no_stacking ? "ON" : "OFF"]</b></a>.
|
||||
<br/>Unless the threat goes above [GLOB.dynamic_stacking_limit], only one "round-ender" ruleset will be drafted. <br/>
|
||||
<br/>
|
||||
<b>Classic secret mode:</b> - Option is <a href='?src=[REF(src)];[HrefToken()];f_dynamic_classic_secret=1'> <b>[GLOB.dynamic_classic_secret ? "ON" : "OFF"]</b></a>.
|
||||
<br/>Only one roundstart ruleset will be drafted. Only traitors and minor roles will latespawn. <br/>
|
||||
<br/>
|
||||
<br/>
|
||||
<b>Forced threat level:</b> Current value : <a href='?src=[REF(src)];[HrefToken()];f_dynamic_forced_threat=1'><b>[GLOB.dynamic_forced_threat_level]</b></a>.
|
||||
<br/>The value threat is set to if it is higher than -1.<br/>
|
||||
<br/>
|
||||
<b>High population limit:</b> Current value : <a href='?src=[REF(src)];[HrefToken()];f_dynamic_high_pop_limit=1'><b>[GLOB.dynamic_high_pop_limit]</b></a>.
|
||||
<br/>The threshold at which "high population override" will be in effect. <br/>
|
||||
<br/>
|
||||
<b>Stacking threeshold:</b> Current value : <a href='?src=[REF(src)];[HrefToken()];f_dynamic_stacking_limit=1'><b>[GLOB.dynamic_stacking_limit]</b></a>.
|
||||
<br/>The threshold at which "round-ender" rulesets will stack. A value higher than 100 ensure this never happens. <br/>
|
||||
<h3>Advanced parameters</h3>
|
||||
Curve centre: <A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_centre=1'>-> [GLOB.dynamic_curve_centre] <-</A><br>
|
||||
Curve width: <A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_width=1'>-> [GLOB.dynamic_curve_width] <-</A><br>
|
||||
Latejoin injection delay:<br>
|
||||
Minimum: <A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_latejoin_min=1'>-> [GLOB.dynamic_latejoin_delay_min / 60 / 10] <-</A> Minutes<br>
|
||||
Maximum: <A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_latejoin_max=1'>-> [GLOB.dynamic_latejoin_delay_max / 60 / 10] <-</A> Minutes<br>
|
||||
Midround injection delay:<br>
|
||||
Minimum: <A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_midround_min=1'>-> [GLOB.dynamic_midround_delay_min / 60 / 10] <-</A> Minutes<br>
|
||||
Maximum: <A href='?src=[REF(src)];[HrefToken()];f_dynamic_roundstart_midround_max=1'>-> [GLOB.dynamic_midround_delay_max / 60 / 10] <-</A> Minutes<br>
|
||||
"}
|
||||
|
||||
user << browse(dat, "window=dyn_mode_options;size=900x650")
|
||||
|
||||
/datum/admins/proc/create_or_modify_area()
|
||||
set category = "Debug"
|
||||
set name = "Create or modify area"
|
||||
|
||||
@@ -169,6 +169,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
|
||||
/client/proc/cmd_display_overlay_log,
|
||||
/client/proc/reload_configuration,
|
||||
/datum/admins/proc/create_or_modify_area,
|
||||
/client/proc/generate_wikichem_list //DO NOT PRESS UNLESS YOU WANT SUPERLAG
|
||||
)
|
||||
GLOBAL_PROTECT(admin_verbs_possess)
|
||||
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
H.dna.features["frills"] = pick(GLOB.frills_list)
|
||||
H.dna.features["spines"] = pick(GLOB.spines_list)
|
||||
H.dna.features["body_markings"] = pick(GLOB.body_markings_list)
|
||||
H.dna.features["moth_wings"] = pick(GLOB.moth_wings_list)
|
||||
H.dna.features["insect_wings"] = pick(GLOB.insect_wings_list)
|
||||
H.dna.features["insect_fluff"] = pick(GLOB.insect_fluffs_list)
|
||||
|
||||
H.update_body()
|
||||
H.update_hair()
|
||||
|
||||
@@ -458,7 +458,7 @@
|
||||
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Braindamage"))
|
||||
for(var/mob/living/carbon/human/H in GLOB.player_list)
|
||||
to_chat(H, "<span class='boldannounce'>You suddenly feel stupid.</span>")
|
||||
H.adjustBrainLoss(60, 80)
|
||||
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60, 80)
|
||||
message_admins("[key_name_admin(usr)] made everybody retarded")
|
||||
|
||||
if("eagles")//SCRAW
|
||||
|
||||
+291
-1
@@ -291,6 +291,11 @@
|
||||
else if(href_list["editrights"])
|
||||
edit_rights_topic(href_list)
|
||||
|
||||
else if(href_list["gamemode_panel"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
SSticker.mode.admin_panel()
|
||||
|
||||
else if(href_list["call_shuttle"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -1342,6 +1347,291 @@
|
||||
|
||||
else if(href_list["f_secret"])
|
||||
return HandleFSecret()
|
||||
|
||||
else if(href_list["f_dynamic_roundstart"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode.", null, null, null, null)
|
||||
var/roundstart_rules = list()
|
||||
for (var/rule in subtypesof(/datum/dynamic_ruleset/roundstart))
|
||||
var/datum/dynamic_ruleset/roundstart/newrule = new rule()
|
||||
roundstart_rules[newrule.name] = newrule
|
||||
var/added_rule = input(usr,"What ruleset do you want to force? This will bypass threat level and population restrictions.", "Rigging Roundstart", null) as null|anything in roundstart_rules
|
||||
if (added_rule)
|
||||
GLOB.dynamic_forced_roundstart_ruleset += roundstart_rules[added_rule]
|
||||
log_admin("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.")
|
||||
message_admins("[key_name(usr)] set [added_rule] to be a forced roundstart ruleset.", 1)
|
||||
Game()
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_clear"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
GLOB.dynamic_forced_roundstart_ruleset = list()
|
||||
Game()
|
||||
log_admin("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.")
|
||||
message_admins("[key_name(usr)] cleared the rigged roundstart rulesets. The mode will pick them as normal.", 1)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_remove"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
var/datum/dynamic_ruleset/roundstart/rule = locate(href_list["f_dynamic_roundstart_remove"])
|
||||
GLOB.dynamic_forced_roundstart_ruleset -= rule
|
||||
Game()
|
||||
log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.")
|
||||
message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1)
|
||||
|
||||
else if(href_list["f_dynamic_latejoin"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(!SSticker || !SSticker.mode)
|
||||
return alert(usr, "The game must start first.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
var/latejoin_rules = list()
|
||||
for (var/rule in subtypesof(/datum/dynamic_ruleset/latejoin))
|
||||
var/datum/dynamic_ruleset/latejoin/newrule = new rule()
|
||||
latejoin_rules[newrule.name] = newrule
|
||||
var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in latejoin_rules
|
||||
if (added_rule)
|
||||
var/datum/game_mode/dynamic/mode = SSticker.mode
|
||||
mode.forced_latejoin_rule = latejoin_rules[added_rule]
|
||||
log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.")
|
||||
message_admins("[key_name(usr)] set [added_rule] to proc on the next latejoin.", 1)
|
||||
Game()
|
||||
|
||||
else if(href_list["f_dynamic_latejoin_clear"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if (SSticker && SSticker.mode && istype(SSticker.mode,/datum/game_mode/dynamic))
|
||||
var/datum/game_mode/dynamic/mode = SSticker.mode
|
||||
mode.forced_latejoin_rule = null
|
||||
Game()
|
||||
log_admin("[key_name(usr)] cleared the forced latejoin ruleset.")
|
||||
message_admins("[key_name(usr)] cleared the forced latejoin ruleset.", 1)
|
||||
|
||||
else if(href_list["f_dynamic_midround"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(!SSticker || !SSticker.mode)
|
||||
return alert(usr, "The game must start first.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
var/midround_rules = list()
|
||||
for (var/rule in subtypesof(/datum/dynamic_ruleset/midround))
|
||||
var/datum/dynamic_ruleset/midround/newrule = new rule()
|
||||
midround_rules[newrule.name] = rule
|
||||
var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in midround_rules
|
||||
if (added_rule)
|
||||
var/datum/game_mode/dynamic/mode = SSticker.mode
|
||||
log_admin("[key_name(usr)] executed the [added_rule] ruleset.")
|
||||
message_admins("[key_name(usr)] executed the [added_rule] ruleset.", 1)
|
||||
mode.picking_specific_rule(midround_rules[added_rule],1)
|
||||
|
||||
else if (href_list["f_dynamic_options"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_centre"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
var/new_centre = input(usr,"Change the centre of the dynamic mode threat curve. A negative value will give a more peaceful round ; a positive value, a round with higher threat. Any number between -5 and +5 is allowed.", "Change curve centre", null) as num
|
||||
if (new_centre < -5 || new_centre > 5)
|
||||
return alert(usr, "Only values between -5 and +5 are allowed.", null, null, null, null)
|
||||
|
||||
log_admin("[key_name(usr)] changed the distribution curve center to [new_centre].")
|
||||
message_admins("[key_name(usr)] changed the distribution curve center to [new_centre]", 1)
|
||||
GLOB.dynamic_curve_centre = new_centre
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_width"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
var/new_width = input(usr,"Change the width of the dynamic mode threat curve. A higher value will favour extreme rounds ; a lower value, a round closer to the average. Any Number between 0.5 and 4 are allowed.", "Change curve width", null) as num
|
||||
if (new_width < 0.5 || new_width > 4)
|
||||
return alert(usr, "Only values between 0.5 and +2.5 are allowed.", null, null, null, null)
|
||||
|
||||
log_admin("[key_name(usr)] changed the distribution curve width to [new_width].")
|
||||
message_admins("[key_name(usr)] changed the distribution curve width to [new_width]", 1)
|
||||
GLOB.dynamic_curve_width = new_width
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_latejoin_min"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
var/new_min = input(usr,"Change the minimum delay of latejoin injection in minutes.", "Change latejoin injection delay minimum", null) as num
|
||||
if(new_min <= 0)
|
||||
return alert(usr, "The minimum can't be zero or lower.", null, null, null, null)
|
||||
if((new_min MINUTES) > GLOB.dynamic_latejoin_delay_max)
|
||||
return alert(usr, "The minimum must be lower than the maximum.", null, null, null, null)
|
||||
|
||||
log_admin("[key_name(usr)] changed the latejoin injection minimum delay to [new_min] minutes.")
|
||||
message_admins("[key_name(usr)] changed the latejoin injection minimum delay to [new_min] minutes", 1)
|
||||
GLOB.dynamic_latejoin_delay_min = (new_min MINUTES)
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_latejoin_max"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
var/new_max = input(usr,"Change the maximum delay of latejoin injection in minutes.", "Change latejoin injection delay maximum", null) as num
|
||||
if(new_max <= 0)
|
||||
return alert(usr, "The maximum can't be zero or lower.", null, null, null, null)
|
||||
if((new_max MINUTES) < GLOB.dynamic_latejoin_delay_min)
|
||||
return alert(usr, "The maximum must be higher than the minimum.", null, null, null, null)
|
||||
|
||||
log_admin("[key_name(usr)] changed the latejoin injection maximum delay to [new_max] minutes.")
|
||||
message_admins("[key_name(usr)] changed the latejoin injection maximum delay to [new_max] minutes", 1)
|
||||
GLOB.dynamic_latejoin_delay_max = (new_max MINUTES)
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_midround_min"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
var/new_min = input(usr,"Change the minimum delay of midround injection in minutes.", "Change midround injection delay minimum", null) as num
|
||||
if(new_min <= 0)
|
||||
return alert(usr, "The minimum can't be zero or lower.", null, null, null, null)
|
||||
if((new_min MINUTES) > GLOB.dynamic_midround_delay_max)
|
||||
return alert(usr, "The minimum must be lower than the maximum.", null, null, null, null)
|
||||
|
||||
log_admin("[key_name(usr)] changed the midround injection minimum delay to [new_min] minutes.")
|
||||
message_admins("[key_name(usr)] changed the midround injection minimum delay to [new_min] minutes", 1)
|
||||
GLOB.dynamic_midround_delay_min = (new_min MINUTES)
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_roundstart_midround_max"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
var/new_max = input(usr,"Change the maximum delay of midround injection in minutes.", "Change midround injection delay maximum", null) as num
|
||||
if(new_max <= 0)
|
||||
return alert(usr, "The maximum can't be zero or lower.", null, null, null, null)
|
||||
if((new_max MINUTES) > GLOB.dynamic_midround_delay_max)
|
||||
return alert(usr, "The maximum must be higher than the minimum.", null, null, null, null)
|
||||
|
||||
log_admin("[key_name(usr)] changed the midround injection maximum delay to [new_max] minutes.")
|
||||
message_admins("[key_name(usr)] changed the midround injection maximum delay to [new_max] minutes", 1)
|
||||
GLOB.dynamic_midround_delay_max = (new_max MINUTES)
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_force_extended"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended
|
||||
log_admin("[key_name(usr)] set 'forced_extended' to [GLOB.dynamic_forced_extended].")
|
||||
message_admins("[key_name(usr)] set 'forced_extended' to [GLOB.dynamic_forced_extended].")
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_no_stacking"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking
|
||||
log_admin("[key_name(usr)] set 'no_stacking' to [GLOB.dynamic_no_stacking].")
|
||||
message_admins("[key_name(usr)] set 'no_stacking' to [GLOB.dynamic_no_stacking].")
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_classic_secret"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
GLOB.dynamic_classic_secret = !GLOB.dynamic_classic_secret
|
||||
log_admin("[key_name(usr)] set 'classic_secret' to [GLOB.dynamic_classic_secret].")
|
||||
message_admins("[key_name(usr)] set 'classic_secret' to [GLOB.dynamic_classic_secret].")
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_stacking_limit"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
|
||||
log_admin("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].")
|
||||
message_admins("[key_name(usr)] set 'stacking_limit' to [GLOB.dynamic_stacking_limit].")
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_high_pop_limit"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
var/new_value = input(usr, "Enter the high-pop override threshold for dynamic mode.", "High pop override") as num
|
||||
if (new_value < 0)
|
||||
return alert(usr, "Only positive values allowed!", null, null, null, null)
|
||||
GLOB.dynamic_high_pop_limit = new_value
|
||||
|
||||
log_admin("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].")
|
||||
message_admins("[key_name(usr)] set 'high_pop_limit' to [GLOB.dynamic_high_pop_limit].")
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["f_dynamic_forced_threat"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(SSticker && SSticker.mode)
|
||||
return alert(usr, "The game has already started.", null, null, null, null)
|
||||
|
||||
if(GLOB.master_mode != "dynamic")
|
||||
return alert(usr, "The game mode has to be dynamic mode!", null, null, null, null)
|
||||
|
||||
var/new_value = input(usr, "Enter the forced threat level for dynamic mode.", "Forced threat level") as num
|
||||
if (new_value > 100)
|
||||
return alert(usr, "The value must be be under 100.", null, null, null, null)
|
||||
GLOB.dynamic_forced_threat_level = new_value
|
||||
|
||||
log_admin("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].")
|
||||
message_admins("[key_name(usr)] set 'forced_threat_level' to [GLOB.dynamic_forced_threat_level].")
|
||||
dynamic_mode_options(usr)
|
||||
|
||||
else if(href_list["c_mode2"])
|
||||
if(!check_rights(R_ADMIN|R_SERVER))
|
||||
@@ -1752,7 +2042,7 @@
|
||||
if(DEAD)
|
||||
status = "<font color='red'><b>Dead</b></font>"
|
||||
health_description = "Status = [status]"
|
||||
health_description += "<BR>Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()] - Stamina: [L.getStaminaLoss()]"
|
||||
health_description += "<BR>Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getOrganLoss(ORGAN_SLOT_BRAIN)] - Stamina: [L.getStaminaLoss()]"
|
||||
else
|
||||
health_description = "This mob type has no health to speak of."
|
||||
|
||||
|
||||
@@ -1264,7 +1264,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
target.electrocution_animation(40)
|
||||
to_chat(target, "<span class='userdanger'>The gods have punished you for your sins!</span>")
|
||||
if(ADMIN_PUNISHMENT_BRAINDAMAGE)
|
||||
target.adjustBrainLoss(199, 199)
|
||||
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 199, 199)
|
||||
if(ADMIN_PUNISHMENT_GIB)
|
||||
target.gib(FALSE)
|
||||
if(ADMIN_PUNISHMENT_BSA)
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
/datum/antagonist/abductor/greet()
|
||||
to_chat(owner.current, "<span class='notice'>You are the [owner.special_role]!</span>")
|
||||
to_chat(owner.current, "<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>")
|
||||
to_chat(owner.current, "<span class='notice'>Try not to disturb the habitat, it could lead to dead specimens.</span>")
|
||||
to_chat(owner.current, "<span class='notice'>[greet_text]</span>")
|
||||
owner.announce_objectives()
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/surgery/organ_extraction
|
||||
name = "experimental dissection"
|
||||
name = "experimental organ replacement"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert)
|
||||
possible_locs = list(BODY_ZONE_CHEST)
|
||||
ignore_clothes = 1
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
if(2)
|
||||
to_chat(H, "<span class='warning'>You hear an annoying buzz in your head.</span>")
|
||||
H.confused += 15
|
||||
H.adjustBrainLoss(10, 160)
|
||||
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
|
||||
if(3)
|
||||
H.hallucination += 60
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
/obj/item/organ/heart/gland/pop/activate()
|
||||
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
|
||||
randomize_human(owner)
|
||||
var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly))
|
||||
var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/insect, /datum/species/fly))
|
||||
owner.set_species(species)
|
||||
|
||||
/obj/item/organ/heart/gland/ventcrawling
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
if(istype(C))
|
||||
var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B && (B.decoy_override != initial(B.decoy_override)))
|
||||
B.vital = TRUE
|
||||
B.organ_flags |= ORGAN_VITAL
|
||||
B.decoy_override = FALSE
|
||||
remove_changeling_powers()
|
||||
. = ..()
|
||||
@@ -340,7 +340,7 @@
|
||||
if(istype(C))
|
||||
var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
B.vital = FALSE
|
||||
B.organ_flags &= ~ORGAN_VITAL
|
||||
B.decoy_override = TRUE
|
||||
update_changeling_icons_added()
|
||||
return
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
B = new C.dna.species.mutant_brain()
|
||||
else
|
||||
B = new()
|
||||
B.vital = FALSE
|
||||
B.organ_flags &= ~ORGAN_VITAL
|
||||
B.decoy_override = TRUE
|
||||
B.Insert(C)
|
||||
if(ishuman(user))
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
while(active)
|
||||
ADD_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
|
||||
@@ -41,6 +42,7 @@
|
||||
to_chat(user, "<span class='notice'>Our muscles relax without the energy to strengthen them.</span>")
|
||||
user.Knockdown(40)
|
||||
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
break
|
||||
|
||||
stacks++
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
to_chat(user, "<span class='userdanger'>The helmet tries to drive a spike through your head as you scramble to remove it!</span>")
|
||||
user.emote("scream")
|
||||
user.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
|
||||
user.adjustBrainLoss(30)
|
||||
user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30)
|
||||
addtimer(CALLBACK(user, /mob/living.proc/dropItemToGround, src, TRUE), 1) //equipped happens before putting stuff on(but not before picking items up), 1). thus, we need to wait for it to be on before forcing it off.
|
||||
|
||||
/obj/item/clothing/head/helmet/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
|
||||
|
||||
+3
-3
@@ -132,9 +132,9 @@
|
||||
continue
|
||||
if(isliving(M.current) && M.current.stat != DEAD)
|
||||
var/turf/t_turf = isAI(M.current) ? get_step(get_step(src, NORTH),NORTH) : get_turf(src) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark.
|
||||
do_teleport(M, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)
|
||||
M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
M.current.clear_fullscreen("flash", 5)
|
||||
do_teleport(M.current, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)
|
||||
M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
M.current.clear_fullscreen("flash", 5)
|
||||
playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, FALSE)
|
||||
recalls_remaining--
|
||||
recalling = FALSE
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
desc = "Prepare blood magic by carving runes into your flesh. This rite is most effective with an <b>empowering rune</b>"
|
||||
var/list/spells = list()
|
||||
var/channeling = FALSE
|
||||
var/holy_dispel = FALSE
|
||||
|
||||
/datum/action/innate/cult/blood_magic/Grant()
|
||||
..()
|
||||
@@ -33,6 +34,9 @@
|
||||
B.button.moved = B.button.screen_loc
|
||||
|
||||
/datum/action/innate/cult/blood_magic/Activate()
|
||||
if(holy_dispel)
|
||||
to_chat(owner, "<span class='cultbold'>Holy water currently scours your body, nullifying the power of the rites!</span>")
|
||||
return
|
||||
var/rune = FALSE
|
||||
var/limit = RUNELESS_MAX_BLOODCHARGE
|
||||
for(var/obj/effect/rune/empower/R in range(1, owner))
|
||||
@@ -64,7 +68,7 @@
|
||||
qdel(nullify_spell)
|
||||
return
|
||||
BS = possible_spells[entered_spell_name]
|
||||
if(QDELETED(src) || owner.incapacitated() || !BS || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (spells.len >= limit))
|
||||
if(QDELETED(src) || owner.incapacitated() || !BS || holy_dispel || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (spells.len >= limit))
|
||||
return
|
||||
to_chat(owner,"<span class='warning'>You begin to carve unnatural symbols into your flesh!</span>")
|
||||
SEND_SOUND(owner, sound('sound/weapons/slice.ogg',0,1,10))
|
||||
@@ -73,7 +77,7 @@
|
||||
else
|
||||
to_chat(owner, "<span class='cultitalic'>You are already invoking blood magic!")
|
||||
return
|
||||
if(do_after(owner, 100 - rune*60, target = owner))
|
||||
if(do_after(owner, 100 - rune*60, target = owner) && !holy_dispel)
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.bleed(40 - rune*32)
|
||||
@@ -644,6 +648,11 @@
|
||||
desc = "A spell that will absorb blood from anything you touch.<br>Touching cultists and constructs can heal them.<br><b>Clicking the hand will potentially let you focus the spell into something stronger.</b>"
|
||||
color = "#7D1717"
|
||||
|
||||
/obj/item/melee/blood_magic/manipulator/examine(mob/user)
|
||||
. = ..()
|
||||
if(iscultist(user))
|
||||
to_chat(user, "<span class='cultitalic'>The [name] currently has <b>[uses]</b> blood charges left.</span>")
|
||||
|
||||
/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity)
|
||||
if(proximity)
|
||||
if(ishuman(target))
|
||||
@@ -678,9 +687,9 @@
|
||||
if(ratio>1)
|
||||
ratio = 1
|
||||
uses -= round(overall_damage)
|
||||
H.visible_message("<span class='warning'>[H] is fully healed by [H==user ? "[H.p_their()]":"[H]'s"]'s blood magic!</span>")
|
||||
H.visible_message("<span class='warning'>[H] is fully healed by [H==user ? "[H.p_their()]":"[user]'s"] blood magic!</span>")
|
||||
else
|
||||
H.visible_message("<span class='warning'>[H] is partially healed by [H==user ? "[H.p_their()]":"[H]'s"] blood magic.</span>")
|
||||
H.visible_message("<span class='warning'>[H] is partially healed by [H==user ? "[H.p_their()]":"[user]'s"] blood magic.</span>")
|
||||
uses = 0
|
||||
ratio *= -1
|
||||
H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
|
||||
@@ -762,7 +771,7 @@
|
||||
switch(choice)
|
||||
if("Blood Spear (150)")
|
||||
if(uses < 150)
|
||||
to_chat(user, "<span class='cultitalic'>You need 200 charges to perform this rite.</span>")
|
||||
to_chat(user, "<span class='cultitalic'>You need 150 charges to perform this rite.</span>")
|
||||
else
|
||||
uses -= 150
|
||||
var/turf/T = get_turf(user)
|
||||
@@ -778,7 +787,7 @@
|
||||
"<span class='cultitalic'>A [rite.name] materializes at your feet.</span>")
|
||||
if("Blood Bolt Barrage (300)")
|
||||
if(uses < 300)
|
||||
to_chat(user, "<span class='cultitalic'>You need 400 charges to perform this rite.</span>")
|
||||
to_chat(user, "<span class='cultitalic'>You need 300 charges to perform this rite.</span>")
|
||||
else
|
||||
var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood()
|
||||
uses -= 300
|
||||
@@ -790,7 +799,7 @@
|
||||
qdel(rite)
|
||||
if("Blood Beam (500)")
|
||||
if(uses < 500)
|
||||
to_chat(user, "<span class='cultitalic'>You need 600 charges to perform this rite.</span>")
|
||||
to_chat(user, "<span class='cultitalic'>You need 500 charges to perform this rite.</span>")
|
||||
else
|
||||
var/obj/rite = new /obj/item/blood_beam()
|
||||
uses -= 500
|
||||
|
||||
@@ -666,6 +666,7 @@
|
||||
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
|
||||
slot_flags = 0
|
||||
force = 17
|
||||
force_unwielded = 17
|
||||
force_wielded = 24
|
||||
throwforce = 40
|
||||
throw_speed = 2
|
||||
|
||||
@@ -73,6 +73,10 @@
|
||||
animate(src, color = previouscolor, time = 8)
|
||||
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
|
||||
|
||||
/obj/structure/destructible/cult/proc/check_menu(mob/living/user)
|
||||
if(!user || user.incapacitated() || !iscultist(user) || !anchored || cooldowntime > world.time)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/destructible/cult/talisman
|
||||
name = "altar"
|
||||
@@ -80,9 +84,18 @@
|
||||
icon_state = "talismanaltar"
|
||||
break_message = "<span class='warning'>The altar shatters, leaving only the wailing of the damned!</span>"
|
||||
|
||||
/obj/structure/destructible/cult/talisman/attack_hand(mob/living/user)
|
||||
var/static/image/radial_whetstone = image(icon = 'icons/obj/kitchen.dmi', icon_state = "cult_sharpener")
|
||||
var/static/image/radial_shell = image(icon = 'icons/obj/wizard.dmi', icon_state = "construct-cult")
|
||||
var/static/image/radial_unholy_water = image(icon = 'icons/obj/drinks.dmi', icon_state = "holyflask")
|
||||
|
||||
/obj/structure/destructible/cult/talisman/Initialize()
|
||||
. = ..()
|
||||
if(.)
|
||||
radial_unholy_water.color = "#333333"
|
||||
|
||||
/obj/structure/destructible/cult/talisman/ui_interact(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(!user.canUseTopic(src, TRUE))
|
||||
return
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "<span class='warning'>You're pretty sure you know exactly what this is used for and you can't seem to touch it.</span>")
|
||||
@@ -91,22 +104,27 @@
|
||||
to_chat(user, "<span class='cultitalic'>You need to anchor [src] to the floor with your dagger first.</span>")
|
||||
return
|
||||
if(cooldowntime > world.time)
|
||||
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
|
||||
to_chat(user, "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
|
||||
return
|
||||
var/choice = alert(user,"You study the schematics etched into the altar...",,"Eldritch Whetstone","Construct Shell","Flask of Unholy Water")
|
||||
var/list/pickedtype = list()
|
||||
|
||||
to_chat(user, "<span class='cultitalic'>You study the schematics etched into the altar...</span>")
|
||||
|
||||
var/list/options = list("Eldritch Whetstone" = radial_whetstone, "Construct Shell" = radial_shell, "Flask of Unholy Water" = radial_unholy_water)
|
||||
var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
|
||||
var/reward
|
||||
switch(choice)
|
||||
if("Eldritch Whetstone")
|
||||
pickedtype += /obj/item/sharpener/cult
|
||||
reward = /obj/item/sharpener/cult
|
||||
if("Construct Shell")
|
||||
pickedtype += /obj/structure/constructshell
|
||||
reward = /obj/structure/constructshell
|
||||
if("Flask of Unholy Water")
|
||||
pickedtype += /obj/item/reagent_containers/glass/beaker/unholywater
|
||||
if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
|
||||
reward = /obj/item/reagent_containers/glass/beaker/unholywater
|
||||
|
||||
if(!QDELETED(src) && reward && check_menu(user))
|
||||
cooldowntime = world.time + 2400
|
||||
for(var/N in pickedtype)
|
||||
new N(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You kneel before the altar and your faith is rewarded with the [choice]!</span>")
|
||||
new reward(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You kneel before the altar and your faith is rewarded with the [choice]!</span>")
|
||||
|
||||
/obj/structure/destructible/cult/forge
|
||||
name = "daemon forge"
|
||||
@@ -116,9 +134,14 @@
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
break_message = "<span class='warning'>The force breaks apart into shards with a howling scream!</span>"
|
||||
|
||||
/obj/structure/destructible/cult/forge/attack_hand(mob/living/user)
|
||||
var/static/image/radial_flagellant = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cultrobes")
|
||||
var/static/image/radial_shielded = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cult_armor")
|
||||
var/static/image/radial_mirror = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "mirror_shield")
|
||||
|
||||
/obj/structure/destructible/cult/forge/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
if(!user.canUseTopic(src, TRUE))
|
||||
return
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "<span class='warning'>The heat radiating from [src] pushes you back.</span>")
|
||||
@@ -129,24 +152,26 @@
|
||||
if(cooldowntime > world.time)
|
||||
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
|
||||
return
|
||||
var/choice
|
||||
if(user.mind.has_antag_datum(/datum/antagonist/cult/master))
|
||||
choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield")
|
||||
else
|
||||
choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Mirror Shield")
|
||||
var/list/pickedtype = list()
|
||||
|
||||
to_chat(user, "<span class='cultitalic'>You study the schematics etched into the forge...</span>")
|
||||
|
||||
|
||||
var/list/options = list("Shielded Robe" = radial_shielded, "Flagellant's Robe" = radial_flagellant, "Mirror Shield" = radial_mirror)
|
||||
var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
|
||||
var/reward
|
||||
switch(choice)
|
||||
if("Shielded Robe")
|
||||
pickedtype += /obj/item/clothing/suit/hooded/cultrobes/cult_shield
|
||||
reward = /obj/item/clothing/suit/hooded/cultrobes/cult_shield
|
||||
if("Flagellant's Robe")
|
||||
pickedtype += /obj/item/clothing/suit/hooded/cultrobes/berserker
|
||||
reward = /obj/item/clothing/suit/hooded/cultrobes/berserker
|
||||
if("Mirror Shield")
|
||||
pickedtype += /obj/item/shield/mirror
|
||||
if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
|
||||
reward = /obj/item/shield/mirror
|
||||
|
||||
if(!QDELETED(src) && reward && check_menu(user))
|
||||
cooldowntime = world.time + 2400
|
||||
for(var/N in pickedtype)
|
||||
new N(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating the [choice]!</span>")
|
||||
new reward(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You work the forge as dark knowledge guides your hands, creating the [choice]!</span>")
|
||||
|
||||
|
||||
|
||||
@@ -234,9 +259,14 @@
|
||||
light_color = LIGHT_COLOR_FIRE
|
||||
break_message = "<span class='warning'>The books and tomes of the archives burn into ash as the desk shatters!</span>"
|
||||
|
||||
/obj/structure/destructible/cult/tome/attack_hand(mob/living/user)
|
||||
var/static/image/radial_blindfold = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "blindfold")
|
||||
var/static/image/radial_curse = image(icon = 'icons/obj/cult.dmi', icon_state ="shuttlecurse")
|
||||
var/static/image/radial_veilwalker = image(icon = 'icons/obj/cult.dmi', icon_state ="shifter")
|
||||
|
||||
/obj/structure/destructible/cult/tome/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
if(!user.canUseTopic(src, TRUE))
|
||||
return
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "<span class='warning'>These books won't open and it hurts to even try and read the covers.</span>")
|
||||
@@ -247,21 +277,27 @@
|
||||
if(cooldowntime > world.time)
|
||||
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
|
||||
return
|
||||
var/choice = alert(user,"You flip through the black pages of the archives...",,"Zealot's Blindfold","Shuttle Curse","Veil Walker Set")
|
||||
var/list/pickedtype = list()
|
||||
|
||||
to_chat(user, "<span class='cultitalic'>You flip through the black pages of the archives...</span>")
|
||||
|
||||
var/list/options = list("Zealot's Blindfold" = radial_blindfold, "Shuttle Curse" = radial_curse, "Veil Walker Set" = radial_veilwalker)
|
||||
var/choice = show_radial_menu(user, src, options, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
|
||||
var/reward
|
||||
switch(choice)
|
||||
if("Zealot's Blindfold")
|
||||
pickedtype += /obj/item/clothing/glasses/hud/health/night/cultblind
|
||||
reward = /obj/item/clothing/glasses/hud/health/night/cultblind
|
||||
if("Shuttle Curse")
|
||||
pickedtype += /obj/item/shuttle_curse
|
||||
reward = /obj/item/shuttle_curse
|
||||
if("Veil Walker Set")
|
||||
pickedtype += /obj/item/cult_shift
|
||||
pickedtype += /obj/item/flashlight/flare/culttorch
|
||||
if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time)
|
||||
reward = /obj/effect/spawner/bundle/veil_walker
|
||||
if(!QDELETED(src) && reward && check_menu(user))
|
||||
cooldowntime = world.time + 2400
|
||||
for(var/N in pickedtype)
|
||||
new N(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You summon the [choice] from the archives!</span>")
|
||||
new reward(get_turf(src))
|
||||
to_chat(user, "<span class='cultitalic'>You summon the [choice] from the archives!</span>")
|
||||
|
||||
/obj/effect/spawner/bundle/veil_walker
|
||||
items = list(/obj/item/cult_shift, /obj/item/flashlight/flare/culttorch)
|
||||
|
||||
/obj/effect/gateway
|
||||
name = "gateway"
|
||||
|
||||
@@ -61,8 +61,8 @@ Runes can either be invoked by one's self or with many different cultists. Each
|
||||
if(do_after(user, 15, target = src))
|
||||
to_chat(user, "<span class='notice'>You carefully erase the [lowertext(cultist_name)] rune.</span>")
|
||||
qdel(src)
|
||||
else if(istype(I, /obj/item/nullrod))
|
||||
user.say("BEGONE FOUL MAGIKS!!", forced = "nullrod")
|
||||
else if(istype(I, /obj/item/storage/book/bible) || istype(I, /obj/item/nullrod))
|
||||
user.say("BEGONE FOUL MAGICKS!!", forced = "bible")
|
||||
to_chat(user, "<span class='danger'>You disrupt the magic of [src] with [I].</span>")
|
||||
qdel(src)
|
||||
|
||||
@@ -185,9 +185,6 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
color = RUNE_COLOR_OFFER
|
||||
req_cultists = 1
|
||||
rune_in_use = FALSE
|
||||
var/mob/living/currentconversionman
|
||||
var/conversiontimeout
|
||||
var/conversionresult
|
||||
|
||||
/obj/effect/rune/convert/do_invoke_glow()
|
||||
return
|
||||
@@ -233,37 +230,18 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 5)
|
||||
Cult_team.check_size() // Triggers the eye glow or aura effects if the cult has grown large enough relative to the crew
|
||||
rune_in_use = FALSE
|
||||
|
||||
/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers)
|
||||
if(invokers.len < 2)
|
||||
for(var/M in invokers)
|
||||
to_chat(M, "<span class='danger'>You need at least two invokers to convert [convertee]!</span>")
|
||||
to_chat(M, "<span class='warning'>You need at least two invokers to convert [convertee]!</span>")
|
||||
log_game("Offer rune failed - tried conversion with one invoker")
|
||||
return 0
|
||||
if(convertee.anti_magic_check(TRUE, TRUE))
|
||||
if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed
|
||||
for(var/M in invokers)
|
||||
to_chat(M, "<span class='warning'>Something is shielding [convertee]'s mind!</span>")
|
||||
log_game("Offer rune failed - convertee had anti-magic")
|
||||
return 0
|
||||
to_chat(convertee, "<span class='cult italic'><b>The world goes red. All at once you are aware of an evil, eldritch truth taking roots into your mind.\n\
|
||||
<a href='?src=\ref[src];signmeup=1'>Click here to become a follower of Nar'sie</a></b>, or suffer a fate worse than death.</span>")
|
||||
INVOKE_ASYNC(src, .proc/optinalert, convertee)
|
||||
currentconversionman = convertee
|
||||
conversiontimeout = world.time + (14 SECONDS)
|
||||
convertee.Stun(140)
|
||||
ADD_TRAIT(convertee, TRAIT_MUTE, "conversionrune")
|
||||
flash_color(convertee, list("#960000", "#960000", "#960000", rgb(0,0,0)), 50)
|
||||
conversionresult = FALSE
|
||||
while(world.time < conversiontimeout && convertee && !conversionresult)
|
||||
stoplag(1)
|
||||
currentconversionman = null
|
||||
if(!convertee)
|
||||
return FALSE
|
||||
REMOVE_TRAIT(convertee, TRAIT_MUTE, "conversionrune")
|
||||
if(get_turf(convertee) != get_turf(src))
|
||||
return FALSE
|
||||
if(!conversionresult)
|
||||
do_sacrifice(convertee, invokers, TRUE)
|
||||
return FALSE
|
||||
var/brutedamage = convertee.getBruteLoss()
|
||||
var/burndamage = convertee.getFireLoss()
|
||||
if(brutedamage || burndamage)
|
||||
@@ -275,6 +253,8 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
SSticker.mode.add_cultist(convertee.mind, 1)
|
||||
new /obj/item/melee/cultblade/dagger(get_turf(src))
|
||||
convertee.mind.special_role = ROLE_CULTIST
|
||||
to_chat(convertee, "<span class='cult italic'><b>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
|
||||
and something evil takes root.</b></span>")
|
||||
to_chat(convertee, "<span class='cult italic'><b>Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\
|
||||
</b></span>")
|
||||
if(ishuman(convertee))
|
||||
@@ -284,18 +264,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
H.cultslurring = 0
|
||||
return 1
|
||||
|
||||
/obj/effect/rune/convert/proc/optinalert(mob/living/convertee)
|
||||
var/alert = alert(convertee, "Will you embrace the Geometer of Blood or perish in futile resistance?", "Choose your own fate", "Join the Blood Cult", "Suffer a horrible demise")
|
||||
if(src && alert == "Join the Blood Cult")
|
||||
signmeup(convertee)
|
||||
|
||||
/obj/effect/rune/convert/proc/signmeup(mob/living/convertee)
|
||||
if(currentconversionman == convertee)
|
||||
conversionresult = TRUE
|
||||
else
|
||||
to_chat(convertee, "<span class='cult italic'>Your fate has already been set in stone.</span>")
|
||||
|
||||
/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers, force_a_sac)
|
||||
/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers)
|
||||
var/mob/living/first_invoker = invokers[1]
|
||||
if(!first_invoker)
|
||||
return FALSE
|
||||
@@ -305,7 +274,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
|
||||
|
||||
var/big_sac = FALSE
|
||||
if(!force_a_sac && (((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3)
|
||||
if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3)
|
||||
for(var/M in invokers)
|
||||
to_chat(M, "<span class='cult italic'>[sacrificial] is too greatly linked to the world! You need three acolytes!</span>")
|
||||
log_game("Offer rune failed - not enough acolytes and target is living or sac target")
|
||||
@@ -345,10 +314,6 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
sacrificial.gib()
|
||||
return TRUE
|
||||
|
||||
/obj/effect/rune/convert/Topic(href, href_list)
|
||||
if(href_list["signmeup"])
|
||||
signmeup(usr)
|
||||
|
||||
/obj/effect/rune/empower
|
||||
cultist_name = "Empower"
|
||||
cultist_desc = "allows cultists to prepare greater amounts of blood magic at far less of a cost."
|
||||
|
||||
@@ -5,25 +5,48 @@ is currently following.
|
||||
*/
|
||||
|
||||
GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
new /datum/disease_ability/action/cough(),
|
||||
new /datum/disease_ability/action/sneeze(),
|
||||
new /datum/disease_ability/action/infect(),
|
||||
new /datum/disease_ability/symptom/cough(),
|
||||
new /datum/disease_ability/symptom/sneeze(),\
|
||||
new /datum/disease_ability/symptom/hallucigen(),
|
||||
new /datum/disease_ability/symptom/choking(),
|
||||
new /datum/disease_ability/symptom/confusion(),
|
||||
new /datum/disease_ability/symptom/youth(),
|
||||
new /datum/disease_ability/symptom/vomit(),
|
||||
new /datum/disease_ability/symptom/voice_change(),
|
||||
new /datum/disease_ability/symptom/visionloss(),
|
||||
new /datum/disease_ability/symptom/viraladaptation(),
|
||||
new /datum/disease_ability/symptom/vitiligo(),
|
||||
new /datum/disease_ability/symptom/sensory_restoration(),
|
||||
new /datum/disease_ability/symptom/itching(),
|
||||
new /datum/disease_ability/symptom/weight_loss(),
|
||||
new /datum/disease_ability/symptom/metabolism_heal(),
|
||||
new /datum/disease_ability/symptom/coma_heal()
|
||||
new /datum/disease_ability/action/cough,
|
||||
new /datum/disease_ability/action/sneeze,
|
||||
new /datum/disease_ability/action/infect,
|
||||
new /datum/disease_ability/symptom/mild/cough,
|
||||
new /datum/disease_ability/symptom/mild/sneeze,
|
||||
new /datum/disease_ability/symptom/medium/shedding,
|
||||
new /datum/disease_ability/symptom/medium/beard,
|
||||
new /datum/disease_ability/symptom/medium/hallucigen,
|
||||
new /datum/disease_ability/symptom/medium/choking,
|
||||
new /datum/disease_ability/symptom/medium/confusion,
|
||||
new /datum/disease_ability/symptom/medium/vomit,
|
||||
new /datum/disease_ability/symptom/medium/voice_change,
|
||||
new /datum/disease_ability/symptom/medium/visionloss,
|
||||
new /datum/disease_ability/symptom/medium/deafness,
|
||||
new /datum/disease_ability/symptom/powerful/narcolepsy,
|
||||
new /datum/disease_ability/symptom/medium/fever,
|
||||
new /datum/disease_ability/symptom/medium/shivering,
|
||||
new /datum/disease_ability/symptom/medium/headache,
|
||||
new /datum/disease_ability/symptom/medium/nano_boost,
|
||||
new /datum/disease_ability/symptom/medium/nano_destroy,
|
||||
new /datum/disease_ability/symptom/medium/viraladaptation,
|
||||
new /datum/disease_ability/symptom/medium/viralevolution,
|
||||
new /datum/disease_ability/symptom/medium/vitiligo,
|
||||
new /datum/disease_ability/symptom/medium/revitiligo,
|
||||
new /datum/disease_ability/symptom/medium/itching,
|
||||
new /datum/disease_ability/symptom/medium/heal/weight_loss,
|
||||
new /datum/disease_ability/symptom/medium/heal/sensory_restoration,
|
||||
new /datum/disease_ability/symptom/medium/heal/mind_restoration,
|
||||
new /datum/disease_ability/symptom/powerful/fire,
|
||||
new /datum/disease_ability/symptom/powerful/flesh_eating,
|
||||
// new /datum/disease_ability/symptom/powerful/genetic_mutation,
|
||||
new /datum/disease_ability/symptom/powerful/inorganic_adaptation,
|
||||
new /datum/disease_ability/symptom/powerful/heal/starlight,
|
||||
new /datum/disease_ability/symptom/powerful/heal/oxygen,
|
||||
new /datum/disease_ability/symptom/powerful/heal/chem,
|
||||
new /datum/disease_ability/symptom/powerful/heal/metabolism,
|
||||
new /datum/disease_ability/symptom/powerful/heal/dark,
|
||||
new /datum/disease_ability/symptom/powerful/heal/water,
|
||||
new /datum/disease_ability/symptom/powerful/heal/plasma,
|
||||
new /datum/disease_ability/symptom/powerful/heal/radiation,
|
||||
new /datum/disease_ability/symptom/powerful/heal/coma,
|
||||
new /datum/disease_ability/symptom/powerful/youth
|
||||
))
|
||||
|
||||
/datum/disease_ability
|
||||
@@ -54,7 +77,13 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
stage_speed += initial(S.stage_speed)
|
||||
transmittable += initial(S.transmittable)
|
||||
threshold_block += "<br><br>[initial(S.threshold_desc)]"
|
||||
stat_block = "Resistance: [resistance]<br>Stealth: [stealth]<br>Stage Speed: [stage_speed]<br>Transmissibility: [transmittable]<br><br>"
|
||||
stat_block = "Resistance: [resistance]<br>Stealth: [stealth]<br>Stage Speed: [stage_speed]<br>Transmissibility: [transmittable]<br><br>"
|
||||
if(symptoms.len == 1) //lazy boy's dream
|
||||
name = initial(S.name)
|
||||
if(short_desc == "")
|
||||
short_desc = initial(S.desc)
|
||||
if(long_desc == "")
|
||||
long_desc = initial(S.desc)
|
||||
|
||||
/datum/disease_ability/proc/CanBuy(mob/camera/disease/D)
|
||||
if(world.time < D.next_adaptation_time)
|
||||
@@ -77,8 +106,10 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
for(var/T in symptoms)
|
||||
var/datum/symptom/S = new T()
|
||||
SD.symptoms += S
|
||||
S.OnAdd(SD)
|
||||
if(SD.processing)
|
||||
S.Start(SD)
|
||||
if(S.Start(SD))
|
||||
S.next_activation = world.time + rand(S.symptom_delay_min * 10, S.symptom_delay_max * 10)
|
||||
SD.Refresh()
|
||||
for(var/T in actions)
|
||||
var/datum/action/A = new T()
|
||||
@@ -105,6 +136,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
var/datum/symptom/S = locate(T) in SD.symptoms
|
||||
if(S)
|
||||
SD.symptoms -= S
|
||||
S.OnRemove(SD)
|
||||
if(SD.processing)
|
||||
S.End(SD)
|
||||
qdel(S)
|
||||
@@ -152,8 +184,9 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
return FALSE
|
||||
to_chat(D, "<span class='notice'>You force [L.real_name] to cough.</span>")
|
||||
L.emote("cough")
|
||||
var/datum/disease/advance/sentient_disease/SD = D.hosts[L]
|
||||
SD.spread(2)
|
||||
if(L.CanSpreadAirborneDisease()) //don't spread germs if they covered their mouth
|
||||
var/datum/disease/advance/sentient_disease/SD = D.hosts[L]
|
||||
SD.spread(2)
|
||||
StartCooldown()
|
||||
return TRUE
|
||||
|
||||
@@ -185,11 +218,12 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
return FALSE
|
||||
to_chat(D, "<span class='notice'>You force [L.real_name] to sneeze.</span>")
|
||||
L.emote("sneeze")
|
||||
var/datum/disease/advance/sentient_disease/SD = D.hosts[L]
|
||||
if(L.CanSpreadAirborneDisease()) //don't spread germs if they covered their mouth
|
||||
var/datum/disease/advance/sentient_disease/SD = D.hosts[L]
|
||||
|
||||
for(var/mob/living/M in oview(4, SD.affected_mob))
|
||||
if(is_A_facing_B(SD.affected_mob, M) && disease_air_spread_walk(get_turf(SD.affected_mob), get_turf(M)))
|
||||
M.AirborneContractDisease(SD, TRUE)
|
||||
for(var/mob/living/M in oview(4, SD.affected_mob))
|
||||
if(is_A_facing_B(SD.affected_mob, M) && disease_air_spread_walk(get_turf(SD.affected_mob), get_turf(M)))
|
||||
M.AirborneContractDisease(SD, TRUE)
|
||||
|
||||
StartCooldown()
|
||||
return TRUE
|
||||
@@ -235,154 +269,192 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list(
|
||||
StartCooldown()
|
||||
return TRUE
|
||||
|
||||
//passive symptom abilities
|
||||
/*******************BASE SYMPTOM TYPES*******************/
|
||||
// cost is for convenience and can be changed. If you're changing req_tot_points then don't use the subtype...
|
||||
//healing costs more so you have to techswitch from naughty disease otherwise we'd have friendly disease for easy greentext (no fun!)
|
||||
|
||||
/datum/disease_ability/symptom/cough
|
||||
name = "Involuntary Coughing"
|
||||
symptoms = list(/datum/symptom/cough)
|
||||
/datum/disease_ability/symptom/mild
|
||||
cost = 2
|
||||
required_total_points = 4
|
||||
category = "Symptom (Weak)"
|
||||
|
||||
/datum/disease_ability/symptom/medium
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
category = "Symptom"
|
||||
|
||||
/datum/disease_ability/symptom/medium/heal
|
||||
cost = 5
|
||||
category = "Symptom (+)"
|
||||
|
||||
/datum/disease_ability/symptom/powerful
|
||||
cost = 4
|
||||
required_total_points = 16
|
||||
category = "Symptom (Strong)"
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal
|
||||
cost = 8
|
||||
category = "Symptom (Strong+)"
|
||||
|
||||
|
||||
/******MILD******/
|
||||
|
||||
/datum/disease_ability/symptom/mild/cough
|
||||
name = "Involuntary Coughing"
|
||||
symptoms = list(/datum/symptom/cough)
|
||||
short_desc = "Cause victims to cough intermittently."
|
||||
long_desc = "Cause victims to cough intermittently, spreading your infection if your transmissibility is high."
|
||||
|
||||
/datum/disease_ability/symptom/sneeze
|
||||
/datum/disease_ability/symptom/mild/sneeze
|
||||
name = "Involuntary Sneezing"
|
||||
symptoms = list(/datum/symptom/sneeze)
|
||||
cost = 2
|
||||
required_total_points = 4
|
||||
short_desc = "Cause victims to sneeze intermittently."
|
||||
long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmissibility and resistance, at the cost of stealth."
|
||||
|
||||
/datum/disease_ability/symptom/beard
|
||||
//I don't think I need to justify the fact that this is the best symptom
|
||||
name = "Beard Growth"
|
||||
symptoms = list(/datum/symptom/beard)
|
||||
cost = 1
|
||||
required_total_points = 8
|
||||
short_desc = "Cause all victims to grow a luscious beard."
|
||||
long_desc = "Cause all victims to grow a luscious beard. Decreases stats slightly. Ineffective against Santa Claus."
|
||||
/******MEDIUM******/
|
||||
|
||||
/datum/disease_ability/symptom/hallucigen
|
||||
name = "Hallucinations"
|
||||
/datum/disease_ability/symptom/medium/shedding
|
||||
symptoms = list(/datum/symptom/shedding)
|
||||
|
||||
/datum/disease_ability/symptom/medium/beard
|
||||
symptoms = list(/datum/symptom/beard)
|
||||
short_desc = "Cause all victims to grow a luscious beard."
|
||||
long_desc = "Cause all victims to grow a luscious beard. Ineffective against Santa Claus."
|
||||
|
||||
/datum/disease_ability/symptom/medium/hallucigen
|
||||
symptoms = list(/datum/symptom/hallucigen)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to hallucinate."
|
||||
long_desc = "Cause victims to hallucinate. Decreases stats, especially resistance."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/choking
|
||||
name = "Choking"
|
||||
/datum/disease_ability/symptom/medium/choking
|
||||
symptoms = list(/datum/symptom/choking)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to choke."
|
||||
long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmissibility."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/confusion
|
||||
name = "Confusion"
|
||||
/datum/disease_ability/symptom/medium/confusion
|
||||
symptoms = list(/datum/symptom/confusion)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to become confused."
|
||||
long_desc = "Cause victims to become confused intermittently."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/youth
|
||||
name = "Eternal Youth"
|
||||
symptoms = list(/datum/symptom/youth)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to become eternally young."
|
||||
long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/vomit
|
||||
name = "Vomiting"
|
||||
/datum/disease_ability/symptom/medium/vomit
|
||||
symptoms = list(/datum/symptom/vomit)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to vomit."
|
||||
long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/voice_change
|
||||
name = "Voice Changing"
|
||||
/datum/disease_ability/symptom/medium/voice_change
|
||||
symptoms = list(/datum/symptom/voice_change)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Change the voice of victims."
|
||||
long_desc = "Change the voice of victims, causing confusion in communications."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/visionloss
|
||||
name = "Vision Loss"
|
||||
/datum/disease_ability/symptom/medium/visionloss
|
||||
symptoms = list(/datum/symptom/visionloss)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Damage the eyes of victims, eventually causing blindness."
|
||||
long_desc = "Damage the eyes of victims, eventually causing blindness. Decreases all stats."
|
||||
|
||||
/datum/disease_ability/symptom/medium/deafness
|
||||
symptoms = list(/datum/symptom/deafness)
|
||||
|
||||
/datum/disease_ability/symptom/viraladaptation
|
||||
name = "Self-Adaptation"
|
||||
/datum/disease_ability/symptom/medium/fever
|
||||
symptoms = list(/datum/symptom/fever)
|
||||
|
||||
/datum/disease_ability/symptom/medium/shivering
|
||||
symptoms = list(/datum/symptom/shivering)
|
||||
|
||||
/datum/disease_ability/symptom/medium/headache
|
||||
symptoms = list(/datum/symptom/headache)
|
||||
|
||||
/datum/disease_ability/symptom/medium/nano_boost
|
||||
symptoms = list(/datum/symptom/nano_boost)
|
||||
|
||||
/datum/disease_ability/symptom/medium/nano_destroy
|
||||
symptoms = list(/datum/symptom/nano_destroy)
|
||||
|
||||
/datum/disease_ability/symptom/medium/viraladaptation
|
||||
symptoms = list(/datum/symptom/viraladaptation)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause your infection to become more resistant to detection and eradication."
|
||||
long_desc = "Cause your infection to mimic the function of normal body cells, becoming much harder to spot and to eradicate, but reducing its speed."
|
||||
|
||||
/datum/disease_ability/symptom/medium/viralevolution
|
||||
symptoms = list(/datum/symptom/viralevolution)
|
||||
|
||||
/datum/disease_ability/symptom/vitiligo
|
||||
name = "Skin Paleness"
|
||||
/datum/disease_ability/symptom/medium/vitiligo
|
||||
symptoms = list(/datum/symptom/vitiligo)
|
||||
cost = 1
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to become pale."
|
||||
long_desc = "Cause victims to become pale. Decreases all stats."
|
||||
|
||||
/datum/disease_ability/symptom/medium/revitiligo
|
||||
symptoms = list(/datum/symptom/revitiligo)
|
||||
|
||||
/datum/disease_ability/symptom/sensory_restoration
|
||||
name = "Sensory Restoration"
|
||||
symptoms = list(/datum/symptom/sensory_restoration)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Regenerate eye and ear damage of victims."
|
||||
long_desc = "Regenerate eye and ear damage of victims."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/itching
|
||||
name = "Itching"
|
||||
/datum/disease_ability/symptom/medium/itching
|
||||
symptoms = list(/datum/symptom/itching)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to itch."
|
||||
long_desc = "Cause victims to itch, increasing all stats except stealth."
|
||||
|
||||
|
||||
/datum/disease_ability/symptom/weight_loss
|
||||
name = "Weight Loss"
|
||||
/datum/disease_ability/symptom/medium/heal/weight_loss
|
||||
symptoms = list(/datum/symptom/weight_loss)
|
||||
cost = 4
|
||||
required_total_points = 8
|
||||
short_desc = "Cause victims to lose weight."
|
||||
long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing."
|
||||
|
||||
/datum/disease_ability/symptom/medium/heal/sensory_restoration
|
||||
symptoms = list(/datum/symptom/sensory_restoration)
|
||||
short_desc = "Regenerate eye and ear damage of victims."
|
||||
long_desc = "Regenerate eye and ear damage of victims."
|
||||
|
||||
/datum/disease_ability/symptom/metabolism_heal
|
||||
name = "Metabolic Boost"
|
||||
/datum/disease_ability/symptom/medium/heal/mind_restoration
|
||||
symptoms = list(/datum/symptom/mind_restoration)
|
||||
|
||||
/******POWERFUL******/
|
||||
|
||||
/datum/disease_ability/symptom/powerful/fire
|
||||
symptoms = list(/datum/symptom/fire)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/flesh_eating
|
||||
symptoms = list(/datum/symptom/flesh_eating)
|
||||
|
||||
/*
|
||||
/datum/disease_ability/symptom/powerful/genetic_mutation
|
||||
symptoms = list(/datum/symptom/genetic_mutation)
|
||||
cost = 8
|
||||
*/
|
||||
|
||||
/datum/disease_ability/symptom/powerful/inorganic_adaptation
|
||||
symptoms = list(/datum/symptom/inorganic_adaptation)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/narcolepsy
|
||||
symptoms = list(/datum/symptom/narcolepsy)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/youth
|
||||
symptoms = list(/datum/symptom/youth)
|
||||
short_desc = "Cause victims to become eternally young."
|
||||
long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility."
|
||||
|
||||
/****HEALING SUBTYPE****/
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/starlight
|
||||
symptoms = list(/datum/symptom/heal/starlight)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/oxygen
|
||||
symptoms = list(/datum/symptom/oxygen)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/chem
|
||||
symptoms = list(/datum/symptom/heal/chem)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/metabolism
|
||||
symptoms = list(/datum/symptom/heal/metabolism)
|
||||
cost = 4
|
||||
required_total_points = 16
|
||||
short_desc = "Increase the metabolism of victims, causing them to process chemicals and grow hungry faster."
|
||||
long_desc = "Increase the metabolism of victims, causing them to process chemicals twice as fast and grow hungry more quickly."
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/dark
|
||||
symptoms = list(/datum/symptom/heal/darkness)
|
||||
|
||||
/datum/disease_ability/symptom/coma_heal
|
||||
name = "Regenerative Coma"
|
||||
/datum/disease_ability/symptom/powerful/heal/water
|
||||
symptoms = list(/datum/symptom/heal/water)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/plasma
|
||||
symptoms = list(/datum/symptom/heal/plasma)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/radiation
|
||||
symptoms = list(/datum/symptom/heal/radiation)
|
||||
|
||||
/datum/disease_ability/symptom/powerful/heal/coma
|
||||
symptoms = list(/datum/symptom/heal/coma)
|
||||
cost = 8
|
||||
required_total_points = 16
|
||||
short_desc = "Cause victims to fall into a healing coma when hurt."
|
||||
long_desc = "Cause victims to fall into a healing coma when hurt."
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
if(cures.len)
|
||||
return
|
||||
var/list/not_used = advance_cures.Copy()
|
||||
not_used.Cut(1, 6) // Removes the first five tiers of cures.
|
||||
cures = list(pick(pick_n_take(not_used)), pick(pick_n_take(not_used)))
|
||||
|
||||
// Get the cure name from the cure_id
|
||||
|
||||
@@ -18,7 +18,7 @@ the new instance inside the host to be updated to the template's stats.
|
||||
layer = BELOW_MOB_LAYER
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
sight = SEE_SELF|SEE_THRU
|
||||
initial_language_holder = /datum/language_holder/empty
|
||||
initial_language_holder = /datum/language_holder/universal
|
||||
|
||||
var/freemove = TRUE
|
||||
var/freemove_end = 0
|
||||
@@ -43,7 +43,7 @@ the new instance inside the host to be updated to the template's stats.
|
||||
var/move_delay = 1
|
||||
|
||||
var/next_adaptation_time = 0
|
||||
var/adaptation_cooldown = 1200
|
||||
var/adaptation_cooldown = 600
|
||||
|
||||
var/list/purchased_abilities
|
||||
var/list/unpurchased_abilities
|
||||
@@ -118,10 +118,28 @@ the new instance inside the host to be updated to the template's stats.
|
||||
follow_next(Dir & NORTHWEST)
|
||||
last_move_tick = world.time
|
||||
|
||||
/mob/camera/disease/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
. = ..()
|
||||
var/atom/movable/to_follow = speaker
|
||||
if(radio_freq)
|
||||
var/atom/movable/virtualspeaker/V = speaker
|
||||
to_follow = V.source
|
||||
var/link
|
||||
if(to_follow in hosts)
|
||||
link = FOLLOW_LINK(src, to_follow)
|
||||
else
|
||||
link = ""
|
||||
// Recompose the message, because it's scrambled by default
|
||||
message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode)
|
||||
to_chat(src, "[link] [message]")
|
||||
|
||||
|
||||
/mob/camera/disease/mind_initialize()
|
||||
. = ..()
|
||||
if(!mind.has_antag_datum(/datum/antagonist/disease))
|
||||
mind.add_antag_datum(/datum/antagonist/disease)
|
||||
var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
medsensor.add_hud_to(src)
|
||||
|
||||
/mob/camera/disease/proc/pick_name()
|
||||
var/static/list/taken_names
|
||||
@@ -247,9 +265,12 @@ the new instance inside the host to be updated to the template's stats.
|
||||
if(!move_listener)
|
||||
move_listener = L.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/follow_mob)))
|
||||
else
|
||||
L.TakeComponent(move_listener)
|
||||
if(QDELING(move_listener))
|
||||
move_listener = null
|
||||
if(L)
|
||||
L.TakeComponent(move_listener)
|
||||
if(QDELING(move_listener))
|
||||
move_listener = null
|
||||
else
|
||||
QDEL_NULL(move_listener)
|
||||
follow_mob()
|
||||
|
||||
/mob/camera/disease/proc/follow_next(reverse = FALSE)
|
||||
|
||||
@@ -36,30 +36,42 @@
|
||||
|
||||
/datum/antagonist/ert/security // kinda handled by the base template but here for completion
|
||||
|
||||
/datum/antagonist/ert/security/red
|
||||
/datum/antagonist/ert/security/amber
|
||||
outfit = /datum/outfit/ert/security/alert
|
||||
|
||||
/datum/antagonist/ert/security/red
|
||||
outfit = /datum/outfit/ert/security/alert/red
|
||||
|
||||
/datum/antagonist/ert/engineer
|
||||
role = "Engineer"
|
||||
outfit = /datum/outfit/ert/engineer
|
||||
|
||||
/datum/antagonist/ert/engineer/red
|
||||
/datum/antagonist/ert/engineer/amber
|
||||
outfit = /datum/outfit/ert/engineer/alert
|
||||
|
||||
/datum/antagonist/ert/engineer/red
|
||||
outfit = /datum/outfit/ert/engineer/alert/red
|
||||
|
||||
/datum/antagonist/ert/medic
|
||||
role = "Medical Officer"
|
||||
outfit = /datum/outfit/ert/medic
|
||||
|
||||
/datum/antagonist/ert/medic/red
|
||||
/datum/antagonist/ert/medic/amber
|
||||
outfit = /datum/outfit/ert/medic/alert
|
||||
|
||||
/datum/antagonist/ert/medic/red
|
||||
outfit = /datum/outfit/ert/medic/alert/red
|
||||
|
||||
/datum/antagonist/ert/commander
|
||||
role = "Commander"
|
||||
outfit = /datum/outfit/ert/commander
|
||||
|
||||
/datum/antagonist/ert/commander/red
|
||||
/datum/antagonist/ert/commander/amber
|
||||
outfit = /datum/outfit/ert/commander/alert
|
||||
|
||||
/datum/antagonist/ert/commander/red
|
||||
outfit = /datum/outfit/ert/commander/alert/red
|
||||
|
||||
/datum/antagonist/ert/deathsquad
|
||||
name = "Deathsquad Trooper"
|
||||
outfit = /datum/outfit/death_commando
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
desc = "Still it beats furiously, emanating an aura of utter hate."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "demon_heart-on"
|
||||
decay_factor = 0
|
||||
|
||||
/obj/item/organ/heart/demon/update_icon()
|
||||
return //always beating visually
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
to_chat(user, "<span class='warning'>This artifact can only affect three undead at a time!</span>")
|
||||
return
|
||||
|
||||
M.set_species(/datum/species/skeleton, icon_update=0)
|
||||
M.set_species(/datum/species/skeleton/space, icon_update=0)
|
||||
M.revive(full_heal = 1, admin_revive = 1)
|
||||
spooky_scaries |= M
|
||||
to_chat(M, "<span class='userdanger'>You have been revived by </span><B>[user.real_name]!</B>")
|
||||
|
||||
@@ -394,6 +394,21 @@
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/CtrlClick(mob/user)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK) && !state_open)
|
||||
on = !on
|
||||
update_icon()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/AltClick(mob/user)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
if(state_open)
|
||||
close_machine()
|
||||
else
|
||||
open_machine()
|
||||
update_icon()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/update_remote_sight(mob/living/user)
|
||||
return // we don't see the pipe network while inside cryo.
|
||||
|
||||
|
||||
@@ -109,7 +109,6 @@ datum/bounty/reagent/complex_drink/New()
|
||||
/datum/reagent/consumable/ethanol/patron,\
|
||||
/datum/reagent/consumable/ethanol/quadruple_sec,\
|
||||
/datum/reagent/consumable/ethanol/quintuple_sec,\
|
||||
/datum/reagent/consumable/bluecherryshake,\
|
||||
/datum/reagent/consumable/doctor_delight,\
|
||||
/datum/reagent/consumable/ethanol/silencer)
|
||||
|
||||
|
||||
@@ -571,6 +571,8 @@ GLOBAL_LIST_EMPTY(asset_datums)
|
||||
"fontawesome-webfont.woff" = 'tgui/assets/fonts/fontawesome-webfont.woff',
|
||||
"font-awesome.css" = 'code/modules/goonchat/browserassets/css/font-awesome.css',
|
||||
"browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css',
|
||||
"browserOutput_dark.css" = 'code/modules/goonchat/browserassets/css/browserOutput_dark.css',
|
||||
"browserOutput_light.css" = 'code/modules/goonchat/browserassets/css/browserOutput_light.css'
|
||||
)
|
||||
|
||||
/datum/asset/spritesheet/goonchat
|
||||
|
||||
@@ -75,3 +75,8 @@
|
||||
var/datum/player_details/player_details //these persist between logins/logouts during the same round.
|
||||
|
||||
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
|
||||
|
||||
var/client_keysend_amount = 0
|
||||
var/next_keysend_reset = 0
|
||||
var/next_keysend_trip_reset = 0
|
||||
var/keysend_tripped = FALSE
|
||||
@@ -817,6 +817,10 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
var/file = GLOB.vox_sounds[name]
|
||||
Export("##action=load_rsc", file)
|
||||
stoplag()
|
||||
for (var/name in GLOB.vox_sounds_male)
|
||||
var/file = GLOB.vox_sounds_male[name]
|
||||
Export("##action=load_rsc", file)
|
||||
stoplag()
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ This lets you switch chat themes by using winset and CSS loading, you must relog
|
||||
Things to note:
|
||||
If you change ANYTHING in interface/skin.dmf you need to change it here:
|
||||
Format:
|
||||
winset(src, "window as appears in skin.dmf after elem", "var to change = currentvalue;var to change = desired value")
|
||||
winset(src, "window as appears in skin.dmf after elem", "var to change = desired value")
|
||||
How this works:
|
||||
I've added a function to browseroutput.js which registers a cookie for darkmode and swaps the chat accordingly. You can find the button to do this under the "cog" icon next to the ping button (top right of chat)
|
||||
This then swaps the window theme automatically
|
||||
@@ -14,104 +14,52 @@ Thanks to spacemaniac and mcdonald for help with the JS side of this.
|
||||
|
||||
/client/proc/force_white_theme() //There's no way round it. We're essentially changing the skin by hand. It's painful but it works, and is the way Lummox suggested.
|
||||
//Main windows
|
||||
winset(src, "infowindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "infowindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "info", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = [COLOR_WHITEMODE_BACKGROUND]")
|
||||
winset(src, "info", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "browseroutput", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "browseroutput", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "outputwindow", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "mainwindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "split", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = [COLOR_WHITEMODE_BACKGROUND]")
|
||||
winset(src, "infowindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "info", "background-color = [COLOR_WHITEMODE_BACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "browseroutput", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "outputwindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "mainwindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "split", "background-color = [COLOR_WHITEMODE_BACKGROUND]")
|
||||
//Buttons
|
||||
winset(src, "changelog", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "changelog", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "rules", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "rules", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "wiki", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "wiki", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "forum", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "forum", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "github", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "github", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "report-issue", "background-color = [COLOR_DARKMODE_ISSUE_BUTTON_BG];background-color = [COLOR_WHITEMODE_ISSUE_BUTTON_BG]")
|
||||
winset(src, "report-issue", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "changelog", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "rules", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "wiki", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "forum", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "github", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "report-issue", "background-color = [COLOR_WHITEMODE_ISSUE_BUTTON_BG];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
//Status and verb tabs
|
||||
winset(src, "output", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = [COLOR_WHITEMODE_BACKGROUND]")
|
||||
winset(src, "output", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "statwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "statwindow", "text-color = #eaeaea;text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "stat", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = [COLOR_WHITEMODE_BACKGROUND]")
|
||||
winset(src, "stat", "tab-background-color = [COLOR_DARKMODE_BACKGROUND];tab-background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "stat", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "stat", "tab-text-color = [COLOR_DARKMODE_TEXT];tab-text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "stat", "prefix-color = [COLOR_DARKMODE_TEXT];prefix-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "stat", "suffix-color = [COLOR_DARKMODE_TEXT];suffix-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "output", "background-color = [COLOR_WHITEMODE_BACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "statwindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "stat", "background-color = [COLOR_WHITEMODE_BACKGROUND];tab-background-color = [COLOR_WHITEMODE_DARKBACKGROUND];\
|
||||
text-color = [COLOR_WHITEMODE_TEXT];tab-text-color = [COLOR_WHITEMODE_TEXT];\
|
||||
prefix-color = [COLOR_WHITEMODE_TEXT];suffix-color = [COLOR_WHITEMODE_TEXT]")
|
||||
//Etc.
|
||||
winset(src, "say", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "say", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = [COLOR_WHITEMODE_DARKBACKGROUND]")
|
||||
winset(src, "asset_cache_browser", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "tooltip", "background-color = [COLOR_DARKMODE_BACKGROUND];background-color = [COLOR_WHITEMODE_BACKGROUND]")
|
||||
winset(src, "tooltip", "text-color = [COLOR_DARKMODE_TEXT];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "say", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "asset_cache_browser", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
winset(src, "tooltip", "background-color = [COLOR_WHITEMODE_BACKGROUND];text-color = [COLOR_WHITEMODE_TEXT]")
|
||||
|
||||
/client/proc/force_dark_theme() //Inversely, if theyre using white theme and want to swap to the superior dark theme, let's get WINSET() ing
|
||||
//Main windows
|
||||
winset(src, "infowindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
|
||||
winset(src, "infowindow", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "info", "background-color = [COLOR_WHITEMODE_BACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "info", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "browseroutput", "background-color = [COLOR_WHITEMODE_BACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "browseroutput", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "outputwindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "outputwindow", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "mainwindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
|
||||
winset(src, "split", "background-color = [COLOR_WHITEMODE_BACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "infowindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "info", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "browseroutput", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "outputwindow", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "mainwindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
|
||||
winset(src, "split", "background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
//Buttons
|
||||
winset(src, "changelog", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "changelog", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "rules", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "rules", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "wiki", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "wiki", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "forum", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "forum", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "github", "background-color = [COLOR_WHITEMODE_INFO_BUTTONS_BG];background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG]")
|
||||
winset(src, "github", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "report-issue", "background-color = [COLOR_WHITEMODE_ISSUE_BUTTON_BG];background-color = [COLOR_DARKMODE_ISSUE_BUTTON_BG]")
|
||||
winset(src, "report-issue", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "changelog", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "rules", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "wiki", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "forum", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "github", "background-color = [COLOR_DARKMODE_INFO_BUTTONS_BG];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "report-issue", "background-color = [COLOR_DARKMODE_ISSUE_BUTTON_BG];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
//Status and verb tabs
|
||||
winset(src, "output", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "output", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "statwindow", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
|
||||
winset(src, "statwindow", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "stat", "background-color = [COLOR_WHITEMODE_BACKGROUND];background-color = [COLOR_DARKMODE_DARKBACKGROUND]")
|
||||
winset(src, "stat", "tab-background-color = [COLOR_WHITEMODE_DARKBACKGROUND];tab-background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "stat", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "stat", "tab-text-color = [COLOR_WHITEMODE_TEXT];tab-text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "stat", "prefix-color = [COLOR_WHITEMODE_TEXT];prefix-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "stat", "suffix-color = [COLOR_WHITEMODE_TEXT];suffix-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "output", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "statwindow", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "stat", "background-color = [COLOR_DARKMODE_DARKBACKGROUND];tab-background-color = [COLOR_DARKMODE_BACKGROUND];\
|
||||
text-color = [COLOR_DARKMODE_TEXT];tab-text-color = [COLOR_DARKMODE_TEXT];\
|
||||
prefix-color = [COLOR_DARKMODE_TEXT];suffix-color = [COLOR_DARKMODE_TEXT]")
|
||||
//Etc.
|
||||
winset(src, "say", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "say", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "asset_cache_browser", "background-color = [COLOR_WHITEMODE_DARKBACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "asset_cache_browser", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "tooltip", "background-color = [COLOR_WHITEMODE_BACKGROUND];background-color = [COLOR_DARKMODE_BACKGROUND]")
|
||||
winset(src, "tooltip", "text-color = [COLOR_WHITEMODE_TEXT];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
|
||||
|
||||
/datum/asset/simple/goonchat
|
||||
verify = FALSE
|
||||
assets = list(
|
||||
"json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js',
|
||||
"errorHandler.js" = 'code/modules/goonchat/browserassets/js/errorHandler.js',
|
||||
"browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js',
|
||||
"fontawesome-webfont.eot" = 'tgui/assets/fonts/fontawesome-webfont.eot',
|
||||
"fontawesome-webfont.svg" = 'tgui/assets/fonts/fontawesome-webfont.svg',
|
||||
"fontawesome-webfont.ttf" = 'tgui/assets/fonts/fontawesome-webfont.ttf',
|
||||
"fontawesome-webfont.woff" = 'tgui/assets/fonts/fontawesome-webfont.woff',
|
||||
"font-awesome.css" = 'code/modules/goonchat/browserassets/css/font-awesome.css',
|
||||
"browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css',
|
||||
"browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css',
|
||||
)
|
||||
winset(src, "say", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "asset_cache_browser", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
winset(src, "tooltip", "background-color = [COLOR_DARKMODE_BACKGROUND];text-color = [COLOR_DARKMODE_TEXT]")
|
||||
+133
-169
@@ -85,6 +85,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/facial_hair_color = "000" //Facial hair color
|
||||
var/skin_tone = "caucasian1" //Skin color
|
||||
var/eye_color = "000" //Eye color
|
||||
var/horn_color = "85615a" //Horn color
|
||||
var/datum/species/pref_species = new /datum/species/human() //Mutant race
|
||||
var/list/features = list("mcolor" = "FFF",
|
||||
"tail_lizard" = "Smooth",
|
||||
@@ -96,8 +97,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"frills" = "None",
|
||||
"spines" = "None",
|
||||
"body_markings" = "None",
|
||||
"legs" = "Normal Legs",
|
||||
"moth_wings" = "Plain",
|
||||
"legs" = "Plantigrade",
|
||||
"insect_wings" = "Plain",
|
||||
"insect_fluff" = "None",
|
||||
"mcolor2" = "FFF",
|
||||
"mcolor3" = "FFF",
|
||||
"mam_body_markings" = "Plain",
|
||||
@@ -157,7 +159,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"womb_fluid" = "femcum",
|
||||
"ipc_screen" = "Sunburst",
|
||||
"ipc_antenna" = "None",
|
||||
"flavor_text" = ""
|
||||
"flavor_text" = "",
|
||||
"meat_type" = "Mammalian"
|
||||
)
|
||||
|
||||
var/list/custom_names = list()
|
||||
@@ -172,18 +175,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/list/all_quirks = list()
|
||||
var/list/character_quirks = list()
|
||||
|
||||
//Jobs, uses bitflags
|
||||
var/job_civilian_high = 0
|
||||
var/job_civilian_med = 0
|
||||
var/job_civilian_low = 0
|
||||
|
||||
var/job_medsci_high = 0
|
||||
var/job_medsci_med = 0
|
||||
var/job_medsci_low = 0
|
||||
|
||||
var/job_engsec_high = 0
|
||||
var/job_engsec_med = 0
|
||||
var/job_engsec_low = 0
|
||||
//Job preferences 2.0 - indexed by job title , no key or value implies never
|
||||
var/list/job_preferences = list()
|
||||
|
||||
// Want randomjob if preferences already filled - Donkie
|
||||
var/joblessrole = BERANDOMJOB //defaults to 1 for fewer assistants
|
||||
@@ -241,7 +234,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
return
|
||||
|
||||
#define APPEARANCE_CATEGORY_COLUMN "<td valign='top' width='17%'>"
|
||||
#define MAX_MUTANT_ROWS 4
|
||||
#define MAX_MUTANT_ROWS 5
|
||||
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client)
|
||||
@@ -351,9 +344,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "[TextPreview(features["flavor_text"])]...<BR>"
|
||||
dat += "<h2>Body</h2>"
|
||||
dat += "<b>Gender:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
|
||||
dat += "<b>Species:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
|
||||
dat += "<b>Species:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=species;task=input'>[pref_species.name]</a><BR>"
|
||||
dat += "<b>Custom Species Name:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=custom_species;task=input'>[custom_species ? custom_species : "None"]</a><BR>"
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=all;task=random'>Random Body</A><BR>"
|
||||
dat += "<b>Random Body:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=all;task=random'>Randomize!</A><BR>"
|
||||
dat += "<b>Always Random Body:</b><a href='?_src_=prefs;preference=all'>[be_random_body ? "Yes" : "No"]</A><BR>"
|
||||
dat += "<br><b>Cycle background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=cycle_bg;task=input'>[bgstate]</a><BR>"
|
||||
|
||||
@@ -448,6 +441,19 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=tail_human;task=input'>[features["tail_human"]]</a>"
|
||||
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
|
||||
if("meat_type" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
|
||||
dat += "<h3>Meat Type</h3>"
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=meats;task=input'>[features["meat_type"]]</a>"
|
||||
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
@@ -471,6 +477,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<h3>Horns</h3>"
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=horns;task=input'>[features["horns"]]</a>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[horn_color];'> </span> <a href='?_src_=prefs;preference=horns_color;task=input'>Change</a><BR>"
|
||||
|
||||
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
@@ -537,6 +545,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
|
||||
if("ears" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
@@ -549,6 +558,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
|
||||
if("mam_snouts" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
@@ -573,14 +583,24 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
if("moth_wings" in pref_species.default_features)
|
||||
if("insect_wings" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
|
||||
dat += "<h3>Moth wings</h3>"
|
||||
dat += "<h3>Insect wings</h3>"
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=moth_wings;task=input'>[features["moth_wings"]]</a>"
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=insect_wings;task=input'>[features["insect_wings"]]</a>"
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
if("insect_fluff" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
|
||||
dat += "<h3>Insect Fluff</h3>"
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=insect_fluffs;task=input'>[features["insect_fluff"]]</a>"
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
@@ -681,13 +701,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<h2>Clothing & Equipment</h2>"
|
||||
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.underwear_list[underwear]))
|
||||
dat += "<b>Underwear Color:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undie_color;task=input'>[undie_color]</a>"
|
||||
dat += "<b>Underwear Color:</b> <span style='border:1px solid #161616; background-color: #[undie_color];'> </span> <a href='?_src_=prefs;preference=undie_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Undershirt:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt]))
|
||||
dat += "<b>Undershirt Color:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=shirt_color;task=input'>[shirt_color]</a>"
|
||||
dat += "<b>Undershirt Color:</b> <span style='border:1px solid #161616; background-color: #[shirt_color];'> </span> <a href='?_src_=prefs;preference=shirt_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Socks:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks;task=input'>[socks]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.socks_list[socks]))
|
||||
dat += "<b>Socks Color:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks_color;task=input'>[socks_color]</a>"
|
||||
dat += "<b>Socks Color:</b> <span style='border:1px solid #161616; background-color: #[socks_color];'> </span> <a href='?_src_=prefs;preference=socks_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Backpack:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a>"
|
||||
dat += "<b>Jumpsuit:</b><BR><a href ='?_src_=prefs;preference=suit;task=input'>[jumpsuit_style]</a><BR>"
|
||||
dat += "<b>Uplink Location:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=uplink_loc;task=input'>[uplink_spawn_loc]</a>"
|
||||
@@ -919,11 +939,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<td width=80%><font size=2><b>Description</b></font></td></tr>"
|
||||
for(var/j in GLOB.loadout_items[gear_tab])
|
||||
var/datum/gear/gear = GLOB.loadout_items[gear_tab][j]
|
||||
var/donoritem
|
||||
if(gear.ckeywhitelist && gear.ckeywhitelist.len)
|
||||
donoritem = TRUE
|
||||
if(!(user.ckey in gear.ckeywhitelist))
|
||||
continue
|
||||
var/donoritem = gear.donoritem
|
||||
if(donoritem && !gear.donator_ckey_check(user.ckey))
|
||||
continue
|
||||
var/class_link = ""
|
||||
if(gear.type in chosen_gear)
|
||||
class_link = "style='white-space:normal;' class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(j)];toggle_gear=0'"
|
||||
@@ -994,9 +1012,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
//The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows.
|
||||
var/datum/job/lastJob
|
||||
|
||||
var/datum/job/overflow = SSjob.GetJob(SSjob.overflow_role)
|
||||
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
for(var/datum/job/job in sortList(SSjob.occupations, /proc/cmp_job_display_asc))
|
||||
|
||||
index += 1
|
||||
if((index >= limit) || (job.title in splitJobs))
|
||||
@@ -1013,7 +1029,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/rank = job.title
|
||||
lastJob = job
|
||||
if(jobban_isbanned(user, rank))
|
||||
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;jobbancheck=[rank]'> BANNED</a></td></tr>"
|
||||
HTML += "<font color=red>[rank]</font></td><td><a href='?_src_=prefs;bancheck=[rank]'> BANNED</a></td></tr>"
|
||||
continue
|
||||
var/required_playtime_remaining = job.required_playtime_remaining(user.client)
|
||||
if(required_playtime_remaining)
|
||||
@@ -1023,7 +1039,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/available_in_days = job.available_in_days(user.client)
|
||||
HTML += "<font color=red>[rank]</font></td><td><font color=red> \[IN [(available_in_days)] DAYS\]</font></td></tr>"
|
||||
continue
|
||||
if((job_civilian_low & overflow.flag) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role))
|
||||
if(!user.client.prefs.pref_species.qualifies_for_rank(rank, user.client.prefs.features))
|
||||
if(user.client.prefs.pref_species.id == "human")
|
||||
HTML += "<font color=red>[rank]</font></td><td><font color=red><b> \[MUTANT\]</b></font></td></tr>"
|
||||
else
|
||||
HTML += "<font color=red>[rank]</font></td><td><font color=red><b> \[NON-HUMAN\]</b></font></td></tr>"
|
||||
continue
|
||||
if((job_preferences["[SSjob.overflow_role]"] == JP_LOW) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role))
|
||||
HTML += "<font color=orange>[rank]</font></td><td></td></tr>"
|
||||
continue
|
||||
if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs
|
||||
@@ -1038,32 +1060,32 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/prefUpperLevel = -1 // level to assign on left click
|
||||
var/prefLowerLevel = -1 // level to assign on right click
|
||||
|
||||
if(GetJobDepartment(job, 1) & job.flag)
|
||||
prefLevelLabel = "High"
|
||||
prefLevelColor = "slateblue"
|
||||
prefUpperLevel = 4
|
||||
prefLowerLevel = 2
|
||||
else if(GetJobDepartment(job, 2) & job.flag)
|
||||
prefLevelLabel = "Medium"
|
||||
prefLevelColor = "green"
|
||||
prefUpperLevel = 1
|
||||
prefLowerLevel = 3
|
||||
else if(GetJobDepartment(job, 3) & job.flag)
|
||||
prefLevelLabel = "Low"
|
||||
prefLevelColor = "orange"
|
||||
prefUpperLevel = 2
|
||||
prefLowerLevel = 4
|
||||
else
|
||||
prefLevelLabel = "NEVER"
|
||||
prefLevelColor = "red"
|
||||
prefUpperLevel = 3
|
||||
prefLowerLevel = 1
|
||||
|
||||
switch(job_preferences["[job.title]"])
|
||||
if(JP_HIGH)
|
||||
prefLevelLabel = "High"
|
||||
prefLevelColor = "slateblue"
|
||||
prefUpperLevel = 4
|
||||
prefLowerLevel = 2
|
||||
if(JP_MEDIUM)
|
||||
prefLevelLabel = "Medium"
|
||||
prefLevelColor = "green"
|
||||
prefUpperLevel = 1
|
||||
prefLowerLevel = 3
|
||||
if(JP_LOW)
|
||||
prefLevelLabel = "Low"
|
||||
prefLevelColor = "orange"
|
||||
prefUpperLevel = 2
|
||||
prefLowerLevel = 4
|
||||
else
|
||||
prefLevelLabel = "NEVER"
|
||||
prefLevelColor = "red"
|
||||
prefUpperLevel = 3
|
||||
prefLowerLevel = 1
|
||||
|
||||
HTML += "<a class='white' href='?_src_=prefs;preference=job;task=setJobLevel;level=[prefUpperLevel];text=[rank]' oncontextmenu='javascript:return setJobPrefRedirect([prefLowerLevel], \"[rank]\");'>"
|
||||
|
||||
if(rank == SSjob.overflow_role)//Overflow is special
|
||||
if(job_civilian_low & overflow.flag)
|
||||
if(job_preferences["[SSjob.overflow_role]"] == JP_LOW)
|
||||
HTML += "<font color=green>Yes</font>"
|
||||
else
|
||||
HTML += "<font color=red>No</font>"
|
||||
@@ -1094,61 +1116,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
/datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level)
|
||||
if (!job)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if (level == 1) // to high
|
||||
// remove any other job(s) set to high
|
||||
job_civilian_med |= job_civilian_high
|
||||
job_engsec_med |= job_engsec_high
|
||||
job_medsci_med |= job_medsci_high
|
||||
job_civilian_high = 0
|
||||
job_engsec_high = 0
|
||||
job_medsci_high = 0
|
||||
if (level == JP_HIGH) // to high
|
||||
//Set all other high to medium
|
||||
for(var/j in job_preferences)
|
||||
if(job_preferences["[j]"] == JP_HIGH)
|
||||
job_preferences["[j]"] = JP_MEDIUM
|
||||
//technically break here
|
||||
|
||||
if (job.department_flag == CIVILIAN)
|
||||
job_civilian_low &= ~job.flag
|
||||
job_civilian_med &= ~job.flag
|
||||
job_civilian_high &= ~job.flag
|
||||
|
||||
switch(level)
|
||||
if (1)
|
||||
job_civilian_high |= job.flag
|
||||
if (2)
|
||||
job_civilian_med |= job.flag
|
||||
if (3)
|
||||
job_civilian_low |= job.flag
|
||||
|
||||
return 1
|
||||
else if (job.department_flag == ENGSEC)
|
||||
job_engsec_low &= ~job.flag
|
||||
job_engsec_med &= ~job.flag
|
||||
job_engsec_high &= ~job.flag
|
||||
|
||||
switch(level)
|
||||
if (1)
|
||||
job_engsec_high |= job.flag
|
||||
if (2)
|
||||
job_engsec_med |= job.flag
|
||||
if (3)
|
||||
job_engsec_low |= job.flag
|
||||
|
||||
return 1
|
||||
else if (job.department_flag == MEDSCI)
|
||||
job_medsci_low &= ~job.flag
|
||||
job_medsci_med &= ~job.flag
|
||||
job_medsci_high &= ~job.flag
|
||||
|
||||
switch(level)
|
||||
if (1)
|
||||
job_medsci_high |= job.flag
|
||||
if (2)
|
||||
job_medsci_med |= job.flag
|
||||
if (3)
|
||||
job_medsci_low |= job.flag
|
||||
|
||||
return 1
|
||||
|
||||
return 0
|
||||
job_preferences["[job.title]"] = level
|
||||
return TRUE
|
||||
|
||||
/datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl)
|
||||
if(!SSjob || SSjob.occupations.len <= 0)
|
||||
@@ -1165,64 +1143,29 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
ShowChoices(user)
|
||||
return
|
||||
|
||||
if(role == SSjob.overflow_role)
|
||||
if(job_civilian_low & job.flag)
|
||||
job_civilian_low &= ~job.flag
|
||||
else
|
||||
job_civilian_low |= job.flag
|
||||
SetChoices(user)
|
||||
return 1
|
||||
var/jpval = null
|
||||
switch(desiredLvl)
|
||||
if(3)
|
||||
jpval = JP_LOW
|
||||
if(2)
|
||||
jpval = JP_MEDIUM
|
||||
if(1)
|
||||
jpval = JP_HIGH
|
||||
|
||||
SetJobPreferenceLevel(job, desiredLvl)
|
||||
if(role == SSjob.overflow_role)
|
||||
if(job_preferences["[job.title]"] == JP_LOW)
|
||||
jpval = null
|
||||
else
|
||||
jpval = JP_LOW
|
||||
|
||||
SetJobPreferenceLevel(job, jpval)
|
||||
SetChoices(user)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/datum/preferences/proc/ResetJobs()
|
||||
|
||||
job_civilian_high = 0
|
||||
job_civilian_med = 0
|
||||
job_civilian_low = 0
|
||||
|
||||
job_medsci_high = 0
|
||||
job_medsci_med = 0
|
||||
job_medsci_low = 0
|
||||
|
||||
job_engsec_high = 0
|
||||
job_engsec_med = 0
|
||||
job_engsec_low = 0
|
||||
|
||||
|
||||
/datum/preferences/proc/GetJobDepartment(datum/job/job, level)
|
||||
if(!job || !level)
|
||||
return 0
|
||||
switch(job.department_flag)
|
||||
if(CIVILIAN)
|
||||
switch(level)
|
||||
if(1)
|
||||
return job_civilian_high
|
||||
if(2)
|
||||
return job_civilian_med
|
||||
if(3)
|
||||
return job_civilian_low
|
||||
if(MEDSCI)
|
||||
switch(level)
|
||||
if(1)
|
||||
return job_medsci_high
|
||||
if(2)
|
||||
return job_medsci_med
|
||||
if(3)
|
||||
return job_medsci_low
|
||||
if(ENGSEC)
|
||||
switch(level)
|
||||
if(1)
|
||||
return job_engsec_high
|
||||
if(2)
|
||||
return job_engsec_med
|
||||
if(3)
|
||||
return job_engsec_low
|
||||
return 0
|
||||
job_preferences = list()
|
||||
|
||||
/datum/preferences/proc/SetQuirks(mob/user)
|
||||
if(!SSquirks)
|
||||
@@ -1564,9 +1507,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
eye_color = sanitize_hexcolor(new_eyes)
|
||||
|
||||
if("species")
|
||||
var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races
|
||||
var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_race_names
|
||||
if(result)
|
||||
var/newtype = GLOB.species_list[result]
|
||||
var/newtype = GLOB.species_list[GLOB.roundstart_race_names[result]]
|
||||
pref_species = new newtype()
|
||||
//let's ensure that no weird shit happens on species swapping.
|
||||
custom_species = null
|
||||
@@ -1694,6 +1637,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["tail_human"] = "None"
|
||||
features["tail_lizard"] = "None"
|
||||
|
||||
if("meats")
|
||||
var/new_meat
|
||||
new_meat = input(user, "Choose your character's meat type:", "Character Preference") as null|anything in GLOB.meat_types
|
||||
if(new_meat)
|
||||
features["meat_type"] = new_meat
|
||||
|
||||
if("snout")
|
||||
var/list/snowflake_snouts_list = list()
|
||||
for(var/path in GLOB.snouts_list)
|
||||
@@ -1729,6 +1678,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(new_horns)
|
||||
features["horns"] = new_horns
|
||||
|
||||
if("horns_color")
|
||||
var/new_horn_color = input(user, "Choose your character's horn colour:", "Character Preference","#"+horn_color) as color|null
|
||||
if(new_horn_color)
|
||||
horn_color = sanitize_hexcolor(new_horn_color)
|
||||
|
||||
if("wings")
|
||||
var/new_wings
|
||||
new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.r_wings_list
|
||||
@@ -1763,11 +1717,17 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["legs"] = new_legs
|
||||
update_preview_icon()
|
||||
|
||||
if("moth_wings")
|
||||
var/new_moth_wings
|
||||
new_moth_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.moth_wings_list
|
||||
if(new_moth_wings)
|
||||
features["moth_wings"] = new_moth_wings
|
||||
if("insect_wings")
|
||||
var/new_insect_wings
|
||||
new_insect_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_wings_list
|
||||
if(new_insect_wings)
|
||||
features["insect_wings"] = new_insect_wings
|
||||
|
||||
if("insect_fluffs")
|
||||
var/new_insect_fluff
|
||||
new_insect_fluff = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_fluffs_list
|
||||
if(new_insect_fluff)
|
||||
features["insect_fluff"] = new_insect_fluff
|
||||
|
||||
if("s_tone")
|
||||
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones
|
||||
@@ -2245,7 +2205,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(!is_loadout_slot_available(G.category))
|
||||
to_chat(user, "<span class='danger'>You cannot take this loadout, as you've already chosen too many of the same category!</span>")
|
||||
return
|
||||
if(G.ckeywhitelist && G.ckeywhitelist.len && !(user.ckey in G.ckeywhitelist))
|
||||
if(G.donoritem && !G.donator_ckey_check(user.ckey))
|
||||
to_chat(user, "<span class='danger'>This is an item intended for donator use only. You are not authorized to use this item.</span>")
|
||||
return
|
||||
if(gear_points >= initial(G.cost))
|
||||
@@ -2287,6 +2247,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
organ_eyes.old_eye_color = eye_color
|
||||
character.hair_color = hair_color
|
||||
character.facial_hair_color = facial_hair_color
|
||||
character.horn_color = horn_color
|
||||
|
||||
character.skin_tone = skin_tone
|
||||
character.hair_style = hair_style
|
||||
@@ -2327,7 +2288,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if("xenotail" in pref_species.default_features)
|
||||
character.dna.species.mutant_bodyparts |= "xenotail"
|
||||
|
||||
if(("legs" in character.dna.species.mutant_bodyparts) && character.dna.features["legs"] == "Digitigrade Legs")
|
||||
if("meat_type" in pref_species.default_features)
|
||||
character.type_of_meat = GLOB.meat_types[features["meat_type"]]
|
||||
|
||||
if(("legs" in character.dna.species.mutant_bodyparts) && (character.dna.features["legs"] == "Digitigrade" || character.dna.features["legs"] == "Avian"))
|
||||
pref_species.species_traits |= DIGITIGRADE
|
||||
else
|
||||
pref_species.species_traits -= DIGITIGRADE
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
// You do not need to raise this if you are adding new values that have sane defaults.
|
||||
// Only raise this value when changing the meaning/format/name/layout of an existing value
|
||||
// where you would want the updater procs below to run
|
||||
#define SAVEFILE_VERSION_MAX 20
|
||||
#define SAVEFILE_VERSION_MAX 23
|
||||
|
||||
/*
|
||||
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
|
||||
@@ -49,6 +49,65 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
pda_style = "mono"
|
||||
if(current_version < 20)
|
||||
pda_color = "#808000"
|
||||
if((current_version < 21) && features["meat_type"] && (features["meat_type"] == null))
|
||||
features["meat_type"] = "Mammalian"
|
||||
if(current_version < 22)
|
||||
|
||||
job_preferences = list() //It loaded null from nonexistant savefile field.
|
||||
|
||||
var/job_civilian_high = 0
|
||||
var/job_civilian_med = 0
|
||||
var/job_civilian_low = 0
|
||||
|
||||
var/job_medsci_high = 0
|
||||
var/job_medsci_med = 0
|
||||
var/job_medsci_low = 0
|
||||
|
||||
var/job_engsec_high = 0
|
||||
var/job_engsec_med = 0
|
||||
var/job_engsec_low = 0
|
||||
|
||||
S["job_civilian_high"] >> job_civilian_high
|
||||
S["job_civilian_med"] >> job_civilian_med
|
||||
S["job_civilian_low"] >> job_civilian_low
|
||||
S["job_medsci_high"] >> job_medsci_high
|
||||
S["job_medsci_med"] >> job_medsci_med
|
||||
S["job_medsci_low"] >> job_medsci_low
|
||||
S["job_engsec_high"] >> job_engsec_high
|
||||
S["job_engsec_med"] >> job_engsec_med
|
||||
S["job_engsec_low"] >> job_engsec_low
|
||||
|
||||
//Can't use SSjob here since this happens right away on login
|
||||
for(var/job in subtypesof(/datum/job))
|
||||
var/datum/job/J = job
|
||||
var/new_value
|
||||
var/fval = initial(J.flag)
|
||||
switch(initial(J.department_flag))
|
||||
if(CIVILIAN)
|
||||
if(job_civilian_high & fval)
|
||||
new_value = JP_HIGH
|
||||
else if(job_civilian_med & fval)
|
||||
new_value = JP_MEDIUM
|
||||
else if(job_civilian_low & fval)
|
||||
new_value = JP_LOW
|
||||
if(MEDSCI)
|
||||
if(job_medsci_high & fval)
|
||||
new_value = JP_HIGH
|
||||
else if(job_medsci_med & fval)
|
||||
new_value = JP_MEDIUM
|
||||
else if(job_medsci_low & fval)
|
||||
new_value = JP_LOW
|
||||
if(ENGSEC)
|
||||
if(job_engsec_high & fval)
|
||||
new_value = JP_HIGH
|
||||
else if(job_engsec_med & fval)
|
||||
new_value = JP_MEDIUM
|
||||
else if(job_engsec_low & fval)
|
||||
new_value = JP_LOW
|
||||
if(new_value)
|
||||
job_preferences["[initial(J.title)]"] = new_value
|
||||
else if(current_version < 23) // we are fixing a gamebreaking bug.
|
||||
job_preferences = list() //It loaded null from nonexistant savefile field.
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey)
|
||||
@@ -246,6 +305,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
var/species_id
|
||||
S["species"] >> species_id
|
||||
if(species_id)
|
||||
if(species_id == "avian" || species_id == "aquatic")
|
||||
species_id = "mammal"
|
||||
else if(species_id == "moth")
|
||||
species_id = "insect"
|
||||
|
||||
var/newtype = GLOB.species_list[species_id]
|
||||
if(newtype)
|
||||
pref_species = new newtype
|
||||
@@ -254,28 +318,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["features["mcolor"]"] , "#FFF")
|
||||
|
||||
//Character
|
||||
S["real_name"] >> real_name
|
||||
S["nameless"] >> nameless
|
||||
S["custom_species"] >> custom_species
|
||||
S["name_is_always_random"] >> be_random_name
|
||||
S["body_is_always_random"] >> be_random_body
|
||||
S["gender"] >> gender
|
||||
S["age"] >> age
|
||||
S["hair_color"] >> hair_color
|
||||
S["facial_hair_color"] >> facial_hair_color
|
||||
S["eye_color"] >> eye_color
|
||||
S["skin_tone"] >> skin_tone
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["undie_color"] >> undie_color
|
||||
S["undershirt"] >> undershirt
|
||||
S["shirt_color"] >> shirt_color
|
||||
S["socks"] >> socks
|
||||
S["socks_color"] >> socks_color
|
||||
S["backbag"] >> backbag
|
||||
S["jumpsuit_style"] >> jumpsuit_style
|
||||
S["uplink_loc"] >> uplink_spawn_loc
|
||||
S["real_name"] >> real_name
|
||||
S["nameless"] >> nameless
|
||||
S["custom_species"] >> custom_species
|
||||
S["name_is_always_random"] >> be_random_name
|
||||
S["body_is_always_random"] >> be_random_body
|
||||
S["gender"] >> gender
|
||||
S["age"] >> age
|
||||
S["hair_color"] >> hair_color
|
||||
S["facial_hair_color"] >> facial_hair_color
|
||||
S["eye_color"] >> eye_color
|
||||
S["skin_tone"] >> skin_tone
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["undie_color"] >> undie_color
|
||||
S["undershirt"] >> undershirt
|
||||
S["shirt_color"] >> shirt_color
|
||||
S["socks"] >> socks
|
||||
S["socks_color"] >> socks_color
|
||||
S["horn_color"] >> horn_color
|
||||
S["backbag"] >> backbag
|
||||
S["jumpsuit_style"] >> jumpsuit_style
|
||||
S["uplink_loc"] >> uplink_spawn_loc
|
||||
S["feature_mcolor"] >> features["mcolor"]
|
||||
S["feature_lizard_tail"] >> features["tail_lizard"]
|
||||
S["feature_lizard_snout"] >> features["snout"]
|
||||
@@ -284,29 +349,23 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_lizard_spines"] >> features["spines"]
|
||||
S["feature_lizard_body_markings"] >> features["body_markings"]
|
||||
S["feature_lizard_legs"] >> features["legs"]
|
||||
S["feature_moth_wings"] >> features["moth_wings"]
|
||||
S["feature_human_tail"] >> features["tail_human"]
|
||||
S["feature_human_ears"] >> features["ears"]
|
||||
S["feature_insect_wings"] >> features["insect_wings"]
|
||||
S["feature_insect_fluff"] >> features["insect_fluff"]
|
||||
|
||||
//Custom names
|
||||
for(var/custom_name_id in GLOB.preferences_custom_names)
|
||||
var/savefile_slot_name = custom_name_id + "_name" //TODO remove this
|
||||
S[savefile_slot_name] >> custom_names[custom_name_id]
|
||||
|
||||
S["preferred_ai_core_display"] >> preferred_ai_core_display
|
||||
S["prefered_security_department"] >> prefered_security_department
|
||||
S["preferred_ai_core_display"] >> preferred_ai_core_display
|
||||
S["prefered_security_department"] >> prefered_security_department
|
||||
|
||||
//Jobs
|
||||
S["joblessrole"] >> joblessrole
|
||||
S["job_civilian_high"] >> job_civilian_high
|
||||
S["job_civilian_med"] >> job_civilian_med
|
||||
S["job_civilian_low"] >> job_civilian_low
|
||||
S["job_medsci_high"] >> job_medsci_high
|
||||
S["job_medsci_med"] >> job_medsci_med
|
||||
S["job_medsci_low"] >> job_medsci_low
|
||||
S["job_engsec_high"] >> job_engsec_high
|
||||
S["job_engsec_med"] >> job_engsec_med
|
||||
S["job_engsec_low"] >> job_engsec_low
|
||||
//Load prefs
|
||||
S["job_preferences"] >> job_preferences
|
||||
|
||||
//Quirks
|
||||
S["all_quirks"] >> all_quirks
|
||||
@@ -325,6 +384,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
|
||||
S["feature_taur"] >> features["taur"]
|
||||
S["feature_mam_snouts"] >> features["mam_snouts"]
|
||||
S["feature_meat"] >> features["meat_type"]
|
||||
//Xeno features
|
||||
S["feature_xeno_tail"] >> features["xenotail"]
|
||||
S["feature_xeno_dors"] >> features["xenodorsal"]
|
||||
@@ -374,11 +434,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
//Sanitize
|
||||
|
||||
real_name = reject_bad_name(real_name)
|
||||
gender = sanitize_gender(gender, TRUE, TRUE)
|
||||
real_name = reject_bad_name(real_name)
|
||||
gender = sanitize_gender(gender, TRUE, TRUE)
|
||||
if(!real_name)
|
||||
real_name = random_unique_name(gender)
|
||||
custom_species = reject_bad_name(custom_species)
|
||||
real_name = random_unique_name(gender)
|
||||
custom_species = reject_bad_name(custom_species)
|
||||
for(var/custom_name_id in GLOB.preferences_custom_names)
|
||||
var/namedata = GLOB.preferences_custom_names[custom_name_id]
|
||||
custom_names[custom_name_id] = reject_bad_name(custom_names[custom_name_id],namedata["allow_numbers"])
|
||||
@@ -388,57 +448,55 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(!features["mcolor"] || features["mcolor"] == "#000")
|
||||
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
|
||||
nameless = sanitize_integer(nameless, 0, 1, initial(nameless))
|
||||
nameless = sanitize_integer(nameless, 0, 1, initial(nameless))
|
||||
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
|
||||
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
|
||||
|
||||
if(gender == MALE)
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list)
|
||||
else
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
|
||||
underwear = sanitize_inlist(underwear, GLOB.underwear_list)
|
||||
undie_color = sanitize_hexcolor(undie_color, 6, 1, initial(undie_color))
|
||||
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
|
||||
shirt_color = sanitize_hexcolor(shirt_color, 6, 1, initial(shirt_color))
|
||||
socks = sanitize_inlist(socks, GLOB.socks_list)
|
||||
socks_color = sanitize_hexcolor(socks_color, 6, 1, initial(socks_color))
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
hair_color = sanitize_hexcolor(hair_color, 3, 0)
|
||||
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
|
||||
eye_color = sanitize_hexcolor(eye_color, 3, 0)
|
||||
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
|
||||
backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
|
||||
jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style))
|
||||
uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
|
||||
features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
|
||||
features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard)
|
||||
features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human)
|
||||
features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list)
|
||||
features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list)
|
||||
features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
|
||||
features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
|
||||
features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
|
||||
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
|
||||
underwear = sanitize_inlist(underwear, GLOB.underwear_list)
|
||||
undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color))
|
||||
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
|
||||
shirt_color = sanitize_hexcolor(shirt_color, 3, FALSE, initial(shirt_color))
|
||||
socks = sanitize_inlist(socks, GLOB.socks_list)
|
||||
socks_color = sanitize_hexcolor(socks_color, 3, FALSE, initial(socks_color))
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
hair_color = sanitize_hexcolor(hair_color, 3, 0)
|
||||
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
|
||||
eye_color = sanitize_hexcolor(eye_color, 3, 0)
|
||||
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
|
||||
horn_color = sanitize_hexcolor(horn_color, 3, FALSE)
|
||||
backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
|
||||
jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style))
|
||||
uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
|
||||
features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
|
||||
features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard)
|
||||
features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human)
|
||||
features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list)
|
||||
features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list)
|
||||
features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
|
||||
features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
|
||||
features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
|
||||
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
|
||||
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list)
|
||||
features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list)
|
||||
features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
|
||||
features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
|
||||
|
||||
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
|
||||
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
|
||||
job_civilian_med = sanitize_integer(job_civilian_med, 0, 65535, initial(job_civilian_med))
|
||||
job_civilian_low = sanitize_integer(job_civilian_low, 0, 65535, initial(job_civilian_low))
|
||||
job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high))
|
||||
job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med))
|
||||
job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low))
|
||||
job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high))
|
||||
job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med))
|
||||
job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low))
|
||||
//Validate job prefs
|
||||
for(var/j in job_preferences)
|
||||
if(job_preferences["[j]"] != JP_LOW && job_preferences["[j]"] != JP_MEDIUM && job_preferences["[j]"] != JP_HIGH)
|
||||
job_preferences -= j
|
||||
|
||||
all_quirks = SANITIZE_LIST(all_quirks)
|
||||
|
||||
positive_quirks = SANITIZE_LIST(positive_quirks)
|
||||
negative_quirks = SANITIZE_LIST(negative_quirks)
|
||||
neutral_quirks = SANITIZE_LIST(neutral_quirks)
|
||||
neutral_quirks = SANITIZE_LIST(neutral_quirks)
|
||||
|
||||
cit_character_pref_load(S)
|
||||
|
||||
@@ -460,31 +518,32 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.)
|
||||
|
||||
//Character
|
||||
WRITE_FILE(S["real_name"] , real_name)
|
||||
WRITE_FILE(S["nameless"] , nameless)
|
||||
WRITE_FILE(S["custom_species"] , custom_species)
|
||||
WRITE_FILE(S["name_is_always_random"] , be_random_name)
|
||||
WRITE_FILE(S["body_is_always_random"] , be_random_body)
|
||||
WRITE_FILE(S["gender"] , gender)
|
||||
WRITE_FILE(S["age"] , age)
|
||||
WRITE_FILE(S["hair_color"] , hair_color)
|
||||
WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
|
||||
WRITE_FILE(S["eye_color"] , eye_color)
|
||||
WRITE_FILE(S["skin_tone"] , skin_tone)
|
||||
WRITE_FILE(S["hair_style_name"] , hair_style)
|
||||
WRITE_FILE(S["facial_style_name"] , facial_hair_style)
|
||||
WRITE_FILE(S["underwear"] , underwear)
|
||||
WRITE_FILE(S["undie_color"] , undie_color)
|
||||
WRITE_FILE(S["undershirt"] , undershirt)
|
||||
WRITE_FILE(S["shirt_color"] , shirt_color)
|
||||
WRITE_FILE(S["socks"] , socks)
|
||||
WRITE_FILE(S["socks_color"] , socks_color)
|
||||
WRITE_FILE(S["backbag"] , backbag)
|
||||
WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
|
||||
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
|
||||
WRITE_FILE(S["species"] , pref_species.id)
|
||||
WRITE_FILE(S["real_name"] , real_name)
|
||||
WRITE_FILE(S["nameless"] , nameless)
|
||||
WRITE_FILE(S["custom_species"] , custom_species)
|
||||
WRITE_FILE(S["name_is_always_random"] , be_random_name)
|
||||
WRITE_FILE(S["body_is_always_random"] , be_random_body)
|
||||
WRITE_FILE(S["gender"] , gender)
|
||||
WRITE_FILE(S["age"] , age)
|
||||
WRITE_FILE(S["hair_color"] , hair_color)
|
||||
WRITE_FILE(S["facial_hair_color"] , facial_hair_color)
|
||||
WRITE_FILE(S["eye_color"] , eye_color)
|
||||
WRITE_FILE(S["skin_tone"] , skin_tone)
|
||||
WRITE_FILE(S["hair_style_name"] , hair_style)
|
||||
WRITE_FILE(S["facial_style_name"] , facial_hair_style)
|
||||
WRITE_FILE(S["underwear"] , underwear)
|
||||
WRITE_FILE(S["undie_color"] , undie_color)
|
||||
WRITE_FILE(S["undershirt"] , undershirt)
|
||||
WRITE_FILE(S["shirt_color"] , shirt_color)
|
||||
WRITE_FILE(S["socks"] , socks)
|
||||
WRITE_FILE(S["socks_color"] , socks_color)
|
||||
WRITE_FILE(S["horn_color"] , horn_color)
|
||||
WRITE_FILE(S["backbag"] , backbag)
|
||||
WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
|
||||
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
|
||||
WRITE_FILE(S["species"] , pref_species.id)
|
||||
WRITE_FILE(S["feature_mcolor"] , features["mcolor"])
|
||||
WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"])
|
||||
WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"])
|
||||
WRITE_FILE(S["feature_human_tail"] , features["tail_human"])
|
||||
WRITE_FILE(S["feature_lizard_snout"] , features["snout"])
|
||||
WRITE_FILE(S["feature_lizard_horns"] , features["horns"])
|
||||
@@ -492,28 +551,23 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["feature_lizard_frills"] , features["frills"])
|
||||
WRITE_FILE(S["feature_lizard_spines"] , features["spines"])
|
||||
WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"])
|
||||
WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
|
||||
WRITE_FILE(S["feature_moth_wings"] , features["moth_wings"])
|
||||
WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
|
||||
WRITE_FILE(S["feature_insect_wings"] , features["insect_wings"])
|
||||
WRITE_FILE(S["feature_insect_fluff"] , features["insect_fluff"])
|
||||
WRITE_FILE(S["feature_meat"] , features["meat_type"])
|
||||
|
||||
//Custom names
|
||||
for(var/custom_name_id in GLOB.preferences_custom_names)
|
||||
var/savefile_slot_name = custom_name_id + "_name" //TODO remove this
|
||||
WRITE_FILE(S[savefile_slot_name],custom_names[custom_name_id])
|
||||
|
||||
WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display)
|
||||
WRITE_FILE(S["prefered_security_department"] , prefered_security_department)
|
||||
WRITE_FILE(S["preferred_ai_core_display"] , preferred_ai_core_display)
|
||||
WRITE_FILE(S["prefered_security_department"] , prefered_security_department)
|
||||
|
||||
//Jobs
|
||||
WRITE_FILE(S["joblessrole"] , joblessrole)
|
||||
WRITE_FILE(S["job_civilian_high"] , job_civilian_high)
|
||||
WRITE_FILE(S["job_civilian_med"] , job_civilian_med)
|
||||
WRITE_FILE(S["job_civilian_low"] , job_civilian_low)
|
||||
WRITE_FILE(S["job_medsci_high"] , job_medsci_high)
|
||||
WRITE_FILE(S["job_medsci_med"] , job_medsci_med)
|
||||
WRITE_FILE(S["job_medsci_low"] , job_medsci_low)
|
||||
WRITE_FILE(S["job_engsec_high"] , job_engsec_high)
|
||||
WRITE_FILE(S["job_engsec_med"] , job_engsec_med)
|
||||
WRITE_FILE(S["job_engsec_low"] , job_engsec_low)
|
||||
//Write prefs
|
||||
WRITE_FILE(S["job_preferences"] , job_preferences)
|
||||
|
||||
//Quirks
|
||||
WRITE_FILE(S["all_quirks"] , all_quirks)
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
GLOBAL_VAR_INIT(LOOC_COLOR, null)//If this is null, use the CSS for OOC. Otherwise, use a custom colour.
|
||||
GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
|
||||
|
||||
/client/verb/looc(msg as text)
|
||||
set name = "LOOC"
|
||||
set desc = "Local OOC, seen only by those in view."
|
||||
@@ -59,30 +62,17 @@
|
||||
continue //Also handled later.
|
||||
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
// var/display_name = src.key
|
||||
// if(holder)
|
||||
// if(holder.fakekey)
|
||||
// if(C.holder)
|
||||
// display_name = "[holder.fakekey]/([src.key])"
|
||||
// else
|
||||
// display_name = holder.fakekey
|
||||
to_chat(C,"<font color='#6699CC'><span class='ooc'><span class='prefix'>LOOC:</span> <EM>[src.mob.name]:</EM> <span class='message'>[msg]</span></span></font>")
|
||||
if(GLOB.LOOC_COLOR)
|
||||
to_chat(C, "<font color='[GLOB.LOOC_COLOR]'><b><span class='prefix'>LOOC:</span> <EM>[src.mob.name]:</EM> <span class='message'>[msg]</span></b></font>")
|
||||
else
|
||||
to_chat(C, "<span class='looc'><span class='prefix'>LOOC:</span> <EM>[src.mob.name]:</EM> <span class='message'>[msg]</span></span>")
|
||||
|
||||
for(var/client/C in GLOB.admins)
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
var/prefix = "(R)LOOC"
|
||||
if (C.mob in heard)
|
||||
prefix = "LOOC"
|
||||
to_chat(C,"<font color='#6699CC'><span class='ooc'>[ADMIN_FLW(usr)]<span class='prefix'>[prefix]:</span> <EM>[src.key]/[src.mob.name]:</EM> <span class='message'>[msg]</span></span></font>")
|
||||
|
||||
/*for(var/mob/dead/observer/G in world)
|
||||
if(!G.client)
|
||||
continue
|
||||
var/client/C = G.client
|
||||
if (C in GLOB.admins)
|
||||
continue //handled earlier.
|
||||
if(C.prefs.toggles & CHAT_OOC)
|
||||
var/prefix = "(G)LOOC"
|
||||
if (C.mob in heard)
|
||||
prefix = "LOOC"
|
||||
to_chat(C,"<font color='#6699CC'><span class='ooc'><span class='prefix'>[prefix]:</span> <EM>[src.key]/[src.mob.name]:</EM> <span class='message'>[msg]</span></span></font>")*/
|
||||
if(GLOB.LOOC_COLOR)
|
||||
to_chat(C, "<font color='[GLOB.LOOC_COLOR]'><b>[ADMIN_FLW(usr)] <span class='prefix'>[prefix]:</span> <EM>[src.key]/[src.mob.name]:</EM> <span class='message'>[msg]</span></b></font>")
|
||||
else
|
||||
to_chat(C, "<span class='looc'>[ADMIN_FLW(usr)] <span class='prefix'>[prefix]:</span> <EM>[src.key]/[src.mob.name]:</EM> <span class='message'>[msg]</span></span>")
|
||||
|
||||
@@ -6,21 +6,18 @@
|
||||
name = "purple sunglasses"
|
||||
icon_state = "sun_purple"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/star
|
||||
name = "star-shaped sunglasses"
|
||||
desc = "Novelty sunglasses, both lenses are in the shape of a star."
|
||||
icon_state = "sun_star"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/rockstar
|
||||
name = "red star-shaped sunglasses"
|
||||
desc = "Novelty sunglasses with a fancy silver frame and two red-tinted star-shaped lenses. You should probably stomp on them and get a pair of normal ones."
|
||||
icon_state = "sun_star_silver"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
|
||||
|
||||
/obj/item/clothing/glasses/gglasses
|
||||
name = "Green Glasses"
|
||||
@@ -28,7 +25,6 @@
|
||||
icon_state = "gglasses"
|
||||
item_state = "gglasses"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
|
||||
|
||||
/obj/item/clothing/glasses/welding/superior
|
||||
name = "superior welding goggles"
|
||||
@@ -36,7 +32,6 @@
|
||||
icon_state = "rwelding-g"
|
||||
item_state = "rwelding-g"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
flash_protect = 2
|
||||
tint = 1
|
||||
|
||||
@@ -4,4 +4,3 @@
|
||||
icon = 'modular_citadel/icons/obj/clothing/cit_hats.dmi'
|
||||
icon_state = "hunter"
|
||||
item_state = "hunter_worn"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
@@ -129,3 +129,14 @@
|
||||
icon_state = "emtsoft"
|
||||
item_color = "emt"
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/clothing/head/soft/baseball
|
||||
name = "baseball cap"
|
||||
desc = "It's a robust baseball hat, this one belongs to syndicate major league team."
|
||||
icon_state = "baseballsoft"
|
||||
item_color = "baseballsoft"
|
||||
item_state = "baseballsoft"
|
||||
flags_inv = HIDEEYES|HIDEFACE
|
||||
armor = list("melee" = 35, "bullet" = 35, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 90)
|
||||
strip_delay = 90 //You dont take a Major Leage cap
|
||||
dog_fashion = null
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/dredd
|
||||
name = "Judge Helmet"
|
||||
desc = "Judge, Jury, and Executioner."
|
||||
@@ -12,7 +11,6 @@
|
||||
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
|
||||
strip_delay = 80
|
||||
dog_fashion = null
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/helmet/aviatorhelmet
|
||||
name = "Aviator Helmet"
|
||||
@@ -21,15 +19,12 @@
|
||||
item_state = "aviator_helmet"
|
||||
icon_state = "aviator_helmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/helmet/biker
|
||||
name = "Biker's Helmet"
|
||||
desc = "This helmet should protect you from russians and masked vigilantes."
|
||||
armor = list(melee = 25, bullet = 15, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
icon_state = "biker_helmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
|
||||
|
||||
/obj/item/clothing/head/helmet/richard
|
||||
@@ -38,7 +33,6 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
icon_state = "richard"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
|
||||
|
||||
/obj/item/clothing/head/helmet/megahelmet
|
||||
@@ -47,7 +41,6 @@
|
||||
icon_state = "megahelmet"
|
||||
item_state = "megahelmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/protohelmet
|
||||
@@ -56,7 +49,6 @@
|
||||
icon_state = "protohelmet"
|
||||
item_state = "protohelmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
siemens_coefficient = 1
|
||||
|
||||
/obj/item/clothing/head/helmet/megaxhelmet
|
||||
@@ -65,7 +57,6 @@
|
||||
icon_state = "megaxhelmet"
|
||||
item_state = "megaxhelmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/helmet/joehelmet
|
||||
name = "Sniper Helmet"
|
||||
@@ -74,7 +65,6 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
|
||||
item_state = "joehelmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/helmet/doomguy
|
||||
name = "Doomguy's helmet"
|
||||
@@ -83,7 +73,6 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
|
||||
item_state = "doom"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
armor = list(melee = 50, bullet = 40, laser = 40,energy = 40, bomb = 5, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/neorussian
|
||||
@@ -92,8 +81,6 @@
|
||||
icon_state = "nr_helmet"
|
||||
item_state = "nr_helmet"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
|
||||
/obj/item/clothing/head/stalhelm
|
||||
name = "Stalhelm"
|
||||
@@ -101,7 +88,6 @@
|
||||
icon_state = "stalhelm"
|
||||
item_state = "stalhelm"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/panzer
|
||||
name = "Panzer Cap"
|
||||
@@ -109,7 +95,6 @@
|
||||
icon_state = "panzercap"
|
||||
item_state = "panzercap"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/naziofficer
|
||||
name = "Officer Cap"
|
||||
@@ -117,8 +102,6 @@
|
||||
icon_state = "officercap"
|
||||
item_state = "officercap"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
|
||||
/obj/item/clothing/head/russobluecamohat
|
||||
name = "russian blue camo beret"
|
||||
@@ -133,7 +116,6 @@
|
||||
icon_state = "russofurhat"
|
||||
item_state = "russofurhat"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/squatter_hat
|
||||
name = "slav squatter hat"
|
||||
@@ -141,7 +123,6 @@
|
||||
item_state = "squatter_hat"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
desc = "Cyka blyat."
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/snake
|
||||
name = "snake head"
|
||||
@@ -149,8 +130,6 @@
|
||||
icon_state = "snakehead"
|
||||
item_state = "snakehead"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/mummy_rags
|
||||
name = "mummy rags"
|
||||
desc = "Ancient rags taken off from some mummy."
|
||||
@@ -158,7 +137,6 @@
|
||||
item_state = "mummy"
|
||||
item_color = "mummy"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
|
||||
|
||||
/obj/item/clothing/head/clownpiece
|
||||
@@ -167,7 +145,6 @@
|
||||
icon_state = "clownpiece"
|
||||
item_state = "clownpiece"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/mitre
|
||||
name = "mitre"
|
||||
@@ -175,7 +152,6 @@
|
||||
icon_state = "mitre"
|
||||
item_state = "mitre"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
/obj/item/clothing/head/tinfoil
|
||||
name = "tinfoil hat"
|
||||
@@ -183,7 +159,6 @@
|
||||
icon_state = "foilhat"
|
||||
item_state = "paper"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
siemens_coefficient = 2
|
||||
|
||||
/obj/item/clothing/head/celtic
|
||||
@@ -192,4 +167,3 @@
|
||||
icon_state = "celtic_crown"
|
||||
item_state = "celtic_crown"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
|
||||
@@ -3,18 +3,15 @@
|
||||
desc = "Some pranksters are truly magical."
|
||||
icon_state = "wizzclown"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
|
||||
|
||||
/obj/item/clothing/mask/chapmask
|
||||
name = "venetian mask"
|
||||
desc = "A plain porcelain mask that covers the entire face. Standard attire for particularly unspeakable religions. The eyes are wide shut."
|
||||
icon_state = "chapmask"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
|
||||
|
||||
/obj/item/clothing/mask/neorussian
|
||||
name = "neo-Russian mask"
|
||||
desc = "Somehow, it makes you act and look way more polite than usual."
|
||||
icon_state = "nr_mask"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
|
||||
|
||||
@@ -45,16 +45,23 @@
|
||||
R.recalculateChannels()
|
||||
|
||||
/datum/outfit/ert/commander/alert
|
||||
name = "ERT Commander - High Alert"
|
||||
name = "ERT Commander - Amber Alert"
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert
|
||||
glasses = /obj/item/clothing/glasses/thermal/eyepatch
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/gun/energy/pulse/pistol/loyalpin=1)
|
||||
/obj/item/gun/energy/e_gun=1)
|
||||
l_pocket = /obj/item/melee/transforming/energy/sword/saber
|
||||
|
||||
/datum/outfit/ert/commander/alert/red
|
||||
name = "ERT Commander - Red Alert"
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/gun/energy/pulse/pistol/loyalpin=1)
|
||||
|
||||
/datum/outfit/ert/security
|
||||
name = "ERT Security"
|
||||
|
||||
@@ -80,15 +87,22 @@
|
||||
R.recalculateChannels()
|
||||
|
||||
/datum/outfit/ert/security/alert
|
||||
name = "ERT Security - High Alert"
|
||||
name = "ERT Security - Amber Alert"
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/sec
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/storage/box/handcuffs=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/gun/energy/pulse/carbine/loyalpin=1)
|
||||
/obj/item/gun/energy/e_gun/stun=1)
|
||||
|
||||
/datum/outfit/ert/security/alert/red
|
||||
name = "ERT Security - Red Alert"
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/storage/box/handcuffs=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/gun/energy/pulse/carbine/loyalpin=1)
|
||||
|
||||
/datum/outfit/ert/medic
|
||||
name = "ERT Medic"
|
||||
@@ -117,9 +131,18 @@
|
||||
R.recalculateChannels()
|
||||
|
||||
/datum/outfit/ert/medic/alert
|
||||
name = "ERT Medic - High Alert"
|
||||
name = "ERT Medic - Amber Alert"
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/med
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/gun/energy/e_gun=1,\
|
||||
/obj/item/reagent_containers/hypospray/combat/nanites=1,\
|
||||
/obj/item/gun/medbeam=1)
|
||||
|
||||
/datum/outfit/ert/medic/alert/red
|
||||
name = "ERT Medic - Red Alert"
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
@@ -154,9 +177,17 @@
|
||||
R.recalculateChannels()
|
||||
|
||||
/datum/outfit/ert/engineer/alert
|
||||
name = "ERT Engineer - High Alert"
|
||||
name = "ERT Engineer - Amber Alert"
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/engi
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
/obj/item/gun/energy/e_gun=1,\
|
||||
/obj/item/construction/rcd/combat=1)
|
||||
|
||||
/datum/outfit/ert/engineer/alert/red
|
||||
name = "ERT Engineer - Red Alert"
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
/datum/outfit/plasmaman/bar
|
||||
name = "Bartender Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/white
|
||||
uniform = /obj/item/clothing/under/plasmaman/enviroslacks
|
||||
|
||||
/datum/outfit/plasmaman/chef
|
||||
name = "Chef Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/white
|
||||
uniform = /obj/item/clothing/under/plasmaman/chef
|
||||
|
||||
/datum/outfit/plasmaman/botany
|
||||
name = "Botany Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/botany
|
||||
uniform = /obj/item/clothing/under/plasmaman/botany
|
||||
|
||||
/datum/outfit/plasmaman/curator
|
||||
name = "Curator Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/curator
|
||||
uniform = /obj/item/clothing/under/plasmaman/curator
|
||||
|
||||
/datum/outfit/plasmaman/chaplain
|
||||
name = "Chaplain Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/chaplain
|
||||
uniform = /obj/item/clothing/under/plasmaman/chaplain
|
||||
|
||||
/datum/outfit/plasmaman/janitor
|
||||
name = "Janitor Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/janitor
|
||||
uniform = /obj/item/clothing/under/plasmaman/janitor
|
||||
|
||||
/datum/outfit/plasmaman/hop
|
||||
name = "Head of Personell Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/hop
|
||||
uniform = /obj/item/clothing/under/plasmaman/hop
|
||||
|
||||
/datum/outfit/plasmaman/captain
|
||||
name = "Captain Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/captain
|
||||
uniform = /obj/item/clothing/under/plasmaman/captain
|
||||
|
||||
/datum/outfit/plasmaman/security
|
||||
name = "Security Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/security
|
||||
uniform = /obj/item/clothing/under/plasmaman/security
|
||||
ears = /obj/item/radio/headset/headset_sec
|
||||
|
||||
/datum/outfit/plasmaman/detective
|
||||
name = "Detective Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/white
|
||||
uniform = /obj/item/clothing/under/plasmaman/enviroslacks
|
||||
|
||||
/datum/outfit/plasmaman/warden
|
||||
name = "Warden Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/security/warden
|
||||
uniform = /obj/item/clothing/under/plasmaman/security/warden
|
||||
|
||||
/datum/outfit/plasmaman/hos
|
||||
name = "Head of Security Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/security/hos
|
||||
uniform = /obj/item/clothing/under/plasmaman/security/hos
|
||||
|
||||
/datum/outfit/plasmaman/cargo
|
||||
name = "Cargo Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/cargo
|
||||
uniform = /obj/item/clothing/under/plasmaman/cargo
|
||||
|
||||
/datum/outfit/plasmaman/mining
|
||||
name = "Mining Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/mining
|
||||
uniform = /obj/item/clothing/under/plasmaman/mining
|
||||
|
||||
/datum/outfit/plasmaman/medical
|
||||
name = "Medical Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/medical
|
||||
uniform = /obj/item/clothing/under/plasmaman/medical
|
||||
|
||||
/datum/outfit/plasmaman/cmo
|
||||
name = "Chief Medical Officer Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/cmo
|
||||
uniform = /obj/item/clothing/under/plasmaman/cmo
|
||||
|
||||
/datum/outfit/plasmaman/viro
|
||||
name = "Virology Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/viro
|
||||
uniform = /obj/item/clothing/under/plasmaman/viro
|
||||
|
||||
/datum/outfit/plasmaman/chemist
|
||||
name = "Chemist Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/chemist
|
||||
uniform = /obj/item/clothing/under/plasmaman/chemist
|
||||
|
||||
/datum/outfit/plasmaman/genetics
|
||||
name = "Genetics Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/genetics
|
||||
uniform = /obj/item/clothing/under/plasmaman/genetics
|
||||
|
||||
/datum/outfit/plasmaman/science
|
||||
name = "Science Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/science
|
||||
uniform = /obj/item/clothing/under/plasmaman/science
|
||||
|
||||
/datum/outfit/plasmaman/rd
|
||||
name = "Research Director Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/rd
|
||||
uniform = /obj/item/clothing/under/plasmaman/rd
|
||||
|
||||
/datum/outfit/plasmaman/robotics
|
||||
name = "Robotics Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/robotics
|
||||
uniform = /obj/item/clothing/under/plasmaman/robotics
|
||||
|
||||
/datum/outfit/plasmaman/engineering
|
||||
name = "Engineering Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/engineering
|
||||
uniform = /obj/item/clothing/under/plasmaman/engineering
|
||||
|
||||
/datum/outfit/plasmaman/ce
|
||||
name = "Chief Engineer Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/engineering/ce
|
||||
uniform = /obj/item/clothing/under/plasmaman/engineering/ce
|
||||
|
||||
/datum/outfit/plasmaman/atmospherics
|
||||
name = "Atmospherics Plasmaman"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/atmospherics
|
||||
uniform = /obj/item/clothing/under/plasmaman/atmospherics
|
||||
|
||||
/datum/outfit/plasmaman/mime
|
||||
name = "Plasmamime"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/mime
|
||||
uniform = /obj/item/clothing/under/plasmaman/mime
|
||||
mask = /obj/item/clothing/mask/gas/mime
|
||||
|
||||
/datum/outfit/plasmaman/clown
|
||||
name = "Plasmaclown"
|
||||
|
||||
head = /obj/item/clothing/head/helmet/space/plasmaman/clown
|
||||
uniform = /obj/item/clothing/under/plasmaman/clown
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
@@ -62,6 +62,16 @@
|
||||
desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them."
|
||||
icon_state = "galoshes_dry"
|
||||
|
||||
/obj/item/clothing/shoes/sneakers/noslip
|
||||
desc = "A pair of black shoes, they have the soles of galoshes making them unable to be slipped on a wet surface."
|
||||
name = "black shoes"
|
||||
icon_state = "black"
|
||||
permeability_coefficient = 0.30
|
||||
clothing_flags = NOSLIP
|
||||
strip_delay = 50
|
||||
equip_delay_other = 50
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/clothing/shoes/galoshes/dry/step_action()
|
||||
var/turf/open/t_loc = get_turf(src)
|
||||
SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY)
|
||||
@@ -69,10 +79,8 @@
|
||||
/obj/item/clothing/shoes/clown_shoes
|
||||
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
|
||||
name = "clown shoes"
|
||||
icon_state = "clown"
|
||||
item_state = "clown_shoes"
|
||||
icon_state = "clown_shoes"
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
item_color = "clown"
|
||||
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/Initialize()
|
||||
@@ -98,7 +106,6 @@
|
||||
name = "jackboots"
|
||||
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
icon_state = "jackboots"
|
||||
item_state = "jackboots"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
item_color = "hosred"
|
||||
@@ -115,7 +122,6 @@
|
||||
name = "winter boots"
|
||||
desc = "Boots lined with 'synthetic' animal fur."
|
||||
icon_state = "winterboots"
|
||||
item_state = "winterboots"
|
||||
permeability_coefficient = 0.15
|
||||
cold_protection = FEET|LEGS
|
||||
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
|
||||
@@ -127,7 +133,6 @@
|
||||
name = "work boots"
|
||||
desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar."
|
||||
icon_state = "workboots"
|
||||
item_state = "jackboots"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
permeability_coefficient = 0.15
|
||||
@@ -145,7 +150,6 @@
|
||||
name = "\improper Nar'Sien invoker boots"
|
||||
desc = "A pair of boots worn by the followers of Nar'Sie."
|
||||
icon_state = "cult"
|
||||
item_state = "cult"
|
||||
item_color = "cult"
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
|
||||
@@ -178,7 +182,6 @@
|
||||
name = "roman sandals"
|
||||
desc = "Sandals with buckled leather straps on it."
|
||||
icon_state = "roman"
|
||||
item_state = "roman"
|
||||
strip_delay = 100
|
||||
equip_delay_other = 100
|
||||
permeability_coefficient = 0.9
|
||||
@@ -187,14 +190,12 @@
|
||||
name = "griffon boots"
|
||||
desc = "A pair of costume boots fashioned after bird talons."
|
||||
icon_state = "griffinboots"
|
||||
item_state = "griffinboots"
|
||||
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
|
||||
|
||||
/obj/item/clothing/shoes/bhop
|
||||
name = "jump boots"
|
||||
desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement."
|
||||
icon_state = "jetboots"
|
||||
item_state = "jetboots"
|
||||
item_color = "hosred"
|
||||
resistance_flags = FIRE_PROOF
|
||||
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
|
||||
@@ -252,7 +253,6 @@
|
||||
name = "Wheely-Heels"
|
||||
desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel
|
||||
icon_state = "wheelys"
|
||||
item_state = "wheelys"
|
||||
actions_types = list(/datum/action/item_action/wheelys)
|
||||
var/wheelToggle = FALSE //False means wheels are not popped out
|
||||
var/obj/vehicle/ridden/scooter/wheelys/W
|
||||
@@ -291,7 +291,6 @@
|
||||
name = "Kindle Kicks"
|
||||
desc = "They'll sure kindle something in you, and it's not childhood nostalgia..."
|
||||
icon_state = "kindleKicks"
|
||||
item_state = "kindleKicks"
|
||||
actions_types = list(/datum/action/item_action/kindleKicks)
|
||||
var/lightCycle = 0
|
||||
var/active = FALSE
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
icon_state = "leather"
|
||||
item_color = "leather"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/magboots/deathsquad
|
||||
@@ -14,7 +13,6 @@
|
||||
icon_state = "DS-magboots0"
|
||||
magboot_state = "DS-magboots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
@@ -23,7 +21,6 @@
|
||||
name = "atmospherics magboots"
|
||||
icon_state = "atmosmagboots0"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
magboot_state = "atmosmagboots"
|
||||
resistance_flags = FIRE_PROOF
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
@@ -33,7 +30,6 @@
|
||||
desc = "Simon's Shoes."
|
||||
icon_state = "simonshoes"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/kneesocks
|
||||
@@ -41,7 +37,6 @@
|
||||
desc = "A pair of girly knee-high socks."
|
||||
icon_state = "kneesock"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/jestershoes
|
||||
@@ -49,7 +44,6 @@
|
||||
desc = "As worn by the clowns of old."
|
||||
icon_state = "jestershoes"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/aviatorboots
|
||||
@@ -57,7 +51,6 @@
|
||||
desc = "Boots suitable for just about any occasion."
|
||||
icon_state = "aviator_boots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/libertyshoes
|
||||
@@ -65,7 +58,6 @@
|
||||
desc = "Freedom isn't free, neither were these shoes."
|
||||
icon_state = "libertyshoes"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/megaboots
|
||||
@@ -73,7 +65,6 @@
|
||||
desc = "Large armored boots, very weak to large spikes."
|
||||
icon_state = "megaboots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/protoboots
|
||||
@@ -81,7 +72,6 @@
|
||||
desc = "Functionally identical to the DRN-001 model's boots, but in red."
|
||||
icon_state = "protoboots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/megaxboots
|
||||
@@ -89,7 +79,6 @@
|
||||
desc = "Regardless of how much stronger these boots are than the DRN-001 model's, they're still extremely easy to pierce with a large spike."
|
||||
icon_state = "megaxboots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/joeboots
|
||||
@@ -97,7 +86,6 @@
|
||||
desc = "Nearly identical to the Prototype's boots, except in black."
|
||||
icon_state = "joeboots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/doomguy
|
||||
@@ -105,7 +93,6 @@
|
||||
desc = "If you look closely, you might see skull fragments still buried in these boots."
|
||||
icon_state = "doom"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/rottenshoes
|
||||
@@ -113,7 +100,6 @@
|
||||
desc = "These shoes seem perfect for sneaking around."
|
||||
icon_state = "rottenshoes"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/sandal/slippers
|
||||
@@ -121,7 +107,6 @@
|
||||
icon_state = "slippers"
|
||||
desc = "For the wizard that puts comfort first. Who's going to laugh?"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/slippers_worn
|
||||
@@ -129,7 +114,6 @@
|
||||
desc = "Fluffy..."
|
||||
icon_state = "slippers_worn"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/shoes/jackboots/neorussian
|
||||
@@ -137,5 +121,4 @@
|
||||
desc = "Tovarish, no one will realize you stepped on a pile of shit if your pair already looks like shit."
|
||||
icon_state = "nr_boots"
|
||||
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
@@ -22,6 +22,7 @@
|
||||
resistance_flags = NONE
|
||||
dog_fashion = null
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "space suit"
|
||||
@@ -44,4 +45,5 @@
|
||||
strip_delay = 80
|
||||
equip_delay_other = 80
|
||||
resistance_flags = NONE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //rated for cosmic radation :honk:
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
@@ -624,19 +624,19 @@
|
||||
desc = "The Multi-Augmented Severe Operations Networked Resource Integration Gear is an man-portable tank designed for extreme environmental situations. It is excessively bulky, but rated for all but the most atomic of hazards. The specialized armor is surprisingly weak to conventional weaponry. The exo slot can attach most storge bags on to the suit."
|
||||
icon_state = "hardsuit-ancient"
|
||||
item_state = "anc_hardsuit"
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 500, "bomb" = 500, "bio" = 500, "rad" = 500, "fire" = 500, "acid" = 500)
|
||||
armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
slowdown = 6 //Slow
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage, /obj/item/construction/rcd, /obj/item/pipe_dispenser)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason
|
||||
name = "M.A.S.O.N RIG helmet"
|
||||
desc = "The M.A.S.O.N RIG helmet is complimentary to the rest of the armor. It features a very large, high powered flood lamp and robust flash protection."
|
||||
icon_state = "hardsuit0-ancient"
|
||||
item_state = "anc_helm"
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 500, "bomb" = 500, "bio" = 500, "rad" = 500, "fire" = 500, "acid" = 500)
|
||||
armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
item_color = "ancient"
|
||||
brightness_on = 16
|
||||
scan_reagents = TRUE
|
||||
@@ -644,7 +644,7 @@
|
||||
tint = 1
|
||||
var/obj/machinery/doppler_array/integrated/bomb_radar
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/next_extinguish = 0
|
||||
var/extinguish_cooldown = 100
|
||||
var/extinguishes_left = 10
|
||||
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user)
|
||||
..()
|
||||
@@ -45,12 +45,18 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/brightness_on = 4 //luminosity when the light is on
|
||||
var/on = FALSE
|
||||
var/light_overlay = "envirohelm-light"
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light)
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/attack_self(mob/user)
|
||||
if(!light_overlay)
|
||||
return
|
||||
on = !on
|
||||
icon_state = "[initial(icon_state)][on ? "-light":""]"
|
||||
item_state = icon_state
|
||||
if(!on)
|
||||
cut_overlay(light_overlay)
|
||||
else
|
||||
add_overlay(light_overlay)
|
||||
user.update_inv_head() //So the mob overlay updates
|
||||
|
||||
if(on)
|
||||
@@ -61,3 +67,166 @@
|
||||
for(var/X in actions)
|
||||
var/datum/action/A=X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
if(!isinhands && on)
|
||||
. += mutable_appearance(icon_file, light_overlay)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/security
|
||||
name = "security plasma envirosuit helmet"
|
||||
desc = "A plasmaman containment helmet designed for security officers, protecting them from being flashed and burning alive, along-side other undesirables."
|
||||
icon_state = "security_envirohelm"
|
||||
item_state = "security_envirohelm"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/security/warden
|
||||
name = "warden's plasma envirosuit helmet"
|
||||
desc = "A plasmaman containment helmet designed for the warden, a pair of white stripes being added to differeciate them from other members of security."
|
||||
icon_state = "warden_envirohelm"
|
||||
item_state = "warden_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/security/hos
|
||||
name = "head of security's plasma envirosuit helmet"
|
||||
desc = "A plasmaman containment helmet designed for the head of security, manacing black with red stripes, to differenciate them from other members of security."
|
||||
icon_state = "hos_envirohelm"
|
||||
item_state = "hos_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/medical
|
||||
name = "medical's plasma envirosuit helmet"
|
||||
desc = "An envriohelmet designed for plasmaman medical doctors, having two stripes down it's length to denote as much."
|
||||
icon_state = "doctor_envirohelm"
|
||||
item_state = "doctor_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/cmo
|
||||
name = "chief medical officer's plasma envirosuit helmet"
|
||||
desc = "A blue and white envriohelmet designed for the chief medical officer."
|
||||
icon_state = "cmo_envirohelm"
|
||||
item_state = "cmo_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/genetics
|
||||
name = "geneticist's plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for geneticists."
|
||||
icon_state = "geneticist_envirohelm"
|
||||
item_state = "geneticist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/viro
|
||||
name = "virology plasma envirosuit helmet"
|
||||
desc = "The helmet worn by the safest people on the station, those who are completely immune to the monstrosities they create."
|
||||
icon_state = "virologist_envirohelm"
|
||||
item_state = "virologist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/chemist
|
||||
name = "chemistry plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirosuit designed for chemists, two orange stripes going down it's face."
|
||||
icon_state = "chemist_envirohelm"
|
||||
item_state = "chemist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/science
|
||||
name = "science plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for scientists."
|
||||
icon_state = "scientist_envirohelm"
|
||||
item_state = "scientist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/rd
|
||||
name = "research director's plasma envirosuit helmet"
|
||||
desc = "A sturdier plasmaman envirohelmet designed for research directors."
|
||||
icon_state = "rd_envirohelm"
|
||||
item_state = "rd_envirohelm"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/robotics
|
||||
name = "robotics plasma envirosuit helmet"
|
||||
desc = "A plasmaman envirohelmet designed for roboticists."
|
||||
icon_state = "roboticist_envirohelm"
|
||||
item_state = "roboticist_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/engineering
|
||||
name = "engineering plasma envirosuit helmet"
|
||||
desc = "A space-worthy helmet specially designed for engineer plasmamen, the usual purple stripes being replaced by engineering's orange."
|
||||
icon_state = "engineer_envirohelm"
|
||||
item_state = "engineer_envirohelm"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 75)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/engineering/ce
|
||||
name = "chief engineer's plasma envirosuit helmet"
|
||||
desc = "A space-worthy helmet specially designed for the chief engineer, white with gold stripes designed for high visibility."
|
||||
icon_state = "ce_envirohelm"
|
||||
item_state = "ce_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/atmospherics
|
||||
name = "atmospherics plasma envirosuit helmet"
|
||||
desc = "A space-worthy helmet specially designed for atmos technician plasmamen, the usual purple stripes being replaced by engineering's blue."
|
||||
icon_state = "atmos_envirohelm"
|
||||
item_state = "atmos_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/cargo
|
||||
name = "cargo plasma envirosuit helmet"
|
||||
desc = "An plasmaman envirohelmet designed for cargo techs and quartermasters."
|
||||
icon_state = "cargo_envirohelm"
|
||||
item_state = "cargo_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/mining
|
||||
name = "mining plasma envirosuit helmet"
|
||||
desc = "A khaki helmet given to plasmamen miners operating on lavaland."
|
||||
icon_state = "explorer_envirohelm"
|
||||
item_state = "explorer_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/chaplain
|
||||
name = "chaplain's plasma envirosuit helmet"
|
||||
desc = "An envirohelmet specially designed for only the most pious of plasmamen."
|
||||
icon_state = "chap_envirohelm"
|
||||
item_state = "chap_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/white
|
||||
name = "white plasma envirosuit helmet"
|
||||
desc = "A generic white envirohelm."
|
||||
icon_state = "white_envirohelm"
|
||||
item_state = "white_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/hop
|
||||
name = "head of personell's plasma envirosuit helmet"
|
||||
desc = "A finely tailored azure envirohelm designed for head of personell."
|
||||
icon_state = "hop_envirohelm"
|
||||
item_state = "hop_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/captain
|
||||
name = "captain's plasma envirosuit helmet"
|
||||
desc = "A blue and gold envirohelm designed for the station's captain, nonetheless. Made of superior materials to protect them from the station hazards and more."
|
||||
icon_state = "captain_envirohelm"
|
||||
item_state = "captain_envirohelm"
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 85)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/curator
|
||||
name = "curator's plasma envirosuit helmet"
|
||||
desc = "A slight modification on a tradiational voidsuit helmet, this helmet was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Despite their limitations, these helmets still see use by historian and old-styled plasmamen alike."
|
||||
icon_state = "prototype_envirohelm"
|
||||
item_state = "prototype_envirohelm"
|
||||
light_overlay = null
|
||||
actions_types = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/botany
|
||||
name = "botany plasma envirosuit helmet"
|
||||
desc = "A green and blue envirohelmet designating it's wearer as a botanist. While not specially designed for it, it would protect against minor planet-related injuries."
|
||||
icon_state = "botany_envirohelm"
|
||||
item_state = "botany_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/janitor
|
||||
name = "janitor's plasma envirosuit helmet"
|
||||
desc = "A grey helmet bearing a pair of purple stripes, designating the wearer as a janitor."
|
||||
icon_state = "janitor_envirohelm"
|
||||
item_state = "janitor_envirohelm"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/mime
|
||||
name = "mime envirosuit helmet"
|
||||
desc = "The make-up is painted on, it's a miracle it doesn't chip. It's not very colourful."
|
||||
icon_state = "mime_envirohelm"
|
||||
item_state = "mime_envirohelm"
|
||||
light_overlay = "mime_envirohelm-light"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman/clown
|
||||
name = "clown envirosuit helmet"
|
||||
desc = "The make-up is painted on, it's a miracle it doesn't chip. <i>'HONK!'</i>"
|
||||
icon_state = "clown_envirohelm"
|
||||
item_state = "clown_envirohelm"
|
||||
light_overlay = "clown_envirohelm-light"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
slot_flags = ITEM_SLOT_OCLOTHING
|
||||
body_parts_covered = CHEST
|
||||
var/blood_overlay_type = "suit"
|
||||
var/togglename = null
|
||||
var/suittoggled = FALSE
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = null
|
||||
body_parts_covered = CHEST
|
||||
cold_protection = CHEST|GROIN
|
||||
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
|
||||
heat_protection = CHEST|GROIN
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon_state = "qmcloak"
|
||||
item_state = "qmcloak"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
body_parts_covered = CHEST|LEGS|ARMS
|
||||
|
||||
/obj/item/clothing/head/cloakhood
|
||||
name = "cloak hood"
|
||||
@@ -62,7 +62,7 @@
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival)
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
|
||||
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
body_parts_covered = CHEST|ARMS|LEGS
|
||||
|
||||
/obj/item/clothing/head/hooded/cloakhood/goliath
|
||||
name = "goliath cloak hood"
|
||||
|
||||
@@ -23,30 +23,48 @@
|
||||
allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
//Chaplain
|
||||
/obj/item/clothing/suit/nun
|
||||
/obj/item/clothing/suit/chaplain
|
||||
name = "chaplain suit"
|
||||
desc = "A piece of clothing adorned by the gods of Coding. Should never exist in this mortal realm."
|
||||
allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/suit/chaplain/nun
|
||||
name = "nun robe"
|
||||
desc = "Maximum piety in this star system."
|
||||
icon_state = "nun"
|
||||
item_state = "nun"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
|
||||
flags_inv = HIDESHOES|HIDEJUMPSUIT
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/suit/studentuni
|
||||
/obj/item/clothing/suit/chaplain/studentuni
|
||||
name = "student robe"
|
||||
desc = "The uniform of a bygone institute of learning."
|
||||
icon_state = "studentuni"
|
||||
item_state = "studentuni"
|
||||
body_parts_covered = ARMS|CHEST
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/suit/witchhunter
|
||||
/obj/item/clothing/suit/chaplain/witchhunter
|
||||
name = "witchunter garb"
|
||||
desc = "This worn outfit saw much use back in the day."
|
||||
icon_state = "witchhunter"
|
||||
item_state = "witchhunter"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/suit/chaplain/pharaoh
|
||||
name = "pharaoh tunic"
|
||||
desc = "Lavish space tomb not included."
|
||||
icon_state = "pharaoh"
|
||||
icon_state = "pharaoh"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/suit/chaplain/holidaypriest
|
||||
name = "holiday priest"
|
||||
desc = "This is a nice holiday, my son."
|
||||
icon_state = "holidaypriest"
|
||||
item_state = "w_suit"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
|
||||
|
||||
//Chef
|
||||
/obj/item/clothing/suit/toggle/chef
|
||||
@@ -135,6 +153,7 @@
|
||||
icon = 'icons/obj/clothing/belts.dmi'
|
||||
icon_state = "suspenders"
|
||||
blood_overlay_type = "armor" //it's the less thing that I can put here
|
||||
body_parts_covered = NONE
|
||||
|
||||
//Security
|
||||
/obj/item/clothing/suit/security/officer
|
||||
@@ -197,3 +216,4 @@
|
||||
item_state = "techpriesthood"
|
||||
body_parts_covered = HEAD
|
||||
flags_inv = HIDEHAIR|HIDEEARS
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
item_state = "death"
|
||||
flags_1 = CONDUCT_1
|
||||
fire_resist = T0C+5200
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
|
||||
@@ -75,6 +76,7 @@
|
||||
desc = "this pretty much looks ridiculous" //Needs no fixing
|
||||
icon_state = "justice"
|
||||
item_state = "justice"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
|
||||
@@ -100,14 +102,14 @@
|
||||
desc = "A fancy purple apron for a stylish person."
|
||||
icon_state = "purplebartenderapron"
|
||||
item_state = "purplebartenderapron"
|
||||
body_parts_covered = CHEST|GROIN|LEGS
|
||||
body_parts_covered = CHEST
|
||||
|
||||
/obj/item/clothing/suit/syndicatefake
|
||||
name = "black and red space suit replica"
|
||||
icon_state = "syndicate-black-red"
|
||||
item_state = "syndicate-black-red"
|
||||
desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy)
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
resistance_flags = NONE
|
||||
@@ -154,7 +156,7 @@
|
||||
icon_state = "owl_wings"
|
||||
item_state = "owl_wings"
|
||||
togglename = "wings"
|
||||
body_parts_covered = ARMS|CHEST
|
||||
body_parts_covered = ARMS
|
||||
actions_types = list(/datum/action/item_action/toggle_wings)
|
||||
|
||||
/obj/item/clothing/suit/toggle/owlwings/Initialize()
|
||||
@@ -167,16 +169,6 @@
|
||||
icon_state = "griffin_wings"
|
||||
item_state = "griffin_wings"
|
||||
|
||||
|
||||
/obj/item/clothing/suit/holidaypriest
|
||||
name = "holiday priest"
|
||||
desc = "This is a nice holiday, my son."
|
||||
icon_state = "holidaypriest"
|
||||
item_state = "w_suit"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/suit/cardborg
|
||||
name = "cardborg suit"
|
||||
desc = "An ordinary cardboard box with holes cut in the sides."
|
||||
@@ -219,6 +211,7 @@
|
||||
desc = "Your classic, non-racist poncho."
|
||||
icon_state = "classicponcho"
|
||||
item_state = "classicponcho"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/suit/poncho/green
|
||||
name = "green poncho"
|
||||
@@ -255,7 +248,7 @@
|
||||
desc = "A costume made from 'synthetic' carp scales, it smells."
|
||||
icon_state = "carp_casual"
|
||||
item_state = "labcoat"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
|
||||
cold_protection = CHEST|GROIN|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
|
||||
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun)
|
||||
@@ -275,9 +268,7 @@
|
||||
desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs."
|
||||
icon_state = "ian"
|
||||
item_state = "labcoat"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
//cold_protection = CHEST|GROIN|ARMS
|
||||
//min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
|
||||
allowed = list()
|
||||
hoodtype = /obj/item/clothing/head/hooded/ian_hood
|
||||
dog_fashion = /datum/dog_fashion/back
|
||||
@@ -287,8 +278,6 @@
|
||||
desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits."
|
||||
icon_state = "ian"
|
||||
body_parts_covered = HEAD
|
||||
//cold_protection = HEAD
|
||||
//min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
flags_inv = HIDEHAIR|HIDEEARS
|
||||
|
||||
/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
|
||||
@@ -314,7 +303,7 @@
|
||||
desc = "A horribly bloated suit made from human skins."
|
||||
icon_state = "lingspacesuit"
|
||||
item_state = "labcoat"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET|HANDS
|
||||
allowed = list()
|
||||
actions_types = list(/datum/action/item_action/toggle_human_head)
|
||||
hoodtype = /obj/item/clothing/head/hooded/human_head
|
||||
@@ -355,18 +344,21 @@
|
||||
desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in."
|
||||
icon_state = "ianshirt"
|
||||
item_state = "ianshirt"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/suit/nerdshirt
|
||||
name = "gamer shirt"
|
||||
desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?"
|
||||
icon_state = "nerdshirt"
|
||||
item_state = "nerdshirt"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat.
|
||||
name = "Vape Naysh shirt"
|
||||
desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?"
|
||||
icon_state = "vapeshirt"
|
||||
item_state = "vapeshirt"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
/obj/item/clothing/suit/jacket
|
||||
name = "bomber jacket"
|
||||
@@ -374,7 +366,7 @@
|
||||
icon_state = "bomberjacket"
|
||||
item_state = "brownjsuit"
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio)
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
body_parts_covered = CHEST|ARMS
|
||||
cold_protection = CHEST|GROIN|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
|
||||
@@ -399,6 +391,7 @@
|
||||
desc = "A thick jacket with a rubbery, water-resistant shell."
|
||||
icon_state = "pufferjacket"
|
||||
item_state = "hostrench"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/suit/jacket/puffer/vest
|
||||
@@ -446,18 +439,21 @@
|
||||
desc = "Looks like this belongs in a very old movie set."
|
||||
icon_state = "draculacoat"
|
||||
item_state = "draculacoat"
|
||||
body_parts_covered = CHEST|ARMS
|
||||
|
||||
/obj/item/clothing/suit/drfreeze_coat
|
||||
name = "doctor freeze's labcoat"
|
||||
desc = "A labcoat imbued with the power of features and freezes."
|
||||
icon_state = "drfreeze_coat"
|
||||
item_state = "drfreeze_coat"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/suit/gothcoat
|
||||
name = "gothic coat"
|
||||
desc = "Perfect for those who want stalk in a corner of a bar."
|
||||
icon_state = "gothcoat"
|
||||
item_state = "gothcoat"
|
||||
body_parts_covered = CHEST|ARMS|HAND_LEFT //peculiar
|
||||
|
||||
/obj/item/clothing/suit/xenos
|
||||
name = "xenos suit"
|
||||
@@ -468,13 +464,6 @@
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
allowed = list(/obj/item/clothing/mask/facehugger/toy)
|
||||
|
||||
/obj/item/clothing/suit/pharaoh
|
||||
name = "pharaoh tunic"
|
||||
desc = "Lavish space tomb not included."
|
||||
icon_state = "pharaoh"
|
||||
icon_state = "pharaoh"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
|
||||
|
||||
|
||||
// WINTER COATS
|
||||
@@ -603,6 +592,7 @@
|
||||
name = "spooky ghost"
|
||||
desc = "This is obviously just a bedsheet, but maybe try it on?"
|
||||
icon_state = "bedsheet"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
|
||||
user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
|
||||
alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
|
||||
|
||||
@@ -611,6 +601,7 @@
|
||||
desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice."
|
||||
icon = 'icons/obj/clothing/clockwork_garb.dmi'
|
||||
icon_state = "clockwork_cuirass_old"
|
||||
body_parts_covered = CHEST|GROIN|LEGS
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
|
||||
|
||||
/obj/item/clothing/suit/ghost_sheet
|
||||
@@ -623,4 +614,5 @@
|
||||
throw_range = 2
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
|
||||
alternate_worn_layer = UNDER_HEAD_LAYER
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
equip_delay_other = 60
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
resistance_flags = NONE
|
||||
rad_flags = RAD_PROTECT_CONTENTS
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/suit/radiation
|
||||
@@ -150,5 +150,5 @@
|
||||
equip_delay_other = 60
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAUR
|
||||
resistance_flags = NONE
|
||||
rad_flags = RAD_PROTECT_CONTENTS
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals and armbands, this accessory system is being kept as-is
|
||||
/obj/item/clothing/accessory //Ties moved to neck slot items, but as there are still things like medals, pokadots, and armbands, this accessory system is being kept as-is
|
||||
name = "Accessory"
|
||||
desc = "Something has gone wrong!"
|
||||
icon = 'icons/obj/clothing/accessories.dmi'
|
||||
@@ -368,7 +368,7 @@
|
||||
|
||||
/obj/item/clothing/accessory/kevlar
|
||||
name = "kevlar sheets"
|
||||
desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks.."
|
||||
desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks."
|
||||
icon_state = "padding"
|
||||
item_color = "nothing"
|
||||
armor = list("melee" = 10, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 25)
|
||||
@@ -379,3 +379,35 @@
|
||||
icon_state = "plastics"
|
||||
item_color = "nothing"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = -40)
|
||||
|
||||
/////////////////////
|
||||
//Pokadots On Pants//
|
||||
/////////////////////
|
||||
|
||||
/obj/item/clothing/accessory/attrocious_pokadots
|
||||
name = "atrocious pokadots"
|
||||
desc = "They look like something out of a thrift store. Attaches to clothing not to be worn by itself."
|
||||
icon_state = "attrocious_pokadots"
|
||||
item_color = "attrocious_pokadots"
|
||||
attack_verb = list("horrifed", "eye bleeded")
|
||||
|
||||
/obj/item/clothing/accessory/black_white_pokadots
|
||||
name = "checkered pokadots"
|
||||
desc = "You can play a game of chess on these! Attaches to clothing not to be worn by itself."
|
||||
icon_state = "black_white_pokadots"
|
||||
item_color = "black_white_pokadots"
|
||||
attack_verb = list("check", "mate")
|
||||
|
||||
/obj/item/clothing/accessory/nt_pokadots
|
||||
name = "blue and white pokadots"
|
||||
desc = "To show your pride in your workplace, in the most annoying possable way. Attaches to clothing not to be worn by itself."
|
||||
icon_state = "nt_pokadots"
|
||||
item_color = "nt_pokadots"
|
||||
attack_verb = list("eye bleeded", "annoyed")
|
||||
|
||||
/obj/item/clothing/accessory/syndi_pokadots
|
||||
name = "black and red pokadots"
|
||||
desc = "King me. Attaches to clothing not to be worn by itself." //checkers!
|
||||
icon_state = "syndi_pokadots"
|
||||
item_color = "syndi_pokadots"
|
||||
attack_verb = list("jumped", "taken")
|
||||
@@ -0,0 +1,100 @@
|
||||
/obj/item/clothing/under/plasmaman/cargo
|
||||
name = "cargo plasma envirosuit"
|
||||
desc = "A joint envirosuit used by plasmamen quartermasters and cargo techs alike, due to the logistical problems of differenciating the two with the length of their pant legs."
|
||||
icon_state = "cargo_envirosuit"
|
||||
item_state = "cargo_envirosuit"
|
||||
item_color = "cargo_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/mining
|
||||
name = "mining plasma envirosuit"
|
||||
desc = "An air-tight khaki suit designed for operations on lavaland by plasmamen."
|
||||
icon_state = "explorer_envirosuit"
|
||||
item_state = "explorer_envirosuit"
|
||||
item_color = "explorer_envirosuit"
|
||||
|
||||
|
||||
/obj/item/clothing/under/plasmaman/chef
|
||||
name = "chef's plasma envirosuit"
|
||||
desc = "A white plasmaman envirosuit designed for cullinary practices. One might question why a member of a species that doesn't need to eat would become a chef."
|
||||
icon_state = "chef_envirosuit"
|
||||
item_state = "chef_envirosuit"
|
||||
item_color = "chef_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/enviroslacks
|
||||
name = "enviroslacks"
|
||||
desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Nano-Trasen for it's detectives, lawyers, and bar-tenders alike."
|
||||
icon_state = "enviroslacks"
|
||||
item_state = "enviroslacks"
|
||||
item_color = "enviroslacks"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/chaplain
|
||||
name = "chaplain's plasma envirosuit"
|
||||
desc = "An envirosuit specially designed for only the most pious of plasmamen."
|
||||
icon_state = "chap_envirosuit"
|
||||
item_state = "chap_envirosuit"
|
||||
item_color = "chap_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/curator
|
||||
name = "curator's plasma envirosuit"
|
||||
desc = "Made out of a modified voidsuit, this suit was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike."
|
||||
icon_state = "prototype_envirosuit"
|
||||
item_state = "prototype_envirosuit"
|
||||
item_color = "prototype_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/janitor
|
||||
name = "janitor's plasma envirosuit"
|
||||
desc = "A grey and purple envirosuit designated for plasmamen janitors."
|
||||
icon_state = "janitor_envirosuit"
|
||||
item_state = "janitor_envirosuit"
|
||||
item_color = "janitor_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/botany
|
||||
name = "botany envirosuit"
|
||||
desc = "A green and blue envirosuit designed to protect plasmamen from minor plant-related injuries."
|
||||
icon_state = "botany_envirosuit"
|
||||
item_state = "botany_envirosuit"
|
||||
item_color = "botany_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/hop
|
||||
name = "head of personell's envirosuit"
|
||||
desc = "A prestigious azure envirosuit designed for head of personell."
|
||||
icon_state = "hop_envirosuit"
|
||||
item_state = "hop_envirosuit"
|
||||
item_color = "hop_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/captain
|
||||
name = "captain's envirosuit"
|
||||
desc = "An expensive piece of plasmaman envirosuit fashion. guaranteed to keep you cool while the station goes down in fierceful fires."
|
||||
icon_state = "captain_envirosuit"
|
||||
item_state = "captain_envirosuit"
|
||||
item_color = "captain_envirosuit"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
|
||||
|
||||
/obj/item/clothing/under/plasmaman/mime
|
||||
name = "mime envirosuit"
|
||||
desc = "It's not very colourful."
|
||||
icon_state = "mime_envirosuit"
|
||||
item_state = "mime_envirosuit"
|
||||
item_color = "mime_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/clown
|
||||
name = "clown envirosuit"
|
||||
desc = "<i>'HONK!'</i>"
|
||||
icon_state = "clown_envirosuit"
|
||||
item_state = "clown_envirosuit"
|
||||
item_color = "clown_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
|
||||
if(H.on_fire)
|
||||
if(extinguishes_left)
|
||||
if(next_extinguish > world.time)
|
||||
return
|
||||
next_extinguish = world.time + extinguish_cooldown
|
||||
extinguishes_left--
|
||||
H.visible_message("<span class='warning'>[H]'s suit spews out a tonne of space lube!</span>","<span class='warning'>Your suit spews out a tonne of space lube!</span>")
|
||||
H.ExtinguishMob()
|
||||
new /obj/effect/particle_effect/foam(loc) //Truely terrifying.
|
||||
return FALSE
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/item/clothing/under/plasmaman/engineering
|
||||
name = "engineering plasma envirosuit"
|
||||
desc = "An air-tight suit designed to be used by plasmamen exployed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage."
|
||||
icon_state = "engineer_envirosuit"
|
||||
item_state = "engineer_envirosuit"
|
||||
item_color = "engineer_envirosuit"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95)
|
||||
|
||||
/obj/item/clothing/under/plasmaman/engineering/ce
|
||||
name = "chief engineer's plasma envirosuit"
|
||||
desc = "An advanced air-tight suit designed to be used by plasmamen chief engineers, complete with ornamental widgets and gizmo. It protects the user from fire and acid damage."
|
||||
icon_state = "ce_envirosuit"
|
||||
item_state = "ce_envirosuit"
|
||||
item_color = "ce_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/atmospherics
|
||||
name = "atmospherics plasma envirosuit"
|
||||
desc = "An air-tight suit designed to be used by plasmamen exployed as atmos technicians, the usual purple stripes being replaced by atmos's blue."
|
||||
icon_state = "atmos_envirosuit"
|
||||
item_state = "atmos_envirosuit"
|
||||
item_color = "atmos_envirosuit"
|
||||
@@ -0,0 +1,56 @@
|
||||
/obj/item/clothing/under/plasmaman/medical
|
||||
name = "medical plasma envirosuit"
|
||||
desc = "A suit designed for the station's more plasma-based doctors."
|
||||
icon_state = "doctor_envirosuit"
|
||||
item_state = "doctor_envirosuit"
|
||||
item_color = "doctor_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/cmo
|
||||
name = "chief medical officer's plasma envirosuit"
|
||||
desc = "A suit designed for the station's most plasma-based chief medical officer, but not for their cat."
|
||||
icon_state = "cmo_envirosuit"
|
||||
item_state = "cmo_envirosuit"
|
||||
item_color = "cmo_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/science
|
||||
name = "science plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for scientists."
|
||||
icon_state = "scientist_envirosuit"
|
||||
item_state = "scientist_envirosuit"
|
||||
item_color = "scientist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/rd
|
||||
name = "research direactor's plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for the research director to aid them in their job of directing research into the right direction."
|
||||
icon_state = "rd_envirosuit"
|
||||
item_state = "rd_envirosuit"
|
||||
item_color = "rd_envirosuit"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
|
||||
|
||||
/obj/item/clothing/under/plasmaman/robotics
|
||||
name = "robotics plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for roboticists."
|
||||
icon_state = "roboticist_envirosuit"
|
||||
item_state = "roboticist_envirosuit"
|
||||
item_color = "roboticist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/viro
|
||||
name = "virology plasma envirosuit"
|
||||
desc = "The suit worn by the safest people on the station, those who are completely immune to the monstrosities they create."
|
||||
icon_state = "virologist_envirosuit"
|
||||
item_state = "virologist_envirosuit"
|
||||
item_color = "virologist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/genetics
|
||||
name = "genetics plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for geneticists."
|
||||
icon_state = "geneticist_envirosuit"
|
||||
item_state = "geneticist_envirosuit"
|
||||
item_color = "geneticist_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/chemist
|
||||
name = "chemistry plasma envirosuit"
|
||||
desc = "A plasmaman envirosuit designed for chemists."
|
||||
icon_state = "chemist_envirosuit"
|
||||
item_state = "chemist_envirosuit"
|
||||
item_color = "chemist_envirosuit"
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/item/clothing/under/plasmaman/security
|
||||
name = "security plasma envirosuit"
|
||||
desc = "A plasmaman containment suit designed for security officers, offering a limited amount of extra protection."
|
||||
icon_state = "security_envirosuit"
|
||||
item_state = "security_envirosuit"
|
||||
item_color = "security_envirosuit"
|
||||
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
|
||||
|
||||
/obj/item/clothing/under/plasmaman/security/warden
|
||||
name = "warden plasma envirosuit"
|
||||
desc = "A plasmaman containment suit designed for the warden, white stripes being added to differeciate them from other members of security."
|
||||
icon_state = "warden_envirosuit"
|
||||
item_state = "warden_envirosuit"
|
||||
item_color = "warden_envirosuit"
|
||||
|
||||
/obj/item/clothing/under/plasmaman/security/hos
|
||||
name = "security plasma envirosuit"
|
||||
desc = "A slick black and red plasmaman containment suit designed for the head of security, also called the LAW."
|
||||
icon_state = "hos_envirosuit"
|
||||
item_state = "hos_envirosuit"
|
||||
item_color = "hos_envirosuit"
|
||||
@@ -589,6 +589,7 @@
|
||||
item_state = "b_suit"
|
||||
item_color = "sailor"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/plasmaman
|
||||
name = "plasma envirosuit"
|
||||
desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy."
|
||||
@@ -596,12 +597,14 @@
|
||||
item_state = "plasmaman"
|
||||
item_color = "plasmaman"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
|
||||
slowdown = 1
|
||||
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
can_adjust = FALSE
|
||||
strip_delay = 80
|
||||
var/next_extinguish = 0
|
||||
var/extinguish_cooldown = 100
|
||||
var/extinguishes_left = 5
|
||||
|
||||
/obj/item/clothing/under/plasmaman/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>There are [extinguishes_left] extinguisher charges left in this suit.</span>")
|
||||
@@ -618,6 +621,7 @@
|
||||
H.ExtinguishMob()
|
||||
new /obj/effect/particle_effect/water(get_turf(H))
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params)
|
||||
..()
|
||||
if (istype(E, /obj/item/extinguisher_refill))
|
||||
@@ -631,11 +635,13 @@
|
||||
return
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/extinguisher_refill
|
||||
name = "envirosuit extinguisher cartridge"
|
||||
desc = "A cartridge loaded with a compressed extinguisher mix, used to refill the automatic extinguisher on plasma envirosuits."
|
||||
icon_state = "plasmarefill"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
|
||||
/obj/item/clothing/under/rank/security/navyblue/russian
|
||||
name = "\improper Russian officer's uniform"
|
||||
desc = "The latest in fashionable russian outfits."
|
||||
@@ -703,14 +709,6 @@
|
||||
fitted = NO_FEMALE_UNIFORM
|
||||
can_adjust = FALSE
|
||||
resistance_flags = NONE
|
||||
/obj/item/clothing/under/durathread
|
||||
name = "durathread jumpsuit"
|
||||
desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer."
|
||||
icon_state = "durathread"
|
||||
item_state = "durathread"
|
||||
item_color = "durathread"
|
||||
can_adjust = FALSE
|
||||
armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
|
||||
|
||||
/obj/item/clothing/under/gear_harness
|
||||
name = "gear harness"
|
||||
@@ -725,5 +723,15 @@
|
||||
icon_state = "durathread"
|
||||
item_state = "durathread"
|
||||
item_color = "durathread"
|
||||
can_adjust = TRUE
|
||||
armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
|
||||
|
||||
/obj/item/clothing/under/duraskirt
|
||||
name = "durathread jumpskirt"
|
||||
desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer. Being a short skirt, it naturally doesn't protect the legs."
|
||||
icon_state = "duraskirt"
|
||||
item_state = "duraskirt"
|
||||
item_color = "durathread"
|
||||
can_adjust = FALSE
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
|
||||
@@ -67,3 +67,14 @@
|
||||
icon_state = "syndicate_combat"
|
||||
item_color = "syndicate_combat"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/syndicate/baseball
|
||||
name = "major league, number unknown"
|
||||
desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game"
|
||||
icon_state = "syndicatebaseball"
|
||||
item_state = "syndicatebaseball"
|
||||
item_color = "syndicatebaseball"
|
||||
has_sensor = NO_SENSORS
|
||||
armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
|
||||
alt_covers_chest = TRUE
|
||||
|
||||
|
||||
@@ -133,6 +133,18 @@
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/minigun
|
||||
name = "Laser Minigun"
|
||||
result = /obj/item/minigunpack2
|
||||
reqs = list(/obj/item/gun/energy/laser/carbine = 3,
|
||||
/obj/item/stack/sheet/plasteel = 5,
|
||||
/obj/item/stack/cable_coil = 30,
|
||||
/obj/item/stock_parts/cell/bluespace = 2)
|
||||
tools = list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 150
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/ed209
|
||||
name = "ED209"
|
||||
result = /mob/living/simple_animal/bot/ed209
|
||||
@@ -359,6 +371,7 @@
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/shard = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
parts = list(/obj/item/shard = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
//Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change(changetype) to change names, descs and sprites.
|
||||
var/list/possible_states = list(
|
||||
"ketchup" = list("ketchup", "ketchup bottle", "You feel more American already."),
|
||||
"mustard" = list("mustard", "mustard bottle", "A spice mixed with enzymes and water."),
|
||||
"capsaicin" = list("hotsauce", "hotsauce bottle", "You can almost TASTE the stomach ulcers now!"),
|
||||
"enzyme" = list("enzyme", "universal enzyme bottle", "Used in cooking various dishes"),
|
||||
"soysauce" = list("soysauce", "soy sauce bottle", "A salty soy-based flavoring"),
|
||||
@@ -282,6 +283,12 @@
|
||||
originalname = "ketchup"
|
||||
list_reagents = list("ketchup" = 10)
|
||||
|
||||
//Mustard
|
||||
/obj/item/reagent_containers/food/condiment/pack/mustard
|
||||
name = "mustard pack"
|
||||
originalname = "mustard"
|
||||
list_reagents = list("mustard" = 10)
|
||||
|
||||
//Hot sauce
|
||||
/obj/item/reagent_containers/food/condiment/pack/hotsauce
|
||||
name = "hotsauce pack"
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
tastes = list("maggots" = 1, "the inside of a reactor" = 1)
|
||||
foodtype = MEAT | RAW | GROSS
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
|
||||
icon_state = "mothmeat"
|
||||
desc = "Unpleasantly powdery and dry. Kind of pretty, though."
|
||||
filling_color = "#BF896B"
|
||||
|
||||
@@ -335,7 +335,7 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
|
||||
icon_state = "vanillacake"
|
||||
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
|
||||
bonus_reagents = list("sugar" = 15, "vanilla" = 15)
|
||||
tastes = list("caje" = 1, "sugar" = 1, "vanilla" = 10)
|
||||
tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10)
|
||||
foodtype = GRAIN | SUGAR | DAIRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice
|
||||
@@ -361,4 +361,21 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake
|
||||
icon_state = "clowncake_slice"
|
||||
filling_color = "#00FFFF"
|
||||
tastes = list("cake" = 1, "sugar" = 1, "joy" = 10)
|
||||
foodtype = GRAIN | SUGAR | DAIRY
|
||||
foodtype = GRAIN | SUGAR | DAIRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/peach_cake
|
||||
name = "peach cake"
|
||||
desc = "A peach filled cake."
|
||||
icon_state = "peachcake"
|
||||
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/peach_slice
|
||||
bonus_reagents = list("sugar" = 5, "peachjuice" = 15)
|
||||
tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10)
|
||||
foodtype = GRAIN | SUGAR | DAIRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cakeslice/peach_slice
|
||||
name = "peach cake slice"
|
||||
desc = "A slice of peach cake."
|
||||
icon_state = "peach_slice"
|
||||
filling_color = "#00FFFF"
|
||||
tastes = list("cake" = 1, "sugar" = 1, "peachjuice" = 10)
|
||||
foodtype = GRAIN | SUGAR | DAIRY
|
||||
|
||||
@@ -28,6 +28,50 @@
|
||||
tastes = list("ice cream" = 1, "banana" = 1, "a bad joke" = 1)
|
||||
foodtype = FRUIT | DAIRY | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/banana_split
|
||||
name = "banana split"
|
||||
trash = /obj/item/reagent_containers/food/drinks/drinkingglass
|
||||
desc = "A long glass dish filled with ice-cream, chocolate and a banana down the middle. A timeless classic by any standards."
|
||||
icon_state = "banana_split"
|
||||
bonus_reagents = list("nutriment" = 5, "vitamin" = 3)
|
||||
list_reagents = list("nutriment" = 3, "banana" = 10, "vitamin" = 2)
|
||||
filling_color = "#FFFACD"
|
||||
tastes = list("ice cream" = 1, "banana" = 1, "charries" = 1)
|
||||
foodtype = FRUIT | DAIRY | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cola_float
|
||||
name = "Root Beer Float"
|
||||
trash = /obj/item/reagent_containers/food/drinks/drinkingglass
|
||||
desc = "A glass filled with cream, soda and ice-cream with a cherry on top."
|
||||
icon_state = "cola_float"
|
||||
bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
|
||||
list_reagents = list("nutriment" = 3, "vitamin" = 2)
|
||||
filling_color = "#FFFACD"
|
||||
tastes = list("ice cream" = 1, "space coal" = 1, "cherries" = 1)
|
||||
foodtype = FRUIT | DAIRY | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/charrie_float
|
||||
name = "Cherry Shake"
|
||||
trash = /obj/item/reagent_containers/food/drinks/drinkingglass
|
||||
desc = "Cherries mixed with ice-cream, known for its filling tastes"
|
||||
icon_state = "cherryshake"
|
||||
bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
|
||||
list_reagents = list("nutriment" = 3, "vitamin" = 2, "cherryshake" = 15)
|
||||
filling_color = "#FFFACD"
|
||||
tastes = list("ice cream" = 1, "charries" = 1)
|
||||
foodtype = FRUIT | DAIRY | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/bluecharrie_float
|
||||
name = "Blue Cherry Shake"
|
||||
trash = /obj/item/reagent_containers/food/drinks/drinkingglass
|
||||
desc = "Cherries mixed with ice-cream, known for its filling tastes. This one is a exotic blue!"
|
||||
icon_state = "bluecherryshake"
|
||||
bonus_reagents = list("nutriment" = 3, "vitamin" = 1)
|
||||
list_reagents = list("nutriment" = 3, "vitamin" = 2, "bluecherryshake" = 10)
|
||||
filling_color = "#FFFACD"
|
||||
tastes = list("ice cream" = 1, "blue cherries" = 1)
|
||||
foodtype = FRUIT | DAIRY | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/spacefreezy
|
||||
name = "space freezy"
|
||||
desc = "The best icecream in space."
|
||||
@@ -126,6 +170,22 @@
|
||||
tastes = list("ice" = 1, "water" = 1, "berries" = 5)
|
||||
foodtype = FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/snowcones/peach
|
||||
name = "peach flavored snowcone"
|
||||
desc = "A peach flavord snowball in a paper cup."
|
||||
icon_state = "peach_sc"
|
||||
list_reagents = list("nutriment" = 1, "peachjuice" = 10)
|
||||
tastes = list("ice" = 1, "water" = 1, " peach" = 5)
|
||||
foodtype = FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/snowcones/strawberry
|
||||
name = "strawberry flavored snowcone"
|
||||
desc = "A strawberry flavord snowball in a paper cup."
|
||||
icon_state = "blue_sc"
|
||||
list_reagents = list("nutriment" = 1, "berryjuice" = 10)
|
||||
tastes = list("ice" = 1, "water" = 1, " strawberry" = 5)
|
||||
foodtype = FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/snowcones/fruitsalad
|
||||
name = "mixed fruit flavored snowcone"
|
||||
desc = "A mix of different flavors dizzled on a snowball in a paper cup."
|
||||
|
||||
@@ -322,6 +322,14 @@
|
||||
filling_color = "#800000"
|
||||
tastes = list("meat" = 1, "butter" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/corndog
|
||||
name = "corndog plate"
|
||||
desc = "A plate with two small corn dogs, with two dimples of ketchup and mustard to dip them in."
|
||||
icon_state = "dorndog"
|
||||
trash = /obj/item/trash/plate/alt
|
||||
tastes = list("hotdog" = 2, "mustard and ketchup" = 1, "fryed bread" = 1)
|
||||
bonus_reagents = list("nutriment" = 6, "vitamin" = 2, "mustard" = 5, "ketchup" = 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/kebab/rat
|
||||
name = "rat-kebab"
|
||||
desc = "Not so delicious rat meat, on a stick."
|
||||
|
||||
@@ -581,6 +581,14 @@
|
||||
icon_state = "chocolatestrawberry"
|
||||
list_reagents = list("sugar" = 5, "nutriment" = 2)
|
||||
filling_color = "#ffdf26"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
tastes = list("strawberries" = 5, "chocolate" = 3)
|
||||
foodtype = FRUIT | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebanana
|
||||
name = "Chocolate dipped banana"
|
||||
desc = "A banana dipped in a bit of chocolate and held on a stick."
|
||||
icon_state = "banana_coco"
|
||||
list_reagents = list("sugar" = 5, "nutriment" = 3, "vitamin" = 1)
|
||||
filling_color = "#ffdf26"
|
||||
tastes = list("banana" = 5, "chocolate" = 3)
|
||||
foodtype = FRUIT | SUGAR
|
||||
@@ -319,8 +319,16 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/strawberrypie
|
||||
name = "strawberry pie"
|
||||
desc = "A strawberry.pie."
|
||||
desc = "A strawberry pie."
|
||||
icon_state = "strawberrypie"
|
||||
bonus_reagents = list("nutriment" = 6, "vitamin" = 6)
|
||||
tastes = list("strawberry" = 1, "pie" = 1)
|
||||
foodtype = GRAIN | FRUIT | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/peachpie
|
||||
name = "peach pie"
|
||||
desc = "A pie with peach filling."
|
||||
icon_state = "strawberrypie"
|
||||
bonus_reagents = list("nutriment" = 5, "vitamin" = 6, "peachjuice" = 15)
|
||||
tastes = list("peach" = 1, "pie" = 1)
|
||||
foodtype = GRAIN | FRUIT
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#define ICECREAM_VANILLA 1
|
||||
#define ICECREAM_CHOCOLATE 2
|
||||
#define ICECREAM_STRAWBERRY 3
|
||||
#define ICECREAM_BLUE 4
|
||||
#define CONE_WAFFLE 5
|
||||
#define CONE_CHOC 6
|
||||
#define ICECREAM_PEACH 4
|
||||
#define ICECREAM_GRAPE 5
|
||||
#define ICECREAM_BLUE 6
|
||||
#define CONE_WAFFLE 7
|
||||
#define CONE_CHOC 8
|
||||
|
||||
|
||||
|
||||
/obj/machinery/icecream_vat
|
||||
name = "ice cream vat"
|
||||
@@ -26,7 +30,9 @@
|
||||
"cocoa" = 5,
|
||||
"vanilla" = 5,
|
||||
"berryjuice" = 5,
|
||||
"singulo" = 5)
|
||||
"singulo" = 5,
|
||||
"peachjuice" = 5,
|
||||
"grapejuice" = 5)
|
||||
|
||||
/obj/machinery/icecream_vat/proc/get_ingredient_list(type)
|
||||
switch(type)
|
||||
@@ -34,6 +40,10 @@
|
||||
return list("milk", "ice", "cocoa")
|
||||
if(ICECREAM_STRAWBERRY)
|
||||
return list("milk", "ice", "berryjuice")
|
||||
if(ICECREAM_PEACH)
|
||||
return list("milk", "ice", "peachjuice")
|
||||
if(ICECREAM_GRAPE)
|
||||
return list("milk", "ice", "grapejuice")
|
||||
if(ICECREAM_BLUE)
|
||||
return list("milk", "ice", "singulo")
|
||||
if(CONE_WAFFLE)
|
||||
@@ -50,6 +60,10 @@
|
||||
return "chocolate"
|
||||
if(ICECREAM_STRAWBERRY)
|
||||
return "strawberry"
|
||||
if(ICECREAM_PEACH)
|
||||
return "peach"
|
||||
if(ICECREAM_GRAPE)
|
||||
return "grape"
|
||||
if(ICECREAM_BLUE)
|
||||
return "blue"
|
||||
if(CONE_WAFFLE)
|
||||
@@ -62,7 +76,7 @@
|
||||
|
||||
/obj/machinery/icecream_vat/Initialize()
|
||||
. = ..()
|
||||
while(product_types.len < 6)
|
||||
while(product_types.len < 8)
|
||||
product_types.Add(5)
|
||||
create_reagents(100, OPENCONTAINER | NO_REACT)
|
||||
for(var/reagent in icecream_vat_reagents)
|
||||
@@ -76,6 +90,8 @@
|
||||
dat += "<b>Vanilla ice cream:</b> <a href='?src=[REF(src)];select=[ICECREAM_VANILLA]'><b>Select</b></a> <a href='?src=[REF(src)];make=[ICECREAM_VANILLA];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[ICECREAM_VANILLA];amount=5'><b>x5</b></a> [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice)<br>"
|
||||
dat += "<b>Strawberry ice cream:</b> <a href='?src=[REF(src)];select=[ICECREAM_STRAWBERRY]'><b>Select</b></a> <a href='?src=[REF(src)];make=[ICECREAM_STRAWBERRY];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[ICECREAM_STRAWBERRY];amount=5'><b>x5</b></a> [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)<br>"
|
||||
dat += "<b>Chocolate ice cream:</b> <a href='?src=[REF(src)];select=[ICECREAM_CHOCOLATE]'><b>Select</b></a> <a href='?src=[REF(src)];make=[ICECREAM_CHOCOLATE];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[ICECREAM_CHOCOLATE];amount=5'><b>x5</b></a> [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)<br>"
|
||||
dat += "<b>Peach ice cream:</b> <a href='?src=[REF(src)];select=[ICECREAM_PEACH]'><b>Select</b></a> <a href='?src=[REF(src)];make=[ICECREAM_PEACH];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[ICECREAM_PEACH];amount=5'><b>x5</b></a> [product_types[ICECREAM_PEACH]] dollops left. (Ingredients: milk, ice, peach juice)<br>"
|
||||
dat += "<b>Grape ice cream:</b> <a href='?src=[REF(src)];select=[ICECREAM_GRAPE]'><b>Select</b></a> <a href='?src=[REF(src)];make=[ICECREAM_GRAPE];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[ICECREAM_GRAPE];amount=5'><b>x5</b></a> [product_types[ICECREAM_GRAPE]] dollops left. (Ingredients: milk, ice, grape juice)<br>"
|
||||
dat += "<b>Blue ice cream:</b> <a href='?src=[REF(src)];select=[ICECREAM_BLUE]'><b>Select</b></a> <a href='?src=[REF(src)];make=[ICECREAM_BLUE];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[ICECREAM_BLUE];amount=5'><b>x5</b></a> [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)<br></div>"
|
||||
dat += "<br><b>CONES</b><br><div class='statusDisplay'>"
|
||||
dat += "<b>Waffle cones:</b> <a href='?src=[REF(src)];cone=[CONE_WAFFLE]'><b>Dispense</b></a> <a href='?src=[REF(src)];make=[CONE_WAFFLE];amount=1'><b>Make</b></a> <a href='?src=[REF(src)];make=[CONE_WAFFLE];amount=5'><b>x5</b></a> [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)<br>"
|
||||
@@ -207,6 +223,12 @@
|
||||
if ("strawberry")
|
||||
desc = "A delicious [cone_type] cone filled with strawberry ice cream. Definitely not made with real strawberries."
|
||||
reagents.add_reagent("berryjuice", 2)
|
||||
if ("peach")
|
||||
desc = "A delicious [cone_type] cone filled with peach ice cream. Definitely made with real peaches!"
|
||||
reagents.add_reagent("peachjuice", 2)
|
||||
if ("grape")
|
||||
desc = "A delicious [cone_type] cone filled with grape ice cream. Surprisingly, made with real pink grape, likely not real sugarcanes used."
|
||||
reagents.add_reagent("grapejuice", 2)
|
||||
if ("blue")
|
||||
desc = "A delicious [cone_type] cone filled with blue ice cream. Made with real... blue?"
|
||||
reagents.add_reagent("singulo", 2)
|
||||
@@ -228,6 +250,8 @@
|
||||
#undef ICECREAM_VANILLA
|
||||
#undef ICECREAM_CHOCOLATE
|
||||
#undef ICECREAM_STRAWBERRY
|
||||
#undef ICECREAM_PEACH
|
||||
#undef ICECREAM_GRAPE
|
||||
#undef ICECREAM_BLUE
|
||||
#undef CONE_WAFFLE
|
||||
#undef CONE_CHOC
|
||||
|
||||
@@ -144,6 +144,13 @@
|
||||
else
|
||||
O.forceMove(src)
|
||||
return TRUE
|
||||
|
||||
///Really simple proc, just moves the object "O" into the hands of mob "M" if able, done so I could modify the proc a little for the organ fridge
|
||||
/obj/machinery/smartfridge/proc/dispense(obj/item/O, var/mob/M)
|
||||
if(!M.put_in_hands(O))
|
||||
O.forceMove(drop_location())
|
||||
adjust_item_drop_location(O)
|
||||
|
||||
|
||||
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
@@ -197,9 +204,7 @@
|
||||
if(desired == 1 && Adjacent(usr) && !issilicon(usr))
|
||||
for(var/obj/item/O in src)
|
||||
if(O.name == params["name"])
|
||||
if(!usr.put_in_hands(O))
|
||||
O.forceMove(drop_location())
|
||||
adjust_item_drop_location(O)
|
||||
dispense(O, usr)
|
||||
break
|
||||
if (visible_contents)
|
||||
update_icon()
|
||||
@@ -209,8 +214,7 @@
|
||||
if(desired <= 0)
|
||||
break
|
||||
if(O.name == params["name"])
|
||||
O.forceMove(drop_location())
|
||||
adjust_item_drop_location(O)
|
||||
dispense(O, usr)
|
||||
desired--
|
||||
if (visible_contents)
|
||||
update_icon()
|
||||
@@ -378,6 +382,44 @@
|
||||
/obj/machinery/smartfridge/extract/preloaded
|
||||
initial_contents = list(/obj/item/slime_scanner = 2)
|
||||
|
||||
// ------------------------- You think you're better than Chem, huh?
|
||||
// Organ Surgery Smartfridge
|
||||
// ------------------------- Just wait till Tamiorgans
|
||||
/obj/machinery/smartfridge/organ
|
||||
name = "smart organ storage"
|
||||
desc = "A refrigerated storage unit for organ storage."
|
||||
max_n_of_items = 20 //vastly lower to prevent processing too long
|
||||
var/repair_rate = 0
|
||||
|
||||
/obj/machinery/smartfridge/organ/accept_check(obj/item/O)
|
||||
if(istype(O, /obj/item/organ))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/smartfridge/organ/load(obj/item/O)
|
||||
. = ..()
|
||||
if(!.) //if the item loads, clear can_decompose
|
||||
return
|
||||
var/obj/item/organ/organ = O
|
||||
organ.organ_flags |= ORGAN_FROZEN
|
||||
|
||||
/obj/machinery/smartfridge/organ/RefreshParts()
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
max_n_of_items = 20 * B.rating
|
||||
repair_rate = max(0, STANDARD_ORGAN_HEALING * (B.rating - 1))
|
||||
|
||||
/obj/machinery/smartfridge/organ/process()
|
||||
for(var/organ in contents)
|
||||
var/obj/item/organ/O = organ
|
||||
if(!istype(O))
|
||||
return
|
||||
O.applyOrganDamage(-repair_rate)
|
||||
|
||||
/obj/machinery/smartfridge/organ/Exited(obj/item/organ/AM, atom/newLoc)
|
||||
. = ..()
|
||||
if(istype(AM))
|
||||
AM.organ_flags &= ~ORGAN_FROZEN
|
||||
|
||||
// -----------------------------
|
||||
// Chemistry Medical Smartfridge
|
||||
// -----------------------------
|
||||
|
||||
@@ -381,6 +381,36 @@
|
||||
id = "neurotoxin"
|
||||
results = list("neurotoxin" = 2)
|
||||
required_reagents = list("gargleblaster" = 1, "morphine" = 1)
|
||||
//FermiChem vars: Easy to make, but hard to make potent
|
||||
OptimalTempMin = 200 // Lower area of bell curve for determining heat based rate reactions
|
||||
OptimalTempMax = 950 // Upper end for above
|
||||
ExplodeTemp = 999 //Temperature at which reaction explodes
|
||||
OptimalpHMin = 4.6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
|
||||
OptimalpHMax = 5.2 // Higest value for above
|
||||
ReactpHLim = 5 // How far out pH wil react, giving impurity place (Exponential phase)
|
||||
CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
|
||||
CurveSharpT = 2 // How sharp the temperature exponential curve is (to the power of value)
|
||||
CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value)
|
||||
ThermicConstant = 10 //Temperature change per 1u produced
|
||||
HIonRelease = 0.02 //pH change per 1u reaction
|
||||
RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect
|
||||
FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
|
||||
FermiExplode = FALSE //If the chemical explodes in a special way
|
||||
PurityMin = 0 //The minimum purity something has to be above, otherwise it explodes.
|
||||
clear_conversion = REACTION_CLEAR_INVERSE
|
||||
|
||||
/*
|
||||
/datum/chemical_reaction/neurotoxin/FermiFinish(datum/reagents/holder, var/atom/my_atom)
|
||||
var/datum/reagent/consumable/ethanol/neurotoxin/Nt = locate(/datum/reagent/consumable/ethanol/neurotoxin) in my_atom.reagents.reagent_list
|
||||
var/cached_volume = Nt.volume
|
||||
if(Nt.purity < 0.5)
|
||||
holder.remove_reagent(src.id, cached_volume)
|
||||
holder.add_reagent("neuroweak", cached_volume)
|
||||
*/
|
||||
|
||||
/datum/chemical_reaction/neurotoxin/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//reduced size
|
||||
volume = volume/10
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/snowwhite
|
||||
name = "Snow White"
|
||||
@@ -454,18 +484,6 @@
|
||||
results = list("vanillapudding" = 20)
|
||||
required_reagents = list("vanilla" = 5, "milk" = 5, "eggyolk" = 5)
|
||||
|
||||
/datum/chemical_reaction/cherryshake
|
||||
name = "Cherry Shake"
|
||||
id = "cherryshake"
|
||||
results = list("cherryshake" = 3)
|
||||
required_reagents = list("cherryjelly" = 1, "ice" = 1, "cream" = 1)
|
||||
|
||||
/datum/chemical_reaction/bluecherryshake
|
||||
name = "Blue Cherry Shake"
|
||||
id = "bluecherryshake"
|
||||
results = list("bluecherryshake" = 3)
|
||||
required_reagents = list("bluecherryjelly" = 1, "ice" = 1, "cream" = 1)
|
||||
|
||||
/datum/chemical_reaction/drunkenblumpkin
|
||||
name = "Drunken Blumpkin"
|
||||
id = "drunkenblumpkin"
|
||||
@@ -794,4 +812,17 @@
|
||||
name = "Red Queen"
|
||||
id = "red_queen"
|
||||
results = list("red_queen" = 10)
|
||||
required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
|
||||
required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
|
||||
|
||||
/datum/chemical_reaction/catnip_tea
|
||||
name = "Catnip Tea"
|
||||
id = "catnip_tea"
|
||||
results = list("catnip_tea" = 3)
|
||||
required_reagents = list("tea" = 5, "catnip" = 2)
|
||||
|
||||
/datum/chemical_reaction/commander_and_chief
|
||||
name = "Commander and Chief"
|
||||
id = "commander_and_chief"
|
||||
results = list("commander_and_chief" = 50)
|
||||
required_reagents = list("alliescocktail" = 50, "champagne" = 20, "doctorsdelight" = 10, "quintuple_sec" = 10, "screwdrivercocktail" = 10)
|
||||
mix_message = "When your powers combine, I am Captain Pl-..."
|
||||
|
||||
@@ -169,6 +169,15 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/peachcake
|
||||
name = "Peach cake"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/store/cake/peach_cake
|
||||
subcategory = CAT_CAKE
|
||||
|
||||
/datum/crafting_recipe/food/cak
|
||||
name = "Living cat/cake hybrid"
|
||||
reqs = list(
|
||||
|
||||
@@ -42,6 +42,52 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/honkdae
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/banana_split
|
||||
name = "Banana Split"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/obj/item/reagent_containers/food/snacks/chocolatebar = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/banana_split
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/root_float
|
||||
name = "Cola Float"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 1,
|
||||
/datum/reagent/consumable/space_cola = 10,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/cola_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/charrie_float
|
||||
name = "Cherry Shake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/charrie_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/bluecharrie_float
|
||||
name = "Blue Cherry Shake"
|
||||
always_availible = FALSE
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/icecream = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/bluecherries = 3,
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/bluecharrie_float
|
||||
subcategory = CAT_ICE
|
||||
|
||||
//////////////////////////SNOW CONES///////////////////////
|
||||
|
||||
/datum/crafting_recipe/food/flaverless_sc
|
||||
@@ -232,6 +278,28 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/honey
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/peach_sc
|
||||
name = "Peach snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/water = 5,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/peach
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/strawberry_sc
|
||||
name = "Strawberry snowcone"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/drinks/sillycup = 1,
|
||||
/datum/reagent/water = 5,
|
||||
/datum/reagent/consumable/ice = 15,
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberry = 2
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/snowcones/strawberry
|
||||
subcategory = CAT_ICE
|
||||
|
||||
/datum/crafting_recipe/food/honey_sc
|
||||
name = "Rainbow snowcone"
|
||||
reqs = list(
|
||||
|
||||
@@ -128,6 +128,18 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/pigblanket
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/corndog
|
||||
name = "Corndog meal"
|
||||
reqs = list(
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
|
||||
/obj/item/reagent_containers/food/snacks/bun = 1,
|
||||
/datum/reagent/consumable/mustard = 5,
|
||||
/datum/reagent/consumable/ketchup = 5
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/corndog
|
||||
subcategory = CAT_MEAT
|
||||
|
||||
/datum/crafting_recipe/food/ratkebab
|
||||
name = "Rat Kebab"
|
||||
reqs = list(
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/donut
|
||||
subcategory = CAT_PASTRY
|
||||
|
||||
/datum/crafting_recipe/food/donut
|
||||
/datum/crafting_recipe/food/donut/semen
|
||||
time = 15
|
||||
name = "Semen donut"
|
||||
reqs = list(
|
||||
|
||||
@@ -214,4 +214,13 @@
|
||||
/obj/item/slime_extract = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/cocolavatart
|
||||
subcategory = CAT_PIE
|
||||
|
||||
/datum/crafting_recipe/food/peachpie
|
||||
name = "Peach Pie"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach = 3
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/pie/peachpie
|
||||
subcategory = CAT_PIE
|
||||
@@ -82,11 +82,13 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
|
||||
if("setMusicVolume")
|
||||
data = setMusicVolume(arglist(params))
|
||||
|
||||
if("swaptodarkmode")
|
||||
swaptodarkmode()
|
||||
if("colorPresetPost") //User just swapped color presets in their goonchat preferences. Do we do anything else?
|
||||
switch(href_list["preset"])
|
||||
if("light")
|
||||
owner.force_white_theme()
|
||||
if("dark" || "normal")
|
||||
owner.force_dark_theme()
|
||||
|
||||
if("swaptolightmode")
|
||||
swaptolightmode()
|
||||
|
||||
if(data)
|
||||
ehjax_send(data = data)
|
||||
@@ -246,10 +248,3 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico
|
||||
|
||||
// url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript.
|
||||
C << output(url_encode(url_encode(message)), "browseroutput:output")
|
||||
|
||||
|
||||
/datum/chatOutput/proc/swaptolightmode() //Dark mode light mode stuff. Yell at KMC if this breaks! (See darkmode.dm for documentation)
|
||||
owner.force_white_theme()
|
||||
|
||||
/datum/chatOutput/proc/swaptodarkmode()
|
||||
owner.force_dark_theme()
|
||||
|
||||
@@ -7,20 +7,16 @@ html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
color: #f0f0f0;
|
||||
color: #000000;
|
||||
}
|
||||
body {
|
||||
background: #171717;
|
||||
background: #E0E0E0; /*CIT CHANGE - darkens chatbox a lil*/
|
||||
font-family: Verdana, sans-serif;
|
||||
font-size: 9pt;
|
||||
font-color: #f0f0f0;
|
||||
line-height: 1.2;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
word-wrap: break-word;
|
||||
scrollbar-face-color:#1A1A1A;
|
||||
scrollbar-track-color:#171717;
|
||||
scrollbar-highlight-color:#171717;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
em {
|
||||
@@ -60,9 +56,9 @@ img.icon {
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
a {color: #397ea5;}
|
||||
a.visited {color: #7c00e6;}
|
||||
a:visited {color: #7c00e6;}
|
||||
a {color: #0000ff;}
|
||||
a.visited {color: #ff00ff;}
|
||||
a:visited {color: #ff00ff;}
|
||||
a.popt {text-decoration: none;}
|
||||
|
||||
/*****************************************
|
||||
@@ -93,21 +89,21 @@ a.popt {text-decoration: none;}
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
padding: 8px;
|
||||
background: #202020;
|
||||
background: #d0d0d0;
|
||||
text-decoration: none;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
color: #a4bad6;
|
||||
color: #333;
|
||||
}
|
||||
#newMessages:hover {background: #171717;}
|
||||
#newMessages:hover {background: #ccc;}
|
||||
#newMessages i {vertical-align: middle; padding-left: 3px;}
|
||||
#ping {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 115px;
|
||||
width: 45px;
|
||||
background: #202020;
|
||||
background: #d0d0d0;
|
||||
height: 30px;
|
||||
padding: 8px 0 2px 0;
|
||||
}
|
||||
@@ -124,19 +120,19 @@ a.popt {text-decoration: none;}
|
||||
right: 0;
|
||||
}
|
||||
#userBar .subCell {
|
||||
background: #202020;
|
||||
background: #d0d0d0;
|
||||
height: 30px;
|
||||
padding: 5px 0;
|
||||
display: block;
|
||||
color: #a4bad6;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
line-height: 28px;
|
||||
border-top: 1px solid #171717;
|
||||
border-top: 1px solid #b4b4b4;
|
||||
}
|
||||
#userBar .subCell:hover {background: #202020;}
|
||||
#userBar .subCell:hover {background: #ccc;}
|
||||
#userBar .toggle {
|
||||
width: 40px;
|
||||
background: #202020;
|
||||
background: #ccc;
|
||||
border-top: 0;
|
||||
float: right;
|
||||
text-align: center;
|
||||
@@ -172,7 +168,7 @@ a.popt {text-decoration: none;}
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
background: #ddd;
|
||||
background: #d0d0d0;
|
||||
}
|
||||
.popup .close {
|
||||
position: absolute;
|
||||
@@ -189,7 +185,7 @@ a.popt {text-decoration: none;}
|
||||
.popup .close:hover {background: #999;}
|
||||
.popup .head {
|
||||
background: #999;
|
||||
color: #ddd;
|
||||
color: #d0d0d0;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
@@ -200,7 +196,7 @@ a.popt {text-decoration: none;}
|
||||
}
|
||||
.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;}
|
||||
.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;}
|
||||
.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;}
|
||||
.popup input[type=submit] {padding: 5px 10px; background: #999; color: #d0d0d0; text-transform: uppercase; font-size: 0.9em; font-weight: bold;}
|
||||
.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;}
|
||||
|
||||
.changeFont {padding: 10px;}
|
||||
@@ -214,7 +210,7 @@ a.popt {text-decoration: none;}
|
||||
|
||||
/* ADMIN CONTEXT MENU */
|
||||
.contextMenu {
|
||||
background-color: #ddd;
|
||||
background-color: #d0d0d0;
|
||||
position: fixed;
|
||||
margin: 2px;
|
||||
width: 150px;
|
||||
@@ -246,9 +242,9 @@ a.popt {text-decoration: none;}
|
||||
******************************************/
|
||||
|
||||
/* MOTD */
|
||||
.motd {color: #a4bad6; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #a4bad6; text-decoration: underline;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #a4bad6;}
|
||||
.motd {color: #638500; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #638500; text-decoration: underline;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #638500;}
|
||||
|
||||
/* ADD HERE FOR BOLD */
|
||||
.bold, .name, .prefix, .ooc, .looc, .adminooc, .admin, .medal, .yell {font-weight: bold;}
|
||||
@@ -259,90 +255,91 @@ a.popt {text-decoration: none;}
|
||||
/* OUTPUT COLORS */
|
||||
.highlight {background: yellow;}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {color: #a4bad6;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1.alert, h2.alert {color: #a4bad6;}
|
||||
h1, h2, h3, h4, h5, h6 {color: #0000ff;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
em {font-style: normal; font-weight: bold;}
|
||||
|
||||
.ooc {color: #cca300; font-weight: bold;}
|
||||
.antagooc {color: #ce254f; font-weight: bold;}
|
||||
.ooc {color: #002eb8; font-weight: bold;}
|
||||
.looc {color: #6699CC; font-weight: bold;}
|
||||
.antagooc {color: #b8002e; font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #3d5bc3; font-weight: bold;}
|
||||
.adminooc {color: #700038; font-weight: bold;}
|
||||
|
||||
.adminsay {color: #ff4500; font-weight: bold;}
|
||||
.admin {color: #5975da; font-weight: bold;}
|
||||
.adminsay {color: #FF4500}
|
||||
.admin {color: #386aff; font-weight: bold;}
|
||||
|
||||
.name { font-weight: bold;}
|
||||
|
||||
.say {}
|
||||
.deadsay {color: #e2c1ff;}
|
||||
.deadsay {color: #5c00e6;}
|
||||
.binarysay {color: #20c20e; background-color: #000000; display: block;}
|
||||
.binarysay a {color: #00ff00;}
|
||||
.binarysay a:active, .binarysay a:visited {color: #88ff88;}
|
||||
.radio {color: #1ecc43;}
|
||||
.sciradio {color: #c68cfa;}
|
||||
.comradio {color: #5177ff;}
|
||||
.secradio {color: #dd3535;}
|
||||
.medradio {color: #57b8f0;}
|
||||
.engradio {color: #f37746;}
|
||||
.suppradio {color: #b88646;}
|
||||
.servradio {color: #6ca729;}
|
||||
.syndradio {color: #8f4a4b;}
|
||||
.centcomradio {color: #2681a5;}
|
||||
.aiprivradio {color: #d65d95;}
|
||||
.redteamradio {color: #ff4444;}
|
||||
.blueteamradio {color: #3434fd;}
|
||||
.radio {color: #008000;}
|
||||
.sciradio {color: #993399;}
|
||||
.comradio {color: #948f02;}
|
||||
.secradio {color: #a30000;}
|
||||
.medradio {color: #337296;}
|
||||
.engradio {color: #fb5613;}
|
||||
.suppradio {color: #a8732b;}
|
||||
.servradio {color: #6eaa2c;}
|
||||
.syndradio {color: #6d3f40;}
|
||||
.centcomradio {color: #686868;}
|
||||
.aiprivradio {color: #ff00ff;}
|
||||
.redteamradio {color: #ff0000;}
|
||||
.blueteamradio {color: #0000ff;}
|
||||
|
||||
.yell { font-weight: bold;}
|
||||
|
||||
.alert {color: #d82020;}
|
||||
h1.alert, h2.alert {color: #99aab5;}
|
||||
.alert {color: #ff0000;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.emote { font-style: italic;}
|
||||
.selecteddna {color: #ffffff; background-color: #001B1B}
|
||||
|
||||
.attack {color: #e01c1c;}
|
||||
.disarm {color: #b42525;}
|
||||
.passive {color: #a00f0f;}
|
||||
.attack {color: #ff0000;}
|
||||
.disarm {color: #990000;}
|
||||
.passive {color: #660000;}
|
||||
|
||||
.userdanger {color: #c51e1e; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #c51e1e;}
|
||||
.warning {color: #c51e1e; font-style: italic;}
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.alertwarning {color: #FF0000; font-weight: bold}
|
||||
.boldwarning {color: #c51e1e; font-style: italic; font-weight: bold}
|
||||
.announce {color: #c51e1e; font-weight: bold;}
|
||||
.boldannounce {color: #c51e1e; font-weight: bold;}
|
||||
.greenannounce {color: #059223; font-weight: bold;}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
.greenannounce {color: #00ff00; font-weight: bold;}
|
||||
.rose {color: #ff5050;}
|
||||
.info {color: #6685f5;}
|
||||
.notice {color: #6685f5;}
|
||||
.boldnotice {color: #6685f5; font-weight: bold;}
|
||||
.adminnotice {color: #6685f5;}
|
||||
.info {color: #0000CC;}
|
||||
.notice {color: #000099;}
|
||||
.boldnotice {color: #000099; font-weight: bold;}
|
||||
.adminnotice {color: #0000ff;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #a4bad6; font-weight: bold;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.red {color: #FF0000}
|
||||
.pink {color: #ff70c1;}
|
||||
.blue {color: #215cff}
|
||||
.green {color: #059223;}
|
||||
.nicegreen {color: #059223;}
|
||||
.green {color: #03ff39;}
|
||||
.red {color: #FF0000;}
|
||||
.pink {color: #FF69Bf;}
|
||||
.blue {color: #0000FF;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
|
||||
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
|
||||
.shadowling {color: #8e8a99;}
|
||||
.cult {color: #aa1c1c;}
|
||||
.shadowling {color: #3b2769;}
|
||||
.cult {color: #960000;}
|
||||
|
||||
.cultitalic {color: #aa1c1c; font-style: italic;}
|
||||
.cultbold {color: #aa1c1c; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #aa1c1c; font-weight: bold; font-size: 24px;}
|
||||
.cultitalic {color: #960000; font-style: italic;}
|
||||
.cultbold {color: #960000; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
|
||||
.cultlarge {color: #aa1c1c; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #aa1c1c; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #aa1c1c; font-weight: bold; font-size: 48px;}
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #960000; font-weight: bold; font-size: 48px;}
|
||||
.colossus {color: #7F282A; font-size: 40px;}
|
||||
.hierophant {color: #b441ee; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #c56bf1; font-style: italic;}
|
||||
.purple {color: #9956d3;}
|
||||
.holoparasite {color: #88809c;}
|
||||
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #660099; font-style: italic;}
|
||||
.purple {color: #5e2d79;}
|
||||
.holoparasite {color: #35333a;}
|
||||
|
||||
.revennotice {color: #1d2953;}
|
||||
.revenboldnotice {color: #1d2953; font-weight: bold;}
|
||||
@@ -350,11 +347,11 @@ h1.alert, h2.alert {color: #99aab5;}
|
||||
.revenminor {color: #823abb}
|
||||
.revenwarning {color: #760fbb; font-style: italic;}
|
||||
.revendanger {color: #760fbb; font-weight: bold; font-size: 24px;}
|
||||
.umbra {color: #7c00e6;}
|
||||
.umbra_emphasis {color: #7c00e6; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #7c00e6; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.umbra {color: #5000A0;}
|
||||
.umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
|
||||
.deconversion_message {color: #a947ff; font-size: 24px; font-style: italic;}
|
||||
.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;}
|
||||
|
||||
.brass {color: #BE8700;}
|
||||
.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;}
|
||||
@@ -379,17 +376,17 @@ h1.alert, h2.alert {color: #99aab5;}
|
||||
.neovgre {color: #6E001A; font-weight: bold; font-style: italic;}
|
||||
.neovgre_small {color: #6E001A;}
|
||||
|
||||
.newscaster {color: #c05d5d;}
|
||||
.ghostalert {color: #6600ff; font-style: italic; font-weight: bold;}
|
||||
.newscaster {color: #800000;}
|
||||
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
|
||||
|
||||
.alien {color: #855d85;}
|
||||
.noticealien {color: #059223;}
|
||||
.alertalien {color: #059223; font-weight: bold;}
|
||||
.changeling {color: #059223; font-style: italic;}
|
||||
.alien {color: #543354;}
|
||||
.noticealien {color: #00c000;}
|
||||
.alertalien {color: #00c000; font-weight: bold;}
|
||||
.changeling {color: #800080; font-style: italic;}
|
||||
|
||||
.spider {color: #8800ff;}
|
||||
.spider {color: #4d004d;}
|
||||
|
||||
.interface {color: #750e75;}
|
||||
.interface {color: #330033;}
|
||||
|
||||
.sans {font-family: "Comic Sans MS", cursive, sans-serif;}
|
||||
.papyrus {font-family: "Papyrus", cursive, sans-serif;}
|
||||
@@ -400,9 +397,9 @@ h1.alert, h2.alert {color: #99aab5;}
|
||||
.big {font-size: 24px;}
|
||||
.reallybig {font-size: 32px;}
|
||||
.extremelybig {font-size: 40px;}
|
||||
.greentext {color: #059223; font-size: 24px;}
|
||||
.redtext {color: #c51e1e; font-size: 24px;}
|
||||
.clown {color: #ff70c1; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.greentext {color: #00FF00; font-size: 24px;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
@keyframes velvet {
|
||||
@@ -434,20 +431,20 @@ h1.alert, h2.alert {color: #99aab5;}
|
||||
|
||||
.memo {color: #638500; text-align: center;}
|
||||
.memoedit {text-align: center; font-size: 16px;}
|
||||
.abductor {color: #c204c2; font-style: italic;}
|
||||
.mind_control {color: #df3da9; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.abductor {color: #800080; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.slime {color: #00CED1;}
|
||||
.drone {color: #848482;}
|
||||
.monkey {color: #975032;}
|
||||
.swarmer {color: #2C75FF;}
|
||||
.resonate {color: #298F85;}
|
||||
|
||||
.monkeyhive {color: #a56408;}
|
||||
.monkeylead {color: #af6805; font-size: 2;}
|
||||
.monkeyhive {color: #774704;}
|
||||
.monkeylead {color: #774704; font-size: 2;}
|
||||
|
||||
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
|
||||
.connectionClosed.restored {background: green;}
|
||||
.internal.boldnshit {color: #3d5bc3; font-weight: bold;}
|
||||
.internal.boldnshit {color: #000099; font-weight: bold;}
|
||||
|
||||
/* HELPER CLASSES */
|
||||
.text-normal {font-weight: normal; font-style: normal;}
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
html, body {color: #E0E0E0;}
|
||||
body {
|
||||
background: #171717;
|
||||
font-color: #E0E0E0;
|
||||
scrollbar-face-color:#1A1A1A;
|
||||
scrollbar-track-color:#171717;
|
||||
scrollbar-highlight-color:#171717;
|
||||
}
|
||||
|
||||
a {color: #397ea5;}
|
||||
a.visited {color: #7c00e6;}
|
||||
a:visited {color: #7c00e6;}
|
||||
|
||||
#newMessages {
|
||||
background: #242424;
|
||||
color: #E0E0E0;
|
||||
}
|
||||
#newMessages:hover {background: #272727;}
|
||||
|
||||
#ping {background: #272727;}
|
||||
|
||||
#userBar .subCell {
|
||||
background: #272727;
|
||||
color: #E0E0E0;
|
||||
border-top: 1px solid #171717;
|
||||
}
|
||||
#userBar .subCell:hover {background: #272727;}
|
||||
#userBar .toggle {background: #272727;}
|
||||
|
||||
/* MOTD */
|
||||
.motd {color: #E0E0E0; font-family: Verdana, sans-serif;}
|
||||
.motd h1, .motd h2, .motd h3, .motd h4, .motd h5, .motd h6 {color: #E0E0E0; text-decoration: underline;}
|
||||
.motd a, .motd a:link, .motd a:visited, .motd a:active, .motd a:hover {color: #E0E0E0;}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {color: #E0E0E0;font-family: Georgia, Verdana, sans-serif;}
|
||||
h1.alert, h2.alert {color: #E0E0E0;}
|
||||
|
||||
.ooc {color: #cca300; font-weight: bold;}
|
||||
.looc {color: #d8b555; font-weight: bold;}
|
||||
.antagooc {color: #ce254f; font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #3d5bc3; font-weight: bold;}
|
||||
|
||||
.admin {color: #5975da; font-weight: bold;}
|
||||
|
||||
.deadsay {color: #e2c1ff;}
|
||||
.radio {color: #1ecc43;}
|
||||
.sciradio {color: #c68cfa;}
|
||||
.comradio {color: #5177ff;}
|
||||
.secradio {color: #dd3535;}
|
||||
.medradio {color: #57b8f0;}
|
||||
.engradio {color: #f37746;}
|
||||
.suppradio {color: #b88646;}
|
||||
.servradio {color: #6ca729;}
|
||||
.syndradio {color: #8f4a4b;}
|
||||
.centcomradio {color: #2681a5;}
|
||||
.aiprivradio {color: #d65d95;}
|
||||
.redteamradio {color: #ff4444;}
|
||||
.blueteamradio {color: #3434fd;}
|
||||
|
||||
.alert {color: #d82020;}
|
||||
h1.alert, h2.alert {color: #99aab5;}
|
||||
|
||||
.attack {color: #e01c1c;}
|
||||
.disarm {color: #b42525;}
|
||||
.passive {color: #a00f0f;}
|
||||
|
||||
.userdanger {color: #c51e1e; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #c51e1e;}
|
||||
.warning {color: #c51e1e; font-style: italic;}
|
||||
.alertwarning {color: #c51e1e; font-weight: bold}
|
||||
.boldwarning {color: #c51e1e; font-style: italic; font-weight: bold}
|
||||
.announce {color: #c51e1e; font-weight: bold;}
|
||||
.boldannounce {color: #c51e1e; font-weight: bold;}
|
||||
.greenannounce {color: #059223; font-weight: bold;}
|
||||
.info {color: #6685f5;}
|
||||
.notice {color: #6685f5;}
|
||||
.boldnotice {color: #6685f5; font-weight: bold;}
|
||||
.adminnotice {color: #6685f5;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #E0E0E0; font-weight: bold;}
|
||||
.red {color: #FF0000}
|
||||
.pink {color: #ff70c1;}
|
||||
.blue {color: #215cff}
|
||||
.green {color: #059223;}
|
||||
.nicegreen {color: #059223;}
|
||||
.userlove {color: #ff42a6; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #82365e;}
|
||||
.love {color: #ff4591; font-style: italic; text-shadow: 0 0 6px #994449;}
|
||||
.shadowling {color: #8e8a99;}
|
||||
.cult {color: #aa1c1c;}
|
||||
|
||||
.cultitalic {color: #aa1c1c; font-style: italic;}
|
||||
.cultbold {color: #aa1c1c; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #aa1c1c; font-weight: bold; font-size: 24px;}
|
||||
|
||||
.cultlarge {color: #aa1c1c; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #aa1c1c; font-weight: bold; font-size: 120px;}
|
||||
.narsiesmall {color: #aa1c1c; font-weight: bold; font-size: 48px;}
|
||||
.hierophant {color: #b441ee; font-weight: bold; font-style: italic;}
|
||||
.hierophant_warning {color: #c56bf1; font-style: italic;}
|
||||
.purple {color: #9956d3;}
|
||||
.holoparasite {color: #88809c;}
|
||||
|
||||
.revennotice {color: #3645aa;}
|
||||
.revenboldnotice {color: #3645aa; font-weight: bold;}
|
||||
.revenbignotice {color: #3645aa; font-weight: bold; font-size: 24px;}
|
||||
.revenminor {color: #823ddd}
|
||||
.revenwarning {color: #8911d9; font-style: italic;}
|
||||
.revendanger {color: #8911d9; font-weight: bold; font-size: 24px;}
|
||||
.umbra {color: #7c00e6;}
|
||||
.umbra_emphasis {color: #7c00e6; font-weight: bold; font-style: italic;}
|
||||
.umbra_large {color: #7c00e6; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
|
||||
.deconversion_message {color: #a947ff; font-size: 24px; font-style: italic;}
|
||||
|
||||
.alloy {color: #545b64;}
|
||||
.heavy_alloy {color: #545b64; font-weight: bold; font-style: italic;}
|
||||
.nezbere_large {color: #545b64; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.nezbere {color: #545b64; font-weight: bold; font-style: italic;}
|
||||
.nezbere_small {color: #545b64;}
|
||||
.inathneq_large {color: #1d7dc7; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.inathneq {color: #1d7dc7; font-weight: bold; font-style: italic;}
|
||||
.inathneq_small {color: #1d7dc7;}
|
||||
.neovgre_large {color: #7c0622; font-size: 24px; font-weight: bold; font-style: italic;}
|
||||
.neovgre {color: #7c0622; font-weight: bold; font-style: italic;}
|
||||
.neovgre_small {color: #7c0622;}
|
||||
|
||||
.newscaster {color: #c05d5d;}
|
||||
.ghostalert {color: #6600ff; font-style: italic; font-weight: bold;}
|
||||
|
||||
.alien {color: #855d85;}
|
||||
.noticealien {color: #059223;}
|
||||
.alertalien {color: #059223; font-weight: bold;}
|
||||
.changeling {color: #059223; font-style: italic;}
|
||||
|
||||
.spider {color: #8800ff;}
|
||||
|
||||
.interface {color: #750e75;}
|
||||
|
||||
.greentext {color: #059223; font-size: 24px;}
|
||||
.redtext {color: #c51e1e; font-size: 24px;}
|
||||
.clown {color: #ff70c1; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
@keyframes velvet {
|
||||
0% { color: #890020; }
|
||||
40% { color: #c51e1e; }
|
||||
50% { color: #FF8888; }
|
||||
60% { color: #c51e1e; }
|
||||
100% { color: #890020; }
|
||||
}
|
||||
|
||||
.abductor {color: #c204c2; font-style: italic;}
|
||||
.mind_control {color: #df3da9; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.drone {color: #979795;}
|
||||
|
||||
.monkeyhive {color: #a56408;}
|
||||
.monkeylead {color: #af6805; font-size: 2;}
|
||||
|
||||
.internal.boldnshit {color: #3d5bc3; font-weight: bold;}
|
||||
+43
-236
@@ -1,236 +1,18 @@
|
||||
/*****************************************
|
||||
*
|
||||
* GLOBAL STYLES
|
||||
*
|
||||
******************************************/
|
||||
html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
color: #000000;
|
||||
}
|
||||
body {
|
||||
background: #fff;
|
||||
font-family: Verdana, sans-serif;
|
||||
font-size: 9pt;
|
||||
line-height: 1.2;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
body {background: #F1F1F1;}
|
||||
|
||||
em {
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
#newMessages {background: #ddd;}
|
||||
#ping {background: #ddd;}
|
||||
|
||||
img {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1;
|
||||
-ms-interpolation-mode: nearest-neighbor;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
img.icon {
|
||||
height: 1em;
|
||||
min-height: 16px;
|
||||
width: auto;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
|
||||
.r:before { /* "repeated" badge class for combined messages */
|
||||
content: 'x';
|
||||
}
|
||||
.r {
|
||||
display: inline-block;
|
||||
min-width: 0.5em;
|
||||
font-size: 0.7em;
|
||||
padding: 0.2em 0.3em;
|
||||
line-height: 1;
|
||||
color: white;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
background-color: crimson;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
a {color: #0000ff;}
|
||||
a.visited {color: #ff00ff;}
|
||||
a:visited {color: #ff00ff;}
|
||||
a.popt {text-decoration: none;}
|
||||
|
||||
/*****************************************
|
||||
*
|
||||
* OUTPUT NOT RELATED TO ACTUAL MESSAGES
|
||||
*
|
||||
******************************************/
|
||||
#loading {
|
||||
position: fixed;
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin: -75px 0 0 -150px;
|
||||
}
|
||||
#loading i {display: block; padding-bottom: 3px;}
|
||||
|
||||
#messages {
|
||||
font-size: 13px;
|
||||
padding: 3px;
|
||||
margin: 0;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#newMessages {
|
||||
position: fixed;
|
||||
display: block;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
padding: 8px;
|
||||
background: #ddd;
|
||||
text-decoration: none;
|
||||
font-variant: small-caps;
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
#newMessages:hover {background: #ccc;}
|
||||
#newMessages i {vertical-align: middle; padding-left: 3px;}
|
||||
#ping {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 115px;
|
||||
width: 45px;
|
||||
background: #ddd;
|
||||
height: 30px;
|
||||
padding: 8px 0 2px 0;
|
||||
}
|
||||
#ping i {display: block; text-align: center;}
|
||||
#ping .ms {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 8pt;
|
||||
padding-top: 2px;
|
||||
}
|
||||
#userBar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
#userBar .subCell {
|
||||
background: #ddd;
|
||||
height: 30px;
|
||||
padding: 5px 0;
|
||||
display: block;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
line-height: 28px;
|
||||
border-top: 1px solid #b4b4b4;
|
||||
}
|
||||
#userBar .subCell:hover {background: #ccc;}
|
||||
#userBar .toggle {
|
||||
width: 40px;
|
||||
background: #ccc;
|
||||
border-top: 0;
|
||||
float: right;
|
||||
text-align: center;
|
||||
}
|
||||
#userBar .sub {clear: both; display: none; width: 160px;}
|
||||
#userBar .sub.scroll {overflow-y: scroll;}
|
||||
#userBar .sub.subCell {padding: 3px 0 3px 8px; line-height: 30px; font-size: 0.9em; clear: both;}
|
||||
#userBar .sub span {
|
||||
display: block;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
}
|
||||
#userBar .sub i {
|
||||
display: block;
|
||||
padding: 0 5px;
|
||||
font-size: 1.1em;
|
||||
width: 22px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
float: right;
|
||||
}
|
||||
#userBar .sub input {
|
||||
position: absolute;
|
||||
padding: 7px 5px;
|
||||
width: 121px;
|
||||
line-height: 30px;
|
||||
float: left;
|
||||
}
|
||||
#userBar .topCell {border-top: 0;}
|
||||
#userBar .subCell {background: #ddd;}
|
||||
|
||||
/* POPUPS */
|
||||
.popup {
|
||||
position: fixed;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
background: #ddd;
|
||||
}
|
||||
.popup .close {
|
||||
position: absolute;
|
||||
background: #aaa;
|
||||
top: 0;
|
||||
right: 0;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
z-index: 2;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.popup .close:hover {background: #999;}
|
||||
.popup .head {
|
||||
background: #999;
|
||||
color: #ddd;
|
||||
padding: 0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
border-bottom: 2px solid green;
|
||||
}
|
||||
.popup input {border: 1px solid #999; background: #fff; margin: 0; padding: 5px; outline: none; color: #333;}
|
||||
.popup input[type=text]:hover, .popup input[type=text]:active, .popup input[type=text]:focus {border-color: green;}
|
||||
.popup input[type=submit] {padding: 5px 10px; background: #999; color: #ddd; text-transform: uppercase; font-size: 0.9em; font-weight: bold;}
|
||||
.popup input[type=submit]:hover, .popup input[type=submit]:focus, .popup input[type=submit]:active {background: #aaa; cursor: pointer;}
|
||||
|
||||
.changeFont {padding: 10px;}
|
||||
.changeFont a {display: block; text-decoration: none; padding: 3px; color: #333;}
|
||||
.changeFont a:hover {background: #ccc;}
|
||||
|
||||
.highlightPopup {padding: 10px; text-align: center;}
|
||||
.highlightPopup input[type=text] {display: block; width: 215px; text-align: left; margin-top: 5px;}
|
||||
.highlightPopup input.highlightColor {background-color: #FFFF00;}
|
||||
.highlightPopup input.highlightTermSubmit {margin-top: 5px;}
|
||||
.popup {background: #ddd;}
|
||||
.popup .head {color: #ddd;}
|
||||
.popup input[type=submit] {color: #ddd;}
|
||||
|
||||
/* ADMIN CONTEXT MENU */
|
||||
.contextMenu {
|
||||
background-color: #ddd;
|
||||
position: fixed;
|
||||
margin: 2px;
|
||||
width: 150px;
|
||||
}
|
||||
.contextMenu a {
|
||||
display: block;
|
||||
padding: 2px 5px;
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
}
|
||||
.contextMenu {background-color: #ddd;}
|
||||
|
||||
.contextMenu a:hover {
|
||||
background-color: #ccc;
|
||||
}
|
||||
|
||||
/* ADMIN FILTER MESSAGES MENU */
|
||||
.filterMessages {padding: 5px;}
|
||||
.filterMessages div {padding: 2px 0;}
|
||||
.filterMessages input {}
|
||||
.filterMessages label {}
|
||||
|
||||
.icon-stack {height: 1em; line-height: 1em; width: 1em; vertical-align: middle; margin-top: -2px;}
|
||||
|
||||
@@ -261,12 +43,13 @@ h1.alert, h2.alert {color: #000000;}
|
||||
em {font-style: normal; font-weight: bold;}
|
||||
|
||||
.ooc {color: #002eb8; font-weight: bold;}
|
||||
.looc {color: #6699CC; font-weight: bold;}
|
||||
.antagooc {color: #b8002e; font-weight: bold;}
|
||||
.adminobserverooc {color: #0099cc; font-weight: bold;}
|
||||
.adminooc {color: #700038; font-weight: bold;}
|
||||
|
||||
.adminsay {color: #ff4500; font-weight: bold;}
|
||||
.admin {color: #4473ff; font-weight: bold;}
|
||||
.adminsay {color: #FF4500}
|
||||
.admin {color: #386aff; font-weight: bold;}
|
||||
|
||||
.name { font-weight: bold;}
|
||||
|
||||
@@ -304,7 +87,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.alertwarning {color: #FF0000; font-weight: bold}
|
||||
.alertwarning {color: #FF0000; font-weight: bold}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
@@ -317,10 +100,10 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.adminhelp {color: #ff0000; font-weight: bold;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.green {color: #03ff39;}
|
||||
.red {color: #FF0000}
|
||||
.green {color: #03ff39;}
|
||||
.red {color: #FF0000;}
|
||||
.pink {color: #FF69Bf;}
|
||||
.blue {color: #0000FF}
|
||||
.blue {color: #0000FF;}
|
||||
.nicegreen {color: #14a833;}
|
||||
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
|
||||
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
|
||||
@@ -329,7 +112,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.cultitalic {color: #960000; font-style: italic;}
|
||||
.cultbold {color: #960000; font-style: italic; font-weight: bold;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.cultboldtalic {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
|
||||
.cultlarge {color: #960000; font-weight: bold; font-size: 24px;}
|
||||
.narsie {color: #960000; font-weight: bold; font-size: 120px;}
|
||||
@@ -400,13 +183,38 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.redtext {color: #FF0000; font-size: 24px;}
|
||||
.clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}
|
||||
.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;}
|
||||
.velvet {color: #660015; font-weight: bold; animation: velvet 5000ms infinite;}
|
||||
@keyframes velvet {
|
||||
0% { color: #400020; }
|
||||
40% { color: #FF0000; }
|
||||
50% { color: #FF8888; }
|
||||
60% { color: #FF0000; }
|
||||
100% { color: #400020; }
|
||||
}
|
||||
|
||||
.hypnophrase {color: #202020; font-weight: bold; animation: hypnocolor 1500ms infinite;}
|
||||
@keyframes hypnocolor {
|
||||
0% { color: #202020; }
|
||||
25% { color: #4b02ac; }
|
||||
50% { color: #9f41f1; }
|
||||
75% { color: #541c9c; }
|
||||
100% { color: #7adbf3; }
|
||||
}
|
||||
|
||||
.phobia {color: #dd0000; font-weight: bold; animation: phobia 750ms infinite;}
|
||||
@keyframes phobia {
|
||||
0% { color: #f75a5a; }
|
||||
50% { color: #dd0000; }
|
||||
100% { color: #f75a5a; }
|
||||
}
|
||||
|
||||
|
||||
.icon {height: 1em; width: auto;}
|
||||
|
||||
.memo {color: #638500; text-align: center;}
|
||||
.memoedit {text-align: center; font-size: 16px;}
|
||||
.abductor {color: #800080; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.mind_control {color: #A00D6F; font-size: 3; font-weight: bold; font-style: italic;}
|
||||
.slime {color: #00CED1;}
|
||||
.drone {color: #848482;}
|
||||
.monkey {color: #975032;}
|
||||
@@ -418,9 +226,8 @@ h1.alert, h2.alert {color: #000000;}
|
||||
|
||||
.connectionClosed, .fatalError {background: red; color: white; padding: 5px;}
|
||||
.connectionClosed.restored {background: green;}
|
||||
.internal.boldnshit {color: blue; font-weight: bold;}
|
||||
.internal.boldnshit {color: #000099; font-weight: bold;}
|
||||
|
||||
/* HELPER CLASSES */
|
||||
.text-normal {font-weight: normal; font-style: normal;}
|
||||
.hidden {display: none; visibility: hidden;}
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<link rel="stylesheet" type="text/css" href="font-awesome.css" />
|
||||
<link id="sheetofstyles" rel="stylesheet" type="text/css" href="browserOutput_white.css" />
|
||||
<link rel="stylesheet" type="text/css" href="browserOutput.css" />
|
||||
<link rel="stylesheet" type="text/css" href="spritesheet_chat.css" />
|
||||
<link rel="stylesheet" type="text/css" id="colorPresetLink"/>
|
||||
<script type="text/javascript" src="errorHandler.js"></script>
|
||||
<script type="text/javascript" src="jquery.min.js"></script>
|
||||
<script type="text/javascript" src="json2.min.js"></script>
|
||||
@@ -29,7 +30,7 @@
|
||||
<span class="ms" id="pingMs">--ms</span>
|
||||
</div>
|
||||
<div id="darkmodething">
|
||||
<a href="#" class="subCell toggle" id="darkmodetoggle" title="Darkmode"><i class="icon-adjust"></i></a>
|
||||
<a href="#" class="subCell toggle" id="changeColorPreset" title="Change color preset"><i class="icon-eye-open"></i></a>
|
||||
</div>
|
||||
<div id="audio">
|
||||
<a href="#" class="subCell toggle" id="toggleAudio" title="Audio"><i class="icon-volume-up"></i></a>
|
||||
|
||||
@@ -35,7 +35,7 @@ var opts = {
|
||||
'wasd': false, //Is the user in wasd mode?
|
||||
'priorChatHeight': 0, //Thing for height-resizing detection
|
||||
'restarting': false, //Is the round restarting?
|
||||
'darkmode':false, //Are we using darkmode? If not WHY ARE YOU LIVING IN 2009???
|
||||
'colorPreset': 0, // index in the color presets list.
|
||||
|
||||
//Options menu
|
||||
'selectedSubLoop': null, //Contains the interval loop for closing the selected sub menu
|
||||
@@ -73,6 +73,14 @@ var opts = {
|
||||
|
||||
};
|
||||
|
||||
// Array of names for chat display color presets.
|
||||
// If not set to normal, a CSS file `browserOutput_${name}.css` will be added to the head.
|
||||
var colorPresets = [
|
||||
'normal',
|
||||
'light',
|
||||
'dark'
|
||||
]
|
||||
|
||||
function clamp(val, min, max) {
|
||||
return Math.max(min, Math.min(val, max))
|
||||
}
|
||||
@@ -96,6 +104,12 @@ if (typeof String.prototype.trim !== 'function') {
|
||||
};
|
||||
}
|
||||
|
||||
function updateColorPreset() {
|
||||
var el = $("#colorPresetLink")[0];
|
||||
el.href = "browserOutput_"+colorPresets[opts.colorPreset]+".css";
|
||||
runByond('?_src_=chat&proc=colorPresetPost&preset='+colorPresets[opts.colorPreset]);
|
||||
}
|
||||
|
||||
// Linkify the contents of a node, within its parent.
|
||||
function linkify(parent, insertBefore, text) {
|
||||
var start = 0;
|
||||
@@ -395,19 +409,6 @@ function toHex(n) {
|
||||
return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16);
|
||||
}
|
||||
|
||||
function swap() { //Swap to darkmode
|
||||
if (opts.darkmode){
|
||||
document.getElementById("sheetofstyles").href = "browserOutput_white.css";
|
||||
opts.darkmode = false;
|
||||
runByond('?_src_=chat&proc=swaptolightmode');
|
||||
} else {
|
||||
document.getElementById("sheetofstyles").href = "browserOutput.css";
|
||||
opts.darkmode = true;
|
||||
runByond('?_src_=chat&proc=swaptodarkmode');
|
||||
}
|
||||
setCookie('darkmode', (opts.darkmode ? 'true' : 'false'), 365);
|
||||
}
|
||||
|
||||
function handleClientData(ckey, ip, compid) {
|
||||
//byond sends player info to here
|
||||
var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid};
|
||||
@@ -615,7 +616,7 @@ $(function() {
|
||||
'shighlightColor': getCookie('highlightcolor'),
|
||||
'smusicVolume': getCookie('musicVolume'),
|
||||
'smessagecombining': getCookie('messagecombining'),
|
||||
'sdarkmode': getCookie('darkmode'),
|
||||
'scolorPreset': getCookie('colorpreset'),
|
||||
};
|
||||
|
||||
if (savedConfig.sfontSize) {
|
||||
@@ -626,9 +627,6 @@ $(function() {
|
||||
$("body").css('line-height', savedConfig.slineHeight);
|
||||
internalOutput('<span class="internal boldnshit">Loaded line height setting of: '+savedConfig.slineHeight+'</span>', 'internal');
|
||||
}
|
||||
if(savedConfig.sdarkmode == 'true'){
|
||||
swap();
|
||||
}
|
||||
if (savedConfig.spingDisabled) {
|
||||
if (savedConfig.spingDisabled == 'true') {
|
||||
opts.pingDisabled = true;
|
||||
@@ -654,6 +652,13 @@ $(function() {
|
||||
opts.highlightColor = savedConfig.shighlightColor;
|
||||
internalOutput('<span class="internal boldnshit">Loaded highlight color of: '+savedConfig.shighlightColor+'</span>', 'internal');
|
||||
}
|
||||
|
||||
if (savedConfig.scolorPreset) {
|
||||
opts.colorPreset = Number(savedConfig.scolorPreset);
|
||||
updateColorPreset();
|
||||
internalOutput('<span class="internal boldnshit">Loaded color preset of: '+colorPresets[opts.colorPreset]+'</span>', 'internal');
|
||||
}
|
||||
|
||||
if (savedConfig.smusicVolume) {
|
||||
var newVolume = clamp(savedConfig.smusicVolume, 0, 100);
|
||||
$('#adminMusic').prop('volume', newVolume / 100);
|
||||
@@ -839,9 +844,6 @@ $(function() {
|
||||
$('#toggleOptions').click(function(e) {
|
||||
handleToggleClick($subOptions, $(this));
|
||||
});
|
||||
$('#darkmodetoggle').click(function(e) {
|
||||
swap();
|
||||
});
|
||||
$('#toggleAudio').click(function(e) {
|
||||
handleToggleClick($subAudio, $(this));
|
||||
});
|
||||
@@ -913,7 +915,7 @@ $(function() {
|
||||
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: 'browserOutput_white.css',
|
||||
url: 'browserOutput.css',
|
||||
success: function(styleData) {
|
||||
var blob = new Blob(['<head><title>Chat Log</title><style>', styleData, '</style></head><body>', $messages.html(), '</body>']);
|
||||
|
||||
@@ -992,6 +994,13 @@ $(function() {
|
||||
opts.messageCount = 0;
|
||||
});
|
||||
|
||||
$('#changeColorPreset').click(function() {
|
||||
opts.colorPreset = (opts.colorPreset+1) % colorPresets.length;
|
||||
updateColorPreset();
|
||||
setCookie('colorpreset', opts.colorPreset, 365);
|
||||
internalOutput('<span class="internal boldnshit">Changed color preset to: '+colorPresets[opts.colorPreset]);
|
||||
});
|
||||
|
||||
$('#musicVolumeSpan').hover(function() {
|
||||
$('#musicVolumeText').addClass('hidden');
|
||||
$('#musicVolume').removeClass('hidden');
|
||||
|
||||
@@ -224,6 +224,10 @@
|
||||
species = "strawberry"
|
||||
plantname = "Strawberry Vine"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/strawberry
|
||||
growthstages = 6
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "strawberry-grow"
|
||||
icon_dead = "berry-dead"
|
||||
reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.2)
|
||||
mutatelist = list()
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
species = "lily"
|
||||
plantname = "Lily Plants"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily
|
||||
mutatelist = list()
|
||||
mutatelist = list(/obj/item/seeds/bee_balm)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/poppy/lily
|
||||
seed = /obj/item/seeds/poppy/lily
|
||||
@@ -221,3 +221,61 @@
|
||||
if(!user.gloves)
|
||||
to_chat(user, "<span class='danger'>The [name] burns your bare hand!</span>")
|
||||
user.adjustFireLoss(rand(1, 5))
|
||||
|
||||
// Beebalm
|
||||
/obj/item/seeds/bee_balm
|
||||
name = "pack of Bee Balm seeds"
|
||||
desc = "These seeds grow into Bee Balms."
|
||||
icon_state = "seed-bee_balm"
|
||||
species = "bee_balm"
|
||||
plantname = "Bee Balm Buds"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/bee_balm
|
||||
endurance = 10
|
||||
maturation = 8
|
||||
yield = 3
|
||||
potency = 30
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
|
||||
icon_grow = "bee_balm-grow"
|
||||
icon_dead = "bee_balm-dead"
|
||||
mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/bee_balm/honey) //Lower odds of becoming honey
|
||||
reagents_add = list("spaceacillin" = 0.1, "sterilizine" = 0.05)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/bee_balm
|
||||
seed = /obj/item/seeds/bee_balm
|
||||
name = "bee balm"
|
||||
desc = "A flower used for medical antiseptic in history."
|
||||
icon_state = "bee_balm"
|
||||
filling_color = "#FF6347"
|
||||
bitesize_mod = 8
|
||||
tastes = list("strong antiseptic " = 1)
|
||||
foodtype = GROSS
|
||||
|
||||
// Beebalm
|
||||
/obj/item/seeds/bee_balm/honey
|
||||
name = "pack of Honey Balm seeds"
|
||||
desc = "These seeds grow into Honey Balms."
|
||||
icon_state = "seed-bee_balmalt"
|
||||
species = "seed-bee_balm_alt"
|
||||
plantname = "Honey Balm Pods"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
|
||||
endurance = 1
|
||||
maturation = 10
|
||||
yield = 1
|
||||
potency = 1
|
||||
growthstages = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
|
||||
icon_grow = "bee_balmalt-grow"
|
||||
icon_dead = "bee_balmalt-dead"
|
||||
reagents_add = list("honey" = 0.1, "lye" = 0.3) //To make wax
|
||||
rarity = 30
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
|
||||
seed = /obj/item/seeds/bee_balm/honey
|
||||
name = "honey balm"
|
||||
desc = "A large honey filled pod of a flower."
|
||||
icon_state = "bee_balmalt"
|
||||
filling_color = "#FF6347"
|
||||
bitesize_mod = 8
|
||||
tastes = list("wax" = 1)
|
||||
foodtype = SUGAR
|
||||
@@ -1,7 +1,7 @@
|
||||
// Starthistle
|
||||
/obj/item/seeds/starthistle
|
||||
name = "pack of starthistle seeds"
|
||||
desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots."
|
||||
desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots. Grind down these seeds for a substitution for mustardgrind."
|
||||
icon_state = "seed-starthistle"
|
||||
species = "starthistle"
|
||||
plantname = "Starthistle"
|
||||
@@ -9,9 +9,10 @@
|
||||
endurance = 50 // damm pesky weeds
|
||||
maturation = 5
|
||||
production = 1
|
||||
yield = 2
|
||||
yield = 6
|
||||
potency = 10
|
||||
growthstages = 3
|
||||
grind_results = list("mustardgrind" = 1)
|
||||
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
|
||||
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
|
||||
mutatelist = list(/obj/item/seeds/harebell)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// Peach
|
||||
/obj/item/seeds/peach
|
||||
name = "pack of peach seeds"
|
||||
desc = "These seeds grow into peach trees."
|
||||
icon_state = "seed-peach"
|
||||
species = "peach"
|
||||
plantname = "Peach Tree"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/peach
|
||||
lifespan = 65
|
||||
endurance = 40
|
||||
yield = 3
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "peach-grow"
|
||||
icon_dead = "peach-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/peach
|
||||
seed = /obj/item/seeds/peach
|
||||
name = "peach"
|
||||
desc = "It's fuzzy!"
|
||||
icon_state = "peach"
|
||||
filling_color = "#FF4500"
|
||||
bitesize = 25
|
||||
foodtype = FRUIT
|
||||
juice_results = list("peachjuice" = 0)
|
||||
tastes = list("peach" = 1)
|
||||
@@ -33,7 +33,7 @@
|
||||
species = "teaastra"
|
||||
plantname = "Tea Astra Plant"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/tea/astra
|
||||
mutatelist = list()
|
||||
mutatelist = list(/obj/item/seeds/tea/catnip)
|
||||
reagents_add = list("synaptizine" = 0.1, "vitamin" = 0.04, "teapowder" = 0.1)
|
||||
rarity = 20
|
||||
|
||||
@@ -44,6 +44,24 @@
|
||||
filling_color = "#4582B4"
|
||||
grind_results = list("teapowder" = 0, "salglu_solution" = 0)
|
||||
|
||||
// Kitty drugs
|
||||
/obj/item/seeds/tea/catnip
|
||||
name = "pack of catnip seeds"
|
||||
icon_state = "seed-catnip"
|
||||
desc = "Long stocks with flowering tips that has a chemical to make feline attracted to it."
|
||||
species = "catnip"
|
||||
plantname = "Catnip Plant"
|
||||
growthstages = 3
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/tea/catnip
|
||||
reagents_add = list("catnip" = 0.1, "vitamin" = 0.06, "teapowder" = 0.3)
|
||||
rarity = 50
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/tea/catnip
|
||||
seed = /obj/item/seeds/tea/catnip
|
||||
name = "Catnip buds"
|
||||
icon_state = "catnip_leaves"
|
||||
filling_color = "#4582B4"
|
||||
grind_results = list("catnp" = 2, "water" = 1)
|
||||
|
||||
// Coffee
|
||||
/obj/item/seeds/coffee
|
||||
|
||||
@@ -8,6 +8,8 @@ GLOBAL_PROTECT(exp_to_update)
|
||||
return 0
|
||||
if(!CONFIG_GET(flag/use_exp_tracking))
|
||||
return 0
|
||||
if(!SSdbcore.Connect())
|
||||
return 0
|
||||
if(!exp_requirements || !exp_type)
|
||||
return 0
|
||||
if(!job_is_xp_locked(src.title))
|
||||
|
||||
@@ -1,240 +1,245 @@
|
||||
/datum/job
|
||||
//The name of the job
|
||||
var/title = "NOPE"
|
||||
|
||||
//Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
|
||||
var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
|
||||
var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
|
||||
|
||||
//Determines who can demote this position
|
||||
var/department_head = list()
|
||||
|
||||
//Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
|
||||
var/list/head_announce = null
|
||||
|
||||
//Bitflags for the job
|
||||
var/flag = 0
|
||||
var/department_flag = 0
|
||||
|
||||
//Players will be allowed to spawn in as jobs that are set to "Station"
|
||||
var/faction = "None"
|
||||
|
||||
//How many players can be this job
|
||||
var/total_positions = 0
|
||||
|
||||
//How many players can spawn in as this job
|
||||
var/spawn_positions = 0
|
||||
|
||||
//How many players have this job
|
||||
var/current_positions = 0
|
||||
|
||||
//Supervisors, who this person answers to directly
|
||||
var/supervisors = ""
|
||||
|
||||
//Sellection screen color
|
||||
var/selection_color = "#ffffff"
|
||||
|
||||
|
||||
//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
|
||||
|
||||
var/custom_spawn_text
|
||||
|
||||
//If you have the 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
|
||||
|
||||
var/outfit = null
|
||||
|
||||
var/exp_requirements = 0
|
||||
|
||||
var/exp_type = ""
|
||||
var/exp_type_department = ""
|
||||
|
||||
//The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round
|
||||
//can be overridden by antag_rep.txt config
|
||||
var/antag_rep = 10
|
||||
|
||||
var/list/mind_traits // Traits added to the mind of the mob assigned this job
|
||||
|
||||
var/list/blacklisted_quirks //list of quirk typepaths blacklisted.
|
||||
|
||||
//Only override this proc
|
||||
//H is usually a human unless an /equip override transformed it
|
||||
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
|
||||
//do actions on H but send messages to M as the key may not have been transferred_yet
|
||||
if(mind_traits)
|
||||
for(var/t in mind_traits)
|
||||
ADD_TRAIT(H.mind, t, JOB_TRAIT)
|
||||
|
||||
/datum/job/proc/announce(mob/living/carbon/human/H)
|
||||
if(head_announce)
|
||||
announce_head(H, head_announce)
|
||||
|
||||
/datum/job/proc/override_latejoin_spawn(mob/living/carbon/human/H) //Return TRUE to force latejoining to not automatically place the person in latejoin shuttle/whatever.
|
||||
return FALSE
|
||||
|
||||
//Used for a special check of whether to allow a client to latejoin as this job.
|
||||
/datum/job/proc/special_check_latejoin(client/C)
|
||||
return TRUE
|
||||
|
||||
/datum/job/proc/GetAntagRep()
|
||||
. = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)]
|
||||
if(. == null)
|
||||
return antag_rep
|
||||
|
||||
//Don't override this unless the job transforms into a non-human (Silicons do this for example)
|
||||
/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null)
|
||||
if(!H)
|
||||
return FALSE
|
||||
|
||||
if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions))
|
||||
if(H.dna.species.id != "human")
|
||||
H.set_species(/datum/species/human)
|
||||
H.apply_pref_name("human", H.client)
|
||||
|
||||
//Equip the rest of the gear
|
||||
H.dna.species.before_equip_job(src, H, visualsOnly)
|
||||
|
||||
if(outfit_override || outfit)
|
||||
H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly)
|
||||
|
||||
H.dna.species.after_equip_job(src, H, visualsOnly)
|
||||
|
||||
if(!visualsOnly && announce)
|
||||
announce(H)
|
||||
|
||||
/datum/job/proc/get_access()
|
||||
if(!config) //Needed for robots.
|
||||
return src.minimal_access.Copy()
|
||||
|
||||
. = list()
|
||||
|
||||
if(CONFIG_GET(flag/jobs_have_minimal_access))
|
||||
. = src.minimal_access.Copy()
|
||||
else
|
||||
. = src.access.Copy()
|
||||
|
||||
if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set
|
||||
. |= list(ACCESS_MAINT_TUNNELS)
|
||||
|
||||
/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
|
||||
if(H && GLOB.announcement_systems.len)
|
||||
//timer because these should come after the captain announcement
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1))
|
||||
|
||||
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
|
||||
/datum/job/proc/player_old_enough(client/C)
|
||||
if(available_in_days(C) == 0)
|
||||
return TRUE //Available in 0 days = available right now = player is old enough to play.
|
||||
return FALSE
|
||||
|
||||
|
||||
/datum/job/proc/available_in_days(client/C)
|
||||
if(!C)
|
||||
return 0
|
||||
if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
|
||||
return 0
|
||||
if(C.prefs.db_flags & DB_FLAG_EXEMPT)
|
||||
return 0
|
||||
if(!isnum(C.player_age))
|
||||
return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced
|
||||
if(!isnum(minimal_player_age))
|
||||
return 0
|
||||
|
||||
return max(0, minimal_player_age - C.player_age)
|
||||
|
||||
/datum/job/proc/config_check()
|
||||
return TRUE
|
||||
|
||||
/datum/job/proc/map_check()
|
||||
return TRUE
|
||||
|
||||
|
||||
/datum/outfit/job
|
||||
name = "Standard Gear"
|
||||
|
||||
var/jobtype = null
|
||||
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
id = /obj/item/card/id
|
||||
ears = /obj/item/radio/headset
|
||||
belt = /obj/item/pda
|
||||
back = /obj/item/storage/backpack
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
|
||||
var/backpack = /obj/item/storage/backpack
|
||||
var/satchel = /obj/item/storage/backpack/satchel
|
||||
var/duffelbag = /obj/item/storage/backpack/duffelbag
|
||||
var/box = /obj/item/storage/box/survival
|
||||
|
||||
var/pda_slot = SLOT_BELT
|
||||
|
||||
/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
switch(H.backbag)
|
||||
if(GBACKPACK)
|
||||
back = /obj/item/storage/backpack //Grey backpack
|
||||
if(GSATCHEL)
|
||||
back = /obj/item/storage/backpack/satchel //Grey satchel
|
||||
if(GDUFFELBAG)
|
||||
back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag
|
||||
if(LSATCHEL)
|
||||
back = /obj/item/storage/backpack/satchel/leather //Leather Satchel
|
||||
if(DSATCHEL)
|
||||
back = satchel //Department satchel
|
||||
if(DDUFFELBAG)
|
||||
back = duffelbag //Department duffel bag
|
||||
else
|
||||
back = backpack //Department backpack
|
||||
|
||||
if(box)
|
||||
if(!backpack_contents)
|
||||
backpack_contents = list()
|
||||
backpack_contents.Insert(1, box) // Box always takes a first slot in backpack
|
||||
backpack_contents[box] = 1
|
||||
|
||||
//converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
|
||||
var/holder
|
||||
if(H.jumpsuit_style == PREF_SKIRT)
|
||||
holder = "[uniform]/skirt"
|
||||
if(!text2path(holder))
|
||||
holder = "[uniform]"
|
||||
else
|
||||
holder = "[uniform]"
|
||||
uniform = text2path(holder)
|
||||
|
||||
/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
var/datum/job/J = SSjob.GetJobType(jobtype)
|
||||
if(!J)
|
||||
J = SSjob.GetJob(H.job)
|
||||
|
||||
if(H.nameless && J.dresscodecompliant)
|
||||
if(J.title in GLOB.command_positions)
|
||||
H.real_name = J.title
|
||||
else
|
||||
H.real_name = "[J.title] #[rand(10000, 99999)]"
|
||||
|
||||
var/obj/item/card/id/C = H.wear_id
|
||||
if(istype(C))
|
||||
C.access = J.get_access()
|
||||
shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable
|
||||
C.registered_name = H.real_name
|
||||
C.assignment = J.title
|
||||
C.update_label()
|
||||
H.sec_hud_set_ID()
|
||||
|
||||
var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
|
||||
if(istype(PDA))
|
||||
PDA.owner = H.real_name
|
||||
PDA.ownjob = J.title
|
||||
PDA.update_label()
|
||||
|
||||
/datum/outfit/job/get_chameleon_disguise_info()
|
||||
var/list/types = ..()
|
||||
types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks
|
||||
types += backpack
|
||||
types += satchel
|
||||
types += duffelbag
|
||||
return types
|
||||
/datum/job
|
||||
//The name of the job , used for preferences, bans and more. Make sure you know what you're doing before changing this.
|
||||
var/title = "NOPE"
|
||||
|
||||
//Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
|
||||
var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
|
||||
var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
|
||||
|
||||
//Determines who can demote this position
|
||||
var/department_head = list()
|
||||
|
||||
//Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
|
||||
var/list/head_announce = null
|
||||
|
||||
//Bitflags for the job
|
||||
var/flag = NONE //Deprecated
|
||||
var/department_flag = NONE //Deprecated
|
||||
// var/auto_deadmin_role_flags = NONE
|
||||
|
||||
//Players will be allowed to spawn in as jobs that are set to "Station"
|
||||
var/faction = "None"
|
||||
|
||||
//How many players can be this job
|
||||
var/total_positions = 0
|
||||
|
||||
//How many players can spawn in as this job
|
||||
var/spawn_positions = 0
|
||||
|
||||
//How many players have this job
|
||||
var/current_positions = 0
|
||||
|
||||
//Supervisors, who this person answers to directly
|
||||
var/supervisors = ""
|
||||
|
||||
//Sellection screen color
|
||||
var/selection_color = "#ffffff"
|
||||
|
||||
|
||||
//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
|
||||
|
||||
// This is for Citadel specific tweaks to job notices.
|
||||
var/custom_spawn_text
|
||||
|
||||
//If you have the 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
|
||||
|
||||
var/outfit = null
|
||||
|
||||
var/exp_requirements = 0
|
||||
|
||||
var/exp_type = ""
|
||||
var/exp_type_department = ""
|
||||
|
||||
//The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round
|
||||
//can be overridden by antag_rep.txt config
|
||||
var/antag_rep = 10
|
||||
|
||||
var/list/mind_traits // Traits added to the mind of the mob assigned this job
|
||||
var/list/blacklisted_quirks //list of quirk typepaths blacklisted.
|
||||
|
||||
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
|
||||
|
||||
//Only override this proc
|
||||
//H is usually a human unless an /equip override transformed it
|
||||
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
|
||||
//do actions on H but send messages to M as the key may not have been transferred_yet
|
||||
if(mind_traits)
|
||||
for(var/t in mind_traits)
|
||||
ADD_TRAIT(H.mind, t, JOB_TRAIT)
|
||||
|
||||
/datum/job/proc/announce(mob/living/carbon/human/H)
|
||||
if(head_announce)
|
||||
announce_head(H, head_announce)
|
||||
|
||||
/datum/job/proc/override_latejoin_spawn(mob/living/carbon/human/H) //Return TRUE to force latejoining to not automatically place the person in latejoin shuttle/whatever.
|
||||
return FALSE
|
||||
|
||||
//Used for a special check of whether to allow a client to latejoin as this job.
|
||||
/datum/job/proc/special_check_latejoin(client/C)
|
||||
return TRUE
|
||||
|
||||
/datum/job/proc/GetAntagRep()
|
||||
. = CONFIG_GET(keyed_list/antag_rep)[lowertext(title)]
|
||||
if(. == null)
|
||||
return antag_rep
|
||||
|
||||
//Don't override this unless the job transforms into a non-human (Silicons do this for example)
|
||||
/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, datum/outfit/outfit_override = null, client/preference_source)
|
||||
if(!H)
|
||||
return FALSE
|
||||
|
||||
if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions))
|
||||
if(H.dna.species.id != "human")
|
||||
H.set_species(/datum/species/human)
|
||||
H.apply_pref_name("human", preference_source)
|
||||
|
||||
//Equip the rest of the gear
|
||||
H.dna.species.before_equip_job(src, H, visualsOnly)
|
||||
|
||||
if(outfit_override || outfit)
|
||||
H.equipOutfit(outfit_override ? outfit_override : outfit, visualsOnly)
|
||||
|
||||
H.dna.species.after_equip_job(src, H, visualsOnly)
|
||||
|
||||
if(!visualsOnly && announce)
|
||||
announce(H)
|
||||
|
||||
/datum/job/proc/get_access()
|
||||
if(!config) //Needed for robots.
|
||||
return src.minimal_access.Copy()
|
||||
|
||||
. = list()
|
||||
|
||||
if(CONFIG_GET(flag/jobs_have_minimal_access))
|
||||
. = src.minimal_access.Copy()
|
||||
else
|
||||
. = src.access.Copy()
|
||||
|
||||
if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set
|
||||
. |= list(ACCESS_MAINT_TUNNELS)
|
||||
|
||||
/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
|
||||
if(H && GLOB.announcement_systems.len)
|
||||
//timer because these should come after the captain announcement
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1))
|
||||
|
||||
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
|
||||
/datum/job/proc/player_old_enough(client/C)
|
||||
if(available_in_days(C) == 0)
|
||||
return TRUE //Available in 0 days = available right now = player is old enough to play.
|
||||
return FALSE
|
||||
|
||||
|
||||
/datum/job/proc/available_in_days(client/C)
|
||||
if(!C)
|
||||
return 0
|
||||
if(!CONFIG_GET(flag/use_age_restriction_for_jobs))
|
||||
return 0
|
||||
if(!SSdbcore.Connect())
|
||||
return 0 //Without a database connection we can't get a player's age so we'll assume they're old enough for all jobs
|
||||
if(C.prefs.db_flags & DB_FLAG_EXEMPT)
|
||||
return 0
|
||||
if(!isnum(minimal_player_age))
|
||||
return 0
|
||||
|
||||
return max(0, minimal_player_age - C.player_age)
|
||||
|
||||
/datum/job/proc/config_check()
|
||||
return TRUE
|
||||
|
||||
/datum/job/proc/map_check()
|
||||
return TRUE
|
||||
|
||||
/datum/job/proc/radio_help_message(mob/M)
|
||||
to_chat(M, "<b>Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset.</b>")
|
||||
|
||||
/datum/outfit/job
|
||||
name = "Standard Gear"
|
||||
|
||||
var/jobtype = null
|
||||
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
id = /obj/item/card/id
|
||||
ears = /obj/item/radio/headset
|
||||
belt = /obj/item/pda
|
||||
back = /obj/item/storage/backpack
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
box = /obj/item/storage/box/survival
|
||||
|
||||
var/backpack = /obj/item/storage/backpack
|
||||
var/satchel = /obj/item/storage/backpack/satchel
|
||||
var/duffelbag = /obj/item/storage/backpack/duffelbag
|
||||
|
||||
var/pda_slot = SLOT_BELT
|
||||
|
||||
/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
switch(H.backbag)
|
||||
if(GBACKPACK)
|
||||
back = /obj/item/storage/backpack //Grey backpack
|
||||
if(GSATCHEL)
|
||||
back = /obj/item/storage/backpack/satchel //Grey satchel
|
||||
if(GDUFFELBAG)
|
||||
back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag
|
||||
if(LSATCHEL)
|
||||
back = /obj/item/storage/backpack/satchel/leather //Leather Satchel
|
||||
if(DSATCHEL)
|
||||
back = satchel //Department satchel
|
||||
if(DDUFFELBAG)
|
||||
back = duffelbag //Department duffel bag
|
||||
else
|
||||
back = backpack //Department backpack
|
||||
|
||||
//converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
|
||||
var/holder
|
||||
if(H.jumpsuit_style == PREF_SKIRT)
|
||||
holder = "[uniform]/skirt"
|
||||
if(!text2path(holder))
|
||||
holder = "[uniform]"
|
||||
else
|
||||
holder = "[uniform]"
|
||||
uniform = text2path(holder)
|
||||
|
||||
/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
var/datum/job/J = SSjob.GetJobType(jobtype)
|
||||
if(!J)
|
||||
J = SSjob.GetJob(H.job)
|
||||
|
||||
if(H.nameless && J.dresscodecompliant)
|
||||
if(J.title in GLOB.command_positions)
|
||||
H.real_name = J.title
|
||||
else
|
||||
H.real_name = "[J.title] #[rand(10000, 99999)]"
|
||||
|
||||
var/obj/item/card/id/C = H.wear_id
|
||||
if(istype(C))
|
||||
C.access = J.get_access()
|
||||
shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable
|
||||
C.registered_name = H.real_name
|
||||
C.assignment = J.title
|
||||
C.update_label()
|
||||
H.sec_hud_set_ID()
|
||||
|
||||
var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
|
||||
if(istype(PDA))
|
||||
PDA.owner = H.real_name
|
||||
PDA.ownjob = J.title
|
||||
PDA.update_label()
|
||||
|
||||
/datum/outfit/job/get_chameleon_disguise_info()
|
||||
var/list/types = ..()
|
||||
types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks
|
||||
types += backpack
|
||||
types += satchel
|
||||
types += duffelbag
|
||||
return types
|
||||
|
||||
//Warden and regular officers add this result to their get_access()
|
||||
/datum/job/proc/check_config_for_sec_maint()
|
||||
if(CONFIG_GET(flag/security_has_maint_access))
|
||||
return list(ACCESS_MAINT_TUNNELS)
|
||||
return list()
|
||||
@@ -1,90 +1,69 @@
|
||||
/*
|
||||
AI
|
||||
*/
|
||||
/datum/job/ai
|
||||
title = "AI"
|
||||
flag = AI_JF
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
selection_color = "#ccffcc"
|
||||
supervisors = "your laws"
|
||||
req_admin_notify = TRUE
|
||||
minimal_player_age = 30
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SILICON
|
||||
var/do_special_check = TRUE
|
||||
|
||||
/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, outfit_override)
|
||||
. = H.AIize(latejoin)
|
||||
|
||||
/datum/job/ai/after_spawn(mob/H, mob/M, latejoin)
|
||||
. = ..()
|
||||
if(latejoin)
|
||||
var/obj/structure/AIcore/latejoin_inactive/lateJoinCore
|
||||
for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores)
|
||||
if(P.is_available())
|
||||
lateJoinCore = P
|
||||
GLOB.latejoin_ai_cores -= P
|
||||
break
|
||||
if(lateJoinCore)
|
||||
lateJoinCore.available = FALSE
|
||||
H.forceMove(lateJoinCore.loc)
|
||||
qdel(lateJoinCore)
|
||||
var/mob/living/silicon/ai/AI = H
|
||||
AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked.
|
||||
AI.set_core_display_icon(null, M.client)
|
||||
|
||||
//we may have been created after our borg
|
||||
if(SSticker.current_state == GAME_STATE_SETTING_UP)
|
||||
for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
|
||||
if(!R.connected_ai)
|
||||
R.TryConnectToAI()
|
||||
|
||||
if(latejoin)
|
||||
announce(AI)
|
||||
|
||||
/datum/job/ai/override_latejoin_spawn()
|
||||
return TRUE
|
||||
|
||||
/datum/job/ai/special_check_latejoin(client/C)
|
||||
if(!do_special_check)
|
||||
return TRUE
|
||||
for(var/i in GLOB.latejoin_ai_cores)
|
||||
var/obj/structure/AIcore/latejoin_inactive/LAI = i
|
||||
if(istype(LAI))
|
||||
if(LAI.is_available())
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/job/ai/announce(mob/living/silicon/ai/AI)
|
||||
. = ..()
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "[AI] has been downloaded to an empty bluespace-networked AI core at [AREACOORD(AI)]."))
|
||||
|
||||
/datum/job/ai/config_check()
|
||||
return CONFIG_GET(flag/allow_ai)
|
||||
|
||||
/*
|
||||
Cyborg
|
||||
*/
|
||||
/datum/job/cyborg
|
||||
title = "Cyborg"
|
||||
flag = CYBORG
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 0
|
||||
spawn_positions = 1
|
||||
supervisors = "your laws and the AI" //Nodrak
|
||||
selection_color = "#ddffdd"
|
||||
minimal_player_age = 21
|
||||
exp_requirements = 120
|
||||
exp_type = EXP_TYPE_CREW
|
||||
|
||||
/datum/job/cyborg/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE, latejoin = FALSE, outfit_override = null)
|
||||
return H.Robotize(FALSE, latejoin)
|
||||
|
||||
/datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M)
|
||||
R.updatename(M.client)
|
||||
R.gender = NEUTER
|
||||
/datum/job/ai
|
||||
title = "AI"
|
||||
flag = AI_JF
|
||||
// auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
selection_color = "#ccffcc"
|
||||
supervisors = "your laws"
|
||||
req_admin_notify = TRUE
|
||||
minimal_player_age = 30
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SILICON
|
||||
display_order = JOB_DISPLAY_ORDER_AI
|
||||
var/do_special_check = TRUE
|
||||
|
||||
/datum/job/ai/equip(mob/living/carbon/human/H, visualsOnly, announce, latejoin, datum/outfit/outfit_override, client/preference_source = null)
|
||||
if(visualsOnly)
|
||||
CRASH("dynamic preview is unsupported")
|
||||
. = H.AIize(latejoin,preference_source)
|
||||
|
||||
/datum/job/ai/after_spawn(mob/H, mob/M, latejoin)
|
||||
. = ..()
|
||||
if(latejoin)
|
||||
var/obj/structure/AIcore/latejoin_inactive/lateJoinCore
|
||||
for(var/obj/structure/AIcore/latejoin_inactive/P in GLOB.latejoin_ai_cores)
|
||||
if(P.is_available())
|
||||
lateJoinCore = P
|
||||
GLOB.latejoin_ai_cores -= P
|
||||
break
|
||||
if(lateJoinCore)
|
||||
lateJoinCore.available = FALSE
|
||||
H.forceMove(lateJoinCore.loc)
|
||||
qdel(lateJoinCore)
|
||||
var/mob/living/silicon/ai/AI = H
|
||||
AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked.
|
||||
AI.set_core_display_icon(null, M.client)
|
||||
|
||||
//we may have been created after our borg
|
||||
if(SSticker.current_state == GAME_STATE_SETTING_UP)
|
||||
for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
|
||||
if(!R.connected_ai)
|
||||
R.TryConnectToAI()
|
||||
|
||||
if(latejoin)
|
||||
announce(AI)
|
||||
|
||||
/datum/job/ai/override_latejoin_spawn()
|
||||
return TRUE
|
||||
|
||||
/datum/job/ai/special_check_latejoin(client/C)
|
||||
if(!do_special_check)
|
||||
return TRUE
|
||||
for(var/i in GLOB.latejoin_ai_cores)
|
||||
var/obj/structure/AIcore/latejoin_inactive/LAI = i
|
||||
if(istype(LAI))
|
||||
if(LAI.is_available())
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/job/ai/announce(mob/living/silicon/ai/AI)
|
||||
. = ..()
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "[AI] has been downloaded to an empty bluespace-networked AI core at [AREACOORD(AI)]."))
|
||||
|
||||
/datum/job/ai/config_check()
|
||||
return CONFIG_GET(flag/allow_ai)
|
||||
|
||||
@@ -14,7 +14,7 @@ Assistant
|
||||
minimal_access = list() //See /datum/job/assistant/get_access()
|
||||
outfit = /datum/outfit/job/assistant
|
||||
antag_rep = 7
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_ASSISTANT
|
||||
|
||||
/datum/job/assistant/get_access()
|
||||
if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/datum/job/atmos
|
||||
title = "Atmospheric Technician"
|
||||
flag = ATMOSTECH
|
||||
department_head = list("Chief Engineer")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#ff9b3d"
|
||||
exp_requirements = 60
|
||||
exp_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/atmos
|
||||
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM)
|
||||
display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN
|
||||
|
||||
/datum/outfit/job/atmos
|
||||
name = "Atmospheric Technician"
|
||||
jobtype = /datum/job/atmos
|
||||
|
||||
belt = /obj/item/storage/belt/utility/atmostech
|
||||
l_pocket = /obj/item/pda/atmos
|
||||
ears = /obj/item/radio/headset/headset_eng
|
||||
uniform = /obj/item/clothing/under/rank/atmospheric_technician
|
||||
r_pocket = /obj/item/analyzer
|
||||
|
||||
backpack = /obj/item/storage/backpack/industrial
|
||||
satchel = /obj/item/storage/backpack/satchel/eng
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
|
||||
box = /obj/item/storage/box/engineer
|
||||
pda_slot = SLOT_L_STORE
|
||||
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
|
||||
|
||||
/datum/outfit/job/atmos/rig
|
||||
name = "Atmospheric Technician (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/gas
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
internals_slot = SLOT_S_STORE
|
||||
@@ -0,0 +1,30 @@
|
||||
/datum/job/bartender
|
||||
title = "Bartender"
|
||||
flag = BARTENDER
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
exp_type_department = EXP_TYPE_SERVICE // This is so the jobs menu can work properly
|
||||
|
||||
outfit = /datum/outfit/job/bartender
|
||||
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
|
||||
display_order = JOB_DISPLAY_ORDER_BARTENDER
|
||||
|
||||
/datum/outfit/job/bartender
|
||||
name = "Bartender"
|
||||
jobtype = /datum/job/bartender
|
||||
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
belt = /obj/item/pda/bar
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/bartender
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/datum/job/hydro
|
||||
title = "Botanist"
|
||||
flag = BOTANIST
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
|
||||
outfit = /datum/outfit/job/botanist
|
||||
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
display_order = JOB_DISPLAY_ORDER_BOTANIST
|
||||
|
||||
/datum/outfit/job/botanist
|
||||
name = "Botanist"
|
||||
jobtype = /datum/job/hydro
|
||||
|
||||
belt = /obj/item/pda/botanist
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/hydroponics
|
||||
suit = /obj/item/clothing/suit/apron
|
||||
gloves =/obj/item/clothing/gloves/botanic_leather
|
||||
suit_store = /obj/item/plant_analyzer
|
||||
|
||||
backpack = /obj/item/storage/backpack/botany
|
||||
satchel = /obj/item/storage/backpack/satchel/hyd
|
||||
|
||||
|
||||
Executable → Regular
+66
-114
@@ -1,114 +1,66 @@
|
||||
/*
|
||||
Captain
|
||||
*/
|
||||
/datum/job/captain
|
||||
title = "Captain"
|
||||
flag = CAPTAIN
|
||||
department_head = list("CentCom")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#ccccff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
|
||||
outfit = /datum/outfit/job/captain
|
||||
|
||||
access = list() //See get_access()
|
||||
minimal_access = list() //See get_access()
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_accesses()
|
||||
|
||||
/datum/job/captain/announce(mob/living/carbon/human/H)
|
||||
..()
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
|
||||
|
||||
/datum/outfit/job/captain
|
||||
name = "Captain"
|
||||
jobtype = /datum/job/captain
|
||||
|
||||
id = /obj/item/card/id/gold
|
||||
belt = /obj/item/pda/captain
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
ears = /obj/item/radio/headset/heads/captain/alt
|
||||
gloves = /obj/item/clothing/gloves/color/captain
|
||||
uniform = /obj/item/clothing/under/rank/captain
|
||||
suit = /obj/item/clothing/suit/armor/vest/capcarapace
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/caphat
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/captain
|
||||
satchel = /obj/item/storage/backpack/satchel/cap
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/captain
|
||||
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
accessory = /obj/item/clothing/accessory/medal/gold/captain
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
|
||||
|
||||
/datum/outfit/job/captain/hardsuit
|
||||
name = "Captain (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/gas/sechailer
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/captain
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
|
||||
/*
|
||||
Head of Personnel
|
||||
*/
|
||||
/datum/job/hop
|
||||
title = "Head of Personnel"
|
||||
flag = HOP
|
||||
department_head = list("Captain")
|
||||
department_flag = CIVILIAN
|
||||
head_announce = list(RADIO_CHANNEL_SERVICE)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ddddff"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 10
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_SUPPLY
|
||||
|
||||
outfit = /datum/outfit/job/hop
|
||||
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
|
||||
ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
|
||||
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
|
||||
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
|
||||
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
|
||||
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
|
||||
|
||||
/datum/outfit/job/hop
|
||||
name = "Head of Personnel"
|
||||
jobtype = /datum/job/hop
|
||||
|
||||
id = /obj/item/card/id/silver
|
||||
belt = /obj/item/pda/heads/hop
|
||||
ears = /obj/item/radio/headset/heads/hop
|
||||
uniform = /obj/item/clothing/under/rank/head_of_personnel
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/hopcap
|
||||
backpack_contents = list(/obj/item/storage/box/ids=1,\
|
||||
/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1)
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop)
|
||||
/datum/job/captain
|
||||
title = "Captain"
|
||||
flag = CAPTAIN
|
||||
// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes:
|
||||
department_head = list("CentCom")
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "Nanotrasen officials and Space law"
|
||||
selection_color = "#aac1ee"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 14
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_COMMAND
|
||||
|
||||
outfit = /datum/outfit/job/captain
|
||||
|
||||
access = list() //See get_access()
|
||||
minimal_access = list() //See get_access()
|
||||
|
||||
mind_traits = list(TRAIT_CAPTAIN_METABOLISM)
|
||||
// mind_traits = list(TRAIT_DISK_VERIFIER)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CAPTAIN
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_accesses()
|
||||
|
||||
/datum/job/captain/announce(mob/living/carbon/human/H)
|
||||
..()
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
|
||||
|
||||
/datum/outfit/job/captain
|
||||
name = "Captain"
|
||||
jobtype = /datum/job/captain
|
||||
|
||||
id = /obj/item/card/id/gold
|
||||
belt = /obj/item/pda/captain
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
ears = /obj/item/radio/headset/heads/captain/alt
|
||||
gloves = /obj/item/clothing/gloves/color/captain
|
||||
uniform = /obj/item/clothing/under/rank/captain
|
||||
suit = /obj/item/clothing/suit/armor/vest/capcarapace
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/caphat
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/captain
|
||||
satchel = /obj/item/storage/backpack/satchel/cap
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/captain
|
||||
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
accessory = /obj/item/clothing/accessory/medal/gold/captain
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
|
||||
|
||||
/datum/outfit/job/captain/hardsuit
|
||||
name = "Captain (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/gas/sechailer
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/captain
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
@@ -1,293 +0,0 @@
|
||||
/*
|
||||
Quartermaster
|
||||
*/
|
||||
/datum/job/qm
|
||||
title = "Quartermaster"
|
||||
flag = QUARTERMASTER
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
head_announce = list(RADIO_CHANNEL_SUPPLY)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#d7b088"
|
||||
|
||||
outfit = /datum/outfit/job/quartermaster
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
/datum/outfit/job/quartermaster
|
||||
name = "Quartermaster"
|
||||
jobtype = /datum/job/qm
|
||||
|
||||
belt = /obj/item/pda/quartermaster
|
||||
ears = /obj/item/radio/headset/headset_cargo
|
||||
uniform = /obj/item/clothing/under/rank/cargo
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
l_hand = /obj/item/clipboard
|
||||
|
||||
chameleon_extras = /obj/item/stamp/qm
|
||||
|
||||
/*
|
||||
Cargo Technician
|
||||
*/
|
||||
/datum/job/cargo_tech
|
||||
title = "Cargo Technician"
|
||||
flag = CARGOTECH
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dcba97"
|
||||
|
||||
outfit = /datum/outfit/job/cargo_tech
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/datum/outfit/job/cargo_tech
|
||||
name = "Cargo Technician"
|
||||
jobtype = /datum/job/cargo_tech
|
||||
|
||||
belt = /obj/item/pda/cargo
|
||||
ears = /obj/item/radio/headset/headset_cargo
|
||||
uniform = /obj/item/clothing/under/rank/cargotech
|
||||
l_hand = /obj/item/export_scanner
|
||||
|
||||
/*
|
||||
Shaft Miner
|
||||
*/
|
||||
/datum/job/mining
|
||||
title = "Shaft Miner"
|
||||
flag = MINER
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dcba97"
|
||||
custom_spawn_text = "Remember, you are a miner, not a hunter. Hunting monsters is not a requirement of your job, the only requirement of your job is to provide materials for the station. Don't be afraid to run away if you're inexperienced with fighting the mining area's locals."
|
||||
|
||||
outfit = /datum/outfit/job/miner
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/datum/outfit/job/miner
|
||||
name = "Shaft Miner (Lavaland)"
|
||||
jobtype = /datum/job/mining
|
||||
|
||||
belt = /obj/item/pda/shaftminer
|
||||
ears = /obj/item/radio/headset/headset_cargo/mining
|
||||
shoes = /obj/item/clothing/shoes/workboots/mining
|
||||
gloves = /obj/item/clothing/gloves/color/black
|
||||
uniform = /obj/item/clothing/under/rank/miner/lavaland
|
||||
l_pocket = /obj/item/reagent_containers/hypospray/medipen/survival
|
||||
r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack
|
||||
backpack_contents = list(
|
||||
/obj/item/flashlight/seclite=1,\
|
||||
/obj/item/kitchen/knife/combat/survival=1,\
|
||||
/obj/item/mining_voucher=1,\
|
||||
/obj/item/suit_voucher=1,\
|
||||
/obj/item/stack/marker_beacon/ten=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/explorer
|
||||
satchel = /obj/item/storage/backpack/satchel/explorer
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag
|
||||
box = /obj/item/storage/box/survival_mining
|
||||
|
||||
chameleon_extras = /obj/item/gun/energy/kinetic_accelerator
|
||||
|
||||
/datum/outfit/job/miner/asteroid
|
||||
name = "Shaft Miner (Asteroid)"
|
||||
uniform = /obj/item/clothing/under/rank/miner
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
|
||||
/datum/outfit/job/miner/equipped
|
||||
name = "Shaft Miner (Lavaland + Equipment)"
|
||||
suit = /obj/item/clothing/suit/hooded/explorer/standard
|
||||
mask = /obj/item/clothing/mask/gas/explorer
|
||||
glasses = /obj/item/clothing/glasses/meson
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
internals_slot = SLOT_S_STORE
|
||||
backpack_contents = list(
|
||||
/obj/item/flashlight/seclite=1,\
|
||||
/obj/item/kitchen/knife/combat/survival=1,
|
||||
/obj/item/mining_voucher=1,
|
||||
/obj/item/t_scanner/adv_mining_scanner/lesser=1,
|
||||
/obj/item/gun/energy/kinetic_accelerator=1,\
|
||||
/obj/item/stack/marker_beacon/ten=1)
|
||||
|
||||
/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/hooded))
|
||||
var/obj/item/clothing/suit/hooded/S = H.wear_suit
|
||||
S.ToggleHood()
|
||||
|
||||
/datum/outfit/job/miner/equipped/hardsuit
|
||||
name = "Shaft Miner (Equipment + Hardsuit)"
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/mining
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
|
||||
|
||||
/*
|
||||
Bartender
|
||||
*/
|
||||
/datum/job/bartender
|
||||
title = "Bartender"
|
||||
flag = BARTENDER
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
|
||||
outfit = /datum/outfit/job/bartender
|
||||
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
|
||||
/datum/outfit/job/bartender
|
||||
name = "Bartender"
|
||||
jobtype = /datum/job/bartender
|
||||
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
belt = /obj/item/pda/bar
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/bartender
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
|
||||
/*
|
||||
Cook
|
||||
*/
|
||||
/datum/job/cook
|
||||
title = "Cook"
|
||||
flag = COOK
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
var/cooks = 0 //Counts cooks amount
|
||||
|
||||
outfit = /datum/outfit/job/cook
|
||||
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/datum/outfit/job/cook
|
||||
name = "Cook"
|
||||
jobtype = /datum/job/cook
|
||||
|
||||
belt = /obj/item/pda/cook
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/chef
|
||||
suit = /obj/item/clothing/suit/toggle/chef
|
||||
head = /obj/item/clothing/head/chefhat
|
||||
mask = /obj/item/clothing/mask/fakemoustache/italian
|
||||
backpack_contents = list(/obj/item/sharpener = 1)
|
||||
|
||||
/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
var/datum/job/cook/J = SSjob.GetJobType(jobtype)
|
||||
if(J) // Fix for runtime caused by invalid job being passed
|
||||
if(J.cooks>0)//Cooks
|
||||
suit = /obj/item/clothing/suit/apron/chef
|
||||
head = /obj/item/clothing/head/soft/mime
|
||||
if(!visualsOnly)
|
||||
J.cooks++
|
||||
|
||||
/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
var/list/possible_boxes = subtypesof(/obj/item/storage/box/ingredients)
|
||||
var/chosen_box = pick(possible_boxes)
|
||||
var/obj/item/storage/box/I = new chosen_box(src)
|
||||
H.equip_to_slot_or_del(I,SLOT_IN_BACKPACK)
|
||||
var/datum/martial_art/cqc/under_siege/justacook = new
|
||||
justacook.teach(H)
|
||||
|
||||
/*
|
||||
Botanist
|
||||
*/
|
||||
/datum/job/hydro
|
||||
title = "Botanist"
|
||||
flag = BOTANIST
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
|
||||
outfit = /datum/outfit/job/botanist
|
||||
|
||||
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
|
||||
// Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS
|
||||
// Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT
|
||||
// Given Morgue access because they have a viable means of cloning.
|
||||
|
||||
|
||||
/datum/outfit/job/botanist
|
||||
name = "Botanist"
|
||||
jobtype = /datum/job/hydro
|
||||
|
||||
belt = /obj/item/pda/botanist
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/hydroponics
|
||||
suit = /obj/item/clothing/suit/apron
|
||||
gloves =/obj/item/clothing/gloves/botanic_leather
|
||||
suit_store = /obj/item/plant_analyzer
|
||||
|
||||
backpack = /obj/item/storage/backpack/botany
|
||||
satchel = /obj/item/storage/backpack/satchel/hyd
|
||||
|
||||
|
||||
/*
|
||||
Janitor
|
||||
*/
|
||||
/datum/job/janitor
|
||||
title = "Janitor"
|
||||
flag = JANITOR
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#bbe291"
|
||||
var/global/janitors = 0
|
||||
|
||||
outfit = /datum/outfit/job/janitor
|
||||
|
||||
access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/datum/outfit/job/janitor
|
||||
name = "Janitor"
|
||||
jobtype = /datum/job/janitor
|
||||
|
||||
belt = /obj/item/pda/janitor
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/janitor
|
||||
backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1)
|
||||
@@ -0,0 +1,27 @@
|
||||
/datum/job/cargo_tech
|
||||
title = "Cargo Technician"
|
||||
flag = CARGOTECH
|
||||
department_head = list("Quartermaster")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the quartermaster"
|
||||
selection_color = "#ca8f55"
|
||||
|
||||
outfit = /datum/outfit/job/cargo_tech
|
||||
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN
|
||||
|
||||
/datum/outfit/job/cargo_tech
|
||||
name = "Cargo Technician"
|
||||
jobtype = /datum/job/cargo_tech
|
||||
|
||||
belt = /obj/item/pda/cargo
|
||||
ears = /obj/item/radio/headset/headset_cargo
|
||||
uniform = /obj/item/clothing/under/rank/cargotech
|
||||
l_hand = /obj/item/export_scanner
|
||||
|
||||
+121
-95
@@ -1,95 +1,121 @@
|
||||
//Due to how large this one is it gets its own file
|
||||
/*
|
||||
Chaplain
|
||||
*/
|
||||
/datum/job/chaplain
|
||||
title = "Chaplain"
|
||||
flag = CHAPLAIN
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
outfit = /datum/outfit/job/chaplain
|
||||
|
||||
access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
|
||||
minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
|
||||
|
||||
/datum/job/chaplain/after_spawn(mob/living/H, mob/M)
|
||||
. = ..()
|
||||
if(H.mind)
|
||||
H.mind.isholy = TRUE
|
||||
|
||||
var/obj/item/storage/book/bible/booze/B = new
|
||||
|
||||
if(GLOB.religion)
|
||||
B.deity_name = GLOB.deity
|
||||
B.name = GLOB.bible_name
|
||||
B.icon_state = GLOB.bible_icon_state
|
||||
B.item_state = GLOB.bible_item_state
|
||||
to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")
|
||||
H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
|
||||
var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod
|
||||
var/obj/item/nullrod/N = new nrt(H)
|
||||
H.put_in_hands(N)
|
||||
return
|
||||
|
||||
var/new_religion = "Christianity"
|
||||
if(M.client && M.client.prefs.custom_names["religion"])
|
||||
new_religion = M.client.prefs.custom_names["religion"]
|
||||
|
||||
var/new_deity = "Space Jesus"
|
||||
if(M.client && M.client.prefs.custom_names["deity"])
|
||||
new_deity = M.client.prefs.custom_names["deity"]
|
||||
|
||||
B.deity_name = new_deity
|
||||
|
||||
|
||||
switch(lowertext(new_religion))
|
||||
if("christianity")
|
||||
B.name = pick("The Holy Bible","The Dead Sea Scrolls")
|
||||
if("satanism")
|
||||
B.name = "The Unholy Bible"
|
||||
if("cthulhu")
|
||||
B.name = "The Necronomicon"
|
||||
if("islam")
|
||||
B.name = "Quran"
|
||||
if("scientology")
|
||||
B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
|
||||
if("chaos")
|
||||
B.name = "The Book of Lorgar"
|
||||
if("imperium")
|
||||
B.name = "Uplifting Primer"
|
||||
if("toolboxia")
|
||||
B.name = "Toolbox Manifesto"
|
||||
if("homosexuality")
|
||||
B.name = "Guys Gone Wild"
|
||||
if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes")
|
||||
B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
|
||||
H.adjustBrainLoss(100) // starts off retarded as fuck
|
||||
if("science")
|
||||
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
|
||||
else
|
||||
B.name = "The Holy Book of [new_religion]"
|
||||
|
||||
GLOB.religion = new_religion
|
||||
GLOB.bible_name = B.name
|
||||
GLOB.deity = B.deity_name
|
||||
|
||||
H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
|
||||
|
||||
SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1)
|
||||
SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1)
|
||||
|
||||
/datum/outfit/job/chaplain
|
||||
name = "Chaplain"
|
||||
jobtype = /datum/job/chaplain
|
||||
|
||||
belt = /obj/item/pda/chaplain
|
||||
uniform = /obj/item/clothing/under/rank/chaplain
|
||||
backpack_contents = list(/obj/item/camera/spooky = 1)
|
||||
backpack = /obj/item/storage/backpack/cultpack
|
||||
satchel = /obj/item/storage/backpack/cultpack
|
||||
/datum/job/chaplain
|
||||
title = "Chaplain"
|
||||
flag = CHAPLAIN
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
outfit = /datum/outfit/job/chaplain
|
||||
|
||||
access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
|
||||
minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CHAPLAIN
|
||||
|
||||
|
||||
/datum/job/chaplain/after_spawn(mob/living/H, mob/M)
|
||||
. = ..()
|
||||
if(H.mind)
|
||||
H.mind.isholy = TRUE
|
||||
|
||||
var/obj/item/storage/book/bible/booze/B = new
|
||||
|
||||
if(GLOB.religion)
|
||||
B.deity_name = GLOB.deity
|
||||
B.name = GLOB.bible_name
|
||||
B.icon_state = GLOB.bible_icon_state
|
||||
B.item_state = GLOB.bible_item_state
|
||||
to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.")
|
||||
H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
|
||||
var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod
|
||||
var/obj/item/nullrod/N = new nrt(H)
|
||||
H.put_in_hands(N)
|
||||
return
|
||||
|
||||
var/new_religion = DEFAULT_RELIGION
|
||||
if(M.client && M.client.prefs.custom_names["religion"])
|
||||
new_religion = M.client.prefs.custom_names["religion"]
|
||||
|
||||
var/new_deity = DEFAULT_DEITY
|
||||
if(M.client && M.client.prefs.custom_names["deity"])
|
||||
new_deity = M.client.prefs.custom_names["deity"]
|
||||
|
||||
B.deity_name = new_deity
|
||||
|
||||
|
||||
switch(lowertext(new_religion))
|
||||
if("christianity") // DEFAULT_RELIGION
|
||||
B.name = pick("The Holy Bible","The Dead Sea Scrolls")
|
||||
if("buddhism")
|
||||
B.name = "The Sutras"
|
||||
if("clownism","honkmother","honk","honkism","comedy")
|
||||
B.name = pick("The Holy Joke Book", "Just a Prank", "Hymns to the Honkmother")
|
||||
if("chaos")
|
||||
B.name = "The Book of Lorgar"
|
||||
if("cthulhu")
|
||||
B.name = "The Necronomicon"
|
||||
if("hinduism")
|
||||
B.name = "The Vedas"
|
||||
if("homosexuality")
|
||||
B.name = pick("Guys Gone Wild","Coming Out of The Closet")
|
||||
if("imperium")
|
||||
B.name = "Uplifting Primer"
|
||||
if("islam")
|
||||
B.name = "Quran"
|
||||
if("judaism")
|
||||
B.name = "The Torah"
|
||||
if("lampism")
|
||||
B.name = "Fluorescent Incandescence"
|
||||
if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes")
|
||||
B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition","F.A.T.A.L. Rulebook")
|
||||
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100) // starts off retarded as fuck
|
||||
if("monkeyism","apism","gorillism","primatism")
|
||||
B.name = pick("Going Bananas", "Bananas Out For Harambe")
|
||||
if("mormonism")
|
||||
B.name = "The Book of Mormon"
|
||||
if("pastafarianism")
|
||||
B.name = "The Gospel of the Flying Spaghetti Monster"
|
||||
if("rastafarianism","rasta")
|
||||
B.name = "The Holy Piby"
|
||||
if("satanism")
|
||||
B.name = "The Unholy Bible"
|
||||
if("science")
|
||||
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
|
||||
if("scientology")
|
||||
B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
|
||||
if("servicianism", "partying")
|
||||
B.name = "The Tenets of Servicia"
|
||||
B.deity_name = pick("Servicia", "Space Bacchus", "Space Dionysus")
|
||||
B.desc = "Happy, Full, Clean. Live it and give it."
|
||||
if("subgenius")
|
||||
B.name = "Book of the SubGenius"
|
||||
if("toolboxia","greytide")
|
||||
B.name = pick("Toolbox Manifesto","iGlove Assistants")
|
||||
if("weeaboo","kawaii")
|
||||
B.name = pick("Fanfiction Compendium","Japanese for Dummies","The Manganomicon","Establishing Your O.T.P")
|
||||
else
|
||||
B.name = "The Holy Book of [new_religion]"
|
||||
|
||||
GLOB.religion = new_religion
|
||||
GLOB.bible_name = B.name
|
||||
GLOB.deity = B.deity_name
|
||||
|
||||
H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK)
|
||||
|
||||
SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1)
|
||||
SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1)
|
||||
|
||||
/datum/outfit/job/chaplain
|
||||
name = "Chaplain"
|
||||
jobtype = /datum/job/chaplain
|
||||
|
||||
belt = /obj/item/pda/chaplain
|
||||
ears = /obj/item/radio/headset/headset_srv
|
||||
uniform = /obj/item/clothing/under/rank/chaplain
|
||||
backpack_contents = list(/obj/item/camera/spooky = 1)
|
||||
backpack = /obj/item/storage/backpack/cultpack
|
||||
satchel = /obj/item/storage/backpack/cultpack
|
||||
@@ -0,0 +1,36 @@
|
||||
/datum/job/chemist
|
||||
title = "Chemist"
|
||||
flag = CHEMIST
|
||||
department_head = list("Chief Medical Officer")
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#74b5e0"
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_requirements = 60
|
||||
|
||||
outfit = /datum/outfit/job/chemist
|
||||
|
||||
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CHEMIST
|
||||
|
||||
/datum/outfit/job/chemist
|
||||
name = "Chemist"
|
||||
jobtype = /datum/job/chemist
|
||||
|
||||
glasses = /obj/item/clothing/glasses/science
|
||||
belt = /obj/item/pda/chemist
|
||||
ears = /obj/item/radio/headset/headset_med
|
||||
uniform = /obj/item/clothing/under/rank/chemist
|
||||
shoes = /obj/item/clothing/shoes/sneakers/white
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/chemist
|
||||
backpack = /obj/item/storage/backpack/chemistry
|
||||
satchel = /obj/item/storage/backpack/satchel/chem
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/med
|
||||
|
||||
chameleon_extras = /obj/item/gun/syringe
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/datum/job/chief_engineer
|
||||
title = "Chief Engineer"
|
||||
flag = CHIEF
|
||||
// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
|
||||
department_head = list("Captain")
|
||||
department_flag = ENGSEC
|
||||
head_announce = list(RADIO_CHANNEL_ENGINEERING)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#ee7400"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_ENGINEERING
|
||||
|
||||
outfit = /datum/outfit/job/ce
|
||||
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity)
|
||||
|
||||
/datum/outfit/job/ce
|
||||
name = "Chief Engineer"
|
||||
jobtype = /datum/job/chief_engineer
|
||||
|
||||
id = /obj/item/card/id/silver
|
||||
belt = /obj/item/storage/belt/utility/chief/full
|
||||
l_pocket = /obj/item/pda/heads/ce
|
||||
ears = /obj/item/radio/headset/heads/ce
|
||||
uniform = /obj/item/clothing/under/rank/chief_engineer
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
head = /obj/item/clothing/head/hardhat/white
|
||||
gloves = /obj/item/clothing/gloves/color/black/ce
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/industrial
|
||||
satchel = /obj/item/storage/backpack/satchel/eng
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/engineering
|
||||
box = /obj/item/storage/box/engineer
|
||||
pda_slot = SLOT_L_STORE
|
||||
chameleon_extras = /obj/item/stamp/ce
|
||||
|
||||
/datum/outfit/job/ce/rig
|
||||
name = "Chief Engineer (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/engine/elite
|
||||
shoes = /obj/item/clothing/shoes/magboots/advance
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
glasses = /obj/item/clothing/glasses/meson/engine
|
||||
gloves = /obj/item/clothing/gloves/color/yellow
|
||||
head = null
|
||||
internals_slot = SLOT_S_STORE
|
||||
@@ -0,0 +1,59 @@
|
||||
/datum/job/cmo
|
||||
title = "Chief Medical Officer"
|
||||
flag = CMO_JF
|
||||
department_head = list("Captain")
|
||||
department_flag = MEDSCI
|
||||
// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD
|
||||
head_announce = list(RADIO_CHANNEL_MEDICAL)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the captain"
|
||||
selection_color = "#509ed1"
|
||||
req_admin_notify = 1
|
||||
minimal_player_age = 7
|
||||
exp_requirements = 180
|
||||
exp_type = EXP_TYPE_CREW
|
||||
exp_type_department = EXP_TYPE_MEDICAL
|
||||
|
||||
outfit = /datum/outfit/job/cmo
|
||||
|
||||
access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
|
||||
ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
|
||||
minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM,
|
||||
ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
|
||||
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
|
||||
|
||||
/datum/outfit/job/cmo
|
||||
name = "Chief Medical Officer"
|
||||
jobtype = /datum/job/cmo
|
||||
|
||||
id = /obj/item/card/id/silver
|
||||
belt = /obj/item/pda/heads/cmo
|
||||
l_pocket = /obj/item/pinpointer/crew
|
||||
ears = /obj/item/radio/headset/heads/cmo
|
||||
uniform = /obj/item/clothing/under/rank/chief_medical_officer
|
||||
shoes = /obj/item/clothing/shoes/sneakers/brown
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat/cmo
|
||||
l_hand = /obj/item/storage/firstaid/regular
|
||||
suit_store = /obj/item/flashlight/pen
|
||||
backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1)
|
||||
|
||||
backpack = /obj/item/storage/backpack/medic
|
||||
satchel = /obj/item/storage/backpack/satchel/med
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/med
|
||||
|
||||
chameleon_extras = list(/obj/item/gun/syringe, /obj/item/stamp/cmo)
|
||||
|
||||
/datum/outfit/job/cmo/hardsuit
|
||||
name = "Chief Medical Officer (Hardsuit)"
|
||||
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/medical
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
r_pocket = /obj/item/flashlight/pen
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
/*
|
||||
Clown
|
||||
*/
|
||||
/datum/job/clown
|
||||
title = "Clown"
|
||||
flag = CLOWN
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
outfit = /datum/outfit/job/clown
|
||||
|
||||
access = list(ACCESS_THEATRE)
|
||||
minimal_access = list(ACCESS_THEATRE)
|
||||
|
||||
/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
|
||||
. = ..()
|
||||
H.apply_pref_name("clown", M.client)
|
||||
|
||||
/datum/outfit/job/clown
|
||||
name = "Clown"
|
||||
jobtype = /datum/job/clown
|
||||
|
||||
belt = /obj/item/pda/clown
|
||||
uniform = /obj/item/clothing/under/rank/clown
|
||||
shoes = /obj/item/clothing/shoes/clown_shoes
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
l_pocket = /obj/item/bikehorn
|
||||
backpack_contents = list(
|
||||
/obj/item/stamp/clown = 1,
|
||||
/obj/item/reagent_containers/spray/waterflower = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
|
||||
/obj/item/instrument/bikehorn = 1,
|
||||
)
|
||||
|
||||
implants = list(/obj/item/implant/sad_trombone)
|
||||
|
||||
backpack = /obj/item/storage/backpack/clown
|
||||
satchel = /obj/item/storage/backpack/clown
|
||||
duffelbag = /obj/item/storage/backpack/duffelbag/clown //strangely has a duffel
|
||||
|
||||
box = /obj/item/storage/box/hug/survival
|
||||
|
||||
chameleon_extras = /obj/item/stamp/clown
|
||||
|
||||
|
||||
/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names))
|
||||
|
||||
/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
H.dna.add_mutation(CLOWNMUT)
|
||||
H.dna.add_mutation(SMILE)
|
||||
|
||||
/*
|
||||
Mime
|
||||
*/
|
||||
/datum/job/mime
|
||||
title = "Mime"
|
||||
flag = MIME
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
outfit = /datum/outfit/job/mime
|
||||
|
||||
access = list(ACCESS_THEATRE)
|
||||
minimal_access = list(ACCESS_THEATRE)
|
||||
|
||||
/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M)
|
||||
H.apply_pref_name("mime", M.client)
|
||||
|
||||
/datum/outfit/job/mime
|
||||
name = "Mime"
|
||||
jobtype = /datum/job/mime
|
||||
|
||||
belt = /obj/item/pda/mime
|
||||
uniform = /obj/item/clothing/under/rank/mime
|
||||
mask = /obj/item/clothing/mask/gas/mime
|
||||
gloves = /obj/item/clothing/gloves/color/white
|
||||
head = /obj/item/clothing/head/frenchberet
|
||||
suit = /obj/item/clothing/suit/suspenders
|
||||
backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing=1)
|
||||
|
||||
accessory = /obj/item/clothing/accessory/pocketprotector/cosmetology
|
||||
backpack = /obj/item/storage/backpack/mime
|
||||
satchel = /obj/item/storage/backpack/mime
|
||||
|
||||
|
||||
/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
if(H.mind)
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
|
||||
H.mind.miming = 1
|
||||
|
||||
/*
|
||||
Curator
|
||||
*/
|
||||
/datum/job/curator
|
||||
title = "Curator"
|
||||
flag = CURATOR
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
outfit = /datum/outfit/job/curator
|
||||
|
||||
access = list(ACCESS_LIBRARY)
|
||||
minimal_access = list(ACCESS_LIBRARY, ACCESS_CONSTRUCTION,ACCESS_MINING_STATION)
|
||||
|
||||
/datum/outfit/job/curator
|
||||
name = "Curator"
|
||||
jobtype = /datum/job/curator
|
||||
|
||||
belt = /obj/item/pda/curator
|
||||
uniform = /obj/item/clothing/under/rank/curator
|
||||
l_hand = /obj/item/storage/bag/books
|
||||
r_pocket = /obj/item/key/displaycase
|
||||
l_pocket = /obj/item/laser_pointer
|
||||
accessory = /obj/item/clothing/accessory/pocketprotector/full
|
||||
backpack_contents = list(
|
||||
/obj/item/melee/curator_whip = 1,
|
||||
/obj/item/soapstone = 1,
|
||||
/obj/item/barcodescanner = 1
|
||||
)
|
||||
|
||||
|
||||
/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
H.grant_all_languages(omnitongue=TRUE)
|
||||
/*
|
||||
Lawyer
|
||||
*/
|
||||
/datum/job/lawyer
|
||||
title = "Lawyer"
|
||||
flag = LAWYER
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
var/lawyers = 0 //Counts lawyer amount
|
||||
|
||||
outfit = /datum/outfit/job/lawyer
|
||||
|
||||
access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
|
||||
minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
|
||||
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
/datum/outfit/job/lawyer
|
||||
name = "Lawyer"
|
||||
jobtype = /datum/job/lawyer
|
||||
|
||||
belt = /obj/item/pda/lawyer
|
||||
ears = /obj/item/radio/headset/headset_sec
|
||||
uniform = /obj/item/clothing/under/lawyer/bluesuit
|
||||
suit = /obj/item/clothing/suit/toggle/lawyer
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
l_hand = /obj/item/storage/briefcase/lawyer
|
||||
l_pocket = /obj/item/laser_pointer
|
||||
r_pocket = /obj/item/clothing/accessory/lawyers_badge
|
||||
|
||||
chameleon_extras = /obj/item/stamp/law
|
||||
|
||||
|
||||
/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
var/datum/job/lawyer/J = SSjob.GetJobType(jobtype)
|
||||
J.lawyers++
|
||||
if(J.lawyers>1)
|
||||
uniform = /obj/item/clothing/under/lawyer/purpsuit
|
||||
suit = /obj/item/clothing/suit/toggle/lawyer/purple
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user