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 + "