diff --git a/code/game/machinery/painter_vr.dm b/code/game/machinery/painter_vr.dm index 21782fce4fc..0033474e6e5 100644 --- a/code/game/machinery/painter_vr.dm +++ b/code/game/machinery/painter_vr.dm @@ -88,15 +88,15 @@ dat += "[src]'s flesh begins to bubble, growing oily tendrils from their limb stump...") // Gives a visualization for regenerating limbs. + if(do_after(src,5 SECONDS)) // Makes you not need to blob to regen a single limb. I'm keeping the full-body regen as blob-only, though var/list/limblist = species.has_limbs[choice] var/limbpath = limblist["path"] var/obj/item/organ/external/new_eo = new limbpath(src) @@ -48,7 +49,8 @@ new_eo.robotize(synthetic ? synthetic.company : null) //Use the base we started with regenerate_icons() active_regen = FALSE - nano_outofblob(blob) + visible_message("[src]'s tendrils solidify into a [choice].") + // nano_outofblob(blob) No longer needed as we're not going to blob return //Organ exists, let's reshape it diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_species.dm index aa5967501ff..8d6783fb486 100755 --- a/code/modules/mob/living/carbon/human/species/station/protean/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_species.dm @@ -10,6 +10,8 @@ death_message = "rapidly loses cohesion, dissolving into a cloud of gray dust..." knockout_message = "collapses inwards, forming a disordered puddle of gray goo." remains_type = /obj/effect/decal/cleanable/ash + + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite) // Finally gives them unarmed attacks, along with claws, because what's stopping them from forming a set from their nanite gloop? blood_color = "#505050" //This is the same as the 80,80,80 below, but in hex flesh_color = "#505050" @@ -19,9 +21,12 @@ appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | HAS_UNDERWEAR | HAS_LIPS spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE health_hud_intensity = 2 - num_alternate_languages = 3 + num_alternate_languages = 5 // They're hyper-advanced blobs, so they should be able to know more than 4 languages. I think 6 is enough for now. assisted_langs = list(LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) color_mult = TRUE + + item_slowdown_mod = 0.25 // The weight of various items shouldn't bother them too much. I'd make it 0, but the general bulk still slows them down. + darksight = 7 // I have no eyes, but I still see. Just makes them have the major darksight trait breath_type = null poison_type = null @@ -30,30 +35,39 @@ blood_volume = 0 min_age = 18 max_age = 200 + + total_health = 125 // Makes them Unathi level tough. Nothing too much, also mildly justified as proteans can't ever go into crit, as they blob instead brute_mod = 0.30 // 70% brute reduction - burn_mod = 1.4 //60% burn weakness + burn_mod = 1.3 //30% burn weakness. This, combined with the increased total health makes them able to survive more than 1 laser shot before being blobbed. The cap's still 2 shots, though -- The previous value of 1.4 was 40% weakness, not 60% oxy_mod = 0 radiation_mod = 0 // Their blobforms have rad immunity, so it only makes sense that their humanoid forms do too + toxins_mod = 0 // This is necessary to make them not instantly die to ions/low yield EMPs, also it makes sense as the refactory would reset or repurpose corrupted nanites + + hunger_factor = 0.3 // Better power storage, perhaps? This is not additive. Whoops /* These values assume all limbs are hit by the damage. To get individual limb damages divide by 11. -A worst-case sev 4 emp will do 88 damage pre-mitigation, and 140.8 post-mitigation (as resist is negative) spread out over all the limbs. -A best case sev 4 emp will do 55 pre-mitigation damage. This is 88 damage. -A worst case sev 3 emp will do 66 pre-mitigation damage. This is 105.6 damage. -A best case sev 3 emp will do 44 pre-mitigation damage. This is 70.4 damage. -A worst case sev 2 emp will do 55 pre-mitigation damage. This is 88 damage. -A best case sev 2 emp will do 22 pre-mitigation damage. This is 35.2 damage. -A worst case sev 1 emp will do 33 pre-mitigation damage.This is 52.8 damage. -A best case sev 1 emp will do 11 pre-mitigation damage. This is 17.6 damage. +A worst-case sev 4 emp will do 88 damage pre-mitigation, and 114.4 post-mitigation (as resist is negative) spread out over all the limbs. +A best case sev 4 emp will do 55 pre-mitigation damage. This is 71.5 damage. +A worst case sev 3 emp will do 66 pre-mitigation damage. This is 85.8 damage. +A best case sev 3 emp will do 44 pre-mitigation damage. This is 57.2 damage. +A worst case sev 2 emp will do 55 pre-mitigation damage. This is 71.5 damage. +A best case sev 2 emp will do 22 pre-mitigation damage. This is 28.6 damage. +A worst case sev 1 emp will do 33 pre-mitigation damage.This is 42.9 damage. +A best case sev 1 emp will do 11 pre-mitigation damage. This is 14.3 damage. + +I redid the calculations, as the burn weakness has been changed. This should be good. Hopefully */ - cold_level_1 = 280 //Default 260 - Lower is better +/* cold_level_1 = 280 //Default 260 - Lower is better cold_level_2 = 220 //Default 200 cold_level_3 = 130 //Default 120 heat_level_1 = 320 //Default 360 heat_level_2 = 370 //Default 400 heat_level_3 = 600 //Default 1000 - + + As the heat/cold levels are listed below, these aren't really necessary +*/ //Space doesn't bother them hazard_low_pressure = -1 hazard_high_pressure = INFINITY //Totally pressure immune - in human form (blobform is also completely pressure/heat immune, bringing them both in line with each other.) @@ -196,7 +210,7 @@ A best case sev 1 emp will do 11 pre-mitigation damage. This is 17.6 damage. H.gib() /datum/species/protean/handle_environment_special(var/mob/living/carbon/human/H) - if((H.getActualBruteLoss() + H.getActualFireLoss()) > H.maxHealth*0.35 && isturf(H.loc)) //So, only if we're not a blob (we're in nullspace) or in someone (or a locker, really, but whatever). The decimal point (0.35 as of now) is the autoblob %hp threshold. + if((H.getActualBruteLoss() + H.getActualFireLoss()) > H.maxHealth*0.8 && isturf(H.loc)) //So, only if we're not a blob (we're in nullspace) or in someone (or a locker, really, but whatever). The decimal point (0.8 as of now) is the autoblob %hp threshold. Right, quick maths lesson: making the autoblob threshold 35% does not mean that proteans will blob at 35% health. It means that they'll blob at 65% health, because it's checking if the total damage is higher than the threshold. I've made it that they blob at 20% health now, so they don't instantly blob to everything. H.nano_intoblob() return ..() //Any instakill shot runtimes since there are no organs after this. No point to not skip these checks, going to nullspace anyway. @@ -329,9 +343,9 @@ A best case sev 1 emp will do 11 pre-mitigation damage. This is 17.6 damage. /datum/modifier/protean/steel/tick() ..() - holder.adjustBruteLoss(-9 ,include_robo = TRUE) //Looks high, but these are modified by species resistances to equal out at 3hp/sec. - holder.adjustFireLoss(-2.14,include_robo = TRUE) //Looks high, but these are modified by species resistances to equal out at 3hp/sec. - holder.adjustToxLoss(-3) + holder.adjustBruteLoss(-10 ,include_robo = TRUE) //Looks high, but these are modified by species resistances to equal out at 3hp/sec. Previous value was 9, which didn't equal out to 3 per second + holder.adjustFireLoss(-2.3 ,include_robo = TRUE) //Looks high, but these are modified by species resistances to equal out at 3hp/sec. Bit of an adjustment with the updated burn resist + holder.adjustToxLoss(-12) // With them now having tox immunity, this is redundant, along with the rad regen, but I'm keeping it in, in case they do somehow get some system instability holder.radiation = max(holder.radiation - 30, 0) // I'm keeping this in and increasing it, just in the off chance the protean gets some rads, so that there's way to get rid of them diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 0b6124f46df..3ff585d7b51 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -98,9 +98,7 @@ GLOBAL_LIST_INIT(nif_id_lookup, init_nif_id_lookup()) qdel(src) return FALSE else - //Free commlink and soulcatcher for return customers - new /datum/nifsoft/commlink(src) - new /datum/nifsoft/soulcatcher(src) + addtimer(CALLBACK(src, .proc/install_free_return_software), 0) //Free civilian AR included new /datum/nifsoft/ar_civ(src) @@ -113,6 +111,12 @@ GLOBAL_LIST_INIT(nif_id_lookup, init_nif_id_lookup()) //Draw me yo. update_icon() +// Creates software after the mob is hopefully loaded in +/obj/item/nif/proc/install_free_return_software() + //Free commlink and soulcatcher for return customers + new /datum/nifsoft/commlink(src) + new /datum/nifsoft/soulcatcher(src) + //Destructor cleans up references /obj/item/nif/Destroy() human = null diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 1fc6952739f..80d592fd779 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -518,7 +518,7 @@ /////////////////// //Verbs for humans -/mob/living/carbon/human/proc/nsay(message as text|null) +/mob/living/carbon/human/proc/nsay(message as text) set name = "NSay" set desc = "Speak into your NIF's Soulcatcher." set category = "IC" @@ -534,12 +534,12 @@ to_chat(src,"You need a loaded mind to use NSay.") return if(!message) - message = input("Type a message to say.","Speak into Soulcatcher") as text|null + return if(message) var/sane_message = sanitize(message) SC.say_into(sane_message,src) -/mob/living/carbon/human/proc/nme(message as text|null) +/mob/living/carbon/human/proc/nme(message as message) set name = "NMe" set desc = "Emote into your NIF's Soulcatcher." set category = "IC" @@ -556,7 +556,7 @@ return if(!message) - message = input("Type an action to perform.","Emote into Soulcatcher") as text|null + return if(message) var/sane_message = sanitize(message) SC.emote_into(sane_message,src) diff --git a/html/changelog.html b/html/changelog.html index 4a8b6e0ffdf..68abfd0cc71 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -240,12 +240,6 @@
  • now introducing nanotrasen SMART CHARGE - no longer will expedition ships be shut down by 50 powergamers rolling protean and erping in the rechargers.
  • cyborg chargers now waste less power while idle
  • - -

    14 December 2020

    -

    buffyuwu updated:

    -
    Baystation 12 Credit List diff --git a/html/changelogs/AutoChangeLog-pr-2700.yml b/html/changelogs/AutoChangeLog-pr-2700.yml new file mode 100644 index 00000000000..394006eadf3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2700.yml @@ -0,0 +1,8 @@ +author: "Ghostcoffeee" +delete-after: True +changes: + - rscadd: "Added Protean unarmed verbs" + - rscadd: "Added Protean blob resistances/weaknesses" + - tweak: "Made Proteans not need to blob to reform single limbs" + - balance: "Made Proteans not die instantly to ions, and not blob instantly to lasers" + - tweak: "Other tweaks, that in my mind make sense for the hyper-advanced nanoblobs" diff --git a/vorestation.dme b/vorestation.dme index 9f28024a1a8..078de68f0c7 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1065,6 +1065,25 @@ #include "code\game\objects\items\stacks\sheets\leather.dm" #include "code\game\objects\items\stacks\tiles\fifty_spawner_tiles.dm" #include "code\game\objects\items\stacks\tiles\tile_types.dm" +#include "code\game\objects\items\storage\_storage.dm" +#include "code\game\objects\items\storage\backpack.dm" +#include "code\game\objects\items\storage\bags.dm" +#include "code\game\objects\items\storage\belt.dm" +#include "code\game\objects\items\storage\bible.dm" +#include "code\game\objects\items\storage\boxes.dm" +#include "code\game\objects\items\storage\briefcase.dm" +#include "code\game\objects\items\storage\fancy.dm" +#include "code\game\objects\items\storage\firstaid.dm" +#include "code\game\objects\items\storage\internal.dm" +#include "code\game\objects\items\storage\laundry_basket.dm" +#include "code\game\objects\items\storage\lockbox.dm" +#include "code\game\objects\items\storage\misc.dm" +#include "code\game\objects\items\storage\mre.dm" +#include "code\game\objects\items\storage\quickdraw.dm" +#include "code\game\objects\items\storage\secure.dm" +#include "code\game\objects\items\storage\toolbox.dm" +#include "code\game\objects\items\storage\uplink_kits.dm" +#include "code\game\objects\items\storage\wallets.dm" #include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\autopsy.dm" #include "code\game\objects\items\weapons\barrier_tape.dm" @@ -1187,25 +1206,6 @@ #include "code\game\objects\items\weapons\melee\energy_vr.dm" #include "code\game\objects\items\weapons\melee\melee.dm" #include "code\game\objects\items\weapons\melee\misc.dm" -#include "code\game\objects\items\weapons\storage\_storage.dm" -#include "code\game\objects\items\weapons\storage\backpack.dm" -#include "code\game\objects\items\weapons\storage\bags.dm" -#include "code\game\objects\items\weapons\storage\belt.dm" -#include "code\game\objects\items\weapons\storage\bible.dm" -#include "code\game\objects\items\weapons\storage\boxes.dm" -#include "code\game\objects\items\weapons\storage\briefcase.dm" -#include "code\game\objects\items\weapons\storage\fancy.dm" -#include "code\game\objects\items\weapons\storage\firstaid.dm" -#include "code\game\objects\items\weapons\storage\internal.dm" -#include "code\game\objects\items\weapons\storage\laundry_basket.dm" -#include "code\game\objects\items\weapons\storage\lockbox.dm" -#include "code\game\objects\items\weapons\storage\misc.dm" -#include "code\game\objects\items\weapons\storage\mre.dm" -#include "code\game\objects\items\weapons\storage\quickdraw.dm" -#include "code\game\objects\items\weapons\storage\secure.dm" -#include "code\game\objects\items\weapons\storage\toolbox.dm" -#include "code\game\objects\items\weapons\storage\uplink_kits.dm" -#include "code\game\objects\items\weapons\storage\wallets.dm" #include "code\game\objects\items\weapons\tanks\jetpack.dm" #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tank_types_vr.dm"