Hallucinations 2.2 (#24680)

* Hallucinations 2.2

* things you have ate
This commit is contained in:
XDTM
2017-03-06 12:10:19 +01:00
committed by AnturK
parent 312d4aa99d
commit 3d07e850a3
3 changed files with 77 additions and 47 deletions

View File

@@ -221,10 +221,8 @@ var/list/airlock_overlays = list()
return
else /*if(src.justzap)*/
return
else if(user.hallucination > 50 && prob(10) && src.operating == 0)
user << "<span class='userdanger'>You feel a powerful shock course through your body!</span>"
user.staminaloss += 50
user.stunned += 5
else if(user.hallucination > 50 && ishuman(user) && prob(10) && src.operating == 0)
hallucinate_shock(user)
return
if (cyclelinkedairlock)
if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user))
@@ -234,6 +232,34 @@ var/list/airlock_overlays = list()
addtimer(CALLBACK(cyclelinkedairlock, .proc/close), 2)
..()
/obj/machinery/door/airlock/proc/hallucinate_shock(mob/living/user)
var/image/shock_image = image(user, user, dir = user.dir)
var/image/electrocution_skeleton_anim = image('icons/mob/human.dmi', user, icon_state = "electrocuted_base", layer=ABOVE_MOB_LAYER)
shock_image.color = rgb(0,0,0)
shock_image.override = TRUE
electrocution_skeleton_anim.appearance_flags = RESET_COLOR
user << "<span class='userdanger'>You feel a powerful shock course through your body!</span>"
if(user.client)
user.client.images |= shock_image
user.client.images |= electrocution_skeleton_anim
addtimer(CALLBACK(src, .proc/reset_hallucinate_shock_animation, user, shock_image, electrocution_skeleton_anim), 40)
user.playsound_local(get_turf(src), "sparks", 100, 1)
user.staminaloss += 50
user.Stun(2)
user.jitteriness += 1000
user.do_jitter_animation(user.jitteriness)
addtimer(CALLBACK(src, .proc/hallucinate_shock_drop, user), 20)
/obj/machinery/door/airlock/proc/reset_hallucinate_shock_animation(mob/living/user, shock_image, electrocution_skeleton_anim)
if(user.client)
user.client.images.Remove(shock_image)
user.client.images.Remove(electrocution_skeleton_anim)
/obj/machinery/door/airlock/proc/hallucinate_shock_drop(mob/living/user)
user.jitteriness = max(user.jitteriness - 990, 10) //Still jittery, but vastly less
user.Stun(3)
user.Weaken(3)
/obj/machinery/door/airlock/proc/isElectrified()
if(src.secondsElectrified != 0)

View File

@@ -279,14 +279,14 @@ Gunshots/explosions/opening doors/less rare audio (done)
if(target.client)
target.client.images |= fakebroken
target.client.images |= fakerune
target.playsound_local(wall,'sound/effects/meteorimpact.ogg', 150)
target.playsound_local(wall,'sound/effects/meteorimpact.ogg', 150, 1)
bubblegum = new(wall, target)
sleep(10) //ominous wait
var/charged = FALSE //only get hit once
while(get_turf(bubblegum) != landing)
bubblegum.forceMove(get_step_towards(bubblegum, landing))
bubblegum.setDir(get_dir(bubblegum, landing))
target.playsound_local(get_turf(bubblegum), 'sound/effects/meteorimpact.ogg', 150)
target.playsound_local(get_turf(bubblegum), 'sound/effects/meteorimpact.ogg', 150, 1)
shake_camera(target, 2, 1)
if(bubblegum.Adjacent(target) && !charged)
charged = TRUE
@@ -351,37 +351,37 @@ Gunshots/explosions/opening doors/less rare audio (done)
switch(rand(1,5))
if(1) //Laser fight
for(var/i=0,i<hits,i++)
target.playsound_local(null, 'sound/weapons/Laser.ogg', 25)
target.playsound_local(null, 'sound/weapons/Laser.ogg', 25, 1)
if(prob(75))
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/sear.ogg', 25), rand(10,20))
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/sear.ogg', 25, 1), rand(10,20))
else
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/effects/searwall.ogg', 25), rand(10,20))
sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 4))
target.playsound_local(null, get_sfx("bodyfall"), 25)
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/effects/searwall.ogg', 25, 1), rand(10,20))
sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8))
target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
if(2) //Esword fight
target.playsound_local(null, 'sound/weapons/saberon.ogg',15)
target.playsound_local(null, 'sound/weapons/saberon.ogg',15, 1)
for(var/i=0,i<hits,i++)
target.playsound_local(null, 'sound/weapons/blade1.ogg', 25)
sleep(CLICK_CD_MELEE)
target.playsound_local(null, get_sfx("bodyfall"), 25)
target.playsound_local(null, 'sound/weapons/saberoff.ogg', 15)
target.playsound_local(null, 'sound/weapons/blade1.ogg', 25, 1)
sleep(rand(CLICK_CD_MELEE, CLICK_CD_MELEE + 8))
target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
target.playsound_local(null, 'sound/weapons/saberoff.ogg', 15, 1)
if(3) //Gun fight
for(var/i=0,i<hits,i++)
target.playsound_local(null, get_sfx("gunshot"), 25)
if(prob(75))
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/pierce.ogg', 25), rand(10,20))
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/pierce.ogg', 25, 1), rand(10,20))
else
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, "ricochet", 25), rand(10,20))
sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 4))
target.playsound_local(null, get_sfx("bodyfall"), 25)
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, "ricochet", 25, 1), rand(10,20))
sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8))
target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
if(4) //Stunprod + cablecuff
target.playsound_local(null, 'sound/weapons/Egloves.ogg', 40)
target.playsound_local(null, get_sfx("bodyfall"), 25)
target.playsound_local(null, 'sound/weapons/Egloves.ogg', 40, 1)
target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
sleep(20)
target.playsound_local(null, 'sound/weapons/cablecuff.ogg', 15)
target.playsound_local(null, 'sound/weapons/cablecuff.ogg', 15, 1)
if(5) // Tick Tock
for(var/i=0,i<hits,i++)
target.playsound_local(null, 'sound/items/timer.ogg', 25)
target.playsound_local(null, 'sound/items/timer.ogg', 25, 1)
sleep(15)
qdel(src)
@@ -570,7 +570,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
step_away(src,my_target,2)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
my_target.playsound_local(src, P.hitsound)
my_target.playsound_local(src, P.hitsound, 1)
my_target.visible_message("<span class='danger'>[my_target] flails around wildly.</span>", \
"<span class='danger'>[my_target] has attacked [src]!</span>")
@@ -621,7 +621,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
else
if(prob(15))
if(weapon_name)
my_target.playsound_local(my_target, weap.hitsound, weap.get_clamped_volume())
my_target.playsound_local(my_target, weap.hitsound, weap.get_clamped_volume(), 1)
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
my_target.staminaloss += 30
if(prob(20))
@@ -781,12 +781,12 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item
//Strange audio
//src << "Strange Audio"
switch(rand(1,20))
if(1) playsound_local(null,'sound/machines/airlock.ogg', 15)
if(1) playsound_local(null,'sound/machines/airlock.ogg', 15, 1)
if(2)
if(prob(50)) playsound_local(null,'sound/effects/Explosion1.ogg', 50)
else playsound_local(null, 'sound/effects/Explosion2.ogg', 50)
if(3) playsound_local(null, 'sound/effects/explosionfar.ogg', 50)
if(4) playsound_local(null, pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg'), 50)
if(prob(50)) playsound_local(null,'sound/effects/Explosion1.ogg', 50, 1)
else playsound_local(null, 'sound/effects/Explosion2.ogg', 50, 1)
if(3) playsound_local(null, 'sound/effects/explosionfar.ogg', 50, 1)
if(4) playsound_local(null, pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg'), 50, 1)
if(5)
playsound_local(null, 'sound/weapons/ring.ogg', 35)
sleep(15)
@@ -798,19 +798,19 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item
if(8) playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0)
if(9)
//To make it more realistic, I added two gunshots (enough to kill)
playsound_local(null, 'sound/weapons/Gunshot.ogg', 25)
playsound_local(null, 'sound/weapons/Gunshot.ogg', 25, 1)
spawn(rand(10,30))
playsound_local(null, 'sound/weapons/Gunshot.ogg', 25)
playsound_local(null, 'sound/weapons/Gunshot.ogg', 25, 1)
sleep(rand(5,10))
playsound_local(null, sound(get_sfx("bodyfall"), 25))
playsound_local(null, sound(get_sfx("bodyfall"), 25), 25, 1)
if(10) playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50)
if(11)
//Same as above, but with tasers.
playsound_local(null, 'sound/weapons/Taser.ogg', 25)
playsound_local(null, 'sound/weapons/Taser.ogg', 25, 1)
spawn(rand(10,30))
playsound_local(null, 'sound/weapons/Taser.ogg', 25)
playsound_local(null, 'sound/weapons/Taser.ogg', 25, 1)
sleep(rand(5,10))
playsound_local(null, sound(get_sfx("bodyfall"), 25))
playsound_local(null, sound(get_sfx("bodyfall"), 25), 25, 1)
//Rare audio
if(12)
//These sounds are (mostly) taken from Hidden: Source
@@ -819,7 +819,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item
'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')
playsound_local(null, pick(creepyasssounds))
playsound_local(null, pick(creepyasssounds), 50, 1)
if(13)
playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100)
sleep(150)
@@ -830,19 +830,19 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item
playsound_local(null, 'sound/AI/shuttledock.ogg', 100)
//Deconstructing a wall
if(15)
playsound_local(null, 'sound/items/Welder.ogg', 15)
playsound_local(null, 'sound/items/Welder.ogg', 15, 1)
sleep(105)
playsound_local(null, 'sound/items/Welder2.ogg', 15)
playsound_local(null, 'sound/items/Welder2.ogg', 15, 1)
sleep(15)
playsound_local(null, 'sound/items/Ratchet.ogg', 15)
playsound_local(null, 'sound/items/Ratchet.ogg', 15, 1)
//Hacking a door
if(16)
playsound_local(null, 'sound/items/Screwdriver.ogg', 15)
playsound_local(null, 'sound/items/Screwdriver.ogg', 15, 1)
sleep(rand(10,30))
for(var/i = rand(1,3), i>0, i--)
playsound_local(null, 'sound/weapons/empty.ogg', 15)
playsound_local(null, 'sound/weapons/empty.ogg', 15, 1)
sleep(rand(10,30))
playsound_local(null, 'sound/machines/airlockforced.ogg', 15)
playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1)
if(17)
playsound_local(null, 'sound/weapons/saberon.ogg',35,1)
if(18)
@@ -850,11 +850,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item
src << "<br><br><span class='alert'>Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.</span><br><br>"
playsound_local(null, 'sound/AI/outbreak5.ogg')
if(19) //Tesla loose!
playsound_local(null, 'sound/magic/lightningbolt.ogg', 35)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1)
sleep(20)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 65)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1)
sleep(20)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 100)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1)
if(20) //AI is doomsdaying!
src << "<h1 class='alert'>Anomaly Alert</h1>"
src << "<br><br><span class='alert'>Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.</span><br><br>"

View File

@@ -21,6 +21,10 @@
var/text_output = from.generate_taste_message(taste_sensitivity)
// We dont want to spam the same message over and over again at the
// person. Give it a bit of a buffer.
if(hallucination > 50 && prob(25))
text_output = pick("spiders","[pick(wire_colors)]","dreams","nightmares","the future","the past","victory",\
"defeat","pain","bliss","revenge","poison","time","space","death","life","truth","lies","justice","memory",\
"regrets","your soul","suffering","music","noise","blood","hunger","the american way")
if(text_output != last_taste_text || last_taste_time + 100 < world.time)
src << "<span class='notice'>You can taste [text_output].</span>"
// "somthing indescribable" -> too many tastes, not enough flavor.