diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 072f5b8f40d..14d93439510 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -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, "Our sting appears ineffective against its DNA.") return FALSE if(ishuman(target)) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index a1f214fa4a1..fa0ba2fbf0f 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -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("The anchoring bolts slide back into the depths of [src].") 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) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 7d2f0e404f5..8a3628a1717 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -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 diff --git a/code/game/objects/items/tools/multitool.dm b/code/game/objects/items/tools/multitool.dm index bad1a325b26..7acee5352a3 100644 --- a/code/game/objects/items/tools/multitool.dm +++ b/code/game/objects/items/tools/multitool.dm @@ -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 diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 59880fdcc8c..a9cfbbbe36b 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -39,7 +39,7 @@ if(ishuman(M) && M.mind?.vampire) if(!M.mind.vampire.get_ability(/datum/vampire_passive/full)) to_chat(M, "The nullrod's power interferes with your own!") - 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, "[user]'s prayer to [SSticker.Bible_deity_name] has interfered with your power!") 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, "Being in the presence of [holder]'s [src] is interfering with your powers!") diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index a1d84912f3f..c34e17943cb 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -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( diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 7126f8513f7..9baf6c46079 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -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 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 68539c0822f..d07b95d18eb 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -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, "You can't possibly imagine how adding more lenses would improve [src].") 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, "You fit [src] with lenses from [I].") + 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, "You salvage the prescription lenses from [src].") + 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 diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index b644e5ad2b9..b69c8256c0b 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -203,6 +203,7 @@ reagent_state = LIQUID color = "#7DFF00" taste_description = "slime" + can_synth = FALSE /datum/reagent/stable_mutagen/on_new(data) ..() diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index cb69f3b7b31..c51972b99c6 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -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, "Something sizzles in your veins!") - 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, "You feel an intense burning inside of you!") 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, "You suddenly ignite in a holy fire!") 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, "Something holy interferes with your powers!") - 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) diff --git a/code/modules/reagents/chemistry/recipes/toxins.dm b/code/modules/reagents/chemistry/recipes/toxins.dm index 001d8d2f7c6..cf61f2f916b 100644 --- a/code/modules/reagents/chemistry/recipes/toxins.dm +++ b/code/modules/reagents/chemistry/recipes/toxins.dm @@ -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" diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 2676e31a7ae..cb93b21e0b0 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index b3d8fd6ce4f..e6ec527f9d4 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/species/vox/helmet.dmi b/icons/mob/species/vox/helmet.dmi index 52d31674635..968de6b8de8 100644 Binary files a/icons/mob/species/vox/helmet.dmi and b/icons/mob/species/vox/helmet.dmi differ diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi index 5fd53d8d5c6..6dee942eabb 100644 Binary files a/icons/mob/species/vox/suit.dmi and b/icons/mob/species/vox/suit.dmi differ diff --git a/tgui/packages/tgui/interfaces/NuclearBomb.js b/tgui/packages/tgui/interfaces/NuclearBomb.js index e3d7b1cc949..209fad1cbf3 100644 --- a/tgui/packages/tgui/interfaces/NuclearBomb.js +++ b/tgui/packages/tgui/interfaces/NuclearBomb.js @@ -49,7 +49,7 @@ export const NuclearBomb = (props, context) => {