diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index c5980d7b1114..e1ac1cce126d 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt")) //LANGUAGE CHARACTER CUSTOMIZATION GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitters", "chimpers", "declares", "bellows", "buzzes" ,"beeps", "chirps", "clicks", "hisses" ,"poofs" , "puffs", "rattles", "mewls" ,"barks", "blorbles", "squeaks", "squawks", "flutters", "warbles", "caws", "gekkers", "clucks","mumbles","crackles")) -GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc, "xeno tongue" = /obj/item/organ/tongue/alien/hybrid)) +GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc, "xeno tongue" = /obj/item/organ/tongue/hybrid)) //SPECIES BODYPART LISTS //locked parts are those that your picked species requires to have diff --git a/code/datums/diseases/brainrot.dm b/code/datums/diseases/brainrot.dm index 57628efe3627..b227b3d86369 100644 --- a/code/datums/diseases/brainrot.dm +++ b/code/datums/diseases/brainrot.dm @@ -14,7 +14,6 @@ /datum/disease/brainrot/stage_act() //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR ..() - switch(stage) if(2) if(prob(2)) diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 1ec80d8f13e5..c669427fc5b1 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -166,12 +166,31 @@ . = ..() languages_possible = languages_possible_alien -/obj/item/organ/tongue/alien/hybrid +/obj/item/organ/tongue/hybrid name = "xenohybrid tongue" - -/obj/item/organ/tongue/alien/hybrid/Initialize(mapload) + desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"." + icon_state = "tonguexeno" + say_mod = "hisses" + taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED (OLD CODEEEE!!!) + maxHealth = 500 //They've a little mouth for a tongue, so it's pretty robust + var/static/list/languages_possible_hybrid = typecacheof(list( + /datum/language/xenocommon, + /datum/language/common, + /datum/language/draconic, + /datum/language/ratvar, + /datum/language/monkey, + /datum/language/aphasia, + /datum/language/slime, + /datum/language/vampiric, + /datum/language/dwarf, + /datum/language/signlanguage, + /datum/language/modular_sand/solcommon, //Skyrat change - sol common blah blah + /datum/language/modular_sand/technorussian, //Skyrat change - russian stereotype language)) + /datum/language/codespeak + )) +/obj/item/organ/tongue/hybrid/Initialize(mapload) . = ..() - languages_possible = languages_possible_base + languages_possible = languages_possible_hybrid /obj/item/organ/tongue/bone name = "bone \"tongue\"" diff --git a/modular_splurt/code/datums/diseases/suddennyanificationsyndrome.dm b/modular_splurt/code/datums/diseases/suddennyanificationsyndrome.dm new file mode 100644 index 000000000000..8b2fc83e9385 --- /dev/null +++ b/modular_splurt/code/datums/diseases/suddennyanificationsyndrome.dm @@ -0,0 +1,100 @@ +/datum/disease/sns + name = "Sudden Nyanification Syndrome (SNS)" + max_stages = 4 + spread_text = "Airborne, Skin & Fluid Contact" + spread_flags = DISEASE_SPREAD_AIRBORNE | DISEASE_SPREAD_CONTACT_SKIN | DISEASE_SPREAD_CONTACT_FLUIDS | DISEASE_SPREAD_BLOOD + cure_text = "WARNING: DATABASE HACK DETECTED! She dances above and guides the waves, he sweetens your tongue and brightens your day. Only their marriage will lift this curse!" //It's moonsugar, Meow - Lucky >:3 + cures = list(/datum/reagent/moonsugar) //If I was any more sadistic I woulda made the cure felinid mutation toxin >:3 - Lucky + cure_chance = 16 + agent = "Genomophage UWU-13" + viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey, /mob/living/carbon/alien) + infectivity = 70 + permeability_mod = 0.8 + stage_prob = 3 + desc = "If left untreated the subject will develop feline attributes and a strong urge to consume milk. Highly infectious, Ensure an SAD is constructed to treat victims." + severity = DISEASE_SEVERITY_MEDIUM + var/nyanification = 0 + +/datum/disease/sns/stage_act() + ..() + switch(stage) + if(1) + if(prob(20)) + to_chat(affected_mob, "" + pick( + "You feel extra silly today.", + "You can't stop thinking about milk.", + "You'd like to take a long nap.", + "Mmmmm, fish.") + "") + + if(2) + if(prob(30)) + to_chat(affected_mob, "" + pick( + "Your ears feel oddly sensitive.", + "You have an overwhelming urge to chase a laser pointer.", + "You'd like to take a long nap in a sunny window.", + "Hmm, maybe you deserve more.") + "") + + if(3) + if(prob(16)) + affected_mob.Stun(9) + playsound(get_turf(affected_mob), 'sound/effects/splat.ogg', 20, TRUE) + affected_mob.emote("cough") + affected_mob.visible_message("[affected_mob] hacks up a hairball!") + new /obj/item/toy/plush/hairball(affected_mob.loc) + to_chat(affected_mob, "" + pick( + "You hack up a hairball! Gross.", + "You cough up a hairball! Icky.", + "You spit up a hairball! Eugh.") + "") + + if(4) + if(prob(30) && nyanification == 0) + if(affected_mob.dna.species.id == SPECIES_FELINID) + nyanification = 1 + else + affected_mob.emote("mrrp") + to_chat(affected_mob, "" + pick( + "You feel purrrfect.", + "You've become a god.", + "You're the most important person on this station.", + "You should annoy CC.") + "") + nyanify(affected_mob) + affected_mob.visible_message("[affected_mob] suddenly grows feline traits!") + nyanification = 1 + else if (prob(12)) + affected_mob.emote("meow") + to_chat(affected_mob, "" + pick( + "You feel purrrfect.", + "You've become a god.", + "You're the most important person on this station.", + "You should annoy CC.") + "") + return + +/proc/nyanify(mob/living/carbon/human/L) + //Ears + if(L.getorgan(/obj/item/organ/ears)) + var/obj/item/organ/ears/ears = L.getorgan(/obj/item/organ/ears) + ears.Remove(L) + + var/obj/item/organ/ears/cat/newears = new + newears.Insert(L) + + //Tail + if(L.getorgan(/obj/item/organ/tail)) + var/obj/item/organ/tail/tail = L.getorgan(/obj/item/organ/tail) + tail.Remove(L) + + var/obj/item/organ/tail/cat/newtail = new + newtail.Insert(L) + + //Tongue + if(L.getorgan(/obj/item/organ/tongue)) + var/obj/item/organ/tongue/tongue = L.getorgan(/obj/item/organ/tongue) + tongue.Remove(L) + + var/obj/item/organ/tongue/fluffy/newtongue = new + newtongue.Insert(L) + +/obj/item/reagent_containers/glass/bottle/sns + name = "SNS culture bottle" + desc = "A small bottle. Contains genomophage UWU-13 culture in synthblood medium." + spawned_disease = /datum/disease/sns diff --git a/modular_splurt/code/game/objects/items/devices/scanners.dm b/modular_splurt/code/game/objects/items/devices/scanners.dm new file mode 100644 index 000000000000..645a62849568 --- /dev/null +++ b/modular_splurt/code/game/objects/items/devices/scanners.dm @@ -0,0 +1,48 @@ +/obj/item/memoryscanner + name = "handheld memory scanner" + icon = 'modular_splurt/icons/obj/device.dmi' + icon_state = "memoryscanner" + item_state = "inducer-sci" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + desc = "A hand-held mind scanner able to penetrate the surface mind of a target." + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON + slot_flags = ITEM_SLOT_BELT + throwforce = 3 + w_class = WEIGHT_CLASS_TINY + throw_speed = 3 + throw_range = 7 + custom_materials = list(/datum/material/iron=400, /datum/material/plasma=180) + +/obj/item/memoryscanner/Initialize(mapload) + . = ..() + register_item_context() + +/obj/item/memoryscanner/suicide_act(mob/living/carbon/user) + user.visible_message("[user] begins to wipe [user.p_their()] mind with the [src]!") + return OXYLOSS + +/obj/item/memoryscanner/attack(mob/living/M, mob/living/carbon/human/user) + if (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) + memory_scan(user, user) + to_chat(user, "Uh... how does this doohickey work?!") + user.visible_message("[user] clumsily zaps his head with the [src]!") + var/obj/item/organ/brain/E + E = user.getorganslot(ORGAN_SLOT_BRAIN) + E.applyOrganDamage(15) + else + user.visible_message("[user] is trying to scan [M]'s mind with the [src]!") + if (do_mob(user, M, 15)) + user.visible_message("[user] scans [M]'s mind with the [src]!") + memory_scan(user, M) + +proc/memory_scan(mob/user, mob/living/T) + var/msg = "Analyzing results for [T]'s memory." + if (!isliving(T) || !T.mind) + msg += "\n[T]'s mind is non-compliant! Scan failed." + return + else + msg += "\nMemory scan complete. \n Mind Contents: \n [T.mind] \n [T.mind.show_memory()] \n " + to_chat(user, examine_block(msg)) + return diff --git a/modular_splurt/code/game/splurt_posters.dm b/modular_splurt/code/game/splurt_posters.dm new file mode 100644 index 000000000000..b8d189397bbf --- /dev/null +++ b/modular_splurt/code/game/splurt_posters.dm @@ -0,0 +1,26 @@ +// Modularize posters icon source + +// /obj/structure/sign/poster/official/splurt +// icon = 'modular_splurt/icons/obj/contraband.dmi' +// /obj/structure/sign/poster/official/splurt +// icon = 'modular_splurt/icons/obj/contraband.dmi' + +// Lucky's Posters + +/obj/structure/sign/poster/official/splurt/hanginthere + name = "Hang in there, Wagie!" + desc = "This inspirational poster bears an image of a cat dangling from a brach with text reading \"Hang in there, Wagie!\". Depressing." + icon = 'modular_splurt/icons/obj/contraband.dmi' + icon_state = "poster_hanginthere" + +/obj/structure/sign/poster/contraband/splurt/luckywanted + name = "Faded wanted poster" + desc = "this old wanted poster warns of a dubiously lucky individual." + icon = 'modular_splurt/icons/obj/contraband.dmi' + icon_state = "poster_luckywanted" + +/obj/structure/sign/poster/contraband/splurt/puro + name = "Questionably drawn poster" + desc = "A large sheet of paper sporadically drawn upon in sharpie. It smells strongly of rubber." + icon = 'modular_splurt/icons/obj/contraband.dmi' + icon_state = "poster_puro" diff --git a/modular_splurt/code/modules/clothing/head/misc.dm b/modular_splurt/code/modules/clothing/head/misc.dm index f1e2523eeabc..d6b3cbd2fea6 100644 --- a/modular_splurt/code/modules/clothing/head/misc.dm +++ b/modular_splurt/code/modules/clothing/head/misc.dm @@ -133,3 +133,11 @@ item_state = "hoodcowl" flags_inv = HIDEHAIR dynamic_hair_suffix = "" + +/obj/item/clothing/head/outragecowhat + name = "Outrageous Cowboy Hat" + desc = "A stupidly long cowboy hat, makes you want to s-stutter." + icon = 'modular_splurt/icons/obj/clothing/head.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/bighats.dmi' + icon_state = "outragecowhat" + item_state = "outragecowhat" diff --git a/modular_splurt/code/modules/events/sns_outbreak.dm b/modular_splurt/code/modules/events/sns_outbreak.dm new file mode 100644 index 000000000000..45f7a22d52eb --- /dev/null +++ b/modular_splurt/code/modules/events/sns_outbreak.dm @@ -0,0 +1,39 @@ +/datum/round_event_control/sns_outbreak + name = "Sudden Nyanification Syndrome Outbreak" + typepath = /datum/round_event/disease_outbreak + max_occurrences = 1 + min_players = 3 + weight = 2 + category = EVENT_CATEGORY_HEALTH + description = "Sudden Nyanification Syndrome will infect some crewmembers." + +/datum/round_event/disease_outbreak + announce_when = 15 + +/datum/round_event_control/disease_outbreak/canSpawnEvent(var/players_amt, var/gamemode) + if(!..()) return FALSE + var/list/enemy_roles = list("Medical Doctor","Chief Medical Officer","Paramedic","AI","Chemist","Virologist","Captain","Head of Personnel", "Geneticist") + for (var/mob/M in GLOB.alive_mob_list) + if(M.stat != DEAD && (M.mind?.assigned_role in enemy_roles)) + return TRUE + return FALSE + +/datum/round_event/disease_outbreak/announce(fake) + priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak...... Meow.", "Biohazard Alert", "outbreak7") + +/datum/round_event/disease_outbreak/setup() + announce_when = rand(15, 30) + +/datum/round_event/disease_outbreak/start() + var/infectees = 0 + var/desiredinfectees = rand(1, 3) + + for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list) || infectees < desiredinfectees) + var/turf/T = get_turf(H) + if(!T || !is_station_level(T.z) || !H.client || !HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS) || H.stat != DEAD || !HAS_TRAIT(H, TRAIT_VIRUSIMMUNE) || prob(20)) + var/datum/disease/D = new /datum/disease/sns(TRUE) // Move the disease creation inside the if block + H.ForceContractDisease(D, FALSE, TRUE) + infectees++ + else + message_admins("An event has triggered a sns outbreak on [ADMIN_LOOKUPFLW(H)]! Lucky says hi!") + log_game("An event has triggered a sns outbreak on [key_name(H)]! Lucky says hi!") diff --git a/modular_splurt/code/modules/mob/living/emotes.dm b/modular_splurt/code/modules/mob/living/emotes.dm index f95fbe3e9b62..11dde1a3de42 100644 --- a/modular_splurt/code/modules/mob/living/emotes.dm +++ b/modular_splurt/code/modules/mob/living/emotes.dm @@ -1628,6 +1628,15 @@ To add randomization to your emote, copy and paste this line of code: vary = FALSE volume = 30 +/datum/emote/sound/human/oof + key = "oof" + key_third_person = "oofs!" + message = "oof!" + sound = 'sound/voice/oof.ogg' + emote_cooldown = 12 SECONDS + vary = FALSE + volume = 45 + /datum/emote/sound/human/malaysia key = "malaysia" key_third_person = "admits to blowing up Malaysia!" diff --git a/modular_splurt/code/modules/research/designs/misc_designs.dm b/modular_splurt/code/modules/research/designs/misc_designs.dm index 4f81993d0035..b4e254a3ad7d 100644 --- a/modular_splurt/code/modules/research/designs/misc_designs.dm +++ b/modular_splurt/code/modules/research/designs/misc_designs.dm @@ -26,3 +26,12 @@ category = list("Misc", "Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE +/datum/design/msc + name = "Memory Scanner" + desc = "A hand-held mind scanner able to penetrate the surface mind of a target." + id = "memory_scanner" + build_type = PROTOLATHE + materials = list(/datum/material/iron = 20000, /datum/material/glass = 10000, /datum/material/plasma = 2000, /datum/material/gold = 2000) + build_path = /obj/item/memoryscanner + category = list("Tool Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE diff --git a/modular_splurt/code/modules/research/techweb/nodes/biotech_nodes.dm b/modular_splurt/code/modules/research/techweb/nodes/biotech_nodes.dm index ff81163de3d0..f89c0a99b97e 100644 --- a/modular_splurt/code/modules/research/techweb/nodes/biotech_nodes.dm +++ b/modular_splurt/code/modules/research/techweb/nodes/biotech_nodes.dm @@ -1,3 +1,12 @@ /datum/techweb_node/biotech/New() design_ids += "sex_research" . = ..() + +/datum/techweb_node/memoryscanner + id = "memory_scanner" + display_name = "Memory Scanner" + description = "An illegal xenotech used to scan minds for unknown purposes... now it's mostly used to steal bank account info." + prereq_ids = list("alien_bio", "syndicate_basic") + design_ids = list("memory_scanner") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 30000) + hidden = TRUE diff --git a/modular_splurt/code/modules/vending/wardrobes.dm b/modular_splurt/code/modules/vending/wardrobes.dm index 009d91d73342..0da982ed87ab 100644 --- a/modular_splurt/code/modules/vending/wardrobes.dm +++ b/modular_splurt/code/modules/vending/wardrobes.dm @@ -157,6 +157,13 @@ LAZYADD(products, extra_premium) . = ..() +/obj/machinery/vending/wardrobe/cap_wardrobe/Initialize(mapload) + var/list/extra_contraband = list( + /obj/item/clothing/head/outragecowhat = 1, + ) + LAZYADD(contraband, extra_contraband) + . = ..() + /obj/machinery/vending/wardrobe/science_wardrobe/Initialize(mapload) var/list/extra_products = list( /obj/item/clothing/mask/gas/tscmask = 3 diff --git a/modular_splurt/icons/mob/clothing/bighats.dmi b/modular_splurt/icons/mob/clothing/bighats.dmi new file mode 100644 index 000000000000..c91f43fe9b92 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/bighats.dmi differ diff --git a/modular_splurt/icons/obj/clothing/head.dmi b/modular_splurt/icons/obj/clothing/head.dmi index 75b23cc8e2bf..4ebeda0c41e4 100644 Binary files a/modular_splurt/icons/obj/clothing/head.dmi and b/modular_splurt/icons/obj/clothing/head.dmi differ diff --git a/modular_splurt/icons/obj/contraband.dmi b/modular_splurt/icons/obj/contraband.dmi new file mode 100644 index 000000000000..2bc9728e70bd Binary files /dev/null and b/modular_splurt/icons/obj/contraband.dmi differ diff --git a/modular_splurt/icons/obj/device.dmi b/modular_splurt/icons/obj/device.dmi index adb881deea54..b51515bf14fa 100644 Binary files a/modular_splurt/icons/obj/device.dmi and b/modular_splurt/icons/obj/device.dmi differ diff --git a/tgstation.dme b/tgstation.dme index e7cc4796b144..1d794c54f4f9 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4516,6 +4516,7 @@ #include "modular_splurt\code\datums\components\crafting\recipes\recipes_primal.dm" #include "modular_splurt\code\datums\components\crafting\recipes\recipes_robot.dm" #include "modular_splurt\code\datums\components\storage\concrete\pockets.dm" +#include "modular_splurt\code\datums\diseases\suddennyanificationsyndrome.dm" #include "modular_splurt\code\datums\elements\crawl_under.dm" #include "modular_splurt\code\datums\elements\flavor_text.dm" #include "modular_splurt\code\datums\elements\holder_micro.dm" @@ -4596,6 +4597,7 @@ #include "modular_splurt\code\game\atoms_movable.dm" #include "modular_splurt\code\game\data_huds.dm" #include "modular_splurt\code\game\say.dm" +#include "modular_splurt\code\game\splurt_posters.dm" #include "modular_splurt\code\game\area\areas\centcom.dm" #include "modular_splurt\code\game\area\areas\commons.dm" #include "modular_splurt\code\game\area\areas\holodeck.dm" @@ -4652,6 +4654,7 @@ #include "modular_splurt\code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "modular_splurt\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "modular_splurt\code\game\objects\items\circuitboards\miner_circuitboards.dm" +#include "modular_splurt\code\game\objects\items\devices\scanners.dm" #include "modular_splurt\code\game\objects\items\devices\PDA\PDA.dm" #include "modular_splurt\code\game\objects\items\devices\PDA\radio.dm" #include "modular_splurt\code\game\objects\items\devices\radio\electropack.dm" @@ -4910,6 +4913,7 @@ #include "modular_splurt\code\modules\discord\toggle_notify.dm" #include "modular_splurt\code\modules\events\bruh_moment.dm" #include "modular_splurt\code\modules\events\crystalline_reentry.dm" +#include "modular_splurt\code\modules\events\sns_outbreak.dm" #include "modular_splurt\code\modules\events\vent_clog.dm" #include "modular_splurt\code\modules\food_and_drinks\drinks\drinks\bottle.dm" #include "modular_splurt\code\modules\food_and_drinks\drinks\drinks\drinks.dm"