mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 05:00:55 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into explosive
This commit is contained in:
@@ -136,17 +136,6 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
build_path = /obj/item/weapon/pickaxe/drill
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/plasmacutter
|
||||
name = "Plasma Cutter"
|
||||
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
id = "plasmacutter"
|
||||
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 5000, "$glass" = 1000, "$gold" = 500, "$plasma" = 500)
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/drill_diamond
|
||||
name = "Diamond-Tipped Mining Drill"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
@@ -158,6 +147,28 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/plasmacutter
|
||||
name = "Plasma Cutter"
|
||||
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
|
||||
id = "plasmacutter"
|
||||
req_tech = list("materials" = 2, "plasmatech" = 2, "engineering" = 2, "combat" = 1, "magnets" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 1500, "$glass" = 500, "$plasma" = 200)
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/gun/energy/plasmacutter
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/plasmacutter_adv
|
||||
name = "Advanced Plasma Cutter"
|
||||
desc = "It's an advanced plasma cutter, oh my god."
|
||||
id = "plasmacutter_adv"
|
||||
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3, "combat" = 3, "magnets" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 3000, "$glass" = 1000, "$plasma" = 1000, "$silver" = 500, "$gold" = 100)
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/gun/energy/plasmacutter/adv
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/jackhammer
|
||||
name = "Sonic Jackhammer"
|
||||
desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well, but has high power cost for doing so."
|
||||
@@ -312,9 +323,9 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
name = "Optical Meson Scanners"
|
||||
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
|
||||
id = "mesons"
|
||||
req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 3)
|
||||
req_tech = list("materials" = 3, "magnets" = 2, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 300, "$plasma" = 100)
|
||||
materials = list("$metal" = 200, "$glass" = 300)
|
||||
build_path = /obj/item/clothing/glasses/meson
|
||||
category = list("Equipement")
|
||||
|
||||
|
||||
@@ -386,6 +386,14 @@
|
||||
build_path = /obj/item/device/assembly/prox_sensor
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_dart
|
||||
name = "Box of Foam Darts"
|
||||
id = "foam_dart"
|
||||
build_type = AUTOLATHE
|
||||
materials = list("$metal" = 500)
|
||||
build_path = /obj/item/ammo_box/foambox
|
||||
category = list("initial", "Misc")
|
||||
|
||||
//hacked autolathe recipes
|
||||
/datum/design/flamethrower
|
||||
name = "Flamethrower"
|
||||
@@ -498,3 +506,11 @@
|
||||
materials = list("$metal" = 30000)
|
||||
build_path = /obj/item/ammo_box/c9mm
|
||||
category = list("hacked", "Security")
|
||||
|
||||
/datum/design/spraycan
|
||||
name = "Spraycan"
|
||||
id = "spraycan"
|
||||
build_type = AUTOLATHE
|
||||
materials = list("$metal" = 100, "$glass" = 100)
|
||||
build_path = /obj/item/toy/crayon/spraycan
|
||||
category = list("initial", "Tools")
|
||||
|
||||
@@ -111,6 +111,16 @@
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/chem_dispenser
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/chem_master
|
||||
name = "Machine Design (Chem Master Board)"
|
||||
desc = "The circuit board for a Chem Master 2999."
|
||||
id = "chem_master"
|
||||
req_tech = list("biotech" = 1, "materials" = 2, "programming" = 2)
|
||||
build_type = IMPRINTER
|
||||
materials = list("$glass" = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/chem_master
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/chem_heater
|
||||
name = "Machine Design (Chemical Heater Board)"
|
||||
|
||||
@@ -363,3 +363,14 @@ datum/design/mech_generator_nuclear
|
||||
materials = list("$metal"=10000,"$glass"=1000,"$silver"=500)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
datum/design/mech_plasma_cutter
|
||||
name = "Exosuit Module Design (217-D Heavy Plasma Cutter)"
|
||||
desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles."
|
||||
id = "mech_plasma_cutter"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasma" = 2)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
|
||||
materials = list("$metal" = 1500, "$glass" = 500, "$plasma" = 200)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
@@ -665,6 +665,16 @@
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_holding
|
||||
name = "Cyborg Upgrade (Ore Satchel of Holding)"
|
||||
id = "borg_upgrade_holding"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/soh
|
||||
req_tech = list("engineering" = 5, "materials" = 5, "bluespace" = 3)
|
||||
materials = list("$metal" = 10000, "$gold" = 250, "$uranium" = 500)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_syndicate_module
|
||||
name = "Cyborg Illegal Upgrades Module"
|
||||
desc = "Allows for the construction of restricted upgrades for cyborgs"
|
||||
|
||||
@@ -92,3 +92,95 @@ datum/design/bluespacebodybag
|
||||
reliability = 76
|
||||
build_path = /obj/item/bodybag/bluespace
|
||||
category = list("Medical Designs")
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Cybernetic Implants////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/cyberimp_medical_hud
|
||||
name = "Medical HUD implant"
|
||||
desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control."
|
||||
id = "ci-medhud"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 4)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 100)
|
||||
build_path = /obj/item/cybernetic_implant/eyes/hud/medical
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_security_hud
|
||||
name = "Security HUD implant"
|
||||
desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control."
|
||||
id = "ci-sechud"
|
||||
req_tech = list("materials" = 6, "programming" = 5, "biotech" = 4, "combat" = 2)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 300, "$gold" = 300)
|
||||
build_path = /obj/item/cybernetic_implant/eyes/hud/security
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_xray
|
||||
name = "X-Ray implant"
|
||||
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
|
||||
id = "ci-xray"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6, "magnets" = 5, "plasmatech" = 3)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$uranium" = 500, "$diamond" = 1000)
|
||||
build_path = /obj/item/cybernetic_implant/eyes/xray
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_thermals
|
||||
name = "Thermals implant"
|
||||
desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included."
|
||||
id = "ci-thermals"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "plasmatech" = 3, "syndicate" = 4)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 200, "$gold" = 200, "$plasma" = 200, "$diamond" = 1000)
|
||||
build_path = /obj/item/cybernetic_implant/eyes/thermals
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_antidrop
|
||||
name = "Anti-Drop implant"
|
||||
desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle."
|
||||
id = "ci-antidrop"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 400, "$gold" = 400)
|
||||
build_path = /obj/item/cybernetic_implant/brain/anti_drop
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_antistun
|
||||
name = "CNS Rebooter implant"
|
||||
desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned."
|
||||
id = "ci-antistun"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$silver" = 500, "$gold" = 1000)
|
||||
build_path = /obj/item/cybernetic_implant/brain/anti_stun
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_nutriment
|
||||
name = "Nutriment pump implant"
|
||||
desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
|
||||
id = "ci-nutriment"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 500)
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_nutriment_plus
|
||||
name = "Nutriment pump implant PLUS"
|
||||
desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
|
||||
id = "ci-nutrimentplus"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$gold" = 500, "$uranium" = 750)
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/cyberimp_reviver
|
||||
name = "Reviver implant"
|
||||
desc = "This implant will automatically deliver a therapeutic dose of electrical energy to your heart if it ever stops beating, and inject you with nanites. A second chance!"
|
||||
id = "ci-reviver"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 500, "$gold" = 1000, "$uranium" = 1000, "$diamond" = 2000)
|
||||
category = list("Medical Designs")
|
||||
@@ -166,8 +166,8 @@
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/reciever
|
||||
name = "Modular Reciever"
|
||||
desc = "A prototype modular reciever and trigger assembly for a variety of firearms."
|
||||
name = "Modular Receiver"
|
||||
desc = "A prototype modular receiver and trigger assembly for a variety of firearms."
|
||||
id = "reciever"
|
||||
req_tech = list("combat" = 5, "materials" = 4)
|
||||
build_type = PROTOLATHE
|
||||
|
||||
@@ -92,8 +92,8 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
trackedIan = locate(/mob/living/simple_animal/corgi/Ian) in mob_list
|
||||
trackedRuntime = locate(/mob/living/simple_animal/cat/Runtime) in mob_list
|
||||
trackedIan = locate(/mob/living/simple_animal/pet/corgi/Ian) in mob_list
|
||||
trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in mob_list
|
||||
SetTypeReactions()
|
||||
RefreshParts()
|
||||
|
||||
@@ -326,7 +326,7 @@
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
R.delete()
|
||||
qdel(R)
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='danger'>[src]'s chemical chamber has sprung a leak!</span>")
|
||||
@@ -338,7 +338,7 @@
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
R.delete()
|
||||
qdel(R)
|
||||
ejectItem(TRUE)
|
||||
warn_admins(usr, "[chosenchem] smoke")
|
||||
investigate_log("Experimentor has released <font color='red'>[chosenchem]</font> smoke!", "experimentor")
|
||||
@@ -425,7 +425,7 @@
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
R.delete()
|
||||
qdel(R)
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, shattering [exp_on] and leaking cold air!.</span>")
|
||||
@@ -511,7 +511,7 @@
|
||||
trackedIan.loc = src.loc
|
||||
investigate_log("Experimentor has stolen Ian!", "experimentor") //...if anyone ever fixes it...
|
||||
else
|
||||
new /mob/living/simple_animal/corgi(src.loc)
|
||||
new /mob/living/simple_animal/pet/corgi(src.loc)
|
||||
investigate_log("Experimentor has spawned a new corgi.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(globalMalf > 36 && globalMalf < 50)
|
||||
@@ -533,7 +533,7 @@
|
||||
trackedRuntime.loc = src.loc
|
||||
investigate_log("Experimentor has stolen Runtime!", "experimentor")
|
||||
else
|
||||
new /mob/living/simple_animal/cat(src.loc)
|
||||
new /mob/living/simple_animal/pet/cat(src.loc)
|
||||
investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(globalMalf > 76)
|
||||
@@ -628,6 +628,8 @@
|
||||
|
||||
|
||||
/obj/item/weapon/relic/proc/reveal()
|
||||
if(revealed) //Re-rolling your relics seems a bit overpowered, yes?
|
||||
return
|
||||
revealed = TRUE
|
||||
name = realName
|
||||
cooldownMax = rand(60,300)
|
||||
@@ -655,14 +657,16 @@
|
||||
|
||||
/obj/item/weapon/relic/proc/corgicannon(var/mob/user)
|
||||
playsound(src.loc, "sparks", rand(25,50), 1)
|
||||
var/mob/living/simple_animal/corgi/C = new/mob/living/simple_animal/corgi(get_turf(user))
|
||||
var/mob/living/simple_animal/pet/corgi/C = new/mob/living/simple_animal/pet/corgi(get_turf(user))
|
||||
C.throw_at(pick(oview(10,user)),10,rand(3,8))
|
||||
throwSmoke(get_turf(C))
|
||||
warn_admins(user, "Corgi Cannon", 0)
|
||||
|
||||
/obj/item/weapon/relic/proc/clean(var/mob/user)
|
||||
playsound(src.loc, "sparks", rand(25,50), 1)
|
||||
var/obj/item/weapon/grenade/chem_grenade/cleaner/CL = new/obj/item/weapon/grenade/chem_grenade/cleaner(get_turf(user))
|
||||
CL.prime()
|
||||
warn_admins(user, "Smoke", 0)
|
||||
|
||||
/obj/item/weapon/relic/proc/flash(var/mob/user)
|
||||
playsound(src.loc, "sparks", rand(25,50), 1)
|
||||
@@ -671,17 +675,22 @@
|
||||
warn_admins(user, "Flash")
|
||||
|
||||
/obj/item/weapon/relic/proc/petSpray(var/mob/user)
|
||||
visible_message("<span class='notice'>[src] begans to shake, and in the distance the sound of rampaging animals arises!</span>")
|
||||
var/message = "<span class='danger'>[src] begans to shake, and in the distance the sound of rampaging animals arises!</span>"
|
||||
visible_message(message)
|
||||
user << message
|
||||
var/animals = rand(1,25)
|
||||
var/counter
|
||||
var/list/valid_animals = list(/mob/living/simple_animal/parrot,/mob/living/simple_animal/butterfly,/mob/living/simple_animal/cat,/mob/living/simple_animal/corgi,/mob/living/simple_animal/crab,/mob/living/simple_animal/fox,/mob/living/simple_animal/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/pug,/mob/living/simple_animal/hostile/bear,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/carp)
|
||||
var/list/valid_animals = list(/mob/living/simple_animal/parrot,/mob/living/simple_animal/butterfly,/mob/living/simple_animal/pet/cat,/mob/living/simple_animal/pet/corgi,/mob/living/simple_animal/crab,/mob/living/simple_animal/pet/fox,/mob/living/simple_animal/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/pet/pug,/mob/living/simple_animal/hostile/bear,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/carp)
|
||||
for(counter = 1; counter < animals; counter++)
|
||||
var/mobType = pick(valid_animals)
|
||||
new mobType(get_turf(src))
|
||||
warn_admins(user, "Mass Mob Spawn")
|
||||
if(prob(60))
|
||||
user << "<span class='warning'>[src] falls apart!</span>"
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/relic/proc/rapidDupe(var/mob/user)
|
||||
visible_message("<span class='notice'>[src] emits a loud pop!</span>")
|
||||
audible_message("<span class='notice'>[src] emits a loud pop!</span>")
|
||||
var/list/dupes = list()
|
||||
var/counter
|
||||
var/max = rand(5,10)
|
||||
@@ -699,26 +708,33 @@
|
||||
for(counter = 1; counter <= dupes.len; counter++)
|
||||
var/obj/item/weapon/relic/R = dupes[counter]
|
||||
qdel(R)
|
||||
warn_admins(user, "Rapid duplicator", 0)
|
||||
|
||||
/obj/item/weapon/relic/proc/explode(var/mob/user)
|
||||
visible_message("<span class='notice'>[src] begins to heat up!</span>")
|
||||
user << "<span class='danger'>[src] begins to heat up!</span>"
|
||||
spawn(rand(35,100))
|
||||
if(src.loc == user)
|
||||
visible_message("<span class='notice'>The [src]'s top opens, releasing a powerful blast!</span>")
|
||||
explosion(user.loc, -1, rand(1,5), rand(1,5), rand(1,5), rand(1,5), flame_range = 2)
|
||||
warn_admins(user, "Explosion")
|
||||
qdel(src) //Comment this line to produce a light grenade (the bomb that keeps on exploding when used)!!
|
||||
|
||||
/obj/item/weapon/relic/proc/teleport(var/mob/user)
|
||||
visible_message("<span class='notice'>The [src] begins to vibrate!</span>")
|
||||
user << "<span class='notice'>The [src] begins to vibrate!</span>"
|
||||
spawn(rand(10,30))
|
||||
if(src.loc == user)
|
||||
var/turf/userturf = get_turf(user)
|
||||
if(src.loc == user && userturf.z != ZLEVEL_CENTCOM) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you!
|
||||
visible_message("<span class='notice'>The [src] twists and bends, relocating itself!</span>")
|
||||
throwSmoke(userturf)
|
||||
do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg')
|
||||
throwSmoke(get_turf(user))
|
||||
do_teleport(user, get_turf(user), 8, asoundin = 'sound/effects/phasein.ogg')
|
||||
throwSmoke(get_turf(user))
|
||||
warn_admins(user, "Teleport", 0)
|
||||
|
||||
//Admin Warning proc for relics
|
||||
/obj/item/weapon/relic/proc/warn_admins(var/mob/user, var/RelicType)
|
||||
/obj/item/weapon/relic/proc/warn_admins(var/mob/user, var/RelicType, var/priority = 1)
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("[RelicType] relic activated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
|
||||
log_game("[RelicType] relic used by [user.ckey]([user]) in ([T.x],[T.y],[T.z])")
|
||||
var/log_msg = "[RelicType] relic used by [user.ckey]([user]) in ([T.x],[T.y],[T.z])"
|
||||
if(priority) //For truly dangerous relics that may need an admin's attention. BWOINK!
|
||||
message_admins("[RelicType] relic activated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
|
||||
log_game(log_msg)
|
||||
investigate_log(log_msg, "experimentor")
|
||||
|
||||
@@ -0,0 +1,365 @@
|
||||
|
||||
/// Slime Extracts ///
|
||||
|
||||
/obj/item/slime_extract
|
||||
name = "slime extract"
|
||||
desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"."
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "grey slime extract"
|
||||
force = 1.0
|
||||
w_class = 1.0
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 6
|
||||
origin_tech = "biotech=4"
|
||||
var/Uses = 1 // uses before it goes inert
|
||||
var/enhanced = 0 //has it been enhanced before?
|
||||
|
||||
/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if(istype(O, /obj/item/weapon/slimesteroid2))
|
||||
if(enhanced == 1)
|
||||
user << "<span class='warning'> This extract has already been enhanced!</span>"
|
||||
return ..()
|
||||
if(Uses == 0)
|
||||
user << "<span class='warning'> You can't enhance a used extract!</span>"
|
||||
return ..()
|
||||
user <<"You apply the enhancer. It now has triple the amount of uses."
|
||||
Uses = 3
|
||||
enhanced = 1
|
||||
qdel(O)
|
||||
|
||||
/obj/item/slime_extract/New()
|
||||
..()
|
||||
create_reagents(100)
|
||||
|
||||
/obj/item/slime_extract/grey
|
||||
name = "grey slime extract"
|
||||
icon_state = "grey slime extract"
|
||||
|
||||
/obj/item/slime_extract/gold
|
||||
name = "gold slime extract"
|
||||
icon_state = "gold slime extract"
|
||||
|
||||
/obj/item/slime_extract/silver
|
||||
name = "silver slime extract"
|
||||
icon_state = "silver slime extract"
|
||||
|
||||
/obj/item/slime_extract/metal
|
||||
name = "metal slime extract"
|
||||
icon_state = "metal slime extract"
|
||||
|
||||
/obj/item/slime_extract/purple
|
||||
name = "purple slime extract"
|
||||
icon_state = "purple slime extract"
|
||||
|
||||
/obj/item/slime_extract/darkpurple
|
||||
name = "dark purple slime extract"
|
||||
icon_state = "dark purple slime extract"
|
||||
|
||||
/obj/item/slime_extract/orange
|
||||
name = "orange slime extract"
|
||||
icon_state = "orange slime extract"
|
||||
|
||||
/obj/item/slime_extract/yellow
|
||||
name = "yellow slime extract"
|
||||
icon_state = "yellow slime extract"
|
||||
|
||||
/obj/item/slime_extract/red
|
||||
name = "red slime extract"
|
||||
icon_state = "red slime extract"
|
||||
|
||||
/obj/item/slime_extract/blue
|
||||
name = "blue slime extract"
|
||||
icon_state = "blue slime extract"
|
||||
|
||||
/obj/item/slime_extract/darkblue
|
||||
name = "dark blue slime extract"
|
||||
icon_state = "dark blue slime extract"
|
||||
|
||||
/obj/item/slime_extract/pink
|
||||
name = "pink slime extract"
|
||||
icon_state = "pink slime extract"
|
||||
|
||||
/obj/item/slime_extract/green
|
||||
name = "green slime extract"
|
||||
icon_state = "green slime extract"
|
||||
|
||||
/obj/item/slime_extract/lightpink
|
||||
name = "light pink slime extract"
|
||||
icon_state = "light pink slime extract"
|
||||
|
||||
/obj/item/slime_extract/black
|
||||
name = "black slime extract"
|
||||
icon_state = "black slime extract"
|
||||
|
||||
/obj/item/slime_extract/oil
|
||||
name = "oil slime extract"
|
||||
icon_state = "oil slime extract"
|
||||
|
||||
/obj/item/slime_extract/adamantine
|
||||
name = "adamantine slime extract"
|
||||
icon_state = "adamantine slime extract"
|
||||
|
||||
/obj/item/slime_extract/bluespace
|
||||
name = "bluespace slime extract"
|
||||
icon_state = "bluespace slime extract"
|
||||
|
||||
/obj/item/slime_extract/pyrite
|
||||
name = "pyrite slime extract"
|
||||
icon_state = "pyrite slime extract"
|
||||
|
||||
/obj/item/slime_extract/cerulean
|
||||
name = "cerulean slime extract"
|
||||
icon_state = "cerulean slime extract"
|
||||
|
||||
/obj/item/slime_extract/sepia
|
||||
name = "sepia slime extract"
|
||||
icon_state = "sepia slime extract"
|
||||
|
||||
/obj/item/slime_extract/rainbow
|
||||
name = "rainbow slime extract"
|
||||
icon_state = "rainbow slime extract"
|
||||
|
||||
////Pet Slime Creation///
|
||||
|
||||
/obj/item/slimepotion
|
||||
name = "docility potion"
|
||||
desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle19"
|
||||
|
||||
/obj/item/slimepotion/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob)
|
||||
if(!isslime(M))
|
||||
user << "<span class='warning'>The potion only works on slimes!</span>"
|
||||
return ..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'>The slime is dead!</span>"
|
||||
return..()
|
||||
|
||||
M.docile = 1
|
||||
M.nutrition = 700
|
||||
M <<"<span class='warning'> You absorb the potion and feel your intense desire to feed melt away.</span>"
|
||||
user <<"<span class='notice'> You feed the slime the potion, removing it's hunger and calming it.</span>"
|
||||
var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN)
|
||||
|
||||
if (!newname)
|
||||
newname = "pet slime"
|
||||
M.name = newname
|
||||
M.real_name = newname
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion2
|
||||
name = "sentience potion"
|
||||
desc = "A miraculous chemical mix that can raise the intelligence of creatures to human levels."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle19"
|
||||
var/list/not_interested = list()
|
||||
var/being_used = 0
|
||||
|
||||
/obj/item/slimepotion2/afterattack(mob/living/M as mob, mob/user as mob)
|
||||
if(being_used || !ismob(M))
|
||||
return
|
||||
if( !(isanimal(M) || ismonkey(M)) || M.ckey) //only works on monkeys and animals that aren't player controlled
|
||||
user << "<span class='warning'>[M] is already too intelligent for this to work!</span>"
|
||||
return ..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'>[M] is dead!</span>"
|
||||
return..()
|
||||
|
||||
user << "<span class='notice'>You begin to apply the potion to [M]...</span>"
|
||||
being_used = 1
|
||||
|
||||
var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET)
|
||||
|
||||
shuffle(candidates)
|
||||
|
||||
var/time_passed = world.time
|
||||
var/list/consenting_candidates = list()
|
||||
|
||||
for(var/candidate in candidates)
|
||||
|
||||
if(candidate in not_interested)
|
||||
continue
|
||||
|
||||
spawn(0)
|
||||
switch(alert(candidate, "Would you like to play as [M.name]? Please choose quickly!","Confirmation","Yes","No"))
|
||||
if("Yes")
|
||||
if((world.time-time_passed)>=50 || !src)
|
||||
return
|
||||
consenting_candidates += candidate
|
||||
if("No")
|
||||
if(!src)
|
||||
return
|
||||
not_interested += candidate
|
||||
|
||||
sleep(50)
|
||||
|
||||
if(!src)
|
||||
return
|
||||
|
||||
if(consenting_candidates.len)
|
||||
var/client/C = null
|
||||
C = pick(consenting_candidates)
|
||||
M.key = C.key
|
||||
M.languages |= HUMAN
|
||||
M.faction -= "neutral"
|
||||
M << "<span class='warning'>All at once it makes sense, you know what you are and who you are! Self awareness is yours!</span>"
|
||||
M << "You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost."
|
||||
user << "<span class='warning'>[M] is suddenly attentive and aware. It worked!</span>"
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='notice'>[M] looks interested for a moment, but then looks back down. Maybe you should try again later...</span>"
|
||||
being_used = 0
|
||||
..()
|
||||
|
||||
/obj/item/weapon/slimesteroid
|
||||
name = "slime steroid"
|
||||
desc = "A potent chemical mix that will cause a slime to generate more extract."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle16"
|
||||
|
||||
/obj/item/weapon/slimesteroid/attack(mob/living/simple_animal/slime/M as mob, mob/user as mob)
|
||||
if(!isslime(M))//If target is not a slime.
|
||||
user << "<span class='warning'> The steroid only works on baby slimes!</span>"
|
||||
return ..()
|
||||
if(M.is_adult) //Can't tame adults
|
||||
user << "<span class='warning'> Only baby slimes can use the steroid!</span>"
|
||||
return..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'> The slime is dead!</span>"
|
||||
return..()
|
||||
if(M.cores == 3)
|
||||
user <<"<span class='warning'> The slime already has the maximum amount of extract!</span>"
|
||||
return..()
|
||||
|
||||
user <<"You feed the slime the steroid. It now has triple the amount of extract."
|
||||
M.cores = 3
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/slimesteroid2
|
||||
name = "extract enhancer"
|
||||
desc = "A potent chemical mix that will give a slime extract three uses."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle17"
|
||||
|
||||
/*afterattack(obj/target, mob/user , flag)
|
||||
if(istype(target, /obj/item/slime_extract))
|
||||
if(target.enhanced == 1)
|
||||
user << "<span class='warning'> This extract has already been enhanced!</span>"
|
||||
return ..()
|
||||
if(target.Uses == 0)
|
||||
user << "<span class='warning'> You can't enhance a used extract!</span>"
|
||||
return ..()
|
||||
user <<"You apply the enhancer. It now has triple the amount of uses."
|
||||
target.Uses = 3
|
||||
target.enahnced = 1
|
||||
qdel(src)*/
|
||||
|
||||
|
||||
////////Adamantine Golem stuff I dunno where else to put it
|
||||
|
||||
// This will eventually be removed.
|
||||
|
||||
/obj/item/clothing/under/golem
|
||||
name = "adamantine skin"
|
||||
desc = "a golem's skin"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
item_color = "golem"
|
||||
flags = ABSTRACT | NODROP
|
||||
has_sensor = 0
|
||||
|
||||
/obj/item/clothing/suit/golem
|
||||
name = "adamantine shell"
|
||||
desc = "a golem's thick outter shell"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.90
|
||||
permeability_coefficient = 0.50
|
||||
body_parts_covered = FULL_BODY
|
||||
flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT
|
||||
flags = ABSTRACT | NODROP
|
||||
|
||||
/obj/item/clothing/shoes/golem
|
||||
name = "golem's feet"
|
||||
desc = "sturdy adamantine feet"
|
||||
icon_state = "golem"
|
||||
item_state = null
|
||||
flags = NOSLIP | ABSTRACT | NODROP
|
||||
|
||||
|
||||
/obj/item/clothing/mask/breath/golem
|
||||
name = "golem's face"
|
||||
desc = "the imposing face of an adamantine golem"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
siemens_coefficient = 0
|
||||
unacidable = 1
|
||||
flags = ABSTRACT | NODROP
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/golem
|
||||
name = "golem's hands"
|
||||
desc = "strong adamantine hands"
|
||||
icon_state = "golem"
|
||||
item_state = null
|
||||
siemens_coefficient = 0
|
||||
flags = ABSTRACT | NODROP
|
||||
|
||||
|
||||
/obj/item/clothing/head/space/golem
|
||||
icon_state = "golem"
|
||||
item_state = "dermal"
|
||||
item_color = "dermal"
|
||||
name = "golem's head"
|
||||
desc = "a golem's head"
|
||||
unacidable = 1
|
||||
flags = ABSTRACT | NODROP
|
||||
|
||||
/obj/effect/golemrune
|
||||
anchored = 1
|
||||
desc = "a strange rune used to create golems. It glows when spirits are nearby."
|
||||
name = "rune"
|
||||
icon = 'icons/obj/rune.dmi'
|
||||
icon_state = "golem"
|
||||
unacidable = 1
|
||||
layer = TURF_LAYER
|
||||
|
||||
New()
|
||||
..()
|
||||
SSobj.processing |= src
|
||||
|
||||
/obj/effect/golemrune/process()
|
||||
var/mob/dead/observer/ghost
|
||||
for(var/mob/dead/observer/O in src.loc)
|
||||
if(!O.client) continue
|
||||
if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue
|
||||
ghost = O
|
||||
break
|
||||
if(ghost)
|
||||
icon_state = "golem2"
|
||||
else
|
||||
icon_state = "golem"
|
||||
|
||||
/obj/effect/golemrune/attack_hand(mob/living/user as mob)
|
||||
var/mob/dead/observer/ghost
|
||||
for(var/mob/dead/observer/O in src.loc)
|
||||
if(!O.client) continue
|
||||
if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue
|
||||
ghost = O
|
||||
break
|
||||
if(!ghost)
|
||||
user << "The rune fizzles uselessly. There is no spirit nearby."
|
||||
return
|
||||
var/mob/living/carbon/human/G = new /mob/living/carbon/human
|
||||
if(prob(50)) G.gender = "female"
|
||||
hardset_dna(G, null, null, null, null, /datum/species/golem/adamantine)
|
||||
|
||||
G.set_cloned_appearance()
|
||||
G.real_name = text("Adamantine Golem ([rand(1, 1000)])")
|
||||
G.dna.species.auto_equip(G)
|
||||
G.loc = src.loc
|
||||
G.key = ghost.key
|
||||
G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost."
|
||||
qdel(src)
|
||||
Reference in New Issue
Block a user