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