Merge pull request #2198 from Citadel-Station-13/upstream-merge-29288
[MIRROR] Hallucinations 3.0
This commit is contained in:
+11
-10
@@ -1,15 +1,16 @@
|
|||||||
//Investigate logging defines
|
//Investigate logging defines
|
||||||
#define INVESTIGATE_ATMOS "atmos"
|
#define INVESTIGATE_ATMOS "atmos"
|
||||||
#define INVESTIGATE_BOTANY "botany"
|
#define INVESTIGATE_BOTANY "botany"
|
||||||
#define INVESTIGATE_CARGO "cargo"
|
#define INVESTIGATE_CARGO "cargo"
|
||||||
#define INVESTIGATE_EXPERIMENTOR "experimentor"
|
#define INVESTIGATE_EXPERIMENTOR "experimentor"
|
||||||
#define INVESTIGATE_GRAVITY "gravity"
|
#define INVESTIGATE_GRAVITY "gravity"
|
||||||
#define INVESTIGATE_RECORDS "records"
|
#define INVESTIGATE_RECORDS "records"
|
||||||
#define INVESTIGATE_SINGULO "singulo"
|
#define INVESTIGATE_SINGULO "singulo"
|
||||||
#define INVESTIGATE_SUPERMATTER "supermatter"
|
#define INVESTIGATE_SUPERMATTER "supermatter"
|
||||||
#define INVESTIGATE_TELESCI "telesci"
|
#define INVESTIGATE_TELESCI "telesci"
|
||||||
#define INVESTIGATE_WIRES "wires"
|
#define INVESTIGATE_WIRES "wires"
|
||||||
#define INVESTIGATE_PORTAL "portals"
|
#define INVESTIGATE_PORTAL "portals"
|
||||||
|
#define INVESTIGATE_HALLUCINATIONS "hallucinations"
|
||||||
|
|
||||||
//Individual logging defines
|
//Individual logging defines
|
||||||
#define INDIVIDUAL_ATTACK_LOG "Attack log"
|
#define INDIVIDUAL_ATTACK_LOG "Attack log"
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
diff a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm (rejected hunks)
|
||||||
|
@@ -9,6 +9,7 @@
|
||||||
|
#define INVESTIGATE_SUPERMATTER "supermatter"
|
||||||
|
#define INVESTIGATE_TELESCI "telesci"
|
||||||
|
#define INVESTIGATE_WIRES "wires"
|
||||||
|
+#define INVESTIGATE_HALLUCINATIONS "hallucinations"
|
||||||
|
|
||||||
|
//Individual logging defines
|
||||||
|
#define INDIVIDUAL_ATTACK_LOG "Attack log"
|
||||||
@@ -929,6 +929,26 @@
|
|||||||
manipulate_organs(C)
|
manipulate_organs(C)
|
||||||
href_list["datumrefresh"] = href_list["editorgans"]
|
href_list["datumrefresh"] = href_list["editorgans"]
|
||||||
|
|
||||||
|
else if(href_list["hallucinate"])
|
||||||
|
if(!check_rights(0))
|
||||||
|
return
|
||||||
|
|
||||||
|
var/mob/living/carbon/C = locate(href_list["hallucinate"]) in GLOB.mob_list
|
||||||
|
if(!istype(C))
|
||||||
|
to_chat(usr, "This can only be done to instances of type /mob/living/carbon")
|
||||||
|
return
|
||||||
|
|
||||||
|
var/list/hallucinations = subtypesof(/datum/hallucination)
|
||||||
|
var/result = input(usr, "Choose the hallucination to apply","Send Hallucination") as null|anything in hallucinations
|
||||||
|
if(!usr)
|
||||||
|
return
|
||||||
|
if(QDELETED(C))
|
||||||
|
to_chat(usr, "Mob doesn't exist anymore")
|
||||||
|
return
|
||||||
|
|
||||||
|
if(result)
|
||||||
|
new result(C, TRUE)
|
||||||
|
|
||||||
else if(href_list["makehuman"])
|
else if(href_list["makehuman"])
|
||||||
if(!check_rights(R_SPAWN))
|
if(!check_rights(R_SPAWN))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -59,4 +59,4 @@ Bonus
|
|||||||
else
|
else
|
||||||
if(prob(base_message_chance))
|
if(prob(base_message_chance))
|
||||||
to_chat(M, "<span class='userdanger'>[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]</span>")
|
to_chat(M, "<span class='userdanger'>[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]</span>")
|
||||||
M.hallucination += (15 * power)
|
M.hallucination += (45 * power)
|
||||||
|
|||||||
@@ -233,9 +233,13 @@
|
|||||||
return
|
return
|
||||||
else /*if(src.justzap)*/
|
else /*if(src.justzap)*/
|
||||||
return
|
return
|
||||||
else if(user.hallucination > 50 && ishuman(user) && prob(10) && src.operating == FALSE)
|
else if(user.hallucinating() && ishuman(user) && prob(4) && !operating)
|
||||||
hallucinate_shock(user)
|
var/mob/living/carbon/human/H = user
|
||||||
return
|
if(H.gloves)
|
||||||
|
var/obj/item/clothing/gloves/G = H.gloves
|
||||||
|
if(G.siemens_coefficient)//not insulated
|
||||||
|
hallucinate_shock(H)
|
||||||
|
return
|
||||||
if (cyclelinkedairlock)
|
if (cyclelinkedairlock)
|
||||||
if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user))
|
if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user))
|
||||||
if(cyclelinkedairlock.operating)
|
if(cyclelinkedairlock.operating)
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0)
|
var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0)
|
||||||
|
|
||||||
spawn(0)
|
spawn(0)
|
||||||
new /obj/effect/hallucination/delusion(victim.loc,victim,"demon",duration,0)
|
new /datum/hallucination/delusion(victim, TRUE, "demon",duration,0)
|
||||||
|
|
||||||
var/obj/item/weapon/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc)
|
var/obj/item/weapon/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc)
|
||||||
chainsaw.flags |= NODROP
|
chainsaw.flags |= NODROP
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
F << "<small>[time_stamp()] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
|
F << "<small>[time_stamp()] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
|
||||||
|
|
||||||
|
|
||||||
/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY) )
|
/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) )
|
||||||
set name = "Investigate"
|
set name = "Investigate"
|
||||||
set category = "Admin"
|
set category = "Admin"
|
||||||
if(!holder)
|
if(!holder)
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
diff a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm (rejected hunks)
|
||||||
|
@@ -5,7 +5,7 @@
|
||||||
|
F << "<small>[time_stamp()] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
|
||||||
|
|
||||||
|
|
||||||
|
-/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY) )
|
||||||
|
+/client/proc/investigate_show(subject in list("hrefs","notes, memos, watchlist", INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS) )
|
||||||
|
set name = "Investigate"
|
||||||
|
set category = "Admin"
|
||||||
|
if(!holder)
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -240,6 +240,12 @@
|
|||||||
/mob/living/carbon/is_muzzled()
|
/mob/living/carbon/is_muzzled()
|
||||||
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||||
|
|
||||||
|
/mob/living/carbon/hallucinating()
|
||||||
|
if(hallucination)
|
||||||
|
return TRUE
|
||||||
|
else
|
||||||
|
return FALSE
|
||||||
|
|
||||||
/mob/living/carbon/resist_buckle()
|
/mob/living/carbon/resist_buckle()
|
||||||
if(restrained())
|
if(restrained())
|
||||||
changeNext_move(CLICK_CD_BREAKOUT)
|
changeNext_move(CLICK_CD_BREAKOUT)
|
||||||
@@ -812,3 +818,4 @@
|
|||||||
.["Make AI"] = "?_src_=vars;makeai=\ref[src]"
|
.["Make AI"] = "?_src_=vars;makeai=\ref[src]"
|
||||||
.["Modify bodypart"] = "?_src_=vars;editbodypart=\ref[src]"
|
.["Modify bodypart"] = "?_src_=vars;editbodypart=\ref[src]"
|
||||||
.["Modify organs"] = "?_src_=vars;editorgans=\ref[src]"
|
.["Modify organs"] = "?_src_=vars;editorgans=\ref[src]"
|
||||||
|
.["Hallucinate"] = "?_src_=vars;hallucinate=\ref[src]"
|
||||||
|
|||||||
@@ -378,8 +378,7 @@
|
|||||||
adjust_drugginess(-1)
|
adjust_drugginess(-1)
|
||||||
|
|
||||||
if(hallucination)
|
if(hallucination)
|
||||||
spawn handle_hallucinations()
|
handle_hallucinations()
|
||||||
hallucination = max(hallucination-2,0)
|
|
||||||
|
|
||||||
//used in human and monkey handle_environment()
|
//used in human and monkey handle_environment()
|
||||||
/mob/living/carbon/proc/natural_bodytemperature_stabilization()
|
/mob/living/carbon/proc/natural_bodytemperature_stabilization()
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
|
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(. && ishuman(target) && target != summoner)
|
if(. && ishuman(target) && target != summoner)
|
||||||
new /obj/effect/hallucination/delusion(target.loc,target,"custom",200,0, icon_state,icon)
|
new /datum/hallucination/delusion(target,TRUE,"custom",200,0, icon_state,icon)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
|
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -325,6 +325,9 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
|||||||
return B.eye_blind
|
return B.eye_blind
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
/mob/proc/hallucinating()
|
||||||
|
return FALSE
|
||||||
|
|
||||||
/proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this.
|
/proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this.
|
||||||
if(!SSticker.HasRoundStarted())
|
if(!SSticker.HasRoundStarted())
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -387,3 +387,232 @@
|
|||||||
var/obj/effect/ebeam/B = b
|
var/obj/effect/ebeam/B = b
|
||||||
animate(B, alpha = 0, time = 32)
|
animate(B, alpha = 0, time = 32)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination
|
||||||
|
name = "bullet"
|
||||||
|
icon = null
|
||||||
|
icon_state = null
|
||||||
|
hitsound = ""
|
||||||
|
suppressed = TRUE
|
||||||
|
ricochets_max = 0
|
||||||
|
ricochet_chance = 0
|
||||||
|
damage = 0
|
||||||
|
nodamage = TRUE
|
||||||
|
projectile_type = /obj/item/projectile/hallucination
|
||||||
|
log_override = TRUE
|
||||||
|
var/hal_icon_state
|
||||||
|
var/image/fake_icon
|
||||||
|
var/mob/living/carbon/hal_target
|
||||||
|
var/hal_fire_sound
|
||||||
|
var/hal_hitsound
|
||||||
|
var/hal_hitsound_wall
|
||||||
|
var/hal_impact_effect
|
||||||
|
var/hal_impact_effect_wall
|
||||||
|
var/hit_duration
|
||||||
|
var/hit_duration_wall
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/fire()
|
||||||
|
..()
|
||||||
|
fake_icon = image('icons/obj/projectiles.dmi', src, hal_icon_state, ABOVE_MOB_LAYER)
|
||||||
|
if(hal_target.client)
|
||||||
|
hal_target.client.images += fake_icon
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/Destroy()
|
||||||
|
if(hal_target.client)
|
||||||
|
hal_target.client.images -= fake_icon
|
||||||
|
QDEL_NULL(fake_icon)
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/Collide(atom/A)
|
||||||
|
if(!ismob(A))
|
||||||
|
if(hal_hitsound_wall)
|
||||||
|
hal_target.playsound_local(loc, hal_hitsound_wall, 40, 1)
|
||||||
|
if(hal_impact_effect_wall)
|
||||||
|
spawn_hit(A, TRUE)
|
||||||
|
else if(A == hal_target)
|
||||||
|
if(hal_hitsound)
|
||||||
|
hal_target.playsound_local(A, hal_hitsound, 100, 1)
|
||||||
|
target_on_hit(A)
|
||||||
|
qdel(src)
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/proc/target_on_hit(mob/M)
|
||||||
|
if(M == hal_target)
|
||||||
|
to_chat(hal_target, "<span class='userdanger'>[M] is hit by \a [src] in the chest!</span>")
|
||||||
|
hal_apply_effect()
|
||||||
|
else if(M in view(hal_target))
|
||||||
|
to_chat(hal_target, "<span class='danger'>[M] is hit by \a [src] in the chest!!</span>")
|
||||||
|
if(damage_type == BRUTE)
|
||||||
|
var/splatter_dir = dir
|
||||||
|
if(starting)
|
||||||
|
splatter_dir = get_dir(starting, get_turf(M))
|
||||||
|
spawn_blood(M, splatter_dir)
|
||||||
|
else if(hal_impact_effect)
|
||||||
|
spawn_hit(M, FALSE)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/proc/spawn_blood(mob/M, set_dir)
|
||||||
|
set waitfor = 0
|
||||||
|
if(!hal_target.client)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/splatter_icon_state
|
||||||
|
if(set_dir in GLOB.diagonals)
|
||||||
|
splatter_icon_state = "splatter[pick(1, 2, 6)]"
|
||||||
|
else
|
||||||
|
splatter_icon_state = "splatter[pick(3, 4, 5)]"
|
||||||
|
|
||||||
|
var/image/blood = image('icons/effects/blood.dmi', M, splatter_icon_state, ABOVE_MOB_LAYER)
|
||||||
|
var/target_pixel_x = 0
|
||||||
|
var/target_pixel_y = 0
|
||||||
|
switch(set_dir)
|
||||||
|
if(NORTH)
|
||||||
|
target_pixel_y = 16
|
||||||
|
if(SOUTH)
|
||||||
|
target_pixel_y = -16
|
||||||
|
layer = ABOVE_MOB_LAYER
|
||||||
|
if(EAST)
|
||||||
|
target_pixel_x = 16
|
||||||
|
if(WEST)
|
||||||
|
target_pixel_x = -16
|
||||||
|
if(NORTHEAST)
|
||||||
|
target_pixel_x = 16
|
||||||
|
target_pixel_y = 16
|
||||||
|
if(NORTHWEST)
|
||||||
|
target_pixel_x = -16
|
||||||
|
target_pixel_y = 16
|
||||||
|
if(SOUTHEAST)
|
||||||
|
target_pixel_x = 16
|
||||||
|
target_pixel_y = -16
|
||||||
|
layer = ABOVE_MOB_LAYER
|
||||||
|
if(SOUTHWEST)
|
||||||
|
target_pixel_x = -16
|
||||||
|
target_pixel_y = -16
|
||||||
|
layer = ABOVE_MOB_LAYER
|
||||||
|
hal_target.client.images += blood
|
||||||
|
animate(blood, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = 5)
|
||||||
|
sleep(5)
|
||||||
|
hal_target.client.images -= blood
|
||||||
|
qdel(blood)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/proc/spawn_hit(atom/A, is_wall)
|
||||||
|
set waitfor = 0
|
||||||
|
if(!hal_target.client)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/image/hit_effect = image('icons/effects/blood.dmi', A, is_wall ? hal_impact_effect_wall : hal_impact_effect, ABOVE_MOB_LAYER)
|
||||||
|
hit_effect.pixel_x = A.pixel_x + rand(-4,4)
|
||||||
|
hit_effect.pixel_y = A.pixel_y + rand(-4,4)
|
||||||
|
hal_target.client.images += hit_effect
|
||||||
|
sleep(is_wall ? hit_duration_wall : hit_duration)
|
||||||
|
hal_target.client.images -= hit_effect
|
||||||
|
qdel(hit_effect)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/proc/hal_apply_effect()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/bullet
|
||||||
|
name = "bullet"
|
||||||
|
hal_icon_state = "bullet"
|
||||||
|
hal_fire_sound = "gunshot"
|
||||||
|
hal_hitsound = 'sound/weapons/pierce.ogg'
|
||||||
|
hal_hitsound_wall = "ricochet"
|
||||||
|
hal_impact_effect = "impact_bullet"
|
||||||
|
hal_impact_effect_wall = "impact_bullet"
|
||||||
|
hit_duration = 5
|
||||||
|
hit_duration_wall = 5
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/bullet/hal_apply_effect()
|
||||||
|
hal_target.adjustStaminaLoss(60)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/laser
|
||||||
|
name = "laser"
|
||||||
|
damage_type = BURN
|
||||||
|
hal_icon_state = "laser"
|
||||||
|
hal_fire_sound = 'sound/weapons/laser.ogg'
|
||||||
|
hal_hitsound = 'sound/weapons/sear.ogg'
|
||||||
|
hal_hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||||
|
hal_impact_effect = "impact_laser"
|
||||||
|
hal_impact_effect_wall = "impact_laser_wall"
|
||||||
|
hit_duration = 4
|
||||||
|
hit_duration_wall = 10
|
||||||
|
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/laser/hal_apply_effect()
|
||||||
|
hal_target.adjustStaminaLoss(20)
|
||||||
|
hal_target.blur_eyes(2)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/taser
|
||||||
|
name = "electrode"
|
||||||
|
damage_type = BURN
|
||||||
|
hal_icon_state = "spark"
|
||||||
|
color = "#FFFF00"
|
||||||
|
hal_fire_sound = 'sound/weapons/taser.ogg'
|
||||||
|
hal_hitsound = 'sound/weapons/taserhit.ogg'
|
||||||
|
hal_hitsound_wall = null
|
||||||
|
hal_impact_effect = null
|
||||||
|
hal_impact_effect_wall = null
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/taser/hal_apply_effect()
|
||||||
|
hal_target.Knockdown(100)
|
||||||
|
hal_target.stuttering += 20
|
||||||
|
if(hal_target.dna && hal_target.dna.check_mutation(HULK))
|
||||||
|
hal_target.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||||
|
else if(hal_target.status_flags & CANKNOCKDOWN)
|
||||||
|
addtimer(CALLBACK(hal_target, /mob/living/carbon.proc/do_jitter_animation, 20), 5)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/disabler
|
||||||
|
name = "disabler beam"
|
||||||
|
damage_type = STAMINA
|
||||||
|
hal_icon_state = "omnilaser"
|
||||||
|
hal_fire_sound = 'sound/weapons/taser2.ogg'
|
||||||
|
hal_hitsound = 'sound/weapons/tap.ogg'
|
||||||
|
hal_hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||||
|
hal_impact_effect = "impact_laser_blue"
|
||||||
|
hal_impact_effect_wall = null
|
||||||
|
hit_duration = 4
|
||||||
|
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/disabler/hal_apply_effect()
|
||||||
|
hal_target.adjustStaminaLoss(25)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/ebow
|
||||||
|
name = "bolt"
|
||||||
|
damage_type = TOX
|
||||||
|
hal_icon_state = "cbbolt"
|
||||||
|
hal_fire_sound = 'sound/weapons/genhit.ogg'
|
||||||
|
hal_hitsound = null
|
||||||
|
hal_hitsound_wall = null
|
||||||
|
hal_impact_effect = null
|
||||||
|
hal_impact_effect_wall = null
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/ebow/hal_apply_effect()
|
||||||
|
hal_target.Knockdown(100)
|
||||||
|
hal_target.stuttering += 5
|
||||||
|
hal_target.adjustStaminaLoss(8)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/change
|
||||||
|
name = "bolt of change"
|
||||||
|
damage_type = BURN
|
||||||
|
hal_icon_state = "ice_1"
|
||||||
|
hal_fire_sound = 'sound/magic/staff_change.ogg'
|
||||||
|
hal_hitsound = null
|
||||||
|
hal_hitsound_wall = null
|
||||||
|
hal_impact_effect = null
|
||||||
|
hal_impact_effect_wall = null
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/change/hal_apply_effect()
|
||||||
|
new /datum/hallucination/self_delusion(hal_target, TRUE, wabbajack = FALSE)
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/death
|
||||||
|
name = "bolt of death"
|
||||||
|
damage_type = BURN
|
||||||
|
hal_icon_state = "pulse1_bl"
|
||||||
|
hal_fire_sound = 'sound/magic/wandodeath.ogg'
|
||||||
|
hal_hitsound = null
|
||||||
|
hal_hitsound_wall = null
|
||||||
|
hal_impact_effect = null
|
||||||
|
hal_impact_effect_wall = null
|
||||||
|
|
||||||
|
/obj/item/projectile/hallucination/death/hal_apply_effect()
|
||||||
|
new /datum/hallucination/death(hal_target, TRUE)
|
||||||
|
|||||||
@@ -101,9 +101,11 @@
|
|||||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550, master_ui, state)
|
ui = new(user, src, ui_key, "chem_dispenser", name, 550, 550, master_ui, state)
|
||||||
|
if(user.hallucinating())
|
||||||
|
ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals
|
||||||
ui.open()
|
ui.open()
|
||||||
|
|
||||||
/obj/machinery/chem_dispenser/ui_data()
|
/obj/machinery/chem_dispenser/ui_data(mob/user)
|
||||||
var/data = list()
|
var/data = list()
|
||||||
data["amount"] = amount
|
data["amount"] = amount
|
||||||
data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI.
|
data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI.
|
||||||
@@ -128,10 +130,16 @@
|
|||||||
data["beakerTransferAmounts"] = null
|
data["beakerTransferAmounts"] = null
|
||||||
|
|
||||||
var chemicals[0]
|
var chemicals[0]
|
||||||
|
var/is_hallucinating = FALSE
|
||||||
|
if(user.hallucinating())
|
||||||
|
is_hallucinating = TRUE
|
||||||
for(var/re in dispensable_reagents)
|
for(var/re in dispensable_reagents)
|
||||||
var/datum/reagent/temp = GLOB.chemical_reagents_list[re]
|
var/datum/reagent/temp = GLOB.chemical_reagents_list[re]
|
||||||
if(temp)
|
if(temp)
|
||||||
chemicals.Add(list(list("title" = temp.name, "id" = temp.id)))
|
var/chemname = temp.name
|
||||||
|
if(is_hallucinating && prob(5))
|
||||||
|
chemname = "[pick_list_replacements("hallucination.json", "chemicals")]"
|
||||||
|
chemicals.Add(list(list("title" = chemname, "id" = temp.id)))
|
||||||
data["chemicals"] = chemicals
|
data["chemicals"] = chemicals
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|||||||
@@ -290,9 +290,8 @@
|
|||||||
//HALLUCINATE
|
//HALLUCINATE
|
||||||
else if((findtext(message, hallucinate_words)))
|
else if((findtext(message, hallucinate_words)))
|
||||||
cooldown = COOLDOWN_MEME
|
cooldown = COOLDOWN_MEME
|
||||||
for(var/V in listeners)
|
for(var/mob/living/carbon/C in listeners)
|
||||||
var/mob/living/L = V
|
new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0)
|
||||||
new /obj/effect/hallucination/delusion(get_turf(L),L,null,150 * power_multiplier,0)
|
|
||||||
|
|
||||||
//WAKE UP
|
//WAKE UP
|
||||||
else if((findtext(message, wakeup_words)))
|
else if((findtext(message, wakeup_words)))
|
||||||
|
|||||||
@@ -0,0 +1,229 @@
|
|||||||
|
{
|
||||||
|
"suspicion": [
|
||||||
|
"I'm watching you...",
|
||||||
|
"I know what you're doing",
|
||||||
|
"What are you hiding?",
|
||||||
|
"I saw that"
|
||||||
|
],
|
||||||
|
|
||||||
|
"greetings": [
|
||||||
|
"",
|
||||||
|
"Hey, ",
|
||||||
|
"Hi ",
|
||||||
|
"Hello ",
|
||||||
|
"Wait, ",
|
||||||
|
"It's "
|
||||||
|
],
|
||||||
|
|
||||||
|
"getout": [
|
||||||
|
"Get out",
|
||||||
|
"Get out!",
|
||||||
|
"Go away",
|
||||||
|
"Fuck off",
|
||||||
|
"OUT!",
|
||||||
|
"Out!"
|
||||||
|
],
|
||||||
|
|
||||||
|
"weird": [
|
||||||
|
"Kchck-Chkck? Kchchck!",
|
||||||
|
"Kchckchk...",
|
||||||
|
"EEEeeeeEEEE",
|
||||||
|
"khhhhh",
|
||||||
|
"#@§*&£",
|
||||||
|
"H**p m*",
|
||||||
|
"H-hhhhh..."
|
||||||
|
],
|
||||||
|
|
||||||
|
"didyouhearthat": [
|
||||||
|
"Did you hear that?",
|
||||||
|
"Did you see that?",
|
||||||
|
"What was that?"
|
||||||
|
],
|
||||||
|
|
||||||
|
"imatraitor": [
|
||||||
|
"Hail Ratvar",
|
||||||
|
"Hail Nar'Sie",
|
||||||
|
"Hey, i've got some TC left, want something?",
|
||||||
|
"Viva!",
|
||||||
|
"I'll spare you if you don't tell anybody about me",
|
||||||
|
"Hey, are you a traitor too?",
|
||||||
|
"You're my target, but @pick(excuses)",
|
||||||
|
"Are you mr. @pick(ling_names)?"
|
||||||
|
],
|
||||||
|
|
||||||
|
"excuses": [
|
||||||
|
"i like you, so i'll spare you",
|
||||||
|
"i don't really feel like following objectives today",
|
||||||
|
"i'm not robust enough to fight you",
|
||||||
|
"who cares",
|
||||||
|
"i'll kill you later"
|
||||||
|
]
|
||||||
|
|
||||||
|
"ling_names": [
|
||||||
|
"Alpha",
|
||||||
|
"Beta",
|
||||||
|
"Gamma",
|
||||||
|
"Delta",
|
||||||
|
"Epsilon",
|
||||||
|
"Eta",
|
||||||
|
"Theta",
|
||||||
|
"Lambda",
|
||||||
|
"Mu",
|
||||||
|
"Xi",
|
||||||
|
"Rho",
|
||||||
|
"Sigma",
|
||||||
|
"Tau",
|
||||||
|
"Upsilon",
|
||||||
|
"Phi",
|
||||||
|
"Psi",
|
||||||
|
"Omega"
|
||||||
|
]
|
||||||
|
|
||||||
|
"doubt": [
|
||||||
|
"Why?",
|
||||||
|
"What?",
|
||||||
|
"Wait, what?",
|
||||||
|
"Wait",
|
||||||
|
"Hold on",
|
||||||
|
"Uh..."
|
||||||
|
],
|
||||||
|
|
||||||
|
"aggressive": [
|
||||||
|
"Give me that!",
|
||||||
|
"I'm going to kill you!",
|
||||||
|
"Fuck you!"
|
||||||
|
],
|
||||||
|
|
||||||
|
"help": [
|
||||||
|
"HELP",
|
||||||
|
"HELP ME",
|
||||||
|
"HELP HIM",
|
||||||
|
"HELP HER",
|
||||||
|
"HELP THEM",
|
||||||
|
"HELP US",
|
||||||
|
"HELP YOURSELF"
|
||||||
|
],
|
||||||
|
|
||||||
|
"escape": [
|
||||||
|
"RUN!!",
|
||||||
|
"They're behind me!",
|
||||||
|
"It's here!",
|
||||||
|
"Follow me!",
|
||||||
|
"Follow me"
|
||||||
|
]
|
||||||
|
|
||||||
|
"infection_advice": [
|
||||||
|
"stay away",
|
||||||
|
"don't get close",
|
||||||
|
"be careful",
|
||||||
|
"help me",
|
||||||
|
"kill me"
|
||||||
|
]
|
||||||
|
|
||||||
|
"people": [
|
||||||
|
"Captain",
|
||||||
|
"Hos",
|
||||||
|
"Cmo",
|
||||||
|
"Rd",
|
||||||
|
"Ce",
|
||||||
|
"Hop",
|
||||||
|
"Janitor",
|
||||||
|
"AI",
|
||||||
|
"Viro",
|
||||||
|
"Qm",
|
||||||
|
"[target.first_name()]"
|
||||||
|
]
|
||||||
|
|
||||||
|
"accusations": [
|
||||||
|
"rogue",
|
||||||
|
"cult",
|
||||||
|
"a cultist",
|
||||||
|
"clockcult",
|
||||||
|
"a clock cultist",
|
||||||
|
"a revhead",
|
||||||
|
"a rev",
|
||||||
|
"a gang leader",
|
||||||
|
"a gangster",
|
||||||
|
"a traitor",
|
||||||
|
"a tator",
|
||||||
|
"a ling",
|
||||||
|
"a changeling"
|
||||||
|
]
|
||||||
|
|
||||||
|
"threat": [
|
||||||
|
"Cult",
|
||||||
|
"Wizard",
|
||||||
|
"Blob",
|
||||||
|
"Ling",
|
||||||
|
"Ops",
|
||||||
|
"Swarmers",
|
||||||
|
"Revenant",
|
||||||
|
"Traitor",
|
||||||
|
"Harm",
|
||||||
|
"I hear flashing",
|
||||||
|
"Help"
|
||||||
|
]
|
||||||
|
|
||||||
|
"location": [
|
||||||
|
"bridge",
|
||||||
|
"armory",
|
||||||
|
"sec",
|
||||||
|
"security",
|
||||||
|
"science",
|
||||||
|
"engineering",
|
||||||
|
"cargo",
|
||||||
|
"medbay",
|
||||||
|
"atmos",
|
||||||
|
"maint",
|
||||||
|
"hops office",
|
||||||
|
"captains office",
|
||||||
|
"chapel",
|
||||||
|
"library",
|
||||||
|
"tool storage",
|
||||||
|
"botany",
|
||||||
|
"kitchen",
|
||||||
|
"the ai sat"
|
||||||
|
]
|
||||||
|
|
||||||
|
"advice": [
|
||||||
|
"Hmm...not sure about that.",
|
||||||
|
"Yes. You're doing the right thing.",
|
||||||
|
"No. Stop what you're doing.",
|
||||||
|
"You should be wary of that person.",
|
||||||
|
"Trust that person.",
|
||||||
|
"That person wants to kill you.",
|
||||||
|
"Kill that person. You know who.",
|
||||||
|
"You should go somewhere else. Quickly.",
|
||||||
|
"Good luck. You'll need it.",
|
||||||
|
"You have my permission. Do it."
|
||||||
|
]
|
||||||
|
|
||||||
|
"chemicals": [
|
||||||
|
"Ooze",
|
||||||
|
"Fire",
|
||||||
|
"Earth",
|
||||||
|
"Lightning",
|
||||||
|
"Air",
|
||||||
|
"Magic",
|
||||||
|
"Spiders",
|
||||||
|
"Button",
|
||||||
|
"Surprise",
|
||||||
|
"Happiness",
|
||||||
|
"Despair",
|
||||||
|
"Blood",
|
||||||
|
"Awesome",
|
||||||
|
"Infinity",
|
||||||
|
"Electronics",
|
||||||
|
"Time",
|
||||||
|
"Space",
|
||||||
|
"Pain",
|
||||||
|
"Guts",
|
||||||
|
"Life",
|
||||||
|
"Death",
|
||||||
|
"Phlebotinium",
|
||||||
|
"Mana",
|
||||||
|
"Energy",
|
||||||
|
"?????"
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user