From 46b68598d38f81915a85b88b64495cca65d07587 Mon Sep 17 00:00:00 2001
From: skoglol <33292112+kriskog@users.noreply.github.com>
Date: Sun, 6 Oct 2019 11:36:55 +0200
Subject: [PATCH] Some KS13 improvements (#46879)
About The Pull Request
Having observed a bit of how people play the derelict drones after #45965, I got a few additions and changes to the derelict to make it more enjoyable.
Power cable into the AI core/vault area was hard to find under an rwall, have run an additional one into the room to give easier access to pre-smes power.
Added a derelict drone printer, so more friends can be printed. Starts without materials
Added mother drone core lawset to secure storage. This was intended in the last PR, but forgotten.
Added a dronespeak manual that drones can use to teach other drones or silicons the drone language. Works like the codespeak manual.
Why It's Good For The Game
KS13 is frequently made great again.
Changelog
cl Skoglol
tweak: Slight mapping improvement to KS13
add: KS13 now has mother drone board, a dronespeak granter and a drone printer.
/cl
---
_maps/RandomRuins/SpaceRuins/TheDerelict.dmm | 52 ++++++++++++-------
code/game/machinery/droneDispenser.dm | 11 ++++
.../friendly/drone/extra_drone_types.dm | 2 +-
.../ruins/spaceruin_code/TheDerelict.dm | 39 ++++++++++++++
4 files changed, 85 insertions(+), 19 deletions(-)
diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
index 32c32094087..fea17a38cc5 100644
--- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
+++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm
@@ -392,6 +392,10 @@
"bV" = (
/obj/structure/rack,
/obj/item/circuitboard/machine/circuit_imprinter,
+/obj/item/aiModule/core/full/drone{
+ pixel_x = -4;
+ pixel_y = -2
+ },
/turf/open/floor/plasteel,
/area/ruin/space/derelict/bridge/ai_upload)
"bW" = (
@@ -1259,7 +1263,7 @@
/turf/open/floor/plasteel/airless,
/area/ruin/space/derelict/bridge/access)
"fw" = (
-/obj/effect/mob_spawn/drone/dusty,
+/obj/effect/mob_spawn/drone/derelict,
/turf/open/floor/plasteel/airless,
/area/ruin/space/derelict/bridge/access)
"fx" = (
@@ -1980,7 +1984,7 @@
/turf/open/floor/plating/airless,
/area/ruin/space/derelict/singularity_engine)
"in" = (
-/obj/effect/mob_spawn/drone/dusty,
+/obj/effect/mob_spawn/drone/derelict,
/turf/open/floor/plating/airless,
/area/ruin/space/derelict/singularity_engine)
"io" = (
@@ -3424,7 +3428,7 @@
dir = 1
},
/obj/structure/cable,
-/obj/effect/mob_spawn/drone/dusty,
+/obj/effect/mob_spawn/drone/derelict,
/turf/open/floor/plasteel/airless,
/area/ruin/space/derelict/se_solar)
"nV" = (
@@ -3673,6 +3677,10 @@
/obj/structure/lattice,
/turf/template_noop,
/area/ruin/unpowered/no_grav)
+"GP" = (
+/obj/structure/cable,
+/turf/open/floor/plasteel/airless,
+/area/ruin/space/derelict/bridge/ai_upload)
"Ih" = (
/turf/open/floor/plasteel/airless{
icon_state = "damaged3"
@@ -3725,6 +3733,10 @@
"KN" = (
/turf/closed/wall,
/area/ruin/space/derelict/hallway/primary/port)
+"KP" = (
+/obj/item/dronespeak_manual,
+/turf/open/floor/plasteel/airless,
+/area/ruin/space/derelict/bridge/ai_upload)
"KS" = (
/obj/item/storage/box/lights/mixed,
/turf/open/floor/plasteel/airless,
@@ -3837,6 +3849,13 @@
"Uz" = (
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"UG" = (
+/obj/structure/cable,
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/derelict/bridge/ai_upload)
"Vt" = (
/obj/structure/cable,
/turf/closed/indestructible/riveted{
@@ -3884,17 +3903,14 @@
},
/turf/open/floor/plasteel/airless,
/area/ruin/space/derelict/bridge/ai_upload)
-"ZA" = (
-/obj/machinery/power/terminal{
- dir = 1
- },
-/obj/structure/cable,
-/turf/closed/wall/r_wall,
-/area/ruin/space/derelict/bridge/ai_upload)
"ZB" = (
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
+"ZM" = (
+/obj/machinery/droneDispenser/derelict,
+/turf/open/floor/plasteel,
+/area/ruin/space/derelict/bridge/access)
(1,1,1) = {"
aa
@@ -10359,10 +10375,10 @@ bj
ax
bG
Ob
-bO
-bz
-bO
-ax
+xr
+GP
+YQ
+ce
aa
aa
aa
@@ -10475,7 +10491,7 @@ bE
bO
bO
bO
-ax
+ce
aa
aa
aa
@@ -10588,7 +10604,7 @@ Lr
xr
YQ
LX
-ZA
+UG
ce
ce
ce
@@ -10706,7 +10722,7 @@ bj
bj
bj
cs
-cx
+ZM
cF
cx
cT
@@ -11151,7 +11167,7 @@ bW
Zu
bz
rC
-bz
+KP
vo
bW
bj
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index 82381d85f8e..e50cb91c7f3 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -85,6 +85,17 @@
power_used = 2000
starting_amount = 10000
+// If the derelict gets lonely, make more friends.
+/obj/machinery/droneDispenser/derelict
+ name = "derelict drone shell dispenser"
+ desc = "A rusty machine that, when supplied with metal and glass, will periodically create a derelict drone shell. Does not need to be manually operated."
+ dispense_type = /obj/effect/mob_spawn/drone/derelict
+ end_create_message = "dispenses a derelict drone shell."
+ metal_cost = 10000
+ glass_cost = 5000
+ starting_amount = 0
+ cooldownTime = 600
+
// An example of a custom drone dispenser.
// This one requires no materials and creates basic hivebots
/obj/machinery/droneDispenser/hivebot
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
index 780fadc2107..9e01e8e8b7a 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm
@@ -96,7 +96,7 @@
icon_living = icon_state
icon_dead = "[visualAppearence]_dead"
-/obj/effect/mob_spawn/drone/dusty
+/obj/effect/mob_spawn/drone/derelict
name = "derelict drone shell"
desc = "A long-forgotten drone shell. It seems kind of... Space Russian."
icon = 'icons/mob/drone.dmi'
diff --git a/code/modules/ruins/spaceruin_code/TheDerelict.dm b/code/modules/ruins/spaceruin_code/TheDerelict.dm
index 6a4f0017cbe..5c6b0622523 100644
--- a/code/modules/ruins/spaceruin_code/TheDerelict.dm
+++ b/code/modules/ruins/spaceruin_code/TheDerelict.dm
@@ -164,3 +164,42 @@
if(C.tool_behaviour == TOOL_SCREWDRIVER)
return
..()
+
+
+// So drones can teach borgs and AI dronespeak. For best effect, combine with mother drone lawset.
+/obj/item/dronespeak_manual
+ name = "dronespeak manual"
+ desc = "The book's cover reads: \"Understanding Dronespeak - An exercise in futility.\""
+ icon = 'icons/obj/library.dmi'
+ icon_state = "book2"
+
+/obj/item/dronespeak_manual/attack_self(mob/living/user)
+ ..()
+ if(isdrone(user) || issilicon(user))
+ if(user.has_language(/datum/language/drone))
+ to_chat(user, "You start skimming through [src], but you already know dronespeak.")
+ else
+ to_chat(user, "You start skimming through [src], and suddenly the drone chittering makes sense.")
+ user.grant_language(/datum/language/drone)
+ return
+
+ if(user.has_language(/datum/language/drone))
+ to_chat(user, "You start skimming through [src], but you already know dronespeak.")
+ else
+ to_chat(user, "You start skimming through [src], but you can't make any sense of the contents.")
+
+/obj/item/dronespeak_manual/attack(mob/living/M, mob/living/user)
+ if(!istype(M) || !istype(user))
+ return
+ if(M == user)
+ attack_self(user)
+ return
+
+ playsound(loc, "punch", 25, TRUE, -1)
+ if(isdrone(M) || issilicon(M))
+ if(M.has_language(/datum/language/drone))
+ M.visible_message("[user] beats [M] over the head with [src]!", "[user] beats you over the head with [src]!", "You hear smacking.")
+ else
+ M.visible_message("[user] teaches [M] by beating [M.p_them()] over the head with [src]!", "As [user] hits you with [src], chitters resonate in your mind.", "You hear smacking.")
+ M.grant_language(/datum/language/drone)
+ return