Merge branch 'master' into turn-both-keys

Conflicts:
	tgui/assets/tgui.js
This commit is contained in:
Jack Edge
2016-07-09 12:22:03 +01:00
59 changed files with 826 additions and 218 deletions
@@ -30,6 +30,8 @@
var/datum/gas_mixture/air
var/obj/effect/hotspot/active_hotspot
var/atmos_cooldown = 0
var/planetary_atmos = FALSE //air will revert to initial_gas_mix over time
var/list/atmos_overlay_types = list() //gas IDs of current active gas overlays
@@ -129,6 +131,9 @@
var/list/adjacent_turfs = atmos_adjacent_turfs
var/datum/excited_group/our_excited_group = excited_group
var/adjacent_turfs_length = adjacent_turfs.len
atmos_cooldown++
if (planetary_atmos)
adjacent_turfs_length++
for(var/t in adjacent_turfs)
var/turf/open/enemy_tile = t
@@ -179,6 +184,18 @@
/******************* GROUP HANDLING FINISH *********************************************************************/
if (planetary_atmos) //share our air with the "atmosphere" "above" the turf
var/datum/gas_mixture/G = new
G.copy_from_turf(src)
G.archive()
if(air.compare(G))
if(!our_excited_group)
var/datum/excited_group/EG = new
EG.add_turf(src)
our_excited_group = excited_group
air.share(G, adjacent_turfs_length)
last_share_check()
air.react()
update_visuals()
@@ -193,9 +210,12 @@
if(consider_superconductivity(starting = 1))
remove = 0
if (atmos_cooldown > EXCITED_GROUP_DISMANTLE_CYCLES*2)
SSair.remove_from_active(src)
if(!our_excited_group && remove == 1)
SSair.remove_from_active(src)
/turf/open/proc/share_air(turf/open/T, fire_count, adjacent_turfs_length)
if(T.current_cycle < fire_count)
var/difference = air.share(T.air, adjacent_turfs_length)
@@ -217,8 +237,10 @@
/turf/open/proc/last_share_check()
if(air.last_share > MINIMUM_AIR_TO_SUSPEND)
excited_group.reset_cooldowns()
atmos_cooldown = 0
else if(air.last_share > MINIMUM_MOLES_DELTA_TO_MOVE)
excited_group.dismantle_cooldown = 0
atmos_cooldown = 0
/turf/open/proc/high_pressure_movements()
for(var/atom/movable/M in src)
@@ -295,6 +317,7 @@
for(var/t in turf_list)
var/turf/open/T = t
T.air.copy_from(A)
T.atmos_cooldown = 0
T.update_visuals()
breakdown_cooldown = 0
@@ -41,8 +41,9 @@ var/global/dmm_suite/preloader/_preloader = new
var/list/grid_models = list()
var/key_len = 0
dmmRegex.next = 1
while(dmmRegex.Find(tfile, dmmRegex.next))
var/stored_index = 1
while(dmmRegex.Find(tfile, stored_index))
stored_index = dmmRegex.next
// "aa" = (/type{vars=blah})
if(dmmRegex.group[1]) // Model
@@ -88,6 +88,34 @@
jetpack = new jetpack(src)
..()
/obj/item/clothing/suit/space/hardsuit/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/tank/jetpack/suit))
if(jetpack)
user << "<span class='warning'>[src] already has a jetpack installed.</span>"
return
if(src == user.get_item_by_slot(slot_wear_suit)) //Make sure the player is not wearing the suit before applying the upgrade.
user << "<span class='warning'>You cannot install the upgrade to [src] while wearing it.</span>"
return
if(user.unEquip(I))
jetpack = I
I.loc = src
user << "<span class='notice'>You successfully install the jetpack into [src].</span>"
else if(istype(I, /obj/item/weapon/screwdriver))
if(!jetpack)
user << "<span class='warning'>[src] has no jetpack installed.</span>"
return
if(src == user.get_item_by_slot(slot_wear_suit))
user << "<span class='warning'>You cannot remove the jetpack from [src] while wearing it.</span>"
return
jetpack.turn_off()
jetpack.loc = get_turf(src)
jetpack = null
user << "<span class='notice'>You successfully remove the jetpack from [src].</span>"
/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
..()
if(jetpack)
+5 -11
View File
@@ -1,21 +1,15 @@
/datum/round_event_control/meteor_wave/dust
/datum/round_event_control/space_dust
name = "Minor Space Dust"
typepath = /datum/round_event/meteor_wave/dust
typepath = /datum/round_event/space_dust
weight = 200
max_occurrences = 1000
earliest_start = 0
alertadmins = 0
/datum/round_event/meteor_wave/dust
/datum/round_event/space_dust
startWhen = 1
endWhen = 2
announceWhen = 0
/datum/round_event/meteor_wave/dust/announce()
return
/datum/round_event/meteor_wave/dust/start()
/datum/round_event/space_dust/start()
spawn_meteors(1, meteorsC)
/datum/round_event/meteor_wave/dust/tick()
return
+2
View File
@@ -38,6 +38,8 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
/obj/effect/immovablerod/New(atom/start, atom/end)
..()
if(SSaugury)
SSaugury.register_doom(src, 2000)
z_original = z
destination = end
notify_ghosts("\A [src] is inbound!",
+19
View File
@@ -0,0 +1,19 @@
/datum/round_event_control/meteor_wave/major_dust
name = "Major Space Dust"
typepath = /datum/round_event/meteor_wave/major_dust
weight = 30
/datum/round_event/meteor_wave/major_dust
wave_name = "space dust"
/datum/round_event/meteor_wave/major_dust/announce()
var/reason = pick(
"The station is passing through a debris cloud, expect minor damage \
to external fittings and fixtures.",
"Nanotrasen Superweapons Division is testing a new prototype \
[pick("field","projection","nova","super-colliding","reactive")] \
[pick("cannon","artillery","tank","cruiser","\[REDACTED\]")], \
some mild debris is expected.",
"A neighbouring station is throwing rocks at you. (Perhaps they've \
grown tired of your messages.)")
priority_announce(pick(reason), "Collision Alert")
+5 -6
View File
@@ -1,12 +1,11 @@
/datum/round_event_control/meteor_wave/meaty
name = "Meaty Ore Wave"
name = "Meteor Wave: Meaty"
typepath = /datum/round_event/meteor_wave/meaty
weight = 1
weight = 2
max_occurrences = 1
/datum/round_event/meteor_wave/meaty
wave_name = "meaty"
/datum/round_event/meteor_wave/meaty/announce()
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/meaty/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm
+40 -6
View File
@@ -1,5 +1,7 @@
// Normal strength
/datum/round_event_control/meteor_wave
name = "Meteor Wave"
name = "Meteor Wave: Normal"
typepath = /datum/round_event/meteor_wave
weight = 5
min_players = 5
@@ -10,25 +12,57 @@
endWhen = 66
announceWhen = 1
var/list/wave_type
var/wave_name = "normal"
/datum/round_event/meteor_wave/New()
..()
random_wave_type()
if(!wave_type)
determine_wave_type()
/datum/round_event/meteor_wave/proc/random_wave_type()
var/picked_wave = pickweight(list("normal" = 50, "threatening" = 40, "catastrophic" = 10))
switch(picked_wave)
/datum/round_event/meteor_wave/proc/determine_wave_type()
if(!wave_name)
wave_name = pickweight(list(
"normal" = 50,
"threatening" = 40,
"catastrophic" = 10))
switch(wave_name)
if("normal")
wave_type = meteors_normal
if("threatening")
wave_type = meteors_threatening
if("catastrophic")
wave_type = meteors_catastrophic
if("meaty")
wave_type = meteorsB
if("space dust")
wave_type = meteorsC
else
WARNING("Wave name of [wave_name] not recognised.")
kill()
/datum/round_event/meteor_wave/announce()
priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm
/datum/round_event_control/meteor_wave/threatening
name = "Meteor Wave: Threatening"
typepath = /datum/round_event/meteor_wave/threatening
weight = 4
min_players = 5
max_occurrences = 3
/datum/round_event/meteor_wave/threatening
wave_name = "threatening"
/datum/round_event_control/meteor_wave/catastrophic
name = "Meteor Wave: Catastrophic"
typepath = /datum/round_event/meteor_wave/catastrophic
weight = 1
min_players = 5
max_occurrences = 3
/datum/round_event/meteor_wave/catastrophic
wave_name = "catastrophic"
@@ -161,6 +161,13 @@
bonus_reagents = list("omnizine" = 3)
list_reagents = list("nutriment" = 4, "omnizine" = 3)
/obj/item/weapon/reagent_containers/food/snacks/dankpocket
name = "\improper Dank-pocket"
desc = "The food of choice for the seasoned botanist."
icon_state = "dankpocket"
list_reagents = list("lipolicide" = 3, "space_drugs" = 3, "nutriment" = 4)
filling_color = "#00FF00"
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
name = "fortune cookie"
desc = "A true prophecy in each cookie!"
@@ -102,6 +102,15 @@
result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket
category = CAT_FOOD
/datum/crafting_recipe/food/dankpocket
time = 15
name = "Dankpocket"
reqs = list(
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1,
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/dankpocket
category = CAT_FOOD
////////////////////////////////////////////////MUFFINS////////////////////////////////////////////////
+115
View File
@@ -0,0 +1,115 @@
// Cannabis
/obj/item/seeds/cannabis
name = "pack of cannabis seeds"
desc = "Taxable."
icon = 'goon/icons/obj/hydroponics.dmi'
icon_state = "seed-cannabis"
species = "cannabis"
plantname = "Cannabis Plant"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis
maturation = 8
oneharvest = 0
potency = 20
growthstages = 1
growing_icon = 'goon/icons/obj/hydroponics.dmi'
icon_grow = "cannabis-grow" // Uses one growth icons set for all the subtypes
icon_dead = "cannabis-dead" // Same for the dead icon
mutatelist = list(/obj/item/seeds/cannabis/rainbow,
/obj/item/seeds/cannabis/death,
/obj/item/seeds/cannabis/white,
/obj/item/seeds/cannabis/ultimate)
reagents_add = list("space_drugs" = 0.15, "lipolicide" = 0.35) // gives u the munchies
/obj/item/seeds/cannabis/rainbow
name = "pack of rainbow weed seeds"
desc = "These seeds grow into rainbow weed. Groovy."
icon_state = "seed-megacannabis"
species = "megacannabis"
plantname = "Rainbow Weed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow
mutatelist = list()
reagents_add = list("mindbreaker" = 0.15, "lipolicide" = 0.35)
rarity = 40
/obj/item/seeds/cannabis/death
name = "pack of deathweed seeds"
desc = "These seeds grow into deathweed. Not groovy."
icon_state = "seed-blackcannabis"
species = "blackcannabis"
plantname = "Deathweed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/death
mutatelist = list()
reagents_add = list("cyanide" = 0.35, "space_drugs" = 0.15, "lipolicide" = 0.15)
rarity = 40
/obj/item/seeds/cannabis/white
name = "pack of lifeweed seeds"
desc = "I will give unto him that is munchies of the fountain of the cravings of life, freely."
icon_state = "seed-whitecannabis"
species = "whitecannabis"
plantname = "Lifeweed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/white
mutatelist = list()
reagents_add = list("omnizine" = 0.35, "space_drugs" = 0.15, "lipolicide" = 0.15)
rarity = 40
/obj/item/seeds/cannabis/ultimate
name = "pack of omega weed seeds"
desc = "These seeds grow into omega weed."
icon_state = "seed-ocannabis"
species = "ocannabis"
plantname = "Omega Weed"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/ultimate
mutatelist = list()
reagents_add = list("space_drugs" = 0.03,
"mindbreaker" = 0.03,
"mercury" = 0.015,
"lithium" = 0.015,
"atropine" = 0.015,
"haloperidol" = 0.015,
"methamphetamine" = 0.015,
"capsaicin" = 0.015,
"barbers_aid" = 0.015,
"bath_salts" = 0.015,
"itching_powder" = 0.015,
"crank" = 0.015,
"krokodil" = 0.015,
"histamine" = 0.015,
"lipolicide" = 0.015)
rarity = 69
// ---------------------------------------------------------------
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis
seed = /obj/item/seeds/cannabis
icon = 'goon/icons/obj/hydroponics.dmi'
name = "cannabis leaf"
desc = "Recently legalized in most galaxies."
icon_state = "cannabis"
filling_color = "#00FF00"
bitesize_mod = 2
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow
seed = /obj/item/seeds/cannabis/rainbow
desc = "Is it supposed to be glowing like that...?"
icon_state = "megacannabis"
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/death
seed = /obj/item/seeds/cannabis/death
desc = "Looks a bit dark. Oh well."
icon_state = "blackcannabis"
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/white
seed = /obj/item/seeds/cannabis/white
desc = "It feels smooth and nice to the touch."
icon_state = "whitecannabis"
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/ultimate
seed = /obj/item/seeds/cannabis/ultimate
desc = "You feel dizzy looking at it. What the fuck?"
icon_state = "ocannabis"
volume = 69
-22
View File
@@ -441,28 +441,6 @@
icon = 'icons/obj/mining.dmi'
icon_state = "xeno_warning"
/******************Hardsuit Jetpack Upgrade*******************/
/obj/item/hardsuit_jetpack
name = "hardsuit jetpack upgrade"
icon_state = "jetpack_upgrade"
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
origin_tech = "materials=4;magnets=4;engineering=5"
// Same as jetpack implant minus biotech, makes sense.
/obj/item/hardsuit_jetpack/afterattack(var/obj/item/clothing/suit/space/hardsuit/S, mob/user)
..()
if(!istype(S))
user << "<span class='warning'>This upgrade can only be applied to a hardsuit.</span>"
else if(S.jetpack)
user << "<span class='warning'>[S] already has a jetpack installed.</span>"
else if(S == user.get_item_by_slot(slot_wear_suit)) //Make sure the player is not wearing the suit before applying the upgrade.
user << "<span class='warning'>You cannot install the upgrade to [S] while wearing it.</span>"
else
S.jetpack = new /obj/item/weapon/tank/jetpack/suit(S)
user << "<span class='notice'>You successfully install the jetpack into [S].</span>"
qdel(src)
/*********************Hivelord stabilizer****************/
/obj/item/weapon/hivelordstabilizer
+2 -2
View File
@@ -33,7 +33,7 @@
new /datum/data/mining_equipment("Fulton Pack", /obj/item/weapon/extraction_pack, 1000),
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000),
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1000),
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/hardsuit_jetpack, 2000),
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/weapon/tank/jetpack/suit, 2000),
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
@@ -94,7 +94,7 @@
else
dat += "No ID inserted. <A href='?src=\ref[src];choice=insert'>Insert ID.</A><br>"
dat += "</div>"
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='200'>"
dat += "<br><b>Equipment point cost list:</b><BR><table border='0' width='300'>"
for(var/datum/data/mining_equipment/prize in prize_list)
dat += "<tr><td>[prize.equipment_name]</td><td>[prize.cost]</td><td><A href='?src=\ref[src];purchase=\ref[prize]'>Purchase</A></td></tr>"
dat += "</table>"
+5 -2
View File
@@ -487,11 +487,10 @@
if(3)
return
if(2)
if (prob(20))
if(prob(20))
src.gets_dug()
if(1)
src.gets_dug()
return
/turf/open/floor/plating/asteroid/attackby(obj/item/weapon/W, mob/user, params)
//note that this proc does not call ..()
@@ -619,10 +618,12 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface
initial_gas_mix = "o2=14;n2=23;TEMP=300"
planetary_atmos = TRUE
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
/turf/open/chasm/straight_down/lava_land_surface
initial_gas_mix = "o2=14;n2=23;TEMP=300"
planetary_atmos = TRUE
baseturf = /turf/open/chasm/straight_down/lava_land_surface
/turf/open/chasm/straight_down/lava_land_surface/normal_air
@@ -677,6 +678,7 @@
/turf/open/floor/plating/lava/smooth/lava_land_surface
initial_gas_mix = "o2=14;n2=23;TEMP=300"
planetary_atmos = TRUE
baseturf = /turf/open/chasm/straight_down/lava_land_surface
/turf/closed/mineral/gibtonite/volcanic
@@ -762,6 +764,7 @@
baseturf = /turf/open/floor/plating/ash //I assume this will be a chasm eventually, once this becomes an actual surface
slowdown = 1
initial_gas_mix = "o2=14;n2=23;TEMP=300"
planetary_atmos = TRUE
/turf/open/floor/plating/ash/New()
pixel_y = -4
+3 -3
View File
@@ -57,10 +57,10 @@ var/list/image/ghost_images_simple = list() //this is a list of all ghost images
/mob/dead/observer/New(mob/body)
verbs += /mob/dead/observer/proc/dead_tele
if(global.cross_allowed)
verbs += /mob/dead/observer/proc/server_hop
ghostimage = image(src.icon,src,src.icon_state)
if(icon_state in ghost_forms_with_directions_list)
ghostimage_default = image(src.icon,src,src.icon_state + "_nodir")
@@ -563,7 +563,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set desc= "Jump to the other server"
if (alert(src, "Jump to server running at [global.cross_address]?", "Server Hop", "Yes", "No") != "Yes")
return 0
if (client && global.cross_allowed)
if (client && global.cross_allowed)
src << "<span class='notice'>Sending you to [global.cross_address].</span>"
winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources
client << link(global.cross_address)
@@ -18,7 +18,7 @@
if(ancestor_name)
name = ancestor_name
if(ancestor_chain > 1)
name += " [num2roman(ancestor_chain)]"
name += " \Roman[ancestor_chain]"
else
if(prob(5))
name = pick(rare_pet_monkey_names)
@@ -134,6 +134,9 @@
temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create. \
\nYou yourself are one of these servants, and will be able to utilize almost anything they can, excluding a clockwork slab.</b>"
/mob/living/simple_animal/drone/cogscarab/binarycheck()
return FALSE
/mob/living/simple_animal/drone/cogscarab/update_drone_hack()
return //we don't get hacked or give a shit about it
@@ -107,7 +107,7 @@ Difficulty: Medium
last_legion = FALSE
break
if(last_legion)
src.loot = list(/obj/item/weapon/staff_of_storms)
src.loot = list(/obj/item/weapon/staff/storm)
else if(prob(5))
src.loot = list(/obj/structure/closet/crate/necropolis/tendril)
..()
@@ -124,7 +124,7 @@ Difficulty: Medium
//Loot
/obj/item/weapon/staff_of_storms
/obj/item/weapon/staff/storm
name = "staff of storms"
desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
icon_state = "staffofstorms"
@@ -138,7 +138,7 @@ Difficulty: Medium
hitsound = 'sound/weapons/sear.ogg'
var/storm_cooldown = 0
/obj/item/weapon/staff_of_storms/attack_self(mob/user)
/obj/item/weapon/staff/storm/attack_self(mob/user)
if(storm_cooldown > world.time)
user << "<span class='warning'>The staff is still recharging!</span>"
return
+17 -3
View File
@@ -1,7 +1,6 @@
/obj/item/weapon/stock_parts/cell
name = "power cell"
desc = "A rechargable electrochemical power cell."
var/ratingdesc
icon = 'icons/obj/power.dmi'
icon_state = "cell"
item_state = "cell"
@@ -17,13 +16,14 @@
var/rigged = 0 // true if rigged to explode
var/chargerate = 100 //how much power is given every tick in a recharger
var/self_recharge = 0 //does it self recharge, over time, or not?
var/ratingdesc = TRUE
/obj/item/weapon/stock_parts/cell/New()
..()
START_PROCESSING(SSobj, src)
charge = maxcharge
ratingdesc = " This one has a power rating of [maxcharge], and you should not swallow it."
desc = desc + ratingdesc
if(ratingdesc)
desc += " This one has a power rating of [maxcharge], and you should not swallow it."
updateicon()
/obj/item/weapon/stock_parts/cell/Destroy()
@@ -264,6 +264,20 @@
/obj/item/weapon/stock_parts/cell/infinite/use()
return 1
/obj/item/weapon/stock_parts/cell/infinite/abductor
name = "void core"
desc = "An alien power cell that produces energy seemingly out of nowhere."
icon = 'icons/obj/abductor.dmi'
icon_state = "cell"
origin_tech = "abductor=5;powerstorage=8;engineering=6"
maxcharge = 50000
rating = 12
ratingdesc = FALSE
/obj/item/weapon/stock_parts/cell/infinite/abductor/update_icon()
return
/obj/item/weapon/stock_parts/cell/potato
name = "potato battery"
desc = "A rechargable starch based power cell."
+150
View File
@@ -0,0 +1,150 @@
// Radioisotope Thermoelectric Generator (RTG)
// Simple power generator that would replace "magic SMES" on various derelicts.
/obj/machinery/power/rtg
name = "radioisotope thermoelectric generator"
desc = "A simple nuclear power generator, used in small outposts to reliably provide power for decades."
icon = 'icons/obj/power.dmi'
icon_state = "rtg"
density = 1
anchored = 1
use_power = 0
// You can buckle someone to RTG, then open its panel. Fun stuff.
can_buckle = TRUE
buckle_lying = FALSE
buckle_requires_restraints = TRUE
var/power_gen = 1000 // Enough to power a single APC. 4000 output with T4 capacitor.
var/board_path = /obj/item/weapon/circuitboard/machine/rtg
var/irradiate = TRUE // RTGs irradiate surroundings, but only when panel is open.
/obj/machinery/power/rtg/New()
..()
var/obj/item/weapon/circuitboard/machine/B = new board_path(null)
B.apply_default_parts(src)
connect_to_network()
/obj/item/weapon/circuitboard/machine/rtg
name = "circuit board (RTG)"
build_path = /obj/machinery/power/rtg
origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it.
/obj/machinery/power/rtg/initialize()
..()
connect_to_network()
/obj/machinery/power/rtg/process()
..()
add_avail(power_gen)
if(panel_open && irradiate)
radiation_pulse(get_turf(src), 2, 3, 6) // Weak but noticeable.
/obj/machinery/power/rtg/RefreshParts()
var/part_level = 0
for(var/obj/item/weapon/stock_parts/SP in component_parts)
part_level += SP.rating
power_gen = initial(power_gen) * part_level
/obj/machinery/power/rtg/attackby(obj/item/I, mob/user, params)
if(exchange_parts(user, I))
return
else if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-open", initial(icon_state), I))
return
else if(default_deconstruction_crowbar(I))
return
return ..()
/obj/machinery/power/rtg/attack_hand(mob/user)
if(can_buckle && isliving(user.pulling) && user.a_intent == "grab" && !has_buckled_mobs())
var/mob/living/L = user.pulling
if(L.buckled)
return
L.loc = src.loc
user_buckle_mob(L, user)
else
..()
/obj/machinery/power/rtg/advanced
desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further."
power_gen = 1250 // 2500 on T1, 10000 on T4.
board_path = /obj/item/weapon/circuitboard/machine/rtg/advanced
/obj/item/weapon/circuitboard/machine/rtg/advanced
name = "circuit board (Advanced RTG)"
build_path = /obj/machinery/power/rtg/advanced
origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3"
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stack/sheet/mineral/uranium = 10,
/obj/item/stack/sheet/mineral/plasma = 5)
// Void Core, power source for Abductor ships and bases.
// Provides a lot of power, but tends to explode when mistreated.
/obj/machinery/power/rtg/abductor
name = "Void Core"
icon = 'icons/obj/abductor.dmi'
icon_state = "core"
desc = "An alien power source that produces energy seemingly out of nowhere."
board_path = /obj/item/weapon/circuitboard/machine/abductor/core
power_gen = 20000 // 280 000 at T1, 400 000 at T4. Starts at T4.
irradiate = FALSE // Green energy!
can_buckle = FALSE
pixel_y = 7
var/going_kaboom = FALSE // Is it about to explode?
/obj/item/weapon/circuitboard/machine/abductor/core
name = "alien board (Void Core)"
build_path = /obj/machinery/power/rtg/abductor
origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8"
req_components = list(
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/cell/infinite/abductor = 1)
def_components = list(
/obj/item/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic,
/obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra)
/obj/machinery/power/rtg/abductor/proc/overload()
if(going_kaboom)
return
going_kaboom = TRUE
visible_message("<span class='danger'>\The [src] lets out an shower of sparks as it starts to lose stability!</span>",\
"<span class='italics'>You hear a loud electrical crack!</span>")
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 5, power_gen * 0.05)
addtimer(GLOBAL_PROC, "explosion", 100, FALSE, get_turf(src), 2, 3, 4, 8) // Not a normal explosion.
/obj/machinery/power/rtg/abductor/bullet_act(obj/item/projectile/Proj)
..()
if(!going_kaboom && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
message_admins("[key_name_admin(Proj.firer)] triggered an Abductor Core explosion via projectile.")
log_game("[key_name(Proj.firer)] triggered an Abductor Core explosion via projectile.")
overload()
/obj/machinery/power/rtg/abductor/blob_act(obj/effect/blob/B)
overload()
/obj/machinery/power/rtg/abductor/ex_act()
if(going_kaboom)
qdel(src)
else
overload()
/obj/machinery/power/rtg/abductor/fire_act()
overload()
/obj/machinery/power/rtg/abductor/tesla_act()
..() //extend the zap
overload()
@@ -605,9 +605,9 @@
toxpwr = 0.5
/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M)
if(!holder.has_reagent("nutriment"))
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(0.5*REM, 0)
M.nutrition = max( M.nutrition - 5 * REAGENTS_METABOLISM, 0)
M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time
M.overeatduration = 0
return ..()
+1 -1
View File
@@ -301,4 +301,4 @@
icon = 'icons/obj/stock_parts.dmi'
icon_state = "capacitor"
desc = "A debug item for research."
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8"
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8;abductor=8"