mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Merge pull request #2434 from Aurorablade/TooSpoopy
Fethas Carnival of Horrors part 3: Paranormal Activity
This commit is contained in:
@@ -177,4 +177,19 @@
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5,)
|
||||
tools = list(/obj/item/weapon/screwdriver)
|
||||
time = 200
|
||||
time = 200
|
||||
|
||||
/datum/table_recipe/spooky_camera
|
||||
name = "Camera Obscura"
|
||||
result = /obj/item/device/camera/spooky
|
||||
time = 15
|
||||
reqs = list(/obj/item/device/camera = 1,
|
||||
/datum/reagent/holywater = 10)
|
||||
parts = list(/obj/item/device/camera = 1)
|
||||
|
||||
/datum/table_recipe/notreallysoap
|
||||
name = "Homemade Soap"
|
||||
result = /obj/item/weapon/soap/ducttape
|
||||
time = 100
|
||||
reqs = list(/obj/item/stack/tape_roll = 1,
|
||||
/datum/reagent/liquidgibs = 10)
|
||||
@@ -150,6 +150,24 @@
|
||||
var/icon_on = "camera"
|
||||
var/icon_off = "camera_off"
|
||||
var/size = 3
|
||||
var/see_ghosts = 0 //for the spoop of it
|
||||
|
||||
|
||||
/obj/item/device/camera/spooky/CheckParts()
|
||||
var/obj/item/device/camera/C = locate(/obj/item/device/camera) in contents
|
||||
if(C)
|
||||
pictures_max = C.pictures_max
|
||||
pictures_left = C.pictures_left
|
||||
visible_message("[C] has been imbued with godlike power!")
|
||||
qdel(C)
|
||||
|
||||
|
||||
var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","shadow","ghostian2")
|
||||
|
||||
/obj/item/device/camera/spooky
|
||||
name = "camera obscura"
|
||||
desc = "A polaroid camera, some say it can see ghosts!"
|
||||
see_ghosts = 1
|
||||
|
||||
/obj/item/device/camera/verb/change_size()
|
||||
set name = "Set Photo Focus"
|
||||
@@ -184,7 +202,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/camera/proc/get_icon(list/turfs, turf/center)
|
||||
/obj/item/device/camera/proc/get_icon(list/turfs, turf/center,mob/user)
|
||||
|
||||
//Bigger icon base to capture those icons that were shifted to the next tile
|
||||
//i.e. pretty much all wall-mounted machinery
|
||||
@@ -199,8 +217,20 @@
|
||||
atoms.Add(the_turf);
|
||||
// As well as anything that isn't invisible.
|
||||
for(var/atom/A in the_turf)
|
||||
if(A.invisibility) continue
|
||||
atoms.Add(A)
|
||||
if(A.invisibility )
|
||||
if(see_ghosts && istype(A,/mob/dead/observer))
|
||||
var/mob/dead/observer/O = A
|
||||
if(O.following)
|
||||
continue
|
||||
if(user.mind && !(user.mind.assigned_role == "Chaplain"))
|
||||
atoms.Add(image('icons/mob/mob.dmi', O.loc, pick(SpookyGhosts), 4, SOUTH))
|
||||
else
|
||||
atoms.Add(image('icons/mob/mob.dmi', O.loc, "ghost", 4, SOUTH))
|
||||
else//its not a ghost
|
||||
continue
|
||||
else//not invisable, not a spookyghost add it.
|
||||
atoms.Add(A)
|
||||
|
||||
|
||||
// Sort the atoms into their layers
|
||||
var/list/sorted = sort_atoms_by_layer(atoms)
|
||||
@@ -235,21 +265,35 @@
|
||||
|
||||
/obj/item/device/camera/proc/get_mobs(turf/the_turf as turf)
|
||||
var/mob_detail
|
||||
for(var/mob/living/carbon/A in the_turf)
|
||||
if(A.invisibility) continue
|
||||
var/holding = null
|
||||
if(A.l_hand || A.r_hand)
|
||||
if(A.l_hand) holding = "They are holding \a [A.l_hand]"
|
||||
if(A.r_hand)
|
||||
if(holding)
|
||||
holding += " and \a [A.r_hand]"
|
||||
for(var/mob/M in the_turf)
|
||||
if(M.invisibility)
|
||||
if(see_ghosts && istype(M,/mob/dead/observer))
|
||||
var/mob/dead/observer/O = M
|
||||
if(O.following)
|
||||
continue
|
||||
if(!mob_detail)
|
||||
mob_detail = "You can see a g-g-g-g-ghooooost! "
|
||||
else
|
||||
holding = "They are holding \a [A.r_hand]"
|
||||
mob_detail += "You can also see a g-g-g-g-ghooooost!"
|
||||
else
|
||||
continue
|
||||
|
||||
if(!mob_detail)
|
||||
mob_detail = "You can see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
|
||||
else
|
||||
mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
|
||||
var/holding = null
|
||||
|
||||
if(istype(M, /mob/living/carbon))
|
||||
var/mob/living/carbon/A = M
|
||||
if(A.l_hand || A.r_hand)
|
||||
if(A.l_hand) holding = "They are holding \a [A.l_hand]"
|
||||
if(A.r_hand)
|
||||
if(holding)
|
||||
holding += " and \a [A.r_hand]"
|
||||
else
|
||||
holding = "They are holding \a [A.r_hand]"
|
||||
|
||||
if(!mob_detail)
|
||||
mob_detail = "You can see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. "
|
||||
else
|
||||
mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
|
||||
return mob_detail
|
||||
|
||||
/obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
||||
@@ -263,6 +307,9 @@
|
||||
user << "<span class='notice'>[pictures_left] photos left.</span>"
|
||||
icon_state = icon_off
|
||||
on = 0
|
||||
if(user.mind && !(user.mind.assigned_role == "Chaplain"))
|
||||
if(prob(24))
|
||||
handle_haunt(user)
|
||||
spawn(64)
|
||||
icon_state = icon_on
|
||||
on = 1
|
||||
@@ -298,7 +345,7 @@
|
||||
printpicture(user, P)
|
||||
|
||||
/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag)
|
||||
var/icon/photoimage = get_icon(turfs, target)
|
||||
var/icon/photoimage = get_icon(turfs, target,user)
|
||||
|
||||
var/icon/small_img = icon(photoimage)
|
||||
var/icon/tiny_img = icon(photoimage)
|
||||
@@ -483,3 +530,15 @@
|
||||
talk_into(M, msg)
|
||||
for(var/mob/living/carbon/human/H in watcherslist)
|
||||
H.show_message(text("\blue (Newscaster) [] says, '[]'",M,msg), 1)
|
||||
|
||||
|
||||
|
||||
///hauntings, like hallucinations but more spooky
|
||||
|
||||
/obj/item/device/camera/proc/handle_haunt(mob/user as mob)
|
||||
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')
|
||||
user << pick(creepyasssounds)
|
||||
|
||||
@@ -96,7 +96,7 @@ datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/vo
|
||||
datum/reagent/synthflesh/reaction_turf(var/turf/T, var/volume) //let's make a mess!
|
||||
src = null
|
||||
if(volume >= 5)
|
||||
new /obj/effect/decal/cleanable/blood/gibs(T)
|
||||
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T)
|
||||
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
|
||||
return
|
||||
|
||||
|
||||
@@ -305,6 +305,53 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob)
|
||||
return
|
||||
|
||||
|
||||
/datum/chemical_reaction/soapification
|
||||
name = "Soapification"
|
||||
id = "soapification"
|
||||
result = null
|
||||
required_reagents = list("liquidgibs" = 10, "lye" = 10) // requires two scooped gib tiles
|
||||
min_temp = 374
|
||||
result_amount = 1
|
||||
|
||||
|
||||
/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /obj/item/weapon/soap/homemade(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/candlefication
|
||||
name = "Candlefication"
|
||||
id = "candlefication"
|
||||
result = null
|
||||
required_reagents = list("liquidgibs" = 5, "oxygen" = 5) //
|
||||
min_temp = 374
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /obj/item/candle(location)
|
||||
return
|
||||
|
||||
|
||||
/datum/chemical_reaction/meatification
|
||||
name = "Meatification"
|
||||
id = "meatification"
|
||||
result = null
|
||||
required_reagents = list("liquidgibs" = 10, "nutriment" = 10, "carbon" = 10)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/lye
|
||||
name = "lye"
|
||||
id = "lye"
|
||||
result = "lye"
|
||||
required_reagents = list("sodium" = 1, "hydrogen" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
///Alchemical Reagents
|
||||
|
||||
datum/reagent/eyenewt
|
||||
|
||||
@@ -326,6 +326,30 @@
|
||||
qdel(R)
|
||||
T.Bless()
|
||||
|
||||
|
||||
/datum/reagent/liquidgibs
|
||||
name = "Liquid gibs"
|
||||
id = "liquidgibs"
|
||||
color = "#FF9966"
|
||||
description = "You don't even want to think about what's in here."
|
||||
reagent_state = LIQUID
|
||||
|
||||
/datum/reagent/liquidgibs/reaction_turf(var/turf/T, var/volume) //yes i took it from synthflesh...
|
||||
src = null
|
||||
if(volume >= 5)
|
||||
new /obj/effect/decal/cleanable/blood/gibs/cleangibs(T)
|
||||
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/reagent/lye
|
||||
name = "Lye"
|
||||
id = "lye"
|
||||
description = "Also known as sodium hydroxide."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFFD6" // very very light yellow
|
||||
|
||||
/*
|
||||
/datum/reagent/vaccine
|
||||
//data must contain virus type
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
var/subjectname = ""
|
||||
var/subjectjob = null
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct
|
||||
name = "meat product"
|
||||
desc = "A slab of station reclaimed and chemically processed meat product."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey
|
||||
//same as plain meat
|
||||
|
||||
@@ -953,3 +953,41 @@ var/list/compatible_mobs = list(/mob/living/carbon/human)
|
||||
stage = 1
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob << "<span class = 'notice'> You feel optimistic!</span>"
|
||||
|
||||
/datum/disease2/effect/anxiety
|
||||
name = "Severe Anxiety"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
if(prob(20))
|
||||
mob << "<span class='notice'>You feel anxious.</span>"
|
||||
if(prob(15))
|
||||
mob << "<span class='danger'>You feel butterflies in your stomach.</span>"
|
||||
if(prob(11))
|
||||
mob.visible_message("<span class='danger'>[mob] stumbles around in a panic.</span>", \
|
||||
"<span class='userdanger'>You have a panic attack!</span>")
|
||||
mob.confused += (rand(6,8))
|
||||
mob.jitteriness += (rand(6,8))
|
||||
if(prob(10))
|
||||
mob.visible_message("<span class='danger'>[mob] coughs up butterflies!</span>", \
|
||||
"<span class='userdanger'>You cough up butterflies!</span>")
|
||||
new /mob/living/simple_animal/butterfly(mob.loc)
|
||||
new /mob/living/simple_animal/butterfly(mob.loc)
|
||||
|
||||
/datum/disease2/effect/lycan
|
||||
name = "Lycancoughy"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
if(prob(20))
|
||||
mob << "<span class='notice'>You feel itchy.</span>"
|
||||
if(prob(15))
|
||||
mob << "<span class='danger'>You have the sudden urge for bacon..</span>"
|
||||
if(prob(11))
|
||||
mob.say(pick("WOOF!", "BARK!", "Bark.", "Woof?", "AUUUUUUUUUUUUU!!"))
|
||||
if(prob(10))
|
||||
mob.visible_message("<span class='danger'>[mob] coughs up a dog!!</span>", \
|
||||
"<span class='userdanger'>You cough up a DOG!!!</span>")
|
||||
//yes i KNOW foxes technically are not normal dogs...hush....
|
||||
var/randompup = pick(/mob/living/simple_animal/pet/corgi/puppy,/mob/living/simple_animal/pet/pug,/mob/living/simple_animal/pet/fox)
|
||||
|
||||
new randompup(mob.loc)
|
||||
mob.adjustBruteLoss(rand(1,5))//you just coughed up a CANINIE, you are taking brute loss...
|
||||
Reference in New Issue
Block a user