mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 23:58:07 +01:00
Merge remote-tracking branch 'upstream/master' into hog-mergeconflicts
Conflicts: code/__DEFINES/hud.dm code/__HELPERS/game.dm code/_onclick/hud/_defines.dm code/_onclick/hud/hud.dm code/game/gamemodes/antag_spawner.dm code/game/gamemodes/game_mode.dm code/game/machinery/turrets.dm code/modules/client/preferences_toggles.dm code/modules/events/alien_infestation.dm code/modules/mob/dead/observer/observer.dm code/modules/mob/living/carbon/alien/special/alien_embryo.dm code/modules/mob/living/simple_animal/revenant/revenant.dm icons/mob/back.dmi icons/mob/head.dmi icons/mob/hud.dmi icons/mob/inhands/items_lefthand.dmi icons/mob/inhands/items_righthand.dmi icons/mob/mob.dmi icons/mob/suit.dmi icons/obj/clothing/hats.dmi icons/obj/items.dmi icons/obj/projectiles.dmi icons/obj/storage.dmi
This commit is contained in:
@@ -281,6 +281,26 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/clothing/glasses/hud/security/night
|
||||
category = list("Equipment")
|
||||
|
||||
datum/design/diagnostic_hud
|
||||
name = "Diagnostic HUD"
|
||||
desc = "A HUD used to analyze and determine faults within robotic machinery."
|
||||
id = "dianostic_hud"
|
||||
req_tech = list("magnets" = 3, "engineering" = 3, "powerstorage" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 50, "$glass" = 50)
|
||||
build_path = /obj/item/clothing/glasses/hud/diagnostic
|
||||
category = list("Equipment")
|
||||
|
||||
datum/design/diagnostic_hud_night
|
||||
name = "Night Vision Diagnostic HUD"
|
||||
desc = "Upgraded version of the diagnostic HUD designed to function during a power failure."
|
||||
id = "dianostic_hud_night"
|
||||
req_tech = list("magnets" = 5, "engineering" = 4, "powerstorage" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 300)
|
||||
build_path = /obj/item/clothing/glasses/hud/diagnostic/night
|
||||
category = list("Equipment")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Test///////////////////
|
||||
/////////////////////////////////////////
|
||||
@@ -379,6 +399,16 @@ other types of metals and chemistry for reagents).
|
||||
build_path = /obj/item/clothing/shoes/magboots
|
||||
category = list("Equipment")
|
||||
|
||||
/datum/design/sci_goggles
|
||||
name = "Science Goggles"
|
||||
desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
|
||||
id = "scigoggles"
|
||||
req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 250, MAT_GLASS = 300)
|
||||
build_path = /obj/item/clothing/glasses/science
|
||||
category = list("Equipment")
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Janitor Designs//////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -569,4 +569,12 @@
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150, MAT_GLASS = 125)
|
||||
build_path = /obj/item/weapon/hand_labeler
|
||||
category = list("initial", "Electronics")
|
||||
category = list("initial", "Electronics")
|
||||
|
||||
/datum/design/geiger
|
||||
name = "Geiger counter"
|
||||
id = "geigercounter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
|
||||
build_path = /obj/item/device/geiger_counter
|
||||
category = list("initial", "Tools")
|
||||
|
||||
@@ -402,6 +402,16 @@
|
||||
build_path = /obj/item/weapon/circuitboard/autolathe
|
||||
category = list ("Misc. Machinery")
|
||||
|
||||
/datum/design/recharger
|
||||
name = "Machine Design (Weapon Recharger Board)"
|
||||
desc = "The circuit board for a Weapon Recharger."
|
||||
id = "recharger"
|
||||
req_tech = list("powerstorage" = 3, "engineering" = 3, "materials" = 4)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100)
|
||||
build_path = /obj/item/weapon/circuitboard/recharger
|
||||
category = list("Misc. Machinery")
|
||||
|
||||
/datum/design/vendor
|
||||
name = "Machine Design (Vendor Board)"
|
||||
desc = "The circuit board for a Vendor."
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
materials = list(MAT_METAL = 700, MAT_GLASS = 50)
|
||||
construction_time=100
|
||||
build_path = /obj/item/weapon/stock_parts/cell
|
||||
category = list("Misc","Power Designs")
|
||||
category = list("Misc","Power Designs","Machinery","initial")
|
||||
|
||||
/datum/design/high_cell
|
||||
name = "High-Capacity Power Cell"
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
|
||||
build_path = /obj/item/weapon/stock_parts/capacitor
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
|
||||
/datum/design/adv_capacitor
|
||||
name = "Advanced Capacitor"
|
||||
@@ -75,7 +75,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 50, MAT_GLASS = 20)
|
||||
build_path = /obj/item/weapon/stock_parts/scanning_module
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
|
||||
/datum/design/adv_scanning
|
||||
name = "Advanced Scanning Module"
|
||||
@@ -118,7 +118,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 30)
|
||||
build_path = /obj/item/weapon/stock_parts/manipulator
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
|
||||
/datum/design/nano_mani
|
||||
name = "Nano Manipulator"
|
||||
@@ -161,7 +161,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 20)
|
||||
build_path = /obj/item/weapon/stock_parts/micro_laser
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
|
||||
/datum/design/high_micro_laser
|
||||
name = "High-Power Micro-Laser"
|
||||
@@ -203,7 +203,7 @@
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 80)
|
||||
build_path = /obj/item/weapon/stock_parts/matter_bin
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts","Machinery","initial")
|
||||
|
||||
/datum/design/adv_matter_bin
|
||||
name = "Advanced Matter Bin"
|
||||
@@ -306,4 +306,4 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 100, MAT_SILVER = 10, MAT_URANIUM = 15)
|
||||
build_path = /obj/item/weapon/stock_parts/subspace/transmitter
|
||||
category = list("Stock Parts")
|
||||
category = list("Stock Parts")
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
//WT550 Mags
|
||||
|
||||
/datum/design/mag_oldsmg
|
||||
name = "WT-550 Auto Gun Magazine (9mm)"
|
||||
name = "WT-550 Auto Gun Magazine (4.6×30mm)"
|
||||
desc = "A 20 round magazine for the out of date security WT-550 Auto Rifle"
|
||||
id = "mag_oldsmg"
|
||||
req_tech = list("combat" = 1, "materials" = 1)
|
||||
@@ -190,24 +190,24 @@
|
||||
category = list("Ammo")
|
||||
|
||||
/datum/design/mag_oldsmg/ap_mag
|
||||
name = "WT-550 Auto Gun Armour Piercing Magazine (9mmAP)"
|
||||
name = "WT-550 Auto Gun Armour Piercing Magazine (4.6×30mm AP)"
|
||||
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Auto Rifle"
|
||||
id = "mag_oldsmg_ap"
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 200)
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 600)
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wtap
|
||||
|
||||
/datum/design/mag_oldsmg/ic_mag
|
||||
name = "WT-550 Auto Gun Incendiary Magazine (9mmIC)"
|
||||
name = "WT-550 Auto Gun Incendiary Magazine (4.6×30mm IC)"
|
||||
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Auto Rifle"
|
||||
id = "mag_oldsmg_ic"
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 200, MAT_GLASS = 800)
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
|
||||
|
||||
/datum/design/mag_oldsmg/tx_mag
|
||||
name = "WT-550 Auto Gun Urnaium Magazine (9mmTX)"
|
||||
name = "WT-550 Auto Gun Urnaium Magazine (4.6×30mm TX)"
|
||||
desc = "A 20 round urnaium tipped magazine for the out of date security WT-550 Auto Rifle"
|
||||
id = "mag_oldsmg_tx"
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 400, MAT_URANIUM = 2000)
|
||||
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_URANIUM = 2000)
|
||||
build_path = /obj/item/ammo_box/magazine/wt550m9/wttx
|
||||
|
||||
//SABR Mags
|
||||
|
||||
@@ -229,8 +229,8 @@
|
||||
loaded_item = null
|
||||
|
||||
/obj/machinery/r_n_d/experimentor/proc/throwSmoke(turf/where)
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, where, 0)
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(0, where)
|
||||
smoke.start()
|
||||
|
||||
/obj/machinery/r_n_d/experimentor/proc/pickWeighted(list/from)
|
||||
@@ -319,8 +319,8 @@
|
||||
R.my_atom = src
|
||||
R.add_reagent(chosenchem , 50)
|
||||
investigate_log("Experimentor has released [chosenchem] smoke.", "experimentor")
|
||||
var/datum/effect/effect/system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 0, src, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
qdel(R)
|
||||
@@ -331,8 +331,8 @@
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
R.my_atom = src
|
||||
R.add_reagent(chosenchem , 50)
|
||||
var/datum/effect/effect/system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 0, src, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
qdel(R)
|
||||
@@ -418,8 +418,8 @@
|
||||
R.my_atom = src
|
||||
R.add_reagent("frostoil" , 50)
|
||||
investigate_log("Experimentor has released frostoil gas.", "experimentor")
|
||||
var/datum/effect/effect/system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
var/datum/effect_system/smoke_spread/chem/smoke = new
|
||||
smoke.set_up(R, 0, src, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
qdel(R)
|
||||
@@ -440,8 +440,8 @@
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
|
||||
visible_message("<span class='warning'>[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!</span>")
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, src.loc, 0)
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(0, src.loc)
|
||||
smoke.start()
|
||||
ejectItem()
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -457,27 +457,23 @@
|
||||
visible_message("<span class='danger'>[src]'s crusher goes way too many levels too high, crushing right through space-time!</span>")
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
|
||||
investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor")
|
||||
var/list/throwAt = list()
|
||||
for(var/i in oview(7,src))
|
||||
if(istype(i,/obj/item) || istype(i,/mob/living))
|
||||
throwAt.Add(i)
|
||||
var/counter
|
||||
for(counter = 1, counter < throwAt.len, ++counter)
|
||||
var/cast = throwAt[counter]
|
||||
cast:throw_at(src,10,1)
|
||||
spawn(0)
|
||||
for(var/atom/movable/AM in oview(7,src))
|
||||
if(!AM.anchored)
|
||||
AM.throw_at(src,10,1)
|
||||
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='danger'>[src]'s crusher goes one level too high, crushing right into space-time!</span>")
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
|
||||
investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor")
|
||||
var/list/oViewStuff = oview(7,src)
|
||||
var/list/throwAt = list()
|
||||
for(var/i in oViewStuff)
|
||||
if(istype(i,/obj/item) || istype(i,/mob/living))
|
||||
throwAt.Add(i)
|
||||
var/counter
|
||||
for(counter = 1, counter < throwAt.len, ++counter)
|
||||
var/cast = throwAt[counter]
|
||||
cast:throw_at(pick(throwAt),10,1)
|
||||
for(var/atom/movable/AM in oview(7,src))
|
||||
if(!AM.anchored)
|
||||
throwAt.Add(AM)
|
||||
spawn(0)
|
||||
for(var/counter = 1, counter < throwAt.len, ++counter)
|
||||
var/atom/movable/cast = throwAt[counter]
|
||||
cast.throw_at(pick(throwAt),10,1)
|
||||
ejectItem(TRUE)
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if(exp == FAIL)
|
||||
@@ -646,8 +642,8 @@
|
||||
//////////////// RELIC PROCS /////////////////////////////
|
||||
|
||||
/obj/item/weapon/relic/proc/throwSmoke(turf/where)
|
||||
var/datum/effect/effect/system/smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, where, 0)
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(0, where)
|
||||
smoke.start()
|
||||
|
||||
/obj/item/weapon/relic/proc/corgicannon(mob/user)
|
||||
|
||||
@@ -276,7 +276,7 @@ var/obj/machinery/blackbox_recorder/blackbox
|
||||
var/pda_msg_amt = 0
|
||||
var/rc_msg_amt = 0
|
||||
|
||||
for (var/obj/machinery/message_server/MS in world)
|
||||
for (var/obj/machinery/message_server/MS in message_servers)
|
||||
if (MS.chat_msgs.len > chat_msg_amt)
|
||||
chat_msg_amt = MS.chat_msgs.len
|
||||
if (MS.pda_msgs.len > pda_msg_amt)
|
||||
|
||||
@@ -52,7 +52,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
var/list/datum/design/matching_designs = list() //for the search function
|
||||
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID.
|
||||
/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID.
|
||||
var/datum/tech/check_tech
|
||||
var/return_name = null
|
||||
for(var/T in typesof(/datum/tech) - /datum/tech)
|
||||
@@ -66,7 +66,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
return return_name
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/CallMaterialName(ID)
|
||||
proc/CallMaterialName(ID)
|
||||
var/datum/reagent/temp_reagent
|
||||
var/return_name = null
|
||||
if (copytext(ID, 1, 2) == "$")
|
||||
@@ -119,7 +119,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
//Have it automatically push research to the centcom server so wild griffins can't fuck up R&D's work --NEO
|
||||
/obj/machinery/computer/rdconsole/proc/griefProtection()
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in world)
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
|
||||
for(var/datum/tech/T in files.known_tech)
|
||||
C.files.AddTech2Known(T)
|
||||
for(var/datum/design/D in files.known_designs)
|
||||
@@ -132,7 +132,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
files = new /datum/research(src) //Setup the research data holder.
|
||||
matching_designs = list()
|
||||
if(!id)
|
||||
for(var/obj/machinery/r_n_d/server/centcom/S in world)
|
||||
for(var/obj/machinery/r_n_d/server/centcom/S in machines)
|
||||
S.initialize()
|
||||
break
|
||||
|
||||
@@ -314,7 +314,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
griefProtection() //Putting this here because I dont trust the sync process
|
||||
spawn(30)
|
||||
if(src)
|
||||
for(var/obj/machinery/r_n_d/server/S in world)
|
||||
for(var/obj/machinery/r_n_d/server/S in machines)
|
||||
var/server_processed = 0
|
||||
if(S.disabled)
|
||||
continue
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
return 0
|
||||
if(!prob(prb))
|
||||
return 0
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
if (electrocute_mob(user, get_area(src), src, 0.7))
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
//Backup files to centcom to help admins recover data after greifer attacks
|
||||
/obj/machinery/r_n_d/server/proc/griefProtection()
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in world)
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
|
||||
for(var/datum/tech/T in files.known_tech)
|
||||
C.files.AddTech2Known(T)
|
||||
for(var/datum/design/D in files.known_designs)
|
||||
@@ -151,7 +151,7 @@
|
||||
..()
|
||||
var/list/no_id_servers = list()
|
||||
var/list/server_ids = list()
|
||||
for(var/obj/machinery/r_n_d/server/S in world)
|
||||
for(var/obj/machinery/r_n_d/server/S in machines)
|
||||
switch(S.server_id)
|
||||
if(-1)
|
||||
continue
|
||||
@@ -203,20 +203,20 @@
|
||||
temp_server = null
|
||||
consoles = list()
|
||||
servers = list()
|
||||
for(var/obj/machinery/r_n_d/server/S in world)
|
||||
for(var/obj/machinery/r_n_d/server/S in machines)
|
||||
if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"]))
|
||||
temp_server = S
|
||||
break
|
||||
if(href_list["access"])
|
||||
screen = 1
|
||||
for(var/obj/machinery/computer/rdconsole/C in world)
|
||||
for(var/obj/machinery/computer/rdconsole/C in machines)
|
||||
if(C.sync)
|
||||
consoles += C
|
||||
else if(href_list["data"])
|
||||
screen = 2
|
||||
else if(href_list["transfer"])
|
||||
screen = 3
|
||||
for(var/obj/machinery/r_n_d/server/S in world)
|
||||
for(var/obj/machinery/r_n_d/server/S in machines)
|
||||
if(S == src)
|
||||
continue
|
||||
servers += S
|
||||
@@ -266,7 +266,7 @@
|
||||
if(0) //Main Menu
|
||||
dat += "Connected Servers:<BR><BR>"
|
||||
|
||||
for(var/obj/machinery/r_n_d/server/S in world)
|
||||
for(var/obj/machinery/r_n_d/server/S in machines)
|
||||
if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin)
|
||||
continue
|
||||
dat += "[S.name] || "
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
//Xenobio control console
|
||||
/mob/camera/aiEye/remote/xenobio
|
||||
visible_icon = 1
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "camera_target"
|
||||
|
||||
|
||||
/mob/camera/aiEye/remote/xenobio/setLoc(var/t)
|
||||
var/area/new_area = get_area(t)
|
||||
if(new_area && new_area.name == "Xenobiology Lab" || new_area && istype(new_area, /area/toxins/xenobiology ))
|
||||
return ..()
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio
|
||||
name = "Slime management console"
|
||||
desc = "A computer used for remotely handling slimes."
|
||||
networks = list("SS13")
|
||||
off_action = new/datum/action/innate/camera_off/xenobio
|
||||
var/datum/action/innate/slime_place/slime_place_action = new
|
||||
var/datum/action/innate/slime_pick_up/slime_up_action = new
|
||||
var/datum/action/innate/feed_slime/feed_slime_action = new
|
||||
var/datum/action/innate/monkey_recycle/monkey_recycle_action = new
|
||||
|
||||
var/list/stored_slimes = list()
|
||||
var/max_slimes = 5
|
||||
var/monkeys = 0
|
||||
|
||||
icon_screen = "slime_comp"
|
||||
icon_keyboard = "rd_key"
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/CreateEye()
|
||||
eyeobj = new /mob/camera/aiEye/remote/xenobio()
|
||||
eyeobj.loc = get_turf(src)
|
||||
eyeobj.origin = src
|
||||
eyeobj.visible_icon = 1
|
||||
eyeobj.icon = 'icons/obj/abductor.dmi'
|
||||
eyeobj.icon_state = "camera_target"
|
||||
|
||||
/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/carbon/user)
|
||||
off_action.target = user
|
||||
off_action.Grant(user)
|
||||
|
||||
jump_action.target = user
|
||||
jump_action.Grant(user)
|
||||
|
||||
slime_up_action.target = src
|
||||
slime_up_action.Grant(user)
|
||||
|
||||
slime_place_action.target = src
|
||||
slime_place_action.Grant(user)
|
||||
|
||||
feed_slime_action.target = src
|
||||
feed_slime_action.Grant(user)
|
||||
|
||||
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 ..()
|
||||
|
||||
/datum/action/innate/camera_off/xenobio/Activate()
|
||||
if(!target || !ishuman(target))
|
||||
return
|
||||
var/mob/living/carbon/C = target
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/origin = remote_eye.origin
|
||||
C.remote_view = 0
|
||||
origin.current_user = null
|
||||
origin.jump_action.Remove(C)
|
||||
origin.slime_place_action.Remove(C)
|
||||
origin.slime_up_action.Remove(C)
|
||||
origin.feed_slime_action.Remove(C)
|
||||
origin.monkey_recycle_action.Remove(C)
|
||||
//All of this stuff below could probably be a proc for all advanced cameras, only the action removal needs to be camera specific
|
||||
remote_eye.user = null
|
||||
if(C.client)
|
||||
C.client.perspective = MOB_PERSPECTIVE
|
||||
C.client.eye = src
|
||||
C.client.images -= remote_eye.user_image
|
||||
for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks)
|
||||
C.client.images -= chunk.obscured
|
||||
C.remote_control = null
|
||||
C.unset_machine()
|
||||
src.Remove(C)
|
||||
|
||||
|
||||
/datum/action/innate/slime_place
|
||||
name = "Place Slimes"
|
||||
button_icon_state = "slime_down"
|
||||
|
||||
/datum/action/innate/slime_place/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
if(cameranet.checkTurfVis(remote_eye.loc))
|
||||
for(var/mob/living/simple_animal/slime/S in X.stored_slimes)
|
||||
S.loc = remote_eye.loc
|
||||
S.visible_message("[S] warps in!")
|
||||
X.stored_slimes -= S
|
||||
|
||||
/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))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
if(cameranet.checkTurfVis(remote_eye.loc))
|
||||
for(var/mob/living/simple_animal/slime/S in remote_eye.loc)
|
||||
if(X.stored_slimes.len >= X.max_slimes)
|
||||
break
|
||||
if(!S.ckey)
|
||||
S.visible_message("[S] vanishes in a flash of light!")
|
||||
S.loc = X
|
||||
X.stored_slimes += S
|
||||
|
||||
|
||||
/datum/action/innate/feed_slime
|
||||
name = "Feed Slimes"
|
||||
button_icon_state = "monkey_down"
|
||||
|
||||
/datum/action/innate/feed_slime/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
if(cameranet.checkTurfVis(remote_eye.loc))
|
||||
if(X.monkeys > 0)
|
||||
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."
|
||||
|
||||
|
||||
/datum/action/innate/monkey_recycle
|
||||
name = "Recycle Monkeys"
|
||||
button_icon_state = "monkey_up"
|
||||
|
||||
/datum/action/innate/monkey_recycle/Activate()
|
||||
if(!target || !ishuman(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/C = owner
|
||||
var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/xenobio/X = target
|
||||
|
||||
if(cameranet.checkTurfVis(remote_eye.loc))
|
||||
for(var/mob/living/carbon/monkey/M in remote_eye.loc)
|
||||
if(M.stat)
|
||||
M.visible_message("[M] vanishes as they are reclaimed for recycling!")
|
||||
X.monkeys += 0.2
|
||||
qdel(M)
|
||||
@@ -204,6 +204,8 @@
|
||||
if(!src)
|
||||
return
|
||||
|
||||
listclearnulls(consenting_candidates) //some candidates might have left during sleep(50)
|
||||
|
||||
if(consenting_candidates.len)
|
||||
var/client/C = null
|
||||
C = pick(consenting_candidates)
|
||||
@@ -295,7 +297,24 @@
|
||||
M.mutator_used = TRUE
|
||||
qdel(src)
|
||||
|
||||
/obj/item/slimepotion/speed
|
||||
name = "slime speed potion"
|
||||
desc = "A potent chemical mix that will remove the slowdown from any item."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle3"
|
||||
|
||||
/obj/item/slimepotion/speed/afterattack(obj/item/C, mob/user)
|
||||
..()
|
||||
if(!istype(C))
|
||||
user << "<span class='warning'>The potion can only be used on items!</span>"
|
||||
return
|
||||
if(C.slowdown <= 0)
|
||||
user << "<span class='warning'>The [C] can't be made any faster!</span>"
|
||||
return..()
|
||||
user <<"<span class='notice'>You slather the red gunk over the [C], making it faster.</span>"
|
||||
C.color = "#FF0000"
|
||||
C.slowdown = 0
|
||||
qdel(src)
|
||||
|
||||
////////Adamantine Golem stuff I dunno where else to put it
|
||||
|
||||
@@ -367,15 +386,19 @@
|
||||
unacidable = 1
|
||||
layer = TURF_LAYER
|
||||
|
||||
New()
|
||||
..()
|
||||
SSobj.processing |= src
|
||||
/obj/effect/golemrune/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
|
||||
if(!O.client)
|
||||
continue
|
||||
if(O.mind && O.mind.current && O.mind.current.stat != DEAD)
|
||||
continue
|
||||
if (O.orbiting)
|
||||
continue
|
||||
ghost = O
|
||||
break
|
||||
if(ghost)
|
||||
@@ -386,8 +409,12 @@
|
||||
/obj/effect/golemrune/attack_hand(mob/living/user)
|
||||
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
|
||||
if(!O.client)
|
||||
continue
|
||||
if(O.mind && O.mind.current && O.mind.current.stat != DEAD)
|
||||
continue
|
||||
if (O.orbiting)
|
||||
continue
|
||||
ghost = O
|
||||
break
|
||||
if(!ghost)
|
||||
@@ -397,6 +424,7 @@
|
||||
G.set_species(/datum/species/golem/adamantine)
|
||||
G.set_cloned_appearance()
|
||||
G.real_name = "Adamantine Golem ([rand(1, 1000)])"
|
||||
G.name = G.real_name
|
||||
G.dna.unique_enzymes = G.dna.generate_unique_enzymes()
|
||||
G.dna.species.auto_equip(G)
|
||||
G.loc = src.loc
|
||||
@@ -421,6 +449,7 @@
|
||||
pixel_x = -64
|
||||
pixel_y = -64
|
||||
unacidable = 1
|
||||
mouse_opacity = 0
|
||||
var/mob/living/immune = list() // the one who creates the timestop is immune
|
||||
var/freezerange = 2
|
||||
var/duration = 140
|
||||
@@ -514,3 +543,18 @@
|
||||
icon_state = "sepia"
|
||||
desc = "Time seems to flow very slowly around these tiles"
|
||||
floor_tile = /obj/item/stack/tile/sepia
|
||||
|
||||
|
||||
/obj/item/areaeditor/blueprints/slime
|
||||
name = "cerulean prints"
|
||||
desc = "A one use yet of blueprints made of jelly like organic material. Renaming an area to 'Xenobiology Lab' will extend the reach of the management console."
|
||||
color = "#2956B2"
|
||||
|
||||
/obj/item/areaeditor/blueprints/slime/edit_area()
|
||||
var/success = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(success)
|
||||
for(var/turf/T in A)
|
||||
T.color = "#2956B2"
|
||||
qdel(src)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user