mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
[MIRROR] Gets rid of another 400 sleep in init problems (#10306)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
5216d33ade
commit
1848c73edc
@@ -501,18 +501,14 @@
|
|||||||
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
||||||
else if(!active) //The ball isn't set up, let's try to set it up.
|
else if(!active) //The ball isn't set up, let's try to set it up.
|
||||||
if(isliving(target)) //We're hitting a mob, let's try to capture it.
|
if(isliving(target)) //We're hitting a mob, let's try to capture it.
|
||||||
sleep(10)
|
addtimer(CALLBACK(src, PROC_REF(activate), thrower, target), 10, TIMER_DELETE_ME)
|
||||||
activate(thrower, target)
|
|
||||||
return
|
return
|
||||||
sleep(10)
|
addtimer(CALLBACK(src, PROC_REF(activate), thrower, src), 10, TIMER_DELETE_ME)
|
||||||
activate(thrower, src)
|
|
||||||
else if(!bound_mob) //We hit something else, and we don't have a mob, so we can't really do anything!
|
else if(!bound_mob) //We hit something else, and we don't have a mob, so we can't really do anything!
|
||||||
to_chat(thrower, span_notice("\The [src] clicks unpleasantly..."))
|
to_chat(thrower, span_notice("\The [src] clicks unpleasantly..."))
|
||||||
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
||||||
else if(bound_mob in contents) //We have our mob! Let's try to let it out.
|
else if(bound_mob in contents) //We have our mob! Let's try to let it out.
|
||||||
sleep(10)
|
addtimer(CALLBACK(src, PROC_REF(unleash), thrower, src), 10, TIMER_DELETE_ME)
|
||||||
unleash(thrower, src)
|
|
||||||
update_icon()
|
|
||||||
else //Our mob isn't here, we can't do anything.
|
else //Our mob isn't here, we can't do anything.
|
||||||
to_chat(thrower, span_notice("\The [src] clicks unpleasantly..."))
|
to_chat(thrower, span_notice("\The [src] clicks unpleasantly..."))
|
||||||
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
||||||
|
|||||||
@@ -149,35 +149,38 @@
|
|||||||
phaseanim.adjust_scale(src.size_multiplier, src.size_multiplier)
|
phaseanim.adjust_scale(src.size_multiplier, src.size_multiplier)
|
||||||
phaseanim.dir = dir
|
phaseanim.dir = dir
|
||||||
alpha = 0
|
alpha = 0
|
||||||
custom_emote(1,"phases in!")
|
INVOKE_ASYNC(src, PROC_REF(custom_emote),1,"phases in!")
|
||||||
sleep(5) //The duration of the TP animation
|
|
||||||
canmove = original_canmove
|
|
||||||
alpha = initial(alpha)
|
|
||||||
remove_modifiers_of_type(/datum/modifier/shadekin_phase_vision)
|
|
||||||
|
|
||||||
//Potential phase-in vore
|
addtimer(CALLBACK(src, PROC_REF(shadekin_complete_phase_in), original_canmove), 5, TIMER_DELETE_ME)
|
||||||
if(can_be_drop_pred) //Toggleable in vore panel
|
|
||||||
var/list/potentials = living_mobs(0)
|
|
||||||
if(potentials.len)
|
|
||||||
var/mob/living/target = pick(potentials)
|
|
||||||
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
|
|
||||||
target.forceMove(vore_selected)
|
|
||||||
to_chat(target,span_vwarning("\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!"))
|
|
||||||
|
|
||||||
ability_flags &= ~AB_PHASE_SHIFTING
|
|
||||||
|
|
||||||
//Affect nearby lights
|
/mob/living/carbon/human/proc/shadekin_complete_phase_in(var/original_canmove)
|
||||||
var/destroy_lights = 0
|
canmove = original_canmove
|
||||||
|
alpha = initial(alpha)
|
||||||
|
remove_modifiers_of_type(/datum/modifier/shadekin_phase_vision)
|
||||||
|
|
||||||
for(var/obj/machinery/light/L in machines)
|
//Potential phase-in vore
|
||||||
if(L.z != z || get_dist(src,L) > 10)
|
if(can_be_drop_pred) //Toggleable in vore panel
|
||||||
continue
|
var/list/potentials = living_mobs(0)
|
||||||
|
if(potentials.len)
|
||||||
|
var/mob/living/target = pick(potentials)
|
||||||
|
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
|
||||||
|
target.forceMove(vore_selected)
|
||||||
|
to_chat(target,span_vwarning("\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!"))
|
||||||
|
|
||||||
if(prob(destroy_lights))
|
ability_flags &= ~AB_PHASE_SHIFTING
|
||||||
spawn(rand(5,25))
|
|
||||||
L.broken()
|
//Affect nearby lights
|
||||||
else
|
var/destroy_lights = 0
|
||||||
L.flicker(10)
|
|
||||||
|
for(var/obj/machinery/light/L in machines)
|
||||||
|
if(L.z != z || get_dist(src,L) > 10)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(prob(destroy_lights))
|
||||||
|
addtimer(CALLBACK(L, TYPE_PROC_REF(/obj/machinery/light, broken)), rand(5,25), TIMER_DELETE_ME)
|
||||||
|
else
|
||||||
|
L.flicker(10)
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/phase_out(var/turf/T)
|
/mob/living/carbon/human/proc/phase_out(var/turf/T)
|
||||||
if(!(ability_flags & AB_PHASE_SHIFTED))
|
if(!(ability_flags & AB_PHASE_SHIFTED))
|
||||||
|
|||||||
@@ -61,41 +61,44 @@
|
|||||||
|
|
||||||
//Cosmetics mostly
|
//Cosmetics mostly
|
||||||
flick("tp_in",src)
|
flick("tp_in",src)
|
||||||
custom_emote(1,"phases in!")
|
INVOKE_ASYNC(src, PROC_REF(custom_emote),1,"phases in!")
|
||||||
sleep(5) //The duration of the TP animation
|
|
||||||
canmove = original_canmove
|
|
||||||
|
|
||||||
//Potential phase-in vore
|
addtimer(CALLBACK(src, PROC_REF(shadekin_complete_phase_in), original_canmove), 5, TIMER_DELETE_ME)
|
||||||
if(can_be_drop_pred) //Toggleable in vore panel
|
|
||||||
var/list/potentials = living_mobs(0)
|
|
||||||
if(potentials.len)
|
|
||||||
var/mob/living/target = pick(potentials)
|
|
||||||
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
|
|
||||||
target.forceMove(vore_selected)
|
|
||||||
to_chat(target,span_vwarning("\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!"))
|
|
||||||
|
|
||||||
// Do this after the potential vore, so we get the belly
|
|
||||||
update_icon()
|
|
||||||
|
|
||||||
/* CHOMPEdit, comment out and handle in custom proc
|
/mob/living/simple_mob/shadekin/proc/shadekin_complete_phase_in(var/original_canmove)
|
||||||
//Affect nearby lights
|
canmove = original_canmove
|
||||||
var/destroy_lights = 0
|
|
||||||
if(eye_state == RED_EYES)
|
|
||||||
destroy_lights = 80
|
|
||||||
if(eye_state == PURPLE_EYES)
|
|
||||||
destroy_lights = 25
|
|
||||||
|
|
||||||
for(var/obj/machinery/light/L in machines)
|
//Potential phase-in vore
|
||||||
if(L.z != z || get_dist(src,L) > 10)
|
if(can_be_drop_pred) //Toggleable in vore panel
|
||||||
continue
|
var/list/potentials = living_mobs(0)
|
||||||
|
if(potentials.len)
|
||||||
|
var/mob/living/target = pick(potentials)
|
||||||
|
if(istype(target) && target.devourable && target.can_be_drop_prey && vore_selected)
|
||||||
|
target.forceMove(vore_selected)
|
||||||
|
to_chat(target,span_vwarning("\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!"))
|
||||||
|
|
||||||
if(prob(destroy_lights))
|
// Do this after the potential vore, so we get the belly
|
||||||
spawn(rand(5,25))
|
update_icon()
|
||||||
L.broken()
|
|
||||||
else
|
/* CHOMPRemove Start
|
||||||
L.flicker(10)
|
//Affect nearby lights
|
||||||
*/
|
var/destroy_lights = 0
|
||||||
handle_phasein_flicker() // CHOMPEdit, special handle for phase-in light flicker
|
if(eye_state == RED_EYES)
|
||||||
|
destroy_lights = 80
|
||||||
|
if(eye_state == PURPLE_EYES)
|
||||||
|
destroy_lights = 25
|
||||||
|
|
||||||
|
for(var/obj/machinery/light/L in machines)
|
||||||
|
if(L.z != z || get_dist(src,L) > 10)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(prob(destroy_lights))
|
||||||
|
addtimer(CALLBACK(L, TYPE_PROC_REF(/obj/machinery/light, broken)), rand(5,25), TIMER_DELETE_ME)
|
||||||
|
else
|
||||||
|
L.flicker(10)
|
||||||
|
*/// CHOMPRemove End
|
||||||
|
handle_phasein_flicker() // CHOMPEdit, special handle for phase-in light flicker
|
||||||
|
|
||||||
/mob/living/simple_mob/shadekin/proc/phase_out(var/turf/T)
|
/mob/living/simple_mob/shadekin/proc/phase_out(var/turf/T)
|
||||||
if(!(ability_flags & AB_PHASE_SHIFTED))
|
if(!(ability_flags & AB_PHASE_SHIFTED))
|
||||||
@@ -175,74 +178,3 @@
|
|||||||
visible_message(span_notice("\The [src] gently places a hand on \the [target]..."))
|
visible_message(span_notice("\The [src] gently places a hand on \the [target]..."))
|
||||||
face_atom(target)
|
face_atom(target)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
|
||||||
//CHOMPEdit Begin - Add dark portal creation
|
|
||||||
/mob/living/simple_mob/shadekin/proc/dark_tunneling()
|
|
||||||
var/template_id = "dark_portal"
|
|
||||||
var/datum/map_template/shelter/template
|
|
||||||
|
|
||||||
if(!template)
|
|
||||||
template = SSmapping.shelter_templates[template_id]
|
|
||||||
if(!template)
|
|
||||||
throw EXCEPTION("Shelter template ([template_id]) not found!")
|
|
||||||
return FALSE
|
|
||||||
|
|
||||||
var/turf/deploy_location = get_turf(src)
|
|
||||||
var/status = template.check_deploy(deploy_location)
|
|
||||||
|
|
||||||
switch(status)
|
|
||||||
//Not allowed due to /area technical reasons
|
|
||||||
if(SHELTER_DEPLOY_BAD_AREA)
|
|
||||||
to_chat(src, span_warning("A tunnel to the Dark will not function in this area."))
|
|
||||||
|
|
||||||
//Anchored objects or no space
|
|
||||||
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
|
|
||||||
var/width = template.width
|
|
||||||
var/height = template.height
|
|
||||||
to_chat(src, span_warning("There is not enough open area for a tunnel to the Dark to form! You need to clear a [width]x[height] area!"))
|
|
||||||
|
|
||||||
if(status != SHELTER_DEPLOY_ALLOWED)
|
|
||||||
return FALSE
|
|
||||||
|
|
||||||
var/turf/T = deploy_location
|
|
||||||
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
|
|
||||||
smoke.attach(T)
|
|
||||||
smoke.set_up(10, 0, T)
|
|
||||||
smoke.start()
|
|
||||||
|
|
||||||
src.visible_message(span_notice("[src] begins pulling dark energies around themselves."))
|
|
||||||
if(do_after(src, 600)) //60 seconds
|
|
||||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
|
||||||
src.visible_message(span_notice("[src] finishes pulling dark energies around themselves, creating a portal."))
|
|
||||||
|
|
||||||
log_and_message_admins("[key_name_admin(src)] created a tunnel to the dark at [get_area(T)]!")
|
|
||||||
template.annihilate_plants(deploy_location)
|
|
||||||
template.load(deploy_location, centered = TRUE)
|
|
||||||
template.update_lighting(deploy_location)
|
|
||||||
ability_flags &= AB_DARK_TUNNEL
|
|
||||||
return TRUE
|
|
||||||
else
|
|
||||||
return FALSE
|
|
||||||
//CHOMPEdit End
|
|
||||||
|
|
||||||
//CHOMPEdit Begin - Add Dark Maw
|
|
||||||
/mob/living/simple_mob/shadekin/proc/dark_maw()
|
|
||||||
var/turf/T = get_turf(src)
|
|
||||||
if(!istype(T))
|
|
||||||
to_chat(src, span_warning("You don't seem to be able to set a trap here!"))
|
|
||||||
return FALSE
|
|
||||||
else if(T.get_lumcount() >= 0.5)
|
|
||||||
to_chat(src, span_warning("There is too much light here for your trap to last!"))
|
|
||||||
return FALSE
|
|
||||||
|
|
||||||
if(do_after(src, 10))
|
|
||||||
if(ability_flags & AB_PHASE_SHIFTED)
|
|
||||||
new /obj/effect/abstract/dark_maw(loc, src, 1)
|
|
||||||
else
|
|
||||||
new /obj/effect/abstract/dark_maw(loc, src)
|
|
||||||
|
|
||||||
return TRUE
|
|
||||||
else
|
|
||||||
return FALSE
|
|
||||||
//CHOMPEdit End
|
|
||||||
|
|||||||
@@ -3,8 +3,73 @@
|
|||||||
|
|
||||||
/mob/living/simple_mob/shadekin/Login()
|
/mob/living/simple_mob/shadekin/Login()
|
||||||
. = ..()
|
. = ..()
|
||||||
add_verb(src,/mob/living/simple_mob/shadekin/proc/phase_strength_toggle) //CHOMPEdit TGPanel
|
add_verb(src,/mob/living/simple_mob/shadekin/proc/phase_strength_toggle)
|
||||||
|
|
||||||
|
/mob/living/simple_mob/shadekin/proc/dark_tunneling()
|
||||||
|
var/template_id = "dark_portal"
|
||||||
|
var/datum/map_template/shelter/template
|
||||||
|
|
||||||
|
if(!template)
|
||||||
|
template = SSmapping.shelter_templates[template_id]
|
||||||
|
if(!template)
|
||||||
|
throw EXCEPTION("Shelter template ([template_id]) not found!")
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
var/turf/deploy_location = get_turf(src)
|
||||||
|
var/status = template.check_deploy(deploy_location)
|
||||||
|
|
||||||
|
switch(status)
|
||||||
|
//Not allowed due to /area technical reasons
|
||||||
|
if(SHELTER_DEPLOY_BAD_AREA)
|
||||||
|
to_chat(src, span_warning("A tunnel to the Dark will not function in this area."))
|
||||||
|
|
||||||
|
//Anchored objects or no space
|
||||||
|
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
|
||||||
|
var/width = template.width
|
||||||
|
var/height = template.height
|
||||||
|
to_chat(src, span_warning("There is not enough open area for a tunnel to the Dark to form! You need to clear a [width]x[height] area!"))
|
||||||
|
|
||||||
|
if(status != SHELTER_DEPLOY_ALLOWED)
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
var/turf/T = deploy_location
|
||||||
|
var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
|
||||||
|
smoke.attach(T)
|
||||||
|
smoke.set_up(10, 0, T)
|
||||||
|
smoke.start()
|
||||||
|
|
||||||
|
src.visible_message(span_notice("[src] begins pulling dark energies around themselves."))
|
||||||
|
if(do_after(src, 600)) //60 seconds
|
||||||
|
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||||
|
src.visible_message(span_notice("[src] finishes pulling dark energies around themselves, creating a portal."))
|
||||||
|
|
||||||
|
log_and_message_admins("[key_name_admin(src)] created a tunnel to the dark at [get_area(T)]!")
|
||||||
|
template.annihilate_plants(deploy_location)
|
||||||
|
template.load(deploy_location, centered = TRUE)
|
||||||
|
template.update_lighting(deploy_location)
|
||||||
|
ability_flags &= AB_DARK_TUNNEL
|
||||||
|
return TRUE
|
||||||
|
else
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
/mob/living/simple_mob/shadekin/proc/dark_maw()
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
if(!istype(T))
|
||||||
|
to_chat(src, span_warning("You don't seem to be able to set a trap here!"))
|
||||||
|
return FALSE
|
||||||
|
else if(T.get_lumcount() >= 0.5)
|
||||||
|
to_chat(src, span_warning("There is too much light here for your trap to last!"))
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
if(do_after(src, 10))
|
||||||
|
if(ability_flags & AB_PHASE_SHIFTED)
|
||||||
|
new /obj/effect/abstract/dark_maw(loc, src, 1)
|
||||||
|
else
|
||||||
|
new /obj/effect/abstract/dark_maw(loc, src)
|
||||||
|
|
||||||
|
return TRUE
|
||||||
|
else
|
||||||
|
return FALSE
|
||||||
|
|
||||||
// Allow horizontal resting
|
// Allow horizontal resting
|
||||||
/mob/living/simple_mob/shadekin/update_transform()
|
/mob/living/simple_mob/shadekin/update_transform()
|
||||||
@@ -30,8 +95,7 @@
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if(prob(destroy_lights))
|
if(prob(destroy_lights))
|
||||||
spawn(rand(5,25))
|
addtimer(CALLBACK(L, TYPE_PROC_REF(/obj/machinery/light, broken)), rand(5,25), TIMER_DELETE_ME)
|
||||||
L.broken()
|
|
||||||
else
|
else
|
||||||
L.flicker(10)
|
L.flicker(10)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user