Bleeding edgy refresh (#303)
* not code stuff * other things * global vars, defines, helpers * onclick hud stuff, orphans, world.dm * controllers and datums * game folder * everything not client/mobs in modules * client folder * stage 1 mob stuff * simple animal things * silicons * carbon things * ayylmaos and monkeys * hyoomahn * icons n shit * sprite fixes * compile fixes * some fixes I cherrypicked. * qdel fixes * forgot brain refractors
This commit is contained in:
@@ -98,7 +98,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
return
|
||||
|
||||
if(!materials.has_space(sheet_material))
|
||||
user << "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>")
|
||||
return 1
|
||||
|
||||
var/obj/item/stack/sheet/stack = O
|
||||
@@ -110,7 +110,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
return 1
|
||||
else
|
||||
use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10)))
|
||||
user << "<span class='notice'>You add [amount_inserted] sheets to the [src.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add [amount_inserted] sheets to the [src.name].</span>")
|
||||
updateUsrDialog()
|
||||
|
||||
else if(istype(O, /obj/item/weapon/ore/bluespace_crystal)) //Bluespace crystals can be either a stack or an item
|
||||
@@ -122,17 +122,17 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
return
|
||||
|
||||
if(!materials.has_space(bs_material))
|
||||
user << "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>")
|
||||
return 1
|
||||
|
||||
materials.insert_item(O)
|
||||
use_power(MINERAL_MATERIAL_AMOUNT/10)
|
||||
user << "<span class='notice'>You add [O] to the [src.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add [O] to the [src.name].</span>")
|
||||
qdel(O)
|
||||
updateUsrDialog()
|
||||
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
user << "<span class='warning'>You cannot insert this item into the [name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot insert this item into the [name]!</span>")
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -141,7 +141,7 @@ other types of metals and chemistry for reagents).
|
||||
id = "tech_disk_super_adv"
|
||||
req_tech = list("programming" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=100, MAT_GOLD=100)
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=100, MAT_GOLD=100, MAT_BLUESPACE = 100)
|
||||
build_path = /obj/item/weapon/disk/tech_disk/super_adv
|
||||
category = list("Electronics")
|
||||
|
||||
@@ -320,7 +320,7 @@ other types of metals and chemistry for reagents).
|
||||
id = "minerbag_holding"
|
||||
req_tech = list("bluespace" = 4, "materials" = 3, "engineering" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GOLD = 250, MAT_URANIUM = 500, MAT_BLUESPACE = 1000) //quite cheap, for more convenience
|
||||
materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience
|
||||
build_path = /obj/item/weapon/storage/bag/ore/holding
|
||||
category = list("Bluespace Designs")
|
||||
|
||||
@@ -389,16 +389,6 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/clothing/glasses/hud/diagnostic/night
|
||||
category = list("Equipment")
|
||||
|
||||
/datum/design/autoimplanter
|
||||
name = "Autoimplanter"
|
||||
desc = "An autoimplanter for implanting yourself without the need of another person."
|
||||
id = "autoimplanter"
|
||||
req_tech = list("materials" = 7, "engineering" = 7, "powerstorage" = 7, "plasmatech" = 7, "biotech" = 7)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 30000, MAT_GLASS = 30000, MAT_DIAMOND = 20000, MAT_PLASMA = 20000, MAT_TITANIUM = 20000)
|
||||
build_path = /obj/item/device/autoimplanter
|
||||
category = list("Medical Designs")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Test///////////////////
|
||||
/////////////////////////////////////////
|
||||
@@ -490,7 +480,7 @@ other types of metals and chemistry for reagents).
|
||||
name = "Night Vision Goggles"
|
||||
desc = "Goggles that let you see through darkness unhindered."
|
||||
id = "night_visision_goggles"
|
||||
req_tech = list("materials" = 4, "magnets" = 5, "plasmatech" = 5, "engineering" = 5)
|
||||
req_tech = list("materials" = 4, "magnets" = 5, "plasmatech" = 4, "engineering" = 5)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 600, MAT_GLASS = 600, MAT_PLASMA = 350, MAT_URANIUM = 1000)
|
||||
build_path = /obj/item/clothing/glasses/night
|
||||
|
||||
@@ -267,3 +267,11 @@
|
||||
req_tech = list("programming" = 1)
|
||||
build_path = /obj/item/weapon/circuitboard/computer/libraryconsole
|
||||
category = list("Computer Boards")
|
||||
|
||||
/datum/design/board/apc_control
|
||||
name = "Computer Design (APC Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new APC control console."
|
||||
id = "apc_control"
|
||||
req_tech = list("programming" = 4, "engineering" = 4, "powerstorage" = 5)
|
||||
build_path = /obj/item/weapon/circuitboard/computer/apc_control
|
||||
category = list("Computer Boards")
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
/datum/design/board/monkey_recycler
|
||||
name = "Machine Design (Monkey Recycler Board)"
|
||||
desc = "The circuit board for a monkey recycler."
|
||||
id = "smartfridge"
|
||||
id = "monkey_recycler"
|
||||
req_tech = list("programming" = 1)
|
||||
build_path = /obj/item/weapon/circuitboard/machine/monkey_recycler
|
||||
category = list ("Misc. Machinery")
|
||||
|
||||
@@ -759,7 +759,7 @@
|
||||
construction_time = 100
|
||||
build_path = /obj/item/device/assembly/flash/handheld
|
||||
category = list("Misc")
|
||||
/*
|
||||
|
||||
/datum/design/flightsuit //Multi step build process/redo WIP
|
||||
name = "Flight Suit"
|
||||
desc = "A specialized hardsuit that is able to attach a flightpack and accessories.."
|
||||
@@ -792,4 +792,3 @@
|
||||
construction_time = 100
|
||||
category = list("Misc")
|
||||
req_tech = list("magnets" = 2, "combat" = 2, "plasmatech" = 3, "materials" = 3, "engineering" = 2, "powerstorage" = 2)
|
||||
*/
|
||||
@@ -50,19 +50,19 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
if(!is_insertion_ready(user))
|
||||
return
|
||||
if(!O.origin_tech)
|
||||
user << "<span class='warning'>This doesn't seem to have a tech origin!</span>"
|
||||
to_chat(user, "<span class='warning'>This doesn't seem to have a tech origin!</span>")
|
||||
return
|
||||
var/list/temp_tech = ConvertReqString2List(O.origin_tech)
|
||||
if (temp_tech.len == 0)
|
||||
user << "<span class='warning'>You cannot deconstruct this item!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot deconstruct this item!</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
user << "<span class='warning'>\The [O] is stuck to your hand, you cannot put it in the [src.name]!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [O] is stuck to your hand, you cannot put it in the [src.name]!</span>")
|
||||
return
|
||||
busy = 1
|
||||
loaded_item = O
|
||||
O.forceMove(src)
|
||||
user << "<span class='notice'>You add the [O.name] to the [src.name]!</span>"
|
||||
to_chat(user, "<span class='notice'>You add the [O.name] to the [src.name]!</span>")
|
||||
flick("d_analyzer_la", src)
|
||||
spawn(10)
|
||||
icon_state = "d_analyzer_l"
|
||||
|
||||
@@ -120,20 +120,20 @@
|
||||
if(!is_insertion_ready(user))
|
||||
return
|
||||
if(!checkCircumstances(O))
|
||||
user << "<span class='warning'>The [O] is not yet valid for the [src] and must be completed!</span>"
|
||||
to_chat(user, "<span class='warning'>The [O] is not yet valid for the [src] and must be completed!</span>")
|
||||
return
|
||||
if(!O.origin_tech)
|
||||
user << "<span class='warning'>This doesn't seem to have a tech origin!</span>"
|
||||
to_chat(user, "<span class='warning'>This doesn't seem to have a tech origin!</span>")
|
||||
return
|
||||
var/list/temp_tech = ConvertReqString2List(O.origin_tech)
|
||||
if (temp_tech.len == 0)
|
||||
user << "<span class='warning'>You cannot experiment on this item!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot experiment on this item!</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
loaded_item = O
|
||||
O.loc = src
|
||||
user << "<span class='notice'>You add the [O.name] to the machine.</span>"
|
||||
to_chat(user, "<span class='notice'>You add the [O.name] to the machine.</span>")
|
||||
flick("h_lathe_load", src)
|
||||
|
||||
|
||||
@@ -484,7 +484,7 @@
|
||||
if(globalMalf > 36 && globalMalf < 50)
|
||||
visible_message("<span class='warning'>Experimentor draws the life essence of those nearby!</span>")
|
||||
for(var/mob/living/m in view(4,src))
|
||||
m << "<span class='danger'>You feel your flesh being torn from you, mists of blood drifting to [src]!</span>"
|
||||
to_chat(m, "<span class='danger'>You feel your flesh being torn from you, mists of blood drifting to [src]!</span>")
|
||||
m.apply_damage(50, BRUTE, "chest")
|
||||
investigate_log("Experimentor has taken 50 brute a blood sacrifice from [m]", "experimentor")
|
||||
if(globalMalf > 51 && globalMalf < 75)
|
||||
@@ -528,15 +528,15 @@
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
if(recentlyExperimented)
|
||||
usr << "<span class='warning'>[src] has been used too recently!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] has been used too recently!</span>")
|
||||
return
|
||||
else if(!loaded_item)
|
||||
updateUsrDialog() //Set the interface to unloaded mode
|
||||
usr << "<span class='warning'>[src] is not currently loaded!</span>"
|
||||
to_chat(usr, "<span class='warning'>[src] is not currently loaded!</span>")
|
||||
return
|
||||
else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item)
|
||||
updateUsrDialog() //Refresh interface to update interface hrefs
|
||||
usr << "<span class='danger'>Interface failure detected in [src]. Please try again.</span>"
|
||||
to_chat(usr, "<span class='danger'>Interface failure detected in [src]. Please try again.</span>")
|
||||
return
|
||||
var/dotype
|
||||
if(text2num(scantype) == SCANTYPE_DISCOVER)
|
||||
@@ -607,7 +607,7 @@
|
||||
/obj/item/weapon/relic/attack_self(mob/user)
|
||||
if(revealed)
|
||||
if(cooldown)
|
||||
user << "<span class='warning'>[src] does not react!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] does not react!</span>")
|
||||
return
|
||||
else if(src.loc == user)
|
||||
cooldown = TRUE
|
||||
@@ -615,7 +615,7 @@
|
||||
spawn(cooldownMax)
|
||||
cooldown = FALSE
|
||||
else
|
||||
user << "<span class='notice'>You aren't quite sure what to do with this yet.</span>"
|
||||
to_chat(user, "<span class='notice'>You aren't quite sure what to do with this yet.</span>")
|
||||
|
||||
//////////////// RELIC PROCS /////////////////////////////
|
||||
|
||||
@@ -645,7 +645,7 @@
|
||||
/obj/item/weapon/relic/proc/petSpray(mob/user)
|
||||
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
|
||||
to_chat(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/pet/cat,/mob/living/simple_animal/pet/dog/corgi,/mob/living/simple_animal/crab,/mob/living/simple_animal/pet/fox,/mob/living/simple_animal/hostile/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/pet/dog/pug,/mob/living/simple_animal/hostile/bear,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/carp)
|
||||
@@ -654,7 +654,7 @@
|
||||
new mobType(get_turf(src))
|
||||
warn_admins(user, "Mass Mob Spawn")
|
||||
if(prob(60))
|
||||
user << "<span class='warning'>[src] falls apart!</span>"
|
||||
to_chat(user, "<span class='warning'>[src] falls apart!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/relic/proc/rapidDupe(mob/user)
|
||||
@@ -679,7 +679,7 @@
|
||||
warn_admins(user, "Rapid duplicator", 0)
|
||||
|
||||
/obj/item/weapon/relic/proc/explode(mob/user)
|
||||
user << "<span class='danger'>[src] begins to heat up!</span>"
|
||||
to_chat(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>")
|
||||
@@ -688,7 +688,7 @@
|
||||
qdel(src) //Comment this line to produce a light grenade (the bomb that keeps on exploding when used)!!
|
||||
|
||||
/obj/item/weapon/relic/proc/teleport(mob/user)
|
||||
user << "<span class='notice'>The [src] begins to vibrate!</span>"
|
||||
to_chat(user, "<span class='notice'>The [src] begins to vibrate!</span>")
|
||||
spawn(rand(10,30))
|
||||
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!
|
||||
|
||||
@@ -114,7 +114,7 @@ var/global/list/obj/machinery/message_server/message_servers = list()
|
||||
rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth)
|
||||
|
||||
/obj/machinery/message_server/attack_hand(mob/user)
|
||||
user << "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]"
|
||||
to_chat(user, "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]")
|
||||
active = !active
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
return
|
||||
|
||||
if(!materials.has_space(sheet_material))
|
||||
user << "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>")
|
||||
return 1
|
||||
|
||||
var/obj/item/stack/sheet/stack = O
|
||||
@@ -112,7 +112,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
var/stack_name = stack.name
|
||||
busy = TRUE
|
||||
use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10)))
|
||||
user << "<span class='notice'>You add [amount_inserted] sheets to the [src.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add [amount_inserted] sheets to the [src.name].</span>")
|
||||
add_overlay("protolathe_[stack_name]")
|
||||
sleep(10)
|
||||
cut_overlay("protolathe_[stack_name]")
|
||||
@@ -128,13 +128,13 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
return
|
||||
|
||||
if(!materials.has_space(bs_material))
|
||||
user << "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>")
|
||||
return 1
|
||||
|
||||
materials.insert_item(O)
|
||||
busy = TRUE
|
||||
use_power(MINERAL_MATERIAL_AMOUNT/10)
|
||||
user << "<span class='notice'>You add [O] to the [src.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You add [O] to the [src.name].</span>")
|
||||
qdel(O)
|
||||
add_overlay("protolathe_bluespace")
|
||||
sleep(10)
|
||||
@@ -143,7 +143,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
updateUsrDialog()
|
||||
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
user << "<span class='warning'>You cannot insert this item into the [name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot insert this item into the [name]!</span>")
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -117,7 +117,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
//Loading a disk into it.
|
||||
if(istype(D, /obj/item/weapon/disk))
|
||||
if(t_disk || d_disk)
|
||||
user << "A disk is already loaded into the machine."
|
||||
to_chat(user, "A disk is already loaded into the machine.")
|
||||
return
|
||||
|
||||
if(istype(D, /obj/item/weapon/disk/tech_disk))
|
||||
@@ -125,12 +125,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
else if (istype(D, /obj/item/weapon/disk/design_disk))
|
||||
d_disk = D
|
||||
else
|
||||
user << "<span class='danger'>Machine cannot accept disks in that format.</span>"
|
||||
to_chat(user, "<span class='danger'>Machine cannot accept disks in that format.</span>")
|
||||
return
|
||||
if(!user.drop_item())
|
||||
return
|
||||
D.loc = src
|
||||
user << "<span class='notice'>You add the disk to the machine!</span>"
|
||||
to_chat(user, "<span class='notice'>You add the disk to the machine!</span>")
|
||||
else if(!(linked_destroy && linked_destroy.busy) && !(linked_lathe && linked_lathe.busy) && !(linked_imprinter && linked_imprinter.busy))
|
||||
. = ..()
|
||||
updateUsrDialog()
|
||||
@@ -153,7 +153,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(!emagged)
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "<span class='notice'>You disable the security protocols</span>"
|
||||
to_chat(user, "<span class='notice'>You disable the security protocols</span>")
|
||||
|
||||
/obj/machinery/computer/rdconsole/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -273,7 +273,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer.
|
||||
if(linked_destroy)
|
||||
if(linked_destroy.busy)
|
||||
usr << "<span class='danger'>The destructive analyzer is busy at the moment.</span>"
|
||||
to_chat(usr, "<span class='danger'>The destructive analyzer is busy at the moment.</span>")
|
||||
|
||||
else if(linked_destroy.loaded_item)
|
||||
linked_destroy.loaded_item.forceMove(linked_destroy.loc)
|
||||
@@ -340,12 +340,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(src.allowed(usr))
|
||||
screen = text2num(href_list["lock"])
|
||||
else
|
||||
usr << "Unauthorized Access."
|
||||
to_chat(usr, "Unauthorized Access.")
|
||||
|
||||
else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected.
|
||||
screen = 0.0
|
||||
if(!sync)
|
||||
usr << "<span class='danger'>You must connect to the network first!</span>"
|
||||
to_chat(usr, "<span class='danger'>You must connect to the network first!</span>")
|
||||
else
|
||||
griefProtection() //Putting this here because I dont trust the sync process
|
||||
spawn(30)
|
||||
@@ -392,7 +392,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
return
|
||||
|
||||
if(linked_lathe.busy)
|
||||
usr << "<span class='danger'>Protolathe is busy at the moment.</span>"
|
||||
to_chat(usr, "<span class='danger'>Protolathe is busy at the moment.</span>")
|
||||
return
|
||||
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
@@ -469,7 +469,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
return
|
||||
|
||||
if(linked_imprinter.busy)
|
||||
usr << "<span class='danger'>Circuit Imprinter is busy at the moment.</span>"
|
||||
to_chat(usr, "<span class='danger'>Circuit Imprinter is busy at the moment.</span>")
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
//whether the machine can have an item inserted in its current state.
|
||||
/obj/machinery/r_n_d/proc/is_insertion_ready(mob/user)
|
||||
if(panel_open)
|
||||
user << "<span class='warning'>You can't load the [src.name] while it's opened!</span>"
|
||||
to_chat(user, "<span class='warning'>You can't load the [src.name] while it's opened!</span>")
|
||||
return
|
||||
if (disabled)
|
||||
return
|
||||
@@ -87,19 +87,19 @@
|
||||
console.SyncRDevices()
|
||||
|
||||
if(!linked_console)
|
||||
user << "<span class='warning'>The [name] must be linked to an R&D console first!</span>"
|
||||
to_chat(user, "<span class='warning'>The [name] must be linked to an R&D console first!</span>")
|
||||
return
|
||||
if (busy)
|
||||
user << "<span class='warning'>The [src.name] is busy right now.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name] is busy right now.</span>")
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='warning'>The [src.name] is broken.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name] is broken.</span>")
|
||||
return
|
||||
if(stat & NOPOWER)
|
||||
user << "<span class='warning'>The [src.name] has no power.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name] has no power.</span>")
|
||||
return
|
||||
if(loaded_item)
|
||||
user << "<span class='warning'>The [src] is already loaded.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src] is already loaded.</span>")
|
||||
return
|
||||
return 1
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
add_fingerprint(usr)
|
||||
usr.set_machine(src)
|
||||
if(!src.allowed(usr) && !emagged)
|
||||
usr << "<span class='danger'>You do not have the required access level.</span>"
|
||||
to_chat(usr, "<span class='danger'>You do not have the required access level.</span>")
|
||||
return
|
||||
|
||||
if(href_list["main"])
|
||||
@@ -319,7 +319,7 @@
|
||||
if(!emagged)
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "<span class='notice'>You you disable the security protocols.</span>"
|
||||
to_chat(user, "<span class='notice'>You you disable the security protocols.</span>")
|
||||
|
||||
/obj/machinery/r_n_d/server/robotics
|
||||
name = "Robotics R&D Server"
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/*Power cells are in code\modules\power\cell.dm*/
|
||||
/*Power cells are in code\modules\power\cell.dm
|
||||
|
||||
If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fit with the clamp to not confuse the user or cause possible exploits.*/
|
||||
/obj/item/weapon/storage/part_replacer
|
||||
name = "rapid part exchange device"
|
||||
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
|
||||
@@ -47,7 +49,7 @@
|
||||
play_rped_sound()
|
||||
user.Beam(dest_object,icon_state="rped_upgrade",time=5)
|
||||
return 1
|
||||
user << "The [src.name] buzzes."
|
||||
to_chat(user, "The [src.name] buzzes.")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "camera_target"
|
||||
var/allowed_area = null
|
||||
|
||||
/mob/camera/aiEye/remote/xenobio/New(loc)
|
||||
/mob/camera/aiEye/remote/xenobio/Initialize()
|
||||
var/area/A = get_area(loc)
|
||||
allowed_area = A.name
|
||||
..()
|
||||
@@ -35,6 +35,8 @@
|
||||
icon_screen = "slime_comp"
|
||||
icon_keyboard = "rd_key"
|
||||
|
||||
light_color = LIGHT_COLOR_PINK
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/CreateEye()
|
||||
eyeobj = new /mob/camera/aiEye/remote/xenobio(get_turf(src))
|
||||
eyeobj.origin = src
|
||||
@@ -42,7 +44,7 @@
|
||||
eyeobj.icon = 'icons/obj/abductor.dmi'
|
||||
eyeobj.icon_state = "camera_target"
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/carbon/user)
|
||||
/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user)
|
||||
off_action.target = user
|
||||
off_action.Grant(user)
|
||||
|
||||
@@ -61,16 +63,10 @@
|
||||
monkey_recycle_action.target = src
|
||||
monkey_recycle_action.Grant(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/attack_hand(mob/user)
|
||||
if(!ishuman(user)) //AIs using it might be weird
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
monkeys++
|
||||
user << "<span class='notice'>You feed [O] to [src]. It now has [monkeys] monkey cubes stored.</span>"
|
||||
to_chat(user, "<span class='notice'>You feed [O] to [src]. It now has [monkeys] monkey cubes stored.</span>")
|
||||
user.drop_item()
|
||||
qdel(O)
|
||||
return
|
||||
@@ -83,14 +79,14 @@
|
||||
monkeys++
|
||||
qdel(G)
|
||||
if (loaded)
|
||||
user << "<span class='notice'>You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.</span>"
|
||||
to_chat(user, "<span class='notice'>You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/datum/action/innate/camera_off/xenobio/Activate()
|
||||
if(!target || !ishuman(target))
|
||||
if(!target || !isliving(target))
|
||||
return
|
||||
var/mob/living/carbon/C = target
|
||||
var/mob/living/C = target
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/origin = remote_eye.origin
|
||||
origin.current_user = null
|
||||
@@ -116,9 +112,9 @@
|
||||
button_icon_state = "slime_down"
|
||||
|
||||
/datum/action/innate/slime_place/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
if(!target || !isliving(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/living/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
@@ -128,16 +124,16 @@
|
||||
S.visible_message("[S] warps in!")
|
||||
X.stored_slimes -= S
|
||||
else
|
||||
owner << "<span class='notice'>Target is not near a camera. Cannot proceed.</span>"
|
||||
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
|
||||
|
||||
/datum/action/innate/slime_pick_up
|
||||
name = "Pick up Slime"
|
||||
button_icon_state = "slime_up"
|
||||
|
||||
/datum/action/innate/slime_pick_up/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
if(!target || !isliving(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/living/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
@@ -152,7 +148,7 @@
|
||||
S.loc = X
|
||||
X.stored_slimes += S
|
||||
else
|
||||
owner << "<span class='notice'>Target is not near a camera. Cannot proceed.</span>"
|
||||
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
|
||||
|
||||
|
||||
/datum/action/innate/feed_slime
|
||||
@@ -160,9 +156,9 @@
|
||||
button_icon_state = "monkey_down"
|
||||
|
||||
/datum/action/innate/feed_slime/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
if(!target || !isliving(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/living/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
@@ -171,9 +167,9 @@
|
||||
var/mob/living/carbon/monkey/food = new /mob/living/carbon/monkey(remote_eye.loc)
|
||||
food.LAssailant = C
|
||||
X.monkeys --
|
||||
owner << "[X] now has [X.monkeys] monkeys left."
|
||||
to_chat(owner, "[X] now has [X.monkeys] monkeys left.")
|
||||
else
|
||||
owner << "<span class='notice'>Target is not near a camera. Cannot proceed.</span>"
|
||||
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
|
||||
|
||||
|
||||
/datum/action/innate/monkey_recycle
|
||||
@@ -181,9 +177,9 @@
|
||||
button_icon_state = "monkey_up"
|
||||
|
||||
/datum/action/innate/monkey_recycle/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
if(!target || !isliving(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/living/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
@@ -194,4 +190,4 @@
|
||||
X.monkeys = round(X.monkeys + 0.2,0.1)
|
||||
qdel(M)
|
||||
else
|
||||
owner << "<span class='notice'>Target is not near a camera. Cannot proceed.</span>"
|
||||
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/obj/item/slime_extract/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/slimepotion/enhancer))
|
||||
if(Uses >= 5)
|
||||
user << "<span class='warning'>You cannot enhance this extract further!</span>"
|
||||
to_chat(user, "<span class='warning'>You cannot enhance this extract further!</span>")
|
||||
return ..()
|
||||
user <<"<span class='notice'>You apply the enhancer to the slime extract. It may now be reused one more time.</span>"
|
||||
Uses++
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
/obj/item/slimepotion/afterattack(obj/item/weapon/reagent_containers/target, mob/user , proximity)
|
||||
if (istype(target))
|
||||
user << "<span class='notice'>You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb.</span>" // le fluff faec
|
||||
to_chat(user, "<span class='notice'>You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb.</span>" )
|
||||
return
|
||||
|
||||
/obj/item/slimepotion/docility
|
||||
@@ -138,10 +138,10 @@
|
||||
|
||||
/obj/item/slimepotion/docility/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
user << "<span class='warning'>The potion only works on slimes!</span>"
|
||||
to_chat(user, "<span class='warning'>The potion only works on slimes!</span>")
|
||||
return ..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'>The slime is dead!</span>"
|
||||
to_chat(user, "<span class='warning'>The slime is dead!</span>")
|
||||
return ..()
|
||||
|
||||
M.docile = 1
|
||||
@@ -170,19 +170,19 @@
|
||||
if(being_used || !ismob(M))
|
||||
return
|
||||
if(!isanimal(M) || M.ckey) //only works on animals that aren't player controlled
|
||||
user << "<span class='warning'>[M] is already too intelligent for this to work!</span>"
|
||||
to_chat(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>"
|
||||
to_chat(user, "<span class='warning'>[M] is dead!</span>")
|
||||
return ..()
|
||||
var/mob/living/simple_animal/SM = M
|
||||
if(SM.sentience_type != sentience_type)
|
||||
user << "<span class='warning'>The potion won't work on [SM].</span>"
|
||||
to_chat(user, "<span class='warning'>The potion won't work on [SM].</span>")
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
user << "<span class='notice'>You offer the sentience potion to [SM]...</span>"
|
||||
to_chat(user, "<span class='notice'>You offer the sentience potion to [SM]...</span>")
|
||||
being_used = 1
|
||||
|
||||
var/list/candidates = pollCandidatesForMob("Do you want to play as [SM.name]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, SM, POLL_IGNORE_SENTIENCE_POTION) // see poll_ignore.dm
|
||||
@@ -194,12 +194,12 @@
|
||||
SM.languages_understood |= HUMAN
|
||||
SM.mind.enslave_mind_to_creator(user)
|
||||
SM.sentience_act()
|
||||
SM << "<span class='warning'>All at once it makes sense: you know what you are and who you are! Self awareness is yours!</span>"
|
||||
SM << "<span class='userdanger'>You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.</span>"
|
||||
user << "<span class='notice'>[SM] accepts the potion and suddenly becomes attentive and aware. It worked!</span>"
|
||||
to_chat(SM, "<span class='warning'>All at once it makes sense: you know what you are and who you are! Self awareness is yours!</span>")
|
||||
to_chat(SM, "<span class='userdanger'>You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.</span>")
|
||||
to_chat(user, "<span class='notice'>[SM] accepts the potion and suddenly becomes attentive and aware. It worked!</span>")
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='notice'>[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.</span>"
|
||||
to_chat(user, "<span class='notice'>[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.</span>")
|
||||
being_used = 0
|
||||
..()
|
||||
|
||||
@@ -216,17 +216,17 @@
|
||||
if(prompted || !ismob(M))
|
||||
return
|
||||
if(!isanimal(M) || M.ckey) //much like sentience, these will not work on something that is already player controlled
|
||||
user << "<span class='warning'>[M] already has a higher consciousness!</span>"
|
||||
to_chat(user, "<span class='warning'>[M] already has a higher consciousness!</span>")
|
||||
return ..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'>[M] is dead!</span>"
|
||||
to_chat(user, "<span class='warning'>[M] is dead!</span>")
|
||||
return ..()
|
||||
var/mob/living/simple_animal/SM = M
|
||||
if(SM.sentience_type != animal_type)
|
||||
user << "<span class='warning'>You cannot transfer your consciousness to [SM].</span>" //no controlling machines
|
||||
to_chat(user, "<span class='warning'>You cannot transfer your consciousness to [SM].</span>" )
|
||||
return ..()
|
||||
if(jobban_isbanned(user, ROLE_ALIEN)) //ideally sentience and trasnference potions should be their own unique role.
|
||||
user << "<span class='warning'>Your mind goes blank as you attempt to use the potion.</span>"
|
||||
to_chat(user, "<span class='warning'>Your mind goes blank as you attempt to use the potion.</span>")
|
||||
return
|
||||
|
||||
prompted = 1
|
||||
@@ -234,7 +234,7 @@
|
||||
prompted = 0
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You drink the potion then place your hands on [SM]...</span>"
|
||||
to_chat(user, "<span class='notice'>You drink the potion then place your hands on [SM]...</span>")
|
||||
|
||||
|
||||
user.mind.transfer_to(SM)
|
||||
@@ -243,8 +243,8 @@
|
||||
SM.faction = user.faction.Copy()
|
||||
SM.sentience_act() //Same deal here as with sentience
|
||||
user.death()
|
||||
SM << "<span class='notice'>In a quick flash, you feel your consciousness flow into [SM]!</span>"
|
||||
SM << "<span class='warning'>You are now [SM]. Your allegiances, alliances, and role is still the same as it was prior to consciousness transfer!</span>"
|
||||
to_chat(SM, "<span class='notice'>In a quick flash, you feel your consciousness flow into [SM]!</span>")
|
||||
to_chat(SM, "<span class='warning'>You are now [SM]. Your allegiances, alliances, and role is still the same as it was prior to consciousness transfer!</span>")
|
||||
SM.name = "[SM.name] as [user.real_name]"
|
||||
qdel(src)
|
||||
|
||||
@@ -256,13 +256,13 @@
|
||||
|
||||
/obj/item/slimepotion/steroid/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))//If target is not a slime.
|
||||
user << "<span class='warning'>The steroid only works on baby slimes!</span>"
|
||||
to_chat(user, "<span class='warning'>The steroid only works on baby slimes!</span>")
|
||||
return ..()
|
||||
if(M.is_adult) //Can't steroidify adults
|
||||
user << "<span class='warning'>Only baby slimes can use the steroid!</span>"
|
||||
to_chat(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>"
|
||||
to_chat(user, "<span class='warning'>The slime is dead!</span>")
|
||||
return ..()
|
||||
if(M.cores >= 5)
|
||||
user <<"<span class='warning'>The slime already has the maximum amount of extract!</span>"
|
||||
@@ -286,10 +286,10 @@
|
||||
|
||||
/obj/item/slimepotion/stabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
user << "<span class='warning'>The stabilizer only works on slimes!</span>"
|
||||
to_chat(user, "<span class='warning'>The stabilizer only works on slimes!</span>")
|
||||
return ..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'>The slime is dead!</span>"
|
||||
to_chat(user, "<span class='warning'>The slime is dead!</span>")
|
||||
return ..()
|
||||
if(M.mutation_chance == 0)
|
||||
user <<"<span class='warning'>The slime already has no chance of mutating!</span>"
|
||||
@@ -307,13 +307,13 @@
|
||||
|
||||
/obj/item/slimepotion/mutator/attack(mob/living/simple_animal/slime/M, mob/user)
|
||||
if(!isslime(M))
|
||||
user << "<span class='warning'>The mutator only works on slimes!</span>"
|
||||
to_chat(user, "<span class='warning'>The mutator only works on slimes!</span>")
|
||||
return ..()
|
||||
if(M.stat)
|
||||
user << "<span class='warning'>The slime is dead!</span>"
|
||||
to_chat(user, "<span class='warning'>The slime is dead!</span>")
|
||||
return ..()
|
||||
if(M.mutator_used)
|
||||
user << "<span class='warning'>This slime has already consumed a mutator, any more would be far too unstable!</span>"
|
||||
to_chat(user, "<span class='warning'>This slime has already consumed a mutator, any more would be far too unstable!</span>")
|
||||
return ..()
|
||||
if(M.mutation_chance == 100)
|
||||
user <<"<span class='warning'>The slime is already guaranteed to mutate!</span>"
|
||||
@@ -334,12 +334,12 @@
|
||||
/obj/item/slimepotion/speed/afterattack(obj/C, mob/user)
|
||||
..()
|
||||
if(!istype(C))
|
||||
user << "<span class='warning'>The potion can only be used on items or vehicles!</span>"
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on items or vehicles!</span>")
|
||||
return
|
||||
if(istype(C, /obj/item))
|
||||
var/obj/item/I = C
|
||||
if(I.slowdown <= 0)
|
||||
user << "<span class='warning'>The [C] can't be made any faster!</span>"
|
||||
to_chat(user, "<span class='warning'>The [C] can't be made any faster!</span>")
|
||||
return ..()
|
||||
I.slowdown = 0
|
||||
|
||||
@@ -348,7 +348,7 @@
|
||||
var/datum/riding/R = V.riding_datum
|
||||
if(V.riding_datum)
|
||||
if(R.vehicle_move_delay <= 0 )
|
||||
user << "<span class='warning'>The [C] can't be made any faster!</span>"
|
||||
to_chat(user, "<span class='warning'>The [C] can't be made any faster!</span>")
|
||||
return ..()
|
||||
R.vehicle_move_delay = 0
|
||||
|
||||
@@ -372,10 +372,10 @@
|
||||
qdel(src)
|
||||
return
|
||||
if(!istype(C))
|
||||
user << "<span class='warning'>The potion can only be used on clothing!</span>"
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on clothing!</span>")
|
||||
return
|
||||
if(C.max_heat_protection_temperature == FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT)
|
||||
user << "<span class='warning'>The [C] is already fireproof!</span>"
|
||||
to_chat(user, "<span class='warning'>The [C] is already fireproof!</span>")
|
||||
return ..()
|
||||
user <<"<span class='notice'>You slather the blue gunk over the [C], fireproofing it.</span>"
|
||||
C.name = "fireproofed [C.name]"
|
||||
@@ -396,11 +396,11 @@
|
||||
|
||||
/obj/item/slimepotion/genderchange/attack(mob/living/L, mob/user)
|
||||
if(!istype(L) || L.stat == DEAD)
|
||||
user << "<span class='warning'>The potion can only be used on living things!</span>"
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on living things!</span>")
|
||||
return
|
||||
|
||||
if(L.gender != MALE && L.gender != FEMALE)
|
||||
user << "<span class='warning'>The potion can only be used on gendered things!</span>"
|
||||
to_chat(user, "<span class='warning'>The potion can only be used on gendered things!</span>")
|
||||
return
|
||||
|
||||
if(L.gender == MALE)
|
||||
@@ -518,7 +518,7 @@
|
||||
ghost = O
|
||||
break
|
||||
if(!ghost)
|
||||
user << "<span class='warning'>The rune fizzles uselessly! There is no spirit nearby.</span>"
|
||||
to_chat(user, "<span class='warning'>The rune fizzles uselessly! There is no spirit nearby.</span>")
|
||||
return
|
||||
var/mob/living/carbon/human/G = new /mob/living/carbon/human
|
||||
G.set_species(/datum/species/golem/adamantine)
|
||||
@@ -529,8 +529,8 @@
|
||||
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 [user.p_them()] in completing their goals at any cost."
|
||||
to_chat(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 [user.p_them()] in completing their goals at any cost.")
|
||||
G.mind.store_memory("<b>Serve [user.real_name], your creator.</b>")
|
||||
|
||||
G.mind.enslave_mind_to_creator(user)
|
||||
|
||||
Reference in New Issue
Block a user