This commit is contained in:
Gandalf
2022-04-01 00:49:47 +01:00
33 changed files with 361 additions and 133 deletions
+6 -1
View File
@@ -66,6 +66,9 @@ GLOBAL_VAR(command_name)
new_station_name = name + " "
name = ""
if(prob(1))
random = 999999999 //ridiculously long name in written numbers
// Prefix
var/holiday_name = pick(SSevents.holidays)
if(holiday_name)
@@ -94,9 +97,11 @@ GLOBAL_VAR(command_name)
if(4)
new_station_name += pick(GLOB.phonetic_alphabet)
if(5)
new_station_name += pick(GLOB.numbers_as_words)
new_station_name += convert_integer_to_words(rand(-1,99), capitalise = TRUE)
if(13)
new_station_name += pick("13","XIII","Thirteen")
if(999999999)
new_station_name = "Space Station " + convert_integer_to_words(rand(111111111,999999999), capitalise = TRUE)
return new_station_name
/proc/syndicate_name()
+107
View File
@@ -810,6 +810,113 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
else
return "[number]\th"
/**
* Takes a 1, 2 or 3 digit number and returns it in words. Don't call this directly, use convert_integer_to_words() instead.
*
* Arguments:
* * number - 1, 2 or 3 digit number to convert.
* * carried_string - Text to append after number is converted to words, e.g. "million", as in "eighty million".
* * capitalise - Whether the number it returns should be capitalised or not, e.g. "Eighty-Eight" vs. "eighty-eight".
*/
/proc/int_to_words(number, carried_string, capitalise = FALSE)
var/static/list/tens = list("", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
var/static/list/ones = list("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")
number = round(number)
if(number > 999)
return
if(number <= 0)
return
var/list/string = list()
if(number >= 100)
string += int_to_words(number / 100, "hundred")
number = round(number % 100)
if(!number)
return string + carried_string
string += "and"
//if number is more than 19, divide it
if(number > 19)
var/temp_num = tens[number / 10]
if(number % 10)
temp_num += "-"
if(capitalise)
temp_num += capitalize(ones[number % 10])
else
temp_num += ones[number % 10]
string += temp_num
else
string += ones[number]
if(carried_string)
string += carried_string
return string
/**
* Takes an integer up to 999,999,999 and returns it in words. Works with negative numbers and 0.
*
* Arguments:
* * number - Integer up to 999,999,999 to convert.
* * capitalise - Whether the number it returns should be capitalised or not, e.g. "Eighty Million" vs. "eighty million".
*/
/proc/convert_integer_to_words(number, capitalise = FALSE)
if(!isnum(number))
return
var/negative = FALSE
if(number < 0)
number = abs(number)
negative = TRUE
number = round(number)
if(number > 999999999)
return negative ? -number : number
if(number == 0)
return capitalise ? "Zero" : "zero"
//stores word representation of given number
var/list/output = list()
//handles millions
var/millions = int_to_words(((number / 1000000) % 1000), "million", capitalise)
if(length(millions))
output += millions
///handles thousands
var/thousands = int_to_words(((number / 1000) % 1000), "thousand", capitalise)
if(length(thousands))
output += thousands
if(length(output) && number % 1000 && (number % 1000) < 100) //e.g. One Thousand And Ninety-Nine, instead of One Thousand Ninety-Nine
output += "and"
//handles digits at ones, tens and hundreds places (if any)
output += int_to_words((number % 1000), "", capitalise)
for(var/index in 1 to length(output))
if(isnull(output[index]))
output -= output[index]
continue
if(capitalise)
output[index] = capitalize(output[index])
if(!length(output))
return negative ? -number : number
var/number_in_words
if(negative)
number_in_words += capitalise ? "Negative " : "negative "
number_in_words += output.Join(" ")
return number_in_words
/proc/random_capital_letter()
return uppertext(pick(GLOB.alphabet))
+7 -3
View File
@@ -861,7 +861,7 @@
//Small sprites
/datum/action/small_sprite
name = "Toggle Giant Sprite"
desc = "Others will always see you as giant"
desc = "Others will always see you as giant."
icon_icon = 'icons/mob/actions/actions_xeno.dmi'
button_icon_state = "smallqueen"
background_icon_state = "bg_alien"
@@ -875,8 +875,6 @@
/datum/action/small_sprite/megafauna
icon_icon = 'icons/mob/actions/actions_xeno.dmi'
button_icon_state = "smallqueen"
background_icon_state = "bg_alien"
small_icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
/datum/action/small_sprite/megafauna/drake
@@ -896,6 +894,12 @@
small_icon_state = "arachnid_mini"
background_icon_state = "bg_demon"
/datum/action/small_sprite/space_dragon
small_icon = 'icons/mob/carp.dmi'
small_icon_state = "carp"
icon_icon = 'icons/mob/carp.dmi'
button_icon_state = "carp"
/datum/action/small_sprite/Trigger(trigger_flags)
..()
if(!small)
+37 -27
View File
@@ -30,40 +30,50 @@
/obj/structure/frame/machine/examine(user)
. = ..()
if(state == 3 && req_components && req_component_names)
var/hasContent = FALSE
var/requires = "It requires"
if(state != 3)
return
for(var/i = 1 to req_components.len)
var/tname = req_components[i]
var/amt = req_components[tname]
if(amt == 0)
continue
var/use_and = i == req_components.len
requires += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]"
hasContent = TRUE
if(!length(req_components))
. += span_info("It requires no components.")
return .
if(!req_component_names)
stack_trace("[src]'s req_components list has items but its req_component_names list is null!")
return
var/list/nice_list = list()
for(var/atom/component as anything in req_components)
if(!ispath(component))
stack_trace("An item in [src]'s req_components list is not a path!")
continue
if(!req_components[component])
continue
nice_list += list("[req_components[component]] [req_component_names[component]]\s")
. += span_info("It requires [english_list(nice_list, "no more components")].")
if(hasContent)
. += "[requires]."
else
. += "It does not require any more components."
/obj/structure/frame/machine/proc/update_namelist()
if(!req_components)
return
req_component_names = new()
for(var/tname in req_components)
if(ispath(tname, /obj/item/stack))
var/obj/item/stack/S = tname
var/singular_name = initial(S.singular_name)
if(singular_name)
req_component_names[tname] = singular_name
else
req_component_names[tname] = initial(S.name)
else
var/obj/O = tname
req_component_names[tname] = initial(O.name)
req_component_names = list()
for(var/atom/component_path as anything in req_components)
if(!ispath(component_path))
continue
req_component_names[component_path] = initial(component_path.name)
if(ispath(component_path, /obj/item/stack))
var/obj/item/stack/stack_path = component_path
if(initial(stack_path.singular_name))
req_component_names[component_path] = initial(stack_path.singular_name)
continue
if(ispath(component_path, /obj/item/stock_parts))
var/obj/item/stock_parts/stock_part = component_path
if(initial(stock_part.base_name))
req_component_names[component_path] = initial(stock_part.base_name)
/obj/structure/frame/machine/proc/get_req_components_amt()
var/amt = 0
+1
View File
@@ -32,6 +32,7 @@
flick("ecto_sniffer_flick", src)
playsound(loc, 'sound/machines/ectoscope_beep.ogg', 75)
use_power(10)
say("Reporting [pick(world.file2list("strings/spook_levels.txt"))] levels of paranormal activity!")
if(activator?.ckey)
ectoplasmic_residues += activator.ckey
addtimer(CALLBACK(src, .proc/clear_residue, activator.ckey), 15 SECONDS)
@@ -94,10 +94,28 @@ micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
/obj/item/circuitboard/machine/examine(mob/user)
. = ..()
if(LAZYLEN(req_components))
var/list/nice_list = list()
for(var/atom/component as anything in req_components)
if(!ispath(component))
continue
nice_list += list("[req_components[component]] [initial(component.name)]")
. += span_notice("Required components: [english_list(nice_list)].")
if(!LAZYLEN(req_components))
. += span_info("It requires no components.")
return .
var/list/nice_list = list()
for(var/atom/component_path as anything in req_components)
if(!ispath(component_path))
continue
var/component_name = initial(component_path.name)
var/component_amount = req_components[component_path]
if(ispath(component_path, /obj/item/stack))
var/obj/item/stack/stack_path = component_path
if(initial(stack_path.singular_name))
component_name = initial(stack_path.singular_name) //e.g. "glass sheet" vs. "glass"
else if(ispath(component_path, /obj/item/stock_parts))
var/obj/item/stock_parts/stock_part = component_path
if(initial(stock_part.base_name))
component_name = initial(stock_part.base_name)
nice_list += list("[component_amount] [component_name]\s")
. += span_info("It requires [english_list(nice_list)].")
-78
View File
@@ -270,84 +270,6 @@
foodtypes = GRAIN
venue_value = FOOD_PRICE_NORMAL
/obj/item/food/deepfryholder
name = "Deep Fried Foods Holder Obj"
desc = "If you can see this description the code for the deep fryer fucked up."
icon = 'icons/obj/food/food.dmi'
icon_state = ""
bite_consumption = 2
/obj/item/food/deepfryholder/MakeEdible()
AddComponent(/datum/component/edible,\
initial_reagents = food_reagents,\
food_flags = food_flags,\
foodtypes = foodtypes,\
volume = max_volume,\
eat_time = eat_time,\
tastes = tastes,\
eatverbs = eatverbs,\
bite_consumption = bite_consumption,\
on_consume = CALLBACK(src, .proc/On_Consume))
/obj/item/food/deepfryholder/Initialize(mapload, obj/item/fried)
if(!fried)
stack_trace("A deepfried object was created with no fried target")
return INITIALIZE_HINT_QDEL
. = ..()
name = fried.name //We'll determine the other stuff when it's actually removed
appearance = fried.appearance
layer = initial(layer)
plane = initial(plane)
lefthand_file = fried.lefthand_file
righthand_file = fried.righthand_file
inhand_icon_state = fried.inhand_icon_state
desc = fried.desc
w_class = fried.w_class
slowdown = fried.slowdown
equip_delay_self = fried.equip_delay_self
equip_delay_other = fried.equip_delay_other
strip_delay = fried.strip_delay
species_exception = fried.species_exception
item_flags = fried.item_flags
obj_flags = fried.obj_flags
inhand_x_dimension = fried.inhand_x_dimension
inhand_y_dimension = fried.inhand_y_dimension
if(!(SEND_SIGNAL(fried, COMSIG_ITEM_FRIED, src) & COMSIG_FRYING_HANDLED)) //If frying is handled by signal don't do the defaault behavior.
fried.forceMove(src)
/obj/item/food/deepfryholder/Destroy()
if(contents)
QDEL_LIST(contents)
return ..()
/obj/item/food/deepfryholder/proc/On_Consume(eater, feeder)
if(contents)
QDEL_LIST(contents)
/obj/item/food/deepfryholder/proc/fry(cook_time = 30)
switch(cook_time)
if(0 to 15)
add_atom_colour(rgb(166, 103, 54), FIXED_COLOUR_PRIORITY)
name = "lightly-fried [name]"
desc = "[desc] It's been lightly fried in a deep fryer."
if(16 to 49)
add_atom_colour(rgb(103, 63, 24), FIXED_COLOUR_PRIORITY)
name = "fried [name]"
desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%."
if(50 to 59)
add_atom_colour(rgb(63, 23, 4), FIXED_COLOUR_PRIORITY)
name = "deep-fried [name]"
desc = "[desc] Deep-fried to perfection."
if(60 to INFINITY)
add_atom_colour(rgb(33, 19, 9), FIXED_COLOUR_PRIORITY)
name = "\proper the physical manifestation of the very concept of fried foods"
desc = "A heavily-fried... something. Who can tell anymore?"
foodtypes |= FRIED
/obj/item/food/butterbiscuit
name = "butter biscuit"
desc = "Well butter my biscuit!"
+77
View File
@@ -0,0 +1,77 @@
/obj/item/food/deepfryholder
name = "Deep Fried Foods Holder Obj"
desc = "If you can see this description the code for the deep fryer fucked up."
icon = 'icons/obj/food/food.dmi'
icon_state = ""
bite_consumption = 2
/obj/item/food/deepfryholder/MakeEdible()
AddComponent(/datum/component/edible,\
initial_reagents = food_reagents,\
food_flags = food_flags,\
foodtypes = foodtypes,\
volume = max_volume,\
eat_time = eat_time,\
tastes = tastes,\
eatverbs = eatverbs,\
bite_consumption = bite_consumption,\
on_consume = CALLBACK(src, .proc/On_Consume))
/obj/item/food/deepfryholder/Initialize(mapload, obj/item/fried)
if(!fried)
stack_trace("A deepfried object was created with no fried target")
return INITIALIZE_HINT_QDEL
. = ..()
name = fried.name //We'll determine the other stuff when it's actually removed
appearance = fried.appearance
layer = initial(layer)
plane = initial(plane)
lefthand_file = fried.lefthand_file
righthand_file = fried.righthand_file
inhand_icon_state = fried.inhand_icon_state
desc = fried.desc
w_class = fried.w_class
slowdown = fried.slowdown
equip_delay_self = fried.equip_delay_self
equip_delay_other = fried.equip_delay_other
strip_delay = fried.strip_delay
species_exception = fried.species_exception
item_flags = fried.item_flags
obj_flags = fried.obj_flags
inhand_x_dimension = fried.inhand_x_dimension
inhand_y_dimension = fried.inhand_y_dimension
if(!(SEND_SIGNAL(fried, COMSIG_ITEM_FRIED, src) & COMSIG_FRYING_HANDLED)) //If frying is handled by signal don't do the defaault behavior.
fried.forceMove(src)
/obj/item/food/deepfryholder/Destroy()
if(contents)
QDEL_LIST(contents)
return ..()
/obj/item/food/deepfryholder/proc/On_Consume(eater, feeder)
if(contents)
QDEL_LIST(contents)
/obj/item/food/deepfryholder/proc/fry(cook_time = 30)
switch(cook_time)
if(0 to 15)
add_atom_colour(rgb(166, 103, 54), FIXED_COLOUR_PRIORITY)
name = "lightly-fried [name]"
desc = "[desc] It's been lightly fried in a deep fryer."
if(16 to 49)
add_atom_colour(rgb(103, 63, 24), FIXED_COLOUR_PRIORITY)
name = "fried [name]"
desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%."
if(50 to 59)
add_atom_colour(rgb(63, 23, 4), FIXED_COLOUR_PRIORITY)
name = "deep-fried [name]"
desc = "[desc] Deep-fried to perfection."
if(60 to INFINITY)
add_atom_colour(rgb(33, 19, 9), FIXED_COLOUR_PRIORITY)
name = "\proper the physical manifestation of the very concept of fried foods"
desc = "A heavily-fried... something. Who can tell anymore?"
foodtypes |= FRIED
+2 -2
View File
@@ -111,8 +111,8 @@
/obj/item/storage/toolbox/mechanical/old/clean/proc/calc_damage()
var/power = 0
for (var/obj/item/stack/telecrystal/TC in get_all_contents())
power += TC.amount
for (var/obj/item/stack/telecrystal/stored_crystals in get_all_contents())
power += (stored_crystals.amount / 2)
force = 19 + power
throwforce = 22 + power
+2
View File
@@ -118,6 +118,8 @@ GLOBAL_LIST_INIT(department_order_cooldowns, list(
if(!pack)
say("Something went wrong!")
CRASH("requested supply pack id \"[id]\" not found!")
if(pack.hidden || pack.DropPodOnly || pack.special)
return
var/name = "*None Provided*"
var/rank = "*None Provided*"
var/ckey = usr.ckey
@@ -171,6 +171,7 @@
if(scanned_tray.myseed)
returned_message += "*** [span_bold("[scanned_tray.myseed.plantname]")] ***\n"
returned_message += "- Plant Age: [span_notice("[scanned_tray.age]")]\n"
returned_message += "- Plant Health: [span_notice("[scanned_tray.plant_health]")]\n"
returned_message += scan_plant_stats(scanned_tray.myseed)
else
returned_message += span_bold("No plant found.\n")
@@ -15,7 +15,7 @@
icon_state = "mulebot0"
density = TRUE
move_resist = MOVE_FORCE_STRONG
animate_movement = FORWARD_STEPS
animate_movement = SLIDE_STEPS
health = 50
maxHealth = 50
speed = 3
@@ -91,6 +91,8 @@
var/objective_complete = FALSE
/// The innate ability to summon rifts
var/datum/action/innate/summon_rift/rift
/// The ability to make your sprite smaller
var/datum/action/small_sprite/space_dragon/small_sprite
/// The color of the space dragon.
var/chosen_color
/// Minimum devastation damage dealt coefficient based on max health
@@ -106,6 +108,9 @@
ADD_TRAIT(src, TRAIT_HEALS_FROM_CARP_RIFTS, INNATE_TRAIT)
rift = new
rift.Grant(src)
small_sprite = new
small_sprite.Grant(src)
RegisterSignal(small_sprite, COMSIG_ACTION_TRIGGER, .proc/add_dragon_overlay)
/mob/living/simple_animal/hostile/space_dragon/Login()
. = ..()
@@ -201,10 +206,12 @@
destroy_rifts()
..()
add_dragon_overlay()
UnregisterSignal(small_sprite, COMSIG_ACTION_TRIGGER)
/mob/living/simple_animal/hostile/space_dragon/revive(full_heal, admin_revive)
. = ..()
add_dragon_overlay()
RegisterSignal(small_sprite, COMSIG_ACTION_TRIGGER, .proc/add_dragon_overlay)
/mob/living/simple_animal/hostile/space_dragon/wabbajack_act(mob/living/new_mob)
empty_contents()
@@ -252,6 +259,8 @@
*/
/mob/living/simple_animal/hostile/space_dragon/proc/add_dragon_overlay()
cut_overlays()
if(!small_sprite.small)
return
if(stat == DEAD)
var/mutable_appearance/overlay = mutable_appearance(icon, "overlay_dead")
overlay.appearance_flags = RESET_COLOR
+1 -1
View File
@@ -96,7 +96,7 @@
* pH meter that will give a detailed or truncated analysis of all the reagents in of an object with a reagents datum attached to it. Only way of detecting purity for now.
*/
/obj/item/ph_meter
name = "Chemistry Analyser"
name = "Chemical Analyzer"
desc = "An electrode attached to a small circuit box that will display details of a solution. Can be toggled to provide a description of each of the reagents. The screen currently displays nothing."
icon_state = "pHmeter"
icon = 'icons/obj/chemical.dmi'
@@ -1194,6 +1194,7 @@
metabolization_rate = 0.4 * REAGENTS_METABOLISM
ph = 4.3
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
harmful = TRUE
/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
for(var/datum/reagent/drug/R in M.reagents.reagent_list)
@@ -738,9 +738,9 @@
build_path = /obj/item/assembly/timer
category = list("initial", "Misc")
/datum/design/voice_analyser
name = "Voice Analyser"
id = "voice_analyser"
/datum/design/voice_analyzer
name = "Voice Analyzer"
id = "voice_analyzer"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 500, /datum/material/glass = 50)
build_path = /obj/item/assembly/voice
@@ -72,7 +72,7 @@
category = list("Medical Designs")
/datum/design/ph_meter
name = "Chemical analyser"
name = "Chemical Analyzer"
id = "ph_meter"
build_type = PROTOLATHE | AWAY_LATHE
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+3
View File
@@ -220,6 +220,8 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
icon = 'icons/obj/stock_parts.dmi'
w_class = WEIGHT_CLASS_SMALL
var/rating = 1
///Used when a base part has a different name to higher tiers of part. For example, machine frames want any manipulator and not just a micro-manipulator.
var/base_name
/obj/item/stock_parts/Initialize(mapload)
. = ..()
@@ -248,6 +250,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "micro_mani"
custom_materials = list(/datum/material/iron=30)
base_name = "manipulator"
/obj/item/stock_parts/micro_laser
name = "micro-laser"
@@ -20,10 +20,10 @@
monochromatic cyan, leaving the user unable to see long distances. However, the way the helmet retracts is pretty cool."
/obj/item/paper/fluff/ruins/oldstation/protohealth
name = "Health Analyser Report"
info = "<b>*Health Analyser*</b><br><br>The portable Health Analyser is essentially a handheld variant of a health analyser. Years of research have concluded with this device which is \
name = "Health Analyzer Report"
info = "<b>*Health Analyzer*</b><br><br>The portable Health Analyzer is essentially a handheld variant of a health analyzer. Years of research have concluded with this device which is \
capable of diagnosing even the most critical, obscure or technical injuries any humanoid entity is suffering in an easy to understand format that even a non-trained health professional \
can understand.<br><br>The health analyser is expected to go into full production as standard issue medical kit."
can understand.<br><br>The health analyzer is expected to go into full production as standard issue medical kit."
/obj/item/paper/fluff/ruins/oldstation/protogun
name = "K14 Energy Gun Report"
+8
View File
@@ -43,6 +43,14 @@
restricted_roles = list(JOB_ASSISTANT)
surplus = 0
/datum/uplink_item/role_restricted/oldtoolboxclean
name = "Ancient Toolbox"
desc = "An iconic toolbox design notorious with Assistants everywhere, this design was especially made to become more robust the more telecrystals it has inside it! Tools and insulated gloves included."
item = /obj/item/storage/toolbox/mechanical/old/clean
cost = 2
restricted_roles = list(JOB_ASSISTANT)
surplus = 0
// Low progression cost
/datum/uplink_item/role_restricted/clownpin
@@ -375,8 +375,4 @@
cell.forceMove(WR)
cell.charge = rand(0, cell.charge)
cell = null
if(internal_tank)
WR.crowbar_salvage += internal_tank
internal_tank.forceMove(WR)
cell = null
. = ..()
@@ -0,0 +1,4 @@
author: "SkyratBot"
delete-after: True
changes:
- bugfix: "Nanotrasen realized how much they were spending on newscasters that got buried under posters and the like, so the corporation decided to stock the crew with juuuuust enough. They have saved a lot of money from this venture, and the economy will promptly begin to skyrocket to new heights."
@@ -0,0 +1,4 @@
author: "TheBonded, timothymtorres"
delete-after: True
changes:
- bugfix: "Fixed mulebot movement animation to be smoother"
@@ -0,0 +1,5 @@
author: "SkyratBot"
delete-after: True
changes:
- bugfix: "Machine frames and circuit boards no longer call manipulators micro-manipulators when examined"
- code_imp: "Improves code in constructable_frame.dm and circuitboard.dm"
@@ -0,0 +1,4 @@
author: "SkyratBot"
delete-after: True
changes:
- bugfix: "fixed mech air tanks being removable"
@@ -0,0 +1,4 @@
author: "SkyratBot"
delete-after: True
changes:
- bugfix: "Assistant Traitors can now purchase the Ancient Toolbox again."
@@ -0,0 +1,4 @@
author: "SkyratBot"
delete-after: True
changes:
- bugfix: "Adds checks for packs on the departmental order console."
@@ -0,0 +1,4 @@
author: "SkyratBot"
delete-after: True
changes:
- bugfix: "Haloperidol has been properly labelled in medical cyborg hyposprays after several instances of mediborg induced brain damage were found in human patients."
@@ -0,0 +1,4 @@
author: "SkyratBot"
delete-after: True
changes:
- spellcheck: "Voice and chemical analyzers now have more consistent names and spelling."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 19 KiB

+2 -2
View File
@@ -1,5 +1,5 @@
A reaction can be slowed down by cooling the beaker it's in!
Chemical analysers scan more than just pH. They can tell you the purity of each reagent.
Chemical analyzers scan more than just pH. They can tell you the purity of each reagent.
The infomation depth of pH meter readouts can be reduced by using it in hand!
ChemMaster 3000s can tell you the optimal pH of a reagent's reaction with their analyze function.
Oculine slightly improves your eyesight while it's in your system, to a degree based on its purity.
@@ -10,7 +10,7 @@ Inverse Neurine will not delete an imaginary friend. Once a friend, always a fri
Overdosing on Mannitol will give you pro tips from your newfound enlightenment. Perhaps you know that already, though!
Eigenstasium's wild ride can be halted by taking more eigenstasium, bluespace dust, or stabilising agent.
The longer synthtissue has been growing, the more stuff it can do!
Exact organ health values can be determined by using a health analyser while Technetium 99 is in their system.
Exact organ health values can be determined by using a health analyzer while Technetium 99 is in their system.
100% pure inacusiate will let you hear whispers from a distance while it's in your system.
Turning sugar into caramel before attempting to make Eigenstasium makes it much easier to create.
Thermometers crafted in the chemistry section will let you detect the temperature of anything that has a reagent temperature. This includes people too!
+30
View File
@@ -0,0 +1,30 @@
moderate
regular
okay
somewhat irregular
weird
offputting
ungodly
off the charts
earth-shattering
station-shaking
REDACTED
annoying
nuisance heavy
intern
clown
Poly
low
medium
high
medium rare
golem
cheesy horror flick
SKELLY TONE
chair-moving
hair-raising
RUNTIME ERROR
help
IT COMES
NAR
hi
+1
View File
@@ -1587,6 +1587,7 @@
#include "code\game\objects\items\food\bread.dm"
#include "code\game\objects\items\food\burgers.dm"
#include "code\game\objects\items\food\cake.dm"
#include "code\game\objects\items\food\deepfried.dm"
#include "code\game\objects\items\food\dough.dm"
#include "code\game\objects\items\food\egg.dm"
#include "code\game\objects\items\food\frozen.dm"