mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-28 15:06:42 +01:00
Merge remote-tracking branch 'citrp/master' into init_1
This commit is contained in:
@@ -88,15 +88,15 @@
|
||||
dat += "<input type='hidden' name='matrix_paint' value='1'"
|
||||
dat += "<br><br>"
|
||||
dat += MATRIX_FIELD("rr", color_matrix_last[1])
|
||||
dat += MATRIX_FIELD("rg", color_matrix_last[2])
|
||||
dat += MATRIX_FIELD("rb", color_matrix_last[3])
|
||||
dat += "<br><br>"
|
||||
dat += MATRIX_FIELD("gr", color_matrix_last[4])
|
||||
dat += MATRIX_FIELD("gg", color_matrix_last[5])
|
||||
dat += MATRIX_FIELD("gb", color_matrix_last[6])
|
||||
dat += "<br><br>"
|
||||
dat += MATRIX_FIELD("br", color_matrix_last[7])
|
||||
dat += "<br><br>"
|
||||
dat += MATRIX_FIELD("rg", color_matrix_last[2])
|
||||
dat += MATRIX_FIELD("gg", color_matrix_last[5])
|
||||
dat += MATRIX_FIELD("bg", color_matrix_last[8])
|
||||
dat += "<br><br>"
|
||||
dat += MATRIX_FIELD("rb", color_matrix_last[3])
|
||||
dat += MATRIX_FIELD("gb", color_matrix_last[6])
|
||||
dat += MATRIX_FIELD("bb", color_matrix_last[9])
|
||||
dat += "<br><br>"
|
||||
dat += MATRIX_FIELD("cr", color_matrix_last[10])
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
harm_intent_damage = 2
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = list("slashed")
|
||||
melee_damage_upper = 15 // Mild increase to blob damage
|
||||
attacktext = list("smashed", "rammed") // Why would an amorphous blob be slicing stuff?
|
||||
|
||||
aquatic_movement = 1
|
||||
min_oxy = 0
|
||||
@@ -94,7 +94,7 @@
|
||||
/mob/living/simple_mob/protean_blob/updatehealth()
|
||||
if(humanform)
|
||||
//Set the max
|
||||
maxHealth = humanform.getMaxHealth()*2 //HUMANS, and their 'double health', bleh.
|
||||
maxHealth = humanform.getMaxHealth() * 1.6 //As the base humanoid health was increased, the number was changed to make the maxhealth stay at 200
|
||||
//Set us to their health, but, human health ignores robolimbs so we do it 'the hard way'
|
||||
health = maxHealth - humanform.getOxyLoss() - humanform.getToxLoss() - humanform.getCloneLoss() - humanform.getActualFireLoss() - humanform.getActualBruteLoss()
|
||||
|
||||
|
||||
@@ -38,9 +38,10 @@
|
||||
oldlimb.removed()
|
||||
qdel(oldlimb)
|
||||
|
||||
var/mob/living/simple_mob/protean_blob/blob = nano_intoblob()
|
||||
// var/mob/living/simple_mob/protean_blob/blob = nano_intoblob()
|
||||
active_regen = TRUE
|
||||
if(do_after(blob,5 SECONDS))
|
||||
src.visible_message("<B>[src]</B>'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("<B>[src]</B>'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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,"<span class='warning'>You need a loaded mind to use NSay.</span>")
|
||||
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)
|
||||
|
||||
@@ -240,12 +240,6 @@
|
||||
<li class="rscadd">now introducing nanotrasen SMART CHARGE - no longer will expedition ships be shut down by 50 powergamers rolling protean and erping in the rechargers.</li>
|
||||
<li class="tweak">cyborg chargers now waste less power while idle</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">14 December 2020</h2>
|
||||
<h3 class="author">buffyuwu updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">expands vampirism mechanics</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<br><b>Baystation 12 Credit List</b>
|
||||
|
||||
@@ -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"
|
||||
+19
-19
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user