From c05781a5797361049ccd10391784b15a994f5f8a Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 8 Jun 2021 01:06:46 -0300 Subject: [PATCH 1/7] Lotsa runtime fixes --- code/datums/traits/good.dm | 8 ++++---- code/datums/traits/negative.dm | 7 +++++-- code/game/machinery/posi_alert.dm | 2 +- code/game/mecha/mech_fabricator.dm | 2 +- code/modules/modular_computers/hardware/battery_module.dm | 7 +++++-- code/modules/surgery/organs/organ_internal.dm | 4 +++- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index b1e073b9..1b02a0f1 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -300,7 +300,7 @@ /datum/quirk/draconicspeaker/remove() var/mob/living/M = quirk_holder - M.remove_language(/datum/language/draconic) + M?.remove_language(/datum/language/draconic) /datum/quirk/slimespeaker name = "Slime speaker" @@ -316,7 +316,7 @@ /datum/quirk/slimespeaker/remove() var/mob/living/M = quirk_holder - M.remove_language(/datum/language/slime) + M?.remove_language(/datum/language/slime) /datum/quirk/tajaspeaker name = "Siik-Tajr speaker" @@ -332,7 +332,7 @@ /datum/quirk/tajaspeaker/remove() var/mob/living/M = quirk_holder - M.remove_language(/datum/language/tajara) + M?.remove_language(/datum/language/tajara) /datum/quirk/russianspeaker name = "Neo-Russkiya speaker" @@ -348,4 +348,4 @@ /datum/quirk/russianspeaker/remove() var/mob/living/M = quirk_holder - M.remove_language(/datum/language/spacerussian) + M?.remove_language(/datum/language/spacerussian) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 56a65ccd..b2facc56 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -429,8 +429,11 @@ GLOBAL_LIST_EMPTY(family_heirlooms) /datum/quirk/mute/add() var/mob/living/carbon/human/H = quirk_holder mute = new - H.gain_trauma(mute, TRAUMA_RESILIENCE_SURGERY) - H.gain_trauma(TRAIT_MUTE, TRAUMA_RESILIENCE_SURGERY) + H.gain_trauma(mute, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/quirk/mute/remove() + var/mob/living/carbon/human/H = quirk_holder + H?.cure_trauma_type(mute, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/mute/on_process() if(quirk_holder.mind && LAZYLEN(quirk_holder.mind.antag_datums)) diff --git a/code/game/machinery/posi_alert.dm b/code/game/machinery/posi_alert.dm index 24186a7e..8a5bde34 100644 --- a/code/game/machinery/posi_alert.dm +++ b/code/game/machinery/posi_alert.dm @@ -35,7 +35,7 @@ return inuse = TRUE flick("posialertflash",src) - visible_message("There are positronic personalities available!", runechat_popup = TRUE) + visible_message("There are positronic personalities available!") radio.talk_into(src, "There are positronic personalities available!", science_channel) playsound(loc, 'sound/machines/ping.ogg', 50) addtimer(CALLBACK(src, .proc/liftcooldown), 300) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 611f3d36..6b0b2b59 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -116,7 +116,7 @@ var/datum/material/M = mat_id var/amount = materials.materials[mat_id] var/ref = REF(M) - output += "[M.name]: [amount] cm³" + output += "[M]: [amount] cm³" if(amount >= MINERAL_MATERIAL_AMOUNT) output += "- Remove \[1\]" if(amount >= (MINERAL_MATERIAL_AMOUNT * 10)) diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index c6b96e31..e03427cc 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -12,6 +12,10 @@ battery = new battery_type(src) ..() +/obj/item/computer_hardware/battery/Destroy() + . = ..() + QDEL_NULL(battery) + /obj/item/computer_hardware/battery/try_insert(obj/item/I, mob/living/user = null) if(!holder) return FALSE @@ -50,7 +54,6 @@ holder.shutdown_computer() return TRUE - return FALSE @@ -91,4 +94,4 @@ name = "nano battery" desc = "A tiny power cell, commonly seen in low-end portable microcomputers." icon_state = "cell_micro" - maxcharge = 300 \ No newline at end of file + maxcharge = 300 diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index cf224f7c..6e8056a1 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -25,6 +25,7 @@ var/now_fixed var/high_threshold_cleared var/low_threshold_cleared + rad_flags = RAD_NO_CONTAMINATE /obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) if(!iscarbon(M) || owner == M) @@ -134,7 +135,8 @@ ///Damage decrements by a percent of its maxhealth var/healing_amount = -(maxHealth * healing_factor) ///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's health - healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0 + if(owner) + healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0 applyOrganDamage(healing_amount) //to FERMI_TWEAK //Make it so each threshold is stuck. From 89bbf98b8f69d209281540b8702c94beeb481887 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sat, 15 Feb 2020 12:17:02 -0700 Subject: [PATCH 2/7] Bunch more runtimes --- code/datums/components/_component.dm | 2 ++ code/modules/admin/verbs/debug.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 15 ++++++--------- hyperstation/code/obj/fleshlight.dm | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index a836ac95..ab0f7584 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -123,6 +123,8 @@ signal_enabled = TRUE /datum/proc/UnregisterSignal(datum/target, sig_type_or_types) + if(!target) + CRASH("[src] tried to unregister a signal without having a target.") var/list/lookup = target.comp_lookup if(!signal_procs || !signal_procs[target] || !lookup) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 8450793f..ac028d5d 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -487,7 +487,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) if(alert("This mob is being controlled by [M.key]. Are you sure you wish to assume control of it? [M.key] will be made a ghost.",,"Yes","No") != "Yes") return else - var/mob/dead/observer/ghost = new/mob/dead/observer(M,1) + var/mob/dead/observer/ghost = new/mob/dead/observer(get_turf(M), M) ghost.ckey = M.ckey message_admins("[key_name_admin(usr)] assumed direct control of [M].") log_admin("[key_name(usr)] assumed direct control of [M].") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 50862ee1..752094a3 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -56,7 +56,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/deadchat_name var/datum/spawners_menu/spawners_menu -/mob/dead/observer/Initialize() +/mob/dead/observer/Initialize(mapload, mob/body) set_invisibility(GLOB.observer_default_invisibility) add_verb(src, list( @@ -77,11 +77,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) updateallghostimages() - var/turf/T - var/mob/body = loc - if(ismob(body)) - T = get_turf(body) //Where is the body located? - + if(body) gender = body.gender if(body.mind && body.mind.name) name = body.mind.name @@ -106,14 +102,15 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) update_icon() - if(!T) + if(!isturf(loc)) + var/turf/T var/list/turfs = get_area_turfs(/area/shuttle/arrival) if(turfs.len) T = pick(turfs) else T = SSmapping.get_station_center() - forceMove(T) + forceMove(T) if(!name) //To prevent nameless ghosts name = random_unique_name(gender) @@ -268,7 +265,7 @@ Works together with spawning an observer, noted above. if(!key || key[1] == "@" || (SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse, special, penalize) & COMPONENT_BLOCK_GHOSTING)) return //mob has no key, is an aghost or some component hijacked. stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now - var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc. + var/mob/dead/observer/ghost = new(get_turf(src), src) // Transfer safety to observer spawning proc. SStgui.on_transfer(src, ghost) // Transfer NanoUIs. ghost.can_reenter_corpse = can_reenter_corpse if (client && client.prefs && client.prefs.auto_ooc) diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm index a2fc1f53..e881b225 100644 --- a/hyperstation/code/obj/fleshlight.dm +++ b/hyperstation/code/obj/fleshlight.dm @@ -118,7 +118,7 @@ option = "Fuck" var/obj/item/organ/genital/vagina/V = portalunderwear.loc - if(!V) + if(!V || !iscarbon(V)) return var/mob/living/carbon/human/M = V.owner @@ -298,4 +298,4 @@ /obj/item/paper/fluff/portallight name = "Portal Fleshlight Instructions" - info = "Thank you for purchasing the Silver Love Portal Fleshlight!
To use, simply register your new portal fleshlight with the provided underwear to link them together. The ask your lover to wear the underwear.
Have fun lovers,

Wilhelmina Steiner." \ No newline at end of file + info = "Thank you for purchasing the Silver Love Portal Fleshlight!
To use, simply register your new portal fleshlight with the provided underwear to link them together. The ask your lover to wear the underwear.
Have fun lovers,

Wilhelmina Steiner." From 66eb19c5b10f42eaff1ca6601ce8ec624de40184 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 8 Jun 2021 06:26:33 -0300 Subject: [PATCH 3/7] More. --- hyperstation/code/obj/fleshlight.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm index e881b225..ff78240c 100644 --- a/hyperstation/code/obj/fleshlight.dm +++ b/hyperstation/code/obj/fleshlight.dm @@ -118,7 +118,7 @@ option = "Fuck" var/obj/item/organ/genital/vagina/V = portalunderwear.loc - if(!V || !iscarbon(V)) + if(!V || !ishuman(V)) return var/mob/living/carbon/human/M = V.owner @@ -180,6 +180,9 @@ cut_overlays()//remove current overlays var/obj/item/organ/genital/vagina/V = portalunderwear.loc + if(!V || !ishuman(V)) + useable = FALSE + return var/mob/living/carbon/human/H = V.owner if(H) //if the portal panties are on someone. From 0cc3fb6f5a97ddaae29f43e0d4ebd33ab8be4c76 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 8 Jun 2021 06:31:26 -0300 Subject: [PATCH 4/7] Whoops. --- hyperstation/code/obj/fleshlight.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm index ff78240c..6c20175f 100644 --- a/hyperstation/code/obj/fleshlight.dm +++ b/hyperstation/code/obj/fleshlight.dm @@ -118,7 +118,7 @@ option = "Fuck" var/obj/item/organ/genital/vagina/V = portalunderwear.loc - if(!V || !ishuman(V)) + if(!V || !iscarbon(portalunderwear.loc)) return var/mob/living/carbon/human/M = V.owner @@ -180,7 +180,7 @@ cut_overlays()//remove current overlays var/obj/item/organ/genital/vagina/V = portalunderwear.loc - if(!V || !ishuman(V)) + if(!V || !iscarbon(portalunderwear.loc)) useable = FALSE return var/mob/living/carbon/human/H = V.owner From 865f01650ce5131fa25e3461d0191f0f1f841e32 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 8 Jun 2021 06:54:12 -0300 Subject: [PATCH 5/7] This should fix it --- hyperstation/code/obj/fleshlight.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm index 6c20175f..0e15c0b3 100644 --- a/hyperstation/code/obj/fleshlight.dm +++ b/hyperstation/code/obj/fleshlight.dm @@ -117,8 +117,10 @@ else option = "Fuck" - var/obj/item/organ/genital/vagina/V = portalunderwear.loc - if(!V || !iscarbon(portalunderwear.loc)) + var/obj/item/organ/genital/vagina/V + if(istype(portalunderwear.loc, /obj/item/organ/genital/vagina)) //Sanity check. Without this it will runtime. + V = portalunderwear.loc + if(!V) return var/mob/living/carbon/human/M = V.owner @@ -179,8 +181,10 @@ //get their looks and vagina colour! cut_overlays()//remove current overlays - var/obj/item/organ/genital/vagina/V = portalunderwear.loc - if(!V || !iscarbon(portalunderwear.loc)) + var/obj/item/organ/genital/vagina/V + if(istype(portalunderwear.loc, /obj/item/organ/genital/vagina)) //Sanity check. Without this it will runtime. + V = portalunderwear.loc + if(!V) useable = FALSE return var/mob/living/carbon/human/H = V.owner From 8d0d83ef705f84f8b6311a2a4b593d876f627d31 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 8 Jun 2021 07:17:51 -0300 Subject: [PATCH 6/7] Revert --- code/game/mecha/mech_fabricator.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 6b0b2b59..f0e9e65a 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -116,7 +116,7 @@ var/datum/material/M = mat_id var/amount = materials.materials[mat_id] var/ref = REF(M) - output += "[M]: [amount] cm³" + output += "[M.name]: [amount] cm³" if(amount >= MINERAL_MATERIAL_AMOUNT) output += "- Remove \[1\]" if(amount >= (MINERAL_MATERIAL_AMOUNT * 10)) @@ -290,8 +290,9 @@ left_part += output_parts_list(part_set) left_part += "
Return" dat = {" - - [name] + + + [name]