ASYNC EVERYTHING!
This commit is contained in:
@@ -13,8 +13,9 @@
|
||||
var/nightime_duration = 900 //15 Minutes
|
||||
|
||||
/obj/effect/sunlight/Initialize()
|
||||
countdown()
|
||||
hud_tick()
|
||||
. = ..()
|
||||
INVOKE_ASYNC(src, .proc/countdown)
|
||||
INVOKE_ASYNC(src, .proc/hud_tick)
|
||||
|
||||
/obj/effect/sunlight/proc/countdown()
|
||||
set waitfor = FALSE
|
||||
|
||||
@@ -15,3 +15,5 @@
|
||||
audible_message("<i>*click*</i>")
|
||||
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
|
||||
activate()
|
||||
|
||||
. = ..()
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
alpha = 75
|
||||
|
||||
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech/Crossed(atom/movable/AM)
|
||||
|
||||
. = ..()
|
||||
if(!istype(AM,/obj/mecha/))
|
||||
return
|
||||
|
||||
|
||||
@@ -21,3 +21,5 @@
|
||||
if(isliving(AM) && opacity)
|
||||
var/mob/living/L = AM
|
||||
L.adjust_fire_stacks(-1) //It's wet!
|
||||
return
|
||||
. = ..()
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
master.update_icon()
|
||||
|
||||
/obj/item/assembly_holder/Crossed(atom/movable/AM as mob|obj)
|
||||
. = ..()
|
||||
if(a_left)
|
||||
a_left.Crossed(AM)
|
||||
if(a_right)
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
SSair.add_to_active(T)
|
||||
return ..()
|
||||
|
||||
/// Function for Extools Atmos
|
||||
/turf/proc/update_air_ref()
|
||||
|
||||
/////////////////GAS MIXTURE PROCS///////////////////
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#define AMMO_DROP_LIFETIME 300
|
||||
#define CTF_REQUIRED_PLAYERS 4
|
||||
|
||||
|
||||
|
||||
/obj/item/ctf
|
||||
name = "banner"
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
@@ -16,13 +18,13 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi'
|
||||
desc = "A banner with Nanotrasen's logo on it."
|
||||
slowdown = 2
|
||||
item_flags = SLOWS_WHILE_IN_HAND
|
||||
throw_speed = 0
|
||||
throw_range = 1
|
||||
force = 200
|
||||
armour_penetration = 1000
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
anchored = TRUE
|
||||
item_flags = SLOWS_WHILE_IN_HAND
|
||||
var/team = WHITE_TEAM
|
||||
var/reset_cooldown = 0
|
||||
var/anyonecanpickup = TRUE
|
||||
@@ -53,12 +55,13 @@
|
||||
to_chat(M, "<span class='userdanger'>\The [src] has been returned to base!</span>")
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/ctf/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/item/ctf/on_attack_hand(mob/living/user)
|
||||
if(!is_ctf_target(user) && !anyonecanpickup)
|
||||
to_chat(user, "Non players shouldn't be moving the flag!")
|
||||
to_chat(user, "<span class='warning'>Non-players shouldn't be moving the flag!</span>")
|
||||
return
|
||||
if(team in user.faction)
|
||||
to_chat(user, "You can't move your own flag!")
|
||||
to_chat(user, "<span class='warning'>You can't move your own flag!</span>")
|
||||
return
|
||||
if(loc == user)
|
||||
if(!user.dropItemToGround(src))
|
||||
@@ -68,7 +71,7 @@
|
||||
if(!user.put_in_active_hand(src))
|
||||
dropped(user)
|
||||
return
|
||||
user.anchored = TRUE
|
||||
user.set_anchored(TRUE)
|
||||
user.status_flags &= ~CANPUSH
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
var/area/mob_area = get_area(M)
|
||||
@@ -79,7 +82,7 @@
|
||||
|
||||
/obj/item/ctf/dropped(mob/user)
|
||||
..()
|
||||
user.anchored = FALSE
|
||||
user.set_anchored(FALSE)
|
||||
user.status_flags |= CANPUSH
|
||||
reset_cooldown = world.time + 200 //20 seconds
|
||||
START_PROCESSING(SSobj, src)
|
||||
@@ -172,20 +175,20 @@
|
||||
GLOB.poi_list.Remove(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/capture_the_flag/process()
|
||||
/obj/machinery/capture_the_flag/process(delta_time)
|
||||
for(var/i in spawned_mobs)
|
||||
if(!i)
|
||||
spawned_mobs -= i
|
||||
continue
|
||||
// Anyone in crit, automatically reap
|
||||
var/mob/living/M = i
|
||||
if(M.InCritical() || M.stat == DEAD)
|
||||
ctf_dust_old(M)
|
||||
var/mob/living/living_participant = i
|
||||
if(living_participant.InCritical() || living_participant.stat == DEAD)
|
||||
ctf_dust_old(living_participant)
|
||||
else
|
||||
// The changes that you've been hit with no shield but not
|
||||
// instantly critted are low, but have some healing.
|
||||
M.adjustBruteLoss(-5)
|
||||
M.adjustFireLoss(-5)
|
||||
living_participant.adjustBruteLoss(-2.5 * delta_time)
|
||||
living_participant.adjustFireLoss(-2.5 * delta_time)
|
||||
|
||||
/obj/machinery/capture_the_flag/red
|
||||
name = "Red CTF Controller"
|
||||
@@ -212,6 +215,10 @@
|
||||
toggle_all_ctf(user)
|
||||
return
|
||||
|
||||
|
||||
// if(!(GLOB.ghost_role_flags & GHOSTROLE_MINIGAME))
|
||||
// to_chat(user, "<span class='warning'>CTF has been temporarily disabled by admins.</span>")
|
||||
// return
|
||||
people_who_want_to_play |= user.ckey
|
||||
var/num = people_who_want_to_play.len
|
||||
var/remaining = CTF_REQUIRED_PLAYERS - num
|
||||
@@ -227,7 +234,7 @@
|
||||
return
|
||||
if(user.ckey in team_members)
|
||||
if(user.ckey in recently_dead_ckeys)
|
||||
to_chat(user, "It must be more than [DisplayTimeText(respawn_cooldown)] from your last death to respawn!")
|
||||
to_chat(user, "<span class='warning'>It must be more than [DisplayTimeText(respawn_cooldown)] from your last death to respawn!</span>")
|
||||
return
|
||||
var/client/new_team_member = user.client
|
||||
if(user.mind && user.mind.current)
|
||||
@@ -239,10 +246,10 @@
|
||||
if(CTF == src || CTF.ctf_enabled == FALSE)
|
||||
continue
|
||||
if(user.ckey in CTF.team_members)
|
||||
to_chat(user, "No switching teams while the round is going!")
|
||||
to_chat(user, "<span class='warning'>No switching teams while the round is going!</span>")
|
||||
return
|
||||
if(CTF.team_members.len < src.team_members.len)
|
||||
to_chat(user, "[src.team] has more team members than [CTF.team]. Try joining [CTF.team] team to even things up.")
|
||||
to_chat(user, "<span class='warning'>[src.team] has more team members than [CTF.team]! Try joining [CTF.team] team to even things up.</span>")
|
||||
return
|
||||
team_members |= user.ckey
|
||||
var/client/new_team_member = user.client
|
||||
@@ -258,7 +265,7 @@
|
||||
addtimer(CALLBACK(src, .proc/clear_cooldown, body.ckey), respawn_cooldown, TIMER_UNIQUE)
|
||||
body.dust()
|
||||
|
||||
/obj/machinery/capture_the_flag/proc/clear_cooldown(var/ckey)
|
||||
/obj/machinery/capture_the_flag/proc/clear_cooldown(ckey)
|
||||
recently_dead_ckeys -= ckey
|
||||
|
||||
/obj/machinery/capture_the_flag/proc/spawn_team_member(client/new_team_member)
|
||||
@@ -270,7 +277,7 @@
|
||||
M.equipOutfit(ctf_gear)
|
||||
M.dna.species.punchdamagehigh = 25
|
||||
M.dna.species.punchdamagelow = 25
|
||||
M.AddElement(/datum/element/ghost_role_eligibility)
|
||||
M.AddElement(/datum/element/ghost_role_eligibility) //??
|
||||
spawned_mobs += M
|
||||
|
||||
/obj/machinery/capture_the_flag/Topic(href, href_list)
|
||||
@@ -293,14 +300,15 @@
|
||||
victory()
|
||||
|
||||
/obj/machinery/capture_the_flag/proc/victory()
|
||||
for(var/mob/M in GLOB.mob_list)
|
||||
var/area/mob_area = get_area(M)
|
||||
for(var/mob/_competitor in GLOB.mob_living_list)
|
||||
var/mob/living/competitor = _competitor
|
||||
var/area/mob_area = get_area(competitor)
|
||||
if(istype(mob_area, /area/ctf))
|
||||
to_chat(M, "<span class='narsie [team_span]'>[team] team wins!</span>")
|
||||
to_chat(M, "<span class='userdanger'>Teams have been cleared. Click on the machines to vote to begin another round.</span>")
|
||||
for(var/obj/item/ctf/W in M)
|
||||
M.dropItemToGround(W)
|
||||
M.dust()
|
||||
to_chat(competitor, "<span class='narsie [team_span]'>[team] team wins!</span>")
|
||||
to_chat(competitor, "<span class='userdanger'>Teams have been cleared. Click on the machines to vote to begin another round.</span>")
|
||||
for(var/obj/item/ctf/W in competitor)
|
||||
competitor.dropItemToGround(W)
|
||||
competitor.dust()
|
||||
for(var/obj/machinery/control_point/control in GLOB.machines)
|
||||
control.icon_state = "dominator"
|
||||
control.controlling = null
|
||||
@@ -328,7 +336,7 @@
|
||||
|
||||
dead_barricades.Cut()
|
||||
|
||||
notify_ghosts("[name] has been activated!", enter_link="<a href=?src=[REF(src)];join=1>(Click to join the [team] team!)</a> or click on the controller directly!", source = src, action=NOTIFY_ATTACK)
|
||||
notify_ghosts("[name] has been activated!", enter_link="<a href=?src=[REF(src)];join=1>(Click to join the [team] team!)</a> or click on the controller directly!", source = src, action=NOTIFY_ATTACK, header = "CTF has been activated")
|
||||
|
||||
if(!arena_reset)
|
||||
reset_the_arena()
|
||||
@@ -355,10 +363,10 @@
|
||||
ctf_enabled = FALSE
|
||||
arena_reset = FALSE
|
||||
var/area/A = get_area(src)
|
||||
for(var/i in GLOB.mob_list)
|
||||
var/mob/M = i
|
||||
if((get_area(A) == A) && (M.ckey in team_members))
|
||||
M.dust()
|
||||
for(var/_competitor in GLOB.mob_living_list)
|
||||
var/mob/living/competitor = _competitor
|
||||
if((get_area(A) == A) && (competitor.ckey in team_members))
|
||||
competitor.dust()
|
||||
team_members.Cut()
|
||||
spawned_mobs.Cut()
|
||||
recently_dead_ckeys.Cut()
|
||||
@@ -375,18 +383,18 @@
|
||||
CTF.ctf_gear = initial(ctf_gear)
|
||||
CTF.respawn_cooldown = DEFAULT_RESPAWN
|
||||
|
||||
/proc/ctf_floor_vanish(atom/target)
|
||||
if(isturf(target.loc))
|
||||
qdel(target)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/deagle/ctf
|
||||
desc = "This looks like it could really hurt in melee."
|
||||
force = 75
|
||||
mag_type = /obj/item/ammo_box/magazine/m50/ctf
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/dropped(mob/user)
|
||||
/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/dropped()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1)
|
||||
addtimer(CALLBACK(src, .proc/floor_vanish), 1)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/deagle/ctf/proc/floor_vanish()
|
||||
if(isturf(loc))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/ammo_box/magazine/m50/ctf
|
||||
ammo_type = /obj/item/ammo_casing/a50/ctf
|
||||
@@ -400,6 +408,7 @@
|
||||
/obj/item/projectile/bullet/ctf/prehit(atom/target)
|
||||
if(is_ctf_target(target))
|
||||
damage = 60
|
||||
return //PROJECTILE_PIERCE_NONE /// hey uhh don't hit anyone behind them
|
||||
. = ..()
|
||||
|
||||
/obj/item/gun/ballistic/automatic/laser/ctf
|
||||
@@ -407,16 +416,24 @@
|
||||
desc = "This looks like it could really hurt in melee."
|
||||
force = 50
|
||||
|
||||
/obj/item/gun/ballistic/automatic/laser/ctf/dropped(mob/user)
|
||||
/obj/item/gun/ballistic/automatic/laser/ctf/dropped()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1)
|
||||
addtimer(CALLBACK(src, .proc/floor_vanish), 1)
|
||||
|
||||
/obj/item/gun/ballistic/automatic/laser/ctf/proc/floor_vanish()
|
||||
if(isturf(loc))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/ammo_box/magazine/recharge/ctf
|
||||
ammo_type = /obj/item/ammo_casing/caseless/laser/ctf
|
||||
|
||||
/obj/item/ammo_box/magazine/recharge/ctf/dropped(mob/user)
|
||||
/obj/item/ammo_box/magazine/recharge/ctf/dropped()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1)
|
||||
addtimer(CALLBACK(src, .proc/floor_vanish), 1)
|
||||
|
||||
/obj/item/ammo_box/magazine/recharge/ctf/proc/floor_vanish()
|
||||
if(isturf(loc))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/ammo_casing/caseless/laser/ctf
|
||||
projectile_type = /obj/item/projectile/beam/ctf
|
||||
@@ -428,15 +445,16 @@
|
||||
/obj/item/projectile/beam/ctf/prehit(atom/target)
|
||||
if(is_ctf_target(target))
|
||||
damage = 150
|
||||
return //PROJECTILE_PIERCE_NONE /// hey uhhh don't hit anyone behind them
|
||||
. = ..()
|
||||
|
||||
/proc/is_ctf_target(atom/target)
|
||||
. = FALSE
|
||||
if(istype(target, /obj/structure/barricade/security/ctf))
|
||||
. = TRUE
|
||||
if(isliving(target))
|
||||
var/mob/living/H = target
|
||||
if((RED_TEAM in H.faction) || (BLUE_TEAM in H.faction))
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit/shielded/ctf))
|
||||
. = TRUE
|
||||
|
||||
// RED TEAM GUNS
|
||||
@@ -482,7 +500,11 @@
|
||||
|
||||
/obj/item/claymore/ctf/dropped(mob/user)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /proc/ctf_floor_vanish, src), 1)
|
||||
addtimer(CALLBACK(src, .proc/floor_vanish), 1)
|
||||
|
||||
/obj/item/claymore/ctf/proc/floor_vanish()
|
||||
if(isturf(loc))
|
||||
qdel(src)
|
||||
|
||||
/datum/outfit/ctf
|
||||
name = "CTF"
|
||||
@@ -491,27 +513,28 @@
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf
|
||||
toggle_helmet = FALSE // see the whites of their eyes
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/tackler/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
id = /obj/item/card/id/away
|
||||
belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf
|
||||
l_pocket = /obj/item/ammo_box/magazine/recharge/ctf
|
||||
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf
|
||||
r_hand = /obj/item/gun/ballistic/automatic/laser/ctf
|
||||
back = /obj/item/claymore/ctf
|
||||
|
||||
/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
|
||||
/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE)
|
||||
if(visualsOnly)
|
||||
return
|
||||
var/list/no_drops = list()
|
||||
var/obj/item/card/id/W = H.wear_id
|
||||
no_drops += W
|
||||
W.registered_name = H.real_name
|
||||
W.update_label(W.registered_name, W.assignment)
|
||||
W.update_label()
|
||||
|
||||
// The shielded hardsuit is already TRAIT_NODROP
|
||||
no_drops += H.get_item_by_slot(SLOT_GLOVES)
|
||||
no_drops += H.get_item_by_slot(SLOT_SHOES)
|
||||
no_drops += H.get_item_by_slot(SLOT_W_UNIFORM)
|
||||
no_drops += H.get_item_by_slot(SLOT_EARS)
|
||||
no_drops += H.get_item_by_slot(ITEM_SLOT_OCLOTHING)
|
||||
no_drops += H.get_item_by_slot(ITEM_SLOT_GLOVES)
|
||||
no_drops += H.get_item_by_slot(ITEM_SLOT_FEET)
|
||||
no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING)
|
||||
no_drops += H.get_item_by_slot(ITEM_SLOT_EARS)
|
||||
for(var/i in no_drops)
|
||||
var/obj/item/I = i
|
||||
ADD_TRAIT(I, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT)
|
||||
@@ -525,6 +548,7 @@
|
||||
r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/red
|
||||
l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red
|
||||
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/red
|
||||
id = /obj/item/card/id/syndicate_command //it's red
|
||||
|
||||
/datum/outfit/ctf/red/instagib
|
||||
r_hand = /obj/item/gun/energy/laser/instakill/red
|
||||
@@ -535,12 +559,13 @@
|
||||
r_hand = /obj/item/gun/ballistic/automatic/laser/ctf/blue
|
||||
l_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue
|
||||
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf/blue
|
||||
id = /obj/item/card/id/centcom //it's blue
|
||||
|
||||
/datum/outfit/ctf/blue/instagib
|
||||
r_hand = /obj/item/gun/energy/laser/instakill/blue
|
||||
shoes = /obj/item/clothing/shoes/jackboots/fast
|
||||
|
||||
/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
|
||||
/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H)
|
||||
..()
|
||||
var/obj/item/radio/R = H.ears
|
||||
R.set_frequency(FREQ_CTF_RED)
|
||||
@@ -548,7 +573,7 @@
|
||||
R.independent = TRUE
|
||||
H.dna.species.stunmod = 0
|
||||
|
||||
/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
|
||||
/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H)
|
||||
..()
|
||||
var/obj/item/radio/R = H.ears
|
||||
R.set_frequency(FREQ_CTF_BLUE)
|
||||
@@ -595,6 +620,10 @@
|
||||
/obj/structure/barricade/security/ctf/make_debris()
|
||||
new /obj/effect/ctf/dead_barricade(get_turf(src))
|
||||
|
||||
/obj/structure/table/reinforced/ctf
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
|
||||
/obj/effect/ctf
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
@@ -617,10 +646,11 @@
|
||||
QDEL_IN(src, AMMO_DROP_LIFETIME)
|
||||
|
||||
/obj/effect/ctf/ammo/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
reload(AM)
|
||||
|
||||
/obj/effect/ctf/ammo/Bump(atom/movable/AM)
|
||||
reload(AM)
|
||||
/obj/effect/ctf/ammo/Bump(atom/A)
|
||||
reload(A)
|
||||
|
||||
/obj/effect/ctf/ammo/Bumped(atom/movable/AM)
|
||||
reload(AM)
|
||||
@@ -636,7 +666,7 @@
|
||||
qdel(G)
|
||||
O.equip(M)
|
||||
to_chat(M, "<span class='notice'>Ammunition reloaded!</span>")
|
||||
playsound(get_turf(M), 'sound/weapons/shotgunpump.ogg', 50, 1, -1)
|
||||
playsound(get_turf(M), 'sound/weapons/shotgunpump.ogg', 50, TRUE, -1)
|
||||
qdel(src)
|
||||
break
|
||||
|
||||
@@ -667,18 +697,18 @@
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
var/obj/machinery/capture_the_flag/controlling
|
||||
var/team = "none"
|
||||
var/point_rate = 1
|
||||
var/point_rate = 0.5
|
||||
|
||||
/obj/machinery/control_point/process()
|
||||
/obj/machinery/control_point/process(delta_time)
|
||||
if(controlling)
|
||||
controlling.control_points += point_rate
|
||||
controlling.control_points += point_rate * delta_time
|
||||
if(controlling.control_points >= controlling.control_points_to_win)
|
||||
controlling.victory()
|
||||
|
||||
/obj/machinery/control_point/attackby(mob/user, params)
|
||||
capture(user)
|
||||
|
||||
/obj/machinery/control_point/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
/obj/machinery/control_point/on_attack_hand(mob/user)
|
||||
capture(user)
|
||||
|
||||
/obj/machinery/control_point/proc/capture(mob/user)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
/obj/effect/mob_spawn/Initialize(mapload)
|
||||
. = ..()
|
||||
if(instant || (roundstart && (mapload || (SSticker && SSticker.current_state > GAME_STATE_SETTING_UP))))
|
||||
create()
|
||||
INVOKE_ASYNC(src, .proc/create)
|
||||
else if(ghost_usable)
|
||||
GLOB.poi_list |= src
|
||||
LAZYADD(GLOB.mob_spawners[job_description ? job_description : name], src)
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
var/triggered = 0
|
||||
|
||||
/obj/effect/meatgrinder/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
Bumped(AM)
|
||||
|
||||
/obj/effect/meatgrinder/Bumped(atom/movable/AM)
|
||||
|
||||
@@ -340,6 +340,7 @@
|
||||
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
|
||||
|
||||
/obj/structure/spacevine/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(!isliving(AM))
|
||||
return
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
new reward(get_turf(src))
|
||||
|
||||
/mob/living/carbon/human/dummy/travelling_trader/Initialize()
|
||||
..()
|
||||
. = ..() // return a hint you fuck
|
||||
add_atom_colour("#570d6b", FIXED_COLOUR_PRIORITY) //make them purple (otherworldly!)
|
||||
set_light(1, -0.7, "#AAD84B")
|
||||
ADD_TRAIT(src,TRAIT_PIERCEIMMUNE, "trader_pierce_immune") //don't let people take their blood
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(!F.check_variables() && !override_checks)
|
||||
QDEL_NULL(F)
|
||||
if(start_field && (F || override_checks))
|
||||
F.Initialize()
|
||||
F.begin_field()
|
||||
return F
|
||||
|
||||
/datum/proximity_monitor/advanced
|
||||
@@ -78,11 +78,11 @@
|
||||
|
||||
/datum/proximity_monitor/advanced/proc/process_edge_turf(turf/T)
|
||||
|
||||
/datum/proximity_monitor/advanced/New()
|
||||
/datum/proximity_monitor/advanced/New(atom/_host, range, _ignore_if_not_on_turf = TRUE)
|
||||
if(requires_processing)
|
||||
START_PROCESSING(SSfields, src)
|
||||
|
||||
/datum/proximity_monitor/advanced/proc/Initialize()
|
||||
/datum/proximity_monitor/advanced/proc/begin_field()
|
||||
setup_field()
|
||||
post_setup_field()
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
var/atom/_host = host
|
||||
var/atom/new_host_loc = _host.loc
|
||||
if(last_host_loc != new_host_loc)
|
||||
recalculate_field()
|
||||
INVOKE_ASYNC(src, .proc/recalculate_field)
|
||||
|
||||
/datum/proximity_monitor/advanced/proc/post_setup_field()
|
||||
|
||||
@@ -302,7 +302,7 @@
|
||||
|
||||
/obj/item/multitool/field_debug/attack_self(mob/user)
|
||||
operating = !operating
|
||||
to_chat(user, "You turn [src] [operating? "on":"off"].")
|
||||
to_chat(user, "<span class='notice'>You turn [src] [operating? "on":"off"].</span>")
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
listeningTo = null
|
||||
if(!istype(current) && operating)
|
||||
@@ -312,13 +312,15 @@
|
||||
else if(!operating)
|
||||
QDEL_NULL(current)
|
||||
|
||||
/obj/item/multitool/field_debug/dropped(mob/user)
|
||||
/obj/item/multitool/field_debug/dropped()
|
||||
. = ..()
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
listeningTo = null
|
||||
|
||||
/obj/item/multitool/field_debug/proc/on_mob_move()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
check_turf(get_turf(src))
|
||||
|
||||
/obj/item/multitool/field_debug/process()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(G.summoner && locate(/obj/effect/proc_holder/spell/aoe_turf/timestop) in G.summoner.mind.spell_list) //It would only make sense that a person's stand would also be immune.
|
||||
immune[G] = TRUE
|
||||
if(start)
|
||||
timestop()
|
||||
INVOKE_ASYNC(src, .proc/timestop)
|
||||
|
||||
/obj/effect/timestop/Destroy()
|
||||
qdel(chronofield)
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
/obj/effect/timestop/proc/timestop()
|
||||
target = get_turf(src)
|
||||
playsound(src, 'sound/magic/timeparadox2.ogg', 75, 1, -1)
|
||||
playsound(src, 'sound/magic/timeparadox2.ogg', 75, TRUE, -1)
|
||||
chronofield = make_field(/datum/proximity_monitor/advanced/timestop, list("current_range" = freezerange, "host" = src, "immune" = immune, "check_anti_magic" = check_anti_magic, "check_holy" = check_holy))
|
||||
QDEL_IN(src, duration)
|
||||
|
||||
@@ -112,6 +112,8 @@
|
||||
unfreeze_turf(T)
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/unfreeze_atom(atom/movable/A)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(A.throwing)
|
||||
unfreeze_throwing(A)
|
||||
if(isliving(A))
|
||||
@@ -128,12 +130,14 @@
|
||||
frozen_things -= A
|
||||
global_frozen_atoms -= A
|
||||
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/freeze_mecha(obj/mecha/M)
|
||||
M.completely_disabled = TRUE
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mecha(obj/mecha/M)
|
||||
M.completely_disabled = FALSE
|
||||
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/freeze_throwing(atom/movable/AM)
|
||||
var/datum/thrownthing/T = AM.throwing
|
||||
T.paused = TRUE
|
||||
@@ -160,7 +164,7 @@
|
||||
/datum/proximity_monitor/advanced/timestop/process()
|
||||
for(var/i in frozen_mobs)
|
||||
var/mob/living/m = i
|
||||
m.Stun(20, 1, 1)
|
||||
m.Stun(20, ignore_canstun = TRUE)
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/setup_field_turf(turf/T)
|
||||
for(var/i in T.contents)
|
||||
@@ -168,6 +172,7 @@
|
||||
freeze_turf(T)
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/freeze_projectile(obj/item/projectile/P)
|
||||
P.paused = TRUE
|
||||
|
||||
@@ -176,18 +181,18 @@
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/freeze_mob(mob/living/L)
|
||||
frozen_mobs += L
|
||||
L.Stun(20, 1, 1)
|
||||
L.Stun(20, ignore_canstun = TRUE)
|
||||
ADD_TRAIT(L, TRAIT_MUTE, TIMESTOP_TRAIT)
|
||||
walk(L, 0) //stops them mid pathing even if they're stunimmune
|
||||
if(isanimal(L))
|
||||
var/mob/living/simple_animal/S = L
|
||||
S.toggle_ai(AI_OFF)
|
||||
if(ishostile(L))
|
||||
var/mob/living/simple_animal/hostile/H = L
|
||||
H.LoseTarget()
|
||||
if(ishostile(L))
|
||||
var/mob/living/simple_animal/hostile/H = L
|
||||
H.LoseTarget()
|
||||
|
||||
/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mob(mob/living/L)
|
||||
L.AdjustStun(-20, 1, 1)
|
||||
L.AdjustStun(-20, ignore_canstun = TRUE)
|
||||
REMOVE_TRAIT(L, TRAIT_MUTE, TIMESTOP_TRAIT)
|
||||
frozen_mobs -= L
|
||||
if(isanimal(L))
|
||||
|
||||
@@ -24,11 +24,12 @@
|
||||
desc = "Get off my turf!"
|
||||
|
||||
/obj/effect/abstract/proximity_checker/advanced/field_turf/CanPass(atom/movable/AM, turf/target)
|
||||
. = ..()
|
||||
if(parent)
|
||||
return parent.field_turf_canpass(AM, src, target)
|
||||
return TRUE
|
||||
|
||||
/obj/effect/abstract/proximity_checker/advanced/field_turf/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(parent)
|
||||
return parent.field_turf_crossed(AM, src)
|
||||
return TRUE
|
||||
@@ -48,11 +49,12 @@
|
||||
desc = "Edgy description here."
|
||||
|
||||
/obj/effect/abstract/proximity_checker/advanced/field_edge/CanPass(atom/movable/AM, turf/target)
|
||||
. = ..()
|
||||
if(parent)
|
||||
return parent.field_edge_canpass(AM, src, target)
|
||||
return TRUE
|
||||
|
||||
/obj/effect/abstract/proximity_checker/advanced/field_edge/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(parent)
|
||||
return parent.field_edge_crossed(AM, src)
|
||||
return TRUE
|
||||
|
||||
@@ -139,10 +139,11 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
Show()
|
||||
|
||||
/obj/effect/hallucination/simple/Moved(atom/OldLoc, Dir)
|
||||
. = ..()
|
||||
Show()
|
||||
|
||||
/obj/effect/hallucination/simple/Destroy()
|
||||
if(target && target.client)
|
||||
if(target?.client)
|
||||
target.client.images.Remove(current_image)
|
||||
active = FALSE
|
||||
return ..()
|
||||
@@ -1093,6 +1094,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
target.client.images += image
|
||||
|
||||
/obj/effect/hallucination/danger/lava/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(AM == target)
|
||||
target.adjustStaminaLoss(20)
|
||||
new /datum/hallucination/fire(target)
|
||||
|
||||
@@ -50,16 +50,18 @@
|
||||
var/cached_z
|
||||
/// I'm busy, don't move.
|
||||
var/busy = FALSE
|
||||
|
||||
var/static/blacklisted_items = typecacheof(list(
|
||||
/obj/effect,
|
||||
/obj/belly,
|
||||
/obj/mafia_game_board,
|
||||
/obj/docking_port,
|
||||
/obj/shapeshift_holder,
|
||||
/obj/screen))
|
||||
/obj/effect,
|
||||
/obj/belly,
|
||||
/obj/mafia_game_board,
|
||||
/obj/docking_port,
|
||||
/obj/shapeshift_holder,
|
||||
/obj/screen
|
||||
))
|
||||
|
||||
/mob/living/simple_animal/jacq/Initialize()
|
||||
..()
|
||||
. = ..() //fuck you jacq, return a hint you shit
|
||||
cached_z = z
|
||||
poof()
|
||||
|
||||
@@ -158,23 +160,18 @@
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/jacq/proc/gender_check(mob/living/carbon/C)
|
||||
var/gender = "lamb"
|
||||
if(C)
|
||||
if(C.gender == MALE)
|
||||
gender = "laddie"
|
||||
if(C.gender == FEMALE)
|
||||
gender = "lassie"
|
||||
return gender
|
||||
. = "lamb"
|
||||
switch(C)
|
||||
if(MALE)
|
||||
. = "laddie"
|
||||
if(FEMALE)
|
||||
. = "lassie"
|
||||
|
||||
//Ye wee bugger, gerrout of it. Ye've nae tae enjoy reading the code fer mae secrets like.
|
||||
/mob/living/simple_animal/jacq/proc/chit_chat(mob/living/carbon/C)
|
||||
//Very important
|
||||
var/gender = gender_check(C)
|
||||
if(C)
|
||||
if(C.gender == MALE)
|
||||
gender = "laddie"
|
||||
if(C.gender == FEMALE)
|
||||
gender = "lassie"
|
||||
// it physicaly cannot fail*. Why is there a fucking dupe
|
||||
|
||||
if(!progression["[C.real_name]"] || !(progression["[C.real_name]"] & JACQ_HELLO))
|
||||
visible_message("<b>[src]</b> smiles ominously at [C], <span class='spooky'>\"Well halo there [gender]! Ah'm Jacqueline, tae great Pumpqueen, great tae meet ye.\"</span>")
|
||||
|
||||
@@ -578,6 +578,7 @@
|
||||
return FALSE
|
||||
|
||||
/obj/item/electronic_assembly/Moved(oldLoc, dir)
|
||||
. = ..()
|
||||
for(var/I in assembly_components)
|
||||
var/obj/item/integrated_circuit/IC = I
|
||||
IC.ext_moved(oldLoc, dir)
|
||||
|
||||
@@ -8,6 +8,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
|
||||
throwforce = 0
|
||||
|
||||
/mob/dead/Initialize()
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
if(flags_1 & INITIALIZED_1)
|
||||
stack_trace("Warning: [src]([type]) initialized multiple times!")
|
||||
flags_1 |= INITIALIZED_1
|
||||
@@ -68,14 +69,15 @@ INITIALIZE_IMMEDIATE(/mob/dead)
|
||||
set desc= "Jump to the other server"
|
||||
if(mob_transforming)
|
||||
return
|
||||
var/list/csa = CONFIG_GET(keyed_list/cross_server)
|
||||
var/list/our_id = CONFIG_GET(string/cross_comms_name)
|
||||
var/list/csa = CONFIG_GET(keyed_list/cross_server) - our_id
|
||||
var/pick
|
||||
switch(csa.len)
|
||||
if(0)
|
||||
remove_verb(src, /mob/dead/proc/server_hop)
|
||||
to_chat(src, "<span class='notice'>Server Hop has been disabled.</span>")
|
||||
if(1)
|
||||
pick = csa[0]
|
||||
pick = csa[1]
|
||||
else
|
||||
pick = input(src, "Pick a server to jump to", "Server Hop") as null|anything in csa
|
||||
|
||||
@@ -100,7 +102,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
|
||||
|
||||
winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources
|
||||
|
||||
C << link("[addr]?server_hop=[key]")
|
||||
C << link("[addr]")
|
||||
|
||||
/mob/dead/proc/update_z(new_z) // 1+ to register, null to unregister
|
||||
if (registered_z != new_z)
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
Attach(M)
|
||||
|
||||
/obj/item/clothing/mask/facehugger/Crossed(atom/target)
|
||||
. = ..()
|
||||
HasProximity(target)
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/facehugger/on_found(mob/finder)
|
||||
if(stat == CONSCIOUS)
|
||||
|
||||
@@ -99,14 +99,6 @@
|
||||
if(lying && !buckled && prob(getBruteLoss()*200/maxHealth))
|
||||
makeTrail(newloc, T, old_direction)
|
||||
|
||||
|
||||
/mob/living/Move_Pulled(atom/A)
|
||||
. = ..()
|
||||
if(!. || !isliving(A))
|
||||
return
|
||||
var/mob/living/L = A
|
||||
set_pull_offsets(L, grab_state)
|
||||
|
||||
/mob/living/forceMove(atom/destination)
|
||||
stop_pulling()
|
||||
if(buckled)
|
||||
|
||||
@@ -37,23 +37,25 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/cockroach/Crossed(var/atom/movable/AM)
|
||||
if(ismob(AM))
|
||||
if(isliving(AM))
|
||||
var/mob/living/A = AM
|
||||
if(A.mob_size > MOB_SIZE_SMALL && !(A.movement_type & FLYING))
|
||||
if(prob(squish_chance))
|
||||
A.visible_message("<span class='notice'>[A] squashed [src].</span>", "<span class='notice'>You squashed [src].</span>")
|
||||
adjustBruteLoss(1) //kills a normal cockroach
|
||||
else
|
||||
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||
else
|
||||
if(isstructure(AM))
|
||||
/mob/living/simple_animal/cockroach/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(isliving(AM))
|
||||
var/mob/living/A = AM
|
||||
if(A.mob_size > MOB_SIZE_SMALL && !(A.movement_type & FLYING))
|
||||
if(HAS_TRAIT(A, TRAIT_PACIFISM))
|
||||
A.visible_message("<span class='notice'>[A] carefully steps over [src].</span>", "<span class='notice'>You carefully step over [src] to avoid hurting it.</span>")
|
||||
return
|
||||
if(prob(squish_chance))
|
||||
AM.visible_message("<span class='notice'>[src] was crushed under [AM].</span>")
|
||||
adjustBruteLoss(1)
|
||||
A.visible_message("<span class='notice'>[A] squashed [src].</span>", "<span class='notice'>You squashed [src].</span>")
|
||||
adjustBruteLoss(1) //kills a normal cockroach
|
||||
else
|
||||
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||
else if(isstructure(AM))
|
||||
if(prob(squish_chance))
|
||||
AM.visible_message("<span class='notice'>[src] is crushed under [AM].</span>")
|
||||
adjustBruteLoss(1)
|
||||
else
|
||||
visible_message("<span class='notice'>[src] avoids getting crushed.</span>")
|
||||
|
||||
/mob/living/simple_animal/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach.
|
||||
return
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
/mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user)
|
||||
|
||||
if(istype(item_to_add, /obj/item/grenade/plastic)) // last thing he ever wears, I guess
|
||||
item_to_add.afterattack(src,user,1)
|
||||
INVOKE_ASYNC(item_to_add, /obj/item.proc/afterattack, src, user, 1)
|
||||
return
|
||||
|
||||
if(inventory_head)
|
||||
@@ -271,13 +271,15 @@
|
||||
to_chat(user, "<span class='warning'>You can't put more than one hat on [src]!</span>")
|
||||
return
|
||||
if(!item_to_add)
|
||||
user.visible_message("[user] pets [src].","<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
|
||||
user.visible_message("<span class='notice'>[user] pets [src].</span>", "<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
|
||||
if(flags_1 & HOLOGRAM_1)
|
||||
return
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, src, /datum/mood_event/pet_animal, src)
|
||||
return
|
||||
|
||||
if(user && !user.temporarilyRemoveItemFromInventory(item_to_add))
|
||||
to_chat(user, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>")
|
||||
return 0
|
||||
return
|
||||
|
||||
var/valid = FALSE
|
||||
if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/head))
|
||||
@@ -287,11 +289,11 @@
|
||||
|
||||
if(valid)
|
||||
if(health <= 0)
|
||||
to_chat(user, "<span class ='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on [p_them()].</span>")
|
||||
to_chat(user, "<span class='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on [p_them()].</span>")
|
||||
else if(user)
|
||||
user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
|
||||
"<span class='notice'>You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.</span>",
|
||||
"<span class='italics'>You hear a friendly-sounding bark.</span>")
|
||||
user.visible_message("<span class='notice'>[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.</span>",
|
||||
"<span class='notice'>You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.</span>",
|
||||
"<span class='hear'>You hear a friendly-sounding bark.</span>")
|
||||
item_to_add.forceMove(src)
|
||||
src.inventory_head = item_to_add
|
||||
update_corgi_fluff()
|
||||
@@ -361,7 +363,7 @@
|
||||
icon_state = "old_corgi"
|
||||
icon_living = "old_corgi"
|
||||
icon_dead = "old_corgi_dead"
|
||||
desc = "At a ripe old age of [record_age] Ian's not as spry as he used to be, but he'll always be the HoP's beloved corgi." //RIP
|
||||
desc = "At a ripe old age of [record_age], Ian's not as spry as he used to be, but he'll always be the HoP's beloved corgi." //RIP
|
||||
turns_per_move = 20
|
||||
RemoveElement(/datum/element/mob_holder, held_icon)
|
||||
AddElement(/datum/element/mob_holder, "old_corgi")
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
|
||||
|
||||
/obj/effect/snare/Crossed(AM as mob|obj)
|
||||
. = ..()
|
||||
if(isliving(AM) && spawner && spawner.summoner && AM != spawner && !spawner.hasmatchingsummoner(AM))
|
||||
to_chat(spawner.summoner, "<span class='danger'><B>[AM] has crossed surveillance snare, [name].</span></B>")
|
||||
var/list/guardians = spawner.summoner.hasparasites()
|
||||
|
||||
+3
@@ -219,6 +219,9 @@
|
||||
|
||||
/obj/effect/temp_visual/goliath_tentacle/broodmother/patch/Initialize(mapload, new_spawner)
|
||||
. = ..()
|
||||
INVOKE_ASYNC(src, .proc/createpatch)
|
||||
|
||||
/obj/effect/temp_visual/goliath_tentacle/broodmother/patch/proc/createpatch()
|
||||
var/tentacle_locs = spiral_range_turfs(1, get_turf(src))
|
||||
for(var/T in tentacle_locs)
|
||||
new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner)
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/nugget = 5)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/frog/Crossed(AM as mob|obj)
|
||||
. = ..()
|
||||
if(!stat && isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(L.mob_size > MOB_SIZE_TINY)
|
||||
playsound(src, stepped_sound, 50, 1)
|
||||
playsound(src, stepped_sound, 50, TRUE)
|
||||
|
||||
@@ -96,7 +96,7 @@ GLOBAL_LIST_EMPTY(movespeed_modification_cache)
|
||||
return TRUE
|
||||
remove_movespeed_modifier(existing, FALSE)
|
||||
if(length(movespeed_modification))
|
||||
BINARY_INSERT(type_or_datum.id, movespeed_modification, datum/movespeed_modifier, type_or_datum, priority, COMPARE_VALUE)
|
||||
BINARY_INSERT(type_or_datum.id, movespeed_modification, /datum/movespeed_modifier, type_or_datum, priority, COMPARE_VALUE)
|
||||
LAZYSET(movespeed_modification, type_or_datum.id, type_or_datum)
|
||||
if(update)
|
||||
update_movespeed()
|
||||
|
||||
@@ -56,12 +56,14 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/field/containment/Crossed(mob/mover)
|
||||
if(isliving(mover))
|
||||
shock(mover)
|
||||
/obj/machinery/field/containment/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(isliving(AM))
|
||||
shock(AM)
|
||||
|
||||
if(ismachinery(AM) || isstructure(AM) || ismecha(AM))
|
||||
bump_field(AM)
|
||||
|
||||
if(ismachinery(mover) || isstructure(mover) || ismecha(mover))
|
||||
bump_field(mover)
|
||||
|
||||
/obj/machinery/field/containment/proc/set_master(master1,master2)
|
||||
if(!master1 || !master2)
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
movement_range = 0
|
||||
|
||||
/obj/effect/accelerated_particle/Crossed(atom/A)
|
||||
. = ..()
|
||||
if(isliving(A))
|
||||
toxmob(A)
|
||||
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
var/obj/pipe_type = /obj/structure/disposalpipe/segment
|
||||
var/pipename
|
||||
|
||||
/obj/structure/disposalconstruct/Initialize(loc, _pipe_type, _dir = SOUTH, flip = FALSE, obj/make_from)
|
||||
/obj/structure/disposalconstruct/Initialize(mapload, _pipe_type, _dir = SOUTH, flip = FALSE, obj/make_from)
|
||||
. = ..()
|
||||
if(make_from)
|
||||
pipe_type = make_from.type
|
||||
setDir(make_from.dir)
|
||||
anchored = TRUE
|
||||
set_anchored(TRUE)
|
||||
|
||||
else
|
||||
if(_pipe_type)
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
update_icon()
|
||||
|
||||
// AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE)
|
||||
|
||||
/obj/structure/disposalconstruct/Move()
|
||||
var/old_dir = dir
|
||||
..()
|
||||
|
||||
@@ -274,6 +274,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
|
||||
return
|
||||
|
||||
/obj/structure/stone_tile/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(falling || fallen)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -21,6 +21,9 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337)
|
||||
/obj/item/hilbertshotel/Initialize()
|
||||
. = ..()
|
||||
//Load templates
|
||||
INVOKE_ASYNC(src, .proc/prepare_rooms)
|
||||
|
||||
/obj/item/hilbertshotel/proc/prepare_rooms()
|
||||
hotelRoomTemp = new()
|
||||
hotelRoomTempEmpty = new()
|
||||
hotelRoomTempLore = new()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/effect/proc_holder/spell/spacetime_dist
|
||||
name = "Spacetime Distortion"
|
||||
desc = "Entangle the strings of spacetime to deny easy movement around you. The strings vibrate..."
|
||||
desc = "Entangle the strings of space-time in an area around you, randomizing the layout and making proper movement impossible. The strings vibrate..."
|
||||
charge_max = 300
|
||||
var/duration = 150
|
||||
range = 7
|
||||
@@ -10,8 +10,9 @@
|
||||
sound = 'sound/effects/magic.ogg'
|
||||
cooldown_min = 300
|
||||
level_max = 0
|
||||
// action_icon_state = "spacetime"
|
||||
|
||||
/obj/effect/proc_holder/spell/spacetime_dist/can_cast(mob/user = usr, skipcharge = FALSE, silent = FALSE)
|
||||
/obj/effect/proc_holder/spell/spacetime_dist/can_cast(mob/user = usr)
|
||||
if(ready)
|
||||
return ..()
|
||||
return FALSE
|
||||
@@ -97,10 +98,11 @@
|
||||
busy = TRUE
|
||||
flick("purplesparkles", src)
|
||||
AM.forceMove(get_turf(src))
|
||||
playsound(get_turf(src),sound,70,0)
|
||||
playsound(get_turf(src),sound,70,FALSE)
|
||||
busy = FALSE
|
||||
|
||||
/obj/effect/cross_action/spacetime_dist/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(!busy)
|
||||
walk_link(AM)
|
||||
|
||||
@@ -110,7 +112,8 @@
|
||||
else
|
||||
walk_link(user)
|
||||
|
||||
/obj/effect/cross_action/spacetime_dist/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/effect/cross_action/spacetime_dist/on_attack_hand(mob/user)
|
||||
walk_link(user)
|
||||
|
||||
/obj/effect/cross_action/spacetime_dist/attack_paw(mob/user)
|
||||
|
||||
Reference in New Issue
Block a user