mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
Merge branch 'dare' into 'Bleeding-Edge'
Custom messages for hallucinating mobs, general hallucination tweaks
#### Don't do drugs kids
**General changes**
* Added a spook() proc to atoms, reworked the Boo! spell to use it
* Added is_blind() and is_deaf() procs for mobs
* Added hallucinating() proc for mobs which returns 1 if the mob is hallucinating (from mindbreaker and such) or is druggy (from space drugs)
* Added simple_message proc which takes two arguments (message, drugged_message).
*M.simple_message("Hi!")* works just like *M << "Hi"*, but will provide an alternative message if M is hallucinating
* The visible_message proc has three more optional arguments - drugged_message, self_drugged_message, blind_drugged_message. A hallucinating player will see the alternate messages instead of their normal versions
-------------------------------------
**Traditional (mindbreaker) hallucination tweaks:**
* Chances of fake shuttle and delta security level announcements are greatly reduced - they should be much rarer now
* Chances of some messages are slightly reduced - to prevent message spam
* Added a new rare type of hallucination - it selects a random mob in your sight (including you) and replaces its image with a random food item for a random duration.
-------------------------------------
**!!The following only affects hallucinating players!!!**
* The following objects now provide alternative messages when used:
Crematoriums, gibbers, telebatons, stun batons, soap, banana peels, welding tools, soldering irons, health analyzers and more
* Security bots are more tsundere, medibots are angry (100% awful)
* Passive genetic powers have a random message when activated or deactivated, meaning you don't know which one you have (doesn't affect disabilities, passive powers which give you an overlay i.e. heat resistance, and active powers i.e. hulk).
* It's impossible to see reagents properly when examining a glass/beaker. Instead random reagents & numbers are shown
* Opening a locker has a slight chance to show a horrifying monster instead of its usual contents!
See merge request !25
This commit is contained in:
@@ -395,13 +395,27 @@ its easier to just keep the beam vertical.
|
||||
user << "<span class='info'>You can't make out the contents.</span>"
|
||||
else
|
||||
user << "It contains:"
|
||||
if(reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
user << "<span class='info'>[R.volume] units of [R.name]</span>"
|
||||
else
|
||||
user << "<span class='info'>Nothing.</span>"
|
||||
if(!user.hallucinating())
|
||||
if(reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
user << "<span class='info'>[R.volume] units of [R.name]</span>"
|
||||
else
|
||||
user << "<span class='info'>Nothing.</span>"
|
||||
|
||||
else //Show stupid things to hallucinating mobs
|
||||
var/list/fake_reagents = list("Water", "Orange juice", "Banana juice", "Tungsten", "Chloral Hydrate", "Helium",\
|
||||
"Sea water", "Energy drink", "Gushin' Granny", "Salt", "Sugar", "something yellow", "something red", "something blue",\
|
||||
"something suspicious", "something smelly", "something sweet", "Soda", "something that reminds you of home",\
|
||||
"Chef's Special")
|
||||
for(var/i, i < rand(1,10), i++)
|
||||
var/fake_amount = rand(1,30)
|
||||
var/fake_reagent = pick(fake_reagents)
|
||||
fake_reagents -= fake_reagent
|
||||
|
||||
user << "<span class='info'>[fake_amount] units of [fake_reagent]</span>"
|
||||
if(on_fire)
|
||||
user << "<span class='danger'>OH SHIT! IT'S ON FIRE!</span>"
|
||||
user.simple_message("<span class='danger'>OH SHIT! IT'S ON FIRE!</span>",\
|
||||
"<span class='info'>It's on fire, man.</span>")
|
||||
|
||||
if(min_harm_label && harm_labeled)
|
||||
if(harm_labeled < min_harm_label)
|
||||
@@ -762,3 +776,8 @@ its easier to just keep the beam vertical.
|
||||
if(istype(newarea))
|
||||
newarea = "[newarea.name]"
|
||||
|
||||
//Called in /spell/aoe_turf/boo/cast() (code/modules/mob/dead/observer/spells.dm)
|
||||
/atom/proc/spook()
|
||||
if(blessed)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -123,6 +123,13 @@
|
||||
// Possible deactivation messages
|
||||
var/list/deactivation_messages=list()
|
||||
|
||||
// Activation messages which are shown when drugged
|
||||
var/list/drug_activation_messages=list("You feel different.","You feel wonky.","You feel new!","You feel amazing.","You feel wobbly.","You feel goofy.",\
|
||||
"You feel strong!","You feel weak.","You think you can speak vox pidgin now.","You feel like killing a space bear!","You are no longer afraid of carps.")
|
||||
|
||||
// Deactivation messages which are shown when drugged
|
||||
var/list/drug_deactivation_messages=list("You feel like you've lost a friend.","You get a feeling of loss.","Your mind feels less burdened.","You feel old.",\
|
||||
"You're not sure what's going on.","You feel concerned.","You feel like you forgot something important.","You feel trippy.","Your brain hurts.")
|
||||
|
||||
/datum/dna/gene/basic/can_activate(var/mob/M,var/flags)
|
||||
if(flags & MUTCHK_FORCED)
|
||||
@@ -132,9 +139,15 @@
|
||||
|
||||
/datum/dna/gene/basic/activate(var/mob/M)
|
||||
M.mutations.Add(mutation)
|
||||
var/msg1
|
||||
var/msg2
|
||||
if(activation_messages.len)
|
||||
var/msg = pick(activation_messages)
|
||||
M << "<span class='notice'>[msg]</span>"
|
||||
msg1 = pick(activation_messages)
|
||||
if(drug_activation_messages.len)
|
||||
msg2 = pick(drug_activation_messages)
|
||||
|
||||
if(msg2) msg2="<span class='notice'>[msg2]</span>" //Workaround to prevent simple_message from considering "<span class='notice'></span>" an actual message
|
||||
M.simple_message("<span class='notice'>[msg1]</span>", msg2 )
|
||||
|
||||
/datum/dna/gene/basic/can_deactivate(var/mob/M, var/flags)
|
||||
if(flags & GENE_NATURAL)
|
||||
@@ -145,7 +158,13 @@
|
||||
/datum/dna/gene/basic/deactivate(var/mob/M, var/connected, var/flags)
|
||||
if(..())
|
||||
M.mutations.Remove(mutation)
|
||||
var/msg1
|
||||
var/msg2
|
||||
if(deactivation_messages.len)
|
||||
var/msg = pick(deactivation_messages)
|
||||
M << "<span class='warning'>[msg]</span>"
|
||||
msg1 = pick(deactivation_messages)
|
||||
if(drug_deactivation_messages.len)
|
||||
msg2 = pick(drug_deactivation_messages)
|
||||
|
||||
if(msg2) msg2="<span class='notice'>[msg2]</span>" //Workaround to prevent simple_message from considering "<span class='notice'></span>" an actual message
|
||||
M.simple_message("<span class='notice'>[msg1]</span>", msg2 )
|
||||
return 1
|
||||
@@ -124,6 +124,9 @@
|
||||
activation_messages = list("You notice a strange cold tingle in your fingertips.")
|
||||
deactivation_messages = list("Your fingers feel warmer.")
|
||||
|
||||
drug_activation_messages=list("Your skin is icy to the touch.")
|
||||
drug_deactivation_messages=list("Your skin stops feeling icy.")
|
||||
|
||||
spelltype = /spell/targeted/cryokinesis
|
||||
|
||||
New()
|
||||
@@ -203,6 +206,9 @@
|
||||
activation_messages = list("You feel hungry.")
|
||||
deactivation_messages = list("You don't feel quite so hungry anymore.")
|
||||
|
||||
drug_activation_messages=list("You are getting the munchies.")
|
||||
drug_deactivation_messages=list("You no longer getting the munchies.")
|
||||
|
||||
spelltype= /spell/targeted/eat
|
||||
|
||||
New()
|
||||
@@ -387,6 +393,9 @@
|
||||
activation_messages = list("Your leg muscles feel taut and strong.")
|
||||
deactivation_messages = list("Your leg muscles shrink back to normal.")
|
||||
|
||||
drug_activation_messages=list()
|
||||
drug_deactivation_messages=list()
|
||||
|
||||
spelltype =/spell/targeted/leap
|
||||
|
||||
New()
|
||||
@@ -491,6 +500,9 @@
|
||||
activation_messages = list("You don't feel entirely like yourself somehow.")
|
||||
deactivation_messages = list("You feel secure in your identity.")
|
||||
|
||||
drug_activation_messages=list()
|
||||
drug_deactivation_messages=list()
|
||||
|
||||
New()
|
||||
..()
|
||||
block = POLYMORPHBLOCK
|
||||
@@ -536,6 +548,9 @@
|
||||
activation_messages = list("You suddenly notice more about others than you did before.")
|
||||
deactivation_messages = list("You no longer feel able to sense intentions.")
|
||||
|
||||
drug_activation_messages=list("You feel more social!")
|
||||
drug_deactivation_messages=list("You feel less social.")
|
||||
|
||||
New()
|
||||
..()
|
||||
block = EMPATHBLOCK
|
||||
@@ -653,6 +668,9 @@
|
||||
activation_messages = list("You feel bloated and gassy.")
|
||||
deactivation_messages = list("You no longer feel gassy. What a relief!")
|
||||
|
||||
drug_activation_messages = list()
|
||||
drug_deactivation_messages = list()
|
||||
|
||||
mutation = M_SUPER_FART
|
||||
|
||||
New()
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
name="Remote Viewing"
|
||||
activation_messages=list("Your mind expands.")
|
||||
deactivation_messages=list("Your mind is no longer expanded.")
|
||||
|
||||
drug_activation_messages=list("You feel in touch with the cosmos.")
|
||||
drug_deactivation_messages=list("You no longer feel in touch with the cosmos.")
|
||||
|
||||
mutation=M_REMOTE_VIEW
|
||||
|
||||
spelltype = /spell/targeted/remoteobserve
|
||||
@@ -90,6 +94,10 @@
|
||||
name="Telepathy"
|
||||
activation_messages=list("You feel your voice can penetrate other minds.")
|
||||
deactivation_messages=list("Your mind can no longer project your voice onto others.")
|
||||
|
||||
drug_activation_messages=list("You feel your voice can reach the astral plane now.")
|
||||
drug_deactivation_messages=list("Your voice can no longer reach the astral plane.")
|
||||
|
||||
mutation=M_REMOTE_TALK
|
||||
|
||||
spelltype = /spell/targeted/remotesay
|
||||
@@ -139,6 +147,10 @@
|
||||
name="Morph"
|
||||
activation_messages=list("Your skin feels strange.")
|
||||
deactivation_messages=list("Your skin no longer feels strange.")
|
||||
|
||||
drug_activation_messages=list("You feel like a chameleon.")
|
||||
drug_deactivation_messages=list("You no longer feel like a chameleon.")
|
||||
|
||||
mutation=M_MORPH
|
||||
|
||||
New()
|
||||
@@ -152,6 +164,10 @@
|
||||
name="Heat Resistance"
|
||||
activation_messages=list("Your skin is icy to the touch.")
|
||||
deactivation_messages=list("Your skin stops feeling icy.")
|
||||
|
||||
drug_activation_messages=list()
|
||||
drug_deactivation_messages=list()
|
||||
|
||||
mutation=M_RESIST_HEAT
|
||||
|
||||
New()
|
||||
@@ -174,6 +190,10 @@
|
||||
name="Cold Resistance"
|
||||
activation_messages=list("Your body is filled with warmth.")
|
||||
deactivation_messages=list("Your body is no longer filled with warmth.")
|
||||
|
||||
drug_activation_messages=list()
|
||||
drug_deactivation_messages=list()
|
||||
|
||||
mutation=M_RESIST_COLD
|
||||
|
||||
New()
|
||||
@@ -271,6 +291,10 @@
|
||||
name="X-Ray Vision"
|
||||
activation_messages=list("The walls suddenly disappear.")
|
||||
deactivation_messages=list("The walls suddenly appear.")
|
||||
|
||||
drug_activation_messages=list("You see so much clearer now!")
|
||||
drug_deactivation_messages=list("Your vision is obstructed again.")
|
||||
|
||||
mutation=M_XRAY
|
||||
|
||||
New()
|
||||
@@ -280,6 +304,10 @@
|
||||
name="Telekenesis"
|
||||
activation_messages=list("You feel smarter.")
|
||||
deactivation_messages=list("You feel less smart.")
|
||||
|
||||
drug_activation_messages=list("You feel like a nerd.")
|
||||
drug_deactivation_messages=list("You feel normal again.")
|
||||
|
||||
mutation=M_TK
|
||||
activation_prob=15
|
||||
|
||||
|
||||
@@ -16,6 +16,10 @@ Obviously, requires DNA2.
|
||||
desc = "Allows the subject to become the motherfucking Hulk."
|
||||
activation_messages = list("Your muscles hurt.")
|
||||
deactivation_messages = list("Your muscles quit tensing.")
|
||||
|
||||
drug_activation_messages=list("You feel strong! You must've been working out lately.")
|
||||
drug_deactivation_messages=list("You return to your old lifestyle.")
|
||||
|
||||
flags = GENE_UNNATURAL // Do NOT spawn on roundstart.
|
||||
|
||||
spelltype = /spell/targeted/genetic/hulk
|
||||
@@ -92,6 +96,10 @@ Obviously, requires DNA2.
|
||||
desc = "Increases the subjects ability to see things from afar."
|
||||
activation_messages = list("Your eyes focus.")
|
||||
deactivation_messages = list("Your eyes return to normal.")
|
||||
|
||||
drug_activation_messages=list("The world becomes huge! You feel like an ant.")
|
||||
drug_deactivation_messages=list("You no longer feel like an insect.")
|
||||
|
||||
mutation = M_FARSIGHT
|
||||
|
||||
/datum/dna/gene/basic/farsight/New()
|
||||
|
||||
@@ -7,7 +7,11 @@
|
||||
|
||||
/datum/universal_state/supermatter_cascade/OnShuttleCall(var/mob/user)
|
||||
if(user)
|
||||
user << "<span class='sinister'>All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.</span>"
|
||||
if(user.hallucinating())
|
||||
var/msg = pick("your mother and father arguing","a smooth jazz tune","somebody speaking [pick("french","siik'tajr","gibberish")]","[pick("somebody","your parents","a gorilla","a man","a woman")] making [pick("chicken","cow","train","duck","cat","dog","strange","funny")] sounds")
|
||||
user << "<span class='sinister'>All you hear on the frequency is [msg]. There will be no shuttle call today.</span>"
|
||||
else
|
||||
user << "<span class='sinister'>All you hear on the frequency is static and panicked screaming. There will be no shuttle call today.</span>"
|
||||
return 0
|
||||
|
||||
/datum/universal_state/supermatter_cascade/OnTurfChange(var/turf/T)
|
||||
|
||||
@@ -23,7 +23,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
|
||||
var/Bible_item_state // item_state the chaplain has chosen for his bible
|
||||
var/Bible_name // name of the bible
|
||||
var/Bible_deity_name
|
||||
var/Bible_deity_name = "Space Jesus"
|
||||
|
||||
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
|
||||
|
||||
|
||||
@@ -803,8 +803,8 @@ Auto Patrol: []"},
|
||||
|
||||
/obj/machinery/bot/ed209/proc/speak(var/message)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/bot/ed209/proc/speak() called tick#: [world.time]")
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",2)
|
||||
visible_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",\
|
||||
drugged_message="<span class='game say'><span class='name'>[src]</span> beeps, \"[pick("I-It's not like I like you or anything... baka!","You're s-so silly!","I-I'm only doing this because you asked me nicely, baka...","S-stop that!","Y-you're embarassing me!")]\"")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/ed209/explode()
|
||||
@@ -1107,4 +1107,4 @@ Auto Patrol: []"},
|
||||
/obj/machinery/bot/ed209/declare()
|
||||
var/area/location = get_area(src)
|
||||
declare_message = "<span class='info'>\icon[src] [name] is [arrest_type ? "detaining" : "arresting"] level [threatlevel] scumbag <b>[target]</b> in <b>[location]</b></span>"
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -468,7 +468,8 @@
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/bot/medbot/proc/speak() called tick#: [world.time]")
|
||||
if((!src.on) || (!message))
|
||||
return
|
||||
visible_message("[src] beeps, \"[message]\"")
|
||||
visible_message("[src] beeps, \"[message]\"",\
|
||||
drugged_message="[src] beeps, \"[pick("FEED ME HUMANS","LET THE BLOOD FLOW","BLOOD FOR THE BLOOD GOD","I SPREAD DEATH AND DESTRUCTION","EXTERMINATE","I HATE YOU!","SURRENDER TO YOUR MACHINE OVERLORDS","FEED ME SHITTERS")]\"")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
@@ -327,7 +327,8 @@ Auto Patrol: []"},
|
||||
if(!C.handcuffed && !src.arrest_type)
|
||||
playsound(get_turf(src), 'sound/weapons/handcuffs.ogg', 30, 1, -2)
|
||||
mode = SECBOT_ARREST
|
||||
visible_message("<span class='danger'>[src] is trying to put handcuffs on [src.target]!</span>")
|
||||
visible_message("<span class='danger'>[src] is trying to put handcuffs on [src.target]!</span>",\
|
||||
"<span class='danger'>[src] is trying to cut [src.target]'s hands off!</span>")
|
||||
|
||||
spawn(60)
|
||||
if(Adjacent(target))
|
||||
@@ -766,8 +767,8 @@ Auto Patrol: []"},
|
||||
|
||||
/obj/machinery/bot/secbot/proc/speak(var/message)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/bot/secbot/proc/speak() called tick#: [world.time]")
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",2)
|
||||
visible_message("<span class='game say'><span class='name'>[src]</span> beeps, \"[message]\"",\
|
||||
drugged_message="<span class='game say'><span class='name'>[src]</span> beeps, \"[pick("Wait! Let's be friends!","Wait for me!","You're so cool!","Who's your favourite pony?","I-It's not like I like you or anything...","Wanna see a magic trick?","Let's go have fun, assistant-kun~")]\"")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -155,10 +155,12 @@ obj/machinery/gibber/New()
|
||||
user << "<span class='warning'>Subject may not have abiotic items on.</span>"
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] starts to put [G.affecting] into the gibber!</span>")
|
||||
user.visible_message("<span class='warning'>[user] starts to put [G.affecting] into the gibber!</span>", \
|
||||
drugged_message = "<span class='warning'>[user] starts dancing with [G.affecting] near the gibber!</span>")
|
||||
src.add_fingerprint(user)
|
||||
if(do_after(user, src, 30) && G && G.affecting && !occupant)
|
||||
user.visible_message("<span class='warning'>[user] stuffs [G.affecting] into the gibber!</span>")
|
||||
user.visible_message("<span class='warning'>[user] stuffs [G.affecting] into the gibber!</span>", \
|
||||
drugged_message = "<span class='warning'>[G.affecting] suddenly disappears! How did he do that?</span>")
|
||||
var/mob/M = G.affecting
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
@@ -182,10 +184,17 @@ obj/machinery/gibber/New()
|
||||
return
|
||||
|
||||
src.add_fingerprint(user)
|
||||
user.visible_message("<span class='warning'>[user.name] starts climbing into the [src].</span>", "<span class='warning'>You start climbing into the [src].</span>")
|
||||
|
||||
user.visible_message("<span class='warning'>[user] starts climbing into the [src].</span>", \
|
||||
"<span class='warning'>You start climbing into the [src].</span>", \
|
||||
drugged_message = "<span class='warning'>[user] starts dancing like a ballerina!</span>")
|
||||
|
||||
if(do_after(user, src, 30) && user && !occupant && !isnull(src.loc))
|
||||
user.visible_message("<span class='warning'>[user] climbs into the [src]</span>", "<span class='warning'>You climb into the [src].</span>")
|
||||
|
||||
user.visible_message("<span class='warning'>[user] climbs into the [src]</span>", \
|
||||
"<span class='warning'>You climb into the [src].</span>", \
|
||||
drugged_message = "<span class='warning'>[src] consumes [user]!</span>")
|
||||
|
||||
if(user.client)
|
||||
user.client.perspective = EYE_PERSPECTIVE
|
||||
user.client.eye = src
|
||||
@@ -225,10 +234,12 @@ obj/machinery/gibber/New()
|
||||
if(src.operating)
|
||||
return
|
||||
if(!src.occupant)
|
||||
visible_message("<span class='warning'>You hear a loud metallic grinding sound.</span>")
|
||||
visible_message("<span class='warning'>You hear a loud metallic grinding sound.</span>", \
|
||||
drugged_message = "<span class='warning'>You fainly hear a guitar solo.</span>")
|
||||
return
|
||||
use_power(1000)
|
||||
visible_message("<span class='warning'>You hear a loud squelchy grinding sound.</span>")
|
||||
visible_message("<span class='warning'>You hear a loud squelchy grinding sound.</span>", \
|
||||
drugged_message = "<span class='warning'>You hear a band performance.</span>")
|
||||
src.operating = 1
|
||||
update_icon()
|
||||
var/sourcename = src.occupant.real_name
|
||||
@@ -277,10 +288,12 @@ obj/machinery/gibber/New()
|
||||
if(src.operating)
|
||||
return
|
||||
if(!victim)
|
||||
visible_message("<span class='warning'>You hear a loud metallic grinding sound.</span>")
|
||||
visible_message("<span class='warning'>You hear a loud metallic grinding sound.</span>", \
|
||||
drugged_message = "<span class='warning'>You fainly hear a guitar solo.</span>")
|
||||
return
|
||||
use_power(1000)
|
||||
visible_message("<span class='warning'>You hear a loud squelchy grinding sound.</span>")
|
||||
visible_message("<span class='warning'>You hear a loud squelchy grinding sound.</span>", \
|
||||
drugged_message = "<span class='warning'>You hear a band performance.</span>")
|
||||
src.operating = 1
|
||||
update_icon()
|
||||
var/sourcename = victim.real_name
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(src, frequency)
|
||||
|
||||
|
||||
// timed process
|
||||
/obj/machinery/status_display/process()
|
||||
if(stat & NOPOWER)
|
||||
@@ -186,7 +185,6 @@
|
||||
if(maptext)
|
||||
maptext = ""
|
||||
|
||||
|
||||
/obj/machinery/status_display/receive_signal(datum/signal/signal)
|
||||
switch(signal.data["command"])
|
||||
if("blank")
|
||||
@@ -207,6 +205,10 @@
|
||||
if(supply_display)
|
||||
mode = 4
|
||||
|
||||
/obj/machinery/status_display/spook()
|
||||
if(..())
|
||||
spookymode = 1
|
||||
|
||||
/obj/machinery/ai_status_display
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
icon_state = "frame"
|
||||
@@ -224,7 +226,6 @@
|
||||
|
||||
var/emotion = "Neutral"
|
||||
|
||||
|
||||
/obj/machinery/ai_status_display/process()
|
||||
if(stat & NOPOWER)
|
||||
overlays.len = 0
|
||||
@@ -292,6 +293,9 @@
|
||||
overlays.len = 0
|
||||
overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
|
||||
|
||||
/obj/machinery/ai_status_display/spook()
|
||||
spookymode = 1
|
||||
|
||||
#undef CHARS_PER_LINE
|
||||
#undef FOND_SIZE
|
||||
#undef FONT_COLOR
|
||||
|
||||
@@ -92,7 +92,13 @@ REAGENT SCANNER
|
||||
var/mode = 1;
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
healthanalyze(M, user, mode)
|
||||
if(!user.hallucinating())
|
||||
healthanalyze(M, user, mode)
|
||||
else
|
||||
if( (M.stat == DEAD || (M.status_flags & FAKEDEATH)) )
|
||||
user.show_message("<span class='game say'><span class='name'>[src]</span> beeps, \"It's dead, Jim.\"</span>",MESSAGE_HEAR,"<span class='notice'>The [name] glows black.</span>")
|
||||
else
|
||||
user << "<span class='notice'>[src] glows [pick("red","green","blue","pink")]! You wonder what would that mean.</span>"
|
||||
src.add_fingerprint(user)
|
||||
|
||||
proc/healthanalyze(mob/living/M as mob, mob/living/user as mob, var/mode = 0)
|
||||
|
||||
@@ -12,11 +12,13 @@
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/M = AM
|
||||
if(!M.walking()) return
|
||||
|
||||
if (M.CheckSlip() < 1)
|
||||
return
|
||||
|
||||
M.stop_pulling()
|
||||
M << "<span class='notice'> You slipped on the [name]!</span>"
|
||||
M.simple_message("<span class='notice'> You slipped on the [name]!</span>",
|
||||
"<span class='userdanger'>Something is scratching at your feet! Oh god!</span>")
|
||||
playsound(get_turf(src), 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
M.Stun(2)
|
||||
M.Weaken(2)
|
||||
@@ -28,11 +30,13 @@
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/M = AM
|
||||
if(!M.walking()) return
|
||||
|
||||
if (M.CheckSlip() < 1)
|
||||
return
|
||||
|
||||
M.stop_pulling()
|
||||
M << "<span class='notice'> You slipped on the [name]!</span>"
|
||||
M.simple_message("<span class='notice'> You slipped on the [name]!</span>",
|
||||
"<span class='userdanger'>Something is scratching at your feet! Oh god!</span>")
|
||||
playsound(get_turf(src), 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
M.Stun(3)
|
||||
M.Weaken(2)
|
||||
@@ -43,11 +47,16 @@
|
||||
//Overlay bugs can probably be fixed by updating the user's icon, see watercloset.dm
|
||||
if(!user.Adjacent(target))
|
||||
return
|
||||
|
||||
if(user.client && (target in user.client.screen) && !(user.l_hand == target || user.r_hand == target))
|
||||
user << "<span class='notice'>You need to take that [target.name] off before cleaning it.</span>"
|
||||
user.simple_message("<span class='notice'>You need to take that [target.name] off before cleaning it.</span>",
|
||||
"<span class='notice'>You need to take that [target.name] off before destroying it.</span>")
|
||||
|
||||
else if(istype(target,/obj/effect/decal/cleanable))
|
||||
user << "<span class='notice'>You scrub \the [target.name] out.</span>"
|
||||
user.simple_message("<span class='notice'>You scrub \the [target.name] out.</span>",
|
||||
"<span class='warning'>You destroy [pick("an artwork","a valuable artwork","a rare piece of art","a rare piece of modern art")].</span>")
|
||||
returnToPool(target)
|
||||
|
||||
else if(istype(target,/turf/simulated))
|
||||
var/turf/simulated/T = target
|
||||
var/list/cleanables = list()
|
||||
@@ -56,7 +65,8 @@
|
||||
continue
|
||||
cleanables += CC
|
||||
if(!cleanables.len)
|
||||
user << "<span class='notice'>You fail to clean anything.</span>"
|
||||
user.simple_message("<span class='notice'>You fail to clean anything.</span>",
|
||||
"<span class='notice'>There is nothing for you to vandalize.</span>")
|
||||
return
|
||||
cleanables = shuffle(cleanables)
|
||||
var/obj/effect/decal/cleanable/C
|
||||
@@ -64,10 +74,12 @@
|
||||
if(d && istype(d))
|
||||
C = d
|
||||
break
|
||||
user << "<span class='notice'>You scrub \the [C.name] out.</span>"
|
||||
user.simple_message("<span class='notice'>You scrub \the [C.name] out.</span>",
|
||||
"<span class='warning'>You destroy [pick("an artwork","a valuable artwork","a rare piece of art","a rare piece of modern art")].</span>")
|
||||
returnToPool(C)
|
||||
else
|
||||
user << "<span class='notice'>You clean \the [target.name].</span>"
|
||||
user.simple_message("<span class='notice'>You clean \the [target.name].</span>",
|
||||
"<span class='warning'>You [pick("deface","ruin","stain")] \the [target.name].</span>")
|
||||
target.clean_blood()
|
||||
return
|
||||
|
||||
@@ -87,4 +99,4 @@
|
||||
src.add_fingerprint(user)
|
||||
spawn(20)
|
||||
spam_flag = 0
|
||||
return
|
||||
return
|
||||
|
||||
@@ -70,13 +70,15 @@
|
||||
var/mob/living/M = AM
|
||||
if(M.lying)
|
||||
M.take_overall_damage(0, max(0, (burned - 2)))
|
||||
M << "<span class='danger'>Something burns your back!</span>"
|
||||
M.simple_message("<span class='danger'>Something burns your back!</span>",\
|
||||
"<span class='userdanger'>They're eating your back!</span>")
|
||||
return
|
||||
if(ishuman(M))
|
||||
if(M.CheckSlip() < 1)
|
||||
return
|
||||
else
|
||||
M << "<span class='warning'>Your feet feel like they're on fire!</span>"
|
||||
M.simple_message("<span class='warning'>Your feet feel like they're on fire!</span>",\
|
||||
"<span class='userdanger'>Egads! They bite your feet!</span>")
|
||||
M.take_overall_damage(0, max(0, (burned - 2)))
|
||||
|
||||
if(!istype(M, /mob/living/carbon/slime) && !isrobot(M))
|
||||
@@ -87,7 +89,8 @@
|
||||
spawn(3) step(M, M.dir)
|
||||
spawn(4) step(M, M.dir)
|
||||
M.take_organ_damage(2) // Was 5 -- TLE
|
||||
M << "<span class='notice'>You slipped on \the [name]!</span>"
|
||||
M.simple_message("<span class='notice'>You slipped on \the [name]!</span>",\
|
||||
"<span class='userdanger'>Please, just end the pain!</span>")
|
||||
playsound(get_turf(src), 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
M.Weaken(10)
|
||||
M.take_overall_damage(0, burned)
|
||||
|
||||
@@ -84,26 +84,31 @@
|
||||
|
||||
/obj/item/weapon/melee/baton/attack_self(mob/user)
|
||||
if(status && (M_CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='warning'>You grab the [src] on the wrong side.</span>"
|
||||
user.simple_message("<span class='warning'>You grab the [src] on the wrong side.</span>",
|
||||
"<span class='danger'>The [name] blasts you with its power!</span>")
|
||||
user.Weaken(stunforce*3)
|
||||
deductcharge(hitcost)
|
||||
return
|
||||
if(bcell && bcell.charge >= hitcost)
|
||||
status = !status
|
||||
user << "<span class='notice'>[src] is now [status ? "on" : "off"].</span>"
|
||||
user.simple_message("<span class='notice'>[src] is now [status ? "on" : "off"].</span>",
|
||||
"<span class='notice'>[src] is now [pick("drowsy","hungry","thirsty","bored","unhappy")].</span>")
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
update_icon()
|
||||
else
|
||||
status = 0
|
||||
if(!bcell)
|
||||
user << "<span class='warning'>[src] does not have a power source!</span>"
|
||||
user.simple_message("<span class='warning'>[src] does not have a power source!</span>",
|
||||
"<span class='warning'>[src] has no pulse and its soul has departed...</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is out of charge.</span>"
|
||||
user.simple_message("<span class='warning'>[src] is out of charge.</span>",
|
||||
"<span class='warning'>[src] refuses to obey you.</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/baton/attack(mob/M, mob/user)
|
||||
if(status && (M_CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='danger'>You accidentally hit yourself with [src]!</span>"
|
||||
user.simple_message("<span class='danger'>You accidentally hit yourself with [src]!</span>",
|
||||
"<span class='danger'>The [name] goes mad!</span>")
|
||||
user.Weaken(stunforce*3)
|
||||
deductcharge(hitcost)
|
||||
return
|
||||
@@ -124,7 +129,8 @@
|
||||
else
|
||||
hit = -1
|
||||
if(!status)
|
||||
L.visible_message("<span class='attack'>[L] has been prodded with the [src] by [user]. Luckily it was off.</span>")
|
||||
L.visible_message("<span class='attack'>[L] has been prodded with the [src] by [user]. Luckily it was off.</span>",
|
||||
self_drugged_message="<span class='warning'>The [name] decides to spare this one.</span>")
|
||||
return
|
||||
|
||||
if(status && hit)
|
||||
@@ -143,7 +149,8 @@
|
||||
L.Weaken(stunforce)
|
||||
L.apply_effect(STUTTER, stunforce)
|
||||
|
||||
L.visible_message("<span class='danger'>[L] has been stunned with [src] by [user]!</span>")
|
||||
L.visible_message("<span class='danger'>[L] has been stunned with [src] by [user]!</span>",
|
||||
self_drugged_message="<span class='danger'>The [src.name] absorbs [L]'s life!</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
|
||||
if(isrobot(loc))
|
||||
|
||||
@@ -90,7 +90,11 @@
|
||||
if(on)
|
||||
user.visible_message("<span class='warning'>With a flick of their wrist, [user] extends their telescopic baton.</span>",\
|
||||
"<span class='warning'>You extend the baton.</span>",\
|
||||
"You hear an ominous click.")
|
||||
"You hear an ominous click.",\
|
||||
"<span class='notice'>[user] extends their fishing rod.</span>",\
|
||||
"<span class='notice'>You extend the fishing rod.</span>",\
|
||||
"You hear a balloon exploding.")
|
||||
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "telebaton_1"
|
||||
w_class = 4
|
||||
@@ -99,7 +103,11 @@
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] collapses their telescopic baton.</span>",\
|
||||
"<span class='notice'>You collapse the baton.</span>",\
|
||||
"You hear a click.")
|
||||
"You hear a click.",\
|
||||
"<span class='warning'>[user] collapses their fishing rod.</span>",\
|
||||
"<span class='warning'>You collapse the fishing rod.</span>",\
|
||||
"You hear a balloon exploding.")
|
||||
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0"
|
||||
w_class = 2
|
||||
@@ -125,7 +133,9 @@
|
||||
/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
|
||||
if(on)
|
||||
if ((M_CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='warning'>You club yourself over the head.</span>"
|
||||
user.simple_message("<span class='warning'>You club yourself over the head.</span>",
|
||||
"<span class='danger'>The fishing rod goes mad!</span>")
|
||||
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -146,7 +156,10 @@
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [target.name] ([target.ckey])</font>")
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class='danger'>[target] has been stunned with \the [src] by [user]!</span>")
|
||||
|
||||
target.visible_message("<span class='danger'>[target] has been stunned with \the [src] by [user]!</span>",\
|
||||
drugged_message="<span class='notice'>[user] smacks [target] with the fishing rod!</span>")
|
||||
|
||||
if(!iscarbon(user))
|
||||
target.LAssailant = null
|
||||
else
|
||||
|
||||
@@ -452,12 +452,14 @@
|
||||
if(safety < 2)
|
||||
switch(safety)
|
||||
if(1)
|
||||
usr << "<span class='warning'>Your eyes sting a little.</span>"
|
||||
usr.simple_message("<span class='warning'>Your eyes sting a little.</span>",\
|
||||
"<span class='warning'>You shed a tear.</span>")
|
||||
E.damage += rand(1, 2)
|
||||
if(E.damage > 12)
|
||||
user.eye_blurry += rand(3,6)
|
||||
if(0)
|
||||
usr << "<span class='warning'>Your eyes burn.</span>"
|
||||
usr.simple_message("<span class='warning'>Your eyes burn.</span>",\
|
||||
"<span class='warning'>Some tears fall down from your eyes.</span>")
|
||||
E.damage += rand(2, 4)
|
||||
if(E.damage > 10)
|
||||
E.damage += rand(4,10)
|
||||
@@ -465,16 +467,18 @@
|
||||
var/obj/item/clothing/to_blame = H.head //blame the hat
|
||||
if(!to_blame || (istype(to_blame) && H.glasses && H.glasses.eyeprot < to_blame.eyeprot)) //if we don't have a hat, the issue is the glasses. Otherwise, if the glasses are worse, blame the glasses
|
||||
to_blame = H.glasses
|
||||
usr << "<span class='warning'>Your [to_blame] intensifies the welder's glow. Your eyes itch and burn severely.</span>"
|
||||
usr.simple_message("<span class='warning'>Your [to_blame] intensifies the welder's glow. Your eyes itch and burn severely.</span>",\
|
||||
"<span class='warning'>Somebody's cutting onions.</span>")
|
||||
user.eye_blurry += rand(12,20)
|
||||
E.damage += rand(12, 16)
|
||||
if(E.damage > 10 && safety < 2)
|
||||
user << "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>"
|
||||
user.simple_message("<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>",\
|
||||
"<span class='warning'>This is too sad! You start to cry.</span>")
|
||||
if (E.damage >= E.min_broken_damage)
|
||||
user << "<span class='warning'>You go blind!</span>"
|
||||
user.simple_message("<span class='warning'>You go blind!</span>","<span class='warning'>Somebody turns the lights off.</span>")
|
||||
user.sdisabilities |= BLIND
|
||||
else if (E.damage >= E.min_bruised_damage)
|
||||
user << "<span class='warning'>You go blind!</span>"
|
||||
user.simple_message("<span class='warning'>You go blind!</span>","<span class='warning'>Somebody turns the lights off.</span>")
|
||||
user.eye_blind = 5
|
||||
user.eye_blurry = 5
|
||||
user.disabilities |= NEARSIGHTED
|
||||
@@ -660,18 +664,22 @@
|
||||
if(istype(W,/obj/item/weapon/reagent_containers/glass/))
|
||||
var/obj/item/weapon/reagent_containers/glass/G = W
|
||||
if(G.reagents.reagent_list.len>1)
|
||||
user << "<span class='warning'>The mixture is rejected by the tool.</span>"
|
||||
user.simple_message("<span class='warning'>The mixture is rejected by the tool.</span>",
|
||||
"<span class='warning'>The tool isn't THAT thirsty.</span>")
|
||||
return
|
||||
if(!G.reagents.has_reagent("sacid", 1))
|
||||
user << "<span class='warning'>The tool is not compatible with that.</span>"
|
||||
user.simple_message("<span class='warning'>The tool is not compatible with that.</span>",
|
||||
"<span class='warning'>The tool won't drink that.</span>")
|
||||
return
|
||||
else
|
||||
var/space = max_fuel - reagents.total_volume
|
||||
if(!space)
|
||||
user << "<span class='warning'>The tool is full!</span>"
|
||||
user.simple_message("<span class='warning'>The tool is full!</span>",
|
||||
"<span class='warning'>The tool isn't thirsty.</span>")
|
||||
return
|
||||
var/transfer_amount = min(G.amount_per_transfer_from_this,space)
|
||||
user << "<span class='info'>You transfer [transfer_amount] units to the [src].</span>"
|
||||
user.simple_message("<span class='info'>You transfer [transfer_amount] units to the [src].</span>",
|
||||
"<span class='info'>The tool gulps down your drink!</span>")
|
||||
G.reagents.trans_id_to(src,"sacid",transfer_amount)
|
||||
update_icon()
|
||||
else
|
||||
@@ -684,7 +692,8 @@
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
user << "<span class='warn'>The tool does not have enough acid!</span>"
|
||||
user.simple_message("<span class='warn'>The tool does not have enough acid!</span>",
|
||||
"<span class='warn'>The tool is too thirsty!</span>")
|
||||
return 0
|
||||
|
||||
/*
|
||||
|
||||
@@ -357,6 +357,38 @@
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
|
||||
var/mob/living/L = user
|
||||
if(src.opened==0 && L && L.client && L.hallucinating()) //If the closet is CLOSED and user is hallucinating
|
||||
if(prob(10))
|
||||
var/client/C = L.client
|
||||
var/image/temp_overlay = image(src.icon, icon_state=src.icon_opened) //Get the closet's OPEN icon
|
||||
temp_overlay.override = 1
|
||||
temp_overlay.loc = src
|
||||
|
||||
var/image/spooky_overlay
|
||||
switch(rand(0,5))
|
||||
if(0) spooky_overlay = image('icons/mob/animal.dmi',icon_state="hunter",dir=turn(L.dir,180))
|
||||
if(1) spooky_overlay = image('icons/mob/animal.dmi',icon_state="zombie",dir=turn(L.dir,180))
|
||||
if(2) spooky_overlay = image('icons/mob/horror.dmi',icon_state="horror_[pick("male","female")]",dir=turn(L.dir,180))
|
||||
if(3) spooky_overlay = image('icons/mob/animal.dmi',icon_state="faithless",dir=turn(L.dir,180))
|
||||
if(4) spooky_overlay = image('icons/mob/animal.dmi',icon_state="carp",dir=turn(L.dir,180))
|
||||
if(5) spooky_overlay = image('icons/mob/animal.dmi',icon_state="skelly",dir=turn(L.dir,180))
|
||||
|
||||
if(!spooky_overlay) return
|
||||
|
||||
temp_overlay.overlays += spooky_overlay
|
||||
|
||||
C.images += temp_overlay
|
||||
L << sound('sound/machines/click.ogg')
|
||||
L << sound('sound/hallucinations/scary.ogg')
|
||||
L.Weaken(5)
|
||||
|
||||
sleep(50)
|
||||
|
||||
if(C)
|
||||
C.images -= temp_overlay
|
||||
return
|
||||
|
||||
if(!src.toggle())
|
||||
usr << "<span class='notice'>It won't budge!</span>"
|
||||
|
||||
|
||||
@@ -18,6 +18,20 @@
|
||||
if(!(VAMP_MATURE in H.mind.vampire.powers))
|
||||
H << "<span class='notice'>You don't see anything.</span>"
|
||||
return
|
||||
if(user.hallucinating())
|
||||
switch(rand(1,100))
|
||||
if(1 to 20)
|
||||
H << "<span class='sinister'>You look like [pick("a monster","a goliath","a catbeast","a ghost","a chicken","the mailman","a demon")]! Your heart skips a beat.</span>"
|
||||
H.Weaken(4)
|
||||
return
|
||||
if(21 to 40)
|
||||
H << "<span class='sinister'>There's [pick("somebody","a monster","a little girl","a zombie","a ghost","a catbeast","a demon")] standing behind you!</span>"
|
||||
H.emote("scream",,, 1)
|
||||
H.dir = turn(H.dir, 180)
|
||||
return
|
||||
if(41 to 50)
|
||||
H << "<span class='notice'>You don't see anything.</span>"
|
||||
return
|
||||
var/userloc = H.loc
|
||||
|
||||
//see code/modules/mob/new_player/preferences.dm at approx line 545 for comments!
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
del(src.connected)
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/proc/cremate(mob/user)
|
||||
/obj/structure/crematorium/proc/cremate(mob/user)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/structure/crematorium/proc/cremate() called tick#: [world.time]")
|
||||
// for(var/obj/machinery/crema_switch/O in src) //trying to figure a way to call the switch, too drunk to sort it out atm
|
||||
// if(var/on == 1)
|
||||
@@ -341,7 +341,11 @@
|
||||
return
|
||||
|
||||
for (var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>You hear a roar as the crematorium activates.</span>", 1)
|
||||
if(!M.hallucinating())
|
||||
M.show_message("<span class='warning'>You hear a roar as the crematorium activates.</span>", 1)
|
||||
else
|
||||
M.show_message("<span class='notice'>You hear chewing as the crematorium consumes its meal.</span>", 1)
|
||||
M << 'sound/items/eatfood.ogg'
|
||||
|
||||
locked = 1
|
||||
cremating = 1
|
||||
|
||||
@@ -62,10 +62,7 @@
|
||||
if(usr)
|
||||
if (usr.client)
|
||||
if(usr.client.holder)
|
||||
if(M.mind.assigned_role == "Chaplain")
|
||||
M << "<B>You hear the voice of [ticker.Bible_deity_name] in your head... <em>[msg]</B></em>"
|
||||
else
|
||||
M << "<B>You hear a voice in your head... <em>[msg]</B></em>"
|
||||
M.get_subtle_message(msg)
|
||||
|
||||
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
|
||||
message_admins("<span class='notice'><B>SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]</B></span>", 1)
|
||||
|
||||
@@ -25,7 +25,7 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
handling_hal = 1
|
||||
while(hallucination > 20)
|
||||
sleep(rand(200,500)/(hallucination/25))
|
||||
var/halpick = rand(1,110)
|
||||
var/halpick = rand(1,104)
|
||||
switch(halpick)
|
||||
if(0 to 15)
|
||||
//Screwy HUD
|
||||
@@ -136,7 +136,7 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
src << 'sound/weapons/Taser.ogg'
|
||||
//Rare audio
|
||||
if(12)
|
||||
//These sounds are (mostly) taken from Hidden: Source
|
||||
//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',\
|
||||
@@ -195,36 +195,86 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
src.sleeping = 0
|
||||
hal_crit = 0
|
||||
hal_screwyhud = 0
|
||||
if(73 to 77)
|
||||
if(73 to 75)
|
||||
//Fake changeling/parapen
|
||||
if(prob(1) && prob(1))
|
||||
if(prob(0.01))
|
||||
src << "<span class='warning'>You feel a <b>HUGE</b> prick!</span>"
|
||||
else
|
||||
src << "<span class='warning'>You feel a tiny prick!</span>"
|
||||
if(78 to 80)
|
||||
src << "<h1 class='alert'>Priority Announcement</h1>"
|
||||
src << "<span class='alert'>The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.</span>"
|
||||
src << sound('sound/AI/shuttledock.ogg')
|
||||
if(81) //Fake malf AI
|
||||
if(prob(10))
|
||||
if(76)
|
||||
if(prob(5))
|
||||
src << "<h1 class='alert'>Priority Announcement</h1>"
|
||||
src << "<span class='alert'>The Emergency Shuttle has docked with the station. You have 3 minutes to board the Emergency Shuttle.</span>"
|
||||
src << sound('sound/AI/shuttledock.ogg')
|
||||
else
|
||||
var/txt_verb = pick("go to","die in","stay in","avoid")
|
||||
var/location = pick("security","arrivals","bridge","your old house","the escape shuttle hallway","deep space","the DJ satelite","science")
|
||||
src << "<i>You feel a sudden urge to [txt_verb] [location][pick("...","!",".")]</i>"
|
||||
if(77) //Sillycone
|
||||
if(prob(5))
|
||||
src << "<font size=4 color='red'>Attention! Delta security level reached!</font>"
|
||||
src << "<font color='red'>[config.alert_desc_delta]</font>"
|
||||
src << sound('sound/AI/aimalf.ogg')
|
||||
if(82 to 85) //Fake ghosts
|
||||
|
||||
if(src.client)
|
||||
message_admins("[key_name(usr)] just got a fake delta AI message from hallucinating! [formatJumpTo(get_turf(usr))]")
|
||||
else
|
||||
switch(rand(1,10)) //Copied from nanites disease
|
||||
if(1) src << "Your joints feel stiff."
|
||||
if(2) src << "<span class='warning'>Beep...boop..</span>"
|
||||
if(3) src << "<span class='warning'>Bop...beeep...</span>"
|
||||
if(4) src << "<span class='warning'>Your joints feel very stiff.</span>"
|
||||
if(5) src.say(pick("Beep, boop", "beep, beep!", "Boop...bop"))
|
||||
if(6) src << "Your skin feels loose."
|
||||
if(7) src << "<span class='warning'>You feel a stabbing pain in your head.</span>"
|
||||
if(8) src << "<span class='warning'>You can feel something move...inside.</span>"
|
||||
if(9) src << "<span class='warning'>Your skin feels very loose.</span>"
|
||||
if(10) src << "<span class='warning'>Your skin feels as if it's about to burst off...</span>"
|
||||
|
||||
if(78 to 80) //Fake ghosts
|
||||
src << "<i>[pick(boo_phrases)]</i>"
|
||||
if(86) //Fake flash
|
||||
if(81) //Fake flash
|
||||
src << sound('sound/weapons/flash.ogg')
|
||||
src.Weaken(10)
|
||||
flick("e_flash", src.flash)
|
||||
if(87 to 90) //Clown
|
||||
|
||||
if(prob(20))
|
||||
src.Weaken(10)
|
||||
if(82 to 85) //Clown
|
||||
src << get_sfx("clownstep")
|
||||
spawn(rand(16,28))
|
||||
src << get_sfx("clownstep")
|
||||
if(86) //nom nom
|
||||
if(prob(15))
|
||||
var/mob/living/L = src
|
||||
if(prob(50))
|
||||
var/list/mob_list=list()
|
||||
for(var/mob/living/M in view(src))
|
||||
mob_list |= M
|
||||
L = pick(mob_list)
|
||||
|
||||
var/obj/item/random_food = pick(typesof(/obj/item/weapon/reagent_containers/food/snacks) - typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable))
|
||||
if(initial(random_food.icon) && initial(random_food.name) && initial(random_food.icon_state))
|
||||
var/image/foodie = image(initial(random_food.icon), initial(random_food.icon_state))
|
||||
foodie.loc = L
|
||||
foodie.override = 1
|
||||
|
||||
var/client/C = src.client
|
||||
|
||||
C.images += foodie
|
||||
|
||||
if(L == src)
|
||||
src << "<span class='notice'>You feel like a [initial(random_food.name)]. Oh wow!</span>"
|
||||
else
|
||||
src << "<span class='notice'>You smell [initial(random_food.name)]...</span>"
|
||||
|
||||
sleep(rand(50,150))
|
||||
|
||||
if(!C) return
|
||||
|
||||
C.screen -= foodie
|
||||
handling_hal = 0
|
||||
|
||||
|
||||
|
||||
|
||||
/*obj/machinery/proc/mockpanel(list/buttons,start_txt,end_txt,list/mid_txts)
|
||||
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/proc/mockpanel() called tick#: [world.time]")
|
||||
|
||||
@@ -82,3 +82,7 @@
|
||||
set_light(6, 2, LIGHT_COLOR_TUNGSTEN)
|
||||
set_light(6, 2, LIGHT_COLOR_TUNGSTEN)
|
||||
flickering = 0
|
||||
|
||||
/obj/structure/hanging_lantern/spook()
|
||||
if(..())
|
||||
flicker()
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
var/global/list/boo_phrases=list(
|
||||
"You feel a chill run down your spine.",
|
||||
"You think you see a figure in your peripheral vision.",
|
||||
@@ -11,6 +9,16 @@ var/global/list/boo_phrases=list(
|
||||
"It feels like someone's standing behind you.",
|
||||
)
|
||||
|
||||
var/global/list/boo_phrases_drugs=list(
|
||||
"You feel something run down your leg!",
|
||||
"You think you can see an elephant in your peripheral vision.",
|
||||
"Was that a giraffe?",
|
||||
"The hairs stand up on the back of your neck and applaud.",
|
||||
"You are filled with happiness and delight.",
|
||||
"Oh wow! Great stuff!",
|
||||
"You feel like a room without a roof.",
|
||||
)
|
||||
|
||||
var/global/list/boo_phrases_silicon=list(
|
||||
"01100001 00100000 01110100 01110111 01101112",
|
||||
"Stack overflow at line: -2147483648",
|
||||
@@ -47,39 +55,4 @@ var/global/list/boo_phrases_silicon=list(
|
||||
/spell/aoe_turf/boo/cast(list/targets)
|
||||
for(var/turf/T in targets)
|
||||
for(var/atom/A in T.contents)
|
||||
|
||||
// Bug humans
|
||||
if(ishuman(A))
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(H && H.client)
|
||||
H << "<i>[pick(boo_phrases)]</i>"
|
||||
|
||||
if(isrobot(A))
|
||||
var/mob/living/silicon/S = A
|
||||
if(S && S.client)
|
||||
S << "<i>[pick(boo_phrases_silicon)]</i>"
|
||||
|
||||
// Blessed object? Skippit.
|
||||
if(isobj(A) && A:blessed)
|
||||
continue
|
||||
|
||||
// Flicker unblessed lights in range
|
||||
if(istype(A,/obj/machinery/light))
|
||||
var/obj/machinery/light/L = A
|
||||
if(L)
|
||||
L.flicker()
|
||||
|
||||
if(istype(A,/obj/structure/hanging_lantern))
|
||||
var/obj/structure/hanging_lantern/H = A
|
||||
if(H) //Fucked if I know
|
||||
H.flicker()
|
||||
|
||||
// OH GOD BLUE APC (single animation cycle)
|
||||
if(istype(A, /obj/machinery/power/apc))
|
||||
A:spookify()
|
||||
|
||||
if(istype(A, /obj/machinery/status_display))
|
||||
A:spookymode=1
|
||||
|
||||
if(istype(A, /obj/machinery/ai_status_display))
|
||||
A:spookymode=1
|
||||
A.spook()
|
||||
|
||||
@@ -233,7 +233,10 @@
|
||||
visible_message( \
|
||||
"<span class='warning'>[src] was shocked by the [source]!</span>", \
|
||||
"<span class='danger'>You feel a powerful shock course through your body!</span>", \
|
||||
"<span class='warning'>You hear a heavy electrical crack.</span>" \
|
||||
"<span class='warning'>You hear a heavy electrical crack.</span>", \
|
||||
"<span class='notice'>[src] starts raving!</span>", \
|
||||
"<span class='notice'>You feel butterflies in your stomach!</span>", \
|
||||
"<span class='warning'>You hear a policeman whistling!</span>"
|
||||
)
|
||||
|
||||
//if(src.stunned < shock_damage) src.stunned = shock_damage
|
||||
|
||||
@@ -122,7 +122,10 @@
|
||||
visible_message( \
|
||||
"<span class='warning'>[src] was shocked by the [source]!</span>", \
|
||||
"<span class='danger'>You feel a powerful shock course through your body!</span>", \
|
||||
"<span class='warning'>You hear a heavy electrical crack.</span>" \
|
||||
"<span class='warning'>You hear a heavy electrical crack.</span>", \
|
||||
"<span class='notice'>[src] starts raving!</span>", \
|
||||
"<span class='notice'>You feel butterflies in your stomach!</span>", \
|
||||
"<span class='warning'>You hear a policeman whistling!</span>"
|
||||
)
|
||||
|
||||
//if(src.stunned < shock_damage) src.stunned = shock_damage
|
||||
@@ -233,6 +236,8 @@
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] shakes [src] trying to wake [t_him] up!</span>", \
|
||||
"<span class='notice'>You shake [src] trying to wake [t_him] up!</span>", \
|
||||
drugged_message = "<span class='notice'>[M] starts massaging [t_him]'s back.</span>", \
|
||||
self_drugged_message = "<span class='notice'>You start massaging [t_him]'s back.</span>"
|
||||
)
|
||||
// BEGIN HUGCODE - N3X
|
||||
else
|
||||
@@ -356,7 +361,8 @@
|
||||
//actually throw it!
|
||||
if (item)
|
||||
item.forceMove(get_turf(src))
|
||||
src.visible_message("<span class='warning'>[src] has thrown [item].</span>")
|
||||
src.visible_message("<span class='warning'>[src] has thrown [item].</span>", \
|
||||
drugged_message = "<span class='warning'>[item] escapes from [src]'s grasp and flies away!</span>")
|
||||
|
||||
if((istype(src.loc, /turf/space)) || (src.areaMaster.has_gravity == 0))
|
||||
var/mob/space_obj=src
|
||||
@@ -596,7 +602,8 @@
|
||||
src << "<span class='warning'>Your young are not ready yet.</span>"
|
||||
else
|
||||
src << "<span class='danger'>Your host twitches and quivers as you rapidly excrete several larvae from your sluglike body.</span>"
|
||||
visible_message("<span class='danger'>[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!</span>")
|
||||
visible_message("<span class='danger'>[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!</span>", \
|
||||
drugged_message = "<span class='notice'>[src] starts vomiting a rainbow! Suddenly, a pot of gold appears.</span>")
|
||||
B.chemicals -= 100
|
||||
|
||||
B.numChildren++
|
||||
@@ -634,4 +641,4 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/CheckSlip()
|
||||
return !locked_to && !lying
|
||||
return !locked_to && !lying
|
||||
|
||||
@@ -1758,3 +1758,11 @@
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/spook()
|
||||
if(!client) return
|
||||
|
||||
if(!hallucinating())
|
||||
src << "<i>[pick(boo_phrases)]</i>"
|
||||
else
|
||||
src << "<b><font color='[pick("red","orange","yellow","green","blue")]'>[pick(boo_phrases_drugs)]</font></b>"
|
||||
|
||||
@@ -329,7 +329,6 @@ var/global/list/organ_damage_overlays = list(
|
||||
update_overlays = 0
|
||||
UpdateDamageIcon()
|
||||
cycle++
|
||||
|
||||
..()
|
||||
|
||||
//Need this in species.
|
||||
|
||||
@@ -193,6 +193,8 @@
|
||||
|
||||
if(druggy)
|
||||
druggy = max(druggy - 1, 0)
|
||||
if(!druggy)
|
||||
src << "It looks like you are back in Kansas."
|
||||
/*
|
||||
// Increase germ_level regularly
|
||||
if(prob(40))
|
||||
|
||||
@@ -644,7 +644,8 @@ Thanks.
|
||||
if (prob(75))
|
||||
var/obj/item/weapon/grab/G = pick(M.grabbed_by)
|
||||
if (istype(G, /obj/item/weapon/grab))
|
||||
visible_message("<span class='danger'>[src] has pulled [G.affecting] from [G.assailant]'s grip.</span>")
|
||||
visible_message("<span class='danger'>[src] has pulled [G.affecting] from [G.assailant]'s grip.</span>",
|
||||
drugged_message="<span class='danger'>[src] has pulled [G.affecting] from [G.assailant]'s hug.</span>")
|
||||
qdel(G)
|
||||
else
|
||||
ok = 0
|
||||
@@ -710,7 +711,8 @@ Thanks.
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
var/mob/living/captive_brain/H = src
|
||||
|
||||
H << "<span class='danger'>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</span>"
|
||||
H.simple_message("<span class='danger'>You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).</span>",\
|
||||
"<span class='danger'>You attempt to remember who you are and how the heck did you get here (this will probably take a while).</span>")
|
||||
B.host << "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>"
|
||||
|
||||
spawn(rand(350,450)+B.host.brainloss)
|
||||
@@ -719,7 +721,7 @@ Thanks.
|
||||
return
|
||||
|
||||
B.host.adjustBrainLoss(rand(5,10))
|
||||
H << "<span class='danger'>With an immense exertion of will, you regain control of your body!</span>"
|
||||
H.simple_message("<span class='danger'>With an immense exertion of will, you regain control of your body!</span>")
|
||||
B.host << "<span class='danger'>You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.</span>"
|
||||
|
||||
var/mob/living/carbon/C=B.host
|
||||
@@ -741,12 +743,14 @@ Thanks.
|
||||
else
|
||||
if (G.state == GRAB_AGGRESSIVE)
|
||||
if (prob(25))
|
||||
L.visible_message("<span class='danger'>[L] has broken free of [G.assailant]'s grip!</span>")
|
||||
L.visible_message("<span class='danger'>[L] has broken free of [G.assailant]'s grip!</span>", \
|
||||
drugged_message="<span class='danger'>[L] has broken free of [G.assailant]'s hug!</span>")
|
||||
returnToPool(G)
|
||||
else
|
||||
if (G.state == GRAB_NECK)
|
||||
if (prob(5))
|
||||
L.visible_message("<span class='danger'>[L] has broken free of [G.assailant]'s headlock!</span>")
|
||||
L.visible_message("<span class='danger'>[L] has broken free of [G.assailant]'s headlock!</span>", \
|
||||
drugged_message="<span class='danger'>[L] has broken free of [G.assailant]'s passionate hug!</span>")
|
||||
returnToPool(G)
|
||||
if(resisting)
|
||||
L.visible_message("<span class='danger'>[L] resists!</span>")
|
||||
@@ -761,16 +765,19 @@ Thanks.
|
||||
C.delayNextAttack(100)
|
||||
C.delayNextSpecial(100)
|
||||
C.visible_message("<span class='warning'>[C] attempts to unbuckle themself!</span>",
|
||||
"<span class='warning'>You attempt to unbuckle yourself. (This will take around two minutes and you need to stand still).</span>")
|
||||
"<span class='warning'>You attempt to unbuckle yourself (this will take around two minutes, and you need to stay still).</span>",
|
||||
self_drugged_message="<span class='warning'>You attempt to regain control of your legs (this will take a while).</span>")
|
||||
spawn(0)
|
||||
if(do_after(usr, usr, 1200))
|
||||
if(!C.locked_to)
|
||||
return
|
||||
C.visible_message("<span class='danger'>[C] manages to unbuckle themself!</span>",
|
||||
"<span class='notice'>You successfully unbuckle yourself.</span>")
|
||||
C.visible_message("<span class='danger'>[C] manages to unbuckle themself!</span>",\
|
||||
"<span class='notice'>You successfully unbuckle yourself.</span>",\
|
||||
self_drugged_message="<span class='notice'>You successfully regain control of your legs and stand up.</span>")
|
||||
B.manual_unbuckle(C)
|
||||
else
|
||||
C << "<span class='warning'>Your unbuckling attempt was interrupted.</span>"
|
||||
C.simple_message("<span class='warning'>Your unbuckling attempt was interrupted.</span>", \
|
||||
"<span class='warning'>Your attempt to regain control of your legs was interrupted. Damn it!</span>")
|
||||
else
|
||||
B.manual_unbuckle(L)
|
||||
|
||||
@@ -859,7 +866,7 @@ Thanks.
|
||||
if(!CM.handcuffed || CM.locked_to)
|
||||
return
|
||||
CM.visible_message("<span class='danger'>[CM] manages to break the handcuffs!</span>",
|
||||
"<span class='notice'>You successful break your handcuffs.</span>")
|
||||
"<span class='notice'>You successfuly break your handcuffs.</span>")
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
del(CM.handcuffed)
|
||||
CM.handcuffed = null
|
||||
@@ -874,18 +881,21 @@ Thanks.
|
||||
if(!(breakouttime))
|
||||
breakouttime = 1200 //Default
|
||||
CM.visible_message("<span class='danger'>[CM] attempts to remove [HC]!</span>",
|
||||
"<span class='warning'>You attempt to remove [HC]. (This will take around [(breakouttime)/600] minutes and you need to stand still).</span>")
|
||||
"<span class='warning'>You attempt to remove [HC] (this will take around [(breakouttime)/600] minutes and you need to stand still).</span>",
|
||||
self_drugged_message="<span class='warning'>You attempt to regain control of your hands (this will take a while).</span>")
|
||||
spawn(0)
|
||||
if(do_after(CM,CM, breakouttime))
|
||||
if(!CM.handcuffed || CM.locked_to)
|
||||
return // time leniency for lag which also might make this whole thing pointless but the server
|
||||
CM.visible_message("<span class='danger'>[CM] manages to remove [HC]!</span>",
|
||||
"<span class='notice'>You successful remove [HC].</span>")
|
||||
"<span class='notice'>You successfuly remove [HC].</span>",
|
||||
self_drugged_message="<span class='notice'>You successfully regain control of your hands.</span>")
|
||||
CM.handcuffed.loc = usr.loc
|
||||
CM.handcuffed = null
|
||||
CM.update_inv_handcuffed()
|
||||
else
|
||||
CM << "<span class='warning'>Your uncuffing attempt was interrupted.</span>"
|
||||
CM.simple_message("<span class='warning'>Your uncuffing attempt was interrupted.</span>",
|
||||
"<span class='warning'>Your attempt to regain control of your hands was interrupted. Damn it!</span>")
|
||||
|
||||
else if(CM.legcuffed && CM.canmove && CM.special_delayer.blocked())
|
||||
CM.delayNext(DELAY_ALL,100)
|
||||
|
||||
@@ -310,3 +310,6 @@
|
||||
if(max(abs(AM.x-src.x),abs(AM.y-src.y)) <= client.view)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/spook()
|
||||
src << "<i>[pick(boo_phrases)]</i>"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#define MOB_SPACEDRUGS_HALLUCINATING 5
|
||||
#define MOB_MINDBREAKER_HALLUCINATING 100
|
||||
|
||||
/obj/screen/fuckstat
|
||||
name = "Toggle Stat"
|
||||
desc = "Fuck It"
|
||||
@@ -236,10 +239,13 @@ var/global/obj/screen/fuckstat/FUCK = new
|
||||
|
||||
usr.show_message(t, 1)
|
||||
|
||||
#define MESSAGE_SEE 1
|
||||
#define MESSAGE_HEAR 2
|
||||
/mob/proc/simple_message(var/msg, var/hallucination_msg)//Same as M << "message", but with additinal message for hallucinations
|
||||
if(hallucinating() && hallucination_msg)
|
||||
src << hallucination_msg
|
||||
else
|
||||
src << msg
|
||||
|
||||
/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
|
||||
/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1=visible or 2=hearable), alternative message, alt message type (1=if blind or 2=if deaf)
|
||||
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/mob/proc/show_message() called tick#: [world.time]")
|
||||
|
||||
@@ -251,13 +257,13 @@ var/global/obj/screen/fuckstat/FUCK = new
|
||||
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
|
||||
|
||||
if(type)
|
||||
if((type & MESSAGE_SEE) && (sdisabilities & BLIND || blinded || paralysis)) //Vision related //We can't see all those emotes no-one ever does !
|
||||
if((type & MESSAGE_SEE) && is_blind()) //Vision related //We can't see all those emotes no-one ever does !
|
||||
if(!(alt))
|
||||
return
|
||||
else
|
||||
msg = alt
|
||||
type = alt_type
|
||||
if((type & MESSAGE_HEAR) && (sdisabilities & DEAF || ear_deaf)) //Hearing related //We can't hear what the person is saying. Too bad
|
||||
if((type & MESSAGE_HEAR) && is_deaf()) //Hearing related //We can't hear what the person is saying. Too bad
|
||||
if(!(alt))
|
||||
src << "<span class='notice'>You can almost hear someone talking.</span>" //Well, not THAT deaf
|
||||
return //And that does it
|
||||
@@ -288,24 +294,49 @@ var/global/obj/screen/fuckstat/FUCK = new
|
||||
// message is the message output to anyone who can see e.g. "[src] does something!"
|
||||
// self_message (optional) is what the src mob sees e.g. "You do something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
// drugged_message (optional) is shown to hallucinating mobs instead of message
|
||||
// self_drugged_message (optional) is shown to src mob if it's hallucinating
|
||||
// blind_drugged_message (optional) is shown to blind hallucinating people
|
||||
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message)
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message, var/drugged_message, var/self_drugged_message, var/blind_drugged_message)
|
||||
for(var/mob/M in viewers(src))
|
||||
if(M.see_invisible < invisibility)
|
||||
continue
|
||||
var/hallucination = M.hallucinating()
|
||||
var/msg = message
|
||||
if(self_message && M==src)
|
||||
msg = self_message
|
||||
M.show_message( msg, 1, blind_message, 2)
|
||||
var/msg2 = blind_message
|
||||
|
||||
if(hallucination && drugged_message)
|
||||
if(drugged_message)
|
||||
msg = drugged_message
|
||||
if(blind_drugged_message)
|
||||
msg2 = blind_drugged_message
|
||||
|
||||
if(M==src)
|
||||
if(self_message)
|
||||
msg = self_message
|
||||
if(hallucination && self_drugged_message)
|
||||
msg = self_drugged_message
|
||||
|
||||
M.show_message( msg, 1, msg2, 2)
|
||||
|
||||
// Show a message to all mobs in sight of this atom
|
||||
// Use for objects performing visible actions
|
||||
// message is output to anyone who can see, e.g. "The [src] does something!"
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
/atom/proc/visible_message(var/message, var/blind_message)
|
||||
/atom/proc/visible_message(var/message, var/blind_message, var/drugged_message, var/blind_drugged_message)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/atom/proc/visible_message() called tick#: [world.time]")
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message( message, 1, blind_message, 2)
|
||||
var/hallucination = M.hallucinating()
|
||||
var/msg = message
|
||||
var/msg2 = blind_message
|
||||
|
||||
if(hallucination)
|
||||
if(drugged_message)
|
||||
msg = drugged_message
|
||||
if(blind_drugged_message)
|
||||
msg2 = blind_drugged_message
|
||||
M.show_message( msg, 1, msg2, 2)
|
||||
|
||||
|
||||
/mob/proc/findname(msg)
|
||||
@@ -1738,3 +1769,38 @@ mob/proc/walking()
|
||||
|
||||
/mob/can_shuttle_move()
|
||||
return 1
|
||||
|
||||
/mob/proc/is_blind()
|
||||
if(sdisabilities & BLIND || blinded || paralysis)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/is_deaf()
|
||||
if(sdisabilities & DEAF || ear_deaf)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/hallucinating() //Return 1 if hallucinating! This doesn't affect the scary stuff from mindbreaker toxin, but it does affect other stuff (like special messages for interacting with objects)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/mob/proc/hallucinating() called tick#: [world.time]")
|
||||
if(isliving(src))
|
||||
var/mob/living/M = src
|
||||
if(M.hallucination >= MOB_MINDBREAKER_HALLUCINATING)
|
||||
return 1
|
||||
if(M.druggy >= MOB_SPACEDRUGS_HALLUCINATING)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/get_subtle_message(var/msg)
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/mob/proc/get_subtle_message() called tick#: [world.time]")
|
||||
var/pre_msg = "You hear a voice in your head..."
|
||||
if(mind && mind.assigned_role == "Chaplain")
|
||||
pre_msg = "You hear the voice of [ticker.Bible_deity_name] in your head... "
|
||||
if(src.hallucinating()) //If hallucinating, make subtle messages more fun
|
||||
var/adjective = pick("an angry","a funny","a squeaky","a disappointed","your mother's","your father's","[ticker.Bible_deity_name]'s","an annoyed","a brittle","a loud","a very loud","a quiet")
|
||||
var/location = pick(" from above"," from below"," in your head","")
|
||||
pre_msg = pick("You hear [adjective] voice[location]...")
|
||||
|
||||
src << "<b>[pre_msg] <em>[msg]</em></b>"
|
||||
|
||||
#undef MOB_SPACEDRUGS_HALLUCINATING
|
||||
#undef MOB_MINDBREAKER_HALLUCINATING
|
||||
|
||||
@@ -125,7 +125,8 @@
|
||||
if(state < GRAB_AGGRESSIVE)
|
||||
if(!allow_upgrade)
|
||||
return
|
||||
assailant.visible_message("<span class='warning'>[assailant] has grabbed [affecting] aggressively (now hands)!</span>")
|
||||
assailant.visible_message("<span class='warning'>[assailant] has grabbed [affecting] aggressively (now hands)!</span>", \
|
||||
drugged_message = "<span class='warning'>[assailant] has hugged [affecting] passionately!</span>")
|
||||
state = GRAB_AGGRESSIVE
|
||||
icon_state = "grabbed1"
|
||||
else
|
||||
@@ -133,7 +134,8 @@
|
||||
if(isslime(affecting))
|
||||
assailant << "<span class='notice'>You squeeze [affecting], but nothing interesting happens.</span>"
|
||||
return
|
||||
assailant.visible_message("<span class='warning'>[assailant] has reinforced \his grip on [affecting] (now neck)!</span>")
|
||||
assailant.visible_message("<span class='warning'>[assailant] has reinforced \his grip on [affecting] (now neck)!</span>", \
|
||||
drugged_message = "<span class='warning'>[assailant] has reinforced \his hug on [affecting]!</span>")
|
||||
state = GRAB_NECK
|
||||
icon_state = "grabbed+1"
|
||||
if(!affecting.locked_to)
|
||||
@@ -145,7 +147,8 @@
|
||||
hud.name = "disarm/kill"
|
||||
else
|
||||
if(state < GRAB_UPGRADING)
|
||||
assailant.visible_message("<span class='danger'>[assailant] starts to tighten \his grip on [affecting]'s neck!</span>")
|
||||
assailant.visible_message("<span class='danger'>[assailant] starts to tighten \his grip on [affecting]'s neck!</span>", \
|
||||
drugged_message = "<span class='danger'>[assailant] starts to tighten \his hug on [affecting]!</span>")
|
||||
hud.icon_state = "disarm/kill1"
|
||||
state = GRAB_UPGRADING
|
||||
if(do_after(assailant,affecting, UPGRADE_KILL_TIMER))
|
||||
@@ -158,7 +161,8 @@
|
||||
returnToPool(src)
|
||||
return
|
||||
state = GRAB_KILL
|
||||
assailant.visible_message("<span class='danger'>[assailant] has tightened \his grip on [affecting]'s neck!</span>")
|
||||
assailant.visible_message("<span class='danger'>[assailant] has tightened \his grip on [affecting]'s neck!</span>", \
|
||||
drugged_message = "<span class='danger'>[assailant] has tightened \his hug on [affecting]!</span>")
|
||||
affecting.attack_log += "\[[time_stamp()]\] <font color='orange'>Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])</font>"
|
||||
assailant.attack_log += "\[[time_stamp()]\] <font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>"
|
||||
log_attack("<font color='red'>[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
|
||||
@@ -171,7 +175,8 @@
|
||||
if(!assailant || !affecting)
|
||||
returnToPool(src)
|
||||
return
|
||||
assailant.visible_message("<span class='warning'>[assailant] was unable to tighten \his grip on [affecting]'s neck!</span>")
|
||||
assailant.visible_message("<span class='warning'>[assailant] was unable to tighten \his grip on [affecting]'s neck!</span>", \
|
||||
drugged_message = "<span class='warning'>[affecting] refused [assailant]'s hug!</span>")
|
||||
hud.icon_state = "disarm/kill"
|
||||
state = GRAB_NECK
|
||||
|
||||
@@ -202,12 +207,14 @@
|
||||
if(M == assailant && state >= GRAB_AGGRESSIVE)
|
||||
if( (ishuman(user) && (M_FAT in user.mutations) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
|
||||
var/mob/living/carbon/attacker = user
|
||||
user.visible_message("<span class='danger'>[user] is attempting to devour [affecting]!</span>")
|
||||
user.visible_message("<span class='danger'>[user] is attempting to devour [affecting]!</span>", \
|
||||
drugged_message="<span class='danger'>[user] is attempting to kiss [affecting]! Ew!</span>")
|
||||
if(istype(user, /mob/living/carbon/alien/humanoid/hunter))
|
||||
if(!do_mob(user, affecting)) return
|
||||
else
|
||||
if(!do_mob(user, affecting, 100)) return
|
||||
user.visible_message("<span class='danger'>[user] devours [affecting]!</span>")
|
||||
user.visible_message("<span class='danger'>[user] devours [affecting]!</span>", \
|
||||
drugged_message="<span class='danger'>[affecting] vanishes in disgust.</span>")
|
||||
affecting.loc = user
|
||||
attacker.stomach_contents.Add(affecting)
|
||||
returnToPool(src)
|
||||
|
||||
@@ -345,12 +345,14 @@
|
||||
if(G.state == GRAB_AGGRESSIVE)
|
||||
mob.delayNextMove(10)
|
||||
if(!prob(25)) return 1
|
||||
mob.visible_message("<span class='warning'> [mob] has broken free of [G.assailant]'s grip!</span>")
|
||||
mob.visible_message("<span class='warning'>[mob] has broken free of [G.assailant]'s grip!</span>",
|
||||
drugged_message="<span class='warning'>[mob] has broken free of [G.assailant]'s hug!</span>")
|
||||
returnToPool(G)
|
||||
if(G.state == GRAB_NECK)
|
||||
mob.delayNextMove(10)
|
||||
if(!prob(5)) return 1
|
||||
mob.visible_message("<span class='warning'> [mob] has broken free of [G.assailant]'s headlock!</span>")
|
||||
mob.visible_message("<span class='warning'>[mob] has broken free of [G.assailant]'s headlock!</span>",
|
||||
drugged_message="<span class='warning'>[mob] has broken free of [G.assailant]'s passionate hug!</span>")
|
||||
returnToPool(G)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -350,9 +350,11 @@
|
||||
update_icon()
|
||||
updating_icon = 0
|
||||
|
||||
/obj/machinery/power/apc/proc/spookify()
|
||||
/obj/machinery/power/apc/spook()
|
||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/machinery/power/apc/proc/spookify() called tick#: [world.time]")
|
||||
if(spooky) return // Fuck you we're already spooky
|
||||
if(!..()) return //If blessed, return
|
||||
|
||||
spooky=1
|
||||
update_icon()
|
||||
spawn(10)
|
||||
|
||||
@@ -161,6 +161,10 @@ var/global/list/obj/machinery/light/alllights = list()
|
||||
|
||||
var/idle = 0 // For process().
|
||||
|
||||
/obj/machinery/light/spook()
|
||||
if(..())
|
||||
flicker()
|
||||
|
||||
// the smaller bulb light fixture
|
||||
|
||||
/obj/machinery/light/cultify()
|
||||
|
||||
@@ -1240,3 +1240,7 @@ var/proccalls = 1
|
||||
#define SIZE_HUGE 5 //Pine trees
|
||||
|
||||
#define ADIABATIC_EXPONENT 0.667 //This means something g-guys
|
||||
|
||||
//For mob/proc/show_message (code/modules/mob/mob.dm @ 248)
|
||||
#define MESSAGE_SEE 1 //Visible message
|
||||
#define MESSAGE_HEAR 2 //Hearable message
|
||||
|
||||
Reference in New Issue
Block a user