Merge branch 'master' into upstream-merge-26965
This commit is contained in:
@@ -632,13 +632,12 @@
|
||||
return //won't work if dead
|
||||
var/list/ai_emotions = list("Very Happy", "Happy", "Neutral", "Unsure", "Confused", "Sad", "BSOD", "Blank", "Problems?", "Awesome", "Facepalm", "Friend Computer", "Dorfy", "Blue Glow", "Red Glow")
|
||||
var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions
|
||||
for (var/obj/machinery/M in GLOB.machines) //change status
|
||||
for (var/M in GLOB.ai_status_displays) //change status of displays
|
||||
if(istype(M, /obj/machinery/ai_status_display))
|
||||
var/obj/machinery/ai_status_display/AISD = M
|
||||
AISD.emotion = emote
|
||||
//if Friend Computer, change ALL displays
|
||||
else if(istype(M, /obj/machinery/status_display))
|
||||
|
||||
var/obj/machinery/status_display/SD = M
|
||||
if(emote=="Friend Computer")
|
||||
SD.friendc = 1
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
var/list/visibleCameraChunks = list()
|
||||
var/mob/living/silicon/ai/ai = null
|
||||
var/relay_speech = FALSE
|
||||
var/use_static = TRUE
|
||||
|
||||
// Use this when setting the aiEye's location.
|
||||
// It will also stream the chunk that the new loc is in.
|
||||
@@ -21,7 +22,8 @@
|
||||
return
|
||||
T = get_turf(T)
|
||||
loc = T
|
||||
GLOB.cameranet.visibility(src)
|
||||
if(use_static)
|
||||
GLOB.cameranet.visibility(src)
|
||||
if(ai.client)
|
||||
ai.client.eye = src
|
||||
update_parallax_contents()
|
||||
@@ -38,6 +40,11 @@
|
||||
return ai.client
|
||||
return null
|
||||
|
||||
/mob/camera/aiEye/proc/RemoveImages()
|
||||
if(use_static)
|
||||
for(var/datum/camerachunk/chunk in visibleCameraChunks)
|
||||
chunk.remove(src)
|
||||
|
||||
/mob/camera/aiEye/Destroy()
|
||||
ai = null
|
||||
return ..()
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
else if(istype(O,/obj/item/weapon/gun/energy/disabler/cyborg))
|
||||
disabler = 0
|
||||
update_icons()
|
||||
else if(istype(O,/obj/item/weapon/dogborg/sleeper))
|
||||
else if(istype(O,/obj/item/device/dogborg/sleeper))
|
||||
sleeper_g = 0
|
||||
sleeper_r = 0
|
||||
update_icons()
|
||||
var/obj/item/weapon/dogborg/sleeper/S = O
|
||||
var/obj/item/device/dogborg/sleeper/S = O
|
||||
S.go_out()
|
||||
if(client)
|
||||
client.screen -= O
|
||||
|
||||
@@ -97,6 +97,9 @@
|
||||
buckle_lying = FALSE
|
||||
can_ride_typecache = list(/mob/living/carbon/human)
|
||||
|
||||
/mob/living/silicon/robot/get_cell()
|
||||
return cell
|
||||
|
||||
/mob/living/silicon/robot/Initialize(mapload)
|
||||
spark_system = new /datum/effect_system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
@@ -206,7 +209,8 @@
|
||||
"Janitor" = /obj/item/weapon/robot_module/janitor, \
|
||||
"Service" = /obj/item/weapon/robot_module/butler, \
|
||||
"MediHound" = /obj/item/weapon/robot_module/medihound, \
|
||||
"Security K9" = /obj/item/weapon/robot_module/k9)
|
||||
"Security K9" = /obj/item/weapon/robot_module/k9, \
|
||||
"Scrub Puppy" = /obj/item/weapon/robot_module/scrubpup)
|
||||
if(!config.forbid_peaceborg)
|
||||
modulelist["Peacekeeper"] = /obj/item/weapon/robot_module/peacekeeper
|
||||
if(!config.forbid_secborg)
|
||||
@@ -595,9 +599,9 @@
|
||||
icon = 'icons/mob/widerobot.dmi'
|
||||
pixel_x = -16
|
||||
if(sleeper_g == 1)
|
||||
add_overlay("sleeper_g")
|
||||
add_overlay("msleeper_g")
|
||||
if(sleeper_r == 1)
|
||||
add_overlay("sleeper_r")
|
||||
add_overlay("msleeper_r")
|
||||
if(stat == DEAD)
|
||||
icon_state = "medihound-wreck"
|
||||
|
||||
@@ -608,9 +612,23 @@
|
||||
add_overlay("laser")
|
||||
if(disabler == 1)
|
||||
add_overlay("disabler")
|
||||
if(sleeper_g == 1)
|
||||
add_overlay("ksleeper_g")
|
||||
if(sleeper_r == 1)
|
||||
add_overlay("ksleeper_r")
|
||||
if(stat == DEAD)
|
||||
icon_state = "k9-wreck"
|
||||
|
||||
if(module.cyborg_base_icon == "scrubpup")
|
||||
icon = 'icons/mob/widerobot.dmi'
|
||||
pixel_x = -16
|
||||
if(sleeper_g == 1)
|
||||
add_overlay("jsleeper_g")
|
||||
if(sleeper_r == 1)
|
||||
add_overlay("jsleeper_r")
|
||||
if(stat == DEAD)
|
||||
icon_state = "scrubpup-wreck"
|
||||
|
||||
if(module.cyborg_base_icon == "robot")
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
pixel_x = initial(pixel_x)
|
||||
@@ -1140,7 +1158,7 @@
|
||||
return
|
||||
if(incapacitated())
|
||||
return
|
||||
if(M.restrained())
|
||||
if(M.incapacitated())
|
||||
return
|
||||
if(module)
|
||||
if(!module.allow_riding)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
add_fingerprint(user)
|
||||
if(opened && !wiresexposed && !issilicon(user))
|
||||
if(cell)
|
||||
cell.updateicon()
|
||||
cell.update_icon()
|
||||
cell.add_fingerprint(user)
|
||||
user.put_in_active_hand(cell)
|
||||
to_chat(user, "<span class='notice'>You remove \the [cell].</span>")
|
||||
|
||||
@@ -104,10 +104,10 @@
|
||||
S.cost = 1
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/wire)
|
||||
|
||||
else if(istype(S, /obj/item/stack/marker_beacon))
|
||||
S.cost = 1
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
|
||||
|
||||
else if(istype(S, /obj/item/stack/marker_beacon))
|
||||
S.cost = 1
|
||||
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
|
||||
|
||||
if(S && S.source)
|
||||
S.materials = list()
|
||||
S.is_cyborg = 1
|
||||
@@ -149,8 +149,8 @@
|
||||
F.update_icon()
|
||||
else if(istype(I, /obj/item/weapon/melee/baton))
|
||||
var/obj/item/weapon/melee/baton/B = I
|
||||
if(B.bcell)
|
||||
B.bcell.charge = B.bcell.maxcharge
|
||||
if(B.cell)
|
||||
B.cell.charge = B.cell.maxcharge
|
||||
else if(istype(I, /obj/item/weapon/gun/energy))
|
||||
var/obj/item/weapon/gun/energy/EG = I
|
||||
if(!EG.chambered)
|
||||
@@ -202,9 +202,9 @@
|
||||
/obj/item/weapon/robot_module/proc/do_transform_animation()
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
R.notransform = TRUE
|
||||
var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
|
||||
var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
|
||||
ANM.layer = R.layer - 0.01
|
||||
new /obj/effect/temp_visual/small_smoke(R.loc)
|
||||
new /obj/effect/temp_visual/small_smoke(R.loc)
|
||||
if(R.hat)
|
||||
R.hat.forceMove(get_turf(R))
|
||||
R.hat = null
|
||||
@@ -226,7 +226,7 @@
|
||||
if(R.hud_used)
|
||||
R.hud_used.update_robot_modules_display()
|
||||
if(feedback_key && !did_feedback)
|
||||
SSblackbox.inc(feedback_key, 1)
|
||||
SSblackbox.inc(feedback_key, 1)
|
||||
|
||||
/obj/item/weapon/robot_module/standard
|
||||
name = "Standard"
|
||||
@@ -250,7 +250,7 @@
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg,
|
||||
/obj/item/clockwork/clockwork_proselytizer/cyborg)
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
moduleselect_icon = "standard"
|
||||
feedback_key = "cyborg_standard"
|
||||
hat_offset = -3
|
||||
@@ -275,7 +275,7 @@
|
||||
/obj/item/roller/robo,
|
||||
/obj/item/borg/cyborghug/medical,
|
||||
/obj/item/stack/medical/gauze/cyborg,
|
||||
/obj/item/weapon/organ_storage,
|
||||
/obj/item/weapon/organ_storage,
|
||||
/obj/item/borg/lollipop)
|
||||
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/hacked)
|
||||
ratvar_modules = list(
|
||||
@@ -314,7 +314,7 @@
|
||||
emag_modules = list(/obj/item/borg/stun)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/engineer,
|
||||
/obj/item/clockwork/clockwork_proselytizer/cyborg)
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
cyborg_base_icon = "engineer"
|
||||
moduleselect_icon = "engineer"
|
||||
feedback_key = "cyborg_engineering"
|
||||
@@ -352,6 +352,7 @@
|
||||
/obj/item/clothing/mask/gas/sechailer/cyborg,
|
||||
/obj/item/weapon/soap/tongue,
|
||||
/obj/item/device/analyzer/nose,
|
||||
/obj/item/device/dogborg/sleeper/K9,
|
||||
/obj/item/weapon/gun/energy/disabler/cyborg)
|
||||
emag_modules = list(/obj/item/weapon/gun/energy/laser/cyborg)
|
||||
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
|
||||
@@ -367,6 +368,17 @@
|
||||
loc << "<span class='userdanger'>While you have picked the security-k9 module, you still have to follow your laws, NOT Space Law. \
|
||||
For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.</span>"
|
||||
|
||||
/obj/item/weapon/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
|
||||
..()
|
||||
var/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg) in basic_modules
|
||||
if(T)
|
||||
if(T.cell.charge < T.cell.maxcharge)
|
||||
var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select]
|
||||
T.cell.give(S.e_cost * coeff)
|
||||
T.update_icon()
|
||||
else
|
||||
T.charge_tick = 0
|
||||
|
||||
/obj/item/weapon/robot_module/medihound
|
||||
name = "MediHound module"
|
||||
basic_modules = list(
|
||||
@@ -374,7 +386,7 @@
|
||||
/obj/item/device/analyzer/nose,
|
||||
/obj/item/weapon/soap/tongue,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dogborg/sleeper,
|
||||
/obj/item/device/dogborg/sleeper,
|
||||
/obj/item/weapon/twohanded/shockpaddles/hound,
|
||||
/obj/item/device/sensor_device)
|
||||
emag_modules = list(/obj/item/weapon/dogborg/pounce)
|
||||
@@ -391,16 +403,36 @@
|
||||
loc << "<span class='userdanger'>Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
|
||||
You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.</span>"
|
||||
|
||||
/obj/item/weapon/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
|
||||
/obj/item/weapon/robot_module/scrubpup
|
||||
name = "Janitor"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/weapon/dogborg/jaws/small,
|
||||
/obj/item/device/analyzer/nose,
|
||||
/obj/item/weapon/soap/tongue,
|
||||
/obj/item/device/lightreplacer/cyborg,
|
||||
/obj/item/device/dogborg/sleeper/compactor)
|
||||
emag_modules = list(/obj/item/weapon/dogborg/pounce)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/janitor,
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
cyborg_base_icon = "scrubpup"
|
||||
moduleselect_icon = "scrubpup"
|
||||
feedback_key = "cyborg_scrubpup"
|
||||
hat_offset = INFINITY
|
||||
clean_on_move = TRUE
|
||||
|
||||
/obj/item/weapon/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
|
||||
..()
|
||||
var/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg) in basic_modules
|
||||
if(T)
|
||||
if(T.power_supply.charge < T.power_supply.maxcharge)
|
||||
var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select]
|
||||
T.power_supply.give(S.e_cost * coeff)
|
||||
T.update_icon()
|
||||
else
|
||||
T.charge_tick = 0
|
||||
var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules
|
||||
if(LR)
|
||||
for(var/i in 1 to coeff)
|
||||
LR.Charge(R)
|
||||
|
||||
/obj/item/weapon/robot_module/scrubpup/do_transform_animation()
|
||||
..()
|
||||
loc << "<span class='userdanger'>As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly.</span>"
|
||||
|
||||
|
||||
/obj/item/weapon/robot_module/peacekeeper
|
||||
name = "Peacekeeper"
|
||||
@@ -411,8 +443,8 @@
|
||||
/obj/item/weapon/reagent_containers/borghypo/peace,
|
||||
/obj/item/weapon/holosign_creator/cyborg,
|
||||
/obj/item/borg/cyborghug/peacekeeper,
|
||||
/obj/item/weapon/extinguisher,
|
||||
/obj/item/borg/projectile_dampen)
|
||||
/obj/item/weapon/extinguisher,
|
||||
/obj/item/borg/projectile_dampen)
|
||||
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/peace/hacked)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/peacekeeper,
|
||||
@@ -432,6 +464,9 @@
|
||||
name = "Janitor"
|
||||
basic_modules = list(
|
||||
/obj/item/device/assembly/flash/cyborg,
|
||||
/obj/item/weapon/screwdriver/cyborg,
|
||||
/obj/item/weapon/crowbar/cyborg,
|
||||
/obj/item/stack/tile/plasteel/cyborg,
|
||||
/obj/item/weapon/soap/nanotrasen,
|
||||
/obj/item/weapon/storage/bag/trash/cyborg,
|
||||
/obj/item/weapon/mop/cyborg,
|
||||
@@ -441,7 +476,7 @@
|
||||
emag_modules = list(/obj/item/weapon/reagent_containers/spray/cyborg_lube)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/janitor,
|
||||
/obj/item/clockwork/clockwork_proselytizer/cyborg)
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
cyborg_base_icon = "janitor"
|
||||
moduleselect_icon = "janitor"
|
||||
feedback_key = "cyborg_janitor"
|
||||
@@ -539,8 +574,8 @@
|
||||
/obj/item/weapon/storage/bag/sheetsnatcher/borg,
|
||||
/obj/item/device/t_scanner/adv_mining_scanner,
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg,
|
||||
/obj/item/device/gps/cyborg,
|
||||
/obj/item/stack/marker_beacon)
|
||||
/obj/item/device/gps/cyborg,
|
||||
/obj/item/stack/marker_beacon)
|
||||
emag_modules = list(/obj/item/borg/stun)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/miner,
|
||||
@@ -636,8 +671,8 @@
|
||||
max_energy = 2500
|
||||
recharge_rate = 250
|
||||
name = "Medical Synthesizer"
|
||||
|
||||
/datum/robot_energy_storage/beacon
|
||||
max_energy = 30
|
||||
recharge_rate = 1
|
||||
name = "Marker Beacon Storage"
|
||||
|
||||
/datum/robot_energy_storage/beacon
|
||||
max_energy = 30
|
||||
recharge_rate = 1
|
||||
name = "Marker Beacon Storage"
|
||||
|
||||
Reference in New Issue
Block a user