Merge remote-tracking branch 'upstream/master' into just-defibrillator-things
@@ -94,7 +94,7 @@
|
||||
/datum/action/changeling/sting/transformation/can_sting(mob/user, mob/target)
|
||||
if(!..())
|
||||
return
|
||||
if(HAS_TRAIT(target, TRAIT_HUSK) || (!ishuman(target)))
|
||||
if(HAS_TRAIT(target, TRAIT_HUSK) || !ishuman(target) || (NOTRANSSTING in target.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>Our sting appears ineffective against its DNA.</span>")
|
||||
return FALSE
|
||||
if(ishuman(target))
|
||||
|
||||
@@ -14,7 +14,8 @@ GLOBAL_VAR(bomb_set)
|
||||
icon_state = "nuclearbomb0"
|
||||
density = 1
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
var/extended = FALSE
|
||||
anchored = TRUE
|
||||
var/extended = TRUE
|
||||
var/lighthack = FALSE
|
||||
var/timeleft = 120
|
||||
var/timing = FALSE
|
||||
@@ -34,6 +35,10 @@ GLOBAL_VAR(bomb_set)
|
||||
/obj/machinery/nuclearbomb/syndicate
|
||||
is_syndicate = TRUE
|
||||
|
||||
/obj/machinery/nuclearbomb/undeployed
|
||||
extended = FALSE
|
||||
anchored = FALSE
|
||||
|
||||
/obj/machinery/nuclearbomb/New()
|
||||
..()
|
||||
r_code = rand(10000, 99999.0) // Creates a random code upon object spawn.
|
||||
@@ -269,11 +274,6 @@ GLOBAL_VAR(bomb_set)
|
||||
else
|
||||
code = "ERROR"
|
||||
return
|
||||
|
||||
if(!yes_code) // All requests below here require both NAD inserted AND code correct
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("toggle_anchor")
|
||||
if(removal_stage == NUKE_MOBILE)
|
||||
anchored = FALSE
|
||||
@@ -288,6 +288,11 @@ GLOBAL_VAR(bomb_set)
|
||||
else
|
||||
visible_message("<span class='warning'>The anchoring bolts slide back into the depths of [src].</span>")
|
||||
return
|
||||
|
||||
if(!yes_code) // All requests below here require both NAD inserted AND code correct
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("set_time")
|
||||
var/time = input(usr, "Detonation time (seconds, min 120, max 600)", "Input Time", 120) as num|null
|
||||
if(time)
|
||||
|
||||
@@ -220,6 +220,10 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
/obj/effect/proc_holder/spell/vampire/targetted/enthrall = 300,
|
||||
/datum/vampire_passive/full = 500)
|
||||
|
||||
/datum/vampire/proc/adjust_nullification(base, extra)
|
||||
// First hit should give full nullification, while subsequent hits increase the value slower
|
||||
nullified = max(nullified + extra, base)
|
||||
|
||||
/datum/vampire/New(gend = FEMALE)
|
||||
gender = gend
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "multitool"
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
force = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 0
|
||||
throw_range = 7
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
if(ishuman(M) && M.mind?.vampire)
|
||||
if(!M.mind.vampire.get_ability(/datum/vampire_passive/full))
|
||||
to_chat(M, "<span class='warning'>The nullrod's power interferes with your own!</span>")
|
||||
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
|
||||
M.mind.vampire.adjust_nullification(5, 2)
|
||||
|
||||
/obj/item/nullrod/pickup(mob/living/user)
|
||||
. = ..()
|
||||
@@ -476,7 +476,7 @@
|
||||
return
|
||||
|
||||
if(target.mind.vampire && !target.mind.vampire.get_ability(/datum/vampire_passive/full)) // Getting a full prayer off on a vampire will interrupt their powers for a large duration.
|
||||
target.mind.vampire.nullified = max(120, target.mind.vampire.nullified + 120)
|
||||
target.mind.vampire.adjust_nullification(120, 50)
|
||||
to_chat(target, "<span class='userdanger'>[user]'s prayer to [SSticker.Bible_deity_name] has interfered with your power!</span>")
|
||||
praying = FALSE
|
||||
return
|
||||
@@ -500,7 +500,7 @@
|
||||
if(holder.l_hand == src || holder.r_hand == src) // Holding this in your hand will
|
||||
for(var/mob/living/carbon/human/H in range(5, loc))
|
||||
if(H.mind && H.mind.vampire && !H.mind.vampire.get_ability(/datum/vampire_passive/full))
|
||||
H.mind.vampire.nullified = max(5, H.mind.vampire.nullified + 2)
|
||||
H.mind.vampire.adjust_nullification(5, 2)
|
||||
if(prob(10))
|
||||
to_chat(H, "<span class='userdanger'>Being in the presence of [holder]'s [src] is interfering with your powers!</span>")
|
||||
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
icon_state = "meson"
|
||||
item_state = "meson"
|
||||
resistance_flags = NONE
|
||||
prescription_upgradable = TRUE
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
|
||||
sprite_sheets = list(
|
||||
|
||||
@@ -618,7 +618,9 @@ BLIND // can't see anything
|
||||
resistance_flags = NONE
|
||||
hide_tail_by_species = null
|
||||
species_restricted = list("exclude","Wryn")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
//Under clothing
|
||||
/obj/item/clothing/under
|
||||
|
||||
@@ -4,31 +4,33 @@
|
||||
// Pre-upgraded upgradable glasses
|
||||
name = "prescription [name]"
|
||||
|
||||
/obj/item/clothing/glasses/attackby(obj/item/O as obj, mob/user as mob)
|
||||
if(user.stat || user.restrained() || !ishuman(user))
|
||||
/obj/item/clothing/glasses/attackby(obj/item/I, mob/user)
|
||||
if(!prescription_upgradable || user.stat || user.restrained() || !ishuman(user))
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(prescription_upgradable)
|
||||
if(istype(O, /obj/item/clothing/glasses/regular))
|
||||
if(prescription)
|
||||
to_chat(H, "You can't possibly imagine how adding more lenses would improve \the [name].")
|
||||
return
|
||||
H.unEquip(O)
|
||||
O.loc = src // Store the glasses for later removal
|
||||
to_chat(H, "You fit \the [name] with lenses from \the [O].")
|
||||
prescription = 1
|
||||
name = "prescription [name]"
|
||||
|
||||
// Adding prescription glasses
|
||||
if(istype(I, /obj/item/clothing/glasses/regular))
|
||||
if(prescription)
|
||||
to_chat(H, "<span class='warning'>You can't possibly imagine how adding more lenses would improve [src].</span>")
|
||||
return
|
||||
if(prescription && istype(O, /obj/item/screwdriver))
|
||||
var/obj/item/clothing/glasses/regular/G = locate() in src
|
||||
if(!G)
|
||||
G = new(get_turf(H))
|
||||
to_chat(H, "You salvage the prescription lenses from \the [name].")
|
||||
prescription = 0
|
||||
name = initial(name)
|
||||
H.put_in_hands(G)
|
||||
return
|
||||
return ..()
|
||||
H.unEquip(I)
|
||||
I.loc = src // Store the glasses for later removal
|
||||
to_chat(H, "<span class='notice'>You fit [src] with lenses from [I].</span>")
|
||||
prescription = TRUE
|
||||
name = "prescription [initial(name)]"
|
||||
|
||||
// Removing prescription glasses
|
||||
else if(prescription && istype(I, /obj/item/screwdriver))
|
||||
var/obj/item/clothing/glasses/regular/G = locate() in src
|
||||
if(!G)
|
||||
G = new(src)
|
||||
to_chat(H, "<span class='notice'>You salvage the prescription lenses from [src].</span>")
|
||||
prescription = FALSE
|
||||
name = initial(name)
|
||||
H.put_in_hands(G)
|
||||
|
||||
H.update_nearsighted_effects()
|
||||
|
||||
/obj/item/clothing/glasses/visor_toggling()
|
||||
..()
|
||||
@@ -114,7 +116,7 @@
|
||||
icon_state = "purple"
|
||||
item_state = "glasses"
|
||||
origin_tech = "magnets=2;engineering=1"
|
||||
prescription_upgradable = 0
|
||||
prescription_upgradable = TRUE
|
||||
scan_reagents = 1 //You can see reagents while wearing science goggles
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
@@ -135,6 +137,7 @@
|
||||
icon_state = "nvpurple"
|
||||
item_state = "glasses"
|
||||
see_in_dark = 8
|
||||
prescription_upgradable = FALSE
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these
|
||||
|
||||
/obj/item/clothing/glasses/janitor
|
||||
@@ -454,6 +457,7 @@
|
||||
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
scan_reagents = 1
|
||||
prescription = TRUE
|
||||
flags = NODROP
|
||||
flags_cover = null
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#7DFF00"
|
||||
taste_description = "slime"
|
||||
can_synth = FALSE
|
||||
|
||||
/datum/reagent/stable_mutagen/on_new(data)
|
||||
..()
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
update_flags |= M.adjustStaminaLoss(5, FALSE)
|
||||
if(prob(20))
|
||||
M.emote("scream")
|
||||
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
|
||||
M.mind.vampire.adjust_nullification(5, 2)
|
||||
M.mind.vampire.bloodusable = max(M.mind.vampire.bloodusable - 3,0)
|
||||
if(M.mind.vampire.bloodusable)
|
||||
V.vomit(0,1)
|
||||
@@ -296,7 +296,7 @@
|
||||
switch(current_cycle)
|
||||
if(1 to 4)
|
||||
to_chat(M, "<span class = 'warning'>Something sizzles in your veins!</span>")
|
||||
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
|
||||
M.mind.vampire.adjust_nullification(5, 2)
|
||||
if(5 to 12)
|
||||
to_chat(M, "<span class = 'danger'>You feel an intense burning inside of you!</span>")
|
||||
update_flags |= M.adjustFireLoss(1, FALSE)
|
||||
@@ -304,7 +304,7 @@
|
||||
M.Jitter(20)
|
||||
if(prob(20))
|
||||
M.emote("scream")
|
||||
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
|
||||
M.mind.vampire.adjust_nullification(5, 2)
|
||||
if(13 to INFINITY)
|
||||
to_chat(M, "<span class = 'danger'>You suddenly ignite in a holy fire!</span>")
|
||||
for(var/mob/O in viewers(M, null))
|
||||
@@ -316,7 +316,7 @@
|
||||
M.Jitter(30)
|
||||
if(prob(40))
|
||||
M.emote("scream")
|
||||
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
|
||||
M.mind.vampire.adjust_nullification(5, 2)
|
||||
return ..() | update_flags
|
||||
|
||||
|
||||
@@ -333,7 +333,7 @@
|
||||
return
|
||||
else
|
||||
to_chat(M, "<span class='warning'>Something holy interferes with your powers!</span>")
|
||||
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
|
||||
M.mind.vampire.adjust_nullification(5, 2)
|
||||
|
||||
|
||||
/datum/reagent/holywater/reaction_turf(turf/simulated/T, volume)
|
||||
|
||||
@@ -154,19 +154,6 @@
|
||||
result_amount = 3
|
||||
mix_message = "The substance turns neon green and bubbles unnervingly."
|
||||
|
||||
/datum/chemical_reaction/stable_mutagen
|
||||
name = "Stable mutagen"
|
||||
id = "stable_mutagen"
|
||||
result = "stable_mutagen"
|
||||
required_reagents = list("mutagen" = 1, "lithium" = 1, "acetone" = 1, "bromine" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The substance turns a drab green and begins to bubble."
|
||||
|
||||
/datum/chemical_reaction/stable_mutagen/stable_mutagen2
|
||||
id = "stable_mutagen2"
|
||||
required_reagents = list("mutadone" = 3, "lithium" = 1)
|
||||
result_amount = 4
|
||||
|
||||
/datum/chemical_reaction/rotatium
|
||||
name = "Rotatium"
|
||||
id = "Rotatium"
|
||||
|
||||
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 297 KiB After Width: | Height: | Size: 303 KiB |
@@ -49,7 +49,7 @@ export const NuclearBomb = (props, context) => {
|
||||
<Button
|
||||
icon={data.anchored ? 'check' : 'times'}
|
||||
selected={data.anchored}
|
||||
disabled={!data.authfull}
|
||||
disabled={!data.authdisk}
|
||||
content={data.anchored ? 'YES' : 'NO'}
|
||||
onClick={() => act("toggle_anchor")} />
|
||||
</LabeledList.Item>
|
||||
|
||||