diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index b8996f2cf89..e03c0f0187d 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -181,7 +181,7 @@ if(can_fire) title = "\[[state_letter()]][title]" - stat(title, statclick.update(msg)) + stat(title, "[state_colour()][statclick.update(msg)]") /datum/controller/subsystem/proc/state_letter() switch(state) @@ -196,6 +196,18 @@ if(SS_IDLE) . = " " +/datum/controller/subsystem/proc/state_colour() + switch(state) + if(SS_RUNNING) // If its actively processing, colour it green + . = "" + if(SS_QUEUED) // If its in the running queue, but delayed, colour it orange + . = "" + if(SS_PAUSED, SS_PAUSING) // If its being paused due to lag, colour it red + . = "" + if(SS_SLEEPING) // If fire() slept, colour it blue + . = "" + if(SS_IDLE) // Leave it default if the SS is idle + . = "" //could be used to postpone a costly subsystem for (default one) var/cycles, cycles //for instance, during cpu intensive operations like explosions /datum/controller/subsystem/proc/postpone(cycles = 1) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 53c755e8822..3b136dcf92c 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1100,7 +1100,7 @@ l_hand = null backpack_contents = list( /obj/item/storage/box/engineer = 1, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard = 1, + /obj/item/clothing/suit/space/hardsuit/shielded/wizard/arch = 1, /obj/item/clothing/shoes/magboots = 1, /obj/item/kitchen/knife/ritual = 1, /obj/item/clothing/suit/wizrobe/red = 1, diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index d6e36a805a4..2c2bca9b0ea 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -450,7 +450,7 @@ //Weapons and Armors /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" - desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted." + desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted. Despite appearance it is NOT spaceproof." item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard limit = 1 category = "Weapons and Armors" diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 14a8e2b6ddc..3091caa82a2 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -359,12 +359,12 @@ if(scan_brain && !can_brainscan()) return if(isnull(subject) || (!(ishuman(subject))) || (!subject.dna)) - if(isalien(subject)) + if(isalien(subject)) scantemp = "Error: Xenomorphs are not scannable." SSnanoui.update_uis(src) return // can add more conditions for specific non-human messages here - else + else scantemp = "Error: Subject species is not scannable." SSnanoui.update_uis(src) return @@ -372,7 +372,7 @@ var/obj/item/organ/internal/brain/Brn = subject.get_int_organ(/obj/item/organ/internal/brain) if(istype(Brn)) if(NO_SCAN in Brn.dna.species.species_traits) - scantemp = "Error: [subject.dna.species.name_plural] are not scannable." + scantemp = "Error: [Brn.dna.species.name_plural] are not scannable." SSnanoui.update_uis(src) return if(!subject.get_int_organ(/obj/item/organ/internal/brain)) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 6c10921e6bd..19717991593 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -35,7 +35,12 @@ assume_air(lowertemp) qdel(hotspot) -/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER, infinite = FALSE) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost +/* + * Makes a turf slippery using the given parameters + * @param wet_setting The type of slipperyness used + * @param time Time the turf is slippery. If null it will pick a random time between 790 and 820 ticks. If INFINITY then it won't dry up ever +*/ +/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER, time = null) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost if(wet >= wet_setting) return wet = wet_setting @@ -55,13 +60,13 @@ else wet_overlay = image('icons/effects/water.dmi', src, "wet_static") overlays += wet_overlay - if(!infinite) - spawn(rand(790, 820)) // Purely so for visual effect - if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. - return - MakeDry(wet_setting) + if(time == INFINITY) + return + if(!time) + time = rand(790, 820) + addtimer(CALLBACK(src, .proc/MakeDry, wet_setting), time) -/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER) +/turf/simulated/MakeDry(wet_setting = TURF_WET_WATER) if(wet > wet_setting) return wet = TURF_DRY diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm index 5eb387abbae..ffb1cce0b5c 100644 --- a/code/game/turfs/simulated/floor/mineral.dm +++ b/code/game/turfs/simulated/floor/mineral.dm @@ -186,7 +186,7 @@ /turf/simulated/floor/mineral/bananium/lubed/Initialize(mapload) . = ..() - MakeSlippery(TURF_WET_LUBE, TRUE) + MakeSlippery(TURF_WET_LUBE, INFINITY) /turf/simulated/floor/mineral/bananium/lubed/pry_tile(obj/item/C, mob/user, silent = FALSE) //I want to get off Mr Honk's Wild Ride if(ishuman(user)) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 33ae636090d..0ca6494497c 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -118,7 +118,7 @@ /turf/simulated/floor/lubed/Initialize(mapload) . = ..() - MakeSlippery(TURF_WET_LUBE, TRUE) + MakeSlippery(TURF_WET_LUBE, INFINITY) /turf/simulated/floor/lubed/pry_tile(obj/item/C, mob/user, silent = FALSE) //I want to get off Mr Honk's Wild Ride if(ishuman(user)) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 85b03d3378d..332786e291c 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -353,7 +353,7 @@ /turf/simulated/floor/plating/ice/Initialize(mapload) . = ..() - MakeSlippery(TURF_WET_PERMAFROST, TRUE) + MakeSlippery(TURF_WET_PERMAFROST, INFINITY) /turf/simulated/floor/plating/ice/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index caa46b4e245..a6b2a53d386 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -309,6 +309,10 @@ for(var/atom/movable/AM in contents) AM.get_spooked() +// Defined here to avoid runtimes +/turf/proc/MakeDry(wet_setting = TURF_WET_WATER) + return + /turf/proc/burn_down() return diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 38e5f894b48..0c3a0e92310 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -178,7 +178,7 @@ /obj/item/clothing/suit/space/hardsuit/shielded/wizard name = "battlemage armour" - desc = "Not all wizards are afraid of getting up close and personal." + desc = "Not all wizards are afraid of getting up close and personal. Not spaceproof despite its appearance." icon_state = "hardsuit-wiz" item_state = "wiz_hardsuit" recharge_rate = 0 @@ -194,6 +194,15 @@ resistance_flags = FIRE_PROOF | ACID_PROOF magical = TRUE +/obj/item/clothing/suit/space/hardsuit/shielded/wizard/arch + desc = "For the arch wizard in need of additional protection." + recharge_rate = 1 + recharge_cooldown = 0 + max_charges = 15 + min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/arch + /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard name = "battlemage helmet" desc = "A suitably impressive helmet." @@ -210,6 +219,11 @@ /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/attack_self(mob/user) return +/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/arch + desc = "A truly protective helmet." + min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT + max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT + /obj/item/wizard_armour_charge name = "battlemage shield charges" desc = "A powerful rune that will increase the number of hits a suit of battlemage armour can take before failing.." diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm index a6d6d9e3341..38904d407de 100644 --- a/code/modules/martial_arts/mimejutsu.dm +++ b/code/modules/martial_arts/mimejutsu.dm @@ -33,8 +33,8 @@ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, "melee") - D.visible_message("[A] has hit [D] with invisible nuncucks!", \ - "[A] has hit [D] with a with invisible nuncuck!") + D.visible_message("[A] has hit [D] with invisible nunchucks!", \ + "[A] has hit [D] with a with invisible nunchuck!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) D.apply_damage(damage, STAMINA, affecting, armor_block) diff --git a/code/modules/mob/living/carbon/brain/robotic_brain.dm b/code/modules/mob/living/carbon/brain/robotic_brain.dm index b051fda9d89..908e905c1c8 100644 --- a/code/modules/mob/living/carbon/brain/robotic_brain.dm +++ b/code/modules/mob/living/carbon/brain/robotic_brain.dm @@ -110,7 +110,6 @@ if(imprinted_master) to_chat(H, "You are permanently imprinted to [imprinted_master], obey [imprinted_master]'s every order and assist [imprinted_master.p_them()] in completing [imprinted_master.p_their()] goals at any cost.") - /obj/item/mmi/robotic_brain/proc/transfer_personality(mob/candidate) searching = FALSE brainmob.key = candidate.key @@ -206,6 +205,10 @@ brainmob.container = src brainmob.stat = CONSCIOUS brainmob.SetSilence(0) + brainmob.dna = new(brainmob) + brainmob.dna.species = new /datum/species/machine() // Else it will default to human. And we don't want to clone IRC humans now do we? + brainmob.dna.ResetSE() + brainmob.dna.ResetUI() GLOB.dead_mob_list -= brainmob ..() diff --git a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm index c0dfa097f16..cf55824542a 100644 --- a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm +++ b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm @@ -285,7 +285,7 @@ if(prob(6)) for(var/turf/simulated/floor/O in range(src, 6)) - O.MakeSlippery(TURF_WET_WATER, 10) + O.MakeSlippery(TURF_WET_WATER, 10 SECONDS) playsound(src, 'sound/effects/clownstep1.ogg', 30, 1) if(prob(5)) @@ -323,7 +323,7 @@ if(!eating) addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/floor_cluwne/.proc/Grab, H), 70) for(var/turf/simulated/floor/O in range(src, 6)) - O.MakeSlippery(TURF_WET_LUBE, 20) + O.MakeSlippery(TURF_WET_LUBE, 20 SECONDS) playsound(src, 'sound/effects/meteorimpact.ogg', 30, 1) eating = TRUE diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index b20a82e7b30..e1aa537f8a8 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -425,7 +425,7 @@ var/packs_list[0] for(var/set_name in SSshuttle.supply_packs) var/datum/supply_packs/pack = SSshuttle.supply_packs[set_name] - if(!pack.contraband && !pack.hidden && !pack.special && pack.group == cat) + if((!pack.contraband && !pack.hidden && !pack.special && pack.group == cat) || (!pack.contraband && !pack.hidden && (pack.special && pack.special_enabled) && pack.group == cat)) // 0/1 after the pack name (set_name) is a boolean for ordering multiple crates packs_list.Add(list(list("name" = pack.name, "amount" = pack.amount, "cost" = pack.cost, "command1" = list("doorder" = "[set_name]0"), "command2" = list("doorder" = "[set_name]1"), "command3" = list("contents" = set_name))))