New Hierophant sprites (#22404)

* New Hierophant sprites

* actual boss sprites: MAYBE

* byond does not actually catch this error

* anomaly

* I'm a sucker for stupid-ass puns
This commit is contained in:
Joan Lung
2016-12-26 19:30:37 -05:00
committed by KorPhaeron
parent d314df43ff
commit 2c39711ab5
22 changed files with 897 additions and 222 deletions
@@ -1,64 +1,604 @@
"a" = (/turf/closed/indestructible/riveted/hierophant,/area/ruin/unpowered/hierophant)
"b" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"c" = (/obj/effect/decal/cleanable/cobweb,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"d" = (/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"e" = (/obj/effect/gibspawner/human,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"f" = (/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"g" = (/obj/effect/light_emitter{set_cap = 3; set_luminosity = 7},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"h" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)"; icon_state = "tracks"; dir = 4},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"i" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)"; icon_state = "tracks"; dir = 4},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"j" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/obj/effect/light_emitter{set_cap = 3; set_luminosity = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"k" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHWEST)"; icon_state = "tracks"; dir = 10},/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"l" = (/obj/effect/light_emitter{set_cap = 3; set_luminosity = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"m" = (/obj/effect/gibspawner/generic,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"n" = (/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"o" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHEAST)"; icon_state = "tracks"; dir = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"p" = (/obj/effect/light_emitter,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"q" = (/obj/effect/decal/cleanable/blood/old,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"r" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHWEST)"; icon_state = "tracks"; dir = 9},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"s" = (/obj/effect/decal/cleanable/blood/gibs/limb,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"t" = (/obj/effect/decal/cleanable/ash,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"u" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHWEST)"; icon_state = "tracks"; dir = 10},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"v" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHEAST)"; icon_state = "tracks"; dir = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"w" = (/obj/effect/gibspawner/human,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHEAST)"; icon_state = "tracks"; dir = 6},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"x" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (WEST)"; icon_state = "tracks"; dir = 8},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"y" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (WEST)"; icon_state = "tracks"; dir = 8},/obj/effect/light_emitter{set_cap = 3; set_luminosity = 7},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"z" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHWEST)"; icon_state = "tracks"; dir = 9},/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"A" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHEAST)"; icon_state = "tracks"; dir = 6},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"B" = (/mob/living/simple_animal/hostile/megafauna/hierophant,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"C" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (WEST)"; icon_state = "tracks"; dir = 8},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"D" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"E" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"F" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"G" = (/obj/effect/decal/cleanable/blood/gibs/core,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"H" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHWEST)"; icon_state = "tracks"; dir = 10},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"I" = (/obj/effect/gibspawner/human,/obj/effect/light_emitter{set_cap = 3; set_luminosity = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
"J" = (/obj/effect/decal/cleanable/blood/gibs/down,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant)
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/indestructible/riveted/hierophant,
/area/ruin/unpowered/hierophant)
"b" = (
/turf/open/indestructible/hierophant,
/area/ruin/unpowered/hierophant)
"c" = (
/obj/effect/light_emitter{
set_cap = 3;
set_luminosity = 5
},
/turf/open/indestructible/hierophant,
/area/ruin/unpowered/hierophant)
"d" = (
/mob/living/simple_animal/hostile/megafauna/hierophant,
/turf/open/indestructible/hierophant/two,
/area/ruin/unpowered/hierophant)
"f" = (
/obj/effect/light_emitter{
set_cap = 3;
set_luminosity = 5
},
/turf/open/indestructible/hierophant/two,
/area/ruin/unpowered/hierophant)
"e" = (
/turf/open/indestructible/hierophant/two,
/area/ruin/unpowered/hierophant)
(1,1,1) = {"
aaaaaaaaaaaabaaaaaaaaaaaa
acdddddddddddddddddddddda
adeddfddddddgdddhhhdiddda
addjddddddddkhhddddddldda
adddadddaaaaaaaaadddaddda
addddmhdhddddddddddmddnda
adddddgdddddddddddgddodda
addddddddkdopddfdddbdddda
adqdadddddadddaddddbaddda
adddadddddrdddddddddaddda
adstadddadudhhdvadhwabdda
adddadrxxmddddduddddaddda
xxyoazApddddBddddpddadyxC
addbabddddddddtdddddaddda
addbabddadDdEdddadddafdda
adddabddddddndddddqdaddda
adddabddddadddadddddadnda
adqedbddsdddpddddddddddda
addddAgddddeddddddgFdddGa
addddmdddddHdehddxdedddda
adddadddaaaaaaaaadddaddda
addlddddddddrdddddAddIdda
adddddJdddddgdddqddddddda
adnddddddFddbdddddddnddda
aaaaaaaaaaaabaaaaaaaaaaaa
a
a
a
b
b
b
b
a
a
a
a
a
a
a
a
a
b
b
b
b
a
a
a
"}
(2,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
c
b
b
b
b
b
b
b
b
b
b
a
"}
(3,1,1) = {"
a
b
b
b
c
c
b
b
b
a
b
b
b
a
b
b
b
c
c
b
b
b
a
"}
(4,1,1) = {"
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
"}
(5,1,1) = {"
b
b
c
b
a
a
b
c
b
b
b
c
b
b
b
c
b
a
a
b
c
b
b
"}
(6,1,1) = {"
b
b
c
b
a
a
b
c
b
b
b
c
b
b
b
c
b
a
a
b
c
b
b
"}
(7,1,1) = {"
b
b
b
b
b
b
e
e
e
e
e
e
e
e
e
e
e
b
b
b
b
b
b
"}
(8,1,1) = {"
a
b
b
b
c
c
e
e
e
a
e
e
e
a
e
e
e
c
c
b
b
b
a
"}
(9,1,1) = {"
a
b
b
b
b
b
e
e
e
e
e
f
e
e
e
e
e
b
b
b
b
b
a
"}
(10,1,1) = {"
a
b
a
b
b
b
e
a
e
e
e
e
e
e
e
a
e
b
b
b
a
b
a
"}
(11,1,1) = {"
a
b
b
b
b
b
e
e
e
e
e
e
e
e
e
e
e
b
b
b
b
b
a
"}
(12,1,1) = {"
a
c
b
b
c
c
e
e
f
e
e
d
e
e
f
e
e
c
c
b
b
c
a
"}
(13,1,1) = {"
a
b
b
b
b
b
e
e
e
e
e
e
e
e
e
e
e
b
b
b
b
b
a
"}
(14,1,1) = {"
a
b
a
b
b
b
e
a
e
e
e
e
e
e
e
a
e
b
b
b
a
b
a
"}
(15,1,1) = {"
a
b
b
b
b
b
e
e
e
e
e
f
e
e
e
e
e
b
b
b
b
b
a
"}
(16,1,1) = {"
a
b
b
b
c
c
e
e
e
a
e
e
e
a
e
e
e
c
c
b
b
b
a
"}
(17,1,1) = {"
b
b
b
b
b
b
e
e
e
e
e
e
e
e
e
e
e
b
b
b
b
b
b
"}
(18,1,1) = {"
b
b
c
b
a
a
b
c
b
b
b
c
b
b
b
c
b
a
a
b
c
b
b
"}
(19,1,1) = {"
b
b
c
b
a
a
b
c
b
b
b
c
b
b
b
c
b
a
a
b
c
b
b
"}
(20,1,1) = {"
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
"}
(21,1,1) = {"
a
b
b
b
c
c
b
b
b
a
b
b
b
a
b
b
b
c
c
b
b
b
a
"}
(22,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
c
b
b
b
b
b
b
b
b
b
b
a
"}
(23,1,1) = {"
a
a
a
b
b
b
b
a
a
a
a
a
a
a
a
a
b
b
b
b
a
a
a
"}
+2 -2
View File
@@ -536,12 +536,12 @@ Turf and target are seperate in case you want to teleport some distance from a t
return 1
/proc/is_blocked_turf(turf/T)
/proc/is_blocked_turf(turf/T, exclude_mobs)
if(T.density)
return 1
for(var/i in T)
var/atom/A = i
if(A.density)
if(A.density && (!exclude_mobs || !ismob(A)))
return 1
return 0
+6 -6
View File
@@ -206,7 +206,7 @@
/datum/action/item_action/toggle_unfriendly_fire
name = "Toggle Friendly Fire \[ON\]"
desc = "Toggles if the staff causes friendly fire."
desc = "Toggles if the club's blasts cause friendly fire."
button_icon_state = "vortex_ff_on"
/datum/action/item_action/toggle_unfriendly_fire/Trigger()
@@ -214,8 +214,8 @@
UpdateButtonIcon()
/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon()
if(istype(target, /obj/item/weapon/hierophant_staff))
var/obj/item/weapon/hierophant_staff/H = target
if(istype(target, /obj/item/weapon/hierophant_club))
var/obj/item/weapon/hierophant_club/H = target
if(H.friendly_fire_check)
button_icon_state = "vortex_ff_off"
name = "Toggle Friendly Fire \[OFF\]"
@@ -226,12 +226,12 @@
/datum/action/item_action/vortex_recall
name = "Vortex Recall"
desc = "Recall yourself, and anyone nearby, to an attuned hierophant rune at any time.<br>If no such rune exists, will produce a rune at your location."
desc = "Recall yourself, and anyone nearby, to an attuned hierophant beacon at any time.<br>If the beacon is still attached, will detach it."
button_icon_state = "vortex_recall"
/datum/action/item_action/vortex_recall/IsAvailable()
if(istype(target, /obj/item/weapon/hierophant_staff))
var/obj/item/weapon/hierophant_staff/H = target
if(istype(target, /obj/item/weapon/hierophant_club))
var/obj/item/weapon/hierophant_club/H = target
if(H.teleporting)
return 0
return ..()
+1 -1
View File
@@ -124,7 +124,7 @@
/datum/map_template/ruin/lavaland/hierophant
name = "Hierophant's Arena"
id = "hierophant"
description = "A huge fucking bird priest awaits you in this arena."
description = "A strange, square chunk of metal of massive size. Inside awaits only death and many, many squares."
suffix = "lavaland_surface_hierophant.dmm"
cost = 0
allow_duplicates = FALSE
+3
View File
@@ -40,6 +40,9 @@
timerid = QDEL_IN(src, duration)
/obj/effect/overlay/temp/ex_act()
return
/obj/effect/overlay/temp/dir_setting
randomdir = FALSE
+7 -1
View File
@@ -43,7 +43,6 @@
..()
if(smooth)
queue_smooth(src)
icon_state = ""
/turf/closed/indestructible/riveted/uranium
icon = 'icons/turf/walls/uranium_wall.dmi'
@@ -97,3 +96,10 @@
icon_state = "necro"
explosion_block = 50
baseturf = /turf/closed/indestructible/necropolis
/turf/closed/indestructible/riveted/hierophant
name = "wall"
desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern."
icon = 'icons/turf/walls/hierophant_wall.dmi'
icon_state = "wall"
smooth = SMOOTH_TRUE
+14 -1
View File
@@ -31,6 +31,19 @@
if(prob(12))
icon_state = "necro[rand(2,3)]"
/turf/open/indestructible/hierophant
icon = 'icons/turf/floors/hierophant_floor.dmi'
initial_gas_mix = "o2=14;n2=23;TEMP=300"
baseturf = /turf/open/indestructible/hierophant
smooth = SMOOTH_TRUE
/turf/open/indestructible/hierophant/New()
..()
if(smooth)
queue_smooth(src)
/turf/open/indestructible/hierophant/two
/turf/open/Initalize_Atmos(times_fired)
excited = 0
@@ -198,7 +211,7 @@
if(wet == TURF_WET_PERMAFROST)
wet = TURF_WET_ICE
else if(wet == TURF_WET_ICE)
wet = TURF_WET_WATER
wet = TURF_WET_WATER
else
wet = TURF_DRY
if(wet_overlay)
+112 -53
View File
@@ -758,33 +758,41 @@
qdel(src)
//Hierophant
/obj/item/weapon/hierophant_staff
name = "Hierophant's staff"
desc = "A large club with intense magic power infused into it."
icon_state = "hierophant_staff"
item_state = "hierophant_staff"
icon = 'icons/obj/guns/magic.dmi'
/obj/item/weapon/hierophant_club
name = "hierophant club"
desc = "The strange technology of this large club allows various nigh-magical feats. It used to beat you, but now you can set the beat."
icon_state = "hierophant_club_ready_beacon"
item_state = "hierophant_club_ready_beacon"
icon = 'icons/obj/lavaland/artefacts.dmi'
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
inhand_x_dimension = 64
inhand_y_dimension = 64
slot_flags = SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 20
hitsound = "swing_hit"
//hitsound = 'sound/weapons/sonic_jackhammer.ogg'
force = 15
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
actions_types = list(/datum/action/item_action/vortex_recall, /datum/action/item_action/toggle_unfriendly_fire)
var/cooldown_time = 20 //how long the cooldown between non-melee ranged attacks is
var/chaser_cooldown = 101 //how long the cooldown between firing chasers at mobs is
var/chaser_cooldown = 81 //how long the cooldown between firing chasers at mobs is
var/chaser_timer = 0 //what our current chaser cooldown is
var/chaser_speed = 0.8 //how fast our chasers are
var/timer = 0 //what our current cooldown is
var/blast_range = 3 //how long the cardinal blast's walls are
var/obj/effect/hierophant/rune //the associated rune we teleport to
var/blast_range = 13 //how long the cardinal blast's walls are
var/obj/effect/hierophant/beacon //the associated beacon we teleport to
var/teleporting = FALSE //if we ARE teleporting
var/friendly_fire_check = FALSE //if the blasts we make will consider our faction against the faction of hit targets
/obj/item/weapon/hierophant_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
/obj/item/weapon/hierophant_club/examine(mob/user)
..()
user << "<span class='hierophant_warning'>The[beacon ? " beacon is not currently":"re is a beacon"] attached.</span>"
/obj/item/weapon/hierophant_club/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
..()
var/turf/T = get_turf(target)
if(!T || timer > world.time)
return
calculate_anger_mod(user)
timer = world.time + CLICK_CD_MELEE //by default, melee attacks only cause melee blasts, and have an accordingly short cooldown
if(proximity_flag)
addtimer(src, "aoe_burst", 0, TIMER_NORMAL, T, user)
@@ -797,77 +805,123 @@
timer = world.time + cooldown_time
if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one!
chaser_timer = world.time + chaser_cooldown
PoolOrNew(/obj/effect/overlay/temp/hierophant/chaser, list(get_turf(user), user, target, 1.5, friendly_fire_check))
PoolOrNew(/obj/effect/overlay/temp/hierophant/chaser, list(get_turf(user), user, target, chaser_speed, friendly_fire_check))
add_logs(user, target, "fired a chaser at", src)
else
addtimer(src, "cardinal_blasts", 0, TIMER_NORMAL, T, user) //otherwise, just do cardinal blast
add_logs(user, target, "fired cardinal blast at", src)
else
user << "<span class='warning'>That target is out of range!</span>" //too far away
timer = world.time
addtimer(src, "prepare_icon_update", 0)
/obj/item/weapon/hierophant_staff/ui_action_click(mob/user, action)
/obj/item/weapon/hierophant_club/proc/calculate_anger_mod(mob/user) //we get stronger as the user loses health
chaser_cooldown = initial(chaser_cooldown)
cooldown_time = initial(cooldown_time)
chaser_speed = initial(chaser_speed)
blast_range = initial(blast_range)
if(isliving(user))
var/mob/living/L = user
var/health_percent = L.health / L.maxHealth
chaser_cooldown += round(health_percent * 20) //two tenths of a second for each missing 10% of health
cooldown_time += round(health_percent * 10) //one tenth of a second for each missing 10% of health
chaser_speed = max(chaser_speed + health_percent, 0.5) //one tenth of a second faster for each missing 10% of health
blast_range -= round(health_percent * 10) //one additional range for each missing 10% of health
/obj/item/weapon/hierophant_club/update_icon()
icon_state = "hierophant_club[timer <= world.time ? "_ready":""][beacon ? "":"_beacon"]"
item_state = icon_state
if(ismob(loc))
var/mob/M = loc
M.update_inv_hands()
M.update_inv_back()
/obj/item/weapon/hierophant_club/proc/prepare_icon_update()
update_icon()
sleep(timer - world.time)
update_icon()
/obj/item/weapon/hierophant_club/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/toggle_unfriendly_fire)) //toggle friendly fire...
friendly_fire_check = !friendly_fire_check
user << "<span class='warning'>You toggle friendly fire [friendly_fire_check ? "off":"on"]!</span>"
return
if(!user.is_holding(src)) //you need to hold the staff to teleport
user << "<span class='warning'>You need to hold the staff in your hands to [rune ? "teleport with it":"create a rune"]!</span>"
if(timer > world.time)
return
if(!rune)
if(!user.is_holding(src)) //you need to hold the staff to teleport
user << "<span class='warning'>You need to hold the club in your hands to [beacon ? "teleport with it":"detach the beacon"]!</span>"
return
if(!beacon)
if(isturf(user.loc))
user.visible_message("<span class='hierophant_warning'>[user] holds [src] carefully in front of [user.p_them()], moving it in a strange pattern...</span>", \
"<span class='notice'>You start creating a hierophant rune to teleport to...</span>")
user.visible_message("<span class='hierophant_warning'>[user] starts fiddling with [src]'s pommel...</span>", \
"<span class='notice'>You start detaching the hierophant beacon...</span>")
timer = world.time + 51
if(do_after(user, 50, target = user))
addtimer(src, "prepare_icon_update", 0)
if(do_after(user, 50, target = user) && !beacon)
var/turf/T = get_turf(user)
playsound(T,'sound/magic/Blind.ogg', 200, 1, -4)
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(T, user))
var/obj/effect/hierophant/H = new/obj/effect/hierophant(T)
rune = H
beacon = new/obj/effect/hierophant(T)
user.update_action_buttons_icon()
user.visible_message("<span class='hierophant_warning'>[user] creates a strange rune beneath [user.p_them()]!</span>", \
"<span class='hierophant'>You create a hierophant rune, which you can teleport yourself and any allies to at any time!</span>\n\
<span class='notice'>You can remove the rune to place a new one by striking it with the staff.</span>")
user.visible_message("<span class='hierophant_warning'>[user] places a strange machine beneath [user.p_their()] feet!</span>", \
"<span class='hierophant'>You detach the hierophant beacon, allowing you to teleport yourself and any allies to it at any time!</span>\n\
<span class='notice'>You can remove the beacon to place it again by striking it with the club.</span>")
else
timer = world.time
addtimer(src, "prepare_icon_update", 0)
else
user << "<span class='warning'>You need to be on solid ground to produce a rune!</span>"
user << "<span class='warning'>You need to be on solid ground to detach the beacon!</span>"
return
if(get_dist(user, rune) <= 2) //rune too close abort
user << "<span class='warning'>You are too close to the rune to teleport to it!</span>"
if(get_dist(user, beacon) <= 2) //beacon too close abort
user << "<span class='warning'>You are too close to the beacon to teleport to it!</span>"
return
if(is_blocked_turf(get_turf(rune)))
user << "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>"
if(is_blocked_turf(get_turf(beacon), TRUE))
user << "<span class='warning'>The beacon is blocked by something, preventing teleportation!</span>"
return
if(!isturf(user.loc))
user << "<span class='warning'>You don't have enough space to teleport from here!</span>"
return
teleporting = TRUE //start channel
user.update_action_buttons_icon()
user.visible_message("<span class='hierophant_warning'>[user] starts to glow faintly...</span>")
timer = world.time + 50
if(do_after(user, 40, target = user) && rune)
var/turf/T = get_turf(rune)
addtimer(src, "prepare_icon_update", 0)
beacon.icon_state = "hierophant_tele_on"
var/obj/effect/overlay/temp/hierophant/telegraph/edge/TE1 = PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/edge, user.loc)
var/obj/effect/overlay/temp/hierophant/telegraph/edge/TE2 = PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/edge, beacon.loc)
if(do_after(user, 40, target = user) && user && beacon)
var/turf/T = get_turf(beacon)
var/turf/source = get_turf(user)
if(is_blocked_turf(T))
if(is_blocked_turf(T, TRUE))
teleporting = FALSE
user << "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>"
user << "<span class='warning'>The beacon is blocked by something, preventing teleportation!</span>"
user.update_action_buttons_icon()
timer = world.time
addtimer(src, "prepare_icon_update", 0)
beacon.icon_state = "hierophant_tele_off"
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, user))
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(source, user))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1)
playsound(source,'sound/magic/blink.ogg', 200, 1)
//playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1)
if(!do_after(user, 3, target = user) || !rune) //no walking away shitlord
playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1)
playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1)
if(!do_after(user, 3, target = user) || !user || !beacon) //no walking away shitlord
teleporting = FALSE
if(user)
user.update_action_buttons_icon()
timer = world.time
addtimer(src, "prepare_icon_update", 0)
if(beacon)
beacon.icon_state = "hierophant_tele_off"
return
if(is_blocked_turf(T))
if(is_blocked_turf(T, TRUE))
teleporting = FALSE
user << "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>"
user << "<span class='warning'>The beacon is blocked by something, preventing teleportation!</span>"
user.update_action_buttons_icon()
timer = world.time
addtimer(src, "prepare_icon_update", 0)
beacon.icon_state = "hierophant_tele_off"
return
add_logs(user, rune, "teleported self from ([source.x],[source.y],[source.z]) to")
add_logs(user, beacon, "teleported self from ([source.x],[source.y],[source.z]) to")
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(T, user))
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(source, user))
for(var/t in RANGE_TURFS(1, T))
@@ -879,15 +933,22 @@
for(var/mob/living/L in range(1, source))
addtimer(src, "teleport_mob", 0, TIMER_NORMAL, source, L, T, user) //regardless, take all mobs near us along
sleep(6) //at this point the blasts detonate
if(beacon)
beacon.icon_state = "hierophant_tele_off"
else
qdel(TE1)
qdel(TE2)
timer = world.time
addtimer(src, "prepare_icon_update", 0)
if(beacon)
beacon.icon_state = "hierophant_tele_off"
teleporting = FALSE
if(user)
user.update_action_buttons_icon()
/obj/item/weapon/hierophant_staff/proc/teleport_mob(turf/source, mob/M, turf/target, mob/user)
/obj/item/weapon/hierophant_club/proc/teleport_mob(turf/source, mob/M, turf/target, mob/user)
var/turf/turf_to_teleport_to = get_step(target, get_dir(source, M)) //get position relative to caster
if(!turf_to_teleport_to || is_blocked_turf(turf_to_teleport_to))
if(!turf_to_teleport_to || is_blocked_turf(turf_to_teleport_to, TRUE))
return
animate(M, alpha = 0, time = 2, easing = EASE_OUT) //fade out
sleep(1)
@@ -909,18 +970,17 @@
if(user != M)
add_logs(user, M, "teleported", null, "from ([source.x],[source.y],[source.z])")
/obj/item/weapon/hierophant_staff/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay
/obj/item/weapon/hierophant_club/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay
if(!T)
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/cardinal, list(T, user))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
sleep(2)
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(T, user, friendly_fire_check))
for(var/d in cardinal)
addtimer(src, "blast_wall", 0, TIMER_NORMAL, T, d, user)
/obj/item/weapon/hierophant_staff/proc/blast_wall(turf/T, dir, mob/living/user) //make a wall of blasts blast_range tiles long
/obj/item/weapon/hierophant_club/proc/blast_wall(turf/T, dir, mob/living/user) //make a wall of blasts blast_range tiles long
if(!T)
return
var/range = blast_range
@@ -933,12 +993,11 @@
previousturf = J
J = get_step(previousturf, dir)
/obj/item/weapon/hierophant_staff/proc/aoe_burst(turf/T, mob/living/user) //make a 3x3 blast around a target
/obj/item/weapon/hierophant_club/proc/aoe_burst(turf/T, mob/living/user) //make a 3x3 blast around a target
if(!T)
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, user))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
sleep(2)
for(var/t in RANGE_TURFS(1, T))
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(t, user, friendly_fire_check))
@@ -3,7 +3,7 @@
The Hierophant
The Hierophant spawns in its arena, an area designed to make it harder to fight than it would otherwise be.
The Hierophant spawns in its arena, which makes fighting it challenging but not impossible.
The text this boss speaks is ROT4, use ROT22 to decode
@@ -21,51 +21,53 @@ The Hierophant's attacks are as follows, and INTENSIFY at a random chance based
If chasers are off cooldown, creates four high-speed chasers.
- IF TARGET WAS STRUCK IN MELEE: Creates a 3x3 square of blasts under the target.
Cross Blasts and the AoE burst gain additional range as the Hierophant loses health, while Chasers gain additional speed.
- IF TARGET IS OUTSIDE THE ARENA: Creates an arena around the target for 10 seconds, blinking to it if Hierophant is not in the arena.
The arena has a 20 second cooldown, giving people a small window to get the fuck out.
When The Hierophant dies, it leaves behind its staff, which, while much weaker than when wielded by The Hierophant itself, is still quite effective.
- The staff can place a teleport rune, allowing the user to teleport themself and their allies to the rune.
Cross Blasts and the AoE burst gain additional range as Hierophant loses health, while Chasers gain additional speed.
When Hierophant dies, it stops trying to murder you and shrinks into a small form, which, while much weaker, is still quite effective.
- The smaller club can place a teleport beacon, allowing the user to teleport themself and their allies to the beacon.
Difficulty: Hard
*/
/mob/living/simple_animal/hostile/megafauna/hierophant
name = "Hierophant"
desc = "Stolen from Hyper Light Drifter."
name = "hierophant"
desc = "A massive metal club that hangs in the air as though waiting. It'll make you dance to its beat."
health = 2500
maxHealth = 2500
attacktext = "clubs"
//attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
attack_sound = "swing_hit"
attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
icon_state = "hierophant"
icon_living = "hierophant"
friendly = "stares down"
icon = 'icons/mob/lavaland/hierophant.dmi'
icon = 'icons/mob/lavaland/hierophant_new.dmi'
faction = list("boss") //asteroid mobs? get that shit out of my beautiful square house
speak_emote = list("preaches")
armour_penetration = 50
melee_damage_lower = 10
melee_damage_upper = 10
melee_damage_lower = 15
melee_damage_upper = 15
speed = 1
move_to_delay = 10
ranged = 1
pixel_x = -16
ranged_cooldown_time = 40
aggro_vision_range = 23
loot = list(/obj/item/weapon/hierophant_staff)
aggro_vision_range = 21 //so it can see to one side of the arena to the other
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
var/chaser_speed = 3 //how fast chasers are currently
var/chaser_cooldown = 101 //base cooldown/cooldown var between spawning chasers
var/major_attack_cooldown = 60 //base cooldown for major attacks
var/arena_cooldown = 200 //base cooldown/cooldown var for creating an arena
var/blinking = FALSE //if we're doing something that requires us to stand still and not attack
var/obj/effect/hierophant/spawned_rune //the rune we teleport back to
var/timeout_time = 15 //after this many Life() ticks with no target, we return to our rune
var/did_reset = TRUE //if we timed out, returned to our rune, and healed some
//var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...")
//var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.")
var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to
var/timeout_time = 15 //after this many Life() ticks with no target, we return to our beacon
var/did_reset = TRUE //if we timed out, returned to our beacon, and healed some
var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...", "Kix fiex. Liepmrk...")
var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.")
medal_type = MEDAL_PREFIX
score_type = BIRD_SCORE
del_on_death = TRUE
@@ -74,25 +76,25 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/hierophant/New()
..()
internal = new/obj/item/device/gps/internal/hierophant(src)
spawned_rune = new(loc)
spawned_beacon = new(loc)
/mob/living/simple_animal/hostile/megafauna/hierophant/Life()
. = ..()
if(. && spawned_rune && !client)
if(target || loc == spawned_rune.loc)
if(. && spawned_beacon && !qdeleted(spawned_beacon) && !client)
if(target || loc == spawned_beacon.loc)
timeout_time = initial(timeout_time)
else
timeout_time--
if(timeout_time <= 0 && !did_reset)
did_reset = TRUE
//visible_message("<span class='hierophant'>\"Vixyvrmrk xs fewi...\"</span>")
blink(spawned_rune)
adjustHealth(min((health - maxHealth) * 0.5, -50)) //heal for 50% of our missing health
visible_message("<span class='hierophant_warning'>\"Vixyvrmrk xs fewi...\"</span>")
blink(spawned_beacon)
adjustHealth(min((health - maxHealth) * 0.5, -250)) //heal for 50% of our missing health, minimum 10% of maximum health
wander = FALSE
/*if(health > maxHealth * 0.9)
if(health > maxHealth * 0.9)
visible_message("<span class='hierophant'>\"Vitemvw gsqtpixi. Stivexmrk ex qebmqyq ijjmgmirgc.\"</span>")
else
visible_message("<span class='hierophant'>\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"</span>")*/
visible_message("<span class='hierophant'>\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"</span>")
/mob/living/simple_animal/hostile/megafauna/hierophant/death()
if(health > 0 || stat == DEAD)
@@ -100,36 +102,33 @@ Difficulty: Hard
else
stat = DEAD
blinking = TRUE //we do a fancy animation, release a huge burst(), and leave our staff.
animate(src, alpha = 0, color = "660099", time = 20, easing = EASE_OUT)
addtimer(src, "update_atom_colour", 20)
burst_range = 10
//visible_message("<span class='hierophant'>\"Mrmxmexmrk wipj-hiwxvygx wiuyirgi...\"</span>")
visible_message("<span class='hierophant_warning'>[src] disappears in a massive burst of magic, leaving only its staff.</span>")
visible_message("<span class='hierophant'>\"Mrmxmexmrk wipj-hiwxvygx wiuyirgi...\"</span>")
visible_message("<span class='hierophant_warning'>[src] shrinks, releasing a massive burst of energy!</span>")
burst(get_turf(src))
..()
/mob/living/simple_animal/hostile/megafauna/hierophant/Destroy()
qdel(spawned_rune)
qdel(spawned_beacon)
. = ..()
/mob/living/simple_animal/hostile/megafauna/hierophant/devour(mob/living/L)
for(var/obj/item/W in L)
if(!L.unEquip(W))
qdel(W)
/*visible_message(
"<span class='hierophant'>\"[pick(kill_phrases)]\"</span>\n<span class='hierophant_warning'>[src] annihilates [L]!</span>",
"<span class='userdanger'>You annihilate [L], restoring your health!</span>")*/
visible_message(
"<span class='hierophant'>\"Caw.\"</span>\n<span class='hierophant_warning'>[src] annihilates [L]!</span>",
"<span class='hierophant_warning'>\"[pick(kill_phrases)]\"\n[src] annihilates [L]!</span>",
"<span class='userdanger'>You annihilate [L], restoring your health!</span>")
adjustHealth(-L.maxHealth*0.5)
L.dust()
/*/mob/living/simple_animal/hostile/megafauna/hierophant/GiveTarget(new_target)
/mob/living/simple_animal/hostile/megafauna/hierophant/GiveTarget(new_target)
var/targets_the_same = (new_target == target)
. = ..()
if(. && target && !targets_the_same)
visible_message("<span class='hierophant'>\"[pick(target_phrases)]\"</span>")*/
visible_message("<span class='hierophant_warning'>\"[pick(target_phrases)]\"</span>")
if(spawned_beacon && loc == spawned_beacon.loc && did_reset)
arena_trap(src)
/mob/living/simple_animal/hostile/megafauna/hierophant/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
. = ..()
@@ -149,9 +148,14 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/hierophant/Move()
if(!blinking)
/*if(!stat)
playsound(loc, 'sound/mecha/mechmove04.ogg', 150, 1, -4)*/
..()
var/prevloc = loc
. = ..()
if(!stat && .)
var/obj/effect/overlay/temp/hierophant/squares/HS = PoolOrNew(/obj/effect/overlay/temp/hierophant/squares, prevloc)
HS.dir = dir
playsound(loc, 'sound/mecha/mechmove04.ogg', 150, 1, -4)
if(target)
arena_trap(target)
/mob/living/simple_animal/hostile/megafauna/hierophant/Goto(target, delay, minimum_distance)
wander = TRUE
@@ -177,6 +181,8 @@ Difficulty: Hard
chaser_speed = max(1, (3 - anger_modifier * 0.04) + target_is_slow * 0.5)
if(blinking)
return
arena_trap(target)
ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75) //scale cooldown lower with high anger.
if(prob(anger_modifier * 0.75)) //major ranged attack
@@ -197,7 +203,7 @@ Difficulty: Hard
switch(pick(possibilities))
if("blink_spam") //blink either once or multiple times.
if(health < maxHealth * 0.5 && !target_is_slow && blink_counter > 1)
//visible_message("<span class='hierophant'>\"Mx ampp rsx iwgeti.\"</span>")
visible_message("<span class='hierophant'>\"Mx ampp rsx iwgeti.\"</span>")
var/oldcolor = color
animate(src, color = "#660099", time = 6)
while(health && target && blink_counter)
@@ -215,13 +221,13 @@ Difficulty: Hard
else
blink(target)
if("cross_blast_spam") //fire a lot of cross blasts at a target.
//visible_message("<span class='hierophant'>\"Piezi mx rsalivi xs vyr.\"</span>")
visible_message("<span class='hierophant'>\"Piezi mx rsalivi xs vyr.\"</span>")
blinking = TRUE
var/oldcolor = color
animate(src, color = "#660099", time = 6)
while(health && target && cross_counter)
cross_counter--
var/delay = 6
var/delay = 7
if(prob(60))
addtimer(src, "cardinal_blasts", 0, TIMER_NORMAL, target)
else
@@ -233,7 +239,7 @@ Difficulty: Hard
sleep(8)
blinking = FALSE
if("chaser_swarm") //fire four fucking chasers at a target and their friends.
//visible_message("<span class='hierophant'>\"Mx gerrsx lmhi.\"</span>")
visible_message("<span class='hierophant'>\"Mx gerrsx lmhi.\"</span>")
blinking = TRUE
var/oldcolor = color
animate(src, color = "#660099", time = 10)
@@ -243,7 +249,7 @@ Difficulty: Hard
var/mob/living/pickedtarget = pick(targets)
if(targets.len > 4)
pickedtarget = pick_n_take(targets)
if(pickedtarget.stat == DEAD)
if(!istype(pickedtarget) || pickedtarget.stat == DEAD)
pickedtarget = target
var/obj/effect/overlay/temp/hierophant/chaser/C = PoolOrNew(/obj/effect/overlay/temp/hierophant/chaser, list(loc, src, pickedtarget, chaser_speed, FALSE))
C.moving = 3
@@ -289,8 +295,7 @@ Difficulty: Hard
if(!T)
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/diagonal, list(T, src))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
sleep(2)
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(T, src, FALSE))
for(var/d in diagonals)
@@ -301,8 +306,7 @@ Difficulty: Hard
if(!T)
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/cardinal, list(T, src))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
sleep(2)
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(T, src, FALSE))
for(var/d in cardinal)
@@ -313,21 +317,46 @@ Difficulty: Hard
if(!T)
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, src))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
sleep(2)
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(T, src, FALSE))
for(var/d in alldirs)
addtimer(src, "blast_wall", 0, TIMER_NORMAL, T, d)
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blast_wall(turf/T, dir) //make a wall of blasts beam_range tiles long
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blast_wall(turf/T, set_dir) //make a wall of blasts beam_range tiles long
var/range = beam_range
var/turf/previousturf = T
var/turf/J = get_step(previousturf, dir)
var/turf/J = get_step(previousturf, set_dir)
for(var/i in 1 to range)
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(J, src, FALSE))
previousturf = J
J = get_step(previousturf, dir)
J = get_step(previousturf, set_dir)
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/arena_trap(mob/victim) //trap a target in an arena
var/turf/T = get_turf(victim)
if(!istype(victim) || victim.stat == DEAD || !T || arena_cooldown > world.time)
return
if((istype(get_area(T), /area/ruin/unpowered/hierophant) || istype(get_area(src), /area/ruin/unpowered/hierophant)) && victim != src)
return
arena_cooldown = world.time + initial(arena_cooldown)
for(var/d in cardinal)
addtimer(src, "arena_squares", 0, TIMER_NORMAL, T, d)
for(var/t in RANGE_TURFS(11, T))
if(t && get_dist(t, T) == 11)
new /obj/effect/overlay/temp/hierophant/wall(t)
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(t, src, FALSE))
if(get_dist(src, T) >= 11) //hey you're out of range I need to get closer to you!
addtimer(src, "blink", 0, TIMER_NORMAL, T)
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/arena_squares(turf/T, set_dir) //make a fancy effect extending from the arena target
var/turf/previousturf = T
var/turf/J = get_step(previousturf, set_dir)
for(var/i in 1 to 10)
var/obj/effect/overlay/temp/hierophant/squares/HS = PoolOrNew(/obj/effect/overlay/temp/hierophant/squares, J)
HS.dir = set_dir
previousturf = J
J = get_step(previousturf, set_dir)
sleep(0.5)
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/blink(mob/victim) //blink to a target
if(blinking || !victim)
@@ -336,10 +365,8 @@ Difficulty: Hard
var/turf/source = get_turf(src)
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, src))
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(source, src))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1)
playsound(source,'sound/magic/blink.ogg', 200, 1)
//playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1)
playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1)
playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1)
blinking = TRUE
sleep(2) //short delay before we start...
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(T, src))
@@ -371,15 +398,13 @@ Difficulty: Hard
if(!T)
return
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, src))
playsound(T,'sound/magic/blink.ogg', 200, 1)
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
playsound(T,'sound/effects/bin_close.ogg', 200, 1)
sleep(2)
for(var/t in RANGE_TURFS(1, T))
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(t, src, FALSE))
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original) //release a wave of blasts
playsound(original,'sound/magic/blink.ogg', 200, 1)
//playsound(original,'sound/machines/AirlockOpen.ogg', 200, 1)
playsound(original,'sound/machines/AirlockOpen.ogg', 200, 1)
var/last_dist = 0
for(var/t in spiral_range_turfs(burst_range, original))
var/turf/T = t
@@ -388,7 +413,7 @@ Difficulty: Hard
var/dist = get_dist(original, T)
if(dist > last_dist)
last_dist = dist
sleep(1 + (burst_range - last_dist) * 0.5) //gets faster as it gets further out
sleep(1 + min(burst_range - last_dist, 12) * 0.5) //gets faster as it gets further out
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(T, src, FALSE))
/mob/living/simple_animal/hostile/megafauna/hierophant/AltClickOn(atom/A) //player control handler(don't give this to a player holy fuck)
@@ -398,6 +423,7 @@ Difficulty: Hard
//Hierophant overlays
/obj/effect/overlay/temp/hierophant
name = "vortex energy"
layer = BELOW_MOB_LAYER
var/mob/living/caster //who made this, anyway
@@ -406,6 +432,41 @@ Difficulty: Hard
if(new_caster)
caster = new_caster
/obj/effect/overlay/temp/hierophant/squares
icon_state = "hierophant_squares"
duration = 3
luminosity = 1
randomdir = FALSE
/obj/effect/overlay/temp/hierophant/squares/New(loc, new_caster)
..()
if(ismineralturf(loc))
var/turf/closed/mineral/M = loc
M.gets_drilled(caster)
/obj/effect/overlay/temp/hierophant/wall //smoothing and pooling are not friends. TODO: figure this out
name = "vortex wall"
icon = 'icons/turf/walls/hierophant_wall_temp.dmi'
icon_state = "wall"
luminosity = 1
duration = 100
smooth = SMOOTH_TRUE
/obj/effect/overlay/temp/hierophant/wall/New(loc, new_caster)
..()
queue_smooth_neighbors(src)
queue_smooth(src)
/obj/effect/overlay/temp/hierophant/wall/Destroy()
queue_smooth_neighbors(src)
..()
return QDEL_HINT_QUEUE
/obj/effect/overlay/temp/hierophant/wall/CanPass(atom/movable/mover, turf/target, height = 0)
if(mover == caster)
return TRUE
return FALSE
/obj/effect/overlay/temp/hierophant/chaser //a hierophant's chaser. follows target around, moving and producing a blast every speed deciseconds.
duration = 98
var/mob/living/target //what it's following
@@ -483,6 +544,10 @@ Difficulty: Hard
icon_state = "hierophant_telegraph_teleport"
duration = 9
/obj/effect/overlay/temp/hierophant/telegraph/edge
icon_state = "hierophant_telegraph_edge"
duration = 40
/obj/effect/overlay/temp/hierophant/blast
icon_state = "hierophant_blast"
name = "vortex blast"
@@ -545,34 +610,40 @@ Difficulty: Hard
M.take_damage(damage, BURN, 0, 0)
/obj/effect/hierophant
name = "hierophant rune"
desc = "A powerful magic mark allowing whomever attunes themself to it to return to it at will."
icon = 'icons/obj/rune.dmi'
icon_state = "hierophant"
name = "hierophant beacon"
desc = "A strange beacon, allowing mass teleportation for those able to use it."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "hierophant_tele_off"
luminosity = 2
layer = LOW_OBJ_LAYER
anchored = TRUE
color = "#CC00FF"
/obj/effect/hierophant/ex_act()
return
/obj/effect/hierophant/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/hierophant_staff))
var/obj/item/weapon/hierophant_staff/H = I
if(H.rune == src)
user << "<span class='notice'>You start removing your hierophant rune...</span>"
if(istype(I, /obj/item/weapon/hierophant_club))
var/obj/item/weapon/hierophant_club/H = I
if(H.timer > world.time)
return
if(H.beacon == src)
user << "<span class='notice'>You start removing your hierophant beacon...</span>"
H.timer = world.time + 51
addtimer(H, "prepare_icon_update", 0)
if(do_after(user, 50, target = src))
playsound(src,'sound/magic/Blind.ogg', 200, 1, -4)
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(get_turf(src), user))
user << "<span class='hierophant_warning'>You touch the rune with the staff, dispelling it!</span>"
H.rune = null
user << "<span class='hierophant_warning'>You collect [src], reattaching it to the club!</span>"
H.beacon = null
user.update_action_buttons_icon()
qdel(src)
else
H.timer = world.time
addtimer(H, "prepare_icon_update", 0)
else
user << "<span class='hierophant_warning'>You touch the rune with the staff, but nothing happens.</span>"
user << "<span class='hierophant_warning'>You touch the beacon with the club, but nothing happens.</span>"
else
..()
return ..()
/obj/item/device/gps/internal/hierophant
icon_state = null
@@ -580,21 +651,4 @@ Difficulty: Hard
desc = "Heed its words."
invisibility = 100
/turf/open/indestructible/hierophant
icon_state = "hierophant1"
initial_gas_mix = "o2=14;n2=23;TEMP=300"
desc = "A floor with a square pattern. It's faintly cool to the touch."
/turf/open/indestructible/hierophant/New()
..()
if(prob(50))
icon_state = "hierophant2"
/turf/closed/indestructible/riveted/hierophant
name = "wall"
desc = "A wall made out of smooth, cold stone."
icon = 'icons/turf/walls/hierophant_wall.dmi'
icon_state = "hierophant"
smooth = SMOOTH_TRUE
#undef MEDAL_PREFIX
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 KiB

After

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 937 B

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+2 -2
View File
@@ -71,8 +71,8 @@ h1.alert, h2.alert {color: #000000;}
.cultlarge {color: #960000; font-weight: bold; font-size: 3;}
.narsie {color: #960000; font-weight: bold; font-size: 15;}
.colossus {color: #7F282A; font-size: 5;}
.hierophant {color: #660099; font-weight: bold; font-size: 4;}
.hierophant_warning {color: #660099; font-weight: bold; font-style: italic;}
.hierophant {color: #660099; font-weight: bold; font-style: italic;}
.hierophant_warning {color: #660099; font-style: italic;}
.purple {color: #5e2d79;}
.holoparasite {color: #35333a;}
.holoparasitebold {color: #35333a; font-weight: bold;}