Merge branch 'master' of https://github.com/PolarisSS13/Polaris into parachute

# Conflicts:
#	icons/obj/storage.dmi
This commit is contained in:
Anewbe
2017-12-07 17:59:13 -06:00
73 changed files with 1038 additions and 171 deletions

View File

@@ -23,7 +23,7 @@ var/savefile/Banlist
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
else
Banlist.cd = "/base/[ckey][id]"
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMANENT</B>\nBy: [Banlist["bannedby"]][appeal]"
.["reason"] = "ckey/id"
return .
else
@@ -49,7 +49,7 @@ var/savefile/Banlist
else
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
else
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMANENT</B>\nBy: [Banlist["bannedby"]][appeal]"
.["reason"] = matches
return .
return 0

View File

@@ -57,7 +57,7 @@
/datum/gear/eyes/medical
display_name = "Medical HUD (Medical)"
path = /obj/item/clothing/glasses/hud/health
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/eyes/medical/prescriptionmed
display_name = "Medical HUD, prescription (Medical)"

View File

@@ -183,6 +183,12 @@
desc = "Small spaces and tight quarters makes you feel distressed. Unfortunately both are rather common when living in space."
modifier_type = /datum/modifier/trait/phobia/claustrophobe
/datum/trait/modifier/mental/blennophobe
name = "Blennophobia"
desc = "Slimes are quite dangerous, but just the aspect of something being slimey is uncomfortable."
modifier_type = /datum/modifier/trait/phobia/blennophobe
/*
// Uncomment this when/if these get finished.
/datum/trait/modifier/mental/synthphobe
@@ -239,4 +245,4 @@
name = "Promethean-phobic"
desc = "Boilerplate racism for jellos goes here."
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
*/
*/

View File

@@ -5,7 +5,7 @@
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
desc = "It's very smart and in a ladies-size!"
desc = "It's very smart and in a ladies size!"
icon_state = "black"
worn_state = "blackf"
@@ -32,7 +32,7 @@
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
desc = "It's standardised prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
desc = "It's standardized prisoner-wear. Its suit sensors are permanently set to the \"Tracking\" position."
icon_state = "orange"
has_sensor = 2
sensor_mode = 3

View File

@@ -70,7 +70,7 @@
/obj/item/clothing/under/rank/clown
name = "clown suit"
desc = "<i>'HONK!'</i>"
desc = "<i><font face='comic sans ms'>Honk!</i></font>"
icon_state = "clown"
rolled_sleeves = -1
@@ -173,7 +173,7 @@
/obj/item/clothing/under/lawyer/oldman
name = "Old Man's Suit"
desc = "A classic suit for the older gentleman with built in back support."
desc = "A classic suit for the older gentleman, with built in back support."
icon_state = "oldman"
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")

View File

@@ -14,7 +14,7 @@ var/list/dreams = list(
"an Unathi","a Tajaran","the Station Intelligence core","the mining station","the research station","a beaker of strange liquid",
"a Teshari", "a Diona nymph","the supermatter","Major Bill","a Morpheus ship with a ridiculous name","the Exodus","a star",
"a Dionaea gestalt","the chapel","a distant scream","endless chittering noises","glowing eyes in the shadows","an empty glass",
"a disoriented Promethean","towers of plastic","a Gygax","a synthetic","a Man-Machine Interface","maintanence drones",
"a disoriented Promethean","towers of plastic","a Gygax","a synthetic","a Man-Machine Interface","maintenance drones",
"unintelligible writings","a Fleet ship",
)

View File

@@ -1,7 +1,7 @@
/obj/item/integrated_circuit/memory
name = "memory chip"
desc = "This tiny chip can store one piece of data."
icon_state = "memory"
icon_state = "memory1"
complexity = 1
inputs = list()
outputs = list()

View File

@@ -162,4 +162,5 @@
))
/material/snow/generate_recipes()
return // Snowmen and snowballs may come here later.
recipes = list()
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)

View File

@@ -735,7 +735,7 @@ var/list/name_to_material
destruction_desc = "crumples"
/material/snow
name = "snow"
name = MAT_SNOW
stack_type = /obj/item/stack/material/snow
flags = MATERIAL_BRITTLE
icon_base = "solid"
@@ -749,7 +749,7 @@ var/list/name_to_material
melting_point = T0C+1
destruction_desc = "crumples"
sheet_singular_name = "pile"
sheet_plural_name = "piles"
sheet_plural_name = "pile" //Just a bigger pile
/material/cloth //todo
name = "cloth"

View File

@@ -297,7 +297,7 @@
var/open_tiles_needed = 15 // Tends to be just right, as maint triggers this but hallways don't.
on_created_text = "<span class='warning'>You are terrified of tight spaces. Why did you come to space??</span>"
on_created_text = "<span class='warning'>You are terrified of tight spaces. Why did you come to space?</span>"
on_expired_text = "<span class='notice'>Small rooms aren't so bad now.</span>"
zero_fear_up = list(
@@ -357,6 +357,90 @@
return fear_amount
/datum/modifier/trait/phobia/blennophobe
name = "blennophobia"
desc = "Slimes are quite dangerous, but just the aspect of something being slimey is uncomfortable."
fear_decay_rate = 1
on_created_text = "<span class='warning'>You are disgusted and horrified by slime.</span>"
on_expired_text = "<span class='notice'>You feel more... okay with slime.</span>"
zero_fear_up = list(
"<span class='warning'><font size='3'>That's some slime!</font></span>",
"<span class='warning'><font size='3'>There's slime right there!</font></span>"
)
zero_fear_down = list(
"<span class='notice'>The slime is out of sight and out of mind.</span>",
"<span class='notice'>Clean. No more slime.</span>"
)
half_fear_up = list(
"<span class='danger'><font size='3'>The slimes might strike at any point!</font></span>",
"<span class='danger'><font size='3'>The slime is still there!</font></span>"
)
half_fear_down = list(
"<span class='warning'>The slime is gone... right?</span>",
"<span class='warning'>You can't see any slime right now, but you're still anxious.</span>"
)
full_fear_up = list(
"<span class='danger'><font size='4'>The slime is everywhere!</font></span>",
"<span class='danger'><font size='4'>You're gonna get absorbed if you don't get out!</font></span>"
)
full_fear_down = list(
"<span class='danger'>There must be more of that slime somewhere...</span>",
"<span class='danger'>No more of this slime, please....</span>"
)
/datum/modifier/trait/phobia/blennophobe/should_fear()
if(holder.blinded)
return 0 // Can't fear what cannot be seen.
var/fear_amount = 0
for(var/atom/thing in view(5, holder)) // See haemophobia for why this is 5.
if(istype(thing, /obj/structure/blob)) // blobs are uncomfortable things
fear_amount += 3
if(istype(thing, /obj/effect/alien/resin)) // Resin's a bit slimy according to its own description.
fear_amount += 1
if(istype(thing, /obj/item/weed_extract))
fear_amount += 1
if(istype(thing, /obj/effect/decal/cleanable/mucus)) // Blennophobia apparently includes mucus, so!
fear_amount += 2
if(istype(thing, /obj/item/slime_extract)) // Gooey.
fear_amount += 1
if(istype(thing, /obj/item/slime_cube)) // Also gooey, alongside harbinger of bad news.
fear_amount += 2
if(istype(thing, /obj/item/organ/internal/brain/slime))
fear_amount += 2
if(istype(thing, /obj/item/clothing/head/collectable/slime)) // Some hats are spooky so people can be assholes with them.
fear_amount += 1
if(istype(thing, /mob/living/simple_animal/slime)) // An actual predatory specimen!
var/mob/living/simple_animal/slime/S = thing
if(S.stat == DEAD) // Dead slimes are somewhat less spook.
fear_amount += 4
if(S.is_adult == TRUE) //big boy
fear_amount += 8
else
fear_amount += 6
if(istype(thing, /mob/living/carbon/human))
var/mob/living/carbon/human/S = thing
if(istype(S.species, /datum/species/skrell)) //Skrell ARE slimey.
fear_amount += 1
if(istype(S.species, /datum/species/shapeshifter/promethean))
fear_amount += 4
else
return
return fear_amount
// Note for the below 'phobias' are of the xeno-phobic variety, and are less centered on pure fear as above, and more on a mix of distrust, fear, and disdainfulness.
// As such, they are mechanically different than the fear-based phobias, in that instead of a buildup of fearful messages, it does intermittent messages specific to what holder sees.
@@ -367,7 +451,7 @@
closely, waiting to strike."
on_created_text = "<span class='warning'>You remain vigilant against the Alien.</span>"
on_expired_text = "<span class='notice'>Aliens aren't so bad afterall.</span>"
on_expired_text = "<span class='notice'>Aliens aren't so bad after all.</span>"
var/last_message = null // world.time we last did a message.
var/message_cooldown = 1 MINUTE
@@ -442,7 +526,7 @@
desc = "Humans are bound to get us all killed with their reckless use of technology..."
on_created_text = "<span class='warning'>You unfortunately are likely to have to deal with humans today.</span>"
on_expired_text = "<span class='notice'>Humans aren't so bad afterall.</span>"
on_expired_text = "<span class='notice'>Humans aren't so bad after all.</span>"
/datum/modifier/trait/phobia/xenophobia/human/get_xenos()
var/list/humans = list()
@@ -471,7 +555,7 @@
desc = "The Skrell pretend that they are Humanity's enlightened allies, but you can see past that."
on_created_text = "<span class='warning'>Hopefully no Skrell show up today.</span>"
on_expired_text = "<span class='notice'>Skrell aren't so bad afterall.</span>"
on_expired_text = "<span class='notice'>Skrell aren't so bad after all.</span>"
/datum/modifier/trait/phobia/xenophobia/skrell/get_xenos()
var/list/skrell = list()
@@ -490,3 +574,4 @@
"WetSkrell was a mistake."
)
return pick(generic_responses)

View File

@@ -11,7 +11,7 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
icon = 'icons/mob/ghost.dmi'
icon_state = "ghost"
layer = 4
layer = 3.9 //Just below normal mobs
stat = DEAD
canmove = 0
blinded = 0
@@ -501,6 +501,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "<font color='blue'>Temperature: [round(environment.temperature-T0C,0.1)]&deg;C ([round(environment.temperature,0.1)]K)</font>"
src << "<font color='blue'>Heat Capacity: [round(environment.heat_capacity(),0.1)]</font>"
/mob/observer/dead/verb/check_radiation()
set name = "Check Radiation"
set category = "Ghost"
var/turf/t = get_turf(src)
if(t)
var/rads = radiation_repository.get_rads_at_turf(t)
to_chat(src, "<span class='notice'>Radiation level: [rads ? rads : "0"] Bq.</span>")
/mob/observer/dead/verb/become_mouse()
set name = "Become mouse"
set category = "Ghost"

View File

@@ -39,6 +39,7 @@
var/virus_immune
var/short_sighted // Permanent weldervision.
var/blood_volume = 560 // Initial blood volume.
var/bloodloss_rate = 1 // Multiplier for how fast a species bleeds out. Higher = Faster
var/hunger_factor = 0.05 // Multiplier for hunger.
var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes.

View File

@@ -35,12 +35,14 @@
ambiguous_genders = TRUE
gluttonous = 1
slowdown = 0.5
total_health = 125
brute_mod = 0.85
burn_mod = 0.85
metabolic_rate = 0.85
item_slowdown_mod = 0.5
mob_size = MOB_LARGE
blood_volume = 840
bloodloss_rate = 0.75
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_UNATHI)
name_language = LANGUAGE_UNATHI
@@ -235,6 +237,8 @@
flash_mod = 1.2
chemOD_mod = 0.9
bloodloss_rate = 1.5
ambiguous_genders = TRUE
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED

View File

@@ -661,9 +661,9 @@ default behaviour is:
/mob/living/Move(a, b, flag)
if (buckled && buckled.loc != a) //not updating position
if (!buckled.anchored)
if(istype(buckled, /mob)) //If you're buckled to a mob, a la slime things, keep on rolling.
return buckled.Move(a, b)
else
else //Otherwise, no running around for you.
return 0
if (restrained())

View File

@@ -37,8 +37,10 @@ var/list/mob_hat_cache = list()
integrated_light_power = 3
local_transmit = 1
can_pull_size = ITEMSIZE_NORMAL
can_pull_size = ITEMSIZE_NO_CONTAINER
can_pull_mobs = MOB_PULL_SMALLER
can_enter_vent_with = list(
/obj)
mob_bump_flag = SIMPLE_ANIMAL
mob_swap_flags = SIMPLE_ANIMAL
@@ -71,13 +73,22 @@ var/list/mob_hat_cache = list()
module_type = /obj/item/weapon/robot_module/drone/construction
hat_x_offset = 1
hat_y_offset = -12
can_pull_size = ITEMSIZE_HUGE
can_pull_mobs = MOB_PULL_SAME
/mob/living/silicon/robot/drone/mining
icon_state = "miningdrone"
item_state = "constructiondrone"
law_type = /datum/ai_laws/mining_drone
module_type = /obj/item/weapon/robot_module/drone/mining
hat_x_offset = 1
hat_y_offset = -12
can_pull_mobs = MOB_PULL_SAME
/mob/living/silicon/robot/drone/New()
..()
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
remove_language("Robot Talk")
add_language("Robot Talk", 0)
@@ -145,18 +156,18 @@ var/list/mob_hat_cache = list()
if(user.a_intent == "help" && istype(W, /obj/item/clothing/head))
if(hat)
user << "<span class='warning'>\The [src] is already wearing \the [hat].</span>"
to_chat(user, "<span class='warning'>\The [src] is already wearing \the [hat].</span>")
return
user.unEquip(W)
wear_hat(W)
user.visible_message("<span class='notice'>\The [user] puts \the [W] on \the [src].</span>")
return
else if(istype(W, /obj/item/borg/upgrade/))
user << "<span class='danger'>\The [src] is not compatible with \the [W].</span>"
to_chat(user, "<span class='danger'>\The [src] is not compatible with \the [W].</span>")
return
else if (istype(W, /obj/item/weapon/crowbar))
user << "<span class='danger'>\The [src] is hermetically sealed. You can't open the case.</span>"
to_chat(user, "<span class='danger'>\The [src] is hermetically sealed. You can't open the case.</span>")
return
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
@@ -164,11 +175,11 @@ var/list/mob_hat_cache = list()
if(stat == 2)
if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
user << "<span class='danger'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>"
to_chat(user, "<span class='danger'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>")
return
if(!allowed(usr))
user << "<span class='danger'>Access denied.</span>"
to_chat(user, "<span class='danger'>Access denied.</span>")
return
user.visible_message("<span class='danger'>\The [user] swipes \his ID card through \the [src], attempting to reboot it.</span>", "<span class='danger'>>You swipe your ID card through \the [src], attempting to reboot it.</span>")
@@ -189,7 +200,7 @@ var/list/mob_hat_cache = list()
if(allowed(usr))
shut_down()
else
user << "<span class='danger'>Access denied.</span>"
to_chat(user, "<span class='danger'>Access denied.</span>")
return
@@ -197,16 +208,16 @@ var/list/mob_hat_cache = list()
/mob/living/silicon/robot/drone/emag_act(var/remaining_charges, var/mob/user)
if(!client || stat == 2)
user << "<span class='danger'>There's not much point subverting this heap of junk.</span>"
to_chat(user, "<span class='danger'>There's not much point subverting this heap of junk.</span>")
return
if(emagged)
src << "<span class='danger'>\The [user] attempts to load subversive software into you, but your hacked subroutines ignore the attempt.</span>"
user << "<span class='danger'>You attempt to subvert [src], but the sequencer has no effect.</span>"
to_chat(user, "<span class='danger'>\The [user] attempts to load subversive software into you, but your hacked subroutines ignore the attempt.</span>")
to_chat(user, "<span class='danger'>You attempt to subvert [src], but the sequencer has no effect.</span>")
return
user << "<span class='danger'>You swipe the sequencer across [src]'s interface and watch its eyes flicker.</span>"
src << "<span class='danger'>You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script.</span>"
to_chat(user, "<span class='danger'>You swipe the sequencer across [src]'s interface and watch its eyes flicker.</span>")
to_chat(user, "<span class='danger'>You feel a sudden burst of malware loaded into your execute-as-root buffer. Your tiny brain methodically parses, loads and executes the script.</span>")
message_admins("[key_name_admin(user)] emagged drone [key_name_admin(src)]. Laws overridden.")
log_game("[key_name(user)] emagged drone [key_name(src)]. Laws overridden.")
@@ -337,3 +348,11 @@ var/list/mob_hat_cache = list()
/mob/living/silicon/robot/drone/construction/updatename()
real_name = "construction drone ([rand(100,999)])"
name = real_name
/mob/living/silicon/robot/drone/mining/init()
..()
flavor_text = "It's a bulky mining drone stamped with a Grayson logo."
/mob/living/silicon/robot/drone/mining/updatename()
real_name = "mining drone ([rand(100,999)])"
name = real_name

View File

@@ -30,6 +30,11 @@
fabricator_tag = "Upper Level Construction"
drone_type = /mob/living/silicon/robot/drone/construction
/obj/machinery/drone_fabricator/mining
name = "mining drone fabricator"
fabricator_tag = "Upper Level Mining"
drone_type = /mob/living/silicon/robot/drone/mining
/obj/machinery/drone_fabricator/New()
..()

View File

@@ -628,7 +628,7 @@
if(!opened)
usr << "You must access the borgs internals!"
else if(!src.module && U.require_module)
usr << "The borg must choose a module before he can be upgraded!"
usr << "The borg must choose a module before it can be upgraded!"
else if(U.locked)
usr << "The upgrade is locked and cannot be used yet!"
else

View File

@@ -31,6 +31,7 @@ var/global/list/robot_modules = list(
var/list/datum/matter_synth/synths = list()
var/obj/item/emag = null
var/obj/item/borg/upgrade/jetpack = null
var/obj/item/borg/upgrade/advhealth = null
var/list/subsystems = list()
var/list/obj/item/borg/upgrade/supported_upgrades = list()
@@ -871,4 +872,17 @@ var/global/list/robot_modules = list(
var/obj/item/device/lightreplacer/LR = locate() in src.modules
LR.Charge(R, amount)
..()
return
return
/obj/item/weapon/robot_module/drone/mining
name = "miner drone module"
channels = list("Supply" = 1)
networks = list(NETWORK_MINE)
/obj/item/weapon/robot_module/drone/mining/New()
..()
src.modules += new /obj/item/borg/sight/material(src)
src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
src.modules += new /obj/item/weapon/storage/bag/ore(src)
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)

View File

@@ -141,7 +141,7 @@
/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R)
..()
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/healthanalyzer/advanced(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/merc(src)
// Surgery things.

View File

@@ -143,6 +143,9 @@ var/const/CE_STABLE_THRESHOLD = 0.5
var/blood_max = 0
var/blood_loss_divisor = 30 //lower factor = more blood loss
// Some species bleed out differently
blood_loss_divisor /= species.bloodloss_rate
// Some modifiers can make bleeding better or worse. Higher multiplers = more bleeding.
var/blood_loss_modifier_multiplier = 1.0
for(var/datum/modifier/M in modifiers)

View File

@@ -41,7 +41,12 @@ var/list/fusion_cores = list()
/obj/machinery/power/fusion_core/process()
if((stat & BROKEN) || !powernet || !owned_field)
Shutdown()
if(owned_field)
spawn(1)
owned_field.stability_monitor()
owned_field.radiation_scale()
owned_field.temp_dump()
owned_field.temp_color()
/obj/machinery/power/fusion_core/Topic(href, href_list)
if(..())
return 1

View File

@@ -1,4 +1,6 @@
#define FUSION_ENERGY_PER_K 20
#define FUSION_MAX_ENVIRO_HEAT 5000 //raise this if you want the reactor to dump more energy into the atmosphere
#define PLASMA_TEMP_RADIATION_DIVISIOR 15 //radiation divisior. plasma temp / divisor = radiation.
/obj/effect/fusion_em_field
name = "electromagnetic field"
@@ -7,7 +9,7 @@
icon_state = "emfield_s1"
alpha = 50
layer = 4
light_color = COLOR_BLUE
light_color = "#cc7700"
var/size = 1
var/energy = 0
@@ -16,6 +18,7 @@
var/field_strength = 0.01
var/tick_instability = 0
var/percent_unstable = 0
var/stable = 1
var/obj/machinery/power/fusion_core/owned_core
var/list/dormant_reactant_quantities = list()
@@ -33,8 +36,8 @@
var/light_min_range = 2
var/light_min_power = 3
var/light_max_range = 10
var/light_max_power = 10
var/light_max_range = 5
var/light_max_power = 5
var/last_range
var/last_power
@@ -173,8 +176,6 @@
check_instability()
Radiate()
if(radiation)
radiation_repository.radiate(src, radiation)
return 1
/obj/effect/fusion_em_field/proc/check_instability()
@@ -200,9 +201,10 @@
var/flare
var/fuel_loss
var/rupture
if(percent_unstable < 0.7)
if(percent_unstable < 0.2)
visible_message("<span class='danger'>\The [src] ripples uneasily, like a disturbed pond.</span>")
fuel_loss = prob(5)
flare = prob(50)
else if(percent_unstable < 0.9)
visible_message("<span class='danger'>\The [src] undulates violently, shedding plumes of plasma!</span>")
flare = prob(50)
@@ -238,6 +240,7 @@
set_light(15, 15, "#CCCCFF")
empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
sleep(5)
global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
RadiateAll()
explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows.
return
@@ -318,12 +321,6 @@
tick_instability += rand(15,30)
AM.emp_act(empsev)
if(owned_core && owned_core.loc)
var/datum/gas_mixture/environment = owned_core.loc.return_air()
if(environment && environment.temperature < (T0C+1000)) // Putting an upper bound on it to stop it being used in a TEG.
environment.add_thermal_energy(plasma_temperature*20000)
radiation = 0
/obj/effect/fusion_em_field/proc/change_size(var/newsize = 1)
var/changed = 0
switch(newsize)
@@ -490,5 +487,59 @@
AddEnergy(Proj.damage)
update_icon()
return 0
//All procs below this point are called in _core.dm, starting at line 41.
//Stability monitoring. Gives radio annoucements if field stability is below 80%
/obj/effect/fusion_em_field/proc/stability_monitor()
var/warnpoint = 0.10
var/warnmessage = "Warning! Field unstable! Instability at [percent_unstable * 100]%, plasma temperature at [plasma_temperature + 295]k."
var/stablemessage = "Containment field returning to stable conditions."
#undef FUSION_HEAT_CAP
if(percent_unstable >= warnpoint)
global_announcer.autosay(warnmessage, "Field Stability Monitor", "Engineering")
stable = 0
sleep(20 SECONDS)
return
if(percent_unstable < warnpoint && stable == 0)
global_announcer.autosay(stablemessage, "Field Stability Monitor", "Engineering")
stable = 1
return
//Reaction radiation is fairly buggy and there's at least three procs dealing with radiation here, this is to ensure constant radiation output.
/obj/effect/fusion_em_field/proc/radiation_scale()
radiation_repository.radiate(src, 2 + plasma_temperature / PLASMA_TEMP_RADIATION_DIVISIOR)
//Somehow fixing the radiation issue managed to break this, but moving it to it's own proc seemed to have fixed it. I don't know.
/obj/effect/fusion_em_field/proc/temp_dump()
if(owned_core && owned_core.loc)
var/datum/gas_mixture/environment = owned_core.loc.return_air()
if(environment && environment.temperature < (T0C+FUSION_MAX_ENVIRO_HEAT))
environment.add_thermal_energy(plasma_temperature*20000)
//Temperature changes depending on color.
/obj/effect/fusion_em_field/proc/temp_color()
if(plasma_temperature > 60000) //high ultraviolet - magenta
light_color = "#cc005f"
light_max_range = 25
light_max_power = 10
else if(plasma_temperature > 12000) //ultraviolet - blue
light_color = "#1b00cc"
light_max_range = 20
light_max_power = 10
else if(plasma_temperature > 8000) //nearing ultraviolet - cyan
light_color = "#00cccc"
light_max_range = 15
light_max_power = 10
else if(plasma_temperature > 4000) // green
light_color = "#1ab705"
light_max_range = 10
light_max_power = 10
else if(plasma_temperature <= 4000) //orange
light_color = "#cc7700"
light_max_range = 5
light_max_power = 5
return
#undef FUSION_HEAT_CAP
#undef FUSION_MAX_ENVIRO_HEAT
#undef PLASMA_TEMP_RADIATION_DIVISIOR

View File

@@ -48,14 +48,13 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy)
s_react = "deuterium"
energy_consumption = 1
energy_production = 2
// Advanced production reactions (todo)
/decl/fusion_reaction/deuterium_helium
p_react = "deuterium"
s_react = "helium-3"
energy_consumption = 1
energy_production = 5
radiation = 2
/decl/fusion_reaction/deuterium_tritium
p_react = "deuterium"
@@ -64,7 +63,6 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy)
energy_production = 1
products = list("helium-3" = 1)
instability = 0.5
radiation = 3
/decl/fusion_reaction/deuterium_lithium
p_react = "deuterium"

View File

@@ -0,0 +1,8 @@
//Additional fusion reagents. These likely don't have any other use aside from the RUST, but if you want to make stuff with 'em, be my guest.
/datum/reagent/helium3
name = "helium-3"
description = "A colorless, odorless, tasteless and generally inert gas used in fusion reactors. Non-radioactive."
id = "helium-3"
reagent_state = GAS
color = "#808080"

View File

@@ -1,7 +1,7 @@
// It.. uses a lot of power. Everything under power is engineering stuff, at least.
/obj/machinery/computer/gravity_control_computer
name = "Gravity Generator Control"
name = "gravity generator control"
desc = "A computer to control a local gravity generator. Qualified personnel only."
icon_state = "airtunnel0e"
anchored = 1
@@ -10,7 +10,7 @@
/obj/machinery/gravity_generator/
name = "Gravitational Generator"
name = "gravitational generator"
desc = "A device which produces a gravaton field when set up."
icon = 'icons/obj/singularity.dmi'
icon_state = "TheSingGen"
@@ -94,7 +94,7 @@
else
dat += "<tt><font color=red>[A]</tt></font><br>"
dat += "<br><tt>Maintainence Functions:</tt><br>"
dat += "<br><tt>Maintenance Functions:</tt><br>"
if(gravity_generator:on)
dat += "<a href='byond://?src=\ref[src];gentoggle=1'><font color=red> TURN GRAVITY GENERATOR OFF. </font></a>"
else

View File

@@ -29,7 +29,8 @@
//Placeholder for effect that trigger on eating that aren't tied to reagents.
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
if(!usr) return
if(!usr)
usr = M
if(!reagents.total_volume)
M.visible_message("<span class='notice'>[M] finishes eating \the [src].</span>","<span class='notice'>You finish eating \the [src].</span>")
usr.drop_from_inventory(src) //so icons update :[
@@ -224,7 +225,7 @@
return
user.visible_message("<b>[user]</b> nibbles away at \the [src].","You nibble away at \the [src].")
bitecount++
if(reagents && user.reagents)
if(reagents)
reagents.trans_to_mob(user, bitesize, CHEM_INGEST)
spawn(5)
if(!src && !user.client)

View File

@@ -15,57 +15,55 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
return
New()
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
R.my_atom = src
if (!possible_transfer_amounts)
src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
..()
/obj/structure/reagent_dispensers/New()
var/datum/reagents/R = new/datum/reagents(5000)
reagents = R
R.my_atom = src
if (!possible_transfer_amounts)
src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
..()
examine(mob/user)
if(!..(user, 2))
/obj/structure/reagent_dispensers/examine(mob/user)
if(!..(user, 2))
return
user << "<span class='notice'>It contains:</span>"
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
user << "<span class='notice'>[R.volume] units of [R.name]</span>"
else
user << "<span class='notice'>Nothing.</span>"
/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
set category = "Object"
set src in view(1)
var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
if (N)
amount_per_transfer_from_this = N
/obj/structure/reagent_dispensers/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
user << "<span class='notice'>It contains:</span>"
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
user << "<span class='notice'>[R.volume] units of [R.name]</span>"
else
user << "<span class='notice'>Nothing.</span>"
verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
set category = "Object"
set src in view(1)
var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
if (N)
amount_per_transfer_from_this = N
ex_act(severity)
switch(severity)
if(1.0)
if(2.0)
if (prob(50))
new /obj/effect/effect/water(src.loc)
qdel(src)
return
if(2.0)
if (prob(50))
new /obj/effect/effect/water(src.loc)
qdel(src)
return
if(3.0)
if (prob(5))
new /obj/effect/effect/water(src.loc)
qdel(src)
return
else
return
if(3.0)
if (prob(5))
new /obj/effect/effect/water(src.loc)
qdel(src)
return
else
return
/obj/structure/reagent_dispensers/blob_act()
qdel(src)
//Dispensers
/obj/structure/reagent_dispensers/watertank
name = "watertank"
@@ -73,16 +71,19 @@
icon = 'icons/obj/objects.dmi'
icon_state = "watertank"
amount_per_transfer_from_this = 10
New()
..()
reagents.add_reagent("water",1000)
/obj/structure/reagent_dispensers/watertank/high/New()
/obj/structure/reagent_dispensers/watertank/New()
..()
reagents.add_reagent("water", 1000)
/obj/structure/reagent_dispensers/watertank/high
name = "high-capacity water tank"
desc = "A highly-pressurized water tank made to hold vast amounts of water.."
icon_state = "watertank_high"
/obj/structure/reagent_dispensers/watertank/high/New()
..()
reagents.add_reagent("water",4000)
reagents.add_reagent("water", 4000)
/obj/structure/reagent_dispensers/fueltank
name = "fueltank"
@@ -92,9 +93,10 @@
amount_per_transfer_from_this = 10
var/modded = 0
var/obj/item/device/assembly_holder/rig = null
New()
..()
reagents.add_reagent("fuel",1000)
/obj/structure/reagent_dispensers/fueltank/New()
..()
reagents.add_reagent("fuel",1000)
/obj/structure/reagent_dispensers/fueltank/examine(mob/user)
if(!..(user, 2))
@@ -201,9 +203,10 @@
anchored = 1
density = 0
amount_per_transfer_from_this = 45
New()
..()
reagents.add_reagent("condensedcapsaicin",1000)
/obj/structure/reagent_dispensers/peppertank/New()
..()
reagents.add_reagent("condensedcapsaicin",1000)
/obj/structure/reagent_dispensers/water_cooler
@@ -347,9 +350,10 @@
icon = 'icons/obj/objects.dmi'
icon_state = "beertankTEMP"
amount_per_transfer_from_this = 10
New()
..()
reagents.add_reagent("beer",1000)
/obj/structure/reagent_dispensers/beerkeg/New()
..()
reagents.add_reagent("beer",1000)
/obj/structure/reagent_dispensers/beerkeg/fakenuke
name = "nuclear beer keg"
@@ -365,9 +369,9 @@
amount_per_transfer_from_this = 10
anchored = 1
New()
..()
reagents.add_reagent("virusfood", 1000)
/obj/structure/reagent_dispensers/virusfood/New()
..()
reagents.add_reagent("virusfood", 1000)
/obj/structure/reagent_dispensers/acid
name = "Sulphuric Acid Dispenser"
@@ -377,6 +381,6 @@
amount_per_transfer_from_this = 10
anchored = 1
New()
..()
reagents.add_reagent("sacid", 1000)
/obj/structure/reagent_dispensers/acid/New()
..()
reagents.add_reagent("sacid", 1000)

View File

@@ -752,7 +752,7 @@ other types of metals and chemistry for reagents).
sort_string = "VABAI"
/datum/design/item/communicator
name = "Communcator"
name = "Communicator"
id = "communicator"
req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 500)

View File

@@ -332,6 +332,13 @@
materials = list(DEFAULT_WALL_MATERIAL = 7500, "phoron" = 11250, "uranium" = 15000)
build_path = /obj/item/borg/upgrade/jetpack
/datum/design/item/prosfab/robot_upgrade/advhealth
name = "Advanced Health Analyzer Module"
desc = "An advanced health analyzer suitable for diagnosing more serious injuries."
id = "borg_advhealth_module"
materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 6500, "diamond" = 350)
build_path = /obj/item/borg/upgrade/advhealth
/datum/design/item/prosfab/robot_upgrade/syndicate
name = "Scrambled Equipment Module"
desc = "Allows for the construction of lethal upgrades for cyborgs."