diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index e99aae35027e..237d1b95345d 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -246,6 +246,11 @@ #define set_confusion(duration) set_timed_status_effect(duration, /datum/status_effect/confusion) #define set_confusion_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/confusion, TRUE) +#define adjust_red_eye(duration) adjust_timed_status_effect(duration, /datum/status_effect/red_eye) +#define adjust_red_eye_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/red_eye, up_to) +#define set_red_eye(duration) set_timed_status_effect(duration, /datum/status_effect/red_eye) +#define set_red_eye_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/red_eye, TRUE) + #define adjust_drugginess(duration) adjust_timed_status_effect(duration, /datum/status_effect/drugginess) #define adjust_drugginess_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/drugginess, up_to) #define set_drugginess(duration) set_timed_status_effect(duration, /datum/status_effect/drugginess) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index a4fe014aeff3..8e606d35cfee 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -211,6 +211,11 @@ blend_mode = BLEND_ADD show_when_dead = TRUE +/atom/movable/screen/fullscreen/red_eye + icon_state = "red_eye" + plane = FULLSCREEN_PLANE + layer = CURSE_LAYER + //Triggered by übercharge activation /atom/movable/screen/fullscreen/uber icon_state = "uberoverlay" diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm index 47c10456c213..81596f1db134 100644 --- a/code/datums/mood_events/drug_events.dm +++ b/code/datums/mood_events/drug_events.dm @@ -2,6 +2,10 @@ mood_change = 6 description = "Woooow duudeeeeee...I'm tripping baaalls...\n" +/datum/mood_event/red_eye + mood_change = 10 + description = "Keep those eyes open...\n" + /datum/mood_event/smoked description = "I have had a smoke recently.\n" mood_change = 2 diff --git a/code/datums/status_effects/debuffs/red_eye.dm b/code/datums/status_effects/debuffs/red_eye.dm new file mode 100644 index 000000000000..2ea1f249344e --- /dev/null +++ b/code/datums/status_effects/debuffs/red_eye.dm @@ -0,0 +1,35 @@ +/// Red eye effect, makes your screen a swirling red +/datum/status_effect/red_eye + id = "red_eye" + alert_type = /atom/movable/screen/alert/status_effect/red_eye + remove_on_fullheal = TRUE + examine_text = "Their eyes are bright red and bulging out their skull!" + +/datum/status_effect/red_eye/on_creation(mob/living/new_owner, duration = 10 SECONDS) + src.duration = duration + return ..() + +/datum/status_effect/red_eye/on_apply() + RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(remove_red_eye)) + + SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, id, /datum/mood_event/high) + owner.overlay_fullscreen(id, /atom/movable/screen/fullscreen/red_eye) + return TRUE + +/datum/status_effect/red_eye/on_remove() + UnregisterSignal(owner, COMSIG_LIVING_DEATH) + + SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, id) + owner.clear_fullscreen(id) + +/// Removes all of our red_eye (self delete) on signal +/datum/status_effect/red_eye/proc/remove_red_eye(datum/source, admin_revive) + SIGNAL_HANDLER + + qdel(src) + +/atom/movable/screen/alert/status_effect/red_eye + name = "Red-Eye" + desc = "DRAKHARFR PLEGH-WE GALBARTOK USINAR" + icon = 'yogstation/icons/mob/screen_alert.dmi' + icon_state = "red_eye" diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index b8a237277130..c8d7cbdc8e33 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -7,6 +7,7 @@ w_class = WEIGHT_CLASS_TINY max_amount = 50 item_flags = NOBLUDGEON + grind_results = list(/datum/reagent/redspace = 20) /obj/item/stack/telecrystal/attack_self(mob/user) if(!isliving(user)) @@ -23,7 +24,7 @@ new /obj/effect/particle_effect/sparks(loc) playsound(loc, "sparks", 50, 1) - if(!do_teleport(L, destination, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)) + if(!do_teleport(L, destination, asoundin = 'sound/effects/phaseinred.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)) L.visible_message(span_warning("[src] refuses to be crushed by [L]! There must be something interfering!"), span_danger("[src] suddenly hardens in your hand! There must be something interfering!")) return diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 33b88da5fb29..5b25179cca7e 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -537,6 +537,120 @@ M.adjust_dizzy(4) ..() +//traitor only drug made with telecrystals +/datum/reagent/drug/red_eye + name = "Red-Eye" //i love cowboy bebop + description = "An experimental drug developed by the Syndicate in attempt to recreate wizards" + reagent_state = GAS + color = "#fd1a5e" + addiction_threshold = 20 + overdose_threshold = 40 + metabolization_rate = 1.5 * REAGENTS_METABOLISM + can_synth = FALSE + +//Teleport like normal telecrystals +/datum/reagent/drug/red_eye/proc/tele_teleport(mob/living/L) + var/turf/destination = get_teleport_loc(L.loc, L, rand(3,6)) + if(!istype(destination)) + return + new /obj/effect/particle_effect/sparks(L.loc) + playsound(L.loc, "sparks", 50, 1) + if(!do_teleport(L, destination, asoundin = 'sound/effects/phaseinred.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)) + return + L.throw_at(get_edge_target_turf(L, L.dir), 1, 3, spin = FALSE, diagonals_first = TRUE) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.adjust_disgust(15) + +/datum/reagent/drug/red_eye/on_mob_metabolize(mob/living/L) + L.next_move_modifier *= 0.8 + L.action_speed_modifier *= 0.5 + tele_teleport(L) + ..() + +/datum/reagent/drug/red_eye/on_mob_end_metabolize(mob/living/L) + L.next_move_modifier *= 1.25 + L.action_speed_modifier *= 2 + ..() + +/datum/reagent/drug/red_eye/on_mob_life(mob/living/carbon/M) + var/mob/living/carbon/human/H = M + H.eye_color = "fd1a5e" + H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.update_body() + + M.adjust_red_eye_up_to(15,40) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(0,1)) + M.AdjustKnockdown(-15, FALSE) + M.adjustStaminaLoss(-4, 0) + M.AdjustUnconscious(-5, FALSE) + M.AdjustParalyzed(-20, FALSE) + M.adjust_jitter(2 SECONDS) + if(prob(10)) + to_chat(M, span_notice("[pick("TOK-LYR RQA-NAP", "BAPR NTNVA", "ZL-YVTUG FUVARF", "MAH'WEYH PLEGGH AT E'NTRATH", "TARCOL MINTI ZHERI.", "G'OLT-ULOFT")]")) + if(prob(5)) + M.visible_message(span_danger("[M]'s eyes start bulging out of [M.p_their()] skull!")) + if(prob(5)) + M.emote(pick("twitch","drool","moan","giggle")) + if(prob(1)) + tele_teleport(M) + ..() + +/datum/reagent/drug/red_eye/overdose_process(mob/living/M) + M.adjustToxLoss(2, 0) + if(isturf(M.loc) && !isspaceturf(M.loc) && prob(10)) + if(M.mobility_flags & MOBILITY_MOVE) + step(M, pick(GLOB.cardinals)) + if(prob(8)) + M.visible_message(span_danger("[M]'s fingers curl into occult shapes!")) + M.drop_all_held_items() + if(prob(4)) + M.adjustToxLoss(1, 0) + tele_teleport(M) + if(prob(1)) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1,4)) + M.adjustToxLoss(4, 0) + tele_teleport(M) + tele_teleport(M) + ..() +/datum/reagent/drug/red_eye/addiction_act_stage1(mob/living/M) + M.adjust_jitter(5 SECONDS) + if(prob(20)) + M.emote(pick("twitch","drool","moan","giggle")) + ..() + +/datum/reagent/drug/red_eye/addiction_act_stage2(mob/living/M) + M.adjust_jitter(10 SECONDS) + M.adjust_dizzy(10) + if(prob(30)) + M.emote(pick("twitch","drool","moan","giggle")) + ..() + +/datum/reagent/drug/red_eye/addiction_act_stage3(mob/living/M) + if((M.mobility_flags & MOBILITY_MOVE) && !ismovable(M.loc)) + for(var/i = 0, i < 4, i++) + step(M, pick(GLOB.cardinals)) + M.adjust_jitter(12 SECONDS) + M.adjust_dizzy(12) + if(prob(40)) + M.emote(pick("twitch","drool","moan","giggle")) + ..() + +/datum/reagent/drug/red_eye/addiction_act_stage4(mob/living/carbon/human/M) + if((M.mobility_flags & MOBILITY_MOVE) && !ismovable(M.loc)) + for(var/i = 0, i < 8, i++) + step(M, pick(GLOB.cardinals)) + M.adjust_jitter(15 SECONDS) + M.adjust_dizzy(15) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1,4)) + M.adjustToxLoss(2, 0) + if(prob(50)) + M.emote(pick("twitch","drool","moan","giggle")) + ..() + if(prob(10)) + M.visible_message(span_danger("[M]'s fingers curl into occult shapes!")) + M.drop_all_held_items() + . = 1 /datum/reagent/drug/pumpup name = "Pump-Up" description = "Take on the world! A fast acting, hard hitting drug that pushes the limit on what you can handle." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 53420e2a99d2..78353e6cf8a2 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1086,7 +1086,32 @@ /mob/living/proc/bluespace_shuffle() do_teleport(src, get_turf(src), 5, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - + +//Gateway to traitor chemistry, want a drug to be traitor only? use this +/datum/reagent/redspace + name = "Redspace Dust" + description = "A sinister looking dust composed of grinded Syndicate telecrystals, the red colouration a result of impurities within their manufacturing process." + reagent_state = SOLID + color = "#db0735" + taste_description = "bitter evil" + process_flags = ORGANIC | SYNTHETIC + metabolization_rate = 0.2 * REAGENTS_METABOLISM + can_synth = FALSE + +//Teleport like normal telecrystals +/datum/reagent/redspace/on_mob_metabolize(mob/living/L) + var/turf/destination = get_teleport_loc(L.loc, L, rand(3,6)) + if(!istype(destination)) + return + new /obj/effect/particle_effect/sparks(L.loc) + playsound(L.loc, "sparks", 50, 1) + if(!do_teleport(L, destination, asoundin = 'sound/effects/phaseinred.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)) + return + L.throw_at(get_edge_target_turf(L, L.dir), 1, 3, spin = FALSE, diagonals_first = TRUE) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.adjust_disgust(15) + /datum/reagent/aluminium name = "Aluminium" description = "A silvery white and ductile member of the boron group of chemical elements." diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 2a163a443f2e..2c08b65e957d 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -63,6 +63,12 @@ required_reagents = list(/datum/reagent/nitrous_oxide = 2, /datum/reagent/medicine/epinephrine = 1, /datum/reagent/consumable/ethanol = 1) required_catalysts = list(/datum/reagent/toxin/plasma = 5) +/datum/chemical_reaction/red_eye + name = "Red-Eye" + id = /datum/reagent/drug/red_eye + results = list(/datum/reagent/drug/red_eye = 4) //1tc = 40u of red_eye + required_reagents = list(/datum/reagent/medicine/diphenhydramine = 1, /datum/reagent/redspace = 2, /datum/reagent/iodine = 1, /datum/reagent/hydrogen = 1, /datum/reagent/consumable/sugar = 1) + /datum/chemical_reaction/pumpup name = "Pump-Up" id = /datum/reagent/drug/pumpup diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi index 6f8d61ecccd2..d3108d9e8be5 100644 Binary files a/icons/mob/screen_full.dmi and b/icons/mob/screen_full.dmi differ diff --git a/sound/effects/phaseinred.ogg b/sound/effects/phaseinred.ogg new file mode 100644 index 000000000000..215b0ffcd56e Binary files /dev/null and b/sound/effects/phaseinred.ogg differ diff --git a/yogstation.dme b/yogstation.dme index 1a68c4ca7599..a07c8621e44f 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -731,6 +731,7 @@ #include "code\datums\status_effects\debuffs\hallucination.dm" #include "code\datums\status_effects\debuffs\jitteriness.dm" #include "code\datums\status_effects\debuffs\knuckleroot.dm" +#include "code\datums\status_effects\debuffs\red_eye.dm" #include "code\datums\status_effects\debuffs\speech_debuffs.dm" #include "code\datums\traits\_quirk.dm" #include "code\datums\traits\good.dm" diff --git a/yogstation/icons/mob/screen_alert.dmi b/yogstation/icons/mob/screen_alert.dmi index e9b484b95c42..b32a257b272f 100644 Binary files a/yogstation/icons/mob/screen_alert.dmi and b/yogstation/icons/mob/screen_alert.dmi differ