Merge remote-tracking branch 'PolarisSS13/master'

This commit is contained in:
SplinterGP
2020-08-23 17:13:46 -03:00
35 changed files with 312 additions and 315 deletions

View File

@@ -9,6 +9,8 @@
S["ooccolor"] >> pref.ooccolor
S["tooltipstyle"] >> pref.tooltipstyle
S["client_fps"] >> pref.client_fps
S["ambience_freq"] >> pref.ambience_freq
S["ambience_chance"] >> pref.ambience_chance
S["tgui_fancy"] >> pref.tgui_fancy
S["tgui_lock"] >> pref.tgui_lock
@@ -19,16 +21,20 @@
S["ooccolor"] << pref.ooccolor
S["tooltipstyle"] << pref.tooltipstyle
S["client_fps"] << pref.client_fps
S["ambience_freq"] << pref.ambience_freq
S["ambience_chance"] << pref.ambience_freq
S["tgui_fancy"] << pref.tgui_fancy
S["tgui_lock"] << pref.tgui_lock
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha))
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
pref.tooltipstyle = sanitize_inlist(pref.tooltipstyle, all_tooltip_styles, initial(pref.tooltipstyle))
pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps))
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha))
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
pref.tooltipstyle = sanitize_inlist(pref.tooltipstyle, all_tooltip_styles, initial(pref.tooltipstyle))
pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps))
pref.ambience_freq = sanitize_integer(pref.ambience_freq, 0, 60, initial(pref.ambience_freq)) // No more than once per hour.
pref.ambience_chance = sanitize_integer(pref.ambience_chance, 0, 100, initial(pref.ambience_chance)) // 0-100 range.
pref.tgui_fancy = sanitize_integer(pref.tgui_fancy, 0, 1, initial(pref.tgui_fancy))
pref.tgui_lock = sanitize_integer(pref.tgui_lock, 0, 1, initial(pref.tgui_lock))
@@ -39,6 +45,8 @@
. += "-Alpha(transparency): <a href='?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a> <a href='?src=\ref[src];reset=alpha'>reset</a><br>"
. += "<b>Tooltip Style:</b> <a href='?src=\ref[src];select_tooltip_style=1'><b>[pref.tooltipstyle]</b></a><br>"
. += "<b>Client FPS:</b> <a href='?src=\ref[src];select_client_fps=1'><b>[pref.client_fps]</b></a><br>"
. += "<b>Random Ambience Frequency:</b> <a href='?src=\ref[src];select_ambience_freq=1'><b>[pref.ambience_freq]</b></a><br>"
. += "<b>Ambience Chance:</b> <a href='?src=\ref[src];select_ambience_chance=1'><b>[pref.ambience_chance]</b></a><br>"
. += "<b>tgui Window Mode:</b> <a href='?src=\ref[src];tgui_fancy=1'><b>[(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]</b></a><br>"
. += "<b>tgui Window Placement:</b> <a href='?src=\ref[src];tgui_lock=1'><b>[(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]</b></a><br>"
if(can_select_ooc_color(user))
@@ -87,6 +95,20 @@
if(pref.client)
pref.client.fps = fps_new
return TOPIC_REFRESH
else if(href_list["select_ambience_freq"])
var/ambience_new = input(user, "Input how often you wish to hear ambience repeated! (1-60 MINUTES, 0 for disabled)", "Global Preference", pref.ambience_freq) as null|num
if(isnull(ambience_new) || !CanUseTopic(user)) return TOPIC_NOACTION
if(ambience_new < 0 || ambience_new > 60) return TOPIC_NOACTION
pref.ambience_freq = ambience_new
return TOPIC_REFRESH
else if(href_list["select_ambience_chance"])
var/ambience_chance_new = input(user, "Input the chance you'd like to hear ambience played to you (On area change, or by random ambience). 35 means a 35% chance to play ambience. This is a range from 0-100. 0 disables ambience playing entirely. This is also affected by Ambience Frequency.", "Global Preference", pref.ambience_freq) as null|num
if(isnull(ambience_chance_new) || !CanUseTopic(user)) return TOPIC_NOACTION
if(ambience_chance_new < 0 || ambience_chance_new > 100) return TOPIC_NOACTION
pref.ambience_chance = ambience_chance_new
return TOPIC_REFRESH
else if(href_list["tgui_fancy"])
pref.tgui_fancy = !pref.tgui_fancy

View File

@@ -61,6 +61,7 @@
. = list()
. += "<tt><center>"
. += "<b>Choose occupation chances</b><br>Unavailable occupations are crossed out.<br>"
. += "<script type='text/javascript'>function setJobPrefRedirect(level, rank) { window.location.href='?src=\ref[src];level=' + level + ';set_job=' + encodeURIComponent(rank); return false; }</script>"
. += "<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%' valign='top'>" // Table within a table for alignment, also allows you to easily add more columns.
. += "<table width='100%' cellpadding='1' cellspacing='0'>"
var/index = -1
@@ -140,7 +141,32 @@
. += "</td><td width='40%'>"
. += "<a href='?src=\ref[src];set_job=[rank]'>"
var/prefLevelLabel = "ERROR"
var/prefLevelColor = "pink"
var/prefUpperLevel = -1 // level to assign on left click
var/prefLowerLevel = -1 // level to assign on right click
if(pref.GetJobDepartment(job, 1) & job.flag)
prefLevelLabel = "High"
prefLevelColor = "55cc55"
prefUpperLevel = 4
prefLowerLevel = 2
else if(pref.GetJobDepartment(job, 2) & job.flag)
prefLevelLabel = "Medium"
prefLevelColor = "eecc22"
prefUpperLevel = 1
prefLowerLevel = 3
else if(pref.GetJobDepartment(job, 3) & job.flag)
prefLevelLabel = "Low"
prefLevelColor = "cc5555"
prefUpperLevel = 2
prefLowerLevel = 4
else
prefLevelLabel = "NEVER"
prefLevelColor = "black"
prefUpperLevel = 3
prefLowerLevel = 1
. += "<a href='?src=\ref[src];set_job=[rank];level=[prefUpperLevel]' oncontextmenu='javascript:return setJobPrefRedirect([prefLowerLevel], \"[rank]\");'>"
if(job.type == /datum/job/assistant)//Assistant is special
if(pref.job_civilian_low & ASSISTANT)
@@ -152,14 +178,7 @@
. += "</a></td></tr>"
continue
if(pref.GetJobDepartment(job, 1) & job.flag)
. += " <font color=55cc55>\[High]</font>"
else if(pref.GetJobDepartment(job, 2) & job.flag)
. += " <font color=eecc22>\[Medium]</font>"
else if(pref.GetJobDepartment(job, 3) & job.flag)
. += " <font color=cc5555>\[Low]</font>"
else
. += " <font color=black>\[NEVER]</font>"
. += " <font color=[prefLevelColor]>\[[prefLevelLabel]]</font>"
if(LAZYLEN(job.alt_titles))
. += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'>&nbsp</td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
. += "</a></td></tr>"
@@ -200,8 +219,8 @@
return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
else if(href_list["set_job"])
if(SetJob(user, href_list["set_job"])) return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
if(SetJob(user, href_list["set_job"], text2num(href_list["level"])))
return (pref.equip_preview_mob ? TOPIC_REFRESH_UPDATE_PREVIEW : TOPIC_REFRESH)
else if(href_list["job_info"])
var/rank = href_list["job_info"]
@@ -250,7 +269,7 @@
if(job.title != new_title)
pref.player_alt_titles[job.title] = new_title
/datum/category_item/player_setup_item/occupation/proc/SetJob(mob/user, role)
/datum/category_item/player_setup_item/occupation/proc/SetJob(mob/user, role, level)
var/datum/job/job = job_master.GetJob(role)
if(!job)
return 0
@@ -262,63 +281,58 @@
pref.job_civilian_low |= job.flag
return 1
if(pref.GetJobDepartment(job, 1) & job.flag)
SetJobDepartment(job, 1)
else if(pref.GetJobDepartment(job, 2) & job.flag)
SetJobDepartment(job, 2)
else if(pref.GetJobDepartment(job, 3) & job.flag)
SetJobDepartment(job, 3)
else//job = Never
SetJobDepartment(job, 4)
SetJobDepartment(job, level)
return 1
/datum/category_item/player_setup_item/occupation/proc/reset_jobhigh()
pref.job_civilian_med |= pref.job_civilian_high
pref.job_medsci_med |= pref.job_medsci_high
pref.job_engsec_med |= pref.job_engsec_high
pref.job_civilian_high = 0
pref.job_medsci_high = 0
pref.job_engsec_high = 0
// Level is equal to the desired new level of the job. So for a value of 4, we want to disable the job.
/datum/category_item/player_setup_item/occupation/proc/SetJobDepartment(var/datum/job/job, var/level)
if(!job || !level) return 0
switch(level)
if(1)//Only one of these should ever be active at once so clear them all here
pref.job_civilian_high = 0
pref.job_medsci_high = 0
pref.job_engsec_high = 0
return 1
if(2)//Set current highs to med, then reset them
pref.job_civilian_med |= pref.job_civilian_high
pref.job_medsci_med |= pref.job_medsci_high
pref.job_engsec_med |= pref.job_engsec_high
pref.job_civilian_high = 0
pref.job_medsci_high = 0
pref.job_engsec_high = 0
if(!job || !level)
return 0
switch(job.department_flag)
if(CIVILIAN)
pref.job_civilian_low &= ~job.flag
pref.job_civilian_med &= ~job.flag
pref.job_civilian_high &= ~job.flag
switch(level)
if(2)
if(1)
reset_jobhigh()
pref.job_civilian_high = job.flag
pref.job_civilian_med &= ~job.flag
if(3)
if(2)
pref.job_civilian_med |= job.flag
pref.job_civilian_low &= ~job.flag
else
if(3)
pref.job_civilian_low |= job.flag
if(MEDSCI)
pref.job_medsci_low &= ~job.flag
pref.job_medsci_med &= ~job.flag
pref.job_medsci_high &= ~job.flag
switch(level)
if(2)
if(1)
reset_jobhigh()
pref.job_medsci_high = job.flag
pref.job_medsci_med &= ~job.flag
if(3)
if(2)
pref.job_medsci_med |= job.flag
pref.job_medsci_low &= ~job.flag
else
if(3)
pref.job_medsci_low |= job.flag
if(ENGSEC)
pref.job_engsec_low &= ~job.flag
pref.job_engsec_med &= ~job.flag
pref.job_engsec_high &= ~job.flag
switch(level)
if(2)
if(1)
reset_jobhigh()
pref.job_engsec_high = job.flag
pref.job_engsec_med &= ~job.flag
if(3)
if(2)
pref.job_engsec_med |= job.flag
pref.job_engsec_low &= ~job.flag
else
if(3)
pref.job_engsec_low |= job.flag
return 1

View File

@@ -23,6 +23,8 @@ datum/preferences
var/UI_style_alpha = 255
var/tooltipstyle = "Midnight" //Style for popup tooltips
var/client_fps = 0
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)
var/tgui_fancy = TRUE
var/tgui_lock = FALSE

View File

@@ -111,7 +111,7 @@
. = FALSE
if(LAZYLEN(accessories))
for(var/obj/item/clothing/C in accessories)
if(C.handle_low_temperature(tempcheck))
if(C.handle_high_temperature(tempcheck))
. = TRUE
if(max_heat_protection_temperature && max_heat_protection_temperature >= tempcheck)

View File

@@ -5,6 +5,7 @@
departments = list(DEPARTMENT_EVERYONE, DEPARTMENT_SECURITY, DEPARTMENT_ENGINEERING)
chaos = 60
chaotic_threshold = EVENT_CHAOS_THRESHOLD_HIGH_IMPACT
enabled = FALSE // Turns out they are in fact grossly OP.
var/safe_for_extended = FALSE
/datum/event2/meta/swarm_boarder/get_weight()

View File

@@ -824,6 +824,7 @@ var/list/name_to_material
name = "alienalloy"
display_name = "durable alloy"
stack_type = null
flags = MATERIAL_UNMELTABLE
icon_colour = "#6C7364"
integrity = 1200
melting_point = 6000 // Hull plating.
@@ -1176,4 +1177,4 @@ var/list/name_to_material
hardness = 1
weight = 1
protectiveness = 0 // 0%
conductive = 0
conductive = 0

View File

@@ -101,6 +101,7 @@
var/chemOD_mod = 1 // Damage modifier for overdose; higher = more damage from ODs
var/alcohol_mod = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc.
var/pain_mod = 1 // Multiplier to pain effects; 0.5 = half, 0 = no effect (equal to NO_PAIN, really), 2 = double, etc.
var/spice_mod = 1 // Multiplier to spice/capsaicin/frostoil effects; 0.5 = half, 0 = no effect (immunity), 2 = double, etc.
// set below is EMP interactivity for nonsynth carbons
var/emp_sensitivity = 0 // bitflag. valid flags are: EMP_PAIN, EMP_BLIND, EMP_DEAFEN, EMP_CONFUSE, EMP_STUN, and EMP_(BRUTE/BURN/TOX/OXY)_DMG
var/emp_dmg_mod = 1 // Multiplier to all EMP damage sustained by the mob, if it's EMP-sensitive

View File

@@ -45,7 +45,7 @@
//Check if we're on fire
handle_fire()
if(client) // Handle re-running ambience to mobs if they've remained in an area, AND have an active client assigned to them.
if(client && !(client.prefs.ambience_freq == 0)) // Handle re-running ambience to mobs if they've remained in an area, AND have an active client assigned to them, and do not have repeating ambience disabled.
handle_ambience()
//stuff in the stomach
@@ -91,10 +91,11 @@
/mob/living/proc/handle_stomach()
return
/mob/living/proc/handle_ambience() // If you're in an ambient area and have not moved out of it for x time, we're going to play ambience again to you, to help break up the silence.
if(world.time >= (lastareachange + 30 SECONDS)) // Every 30 seconds, we're going to run a 35% chance to play ambience.
/mob/living/proc/handle_ambience() // If you're in an ambient area and have not moved out of it for x time as configured per-client, and do not have it disabled, we're going to play ambience again to you, to help break up the silence.
if(world.time >= (lastareachange + client.prefs.ambience_freq MINUTES)) // Every 5 minutes (by default, set per-client), we're going to run a 35% chance (by default, also set per-client) to play ambience.
var/area/A = get_area(src)
if(A)
lastareachange = world.time // This will refresh the last area change to prevent this call happening LITERALLY every life tick.
A.play_ambience(src, initial = FALSE)
/mob/living/proc/update_pulling()

View File

@@ -675,9 +675,26 @@
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
if(H.species.can_shred(H))
attack_generic(H, rand(30,50), "slashed")
return
//Adding borg petting. Help intent pets, Disarm intent taps, Grab should remove the battery for replacement, and Harm is punching(no damage)
switch(H.a_intent)
if(I_HELP)
visible_message("<span class='notice'>[H] pets [src].</span>")
return
if(I_HURT)
H.do_attack_animation(src)
if(H.species.can_shred(H))
attack_generic(H, rand(30,50), "slashed")
return
else
playsound(src.loc, 'sound/effects/bang.ogg', 10, 1)
visible_message("<span class='warning'>[H] punches [src], but doesn't leave a dent.</span>")
return
if(I_DISARM)
H.do_attack_animation(src)
playsound(src.loc, 'sound/effects/clang2.ogg', 10, 1)
visible_message("<span class='warning'>[H] taps [src].</span>")
return
//Addition of borg petting end
if(opened && !wiresexposed && (!istype(user, /mob/living/silicon)))
var/datum/robot_component/cell_component = components["power cell"]

View File

@@ -613,6 +613,23 @@
M.emote("shiver")
holder.remove_reagent("capsaicin", 5)
/datum/reagent/frostoil/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) // Eating frostoil now acts like capsaicin. Wee!
if(alien == IS_DIONA)
return
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.can_feel_pain())
return
var/effective_dose = (dose * M.species.spice_mod)
if((effective_dose < 5) && (dose == metabolism || prob(5)))
to_chat(M, "<span class='danger'>Your insides suddenly feel a spreading chill!</span>")
if(effective_dose >= 5)
M.apply_effect(2 * M.species.spice_mod, AGONY, 0)
M.bodytemperature -= rand(1, 5) * M.species.spice_mod // Really fucks you up, cause it makes you cold.
if(prob(5))
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>", pick("<span class='danger'>You feel like your insides are freezing!</span>", "<span class='danger'>Your insides feel like they're turning to ice!</span>"))
holder.remove_reagent("capsaicin", 5)
/datum/reagent/frostoil/cryotoxin //A longer lasting version of frost oil.
name = "Cryotoxin"
id = "cryotoxin"
@@ -643,13 +660,15 @@
var/mob/living/carbon/human/H = M
if(!H.can_feel_pain())
return
if(dose < 5 && (dose == metabolism || prob(5)))
var/effective_dose = (dose * M.species.spice_mod)
if((effective_dose < 5) && (dose == metabolism || prob(5)))
to_chat(M, "<span class='danger'>Your insides feel uncomfortably hot!</span>")
if(dose >= 5)
M.apply_effect(2, AGONY, 0)
if(effective_dose >= 5)
M.apply_effect(2 * M.species.spice_mod, AGONY, 0)
M.bodytemperature += rand(1, 5) * M.species.spice_mod // Really fucks you up, cause it makes you overheat, too.
if(prob(5))
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>", "<span class='danger'>You feel like your insides are burning!</span>")
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>", pick("<span class='danger'>You feel like your insides are burning!</span>", "<span class='danger'>You feel like your insides are on fire!</span>", "<span class='danger'>You feel like your belly is full of lava!</span>"))
holder.remove_reagent("frostoil", 5)
/datum/reagent/condensedcapsaicin

View File

@@ -31,6 +31,9 @@ var/list/ventcrawl_machinery = list(
if(incapacitated())
to_chat(src, "<span class='warning'>You cannot ventcrawl in your current state!</span>")
return FALSE
if(buckled)
to_chat(src, "<span class='warning'>You cannot ventcrawl while buckled!</span>")
return FALSE
return ventcrawl_carry()
/mob/living/Login()
@@ -199,4 +202,4 @@ var/list/ventcrawl_machinery = list(
client.screen -= global_hud.centermarker
client.eye = src
pipes_shown.len = 0
pipes_shown.len = 0