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 return
else /*if(src.justzap)*/ else /*if(src.justzap)*/
return return
else if(user.hallucination > 50 && prob(10) && src.operating == 0) else if(user.hallucination > 50 && ishuman(user) && prob(10) && src.operating == 0)
user << "<span class='userdanger'>You feel a powerful shock course through your body!</span>" hallucinate_shock(user)
user.staminaloss += 50
user.stunned += 5
return return
if (cyclelinkedairlock) if (cyclelinkedairlock)
if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user)) if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user))
@@ -234,6 +232,34 @@ var/list/airlock_overlays = list()
addtimer(CALLBACK(cyclelinkedairlock, .proc/close), 2) 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() /obj/machinery/door/airlock/proc/isElectrified()
if(src.secondsElectrified != 0) if(src.secondsElectrified != 0)

View File

@@ -279,14 +279,14 @@ Gunshots/explosions/opening doors/less rare audio (done)
if(target.client) if(target.client)
target.client.images |= fakebroken target.client.images |= fakebroken
target.client.images |= fakerune 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) bubblegum = new(wall, target)
sleep(10) //ominous wait sleep(10) //ominous wait
var/charged = FALSE //only get hit once var/charged = FALSE //only get hit once
while(get_turf(bubblegum) != landing) while(get_turf(bubblegum) != landing)
bubblegum.forceMove(get_step_towards(bubblegum, landing)) bubblegum.forceMove(get_step_towards(bubblegum, landing))
bubblegum.setDir(get_dir(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) shake_camera(target, 2, 1)
if(bubblegum.Adjacent(target) && !charged) if(bubblegum.Adjacent(target) && !charged)
charged = TRUE charged = TRUE
@@ -351,37 +351,37 @@ Gunshots/explosions/opening doors/less rare audio (done)
switch(rand(1,5)) switch(rand(1,5))
if(1) //Laser fight if(1) //Laser fight
for(var/i=0,i<hits,i++) 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)) 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 else
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, 'sound/weapons/effects/searwall.ogg', 25), rand(10,20)) 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 + 4)) sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8))
target.playsound_local(null, get_sfx("bodyfall"), 25) target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
if(2) //Esword fight 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++) for(var/i=0,i<hits,i++)
target.playsound_local(null, 'sound/weapons/blade1.ogg', 25) target.playsound_local(null, 'sound/weapons/blade1.ogg', 25, 1)
sleep(CLICK_CD_MELEE) sleep(rand(CLICK_CD_MELEE, CLICK_CD_MELEE + 8))
target.playsound_local(null, get_sfx("bodyfall"), 25) target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
target.playsound_local(null, 'sound/weapons/saberoff.ogg', 15) target.playsound_local(null, 'sound/weapons/saberoff.ogg', 15, 1)
if(3) //Gun fight if(3) //Gun fight
for(var/i=0,i<hits,i++) for(var/i=0,i<hits,i++)
target.playsound_local(null, get_sfx("gunshot"), 25) target.playsound_local(null, get_sfx("gunshot"), 25)
if(prob(75)) 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 else
addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, "ricochet", 25), rand(10,20)) addtimer(CALLBACK(target, /atom/.proc/playsound_local, null, "ricochet", 25, 1), rand(10,20))
sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 4)) sleep(rand(CLICK_CD_RANGE, CLICK_CD_RANGE + 8))
target.playsound_local(null, get_sfx("bodyfall"), 25) target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
if(4) //Stunprod + cablecuff if(4) //Stunprod + cablecuff
target.playsound_local(null, 'sound/weapons/Egloves.ogg', 40) target.playsound_local(null, 'sound/weapons/Egloves.ogg', 40, 1)
target.playsound_local(null, get_sfx("bodyfall"), 25) target.playsound_local(null, get_sfx("bodyfall"), 25, 1)
sleep(20) 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 if(5) // Tick Tock
for(var/i=0,i<hits,i++) 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) sleep(15)
qdel(src) qdel(src)
@@ -570,7 +570,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
step_away(src,my_target,2) step_away(src,my_target,2)
user.changeNext_move(CLICK_CD_MELEE) user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src) 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>", \ my_target.visible_message("<span class='danger'>[my_target] flails around wildly.</span>", \
"<span class='danger'>[my_target] has attacked [src]!</span>") "<span class='danger'>[my_target] has attacked [src]!</span>")
@@ -621,7 +621,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
else else
if(prob(15)) if(prob(15))
if(weapon_name) 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.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
my_target.staminaloss += 30 my_target.staminaloss += 30
if(prob(20)) if(prob(20))
@@ -781,12 +781,12 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/ballistic, /obj/item
//Strange audio //Strange audio
//src << "Strange Audio" //src << "Strange Audio"
switch(rand(1,20)) 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(2)
if(prob(50)) playsound_local(null,'sound/effects/Explosion1.ogg', 50) if(prob(50)) playsound_local(null,'sound/effects/Explosion1.ogg', 50, 1)
else playsound_local(null, 'sound/effects/Explosion2.ogg', 50) else playsound_local(null, 'sound/effects/Explosion2.ogg', 50, 1)
if(3) playsound_local(null, 'sound/effects/explosionfar.ogg', 50) 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) if(4) playsound_local(null, pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg'), 50, 1)
if(5) if(5)
playsound_local(null, 'sound/weapons/ring.ogg', 35) playsound_local(null, 'sound/weapons/ring.ogg', 35)
sleep(15) 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(8) playsound_local(null, 'sound/voice/bfreeze.ogg', 35, 0)
if(9) if(9)
//To make it more realistic, I added two gunshots (enough to kill) //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)) 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)) 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(10) playsound_local(null, 'sound/effects/pray_chaplain.ogg', 50)
if(11) if(11)
//Same as above, but with tasers. //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)) 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)) sleep(rand(5,10))
playsound_local(null, sound(get_sfx("bodyfall"), 25)) playsound_local(null, sound(get_sfx("bodyfall"), 25), 25, 1)
//Rare audio //Rare audio
if(12) if(12)
//These sounds are (mostly) taken from Hidden: Source //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/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/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') '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) if(13)
playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100) playsound_local(null, 'sound/effects/ratvar_rises.ogg', 100)
sleep(150) 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) playsound_local(null, 'sound/AI/shuttledock.ogg', 100)
//Deconstructing a wall //Deconstructing a wall
if(15) if(15)
playsound_local(null, 'sound/items/Welder.ogg', 15) playsound_local(null, 'sound/items/Welder.ogg', 15, 1)
sleep(105) sleep(105)
playsound_local(null, 'sound/items/Welder2.ogg', 15) playsound_local(null, 'sound/items/Welder2.ogg', 15, 1)
sleep(15) sleep(15)
playsound_local(null, 'sound/items/Ratchet.ogg', 15) playsound_local(null, 'sound/items/Ratchet.ogg', 15, 1)
//Hacking a door //Hacking a door
if(16) if(16)
playsound_local(null, 'sound/items/Screwdriver.ogg', 15) playsound_local(null, 'sound/items/Screwdriver.ogg', 15, 1)
sleep(rand(10,30)) sleep(rand(10,30))
for(var/i = rand(1,3), i>0, i--) 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)) sleep(rand(10,30))
playsound_local(null, 'sound/machines/airlockforced.ogg', 15) playsound_local(null, 'sound/machines/airlockforced.ogg', 15, 1)
if(17) if(17)
playsound_local(null, 'sound/weapons/saberon.ogg',35,1) playsound_local(null, 'sound/weapons/saberon.ogg',35,1)
if(18) 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>" 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') playsound_local(null, 'sound/AI/outbreak5.ogg')
if(19) //Tesla loose! if(19) //Tesla loose!
playsound_local(null, 'sound/magic/lightningbolt.ogg', 35) playsound_local(null, 'sound/magic/lightningbolt.ogg', 35, 1)
sleep(20) sleep(20)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 65) playsound_local(null, 'sound/magic/lightningbolt.ogg', 65, 1)
sleep(20) sleep(20)
playsound_local(null, 'sound/magic/lightningbolt.ogg', 100) playsound_local(null, 'sound/magic/lightningbolt.ogg', 100, 1)
if(20) //AI is doomsdaying! if(20) //AI is doomsdaying!
src << "<h1 class='alert'>Anomaly Alert</h1>" 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>" 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) var/text_output = from.generate_taste_message(taste_sensitivity)
// We dont want to spam the same message over and over again at the // We dont want to spam the same message over and over again at the
// person. Give it a bit of a buffer. // 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) if(text_output != last_taste_text || last_taste_time + 100 < world.time)
src << "<span class='notice'>You can taste [text_output].</span>" src << "<span class='notice'>You can taste [text_output].</span>"
// "somthing indescribable" -> too many tastes, not enough flavor. // "somthing indescribable" -> too many tastes, not enough flavor.