Merge branch 'master' into upstream-merge-29885
This commit is contained in:
@@ -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_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 category = "Admin"
|
||||
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)
|
||||
@@ -6,7 +6,7 @@
|
||||
log_admin("[key_name(usr)] tried to use the admin panel without authorization.")
|
||||
return
|
||||
if(href_list["ahelp"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
if(!check_rights(R_ADMIN, TRUE))
|
||||
return
|
||||
|
||||
var/ahelp_ref = href_list["ahelp"]
|
||||
|
||||
@@ -189,8 +189,9 @@
|
||||
#define CONNECTED 2
|
||||
#define EMPTY 4
|
||||
#define LOW 8
|
||||
#define FULL 16
|
||||
#define DANGER 32
|
||||
#define MEDIUM 16
|
||||
#define FULL 32
|
||||
#define DANGER 64
|
||||
/obj/machinery/portable_atmospherics/canister/update_icon()
|
||||
if(stat & BROKEN)
|
||||
cut_overlays()
|
||||
@@ -207,9 +208,11 @@
|
||||
var/pressure = air_contents.return_pressure()
|
||||
if(pressure < 10)
|
||||
update |= EMPTY
|
||||
else if(pressure < ONE_ATMOSPHERE)
|
||||
else if(pressure < 5 * ONE_ATMOSPHERE)
|
||||
update |= LOW
|
||||
else if(pressure < 15 * ONE_ATMOSPHERE)
|
||||
else if(pressure < 10 * ONE_ATMOSPHERE)
|
||||
update |= MEDIUM
|
||||
else if(pressure < 40 * ONE_ATMOSPHERE)
|
||||
update |= FULL
|
||||
else
|
||||
update |= DANGER
|
||||
@@ -222,9 +225,9 @@
|
||||
add_overlay("can-open")
|
||||
if(update & CONNECTED)
|
||||
add_overlay("can-connector")
|
||||
if(update & EMPTY)
|
||||
if(update & LOW)
|
||||
add_overlay("can-o0")
|
||||
else if(update & LOW)
|
||||
else if(update & MEDIUM)
|
||||
add_overlay("can-o1")
|
||||
else if(update & FULL)
|
||||
add_overlay("can-o2")
|
||||
@@ -234,6 +237,7 @@
|
||||
#undef CONNECTED
|
||||
#undef EMPTY
|
||||
#undef LOW
|
||||
#undef MEDIUM
|
||||
#undef FULL
|
||||
#undef DANGER
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
var/reason = ""
|
||||
if(requestonly)
|
||||
reason = stripped_input("Reason:", name, "") as text|null
|
||||
reason = stripped_input("Reason:", name, "")
|
||||
if(isnull(reason) || ..())
|
||||
return
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
diff a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm (rejected hunks)
|
||||
@@ -145,7 +145,7 @@
|
||||
|
||||
var/reason = ""
|
||||
if(requestonly)
|
||||
- reason = stripped_input("Reason:", name, "") as text|null
|
||||
+ reason = stripped_input("Reason:", name, "")
|
||||
if(isnull(reason) || ..())
|
||||
return
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -284,7 +284,7 @@
|
||||
L.adjustBruteLoss(bonus_value)
|
||||
|
||||
/obj/item/crusher_trophy/tail_spike/proc/pushback(mob/living/target, mob/living/user)
|
||||
if(!target.anchored || ismegafauna(target)) //megafauna will always be pushed
|
||||
if(!QDELETED(target) && !QDELETED(user) && (!target.anchored || ismegafauna(target))) //megafauna will always be pushed
|
||||
step(target, get_dir(user, target))
|
||||
|
||||
//bubblegum
|
||||
|
||||
@@ -240,6 +240,12 @@
|
||||
/mob/living/carbon/is_muzzled()
|
||||
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()
|
||||
if(restrained())
|
||||
changeNext_move(CLICK_CD_BREAKOUT)
|
||||
@@ -812,3 +818,4 @@
|
||||
.["Make AI"] = "?_src_=vars;makeai=\ref[src]"
|
||||
.["Modify bodypart"] = "?_src_=vars;editbodypart=\ref[src]"
|
||||
.["Modify organs"] = "?_src_=vars;editorgans=\ref[src]"
|
||||
.["Hallucinate"] = "?_src_=vars;hallucinate=\ref[src]"
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
var/protection = (prot["head"] + prot["arms"] + prot["feet"] + prot["legs"] + prot["groin"] + prot["chest"] + prot["hands"])/7
|
||||
return protection
|
||||
|
||||
/mob/living/carbon/human/can_use_guns(var/obj/item/weapon/gun/G)
|
||||
/mob/living/carbon/human/can_use_guns(var/obj/item/weapon/G)
|
||||
. = ..()
|
||||
|
||||
if(G.trigger_guard == TRIGGER_GUARD_NORMAL)
|
||||
|
||||
@@ -378,8 +378,7 @@
|
||||
adjust_drugginess(-1)
|
||||
|
||||
if(hallucination)
|
||||
spawn handle_hallucinations()
|
||||
hallucination = max(hallucination-2,0)
|
||||
handle_hallucinations()
|
||||
|
||||
//used in human and monkey handle_environment()
|
||||
/mob/living/carbon/proc/natural_bodytemperature_stabilization()
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/monkey/can_use_guns(var/obj/item/weapon/gun/G)
|
||||
/mob/living/carbon/monkey/can_use_guns(var/obj/item/weapon/G)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/monkey/angry
|
||||
|
||||
@@ -795,7 +795,7 @@
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
/mob/living/proc/can_use_guns(var/obj/item/weapon/gun/G)
|
||||
/mob/living/proc/can_use_guns(var/obj/item/weapon/G)
|
||||
if (G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser())
|
||||
to_chat(src, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 0
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/gun/G)
|
||||
/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/G)
|
||||
return GLOB.ratvar_awakens
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/get_armor_effectiveness()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
|
||||
. = ..()
|
||||
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)
|
||||
..()
|
||||
|
||||
@@ -57,6 +57,7 @@ Difficulty: Hard
|
||||
ranged_cooldown_time = 40
|
||||
aggro_vision_range = 21 //so it can see to one side of the arena to the other
|
||||
loot = list(/obj/item/weapon/hierophant_club)
|
||||
crusher_loot = list(/obj/item/weapon/hierophant_club)
|
||||
wander = FALSE
|
||||
var/burst_range = 3 //range on burst aoe
|
||||
var/beam_range = 5 //range on cross blast beams
|
||||
|
||||
@@ -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 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.
|
||||
if(!SSticker.HasRoundStarted())
|
||||
return 0
|
||||
|
||||
@@ -120,8 +120,8 @@
|
||||
if(auto_name)
|
||||
name = "\improper [get_area(src)] APC"
|
||||
|
||||
pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24)
|
||||
pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0
|
||||
pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -25)
|
||||
pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 23 : -24) : 0
|
||||
if (building)
|
||||
area = get_area(src)
|
||||
opened = 1
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/recoil = 0 //boom boom shake the room
|
||||
var/clumsy_check = 1
|
||||
var/obj/item/ammo_casing/chambered = null
|
||||
var/trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
|
||||
trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
|
||||
var/sawn_desc = null //description change if weapon is sawn-off
|
||||
var/sawn_state = SAWN_INTACT
|
||||
var/burst_size = 1 //how large a burst is
|
||||
@@ -188,12 +188,10 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/proc/can_trigger_gun(var/mob/living/user)
|
||||
|
||||
if(!handle_pins(user) || !user.can_use_guns(src))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
/obj/item/weapon/gun/can_trigger_gun(mob/living/user)
|
||||
. = ..()
|
||||
if(!handle_pins(user))
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/gun/proc/handle_pins(mob/living/user)
|
||||
if(pin)
|
||||
|
||||
@@ -387,3 +387,232 @@
|
||||
var/obj/effect/ebeam/B = b
|
||||
animate(B, alpha = 0, time = 32)
|
||||
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)
|
||||
if(!ui)
|
||||
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()
|
||||
|
||||
/obj/machinery/chem_dispenser/ui_data()
|
||||
/obj/machinery/chem_dispenser/ui_data(mob/user)
|
||||
var/data = list()
|
||||
data["amount"] = amount
|
||||
data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI.
|
||||
@@ -128,10 +130,16 @@
|
||||
data["beakerTransferAmounts"] = null
|
||||
|
||||
var chemicals[0]
|
||||
var/is_hallucinating = FALSE
|
||||
if(user.hallucinating())
|
||||
is_hallucinating = TRUE
|
||||
for(var/re in dispensable_reagents)
|
||||
var/datum/reagent/temp = GLOB.chemical_reagents_list[re]
|
||||
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
|
||||
return data
|
||||
|
||||
|
||||
@@ -290,9 +290,8 @@
|
||||
//HALLUCINATE
|
||||
else if((findtext(message, hallucinate_words)))
|
||||
cooldown = COOLDOWN_MEME
|
||||
for(var/V in listeners)
|
||||
var/mob/living/L = V
|
||||
new /obj/effect/hallucination/delusion(get_turf(L),L,null,150 * power_multiplier,0)
|
||||
for(var/mob/living/carbon/C in listeners)
|
||||
new /datum/hallucination/delusion(C, TRUE, null,150 * power_multiplier,0)
|
||||
|
||||
//WAKE UP
|
||||
else if((findtext(message, wakeup_words)))
|
||||
|
||||
Reference in New Issue
Block a user