diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index d3de61cfd3..fe3b4ff9ba 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -5,13 +5,13 @@ //Illicit drugs~ /obj/item/storage/pill_bottle/happy name = "bottle of Happy pills" - desc = "Highly illegal drug. When you want to see the rainbow." + desc = "A recreational drug. When you want to see the rainbow. Probably not work-approved..." wrapper_color = COLOR_PINK starts_with = list(/obj/item/reagent_containers/pill/happy = 7) /obj/item/storage/pill_bottle/zoom name = "bottle of Zoom pills" - desc = "Highly illegal drug. Trade brain for speed." + desc = "Probably illegal. Trade brain for speed." wrapper_color = COLOR_BLUE starts_with = list(/obj/item/reagent_containers/pill/zoom = 7) @@ -52,8 +52,8 @@ icon = 'icons/obj/chemical.dmi' icon_state = "powder" item_state = "powder" - amount_per_transfer_from_this = 2 - possible_transfer_amounts = 2 + amount_per_transfer_from_this = 5 + possible_transfer_amounts = 5 w_class = ITEMSIZE_TINY volume = 50 @@ -94,4 +94,36 @@ if(!reagents.total_volume) /// Did we use all of it? qdel(src) -////// End powder. ///////// \ No newline at end of file +////// End powder. /////////// +////////////////////////////// +///// Drugs for loadout/////// + +/obj/item/storage/pill_bottle/bliss + name = "unlabeled pill bottle" + desc = "A pill bottle with its label suspiciously scratched out." + starts_with = list(/obj/item/reagent_containers/pill/unidentified/bliss = 7) + +/obj/item/storage/pill_bottle/snowflake + name = "unlabeled pill bottle" + desc = "A pill bottle with its label suspiciously scratched out." + starts_with = list(/obj/item/reagent_containers/pill/unidentified/snowflake = 7) + +/obj/item/storage/pill_bottle/royale + name = "unlabeled pill bottle" + desc = "A pill bottle with its label suspiciously scratched out." + starts_with = list(/obj/item/reagent_containers/pill/unidentified/royale = 7) + +/obj/item/storage/pill_bottle/sinkhole + name = "unlabeled pill bottle" + desc = "A pill bottle with its label suspiciously scratched out." + starts_with = list(/obj/item/reagent_containers/pill/unidentified/sinkhole = 7) + +/obj/item/storage/pill_bottle/colorspace + name = "unlabeled pill bottle" + desc = "A pill bottle with its label suspiciously scratched out." + starts_with = list(/obj/item/reagent_containers/pill/unidentified/colorspace = 7) + +/obj/item/storage/pill_bottle/schnappi + name = "unlabeled pill bottle" + desc = "A pill bottle with its label suspiciously scratched out." + starts_with = list(/obj/item/reagent_containers/pill/unidentified/schnappi = 7) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 48c4dbe638..3c1d267b5d 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -545,6 +545,11 @@ desc = "Contains the seeds you need to get a little high." starts_with = list(/obj/item/seeds/ambrosiavulgarisseed = 7) +/obj/item/storage/box/ambrosia_grown + name = "ambrosia box" + desc = "Contains a little pick-me-up for the long work day." + starts_with = list(/obj/item/reagent_containers/food/snacks/grown/ambrosiavulgaris = 7) + /obj/item/storage/box/ambrosiadeus name = "ambrosia deus seeds box" desc = "Contains the seeds you need to get a proper healthy high." diff --git a/code/modules/client/preference_setup/loadout/loadout_contraband.dm b/code/modules/client/preference_setup/loadout/loadout_contraband.dm new file mode 100644 index 0000000000..8e182c11e8 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_contraband.dm @@ -0,0 +1,35 @@ +/datum/gear/contraband + display_name = "ambrosia box" + description = "A box of a familiar plant." + path = /obj/item/storage/box/ambrosia_grown + cost = 1 + sort_category = "Contraband" + +/datum/gear/contraband/pills + display_name = "unlabeled pill bottle" + description = "A pill bottle of more... recreational sorts." + path = /obj/item/storage/pill_bottle + cost = 2 + +/datum/gear/contraband/pills/New() + ..() + var/drug_type = list() + drug_type["Bliss"] = /obj/item/storage/pill_bottle/bliss + drug_type["Snowflake"] = /obj/item/storage/pill_bottle/snowflake + drug_type["Royale"] = /obj/item/storage/pill_bottle/royale + drug_type["Sinkhole"] = /obj/item/storage/pill_bottle/sinkhole + drug_type["Colorspace"] = /obj/item/storage/pill_bottle/colorspace + drug_type["Schnappi"] = /obj/item/storage/pill_bottle/schnappi + gear_tweaks += new/datum/gear_tweak/path(drug_type) + +/datum/gear/contraband/rollingpaper + display_name = "rolling papers" + description = "Paper for rolling various smokeables. Now you just need something to roll up inside..." + path = /obj/item/storage/rollingpapers + cost = 1 + +/datum/gear/contraband/rollingpaper/New() + ..() + var/paperselect = list("rolling papers" = /obj/item/storage/rollingpapers, + "blunt wrappers" = /obj/item/storage/rollingpapers/blunt) + gear_tweaks += new/datum/gear_tweak/path(paperselect) \ No newline at end of file diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 1dbfa2d819..897d8eaa61 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -1,223 +1,71 @@ /* -Ideas for the subtle effects of hallucination: - -Light up oxygen/phoron indicators (done) -Cause health to look critical/dead, even when standing (done) -Characters silently watching you -Brief flashes of fire/space/bombs/c4/dangerous shit (done) -Items that are rare/traitorous/don't exist appearing in your inventory slots (done) -Strange audio (should be rare) (done) -Gunshots/explosions/opening doors/less rare audio (done) - +Hallucinations should not be oOoOoOo whacky, that's dumb. +Room for expanding on, but let's not imagine the crew wailing on you for taking some drugs. */ /mob/living/carbon var/image/halimage - var/image/halbody - var/obj/halitem - var/hal_screwyhud = 0 //1 - critical, 2 - dead, 3 - oxygen indicator, 4 - toxin indicator - var/handling_hal = 0 - var/hal_crit = 0 + var/halmob_action /mob/living/carbon/proc/handle_hallucinations() - if(handling_hal) return - handling_hal = 1 - while(client && hallucination > 20) - sleep(rand(200,500)/(hallucination/25)) - var/halpick = rand(1,100) - switch(halpick) - if(0 to 15) - //Screwy HUD - //to_chat(src, "Screwy HUD") - hal_screwyhud = pick(1,2,3,3,4,4) - spawn(rand(100,250)) - hal_screwyhud = 0 - if(16 to 25) - //Strange items - //to_chat(src, "Traitor Items") - if(!halitem) - halitem = new - var/list/slots_free = list(ui_lhand,ui_rhand) - if(l_hand) slots_free -= ui_lhand - if(r_hand) slots_free -= ui_rhand - if(istype(src,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = src - if(!H.belt) slots_free += ui_belt - if(!H.l_store) slots_free += ui_storage1 - if(!H.r_store) slots_free += ui_storage2 - if(slots_free.len) - halitem.screen_loc = pick(slots_free) - halitem.hud_layerise() - switch(rand(1,6)) - if(1) //revolver - halitem.icon = 'icons/obj/gun.dmi' - halitem.icon_state = "revolver" - halitem.name = "Revolver" - if(2) //c4 - halitem.icon = 'icons/obj/assemblies.dmi' - halitem.icon_state = "plastic-explosive0" - halitem.name = "Mysterious Package" - if(prob(25)) - halitem.icon_state = "c4small_1" - if(3) //sword - halitem.icon = 'icons/obj/weapons.dmi' - halitem.icon_state = "sword1" - halitem.name = "Sword" - if(4) //stun baton - halitem.icon = 'icons/obj/weapons.dmi' - halitem.icon_state = "stunbaton" - halitem.name = "Stun Baton" - if(5) //emag - halitem.icon = 'icons/obj/card.dmi' - halitem.icon_state = "emag" - halitem.name = "Cryptographic Sequencer" - if(6) //flashbang - halitem.icon = 'icons/obj/grenade.dmi' - halitem.icon_state = "flashbang1" - halitem.name = "Flashbang" - if(client) client.screen += halitem - spawn(rand(100,250)) - if(client) - client.screen -= halitem - halitem = null - if(26 to 40) - //Flashes of danger - //to_chat(src, "Danger Flash") - if(!halimage) + if(client && hallucination > 20) + var/list/halpick = list() + halpick |= list("messages", "sounds") + if(hallucination > 40) + halpick |= list("goodvoice", "badvoice") + if(hallucination > 65) + halpick |= list("ignoring", "badsounds") + if(hallucination > 80) + halpick |= list("dangerimage") + var/chosenhal = pick(halpick) + if(prob(25)) + switch(chosenhal) + if("messages") + var/list/msg_list = list("Everything around you feels like it's breathing...", + "There are such strange patterns everywhere... you can't take your eyes off them.", + "You feel in tune with your surroundings. You're part of them...", + "What was that noise?", + "You feel like something is crawling on you...!") + to_chat(src, "[pick(msg_list)]") + if("sounds") /// Relatively harmless sounds to hear. + var/list/soundlist = list('sound/items/bikehorn.ogg', 'sound/items/drink.ogg', 'sound/items/polaroid1.ogg', 'sound/items/lighter_on.ogg', + 'sound/machines/vending/vending_cans.ogg', 'sound/weapons/flash.ogg') + src << pick(soundlist) + if("goodvoice") + if(prob(10)) + halmob_action = "goodvoice" + mob_hallucinate(src) + if("badvoice") + if(prob(10)) + halmob_action = "badvoice" + mob_hallucinate(src) + if("ignoring") /// Paranoid isolation + if(prob(10)) + halmob_action = "ignoring" + mob_hallucinate(src) + if("badsounds") + var/list/soundlist = list('sound/hallucinations/serithi/creepy1.ogg', 'sound/hallucinations/serithi/creepy2.ogg','sound/hallucinations/serithi/creepy3.ogg') + src << pick(soundlist) + if("dangerimage") /// Dangers like fire on random tiles. var/list/possible_points = list() - for(var/turf/simulated/floor/F in view(src,world.view)) - possible_points += F + for(var/turf/simulated/floor/F in range(7, src)) + if(can_see(src, F, 7)) + possible_points += F if(possible_points.len) var/turf/simulated/floor/target = pick(possible_points) - - switch(rand(1,3)) + switch(rand(1,2)) if(1) - //to_chat(src, "Space") - halimage = image('icons/turf/space.dmi',target,"[rand(1,25)]",TURF_LAYER) - if(2) - //to_chat(src, "Fire") halimage = image('icons/effects/fire.dmi',target,"1",TURF_LAYER) - if(3) - //to_chat(src, "C4") + if(2) halimage = image('icons/obj/assemblies.dmi',target,"plastic-explosive2",OBJ_LAYER+0.01) - - - if(client) client.images += halimage + if(client) + client.images += halimage spawn(rand(10,50)) //Only seen for a brief moment. - if(client) client.images -= halimage + if(client) + client.images -= halimage halimage = null - - if(41 to 65) - //Strange audio - //to_chat(src, "Strange Audio") - switch(rand(1,12)) - if(1) src << 'sound/machines/door/old_airlock.ogg' - if(2) - if(prob(50))src << 'sound/effects/Explosion1.ogg' - else src << 'sound/effects/Explosion2.ogg' - if(3) src << 'sound/effects/explosionfar.ogg' - if(4) src << 'sound/effects/Glassbr1.ogg' - if(5) src << 'sound/effects/Glassbr2.ogg' - if(6) src << 'sound/effects/Glassbr3.ogg' - if(7) src << 'sound/machines/twobeep.ogg' - if(8) src << 'sound/machines/door/windowdoor.ogg' - if(9) - //To make it more realistic, I added two gunshots (enough to kill) - src << 'sound/weapons/Gunshot1.ogg' - spawn(rand(10,30)) - src << 'sound/weapons/Gunshot2.ogg' - if(10) src << 'sound/weapons/smash.ogg' - if(11) - //Same as above, but with tasers. - src << 'sound/weapons/Taser.ogg' - spawn(rand(10,30)) - src << 'sound/weapons/Taser.ogg' - //Rare audio - if(12) -//These sounds are (mostly) taken from Hidden: Source - var/list/creepyasssounds = list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/Heart Beat.ogg', 'sound/effects/screech.ogg',\ - 'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') - src << pick(creepyasssounds) - if(66 to 70) - //Flashes of danger - //to_chat(src, "Danger Flash") - if(!halbody) - var/list/possible_points = list() - for(var/turf/simulated/floor/F in view(src,world.view)) - possible_points += F - if(possible_points.len) - var/turf/simulated/floor/target = pick(possible_points) - switch(rand(1,4)) - if(1) - halbody = image('icons/mob/human.dmi',target,"husk_l",TURF_LAYER) - if(2,3) - halbody = image('icons/mob/human.dmi',target,"husk_s",TURF_LAYER) - if(4) - halbody = image('icons/mob/alien.dmi',target,"alienother",TURF_LAYER) - // if(5) - // halbody = image('xcomalien.dmi',target,"chryssalid",TURF_LAYER) - - if(client) client.images += halbody - spawn(rand(50,80)) //Only seen for a brief moment. - if(client) client.images -= halbody - halbody = null - if(71 to 72) - //Fake death -// src.sleeping_willingly = 1 - SetSleeping(20) - hal_crit = 1 - hal_screwyhud = 1 - spawn(rand(50,100)) -// src.sleeping_willingly = 0 - SetSleeping(0) - hal_crit = 0 - hal_screwyhud = 0 - handling_hal = 0 - - - - -/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts) - - if(!mocktxt) - - mocktxt = "" - - var/possible_txt = list("Launch Escape Pods","Self-Destruct Sequence","\[Swipe ID\]","De-Monkify",\ - "Reticulate Splines","Plasma","Open Valve","Lockdown","Nerf Airflow","Kill Traitor","Nihilism",\ - "OBJECTION!","Arrest Stephen Bowman","Engage Anti-Trenna Defenses","Increase Site Manager IQ","Retrieve Arms",\ - "Play Charades","Oxygen","Inject BeAcOs","Ninja Lizards","Limit Break","Build Sentry") - - if(mid_txts) - while(mid_txts.len) - var/mid_txt = pick(mid_txts) - mocktxt += mid_txt - mid_txts -= mid_txt - - while(buttons.len) - - var/button = pick(buttons) - - var/button_txt = pick(possible_txt) - - mocktxt += "[button_txt]
" - - buttons -= button - possible_txt -= button_txt - - return start_txt + mocktxt + end_txt + "" - -/proc/check_panel(mob/M) - if (istype(M, /mob/living/carbon/human) || istype(M, /mob/living/silicon/ai)) - if(M.hallucination < 15) - return 1 - return 0*/ - -/obj/effect/fake_attacker +/obj/effect/mob_hallucination icon = null icon_state = null name = "" @@ -226,8 +74,6 @@ Gunshots/explosions/opening doors/less rare audio (done) anchored = 1 opacity = 0 var/mob/living/carbon/human/my_target = null - var/weapon_name = null - var/obj/item/weap = null var/image/stand_icon = null var/image/currentimage = null var/icon/base = null @@ -236,45 +82,36 @@ Gunshots/explosions/opening doors/less rare audio (done) var/image/left var/image/right var/image/up - var/collapse var/image/down + var/halaction - var/health = 100 - -/obj/effect/fake_attacker/attackby(var/obj/item/P as obj, mob/user as mob) +/obj/effect/mob_hallucination/attackby(var/obj/item/P as obj, mob/user as mob) step_away(src,my_target,2) for(var/mob/M in oviewers(world.view,my_target)) to_chat(M, "[my_target] flails around wildly.") - my_target.show_message("[src] has been attacked by [my_target] ", 1) //Lazy. - - src.health -= P.force - + my_target.show_message("[src] has been attacked by [my_target] ", 1) return -/obj/effect/fake_attacker/Crossed(var/mob/M, somenumber) +/obj/effect/mob_hallucination/Crossed(var/mob/M, oldloc) if(M == my_target) step_away(src,my_target,2) if(prob(30)) for(var/mob/O in oviewers(world.view , my_target)) to_chat(O, "[my_target] stumbles around.") -/obj/effect/fake_attacker/Initialize() +/obj/effect/mob_hallucination/Initialize() . = ..() QDEL_IN(src, 30 SECONDS) - step_away(src,my_target,2) - spawn attack_loop() + START_PROCESSING(SSobj, src) -/obj/effect/fake_attacker/Destroy() +/obj/effect/mob_hallucination/Destroy() if(my_target) my_target.hallucinations -= src + STOP_PROCESSING(SSobj, src) return ..() - -/obj/effect/fake_attacker/proc/updateimage() -// qdel(src.currentimage) - - +/obj/effect/mob_hallucination/proc/updateimage() if(src.dir == NORTH) qdel(src.currentimage) src.currentimage = new /image(up,src) @@ -289,128 +126,64 @@ Gunshots/explosions/opening doors/less rare audio (done) src.currentimage = new /image(left,src) my_target << currentimage +/obj/effect/mob_hallucination/process() + var/mob/living/carbon/human/H = my_target + sleep(rand(5,20)) + if(get_dist(src, H) == 0) + step_away(src, H, 2) + if(prob(50) && get_dist(src, H) > 1 && halaction != "ignoring") + src.set_dir(get_dir(src, H)) + step_towards(src, H) + updateimage() + else if(prob(5)) + if(halaction == "goodvoice") + var/list/msg_list = list("We are all one with the cosmos.", "Wow!", "I'm glad you're here.", "We're safe here.", + "You look amazing!", "I forgive you.", "Everything is taken care of.", "You don't need to worry.", "Follow your bliss.", + "It's all going to turn out just fine.", "The universe understands you.", "The future is all assured.", "You are healing.", + "In a gentle way, you can shake the world...", "Endless opportunities flow from you.", "Keep going!") + if(name != "") + to_chat(H, "[name] says, \"[pick(msg_list)]\"") + else + to_chat(H, "A hazy figure says, \"[pick(msg_list)]\"") + if(halaction == "badvoice") + var/list/msg_list = list("Your friends are lying.", "You shouldn't have done that.", "Haven't you forgotten something?", + "Mind your own business.", "They were right, you know.", "You aren't supposed to be here.", "We're watching you.", "Don't look at me.", + "You should be ashamed of yourself.", "Get out of here!", "You disgust me.", "The world is closing in.", "It's all your fault.", + "They're coming for you.", "It's only a matter of time.", "You ruined it.", "Nothing you do matters.", "You're wasting their time.", + "It wasn't an accident.") + if(name != "") + to_chat(H, "[name] says, \"[pick(msg_list)]\"") + else + to_chat(H, "A hazy figure says, \"[pick(msg_list)]\"") + if(halaction == "ignoring") + step_away(src, H, 3) + if(prob(5)) + to_chat(H, "No one seems to know you're there...") -/obj/effect/fake_attacker/proc/attack_loop() - while(1) - sleep(rand(5,10)) - if(src.health < 0) - collapse() - continue - if(get_dist(src,my_target) > 1) - src.set_dir(get_dir(src,my_target)) - step_towards(src,my_target) - updateimage() - else - if(prob(15)) - if(weapon_name) - my_target << sound(pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')) - my_target.show_message("[my_target] has been attacked with [weapon_name] by [src.name] ", 1) - my_target.halloss += 8 - if(prob(20)) my_target.eye_blurry += 3 - if(prob(33)) - if(!locate(/obj/effect/overlay) in my_target.loc) - fake_blood(my_target) - else - my_target << sound(pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg')) - my_target.show_message("[src.name] has punched [my_target]!", 1) - my_target.halloss += 4 - if(prob(33)) - if(!locate(/obj/effect/overlay) in my_target.loc) - fake_blood(my_target) - - if(prob(15)) - step_away(src,my_target,2) - -/obj/effect/fake_attacker/proc/collapse() - collapse = 1 - updateimage() - -/proc/fake_blood(var/mob/target) - var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc) - O.name = "blood" - var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1) - target << I - spawn(300) - qdel(O) - return - -var/global/list/non_fakeattack_weapons = list(/obj/item/gun/projectile, /obj/item/ammo_magazine/s357,\ - /obj/item/gun/energy/crossbow, /obj/item/melee/energy/sword,\ - /obj/item/storage/box/syndicate, /obj/item/storage/box/emps,\ - /obj/item/cartridge/syndicate, /obj/item/clothing/under/chameleon,\ - /obj/item/clothing/shoes/syndigaloshes, /obj/item/card/id/syndicate,\ - /obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\ - /obj/item/chameleon, /obj/item/card/emag,\ - /obj/item/storage/toolbox/syndicate, /obj/item/aiModule,\ - /obj/item/radio/headset/syndicate, /obj/item/plastique,\ - /obj/item/powersink, /obj/item/storage/box/syndie_kit,\ - /obj/item/toy/syndicateballoon, /obj/item/gun/energy/captain,\ - /obj/item/hand_tele, /obj/item/rcd, /obj/item/tank/jetpack,\ - /obj/item/clothing/under/rank/captain, /obj/item/aicard,\ - /obj/item/clothing/shoes/magboots, /obj/item/blueprints, /obj/item/disk/nuclear,\ - /obj/item/clothing/suit/space/void, /obj/item/tank) - -/proc/fake_attack(var/mob/living/target) +/proc/mob_hallucinate(var/mob/living/carbon/target) var/list/possible_clones = new/list() var/mob/living/carbon/human/clone = null - var/clone_weapon = null for(var/mob/living/carbon/human/H in living_mob_list) if(H.stat || H.lying) continue possible_clones += H -// clone = H -// break //changed the code a bit. Less randomised, but less work to do. Should be ok, world.contents aren't stored in any particular order. - if(!possible_clones.len) return clone = pick(possible_clones) if(!clone) return - //var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(outside_range(target)) - var/obj/effect/fake_attacker/F = new/obj/effect/fake_attacker(target.loc) - if(clone.l_hand) - if(!(locate(clone.l_hand) in non_fakeattack_weapons)) - clone_weapon = clone.l_hand.name - F.weap = clone.l_hand - else if (clone.r_hand) - if(!(locate(clone.r_hand) in non_fakeattack_weapons)) - clone_weapon = clone.r_hand.name - F.weap = clone.r_hand + var/obj/effect/mob_hallucination/MH = new/obj/effect/mob_hallucination(target.loc) - F.name = clone.name - F.my_target = target - F.weapon_name = clone_weapon - target.hallucinations += F + MH.name = clone.name + MH.my_target = target + target.hallucinations += MH + if(target.halmob_action) + MH.halaction = target.halmob_action + MH.left = image(clone,dir = WEST) + MH.right = image(clone,dir = EAST) + MH.up = image(clone,dir = NORTH) + MH.down = image(clone,dir = SOUTH) - - F.left = image(clone,dir = WEST) - F.right = image(clone,dir = EAST) - F.up = image(clone,dir = NORTH) - F.down = image(clone,dir = SOUTH) - -// F.base = new /icon(clone.stand_icon) -// F.currentimage = new /image(clone) - -/* - - - - F.left = new /icon(clone.stand_icon,dir=WEST) - for(var/icon/i in clone.overlays) - F.left.Blend(i) - F.up = new /icon(clone.stand_icon,dir=NORTH) - for(var/icon/i in clone.overlays) - F.up.Blend(i) - F.down = new /icon(clone.stand_icon,dir=SOUTH) - for(var/icon/i in clone.overlays) - F.down.Blend(i) - F.right = new /icon(clone.stand_icon,dir=EAST) - for(var/icon/i in clone.overlays) - F.right.Blend(i) - - target << F.up - */ - - F.updateimage() + MH.updateimage() \ No newline at end of file diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 87b3bc6c4e..40d5108a3a 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -345,3 +345,6 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds) /obj/item/seeds/wurmwoad seed_type = "wurmwoad" + +/obj/item/seeds/nutmeg + seed_type = "nutmeg" diff --git a/code/modules/hydroponics/seedtypes/nutmeg.dm b/code/modules/hydroponics/seedtypes/nutmeg.dm new file mode 100644 index 0000000000..939f87c4cd --- /dev/null +++ b/code/modules/hydroponics/seedtypes/nutmeg.dm @@ -0,0 +1,20 @@ +/datum/seed/nutmeg + name = "nutmeg" + seed_name = "nutmeg" + display_name = "nutmeg" + kitchen_tag = "nutmeg" + chems = list("nutriment" = list(1,15), "dmt" = list(1,2)) + +/datum/seed/nutmeg/New() + ..() + set_trait(TRAIT_HARVEST_REPEAT,1) + set_trait(TRAIT_MATURATION,6) + set_trait(TRAIT_PRODUCTION,5) + set_trait(TRAIT_YIELD,3) + set_trait(TRAIT_POTENCY,8) + set_trait(TRAIT_PRODUCT_ICON,"nutmeg") + set_trait(TRAIT_PRODUCT_COLOUR,"#5a382f") + set_trait(TRAIT_PLANT_COLOUR,"#397437") + set_trait(TRAIT_PLANT_ICON,"bush2") + set_trait(TRAIT_IDEAL_LIGHT, 6) + set_trait(TRAIT_WATER_CONSUMPTION, 6) \ No newline at end of file diff --git a/code/modules/lore_codex/legal_code_data/corporate_regulations.dm b/code/modules/lore_codex/legal_code_data/corporate_regulations.dm index ade1ff83e3..ad8575176d 100644 --- a/code/modules/lore_codex/legal_code_data/corporate_regulations.dm +++ b/code/modules/lore_codex/legal_code_data/corporate_regulations.dm @@ -19,7 +19,8 @@ children = list( /datum/lore/codex/page/not_contraband, /datum/lore/codex/page/contraband_controlled, - /datum/lore/codex/page/contraband_restricted + /datum/lore/codex/page/contraband_restricted, + /datum/lore/codex/page/drug_contraband ) /datum/lore/codex/page/not_contraband @@ -29,7 +30,6 @@
  • Blades or other Equipment which the possessor needs in order to fulfil their role onboard the facility, \ such as a kitchen knife for culinary personnel.
  • \
  • Handheld Flashes, which are useful for self-defense, as well as building certain machinery.
  • \ -
  • \ " /datum/lore/codex/page/contraband_controlled @@ -41,11 +41,10 @@

    \ The following objects are 'controlled'.\ " /datum/lore/codex/page/contraband_restricted @@ -61,10 +60,34 @@
  • Lethal Guns, meaning guns which possess the capability to kill someone. Functional ballistic weaponry can be loaded \ with ammunition that is lethal, meaning it falls under this. Energy weapons lacking a lethal mode, such as tasers, do not fall under this. \ Weapons which emit electromagnetic pulses, sometimes called 'Ionic' weapons, are considered lethal, as they are lethal to synthetics.
  • \ -
  • Narcotic Drugs, such as Mindbreaker.
  • \ +
  • Illegal Drugs, such as Royale.
  • \
  • Illicit Identification Cards, which includes forgeries, as well as ID cards designed to tamper with electronics.
  • \ " +/datum/lore/codex/page/drug_contraband + name = "Legal Status of Drugs" + data = "If possession, creation, or distribution of a drug is a corporate or law violation depends entirely on the drug. The legal age for \ + recreational use of any legal drug in Vir is 18. The most commonly found drugs and their legal status are as follows: \ +
    " + /datum/lore/codex/page/corporate_punishments name = "Punishments (Corporate)" data = "Violations of Corporate Regulations can be resolved in a wide variety of ways. The Command staff on-board the facility \ diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 44a6408804..e415895d3e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1066,10 +1066,7 @@ if(hallucination) if(hallucination >= 20 && !(species.flags & (NO_POISON|IS_PLANT|NO_HALLUCINATION)) ) - if(prob(3)) - fake_attack(src) - if(!handling_hal) - spawn handle_hallucinations() //The not boring kind! + handle_hallucinations() if(client && prob(5)) client.dir = pick(2,4,8) spawn(rand(20,50)) @@ -1107,7 +1104,7 @@ if(client || sleeping > 3) AdjustSleeping(-1) throw_alert("asleep", /obj/screen/alert/asleep) - if( prob(2) && health && !hal_crit && client ) + if( prob(2) && health && client ) spawn(0) emote("snore") //CONSCIOUS diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 8b9f2eecd6..931e382b4b 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -22,7 +22,7 @@ var/max_nutrition = MAX_NUTRITION var/hallucination = 0 //Directly affects how long a mob will hallucinate for - var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm + var/list/atom/hallucinations = list() //A list of hallucinated people. See hallucinations.dm var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. var/base_attack_cooldown = DEFAULT_ATTACK_COOLDOWN diff --git a/code/modules/reagents/machinery/chem_master.dm b/code/modules/reagents/machinery/chem_master.dm index c34a2fa4e9..c4e1cf9241 100644 --- a/code/modules/reagents/machinery/chem_master.dm +++ b/code/modules/reagents/machinery/chem_master.dm @@ -1,6 +1,6 @@ /obj/machinery/chem_master name = "ChemMaster 3000" - desc = "Used to seperate and package chemicals in to patches, pills, or bottles. Warranty void if used to create Space Drugs." + desc = "Used to seperate and package chemicals in to patches, pills, or bottles. Warranty void if used to create illicit drugs." density = 1 anchored = 1 icon = 'icons/obj/chemical.dmi' diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm index 5683b7ff4d..7481c4bff5 100644 --- a/code/modules/reagents/reactions/instant/drinks.dm +++ b/code/modules/reagents/reactions/instant/drinks.dm @@ -1263,3 +1263,10 @@ result = "fusionnaire" required_reagents = list("lemonjuice" = 3, "vodka" = 2, "schnapps_pep" = 1, "schnapps_lem" = 1, "rum" = 1, "ice" = 1) result_amount = 9 + +/decl/chemical_reaction/instant/drinks/ayahuasca + name = "Ayahuasca" + id = "ayahuasca" + result = "ayahuasca" + required_reagents = list("water" = 1, "dmt" = 2, "honey" = 1) + result_amount = 3 \ No newline at end of file diff --git a/code/modules/reagents/reactions/instant/instant.dm b/code/modules/reagents/reactions/instant/instant.dm index 9c274eaf75..38d84078d7 100644 --- a/code/modules/reagents/reactions/instant/instant.dm +++ b/code/modules/reagents/reactions/instant/instant.dm @@ -266,11 +266,18 @@ required_reagents = list("bicaridine" = 1, "iron" = 2, "spidertoxin" = 1) result_amount = 2 +/decl/chemical_reaction/instant/royale + name = "Royale" + id = "royale" + result = "royale" + required_reagents = list("copper" = 1, "phosphorus" = 1, "sulfur" = 1) + result_amount = 3 + /decl/chemical_reaction/instant/hyperzine name = "Hyperzine" id = "hyperzine" result = "hyperzine" - required_reagents = list("sugar" = 1, "phosphorus" = 1, "sulfur" = 1) + required_reagents = list("royale" = 1, "sugar" = 1, "phosphorus" = 1) result_amount = 3 /decl/chemical_reaction/instant/stimm @@ -550,6 +557,34 @@ required_reagents = list("hydrogen" = 2, "carbon" = 2, "ammonia" = 2) result_amount = 6 +/decl/chemical_reaction/instant/snowflake + name = "Snowflake" + id = "snowflake" + result = "snowflake" + required_reagents = list("frostoil" = 1, "fuel" = 1, "sulfur" = 1) + result_amount = 1 + +/decl/chemical_reaction/instant/sinkhole + name = "Sinkhole" + id = "sinkhole" + result = "sinkhole" + required_reagents = list("enzyme" = 1, "bicaridine" = 1, "tramadol" = 1) + result_amount = 1 + +/decl/chemical_reaction/instant/schnappi + name = "Schnappi" + id = "schnappi" + result = "schnappi" + required_reagents = list("ammonia" = 1, "tramadol" = 1, "cleaner" = 1, "potassium" = 1, "phosphorus" = 1, "fuel" = 1) + result_amount = 6 + +/decl/chemical_reaction/instant/colorspace + name = "Colorspace" + id = "colorspace" + result = "colorspace" + required_reagents = list("hydrogen" = 1, "ethanol" = 1, "silicon" = 1) + result_amount = 1 + /* Solidification */ /decl/chemical_reaction/instant/solidification diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 0ce2fcd526..e0cef49359 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -328,9 +328,8 @@ /obj/item/reagent_containers/pill/zoom/Initialize() . = ..() - reagents.add_reagent("impedrezene", 10) + reagents.add_reagent("royale", 10) reagents.add_reagent("synaptizine", 5) - reagents.add_reagent("hyperzine", 5) color = reagents.get_color() /obj/item/reagent_containers/pill/diet @@ -342,3 +341,39 @@ . = ..() reagents.add_reagent("lipozine", 2) color = reagents.get_color() + +//// Recreational drugs for loadout +/obj/item/reagent_containers/pill/unidentified + name = "mysterious pill" + desc = "You're not quite sure what's in this..." + icon_state = "pill1" + +/obj/item/reagent_containers/pill/unidentified/bliss/Initialize() + . = ..() + reagents.add_reagent("bliss", 10) + color = reagents.get_color() + +/obj/item/reagent_containers/pill/unidentified/snowflake/Initialize() + . = ..() + reagents.add_reagent("snowflake", 10) + color = reagents.get_color() + +/obj/item/reagent_containers/pill/unidentified/royale/Initialize() + . = ..() + reagents.add_reagent("royale", 5) + color = reagents.get_color() + +/obj/item/reagent_containers/pill/unidentified/sinkhole/Initialize() + . = ..() + reagents.add_reagent("sinkhole", 5) + color = reagents.get_color() + +/obj/item/reagent_containers/pill/unidentified/colorspace/Initialize() + . = ..() + reagents.add_reagent("colorspace", 10) + color = reagents.get_color() + +/obj/item/reagent_containers/pill/unidentified/schnappi/Initialize() + . = ..() + reagents.add_reagent("schnappi", 5) + color = reagents.get_color() \ No newline at end of file diff --git a/code/modules/reagents/reagents/drugs.dm b/code/modules/reagents/reagents/drugs.dm index 2df4c6f8a3..f68405ea01 100644 --- a/code/modules/reagents/reagents/drugs.dm +++ b/code/modules/reagents/reagents/drugs.dm @@ -109,7 +109,6 @@ M.adjustToxLoss(-2) M.druggy = max(M.druggy, drug_strength) - M.heal_organ_damage(6) M.adjustOxyLoss(-3) M.AdjustStunned(-1) if(prob(5) && prob_proc == TRUE) @@ -144,7 +143,8 @@ M.druggy = max(M.druggy, 30) var/effective_dose = dose - if(issmall(M)) effective_dose *= 2 + if(issmall(M)) + effective_dose *= 2 if(effective_dose < 1 * threshold) M.apply_effect(3, STUTTER) M.make_dizzy(5) @@ -206,6 +206,240 @@ color = "#181818" high_messages = FALSE +/datum/reagent/drugs/snowflake + name = "Snowflake" + id = "snowflake" + description = "A recreational stimulant refined from frostoil found in certain plants." + taste_description = "metallic and bitter" + overdose = 15 + color = "#bbd7eb" + high_message_list = list("You feel euphoric!", + "You feel unstoppable.", + "You just can't seem to stop sniffling...", + "You feel impatient...", + "Your eyes feel a bit dry.") + sober_message_list = list("You feel a bit more sluggish.", + "You feel terrible...", + "You feel pretty dehydrated.") + +/datum/reagent/drugs/snowflake/affect_blood(mob/living/carbon/M, alien, removed) + ..() + + M.add_chemical_effect(CE_PAINKILLER,3) + if(prob(12) && prob_proc == TRUE) + M.emote(pick("shiver", "sniff")) + prob_proc = FALSE + +/datum/reagent/drugs/snowflake/overdose(mob/living/carbon/M, alien, removed) + if(prob(35) && prob_proc == TRUE) + M.vomit() + M.adjustToxLoss(5) + M.adjustBrainLoss(1) + ..() + +/datum/reagent/drugs/royale + name = "Royale" + id = "royale" + description = "A drug used in the process of making Hyperzine. A powerful stimulant on its own, it comes with significant drawbacks and potential for misuse." + taste_description = "something faint and odious" + color = "#dbd4ba" + overdose = 10 + high_message_list = list("You feel energized!", + "You're just not going fast enough. Faster!", + "You could out-run the world if you tried.", + "It's almost painful to sit still...", + "Is everything going in slow motion?") + sober_message_list = list("Everything is suddenly... sluggish.", + "You feel like trash, but you can finally sit still...") + +/datum/reagent/drugs/royale/affect_blood(mob/living/carbon/M, alien, removed) + ..() + if(alien == IS_TAJARA) /// Similar to hyperzine... + removed *= 1.25 + if(alien == IS_SLIME) + M.make_jittery(4) + if(dose >= 5) + M.adjust_nutrition(-removed * 2) + if(prob(5) && prob_proc == TRUE) + M.emote(pick("twitch", "blink_r", "shiver")) + M.add_chemical_effect(CE_PAINKILLER, 20) /// With chance of pain numbing... + prob_proc = FALSE + M.add_chemical_effect(CE_SPEEDBOOST, 1) /// And less speed boost. + +/datum/reagent/drugs/royale/overdose(mob/living/carbon/M, alien, removed) + if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) + for(var/i = 0, i < 4, i++) + step(M, pick(cardinal)) + if(prob(5)) + M.emote("laugh") + if(prob(5)) + M.visible_message("[M]'s hands flip out and flail everywhere!") + var/obj/item/I = M.get_active_hand() + if(I) + M.drop_item() + M.adjustToxLoss(1) + M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1)) + ..() + +/datum/reagent/drugs/sinkhole + name = "Sinkhole" + id = "sinkhole" + description = "A painkiller and recreational drug that hampers brain function." + taste_description = "a grainy paste" + color = "#462d35" + high_message_list = list("You feel euphoric!", + "You have a strange sense of calm and excitement all at once.", + "You feel... sleepy.", + "You feel dizzy.") + sober_message_list = list("Your thoughts are in a fog...", "You just need to lay down and rest.") + +/datum/reagent/drugs/sinkhole/affect_blood(mob/living/carbon/M, alien, removed) + ..() + + M.add_chemical_effect(CE_PAINKILLER, 40) + M.adjustBrainLoss(0.25) + if(prob(5) && prob_proc == TRUE) + M.emote(pick("shiver", "twitch")) + prob_proc = FALSE + +/datum/reagent/drugs/sinkhole/overdose(mob/living/carbon/M, alien, removed) + if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) + for(var/i = 0, i < 4, i++) + step(M, pick(cardinal)) + M.adjustToxLoss(2) + M.drowsyness = max(M.drowsyness, 10) + M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1)) + ..() + +/datum/reagent/drugs/dmt + name = "Dimethyltryptamine" + id = "dmt" + description = "A psychedelic compound found naturally in certain plants." + taste_description = "plastic" + taste_mult = 1.8 + color = "#d4bc8e" + high_message_list = list("You feel a sense of belonging.", + "Are you being watched...?", + "The boundaries of the universe feel limitless...") + sober_message_list = list("You feel painfully grounded again.") + +/datum/reagent/drugs/dmt/affect_blood(mob/living/carbon/M, alien, removed) + ..() + + if(alien == IS_TAJARA) + removed *= 1.25 + if(prob(15) && prob_proc == TRUE) + M.emote(pick("deathgasp", "sigh", "smile")) + prob_proc = FALSE + + var/drug_strength = 30 + + if(alien == IS_SKRELL) + drug_strength *= 0.8 + if(alien == IS_SLIME) + drug_strength *= 1.2 + M.druggy = max(M.druggy, 5) + M.hallucination = max(M.hallucination, drug_strength) + +/datum/reagent/drugs/ayahuasca + name = "Ayahuasca" + id = "ayahuasca" + description = "A brew of herbs known for religious use and spiritual experience." + taste_description = "strong and bitter herbs" + color = "#5b5f46" + high_message_list = list("You feel at one with the universe.", + "You feel in tune with the vibrations of the cosmos.", + "The spirits are with you...", + "Everything has a harmony, and you are part of it.") + sober_message_list = list("The presence of the spirits fades.", + "You feel grounded once again.") + +/datum/reagent/drugs/ayahuasca/affect_blood(mob/living/carbon/M, alien, removed) + if(alien == IS_TAJARA) + removed *= 1.25 + ..() + if(prob(15) && prob_proc == TRUE) + M.emote(pick("deathgasp", "moan", "smile", "groan")) + prob_proc = FALSE + var/drug_strength = 60 + + if(alien == IS_SKRELL) + drug_strength *= 0.8 + + if(alien == IS_SLIME) + drug_strength *= 1.2 + M.druggy = max(M.druggy, 10) + M.hallucination = max(M.hallucination, drug_strength) + +/datum/reagent/drugs/colorspace + name = "Colorspace" + id = "colorspace" + description = "A psychedelic drug that alters thought and perception." + taste_description = "flavorless paste" + color = "#a7a6a4" + high_message_list = list("The floor is melting...", + "Everything is so much brighter! Wow!", + "Everything is shifting around you.", + "Your skin tickles.") + sober_message_list = list("The world grows still again.", "Colors seem duller.") + +/datum/reagent/drugs/colorspace/affect_blood(mob/living/carbon/M, alien, removed) + ..() + + var/drug_strength = 80 + + if(alien == IS_SKRELL) + drug_strength *= 0.8 + + if(alien == IS_SLIME) + drug_strength *= 1.2 + + M.druggy = max(M.druggy, 15) + M.hallucination = max(M.hallucination, drug_strength) + +/datum/reagent/drugs/schnappi + name = "Schnappi" + id = "schnappi" + description = "A dangerous and impure opiate that can cause necrosis in prolonged use." + color = "#0264B4" + taste_description = "a little crocodile" /// Schnee Schnii Schnappi, das kleiner krokodil... + overdose = 15 + high_message_list = list("You feel pretty chill.", + "Your skin feels all rough and dry.", + "You feel too chill...!") + sober_message_list = list("You're full of regret...", "Is it finally over?") + +/datum/reagent/drugs/schnappi/affect_blood(mob/living/carbon/M, alien, removed) + ..() + M.drowsyness = max(M.drowsyness, 5) + M.add_chemical_effect(CE_PAINKILLER, 1) + if(prob(15) && prob_proc == TRUE) + M.adjustToxLoss(2) + prob_proc = FALSE + if(prob(10) && prob_proc == TRUE) + M.visible_message("[M] looks dazed!") + M.Stun(5) + M.emote("drool") + prob_proc = FALSE + +/datum/reagent/drugs/schnappi/overdose(mob/living/carbon/M, alien, removed) + M.drowsyness = max(M.drowsyness, 10) + if(prob(10)) + M.visible_message("[M] looks dazed!") + M.Stun(3) + M.emote("drool") + else if(prob(10)) + to_chat(M, "Your skin is cracking and bleeding!") + M.adjustBruteLoss(5) + M.adjustToxLoss(1) + M.emote("cry") + else if(prob(10)) + M.visible_message("[M] sways and falls over!") + M.adjustToxLoss(10) + M.Weaken(8) + M.emote("faint") + ..() + /*/////////////////////////////////////////////////////////////////////////// /// PSYCHIATRIC DRUGS ///// /// ///// diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm index 20432a574d..dbbfb0d079 100644 --- a/code/modules/reagents/reagents/medicine.dm +++ b/code/modules/reagents/reagents/medicine.dm @@ -608,7 +608,7 @@ ..() if(prob(5)) M.emote(pick("twitch", "blink_r", "shiver")) - M.add_chemical_effect(CE_SPEEDBOOST, 1) + M.add_chemical_effect(CE_SPEEDBOOST, 3) /datum/reagent/hyperzine/overdose(var/mob/living/carbon/M, var/alien, var/removed) ..() diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi index cb0e503692..275514d8ab 100644 Binary files a/icons/obj/hydroponics_products.dmi and b/icons/obj/hydroponics_products.dmi differ diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi index e421881073..ff46c0baf7 100644 Binary files a/icons/obj/seeds.dmi and b/icons/obj/seeds.dmi differ diff --git a/polaris.dme b/polaris.dme index 9a798bfbca..173ef0cc3c 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1577,6 +1577,7 @@ #include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" #include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" +#include "code\modules\client\preference_setup\loadout\loadout_contraband.dm" #include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm" #include "code\modules\client\preference_setup\loadout\loadout_cyberware.dm" #include "code\modules\client\preference_setup\loadout\loadout_ears.dm" @@ -1994,6 +1995,7 @@ #include "code\modules\hydroponics\seedtypes\malanitear.dm" #include "code\modules\hydroponics\seedtypes\mushrooms.dm" #include "code\modules\hydroponics\seedtypes\nettles.dm" +#include "code\modules\hydroponics\seedtypes\nutmeg.dm" #include "code\modules\hydroponics\seedtypes\onion.dm" #include "code\modules\hydroponics\seedtypes\peanuts.dm" #include "code\modules\hydroponics\seedtypes\pineapple.dm" diff --git a/sound/hallucinations/serithi/creepy1.ogg b/sound/hallucinations/serithi/creepy1.ogg new file mode 100644 index 0000000000..302b2413b1 Binary files /dev/null and b/sound/hallucinations/serithi/creepy1.ogg differ diff --git a/sound/hallucinations/serithi/creepy2.ogg b/sound/hallucinations/serithi/creepy2.ogg new file mode 100644 index 0000000000..d0a45ff3a1 Binary files /dev/null and b/sound/hallucinations/serithi/creepy2.ogg differ diff --git a/sound/hallucinations/serithi/creepy3.ogg b/sound/hallucinations/serithi/creepy3.ogg new file mode 100644 index 0000000000..33847a8e7c Binary files /dev/null and b/sound/hallucinations/serithi/creepy3.ogg differ