From b8533d6884ddd9ace917039b312f1a27357f9783 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Sun, 11 Sep 2022 11:45:04 -0400 Subject: [PATCH 01/13] Basic functionality Gets the safety tether to generally work, minus some bugs and flaws. --- Hyperbot/message.txt | 5 + code/__HELPERS/_hyper_helpers.dm | 3 + code/datums/components/chasm.dm | 80 ++++- code/game/turfs/simulated/chasm.dm | 17 +- .../code/game/machinery/safety_tether.dm | 316 ++++++++++++++++++ .../icons/obj/machinery/safety_tether.dmi | Bin 0 -> 5472 bytes tgstation.dme | 1 + 7 files changed, 406 insertions(+), 16 deletions(-) create mode 100644 Hyperbot/message.txt create mode 100644 hyperstation/code/game/machinery/safety_tether.dm create mode 100644 hyperstation/icons/obj/machinery/safety_tether.dmi diff --git a/Hyperbot/message.txt b/Hyperbot/message.txt new file mode 100644 index 000000000..2224b9d34 --- /dev/null +++ b/Hyperbot/message.txt @@ -0,0 +1,5 @@ +!**The Round has ended!**```Round ID: +Round Time: 2 minutes and 23.1 seconds +Total Population: 1``` +**The Crew!** ```Aniyah Lineman +``` diff --git a/code/__HELPERS/_hyper_helpers.dm b/code/__HELPERS/_hyper_helpers.dm index 5e23e5857..a898715b3 100644 --- a/code/__HELPERS/_hyper_helpers.dm +++ b/code/__HELPERS/_hyper_helpers.dm @@ -3,6 +3,9 @@ GLOBAL_LIST_EMPTY(cosmetic_chests) GLOBAL_LIST_EMPTY(cosmetic_arms) GLOBAL_LIST_EMPTY(cosmetic_legs) +//A list of safety tether machines for cloud chasms to refer to for emergency teleportation of fallen mobs +GLOBAL_LIST_EMPTY(safety_tethers_list) + /proc/init_cosmetic_parts(datum/cosmetic_part/type, list/global_list) for(var/subtype in subtypesof(type)) var/datum/cosmetic_part/part = new subtype() diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 4a64e5f8c..9617dd5a7 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -94,6 +94,9 @@ return TRUE /datum/component/chasm/proc/drop(atom/movable/AM) + + //priority_announce("Chasm_component-side drop triggered!") + //Make sure the item is still there after our sleep if(!AM || QDELETED(AM)) return @@ -112,8 +115,10 @@ falling_atoms -= AM else + // send to oblivion AM.visible_message("[AM] falls into [parent]!", "[oblivion_message]") + if (isliving(AM)) var/mob/living/L = AM L.notransform = TRUE @@ -125,10 +130,13 @@ else if(prob(5)) playsound(AM, pick('hyperstation/sound/misc/yodadeath.ogg', 'hyperstation/sound/misc/fallingthroughclouds.ogg', 'hyperstation/sound/misc/goofy.ogg', 'hyperstation/sound/misc/wilhelm.ogg'), 100, 0) - var/oldtransform = AM.transform - var/oldcolor = AM.color var/oldalpha = AM.alpha - animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10) + var/oldcolor = AM.color + var/oldtransform = AM.transform + + // + + /* for(var/i in 1 to 5) //Make sure the item is still there after our sleep if(!AM || QDELETED(AM)) @@ -139,17 +147,59 @@ //Make sure the item is still there after our sleep if(!AM || QDELETED(AM)) return + */ - if(iscyborg(AM)) - var/mob/living/silicon/robot/S = AM - qdel(S.mmi) + if(iscyborg(AM) || iscarbon(AM)) + var/mob/living/victim = AM - falling_atoms -= AM - qdel(AM) - if(AM && !QDELETED(AM)) //It's indestructible - var/atom/parent = src.parent - parent.visible_message("[parent] spits out [AM]!") - AM.alpha = oldalpha - AM.color = oldcolor - AM.transform = oldtransform - AM.throw_at(get_edge_target_turf(parent,pick(GLOB.alldirs)),rand(1, 10),rand(1, 10)) + var/tether_number = GLOB.safety_tethers_list.len + + priority_announce("[tether_number] tethers present.") + + //If safety tethers are present, get one from the global list to teleport the body to if operational + if(tether_number > 0) + if(tether_number == 1) + + // If teleportation fails + if(!GLOB.safety_tethers_list[1].bungee_teleport(src, victim, oldalpha, oldcolor, oldtransform)) + finishdrop(AM, oldalpha, oldcolor, oldtransform) + else + + //Just in case multiple safety tethers are present + if(!GLOB.safety_tethers_list[rand(1,GLOB.safety_tethers_list.len)].bungee_teleport(src, victim, oldalpha, oldcolor, oldtransform)) + finishdrop(AM, oldalpha, oldcolor, oldtransform) + if(isliving(AM)) + var/mob/living/L = AM + L.notransform = FALSE + else + finishdrop(AM, oldtransform, oldcolor, oldalpha) + + +/datum/component/chasm/proc/finishdrop(atom/movable/AM, oldalpha = "", oldcolor = "", oldtransform = "") + + animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10) + + for(var/i in 1 to 5) + //Make sure the item is still there after our sleep + if(!AM || QDELETED(AM)) + return + AM.pixel_y-- + sleep(2) + + //Make sure the item is still there after our sleep + if(!AM || QDELETED(AM)) + return + + if(iscyborg(AM)) + var/mob/living/silicon/robot/S = AM + qdel(S.mmi) + + falling_atoms -= AM + qdel(AM) + if(AM && !QDELETED(AM)) //It's indestructible + var/atom/parent = src.parent + parent.visible_message("[parent] spits out [AM]!") + AM.alpha = oldalpha + AM.color = oldcolor + AM.transform = oldtransform + AM.throw_at(get_edge_target_turf(parent,pick(GLOB.alldirs)),rand(1, 10),rand(1, 10)) \ No newline at end of file diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 88211a9fb..f3613264d 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -18,10 +18,25 @@ var/datum/component/chasm/chasm_component = GetComponent(/datum/component/chasm) chasm_component.target_turf = target +// Only runs in the case of things like pride's mirror who are just using the turf as an easy reference + /turf/open/chasm/proc/drop(atom/movable/AM) + var/datum/component/chasm/chasm_component = GetComponent(/datum/component/chasm) + /* + //if(baseturfs == /turf/open/chasm/cloud) + if(iscyborg(AM) || iscarbon(AM)) + var/mob/victim = AM + priority_announce("Signal sending!") + //Sends the signal that a carbon or silicon mob's been clouded + SEND_SIGNAL(src, COMSIG_GLOB_MOB_CLOUDED, victim) + priority_announce("Signal sent!") + chasm_component.drop(AM, TRUE) + //else + */ chasm_component.drop(AM) + /turf/open/chasm/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) return @@ -137,4 +152,4 @@ /turf/open/chasm/cloud/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/space.dmi' underlay_appearance.plane = PLANE_SPACE - return TRUE + return TRUE \ No newline at end of file diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm new file mode 100644 index 000000000..89e16aba9 --- /dev/null +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -0,0 +1,316 @@ +//Cloning revival method. +//The pod handles the actual cloning while the computer manages the clone profiles + +//Potential replacement for genetics revives or something I dunno (?) + + +// Have it pull back all player mobs, and all borgs if possible +// have chasm tiles, when something falls in send a signal that the safety tether catches, containing the chasm turf and the mob +// then the tether can either report it's inactive to the tile so that it then deletes the entity, or teeleport the player + +// create global list of safety tethers in the world to then process + +//#define SPEAK(message) radio.talk_into(src, message, radio_channel) + +#define SPEAKMEDICAL(message) radio.talk_into(src, message, RADIO_CHANNEL_MEDICAL) +#define SPEAKSCIENCE(message) radio.talk_into(src, message, RADIO_CHANNEL_SCIENCE) + +/obj/machinery/safety_tether + name = "safety tether" + desc = "A gargantuan machine that performs emergency teleportations on those unlucky or clumsy enough to slip off the edge." + density = FALSE + icon = 'hyperstation/icons/obj/machinery/safety_tether.dmi' + icon_state = "safety_tether" + verb_say = "states" + + move_resist = INFINITY + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + + //var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine. + + + //Here for easy balancing and possibly changing it between different tether objects or if upgrades occur. + + var/dismember_prob = 50 //Probability of dismembering 2 limbs rather than 1 + + //Max and min amounts of clone damage for organics + var/cloneloss_min = 45 + var/cloneloss_max = 70 + + //Max and min amounts of burn damage for silicates + var/silicon_burn_min = 60 + var/silicon_burn_max = 80 + + var/internal_radio = TRUE + var/obj/item/radio/radio + + //Give it permission to talk on both medical and science frequencies, as with geneticists + var/radio_key = /obj/item/encryptionkey/headset_medsci + + //var/radio_channel = RADIO_CHANNEL_MEDICAL + + //var/list/unattached_flesh + //var/flesh_number = 0 + + //var/size = 1 + +/obj/machinery/safety_tether/Initialize() + . = ..() + + //Adds this to the global list of safety tethers in the world to pull from when chasms attempt to drop mobs + GLOB.safety_tethers_list += src + + if(internal_radio) + radio = new(src) + radio.keyslot = new radio_key + radio.subspace_transmission = TRUE + radio.canhear_range = 0 + radio.recalculateChannels() + + update_icon() + +/obj/machinery/safety_tether/Destroy() + QDEL_NULL(radio) + + GLOB.safety_tethers_list -= src + //if(connected) + // connected.DetachCloner(src) + //QDEL_LIST(unattached_flesh) + + . = ..() + +/obj/machinery/safety_tether/update_icon() + cut_overlays() + if(is_operational()) + add_overlay("operational_overlay") + +//Clonepod + +/obj/machinery/safety_tether/examine(mob/user) + . = ..() + if(is_operational()) + . += "The safety tether's currently protecting the station." + else + . += "The safety tether's offline." + + +/obj/machinery/safety_tether/attack_ai(mob/user) + return examine(user) + +//Returns true if teleport is successful, false otherwise +/obj/machinery/safety_tether/proc/bungee_teleport(datum/component/chasm/C, mob/living/M, oldalpha, oldcolor, oldtransform) + + priority_announce("Tether bungee activated!") + + if(ismovableatom(M) && is_operational() != 0 && do_teleport(M, get_turf(src), channel = TELEPORT_CHANNEL_BLUESPACE)) + use_power(5000) + + priority_announce("Do teleport worked!") + + M.spawn_gibs() + M.emote("scream") + + if(iscarbon(M)) + var/mob/living/carbon/Carbon = M + + //Rework to teleporter mishap + priority_announce("[Carbon] ([key_name(Carbon)]) had a tether mishap") + + to_chat(Carbon, "Buzzing static snaps taut on your chest....") + Carbon.adjustCloneLoss(rand(40,75)) + + //Random limb removal + var/dismember_num = 1 + + //Dismember two limbs + if(prob(dismember_prob)) + dismember_num = 2 + + var/dismembered_arm = FALSE + var/dismembered_leg = FALSE + + for(var/obj/item/bodypart/BP in Carbon.bodyparts) + if(BP.body_part != CHEST && BP.body_part != HEAD) //I am not ready to find out what happens if your chest is missing + var/zone = BP.body_zone + //Checks to ensure that only one arm and one leg each are dismembered, to prevent severe disabling like 2 arms being removed. + if(zone == BODY_ZONE_L_ARM || zone == BODY_ZONE_R_ARM) + if(!dismembered_arm) + dismembered_arm = TRUE + BP.dismember() + + if(zone == BODY_ZONE_L_LEG || zone == BODY_ZONE_R_LEG) + if(!dismembered_leg) + dismembered_leg = TRUE + BP.dismember() + + dismember_num -= 1 + + //We've dismembered enough limbs. + if(dismember_num <= 0) + break + + //Bleed our pal a little + M.blood_volume = BLOOD_VOLUME_NORMAL * M.blood_ratio * 0.8 + + src.visible_message("[src] spits out [M] and viscera!") + if(internal_radio) + + //Area name gotten just in case the locale of it's moved from engineering when mapmaking. + var/area/A = get_area(get_turf(src)) + var/area_name = A.name + SPEAKMEDICAL("The safety tether's caught the would-be crater [M] at the [area_name].") + + //animate(M, transform = oldtransform, alpha = oldalpha, color = oldcolor, time = 10) + + M.transform = oldtransform + M.alpha = oldalpha + M.color = oldcolor + + return TRUE + if(issilicon(M)) + var/mob/living/silicon/S = M + //Rework to teleporter mishap + priority_announce("[S] ([key_name(S)]) had a tether mishap") + to_chat(S, "Your circuits spark, slag, and pop as overwhelming white noise crackles and YANKS...") + S.apply_damage_type(damage = rand(silicon_burn_min, silicon_burn_max), damagetype = BURN) + + if(internal_radio) + + //Area name gotten just in case the locale of it's moved from engineering when mapmaking. + var/area/A = get_area(get_turf(src)) + var/area_name = A.name + SPEAKSCIENCE("The safety tether's caught the would-be crater [M] at the [area_name].") + + else + //drop them to their doom + return FALSE + var/atom/movable/AM = M + C.finishdrop(AM, oldalpha, oldcolor, oldtransform) +/* +/obj/machinery/safety_tether/emag_act(mob/user) + if(!occupant) + return + to_chat(user, "You corrupt the genetic compiler.") + malfunction() + +/obj/machinery/clonepod/proc/malfunction() + var/mob/living/mob_occupant = occupant + if(mob_occupant) + connected_message("Critical Error!") + SPEAK("Critical error! Please contact a Thinktronic Systems \ + technician, as your warranty may be affected.") + mess = TRUE + maim_clone(mob_occupant) //Remove every bit that's grown back so far to drop later, also destroys bits that haven't grown yet + update_icon() + if(mob_occupant.mind != clonemind) + clonemind.transfer_to(mob_occupant) + mob_occupant.grab_ghost() // We really just want to make you suffer. + flash_color(mob_occupant, flash_color="#960000", flash_time=100) + to_chat(mob_occupant, "Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is.
") + playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 50, 0) + SEND_SOUND(mob_occupant, sound('sound/hallucinations/veryfar_noise.ogg',0,1,50)) + QDEL_IN(mob_occupant, 40) + +/obj/machinery/clonepod/emp_act(severity) + . = ..() + if (!(. & EMP_PROTECT_SELF)) + var/mob/living/mob_occupant = occupant + if(mob_occupant && prob(100/(severity*efficiency))) + connected_message(Gibberish("EMP-caused Accidental Ejection", 0)) + SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of, ERROR: John Doe, prematurely." ,0)) + mob_occupant.apply_vore_prefs() + go_out() + +/obj/machinery/clonepod/proc/horrifyingsound() + for(var/i in 1 to 5) + playsound(loc,pick('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg'), 100, rand(0.95,1.05)) + sleep(1) + sleep(10) + playsound(loc,'sound/hallucinations/wail.ogg',100,1) + +/obj/machinery/clonepod/deconstruct(disassembled = TRUE) + if(occupant) + go_out() + ..() +*/ +//#define CRYOMOBS 'icons/obj/cryo_mobs.dmi' +/* +/obj/machinery/clonepod/update_icon() + cut_overlays() + + if(mess) + icon_state = "pod_g" + var/image/gib1 = image(CRYOMOBS, "gibup") + var/image/gib2 = image(CRYOMOBS, "gibdown") + gib1.pixel_y = 27 + round(sin(world.time) * 3) + gib1.pixel_x = round(sin(world.time * 3)) + gib2.pixel_y = 27 + round(cos(world.time) * 3) + gib2.pixel_x = round(cos(world.time * 3)) + add_overlay(gib2) + add_overlay(gib1) + add_overlay("cover-on") + + else if(occupant) + icon_state = "pod_1" + + var/image/occupant_overlay + var/completion = (flesh_number - unattached_flesh.len) / flesh_number + + if(unattached_flesh.len <= 0) + occupant_overlay = image(occupant.icon, occupant.icon_state) + occupant_overlay.copy_overlays(occupant) + else + occupant_overlay = image(CRYOMOBS, "clone_meat") + var/matrix/tform = matrix() + tform.Scale(completion) + tform.Turn(cos(world.time * 2) * 3) + occupant_overlay.transform = tform + occupant_overlay.appearance_flags = 0 + + occupant_overlay.dir = SOUTH + occupant_overlay.pixel_y = 27 + round(sin(world.time) * 3) + occupant_overlay.pixel_x = round(sin(world.time * 3)) + + add_overlay(occupant_overlay) + add_overlay("cover-on") + else + icon_state = "pod_0" + + if(panel_open) + icon_state = "pod_0_maintenance" + + add_overlay("panel") +*/ +/* + * Manual -- A big ol' manual. + */ +/* +/obj/item/paper/guides/jobs/medical/cloning + name = "paper - 'H-87 Cloning Apparatus Manual" + info = {"

Getting Started

+ Congratulations, your station has purchased the H-87 industrial cloning device!
+ Using the H-87 is almost as simple as brain surgery! Simply insert the target humanoid into the scanning chamber and select the scan option to create a new profile!
+ That's all there is to it!
+ Notice, cloning system cannot scan inorganic life or small primates. Scan may fail if subject has suffered extreme brain damage.
+

Clone profiles may be viewed through the profiles menu. Scanning implants a complementary HEALTH MONITOR IMPLANT into the subject, which may be viewed from each profile. + Profile Deletion has been restricted to \[Station Head\] level access.

+

Cloning from a profile

+ Cloning is as simple as pressing the CLONE option at the bottom of the desired profile.
+ Per your company's EMPLOYEE PRIVACY RIGHTS agreement, the H-87 has been blocked from cloning crewmembers while they are still alive.
+
+

The provided CLONEPOD SYSTEM will produce the desired clone. Standard clone maturation times (With SPEEDCLONE technology) are roughly 90 seconds. + The cloning pod may be unlocked early with any \[Medical Researcher\] ID after initial maturation is complete.


+ Please note that resulting clones may have a small DEVELOPMENTAL DEFECT as a result of genetic drift.
+

Profile Management

+

The H-87 (as well as your station's standard genetics machine) can accept STANDARD DATA DISKETTES. + These diskettes are used to transfer genetic information between machines and profiles. + A load/save dialog will become available in each profile if a disk is inserted.


+ A good diskette is a great way to counter aforementioned genetic drift!
+
+ This technology produced under license from Thinktronic Systems, LTD."} +*/ + +//#undef SPEAK +#undef SPEAKMEDICAL +#undef SPEAKSCIENCE + diff --git a/hyperstation/icons/obj/machinery/safety_tether.dmi b/hyperstation/icons/obj/machinery/safety_tether.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cd56af83cc3e58e9219deb98be4665a1338a0230 GIT binary patch literal 5472 zcmbtYc{r5szqW+3G`^K&$&644V~wwvv8IR^OK2D=vXp&iW*U-T<83C{`g$)_1w>Mf1c-kp3i%~_xs+nx3dxxmKNsW z;SsxV-U7zM!wdQo`}uizcoaN5-*PW!>@PZ5Ha9n`>06mOT~k#4n?HI{iNleWIXS`E z+56$)<{LVfuF!QulGA?vS!vb6>c$p}bMi<&^qehv{@59A2HpsmogSmZX%F@!>&SG7@B?fXh{Bsgmh=*-NjkuIuq@r0@M zelXC1=?v*ugYst|eR<>ra#SILYL%<^l__Xh-AmO`dRKN#IiRyG$0hS=p0IZwkELVy zq0^?VhF&So;R%p_-vaGHF%`RuHtMg^z!%iJ&a1ap{>ZR#YZ)O4{4(XadDPteaKDBt z56=<(3l^qMG5KpAskw!p4jnmASXr>i2FHgH2QC=q&?*^#wk73jAHxDcUWSqN`39l0 zUx;5Ko&=BGONoeJ_ZVHe=~fc^I|pNBXvkTJx{@8~Q+I_VY6PQ%zL-IXa$2F$OVP!f zYLKeN_~u7c94j1+GB+fhDE-ZP5b@EDH8;F_?0qo{Kq`k4;4>t(J(apTR?^#6{?y_Qs#)&8^K*Fh4FL0>xl3 z;)|(f{)dw~&y5BL7~s4JwTXGw!E^+xily{6G0v-Av#G^+ zM#^T@gSqO`1$e^2Q{Mp&O@o-w(mDs-ntzhA`i4lov z(4I_$bTaEI|HP(KKBg7rvEGBMZm3SZ+ioHt%sQ<_RE9RZQ)O?6=h2@8J%A5uRz`bb z1M^K=j~VQ1!r(_Jn}TsuzTf;#+NKJ%wGSo4-xnU<0O!d4{*1W7?rHyq@Sy$ei^72s zKYd_&D#1=IM9;O#E}k=s=BeM_J5x8efG097q(e0GTL~f+L*AuBihgEd6q@2W>MvT%^PdjH=OL9dvWR4MV53K z>95^6jCSQu;(g4FSqIoEQGG$*{|xf^WUDR|iu0f)`T?J}sk)=lELK6<=^aY}C!zk0 z)UCfH%9g;z6WhRn1F8Fh6;9@II_j5$Pje4NzyeSnERC9IC={eGfQx_rfQnCIQ z3-{FF!*R;c_B*MQp%zoedPz4K{yQF=$`MwZ=+vmC?v%c~k*6ar0R?j=T~I?QMh}~fj>maD zav57qeii+&?E!ZKmyQ!sgzYK%+0&52TG6c8kIGf)!bbcp%#R|DDAK90jL!}NTFZyP zw`7e{U(Itg-Pxm5L=@7zG{|b|WO7~0sz#oN5pTw`Q1nEVC{Zsg_>?@h3qCfa&LFw_$Eu@*P>DeWXkDvB#E#z@fMtApu z=}}`<+kCQoCUIb)6g)+ppiFJB9cS)_Fl?<|<|R8eTJ^WQcd71MPl8jw(@up;e3j5^TfiAo6|wx@I(fqE+3IOea&SZgzl6YRSGJ&b!EPtw%e`G z@qjZckIrf@H~CBkAgPU|Z>P_sOcz5@i8}(p_76^RNRNGXa@5g&BAX3^t6?c`p(CDO z(XmD)Nx^Bsv&e;Sh0v~OJ(mynt?Do9UF@GucG*JXggS#^r%~4~&+03A_wmhd?|d@s zjLtyQZDg}l7A2+N;Tfkm{&At5GEW#;wh&&4W4ZVnUeD>DpN@!|`GTOm6Z2Kq1lkv^ zt{0qh6ZS5R7HG;N=3`KT1!P8PpTtfWd&hI}_JzLhbC>(av|o`-POusWLs*o?ue^pL zIoLuH&O&6{`ZERi+vjUV&{F~6f>CzLl#Od>)xOQmheuS<@eIJW_LO=)zD+d_bQ8J$ zo-pf422#KktmF;>9?n(4arxx?9e??w&UFG=TZlFwe*UXMalgZyl&|0-TWj))|eW^Dmp}gvnYdlXgTmv4#RP zD=Cy4U)XnQ>~k3O7bbylGz+nZS8nuz>n)nq7OU8_L(W zwUhykMQM79_N>pgH49`-b;X?4LfED&d~!_&o^>KVJKCY4`At?@C%B~Qw&Wk7o|ZCT1(MD6NMH3i<3tZThWDN{6Oa%ApGHfBmss%*H0 zs?AMhPTdVW@bdG$uP}i#*a<}a%rSL-@NHd1^oM3xl_-qM>;!5MGCRG#)qPuQ=e#B> zMCs?42Jja1GJ5%JW>c?sI>}?NeR{$*Hbf7v1KnOxQk@Sodra1(Q3lu$-eLy^ozLcq zJikC5W~$ehzz_kY_f%a*KNNWu(c7HypbvP)UiEqaR-2H#p*5xIjNxVM30fy#{6X8x z?=xvZ#;4RJp4L=EFPpx~c;&|N?oAd-xak#DD7TU3Xlw)`dU{=`RGPQt7Xv?5T2`3) zmv>ne$eMRILw_%S4b`u{s*?ia)W>oyjf~LQJ0SK!Ir1_~a@EyX=Z_(Ra(&vp!>0rV z>mg&y89K%;!blC9?xSAMXw$6GkJ?{!9cKTarFL&x99Y z;rKVg2as=q{AR{!msa1rRj-&vr#(zDt+^V{kaP(lT*3ec!96m;4s((#9x~oCM_SHTC8S|NCj6z#&QRiV5{rbY4xK;kjp8b4mS&j zRr0xQ6If(L0d|@Yue{^BfowZ&oWIGA9PZ3J4ElAqHVJC*#hM8xyuaj$f72uw;rFv@ zWXU?--VFcdt>Exn!Aj`9+9p>YMz%=HXDb}>YQFO;PEu;!qs<@Ei^XbG7jSn5pp{vD=|n4a=y za`wnKZ(4nt+3}%6DCZUHKRBI>kAdHuIY$mh>OzTW&a2^9xoKY8YHiSaUZ*=S;fvbs zg%2aD1jCpL55!`$sPTx-x>muiEr~=RI5dUyDd#bg6Y2ZOZgkdr5kU zZ+qIy;(N?iYUgZy_&HRH>axEi>G(H~STUWLfYiF%zXW?Vdj8pJ8OaB=?c-ppsXkv$ zRiB4-;9=@Vval2R56J24>=EI20UrK)Rn9@4uTRy*Ru-_cDWIdZHXgg>6I-EV9DZi& zs>9!Kk>enGedgWls#>3sI&CKWB3e7Zvw%IOv}Rf_4SwiMK6XW;TIk8poKXrK9~hDG z-=2oT_-g)=>6P#o8%f~?Vt-nw3X-KKzc(rjsWD5P+el?t`R##Uypv%|mXeYxcq2t> zsU5hpajWR7J(r-L%PAQ9i05mSoTN(LTA|uLwAO3)>rA*ZD?L1-Na*2e_|L!%pYS7k zW%M?}LTM0wQ3@r&L?uo zpG}fY?eTlYUO5! zK-Sh26HXUV8~Ku3!|l*HXsAK3C?+{4ffG*J{+|N%KhN!dRk42t#r=oW{lZY_#i#84 z^&NbVqr(zI>c*`dPmGPcn>jtPLENJc7{Rn03U_l)$fIo&XdVvxc0%eqX8Lj(LDQ_=wWBw?Je*W-H_~{bIQx@INCV z2QsaZX2ds2TvACV4fYhb%uV(_>&VsIrUYh<(OE%}kqH&p*+T-$x zvttRm2d~SLi|#Ra!`*>mlZ}dLKkEg20No!ttBlKzgzk^esKT9GeL8IA_|EYW)34j$ z4bH`EcT&<|*or<%F2WrC*|1WiSM@wG(Y>lln7hmne)^ErZhNi53T+@vZrB`H;dXX^ zFJj$PkK3nd*ZRSqX=iESby(V{#u_L_E2w1pA;utF;&_a{|94$vGD~*2Z0gR4m3e!E z$2a@Cd{F+mw5ZFdS;=ewh=2u5+VP@ zh7!|nT0eQHARz}pGUe_z;=9>POkvOo?(y^p03>BdC34Ac&&9#HU`o3-3D zW!OqYri=)Y<_aRP#Q<4ThS5G*q2M0?2ylU#trR7R6%)_&j#~oLQL@8FO@rJ|RN=Dx zK>Z&Y1&hNs+>Q6Y!ud-3of@_(8s@-AT35URa>uMTZ$#^I?_{=~sy?jXS)M+fmRK00 z^@Gn2*n3923|Er&j_H?l`&pvUUaB83$)Yp6QE^Wepk)FSJABh+Kcl;@e|@fvs=iM; znd#^C>FJQwCZM_qlB@H8Hei;MKW(uuu6<+nq!K{YLbnn^tZN<&q75|1R1eFS5Cv!3 z49HVlLF3wsTNowQd0n`dKR$%%H|5h*fIBHu7KeFx-!-d*D{xK_oQRq{Z6Gn!-V<06 zic$I`RI5&K(&{r*BitFV5)r!340Hun_+wt?hI(@qG?F#IXA|EMQ@tpV)wGcl_yi)o xY Date: Sun, 11 Sep 2022 12:42:06 -0400 Subject: [PATCH 02/13] Borg application Tweaks appropriate damage value for silicon beings, fixes issue with player transforms. --- code/datums/components/chasm.dm | 5 +- .../code/game/machinery/safety_tether.dm | 49 ++++++++++++------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 9617dd5a7..6f4542aa0 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -123,7 +123,8 @@ var/mob/living/L = AM L.notransform = TRUE L.Stun(200) - L.resting = TRUE + if(!issilicon(AM)) + L.resting = TRUE if(L.client && check_rights_for(L.client, R_FUN)) playsound(AM, pick('hyperstation/sound/misc/yodadeath.ogg', 'hyperstation/sound/misc/fallingthroughclouds.ogg', 'hyperstation/sound/misc/goofy.ogg', 'hyperstation/sound/misc/wilhelm.ogg'), 100, 0) @@ -173,6 +174,8 @@ L.notransform = FALSE else finishdrop(AM, oldtransform, oldcolor, oldalpha) + else + finishdrop(AM, oldtransform, oldcolor, oldalpha) /datum/component/chasm/proc/finishdrop(atom/movable/AM, oldalpha = "", oldcolor = "", oldtransform = "") diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index 89e16aba9..8db7fa0ca 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -37,9 +37,17 @@ var/cloneloss_min = 45 var/cloneloss_max = 70 - //Max and min amounts of burn damage for silicates - var/silicon_burn_min = 60 - var/silicon_burn_max = 80 + //Max and min amounts of burn damage for silicates. + /* + Cyborg health guide + 100; max health + <50; module 3 offline + <0; module 2 offline + <-50; module 3 offline + -100+; death + */ + var/silicon_burn_min = 120 + var/silicon_burn_max = 140 var/internal_radio = TRUE var/obj/item/radio/radio @@ -67,6 +75,9 @@ radio.canhear_range = 0 radio.recalculateChannels() + var/matrix/M = src.transform + src.transform = M.Translate(-32,-32) + update_icon() /obj/machinery/safety_tether/Destroy() @@ -111,6 +122,7 @@ M.emote("scream") if(iscarbon(M)) + var/mob/living/carbon/Carbon = M //Rework to teleporter mishap @@ -162,24 +174,25 @@ //animate(M, transform = oldtransform, alpha = oldalpha, color = oldcolor, time = 10) - M.transform = oldtransform - M.alpha = oldalpha - M.color = oldcolor + //M.transform = oldtransform + //M.alpha = oldalpha + //M.color = oldcolor + else + if(issilicon(M)) + var/mob/living/silicon/S = M + //Rework to teleporter mishap + priority_announce("[S] ([key_name(S)]) had a tether mishap") + to_chat(S, "Your circuits spark, slag, and pop as overwhelming white noise crackles and YANKS...") + S.apply_damage_type(damage = rand(silicon_burn_min, silicon_burn_max), damagetype = BURN) - return TRUE - if(issilicon(M)) - var/mob/living/silicon/S = M - //Rework to teleporter mishap - priority_announce("[S] ([key_name(S)]) had a tether mishap") - to_chat(S, "Your circuits spark, slag, and pop as overwhelming white noise crackles and YANKS...") - S.apply_damage_type(damage = rand(silicon_burn_min, silicon_burn_max), damagetype = BURN) + if(internal_radio) - if(internal_radio) + //Area name gotten just in case the locale of it's moved from engineering when mapmaking. + var/area/A = get_area(get_turf(src)) + var/area_name = A.name + SPEAKSCIENCE("The safety tether's caught the would-be crater [M] at the [area_name].") - //Area name gotten just in case the locale of it's moved from engineering when mapmaking. - var/area/A = get_area(get_turf(src)) - var/area_name = A.name - SPEAKSCIENCE("The safety tether's caught the would-be crater [M] at the [area_name].") + return TRUE else //drop them to their doom From 674e486aff72fe9aef788df84a8e037496865ad0 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 03:02:40 -0400 Subject: [PATCH 03/13] Polish and map changes -Adds in a wire bulb for the unfinished solar array where the solar tracker would go. -Adds a safety tether to the designated room in engineering -Optimizes bungee teleportation -Removes unnecessary commented code -Restricts bungee teleportation to cloud chasm tiles. -Adds flourishes, like having the tether produce blue light -Ensures the tether's icon is updated depending on whether it's currently powered --- .../LayeniaStation/LayeniaStation.dmm | 9 +- code/datums/components/chasm.dm | 45 +++---- code/game/turfs/simulated/chasm.dm | 13 +- .../code/game/machinery/safety_tether.dm | 112 ++++++++---------- 4 files changed, 73 insertions(+), 106 deletions(-) diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index 2d007b5f3..5114a8c2c 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -12615,6 +12615,9 @@ icon_state = "sandyfloor_red"; name = "crimson sand" }, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plasteel/airless/solarpanel{ initial_gas_mix = "o2=22;n2=82;TEMP=180"; planetary_atmos = 1 @@ -42969,6 +42972,10 @@ name = "parquet" }, /area/chapel/main) +"gQR" = ( +/obj/machinery/safety_tether, +/turf/open/floor/engine, +/area/engine/tether) "gQT" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -207374,7 +207381,7 @@ ykt wWR woc jgm -jgm +gQR jgm pLi pIP diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 6f4542aa0..60bf66dcd 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -1,6 +1,7 @@ // Used by /turf/open/chasm and subtypes to implement the "dropping" mechanic /datum/component/chasm var/turf/target_turf + var/turf/linked_turf //turf tile this chasm tile is linked to. Used to get type of turf tile to determine if safety tether applies var/fall_message = "GAH! Ah... where are you?" var/oblivion_message = "You stumble and stare into the abyss before you. It stares back, and you fall into the enveloping dark." @@ -30,9 +31,10 @@ /obj/effect/baseturf_helper )) -/datum/component/chasm/Initialize(turf/target) +/datum/component/chasm/Initialize(turf/target, turf/linked) RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED), .proc/Entered) target_turf = target + linked_turf = linked START_PROCESSING(SSobj, src) // process on create, in case stuff is still there /datum/component/chasm/proc/Entered(datum/source, atom/movable/AM) @@ -95,8 +97,6 @@ /datum/component/chasm/proc/drop(atom/movable/AM) - //priority_announce("Chasm_component-side drop triggered!") - //Make sure the item is still there after our sleep if(!AM || QDELETED(AM)) return @@ -131,26 +131,8 @@ else if(prob(5)) playsound(AM, pick('hyperstation/sound/misc/yodadeath.ogg', 'hyperstation/sound/misc/fallingthroughclouds.ogg', 'hyperstation/sound/misc/goofy.ogg', 'hyperstation/sound/misc/wilhelm.ogg'), 100, 0) - var/oldalpha = AM.alpha - var/oldcolor = AM.color - var/oldtransform = AM.transform - // - - /* - for(var/i in 1 to 5) - //Make sure the item is still there after our sleep - if(!AM || QDELETED(AM)) - return - AM.pixel_y-- - sleep(2) - - //Make sure the item is still there after our sleep - if(!AM || QDELETED(AM)) - return - */ - - if(iscyborg(AM) || iscarbon(AM)) + if(linked_turf.name == "clouds" && iscyborg(AM) || iscarbon(AM)) var/mob/living/victim = AM var/tether_number = GLOB.safety_tethers_list.len @@ -162,24 +144,29 @@ if(tether_number == 1) // If teleportation fails - if(!GLOB.safety_tethers_list[1].bungee_teleport(src, victim, oldalpha, oldcolor, oldtransform)) - finishdrop(AM, oldalpha, oldcolor, oldtransform) + if(!GLOB.safety_tethers_list[1].bungee_teleport(victim)) + finishdrop(AM) else //Just in case multiple safety tethers are present - if(!GLOB.safety_tethers_list[rand(1,GLOB.safety_tethers_list.len)].bungee_teleport(src, victim, oldalpha, oldcolor, oldtransform)) - finishdrop(AM, oldalpha, oldcolor, oldtransform) + if(!GLOB.safety_tethers_list[rand(1,GLOB.safety_tethers_list.len)].bungee_teleport(victim)) + finishdrop(AM) if(isliving(AM)) var/mob/living/L = AM L.notransform = FALSE else - finishdrop(AM, oldtransform, oldcolor, oldalpha) + finishdrop(AM) else - finishdrop(AM, oldtransform, oldcolor, oldalpha) + finishdrop(AM) -/datum/component/chasm/proc/finishdrop(atom/movable/AM, oldalpha = "", oldcolor = "", oldtransform = "") +/datum/component/chasm/proc/finishdrop(atom/movable/AM) + var/oldalpha = AM.alpha + var/oldcolor = AM.color + var/oldtransform = AM.transform + + //Animate our falling items, then delete them. animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10) for(var/i in 1 to 5) diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index f3613264d..8cdd7be14 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -12,7 +12,7 @@ /turf/open/chasm/Initialize() . = ..() - AddComponent(/datum/component/chasm, SSmapping.get_turf_below(src)) + AddComponent(/datum/component/chasm, SSmapping.get_turf_below(src), src) /turf/open/chasm/proc/set_target(turf/target) var/datum/component/chasm/chasm_component = GetComponent(/datum/component/chasm) @@ -23,17 +23,6 @@ /turf/open/chasm/proc/drop(atom/movable/AM) var/datum/component/chasm/chasm_component = GetComponent(/datum/component/chasm) - /* - //if(baseturfs == /turf/open/chasm/cloud) - if(iscyborg(AM) || iscarbon(AM)) - var/mob/victim = AM - priority_announce("Signal sending!") - //Sends the signal that a carbon or silicon mob's been clouded - SEND_SIGNAL(src, COMSIG_GLOB_MOB_CLOUDED, victim) - priority_announce("Signal sent!") - chasm_component.drop(AM, TRUE) - //else - */ chasm_component.drop(AM) diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index 8db7fa0ca..18a0cb521 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -4,6 +4,12 @@ //Potential replacement for genetics revives or something I dunno (?) +//bugs; power draw not working +// mapmaker bug, either is centered in map editor or lighting is centered, not both + +// Maybe if separating into multiple objects like with the grav gen, have it arc tesla lightning to each corner upon teleport? + + // Have it pull back all player mobs, and all borgs if possible // have chasm tiles, when something falls in send a signal that the safety tether catches, containing the chasm turf and the mob // then the tether can either report it's inactive to the tile so that it then deletes the entity, or teeleport the player @@ -23,6 +29,15 @@ icon_state = "safety_tether" verb_say = "states" + //'Center' of machine is the bottom left corner. Since whole machine is walkable, it's fine and looks better for mapping + //Translates whole machine to center it up properly, since the actual center is the bottom left corner. + transform = matrix(1, 0, -32, 0, 1, -32) + + //Set width and height in case we make this dense + bound_width = 96 + bound_height = 96 + + //We don't want this getting destroyed since it cannot be remade. move_resist = INFINITY resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -37,6 +52,9 @@ var/cloneloss_min = 45 var/cloneloss_max = 70 + //Amount of subject's blood to keep on successful teleport + var/bleed_ratio = 0.75 + //Max and min amounts of burn damage for silicates. /* Cyborg health guide @@ -49,6 +67,16 @@ var/silicon_burn_min = 120 var/silicon_burn_max = 140 + var/brightness_on = 4 //range of light when on + light_power = 1.5 //strength of the light when on + light_color = LIGHT_COLOR_CYAN + + use_power = IDLE_POWER_USE + power_channel = EQUIP + idle_power_usage = 500 + active_power_usage = 500 + var/teleport_power_usage = 10000 + var/internal_radio = TRUE var/obj/item/radio/radio @@ -57,11 +85,6 @@ //var/radio_channel = RADIO_CHANNEL_MEDICAL - //var/list/unattached_flesh - //var/flesh_number = 0 - - //var/size = 1 - /obj/machinery/safety_tether/Initialize() . = ..() @@ -75,18 +98,16 @@ radio.canhear_range = 0 radio.recalculateChannels() - var/matrix/M = src.transform - src.transform = M.Translate(-32,-32) - update_icon() /obj/machinery/safety_tether/Destroy() QDEL_NULL(radio) GLOB.safety_tethers_list -= src + + //if made into connected machine later, like gravgen //if(connected) // connected.DetachCloner(src) - //QDEL_LIST(unattached_flesh) . = ..() @@ -109,14 +130,12 @@ return examine(user) //Returns true if teleport is successful, false otherwise -/obj/machinery/safety_tether/proc/bungee_teleport(datum/component/chasm/C, mob/living/M, oldalpha, oldcolor, oldtransform) +/obj/machinery/safety_tether/proc/bungee_teleport(mob/living/M) priority_announce("Tether bungee activated!") if(ismovableatom(M) && is_operational() != 0 && do_teleport(M, get_turf(src), channel = TELEPORT_CHANNEL_BLUESPACE)) - use_power(5000) - - priority_announce("Do teleport worked!") + use_power(teleport_power_usage) M.spawn_gibs() M.emote("scream") @@ -162,7 +181,7 @@ break //Bleed our pal a little - M.blood_volume = BLOOD_VOLUME_NORMAL * M.blood_ratio * 0.8 + M.blood_volume = BLOOD_VOLUME_NORMAL * M.blood_ratio * bleed_ratio src.visible_message("[src] spits out [M] and viscera!") if(internal_radio) @@ -172,6 +191,7 @@ var/area_name = A.name SPEAKMEDICAL("The safety tether's caught the would-be crater [M] at the [area_name].") + //All this ended up causing issues by canting the player 90 degrees due to the player having enforced rest at the time of teleportation //animate(M, transform = oldtransform, alpha = oldalpha, color = oldcolor, time = 10) //M.transform = oldtransform @@ -195,10 +215,20 @@ return TRUE else - //drop them to their doom return FALSE - var/atom/movable/AM = M - C.finishdrop(AM, oldalpha, oldcolor, oldtransform) + +//Updates machine icon and lighting depending on whether or not it's being powered + +/obj/machinery/safety_tether/power_change() + ..() + if(stat & NOPOWER) + set_light(0) + else + set_light(brightness_on) + update_icon() + return + +//possible emagging or other interactions later, like EMPs /* /obj/machinery/safety_tether/emag_act(mob/user) if(!occupant) @@ -246,54 +276,8 @@ go_out() ..() */ -//#define CRYOMOBS 'icons/obj/cryo_mobs.dmi' -/* -/obj/machinery/clonepod/update_icon() - cut_overlays() - if(mess) - icon_state = "pod_g" - var/image/gib1 = image(CRYOMOBS, "gibup") - var/image/gib2 = image(CRYOMOBS, "gibdown") - gib1.pixel_y = 27 + round(sin(world.time) * 3) - gib1.pixel_x = round(sin(world.time * 3)) - gib2.pixel_y = 27 + round(cos(world.time) * 3) - gib2.pixel_x = round(cos(world.time * 3)) - add_overlay(gib2) - add_overlay(gib1) - add_overlay("cover-on") - - else if(occupant) - icon_state = "pod_1" - - var/image/occupant_overlay - var/completion = (flesh_number - unattached_flesh.len) / flesh_number - - if(unattached_flesh.len <= 0) - occupant_overlay = image(occupant.icon, occupant.icon_state) - occupant_overlay.copy_overlays(occupant) - else - occupant_overlay = image(CRYOMOBS, "clone_meat") - var/matrix/tform = matrix() - tform.Scale(completion) - tform.Turn(cos(world.time * 2) * 3) - occupant_overlay.transform = tform - occupant_overlay.appearance_flags = 0 - - occupant_overlay.dir = SOUTH - occupant_overlay.pixel_y = 27 + round(sin(world.time) * 3) - occupant_overlay.pixel_x = round(sin(world.time * 3)) - - add_overlay(occupant_overlay) - add_overlay("cover-on") - else - icon_state = "pod_0" - - if(panel_open) - icon_state = "pod_0_maintenance" - - add_overlay("panel") -*/ +// Write up a manual maybe? /* * Manual -- A big ol' manual. */ From 1d1772e7e0aa73e920b82562d7ab72ae7e3966c6 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 06:50:25 -0400 Subject: [PATCH 04/13] Fix lighting centering Makes lighting act on the turf the tether is on, to prevent its pixel_x and pixel_y values from shifting the lighting offcenter --- .../code/game/machinery/safety_tether.dm | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index 18a0cb521..cabf2d2e2 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -1,13 +1,8 @@ -//Cloning revival method. -//The pod handles the actual cloning while the computer manages the clone profiles - -//Potential replacement for genetics revives or something I dunno (?) - +//Teleports players who fall off cloud chasm tiles to itself, drawing power in the process. //bugs; power draw not working -// mapmaker bug, either is centered in map editor or lighting is centered, not both -// Maybe if separating into multiple objects like with the grav gen, have it arc tesla lightning to each corner upon teleport? +//Maybe if separating into multiple objects like with the grav gen, have it arc tesla lightning to each corner upon teleport? // Have it pull back all player mobs, and all borgs if possible @@ -16,6 +11,7 @@ // create global list of safety tethers in the world to then process +//Easy definitions to have the machine talk on the appropriate frequencies. //#define SPEAK(message) radio.talk_into(src, message, radio_channel) #define SPEAKMEDICAL(message) radio.talk_into(src, message, RADIO_CHANNEL_MEDICAL) @@ -29,9 +25,9 @@ icon_state = "safety_tether" verb_say = "states" - //'Center' of machine is the bottom left corner. Since whole machine is walkable, it's fine and looks better for mapping - //Translates whole machine to center it up properly, since the actual center is the bottom left corner. - transform = matrix(1, 0, -32, 0, 1, -32) + //Shifts the starting location so as to center the machine + pixel_x = -32 + pixel_y = -32 //Set width and height in case we make this dense bound_width = 96 @@ -41,8 +37,7 @@ move_resist = INFINITY resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - //var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine. - + //var/obj/machinery/computer/tether_computer/connected = null //So we remember the connected clone machine. //Here for easy balancing and possibly changing it between different tether objects or if upgrades occur. @@ -67,16 +62,21 @@ var/silicon_burn_min = 120 var/silicon_burn_max = 140 - var/brightness_on = 4 //range of light when on - light_power = 1.5 //strength of the light when on + var/brightness_on = 4 //Range of light when on + light_power = 1.5 //Strength of the light when on light_color = LIGHT_COLOR_CYAN + //Defines the center point around which lighting is located + var/atom/light_source + //_mask = matrix(1, 0, 32, 0, 1, 32) + use_power = IDLE_POWER_USE power_channel = EQUIP idle_power_usage = 500 - active_power_usage = 500 var/teleport_power_usage = 10000 + var/critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. + var/internal_radio = TRUE var/obj/item/radio/radio @@ -98,8 +98,17 @@ radio.canhear_range = 0 radio.recalculateChannels() + //ensures light is properly centered around the tether. Removes lighting system's pixel approximation that breaks it. + light_source = get_turf(src) update_icon() +/obj/machinery/safety_tether/doMove(atom/destination) + . = ..() + //ensures light is properly centered around the tether. Removes lighting system's pixel approximation that breaks it. + light_source = get_turf(src) + + return . + /obj/machinery/safety_tether/Destroy() QDEL_NULL(radio) @@ -217,16 +226,14 @@ else return FALSE -//Updates machine icon and lighting depending on whether or not it's being powered - +//Updates machine icon and lighting every time power in the area changes /obj/machinery/safety_tether/power_change() - ..() + . = ..() if(stat & NOPOWER) - set_light(0) + light_source.set_light(0) else - set_light(brightness_on) + light_source.set_light(brightness_on, light_power, light_color) update_icon() - return //possible emagging or other interactions later, like EMPs /* From 9beae92ef30d3b2d0c6eb717f16e5bae608f24e4 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 08:43:56 -0400 Subject: [PATCH 05/13] Power fix Fixes a bug with power draw in machines, where if they didn't have an overwritten process procedure they wouldn't draw power. Ex. Chem Masters. This fixes power draw for the safety tether Safety tether now draws roughly balanced amount of power. draws 1kw default, drains about a fourth the apc cell's charge if unupgraded when teleporting. --- code/datums/components/chasm.dm | 2 - code/game/machinery/_machinery.dm | 9 +++- .../code/game/machinery/safety_tether.dm | 46 +++++++----------- .../icons/obj/machinery/safety_tether.dmi | Bin 5472 -> 5474 bytes 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 60bf66dcd..1bcbc48b8 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -137,8 +137,6 @@ var/tether_number = GLOB.safety_tethers_list.len - priority_announce("[tether_number] tethers present.") - //If safety tethers are present, get one from the global list to teleport the body to if operational if(tether_number > 0) if(tether_number == 1) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 114492543..cd18282d5 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -157,8 +157,13 @@ Class Procs: /obj/machinery/proc/locate_machinery() return -/obj/machinery/process()//If you dont use process or power why are you here - return PROCESS_KILL +/obj/machinery/process() + + //Here because if the machine doesn't have a process code attached to it or if PROCESS_KILL is returned it will no longer draw power. + if(is_operational()) + return 1 + else + return 0 /obj/machinery/proc/process_atmos()//If you dont use process why are you here return PROCESS_KILL diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index cabf2d2e2..e2f6f9ea7 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -72,10 +72,10 @@ use_power = IDLE_POWER_USE power_channel = EQUIP - idle_power_usage = 500 - var/teleport_power_usage = 10000 + idle_power_usage = 1000 + var/teleport_power_usage = 1000000 //Uses about a fourth of the upgraded power cell plus default in APCs - var/critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. + critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. var/internal_radio = TRUE var/obj/item/radio/radio @@ -101,31 +101,24 @@ //ensures light is properly centered around the tether. Removes lighting system's pixel approximation that breaks it. light_source = get_turf(src) update_icon() + power_change() //Here to start lights on ititialization. + +/obj/machinery/safety_tether/Destroy() + QDEL_NULL(radio) + GLOB.safety_tethers_list -= src + . = ..() /obj/machinery/safety_tether/doMove(atom/destination) . = ..() //ensures light is properly centered around the tether. Removes lighting system's pixel approximation that breaks it. light_source = get_turf(src) - return . -/obj/machinery/safety_tether/Destroy() - QDEL_NULL(radio) - - GLOB.safety_tethers_list -= src - - //if made into connected machine later, like gravgen - //if(connected) - // connected.DetachCloner(src) - - . = ..() - /obj/machinery/safety_tether/update_icon() cut_overlays() if(is_operational()) add_overlay("operational_overlay") -//Clonepod /obj/machinery/safety_tether/examine(mob/user) . = ..() @@ -141,21 +134,18 @@ //Returns true if teleport is successful, false otherwise /obj/machinery/safety_tether/proc/bungee_teleport(mob/living/M) - priority_announce("Tether bungee activated!") - if(ismovableatom(M) && is_operational() != 0 && do_teleport(M, get_turf(src), channel = TELEPORT_CHANNEL_BLUESPACE)) use_power(teleport_power_usage) M.spawn_gibs() M.emote("scream") + //priority_announce("[M] ([key_name(M)]) had a tether mishap") + if(iscarbon(M)) var/mob/living/carbon/Carbon = M - //Rework to teleporter mishap - priority_announce("[Carbon] ([key_name(Carbon)]) had a tether mishap") - to_chat(Carbon, "Buzzing static snaps taut on your chest....") Carbon.adjustCloneLoss(rand(40,75)) @@ -209,8 +199,6 @@ else if(issilicon(M)) var/mob/living/silicon/S = M - //Rework to teleporter mishap - priority_announce("[S] ([key_name(S)]) had a tether mishap") to_chat(S, "Your circuits spark, slag, and pop as overwhelming white noise crackles and YANKS...") S.apply_damage_type(damage = rand(silicon_burn_min, silicon_burn_max), damagetype = BURN) @@ -229,10 +217,11 @@ //Updates machine icon and lighting every time power in the area changes /obj/machinery/safety_tether/power_change() . = ..() - if(stat & NOPOWER) - light_source.set_light(0) - else - light_source.set_light(brightness_on, light_power, light_color) + if(light_source) + if(stat & NOPOWER) + light_source.set_light(0) + else + light_source.set_light(brightness_on, light_power, light_color) update_icon() //possible emagging or other interactions later, like EMPs @@ -316,5 +305,4 @@ //#undef SPEAK #undef SPEAKMEDICAL -#undef SPEAKSCIENCE - +#undef SPEAKSCIENCE \ No newline at end of file diff --git a/hyperstation/icons/obj/machinery/safety_tether.dmi b/hyperstation/icons/obj/machinery/safety_tether.dmi index cd56af83cc3e58e9219deb98be4665a1338a0230..fcf4b788be35a1cd6cb842a085ee9ecdcb2aeb49 100644 GIT binary patch delta 5246 zcmbVOcT`i|m!$|O#n7u5K*d6dG!cPN1Va_%lOipMhAQ~+g$~K1sB}URQ4j)BL^=v0 zic+LVlTHw&h87|vA(VtbCjMs4n%|oFXV$#6?pyEeb6WEF; zwr0=wfLEBXO2>rdET2Ev_Ue9^p86f2UY{)$Lk$2^2)944KPW3zE}WvwF#7iP&I4@p zS?N4%*yy&#u=Mh)gQF>G#glQ>_soK?Q+A4#G<31sR|XCaj?kk34jSP0#@NSC$LdeE z80lf#wIp`Tmt_Txw6^v}8TMyWs`-i|!&Hb=h~ms5)G#z7ewUa!&@<%R!QddZChsM5_-8JWwkHIMTo zkZYPBzoJ*y&3Q6YmT`IWogIoo6DymDPHKRm^k&ub|U)QoK9ie*08Ea$Da zO1w82GF%@Zt4HXE+aFovpfq*2hIMNB`wII8L`&nYoWsUqrZIlYoidY{TF?_+%n zeL2OfzU4)d52&PD9C=GO)r1+5pbUV~qb;9ChGAshot_xlKAXdNN4u`Iv;)KWZjYc&Z*vocLAm zB0~|vSdzbip>SenO6pd)B5^%#uNY@2MwX(qfyMi2>dJHWo&~P-db+O*)%MJY5%0Dz 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 YI?<~`mm$1S*};3xow;C9X67FAZ_SgaKL7v# From 1916d86555e86295591eb405a0f21e61c3c2868a Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 09:50:13 -0400 Subject: [PATCH 06/13] Style points Changes the APC in the tether room to have equipment defaulted to always on to counteract power draw Have the Safety Tether create cool but largely harmless tesla arcs. Adds grounding rods to the Tether's room. --- _maps/map_files/LayeniaStation/LayeniaStation.dmm | 9 +++++++-- hyperstation/code/game/machinery/safety_tether.dm | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index 5114a8c2c..9814f5cc5 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -10925,6 +10925,7 @@ dir = 1; pixel_y = 16 }, +/obj/machinery/power/grounding_rod, /turf/open/floor/plasteel/dark, /area/engine/tether) "bxV" = ( @@ -136035,6 +136036,10 @@ icon_state = "darkfull_whole_alt" }, /area/science/xenobiology) +"ueq" = ( +/obj/machinery/power/grounding_rod, +/turf/open/floor/plasteel/dark, +/area/engine/tether) "uer" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ dir = 1 @@ -206868,7 +206873,7 @@ yip woc bxU pLi -pLi +ueq lgU qTO woc @@ -207896,7 +207901,7 @@ wWR woc bxU pLi -pLi +ueq uPI xqo woc diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index e2f6f9ea7..bbcfdfbb0 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -73,7 +73,8 @@ use_power = IDLE_POWER_USE power_channel = EQUIP idle_power_usage = 1000 - var/teleport_power_usage = 1000000 //Uses about a fourth of the upgraded power cell plus default in APCs + var/teleport_power_draw = 900000 //Uses about a fourth of the upgraded power cell plus default in APCs + var/tesla_power_ratio = 0.01 //ratio of its actual power draw to the tesla it creates, 9000 total looks decent critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. @@ -135,7 +136,12 @@ /obj/machinery/safety_tether/proc/bungee_teleport(mob/living/M) if(ismovableatom(M) && is_operational() != 0 && do_teleport(M, get_turf(src), channel = TELEPORT_CHANNEL_BLUESPACE)) - use_power(teleport_power_usage) + use_power(teleport_power_draw) + + //Style points + playsound(src, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5) + // TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN | TESLA_ALLOW_DUPLICATES + tesla_zap(src, 3, teleport_power_draw * tesla_power_ratio, TESLA_MOB_DAMAGE | FALSE | TESLA_MOB_STUN | FALSE) //Set to zap harmlessly but in a way that looks cool M.spawn_gibs() M.emote("scream") From 78a075227e2aa3db6398510427244017d431fba1 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 12:45:36 -0400 Subject: [PATCH 07/13] Anchor grounding rods Anchors the grounding rods in the Safety Tether room --- .../LayeniaStation/LayeniaStation.dmm | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index 9814f5cc5..ba0dd9759 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -10925,7 +10925,12 @@ dir = 1; pixel_y = 16 }, -/obj/machinery/power/grounding_rod, +/obj/machinery/power/grounding_rod{ + anchored = 1 + }, +/obj/machinery/power/grounding_rod{ + anchored = 1 + }, /turf/open/floor/plasteel/dark, /area/engine/tether) "bxV" = ( @@ -29549,6 +29554,12 @@ name = "large" }, /area/crew_quarters/dorms/upper) +"eLZ" = ( +/obj/machinery/power/grounding_rod{ + anchored = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/tether) "eMc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ name = "air supply pipe" @@ -43143,6 +43154,16 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"gSH" = ( +/obj/machinery/light{ + dir = 1; + pixel_y = 16 + }, +/obj/machinery/power/grounding_rod{ + anchored = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/tether) "gSQ" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/wood{ @@ -136036,10 +136057,6 @@ icon_state = "darkfull_whole_alt" }, /area/science/xenobiology) -"ueq" = ( -/obj/machinery/power/grounding_rod, -/turf/open/floor/plasteel/dark, -/area/engine/tether) "uer" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ dir = 1 @@ -158901,6 +158918,7 @@ /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/engine/tether"; dir = 4; + equipment = 2; name = "Tether APC"; pixel_x = 24 }, @@ -206873,7 +206891,7 @@ yip woc bxU pLi -ueq +eLZ lgU qTO woc @@ -207899,9 +207917,9 @@ xdO ykt wWR woc -bxU +gSH pLi -ueq +eLZ uPI xqo woc From a949b576a7f4d65f7558668745be60f396f6f6ac Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 16:27:45 -0400 Subject: [PATCH 08/13] Manual, polish General polish, removing equipment power on so that after powerloss it isn't set to off. Bleed_ratio fixes so people with low blood to start with don't have blood ADDED. Random power failure event protection. Adds a manual! --- .../LayeniaStation/LayeniaStation.dmm | 39 ++++--- code/datums/components/chasm.dm | 2 +- .../code/game/machinery/safety_tether.dm | 100 ++++-------------- 3 files changed, 39 insertions(+), 102 deletions(-) diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index ba0dd9759..f11148184 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -7018,6 +7018,12 @@ /obj/effect/landmark/nuclear_waste_spawner, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"aRt" = ( +/obj/machinery/power/grounding_rod{ + anchored = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/tether) "aRw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -29554,12 +29560,6 @@ name = "large" }, /area/crew_quarters/dorms/upper) -"eLZ" = ( -/obj/machinery/power/grounding_rod{ - anchored = 1 - }, -/turf/open/floor/plasteel/dark, -/area/engine/tether) "eMc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ name = "air supply pipe" @@ -43154,16 +43154,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"gSH" = ( -/obj/machinery/light{ - dir = 1; - pixel_y = 16 - }, -/obj/machinery/power/grounding_rod{ - anchored = 1 - }, -/turf/open/floor/plasteel/dark, -/area/engine/tether) "gSQ" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/wood{ @@ -131214,6 +131204,16 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel/dark, /area/quartermaster/miningdock) +"txg" = ( +/obj/machinery/light{ + dir = 1; + pixel_y = 16 + }, +/obj/machinery/power/grounding_rod{ + anchored = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/tether) "txl" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/power/apc{ @@ -158918,7 +158918,6 @@ /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/engine/tether"; dir = 4; - equipment = 2; name = "Tether APC"; pixel_x = 24 }, @@ -206891,7 +206890,7 @@ yip woc bxU pLi -eLZ +aRt lgU qTO woc @@ -207917,9 +207916,9 @@ xdO ykt wWR woc -gSH +txg pLi -eLZ +aRt uPI xqo woc diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 1bcbc48b8..f64f60494 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -132,7 +132,7 @@ playsound(AM, pick('hyperstation/sound/misc/yodadeath.ogg', 'hyperstation/sound/misc/fallingthroughclouds.ogg', 'hyperstation/sound/misc/goofy.ogg', 'hyperstation/sound/misc/wilhelm.ogg'), 100, 0) - if(linked_turf.name == "clouds" && iscyborg(AM) || iscarbon(AM)) + if(linked_turf.name == "clouds" && (iscyborg(AM) || iscarbon(AM))) var/mob/living/victim = AM var/tether_number = GLOB.safety_tethers_list.len diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index bbcfdfbb0..d6e87037b 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -47,8 +47,8 @@ var/cloneloss_min = 45 var/cloneloss_max = 70 - //Amount of subject's blood to keep on successful teleport - var/bleed_ratio = 0.75 + //Amount of subject's blood to remove on successful teleport + var/bleed_ratio = 0.25 //Max and min amounts of burn damage for silicates. /* @@ -74,9 +74,9 @@ power_channel = EQUIP idle_power_usage = 1000 var/teleport_power_draw = 900000 //Uses about a fourth of the upgraded power cell plus default in APCs - var/tesla_power_ratio = 0.01 //ratio of its actual power draw to the tesla it creates, 9000 total looks decent + var/tesla_power_ratio = 0.75 //ratio of its actual power draw to the tesla it creates - critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. + critical_machine = TRUE //If this machine is critical to station operation and should have the area be excempted from power failures. var/internal_radio = TRUE var/obj/item/radio/radio @@ -153,7 +153,7 @@ var/mob/living/carbon/Carbon = M to_chat(Carbon, "Buzzing static snaps taut on your chest....") - Carbon.adjustCloneLoss(rand(40,75)) + Carbon.adjustCloneLoss(rand(cloneloss_min, cloneloss_max)) //Random limb removal var/dismember_num = 1 @@ -186,7 +186,7 @@ break //Bleed our pal a little - M.blood_volume = BLOOD_VOLUME_NORMAL * M.blood_ratio * bleed_ratio + M.blood_volume -= BLOOD_VOLUME_NORMAL * M.blood_ratio * bleed_ratio src.visible_message("[src] spits out [M] and viscera!") if(internal_radio) @@ -208,6 +208,7 @@ to_chat(S, "Your circuits spark, slag, and pop as overwhelming white noise crackles and YANKS...") S.apply_damage_type(damage = rand(silicon_burn_min, silicon_burn_max), damagetype = BURN) + src.visible_message("[src] spits out [M] and oily, smoking circuits!") if(internal_radio) //Area name gotten just in case the locale of it's moved from engineering when mapmaking. @@ -230,84 +231,21 @@ light_source.set_light(brightness_on, light_power, light_color) update_icon() -//possible emagging or other interactions later, like EMPs -/* -/obj/machinery/safety_tether/emag_act(mob/user) - if(!occupant) - return - to_chat(user, "You corrupt the genetic compiler.") - malfunction() - -/obj/machinery/clonepod/proc/malfunction() - var/mob/living/mob_occupant = occupant - if(mob_occupant) - connected_message("Critical Error!") - SPEAK("Critical error! Please contact a Thinktronic Systems \ - technician, as your warranty may be affected.") - mess = TRUE - maim_clone(mob_occupant) //Remove every bit that's grown back so far to drop later, also destroys bits that haven't grown yet - update_icon() - if(mob_occupant.mind != clonemind) - clonemind.transfer_to(mob_occupant) - mob_occupant.grab_ghost() // We really just want to make you suffer. - flash_color(mob_occupant, flash_color="#960000", flash_time=100) - to_chat(mob_occupant, "Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is.
") - playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 50, 0) - SEND_SOUND(mob_occupant, sound('sound/hallucinations/veryfar_noise.ogg',0,1,50)) - QDEL_IN(mob_occupant, 40) - -/obj/machinery/clonepod/emp_act(severity) - . = ..() - if (!(. & EMP_PROTECT_SELF)) - var/mob/living/mob_occupant = occupant - if(mob_occupant && prob(100/(severity*efficiency))) - connected_message(Gibberish("EMP-caused Accidental Ejection", 0)) - SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of, ERROR: John Doe, prematurely." ,0)) - mob_occupant.apply_vore_prefs() - go_out() - -/obj/machinery/clonepod/proc/horrifyingsound() - for(var/i in 1 to 5) - playsound(loc,pick('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg'), 100, rand(0.95,1.05)) - sleep(1) - sleep(10) - playsound(loc,'sound/hallucinations/wail.ogg',100,1) - -/obj/machinery/clonepod/deconstruct(disassembled = TRUE) - if(occupant) - go_out() - ..() -*/ - -// Write up a manual maybe? /* * Manual -- A big ol' manual. */ -/* -/obj/item/paper/guides/jobs/medical/cloning - name = "paper - 'H-87 Cloning Apparatus Manual" - info = {"

Getting Started

- Congratulations, your station has purchased the H-87 industrial cloning device!
- Using the H-87 is almost as simple as brain surgery! Simply insert the target humanoid into the scanning chamber and select the scan option to create a new profile!
- That's all there is to it!
- Notice, cloning system cannot scan inorganic life or small primates. Scan may fail if subject has suffered extreme brain damage.
-

Clone profiles may be viewed through the profiles menu. Scanning implants a complementary HEALTH MONITOR IMPLANT into the subject, which may be viewed from each profile. - Profile Deletion has been restricted to \[Station Head\] level access.

-

Cloning from a profile

- Cloning is as simple as pressing the CLONE option at the bottom of the desired profile.
- Per your company's EMPLOYEE PRIVACY RIGHTS agreement, the H-87 has been blocked from cloning crewmembers while they are still alive.
-
-

The provided CLONEPOD SYSTEM will produce the desired clone. Standard clone maturation times (With SPEEDCLONE technology) are roughly 90 seconds. - The cloning pod may be unlocked early with any \[Medical Researcher\] ID after initial maturation is complete.


- Please note that resulting clones may have a small DEVELOPMENTAL DEFECT as a result of genetic drift.
-

Profile Management

-

The H-87 (as well as your station's standard genetics machine) can accept STANDARD DATA DISKETTES. - These diskettes are used to transfer genetic information between machines and profiles. - A load/save dialog will become available in each profile if a disk is inserted.


- A good diskette is a great way to counter aforementioned genetic drift!
-
- This technology produced under license from Thinktronic Systems, LTD."} -*/ + +/obj/item/paper/fluff/safety_tether + name = "paper - 'Safety Tether Introduction" + info = {"

Kinaris IVA Safety Tether

+ Hello, if you’re reading this note, that means you’ve been selected to work in our Retrograde Tether Program. Few portions of Andromeda have such outdated engrams as Layenia does, so getting a proper Tether raised quite a lot of pushback. However, working in a gas giant has been deemed hazardous enough to warrant the allowance of a Safety Tether.

+ For those unfamiliar with the technology of a Safety Tether; + First and foremost; Understand that it needs to be powered at all times. Failure to supply constant energy to the tether can and will prevent its function, and doom personnel to the clouds beneath if any are so unlucky as to fall in the interim.
+ Secondly; Speaking of clouds. when powered, the tether will rescue any humanoid beings or borgs who would slip into them.
+ Thirdly; Large amounts of electricity are siphoned upon any and every use of the Safety Tether, enough so to arc through the air and hopefully into the grounding rods supplied nearby. The transit of matter instantaneously and unplanned to one location from anywhere on the planet is, understandably, enough to drain a fourth of the APCs energy or so when activated.

+ + However, the old engram Layenia works under is faulty at best, resulting in blood loss, loss of limbs, and painful cellular damages or burns to personnel and cyborgs respectively when falling into the clouds. Because of this, caution is still highly advised when working on the exterior of Layenia. A radio has been retrofitted to the device to call appropriate medical or scientific services onscene as an added precaution.

+ Should any more information be needed on the tether, please contact your local sector executive."} //#undef SPEAK #undef SPEAKMEDICAL From 93ab6c8785d1ec6e7f8439cbfe28c3016c6cad09 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 16:30:18 -0400 Subject: [PATCH 09/13] Adds fluff paper on the safety tether to the map Adds fluff paper on the safety tether to the map --- _maps/map_files/LayeniaStation/LayeniaStation.dmm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index c401db3be..2bac9f2fa 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -62506,6 +62506,7 @@ dir = 10; name = "air supply pipe" }, +/obj/item/paper/fluff/safety_tether, /turf/open/floor/plasteel/dark{ dir = 1; icon_state = "darkfull_plate" @@ -100324,6 +100325,10 @@ }, /turf/open/floor/plating/layenia, /area/layenia/cloudlayer) +"pkn" = ( +/obj/item/paper/fluff/safety_tether, +/turf/open/floor/plasteel/dark, +/area/engine/tether) "pko" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ dir = 8; @@ -207142,7 +207147,7 @@ woc jgm jgm jgm -pLi +pkn cZp woc tgZ From 6b5994f8fb98eeeae1df41ff038c2f45da212bd7 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 16:39:04 -0400 Subject: [PATCH 10/13] Admin logging Adds tether events to the admin log --- hyperstation/code/game/machinery/safety_tether.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index d6e87037b..98156fe02 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -146,7 +146,7 @@ M.spawn_gibs() M.emote("scream") - //priority_announce("[M] ([key_name(M)]) had a tether mishap") + log_admin("[M] ([key_name(M)]) was saved by the Safety Tether.") if(iscarbon(M)) @@ -219,6 +219,7 @@ return TRUE else + log_admin("[M] ([key_name(M)]) was failed by the Safety Tether and fell into the clouds.") return FALSE //Updates machine icon and lighting every time power in the area changes From ad8fd0e402954cf421929af4ef539629a36db9d5 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 17:49:51 -0400 Subject: [PATCH 11/13] Radioing redundancy Makes the Tether warn over common if it's gone offline. Also deletes some unnecessary comments --- hyperstation/code/game/machinery/safety_tether.dm | 9 ++++----- tgstation.dme | 2 -- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index 98156fe02..d80c48fda 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -12,8 +12,7 @@ // create global list of safety tethers in the world to then process //Easy definitions to have the machine talk on the appropriate frequencies. -//#define SPEAK(message) radio.talk_into(src, message, radio_channel) - +#define SPEAKCOMMON(message) radio.talk_into(src, message, null) #define SPEAKMEDICAL(message) radio.talk_into(src, message, RADIO_CHANNEL_MEDICAL) #define SPEAKSCIENCE(message) radio.talk_into(src, message, RADIO_CHANNEL_SCIENCE) @@ -68,7 +67,6 @@ //Defines the center point around which lighting is located var/atom/light_source - //_mask = matrix(1, 0, 32, 0, 1, 32) use_power = IDLE_POWER_USE power_channel = EQUIP @@ -84,8 +82,6 @@ //Give it permission to talk on both medical and science frequencies, as with geneticists var/radio_key = /obj/item/encryptionkey/headset_medsci - //var/radio_channel = RADIO_CHANNEL_MEDICAL - /obj/machinery/safety_tether/Initialize() . = ..() @@ -227,8 +223,10 @@ . = ..() if(light_source) if(stat & NOPOWER) + SPEAKCOMMON("The Safety Tether's shut down from a lack of power.") light_source.set_light(0) else + SPEAKCOMMON("The Safety Tether is back online.") light_source.set_light(brightness_on, light_power, light_color) update_icon() @@ -249,5 +247,6 @@ Should any more information be needed on the tether, please contact your local sector executive."} //#undef SPEAK +#undef SPEAKCOMMON #undef SPEAKMEDICAL #undef SPEAKSCIENCE \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 6236e1025..bfd1708ac 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3199,7 +3199,6 @@ #include "hyperstation\code\modules\food_and_drinks\recipes\drinks_recipes.dm" #include "hyperstation\code\modules\hydroponics\grown\kalyna.dm" #include "hyperstation\code\modules\integrated_electronics\input.dm" -#include "hyperstation\code\modules\jobs\jobs.dm" #include "hyperstation\code\modules\jobs\job_types\_job.dm" #include "hyperstation\code\modules\jobs\job_types\civilian.dm" #include "hyperstation\code\modules\jobs\job_types\job_alt_titles.dm" @@ -3210,7 +3209,6 @@ #include "hyperstation\code\modules\mining\equipment\survival_pod.dm" #include "hyperstation\code\modules\mob\mob_helpers.dm" #include "hyperstation\code\modules\mob\dead\new_player\cosmetic_parts.dm" -#include "hyperstation\code\modules\mob\dead\new_player\roleplay.dm" #include "hyperstation\code\modules\mob\dead\new_player\sprite_accessories.dm" #include "hyperstation\code\modules\mob\living\status_indicators.dm" #include "hyperstation\code\modules\mob\living\carbon\carbon.dm" From 9bb18b499e1dcb8a0001451c29a85008b011a149 Mon Sep 17 00:00:00 2001 From: Dahlular <55758850+Dahlular@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:02:39 -0600 Subject: [PATCH 12/13] Not needed --- Hyperbot/message.txt | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Hyperbot/message.txt diff --git a/Hyperbot/message.txt b/Hyperbot/message.txt deleted file mode 100644 index 2224b9d34..000000000 --- a/Hyperbot/message.txt +++ /dev/null @@ -1,5 +0,0 @@ -!**The Round has ended!**```Round ID: -Round Time: 2 minutes and 23.1 seconds -Total Population: 1``` -**The Crew!** ```Aniyah Lineman -``` From 8b3dbd6b90c05ab19459cd67cee283aea05a19e8 Mon Sep 17 00:00:00 2001 From: Haha26315 Date: Mon, 12 Sep 2022 20:18:50 -0400 Subject: [PATCH 13/13] Minor bugfix Ensures light is properly removed from source tile if Tether is somehow removed or destroyed. Re-enables missing files. --- hyperstation/code/game/machinery/safety_tether.dm | 2 ++ tgstation.dme | 2 ++ 2 files changed, 4 insertions(+) diff --git a/hyperstation/code/game/machinery/safety_tether.dm b/hyperstation/code/game/machinery/safety_tether.dm index d80c48fda..1955d7599 100644 --- a/hyperstation/code/game/machinery/safety_tether.dm +++ b/hyperstation/code/game/machinery/safety_tether.dm @@ -103,11 +103,13 @@ /obj/machinery/safety_tether/Destroy() QDEL_NULL(radio) GLOB.safety_tethers_list -= src + light_source.set_light(0) . = ..() /obj/machinery/safety_tether/doMove(atom/destination) . = ..() //ensures light is properly centered around the tether. Removes lighting system's pixel approximation that breaks it. + light_source.set_light(0) light_source = get_turf(src) return . diff --git a/tgstation.dme b/tgstation.dme index bfd1708ac..6236e1025 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3199,6 +3199,7 @@ #include "hyperstation\code\modules\food_and_drinks\recipes\drinks_recipes.dm" #include "hyperstation\code\modules\hydroponics\grown\kalyna.dm" #include "hyperstation\code\modules\integrated_electronics\input.dm" +#include "hyperstation\code\modules\jobs\jobs.dm" #include "hyperstation\code\modules\jobs\job_types\_job.dm" #include "hyperstation\code\modules\jobs\job_types\civilian.dm" #include "hyperstation\code\modules\jobs\job_types\job_alt_titles.dm" @@ -3209,6 +3210,7 @@ #include "hyperstation\code\modules\mining\equipment\survival_pod.dm" #include "hyperstation\code\modules\mob\mob_helpers.dm" #include "hyperstation\code\modules\mob\dead\new_player\cosmetic_parts.dm" +#include "hyperstation\code\modules\mob\dead\new_player\roleplay.dm" #include "hyperstation\code\modules\mob\dead\new_player\sprite_accessories.dm" #include "hyperstation\code\modules\mob\living\status_indicators.dm" #include "hyperstation\code\modules\mob\living\carbon\carbon.dm"