Merge pull request #10450 from datlo/toxinstechdisk

Add toxins technology research and the Bluespace RPD
This commit is contained in:
variableundefined
2018-12-24 09:20:52 +08:00
committed by GitHub
12 changed files with 135 additions and 10 deletions
+20
View File
@@ -9,6 +9,9 @@ var/list/doppler_arrays = list()
anchored = 1
atom_say_verb = "states coldly"
var/list/logged_explosions = list()
var/explosion_target
var/datum/tech/toxins/toxins_tech
var/max_toxins_tech = 7
/datum/explosion_log
var/logged_time
@@ -26,6 +29,8 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array/New()
..()
doppler_arrays += src
explosion_target = rand(8, 20)
toxins_tech = new /datum/tech/toxins(src)
/obj/machinery/doppler_array/Destroy()
doppler_arrays -= src
@@ -46,6 +51,10 @@ var/list/doppler_arrays = list()
power_change()
to_chat(user, "<span class='notice'>You unfasten [src].</span>")
playsound(loc, I.usesound, 50, 1)
if(istype(I, /obj/item/disk/tech_disk))
var/obj/item/disk/tech_disk/disk = I
disk.load_tech(toxins_tech)
to_chat(user, "<span class='notice'>You swipe the disk into [src].</span>")
else
return ..()
@@ -142,6 +151,15 @@ var/list/doppler_arrays = list()
messages += "Theoretical: Epicenter radius: [orig_dev_range]. Outer radius: [orig_heavy_range]. Shockwave radius: [orig_light_range]."
logged_explosions.Insert(1, new /datum/explosion_log(station_time_timestamp(), "[x0],[y0]", "[devastation_range], [heavy_impact_range], [light_impact_range]", capped ? "[orig_dev_range], [orig_heavy_range], [orig_light_range]" : "n/a")) //Newer logs appear first
messages += "Event successfully logged in internal database."
var/miss_by = abs(explosion_target - orig_light_range)
var/tmp_tech = max_toxins_tech - miss_by
if(!miss_by)
messages += "Explosion size matches target."
else
messages += "Target ([explosion_target]) missed by : [miss_by]."
if(tmp_tech > toxins_tech.level)
toxins_tech.level = tmp_tech
messages += "Toxins technology level upgraded to [toxins_tech.level]. Swipe a technology disk to save data."
for(var/message in messages)
atom_say(message)
@@ -174,6 +192,8 @@ var/list/doppler_arrays = list()
"actual_size_message" = E.actual_size_message,
"theoretical_size_message" = E.theoretical_size_message,
"unique_datum_id" = E.UID()))
data["explosion_target"] = explosion_target
data["toxins_tech"] = toxins_tech.level
data["explosion_data"] = explosion_data
data["printing"] = active_timers
return data
+23 -3
View File
@@ -30,6 +30,9 @@
var/whatdpipe = PIPE_DISPOSALS_STRAIGHT //What kind of disposals pipe is it?
var/spawndelay = RPD_COOLDOWN_TIME
var/walldelay = RPD_WALLBUILD_TIME
var/ranged = FALSE
var/primary_sound = 'sound/machines/click.ogg'
var/alt_sound = null
/obj/item/rpd/New()
..()
@@ -41,11 +44,24 @@
QDEL_NULL(spark_system)
return ..()
/obj/item/rpd/bluespace
name = "bluespace rapid pipe dispenser"
desc = "This device can rapidly dispense atmospherics and disposals piping, manipulate loose piping, and recycle any detached pipes it is applied to, at any range."
icon_state = "brpd"
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500, MAT_SILVER = 3000)
origin_tech = "engineering=4;materials=2;bluespace=3"
ranged = TRUE
primary_sound = 'sound/items/PSHOOM.ogg'
alt_sound = 'sound/items/PSHOOM_2.ogg'
//Procs
/obj/item/rpd/proc/activate_rpd(delay) //Maybe makes sparks and activates cooldown if there is a delay
playsound(loc, "sound/machines/click.ogg", 50, 1)
if(prob(15))
if(alt_sound && prob(3))
playsound(src, alt_sound, 50, 1)
else
playsound(src, primary_sound, 50, 1)
if(prob(15) && !ranged)
spark_system.start()
if(delay)
lastused = world.time
@@ -188,7 +204,7 @@ var/list/pipemenu = list(
..()
if(loc != user)
return
if(!proximity)
if(!proximity && !ranged)
return
if(world.time < lastused + spawndelay)
return
@@ -201,6 +217,8 @@ var/list/pipemenu = list(
if(target.rpd_act(user, src) == TRUE)
// If the object we are clicking on has a valid RPD interaction for just that specific object, do that and nothing else.
// Example: clicking on a pipe with a RPD in rotate mode should rotate that pipe and ignore everything else on the tile.
if(ranged)
user.Beam(T, icon_state="rped_upgrade", icon='icons/effects/effects.dmi', time=5)
return
// If we get this far, we have to check every object in the tile, to make sure that none of them block RPD usage on this tile.
@@ -212,6 +230,8 @@ var/list/pipemenu = list(
return
// If we get here, then we're effectively acting on the turf, probably placing a pipe.
if(ranged) //woosh beam if bluespaced at a distance
user.Beam(T,icon_state="rped_upgrade", icon='icons/effects/effects.dmi', time=5)
T.rpd_act(user, src)
#undef RPD_COOLDOWN_TIME
@@ -27,6 +27,9 @@
to_chat(user, text("<span class='danger'>The meter on the [src.name] indicates you are almost out of air!</span>"))
//playsound(usr, 'sound/effects/alert.ogg', 50, 1)
obj/item/tank/oxygen/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
@@ -142,11 +145,19 @@
to_chat(user, text("<span class='danger'>The meter on the [src.name] indicates you are almost out of air!</span>"))
user << sound('sound/effects/alert.ogg')
obj/item/tank/emergency_oxygen/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
volume = 6
obj/item/tank/emergency_oxygen/engi/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/emergency_oxygen/syndi
name = "suspicious emergency oxygen tank"
icon_state = "emergency_syndi"
@@ -158,6 +169,10 @@
icon_state = "emergency_double"
volume = 10
obj/item/tank/emergency_oxygen/double/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/emergency_oxygen/double/full
name = "pressurized double emergency oxygen tank"
desc = "Used for \"emergencies,\" it actually contains a fair amount of oxygen."
+6 -5
View File
@@ -170,12 +170,13 @@
/turf/simulated/wall/rpd_act(mob/user, obj/item/rpd/our_rpd)
if(our_rpd.mode == RPD_ATMOS_MODE)
playsound(src, "sound/weapons/circsawhit.ogg", 50, 1)
user.visible_message("<span class='notice'>[user] starts drilling a hole in [src]...</span>", "<span class='notice'>You start drilling a hole in [src]...</span>", "<span class='warning'>You hear drilling.</span>")
if(!do_after(user, our_rpd.walldelay, target = src)) //Drilling into walls takes time
return
if(!our_rpd.ranged)
playsound(src, "sound/weapons/circsawhit.ogg", 50, 1)
user.visible_message("<span class='notice'>[user] starts drilling a hole in [src]...</span>", "<span class='notice'>You start drilling a hole in [src]...</span>", "<span class='warning'>You hear drilling.</span>")
if(!do_after(user, our_rpd.walldelay, target = src)) //Drilling into walls takes time
return
our_rpd.create_atmos_pipe(user, src)
else if(our_rpd.mode == RPD_DISPOSALS_MODE)
else if(our_rpd.mode == RPD_DISPOSALS_MODE && !our_rpd.ranged)
return
else
..()
@@ -80,3 +80,13 @@
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/radio/beacon
category = list("Bluespace")
/datum/design/rpd
name = "Bluespace Rapid Pipe Dispenser (BRPD)"
desc = "Similar to the Rapid Pipe Dispenser, lets you rapidly dispense pipes. Now at long range!"
req_tech = list("bluespace" = 3, "toxins" = 6)
id = "brpd"
build_type = PROTOLATHE
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500, MAT_SILVER = 3000)
build_path = /obj/item/rpd/bluespace
category = list("Bluespace")
@@ -101,11 +101,21 @@
build_path = /obj/item/bikehorn/airhorn
category = list("Equipment")
/datum/design/breath_mask
name = "Breath mask"
desc = "A close-fitting mask that can be connected to an air supply."
id = "breathmask"
req_tech = list("toxins" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 300, MAT_GLASS = 200)
build_path = /obj/item/clothing/mask/breath
category = list("Equipment")
/datum/design/welding_mask
name = "Welding Gas Mask"
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
id = "weldingmask"
req_tech = list("materials" = 2, "engineering" = 3)
req_tech = list("materials" = 2, "engineering" = 3, "toxins" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
build_path = /obj/item/clothing/mask/gas/welding
+41 -1
View File
@@ -80,7 +80,7 @@
materials = list(MAT_METAL=500, MAT_GLASS=50)
build_path = /obj/item/clothing/mask/muzzle/safety/shock
category = list("Miscellaneous")
/datum/design/data_disk
name = "Genetics Data Disk"
desc = "Disk that allows you to store genetic data."
@@ -90,3 +90,43 @@
materials = list(MAT_METAL=300, MAT_GLASS=100)
build_path = /obj/item/disk/data
category = list("Miscellaneous")
/datum/design/emergency_oxygen
name = "Empty Emergency Oxygen Tank"
desc = "Used for emergencies. Onl contains very little oxygen once filled up."
id = "emergencyoxygen"
req_tech = list("toxins" = 3)
build_type = PROTOLATHE
materials = list(MAT_METAL=500, MAT_GLASS=100)
build_path = /obj/item/tank/emergency_oxygen/empty
category = list("Miscellaneous")
/datum/design/extended_oxygen
name = "Empty Extended Emergency Oxygen Tank"
desc = "Used for emergencies. Can contain a decent amount of oxygen once filled up."
id = "extendedoxygen"
req_tech = list("toxins" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL=800, MAT_GLASS=100)
build_path = /obj/item/tank/emergency_oxygen/engi/empty
category = list("Miscellaneous")
/datum/design/double_oxygen
name = "Empty Double Emergency Oxygen Tank"
desc = "Used for emergencies. Can contain a good amount of oxygen once filled up."
id = "doubleoxygen"
req_tech = list("toxins" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL=1500, MAT_GLASS=200)
build_path = /obj/item/tank/emergency_oxygen/double/empty
category = list("Miscellaneous")
/datum/design/oxygen_tank
name = "Empty Oxygen Tank"
desc = "A large, empty air tank."
id = "oxygentank"
req_tech = list("toxins" = 5)
build_type = PROTOLATHE
materials = list(MAT_METAL=3000, MAT_GLASS=500)
build_path = /obj/item/tank/oxygen/empty
category = list("Miscellaneous")
+7
View File
@@ -271,6 +271,13 @@ research holder datum.
id = "programming"
max_level = 7
/datum/tech/toxins //not meant to be raised by deconstruction, do not give objects toxins as an origin_tech
name = "Toxins Research"
desc = "Research into plasma based explosive devices. Upgrade through testing explosives in the toxins lab."
id = "toxins"
max_level = 7
rare = 2
/datum/tech/syndicate
name = "Illegal Technologies Research"
desc = "The study of technologies that violate standard Nanotrasen regulations."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

+2
View File
@@ -1,3 +1,5 @@
<h2>Shift's target : {{:data.explosion_target}}</h2>
<h2>Current Technology Level : {{:data.toxins_tech}}</h2>
<h2>Logged explosions:</h2>
{{if data.explosion_data == 0}}
<p>No explosions logged this shift.</p>