Merge branch 'Citadel-Station-13:master' into WanderingFox95-TribalOverhaul
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
var/check_flags = 0
|
||||
var/required_mobility_flags = MOBILITY_USE
|
||||
var/processing = FALSE
|
||||
var/obj/screen/movable/action_button/button = null
|
||||
var/atom/movable/screen/movable/action_button/button = null
|
||||
var/buttontooltipstyle = ""
|
||||
var/transparent_when_unavailable = TRUE
|
||||
var/use_target_appearance = FALSE
|
||||
@@ -159,7 +159,7 @@
|
||||
button.color = rgb(255,255,255,255)
|
||||
return 1
|
||||
|
||||
/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE)
|
||||
/datum/action/proc/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force = FALSE)
|
||||
if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force))
|
||||
current_button.cut_overlays()
|
||||
current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state))
|
||||
@@ -821,7 +821,7 @@
|
||||
icon_icon = 'icons/mob/actions/actions_items.dmi'
|
||||
button_icon_state = "storage_gather_switch"
|
||||
|
||||
/datum/action/item_action/storage_gather_mode/ApplyIcon(obj/screen/movable/action_button/current_button)
|
||||
/datum/action/item_action/storage_gather_mode/ApplyIcon(atom/movable/screen/movable/action_button/current_button)
|
||||
. = ..()
|
||||
var/old_layer = target.layer
|
||||
var/old_plane = target.plane
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/datum/atmosphere
|
||||
var/gas_string
|
||||
var/id
|
||||
|
||||
var/list/base_gases // A list of gases to always have
|
||||
var/list/normal_gases // A list of allowed gases:base_amount
|
||||
var/list/restricted_gases // A list of allowed gases like normal_gases but each can only be selected a maximum of one time
|
||||
var/restricted_chance = 10 // Chance per iteration to take from restricted gases
|
||||
|
||||
var/minimum_pressure
|
||||
var/maximum_pressure
|
||||
|
||||
var/minimum_temp
|
||||
var/maximum_temp
|
||||
|
||||
/datum/atmosphere/New()
|
||||
generate_gas_string()
|
||||
|
||||
/datum/atmosphere/proc/generate_gas_string()
|
||||
var/list/spicy_gas = restricted_gases.Copy()
|
||||
var/target_pressure = rand(minimum_pressure, maximum_pressure)
|
||||
var/pressure_scale = target_pressure / maximum_pressure
|
||||
|
||||
// First let's set up the gasmix and base gases for this template
|
||||
// We make the string from a gasmix in this proc because gases need to calculate their pressure
|
||||
var/datum/gas_mixture/gasmix = new
|
||||
gasmix.set_temperature(rand(minimum_temp, maximum_temp))
|
||||
for(var/i in base_gases)
|
||||
gasmix.set_moles(i, base_gases[i])
|
||||
|
||||
// Now let the random choices begin
|
||||
var/gastype
|
||||
var/amount
|
||||
while(gasmix.return_pressure() < target_pressure)
|
||||
if(!prob(restricted_chance) || !length(spicy_gas))
|
||||
gastype = pick(normal_gases)
|
||||
amount = normal_gases[gastype]
|
||||
else
|
||||
gastype = pick(spicy_gas)
|
||||
amount = spicy_gas[gastype]
|
||||
spicy_gas -= gastype //You can only pick each restricted gas once
|
||||
|
||||
amount *= rand(50, 200) / 100 // Randomly modifes the amount from half to double the base for some variety
|
||||
amount *= pressure_scale // If we pick a really small target pressure we want roughly the same mix but less of it all
|
||||
amount = CEILING(amount, 0.1)
|
||||
|
||||
gasmix.adjust_moles(gastype, amount)
|
||||
|
||||
// That last one put us over the limit, remove some of it
|
||||
if(gasmix.return_pressure() > target_pressure)
|
||||
var/moles_to_remove = (1 - target_pressure / gasmix.return_pressure()) * gasmix.total_moles()
|
||||
gasmix.adjust_moles(gastype, -moles_to_remove)
|
||||
gasmix.set_moles(gastype, FLOOR(gasmix.get_moles(gastype), 0.1))
|
||||
|
||||
// Now finally lets make that string
|
||||
var/list/gas_string_builder = list()
|
||||
for(var/id in gasmix.get_gases())
|
||||
gas_string_builder += "[id]=[gasmix.get_moles(id)]"
|
||||
gas_string_builder += "TEMP=[gasmix.return_temperature()]"
|
||||
gas_string = gas_string_builder.Join(";")
|
||||
@@ -0,0 +1,48 @@
|
||||
// Atmos types used for planetary airs
|
||||
/datum/atmosphere/lavaland
|
||||
id = LAVALAND_DEFAULT_ATMOS
|
||||
|
||||
base_gases = list(
|
||||
GAS_O2=5,
|
||||
GAS_N2=10,
|
||||
)
|
||||
normal_gases = list(
|
||||
GAS_O2=10,
|
||||
GAS_N2=10,
|
||||
GAS_CO2=10,
|
||||
)
|
||||
restricted_gases = list(
|
||||
GAS_BZ=0.1,
|
||||
GAS_METHYL_BROMIDE=0.1,
|
||||
)
|
||||
restricted_chance = 30
|
||||
|
||||
minimum_pressure = HAZARD_LOW_PRESSURE + 10
|
||||
maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1
|
||||
|
||||
minimum_temp = BODYTEMP_COLD_DAMAGE_LIMIT + 1
|
||||
maximum_temp = 320
|
||||
|
||||
/datum/atmosphere/icemoon
|
||||
id = ICEMOON_DEFAULT_ATMOS
|
||||
|
||||
base_gases = list(
|
||||
GAS_O2=5,
|
||||
GAS_N2=10,
|
||||
)
|
||||
normal_gases = list(
|
||||
GAS_O2=10,
|
||||
GAS_N2=10,
|
||||
GAS_CO2=10,
|
||||
)
|
||||
restricted_gases = list(
|
||||
GAS_METHYL_BROMIDE=0.1,
|
||||
)
|
||||
restricted_chance = 10
|
||||
|
||||
minimum_pressure = HAZARD_LOW_PRESSURE + 10
|
||||
maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1
|
||||
|
||||
minimum_temp = 180
|
||||
maximum_temp = 180
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
"These words keep echoing in your mind. You find yourself completely fascinated by them.")]</span>")
|
||||
to_chat(owner, "<span class='boldwarning'>You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\
|
||||
as long as you act like the words are your highest priority.</span>")
|
||||
var/obj/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /obj/screen/alert/hypnosis)
|
||||
var/atom/movable/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /atom/movable/screen/alert/hypnosis)
|
||||
hypno_alert.desc = "\"[hypnotic_phrase]\"... your mind seems to be fixated on this concept."
|
||||
..()
|
||||
|
||||
|
||||
@@ -264,3 +264,36 @@
|
||||
speak_dejavu += speech_args[SPEECH_MESSAGE]
|
||||
else
|
||||
speak_dejavu += speech_args[SPEECH_MESSAGE]
|
||||
|
||||
/datum/brain_trauma/mild/redacted
|
||||
name = "Confidentiality Trauma"
|
||||
desc = "Patient's language neurons seem to be warped in a strange manner, resulting in them being unable to speak properly."
|
||||
scan_desc = "<b>\[REDACTED]</b>"
|
||||
gain_text = "<span class='warning'>You feel the need to <b>\[REDACTED]</b></span>"
|
||||
lose_text = "<span class='notice'>You no longer feel the need to <b>\[REDACTED]</b>.</span>"
|
||||
|
||||
/datum/brain_trauma/mild/redacted/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message)
|
||||
var/list/message_split = splittext(message, " ")
|
||||
var/list/new_message = list()
|
||||
|
||||
for(var/word in message_split)
|
||||
var/suffix = ""
|
||||
var/suffix_foundon = 0
|
||||
for(var/potential_suffix in list("." , "," , ";" , "!" , ":" , "?"))
|
||||
suffix_foundon = findtext(word, potential_suffix, -length(potential_suffix))
|
||||
if(suffix_foundon)
|
||||
suffix = potential_suffix
|
||||
break
|
||||
|
||||
if(suffix_foundon)
|
||||
word = copytext(word, 1, suffix_foundon)
|
||||
|
||||
word = html_decode(word)
|
||||
|
||||
if(prob(25))
|
||||
word = pick(list("<b>\[REDACTED]</b>", "<b>\[CLASSIFIED]</b>", "<b>\[EXPUNGED]</b>"))
|
||||
new_message += word + suffix
|
||||
message = jointext(new_message, " ")
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
/datum/brain_trauma/severe/monophobia/on_life()
|
||||
..()
|
||||
if(check_alone())
|
||||
stress = min(stress + 0.5, 100)
|
||||
stress = min(stress + 0.25, 100)
|
||||
if(stress > 10 && (prob(5)))
|
||||
stress_reaction()
|
||||
else
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
playing.play(watcher)
|
||||
qdel(playing)
|
||||
|
||||
/obj/screen/cinematic
|
||||
/atom/movable/screen/cinematic
|
||||
icon = 'icons/effects/station_explosion.dmi'
|
||||
icon_state = "station_intact"
|
||||
plane = SPLASHSCREEN_PLANE
|
||||
@@ -32,7 +32,7 @@
|
||||
var/list/watching = list() //List of clients watching this
|
||||
var/list/locked = list() //Who had mob_transforming set during the cinematic
|
||||
var/is_global = FALSE //Global cinematics will override mob-specific ones
|
||||
var/obj/screen/cinematic/screen
|
||||
var/atom/movable/screen/cinematic/screen
|
||||
var/datum/callback/special_callback //For special effects synced with animation (explosions after the countdown etc)
|
||||
var/cleanup_time = 300 //How long for the final screen to remain
|
||||
var/stop_ooc = TRUE //Turns off ooc when played globally.
|
||||
@@ -74,7 +74,7 @@
|
||||
ooc_toggled = TRUE
|
||||
toggle_ooc(FALSE)
|
||||
|
||||
//Place /obj/screen/cinematic into everyone's screens, prevent them from moving
|
||||
//Place /atom/movable/screen/cinematic into everyone's screens, prevent them from moving
|
||||
for(var/MM in watchers)
|
||||
var/mob/M = MM
|
||||
show_to(M, M.client)
|
||||
@@ -101,7 +101,7 @@
|
||||
if(!C)
|
||||
return
|
||||
watching += C
|
||||
M.overlay_fullscreen("cinematic",/obj/screen/fullscreen/cinematic_backdrop)
|
||||
M.overlay_fullscreen("cinematic",/atom/movable/screen/fullscreen/cinematic_backdrop)
|
||||
C.screen += screen
|
||||
|
||||
//Sound helper
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
R.update_icon()
|
||||
to_chat(user, "<span class='info'>You strengthen [R], improving its resistance against melee, bullet and laser damage.</span>")
|
||||
else
|
||||
SEND_SIGNAL(O, COMSIG_ARMOR_PLATED, amount, maxamount)
|
||||
to_chat(user, "<span class='info'>You strengthen [O], improving its resistance against melee attacks.</span>")
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/mode_flags = COMBAT_MODE_INACTIVE
|
||||
var/combatmessagecooldown
|
||||
var/lastmousedir
|
||||
var/obj/screen/combattoggle/hud_icon
|
||||
var/atom/movable/screen/combattoggle/hud_icon
|
||||
var/hud_loc
|
||||
|
||||
/datum/component/combat_mode/Initialize(hud_loc = ui_combat_toggle)
|
||||
@@ -178,18 +178,18 @@
|
||||
safe_disable_combat_mode(source)
|
||||
|
||||
/// The screen button.
|
||||
/obj/screen/combattoggle
|
||||
/atom/movable/screen/combattoggle
|
||||
name = "toggle combat mode"
|
||||
icon = 'modular_citadel/icons/ui/screen_midnight.dmi'
|
||||
icon_state = "combat_off"
|
||||
var/mutable_appearance/flashy
|
||||
var/combat_on = FALSE ///Wheter combat mode is enabled or not, so we don't have to store a reference.
|
||||
|
||||
/obj/screen/combattoggle/Click()
|
||||
/atom/movable/screen/combattoggle/Click()
|
||||
if(hud && usr == hud.mymob)
|
||||
SEND_SIGNAL(hud.mymob, COMSIG_TOGGLE_COMBAT_MODE)
|
||||
|
||||
/obj/screen/combattoggle/update_icon_state()
|
||||
/atom/movable/screen/combattoggle/update_icon_state()
|
||||
var/mob/living/user = hud?.mymob
|
||||
if(!user)
|
||||
return
|
||||
@@ -200,7 +200,7 @@
|
||||
else
|
||||
icon_state = "combat_off"
|
||||
|
||||
/obj/screen/combattoggle/update_overlays()
|
||||
/atom/movable/screen/combattoggle/update_overlays()
|
||||
. = ..()
|
||||
var/mob/living/carbon/user = hud?.mymob
|
||||
if(!(user?.client))
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
/datum/component/personal_crafting/proc/create_mob_button(mob/user, client/CL)
|
||||
var/datum/hud/H = user.hud_used
|
||||
for(var/huds in H.static_inventory)
|
||||
if(istype(huds, /obj/screen/craft))
|
||||
if(istype(huds, /atom/movable/screen/craft))
|
||||
return
|
||||
//We don't want to be stacking multiple crafting huds on relogs
|
||||
var/obj/screen/craft/C = new()
|
||||
var/atom/movable/screen/craft/C = new()
|
||||
C.icon = H.ui_style
|
||||
H.static_inventory += C
|
||||
CL.screen += C
|
||||
@@ -323,7 +323,7 @@
|
||||
Deletion.Cut(Deletion.len)
|
||||
qdel(DL)
|
||||
|
||||
/datum/component/personal_crafting/proc/component_ui_interact(obj/screen/craft/image, location, control, params, user)
|
||||
/datum/component/personal_crafting/proc/component_ui_interact(atom/movable/screen/craft/image, location, control, params, user)
|
||||
if(user == parent)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//This file is for glass working types of things!
|
||||
|
||||
/obj/item/glasswork
|
||||
name = "This is a bug report it!"
|
||||
desc = "Failer to code. Contact your local bug remover..."
|
||||
name = "this is a bug!"
|
||||
desc = "Uh oh, the coders did a fucky wucky! Contact your local code monkey and tell them about this!"
|
||||
icon = 'icons/obj/glassworks.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 1
|
||||
@@ -11,45 +11,45 @@
|
||||
tool_behaviour = null
|
||||
|
||||
/obj/item/glasswork/glasskit
|
||||
name = "Glass working tools"
|
||||
desc = "A lovely belt of most the tools you will need to shape, mold, and refine glass into more advanced shapes."
|
||||
name = "glasswork tools"
|
||||
desc = "A set of most the tools you will need to shape, mold, and refine glass into more advanced shapes."
|
||||
icon_state = "glass_tools"
|
||||
tool_behaviour = TOOL_GLASS_CUT //Cutting takes 20 ticks
|
||||
|
||||
/obj/item/glasswork/blowing_rod
|
||||
name = "Glass working blow rod"
|
||||
desc = "A hollow metal stick made for glass blowing."
|
||||
name = "glassblowing rod"
|
||||
desc = "A hollow metal rod made for blowing glass."
|
||||
icon_state = "blowing_rods_unused"
|
||||
tool_behaviour = TOOL_BLOW //Rods take 5 ticks
|
||||
|
||||
/obj/item/glasswork/glass_base //Welding takes 30 ticks
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A sheet of glass set aside for glass working"
|
||||
name = "glass fodder sheet"
|
||||
desc = "A sheet of glass set aside for glass working."
|
||||
icon_state = "glass_base"
|
||||
var/next_step = null
|
||||
var/rod = /obj/item/glasswork/blowing_rod
|
||||
|
||||
/obj/item/tea_plate
|
||||
name = "Tea Plate"
|
||||
name = "tea saucer"
|
||||
desc = "A polished plate for a tea cup. How fancy!"
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "tea_plate"
|
||||
|
||||
/obj/item/tea_cup
|
||||
name = "Tea Cup"
|
||||
desc = "A glass cup made for fake tea!"
|
||||
name = "tea cup"
|
||||
desc = "A glass cup made for sipping tea!"
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "tea_plate"
|
||||
|
||||
//////////////////////Chem Disk/////////////////////
|
||||
//Two Steps //
|
||||
//Sells for 300 cr, takes 10 glass shets //
|
||||
//Usefull for chem spliting //
|
||||
//Useful for chem spliting //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/dish
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass dish. Needs to be cut with some tools."
|
||||
name = "glass fodder sheet (dish)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a small glass dish. It needs to be cut with some glassworking tools."
|
||||
next_step = /obj/item/glasswork/glass_base/dish_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/dish/attackby(obj/item/I, mob/user, params)
|
||||
@@ -60,8 +60,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/dish_part1
|
||||
name = "Half chem dish sheet"
|
||||
desc = "A sheet of glass cut in half, looks like it still needs some more cutting down"
|
||||
name = "half glass fodder sheet (dish)"
|
||||
desc = "A sheet of glass cut in half. It looks like it still needs some more cutting down."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/glass_dish
|
||||
|
||||
@@ -75,12 +75,12 @@
|
||||
//////////////////////Lens//////////////////////////
|
||||
//Six Steps //
|
||||
//Sells for 1600 cr, takes 15 glass shets //
|
||||
//Usefull for selling and later crafting //
|
||||
//Useful for selling and later crafting //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a small glass lens. Needs to be cut with some tools."
|
||||
name = "glass fodder sheet (lens)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a glass lens. It needs to be cut with some glassworking tools."
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens/attackby(obj/item/I, mob/user, params)
|
||||
@@ -91,8 +91,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part1
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass ready to be heated. Needs to be heated with some tools."
|
||||
name = "half glass fodder sheet (lens)"
|
||||
desc = "Cut glass ready to be heated with something very hot."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part2
|
||||
|
||||
@@ -104,8 +104,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part2
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated. Needs to be heated more with some tools."
|
||||
name = "heated half glass fodder sheet (lens)"
|
||||
desc = "Cut glass that has been heated once already and is ready to be heated again."
|
||||
icon_state = "glass_base_heat"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part3
|
||||
|
||||
@@ -117,8 +117,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part3
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube."
|
||||
name = "heated glass blob (lens)"
|
||||
desc = "Cut glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part4
|
||||
|
||||
@@ -131,8 +131,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part4
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube."
|
||||
name = "glassblowing rod (lens)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part5
|
||||
|
||||
@@ -145,8 +145,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part5
|
||||
name = "Unpolished glass lens"
|
||||
desc = "A small unpolished glass lens. Could be polished with some cloth."
|
||||
name = "unpolished glass lens"
|
||||
desc = "An unpolished glass lens. It needs to be polished with some dry cloth."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "glass_optics"
|
||||
next_step = /obj/item/glasswork/glass_base/glass_lens_part6
|
||||
@@ -159,8 +159,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glass_lens_part6
|
||||
name = "Unrefined glass lens"
|
||||
desc = "A small polished glass lens. Just needs to be refined with some sandstone."
|
||||
name = "unrefined glass lens"
|
||||
desc = "A polished glass lens. It needs to be refined with some sandstone."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "glass_optics"
|
||||
next_step = /obj/item/glasswork/glass_base/lens
|
||||
@@ -174,12 +174,12 @@
|
||||
//////////////////////Spouty Flask//////////////////
|
||||
//Four Steps //
|
||||
//Sells for 1200 cr, takes 20 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a spout beaker. Needs to be cut with some tools."
|
||||
name = "Glass fodder sheet (spout)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a spouty flask. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/spouty_part2
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty/attackby(obj/item/I, mob/user, params)
|
||||
@@ -190,8 +190,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty_part2
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated. Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (spout)"
|
||||
desc = "Cut glass ready to be heated with something very hot."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/glasswork/glass_base/spouty_part3
|
||||
|
||||
@@ -203,8 +203,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty_part3
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be placed onto a blow tube."
|
||||
name = "heated glass blob (spout)"
|
||||
desc = "Cut glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/spouty_part4
|
||||
|
||||
@@ -217,8 +217,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/spouty_part4
|
||||
name = "Glass fodder sheet"
|
||||
desc = "Cut glass that has been heated into a blob of hot glass. Needs to be cut off onto a blow tube."
|
||||
name = "glassblowing rod (spout)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/flask/spouty
|
||||
|
||||
@@ -233,12 +233,12 @@
|
||||
//////////////////////Small Bulb Flask//////////////
|
||||
//Two Steps //
|
||||
//Sells for 600 cr, takes 5 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a small flask. Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (small flask)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a small flask. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/flask_small_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small/attackby(obj/item/I, mob/user, params)
|
||||
@@ -249,8 +249,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small_part1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a small flask. Needs to be blown with some tools."
|
||||
name = "heated glass blob (small flask)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/flask_small_part2
|
||||
|
||||
@@ -263,8 +263,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_small_part2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (small flask)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/flask
|
||||
|
||||
@@ -279,12 +279,12 @@
|
||||
//////////////////////Large Bulb Flask//////////////
|
||||
//Two Steps //
|
||||
//Sells for 1000 cr, takes 15 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a large flask. Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (large flask)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a large flask. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/flask_large_part1
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large/attackby(obj/item/I, mob/user, params)
|
||||
@@ -295,8 +295,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large_part1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a large flask. Needs to be blown with some tools."
|
||||
name = "heated glass blob (large flask)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/flask_large_part2
|
||||
|
||||
@@ -309,8 +309,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/flask_large_part2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (small flask)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/reagent_containers/glass/beaker/flask/large
|
||||
|
||||
@@ -325,12 +325,12 @@
|
||||
//////////////////////Tea Plates////////////////////
|
||||
//Three Steps //
|
||||
//Sells for 1000 cr, takes 5 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea plate, how fancy! Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (tea saucer)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a tea saucer. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/tea_plate1
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate/attackby(obj/item/I, mob/user, params)
|
||||
@@ -341,8 +341,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a tea plate. Needs to be blown with some tools."
|
||||
name = "heated glass blob (tea saucer)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_plate2
|
||||
|
||||
@@ -355,8 +355,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (tea saucer)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_plate3
|
||||
|
||||
@@ -369,8 +369,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_plate3
|
||||
name = "Disk of glass"
|
||||
desc = "A disk of glass that can be cant be used for much. Needs to be polished with some cloth."
|
||||
name = "unpolished glass saucer (tea saucer)"
|
||||
desc = "An unpolished glass saucer. It needs to be polished with some dry cloth."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/tea_plate
|
||||
|
||||
@@ -384,12 +384,12 @@
|
||||
//////////////////////Tea Cup///////////////////////
|
||||
//Four Steps //
|
||||
//Sells for 1600 cr, takes 6 glass shets //
|
||||
//Usefull for selling and chemical things //
|
||||
//Useful for selling and chemical things //
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup
|
||||
name = "Glass fodder sheet"
|
||||
desc = "A set of glass sheets set aside for glass working, this one is ideal for a tea cup, how fancy! Needs to be heated with some tools."
|
||||
name = "glass fodder sheet (tea cup)"
|
||||
desc = "A set of glass sheets set aside for glass working. This one is ideal for a tea cup. It needs to heated with something very hot."
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup1
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup/attackby(obj/item/I, mob/user, params)
|
||||
@@ -400,8 +400,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup1
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass, this one is ideal for a tea cup. Needs to be blown with some tools."
|
||||
name = "heated glass blob (tea cup)"
|
||||
desc = "Glass that has been heated into a blob. It needs to be attached to a glassblowing rod."
|
||||
icon_state = "glass_base_molding"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup2
|
||||
|
||||
@@ -414,8 +414,8 @@
|
||||
qdel(I)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cupe2
|
||||
name = "Metled glass"
|
||||
desc = "A blob of metled glass on the end of a blowing rod. Needs to be cut off with some tools."
|
||||
name = "glassblowing rod (tea cup)"
|
||||
desc = "A hollow metal rod made for blowing glass. There is a blob of shapen glass at the end of it that needs to be cut off with some glassworking tools."
|
||||
icon_state = "blowing_rods_inuse"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup3
|
||||
|
||||
@@ -428,8 +428,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup3
|
||||
name = "Disk of glass"
|
||||
desc = "A bowl of glass that can be cant be used for much. Needs to be polished with some cloth."
|
||||
name = "unpolished glass cup (tea cup)"
|
||||
desc = "An unpolished glass cup. It needs to be polished with some dry cloth."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/glasswork/glass_base/tea_cup4
|
||||
|
||||
@@ -441,8 +441,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/tea_cup4
|
||||
name = "Disk of glass"
|
||||
desc = "A bowl of polished glass that can be cant be used for much. Needs some more glass to make a handle."
|
||||
name = "polished glass cup (tea cup)"
|
||||
desc = "A polished glass cup. It needs some extra glass to form a handle."
|
||||
icon_state = "glass_base_half"
|
||||
next_step = /obj/item/tea_cup
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
//This file is for crafting using a lens!
|
||||
|
||||
/obj/item/glasswork/glass_base/lens
|
||||
name = "Optical lens"
|
||||
desc = "Good for selling or crafting, by itself its useless"
|
||||
name = "optical lens"
|
||||
desc = "A glass lens. Useless by itself, but may prove useful in making something with a focus."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "glass_optics"
|
||||
|
||||
//Laser pointers - 2600
|
||||
/obj/item/glasswork/glass_base/laserpointer_shell
|
||||
name = "Laser pointer assembly"
|
||||
desc = "Good for selling or crafting, by itself its useless. Needs a power capactor."
|
||||
name = "laser pointer assembly"
|
||||
desc = "An empty hull of a laser pointer. It's missing a capacitor."
|
||||
icon_state = "laser_case"
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
next_step = /obj/item/glasswork/glass_base/laserpointer_shell_1
|
||||
@@ -21,8 +21,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/laserpointer_shell_1
|
||||
name = "Laser pointer assembly"
|
||||
desc = "Good for selling or crafting, by itself its useless. Needs a glass lens."
|
||||
name = "powered laser pointer assembly"
|
||||
desc = "A laser pointer hull with a capacitor inside of it. It's missing a lens."
|
||||
icon_state = "laser_wire"
|
||||
icon_state = "laser_case"
|
||||
next_step = /obj/item/glasswork/glass_base/laserpointer_shell_2
|
||||
@@ -34,8 +34,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/laserpointer_shell_2
|
||||
name = "Laser pointer assembly"
|
||||
desc = "Good for selling or crafting, by itself its useless. Needs to be screwed together."
|
||||
name = "near-complete laser pointer assembly"
|
||||
desc = "A laser pointer hull with a capacitor and a lens inside of it. It needs to be screwed together."
|
||||
icon_state = "laser_wire"
|
||||
icon_state = "laser_case"
|
||||
next_step = /obj/item/laser_pointer/blue/handmade
|
||||
@@ -50,8 +50,8 @@
|
||||
//NERD SHIT - 5000
|
||||
|
||||
/obj/item/glasswork/glass_base/glasses_frame
|
||||
name = "Glasses Frame"
|
||||
desc = "Good for crafting a pare of glasses, by itself its useless. Just add a pare of lens."
|
||||
name = "glasses frame"
|
||||
desc = "A pair of glasses without the lenses. You could probably add them yourself, though."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames"
|
||||
next_step = /obj/item/glasswork/glass_base/glasses_frame_1
|
||||
@@ -64,8 +64,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glasses_frame_1
|
||||
name = "Glasses Frame"
|
||||
desc = "Good for crafting a pare of glasses, by itself its useless. Just add a the other lens."
|
||||
name = "glasses frame"
|
||||
desc = "A pair of shoddily-assembled glasses with only one lens. You could probably add the second one yourself, though."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_1"
|
||||
next_step = /obj/item/glasswork/glass_base/glasses_frame_2
|
||||
@@ -78,8 +78,8 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glass_base/glasses_frame_2
|
||||
name = "Glasses Frame"
|
||||
desc = "Good for crafting a pare of glasses, by itself its useless. Just adjust the pices into the frame with a screwdriver."
|
||||
name = "glasses frame"
|
||||
desc = "A pair of hastily-assembled unfitted glasses with both lenses intact. Use a screwdriver to fit them."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_2"
|
||||
next_step = /obj/item/glasswork/glasses
|
||||
@@ -92,7 +92,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/glasswork/glasses
|
||||
name = "Handmade Glasses"
|
||||
desc = "Handmade glasses that have not been polished at all making them useless. Selling them could still be worth a few credits."
|
||||
name = "handmade glasses"
|
||||
desc = "A pair of poorly-assembled glasses clearly produced by someone with no qualifications in making glasses. They're smudged, ugly, and don't even fit you. They might be worth some money, though."
|
||||
icon = 'icons/obj/glass_ware.dmi'
|
||||
icon_state = "frames_2"
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
if(harmful)
|
||||
victim.visible_message("<span class='danger'>[weapon] embeds itself in [victim]'s [limb.name]!</span>",ignored_mobs=victim)
|
||||
to_chat(victim, "<span class='userdanger'>[weapon] embeds itself in your [limb.name]!</span>")
|
||||
victim.throw_alert("embeddedobject", /obj/screen/alert/embeddedobject)
|
||||
victim.throw_alert("embeddedobject", /atom/movable/screen/alert/embeddedobject)
|
||||
playsound(victim,'sound/weapons/bladeslice.ogg', 40)
|
||||
weapon.add_mob_blood(victim)//it embedded itself in you, of course it's bloody!
|
||||
damage = weapon.w_class * impact_pain_mult
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets
|
||||
var/list/datum/mood_event/mood_events = list()
|
||||
var/insanity_effect = 0 //is the owner being punished for low mood? If so, how much?
|
||||
var/obj/screen/mood/screen_obj
|
||||
var/atom/movable/screen/mood/screen_obj
|
||||
var/datum/skill_modifier/bad_mood/malus
|
||||
var/datum/skill_modifier/great_mood/bonus
|
||||
var/static/malus_id = 0
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
return
|
||||
SEND_SIGNAL(parent, COMSIG_ATOM_ORBIT_END, orbiter, refreshing)
|
||||
UnregisterSignal(orbiter, COMSIG_MOVABLE_MOVED)
|
||||
orbiter.SpinAnimation(0, 0)
|
||||
orbiter.SpinAnimation(0, 0, parallel = FALSE)
|
||||
if(istype(orbiters[orbiter],/matrix)) //This is ugly.
|
||||
orbiter.transform = orbiters[orbiter]
|
||||
orbiters -= orbiter
|
||||
|
||||
@@ -135,6 +135,8 @@
|
||||
var/obj/item/I = AM
|
||||
var/mob/M = parent.loc
|
||||
I.dropped(M)
|
||||
I.item_flags &= ~IN_STORAGE
|
||||
I.remove_outline()
|
||||
if(new_location)
|
||||
AM.forceMove(new_location) // exited comsig will handle removal reset.
|
||||
//We don't want to call this if the item is being destroyed
|
||||
@@ -180,6 +182,7 @@
|
||||
I.forceMove(parent.drop_location())
|
||||
return FALSE
|
||||
I.on_enter_storage(master)
|
||||
I.item_flags |= IN_STORAGE
|
||||
refresh_mob_views()
|
||||
I.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt
|
||||
if(M)
|
||||
|
||||
@@ -423,6 +423,9 @@
|
||||
var/atom/A = parent
|
||||
if(ismob(M)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked
|
||||
A.add_fingerprint(M)
|
||||
if(istype(A, /obj/item))
|
||||
var/obj/item/I = A
|
||||
I.remove_outline() //Removes the outline when we drag
|
||||
if(!over_object)
|
||||
return FALSE
|
||||
if(ismecha(M.loc)) // stops inventory actions in a mech
|
||||
@@ -435,15 +438,15 @@
|
||||
RevenantThrow(over_object, M, source)
|
||||
return
|
||||
if(!M.incapacitated())
|
||||
if(!istype(over_object, /obj/screen))
|
||||
if(!istype(over_object, /atom/movable/screen))
|
||||
dump_content_at(over_object, M)
|
||||
return
|
||||
if(A.loc != M)
|
||||
return
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
A.do_jiggle()
|
||||
if(istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
M.putItemFromInventoryInHandIfPossible(A, H.held_index)
|
||||
return
|
||||
A.add_fingerprint(M)
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
. = list()
|
||||
var/list/accessible_contents = accessible_items()
|
||||
var/adjusted_contents = length(accessible_contents)
|
||||
var/obj/screen/storage/close/ui_close
|
||||
var/obj/screen/storage/boxes/ui_boxes
|
||||
var/atom/movable/screen/storage/close/ui_close
|
||||
var/atom/movable/screen/storage/boxes/ui_boxes
|
||||
|
||||
//Numbered contents display
|
||||
var/list/datum/numbered_display/numbered_contents
|
||||
@@ -62,7 +62,7 @@
|
||||
for(var/obj/O in accessible_items())
|
||||
if(QDELETED(O))
|
||||
continue
|
||||
var/obj/screen/storage/item_holder/D = new(null, src, O)
|
||||
var/atom/movable/screen/storage/item_holder/D = new(null, src, O)
|
||||
D.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip"
|
||||
D.screen_loc = "[cx]:[screen_pixel_x],[cy]:[screen_pixel_y]"
|
||||
O.maptext = ""
|
||||
@@ -81,9 +81,9 @@
|
||||
*/
|
||||
/datum/component/storage/proc/orient2hud_volumetric(mob/user, maxcolumns)
|
||||
. = list()
|
||||
var/obj/screen/storage/left/ui_left
|
||||
var/obj/screen/storage/continuous/ui_continuous
|
||||
var/obj/screen/storage/close/ui_close
|
||||
var/atom/movable/screen/storage/left/ui_left
|
||||
var/atom/movable/screen/storage/continuous/ui_continuous
|
||||
var/atom/movable/screen/storage/close/ui_close
|
||||
|
||||
// Generate ui_item_blocks for missing ones and render+orient.
|
||||
var/list/atom/contents = accessible_items()
|
||||
@@ -137,7 +137,7 @@
|
||||
for(var/i in percentage_by_item)
|
||||
I = i
|
||||
var/percent = percentage_by_item[I]
|
||||
var/obj/screen/storage/volumetric_box/center/B = new /obj/screen/storage/volumetric_box/center(null, src, I)
|
||||
var/atom/movable/screen/storage/volumetric_box/center/B = new /atom/movable/screen/storage/volumetric_box/center(null, src, I)
|
||||
var/pixels_to_use = overrun? MINIMUM_PIXELS_PER_ITEM : max(using_horizontal_pixels * percent, MINIMUM_PIXELS_PER_ITEM)
|
||||
var/addrow = FALSE
|
||||
if(CEILING(pixels_to_use, 1) >= FLOOR(horizontal_pixels - current_pixel - VOLUMETRIC_STORAGE_EDGE_PADDING, 1))
|
||||
@@ -255,22 +255,22 @@
|
||||
* Gets our ui_boxes, making it if it doesn't exist.
|
||||
*/
|
||||
/datum/component/storage/proc/get_ui_boxes()
|
||||
return new /obj/screen/storage/boxes(null, src)
|
||||
return new /atom/movable/screen/storage/boxes(null, src)
|
||||
|
||||
/**
|
||||
* Gets our ui_left, making it if it doesn't exist.
|
||||
*/
|
||||
/datum/component/storage/proc/get_ui_left()
|
||||
return new /obj/screen/storage/left(null, src)
|
||||
return new /atom/movable/screen/storage/left(null, src)
|
||||
|
||||
/**
|
||||
* Gets our ui_close, making it if it doesn't exist.
|
||||
*/
|
||||
/datum/component/storage/proc/get_ui_close()
|
||||
return new /obj/screen/storage/close(null, src)
|
||||
return new /atom/movable/screen/storage/close(null, src)
|
||||
|
||||
/**
|
||||
* Gets our ui_continuous, making it if it doesn't exist.
|
||||
*/
|
||||
/datum/component/storage/proc/get_ui_continuous()
|
||||
return new /obj/screen/storage/continuous(null, src)
|
||||
return new /atom/movable/screen/storage/continuous(null, src)
|
||||
|
||||
@@ -370,7 +370,7 @@
|
||||
user.emote("scream")
|
||||
user.gain_trauma(/datum/brain_trauma/severe/paralysis/spinesnapped) // oopsie indeed!
|
||||
shake_camera(user, 7, 7)
|
||||
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash)
|
||||
user.clear_fullscreen("flash", 4.5)
|
||||
|
||||
if(94 to 98)
|
||||
@@ -381,7 +381,7 @@
|
||||
user.gain_trauma_type(BRAIN_TRAUMA_MILD)
|
||||
user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9)
|
||||
shake_camera(user, 6, 6)
|
||||
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash)
|
||||
user.clear_fullscreen("flash", 3.5)
|
||||
|
||||
if(84 to 93)
|
||||
@@ -394,7 +394,7 @@
|
||||
user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9)
|
||||
user.DefaultCombatKnockdown(40)
|
||||
shake_camera(user, 5, 5)
|
||||
user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash)
|
||||
user.clear_fullscreen("flash", 2.5)
|
||||
|
||||
if(64 to 83)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
var/mob/living/L = parent
|
||||
if(L.incapacitated() || L.lying)
|
||||
return
|
||||
var/matrix/otransform = matrix(L.transform) //make a copy of the current transform
|
||||
animate(L, pixel_z = 4, time = 0)
|
||||
animate(pixel_z = 0, transform = turn(matrix(), pick(-12, 0, 12)), time=2)
|
||||
animate(pixel_z = 0, transform = matrix(), time = 0)
|
||||
animate(pixel_z = 0, transform = turn(L.transform, pick(-12, 0, 12)), time=2) //waddle.
|
||||
animate(pixel_z = 0, transform = otransform, time = 0) //return to previous transform.
|
||||
|
||||
@@ -57,9 +57,13 @@
|
||||
*/
|
||||
var/list/cooldowns
|
||||
|
||||
#ifdef TESTING
|
||||
#ifdef REFERENCE_TRACKING
|
||||
var/running_find_references
|
||||
var/last_find_references = 0
|
||||
#ifdef REFERENCE_TRACKING_DEBUG
|
||||
///Stores info about where refs are found, used for sanity checks and testing
|
||||
var/list/found_refs
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef DATUMVAR_DEBUGGING_MODE
|
||||
|
||||
@@ -159,9 +159,9 @@
|
||||
/datum/symptom/heal/metabolism/Heal(mob/living/carbon/C, datum/disease/advance/A, actual_power)
|
||||
if(!istype(C))
|
||||
return
|
||||
C.reagents.metabolize(C, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
|
||||
C.reagents.metabolize(C, SSMOBS_DT, 0, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
|
||||
if(triple_metabolism)
|
||||
C.reagents.metabolize(C, can_overdose=TRUE)
|
||||
C.reagents.metabolize(C, SSMOBS_DT, 0, can_overdose=TRUE)
|
||||
C.overeatduration = max(C.overeatduration - 2, 0)
|
||||
var/lost_nutrition = 9 - (reduced_hunger * 5)
|
||||
C.adjust_nutrition(-lost_nutrition * HUNGER_FACTOR) //Hunger depletes at 10x the normal speed
|
||||
|
||||
@@ -47,7 +47,7 @@ Bonus
|
||||
M.adjustOxyLoss(-7, 0)
|
||||
M.losebreath = max(0, M.losebreath - 4)
|
||||
if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio))
|
||||
M.blood_volume += 1
|
||||
M.adjust_integration_blood(1)
|
||||
else
|
||||
if(prob(base_message_chance))
|
||||
to_chat(M, "<span class='notice'>[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]</span>")
|
||||
|
||||
@@ -32,10 +32,8 @@ BONUS
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(5)
|
||||
var/static/list/banned_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/invisible, /datum/reagent/colorful_reagent/crayonpowder/white)
|
||||
var/color = pick(subtypesof(/datum/reagent/colorful_reagent/crayonpowder) - banned_reagents)
|
||||
if(M.reagents.total_volume <= (M.reagents.maximum_volume/10)) // no flooding humans with 1000 units of colorful reagent
|
||||
M.reagents.add_reagent(color, 5)
|
||||
M.reagents.add_reagent(/datum/reagent/colorful_reagent, 5)
|
||||
else
|
||||
if (prob(50)) // spam
|
||||
M.visible_message("<span class='warning'>[M] looks rather vibrant...</span>", "<span class='notice'>The colors, man, the colors...</span>")
|
||||
|
||||
@@ -386,6 +386,14 @@
|
||||
qdel(language_holder)
|
||||
var/species_holder = initial(mrace.species_language_holder)
|
||||
language_holder = new species_holder(src)
|
||||
|
||||
var/mob/living/carbon/human/H = src
|
||||
//provide the user's additional language to the new language holder even if they change species
|
||||
if(H.additional_language && H.additional_language != "None")
|
||||
var/language_entry = GLOB.roundstart_languages[H.additional_language]
|
||||
if(language_entry)
|
||||
grant_language(language_entry, TRUE, TRUE)
|
||||
|
||||
update_atom_languages()
|
||||
|
||||
/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/element/trash
|
||||
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
|
||||
element_flags = ELEMENT_DETACH
|
||||
|
||||
/datum/element/trash/Attach(datum/target)
|
||||
. = ..()
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
Stack End Detector.
|
||||
Can detect if a given code stack has exited, used by the mc for stack overflow detection.
|
||||
|
||||
**/
|
||||
/datum/stack_end_detector
|
||||
var/datum/weakref/_WF
|
||||
var/datum/stack_canary/_canary
|
||||
|
||||
/datum/stack_end_detector/New()
|
||||
_canary = new()
|
||||
_WF = WEAKREF(_canary)
|
||||
|
||||
/** Prime the stack overflow detector.
|
||||
Store the return value of this proc call in a proc level var.
|
||||
Can only be called once.
|
||||
**/
|
||||
/datum/stack_end_detector/proc/prime_canary()
|
||||
if (!_canary)
|
||||
CRASH("Prime_canary called twice")
|
||||
. = _canary
|
||||
_canary = null
|
||||
|
||||
/// Returns true if the stack is still going. Calling before the canary has been primed also returns true
|
||||
/datum/stack_end_detector/proc/check()
|
||||
return !!_WF.resolve()
|
||||
|
||||
/// Stack canary. Will go away if the stack it was primed by is ended by byond for return or stack overflow reasons.
|
||||
/datum/stack_canary
|
||||
|
||||
/// empty proc to avoid warnings about unused variables. Call this proc on your canary in the stack it's watching.
|
||||
/datum/stack_canary/proc/use_variable()
|
||||
+11
-3
@@ -6,10 +6,12 @@
|
||||
var/body
|
||||
var/headers
|
||||
var/url
|
||||
/// If present response body will be saved to this file.
|
||||
var/output_file
|
||||
|
||||
var/_raw_response
|
||||
|
||||
/datum/http_request/proc/prepare(method, url, body = "", list/headers)
|
||||
/datum/http_request/proc/prepare(method, url, body = "", list/headers, output_file)
|
||||
if (!length(headers))
|
||||
headers = ""
|
||||
else
|
||||
@@ -19,15 +21,16 @@
|
||||
src.url = url
|
||||
src.body = body
|
||||
src.headers = headers
|
||||
src.output_file = output_file
|
||||
|
||||
/datum/http_request/proc/execute_blocking()
|
||||
_raw_response = rustg_http_request_blocking(method, url, body, headers)
|
||||
_raw_response = rustg_http_request_blocking(method, url, body, headers, build_options())
|
||||
|
||||
/datum/http_request/proc/begin_async()
|
||||
if (in_progress)
|
||||
CRASH("Attempted to re-use a request object.")
|
||||
|
||||
id = rustg_http_request_async(method, url, body, headers)
|
||||
id = rustg_http_request_async(method, url, body, headers, build_options())
|
||||
|
||||
if (isnull(text2num(id)))
|
||||
stack_trace("Proc error: [id]")
|
||||
@@ -35,6 +38,11 @@
|
||||
else
|
||||
in_progress = TRUE
|
||||
|
||||
/datum/http_request/proc/build_options()
|
||||
if(output_file)
|
||||
return json_encode(list("output_filename"=output_file,"body_filename"=null))
|
||||
return null
|
||||
|
||||
/datum/http_request/proc/is_complete()
|
||||
if (isnull(id))
|
||||
return TRUE
|
||||
|
||||
@@ -10,11 +10,14 @@
|
||||
// And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var
|
||||
|
||||
// Helper similar to image()
|
||||
/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, color = "#FFFFFF")
|
||||
/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, alpha = 255, appearance_flags = NONE, color = "#FFFFFF")
|
||||
var/mutable_appearance/MA = new()
|
||||
MA.icon = icon
|
||||
MA.icon_state = icon_state
|
||||
MA.layer = layer
|
||||
MA.plane = plane
|
||||
MA.alpha = alpha
|
||||
MA.appearance_flags |= appearance_flags
|
||||
MA.color = color
|
||||
return MA
|
||||
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
/datum/numbered_display/New(obj/item/sample, _number = 1, datum/component/storage/parent)
|
||||
if(!istype(sample))
|
||||
qdel(src)
|
||||
sample_object = new /obj/screen/storage/item_holder(null, parent, sample)
|
||||
sample_object = new /atom/movable/screen/storage/item_holder(null, parent, sample)
|
||||
number = _number
|
||||
|
||||
@@ -35,6 +35,14 @@
|
||||
cost = 10
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/library
|
||||
name = "Lavaland Library"
|
||||
id = "llibrary"
|
||||
description = "A once grand library, now lost to the confines of lavaland."
|
||||
suffix = "lavaland_surface_library.dmm"
|
||||
cost = 5
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/seed_vault
|
||||
name = "Seed Vault"
|
||||
id = "seed-vault"
|
||||
@@ -79,6 +87,20 @@
|
||||
suffix = "lavaland_surface_animal_hospital.dmm"
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/hotsprings
|
||||
name = "Hot Springs"
|
||||
id = "lhotsprings"
|
||||
description = "Just relax and take a dip! Lavaland's finest hot springs await!"
|
||||
suffix = "lavaland_surface_hotsprings.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/engioutpost
|
||||
name = "Engineer Outpost"
|
||||
id = "lengioutpost"
|
||||
description = "Blown up by an unfortunate accident."
|
||||
suffix = "lavaland_surface_engioutpost.dmm"
|
||||
cost = 10
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/sin
|
||||
cost = 10
|
||||
allow_duplicates = FALSE
|
||||
@@ -115,6 +137,24 @@
|
||||
suffix = "lavaland_surface_sloth.dmm"
|
||||
// Generates nothing but atmos runtimes and salt
|
||||
|
||||
/datum/map_template/ruin/lavaland/sin/lust
|
||||
name = "Ruin of Lust"
|
||||
id = "llust"
|
||||
description = "Not exactly what you expected."
|
||||
suffix = "lavaland_surface_lust.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/sin/wrath
|
||||
name = "Ruin of Wrath"
|
||||
id = "lwrath"
|
||||
description = "You'll fight and fight and just keep fighting."
|
||||
suffix = "lavaland_surface_wrath.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/bathhouse
|
||||
name = "Bath House"
|
||||
id = "lbathhouse"
|
||||
description = "A taste of paradise, locked in the hell of Lavaland."
|
||||
suffix = "lavaland_surface_bathhouse.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/ratvar
|
||||
name = "Dead God"
|
||||
id = "ratvar"
|
||||
@@ -132,19 +172,20 @@
|
||||
|
||||
/datum/map_template/ruin/lavaland/blood_drunk_miner
|
||||
name = "Blood-Drunk Miner"
|
||||
id = "blooddrunk"
|
||||
description = "A strange arrangement of stone tiles and an insane, beastly miner contemplating them."
|
||||
suffix = "lavaland_surface_blooddrunk1.dmm"
|
||||
description = "An insane, beastly miner contemplating stone tiles..."
|
||||
always_place = TRUE
|
||||
allow_duplicates = FALSE //will only spawn one variant of the ruin
|
||||
|
||||
/datum/map_template/ruin/lavaland/blood_drunk_miner/guidance
|
||||
name = "Blood-Drunk Miner (Guidance)"
|
||||
suffix = "lavaland_surface_blooddrunk2.dmm"
|
||||
|
||||
/datum/map_template/ruin/lavaland/blood_drunk_miner/hunter
|
||||
name = "Blood-Drunk Miner (Hunter)"
|
||||
suffix = "lavaland_surface_blooddrunk3.dmm"
|
||||
allow_duplicates = FALSE
|
||||
id = "blooddrunk"
|
||||
/datum/map_template/ruin/lavaland/blood_drunk_miner/New()
|
||||
if(prob(25))
|
||||
suffix = "lavaland_surface_blooddrunk1.dmm"
|
||||
else if(prob(34))
|
||||
suffix = "lavaland_surface_blooddrunk2.dmm"
|
||||
else if(prob(50))
|
||||
suffix = "lavaland_surface_blooddrunk3.dmm"
|
||||
else
|
||||
suffix = "lavaland_surface_mining_site.dmm"
|
||||
. = ..()
|
||||
|
||||
/datum/map_template/ruin/lavaland/ufo_crash
|
||||
name = "UFO Crash"
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
/datum/status_effect/shadow_mend
|
||||
id = "shadow_mend"
|
||||
duration = 30
|
||||
alert_type = /obj/screen/alert/status_effect/shadow_mend
|
||||
alert_type = /atom/movable/screen/alert/status_effect/shadow_mend
|
||||
|
||||
/obj/screen/alert/status_effect/shadow_mend
|
||||
/atom/movable/screen/alert/status_effect/shadow_mend
|
||||
name = "Shadow Mend"
|
||||
desc = "Shadowy energies wrap around your wounds, sealing them at a price. After healing, you will slowly lose health every three seconds for thirty seconds."
|
||||
icon_state = "shadow_mend"
|
||||
@@ -29,9 +29,9 @@
|
||||
id = "void_price"
|
||||
duration = 300
|
||||
tick_interval = 30
|
||||
alert_type = /obj/screen/alert/status_effect/void_price
|
||||
alert_type = /atom/movable/screen/alert/status_effect/void_price
|
||||
|
||||
/obj/screen/alert/status_effect/void_price
|
||||
/atom/movable/screen/alert/status_effect/void_price
|
||||
name = "Void Price"
|
||||
desc = "Black tendrils cinch tightly against you, digging wicked barbs into your flesh."
|
||||
icon_state = "shadow_mend"
|
||||
@@ -46,17 +46,17 @@
|
||||
duration = 200
|
||||
tick_interval = 0 //tick as fast as possible
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = /obj/screen/alert/status_effect/vanguard
|
||||
alert_type = /atom/movable/screen/alert/status_effect/vanguard
|
||||
var/datum/progressbar/progbar
|
||||
var/stamhealed = 0 //How much stamina did we regenerate?
|
||||
|
||||
/obj/screen/alert/status_effect/vanguard
|
||||
/atom/movable/screen/alert/status_effect/vanguard
|
||||
name = "Vanguard"
|
||||
desc = "You're absorbing stuns aswell as quickly regenerating stamina, but be careful: 50% of stamina restored and 25% of stuns absorbed will affect you after this effect ends."
|
||||
icon_state = "vanguard"
|
||||
alerttooltipstyle = "clockcult"
|
||||
|
||||
/obj/screen/alert/status_effect/vanguard/MouseEntered(location,control,params)
|
||||
/atom/movable/screen/alert/status_effect/vanguard/MouseEntered(location,control,params)
|
||||
var/mob/living/L = usr
|
||||
var/datum/status_effect/vanguard_shield/E = attached_effect
|
||||
if(istype(L)) //this is probably more safety than actually needed
|
||||
@@ -118,9 +118,9 @@
|
||||
/datum/status_effect/inathneqs_endowment
|
||||
id = "inathneqs_endowment"
|
||||
duration = 150
|
||||
alert_type = /obj/screen/alert/status_effect/inathneqs_endowment
|
||||
alert_type = /atom/movable/screen/alert/status_effect/inathneqs_endowment
|
||||
|
||||
/obj/screen/alert/status_effect/inathneqs_endowment
|
||||
/atom/movable/screen/alert/status_effect/inathneqs_endowment
|
||||
name = "Inath-neq's Endowment"
|
||||
desc = "Adrenaline courses through you as the Resonant Cogwheel's energy shields you from all harm!"
|
||||
icon_state = "inathneqs_endowment"
|
||||
@@ -149,7 +149,7 @@
|
||||
/datum/status_effect/cyborg_power_regen
|
||||
id = "power_regen"
|
||||
duration = 100
|
||||
alert_type = /obj/screen/alert/status_effect/power_regen
|
||||
alert_type = /atom/movable/screen/alert/status_effect/power_regen
|
||||
var/power_to_give = 0 //how much power is gained each tick
|
||||
|
||||
/datum/status_effect/cyborg_power_regen/on_creation(mob/living/new_owner, new_power_per_tick)
|
||||
@@ -157,7 +157,7 @@
|
||||
if(. && isnum(new_power_per_tick))
|
||||
power_to_give = new_power_per_tick
|
||||
|
||||
/obj/screen/alert/status_effect/power_regen
|
||||
/atom/movable/screen/alert/status_effect/power_regen
|
||||
name = "Power Regeneration"
|
||||
desc = "You are quickly regenerating power!"
|
||||
icon_state = "power_regen"
|
||||
@@ -174,16 +174,16 @@
|
||||
id = "his_grace"
|
||||
duration = -1
|
||||
tick_interval = 4
|
||||
alert_type = /obj/screen/alert/status_effect/his_grace
|
||||
alert_type = /atom/movable/screen/alert/status_effect/his_grace
|
||||
var/bloodlust = 0
|
||||
|
||||
/obj/screen/alert/status_effect/his_grace
|
||||
/atom/movable/screen/alert/status_effect/his_grace
|
||||
name = "His Grace"
|
||||
desc = "His Grace hungers, and you must feed Him."
|
||||
icon_state = "his_grace"
|
||||
alerttooltipstyle = "hisgrace"
|
||||
|
||||
/obj/screen/alert/status_effect/his_grace/MouseEntered(location,control,params)
|
||||
/atom/movable/screen/alert/status_effect/his_grace/MouseEntered(location,control,params)
|
||||
desc = initial(desc)
|
||||
var/datum/status_effect/his_grace/HG = attached_effect
|
||||
desc += "<br><font size=3><b>Current Bloodthirst: [HG.bloodlust]</b></font>\
|
||||
@@ -225,7 +225,7 @@
|
||||
/datum/status_effect/wish_granters_gift //Fully revives after ten seconds.
|
||||
id = "wish_granters_gift"
|
||||
duration = 50
|
||||
alert_type = /obj/screen/alert/status_effect/wish_granters_gift
|
||||
alert_type = /atom/movable/screen/alert/status_effect/wish_granters_gift
|
||||
|
||||
/datum/status_effect/wish_granters_gift/on_apply()
|
||||
to_chat(owner, "<span class='notice'>Death is not your end! The Wish Granter's energy suffuses you, and you begin to rise...</span>")
|
||||
@@ -236,7 +236,7 @@
|
||||
owner.revive(full_heal = TRUE, admin_revive = TRUE)
|
||||
owner.visible_message("<span class='warning'>[owner] appears to wake from the dead, having healed all wounds!</span>", "<span class='notice'>You have regenerated.</span>")
|
||||
|
||||
/obj/screen/alert/status_effect/wish_granters_gift
|
||||
/atom/movable/screen/alert/status_effect/wish_granters_gift
|
||||
name = "Wish Granter's Immortality"
|
||||
desc = "You are being resurrected!"
|
||||
icon_state = "wish_granter"
|
||||
@@ -274,7 +274,7 @@
|
||||
id = "blooddrunk"
|
||||
duration = 10
|
||||
tick_interval = 0
|
||||
alert_type = /obj/screen/alert/status_effect/blooddrunk
|
||||
alert_type = /atom/movable/screen/alert/status_effect/blooddrunk
|
||||
var/last_health = 0
|
||||
var/last_bruteloss = 0
|
||||
var/last_fireloss = 0
|
||||
@@ -283,7 +283,7 @@
|
||||
var/last_cloneloss = 0
|
||||
var/last_staminaloss = 0
|
||||
|
||||
/obj/screen/alert/status_effect/blooddrunk
|
||||
/atom/movable/screen/alert/status_effect/blooddrunk
|
||||
name = "Blood-Drunk"
|
||||
desc = "You are drunk on blood! Your pulse thunders in your ears! Nothing can harm you!" //not true, and the item description mentions its actual effect
|
||||
icon_state = "blooddrunk"
|
||||
@@ -430,7 +430,7 @@
|
||||
/datum/status_effect/fleshmend
|
||||
id = "fleshmend"
|
||||
duration = 100
|
||||
alert_type = /obj/screen/alert/status_effect/fleshmend
|
||||
alert_type = /atom/movable/screen/alert/status_effect/fleshmend
|
||||
|
||||
/datum/status_effect/fleshmend/tick()
|
||||
if(owner.on_fire)
|
||||
@@ -453,7 +453,7 @@
|
||||
|
||||
QDEL_LIST(C.all_scars)
|
||||
|
||||
/obj/screen/alert/status_effect/fleshmend
|
||||
/atom/movable/screen/alert/status_effect/fleshmend
|
||||
name = "Fleshmend"
|
||||
desc = "Our wounds are rapidly healing. <i>This effect is prevented if we are on fire.</i>"
|
||||
icon_state = "fleshmend"
|
||||
@@ -562,7 +562,7 @@
|
||||
var/mob/living/simple_animal/SM = L
|
||||
SM.adjustHealth(-3.5, forced = TRUE)
|
||||
|
||||
/obj/screen/alert/status_effect/regenerative_core
|
||||
/atom/movable/screen/alert/status_effect/regenerative_core
|
||||
name = "Reinforcing Tendrils"
|
||||
desc = "You can move faster than your broken body could normally handle!"
|
||||
icon_state = "regenerative_core"
|
||||
@@ -572,7 +572,7 @@
|
||||
id = "Regenerative Core"
|
||||
duration = 1 MINUTES
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = /obj/screen/alert/status_effect/regenerative_core
|
||||
alert_type = /atom/movable/screen/alert/status_effect/regenerative_core
|
||||
var/heal_amount = 25
|
||||
|
||||
/datum/status_effect/regenerative_core/on_apply()
|
||||
@@ -597,9 +597,9 @@
|
||||
id = "Anatomic Panacea"
|
||||
duration = 100
|
||||
tick_interval = 10
|
||||
alert_type = /obj/screen/alert/status_effect/panacea
|
||||
alert_type = /atom/movable/screen/alert/status_effect/panacea
|
||||
|
||||
/obj/screen/alert/status_effect/panacea
|
||||
/atom/movable/screen/alert/status_effect/panacea
|
||||
name = "Panacea"
|
||||
desc = "We purge the impurities from our body."
|
||||
icon_state = "panacea"
|
||||
@@ -774,7 +774,7 @@
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
duration = 15 SECONDS
|
||||
examine_text = "<span class='notice'>They don't seem to be all here.</span>"
|
||||
alert_type = /obj/screen/alert/status_effect/crucible_soul
|
||||
alert_type = /atom/movable/screen/alert/status_effect/crucible_soul
|
||||
var/turf/location
|
||||
|
||||
/datum/status_effect/crucible_soul/on_apply()
|
||||
@@ -796,7 +796,7 @@
|
||||
id = "Blessing of Dusk and Dawn"
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
duration = 60 SECONDS
|
||||
alert_type =/obj/screen/alert/status_effect/duskndawn
|
||||
alert_type =/atom/movable/screen/alert/status_effect/duskndawn
|
||||
|
||||
/datum/status_effect/duskndawn/on_apply()
|
||||
. = ..()
|
||||
@@ -813,7 +813,7 @@
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
duration = 60 SECONDS
|
||||
tick_interval = 1 SECONDS
|
||||
alert_type = /obj/screen/alert/status_effect/marshal
|
||||
alert_type = /atom/movable/screen/alert/status_effect/marshal
|
||||
|
||||
/datum/status_effect/marshal/on_apply()
|
||||
. = ..()
|
||||
@@ -849,17 +849,17 @@
|
||||
carbie.blood_volume += carbie.blood_volume >= BLOOD_VOLUME_NORMAL ? 0 : heal_amt*3
|
||||
|
||||
|
||||
/obj/screen/alert/status_effect/crucible_soul
|
||||
/atom/movable/screen/alert/status_effect/crucible_soul
|
||||
name = "Blessing of Crucible Soul"
|
||||
desc = "You phased through the reality, you are halfway to your final destination..."
|
||||
icon_state = "crucible"
|
||||
|
||||
/obj/screen/alert/status_effect/duskndawn
|
||||
/atom/movable/screen/alert/status_effect/duskndawn
|
||||
name = "Blessing of Dusk and Dawn"
|
||||
desc = "Many things hide beyond the horizon, with Owl's help i managed to slip past sun's guard and moon's watch."
|
||||
icon_state = "duskndawn"
|
||||
|
||||
/obj/screen/alert/status_effect/marshal
|
||||
/atom/movable/screen/alert/status_effect/marshal
|
||||
name = "Blessing of Wounded Soldier"
|
||||
desc = "Some people seek power through redemption, one thing many people don't know is that battle is the ultimate redemption and wounds let you bask in eternal glory."
|
||||
icon_state = "wounded_soldier"
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
//SLEEPING
|
||||
/datum/status_effect/incapacitating/sleeping
|
||||
id = "sleeping"
|
||||
alert_type = /obj/screen/alert/status_effect/asleep
|
||||
alert_type = /atom/movable/screen/alert/status_effect/asleep
|
||||
needs_update_stat = TRUE
|
||||
var/mob/living/carbon/carbon_owner
|
||||
var/mob/living/carbon/human/human_owner
|
||||
@@ -122,7 +122,7 @@
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/off_balance)
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/asleep
|
||||
/atom/movable/screen/alert/status_effect/asleep
|
||||
name = "Asleep"
|
||||
desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are."
|
||||
icon_state = "asleep"
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
/datum/status_effect/mesmerize
|
||||
id = "Mesmerize"
|
||||
alert_type = /obj/screen/alert/status_effect/mesmerized
|
||||
alert_type = /atom/movable/screen/alert/status_effect/mesmerized
|
||||
|
||||
/datum/status_effect/mesmerize/on_creation(mob/living/new_owner, set_duration)
|
||||
. = ..()
|
||||
@@ -156,7 +156,7 @@
|
||||
duration = set_duration
|
||||
. = ..()
|
||||
|
||||
/obj/screen/alert/status_effect/mesmerized
|
||||
/atom/movable/screen/alert/status_effect/mesmerized
|
||||
name = "Mesmerized"
|
||||
desc = "You can't tear your sight from who is in front of you... their gaze is simply too enthralling.."
|
||||
icon = 'icons/mob/actions/bloodsucker.dmi'
|
||||
@@ -199,15 +199,32 @@
|
||||
movespeed_mod = /datum/movespeed_modifier/status_effect/tased/no_combat_mode
|
||||
stamdmg_per_ds = 1
|
||||
|
||||
/datum/status_effect/vtec_disabled
|
||||
id = "vtec_disable"
|
||||
tick = FALSE
|
||||
|
||||
/datum/status_effect/vtec_disabled/on_creation(mob/living/new_owner, set_duration)
|
||||
if(isnum(set_duration))
|
||||
duration = set_duration
|
||||
. = ..()
|
||||
if(iscyborg(owner))
|
||||
var/mob/living/silicon/robot/R = owner
|
||||
R.vtec_disabled = TRUE
|
||||
|
||||
/datum/status_effect/vtec_disabled/on_remove()
|
||||
if(iscyborg(owner))
|
||||
var/mob/living/silicon/robot/R = owner
|
||||
R.vtec_disabled = FALSE
|
||||
return ..()
|
||||
|
||||
//OTHER DEBUFFS
|
||||
/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace
|
||||
id = "his_wrath"
|
||||
duration = -1
|
||||
tick_interval = 4
|
||||
alert_type = /obj/screen/alert/status_effect/his_wrath
|
||||
alert_type = /atom/movable/screen/alert/status_effect/his_wrath
|
||||
|
||||
/obj/screen/alert/status_effect/his_wrath
|
||||
/atom/movable/screen/alert/status_effect/his_wrath
|
||||
name = "His Wrath"
|
||||
desc = "You fled from His Grace instead of feeding Him, and now you suffer."
|
||||
icon_state = "his_grace"
|
||||
@@ -226,11 +243,11 @@
|
||||
duration = 70
|
||||
tick_interval = 0 //tick as fast as possible
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = /obj/screen/alert/status_effect/belligerent
|
||||
alert_type = /atom/movable/screen/alert/status_effect/belligerent
|
||||
var/leg_damage_on_toggle = 2 //damage on initial application and when the owner tries to toggle to run
|
||||
var/cultist_damage_on_toggle = 10 //damage on initial application and when the owner tries to toggle to run, but to cultists
|
||||
|
||||
/obj/screen/alert/status_effect/belligerent
|
||||
/atom/movable/screen/alert/status_effect/belligerent
|
||||
name = "Belligerent"
|
||||
desc = "<b><font color=#880020>Kneel, her-eti'c.</font></b>"
|
||||
icon_state = "belligerent"
|
||||
@@ -751,7 +768,7 @@
|
||||
/datum/status_effect/necropolis_curse/proc/apply_curse(set_curse)
|
||||
curse_flags |= set_curse
|
||||
if(curse_flags & CURSE_BLINDING)
|
||||
owner.overlay_fullscreen("curse", /obj/screen/fullscreen/curse, 1)
|
||||
owner.overlay_fullscreen("curse", /atom/movable/screen/fullscreen/curse, 1)
|
||||
|
||||
/datum/status_effect/necropolis_curse/proc/remove_curse(remove_curse)
|
||||
if(remove_curse & CURSE_BLINDING)
|
||||
@@ -810,7 +827,7 @@
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
tick_interval = 5
|
||||
duration = 100
|
||||
alert_type = /obj/screen/alert/status_effect/kindle
|
||||
alert_type = /atom/movable/screen/alert/status_effect/kindle
|
||||
var/old_health
|
||||
var/old_oxyloss
|
||||
|
||||
@@ -839,7 +856,7 @@
|
||||
owner.visible_message("<span class='warning'>The light in [owner]'s eyes fades!</span>", \
|
||||
"<span class='boldannounce'>You snap out of your daze!</span>")
|
||||
|
||||
/obj/screen/alert/status_effect/kindle
|
||||
/atom/movable/screen/alert/status_effect/kindle
|
||||
name = "Dazzling Lights"
|
||||
desc = "Blinding light dances in your vision, stunning and silencing you. <i>Any damage taken will shorten the light's effects!</i>"
|
||||
icon_state = "kindle"
|
||||
@@ -852,7 +869,7 @@
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
duration = 600
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN is drenched in thick, blue ichor!</span>"
|
||||
alert_type = /obj/screen/alert/status_effect/ichorial_stain
|
||||
alert_type = /atom/movable/screen/alert/status_effect/ichorial_stain
|
||||
|
||||
/datum/status_effect/ichorial_stain/on_apply()
|
||||
. = ..()
|
||||
@@ -865,7 +882,7 @@
|
||||
owner.visible_message("<span class='danger'>The blue ichor on [owner]'s body dries out!</span>", \
|
||||
"<span class='boldnotice'>The ichor on your body is dry - you can now be revived by vitality matrices again!</span>")
|
||||
|
||||
/obj/screen/alert/status_effect/ichorial_stain
|
||||
/atom/movable/screen/alert/status_effect/ichorial_stain
|
||||
name = "Ichorial Stain"
|
||||
desc = "Your body is covered in blue ichor! You can't be revived by vitality matrices."
|
||||
icon_state = "ichorial_stain"
|
||||
@@ -891,7 +908,7 @@
|
||||
/datum/status_effect/strandling //get it, strand as in durathread strand + strangling = strandling hahahahahahahahahahhahahaha i want to die
|
||||
id = "strandling"
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
alert_type = /obj/screen/alert/status_effect/strandling
|
||||
alert_type = /atom/movable/screen/alert/status_effect/strandling
|
||||
|
||||
/datum/status_effect/strandling/on_apply()
|
||||
ADD_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron")
|
||||
@@ -901,13 +918,13 @@
|
||||
REMOVE_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron")
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/strandling
|
||||
/atom/movable/screen/alert/status_effect/strandling
|
||||
name = "Choking strand"
|
||||
desc = "A magical strand of Durathread is wrapped around your neck, preventing you from breathing! Click this icon to remove the strand."
|
||||
icon_state = "his_grace"
|
||||
alerttooltipstyle = "hisgrace"
|
||||
|
||||
/obj/screen/alert/status_effect/strandling/Click(location, control, params)
|
||||
/atom/movable/screen/alert/status_effect/strandling/Click(location, control, params)
|
||||
. = ..()
|
||||
to_chat(mob_viewer, "<span class='notice'>You attempt to remove the durathread strand from around your neck.</span>")
|
||||
if(do_after(mob_viewer, 35, null, mob_viewer))
|
||||
@@ -944,9 +961,9 @@
|
||||
tick_interval = 10
|
||||
examine_text = "<span class='warning'>SUBJECTPRONOUN seems slow and unfocused.</span>"
|
||||
var/stun = TRUE
|
||||
alert_type = /obj/screen/alert/status_effect/trance
|
||||
alert_type = /atom/movable/screen/alert/status_effect/trance
|
||||
|
||||
/obj/screen/alert/status_effect/trance
|
||||
/atom/movable/screen/alert/status_effect/trance
|
||||
name = "Trance"
|
||||
desc = "Everything feels so distant, and you can feel your thoughts forming loops inside your head..."
|
||||
icon_state = "high"
|
||||
@@ -1052,7 +1069,7 @@
|
||||
id = "dna_melt"
|
||||
duration = 600
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = /obj/screen/alert/status_effect/dna_melt
|
||||
alert_type = /atom/movable/screen/alert/status_effect/dna_melt
|
||||
var/kill_either_way = FALSE //no amount of removing mutations is gonna save you now
|
||||
|
||||
/datum/status_effect/dna_melt/on_creation(mob/living/new_owner, set_duration, updating_canmove)
|
||||
@@ -1067,7 +1084,7 @@
|
||||
H.something_horrible(kill_either_way)
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/dna_melt
|
||||
/atom/movable/screen/alert/status_effect/dna_melt
|
||||
name = "Genetic Breakdown"
|
||||
desc = "I don't feel so good. Your body can't handle the mutations! You have one minute to remove your mutations, or you will be met with a horrible fate."
|
||||
icon_state = "dna_melt"
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
id = "frozen"
|
||||
duration = 100
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
alert_type = /obj/screen/alert/status_effect/freon
|
||||
alert_type = /atom/movable/screen/alert/status_effect/freon
|
||||
var/icon/cube
|
||||
var/can_melt = TRUE
|
||||
|
||||
/obj/screen/alert/status_effect/freon
|
||||
/atom/movable/screen/alert/status_effect/freon
|
||||
name = "Frozen Solid"
|
||||
desc = "You're frozen inside an ice cube, and cannot move! You can still do stuff, like shooting. Resist out of the cube!"
|
||||
icon_state = "frozen"
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
get_kill()
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/in_love
|
||||
/atom/movable/screen/alert/status_effect/in_love
|
||||
name = "In Love"
|
||||
desc = "You feel so wonderfully in love!"
|
||||
icon_state = "in_love"
|
||||
@@ -57,7 +57,7 @@
|
||||
id = "in_love"
|
||||
duration = -1
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
alert_type = /obj/screen/alert/status_effect/in_love
|
||||
alert_type = /atom/movable/screen/alert/status_effect/in_love
|
||||
var/mob/living/date
|
||||
|
||||
/datum/status_effect/in_love/on_creation(mob/living/new_owner, mob/living/love_interest)
|
||||
|
||||
@@ -5,15 +5,17 @@
|
||||
/datum/status_effect
|
||||
var/id = "effect" //Used for screen alerts.
|
||||
var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means.
|
||||
/// do we tick()?
|
||||
var/tick = TRUE
|
||||
var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second.
|
||||
var/next_tick //The scheduled time for the next tick.
|
||||
var/mob/living/owner //The mob affected by the status effect.
|
||||
var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted
|
||||
var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves
|
||||
var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description
|
||||
var/alert_type = /atom/movable/screen/alert/status_effect //the alert thrown by the status effect, contains name and description
|
||||
/// If this is TRUE, the user will have sprint forcefully disabled while this is active.
|
||||
var/blocks_sprint = FALSE
|
||||
var/obj/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists
|
||||
var/atom/movable/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists
|
||||
/// How many of the effect can be on one mob, and what happens when you try to add another
|
||||
var/status_type = STATUS_EFFECT_UNIQUE
|
||||
|
||||
@@ -32,7 +34,7 @@
|
||||
duration = world.time + duration
|
||||
next_tick = world.time + tick_interval
|
||||
if(alert_type)
|
||||
var/obj/screen/alert/status_effect/A = owner.throw_alert(id, alert_type)
|
||||
var/atom/movable/screen/alert/status_effect/A = owner.throw_alert(id, alert_type)
|
||||
A.attached_effect = src //so the alert can reference us, if it needs to
|
||||
linked_alert = A //so we can reference the alert, if we need to
|
||||
START_PROCESSING(SSstatus_effects, src)
|
||||
@@ -98,7 +100,7 @@
|
||||
// ALERT HOOK //
|
||||
////////////////
|
||||
|
||||
/obj/screen/alert/status_effect
|
||||
/atom/movable/screen/alert/status_effect
|
||||
name = "Curse of Mundanity"
|
||||
desc = "You don't feel any different..."
|
||||
var/datum/status_effect/attached_effect
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
|
||||
// The shattered remnants of your broken limbs fill you with determination!
|
||||
/obj/screen/alert/status_effect/determined
|
||||
/atom/movable/screen/alert/status_effect/determined
|
||||
name = "Determined"
|
||||
desc = "The serious wounds you've sustained have put your body into fight-or-flight mode! Now's the time to look for an exit!"
|
||||
icon_state = "regenerative_core"
|
||||
|
||||
/datum/status_effect/determined
|
||||
id = "determined"
|
||||
alert_type = /obj/screen/alert/status_effect/determined
|
||||
alert_type = /atom/movable/screen/alert/status_effect/determined
|
||||
|
||||
/datum/status_effect/determined/on_apply()
|
||||
. = ..()
|
||||
@@ -21,7 +21,7 @@
|
||||
id = "limp"
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
tick_interval = 10
|
||||
alert_type = /obj/screen/alert/status_effect/limp
|
||||
alert_type = /atom/movable/screen/alert/status_effect/limp
|
||||
var/msg_stage = 0//so you dont get the most intense messages immediately
|
||||
/// The left leg of the limping person
|
||||
var/obj/item/bodypart/l_leg/left
|
||||
@@ -49,7 +49,7 @@
|
||||
UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_GAIN_WOUND, COMSIG_CARBON_LOSE_WOUND, COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB))
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/limp
|
||||
/atom/movable/screen/alert/status_effect/limp
|
||||
name = "Limping"
|
||||
desc = "One or more of your legs has been wounded, slowing down steps with that leg! Get it fixed, or at least splinted!"
|
||||
|
||||
@@ -99,11 +99,11 @@
|
||||
/////////////////////////
|
||||
|
||||
// wound alert
|
||||
/obj/screen/alert/status_effect/wound
|
||||
/atom/movable/screen/alert/status_effect/wound
|
||||
name = "Wounded"
|
||||
desc = "Your body has sustained serious damage, click here to inspect yourself."
|
||||
|
||||
/obj/screen/alert/status_effect/wound/Click()
|
||||
/atom/movable/screen/alert/status_effect/wound/Click()
|
||||
var/mob/living/carbon/C = usr
|
||||
C.check_self_for_injuries()
|
||||
|
||||
|
||||
@@ -162,3 +162,20 @@
|
||||
gain_text = "<span class='notice'>You feel like munching on a can of soda.</span>"
|
||||
lose_text = "<span class='notice'>You no longer feel like you should be eating trash.</span>"
|
||||
mob_trait = TRAIT_TRASHCAN
|
||||
|
||||
/datum/quirk/colorist
|
||||
name = "Colorist"
|
||||
desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair."
|
||||
value = 0
|
||||
medical_record_text = "Patient enjoys dyeing their hair with pretty colors."
|
||||
|
||||
/datum/quirk/colorist/on_spawn()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/obj/item/dyespray/spraycan = new(get_turf(quirk_holder))
|
||||
H.equip_to_slot(spraycan, SLOT_IN_BACKPACK)
|
||||
H.regenerate_icons()
|
||||
|
||||
/datum/quirk/colorist/post_add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
|
||||
to_chat(quirk_holder, "<span class='boldnotice'>You brought some extra dye with you! It's in your bag if you forgot.</span>")
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
area_type = /area
|
||||
protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer,
|
||||
/area/ai_monitored/turret_protected/ai, /area/commons/storage/emergency/starboard, /area/commons/storage/emergency/port, /area/shuttle, /area/security/prison/safe, /area/security/prison/toilet)
|
||||
/area/ai_monitored/turret_protected/ai, /area/commons/storage/emergency/starboard, /area/commons/storage/emergency/port, /area/shuttle)
|
||||
target_trait = ZTRAIT_STATION
|
||||
|
||||
immunity_type = "rad"
|
||||
|
||||
@@ -329,3 +329,15 @@
|
||||
to_chat(L, "<span class='warning'>You need an attachable assembly!</span>")
|
||||
|
||||
#undef MAXIMUM_EMP_WIRES
|
||||
|
||||
//gremlins
|
||||
/datum/wires/proc/npc_tamper(mob/living/L)
|
||||
if(!wires.len)
|
||||
return
|
||||
|
||||
var/wire_to_screw = pick(wires)
|
||||
|
||||
if(is_color_cut(wire_to_screw) || prob(50)) //CutWireColour() proc handles both cutting and mending wires. If the wire is already cut, always mend it back. Otherwise, 50% to cut it and 50% to pulse it
|
||||
cut(wire_to_screw)
|
||||
else
|
||||
pulse(wire_to_screw, L)
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
for(var/mob/dead/observer/O in GLOB.player_list)
|
||||
if(O.key == expected_key)
|
||||
if(O.client?.address == addr)
|
||||
new /obj/screen/splash(O.client, TRUE)
|
||||
new /atom/movable/screen/splash(O.client, TRUE)
|
||||
break
|
||||
|
||||
/datum/world_topic/adminmsg
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb)
|
||||
victim.emote("pain")
|
||||
if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds
|
||||
victim.throw_alert("wound", /obj/screen/alert/status_effect/wound)
|
||||
victim.throw_alert("wound", /atom/movable/screen/alert/status_effect/wound)
|
||||
|
||||
var/demoted
|
||||
if(old_wound)
|
||||
|
||||
Reference in New Issue
Block a user