[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:
CHOMPStation2StaffMirrorBot
2025-03-04 12:27:08 -07:00
committed by GitHub
parent 5216d33ade
commit 1848c73edc
4 changed files with 130 additions and 135 deletions

View File

@@ -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)

View File

@@ -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))

View File

@@ -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

View File

@@ -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)