Merge branch 'master' into upstream-merge-12191

This commit is contained in:
Razgriz
2022-02-13 01:18:29 -07:00
committed by GitHub
19 changed files with 202 additions and 38 deletions
@@ -115,6 +115,66 @@
original_size = null
H.visible_message("<span class='warning'>The space around [H] distorts as they return to their original size!</span>","<span class='notice'>The space around you distorts as you return to your original size!</span>")
/obj/item/clothing/gloves/bluespace
name = "size standardization bracelet"
desc = "A somewhat bulky metal bracelet featuring a crystal, glowing blue. The outer side of the bracelet has an elongated case that one might imagine contains electronic components. This bracelet is used to standardize the size of crewmembers who may need a non-permanent size assist."
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_state = "bs_bracelet"
w_class = ITEMSIZE_TINY
glove_level = 1
var/original_size
var/last_activated
var/emagged = FALSE
var/target_size = 1
/obj/item/clothing/gloves/bluespace/mob_can_equip(mob/M, gloves, disable_warning = 0)
. = ..()
if(. && ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.resizable)
return
if(H.size_multiplier != target_size)
if(!(world.time - last_activated > 10 SECONDS))
to_chat(M, "<span class ='warning'>\The [src] flickers. It seems to be recharging.</span>")
return
last_activated = world.time
original_size = H.size_multiplier
H.resize(target_size, uncapped = emagged, ignore_prefs = FALSE) //In case someone else tries to put it on you.
H.visible_message("<span class='warning'>The space around [H] distorts as they change size!</span>","<span class='notice'>The space around you distorts as you change size!</span>")
log_admin("Admin [key_name(M)]'s size was altered by a bluespace bracelet.")
/obj/item/clothing/gloves/bluespace/mob_can_unequip(mob/M, gloves, disable_warning = 0)
. = ..()
if(. && ishuman(M) && original_size)
var/mob/living/carbon/human/H = M
if(!H.resizable)
return
last_activated = world.time
H.resize(original_size, uncapped = emagged, ignore_prefs = FALSE)
original_size = null
H.visible_message("<span class='warning'>The space around [H] distorts as they return to their original size!</span>","<span class='notice'>The space around you distorts as you return to your original size!</span>")
log_admin("Admin [key_name(M)]'s size was altered by a bluespace bracelet.")
to_chat(M, "<span class ='warning'>\The [src] flickers. It is now recharging and will be ready again in thirty seconds.</span>")
/obj/item/clothing/gloves/bluespace/examine(var/mob/user)
. = ..()
var/cooldowntime = round((10 SECONDS - (world.time - last_activated)) * 0.1)
if(Adjacent(user))
if(cooldowntime >= 0)
. += "<span class='notice'>It appears to be recharging.</span>"
if(emagged)
. += "<span class='warning'>The crystal is flickering.</span>"
/obj/item/clothing/gloves/bluespace/emag_act(R_charges, var/mob/user, emag_source)
. = ..()
if(!emagged)
emagged = TRUE
target_size = (rand(1,300)) /100
if(target_size < 0.1)
target_size = 0.1
user.visible_message("<span class='notice'>\The [user] swipes the [emag_source] over the \the [src].</span>","<span class='notice'>You swipes the [emag_source] over the \the [src].</span>")
return 1
//Same as Nanotrasen Security Uniforms
/obj/item/clothing/under/ert
armor = list(melee = 5, bullet = 10, laser = 10, energy = 5, bomb = 5, bio = 0, rad = 0)
+4 -2
View File
@@ -1068,7 +1068,8 @@
/obj/item/device/walkpod = 5,
/obj/item/device/juke_remote = 1,
/obj/item/instrument/piano_synth/headphones = 2, // You're making a subsystem do work, I don't want it TOO busy
/obj/item/instrument/piano_synth/headphones/spacepods = 2)
/obj/item/instrument/piano_synth/headphones/spacepods = 2,
/obj/item/clothing/gloves/bluespace = 5)
prices = list(/obj/item/clothing/suit/circuitry = 100,
/obj/item/clothing/head/circuitry = 100,
/obj/item/clothing/shoes/circuitry = 100,
@@ -1092,7 +1093,8 @@
/obj/item/device/walkpod = 300,
/obj/item/device/juke_remote = 1000,
/obj/item/instrument/piano_synth/headphones = 200,
/obj/item/instrument/piano_synth/headphones/spacepods = 600)
/obj/item/instrument/piano_synth/headphones/spacepods = 600,
/obj/item/clothing/gloves/bluespace = 500)
premium = list(/obj/item/device/perfect_tele/one_beacon = 1)
contraband = list(/obj/item/weapon/disk/nifsoft/compliance = 1)
@@ -302,6 +302,32 @@
halloss = 0
else
..()
/mob/living/carbon/human/Stun(var/amount)
if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too!
amount = amount*species.stun_mod
..(amount)
/mob/living/carbon/human/SetStunned(var/amount)
..()
/mob/living/carbon/human/AdjustStunned(var/amount)
if(amount > 0) // Only multiply it if positive.
amount = amount*species.stun_mod
..(amount)
/mob/living/carbon/human/Weaken(var/amount)
if(amount > 0) //only multiply it by the mod if it's positive, or else it takes longer to fade too!
amount = amount*species.weaken_mod
..(amount)
/mob/living/carbon/human/SetWeakened(var/amount)
..()
/mob/living/carbon/human/AdjustWeakened(var/amount)
if(amount > 0) // Only multiply it if positive.
amount = amount*species.weaken_mod
..(amount)
/mob/living/carbon/human/getToxLoss()
if(species.flags & NO_POISON)
@@ -109,6 +109,9 @@
var/chemOD_mod = 1 // Damage modifier for overdose; higher = more damage from ODs
var/alcohol_mod = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc.
var/pain_mod = 1 // Multiplier to pain effects; 0.5 = half, 0 = no effect (equal to NO_PAIN, really), 2 = double, etc.
var/stun_mod = 1 // Multiplier to stun effects; 0.5 = half, - = no effect (immune), 2 = double, etc.
var/weaken_mod = 1 // Multiplier to weakness effects; 0.5 = half, - = no effect (immune), 2 = double, etc.
// Stuns + Weakens will be rounded to the nearest whole #. If you set 0.5 mod, on a base stun of 3, the return will be 1.5, which rounds to 1. Be careful.
var/spice_mod = 1 // Multiplier to spice/capsaicin/frostoil effects; 0.5 = half, 0 = no effect (immunity), 2 = double, etc.
var/trauma_mod = 1 // Affects traumatic shock (how fast pain crit happens). 0 = no effect (immunity to pain crit), 2 = double etc.Overriden by "can_feel_pain" var
// set below is EMP interactivity for nonsynth carbons
@@ -103,14 +103,14 @@
/datum/trait/negative/pain_intolerance_basic
name = "Pain Intolerant"
desc = "You are frail and sensitive to pain. You experience 25% more pain from all sources."
cost = -1
var_changes = list("pain_mod" = 1.25)
cost = -2
var_changes = list("pain_mod" = 1.2) // CHOMPEdit: Makes this exact opposite of Pain Tolerance Basic.
/datum/trait/negative/pain_intolerance_advanced
name = "High Pain Intolerance"
desc = "You are highly sensitive to all sources of pain, and experience 50% more pain."
cost = -2
var_changes = list("pain_mod" = 1.5) //this makes you extremely vulnerable to most sources of pain, a stunbaton bop or shotgun beanbag will do around 90 agony, almost enough to drop you in one hit
cost = -3
var_changes = list("pain_mod" = 1.5) //this makes you extremely vulnerable to most sources of pain, a stunbaton bop or shotgun beanbag will do around 90 agony, almost enough to drop you in one hit. CHOMPEdit: This really should cost more if it's this bad.
//YW ADDITIONS END
/datum/trait/negative/conductive
@@ -40,3 +40,27 @@
cost = 0
var_changes = list("metabolic_rate" = 2, "hunger_factor" = 1.6, "metabolism" = 0.012) //2x metabolism speed, 32x hunger speed
custom_only = FALSE
/datum/trait/neutral/big_mouth
name = "Big mouth"
desc = "It takes half as many bites to finish food as it does for most people."
cost = 0
var_changes = list("bite_mod" = 2)
custom_only = FALSE
/datum/trait/neutral/big_mouth_extreme
name = "Giant mouth"
desc = "It takes a quarter as many bites to finish food as it does for most people."
cost = 0
var_changes = list("bite_mod" = 4)
custom_only = FALSE
/datum/trait/neutral/stubborn
name = "Stubborn"
desc = "You are harder to move out of the way due to your sturdiness, frame, or just sheer stubbornness, and neither players nor mobs can trade places with you or bump you out of the way."
cost = 0
custom_only = FALSE
/datum/trait/neutral/stubborn/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.mob_bump_flag = HEAVY
@@ -78,12 +78,13 @@
/datum/trait/positive/heavyweight
name = "Heavyweight"
desc = "You are more heavyweight or otherwise more sturdy than most species, and as such, it's much more difficult to move you."
desc = "You are more heavyweight or otherwise more sturdy than most species, and as such, more resistant to knockdown effects and stuns. Stuns are only half as effective on you."
cost = 2
var_changes = list("stun_mod" = 0.75, "weaken_mod" = 0.75) // Stuns are 75% as effective - a stun of 3 seconds will be 2 seconds after rounding. Set to 0.75 to make a 3 second stun 2 seconds.(Weaken is used alongside stun to prevent aiming.)
/datum/trait/positive/heavyweight/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.mob_bump_flag = HEAVY
H.mob_size = MOB_LARGE
/datum/trait/positive/table_passer
name = "Table passer"
@@ -94,25 +95,12 @@
..()
H.pass_flags = PASSTABLE
/datum/trait/positive/big_mouth
name = "Big mouth"
desc = "It takes half as many bites to finish food as it does for most people."
cost = 0 //This doesn't deserve a cost.
var_changes = list("bite_mod" = 2)
/datum/trait/positive/grappling_expert
name = "Grappling expert"
desc = "Your grabs are much harder to escape from, and you are better at escaping from other's grabs!"
cost = 3
var_changes = list("grab_resist_divisor_victims" = 1.5, "grab_resist_divisor_self" = 0.5, "grab_power_victims" = -1, "grab_power_self" = 1)
/datum/trait/positive/big_mouth_extreme
name = "Giant mouth"
desc = "It takes a quarter as many bites to finish food as it does for most people."
cost = 0 //This also doesn't deserve a cost.
var_changes = list("bite_mod" = 4)
/datum/trait/positive/absorbent
name = "Absorbent"
desc = "You are able to clean messes just by walking over them, and gain nutrition from doing so!"
@@ -36,3 +36,5 @@
L.throw_at(get_edge_target_turf(L, throw_dir), throw_dist, 1, src)
else
to_chat(L, span("warning", "\The [src] punches you with incredible force, but you remain in place."))
visible_message(span("danger", "\The [src] slams it's mechanized fist into \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Mechpunch visible/audible feedback for *resisting* the punch.
playsound(src, "punch", 50, 1) // CHOMPEdit: Mechpunch visible/audible feedback for *resisting* the punch.
@@ -417,6 +417,8 @@
L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
else
to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place."))
visible_message(span("danger", "\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
/mob/living/simple_mob/slime/xenobio/amber
+2
View File
@@ -75,6 +75,8 @@
skin_danger = 0.4
/datum/reagent/toxin/neurotoxic_protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_CHIMERA)
return
..()
if(alien != IS_DIONA)
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
@@ -24,4 +24,31 @@
id = "scarab_targ"
req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
build_path = /obj/item/weapon/circuitboard/mecha/scarab/targeting
sort_string = "SAAAC"
sort_string = "SAAAC"
/datum/design/circuit/mecha/phazon_main
name = "'Phazon' central control"
id = "phazon_main"
req_tech = list(TECH_BLUESPACE = 5, TECH_MAGNET = 6, TECH_PHORON = 3, TECH_ARCANE = 1)
materials = list(MAT_GLASS = 2000, MAT_GRAPHITE = 1250)
chemicals = list("sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/main
sort_string = "PAADA"
/datum/design/circuit/mecha/phazon_peri
name = "'Phazon' peripherals control"
id = "phazon_peri"
req_tech = list(TECH_BLUESPACE = 5, TECH_MAGNET = 6, TECH_PHORON = 3, TECH_ARCANE = 1)
materials = list(MAT_GLASS = 2000, MAT_GRAPHITE = 1250)
chemicals = list("sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals
sort_string = "PAADB"
/datum/design/circuit/mecha/phazon_targ
name = "'Phazon' weapon control and targeting"
id = "phazon_targ"
req_tech = list(TECH_BLUESPACE = 5, TECH_MAGNET = 6, TECH_PHORON = 3, TECH_ARCANE = 1, TECH_COMBAT = 5)
materials = list(MAT_GLASS = 2000, MAT_GRAPHITE = 1250)
chemicals = list("sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting
sort_string = "PAADC"
+5 -4
View File
@@ -96,16 +96,17 @@
build_path = /obj/item/mecha_parts/part/phazon_right_arm
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 15000, MAT_PHORON = 2000, MAT_GOLD = 2000, MAT_VERDANTIUM = 500)
/datum/design/item/mechfab/phazon/left_leg
name = "Phazon Left Legs"
id = "phazon_left_legs"
name = "Phazon Left Leg"
id = "phazon_left_leg"
build_path = /obj/item/mecha_parts/part/phazon_left_leg
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 15000, MAT_PHORON = 2000, MAT_GOLD = 2000, MAT_VERDANTIUM = 500)
/datum/design/item/mechfab/phazon/right_leg
name = "Phazon Right Legs"
id = "phazon_right_legs"
name = "Phazon Right Leg"
id = "phazon_right_leg"
build_path = /obj/item/mecha_parts/part/phazon_right_leg
time = 20
materials = list(DEFAULT_WALL_MATERIAL = 15000, MAT_PHORON = 2000, MAT_GOLD = 2000, MAT_VERDANTIUM = 500)
+19 -3
View File
@@ -294,10 +294,21 @@
if(isliving(thing))
var/mob/living/M = thing
M.updateVRPanel()
var/raw_desc //Let's use this to avoid needing to write the reformat code twice
if(absorbed_desc && M.absorbed)
to_chat(M, "<span class='notice'><B>[absorbed_desc]</B></span>")
raw_desc = absorbed_desc
else if(desc)
to_chat(M, "<span class='notice'><B>[desc]</B></span>")
raw_desc = desc
//Was there a description text? If so, it's time to format it!
if(raw_desc)
//Replace placeholder vars
var/formatted_desc
formatted_desc = replacetext(raw_desc, "%belly", lowertext(name)) //replace with this belly's name
formatted_desc = replacetext(formatted_desc, "%pred", owner) //replace with this belly's owner
formatted_desc = replacetext(formatted_desc, "%prey", M) //replace with whatever mob entered into this belly
to_chat(M, "<span class='notice'><B>[formatted_desc]</B></span>")
var/taste
if(can_taste && (taste = M.get_taste_message(FALSE)))
to_chat(owner, "<span class='notice'>[M] tastes of [taste].</span>")
@@ -758,7 +769,12 @@
if(absorbed_desc)
to_chat(M, "<span class='notice'><B>[absorbed_desc]</B></span>")
//Replace placeholder vars
var/formatted_abs_desc
formatted_abs_desc = replacetext(absorbed_desc, "%belly", lowertext(name)) //replace with this belly's name
formatted_abs_desc = replacetext(formatted_abs_desc, "%pred", owner) //replace with this belly's owner
formatted_abs_desc = replacetext(formatted_abs_desc, "%prey", M) //replace with whatever mob entered into this belly
to_chat(M, "<span class='notice'><B>[formatted_abs_desc]</B></span>")
//Update owner
owner.updateVRPanel()
+11 -2
View File
@@ -118,6 +118,15 @@
else if(inside_belly.desc)
inside_desc = inside_belly.desc
//I'd rather not copy-paste this code twice into the previous if-statement
//Technically we could just format the text anyway, but IDK how demanding unnecessary text-replacements are
if((host.absorbed && inside_belly.absorbed_desc) || (inside_belly.desc))
var/formatted_desc
formatted_desc = replacetext(inside_desc, "%belly", lowertext(inside_belly.name)) //replace with this belly's name
formatted_desc = replacetext(formatted_desc, "%pred", pred) //replace with the pred of this belly
formatted_desc = replacetext(formatted_desc, "%prey", host) //replace with whoever's reading this
inside_desc = formatted_desc
inside = list(
"absorbed" = host.absorbed,
"belly_name" = inside_belly.name,
@@ -812,7 +821,7 @@
host.vore_selected.egg_type = new_egg_type
. = TRUE
if("b_desc")
var/new_desc = html_encode(input(usr,"Belly Description ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc) as message|null)
var/new_desc = html_encode(input(usr,"Belly Description, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc) as message|null)
if(new_desc)
new_desc = readd_quotes(new_desc)
@@ -822,7 +831,7 @@
host.vore_selected.desc = new_desc
. = TRUE
if("b_absorbed_desc")
var/new_desc = html_encode(input(usr,"Belly Description for absorbed prey ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.absorbed_desc) as message|null)
var/new_desc = html_encode(input(usr,"Belly Description for absorbed prey, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.absorbed_desc) as message|null)
if(new_desc)
new_desc = readd_quotes(new_desc)
+5 -1
View File
@@ -102,8 +102,12 @@
/obj/item/projectile/beam/sizelaser/on_hit(var/atom/target)
var/mob/living/M = target
var/ignoring_prefs = (target == firer ? TRUE : FALSE) // Resizing yourself
if(istype(M))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(istype(H.gloves, /obj/item/clothing/gloves/bluespace))
M.visible_message("<span class='warning'>\The [H]'s bracelet flashes and absorbs the beam!</span>","<span class='notice'>Your bracelet flashes and absorbs the beam!</span>")
return
if(!M.resize(set_size, uncapped = M.has_large_resize_bounds(), ignore_prefs = ignoring_prefs))
to_chat(M, "<font color='blue'>The beam fires into your body, changing your size!</font>")
M.updateicon()