From e659b3a8f62bbd3613c7320661449cac202f1bfd Mon Sep 17 00:00:00 2001 From: Casey Date: Wed, 12 Aug 2026 16:38:23 -0400 Subject: [PATCH] Egg (#19647) * egg * 0121 * Fixup maps in TGM format 7646be36291e: maps/tether/submaps/tether_misc.dmm Automatically commited by: tools\mapmerge2\fixup.py * 156 * 0203 * 0211 * 1228 * 1412 * 1445 --------- Co-authored-by: Cameron Lennox --- code/modules/awaymissions/egg_event.dm | 98 +++ code/modules/awaymissions/redgate.dm | 2 + code/modules/multiz/ladders.dm | 2 + .../projectiles/guns/energy/bsharpoon_vr.dm | 2 + icons/obj/flora/egg_tree.dmi | Bin 0 -> 852 bytes maps/groundbase/gb-misc.dmm | 635 ++++++++++-------- maps/stellar_delight/ship_misc.dmm | 635 ++++++++++-------- maps/tether/submaps/tether_misc.dmm | 635 ++++++++++-------- vorestation.dme | 1 + 9 files changed, 1143 insertions(+), 867 deletions(-) create mode 100644 code/modules/awaymissions/egg_event.dm create mode 100644 icons/obj/flora/egg_tree.dmi diff --git a/code/modules/awaymissions/egg_event.dm b/code/modules/awaymissions/egg_event.dm new file mode 100644 index 00000000000..0740d594c55 --- /dev/null +++ b/code/modules/awaymissions/egg_event.dm @@ -0,0 +1,98 @@ +//Everything in this file is as it is intentionally and should not be messed with, removed, or changed. +/proc/egg_interdict(mob/living/to_teleport, turf/teleport_destination) + if(rand(1,1000) != 66) + return FALSE + if(!isturf(teleport_destination)) + return FALSE + if(!isliving(to_teleport)) + return FALSE + if(!to_teleport.ckey) + return FALSE + var/turf/egg_destination + for(var/obj/effect/landmark/egg_teleport/E in GLOB.landmarks_list) + if(!istype(E, /obj/effect/landmark/egg_teleport)) + continue + egg_destination = get_turf(E) + break + if(!egg_destination) + return FALSE + var/datum/modifier/egg_interdiction/our_modifier = to_teleport.add_modifier(/datum/modifier/egg_interdiction) //This modifier keeps track of where we were going so we can end up there when we leave the egg room + our_modifier.interdiction_destination = teleport_destination + to_teleport.forceMove(egg_destination) + return TRUE + +/datum/modifier/egg_interdiction + var/turf/interdiction_destination + +/datum/modifier/egg_interdiction/expire(silent) + interdiction_destination = null + ..() + +/obj/effect/landmark/egg_teleport + icon = 'icons/obj/food.dmi' + icon_state = "egg" + color = "#FDFFD1" + +/obj/effect/egg_returner + icon = 'icons/obj/food.dmi' + icon_state = "egg" + color = "#c23f71" + anchored = TRUE + unacidable = TRUE + simulated = FALSE + invisibility = INVISIBILITY_MAXIMUM + +/obj/effect/egg_returner/Crossed(O) + . = ..() + + if(!isliving(O)) + return + var/mob/living/L = O + var/datum/modifier/egg_interdiction/E = L.get_modifier_of_type(/datum/modifier/egg_interdiction) + if(E) + L.forceMove(E.interdiction_destination) + else + L.forceMove(get_turf(pick(GLOB.latejoin))) //If we somehow ended up here without the modifier that keeps track of where we came from then let's just go back to spawn + + E.expire() + +/area/egg_tree_zone + name = "Unregistered" + icon = 'icons/effects/effects.dmi' + icon_state = "glitch" + dynamic_lighting = FALSE + +/area/egg_tree_zone/man + enter_message = span_cult("(Well. There is a man here. He looks at you like you're a bit lost.)") //The spaces in this line are intentional. + var/list/visitors = list() + +/area/egg_tree_zone/man/Entered(mob/M) + if(!M.ckey) + return + if("[M.real_name] - [M.ckey]" in visitors) + return + . = ..() + if(isliving(M)) + var/mob/living/L = M + + var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(L)) + if(L.put_in_any_hand_if_possible(E, TRUE)) + to_chat(L ,span_cult("(The man smiles and hands you what you've been looking for.)")) + to_chat(L ,span_boldannounce("* You got an egg.")) + visitors += "[L.real_name] - [L.ckey]" + else + to_chat(L ,span_cult("(The man looks at your hands... It looks like he has something he wants to give to you...)")) + +/obj/structure/flora/tree/egg_tree + icon = 'icons/obj/flora/egg_tree.dmi' + icon_state = "tree" + base_state = "tree" + pixel_x = -64 + mouse_opacity = FALSE + indestructable = TRUE + plane = MOB_PLANE + layer = MOB_LAYER + +/turf/unsimulated/white + icon = 'icons/effects/effects.dmi' + icon_state = "white" diff --git a/code/modules/awaymissions/redgate.dm b/code/modules/awaymissions/redgate.dm index 64d387d5aa6..20c6ae0fe1f 100644 --- a/code/modules/awaymissions/redgate.dm +++ b/code/modules/awaymissions/redgate.dm @@ -74,6 +74,8 @@ to_chat(M, span_notice("The redgate refused your pulled item.")) else playsound(src,'sound/effects/ominous-hum-2.ogg', 100,1) + if(egg_interdict(M, ourturf)) + return M.forceMove(ourturf) //Let's just do forcemove, I don't really want people teleporting to weird places if they have bluespace stuff else to_chat(M, span_notice("Something blocks your way.")) diff --git a/code/modules/multiz/ladders.dm b/code/modules/multiz/ladders.dm index c6d7def9afb..9ce5323b38e 100644 --- a/code/modules/multiz/ladders.dm +++ b/code/modules/multiz/ladders.dm @@ -149,6 +149,8 @@ if(!A.CanPass(M, M.loc, 1.5, 0)) to_chat(M, span_notice("\The [A] is blocking \the [src].")) return FALSE + if(egg_interdict(M, T)) + return return M.forceMove(T) //VOREStation Edit - Fixes adminspawned ladders /obj/structure/ladder/CanPass(obj/mover, turf/source, height, airflow) diff --git a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm index f8e80db5107..61f8f323ef2 100644 --- a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm +++ b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm @@ -130,6 +130,8 @@ if(prob(sendfailchance)) user.forceMove(pick(trange(24,user))) else + if(egg_interdict(user, ToTurf)) + return user.forceMove(ToTurf) var/vore_happened = FALSE if(can_dropnom && living_user.can_be_drop_pred) diff --git a/icons/obj/flora/egg_tree.dmi b/icons/obj/flora/egg_tree.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1a697815a2f1cace67fd04d2a96db67a001ba98c GIT binary patch literal 852 zcmV-a1FQUrP)fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainG42>+fI5Sc+(=$q-yyB9? zl2jmDsiY`1Rf&r;C9|j)B*n#@8QYZ@nyMImDV00MkTL_t(& zf$i2yQo}F|0MIlHd)jh~S}TSC&CWr9R{sA4a)bbE;Xu9<^Ag%XIW7!yI^|M<{nvo* zK^u4~j?n>m_jwj?{!?-wR)9Si7^v~L{6`e9 z2o9KQ`R$|71LyfQOSL