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 b1e073b9d..1b02a0f19 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 56a65ccda..b2facc562 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 24186a7e1..8a5bde34b 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 611f3d366..6b0b2b593 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 c6b96e313..e03427cc9 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 cf224f7c8..6e8056a1c 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 a836ac95d..ab0f75840 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 8450793f8..ac028d5d7 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 50862ee16..752094a30 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 a2fc1f535..e881b2257 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 e881b2257..ff78240c6 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 ff78240c6..6c20175f2 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 6c20175f2..0e15c0b34 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 6b0b2b593..f0e9e65a7 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]