From c7ca55d24ab13b13f45dcbfaa26ba62e3cbb71ce Mon Sep 17 00:00:00 2001 From: Evankhell561 <49106866+Evankhell561@users.noreply.github.com> Date: Wed, 24 Feb 2021 09:17:14 +0100 Subject: [PATCH 1/2] [bounty] Warping Crossbreeds (bluespace) (#3325) * 1/2 * 2/3 * Create warped_room.dmm * ready? 4/4 * fixes * sprite fix * fix click * Update warping.dm * --- * fix gold * fix logic * rainbow room and list * fixes * Merge remote-tracking branch 'upstream/master' into crossblack * Update warping.dm * Update warping.dm * Update slime.dm * dark_blue * Update warping.dm * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update slime.dm * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update warping.dm * Update empulse.dm * des * var names * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> * Destroy * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update code/modules/research/xenobiology/crossbreeding/warping.dm Co-authored-by: Xenomedes * Update warping.dm * Apply suggestions from code review * Last minute changes Co-authored-by: TheFakeElon <59686430+TheFakeElon@users.noreply.github.com> Co-authored-by: Xenomedes --- _maps/templates/warped_room.dmm | 363 ++++++++ code/game/objects/effects/forcefields.dm | 4 +- code/game/objects/empulse.dm | 13 +- code/modules/hydroponics/grown/towercap.dm | 3 + .../mob/living/simple_animal/slime/slime.dm | 3 + .../xenobiology/crossbreeding/warping.dm | 845 ++++++++++++++++++ .../research/xenobiology/xenobiology.dm | 23 + singulostation/icons/obj/slimecrossing.dmi | Bin 3541 -> 76601 bytes tgstation.dme | 1 + 9 files changed, 1247 insertions(+), 8 deletions(-) create mode 100644 _maps/templates/warped_room.dmm create mode 100644 code/modules/research/xenobiology/crossbreeding/warping.dm diff --git a/_maps/templates/warped_room.dmm b/_maps/templates/warped_room.dmm new file mode 100644 index 00000000000..0ab31ad5b48 --- /dev/null +++ b/_maps/templates/warped_room.dmm @@ -0,0 +1,363 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/hotelwall, +/area/warped_room) +"b" = ( +/turf/open/indestructible/hotelwood, +/area/warped_room) +"c" = ( +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"d" = ( +/obj/machinery/door/window/northleft, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"e" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"f" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"g" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"h" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/three_course_meal, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"i" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"j" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"k" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/color/random, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"l" = ( +/obj/machinery/light, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"m" = ( +/obj/structure/chair/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"n" = ( +/obj/machinery/computer/arcade/orion_trail, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"o" = ( +/obj/structure/chair/wood, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"p" = ( +/obj/structure/table/wood, +/obj/structure/showcase/machinery/microwave, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"q" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"r" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"s" = ( +/obj/machinery/processor, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"t" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"u" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/item/kitchen/knife, +/obj/item/kitchen/rollingpin, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"v" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"w" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/narplush, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"x" = ( +/obj/structure/table/wood, +/obj/item/toy/plush/plushvar, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"y" = ( +/obj/structure/table/wood, +/obj/item/paper, +/obj/item/pen, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"z" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"A" = ( +/obj/machinery/vending/cola/random, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"B" = ( +/obj/machinery/vending/snack/random, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"C" = ( +/obj/machinery/computer/arcade/battle, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"D" = ( +/obj/structure/chair/stool, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"E" = ( +/obj/machinery/door/airlock/wood, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"F" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/warped_room) +"G" = ( +/obj/machinery/door/airlock/wood, +/turf/open/indestructible/hoteltile, +/area/warped_room) +"H" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + locked = 0 + }, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"I" = ( +/obj/structure/table/wood, +/obj/item/storage/pill_bottle/dice, +/turf/open/indestructible/hotelwood, +/area/warped_room) +"K" = ( +/obj/structure/sign/departments/restroom, +/turf/closed/indestructible/hotelwall, +/area/warped_room) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +w +m +b +j +b +h +q +H +a +"} +(3,1,1) = {" +a +e +b +b +b +b +p +b +s +a +"} +(4,1,1) = {" +a +b +b +b +b +b +d +b +t +a +"} +(5,1,1) = {" +a +g +b +b +b +b +z +r +u +a +"} +(6,1,1) = {" +a +a +E +a +b +b +b +b +l +a +"} +(7,1,1) = {" +a +b +b +a +b +b +b +b +b +a +"} +(8,1,1) = {" +a +g +b +a +b +o +y +x +m +a +"} +(9,1,1) = {" +a +k +f +a +b +o +c +c +m +a +"} +(10,1,1) = {" +a +a +a +a +b +b +b +b +b +a +"} +(11,1,1) = {" +a +n +D +b +b +b +b +b +l +a +"} +(12,1,1) = {" +a +A +b +b +b +b +b +b +b +a +"} +(13,1,1) = {" +a +B +b +b +b +b +i +K +G +a +"} +(14,1,1) = {" +a +C +D +b +v +o +I +a +F +a +"} +(15,1,1) = {" +a +a +a +a +a +a +a +a +a +a +"} diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index 751025e7b49..47b236f3707 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -8,8 +8,10 @@ CanAtmosPass = ATMOS_PASS_DENSITY var/timeleft = 300 //Set to 0 for permanent forcefields (ugh) -/obj/effect/forcefield/Initialize() +/obj/effect/forcefield/Initialize(mapload, ntiemelef) . = ..() + if(ntiemelef) + timeleft = ntiemelef if(timeleft) QDEL_IN(src, timeleft) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index e7246fd04ef..b1c78ddfac5 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -15,18 +15,17 @@ if(heavy_range > light_range) light_range = heavy_range - for(var/A in spiral_range(light_range, epicenter)) - var/atom/T = A - var/distance = get_dist(epicenter, T) + for(var/atom/A as() in spiral_range(light_range, epicenter)) + var/distance = get_dist(epicenter, A) if(distance < 0) distance = 0 if(distance < heavy_range) - T.emp_act(EMP_HEAVY) + A.emp_act(EMP_HEAVY) else if(distance == heavy_range) if(prob(50)) - T.emp_act(EMP_HEAVY) + A.emp_act(EMP_HEAVY) else - T.emp_act(EMP_LIGHT) + A.emp_act(EMP_LIGHT) else if(distance <= light_range) - T.emp_act(EMP_LIGHT) + A.emp_act(EMP_LIGHT) return 1 diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 5a5fd645fc0..18b68c1f756 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -157,6 +157,9 @@ var/grill = FALSE var/fire_stack_strength = 5 +/obj/structure/bonfire/bluespace + needs_oxygen = FALSE + /obj/structure/bonfire/dense density = TRUE diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 4a8c4fe1a4e..ec1d7b6ba7e 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -493,3 +493,6 @@ /mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_is_adult) . = ..(mapload, pick(slime_colours), prob(50)) + +/mob/living/simple_animal/slime/rainbow/Initialize(mapload, new_colour="rainbow", new_is_adult) + . = ..(mapload, new_colour, new_is_adult) diff --git a/code/modules/research/xenobiology/crossbreeding/warping.dm b/code/modules/research/xenobiology/crossbreeding/warping.dm new file mode 100644 index 00000000000..704ccf6fbb7 --- /dev/null +++ b/code/modules/research/xenobiology/crossbreeding/warping.dm @@ -0,0 +1,845 @@ +/* +Warping extracts crossbreed +put up a rune with bluespace effects, lots of those runes are fluff or act as a passive buff, others are just griefing tools +*/ + +/obj/item/slimecross/warping + name = "warped extract" + desc = "It just won't stay in place." + icon_state = "warping" + effect = "warping" + colour = "grey" + ///what runes will be drawn depending on the crossbreed color + var/obj/effect/warped_rune/runepath + /// the number of "charge" a bluespace crossbreed start with + var/warp_charge = INFINITY + ///time it takes to store the rune back into the crossbreed + var/storing_time = 5 SECONDS + ///time it takes to draw the rune + var/drawing_time = 5 SECONDS + var/max_cooldown = 30 SECONDS + var/cooldown = 0 + +/obj/effect/warped_rune + name = "warped rune" + desc = "An unstable rune born of the depths of bluespace" + icon = 'singulostation/icons/obj/slimecrossing.dmi' + icon_state = "greyspace_rune" + move_resist = INFINITY //here to avoid the rune being moved since it only sets it's turf once when it's drawn. doesn't include admin fuckery. + anchored = TRUE + layer = MID_TURF_LAYER + resistance_flags = FIRE_PROOF + var/dir_sound = 'sound/effects/phasein.ogg' + var/activated_on_step = FALSE + ///is only used for bluespace crystal erasing as of now + var/storing_time = 5 SECONDS + ///Nearly all runes needs to know which turf they are on + var/turf/rune_turf + var/remove_on_activation = TRUE + +/obj/item/slimecross/warping/examine() + . = ..() + . += "It has [warp_charge] charge left" + +///runes can also be deleted by bluespace crystals relatively fast as an alternative to cleaning them. +/obj/effect/warped_rune/attackby(obj/item/used_item, mob/user) + . = ..() + if(!istype(used_item,/obj/item/stack/sheet/bluespace_crystal) && !istype(used_item,/obj/item/stack/ore/bluespace_crystal)) + return + + var/obj/item/stack/space_crystal = used_item + if(do_after(user, storing_time,target = src)) //the time it takes to nullify it depends on the rune too + to_chat(user, "You nullify the effects of the rune with the bluespace crystal!") + space_crystal.use(1) + playsound(src, 'sound/effects/phasein.ogg', 20, TRUE) + qdel(src) + +/obj/effect/warped_rune/acid_act() + . = ..() + visible_message("[src] has been dissolved by the acid") + playsound(src, 'sound/items/welder.ogg', 150, TRUE) + qdel(src) + + +///nearly all runes use their turf in some way so we set rune_turf to their turf automatically, the rune also start on cooldown if it uses one. +/obj/effect/warped_rune/Initialize() + . = ..() + add_overlay("blank", TRUE) + rune_turf = get_turf(src) + RegisterSignal(rune_turf, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_rune) + +/obj/effect/warped_rune/proc/clean_rune() + qdel(src) + +///using the extract on the floor will "draw" the rune. +/obj/item/slimecross/warping/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity) + return + + if(istype(target, runepath)) //checks if the target is a rune and then if you can store it + if(do_after(user, storing_time,target = target)) + warping_crossbreed_absorb(target, user) + return + + if(isturf(target) && locate(/obj/effect/warped_rune) in target) //check if the target is a floor and if there's a rune on said floor + to_chat(user, "There is already a bluespace rune here!") + return + + if(!isfloorturf(target)) + to_chat(user, "you cannot draw a rune here!") + return + + if(warp_charge < 1) //check if we have at least 1 charge left. + to_chat(user, "[src] is empty!") + return + + if(!check_cd(user)) + return + + if(do_after(user, drawing_time,target = target)) + if(warp_charge >= 1 && (!locate(/obj/effect/warped_rune) in target) && check_cd(user)) //check one last time if a rune has been drawn during the do_after and if there's enough charges left + warping_crossbreed_spawn(target,user) + make_cd() + + +///spawns the rune, taking away one rune charge +/obj/item/slimecross/warping/proc/warping_crossbreed_spawn(atom/target, mob/user) + playsound(target, 'sound/effects/slosh.ogg', 20, TRUE) + warp_charge-- + new runepath(target) + to_chat(user, "You carefully draw the rune with [src].") + + +///absorb the rune into the crossbreed adding one more charge to the crossbreed. +/obj/item/slimecross/warping/proc/warping_crossbreed_absorb(atom/target, mob/user) + //to_chat(user, "You store the rune in [src].") + qdel(target) + warp_charge++ + +/obj/item/slimecross/warping/proc/check_cd(user) + if(world.time < cooldown) + if(user) + to_chat(user, "[src] is recharging energy.") + return FALSE + return TRUE + +/obj/item/slimecross/warping/proc/make_cd() + cooldown = world.time + max_cooldown + +/obj/effect/warped_rune/attack_hand(mob/living/user) + . = ..() + do_effect(user) + +/obj/effect/warped_rune/proc/do_effect(mob/user) + SHOULD_CALL_PARENT(TRUE) + if(remove_on_activation) + playsound(rune_turf, dir_sound, 20, TRUE) + to_chat(user, ("[src] fades.")) + qdel(src) + +/obj/effect/warped_rune/Crossed(atom/movable/AM, oldloc) + SHOULD_CALL_PARENT(TRUE) + . = ..() + if(activated_on_step) + playsound(rune_turf, dir_sound, 20, TRUE) + visible_message("[src] fades.") + qdel(src) + +/obj/item/slimecross/warping/grey + name = "greyspace crossbreed" + colour = "grey" + effect_desc = "Draws a rune. Extracts that are on the rune are absorbed, 8 extracts produces an adult slime of that color." + runepath = /obj/effect/warped_rune/greyspace + +/obj/effect/warped_rune/greyspace + name = "greyspace rune" + desc = "Death is merely a setback, anything can be rebuilt given the right components." + icon_state = "rune_grey" + ///extractype is used to remember the type of the extract on the rune + var/extractype + var/req_extracts = 8 + +/obj/effect/warped_rune/greyspace/examine(mob/user) + . = ..() + to_chat(user, "Requires absorbing [req_extracts] [extractype ? "[extractype] extracts" : "slime extracts"].") + +/obj/effect/warped_rune/greyspace/do_effect(mob/user) + for(var/obj/item/slime_extract/extract in rune_turf) + if(extract.color_slime == extractype || !extractype) //check if the extract is the first one or of the right color. + extractype = extract.color_slime + qdel(extract) //vores the slime extract + req_extracts-- + if(req_extracts <= 0) + new /mob/living/simple_animal/slime (rune_turf, extractype) //spawn a slime from the extract's color + req_extracts = initial(req_extracts) + extractype = null // reset extractype to FALSE to allow a new extract type + . = ..() + break + playsound(rune_turf, 'sound/effects/splat.ogg', 20, TRUE) + else + to_chat(user, "Requires a [extractype ? "[extractype] extracts" : "slime extract"].") + + +/obj/item/slimecross/warping/orange + colour = "orange" + runepath = /obj/effect/warped_rune/orangespace + effect_desc = "Draws a rune that can summon a bonfire." + +/obj/effect/warped_rune/orangespace + desc = "This can be activated to summon a bonfire." + icon_state = "rune_orange" + +/obj/effect/warped_rune/orangespace/do_effect(mob/user) + var/obj/structure/bonfire/bluespace/B = new (rune_turf) + B.StartBurning() + . = ..() + +/obj/item/slimecross/warping/purple + colour = "purple" + runepath = /obj/effect/warped_rune/purplespace + effect_desc = "Draws a rune that may be activated to summon two random medical items." + +/obj/effect/warped_rune/purplespace + desc = "This can be activated to summon two random medical." + icon_state = "rune_purple" + +/obj/effect/warped_rune/purplespace/do_effect(mob/user) + var/list/medical = list( + /obj/item/stack/medical/gauze, + /obj/item/reagent_containers/hypospray/medipen, + /obj/item/stack/medical/bruise_pack, + /obj/item/stack/medical/ointment, + /obj/item/reagent_containers/pill/oxandrolone, + /obj/item/storage/pill_bottle/charcoal, + /obj/item/reagent_containers/pill/mutadone, + /obj/item/reagent_containers/pill/antirad, + /obj/item/reagent_containers/pill/patch/styptic, + /obj/item/reagent_containers/pill/patch/synthflesh, + /obj/item/reagent_containers/pill/patch/silver_sulf, + /obj/item/healthanalyzer, + /obj/item/surgical_drapes, + /obj/item/scalpel, + /obj/item/hemostat, + /obj/item/cautery, + /obj/item/circular_saw, + /obj/item/surgicaldrill, + /obj/item/retractor, + /obj/item/blood_filter) + + for(var/i in 1 to 2) + var/path = pick_n_take(medical) + new path(rune_turf) + . = ..() + +/obj/item/slimecross/warping/blue + colour = "blue" + runepath = /obj/effect/warped_rune/cyanspace //we'll call the blue rune cyanspace to not mix it up with actual bluespace rune + effect_desc = "Draw a rune that is slippery like water and may be activated to cover all adjacent tiles in ice." + +/obj/effect/warped_rune/cyanspace + icon_state = "rune_blue" + desc = "Its slippery like water and may be activated to cover all adjacent tiles in ice." + +/obj/effect/warped_rune/cyanspace/do_effect(mob/user) + for(var/turf/open/T in RANGE_TURFS(1, src) - rune_turf) + T.MakeSlippery(TURF_WET_PERMAFROST, 1 MINUTES) + . = ..() + +/obj/effect/warped_rune/cyanspace/ComponentInitialize() + . = ..() + AddComponent(/datum/component/slippery, 30) + +/obj/effect/warped_rune/cyanspace/Crossed(atom/movable/AM, oldloc) + if(isliving(AM)) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/dark_blue + colour = "dark blue" + runepath = /obj/effect/warped_rune/darkcyanspace //we'll call the blue rune cyanspace to not mix it up with actual bluespace rune + effect_desc = "Draw a rune that can lower the temperature of whoever steps on it." + +/obj/effect/warped_rune/darkcyanspace + icon_state = "rune_dark_blue" + desc = "Refreshing!" + remove_on_activation = FALSE + +/obj/effect/warped_rune/darkcyanspace/Crossed(atom/movable/AM, oldloc) + if(isliving(AM)) + var/mob/living/L = AM + L.adjust_bodytemperature(-300) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/metal + colour = "metal" + runepath = /obj/effect/warped_rune/metalspace + effect_desc = "Draws a rune that may be activated to create a 3x3 block of invisible walls." + +//It's a wall what do you want from me +/obj/effect/warped_rune/metalspace + desc = "This can be activated to to create a 3x3 block of invisible walls." + icon_state = "rune_metal" + +/obj/effect/warped_rune/metalspace/do_effect(mob/user) + for(var/turf/open/T in RANGE_TURFS(1, src)) + new /obj/effect/forcefield/mime(T, 150) + . = ..() + +/obj/item/slimecross/warping/yellow + colour = "yellow" + runepath = /obj/effect/warped_rune/yellowspace + effect_desc = "Draw a rune that causes electrical interference." + +/obj/effect/warped_rune/yellowspace + desc = "Be careful with taking power cells with you!" + icon_state = "rune_yellow" + remove_on_activation = FALSE + +/obj/effect/warped_rune/yellowspace/Crossed(atom/movable/AM, oldloc) + var/obj/item/stock_parts/cell/C = AM.get_cell() + if(!C && isliving(AM)) + var/mob/living/L = AM + for(var/obj/item/I in L.GetAllContents()) + C = I.get_cell() + if(C?.charge) + break + if(C?.charge) + do_sparks(5,FALSE,C) + empulse(rune_turf, 1, 1) + C.use(C.charge) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/darkpurple + colour = "dark purple" + runepath = /obj/effect/warped_rune/darkpurplespace + effect_desc = "Draw a rune that can transmute plasma into any other material." + +/obj/effect/warped_rune/darkpurplespace + icon = 'singulostation/icons/obj/slimecrossing.dmi' + icon_state = "rune_dark_purple" + desc = "To gain something you must sacrifice something else in return." + var/static/list/materials = list(/obj/item/stack/sheet/iron, /obj/item/stack/sheet/glass, /obj/item/stack/sheet/mineral/silver, + /obj/item/stack/sheet/mineral/gold, /obj/item/stack/sheet/mineral/diamond, /obj/item/stack/sheet/mineral/uranium, + /obj/item/stack/sheet/mineral/titanium, /obj/item/stack/sheet/mineral/copper, /obj/item/stack/sheet/mineral/uranium, + /obj/item/stack/sheet/bluespace_crystal) + +/obj/effect/warped_rune/darkpurplespace/do_effect(mob/user) + if(locate(/obj/item/stack/sheet/mineral/plasma) in rune_turf) + var/amt = 0 + for(var/obj/item/stack/sheet/mineral/plasma/P in rune_turf) + amt += P.amount + qdel(P) + var/path_material = pick(materials) + new path_material(rune_turf, amt) + return ..() + else + to_chat(user, "Requires plasma!") + +/obj/item/slimecross/warping/silver + colour = "silver" + effect_desc = "Draw a rune that can feed whoever steps on it.." + runepath = /obj/effect/warped_rune/silverspace + +/obj/effect/warped_rune/silverspace + desc = "This feeds whoever steps on it." + icon_state = "rune_silver" + remove_on_activation = FALSE + +/obj/effect/warped_rune/silverspace/Crossed(atom/movable/AM, oldloc) + if(iscarbon(AM)) + var/mob/living/carbon/C = AM + C.reagents.add_reagent(/datum/reagent/consumable/nutriment, 100) + activated_on_step = TRUE + . = ..() + +GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) + +/obj/item/storage/backpack/holding/bluespace + name = "warped rune" + anchored = TRUE + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + invisibility = INVISIBILITY_ABSTRACT + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/slimecross/warping/bluespace + colour = "bluespace" + runepath = /obj/effect/warped_rune/bluespace + effect_desc = "Draw a rune that serves as a bluespace container." + +/obj/effect/warped_rune/bluespace + desc = "When activated, it gives access to a bluespace container." + icon_state = "rune_bluespace" + remove_on_activation = FALSE + +/obj/effect/warped_rune/bluespace/do_effect(mob/user) + if(!GLOB.blue_storage) + GLOB.blue_storage = new + GLOB.blue_storage.loc = loc + var/datum/component/storage/STR = GLOB.blue_storage.GetComponent(/datum/component/storage) + STR.show_to(user) + playsound(rune_turf, dir_sound, 20, TRUE) + . = ..() + +/obj/item/slimecross/warping/sepia + colour = "sepia" + runepath = /obj/effect/warped_rune/sepiaspace + effect_desc = "Rune activates automatically when stepped on, triggering a timestop around it." + +/obj/effect/warped_rune/sepiaspace + desc = "stepping on it stops time around it." + icon_state = "rune_sepia" + remove_on_activation = FALSE + +/obj/effect/warped_rune/sepiaspace/Crossed(atom/movable/AM, oldloc) + new /obj/effect/timestop(rune_turf, null, null, null) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/cerulean + colour = "cerulean" + runepath = /obj/effect/warped_rune/ceruleanspace + effect_desc = "Draws a rune that creates a hologram of the first living thing that stepped on the tile." + +/obj/effect/warped_rune/ceruleanspace + desc = "A shadow of what once passed these halls, a memory perhaps?" + icon_state = "rune_cerulean" + remove_on_activation = FALSE + ///hologram that will be spawned by the rune + var/obj/effect/overlay/holotile + ///mob the hologram will copy + var/mob/living/holo_host + ///used to remember the recent speech of the holo_host + var/list/recent_speech + ///used to remember the timer ID that activates holo_talk + +/obj/effect/warped_rune/ceruleanspace/proc/holo_talk() + if(holotile && length(recent_speech)) //the proc should'nt be called if the list is empty in the first place but we might as well make sure. + holotile.say(recent_speech[pick(recent_speech)]) //say one of the 10 latest sentence said by the holo_host + addtimer(CALLBACK(src, .proc/holo_talk), 10 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) + +/obj/effect/warped_rune/ceruleanspace/Crossed(atom/movable/AM, oldloc) + . = ..() + if(isliving(AM) && !holo_host) + holo_host = AM + +/obj/effect/warped_rune/ceruleanspace/do_effect(mob/user) + . = ..() + if(holo_host && !holotile) + holo_creation() + remove_on_activation = TRUE + playsound(rune_turf, dir_sound, 20, TRUE) + +/obj/effect/warped_rune/ceruleanspace/proc/holo_creation() + addtimer(CALLBACK(src, .proc/holo_talk), 10 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) + + if(locate(holotile) in rune_turf)//here to delete the previous hologram, + QDEL_NULL(holotile) + + holotile = new(rune_turf) //setting up the hologram to look like the person that just stepped in + holotile.icon = holo_host.icon + holotile.icon_state = holo_host.icon_state + holotile.alpha = 200 + holotile.name = "[holo_host.name] (Hologram)" + holotile.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY) + holotile.copy_overlays(holo_host, TRUE) + holotile.anchored = TRUE + holotile.density = FALSE + + //the code that follows is basically the code that changeling use to get people's last spoken sentences with a few tweaks. + recent_speech = list() //resets the list from its previous sentences + var/list/say_log = list() + var/log_source = holo_host.logging + for(var/log_type in log_source) + var/nlog_type = text2num(log_type) + if(nlog_type & LOG_SAY) + var/list/reversed = log_source[log_type] //reverse the list so we get the last sentences instead of the first + if(islist(reversed)) + say_log = reverseRange(reversed.Copy()) + break + + if(length(say_log) > 10) //we're going to get up to the last 10 sentences spoken by the holo_host + recent_speech = say_log.Copy(say_log.len - 11, 0) + else + for(var/spoken_memory in say_log) + if(recent_speech.len >= 10) + break + recent_speech[spoken_memory] = say_log[spoken_memory] + + if(!length(recent_speech)) //lazy lists don't work here for whatever reason so we set it to null manually if the list is empty. + recent_speech = null + +///destroys the hologram with the rune +/obj/effect/warped_rune/ceruleanspace/Destroy() + QDEL_NULL(holotile) + holo_host = null + recent_speech = null + return ..() + +/obj/item/slimecross/warping/pyrite + colour = "pyrite" + runepath = /obj/effect/warped_rune/pyritespace + effect_desc = "draws a rune that will randomly color whatever steps on it." + +/obj/effect/warped_rune/pyritespace + desc = "Who shall we be today? they asked, but not even the canvas would answer." + icon_state = "rune_pyrite" + remove_on_activation = FALSE + var/colour = "#FFFFFF" + +/obj/effect/warped_rune/pyritespace/Initialize() + . = ..() + colour = pick("#FFFFFF", "#FF0000", "#FFA500", "#FFFF00", "#00FF00", "#0000FF", "#4B0082", "#FF00FF") + +/obj/effect/warped_rune/pyritespace/Crossed(atom/movable/AM, oldloc) + if(isliving(AM)) + AM.add_atom_colour(colour, WASHABLE_COLOUR_PRIORITY) + activated_on_step = TRUE + playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) + . = ..() + +/obj/item/slimecross/warping/red + colour = "red" + runepath = /obj/effect/warped_rune/redspace + effect_desc = "Draw a rune that covers with blood whoever steps on it." + +/obj/effect/warped_rune/redspace + desc = "Watch out for blood!" + icon_state = "rune_red" + remove_on_activation = FALSE + +/obj/effect/warped_rune/redspace/Crossed(atom/movable/AM, oldloc) + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + add_blood_DNA(list("Non-human DNA" = random_blood_type())) + for(var/obj/item/I in H.get_equipped_items(TRUE)) + I.add_blood_DNA(return_blood_DNA()) + I.update_icon() + for(var/obj/item/I in H.held_items) + I.add_blood_DNA(return_blood_DNA()) + I.update_icon() + playsound(src, 'sound/effects/blobattack.ogg', 50, TRUE) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/green + colour = "green" + effect_desc = "Draw a rune that alters the DNA of those who step on it." + runepath = /obj/effect/warped_rune/greenspace + +/obj/effect/warped_rune/greenspace + desc = "Warning: don't step on this if you want to keep your genes." + icon_state = "rune_green" + remove_on_activation = FALSE + +/obj/effect/warped_rune/greenspace/Crossed(atom/movable/AM, oldloc) + if(ishuman(AM)) + randomize_human(AM) + activated_on_step = TRUE + . = ..() + +/* pink rune, makes people slightly happier after walking on it*/ +/obj/item/slimecross/warping/pink + colour = "pink" + effect_desc = "Draws a rune that makes people happier!" + runepath = /obj/effect/warped_rune/pinkspace + +/obj/effect/warped_rune/pinkspace + desc = "Love is the only reliable source of happiness we have left. But like everything, it comes with a price." + icon_state = "rune_pink" + remove_on_activation = FALSE + +///adds the jolly mood effect along with hug sound effect. +/obj/effect/warped_rune/pinkspace/Crossed(atom/movable/AM, oldloc) + if(istype(AM, /mob/living/carbon/human)) + playsound(rune_turf, "sound/weapons/thudswoosh.ogg", 50, TRUE) + SEND_SIGNAL(AM, COMSIG_ADD_MOOD_EVENT,"jolly", /datum/mood_event/jolly) + to_chat(AM, "You feel happier.") + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/gold + colour = "gold" + runepath = /obj/effect/warped_rune/goldspace + effect_desc = "Draw a rune that exchanges objects of this dimension for objects of a parallel dimension." + +/obj/effect/warped_rune/goldspace + icon_state = "rune_gold" + desc = "This can be activated to transmute valuable items into a random item." + remove_on_activation = FALSE + var/target_value = 5000 + var/static/list/common_items = list( + /obj/item/toy/plush/carpplushie, + /obj/item/toy/plush/bubbleplush, + /obj/item/toy/plush/plushvar, + /obj/item/toy/plush/narplush, + /obj/item/toy/plush/lizardplushie, + /obj/item/toy/plush/snakeplushie, + /obj/item/toy/plush/nukeplushie, + /obj/item/toy/plush/slimeplushie, + /obj/item/toy/plush/awakenedplushie, + /obj/item/toy/plush/beeplushie, + /obj/item/toy/plush/moth, + /obj/item/toy/eightball/haunted, + /obj/item/toy/foamblade, + /obj/item/toy/katana, + /obj/item/toy/snappop/phoenix, + /obj/item/toy/cards/deck/unum, + /obj/item/toy/redbutton, + /obj/item/toy/toy_xeno, + /obj/item/toy/reality_pierce, + /obj/item/toy/xmas_cracker, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, + /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted, + /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted, + /obj/item/gun/ballistic/shotgun/toy/unrestricted, + /obj/item/gun/ballistic/shotgun/toy/crossbow, + /obj/item/clothing/mask/facehugger/toy, + /obj/item/twohanded/dualsaber/toy, + /obj/item/clothing/under/costume/roman, + /obj/item/clothing/under/costume/pirate, + /obj/item/clothing/under/costume/kilt/highlander, + /obj/item/clothing/under/costume/gladiator/ash_walker, + /obj/item/clothing/under/costume/geisha, + /obj/item/clothing/under/costume/villain, + /obj/item/clothing/under/costume/singer/yellow, + /obj/item/clothing/under/costume/russian_officer + ) + + var/static/list/uncommon_items = list( + /obj/item/clothing/head/speedwagon/cursed, + /obj/item/clothing/suit/space/hardsuit/ancient, + /obj/item/gun/energy/laser/retro/old, + /obj/item/storage/toolbox/mechanical/old, + /obj/item/storage/toolbox/emergency/old, + /obj/effect/mob_spawn/teratomamonkey, + /obj/effect/mob_spawn/human/ash_walker, + /obj/effect/spawner/lootdrop/three_course_meal, + /mob/living/simple_animal/pet/dog/corgi/puppy/void, + /obj/structure/closet/crate/necropolis, + /obj/item/grenade/gluon, + /obj/item/card/emagfake, + /obj/item/gun/ballistic/revolver/reverse, + /obj/item/flashlight/flashdark, + /mob/living/simple_animal/slime/rainbow, + /obj/item/storage/belt/sabre, + /obj/item/drone_shell, + /obj/item/sharpener, + /mob/living/simple_animal/hostile/cat_butcherer + ) + + var/static/list/rare_items = list( + /obj/effect/mob_spawn/human/syndicate/battlecruiser/captain, + /obj/structure/spawner/skeleton, + /obj/effect/spawner/lootdrop/armory_contraband, + /obj/effect/spawner/lootdrop/teratoma/major + ) + + +/obj/effect/warped_rune/goldspace/do_effect(mob/user) + var/price = 0 + var/list/valuable_items = list() + for(var/obj/item/I in rune_turf) + var/datum/export_report/ex = export_item_and_contents(I, dry_run=TRUE) + for(var/x in ex.total_amount) + if(ex.total_value[x]) + price += ex.total_value[x] + valuable_items |= I + + if(price >= target_value) + remove_on_activation = TRUE + var/path + switch(rand(1,100)) + if(1 to 80) + path = pick(common_items) + if(80 to 95) + path = pick(uncommon_items) + else + path = pick(rare_items) + + var/atom/movable/A = new path(rune_turf) + QDEL_LIST(valuable_items) + to_chat(user, "[src] shines and [A] appears before you.") + else + to_chat(user, "The sacrifice is insufficient.") + . = ..() + +//oil +/obj/item/slimecross/warping/oil + colour = "oil" + runepath = /obj/effect/warped_rune/oilspace + effect_desc = "Draw a rune that can explode whoever steps on it." + +/obj/effect/warped_rune/oilspace + icon_state = "rune_oil" + desc = "This is basically a mine." + remove_on_activation = FALSE + +/obj/effect/warped_rune/oilspace/Crossed(atom/movable/AM, oldloc) + if(iscarbon(AM)) + var/mob/living/carbon/C = AM + var/amt = rand(4,12) + C.reagents.add_reagent(/datum/reagent/water, amt) + C.reagents.add_reagent(/datum/reagent/potassium, amt) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/black + colour = "black" + runepath = /obj/effect/warped_rune/blackspace + effect_desc = "Draw a rune that can transmute a corpse into a shade." + +/obj/effect/warped_rune/blackspace + icon_state = "rune_black" + desc = "Souls are like any other material, you just have to find the right place to manufacture them." + +/obj/effect/warped_rune/blackspace/do_effect(mob/user) + for(var/mob/living/carbon/human/host in rune_turf) + if(host.key) //checks if the ghost and brain's there + to_chat(user, "This body can't be transmuted by the rune in this state!") + return + + to_chat(user, "The rune is trying to repair [host.name]'s soul!") + var/list/candidates = pollCandidatesForMob("Do you want to replace the soul of [host.name]?", ROLE_SENTIENCE, null, ROLE_SENTIENCE, 50, host, POLL_IGNORE_SHADE)//todo: fix desc + + if(length(candidates) && !host.key) //check if anyone wanted to play as the dead person and check if no one's in control of the body one last time. + var/mob/dead/observer/ghost = pick(candidates) + + host.mind.memory = "" //resets the memory since it's a new soul inside. + host.key = ghost.key + var/mob/living/simple_animal/shade/S = host.change_mob_type(/mob/living/simple_animal/shade , rune_turf, "Shade", FALSE) + S.maxHealth = 1 + S.health = 1 + S.faction = host.faction + S.copy_languages(host, LANGUAGE_MIND) + playsound(host, "sound/magic/castsummon.ogg", 50, TRUE) + qdel(host) + activated_on_step = TRUE + return ..() + + to_chat(user, "The rune failed! Maybe you should try again later.") + + +/obj/item/slimecross/warping/lightpink + colour = "light pink" + runepath = /obj/effect/warped_rune/lightpinkspace + effect_desc = "Draw a frog that makes whoever steps on it peaceful." + +/obj/effect/warped_rune/lightpinkspace + desc = "Peace and love." + icon_state = "rune_light_pink" + remove_on_activation = FALSE + +/obj/effect/warped_rune/lightpinkspace/Crossed(atom/movable/AM, oldloc) + if(iscarbon(AM)) + var/mob/living/carbon/C = AM + C.reagents.add_reagent(/datum/reagent/pax, 10) + activated_on_step = TRUE + . = ..() + +/obj/item/slimecross/warping/adamantine + colour = "adamantine" + runepath = /obj/effect/warped_rune/adamantinespace + effect_desc = "Draw a rune that can summon reflective fields." + +/obj/effect/warped_rune/adamantinespace + desc = "This can be activated to summon reflective fields." + icon_state = "rune_adamantine" + +/obj/structure/reflector/box/anchored/mob_pass/CanPass(atom/movable/mover, turf/target) + if(isliving(mover)) + return TRUE + return ..() + +/obj/effect/warped_rune/adamantinespace/do_effect(mob/user) + for(var/turf/open/T in RANGE_TURFS(1, src) - rune_turf) + var/obj/structure/reflector/box/anchored/mob_pass/D = new (T) + D.setAngle(dir2angle(get_dir(src, D))) + D.admin = TRUE + QDEL_IN(D, 300) + activated_on_step = TRUE + . = ..() + + +///the template of the warped_room map +GLOBAL_DATUM(warped_room, /datum/map_template/warped_room) + +/* Used to teleport anything over it to a unique room similar to hilbert's hotel.*/ + +/obj/item/slimecross/warping/rainbow + colour = "rainbow" + effect_desc = "Draws a rune that can be activated to teleport whoever is standing on it." + runepath = /obj/effect/warped_rune/rainbowspace + +/obj/effect/warped_rune/rainbowspace + icon_state = "rune_rainbow" + desc = "This is where I go when I want to be alone. Yet they keep clawing at the walls until everything crumbles." + remove_on_activation = FALSE + +/obj/effect/warped_room_exit + name = "warped_rune" + icon = 'singulostation/icons/obj/slimecrossing.dmi' + icon_state = "rune_rainbow" + desc = "Use this rune if you want to leave this place. You will have to leave eventually." + move_resist = INFINITY + anchored = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/datum/map_template/warped_room + name = "Warped room" + mappath = '_maps/templates/warped_room.dmm' + var/obj/effect/warped_room_exit/exit_rune + var/list/rainbow_runes = list() + +/area/warped_room + name = "warped room" + icon_state = "yellow" + dynamic_lighting = DYNAMIC_LIGHTING_FORCED + requires_power = FALSE + has_gravity = TRUE + noteleport = TRUE + +///creates the warped room and place an exit rune to exit the room +/obj/effect/warped_rune/rainbowspace/Initialize() + . = ..() + if(!GLOB.warped_room) + GLOB.warped_room = new + ///current x,y,z location of the reserved space for the rune room + var/datum/turf_reservation/room_reservation = SSmapping.RequestBlockReservation(GLOB.warped_room.width, GLOB.warped_room.height) //monkey sees valid location + GLOB.warped_room.load(locate(room_reservation.bottom_left_coords[1], room_reservation.bottom_left_coords[2], room_reservation.bottom_left_coords[3]))//monkey room activate + GLOB.warped_room.exit_rune = new (locate(room_reservation.bottom_left_coords[1] + 3, room_reservation.bottom_left_coords[2] + 6, room_reservation.bottom_left_coords[3])) + GLOB.warped_room.rainbow_runes += src + +/obj/effect/warped_rune/rainbowspace/do_effect(mob/user) + var/tp_mob = FALSE + for(var/mob/living/carbon/human/customer in rune_turf) + tp_mob = TRUE + customer.forceMove(get_turf(GLOB.warped_room.exit_rune)) + if(tp_mob) + playsound(rune_turf, dir_sound, 20, TRUE) + . = ..() + +///Will delete the room when the rune is destroyed if no customer is left in the room. +/obj/effect/warped_rune/rainbowspace/Destroy() + GLOB.warped_room?.rainbow_runes -= src + return ..() + +///anyone on the exit rune when it is used will be teleported to the rune that was used to teleport to the warped room +/obj/effect/warped_room_exit/attack_hand(mob/living/user) + . = ..() + var/exit_turf + var/tp_mob = FALSE + for(var/mob/living/carbon/human/customer in get_turf(src)) + do_sparks(3, FALSE, get_turf(src)) + if(!exit_turf) + if(GLOB.warped_room?.rainbow_runes.len) + var/obj/effect/warped_rune/WR = pick(GLOB.warped_room.rainbow_runes) + exit_turf = WR.rune_turf + else + exit_turf = find_safe_turf() + customer.forceMove(exit_turf) + tp_mob = TRUE + if(tp_mob) + playsound(get_turf(src), 'sound/effects/phasein.ogg', 20, TRUE) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 8ddcdd5513b..add195415db 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -17,6 +17,7 @@ var/list/activate_reagents = list() ///Reagents required for activation var/recurring = FALSE var/research ///Research point value for slime cores. These are defines stored in [/__DEFINES/research] - the actual values are updated there. + var/color_slime ///the color of the extract and the slime it came from /obj/item/slime_extract/examine(mob/user) . = ..() @@ -91,6 +92,7 @@ name = "grey slime extract" icon_state = "grey slime extract" effectmod = "reproductive" + color_slime = "grey" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_0 @@ -117,6 +119,7 @@ name = "gold slime extract" icon_state = "gold slime extract" effectmod = "symbiont" + color_slime = "gold" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_4 @@ -147,6 +150,7 @@ name = "silver slime extract" icon_state = "silver slime extract" effectmod = "consuming" + color_slime = "silver" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_2 @@ -173,6 +177,7 @@ name = "metal slime extract" icon_state = "metal slime extract" effectmod = "industrial" + color_slime = "metal" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_1 @@ -198,6 +203,7 @@ name = "purple slime extract" icon_state = "purple slime extract" effectmod = "regenerative" + color_slime = "purple" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_1 @@ -218,6 +224,7 @@ name = "dark purple slime extract" icon_state = "dark purple slime extract" effectmod = "self-sustaining" + color_slime = "darkpurple" activate_reagents = list(/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_2 @@ -242,6 +249,7 @@ name = "orange slime extract" icon_state = "orange slime extract" effectmod = "burning" + color_slime = "orange" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_1 @@ -263,6 +271,7 @@ name = "yellow slime extract" icon_state = "yellow slime extract" effectmod = "charged" + color_slime = "yellow" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_2 @@ -287,6 +296,7 @@ name = "red slime extract" icon_state = "red slime extract" effectmod = "sanguine" + color_slime = "red" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_4 @@ -308,6 +318,7 @@ name = "blue slime extract" icon_state = "blue slime extract" effectmod = "stabilized" + color_slime = "blue" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_1 @@ -329,6 +340,7 @@ name = "dark blue slime extract" icon_state = "dark blue slime extract" effectmod = "chilling" + color_slime = "darkblue" activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_2 @@ -353,6 +365,7 @@ name = "pink slime extract" icon_state = "pink slime extract" effectmod = "gentle" + color_slime = "pink" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_4 @@ -382,6 +395,7 @@ name = "green slime extract" icon_state = "green slime extract" effectmod = "mutative" + color_slime = "green" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium) research = SLIME_RESEARCH_TIER_4 @@ -407,6 +421,7 @@ name = "light pink slime extract" icon_state = "light pink slime extract" effectmod = "loyal" + color_slime = "lightpink" activate_reagents = list(/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_5 @@ -432,6 +447,7 @@ name = "black slime extract" icon_state = "black slime extract" effectmod = "transformative" + color_slime = "black" activate_reagents = list(/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_5 @@ -454,6 +470,7 @@ name = "oil slime extract" icon_state = "oil slime extract" effectmod = "detonating" + color_slime = "oil" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_5 @@ -478,6 +495,7 @@ name = "adamantine slime extract" icon_state = "adamantine slime extract" effectmod = "crystalline" + color_slime = "adamantine" activate_reagents = list(/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_5 @@ -508,6 +526,7 @@ name = "bluespace slime extract" icon_state = "bluespace slime extract" effectmod = "warping" + color_slime = "bluespace" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) var/teleport_ready = FALSE var/teleport_x = 0 @@ -545,6 +564,7 @@ name = "pyrite slime extract" icon_state = "pyrite slime extract" effectmod = "prismatic" + color_slime = "pyrite" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_3 @@ -573,6 +593,7 @@ name = "cerulean slime extract" icon_state = "cerulean slime extract" effectmod = "recurring" + color_slime = "cerulean" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma) research = SLIME_RESEARCH_TIER_3 @@ -594,6 +615,7 @@ name = "sepia slime extract" icon_state = "sepia slime extract" effectmod = "lengthened" + color_slime = "sepia" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water) research = SLIME_RESEARCH_TIER_3 @@ -617,6 +639,7 @@ name = "rainbow slime extract" icon_state = "rainbow slime extract" effectmod = "hyperchromatic" + color_slime = "rainbow" activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,"lesser plasma",/datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list. research = SLIME_RESEARCH_TIER_RAINBOW diff --git a/singulostation/icons/obj/slimecrossing.dmi b/singulostation/icons/obj/slimecrossing.dmi index 19deb24b79b76b78a92ffaac260582768feb26c4..c440a74ddf2fdefdcdfce8882b4480d20c7e01cb 100644 GIT binary patch literal 76601 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 literal 3541 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 Date: Fri, 11 Jun 2021 00:45:57 +0200 Subject: [PATCH 2/2] Remove references to missing content --- code/modules/hydroponics/grown/towercap.dm | 2 +- .../xenobiology/crossbreeding/warping.dm | 25 ++++++++----------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 18b68c1f756..ac461276824 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -158,7 +158,7 @@ var/fire_stack_strength = 5 /obj/structure/bonfire/bluespace - needs_oxygen = FALSE + //needs_oxygen = FALSE /obj/structure/bonfire/dense density = TRUE diff --git a/code/modules/research/xenobiology/crossbreeding/warping.dm b/code/modules/research/xenobiology/crossbreeding/warping.dm index 704ccf6fbb7..afecee0a571 100644 --- a/code/modules/research/xenobiology/crossbreeding/warping.dm +++ b/code/modules/research/xenobiology/crossbreeding/warping.dm @@ -213,19 +213,17 @@ put up a rune with bluespace effects, lots of those runes are fluff or act as a /obj/item/reagent_containers/pill/oxandrolone, /obj/item/storage/pill_bottle/charcoal, /obj/item/reagent_containers/pill/mutadone, - /obj/item/reagent_containers/pill/antirad, + /obj/item/reagent_containers/pill/penacid, /obj/item/reagent_containers/pill/patch/styptic, /obj/item/reagent_containers/pill/patch/synthflesh, /obj/item/reagent_containers/pill/patch/silver_sulf, /obj/item/healthanalyzer, - /obj/item/surgical_drapes, /obj/item/scalpel, /obj/item/hemostat, /obj/item/cautery, /obj/item/circular_saw, /obj/item/surgicaldrill, - /obj/item/retractor, - /obj/item/blood_filter) + /obj/item/retractor) for(var/i in 1 to 2) var/path = pick_n_take(medical) @@ -321,10 +319,9 @@ put up a rune with bluespace effects, lots of those runes are fluff or act as a icon = 'singulostation/icons/obj/slimecrossing.dmi' icon_state = "rune_dark_purple" desc = "To gain something you must sacrifice something else in return." - var/static/list/materials = list(/obj/item/stack/sheet/iron, /obj/item/stack/sheet/glass, /obj/item/stack/sheet/mineral/silver, + var/static/list/materials = list(/obj/item/stack/sheet/metal, /obj/item/stack/sheet/glass, /obj/item/stack/sheet/mineral/silver, /obj/item/stack/sheet/mineral/gold, /obj/item/stack/sheet/mineral/diamond, /obj/item/stack/sheet/mineral/uranium, - /obj/item/stack/sheet/mineral/titanium, /obj/item/stack/sheet/mineral/copper, /obj/item/stack/sheet/mineral/uranium, - /obj/item/stack/sheet/bluespace_crystal) + /obj/item/stack/sheet/mineral/titanium, /obj/item/stack/sheet/mineral/uranium, /obj/item/stack/sheet/bluespace_crystal) /obj/effect/warped_rune/darkpurplespace/do_effect(mob/user) if(locate(/obj/item/stack/sheet/mineral/plasma) in rune_turf) @@ -586,10 +583,8 @@ GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) /obj/item/toy/foamblade, /obj/item/toy/katana, /obj/item/toy/snappop/phoenix, - /obj/item/toy/cards/deck/unum, /obj/item/toy/redbutton, /obj/item/toy/toy_xeno, - /obj/item/toy/reality_pierce, /obj/item/toy/xmas_cracker, /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted, @@ -597,7 +592,6 @@ GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) /obj/item/gun/ballistic/shotgun/toy/unrestricted, /obj/item/gun/ballistic/shotgun/toy/crossbow, /obj/item/clothing/mask/facehugger/toy, - /obj/item/twohanded/dualsaber/toy, /obj/item/clothing/under/costume/roman, /obj/item/clothing/under/costume/pirate, /obj/item/clothing/under/costume/kilt/highlander, @@ -609,12 +603,10 @@ GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) ) var/static/list/uncommon_items = list( - /obj/item/clothing/head/speedwagon/cursed, /obj/item/clothing/suit/space/hardsuit/ancient, /obj/item/gun/energy/laser/retro/old, /obj/item/storage/toolbox/mechanical/old, /obj/item/storage/toolbox/emergency/old, - /obj/effect/mob_spawn/teratomamonkey, /obj/effect/mob_spawn/human/ash_walker, /obj/effect/spawner/lootdrop/three_course_meal, /mob/living/simple_animal/pet/dog/corgi/puppy/void, @@ -625,7 +617,7 @@ GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) /obj/item/flashlight/flashdark, /mob/living/simple_animal/slime/rainbow, /obj/item/storage/belt/sabre, - /obj/item/drone_shell, + /obj/effect/mob_spawn/drone, /obj/item/sharpener, /mob/living/simple_animal/hostile/cat_butcherer ) @@ -634,7 +626,7 @@ GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace) /obj/effect/mob_spawn/human/syndicate/battlecruiser/captain, /obj/structure/spawner/skeleton, /obj/effect/spawner/lootdrop/armory_contraband, - /obj/effect/spawner/lootdrop/teratoma/major + // /obj/effect/spawner/lootdrop/teratoma/major // We don't seem to have a good equivalent, but it seems significant ) @@ -799,7 +791,10 @@ GLOBAL_DATUM(warped_room, /datum/map_template/warped_room) dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE has_gravity = TRUE - noteleport = TRUE + +/area/warped_room/Initialize() + . = ..() + area_flags |= NOTELEPORT ///creates the warped room and place an exit rune to exit the room /obj/effect/warped_rune/rainbowspace/Initialize()