You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

171 lines
5.1 KiB

  1. /obj/effect/fun_balloon
  2. name = "fun balloon"
  3. desc = "This is going to be a laugh riot."
  4. icon = 'icons/obj/balloons.dmi'
  5. icon_state = "syndballoon"
  6. anchored = TRUE
  7. var/popped = FALSE
  8. /obj/effect/fun_balloon/Initialize()
  9. . = ..()
  10. SSobj.processing |= src
  11. /obj/effect/fun_balloon/Destroy()
  12. SSobj.processing -= src
  13. . = ..()
  14. /obj/effect/fun_balloon/process()
  15. if(!popped && check() && !QDELETED(src))
  16. popped = TRUE
  17. effect()
  18. pop()
  19. /obj/effect/fun_balloon/proc/check()
  20. return FALSE
  21. /obj/effect/fun_balloon/proc/effect()
  22. return
  23. /obj/effect/fun_balloon/proc/pop()
  24. visible_message("<span class='notice'>[src] pops!</span>")
  25. playsound(get_turf(src), 'sound/items/party_horn.ogg', 50, TRUE, -1)
  26. qdel(src)
  27. //ATTACK GHOST IGNORING PARENT RETURN VALUE
  28. /obj/effect/fun_balloon/attack_ghost(mob/user)
  29. if(!user.client || !user.client.holder || popped)
  30. return
  31. var/confirmation = alert("Pop [src]?","Fun Balloon","Yes","No")
  32. if(confirmation == "Yes" && !popped)
  33. popped = TRUE
  34. effect()
  35. pop()
  36. /obj/effect/fun_balloon/sentience
  37. name = "sentience fun balloon"
  38. desc = "When this pops, things are gonna get more aware around here."
  39. var/effect_range = 3
  40. var/group_name = "a bunch of giant spiders"
  41. /obj/effect/fun_balloon/sentience/effect()
  42. var/list/bodies = list()
  43. for(var/mob/living/M in range(effect_range, get_turf(src)))
  44. bodies += M
  45. var/question = "Would you like to be [group_name]?"
  46. var/list/candidates = pollCandidatesForMobs(question, ROLE_PAI, null, FALSE, 100, bodies)
  47. while(LAZYLEN(candidates) && LAZYLEN(bodies))
  48. var/mob/dead/observer/C = pick_n_take(candidates)
  49. var/mob/living/body = pick_n_take(bodies)
  50. to_chat(body, "<span class='warning'>Your mob has been taken over by a ghost!</span>", confidential = TRUE)
  51. message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(body)])")
  52. body.ghostize(0)
  53. body.key = C.key
  54. new /obj/effect/temp_visual/gravpush(get_turf(body))
  55. /obj/effect/fun_balloon/sentience/emergency_shuttle
  56. name = "shuttle sentience fun balloon"
  57. var/trigger_time = 60
  58. /obj/effect/fun_balloon/sentience/emergency_shuttle/check()
  59. . = FALSE
  60. if(SSshuttle.emergency && (SSshuttle.emergency.timeLeft() <= trigger_time) && (SSshuttle.emergency.mode == SHUTTLE_CALL))
  61. . = TRUE
  62. /obj/effect/fun_balloon/scatter
  63. name = "scatter fun balloon"
  64. desc = "When this pops, you're not going to be around here anymore."
  65. var/effect_range = 5
  66. /obj/effect/fun_balloon/scatter/effect()
  67. for(var/mob/living/M in range(effect_range, get_turf(src)))
  68. var/turf/T = find_safe_turf()
  69. new /obj/effect/temp_visual/gravpush(get_turf(M))
  70. M.forceMove(T)
  71. to_chat(M, "<span class='notice'>Pop!</span>", confidential = TRUE)
  72. /obj/effect/station_crash
  73. name = "station crash"
  74. desc = "With no survivors!"
  75. icon = 'icons/obj/items_and_weapons.dmi'
  76. icon_state = "syndballoon"
  77. anchored = TRUE
  78. /obj/effect/station_crash/Initialize()
  79. ..()
  80. for(var/S in SSshuttle.stationary)
  81. var/obj/docking_port/stationary/SM = S
  82. if(SM.id == "emergency_home")
  83. var/new_dir = turn(SM.dir, 180)
  84. SM.forceMove(get_ranged_target_turf(SM, new_dir, rand(3,15)))
  85. break
  86. return INITIALIZE_HINT_QDEL
  87. //Arena
  88. /obj/effect/forcefield/arena_shuttle
  89. name = "portal"
  90. timeleft = 0
  91. var/list/warp_points
  92. /obj/effect/forcefield/arena_shuttle/Initialize()
  93. . = ..()
  94. for(var/obj/effect/landmark/shuttle_arena_safe/exit in GLOB.landmarks_list)
  95. warp_points += exit
  96. /obj/effect/forcefield/arena_shuttle/Bumped(atom/movable/AM)
  97. if(!isliving(AM))
  98. return
  99. var/mob/living/L = AM
  100. if(L.pulling && istype(L.pulling, /obj/item/bodypart/head))
  101. to_chat(L, "<span class='notice'>Your offering is accepted. You may pass.</span>", confidential = TRUE)
  102. qdel(L.pulling)
  103. var/turf/LA = get_turf(pick(warp_points))
  104. L.forceMove(LA)
  105. L.hallucination = 0
  106. to_chat(L, "<span class='reallybig redtext'>The battle is won. Your bloodlust subsides.</span>", confidential = TRUE)
  107. for(var/obj/item/chainsaw/doomslayer/chainsaw in L)
  108. qdel(chainsaw)
  109. else
  110. to_chat(L, "<span class='warning'>You are not yet worthy of passing. Drag a severed head to the barrier to be allowed entry to the hall of champions.</span>", confidential = TRUE)
  111. /obj/effect/landmark/shuttle_arena_safe
  112. name = "hall of champions"
  113. desc = "For the winners."
  114. /obj/effect/landmark/shuttle_arena_entrance
  115. name = "the arena"
  116. desc = "A lava filled battlefield."
  117. /obj/effect/forcefield/arena_shuttle_entrance
  118. name = "portal"
  119. timeleft = 0
  120. var/list/warp_points = list()
  121. /obj/effect/forcefield/arena_shuttle_entrance/Bumped(atom/movable/AM)
  122. if(!isliving(AM))
  123. return
  124. if(!warp_points.len)
  125. for(var/obj/effect/landmark/shuttle_arena_entrance/S in GLOB.landmarks_list)
  126. warp_points |= S
  127. var/obj/effect/landmark/LA = pick(warp_points)
  128. var/mob/living/M = AM
  129. M.forceMove(get_turf(LA))
  130. to_chat(M, "<span class='reallybig redtext'>You're trapped in a deadly arena! To escape, you'll need to drag a severed head to the escape portals.</span>", confidential = TRUE)
  131. INVOKE_ASYNC(src, .proc/do_bloodbath, M)
  132. /obj/effect/forcefield/arena_shuttle_entrance/proc/do_bloodbath(mob/living/L)
  133. var/obj/effect/mine/pickup/bloodbath/B = new (L)
  134. B.mineEffect(L)
  135. /area/shuttle_arena
  136. name = "arena"
  137. has_gravity = STANDARD_GRAVITY
  138. requires_power = FALSE