mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-27 07:08:00 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into newmininggear
Conflicts: _maps/map_files/DreamStation/dreamstation04.dmm
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///////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -107,6 +107,16 @@
|
||||
build_path = /obj/item/bodybag/bluespace
|
||||
category = list("Medical Designs")
|
||||
|
||||
/datum/design/plasmarefiller
|
||||
name = "Plasma-man jumpsuit refill"
|
||||
desc = "A refill pack for the auto-extinguisher on Plasma-man suits."
|
||||
id = "plasmarefiller"
|
||||
req_tech = list("materials" = 2, "combat" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_PLASMA = 1000)
|
||||
reliability = 76
|
||||
build_path = /obj/item/device/extinguisher_refill
|
||||
category = list("Medical Designs")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Cybernetic Implants////////////
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
name = "loyalty firing pin"
|
||||
desc = "This is a security firing pin which only authorizes users who are loyalty-implanted."
|
||||
id = "pin_loyalty"
|
||||
req_tech = list("combat" = 6, "materials" = 6, "powerstorage" = 3)
|
||||
req_tech = list("combat" = 5, "materials" = 6, "powerstorage" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_SILVER = 600, MAT_DIAMOND = 600, MAT_URANIUM = 200)
|
||||
build_path = /obj/item/device/firing_pin/implant/loyalty
|
||||
|
||||
@@ -1,18 +1,5 @@
|
||||
var/global/list/obj/machinery/message_server/message_servers = list()
|
||||
|
||||
/datum/data_chat_msg
|
||||
var/sender = "Anon"
|
||||
var/channel = "ss13"
|
||||
var/message = "Blank"
|
||||
|
||||
/datum/data_chat_msg/New(var/param_sen = "", var/param_chan = "", var/param_msg = "")
|
||||
if(param_sen)
|
||||
sender = param_sen
|
||||
if(param_chan)
|
||||
channel = param_chan
|
||||
if(param_msg)
|
||||
message = param_msg
|
||||
|
||||
/datum/data_pda_msg
|
||||
var/recipient = "Unspecified" //name of the person
|
||||
var/sender = "Unspecified" //name of the sender
|
||||
@@ -81,7 +68,6 @@ var/global/list/obj/machinery/message_server/message_servers = list()
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 100
|
||||
|
||||
var/list/datum/data_chat_msg/chat_msgs = list()
|
||||
var/list/datum/data_pda_msg/pda_msgs = list()
|
||||
var/list/datum/data_rc_msg/rc_msgs = list()
|
||||
var/active = 1
|
||||
@@ -115,9 +101,6 @@ var/global/list/obj/machinery/message_server/message_servers = list()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/message_server/proc/send_chat_message(sender = "", channel = "", message = "")
|
||||
chat_msgs += new/datum/data_chat_msg(sender,channel,message)
|
||||
|
||||
/obj/machinery/message_server/proc/send_pda_message(recipient = "",sender = "",message = "",photo=null)
|
||||
. = new/datum/data_pda_msg(recipient,sender,message,photo)
|
||||
pda_msgs += .
|
||||
@@ -272,13 +255,10 @@ var/obj/machinery/blackbox_recorder/blackbox
|
||||
|
||||
/obj/machinery/blackbox_recorder/proc/round_end_data_gathering()
|
||||
|
||||
var/chat_msg_amt = 0
|
||||
var/pda_msg_amt = 0
|
||||
var/rc_msg_amt = 0
|
||||
|
||||
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)
|
||||
pda_msg_amt = MS.pda_msgs.len
|
||||
if (MS.rc_msgs.len > rc_msg_amt)
|
||||
@@ -297,7 +277,6 @@ var/obj/machinery/blackbox_recorder/blackbox
|
||||
feedback_add_details("radio_usage","SRV-[msg_service.len]")
|
||||
feedback_add_details("radio_usage","CAR-[msg_cargo.len]")
|
||||
feedback_add_details("radio_usage","OTH-[messages.len]")
|
||||
feedback_add_details("radio_usage","CHA-[chat_msg_amt]")
|
||||
feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
|
||||
feedback_add_details("radio_usage","RC-[rc_msg_amt]")
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ proc/CallMaterialName(ID)
|
||||
return
|
||||
D.loc = src
|
||||
user << "<span class='notice'>You add the disk to the machine!</span>"
|
||||
else
|
||||
else if(!(linked_destroy && linked_destroy.busy) && !(linked_lathe && linked_lathe.busy) && !(linked_imprinter && linked_imprinter.busy))
|
||||
..()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
@@ -407,8 +407,7 @@ proc/CallMaterialName(ID)
|
||||
if( new_item.type == /obj/item/weapon/storage/backpack/holding )
|
||||
new_item.investigate_log("built by [key]","singulo")
|
||||
new_item.reliability = R
|
||||
new_item.materials[MAT_METAL] /= coeff
|
||||
new_item.materials[MAT_GLASS] /= coeff
|
||||
new_item.materials = efficient_mats.Copy()
|
||||
if(linked_lathe.hacked)
|
||||
R = max((new_item.reliability/2), 0)
|
||||
new_item.loc = linked_lathe.loc
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
//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" || 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)
|
||||
if(S.buckled)
|
||||
S.Feedstop(silent=1)
|
||||
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 >= 1)
|
||||
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)
|
||||
@@ -176,7 +176,7 @@
|
||||
user << "<span class='notice'>You offer the sentience potion to [M]...</span>"
|
||||
being_used = 1
|
||||
|
||||
var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET)
|
||||
var/list/candidates = get_candidates(ROLE_ALIEN, ALIEN_AFK_BRACKET)
|
||||
|
||||
shuffle(candidates)
|
||||
|
||||
@@ -316,6 +316,35 @@
|
||||
C.slowdown = 0
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/slimepotion/fireproof
|
||||
name = "slime chill potion"
|
||||
desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle17"
|
||||
var/uses = 3
|
||||
|
||||
/obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/C, mob/user)
|
||||
..()
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
return
|
||||
if(!istype(C))
|
||||
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>"
|
||||
return..()
|
||||
user <<"<span class='notice'>You slather the blue gunk over the [C], fireproofing it.</span>"
|
||||
C.name = "fireproofed [C.name]"
|
||||
C.color = "#000080"
|
||||
C.max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
C.heat_protection = C.body_parts_covered
|
||||
C.burn_state = -1
|
||||
uses --
|
||||
if(!uses)
|
||||
qdel(src)
|
||||
|
||||
////////Adamantine Golem stuff I dunno where else to put it
|
||||
|
||||
// This will eventually be removed.
|
||||
@@ -543,3 +572,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